From 62f94be845e057ed56f37f4cad7736477e130033 Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Fri, 20 Mar 2026 19:36:04 -0700 Subject: [PATCH] feat(backend): add GET /api/diagnostics/config route + test - Returns sanitized config: productId, serviceName, port, nodeEnv, dbProvider, telemetryEnabled, featureFlagsEnabled - Integration test validates response shape --- backend/src/diagnostics.test.ts | 24 ++++++++++++++++++++++++ backend/src/server.ts | 10 ++++++++++ 2 files changed, 34 insertions(+) diff --git a/backend/src/diagnostics.test.ts b/backend/src/diagnostics.test.ts index aa88431..ffc0a7c 100644 --- a/backend/src/diagnostics.test.ts +++ b/backend/src/diagnostics.test.ts @@ -3,6 +3,8 @@ import Fastify from 'fastify'; import type { FastifyInstance } from 'fastify'; import { getAllFlags } from './lib/feature-flags.js'; import { getBufferedEvents, flushEvents } from './lib/telemetry.js'; +import { config } from './lib/config.js'; +import { PRODUCT_ID } from './lib/product-config.js'; let app: FastifyInstance; @@ -11,6 +13,15 @@ beforeAll(async () => { app.get('/api/diagnostics/flags', async () => getAllFlags()); app.get('/api/diagnostics/telemetry', async () => ({ events: getBufferedEvents() })); app.post('/api/diagnostics/telemetry/flush', async () => ({ flushed: flushEvents().length })); + app.get('/api/diagnostics/config', async () => ({ + productId: PRODUCT_ID, + serviceName: config.SERVICE_NAME, + port: config.PORT, + nodeEnv: config.NODE_ENV, + dbProvider: config.DB_PROVIDER, + telemetryEnabled: config.TELEMETRY_ENABLED, + featureFlagsEnabled: config.FEATURE_FLAGS_ENABLED, + })); await app.ready(); }); @@ -42,4 +53,17 @@ describe('diagnostics routes', () => { expect(body).toHaveProperty('flushed'); expect(typeof body.flushed).toBe('number'); }); + + it('GET /api/diagnostics/config returns sanitized config', async () => { + const res = await app.inject({ method: 'GET', url: '/api/diagnostics/config' }); + expect(res.statusCode).toBe(200); + const body = res.json(); + expect(body).toHaveProperty('productId'); + expect(body).toHaveProperty('serviceName'); + expect(body).toHaveProperty('port'); + expect(body).toHaveProperty('nodeEnv'); + expect(body).toHaveProperty('dbProvider'); + expect(typeof body.telemetryEnabled).toBe('boolean'); + expect(typeof body.featureFlagsEnabled).toBe('boolean'); + }); }); diff --git a/backend/src/server.ts b/backend/src/server.ts index 4f75324..30106c2 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -17,6 +17,7 @@ import { initDatastore } from './lib/datastore.js'; import { config } from './lib/config.js'; import { getAllFlags } from './lib/feature-flags.js'; import { getBufferedEvents, flushEvents } from './lib/telemetry.js'; +import { PRODUCT_ID } from './lib/product-config.js'; import { jwtVerify } from 'jose'; import type { JwtPayload } from './lib/request-context.js'; @@ -56,5 +57,14 @@ await app.register(webhookRoutes, { prefix: '/api' }); app.get('/api/diagnostics/flags', async () => getAllFlags()); app.get('/api/diagnostics/telemetry', async () => ({ events: getBufferedEvents() })); app.post('/api/diagnostics/telemetry/flush', async () => ({ flushed: flushEvents().length })); +app.get('/api/diagnostics/config', async () => ({ + productId: PRODUCT_ID, + serviceName: config.SERVICE_NAME, + port: config.PORT, + nodeEnv: config.NODE_ENV, + dbProvider: config.DB_PROVIDER, + telemetryEnabled: config.TELEMETRY_ENABLED, + featureFlagsEnabled: config.FEATURE_FLAGS_ENABLED, +})); await startService(app, { port: config.PORT, host: config.HOST });