openvibers/openvibe.ai Commits

Allow browser SDK reads of measured metrics (#443)

OP OpenVibers committed 3 days ago · 5e35a01415 · 2 files, +4 −2

Changes

ddiff --git a/server/api/measured-metrics.js b/server/api/measured-metrics.js
iindex 10ff40f..a18fe89 100644
---- a/server/api/measured-metrics.js
++++ b/server/api/measured-metrics.js
@@@ -9,7 +9,7 @@ function measuredMetricsRouter({ db, clock = { now: () => Date.now() }, log = co
if (!['GET', 'OPTIONS'].includes(req.method)) return next();
res.set('Access-Control-Allow-Origin', '*');
if (req.method === 'OPTIONS') return res.set({ 'Access-Control-Allow-Methods': 'GET, OPTIONS',
-- 'Access-Control-Allow-Headers': 'Accept, Content-Type, Authorization', 'Access-Control-Max-Age': '600' }).sendStatus(204);
++ 'Access-Control-Allow-Headers': 'Accept, Content-Type, Authorization, traceparent, X-OpenVibe-Request-Id', 'Access-Control-Max-Age': '600' }).sendStatus(204);
next();
});
const read = (fn) => async (req, res) => {
ddiff --git a/test/metrics-reads.test.js b/test/metrics-reads.test.js
iindex 72b6e16..26eaa68 100644
---- a/test/metrics-reads.test.js
++++ b/test/metrics-reads.test.js
@@@ -35,9 +35,11 @@ t.test('30/90-day series, six-model bound, selected measures, same-day ranking a
assert.deepEqual(comparison.body.models.map((m) => m.cells[0].latency_p50_ms), [1000, 2000]);
assert(!Object.hasOwn(comparison.body.models[0].cells[0], 'cost_per_run_usd'));
assert.equal((await get('/leaderboard?kind=chat&measure=latency_p50_ms')).body.rows[0].model, 'openai/gpt-test');
-- const preflight = await fetch(base + '/api/v1/exchange/metrics/compare', { method: 'OPTIONS', headers: { Origin: 'https://example.test' } });
++ const preflight = await fetch(base + '/api/v1/exchange/metrics/compare', { method: 'OPTIONS', headers: { Origin: 'https://example.test', 'Access-Control-Request-Method': 'GET', 'Access-Control-Request-Headers': 'traceparent,x-openvibe-request-id,content-type' } });
assert.equal(preflight.status, 204);
assert.equal(preflight.headers.get('access-control-allow-origin'), '*');
++ const allowed = preflight.headers.get('access-control-allow-headers').toLowerCase().split(/,\s*/);
++ for (const header of ['traceparent', 'x-openvibe-request-id', 'content-type']) assert(allowed.includes(header), header);
for (const path of ['/compare?models=a,b,c,d,e,f,g', '/compare?models=a&measures=made_up', '/models/a?days=365', '/leaderboard?kind=private-site', '/compare?models=a&day=2026-02-31']) {
const invalid = await get(path);
assert.equal(invalid.status, 422, path);