Menu
Public repository / 2577f04e8d3b30f5b729c10273a73b0d54351113
akurai-log / scripts/check-contract-fixtures.mjs
Latest change 2577f04e8d3b30f5b729c10273a73b0d54351113 - feat: enforce tenant-safe log contract by Ólafur Búi Ólafsson
import assert from 'node:assert/strict';
import { readFile } from 'node:fs/promises';
import {
CONTRACT_VERSION,
CORRELATION_FIELDS,
MAX_FIELDS,
classifyField,
mergeCorrelation,
normalizeFieldName,
normalizeCorrelation,
redactText,
sanitizeFields,
sanitizeLog,
} from '../js/monitor-contract.js';
import { clientProxy, createLogger } from '../js/monitor-server.js';
import { initClientLogging } from '../js/monitor-client.js';
const fixture = JSON.parse(await readFile(new URL('../fixtures/monitor-contract.json', import.meta.url)));
for (const testCase of fixture.classification_cases) {
assert.equal(classifyField(testCase.name), testCase.class, `classification mismatch for ${testCase.name}`);
}
for (const testCase of fixture.normalization_cases) {
assert.equal(normalizeFieldName(testCase.input), testCase.output, `normalization mismatch for ${testCase.input}`);
}
assert.equal(CONTRACT_VERSION, fixture.version);
assert.deepEqual(CORRELATION_FIELDS, fixture.correlation_fields);
const correlation = normalizeCorrelation(fixture.safe_correlation);
assert.deepEqual(correlation, fixture.safe_correlation);
for (const invalid of fixture.invalid_correlation) {
assert.deepEqual(normalizeCorrelation({ workspace_id: invalid }), {});
}
assert.deepEqual(sanitizeFields(fixture.unsafe_fields), null);
assert.deepEqual(sanitizeFields(fixture.safe_fields), fixture.safe_fields);
assert.equal(fixture.max_fields, MAX_FIELDS);
assert.equal(sanitizeFields(Object.fromEntries(
Array.from({ length: MAX_FIELDS + 10 }, (_, index) => [`field_${index}`, index]),
)).field_63, 63);
const boundedFields = sanitizeFields(Object.fromEntries(
Array.from({ length: MAX_FIELDS + 10 }, (_, index) => [`field_${index}`, index]),
));
assert.equal(Object.keys(boundedFields).length, MAX_FIELDS);
const orderingFields = sanitizeFields(Object.fromEntries(
fixture.ordering_keys.map((key) => [key, true]),
));
assert.deepEqual(Object.keys(orderingFields), fixture.ordering_survives);
for (const example of fixture.redaction_cases) {
assert.equal(redactText(example.input), example.output);
}
const safeLog = sanitizeLog({
source: 'api',
line: 'request failed',
level: 'error',
target: 'http',
origin: 'server',
fields: { ...fixture.safe_fields, ...fixture.safe_correlation, note: 'drop me' },
...fixture.safe_correlation,
ts: 1,
});
assert.equal(sanitizeLog({ source: 'api', line: 'ok', origin: 'server' }).target, '');
const camelLog = sanitizeLog({ source: 'api', line: 'ok', origin: 'server', organizationId: 'org_acme-01' });
assert.equal(camelLog.organization_id, 'org_acme-01');
assert.deepEqual(
Object.fromEntries(CORRELATION_FIELDS.map((field) => [field, safeLog[field]])),
fixture.safe_correlation,
);
assert.equal(safeLog.fields.note, undefined);
assert.equal(mergeCorrelation({ organization_id: 'org-a' }, { organization_id: 'org-b' }), null);
assert.equal(sanitizeLog({ source: 'api', line: 'ok', origin: 'server' }, { organization_id: 'org-a' }).organization_id, 'org-a');
const requests = [];
globalThis.fetch = async (_url, init) => {
requests.push(JSON.parse(init.body));
return { ok: true, status: 202 };
};
const logger = createLogger('api', {
url: 'https://monitor.invalid',
token: 'test-token',
correlation: { organizationId: 'org_acme-01' },
});
logger.info('request failed', { requestId: 'req-9f8e', note: 'private' });
logger.flush();
await new Promise((resolve) => setTimeout(resolve, 0));
assert.equal(requests[0].logs[0].organization_id, 'org_acme-01');
assert.equal(requests[0].logs[0].request_id, 'req-9f8e');
assert.equal(requests[0].logs[0].fields, null);
globalThis.window = { addEventListener() {} };
globalThis.document = { visibilityState: 'visible' };
globalThis.location = { pathname: '/app' };
const browserLogger = initClientLogging({
app: 'web',
capture: [],
endpoint: '/api/client-logs',
correlation: { workspaceId: 'ws_acme-01' },
});
browserLogger.log('info', 'request failed', { requestId: 'req-9f8e', note: 'private' });
browserLogger.flush();
await new Promise((resolve) => setTimeout(resolve, 0));
assert.equal(requests[1].logs[0].workspace_id, 'ws_acme-01');
assert.equal(requests[1].logs[0].request_id, 'req-9f8e');
assert.equal(requests[1].logs[0].fields, null);
const proxy = clientProxy('api', {
url: 'https://monitor.invalid',
token: 'test-token',
correlation: { organization_id: 'org_acme-01' },
});
const result = await proxy({
logs: [{
line: 'Authorization: Bearer private',
organization_id: 'org_acme-01',
fields: fixture.unsafe_fields,
}],
});
assert.equal(result.inserted, 1);
console.log('monitor contract fixtures: ok');