20 lines
955 B
TypeScript
20 lines
955 B
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
|
|
import { containsForbiddenPublicField, SseParser } from '../src/sse.js';
|
|
|
|
void test('SSE parser handles chunk boundaries, CRLF, comments, and multiline data', () => {
|
|
const events: Array<{ event: string; data: string }> = [];
|
|
const parser = new SseParser((event) => events.push(event));
|
|
parser.push(': keepalive\r\nevent: rea');
|
|
parser.push('dy\r\ndata: {"ok":\r\ndata: true}\r\n\r\n');
|
|
parser.finish();
|
|
assert.deepEqual(events, [{ event: 'ready', data: '{"ok":\ntrue}' }]);
|
|
});
|
|
|
|
void test('public payload privacy scan checks nested forbidden identifiers and timing fields', () => {
|
|
assert.equal(containsForbiddenPublicField({ type: 'readModelInvalidated', context: true }), false);
|
|
assert.equal(containsForbiddenPublicField({ nested: { generalId: 3 } }), true);
|
|
assert.equal(containsForbiddenPublicField([{ lastTurnTime: 'secret' }]), true);
|
|
});
|