@enbox/dwn-sdk-js 0.2.2 → 0.3.1

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 (73) hide show
  1. package/dist/browser.mjs +6 -6
  2. package/dist/browser.mjs.map +3 -3
  3. package/dist/esm/generated/precompiled-validators.js +704 -342
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/src/core/dwn-error.js +1 -0
  6. package/dist/esm/src/core/dwn-error.js.map +1 -1
  7. package/dist/esm/src/event-stream/event-emitter-event-log.js +151 -20
  8. package/dist/esm/src/event-stream/event-emitter-event-log.js.map +1 -1
  9. package/dist/esm/src/handlers/messages-subscribe.js +7 -0
  10. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  11. package/dist/esm/src/handlers/messages-sync.js +6 -3
  12. package/dist/esm/src/handlers/messages-sync.js.map +1 -1
  13. package/dist/esm/src/handlers/protocols-configure.js +1 -1
  14. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  15. package/dist/esm/src/handlers/records-subscribe.js +7 -0
  16. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  17. package/dist/esm/src/handlers/records-write.js +33 -5
  18. package/dist/esm/src/handlers/records-write.js.map +1 -1
  19. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  20. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
  21. package/dist/esm/src/store/storage-controller.js +1 -1
  22. package/dist/esm/src/store/storage-controller.js.map +1 -1
  23. package/dist/esm/src/utils/messages.js +41 -1
  24. package/dist/esm/src/utils/messages.js.map +1 -1
  25. package/dist/esm/tests/event-emitter-event-log.spec.js +214 -81
  26. package/dist/esm/tests/event-emitter-event-log.spec.js.map +1 -1
  27. package/dist/esm/tests/handlers/messages-subscribe.spec.js +288 -0
  28. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  29. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  30. package/dist/types/generated/precompiled-validators.d.ts +50 -34
  31. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  32. package/dist/types/src/core/dwn-error.d.ts +1 -0
  33. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  34. package/dist/types/src/event-stream/event-emitter-event-log.d.ts +34 -4
  35. package/dist/types/src/event-stream/event-emitter-event-log.d.ts.map +1 -1
  36. package/dist/types/src/handlers/messages-subscribe.d.ts +1 -1
  37. package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -1
  38. package/dist/types/src/handlers/messages-sync.d.ts.map +1 -1
  39. package/dist/types/src/handlers/records-subscribe.d.ts +1 -1
  40. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
  41. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  42. package/dist/types/src/index.d.ts +1 -1
  43. package/dist/types/src/index.d.ts.map +1 -1
  44. package/dist/types/src/interfaces/messages-subscribe.d.ts +4 -3
  45. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
  46. package/dist/types/src/interfaces/records-subscribe.d.ts +4 -3
  47. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  48. package/dist/types/src/types/messages-types.d.ts +14 -4
  49. package/dist/types/src/types/messages-types.d.ts.map +1 -1
  50. package/dist/types/src/types/records-types.d.ts +8 -4
  51. package/dist/types/src/types/records-types.d.ts.map +1 -1
  52. package/dist/types/src/types/subscriptions.d.ts +73 -20
  53. package/dist/types/src/types/subscriptions.d.ts.map +1 -1
  54. package/dist/types/src/utils/messages.d.ts.map +1 -1
  55. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  56. package/dist/types/tests/utils/test-data-generator.d.ts +5 -4
  57. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/src/core/dwn-error.ts +1 -0
  60. package/src/event-stream/event-emitter-event-log.ts +169 -21
  61. package/src/handlers/messages-subscribe.ts +8 -1
  62. package/src/handlers/messages-sync.ts +6 -3
  63. package/src/handlers/protocols-configure.ts +1 -1
  64. package/src/handlers/records-subscribe.ts +8 -1
  65. package/src/handlers/records-write.ts +34 -5
  66. package/src/index.ts +1 -1
  67. package/src/interfaces/messages-subscribe.ts +4 -3
  68. package/src/interfaces/records-subscribe.ts +4 -3
  69. package/src/store/storage-controller.ts +1 -1
  70. package/src/types/messages-types.ts +12 -4
  71. package/src/types/records-types.ts +6 -4
  72. package/src/types/subscriptions.ts +78 -20
  73. package/src/utils/messages.ts +47 -1
@@ -9,34 +9,44 @@ describe('EventEmitterEventLog', () => {
9
9
  afterAll(async () => {
10
10
  await eventLog.close();
11
11
  });
12
+ /** Helper to generate unique messageCids for testing. */
13
+ function cid(n) {
14
+ return `bafy-test-cid-${n}`;
15
+ }
12
16
  describe('emit()', () => {
13
- it('should return opaque cursor strings', async () => {
17
+ it('should return ProgressToken objects', async () => {
14
18
  const tenant = 'did:example:alice';
15
19
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
16
- const cursor1 = await eventLog.emit(tenant, event, { key: 'val1' });
17
- const cursor2 = await eventLog.emit(tenant, event, { key: 'val2' });
18
- const cursor3 = await eventLog.emit(tenant, event, { key: 'val3' });
19
- // Cursors are strings and should be different for each event.
20
- expect(typeof cursor1).toBe('string');
21
- expect(typeof cursor2).toBe('string');
22
- expect(cursor1).not.toBe(cursor2);
23
- expect(cursor2).not.toBe(cursor3);
20
+ const token1 = await eventLog.emit(tenant, event, { key: 'val1' }, cid(1));
21
+ const token2 = await eventLog.emit(tenant, event, { key: 'val2' }, cid(2));
22
+ const token3 = await eventLog.emit(tenant, event, { key: 'val3' }, cid(3));
23
+ // Tokens are ProgressToken objects and should be different for each event.
24
+ expect(token1).toBeDefined();
25
+ expect(token2).toBeDefined();
26
+ expect(typeof token1.streamId).toBe('string');
27
+ expect(typeof token1.epoch).toBe('string');
28
+ expect(typeof token1.position).toBe('string');
29
+ expect(typeof token1.messageCid).toBe('string');
30
+ expect(token1.messageCid).toBe(cid(1));
31
+ expect(token1.position).not.toBe(token2.position);
32
+ expect(token2.position).not.toBe(token3.position);
24
33
  });
25
- it('should maintain independent cursors per tenant', async () => {
34
+ it('should maintain independent positions per tenant', async () => {
26
35
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
27
- const cursorAlice = await eventLog.emit('did:example:alice', event, {});
28
- const cursorBob = await eventLog.emit('did:example:bob', event, {});
29
- // Both are valid cursor strings (first event for each tenant).
30
- expect(typeof cursorAlice).toBe('string');
31
- expect(typeof cursorBob).toBe('string');
32
- expect(cursorAlice.length).toBeGreaterThan(0);
33
- expect(cursorBob.length).toBeGreaterThan(0);
36
+ const tokenAlice = await eventLog.emit('did:example:alice', event, {}, cid(1));
37
+ const tokenBob = await eventLog.emit('did:example:bob', event, {}, cid(2));
38
+ // Both are valid tokens (first event for each tenant).
39
+ expect(tokenAlice).toBeDefined();
40
+ expect(tokenBob).toBeDefined();
41
+ // Same position (1) but different streamIds.
42
+ expect(tokenAlice.position).toBe(tokenBob.position);
43
+ expect(tokenAlice.streamId).not.toBe(tokenBob.streamId);
34
44
  });
35
- it('should return empty string when EventLog is closed', async () => {
45
+ it('should return undefined when EventLog is closed', async () => {
36
46
  await eventLog.close();
37
47
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
38
- const cursor = await eventLog.emit('did:example:alice', event, {});
39
- expect(cursor).toBe('');
48
+ const token = await eventLog.emit('did:example:alice', event, {}, cid(1));
49
+ expect(token).toBeUndefined();
40
50
  // reopen for afterAll cleanup
41
51
  await eventLog.open();
42
52
  });
@@ -45,29 +55,31 @@ describe('EventEmitterEventLog', () => {
45
55
  it('should read all events for a tenant when no cursor is provided', async () => {
46
56
  const tenant = 'did:example:alice';
47
57
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
48
- await eventLog.emit(tenant, event, { schema: 'http://a' });
49
- await eventLog.emit(tenant, event, { schema: 'http://b' });
58
+ await eventLog.emit(tenant, event, { schema: 'http://a' }, cid(1));
59
+ await eventLog.emit(tenant, event, { schema: 'http://b' }, cid(2));
50
60
  const result = await eventLog.read(tenant);
51
61
  expect(result.events.length).toBe(2);
52
62
  expect(result.cursor).toBeDefined();
63
+ expect(result.cursor.position).toBe('2');
53
64
  });
54
65
  it('should read events after a cursor', async () => {
55
66
  const tenant = 'did:example:alice';
56
67
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
57
- await eventLog.emit(tenant, event, { schema: 'http://a' });
58
- const cursor2 = await eventLog.emit(tenant, event, { schema: 'http://b' });
59
- await eventLog.emit(tenant, event, { schema: 'http://c' });
68
+ await eventLog.emit(tenant, event, { schema: 'http://a' }, cid(1));
69
+ const cursor2 = await eventLog.emit(tenant, event, { schema: 'http://b' }, cid(2));
70
+ await eventLog.emit(tenant, event, { schema: 'http://c' }, cid(3));
60
71
  // Read after cursor2 — should only get the third event.
61
72
  const result = await eventLog.read(tenant, { cursor: cursor2 });
62
73
  expect(result.events.length).toBe(1);
63
74
  expect(result.cursor).toBeDefined();
75
+ expect(result.cursor.position).toBe('3');
64
76
  });
65
77
  it('should apply filters during read', async () => {
66
78
  const tenant = 'did:example:alice';
67
79
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
68
- await eventLog.emit(tenant, event, { schema: 'http://match' });
69
- await eventLog.emit(tenant, event, { schema: 'http://other' });
70
- await eventLog.emit(tenant, event, { schema: 'http://match' });
80
+ await eventLog.emit(tenant, event, { schema: 'http://match' }, cid(1));
81
+ await eventLog.emit(tenant, event, { schema: 'http://other' }, cid(2));
82
+ await eventLog.emit(tenant, event, { schema: 'http://match' }, cid(3));
71
83
  const result = await eventLog.read(tenant, { filters: [{ schema: 'http://match' }] });
72
84
  expect(result.events.length).toBe(2);
73
85
  });
@@ -79,48 +91,52 @@ describe('EventEmitterEventLog', () => {
79
91
  it('should return the input cursor when no new events match', async () => {
80
92
  const tenant = 'did:example:alice';
81
93
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
82
- const lastCursor = await eventLog.emit(tenant, event, {});
94
+ const lastCursor = await eventLog.emit(tenant, event, {}, cid(1));
83
95
  // Read after the last event — nothing new.
84
96
  const result = await eventLog.read(tenant, { cursor: lastCursor });
85
97
  expect(result.events.length).toBe(0);
86
- expect(result.cursor).toBe(lastCursor);
98
+ expect(result.cursor).toEqual(lastCursor);
87
99
  });
88
100
  it('should respect the limit option', async () => {
89
101
  const tenant = 'did:example:alice';
90
102
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
91
- await eventLog.emit(tenant, event, {});
92
- await eventLog.emit(tenant, event, {});
93
- await eventLog.emit(tenant, event, {});
103
+ await eventLog.emit(tenant, event, {}, cid(1));
104
+ await eventLog.emit(tenant, event, {}, cid(2));
105
+ await eventLog.emit(tenant, event, {}, cid(3));
94
106
  const result = await eventLog.read(tenant, { limit: 2 });
95
107
  expect(result.events.length).toBe(2);
96
108
  expect(result.cursor).toBeDefined();
97
109
  });
98
110
  });
99
111
  describe('subscribe() — live only (no cursor)', () => {
100
- it('should deliver live events to subscriber with cursor strings', async () => {
112
+ it('should deliver live events to subscriber with ProgressTokens', async () => {
101
113
  const tenant = 'did:example:alice';
102
114
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
103
115
  const received = [];
104
116
  await eventLog.subscribe(tenant, 'sub-1', (msg) => { received.push(msg); });
105
- await eventLog.emit(tenant, event, {});
106
- await eventLog.emit(tenant, event, {});
117
+ await eventLog.emit(tenant, event, {}, cid(1));
118
+ await eventLog.emit(tenant, event, {}, cid(2));
119
+ // Allow async token construction to settle.
120
+ await new Promise((r) => setTimeout(r, 10));
107
121
  expect(received.length).toBe(2);
108
122
  expect(received[0].type).toBe('event');
109
123
  expect(received[1].type).toBe('event');
110
124
  if (received[0].type === 'event') {
111
- expect(typeof received[0].cursor).toBe('string');
112
- expect(received[0].cursor.length).toBeGreaterThan(0);
125
+ expect(typeof received[0].cursor).toBe('object');
126
+ expect(received[0].cursor.streamId.length).toBeGreaterThan(0);
113
127
  }
114
128
  });
115
129
  it('should NOT deliver EOSE when no cursor is provided', async () => {
116
130
  const tenant = 'did:example:alice';
117
131
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
118
132
  // Emit some events before subscribing.
119
- await eventLog.emit(tenant, event, {});
133
+ await eventLog.emit(tenant, event, {}, cid(1));
120
134
  const received = [];
121
135
  await eventLog.subscribe(tenant, 'sub-1', (msg) => { received.push(msg); });
122
136
  // Emit after subscribing.
123
- await eventLog.emit(tenant, event, {});
137
+ await eventLog.emit(tenant, event, {}, cid(2));
138
+ // Allow async token construction to settle.
139
+ await new Promise((r) => setTimeout(r, 10));
124
140
  // Should only have the live event, no EOSE.
125
141
  expect(received.length).toBe(1);
126
142
  expect(received[0].type).toBe('event');
@@ -132,9 +148,11 @@ describe('EventEmitterEventLog', () => {
132
148
  await eventLog.subscribe(tenant, 'sub-1', (msg) => { received.push(msg); }, {
133
149
  filters: [{ schema: 'http://match' }],
134
150
  });
135
- await eventLog.emit(tenant, event, { schema: 'http://match' });
136
- await eventLog.emit(tenant, event, { schema: 'http://other' });
137
- await eventLog.emit(tenant, event, { schema: 'http://match' });
151
+ await eventLog.emit(tenant, event, { schema: 'http://match' }, cid(1));
152
+ await eventLog.emit(tenant, event, { schema: 'http://other' }, cid(2));
153
+ await eventLog.emit(tenant, event, { schema: 'http://match' }, cid(3));
154
+ // Allow async token construction to settle.
155
+ await new Promise((r) => setTimeout(r, 10));
138
156
  expect(received.length).toBe(2);
139
157
  });
140
158
  it('should stop delivering events after close', async () => {
@@ -142,10 +160,12 @@ describe('EventEmitterEventLog', () => {
142
160
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
143
161
  const received = [];
144
162
  const sub = await eventLog.subscribe(tenant, 'sub-1', (msg) => { received.push(msg); });
145
- await eventLog.emit(tenant, event, {});
163
+ await eventLog.emit(tenant, event, {}, cid(1));
164
+ await new Promise((r) => setTimeout(r, 10));
146
165
  expect(received.length).toBe(1);
147
166
  await sub.close();
148
- await eventLog.emit(tenant, event, {});
167
+ await eventLog.emit(tenant, event, {}, cid(2));
168
+ await new Promise((r) => setTimeout(r, 10));
149
169
  expect(received.length).toBe(1); // no new events after close
150
170
  });
151
171
  });
@@ -154,9 +174,9 @@ describe('EventEmitterEventLog', () => {
154
174
  const tenant = 'did:example:alice';
155
175
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
156
176
  // Emit 3 events, capture the first cursor.
157
- const cursor1 = await eventLog.emit(tenant, event, { idx: '1' });
158
- await eventLog.emit(tenant, event, { idx: '2' });
159
- await eventLog.emit(tenant, event, { idx: '3' });
177
+ const cursor1 = await eventLog.emit(tenant, event, { idx: '1' }, cid(1));
178
+ await eventLog.emit(tenant, event, { idx: '2' }, cid(2));
179
+ await eventLog.emit(tenant, event, { idx: '3' }, cid(3));
160
180
  // Subscribe with cursor from first event — should replay events 2 and 3.
161
181
  const received = [];
162
182
  await eventLog.subscribe(tenant, 'sub-1', (msg) => { received.push(msg); }, { cursor: cursor1 });
@@ -165,17 +185,17 @@ describe('EventEmitterEventLog', () => {
165
185
  expect(received[0].type).toBe('event');
166
186
  expect(received[1].type).toBe('event');
167
187
  expect(received[2].type).toBe('eose');
168
- // Cursors should be opaque strings, each different.
188
+ // Tokens should be different between events.
169
189
  if (received[0].type === 'event' && received[1].type === 'event') {
170
- expect(received[0].cursor).not.toBe(received[1].cursor);
190
+ expect(received[0].cursor.position).not.toBe(received[1].cursor.position);
171
191
  }
172
192
  });
173
193
  it('should deliver EOSE echoing the input cursor when already caught up', async () => {
174
194
  const tenant = 'did:example:alice';
175
195
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
176
196
  // Emit events and capture last cursor.
177
- await eventLog.emit(tenant, event, {});
178
- const lastCursor = await eventLog.emit(tenant, event, {});
197
+ await eventLog.emit(tenant, event, {}, cid(1));
198
+ const lastCursor = await eventLog.emit(tenant, event, {}, cid(2));
179
199
  // Subscribe with the last cursor — already caught up, no stored events to replay.
180
200
  const received = [];
181
201
  await eventLog.subscribe(tenant, 'sub-1', (msg) => { received.push(msg); }, { cursor: lastCursor });
@@ -183,36 +203,38 @@ describe('EventEmitterEventLog', () => {
183
203
  expect(received.length).toBe(1);
184
204
  expect(received[0].type).toBe('eose');
185
205
  if (received[0].type === 'eose') {
186
- expect(received[0].cursor).toBe(lastCursor);
206
+ expect(received[0].cursor).toEqual(lastCursor);
187
207
  }
188
208
  });
189
209
  it('should continue delivering live events after EOSE', async () => {
190
210
  const tenant = 'did:example:alice';
191
211
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
192
212
  // Emit 1 event and capture its cursor.
193
- const cursor1 = await eventLog.emit(tenant, event, { idx: '1' });
213
+ const cursor1 = await eventLog.emit(tenant, event, { idx: '1' }, cid(1));
194
214
  const received = [];
195
215
  await eventLog.subscribe(tenant, 'sub-1', (msg) => { received.push(msg); }, { cursor: cursor1 });
196
216
  // Already caught up — should have just EOSE.
197
217
  expect(received.length).toBe(1);
198
218
  expect(received[0].type).toBe('eose');
199
219
  // Now emit a live event.
200
- await eventLog.emit(tenant, event, { idx: '2' });
220
+ await eventLog.emit(tenant, event, { idx: '2' }, cid(2));
221
+ // Allow async token construction to settle.
222
+ await new Promise((r) => setTimeout(r, 10));
201
223
  // Should now have the live event appended.
202
224
  expect(received.length).toBe(2);
203
225
  expect(received[1].type).toBe('event');
204
226
  if (received[1].type === 'event') {
205
- expect(typeof received[1].cursor).toBe('string');
227
+ expect(typeof received[1].cursor).toBe('object');
206
228
  }
207
229
  });
208
230
  it('should apply filters to both catch-up and live events', async () => {
209
231
  const tenant = 'did:example:alice';
210
232
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
211
233
  // Emit events with different schemas, capture cursor before the batch.
212
- const cursorBefore = await eventLog.emit(tenant, event, { schema: 'http://before' });
213
- await eventLog.emit(tenant, event, { schema: 'http://match' });
214
- await eventLog.emit(tenant, event, { schema: 'http://other' });
215
- await eventLog.emit(tenant, event, { schema: 'http://match' });
234
+ const cursorBefore = await eventLog.emit(tenant, event, { schema: 'http://before' }, cid(0));
235
+ await eventLog.emit(tenant, event, { schema: 'http://match' }, cid(1));
236
+ await eventLog.emit(tenant, event, { schema: 'http://other' }, cid(2));
237
+ await eventLog.emit(tenant, event, { schema: 'http://match' }, cid(3));
216
238
  const received = [];
217
239
  await eventLog.subscribe(tenant, 'sub-1', (msg) => { received.push(msg); }, {
218
240
  cursor: cursorBefore,
@@ -224,33 +246,37 @@ describe('EventEmitterEventLog', () => {
224
246
  expect(received[1].type).toBe('event');
225
247
  expect(received[2].type).toBe('eose');
226
248
  // Emit live events — only matching ones should arrive.
227
- await eventLog.emit(tenant, event, { schema: 'http://other' });
228
- await eventLog.emit(tenant, event, { schema: 'http://match' });
249
+ await eventLog.emit(tenant, event, { schema: 'http://other' }, cid(4));
250
+ await eventLog.emit(tenant, event, { schema: 'http://match' }, cid(5));
251
+ // Allow async token construction to settle.
252
+ await new Promise((r) => setTimeout(r, 10));
229
253
  expect(received.length).toBe(4); // +1 matching live event
230
254
  });
231
255
  it('should deduplicate live events that arrived during catch-up', async () => {
232
256
  const tenant = 'did:example:alice';
233
257
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
234
258
  // Emit 2 events, capture cursor before them.
235
- const cursorBefore = await eventLog.emit(tenant, event, { idx: '0' });
236
- await eventLog.emit(tenant, event, { idx: '1' });
237
- await eventLog.emit(tenant, event, { idx: '2' });
259
+ const cursorBefore = await eventLog.emit(tenant, event, { idx: '0' }, cid(0));
260
+ await eventLog.emit(tenant, event, { idx: '1' }, cid(1));
261
+ await eventLog.emit(tenant, event, { idx: '2' }, cid(2));
238
262
  const received = [];
239
263
  await eventLog.subscribe(tenant, 'sub-1', (msg) => { received.push(msg); }, { cursor: cursorBefore });
240
264
  // 2 catch-up events + EOSE.
241
265
  expect(received.length).toBe(3);
242
- // Verify no duplicate cursors.
243
- const eventCursors = received.filter(m => m.type === 'event').map(m => m.cursor);
244
- const uniqueCursors = new Set(eventCursors);
245
- expect(uniqueCursors.size).toBe(eventCursors.length);
266
+ // Verify no duplicate positions.
267
+ const eventPositions = received
268
+ .filter((m) => m.type === 'event')
269
+ .map(m => m.cursor.position);
270
+ const uniquePositions = new Set(eventPositions);
271
+ expect(uniquePositions.size).toBe(eventPositions.length);
246
272
  });
247
273
  it('should isolate subscriptions between tenants in cursor mode', async () => {
248
274
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
249
275
  // Emit for alice, capture first cursor.
250
- const aliceCursor1 = await eventLog.emit('did:example:alice', event, {});
251
- await eventLog.emit('did:example:alice', event, {});
276
+ const aliceCursor1 = await eventLog.emit('did:example:alice', event, {}, cid(1));
277
+ await eventLog.emit('did:example:alice', event, {}, cid(2));
252
278
  // Emit for bob.
253
- await eventLog.emit('did:example:bob', event, {});
279
+ await eventLog.emit('did:example:bob', event, {}, cid(3));
254
280
  // Subscribe to alice with cursor — should only get alice's second event.
255
281
  const aliceReceived = [];
256
282
  await eventLog.subscribe('did:example:alice', 'sub-alice', (msg) => { aliceReceived.push(msg); }, { cursor: aliceCursor1 });
@@ -260,13 +286,120 @@ describe('EventEmitterEventLog', () => {
260
286
  expect(aliceReceived[1].type).toBe('eose');
261
287
  });
262
288
  });
289
+ describe('getReplayBounds()', () => {
290
+ it('should return undefined for a tenant with no events', async () => {
291
+ const result = await eventLog.getReplayBounds('did:example:nobody');
292
+ expect(result).toBeUndefined();
293
+ });
294
+ it('should return oldest and latest tokens', async () => {
295
+ const tenant = 'did:example:alice';
296
+ const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
297
+ await eventLog.emit(tenant, event, {}, cid(1));
298
+ await eventLog.emit(tenant, event, {}, cid(2));
299
+ await eventLog.emit(tenant, event, {}, cid(3));
300
+ const bounds = await eventLog.getReplayBounds(tenant);
301
+ expect(bounds).toBeDefined();
302
+ expect(bounds.oldest.position).toBe('1');
303
+ expect(bounds.oldest.messageCid).toBe(cid(1));
304
+ expect(bounds.latest.position).toBe('3');
305
+ expect(bounds.latest.messageCid).toBe(cid(3));
306
+ });
307
+ it('should reflect trimmed state', async () => {
308
+ const tenant = 'did:example:alice';
309
+ const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
310
+ await eventLog.emit(tenant, event, {}, cid(1));
311
+ await eventLog.emit(tenant, event, {}, cid(2));
312
+ await eventLog.emit(tenant, event, {}, cid(3));
313
+ await eventLog.trim(tenant, 3); // trim seq < 3
314
+ const bounds = await eventLog.getReplayBounds(tenant);
315
+ expect(bounds).toBeDefined();
316
+ expect(bounds.oldest.position).toBe('3');
317
+ expect(bounds.latest.position).toBe('3');
318
+ });
319
+ });
320
+ describe('ProgressGap detection', () => {
321
+ it('should throw EventLogProgressGap with reason epoch_mismatch when epoch differs', async () => {
322
+ const tenant = 'did:example:alice';
323
+ const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
324
+ const token = await eventLog.emit(tenant, event, {}, cid(1));
325
+ // Create a token with a different epoch.
326
+ const staleToken = { ...token, epoch: 'stale-epoch-from-previous-process' };
327
+ await expect(eventLog.read(tenant, { cursor: staleToken }))
328
+ .rejects.toThrow('epoch_mismatch');
329
+ });
330
+ it('should throw EventLogProgressGap with reason stream_mismatch when streamId differs', async () => {
331
+ const tenant = 'did:example:alice';
332
+ const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
333
+ const token = await eventLog.emit(tenant, event, {}, cid(1));
334
+ // Create a token with a wrong streamId.
335
+ const badToken = { ...token, streamId: 'wrong-stream-id' };
336
+ await expect(eventLog.read(tenant, { cursor: badToken }))
337
+ .rejects.toThrow('stream_mismatch');
338
+ });
339
+ it('should throw EventLogProgressGap with reason token_too_old when position is evicted', async () => {
340
+ const smallLog = new EventEmitterEventLog({ maxEventsPerTenant: 2 });
341
+ await smallLog.open();
342
+ const tenant = 'did:example:alice';
343
+ const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
344
+ // Emit 4 events with maxEventsPerTenant=2 — seqs 1 and 2 evicted, only [3,4] remain.
345
+ const firstToken = await smallLog.emit(tenant, event, {}, cid(1));
346
+ await smallLog.emit(tenant, event, {}, cid(2));
347
+ await smallLog.emit(tenant, event, {}, cid(3));
348
+ await smallLog.emit(tenant, event, {}, cid(4));
349
+ // firstToken has position='1', oldest is now seq=3.
350
+ // Cursor 1 means "give me events after seq 1" — but seq 2 is gone. That's a gap.
351
+ await expect(smallLog.read(tenant, { cursor: firstToken }))
352
+ .rejects.toThrow('token_too_old');
353
+ await smallLog.close();
354
+ });
355
+ it('should include ProgressGapInfo metadata on the thrown error', async () => {
356
+ const smallLog = new EventEmitterEventLog({ maxEventsPerTenant: 2 });
357
+ await smallLog.open();
358
+ const tenant = 'did:example:alice';
359
+ const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
360
+ const firstToken = await smallLog.emit(tenant, event, {}, cid(1));
361
+ await smallLog.emit(tenant, event, {}, cid(2));
362
+ await smallLog.emit(tenant, event, {}, cid(3));
363
+ await smallLog.emit(tenant, event, {}, cid(4)); // now only [3,4] remain
364
+ try {
365
+ await smallLog.read(tenant, { cursor: firstToken });
366
+ throw new Error('expected error');
367
+ }
368
+ catch (error) {
369
+ expect(error.code).toBe('EventLogProgressGap');
370
+ expect(error.gapInfo).toBeDefined();
371
+ expect(error.gapInfo.requested).toEqual(firstToken);
372
+ expect(error.gapInfo.oldestAvailable.position).toBe('3');
373
+ expect(error.gapInfo.latestAvailable.position).toBe('4');
374
+ expect(error.gapInfo.reason).toBe('token_too_old');
375
+ }
376
+ await smallLog.close();
377
+ });
378
+ it('should throw on subscribe() with stale cursor', async () => {
379
+ const tenant = 'did:example:alice';
380
+ const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
381
+ const token = await eventLog.emit(tenant, event, {}, cid(1));
382
+ const staleToken = { ...token, epoch: 'old-epoch' };
383
+ await expect(eventLog.subscribe(tenant, 'sub-1', () => { }, { cursor: staleToken })).rejects.toThrow('epoch_mismatch');
384
+ });
385
+ it('should accept a valid cursor without throwing', async () => {
386
+ const tenant = 'did:example:alice';
387
+ const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
388
+ const token1 = await eventLog.emit(tenant, event, {}, cid(1));
389
+ await eventLog.emit(tenant, event, {}, cid(2));
390
+ // Read with a valid cursor — should succeed without throwing.
391
+ const result = await eventLog.read(tenant, { cursor: token1 });
392
+ expect(result.events.length).toBe(1);
393
+ expect(result.cursor.position).toBe('2');
394
+ });
395
+ });
263
396
  describe('trim()', () => {
264
397
  it('should trim events by sequence number', async () => {
265
398
  const tenant = 'did:example:alice';
266
399
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
267
- await eventLog.emit(tenant, event, {});
268
- await eventLog.emit(tenant, event, {});
269
- await eventLog.emit(tenant, event, {});
400
+ await eventLog.emit(tenant, event, {}, cid(1));
401
+ await eventLog.emit(tenant, event, {}, cid(2));
402
+ await eventLog.emit(tenant, event, {}, cid(3));
270
403
  await eventLog.trim(tenant, 3); // trim events with seq < 3
271
404
  const result = await eventLog.read(tenant);
272
405
  expect(result.events.length).toBe(1);
@@ -277,8 +410,8 @@ describe('EventEmitterEventLog', () => {
277
410
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
278
411
  const oldTime = '2020-01-01T00:00:00.000000Z';
279
412
  const newTime = '2025-01-01T00:00:00.000000Z';
280
- await eventLog.emit(tenant, event, { messageTimestamp: oldTime });
281
- await eventLog.emit(tenant, event, { messageTimestamp: newTime });
413
+ await eventLog.emit(tenant, event, { messageTimestamp: oldTime }, cid(1));
414
+ await eventLog.emit(tenant, event, { messageTimestamp: newTime }, cid(2));
282
415
  await eventLog.trim(tenant, '2023-01-01T00:00:00.000000Z');
283
416
  const result = await eventLog.read(tenant);
284
417
  expect(result.events.length).toBe(1);
@@ -290,10 +423,10 @@ describe('EventEmitterEventLog', () => {
290
423
  await smallLog.open();
291
424
  const tenant = 'did:example:alice';
292
425
  const event = { message: { descriptor: { interface: 'Records', method: 'Write' } } };
293
- await smallLog.emit(tenant, event, { idx: '1' });
294
- await smallLog.emit(tenant, event, { idx: '2' });
295
- await smallLog.emit(tenant, event, { idx: '3' });
296
- await smallLog.emit(tenant, event, { idx: '4' }); // should evict seq=1
426
+ await smallLog.emit(tenant, event, { idx: '1' }, cid(1));
427
+ await smallLog.emit(tenant, event, { idx: '2' }, cid(2));
428
+ await smallLog.emit(tenant, event, { idx: '3' }, cid(3));
429
+ await smallLog.emit(tenant, event, { idx: '4' }, cid(4)); // should evict seq=1
297
430
  const result = await smallLog.read(tenant);
298
431
  expect(result.events.length).toBe(3);
299
432
  expect(result.events[0].seq).toBe(2); // seq=1 was evicted
@@ -1 +1 @@
1
- {"version":3,"file":"event-emitter-event-log.spec.js","sourceRoot":"","sources":["../../../tests/event-emitter-event-log.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-emitter-event-log.spec.js","sourceRoot":"","sources":["../../../tests/event-emitter-event-log.spec.ts"],"names":[],"mappings":"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"}