@spinajs/http-socket-client 0.0.0-stage → 3.0.0

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 (134) hide show
  1. package/README.md +129 -2
  2. package/lib/cjs/browser.d.ts +4 -0
  3. package/lib/cjs/browser.d.ts.map +1 -0
  4. package/lib/cjs/browser.js +21 -0
  5. package/lib/cjs/browser.js.map +1 -0
  6. package/lib/cjs/client.d.ts +94 -0
  7. package/lib/cjs/client.d.ts.map +1 -0
  8. package/lib/cjs/client.js +139 -0
  9. package/lib/cjs/client.js.map +1 -0
  10. package/lib/cjs/commands.d.ts +30 -0
  11. package/lib/cjs/commands.d.ts.map +1 -0
  12. package/lib/cjs/commands.js +132 -0
  13. package/lib/cjs/commands.js.map +1 -0
  14. package/lib/cjs/connection.d.ts +71 -0
  15. package/lib/cjs/connection.d.ts.map +1 -0
  16. package/lib/cjs/connection.js +233 -0
  17. package/lib/cjs/connection.js.map +1 -0
  18. package/lib/cjs/contract.d.ts +27 -0
  19. package/lib/cjs/contract.d.ts.map +1 -0
  20. package/lib/cjs/contract.js +3 -0
  21. package/lib/cjs/contract.js.map +1 -0
  22. package/lib/cjs/durable.d.ts +122 -0
  23. package/lib/cjs/durable.d.ts.map +1 -0
  24. package/lib/cjs/durable.js +396 -0
  25. package/lib/cjs/durable.js.map +1 -0
  26. package/lib/cjs/emitter.d.ts +22 -0
  27. package/lib/cjs/emitter.d.ts.map +1 -0
  28. package/lib/cjs/emitter.js +82 -0
  29. package/lib/cjs/emitter.js.map +1 -0
  30. package/lib/cjs/ids.d.ts +7 -0
  31. package/lib/cjs/ids.d.ts.map +1 -0
  32. package/lib/cjs/ids.js +11 -0
  33. package/lib/cjs/ids.js.map +1 -0
  34. package/lib/cjs/index.d.ts +17 -0
  35. package/lib/cjs/index.d.ts.map +1 -0
  36. package/lib/cjs/index.js +36 -0
  37. package/lib/cjs/index.js.map +1 -0
  38. package/lib/cjs/node/file-outbox.d.ts +40 -0
  39. package/lib/cjs/node/file-outbox.d.ts.map +1 -0
  40. package/lib/cjs/node/file-outbox.js +234 -0
  41. package/lib/cjs/node/file-outbox.js.map +1 -0
  42. package/lib/cjs/node/index.d.ts +4 -0
  43. package/lib/cjs/node/index.d.ts.map +1 -0
  44. package/lib/cjs/node/index.js +21 -0
  45. package/lib/cjs/node/index.js.map +1 -0
  46. package/lib/cjs/outbox-indexeddb.d.ts +38 -0
  47. package/lib/cjs/outbox-indexeddb.d.ts.map +1 -0
  48. package/lib/cjs/outbox-indexeddb.js +212 -0
  49. package/lib/cjs/outbox-indexeddb.js.map +1 -0
  50. package/lib/cjs/outbox.d.ts +53 -0
  51. package/lib/cjs/outbox.d.ts.map +1 -0
  52. package/lib/cjs/outbox.js +41 -0
  53. package/lib/cjs/outbox.js.map +1 -0
  54. package/lib/cjs/package.json +1 -0
  55. package/lib/cjs/reconnect.d.ts +21 -0
  56. package/lib/cjs/reconnect.d.ts.map +1 -0
  57. package/lib/cjs/reconnect.js +37 -0
  58. package/lib/cjs/reconnect.js.map +1 -0
  59. package/lib/cjs/streams.d.ts +91 -0
  60. package/lib/cjs/streams.d.ts.map +1 -0
  61. package/lib/cjs/streams.js +302 -0
  62. package/lib/cjs/streams.js.map +1 -0
  63. package/lib/cjs/timeout.d.ts +4 -0
  64. package/lib/cjs/timeout.d.ts.map +1 -0
  65. package/lib/cjs/timeout.js +13 -0
  66. package/lib/cjs/timeout.js.map +1 -0
  67. package/lib/mjs/browser.d.ts +4 -0
  68. package/lib/mjs/browser.d.ts.map +1 -0
  69. package/lib/mjs/browser.js +3 -0
  70. package/lib/mjs/browser.js.map +1 -0
  71. package/lib/mjs/client.d.ts +94 -0
  72. package/lib/mjs/client.d.ts.map +1 -0
  73. package/lib/mjs/client.js +135 -0
  74. package/lib/mjs/client.js.map +1 -0
  75. package/lib/mjs/commands.d.ts +30 -0
  76. package/lib/mjs/commands.d.ts.map +1 -0
  77. package/lib/mjs/commands.js +128 -0
  78. package/lib/mjs/commands.js.map +1 -0
  79. package/lib/mjs/connection.d.ts +71 -0
  80. package/lib/mjs/connection.d.ts.map +1 -0
  81. package/lib/mjs/connection.js +229 -0
  82. package/lib/mjs/connection.js.map +1 -0
  83. package/lib/mjs/contract.d.ts +27 -0
  84. package/lib/mjs/contract.d.ts.map +1 -0
  85. package/lib/mjs/contract.js +2 -0
  86. package/lib/mjs/contract.js.map +1 -0
  87. package/lib/mjs/durable.d.ts +122 -0
  88. package/lib/mjs/durable.d.ts.map +1 -0
  89. package/lib/mjs/durable.js +392 -0
  90. package/lib/mjs/durable.js.map +1 -0
  91. package/lib/mjs/emitter.d.ts +22 -0
  92. package/lib/mjs/emitter.d.ts.map +1 -0
  93. package/lib/mjs/emitter.js +77 -0
  94. package/lib/mjs/emitter.js.map +1 -0
  95. package/lib/mjs/ids.d.ts +7 -0
  96. package/lib/mjs/ids.d.ts.map +1 -0
  97. package/lib/mjs/ids.js +8 -0
  98. package/lib/mjs/ids.js.map +1 -0
  99. package/lib/mjs/index.d.ts +17 -0
  100. package/lib/mjs/index.d.ts.map +1 -0
  101. package/lib/mjs/index.js +9 -0
  102. package/lib/mjs/index.js.map +1 -0
  103. package/lib/mjs/node/file-outbox.d.ts +40 -0
  104. package/lib/mjs/node/file-outbox.d.ts.map +1 -0
  105. package/lib/mjs/node/file-outbox.js +230 -0
  106. package/lib/mjs/node/file-outbox.js.map +1 -0
  107. package/lib/mjs/node/index.d.ts +4 -0
  108. package/lib/mjs/node/index.d.ts.map +1 -0
  109. package/lib/mjs/node/index.js +3 -0
  110. package/lib/mjs/node/index.js.map +1 -0
  111. package/lib/mjs/outbox-indexeddb.d.ts +38 -0
  112. package/lib/mjs/outbox-indexeddb.d.ts.map +1 -0
  113. package/lib/mjs/outbox-indexeddb.js +208 -0
  114. package/lib/mjs/outbox-indexeddb.js.map +1 -0
  115. package/lib/mjs/outbox.d.ts +53 -0
  116. package/lib/mjs/outbox.d.ts.map +1 -0
  117. package/lib/mjs/outbox.js +37 -0
  118. package/lib/mjs/outbox.js.map +1 -0
  119. package/lib/mjs/package.json +1 -0
  120. package/lib/mjs/reconnect.d.ts +21 -0
  121. package/lib/mjs/reconnect.d.ts.map +1 -0
  122. package/lib/mjs/reconnect.js +33 -0
  123. package/lib/mjs/reconnect.js.map +1 -0
  124. package/lib/mjs/streams.d.ts +91 -0
  125. package/lib/mjs/streams.d.ts.map +1 -0
  126. package/lib/mjs/streams.js +297 -0
  127. package/lib/mjs/streams.js.map +1 -0
  128. package/lib/mjs/timeout.d.ts +4 -0
  129. package/lib/mjs/timeout.d.ts.map +1 -0
  130. package/lib/mjs/timeout.js +9 -0
  131. package/lib/mjs/timeout.js.map +1 -0
  132. package/lib/tsconfig.cjs.tsbuildinfo +1 -0
  133. package/lib/tsconfig.mjs.tsbuildinfo +1 -0
  134. package/package.json +67 -4
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DurableQueue = exports.DEFAULT_DURABLE = void 0;
4
+ const http_socket_common_1 = require("@spinajs/http-socket-common");
5
+ const emitter_js_1 = require("./emitter.js");
6
+ const ids_js_1 = require("./ids.js");
7
+ const reconnect_js_1 = require("./reconnect.js");
8
+ const timeout_js_1 = require("./timeout.js");
9
+ exports.DEFAULT_DURABLE = Object.freeze({ window: 16, ackTimeoutMs: 60_000, maxPayloadBytes: 1024 * 1024 });
10
+ const CLOSED = { code: 'unavailable', message: 'the client is closed; the command stays in the outbox', retryable: false };
11
+ const STREAM_REPLY = { code: 'failed_precondition', message: 'a durable command cannot reply with a stream', retryable: false };
12
+ const MALFORMED_REPLY = { code: 'internal', message: 'malformed reply', retryable: false };
13
+ const UNENCODABLE = { code: 'invalid_argument', message: 'the payload cannot be serialized', retryable: false };
14
+ /** A fenced command whose predecessor already answered waits this long; the server may still be finishing it. */
15
+ const FENCE_FLOOR_MS = 50;
16
+ /**
17
+ * Durable commands ( spec §6 ): persisted before they are sent, sent in order up to a window, sent
18
+ * again after any drop, and settled in send order. The server runs each key once and runs a command
19
+ * only after the one named in its `after`, so a resend never runs twice and never overtakes.
20
+ */
21
+ class DurableQueue {
22
+ constructor(options) {
23
+ this.options = options;
24
+ this.items = [];
25
+ this.adding = Promise.resolve();
26
+ this.attempt = 0;
27
+ this.pausedUntil = 0;
28
+ // after a retryable refusal only the head goes out: its successors would only be fenced
29
+ this.probing = false;
30
+ // the credentials ran out: nothing goes out before the next connection, which a re-login opens
31
+ this.heldUntilOnline = false;
32
+ this.closed = false;
33
+ const { window, ackTimeoutMs, maxPayloadBytes } = { ...exports.DEFAULT_DURABLE, ...options.durable };
34
+ if (!(Number.isInteger(window) && window >= 1)) {
35
+ throw new RangeError(`durable.window must be an integer of at least 1, got ${window}`);
36
+ }
37
+ if (!(Number.isInteger(maxPayloadBytes) && maxPayloadBytes >= 1)) {
38
+ throw new RangeError(`durable.maxPayloadBytes must be an integer of at least 1, got ${maxPayloadBytes}`);
39
+ }
40
+ // `${clientId}:${nonce}` must stay a key the server accepts
41
+ if (!(0, http_socket_common_1.isId)(options.clientId)) {
42
+ throw new RangeError(`clientId must be 1-${http_socket_common_1.MAX_ID_LENGTH} printable ASCII characters`);
43
+ }
44
+ this.keyPrefix = `${options.clientId}:`;
45
+ this.window = window;
46
+ this.maxPayloadBytes = maxPayloadBytes;
47
+ this.ackTimeoutMs = (0, timeout_js_1.assertTimeoutMs)('durable.ackTimeoutMs', ackTimeoutMs);
48
+ this.policy = new reconnect_js_1.ReconnectPolicy(options.reconnect);
49
+ const onListenerError = options.onListenerError ?? emitter_js_1.rethrowAsync;
50
+ this.onStoreError = (error) => {
51
+ try {
52
+ onListenerError(error);
53
+ }
54
+ catch {
55
+ // a throwing handler must not stop the queue from settling, nor leave a rejection unhandled
56
+ }
57
+ };
58
+ this.events = new emitter_js_1.Emitter(options.onListenerError);
59
+ this.unsubscribe = options.connection.events.on('state', (state, previous) => this.onState(state, previous));
60
+ this.load().catch(this.onStoreError);
61
+ }
62
+ /** Commands not yet settled to their callers, resumed ones included. */
63
+ get size() {
64
+ return this.items.length;
65
+ }
66
+ /**
67
+ * Persists the command, then sends it in order. Resolves with its result once it and every earlier
68
+ * command have settled. Rejects when the server refuses it for good ( it is then in the store's
69
+ * failed list ) or when the queue closes ( it stays in the outbox ). A caller that does not await
70
+ * it attaches a catch, or follows the `acked` and `failed` events instead.
71
+ */
72
+ submit(name, payload, options = {}) {
73
+ if (this.closed) {
74
+ return Promise.reject(http_socket_common_1.SocketException.fromWire(CLOSED));
75
+ }
76
+ if (options.key !== undefined && (!(0, http_socket_common_1.isKey)(options.key) || options.key.startsWith(this.keyPrefix))) {
77
+ return Promise.reject(new RangeError(`a durable command key must be 1-${http_socket_common_1.MAX_KEY_LENGTH} printable ASCII characters and must not start with '${this.keyPrefix}'`));
78
+ }
79
+ let size;
80
+ try {
81
+ size = payloadSize(payload);
82
+ }
83
+ catch {
84
+ return Promise.reject(http_socket_common_1.SocketException.fromWire(UNENCODABLE));
85
+ }
86
+ if (size > this.maxPayloadBytes) {
87
+ return Promise.reject(http_socket_common_1.SocketException.fromWire({ code: 'invalid_argument', message: `payload of ${size} bytes exceeds the limit of ${this.maxPayloadBytes} bytes`, retryable: false, details: { size, limit: this.maxPayloadBytes } }));
88
+ }
89
+ let resolve;
90
+ let reject;
91
+ const settled = new Promise((res, rej) => {
92
+ resolve = res;
93
+ reject = rej;
94
+ });
95
+ // one add at a time, and the item joins the queue inside that turn: items stay in seq order
96
+ const queued = this.adding.then(async () => {
97
+ await this.load();
98
+ // not the seq: a store that starts over ( wiped, or in memory ) reuses seqs, and the server would
99
+ // replay an old command's stored reply to a new one
100
+ const entry = await this.options.store.add({ name, payload, key: options.key ?? `${this.keyPrefix}${(0, ids_js_1.randomId)()}` });
101
+ // persisted already: it resumes on the next start
102
+ if (this.closed) {
103
+ throw http_socket_common_1.SocketException.fromWire(CLOSED);
104
+ }
105
+ const item = this.item(entry);
106
+ item.resolve = resolve;
107
+ item.reject = reject;
108
+ this.items.push(item);
109
+ this.pump();
110
+ });
111
+ queued.catch(reject);
112
+ this.adding = queued.catch(() => undefined);
113
+ return settled;
114
+ }
115
+ /**
116
+ * Rejects the callers still waiting for an answer; their entries stay in the store for the next start.
117
+ * Answered commands settle in send order once the store has applied their outcome, also after close.
118
+ * Resolves once the store has no write of this queue in flight and every answered command has been
119
+ * reported: only then may the next queue open the same store, and the listeners be dropped.
120
+ */
121
+ close() {
122
+ if (this.closing) {
123
+ return this.closing;
124
+ }
125
+ this.closed = true;
126
+ this.unsubscribe();
127
+ clearTimeout(this.pauseTimer);
128
+ const unanswered = [];
129
+ for (const item of this.items) {
130
+ clearTimeout(item.timer);
131
+ // a late reply must not touch the store: the entry is left for the next start, which replays it
132
+ item.outstanding.clear();
133
+ if (!item.outcome) {
134
+ unanswered.push(item);
135
+ }
136
+ }
137
+ // An answered command's store write may land after close: rejecting it as left in the outbox would
138
+ // lose its outcome, as the next start would not find the entry. settle() reports it once the write is done.
139
+ this.items.splice(0, this.items.length, ...this.items.filter((item) => item.outcome));
140
+ const reported = new Promise((resolve) => (this.onReported = resolve));
141
+ // an add begun before close still writes its entry, for the next start
142
+ this.closing = Promise.all([reported, this.adding]).then(() => undefined);
143
+ for (const item of unanswered) {
144
+ item.reject?.(http_socket_common_1.SocketException.fromWire(CLOSED));
145
+ }
146
+ this.settle();
147
+ return this.closing;
148
+ }
149
+ /** Reads the store once; a failed read is tried again by the next submit() or the next time the connection comes online. */
150
+ load() {
151
+ if (this.loading === undefined) {
152
+ this.loading = this.options.store.pending().then((entries) => {
153
+ if (!this.closed) {
154
+ this.items.push(...entries.map((entry) => this.item(entry)));
155
+ this.pump();
156
+ }
157
+ }, (error) => {
158
+ this.loading = undefined;
159
+ throw error;
160
+ });
161
+ }
162
+ return this.loading;
163
+ }
164
+ item(entry) {
165
+ // only an entry another writer added has no key; createdAt keeps it apart from a reused seq
166
+ return { entry, key: entry.key ?? `${this.keyPrefix}${entry.seq}.${entry.createdAt}`, state: 'queued', probe: false, parkedOn: undefined, notBefore: 0, outstanding: new Set(), timer: undefined, stored: false };
167
+ }
168
+ onState(state, previous) {
169
+ if (state === 'closed') {
170
+ void this.close();
171
+ return;
172
+ }
173
+ // their replies can no longer arrive; the server joins or replays the resend
174
+ if (previous === 'online') {
175
+ for (const item of this.items) {
176
+ if (item.state !== 'done') {
177
+ item.outstanding.clear();
178
+ // the new connection resends in order, so the fences start over
179
+ item.parkedOn = undefined;
180
+ item.notBefore = 0;
181
+ this.requeue(item);
182
+ }
183
+ }
184
+ }
185
+ if (state === 'online') {
186
+ this.heldUntilOnline = false;
187
+ if (this.loading === undefined) {
188
+ this.load().catch(this.onStoreError);
189
+ }
190
+ this.pump();
191
+ }
192
+ }
193
+ pump() {
194
+ if (this.closed || this.heldUntilOnline || !this.options.connection.connected || Date.now() < this.pausedUntil) {
195
+ return;
196
+ }
197
+ const window = this.probing ? 1 : this.window;
198
+ let unanswered = this.items.filter((item) => item.state === 'sent').length;
199
+ let previous;
200
+ for (const item of this.items) {
201
+ if (item.state === 'done') {
202
+ continue;
203
+ }
204
+ if (item.state === 'queued') {
205
+ if (unanswered >= window || item.parkedOn !== undefined || Date.now() < item.notBefore || !this.transmit(item, previous)) {
206
+ return;
207
+ }
208
+ unanswered++;
209
+ }
210
+ previous = item;
211
+ }
212
+ }
213
+ transmit(item, previous) {
214
+ const request = { id: this.options.commands.nextId(), name: item.entry.name, payload: item.entry.payload, idempotencyKey: item.key };
215
+ // the server runs it only once its predecessor completed, so neither a resend nor a refusal lets it overtake
216
+ if (previous) {
217
+ request.after = previous.key;
218
+ }
219
+ clearTimeout(item.timer);
220
+ item.state = 'sent';
221
+ item.probe = this.probing;
222
+ item.outstanding.add(request.id);
223
+ item.timer = setTimeout(() => this.onAckTimeout(item, request.id), this.ackTimeoutMs);
224
+ if (this.options.connection.request(http_socket_common_1.WIRE_EVENTS.command, request, (reply) => this.onReply(item, request.id, reply))) {
225
+ return true;
226
+ }
227
+ item.outstanding.delete(request.id);
228
+ this.requeue(item);
229
+ return false;
230
+ }
231
+ onReply(item, id, reply) {
232
+ // the connection dropped first, the queue closed, or another request for it was answered
233
+ if (!item.outstanding.has(id)) {
234
+ return;
235
+ }
236
+ const error = replyError(reply);
237
+ if (error === undefined) {
238
+ return this.succeed(item, reply.result);
239
+ }
240
+ if (!error.retryable && error.code !== 'unauthenticated') {
241
+ return this.fail(item, error);
242
+ }
243
+ item.outstanding.delete(id);
244
+ // a later request for it is still out and answers for it
245
+ if (item.outstanding.size > 0) {
246
+ return;
247
+ }
248
+ // the credentials ran out, not the command
249
+ if (error.code === 'unauthenticated') {
250
+ this.requeue(item);
251
+ const alreadyHeld = this.heldUntilOnline;
252
+ this.heldUntilOnline = true;
253
+ if (!alreadyHeld)
254
+ this.events.emit('held', { entry: item.entry, error });
255
+ return;
256
+ }
257
+ this.retry(item, error);
258
+ }
259
+ onAckTimeout(item, id) {
260
+ if (item.state !== 'sent' || !item.outstanding.has(id)) {
261
+ return;
262
+ }
263
+ // the request stays outstanding: whichever reply comes first counts
264
+ this.requeue(item);
265
+ this.pump();
266
+ }
267
+ requeue(item) {
268
+ clearTimeout(item.timer);
269
+ item.timer = undefined;
270
+ item.state = 'queued';
271
+ }
272
+ /** One backoff for the whole queue: its commands are refused for shared reasons ( overload, shutdown ). */
273
+ retry(item, error) {
274
+ this.requeue(item);
275
+ // fenced: its predecessor had not completed, and may have lost its queue place while it still runs
276
+ const after = fencedBehind(error);
277
+ if (after !== undefined) {
278
+ const predecessor = this.items.find((other) => other.key === after && other.state !== 'done');
279
+ if (predecessor) {
280
+ item.parkedOn = predecessor;
281
+ // its answer freed a window slot
282
+ this.pump();
283
+ return;
284
+ }
285
+ // no backoff step: nothing is overloaded
286
+ item.notBefore = Date.now() + FENCE_FLOOR_MS;
287
+ item.timer = setTimeout(() => {
288
+ item.timer = undefined;
289
+ this.pump();
290
+ }, FENCE_FLOOR_MS);
291
+ return;
292
+ }
293
+ this.probing = true;
294
+ const now = Date.now();
295
+ if (now < this.pausedUntil) {
296
+ return;
297
+ }
298
+ clearTimeout(this.pauseTimer);
299
+ this.pausedUntil = now + this.policy.delay(this.attempt++, error.retryAfterMs);
300
+ this.pauseTimer = setTimeout(() => {
301
+ this.pauseTimer = undefined;
302
+ this.pausedUntil = 0;
303
+ this.pump();
304
+ }, this.pausedUntil - now);
305
+ }
306
+ succeed(item, result) {
307
+ this.finish(item, { ok: true, result });
308
+ if (!this.probing) {
309
+ this.attempt = 0;
310
+ }
311
+ this.record(item, () => this.options.store.remove(item.entry.seq));
312
+ }
313
+ fail(item, error) {
314
+ const failed = { ...item.entry, error, failedAt: Date.now() };
315
+ this.finish(item, { ok: false, failed });
316
+ this.record(item, () => this.options.store.fail(failed));
317
+ }
318
+ finish(item, outcome) {
319
+ clearTimeout(item.timer);
320
+ item.timer = undefined;
321
+ item.outstanding.clear();
322
+ // the probed head has its final answer: the window opens again
323
+ if (item.probe) {
324
+ this.probing = false;
325
+ }
326
+ item.state = 'done';
327
+ item.outcome = outcome;
328
+ for (const other of this.items) {
329
+ if (other.parkedOn === item) {
330
+ other.parkedOn = undefined;
331
+ }
332
+ }
333
+ }
334
+ /** The caller hears of an outcome only once the store holds it, so a reload cannot undo what it was told. */
335
+ record(item, write) {
336
+ Promise.resolve()
337
+ .then(write)
338
+ .catch(this.onStoreError)
339
+ .then(() => {
340
+ item.stored = true;
341
+ this.settle();
342
+ });
343
+ this.pump();
344
+ }
345
+ /** Callers and listeners hear about commands in send order, whatever order their replies came in. */
346
+ settle() {
347
+ while (this.items[0]?.state === 'done' && this.items[0].stored) {
348
+ const item = this.items.shift();
349
+ this.report(item, item.outcome);
350
+ }
351
+ if (this.closed && this.items.length === 0) {
352
+ this.onReported?.();
353
+ }
354
+ }
355
+ report(item, outcome) {
356
+ if (outcome.ok) {
357
+ item.resolve?.(outcome.result);
358
+ this.events.emit('acked', { entry: item.entry, result: outcome.result });
359
+ }
360
+ else {
361
+ item.reject?.(http_socket_common_1.SocketException.fromWire(outcome.failed.error));
362
+ this.events.emit('failed', { entry: outcome.failed, error: outcome.failed.error });
363
+ }
364
+ }
365
+ }
366
+ exports.DurableQueue = DurableQueue;
367
+ /** undefined for a result */
368
+ function replyError(reply) {
369
+ if (typeof reply !== 'object' || reply === null || typeof reply.ok !== 'boolean') {
370
+ return MALFORMED_REPLY;
371
+ }
372
+ if (!reply.ok) {
373
+ return (0, http_socket_common_1.isSocketError)(reply.error) ? reply.error : MALFORMED_REPLY;
374
+ }
375
+ return 'stream' in reply ? STREAM_REPLY : undefined;
376
+ }
377
+ /** The predecessor's key of a fence refusal; undefined for any other refusal. */
378
+ function fencedBehind(error) {
379
+ const details = error.details;
380
+ return typeof details === 'object' && details !== null && typeof details.after === 'string' ? details.after : undefined;
381
+ }
382
+ /** What the server's size limit measures: the JSON text in UTF-8, binary parts by their length. */
383
+ function payloadSize(payload) {
384
+ let binary = 0;
385
+ const json = JSON.stringify(payload, function (key, value) {
386
+ // `value` has been through toJSON already; binary parts are detected on the raw holder value
387
+ const raw = this[key];
388
+ if (raw instanceof ArrayBuffer || ArrayBuffer.isView(raw)) {
389
+ binary += raw.byteLength;
390
+ return null;
391
+ }
392
+ return value;
393
+ });
394
+ return binary + (json === undefined ? 0 : new TextEncoder().encode(json).length);
395
+ }
396
+ //# sourceMappingURL=durable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durable.js","sourceRoot":"","sources":["../../src/durable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ type Args<F> = F extends (...args: infer A) => void ? A : never;
2
+ export type ListenerMap<E> = {
3
+ [K in keyof E]: (...args: any[]) => void;
4
+ };
5
+ /** A minimal typed emitter; `node:events` is not available in browsers. */
6
+ export declare class Emitter<E extends ListenerMap<E>> {
7
+ private readonly onListenerError;
8
+ private readonly listeners;
9
+ constructor(onListenerError?: (error: unknown) => void);
10
+ on<K extends keyof E>(event: K, listener: E[K]): () => void;
11
+ once<K extends keyof E>(event: K, listener: E[K]): () => void;
12
+ off<K extends keyof E>(event: K, listener: E[K]): void;
13
+ emit<K extends keyof E>(event: K, ...args: Args<E[K]>): void;
14
+ listenerCount(event: keyof E): number;
15
+ clear(): void;
16
+ private add;
17
+ private remove;
18
+ }
19
+ /** Surfaces a listener error as an uncaught error without breaking the code path that emitted. */
20
+ export declare function rethrowAsync(error: unknown): void;
21
+ export {};
22
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"AAEA,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;AAEhE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI;CAAE,CAAC;AAE1E,2EAA2E;AAC3E,qBAAa,OAAO,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC;IAG/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAF5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IAEjE,YAA6B,eAAe,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAmB,EAAI;IAElF,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAEjE;IAEM,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAOnE;IAEM,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAO5D;IAEM,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAclE;IAEM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,CAE3C;IAEM,KAAK,IAAI,IAAI,CAEnB;IAED,OAAO,CAAC,GAAG;IAUX,OAAO,CAAC,MAAM;CAMf;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAIjD"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Emitter = void 0;
4
+ exports.rethrowAsync = rethrowAsync;
5
+ /** A minimal typed emitter; `node:events` is not available in browsers. */
6
+ class Emitter {
7
+ constructor(onListenerError = rethrowAsync) {
8
+ this.onListenerError = onListenerError;
9
+ this.listeners = new Map();
10
+ }
11
+ on(event, listener) {
12
+ return this.add(event, listener);
13
+ }
14
+ once(event, listener) {
15
+ const wrapper = (...args) => {
16
+ this.remove(event, wrapper);
17
+ listener(...args);
18
+ };
19
+ wrapper.original = listener;
20
+ return this.add(event, wrapper);
21
+ }
22
+ off(event, listener) {
23
+ const set = this.listeners.get(event);
24
+ if (!set)
25
+ return;
26
+ for (const registered of set) {
27
+ if (registered === listener || registered.original === listener)
28
+ set.delete(registered);
29
+ }
30
+ if (set.size === 0)
31
+ this.listeners.delete(event);
32
+ }
33
+ emit(event, ...args) {
34
+ const set = this.listeners.get(event);
35
+ if (!set)
36
+ return;
37
+ for (const listener of [...set]) {
38
+ try {
39
+ listener(...args);
40
+ }
41
+ catch (error) {
42
+ try {
43
+ this.onListenerError(error);
44
+ }
45
+ catch {
46
+ // a faulty error handler must not stop the remaining listeners or the emitting code path
47
+ }
48
+ }
49
+ }
50
+ }
51
+ listenerCount(event) {
52
+ return this.listeners.get(event)?.size ?? 0;
53
+ }
54
+ clear() {
55
+ this.listeners.clear();
56
+ }
57
+ add(event, listener) {
58
+ let set = this.listeners.get(event);
59
+ if (!set) {
60
+ set = new Set();
61
+ this.listeners.set(event, set);
62
+ }
63
+ set.add(listener);
64
+ return () => this.remove(event, listener);
65
+ }
66
+ remove(event, listener) {
67
+ const set = this.listeners.get(event);
68
+ if (!set)
69
+ return;
70
+ set.delete(listener);
71
+ if (set.size === 0)
72
+ this.listeners.delete(event);
73
+ }
74
+ }
75
+ exports.Emitter = Emitter;
76
+ /** Surfaces a listener error as an uncaught error without breaking the code path that emitted. */
77
+ function rethrowAsync(error) {
78
+ setTimeout(() => {
79
+ throw error;
80
+ }, 0);
81
+ }
82
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface UuidSource {
2
+ randomUUID?: () => string;
3
+ }
4
+ /** crypto.randomUUID is missing in insecure (plain http) browser contexts, hence the fallback. */
5
+ export declare function randomId(source?: UuidSource | undefined): string;
6
+ export {};
7
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/ids.ts"],"names":[],"mappings":"AAAA,UAAU,UAAU;IAClB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;CAC3B;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,MAAM,GAAE,UAAU,GAAG,SAA0D,GAAG,MAAM,CAIhH"}
package/lib/cjs/ids.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.randomId = randomId;
4
+ /** crypto.randomUUID is missing in insecure (plain http) browser contexts, hence the fallback. */
5
+ function randomId(source = globalThis.crypto) {
6
+ if (source?.randomUUID)
7
+ return source.randomUUID();
8
+ const part = () => Math.random().toString(36).slice(2, 10);
9
+ return `${Date.now().toString(36)}-${part()}-${part()}-${part()}`;
10
+ }
11
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/ids.ts"],"names":[],"mappings":";;;AAIA,kGAAkG;AAClG,kBAAyB,MAAM,GAA4B,UAAsC,CAAC,MAAM;IACtG,IAAI,MAAM,EAAE,UAAU;QAAE,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;AACpE,CAAC"}
@@ -0,0 +1,17 @@
1
+ export * from '@spinajs/http-socket-common';
2
+ export { SocketClient, LIFECYCLE_EVENTS } from './client.js';
3
+ export type { ClientLifecycleEvents, LifecycleEventName, ServerEventListener, SocketClientOptions, Unsubscribe } from './client.js';
4
+ export { DEFAULT_TIMEOUT_MS } from './commands.js';
5
+ export type { CommandOptions, WhenOffline } from './commands.js';
6
+ export { DEFAULT_CONNECT_TIMEOUT_MS } from './connection.js';
7
+ export type { AuthPayload, AuthProvider, ConnectionState, IoOptions } from './connection.js';
8
+ export type { StreamItem, TypedSocketClient } from './contract.js';
9
+ export { DEFAULT_DURABLE } from './durable.js';
10
+ export type { AckedCommand, DurableCommandOptions, DurableOptions, FailedCommand, HeldCommand } from './durable.js';
11
+ export { MemoryOutboxStore } from './outbox.js';
12
+ export type { FailedOutboxEntry, OutboxEntry, OutboxInput, OutboxStore } from './outbox.js';
13
+ export { DEFAULT_STREAM_CREDITS } from './streams.js';
14
+ export type { StreamOptions } from './streams.js';
15
+ export { DEFAULT_RECONNECT, MAX_SERVER_HINT_MS, ReconnectPolicy } from './reconnect.js';
16
+ export type { ReconnectOptions } from './reconnect.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpI,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC7F,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxF,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,36 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ReconnectPolicy = exports.MAX_SERVER_HINT_MS = exports.DEFAULT_RECONNECT = exports.DEFAULT_STREAM_CREDITS = exports.MemoryOutboxStore = exports.DEFAULT_DURABLE = exports.DEFAULT_CONNECT_TIMEOUT_MS = exports.DEFAULT_TIMEOUT_MS = exports.LIFECYCLE_EVENTS = exports.SocketClient = void 0;
18
+ __exportStar(require("@spinajs/http-socket-common"), exports);
19
+ var client_js_1 = require("./client.js");
20
+ Object.defineProperty(exports, "SocketClient", { enumerable: true, get: function () { return client_js_1.SocketClient; } });
21
+ Object.defineProperty(exports, "LIFECYCLE_EVENTS", { enumerable: true, get: function () { return client_js_1.LIFECYCLE_EVENTS; } });
22
+ var commands_js_1 = require("./commands.js");
23
+ Object.defineProperty(exports, "DEFAULT_TIMEOUT_MS", { enumerable: true, get: function () { return commands_js_1.DEFAULT_TIMEOUT_MS; } });
24
+ var connection_js_1 = require("./connection.js");
25
+ Object.defineProperty(exports, "DEFAULT_CONNECT_TIMEOUT_MS", { enumerable: true, get: function () { return connection_js_1.DEFAULT_CONNECT_TIMEOUT_MS; } });
26
+ var durable_js_1 = require("./durable.js");
27
+ Object.defineProperty(exports, "DEFAULT_DURABLE", { enumerable: true, get: function () { return durable_js_1.DEFAULT_DURABLE; } });
28
+ var outbox_js_1 = require("./outbox.js");
29
+ Object.defineProperty(exports, "MemoryOutboxStore", { enumerable: true, get: function () { return outbox_js_1.MemoryOutboxStore; } });
30
+ var streams_js_1 = require("./streams.js");
31
+ Object.defineProperty(exports, "DEFAULT_STREAM_CREDITS", { enumerable: true, get: function () { return streams_js_1.DEFAULT_STREAM_CREDITS; } });
32
+ var reconnect_js_1 = require("./reconnect.js");
33
+ Object.defineProperty(exports, "DEFAULT_RECONNECT", { enumerable: true, get: function () { return reconnect_js_1.DEFAULT_RECONNECT; } });
34
+ Object.defineProperty(exports, "MAX_SERVER_HINT_MS", { enumerable: true, get: function () { return reconnect_js_1.MAX_SERVER_HINT_MS; } });
35
+ Object.defineProperty(exports, "ReconnectPolicy", { enumerable: true, get: function () { return reconnect_js_1.ReconnectPolicy; } });
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8DAA4C;AAC5C,yCAA6D;AAApD,yGAAA,YAAY,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAEvC,6CAAmD;AAA1C,iHAAA,kBAAkB,OAAA;AAE3B,iDAA6D;AAApD,2HAAA,0BAA0B,OAAA;AAGnC,2CAA+C;AAAtC,6GAAA,eAAe,OAAA;AAExB,yCAAgD;AAAvC,8GAAA,iBAAiB,OAAA;AAE1B,2CAAsD;AAA7C,oHAAA,sBAAsB,OAAA;AAE/B,+CAAwF;AAA/E,iHAAA,iBAAiB,OAAA;AAAE,kHAAA,kBAAkB,OAAA;AAAE,+GAAA,eAAe,OAAA"}