feat(backend): add @bytelyst/backend-flags + backend-telemetry, fix config defaults
- Add @bytelyst/backend-flags and @bytelyst/backend-telemetry packages - Create feature-flags.ts and telemetry.ts wrappers using shared packages - Add TELEMETRY_ENABLED and FEATURE_FLAGS_ENABLED config fields - Default DB_PROVIDER to memory (fixes test failures without env vars) - Add JWT_SECRET dev default and PLATFORM_SERVICE_URL - 176/176 tests pass
This commit is contained in:
parent
15f34c1c80
commit
bc735dfdb9
26
backend/package-lock.json
generated
26
backend/package-lock.json
generated
@ -11,6 +11,8 @@
|
||||
"@azure/cosmos": "^4.2.0",
|
||||
"@bytelyst/auth": "file:../../learning_ai_common_plat/packages/auth",
|
||||
"@bytelyst/backend-config": "file:../../learning_ai_common_plat/packages/backend-config",
|
||||
"@bytelyst/backend-flags": "file:../../learning_ai_common_plat/packages/backend-flags",
|
||||
"@bytelyst/backend-telemetry": "file:../../learning_ai_common_plat/packages/backend-telemetry",
|
||||
"@bytelyst/config": "file:../../learning_ai_common_plat/packages/config",
|
||||
"@bytelyst/cosmos": "file:../../learning_ai_common_plat/packages/cosmos",
|
||||
"@bytelyst/datastore": "file:../../learning_ai_common_plat/packages/datastore",
|
||||
@ -50,6 +52,22 @@
|
||||
"vitest": "^3.0.5"
|
||||
}
|
||||
},
|
||||
"../../learning_ai_common_plat/packages/backend-flags": {
|
||||
"name": "@bytelyst/backend-flags",
|
||||
"version": "0.1.0",
|
||||
"devDependencies": {
|
||||
"typescript": "^5.7.3",
|
||||
"vitest": "^3.0.5"
|
||||
}
|
||||
},
|
||||
"../../learning_ai_common_plat/packages/backend-telemetry": {
|
||||
"name": "@bytelyst/backend-telemetry",
|
||||
"version": "0.1.0",
|
||||
"devDependencies": {
|
||||
"typescript": "^5.7.3",
|
||||
"vitest": "^3.0.5"
|
||||
}
|
||||
},
|
||||
"../../learning_ai_common_plat/packages/config": {
|
||||
"name": "@bytelyst/config",
|
||||
"version": "0.1.0",
|
||||
@ -375,6 +393,14 @@
|
||||
"resolved": "../../learning_ai_common_plat/packages/backend-config",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/@bytelyst/backend-flags": {
|
||||
"resolved": "../../learning_ai_common_plat/packages/backend-flags",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/@bytelyst/backend-telemetry": {
|
||||
"resolved": "../../learning_ai_common_plat/packages/backend-telemetry",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/@bytelyst/config": {
|
||||
"resolved": "../../learning_ai_common_plat/packages/config",
|
||||
"link": true
|
||||
|
||||
@ -18,6 +18,8 @@
|
||||
"@bytelyst/cosmos": "file:../../learning_ai_common_plat/packages/cosmos",
|
||||
"@bytelyst/datastore": "file:../../learning_ai_common_plat/packages/datastore",
|
||||
"@bytelyst/backend-config": "file:../../learning_ai_common_plat/packages/backend-config",
|
||||
"@bytelyst/backend-flags": "file:../../learning_ai_common_plat/packages/backend-flags",
|
||||
"@bytelyst/backend-telemetry": "file:../../learning_ai_common_plat/packages/backend-telemetry",
|
||||
"@bytelyst/errors": "file:../../learning_ai_common_plat/packages/errors",
|
||||
"@bytelyst/fastify-auth": "file:../../learning_ai_common_plat/packages/fastify-auth",
|
||||
"@bytelyst/fastify-core": "file:../../learning_ai_common_plat/packages/fastify-core",
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
import { z } from 'zod';
|
||||
import { baseBackendConfigSchema } from '@bytelyst/backend-config';
|
||||
|
||||
const envSchema = baseBackendConfigSchema.extend({
|
||||
PORT: baseBackendConfigSchema.shape.PORT.default(4011),
|
||||
SERVICE_NAME: baseBackendConfigSchema.shape.SERVICE_NAME.default('chronomind-backend'),
|
||||
}).refine(
|
||||
data => data.DB_PROVIDER === 'memory' || (data.COSMOS_ENDPOINT.length > 0 && data.COSMOS_KEY.length > 0),
|
||||
{ message: 'COSMOS_ENDPOINT and COSMOS_KEY are required when DB_PROVIDER is cosmos' }
|
||||
);
|
||||
DB_PROVIDER: baseBackendConfigSchema.shape.DB_PROVIDER.default('memory'),
|
||||
JWT_SECRET: z.string().default('dev-secret-do-not-use-in-prod'),
|
||||
PLATFORM_SERVICE_URL: z.string().default('http://localhost:4003'),
|
||||
TELEMETRY_ENABLED: z.coerce.boolean().default(false),
|
||||
FEATURE_FLAGS_ENABLED: z.coerce.boolean().default(false),
|
||||
});
|
||||
|
||||
export const config = envSchema.parse(process.env);
|
||||
|
||||
15
backend/src/lib/feature-flags.ts
Normal file
15
backend/src/lib/feature-flags.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { createFlagRegistry } from '@bytelyst/backend-flags';
|
||||
import { config } from './config.js';
|
||||
|
||||
const registry = createFlagRegistry({
|
||||
defaults: {
|
||||
'timers.cascade': true,
|
||||
'timers.linked': true,
|
||||
'routines.enabled': true,
|
||||
'households.enabled': true,
|
||||
'shared_timers.enabled': true,
|
||||
},
|
||||
enabled: config.FEATURE_FLAGS_ENABLED,
|
||||
});
|
||||
|
||||
export const { isFeatureEnabled, getAllFlags, setFlag } = registry;
|
||||
8
backend/src/lib/telemetry.ts
Normal file
8
backend/src/lib/telemetry.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import { createTelemetryBuffer } from '@bytelyst/backend-telemetry';
|
||||
import { config } from './config.js';
|
||||
|
||||
export type { TelemetryEvent } from '@bytelyst/backend-telemetry';
|
||||
|
||||
const buffer = createTelemetryBuffer({ enabled: config.TELEMETRY_ENABLED });
|
||||
|
||||
export const { trackEvent, getBufferedEvents, flushEvents } = buffer;
|
||||
Loading…
Reference in New Issue
Block a user