@memberjunction/work-queue-core 0.0.1-seed.1 → 6.2.0-edge.3

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 (131) hide show
  1. package/LICENSE +183 -0
  2. package/README.md +129 -3
  3. package/dist/api/WorkQueueApiPublisher.d.ts +35 -0
  4. package/dist/api/WorkQueueApiPublisher.d.ts.map +1 -0
  5. package/dist/api/WorkQueueApiPublisher.js +136 -0
  6. package/dist/api/WorkQueueApiPublisher.js.map +1 -0
  7. package/dist/api/restContract.d.ts +50 -0
  8. package/dist/api/restContract.d.ts.map +1 -0
  9. package/dist/api/restContract.js +247 -0
  10. package/dist/api/restContract.js.map +1 -0
  11. package/dist/backoff.d.ts +15 -0
  12. package/dist/backoff.d.ts.map +1 -0
  13. package/dist/backoff.js +29 -0
  14. package/dist/backoff.js.map +1 -0
  15. package/dist/compatibility.d.ts +10 -0
  16. package/dist/compatibility.d.ts.map +1 -0
  17. package/dist/compatibility.js +41 -0
  18. package/dist/compatibility.js.map +1 -0
  19. package/dist/envelope.d.ts +33 -0
  20. package/dist/envelope.d.ts.map +1 -0
  21. package/dist/envelope.js +2 -0
  22. package/dist/envelope.js.map +1 -0
  23. package/dist/errors.d.ts +14 -0
  24. package/dist/errors.d.ts.map +1 -0
  25. package/dist/errors.js +23 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/filter.d.ts +12 -0
  28. package/dist/filter.d.ts.map +1 -0
  29. package/dist/filter.js +187 -0
  30. package/dist/filter.js.map +1 -0
  31. package/dist/filterTypes.d.ts +25 -0
  32. package/dist/filterTypes.d.ts.map +1 -0
  33. package/dist/filterTypes.js +2 -0
  34. package/dist/filterTypes.js.map +1 -0
  35. package/dist/handler.d.ts +56 -0
  36. package/dist/handler.d.ts.map +1 -0
  37. package/dist/handler.js +25 -0
  38. package/dist/handler.js.map +1 -0
  39. package/dist/index.d.ts +24 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +27 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/manifest.d.ts +46 -0
  44. package/dist/manifest.d.ts.map +1 -0
  45. package/dist/manifest.js +2 -0
  46. package/dist/manifest.js.map +1 -0
  47. package/dist/memory/InMemoryConsumer.d.ts +18 -0
  48. package/dist/memory/InMemoryConsumer.d.ts.map +1 -0
  49. package/dist/memory/InMemoryConsumer.js +36 -0
  50. package/dist/memory/InMemoryConsumer.js.map +1 -0
  51. package/dist/memory/InMemoryOperator.d.ts +13 -0
  52. package/dist/memory/InMemoryOperator.d.ts.map +1 -0
  53. package/dist/memory/InMemoryOperator.js +25 -0
  54. package/dist/memory/InMemoryOperator.js.map +1 -0
  55. package/dist/memory/InMemoryStore.d.ts +82 -0
  56. package/dist/memory/InMemoryStore.d.ts.map +1 -0
  57. package/dist/memory/InMemoryStore.js +436 -0
  58. package/dist/memory/InMemoryStore.js.map +1 -0
  59. package/dist/memory/InMemoryTransport.d.ts +29 -0
  60. package/dist/memory/InMemoryTransport.d.ts.map +1 -0
  61. package/dist/memory/InMemoryTransport.js +48 -0
  62. package/dist/memory/InMemoryTransport.js.map +1 -0
  63. package/dist/operator.d.ts +60 -0
  64. package/dist/operator.d.ts.map +1 -0
  65. package/dist/operator.js +2 -0
  66. package/dist/operator.js.map +1 -0
  67. package/dist/policy.d.ts +24 -0
  68. package/dist/policy.d.ts.map +1 -0
  69. package/dist/policy.js +10 -0
  70. package/dist/policy.js.map +1 -0
  71. package/dist/publishing.d.ts +58 -0
  72. package/dist/publishing.d.ts.map +1 -0
  73. package/dist/publishing.js +40 -0
  74. package/dist/publishing.js.map +1 -0
  75. package/dist/runtime/ConsumerRuntime.d.ts +46 -0
  76. package/dist/runtime/ConsumerRuntime.d.ts.map +1 -0
  77. package/dist/runtime/ConsumerRuntime.js +252 -0
  78. package/dist/runtime/ConsumerRuntime.js.map +1 -0
  79. package/dist/runtime/DeliveryExecution.d.ts +83 -0
  80. package/dist/runtime/DeliveryExecution.d.ts.map +1 -0
  81. package/dist/runtime/DeliveryExecution.js +0 -0
  82. package/dist/runtime/DeliveryExecution.js.map +1 -0
  83. package/dist/runtime/outcomes.d.ts +28 -0
  84. package/dist/runtime/outcomes.d.ts.map +1 -0
  85. package/dist/runtime/outcomes.js +65 -0
  86. package/dist/runtime/outcomes.js.map +1 -0
  87. package/dist/runtime/types.d.ts +14 -0
  88. package/dist/runtime/types.d.ts.map +1 -0
  89. package/dist/runtime/types.js +2 -0
  90. package/dist/runtime/types.js.map +1 -0
  91. package/dist/testing/ConformanceHarness.d.ts +45 -0
  92. package/dist/testing/ConformanceHarness.d.ts.map +1 -0
  93. package/dist/testing/ConformanceHarness.js +2 -0
  94. package/dist/testing/ConformanceHarness.js.map +1 -0
  95. package/dist/testing/ConformanceScenario.d.ts +29 -0
  96. package/dist/testing/ConformanceScenario.d.ts.map +1 -0
  97. package/dist/testing/ConformanceScenario.js +83 -0
  98. package/dist/testing/ConformanceScenario.js.map +1 -0
  99. package/dist/testing/RunConformanceChecks.d.ts +10 -0
  100. package/dist/testing/RunConformanceChecks.d.ts.map +1 -0
  101. package/dist/testing/RunConformanceChecks.js +50 -0
  102. package/dist/testing/RunConformanceChecks.js.map +1 -0
  103. package/dist/testing/assertions.d.ts +13 -0
  104. package/dist/testing/assertions.d.ts.map +1 -0
  105. package/dist/testing/assertions.js +66 -0
  106. package/dist/testing/assertions.js.map +1 -0
  107. package/dist/testing/conformanceCases.d.ts +4 -0
  108. package/dist/testing/conformanceCases.d.ts.map +1 -0
  109. package/dist/testing/conformanceCases.js +359 -0
  110. package/dist/testing/conformanceCases.js.map +1 -0
  111. package/dist/testing/fixtures.d.ts +21 -0
  112. package/dist/testing/fixtures.d.ts.map +1 -0
  113. package/dist/testing/fixtures.js +39 -0
  114. package/dist/testing/fixtures.js.map +1 -0
  115. package/dist/testing/index.d.ts +6 -0
  116. package/dist/testing/index.d.ts.map +1 -0
  117. package/dist/testing/index.js +5 -0
  118. package/dist/testing/index.js.map +1 -0
  119. package/dist/testing/vitest.d.ts +4 -0
  120. package/dist/testing/vitest.d.ts.map +1 -0
  121. package/dist/testing/vitest.js +19 -0
  122. package/dist/testing/vitest.js.map +1 -0
  123. package/dist/transport.d.ts +106 -0
  124. package/dist/transport.d.ts.map +1 -0
  125. package/dist/transport.js +2 -0
  126. package/dist/transport.js.map +1 -0
  127. package/dist/validation.d.ts +26 -0
  128. package/dist/validation.d.ts.map +1 -0
  129. package/dist/validation.js +177 -0
  130. package/dist/validation.js.map +1 -0
  131. package/package.json +46 -5
@@ -0,0 +1,359 @@
1
+ import { AssertEqual, AssertLength, AssertMatch, AssertTrue } from './assertions.js';
2
+ import { Keyed, Numbers, WithScenario } from './ConformanceScenario.js';
3
+ const PARTITIONED_TOPIC = { IsFifo: true };
4
+ const always = () => null;
5
+ const whenOrdered = (harness) => harness.Capabilities.SupportsOrdered ? null : 'Transport does not support Ordered subscriptions';
6
+ const C01 = {
7
+ Id: 'C01',
8
+ Title: 'fans a message out to every subscription',
9
+ Gate: always,
10
+ Run: (harness) => WithScenario(harness, {}, [['a', {}], ['b', {}]], async (s) => {
11
+ const [result] = await s.Publish([{ Attributes: { n: '1' } }]);
12
+ AssertEqual(result.Status, 'Accepted', 'publish status');
13
+ const a = await s.Receive('a');
14
+ const b = await s.Receive('b');
15
+ AssertEqual(a.map((delivery) => delivery.Message.MessageID), [result.MessageID], 'subscription a');
16
+ AssertEqual(b.map((delivery) => delivery.Message.MessageID), [result.MessageID], 'subscription b');
17
+ AssertEqual(a[0].Attempt, 1, 'first attempt');
18
+ }),
19
+ };
20
+ const C02 = {
21
+ Id: 'C02',
22
+ Title: 'settles subscriptions independently',
23
+ Gate: always,
24
+ Run: (harness) => WithScenario(harness, {}, [['a', {}], ['b', {}]], async (s) => {
25
+ await s.Publish([{ Attributes: { n: '1' } }]);
26
+ const [a] = await s.Receive('a');
27
+ const [b] = await s.Receive('b');
28
+ AssertMatch(await s.Consumer('a').Complete(a), { Kind: 'Settled', Status: 'Completed' }, 'complete a');
29
+ AssertMatch(await s.Consumer('b').DeadLetter(b, 'Poison', 'bad data'), { Kind: 'Settled', Status: 'DeadLettered' }, 'dead-letter b');
30
+ AssertLength(await s.Receive('a'), 0, 'redelivery to a');
31
+ const aDead = await s.Operator.ListDeadLetters(s.Subscription('a'), null, 100);
32
+ const bDead = await s.Operator.ListDeadLetters(s.Subscription('b'), null, 100);
33
+ AssertLength(aDead?.Items ?? [], 0, 'dead letters of a');
34
+ AssertEqual((bDead?.Items ?? []).map((item) => item.Reason), ['Poison'], 'dead letters of b');
35
+ }),
36
+ };
37
+ const C03 = {
38
+ Id: 'C03',
39
+ Title: 'selects deliveries with attribute filters',
40
+ Gate: always,
41
+ Run: (harness) => WithScenario(harness, {}, [['clicks', { Filter: { logic: 'and', filters: [{ field: 'eventType', operator: 'eq', value: 'click' }] } }]], async (s) => {
42
+ await s.Publish([{ Attributes: { eventType: 'open', n: '1' } }, { Attributes: { eventType: 'click', n: '2' } }]);
43
+ AssertEqual(Numbers(await s.Receive('clicks')), ['2'], 'filtered deliveries');
44
+ }),
45
+ };
46
+ const C04 = {
47
+ Id: 'C04',
48
+ Title: 'does not redeliver a completed delivery',
49
+ Gate: always,
50
+ Run: (harness) => WithScenario(harness, {}, [['a', {}]], async (s) => {
51
+ await s.Publish([{ Attributes: { n: '1' } }]);
52
+ const [delivery] = await s.Receive('a');
53
+ await s.Consumer('a').Complete(delivery);
54
+ AssertLength(await s.Receive('a'), 0, 'redelivery');
55
+ }),
56
+ };
57
+ const C05 = {
58
+ Id: 'C05',
59
+ Title: 'hides a retried delivery for its delay, then redelivers it',
60
+ Gate: always,
61
+ Run: (harness) => WithScenario(harness, {}, [['a', {}]], async (s) => {
62
+ await s.Publish([{ Attributes: { n: '1' } }]);
63
+ const [delivery] = await s.Receive('a');
64
+ AssertMatch(await s.Consumer('a').Retry(delivery, 2, 'busy'), { Kind: 'Settled', Status: 'Pending' }, 'retry');
65
+ AssertLength(await s.Receive('a'), 0, 'receive during backoff');
66
+ await harness.AdvanceTime(2500);
67
+ const [again] = await s.Receive('a');
68
+ AssertEqual(again?.Message.MessageID, delivery.Message.MessageID, 'redelivered message');
69
+ AssertEqual(again?.Attempt, 2, 'attempt');
70
+ }),
71
+ };
72
+ const C06 = {
73
+ Id: 'C06',
74
+ Title: 'redelivers after an expired lease and counts the attempt',
75
+ Gate: always,
76
+ Run: (harness) => WithScenario(harness, {}, [['a', { LeaseSeconds: 5 }]], async (s) => {
77
+ await s.Publish([{ Attributes: { n: '1' } }]);
78
+ await s.Receive('a');
79
+ await harness.AdvanceTime(6000);
80
+ const [again] = await s.Receive('a');
81
+ AssertEqual(again?.Attempt, 2, 'attempt');
82
+ }),
83
+ };
84
+ const C07 = {
85
+ Id: 'C07',
86
+ Title: 'fences out a stale lease token',
87
+ Gate: always,
88
+ Run: (harness) => WithScenario(harness, {}, [['a', { LeaseSeconds: 5 }]], async (s) => {
89
+ await s.Publish([{ Attributes: { n: '1' } }]);
90
+ const [first] = await s.Receive('a');
91
+ await harness.AdvanceTime(6000);
92
+ const [second] = await s.Receive('a');
93
+ AssertMatch(await s.Consumer('a').Complete(first), { Kind: 'LeaseLost' }, 'stale complete');
94
+ AssertMatch(await s.Consumer('a').Complete(second), { Kind: 'Settled', Status: 'Completed' }, 'current complete');
95
+ }),
96
+ };
97
+ const C08 = {
98
+ Id: 'C08',
99
+ Title: 'keeps a delivery leased after ExtendLease',
100
+ Gate: always,
101
+ Run: (harness) => WithScenario(harness, {}, [['a', { LeaseSeconds: 5 }]], async (s) => {
102
+ await s.Publish([{ Attributes: { n: '1' } }]);
103
+ const [delivery] = await s.Receive('a');
104
+ await harness.AdvanceTime(4000);
105
+ AssertEqual(await s.Consumer('a').ExtendLease(delivery, 5), 'Held', 'extend');
106
+ await harness.AdvanceTime(3000);
107
+ AssertLength(await s.Receive('a'), 0, 'receive while extended');
108
+ AssertMatch(await s.Consumer('a').Complete(delivery), { Kind: 'Settled', Status: 'Completed' }, 'complete');
109
+ }),
110
+ };
111
+ const C09 = {
112
+ Id: 'C09',
113
+ Title: 'reports Lost when extending a lost lease',
114
+ Gate: always,
115
+ Run: (harness) => WithScenario(harness, {}, [['a', { LeaseSeconds: 5 }]], async (s) => {
116
+ await s.Publish([{ Attributes: { n: '1' } }]);
117
+ const [first] = await s.Receive('a');
118
+ await harness.AdvanceTime(6000);
119
+ await s.Receive('a');
120
+ AssertEqual(await s.Consumer('a').ExtendLease(first, 5), 'Lost', 'extend stale lease');
121
+ }),
122
+ };
123
+ const C10 = {
124
+ Id: 'C10',
125
+ Title: 'lists a dead letter with its reason',
126
+ Gate: always,
127
+ Run: (harness) => WithScenario(harness, {}, [['a', {}]], async (s) => {
128
+ await s.Publish([{ Attributes: { n: '1' } }]);
129
+ const [delivery] = await s.Receive('a');
130
+ await s.Consumer('a').DeadLetter(delivery, 'Poison', 'stack trace');
131
+ AssertLength(await s.Receive('a'), 0, 'redelivery');
132
+ const page = await s.Operator.ListDeadLetters(s.Subscription('a'), null, 100);
133
+ AssertEqual((page?.Items ?? []).map((item) => [item.Reason, item.Message.MessageID]), [['Poison', delivery.Message.MessageID]], 'dead letters');
134
+ }),
135
+ };
136
+ const C11 = {
137
+ Id: 'C11',
138
+ Title: 'Exclusive: runs one delivery per key at a time',
139
+ Gate: always,
140
+ Run: (harness) => WithScenario(harness, PARTITIONED_TOPIC, [['a', { PartitionMode: 'Exclusive' }]], async (s) => {
141
+ await s.Publish([Keyed('1'), Keyed('2')]);
142
+ const first = await s.Receive('a');
143
+ AssertLength(first, 1, 'first receive');
144
+ await s.Consumer('a').Complete(first[0]);
145
+ AssertLength(await s.Receive('a'), 1, 'second receive');
146
+ }),
147
+ };
148
+ const C12 = {
149
+ Id: 'C12',
150
+ Title: 'Exclusive: runs different keys concurrently',
151
+ Gate: always,
152
+ Run: (harness) => WithScenario(harness, PARTITIONED_TOPIC, [['a', { PartitionMode: 'Exclusive' }]], async (s) => {
153
+ await s.Publish([Keyed('1', 'k1'), Keyed('2', 'k2')]);
154
+ AssertEqual(Numbers(await s.Receive('a')), ['1', '2'], 'concurrent keys');
155
+ }),
156
+ };
157
+ const C13 = {
158
+ Id: 'C13',
159
+ Title: 'Exclusive: a dead letter does not block its key',
160
+ Gate: always,
161
+ Run: (harness) => WithScenario(harness, PARTITIONED_TOPIC, [['a', { PartitionMode: 'Exclusive' }]], async (s) => {
162
+ await s.Publish([Keyed('1'), Keyed('2')]);
163
+ const [first] = await s.Receive('a');
164
+ await s.Consumer('a').DeadLetter(first, 'Poison', null);
165
+ AssertLength(await s.Receive('a'), 1, 'receive after dead letter');
166
+ }),
167
+ };
168
+ const C14 = {
169
+ Id: 'C14',
170
+ Title: 'Ordered: delivers only the head of each key',
171
+ Gate: whenOrdered,
172
+ Run: (harness) => WithScenario(harness, PARTITIONED_TOPIC, [['a', { PartitionMode: 'Ordered' }]], async (s) => {
173
+ await s.Publish([Keyed('1'), Keyed('2')]);
174
+ const first = await s.Receive('a');
175
+ AssertEqual(Numbers(first), ['1'], 'head');
176
+ await s.Consumer('a').Complete(first[0]);
177
+ AssertEqual(Numbers(await s.Receive('a')), ['2'], 'next');
178
+ }),
179
+ };
180
+ const C15 = {
181
+ Id: 'C15',
182
+ Title: 'Ordered: a head in retry backoff holds its key',
183
+ Gate: whenOrdered,
184
+ Run: (harness) => WithScenario(harness, PARTITIONED_TOPIC, [['a', { PartitionMode: 'Ordered' }]], async (s) => {
185
+ await s.Publish([Keyed('1'), Keyed('2')]);
186
+ const [head] = await s.Receive('a');
187
+ await s.Consumer('a').Retry(head, 2, 'busy');
188
+ AssertLength(await s.Receive('a'), 0, 'receive during head backoff');
189
+ await harness.AdvanceTime(2500);
190
+ const again = await s.Receive('a');
191
+ AssertEqual(Numbers(again), ['1'], 'head redelivered');
192
+ AssertEqual(again[0]?.Attempt, 2, 'attempt');
193
+ }),
194
+ };
195
+ const C16 = {
196
+ Id: 'C16',
197
+ Title: 'Ordered: a dead letter blocks its key until replayed',
198
+ Gate: whenOrdered,
199
+ Run: (harness) => WithScenario(harness, PARTITIONED_TOPIC, [['a', { PartitionMode: 'Ordered' }]], async (s) => {
200
+ await s.Publish([Keyed('1'), Keyed('2')]);
201
+ const [head] = await s.Receive('a');
202
+ await s.Consumer('a').DeadLetter(head, 'Poison', null);
203
+ AssertLength(await s.Receive('a'), 0, 'receive behind dead letter');
204
+ if (harness.Capabilities.ListPartitions) {
205
+ const blocked = await s.Operator.ListPartitions(s.Subscription('a'), 'Blocked', null, 10);
206
+ AssertEqual((blocked?.Items ?? []).map((item) => item.PartitionKey), ['k'], 'blocked keys');
207
+ }
208
+ const id = await s.DeadLetterID('a', head.Message.MessageID);
209
+ AssertEqual(await s.Operator.Replay(s.Subscription('a'), id, null, 'fixed upstream'), { Supported: true, Changed: true }, 'replay');
210
+ const replayed = await s.Receive('a');
211
+ AssertEqual(Numbers(replayed), ['1'], 'replayed head');
212
+ AssertTrue(replayed[0]?.IsReplay === true, 'IsReplay');
213
+ AssertEqual(replayed[0]?.Attempt, 1, 'replay attempt');
214
+ await s.Consumer('a').Complete(replayed[0]);
215
+ AssertEqual(Numbers(await s.Receive('a')), ['2'], 'next after replay');
216
+ }),
217
+ };
218
+ const C17 = {
219
+ Id: 'C17',
220
+ Title: 'Ordered: discarding the dead letter unblocks the key',
221
+ Gate: whenOrdered,
222
+ Run: (harness) => WithScenario(harness, PARTITIONED_TOPIC, [['a', { PartitionMode: 'Ordered' }]], async (s) => {
223
+ await s.Publish([Keyed('1'), Keyed('2')]);
224
+ const [head] = await s.Receive('a');
225
+ await s.Consumer('a').DeadLetter(head, 'Poison', null);
226
+ const id = await s.DeadLetterID('a', head.Message.MessageID);
227
+ AssertEqual(await s.Operator.Discard(s.Subscription('a'), id, 'bad batch', null), { Supported: true, Changed: true }, 'discard');
228
+ AssertEqual(Numbers(await s.Receive('a')), ['2'], 'next after discard');
229
+ }),
230
+ };
231
+ const C18 = {
232
+ Id: 'C18',
233
+ Title: 'discards a pending delivery',
234
+ Gate: (harness) => (harness.Capabilities.CancelPending ? null : 'Transport cannot cancel pending deliveries'),
235
+ Run: (harness) => WithScenario(harness, {}, [['a', {}]], async (s) => {
236
+ await s.Publish([{ Attributes: { n: '1' } }]);
237
+ const [delivery] = await s.Receive('a');
238
+ await s.Consumer('a').Release(delivery);
239
+ AssertEqual(await s.Operator.Discard(s.Subscription('a'), delivery.DeliveryID, 'cancelled', null), { Supported: true, Changed: true }, 'discard');
240
+ AssertLength(await s.Receive('a'), 0, 'receive after discard');
241
+ }),
242
+ };
243
+ const whenDetectsDuplicates = (harness) => harness.Capabilities.DetectsMessageIDDuplicates ? null : 'Transport does not detect MessageID duplicates';
244
+ const C19 = {
245
+ Id: 'C19',
246
+ Title: 'reports a republished MessageID as Duplicate',
247
+ Gate: whenDetectsDuplicates,
248
+ Run: (harness) => WithScenario(harness, {}, [['a', {}]], async (s) => {
249
+ const messageID = crypto.randomUUID();
250
+ await s.Publish([{ MessageID: messageID, Attributes: { n: '1', kind: 'x' }, Payload: { a: 1, b: 2 } }]);
251
+ // Same envelope with its keys in another order: the comparison is canonical (spec 03 §2.1).
252
+ const [again] = await s.Publish([{ MessageID: messageID, Attributes: { kind: 'x', n: '1' }, Payload: { b: 2, a: 1 } }]);
253
+ AssertEqual(again.Status, 'Duplicate', 'republish status');
254
+ AssertLength(await s.Receive('a'), 1, 'deliveries');
255
+ }),
256
+ };
257
+ const C20 = {
258
+ Id: 'C20',
259
+ Title: 'rejects a reused MessageID with a different envelope',
260
+ Gate: whenDetectsDuplicates,
261
+ Run: (harness) => WithScenario(harness, {}, [['a', {}]], async (s) => {
262
+ const messageID = crypto.randomUUID();
263
+ await s.Publish([{ MessageID: messageID, Attributes: { n: '1' } }]);
264
+ const [conflict] = await s.Publish([{ MessageID: messageID, Attributes: { n: '2' } }]);
265
+ AssertEqual(conflict.Status, 'Rejected', 'conflict status');
266
+ AssertEqual(conflict.Error?.Code, 'MessageIDConflict', 'conflict code');
267
+ AssertEqual(Numbers(await s.Receive('a')), ['1'], 'only the first publish is delivered');
268
+ }),
269
+ };
270
+ const C21 = {
271
+ Id: 'C21',
272
+ Title: 'redelivers a released delivery',
273
+ Gate: always,
274
+ Run: (harness) => WithScenario(harness, {}, [['a', {}]], async (s) => {
275
+ await s.Publish([{ Attributes: { n: '1' } }]);
276
+ const [delivery] = await s.Receive('a');
277
+ AssertMatch(await s.Consumer('a').Release(delivery), { Kind: 'Settled' }, 'release');
278
+ const [again] = await s.Receive('a');
279
+ AssertEqual(again?.Attempt, harness.Traits.ReleaseConsumesAttempt ? 2 : 1, 'attempt');
280
+ }),
281
+ };
282
+ const C22 = {
283
+ Id: 'C22',
284
+ Title: 'dead-letters a lease that expires on the final attempt',
285
+ Gate: (harness) => (harness.Traits.ExpiredLeaseDeadLetters ? null : 'Transport does not dead-letter expired leases itself'),
286
+ Run: (harness) => WithScenario(harness, {}, [['a', { MaxAttempts: 1, LeaseSeconds: 5 }]], async (s) => {
287
+ await s.Publish([{ Attributes: { n: '1' } }]);
288
+ await s.Receive('a');
289
+ await harness.AdvanceTime(6000);
290
+ AssertLength(await s.Receive('a'), 0, 'receive after final lease expiry');
291
+ const page = await s.Operator.ListDeadLetters(s.Subscription('a'), null, 100);
292
+ AssertEqual((page?.Items ?? []).map((item) => item.Reason), ['LeaseExpired'], 'dead-letter reasons');
293
+ }),
294
+ };
295
+ const C23 = {
296
+ Id: 'C23',
297
+ Title: 'counts completions in the last hour',
298
+ Gate: (harness) => (harness.Capabilities.CompletedCounts ? null : 'Transport does not count completions'),
299
+ Run: (harness) => WithScenario(harness, {}, [['a', {}]], async (s) => {
300
+ await s.Publish([{ Attributes: { n: '1' } }, { Attributes: { n: '2' } }]);
301
+ const [delivery] = await s.Receive('a', 1);
302
+ await s.Consumer('a').Complete(delivery);
303
+ AssertMatch(await s.Operator.GetStats(s.Subscription('a')), { Pending: 1, InFlight: 0, CompletedLastHour: 1 }, 'stats');
304
+ }),
305
+ };
306
+ const whenCancelInFlight = (harness) => harness.Capabilities.CancelInFlight ? null : 'Transport cannot cancel in-flight deliveries';
307
+ const C24 = {
308
+ Id: 'C24',
309
+ Title: 'cancelling in flight reports Cancelled, fences every settle, and acknowledges as Discarded',
310
+ Gate: whenCancelInFlight,
311
+ Run: (harness) => WithScenario(harness, {}, [['a', { LeaseSeconds: 5 }]], async (s) => {
312
+ await s.Publish([{ Attributes: { n: '1' } }]);
313
+ const [delivery] = await s.Receive('a');
314
+ AssertEqual(await s.Operator.Discard(s.Subscription('a'), delivery.DeliveryID, 'operator cancelled', null), { Supported: true, Changed: true, CancelRequested: true }, 'cancel in flight');
315
+ // The token is not rotated: the holder is told why, and only AcknowledgeCancel still succeeds.
316
+ AssertEqual(await s.Consumer('a').ExtendLease(delivery, 5), 'Cancelled', 'heartbeat after cancel');
317
+ AssertMatch(await s.Consumer('a').Complete(delivery), { Kind: 'LeaseLost' }, 'complete after cancel');
318
+ AssertMatch(await s.Consumer('a').Retry(delivery, 1, 'x'), { Kind: 'LeaseLost' }, 'retry after cancel');
319
+ AssertMatch(await s.Consumer('a').AcknowledgeCancel(delivery), { Kind: 'Settled', Status: 'Discarded' }, 'acknowledge');
320
+ AssertMatch(await s.Consumer('a').AcknowledgeCancel(delivery), { Kind: 'LeaseLost' }, 'second acknowledge');
321
+ await harness.AdvanceTime(6000);
322
+ AssertLength(await s.Receive('a'), 0, 'cancelled work is not redelivered');
323
+ AssertMatch(await s.Operator.GetStats(s.Subscription('a')), { Pending: 0, InFlight: 0, DeadLettered: 0 }, 'stats after cancel');
324
+ }),
325
+ };
326
+ const C25 = {
327
+ Id: 'C25',
328
+ Title: 'a cancelled key frees as soon as the holder acknowledges, not at lease expiry',
329
+ Gate: whenCancelInFlight,
330
+ Run: (harness) => WithScenario(harness, PARTITIONED_TOPIC, [['a', { PartitionMode: 'Exclusive', LeaseSeconds: 5 }]], async (s) => {
331
+ await s.Publish([Keyed('1'), Keyed('2')]);
332
+ const [head] = await s.Receive('a');
333
+ await s.Operator.Discard(s.Subscription('a'), head.DeliveryID, 'operator cancelled', null);
334
+ // Still in flight: the next item must not start while the old handler is winding down.
335
+ AssertLength(await s.Receive('a'), 0, 'key busy until the holder acknowledges');
336
+ AssertMatch(await s.Consumer('a').AcknowledgeCancel(head), { Kind: 'Settled', Status: 'Discarded' }, 'acknowledge');
337
+ AssertEqual(Numbers(await s.Receive('a')), ['2'], 'next item right after the acknowledgement');
338
+ }),
339
+ };
340
+ const C26 = {
341
+ Id: 'C26',
342
+ Title: 'a cancelled delivery whose holder is dead is discarded when its lease expires',
343
+ Gate: whenCancelInFlight,
344
+ Run: (harness) => WithScenario(harness, PARTITIONED_TOPIC, [['a', { PartitionMode: 'Exclusive', LeaseSeconds: 5 }]], async (s) => {
345
+ await s.Publish([Keyed('1'), Keyed('2')]);
346
+ const [head] = await s.Receive('a');
347
+ await s.Operator.Discard(s.Subscription('a'), head.DeliveryID, 'operator cancelled', null);
348
+ await harness.AdvanceTime(6000);
349
+ // No acknowledgement ever arrives; ExpireLeases discards the row instead of retrying it.
350
+ AssertEqual(Numbers(await s.Receive('a')), ['2'], 'next item after the cancelled lease expired');
351
+ AssertMatch(await s.Operator.GetStats(s.Subscription('a')), { Pending: 0, DeadLettered: 0 }, 'cancelled work was not retried');
352
+ }),
353
+ };
354
+ /** The transport conformance cases (spec 02 §6), in execution order. */
355
+ export const CONFORMANCE_CASES = [
356
+ C01, C02, C03, C04, C05, C06, C07, C08, C09, C10, C11, C12, C13,
357
+ C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25, C26,
358
+ ];
359
+ //# sourceMappingURL=conformanceCases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformanceCases.js","sourceRoot":"","sources":["../../src/testing/conformanceCases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { WorkJson, WorkMessage } from '../envelope.js';
2
+ import type { SubscriptionFilter } from '../filterTypes.js';
3
+ import type { HostType, SubscriptionPolicy } from '../policy.js';
4
+ import type { PublishRequest } from '../publishing.js';
5
+ import type { SubscriptionBinding, TopicBinding } from '../transport.js';
6
+ export type SubscriptionBindingOverrides = Partial<Omit<SubscriptionPolicy, 'SubscriptionName' | 'TopicName'>> & {
7
+ Filter?: SubscriptionFilter | null;
8
+ HostType?: HostType;
9
+ Config?: Record<string, WorkJson>;
10
+ };
11
+ export declare function BuildTopicBinding(name: string, overrides?: Partial<TopicBinding>): TopicBinding;
12
+ export declare function BuildSubscriptionBinding(topic: TopicBinding, name: string, overrides?: SubscriptionBindingOverrides): SubscriptionBinding;
13
+ export declare function BuildMessages(topic: TopicBinding, requests: PublishRequest[], publishedAt?: Date): WorkMessage[];
14
+ /** A clock tests advance explicitly. Pass `clock.Now` as a transport's `Now` option. */
15
+ export declare class ManualClock {
16
+ private current;
17
+ readonly Now: () => number;
18
+ constructor(startMs?: number);
19
+ Advance(ms: number): void;
20
+ }
21
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/testing/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGtE,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,WAAW,CAAC,CAAC,GAAG;IAC7G,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACrC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,YAAY,CAQnG;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,4BAAiC,GAAG,mBAAmB,CAa7I;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,WAAW,GAAE,IAAiB,GAAG,WAAW,EAAE,CAE5H;AAED,wFAAwF;AACxF,qBAAa,WAAW;IACpB,OAAO,CAAC,OAAO,CAAS;IAExB,SAAgB,GAAG,QAAO,MAAM,CAAiB;gBAErC,OAAO,GAAE,MAA6B;IAI3C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAGnC"}
@@ -0,0 +1,39 @@
1
+ import { SUBSCRIPTION_POLICY_DEFAULTS } from '../policy.js';
2
+ import { BuildWorkMessage, MAX_ENVELOPE_BYTES } from '../validation.js';
3
+ export function BuildTopicBinding(name, overrides = {}) {
4
+ return {
5
+ TopicName: name,
6
+ IsFifo: false,
7
+ MaxPayloadBytes: MAX_ENVELOPE_BYTES,
8
+ Config: {},
9
+ ...overrides,
10
+ };
11
+ }
12
+ export function BuildSubscriptionBinding(topic, name, overrides = {}) {
13
+ const { Filter: filter, HostType: hostType, Config: config, ...policy } = overrides;
14
+ return {
15
+ Policy: {
16
+ SubscriptionName: name,
17
+ TopicName: topic.TopicName,
18
+ ...SUBSCRIPTION_POLICY_DEFAULTS,
19
+ ...policy,
20
+ },
21
+ Filter: filter ?? null,
22
+ HostType: hostType ?? 'MJWorker',
23
+ Config: config ?? {},
24
+ };
25
+ }
26
+ export function BuildMessages(topic, requests, publishedAt = new Date()) {
27
+ return requests.map((request) => BuildWorkMessage(topic.TopicName, request, publishedAt, () => crypto.randomUUID()));
28
+ }
29
+ /** A clock tests advance explicitly. Pass `clock.Now` as a transport's `Now` option. */
30
+ export class ManualClock {
31
+ constructor(startMs = Date.UTC(2026, 0, 1)) {
32
+ this.Now = () => this.current;
33
+ this.current = startMs;
34
+ }
35
+ Advance(ms) {
36
+ this.current += ms;
37
+ }
38
+ }
39
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/testing/fixtures.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC;AAIzD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAQrE,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,YAAmC,EAAE;IACjF,OAAO;QACH,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,kBAAkB;QACnC,MAAM,EAAE,EAAE;QACV,GAAG,SAAS;KACf,CAAC;AACN,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAmB,EAAE,IAAY,EAAE,YAA0C,EAAE;IACpH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IACpF,OAAO;QACH,MAAM,EAAE;YACJ,gBAAgB,EAAE,IAAI;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,GAAG,4BAA4B;YAC/B,GAAG,MAAM;SACZ;QACD,MAAM,EAAE,MAAM,IAAI,IAAI;QACtB,QAAQ,EAAE,QAAQ,IAAI,UAAU;QAChC,MAAM,EAAE,MAAM,IAAI,EAAE;KACvB,CAAC;AACN,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,QAA0B,EAAE,cAAoB,IAAI,IAAI,EAAE;IACzG,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACzH,CAAC;AAED,wFAAwF;AACxF,MAAM,OAAO,WAAW;IAKpB,YAAY,UAAkB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAFlC,QAAG,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QAG7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEM,OAAO,CAAC,EAAU;QACrB,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACvB,CAAC;CACJ"}
@@ -0,0 +1,6 @@
1
+ export * from './fixtures.js';
2
+ export { ConformanceAssertionError } from './assertions.js';
3
+ export type { ConformanceCase, ConformanceCheckResult, ConformanceHarness, ConformanceTraits } from './ConformanceHarness.js';
4
+ export { CONFORMANCE_CASES } from './conformanceCases.js';
5
+ export { RunConformanceChecks } from './RunConformanceChecks.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC3H,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './fixtures.js';
2
+ export { ConformanceAssertionError } from './assertions.js';
3
+ export { CONFORMANCE_CASES } from './conformanceCases.js';
4
+ export { RunConformanceChecks } from './RunConformanceChecks.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ConformanceHarness } from './ConformanceHarness.js';
2
+ /** Registers every conformance case as a vitest test (skipped cases show their reason). */
3
+ export declare function RunTransportConformanceSuite(name: string, harness: ConformanceHarness): void;
4
+ //# sourceMappingURL=vitest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/testing/vitest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,2FAA2F;AAC3F,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAY5F"}
@@ -0,0 +1,19 @@
1
+ import { describe, it } from 'vitest';
2
+ import { CONFORMANCE_CASES } from './conformanceCases.js';
3
+ import { EnvironmentSkipReason } from './RunConformanceChecks.js';
4
+ /** Registers every conformance case as a vitest test (skipped cases show their reason). */
5
+ export function RunTransportConformanceSuite(name, harness) {
6
+ describe(`${name} — work-queue transport conformance`, () => {
7
+ for (const conformanceCase of CONFORMANCE_CASES) {
8
+ const title = `${conformanceCase.Id} ${conformanceCase.Title}`;
9
+ const skipReason = EnvironmentSkipReason(harness, conformanceCase.Id) ?? conformanceCase.Gate(harness);
10
+ if (skipReason === null) {
11
+ it(title, () => conformanceCase.Run(harness));
12
+ }
13
+ else {
14
+ it.skip(`${title} (skipped: ${skipReason})`, () => conformanceCase.Run(harness));
15
+ }
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=vitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/testing/vitest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,2FAA2F;AAC3F,MAAM,UAAU,4BAA4B,CAAC,IAAY,EAAE,OAA2B;IAClF,QAAQ,CAAC,GAAG,IAAI,qCAAqC,EAAE,GAAG,EAAE;QACxD,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,GAAG,eAAe,CAAC,EAAE,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;YAC/D,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvG,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACtB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACJ,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,cAAc,UAAU,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACrF,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}