@risingwave/wavelet-server 0.2.1 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/__tests__/cursor-parsing.test.d.ts +2 -0
  2. package/dist/__tests__/cursor-parsing.test.d.ts.map +1 -0
  3. package/dist/__tests__/cursor-parsing.test.js +64 -0
  4. package/dist/__tests__/cursor-parsing.test.js.map +1 -0
  5. package/dist/__tests__/http-api.test.d.ts +2 -0
  6. package/dist/__tests__/http-api.test.d.ts.map +1 -0
  7. package/dist/__tests__/http-api.test.js +135 -0
  8. package/dist/__tests__/http-api.test.js.map +1 -0
  9. package/dist/__tests__/integration.test.d.ts +2 -0
  10. package/dist/__tests__/integration.test.d.ts.map +1 -0
  11. package/dist/__tests__/integration.test.js +229 -0
  12. package/dist/__tests__/integration.test.js.map +1 -0
  13. package/dist/__tests__/jwt.test.d.ts +2 -0
  14. package/dist/__tests__/jwt.test.d.ts.map +1 -0
  15. package/dist/__tests__/jwt.test.js +86 -0
  16. package/dist/__tests__/jwt.test.js.map +1 -0
  17. package/dist/__tests__/ws-fanout.test.d.ts +2 -0
  18. package/dist/__tests__/ws-fanout.test.d.ts.map +1 -0
  19. package/dist/__tests__/ws-fanout.test.js +127 -0
  20. package/dist/__tests__/ws-fanout.test.js.map +1 -0
  21. package/dist/config-loader.d.ts +3 -0
  22. package/dist/config-loader.d.ts.map +1 -0
  23. package/dist/config-loader.js +25 -0
  24. package/dist/config-loader.js.map +1 -0
  25. package/dist/cursor-manager.d.ts +54 -0
  26. package/dist/cursor-manager.d.ts.map +1 -0
  27. package/dist/cursor-manager.js +263 -0
  28. package/dist/cursor-manager.js.map +1 -0
  29. package/dist/ddl-manager.d.ts +33 -0
  30. package/dist/ddl-manager.d.ts.map +1 -0
  31. package/dist/ddl-manager.js +364 -0
  32. package/dist/ddl-manager.js.map +1 -0
  33. package/dist/http-api.d.ts +21 -0
  34. package/dist/http-api.d.ts.map +1 -0
  35. package/dist/http-api.js +242 -0
  36. package/dist/http-api.js.map +1 -0
  37. package/dist/index.d.ts +5 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +32 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/jwt.d.ts +16 -0
  42. package/dist/jwt.d.ts.map +1 -0
  43. package/dist/jwt.js +87 -0
  44. package/dist/jwt.js.map +1 -0
  45. package/dist/server.d.ts +24 -0
  46. package/dist/server.d.ts.map +1 -0
  47. package/dist/server.js +82 -0
  48. package/dist/server.js.map +1 -0
  49. package/dist/webhook.d.ts +9 -0
  50. package/dist/webhook.d.ts.map +1 -0
  51. package/dist/webhook.js +63 -0
  52. package/dist/webhook.js.map +1 -0
  53. package/dist/ws-fanout.d.ts +24 -0
  54. package/dist/ws-fanout.d.ts.map +1 -0
  55. package/dist/ws-fanout.js +198 -0
  56. package/dist/ws-fanout.js.map +1 -0
  57. package/package.json +16 -3
  58. package/src/__tests__/cursor-parsing.test.ts +0 -68
  59. package/src/__tests__/http-api.test.ts +0 -130
  60. package/src/__tests__/integration.test.ts +0 -217
  61. package/src/__tests__/jwt.test.ts +0 -62
  62. package/src/config-loader.ts +0 -28
  63. package/src/cursor-manager.ts +0 -209
  64. package/src/ddl-manager.ts +0 -408
  65. package/src/http-api.ts +0 -278
  66. package/src/index.ts +0 -31
  67. package/src/jwt.ts +0 -56
  68. package/src/server.ts +0 -89
  69. package/src/webhook.ts +0 -67
  70. package/src/ws-fanout.ts +0 -171
  71. package/tsconfig.json +0 -8
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cursor-parsing.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-parsing.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cursor-parsing.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const cursor_manager_js_1 = require("../cursor-manager.js");
5
+ // Access private parseDiffs via cast
6
+ function parseDiffs(rows) {
7
+ const cm = new cursor_manager_js_1.CursorManager('postgres://dummy', {});
8
+ return cm.parseDiffs(rows);
9
+ }
10
+ (0, vitest_1.describe)('parseDiffs', () => {
11
+ (0, vitest_1.it)('parses Insert ops (string form)', () => {
12
+ const rows = [
13
+ { op: 'Insert', rw_timestamp: '100', player_id: 'alice', score: 42 },
14
+ ];
15
+ const diff = parseDiffs(rows);
16
+ (0, vitest_1.expect)(diff.inserted).toHaveLength(1);
17
+ (0, vitest_1.expect)(diff.inserted[0]).toEqual({ player_id: 'alice', score: 42 });
18
+ (0, vitest_1.expect)(diff.deleted).toHaveLength(0);
19
+ (0, vitest_1.expect)(diff.updated).toHaveLength(0);
20
+ });
21
+ (0, vitest_1.it)('parses Insert ops (numeric form)', () => {
22
+ const rows = [
23
+ { op: '1', rw_timestamp: '100', name: 'bob' },
24
+ ];
25
+ const diff = parseDiffs(rows);
26
+ (0, vitest_1.expect)(diff.inserted).toHaveLength(1);
27
+ (0, vitest_1.expect)(diff.inserted[0]).toEqual({ name: 'bob' });
28
+ });
29
+ (0, vitest_1.it)('parses Delete ops', () => {
30
+ const rows = [
31
+ { op: 'Delete', rw_timestamp: '200', player_id: 'alice' },
32
+ ];
33
+ const diff = parseDiffs(rows);
34
+ (0, vitest_1.expect)(diff.deleted).toHaveLength(1);
35
+ (0, vitest_1.expect)(diff.deleted[0]).toEqual({ player_id: 'alice' });
36
+ });
37
+ (0, vitest_1.it)('parses Update ops (UpdateDelete + UpdateInsert)', () => {
38
+ const rows = [
39
+ { op: 'UpdateDelete', rw_timestamp: '300', player_id: 'alice', score: 10 },
40
+ { op: 'UpdateInsert', rw_timestamp: '300', player_id: 'alice', score: 20 },
41
+ ];
42
+ const diff = parseDiffs(rows);
43
+ (0, vitest_1.expect)(diff.deleted).toHaveLength(1);
44
+ (0, vitest_1.expect)(diff.deleted[0]).toEqual({ player_id: 'alice', score: 10 });
45
+ (0, vitest_1.expect)(diff.updated).toHaveLength(1);
46
+ (0, vitest_1.expect)(diff.updated[0]).toEqual({ player_id: 'alice', score: 20 });
47
+ });
48
+ (0, vitest_1.it)('returns empty diff for no rows', () => {
49
+ const diff = parseDiffs([]);
50
+ (0, vitest_1.expect)(diff.inserted).toHaveLength(0);
51
+ (0, vitest_1.expect)(diff.updated).toHaveLength(0);
52
+ (0, vitest_1.expect)(diff.deleted).toHaveLength(0);
53
+ (0, vitest_1.expect)(diff.cursor).toBe('');
54
+ });
55
+ (0, vitest_1.it)('extracts cursor from last rw_timestamp', () => {
56
+ const rows = [
57
+ { op: 'Insert', rw_timestamp: '100', x: 1 },
58
+ { op: 'Insert', rw_timestamp: '200', x: 2 },
59
+ ];
60
+ const diff = parseDiffs(rows);
61
+ (0, vitest_1.expect)(diff.cursor).toBe('200');
62
+ });
63
+ });
64
+ //# sourceMappingURL=cursor-parsing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-parsing.test.js","sourceRoot":"","sources":["../../src/__tests__/cursor-parsing.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-api.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-api.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/http-api.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const node_http_1 = __importDefault(require("node:http"));
8
+ const http_api_js_1 = require("../http-api.js");
9
+ function createTestServer(api) {
10
+ return new Promise((resolve) => {
11
+ const server = node_http_1.default.createServer((req, res) => api.handle(req, res));
12
+ server.listen(0, () => resolve(server));
13
+ });
14
+ }
15
+ function request(server, method, path, body) {
16
+ const addr = server.address();
17
+ return new Promise((resolve, reject) => {
18
+ const req = node_http_1.default.request({
19
+ hostname: 'localhost',
20
+ port: addr.port,
21
+ method,
22
+ path,
23
+ headers: body ? { 'Content-Type': 'application/json' } : {},
24
+ }, (res) => {
25
+ let data = '';
26
+ res.on('data', (chunk) => { data += chunk; });
27
+ res.on('end', () => {
28
+ try {
29
+ resolve({ status: res.statusCode, data: JSON.parse(data) });
30
+ }
31
+ catch {
32
+ resolve({ status: res.statusCode, data });
33
+ }
34
+ });
35
+ });
36
+ req.on('error', reject);
37
+ if (body)
38
+ req.write(JSON.stringify(body));
39
+ req.end();
40
+ });
41
+ }
42
+ (0, vitest_1.describe)('HttpApi', () => {
43
+ const events = {
44
+ game_events: { columns: { user_id: 'string', value: 'int' } },
45
+ };
46
+ const queries = {
47
+ leaderboard: { _tag: 'sql', text: 'SELECT 1' },
48
+ };
49
+ (0, vitest_1.it)('returns health check', async () => {
50
+ const api = new http_api_js_1.HttpApi('postgres://dummy', events, queries);
51
+ const server = await createTestServer(api);
52
+ try {
53
+ const res = await request(server, 'GET', '/v1/health');
54
+ (0, vitest_1.expect)(res.status).toBe(200);
55
+ (0, vitest_1.expect)(res.data).toEqual({ status: 'ok' });
56
+ }
57
+ finally {
58
+ server.close();
59
+ }
60
+ });
61
+ (0, vitest_1.it)('lists available queries', async () => {
62
+ const api = new http_api_js_1.HttpApi('postgres://dummy', events, queries);
63
+ const server = await createTestServer(api);
64
+ try {
65
+ const res = await request(server, 'GET', '/v1/queries');
66
+ (0, vitest_1.expect)(res.status).toBe(200);
67
+ (0, vitest_1.expect)(res.data).toEqual({ queries: ['leaderboard'] });
68
+ }
69
+ finally {
70
+ server.close();
71
+ }
72
+ });
73
+ (0, vitest_1.it)('lists available events', async () => {
74
+ const api = new http_api_js_1.HttpApi('postgres://dummy', events, queries);
75
+ const server = await createTestServer(api);
76
+ try {
77
+ const res = await request(server, 'GET', '/v1/events');
78
+ (0, vitest_1.expect)(res.status).toBe(200);
79
+ (0, vitest_1.expect)(res.data).toEqual({ events: ['game_events'] });
80
+ }
81
+ finally {
82
+ server.close();
83
+ }
84
+ });
85
+ (0, vitest_1.it)('returns 404 for unknown routes with helpful message', async () => {
86
+ const api = new http_api_js_1.HttpApi('postgres://dummy', events, queries);
87
+ const server = await createTestServer(api);
88
+ try {
89
+ const res = await request(server, 'GET', '/v1/nonexistent');
90
+ (0, vitest_1.expect)(res.status).toBe(404);
91
+ (0, vitest_1.expect)(res.data.error).toBe('Not found');
92
+ (0, vitest_1.expect)(res.data.routes).toBeDefined();
93
+ (0, vitest_1.expect)(res.data.routes.length).toBeGreaterThan(0);
94
+ }
95
+ finally {
96
+ server.close();
97
+ }
98
+ });
99
+ (0, vitest_1.it)('handles CORS preflight', async () => {
100
+ const api = new http_api_js_1.HttpApi('postgres://dummy', events, queries);
101
+ const server = await createTestServer(api);
102
+ try {
103
+ const res = await request(server, 'OPTIONS', '/v1/queries');
104
+ (0, vitest_1.expect)(res.status).toBe(204);
105
+ }
106
+ finally {
107
+ server.close();
108
+ }
109
+ });
110
+ (0, vitest_1.it)('returns 404 for unknown event', async () => {
111
+ const api = new http_api_js_1.HttpApi('postgres://dummy', events, queries);
112
+ const server = await createTestServer(api);
113
+ try {
114
+ const res = await request(server, 'POST', '/v1/events/nonexistent', { x: 1 });
115
+ (0, vitest_1.expect)(res.status).toBe(404);
116
+ (0, vitest_1.expect)(res.data.available_events).toEqual(['game_events']);
117
+ }
118
+ finally {
119
+ server.close();
120
+ }
121
+ });
122
+ (0, vitest_1.it)('returns 404 for unknown query', async () => {
123
+ const api = new http_api_js_1.HttpApi('postgres://dummy', events, queries);
124
+ const server = await createTestServer(api);
125
+ try {
126
+ const res = await request(server, 'GET', '/v1/queries/nonexistent');
127
+ (0, vitest_1.expect)(res.status).toBe(404);
128
+ (0, vitest_1.expect)(res.data.available_queries).toEqual(['leaderboard']);
129
+ }
130
+ finally {
131
+ server.close();
132
+ }
133
+ });
134
+ });
135
+ //# sourceMappingURL=http-api.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-api.test.js","sourceRoot":"","sources":["../../src/__tests__/http-api.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ * Integration tests that require a running RisingWave instance.
8
+ * Skipped in CI unless WAVELET_TEST_DATABASE_URL is set.
9
+ */
10
+ const vitest_1 = require("vitest");
11
+ const pg_1 = __importDefault(require("pg"));
12
+ const ws_1 = require("ws");
13
+ const ddl_manager_js_1 = require("../ddl-manager.js");
14
+ const server_js_1 = require("../server.js");
15
+ const wavelet_1 = require("@risingwave/wavelet");
16
+ const { Client } = pg_1.default;
17
+ const DATABASE_URL = process.env.WAVELET_TEST_DATABASE_URL ?? 'postgres://root@localhost:4566/dev';
18
+ // Check if RisingWave is reachable
19
+ async function isRisingWaveAvailable() {
20
+ const client = new Client({ connectionString: DATABASE_URL, connectionTimeoutMillis: 2000 });
21
+ try {
22
+ await client.connect();
23
+ await client.query('SELECT 1');
24
+ await client.end();
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ // Use unique names to avoid collisions with other test runs
32
+ const prefix = `test_${Date.now()}`;
33
+ const STREAM_NAME = `${prefix}_events`;
34
+ const VIEW_NAME = `${prefix}_totals`;
35
+ const SUB_NAME = `wavelet_sub_${VIEW_NAME}`;
36
+ const testConfig = {
37
+ database: DATABASE_URL,
38
+ events: {
39
+ [STREAM_NAME]: {
40
+ columns: {
41
+ user_id: 'string',
42
+ value: 'int',
43
+ },
44
+ },
45
+ },
46
+ queries: {
47
+ [VIEW_NAME]: (0, wavelet_1.sql) `
48
+ SELECT user_id, SUM(value) AS total_value, COUNT(*) AS event_count
49
+ FROM ${STREAM_NAME}
50
+ GROUP BY user_id
51
+ `,
52
+ },
53
+ server: {
54
+ port: 0, // random port
55
+ },
56
+ };
57
+ vitest_1.describe.runIf(process.env.WAVELET_INTEGRATION === '1')('Integration: DDL Manager', () => {
58
+ let ddl;
59
+ (0, vitest_1.beforeAll)(async () => {
60
+ ddl = new ddl_manager_js_1.DdlManager(DATABASE_URL);
61
+ await ddl.connect();
62
+ });
63
+ (0, vitest_1.afterAll)(async () => {
64
+ // Cleanup: drop test objects
65
+ const client = new Client({ connectionString: DATABASE_URL });
66
+ await client.connect();
67
+ try {
68
+ await client.query(`DROP SUBSCRIPTION IF EXISTS ${SUB_NAME}`);
69
+ }
70
+ catch { }
71
+ try {
72
+ await client.query(`DROP MATERIALIZED VIEW IF EXISTS ${VIEW_NAME}`);
73
+ }
74
+ catch { }
75
+ try {
76
+ await client.query(`DROP TABLE IF EXISTS ${STREAM_NAME}`);
77
+ }
78
+ catch { }
79
+ await client.end();
80
+ await ddl.close();
81
+ });
82
+ (0, vitest_1.it)('creates tables, materialized views, and subscriptions', async () => {
83
+ const actions = await ddl.sync(testConfig);
84
+ const creates = actions.filter(a => a.type === 'create');
85
+ (0, vitest_1.expect)(creates.length).toBeGreaterThanOrEqual(3); // event + query + subscription
86
+ const eventAction = creates.find(a => a.resource === 'event' && a.name === STREAM_NAME);
87
+ (0, vitest_1.expect)(eventAction).toBeDefined();
88
+ const queryAction = creates.find(a => a.resource === 'query' && a.name === VIEW_NAME);
89
+ (0, vitest_1.expect)(queryAction).toBeDefined();
90
+ const subAction = creates.find(a => a.resource === 'subscription' && a.name === SUB_NAME);
91
+ (0, vitest_1.expect)(subAction).toBeDefined();
92
+ });
93
+ (0, vitest_1.it)('is idempotent - second sync reports unchanged', async () => {
94
+ const actions = await ddl.sync(testConfig);
95
+ const unchanged = actions.filter(a => a.type === 'unchanged');
96
+ (0, vitest_1.expect)(unchanged.length).toBeGreaterThanOrEqual(3);
97
+ const creates = actions.filter(a => a.type === 'create');
98
+ (0, vitest_1.expect)(creates.length).toBe(0);
99
+ });
100
+ (0, vitest_1.it)('can write and read data', async () => {
101
+ const client = new Client({ connectionString: DATABASE_URL });
102
+ await client.connect();
103
+ await client.query(`INSERT INTO ${STREAM_NAME} (user_id, value) VALUES ('alice', 10)`);
104
+ await client.query(`INSERT INTO ${STREAM_NAME} (user_id, value) VALUES ('alice', 20)`);
105
+ await client.query(`INSERT INTO ${STREAM_NAME} (user_id, value) VALUES ('bob', 5)`);
106
+ // Wait for MV to update
107
+ await new Promise(r => setTimeout(r, 2000));
108
+ const result = await client.query(`SELECT * FROM ${VIEW_NAME} ORDER BY total_value DESC`);
109
+ (0, vitest_1.expect)(result.rows.length).toBeGreaterThanOrEqual(2);
110
+ const alice = result.rows.find((r) => r.user_id === 'alice');
111
+ (0, vitest_1.expect)(alice).toBeDefined();
112
+ (0, vitest_1.expect)(Number(alice.total_value)).toBe(30);
113
+ (0, vitest_1.expect)(Number(alice.event_count)).toBe(2);
114
+ await client.end();
115
+ });
116
+ });
117
+ vitest_1.describe.runIf(process.env.WAVELET_INTEGRATION === '1')('Integration: Full Server', () => {
118
+ let server;
119
+ let port;
120
+ (0, vitest_1.beforeAll)(async () => {
121
+ // Ensure DDL is synced
122
+ const ddl = new ddl_manager_js_1.DdlManager(DATABASE_URL);
123
+ await ddl.connect();
124
+ await ddl.sync(testConfig);
125
+ await ddl.close();
126
+ // Start server on random port
127
+ server = new server_js_1.WaveletServer({ ...testConfig, server: { port: 0 } });
128
+ await server.start();
129
+ // Get the actual port
130
+ const addr = server.httpServer?.address();
131
+ port = addr?.port;
132
+ }, 15000);
133
+ (0, vitest_1.afterAll)(async () => {
134
+ await server.stop();
135
+ // Cleanup
136
+ const client = new Client({ connectionString: DATABASE_URL });
137
+ await client.connect();
138
+ try {
139
+ await client.query(`DROP SUBSCRIPTION IF EXISTS ${SUB_NAME}`);
140
+ }
141
+ catch { }
142
+ try {
143
+ await client.query(`DROP MATERIALIZED VIEW IF EXISTS ${VIEW_NAME}`);
144
+ }
145
+ catch { }
146
+ try {
147
+ await client.query(`DROP TABLE IF EXISTS ${STREAM_NAME}`);
148
+ }
149
+ catch { }
150
+ await client.end();
151
+ });
152
+ (0, vitest_1.it)('serves health check', async () => {
153
+ const res = await fetch(`http://localhost:${port}/v1/health`);
154
+ const data = await res.json();
155
+ (0, vitest_1.expect)(data.status).toBe('ok');
156
+ });
157
+ (0, vitest_1.it)('lists queries', async () => {
158
+ const res = await fetch(`http://localhost:${port}/v1/queries`);
159
+ const data = await res.json();
160
+ (0, vitest_1.expect)(data.queries).toContain(VIEW_NAME);
161
+ });
162
+ (0, vitest_1.it)('writes events via HTTP and reads query', async () => {
163
+ // Write events
164
+ await fetch(`http://localhost:${port}/v1/events/${STREAM_NAME}`, {
165
+ method: 'POST',
166
+ headers: { 'Content-Type': 'application/json' },
167
+ body: JSON.stringify({ user_id: 'integration_test', value: 42 }),
168
+ });
169
+ // Wait for MV update
170
+ await new Promise(r => setTimeout(r, 2000));
171
+ // Read query
172
+ const res = await fetch(`http://localhost:${port}/v1/queries/${VIEW_NAME}`);
173
+ const data = await res.json();
174
+ (0, vitest_1.expect)(data.rows.length).toBeGreaterThan(0);
175
+ });
176
+ (0, vitest_1.it)('pushes diffs via WebSocket', async () => {
177
+ const diff = await new Promise((resolve, reject) => {
178
+ const ws = new ws_1.WebSocket(`ws://localhost:${port}/subscribe/${VIEW_NAME}`);
179
+ let sawSnapshot = false;
180
+ ws.on('message', (data) => {
181
+ const msg = JSON.parse(data.toString());
182
+ if (msg.type === 'snapshot') {
183
+ sawSnapshot = true;
184
+ // Write event to trigger diff
185
+ fetch(`http://localhost:${port}/v1/events/${STREAM_NAME}`, {
186
+ method: 'POST',
187
+ headers: { 'Content-Type': 'application/json' },
188
+ body: JSON.stringify({ user_id: 'ws_test_user', value: 7 }),
189
+ });
190
+ }
191
+ if (msg.type === 'diff') {
192
+ (0, vitest_1.expect)(sawSnapshot).toBe(true);
193
+ ws.close();
194
+ resolve(msg);
195
+ }
196
+ });
197
+ ws.on('error', reject);
198
+ setTimeout(() => { ws.close(); reject(new Error('WebSocket timeout')); }, 15000);
199
+ });
200
+ (0, vitest_1.expect)(diff.type).toBe('diff');
201
+ (0, vitest_1.expect)(diff.cursor).toBeDefined();
202
+ // Should have at least one insert or update
203
+ (0, vitest_1.expect)(diff.inserted.length + diff.updated.length).toBeGreaterThan(0);
204
+ }, 20000);
205
+ (0, vitest_1.it)('pushes a snapshot immediately on connect', async () => {
206
+ await fetch(`http://localhost:${port}/v1/events/${STREAM_NAME}`, {
207
+ method: 'POST',
208
+ headers: { 'Content-Type': 'application/json' },
209
+ body: JSON.stringify({ user_id: 'snapshot_user', value: 11 }),
210
+ });
211
+ await new Promise(r => setTimeout(r, 2000));
212
+ const snapshot = await new Promise((resolve, reject) => {
213
+ const ws = new ws_1.WebSocket(`ws://localhost:${port}/subscribe/${VIEW_NAME}`);
214
+ ws.on('message', (data) => {
215
+ const msg = JSON.parse(data.toString());
216
+ if (msg.type === 'snapshot') {
217
+ ws.close();
218
+ resolve(msg);
219
+ }
220
+ });
221
+ ws.on('error', reject);
222
+ setTimeout(() => { ws.close(); reject(new Error('WebSocket snapshot timeout')); }, 15000);
223
+ });
224
+ (0, vitest_1.expect)(snapshot.type).toBe('snapshot');
225
+ (0, vitest_1.expect)(Array.isArray(snapshot.rows)).toBe(true);
226
+ (0, vitest_1.expect)(snapshot.rows.some((row) => row.user_id === 'snapshot_user')).toBe(true);
227
+ }, 20000);
228
+ });
229
+ //# sourceMappingURL=integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jwt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/jwt.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const vitest_1 = require("vitest");
37
+ const jwt_js_1 = require("../jwt.js");
38
+ const jose = __importStar(require("jose"));
39
+ (0, vitest_1.describe)('JwtVerifier', () => {
40
+ (0, vitest_1.it)('isConfigured returns false with no config', () => {
41
+ const v = new jwt_js_1.JwtVerifier();
42
+ (0, vitest_1.expect)(v.isConfigured()).toBe(false);
43
+ });
44
+ (0, vitest_1.it)('isConfigured returns true with secret', () => {
45
+ const v = new jwt_js_1.JwtVerifier({ secret: 'test-secret' });
46
+ (0, vitest_1.expect)(v.isConfigured()).toBe(true);
47
+ });
48
+ (0, vitest_1.it)('isConfigured returns true with jwksUrl', () => {
49
+ const v = new jwt_js_1.JwtVerifier({ jwksUrl: 'https://example.com/.well-known/jwks.json' });
50
+ (0, vitest_1.expect)(v.isConfigured()).toBe(true);
51
+ });
52
+ (0, vitest_1.it)('verifies a valid HS256 JWT', async () => {
53
+ const secret = 'my-test-secret-that-is-long-enough';
54
+ const v = new jwt_js_1.JwtVerifier({ secret });
55
+ const encodedSecret = new TextEncoder().encode(secret);
56
+ const token = await new jose.SignJWT({ tenant_id: 't1', role: 'user' })
57
+ .setProtectedHeader({ alg: 'HS256' })
58
+ .setIssuedAt()
59
+ .setExpirationTime('1h')
60
+ .sign(encodedSecret);
61
+ const claims = await v.verify(token);
62
+ (0, vitest_1.expect)(claims.tenant_id).toBe('t1');
63
+ (0, vitest_1.expect)(claims.role).toBe('user');
64
+ });
65
+ (0, vitest_1.it)('rejects expired tokens', async () => {
66
+ const secret = 'my-test-secret-that-is-long-enough';
67
+ const v = new jwt_js_1.JwtVerifier({ secret });
68
+ const encodedSecret = new TextEncoder().encode(secret);
69
+ const token = await new jose.SignJWT({ tenant_id: 't1' })
70
+ .setProtectedHeader({ alg: 'HS256' })
71
+ .setIssuedAt(Math.floor(Date.now() / 1000) - 7200)
72
+ .setExpirationTime(Math.floor(Date.now() / 1000) - 3600)
73
+ .sign(encodedSecret);
74
+ await (0, vitest_1.expect)(v.verify(token)).rejects.toThrow('expired');
75
+ });
76
+ (0, vitest_1.it)('rejects tokens with wrong secret', async () => {
77
+ const v = new jwt_js_1.JwtVerifier({ secret: 'correct-secret-that-is-long-enough' });
78
+ const wrongSecret = new TextEncoder().encode('wrong-secret-that-is-long-enough');
79
+ const token = await new jose.SignJWT({ tenant_id: 't1' })
80
+ .setProtectedHeader({ alg: 'HS256' })
81
+ .setExpirationTime('1h')
82
+ .sign(wrongSecret);
83
+ await (0, vitest_1.expect)(v.verify(token)).rejects.toThrow();
84
+ });
85
+ });
86
+ //# sourceMappingURL=jwt.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.test.js","sourceRoot":"","sources":["../../src/__tests__/jwt.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ws-fanout.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-fanout.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ws-fanout.test.ts"],"names":[],"mappings":""}