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, FEATURE_FLAGS_ENABLED, DB_PROVIDER=memory, JWT_SECRET dev default
- 80/80 tests pass (integration tests now work without env vars)
This commit is contained in:
saravanakumardb1 2026-03-20 17:31:53 -07:00
parent fa1377892c
commit 21ad6ed978
5 changed files with 56 additions and 0 deletions

View File

@ -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",
@ -52,6 +54,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",
@ -399,6 +417,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

View File

@ -19,6 +19,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",

View File

@ -5,11 +5,15 @@ import { PRODUCT_ID } from './product-config.js';
const envSchema = baseBackendConfigSchema.extend({
PORT: baseBackendConfigSchema.shape.PORT.default(4016),
SERVICE_NAME: baseBackendConfigSchema.shape.SERVICE_NAME.default('notelett-backend'),
DB_PROVIDER: baseBackendConfigSchema.shape.DB_PROVIDER.default('memory'),
JWT_SECRET: z.string().default('dev-secret-do-not-use-in-prod'),
COSMOS_DATABASE: baseBackendConfigSchema.shape.COSMOS_DATABASE.default('bytelyst'),
PRODUCT_ID: z.string().default(PRODUCT_ID),
PLATFORM_SERVICE_URL: z.string().default('http://localhost:4003'),
EXTRACTION_SERVICE_URL: z.string().default('http://localhost:4005'),
MCP_SERVER_URL: z.string().default('http://localhost:4007'),
TELEMETRY_ENABLED: z.coerce.boolean().default(false),
FEATURE_FLAGS_ENABLED: z.coerce.boolean().default(false),
});
export const config = envSchema.parse(process.env);

View File

@ -0,0 +1,16 @@
import { createFlagRegistry } from '@bytelyst/backend-flags';
import { config } from './config.js';
const registry = createFlagRegistry({
defaults: {
'notes.enabled': true,
'workspaces.enabled': true,
'relationships.enabled': true,
'tasks.enabled': true,
'artifacts.enabled': true,
'mcp.enabled': true,
},
enabled: config.FEATURE_FLAGS_ENABLED,
});
export const { isFeatureEnabled, getAllFlags, setFlag } = registry;

View 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;