@agentplat/mesh 0.3.0-alpha.3 → 0.3.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/durability.d.ts +228 -0
- package/dist/durability.d.ts.map +1 -0
- package/dist/durability.js +503 -0
- package/dist/durability.js.map +1 -0
- package/dist/trust.d.ts +212 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +934 -0
- package/dist/trust.js.map +1 -0
- package/package.json +12 -3
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
import { canonicalizeMeshJsonBytes, validateSignedMeshEnvelope, } from "@agentplat/mesh-protocol";
|
|
2
|
+
export const MESH_DURABILITY_SCHEMA_VERSION = 1;
|
|
3
|
+
export const MESH_DURABLE_GENESIS_DIGEST = "sha256:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
|
|
4
|
+
/** Creates an inert worker. Work starts only through an explicit run method. */
|
|
5
|
+
export function createMeshDurableWorker(options) {
|
|
6
|
+
if (!options ||
|
|
7
|
+
!options.repository ||
|
|
8
|
+
typeof options.processInbox !== "function" ||
|
|
9
|
+
typeof options.deliverOutbox !== "function") {
|
|
10
|
+
throw new TypeError("Mesh durable worker dependencies are required");
|
|
11
|
+
}
|
|
12
|
+
const scope = normalizeMeshDurableScope(options.scope);
|
|
13
|
+
const workerId = boundedIdentifier(options.workerId, "workerId");
|
|
14
|
+
const inboxBatchSize = boundedInteger(options.inboxBatchSize ?? 16, "inboxBatchSize", 256);
|
|
15
|
+
const outboxBatchSize = boundedInteger(options.outboxBatchSize ?? 16, "outboxBatchSize", 256);
|
|
16
|
+
const leaseDurationMs = boundedInteger(options.leaseDurationMs ?? 30_000, "leaseDurationMs", 3_600_000);
|
|
17
|
+
const failureRetryAfterMs = boundedInteger(options.failureRetryAfterMs ?? 1_000, "failureRetryAfterMs", 3_600_000);
|
|
18
|
+
const runInboxBatch = async (signal) => {
|
|
19
|
+
if (signal?.aborted)
|
|
20
|
+
return emptyBatch();
|
|
21
|
+
const records = await options.repository.claimInbox({
|
|
22
|
+
scope,
|
|
23
|
+
workerId,
|
|
24
|
+
limit: inboxBatchSize,
|
|
25
|
+
leaseDurationMs,
|
|
26
|
+
});
|
|
27
|
+
let completed = 0;
|
|
28
|
+
let conflicted = 0;
|
|
29
|
+
let failed = 0;
|
|
30
|
+
for (const inbox of records) {
|
|
31
|
+
if (signal?.aborted)
|
|
32
|
+
break;
|
|
33
|
+
try {
|
|
34
|
+
assertInboxClaim(inbox, scope, workerId);
|
|
35
|
+
const snapshot = await options.repository.loadSnapshot(scope);
|
|
36
|
+
const processed = await options.processInbox({
|
|
37
|
+
scope,
|
|
38
|
+
inbox,
|
|
39
|
+
snapshot,
|
|
40
|
+
signal,
|
|
41
|
+
});
|
|
42
|
+
const normalized = normalizeProcessorResult(processed, scope, inbox);
|
|
43
|
+
const commit = await options.repository.commitInboxTransition({
|
|
44
|
+
inbox,
|
|
45
|
+
expectedSnapshotRevision: snapshot?.revision ?? 0,
|
|
46
|
+
transitionId: normalized.transitionId ?? `inbox:${inbox.messageId}`,
|
|
47
|
+
outcome: normalized.outcome,
|
|
48
|
+
...(normalized.outcome === "applied"
|
|
49
|
+
? { nextState: normalized.nextState }
|
|
50
|
+
: { reasonCode: normalized.reasonCode }),
|
|
51
|
+
journal: normalized.journal ?? [],
|
|
52
|
+
outbox: normalized.outcome === "applied" ? (normalized.outbox ?? []) : [],
|
|
53
|
+
});
|
|
54
|
+
if (commit.committed)
|
|
55
|
+
completed += 1;
|
|
56
|
+
else {
|
|
57
|
+
conflicted += 1;
|
|
58
|
+
workerDiagnostic(options, {
|
|
59
|
+
kind: "inbox.commit_conflict",
|
|
60
|
+
recordId: inbox.messageId,
|
|
61
|
+
code: commit.code,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
failed += 1;
|
|
67
|
+
workerDiagnostic(options, {
|
|
68
|
+
kind: "inbox.processor_failure",
|
|
69
|
+
recordId: inbox.messageId,
|
|
70
|
+
});
|
|
71
|
+
const abandoned = await options.repository
|
|
72
|
+
.abandonInbox({
|
|
73
|
+
inbox,
|
|
74
|
+
retryAfterMs: failureRetryAfterMs,
|
|
75
|
+
reasonCode: "processor_failure",
|
|
76
|
+
})
|
|
77
|
+
.catch(() => false);
|
|
78
|
+
if (abandoned) {
|
|
79
|
+
workerDiagnostic(options, {
|
|
80
|
+
kind: "inbox.abandoned",
|
|
81
|
+
recordId: inbox.messageId,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return Object.freeze({
|
|
87
|
+
claimed: records.length,
|
|
88
|
+
completed,
|
|
89
|
+
conflicted,
|
|
90
|
+
failed,
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
const runOutboxBatch = async (signal) => {
|
|
94
|
+
if (signal?.aborted)
|
|
95
|
+
return emptyBatch();
|
|
96
|
+
const records = await options.repository.claimOutbox({
|
|
97
|
+
scope,
|
|
98
|
+
workerId,
|
|
99
|
+
limit: outboxBatchSize,
|
|
100
|
+
leaseDurationMs,
|
|
101
|
+
});
|
|
102
|
+
let completed = 0;
|
|
103
|
+
let conflicted = 0;
|
|
104
|
+
let failed = 0;
|
|
105
|
+
for (const outbox of records) {
|
|
106
|
+
if (signal?.aborted)
|
|
107
|
+
break;
|
|
108
|
+
let settlement;
|
|
109
|
+
try {
|
|
110
|
+
assertOutboxClaim(outbox, scope, workerId);
|
|
111
|
+
settlement = normalizeSettlement(await options.deliverOutbox(outbox, signal));
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
failed += 1;
|
|
115
|
+
workerDiagnostic(options, {
|
|
116
|
+
kind: "outbox.delivery_failure",
|
|
117
|
+
recordId: outbox.effectId,
|
|
118
|
+
});
|
|
119
|
+
settlement = {
|
|
120
|
+
disposition: "retryable",
|
|
121
|
+
retryAfterMs: failureRetryAfterMs,
|
|
122
|
+
reasonCode: "delivery_failure",
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const settled = await options.repository
|
|
126
|
+
.settleOutbox({ outbox, settlement })
|
|
127
|
+
.catch(() => false);
|
|
128
|
+
if (settled)
|
|
129
|
+
completed += 1;
|
|
130
|
+
else {
|
|
131
|
+
conflicted += 1;
|
|
132
|
+
workerDiagnostic(options, {
|
|
133
|
+
kind: "outbox.settle_conflict",
|
|
134
|
+
recordId: outbox.effectId,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return Object.freeze({
|
|
139
|
+
claimed: records.length,
|
|
140
|
+
completed,
|
|
141
|
+
conflicted,
|
|
142
|
+
failed,
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
const runOnce = async (signal) => {
|
|
146
|
+
const inbox = await runInboxBatch(signal);
|
|
147
|
+
const outbox = signal?.aborted
|
|
148
|
+
? emptyBatch()
|
|
149
|
+
: await runOutboxBatch(signal);
|
|
150
|
+
return Object.freeze({ inbox, outbox });
|
|
151
|
+
};
|
|
152
|
+
return Object.freeze({
|
|
153
|
+
runInboxBatch,
|
|
154
|
+
runOutboxBatch,
|
|
155
|
+
runOnce,
|
|
156
|
+
async start({ signal, idleDelayMs = 100, }) {
|
|
157
|
+
const idle = boundedInteger(idleDelayMs, "idleDelayMs", 60_000);
|
|
158
|
+
while (!signal.aborted) {
|
|
159
|
+
const result = await runOnce(signal);
|
|
160
|
+
if (!signal.aborted &&
|
|
161
|
+
result.inbox.claimed === 0 &&
|
|
162
|
+
result.outbox.claimed === 0) {
|
|
163
|
+
await abortableDelay(idle, signal);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
export function normalizeMeshDurableScope(scope) {
|
|
170
|
+
if (!scope || typeof scope !== "object") {
|
|
171
|
+
throw new TypeError("Mesh durable scope is required");
|
|
172
|
+
}
|
|
173
|
+
const keys = Object.keys(scope).sort();
|
|
174
|
+
if (keys.length !== 4 ||
|
|
175
|
+
keys[0] !== "instanceId" ||
|
|
176
|
+
keys[1] !== "meshId" ||
|
|
177
|
+
keys[2] !== "peerId" ||
|
|
178
|
+
keys[3] !== "tenantId") {
|
|
179
|
+
throw new TypeError("Mesh durable scope must have an exact shape");
|
|
180
|
+
}
|
|
181
|
+
return Object.freeze({
|
|
182
|
+
tenantId: boundedIdentifier(scope.tenantId, "tenantId"),
|
|
183
|
+
meshId: boundedIdentifier(scope.meshId, "meshId"),
|
|
184
|
+
peerId: boundedIdentifier(scope.peerId, "peerId"),
|
|
185
|
+
instanceId: boundedIdentifier(scope.instanceId, "instanceId"),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
export async function computeMeshDurableValueDigest(value, options = {}) {
|
|
189
|
+
const canonical = canonicalizeMeshJsonBytes(value, options.protocolOptions);
|
|
190
|
+
if (!canonical.ok) {
|
|
191
|
+
throw new TypeError("Mesh durable value must be bounded strict JSON");
|
|
192
|
+
}
|
|
193
|
+
const buffer = new ArrayBuffer(canonical.value.byteLength);
|
|
194
|
+
new Uint8Array(buffer).set(canonical.value);
|
|
195
|
+
const digest = await (options.crypto ?? globalThis.crypto).subtle.digest("SHA-256", buffer);
|
|
196
|
+
return `sha256:${base64Url(new Uint8Array(digest))}`;
|
|
197
|
+
}
|
|
198
|
+
export async function createMeshDurableJournalEntry(input) {
|
|
199
|
+
const scope = normalizeMeshDurableScope(input.scope);
|
|
200
|
+
const sequence = boundedInteger(input.sequence, "journal sequence", Number.MAX_SAFE_INTEGER);
|
|
201
|
+
const snapshotRevision = nonNegativeInteger(input.snapshotRevision, "snapshot revision");
|
|
202
|
+
const draft = normalizeJournalDraft(input.draft);
|
|
203
|
+
assertDigest(input.previousDigest, "previous digest");
|
|
204
|
+
assertDigest(input.snapshotDigest, "snapshot digest");
|
|
205
|
+
boundedIdentifier(input.transitionId, "transitionId");
|
|
206
|
+
if (input.inboxMessageId !== undefined) {
|
|
207
|
+
assertMessageId(input.inboxMessageId);
|
|
208
|
+
}
|
|
209
|
+
assertTimestamp(input.occurredAt, "occurredAt");
|
|
210
|
+
const document = {
|
|
211
|
+
schemaVersion: MESH_DURABILITY_SCHEMA_VERSION,
|
|
212
|
+
scope: {
|
|
213
|
+
tenantId: scope.tenantId,
|
|
214
|
+
meshId: scope.meshId,
|
|
215
|
+
peerId: scope.peerId,
|
|
216
|
+
instanceId: scope.instanceId,
|
|
217
|
+
},
|
|
218
|
+
sequence,
|
|
219
|
+
previousDigest: input.previousDigest,
|
|
220
|
+
transitionId: input.transitionId,
|
|
221
|
+
...(input.inboxMessageId === undefined
|
|
222
|
+
? {}
|
|
223
|
+
: { inboxMessageId: input.inboxMessageId }),
|
|
224
|
+
snapshotRevision,
|
|
225
|
+
snapshotDigest: input.snapshotDigest,
|
|
226
|
+
entryId: draft.entryId,
|
|
227
|
+
kind: draft.kind,
|
|
228
|
+
...(draft.reasonCode === undefined ? {} : { reasonCode: draft.reasonCode }),
|
|
229
|
+
occurredAt: input.occurredAt,
|
|
230
|
+
};
|
|
231
|
+
const digest = await computeMeshDurableValueDigest(document, {
|
|
232
|
+
crypto: input.crypto,
|
|
233
|
+
});
|
|
234
|
+
return Object.freeze({
|
|
235
|
+
schemaVersion: MESH_DURABILITY_SCHEMA_VERSION,
|
|
236
|
+
scope,
|
|
237
|
+
sequence,
|
|
238
|
+
previousDigest: input.previousDigest,
|
|
239
|
+
digest,
|
|
240
|
+
transitionId: input.transitionId,
|
|
241
|
+
...(input.inboxMessageId === undefined
|
|
242
|
+
? {}
|
|
243
|
+
: { inboxMessageId: input.inboxMessageId }),
|
|
244
|
+
snapshotRevision,
|
|
245
|
+
snapshotDigest: input.snapshotDigest,
|
|
246
|
+
entryId: draft.entryId,
|
|
247
|
+
kind: draft.kind,
|
|
248
|
+
...(draft.reasonCode === undefined ? {} : { reasonCode: draft.reasonCode }),
|
|
249
|
+
occurredAt: input.occurredAt,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
export async function verifyMeshDurableJournal(input) {
|
|
253
|
+
let previousDigest = input.anchorDigest ?? MESH_DURABLE_GENESIS_DIGEST;
|
|
254
|
+
let sequence = input.anchorSequence ?? 0;
|
|
255
|
+
assertDigest(previousDigest, "anchor digest");
|
|
256
|
+
nonNegativeInteger(sequence, "anchor sequence");
|
|
257
|
+
for (const entry of input.entries) {
|
|
258
|
+
if (entry.sequence !== sequence + 1 ||
|
|
259
|
+
entry.previousDigest !== previousDigest) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
const rebuilt = await createMeshDurableJournalEntry({
|
|
263
|
+
scope: entry.scope,
|
|
264
|
+
sequence: entry.sequence,
|
|
265
|
+
previousDigest: entry.previousDigest,
|
|
266
|
+
transitionId: entry.transitionId,
|
|
267
|
+
inboxMessageId: entry.inboxMessageId,
|
|
268
|
+
snapshotRevision: entry.snapshotRevision,
|
|
269
|
+
snapshotDigest: entry.snapshotDigest,
|
|
270
|
+
draft: entry,
|
|
271
|
+
occurredAt: entry.occurredAt,
|
|
272
|
+
crypto: input.crypto,
|
|
273
|
+
});
|
|
274
|
+
if (rebuilt.digest !== entry.digest)
|
|
275
|
+
return false;
|
|
276
|
+
previousDigest = entry.digest;
|
|
277
|
+
sequence = entry.sequence;
|
|
278
|
+
}
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
function normalizeProcessorResult(result, scope, inbox) {
|
|
282
|
+
if (!result || typeof result !== "object") {
|
|
283
|
+
throw new TypeError("Mesh durable processor result is required");
|
|
284
|
+
}
|
|
285
|
+
if (result.transitionId !== undefined) {
|
|
286
|
+
boundedIdentifier(result.transitionId, "transitionId");
|
|
287
|
+
}
|
|
288
|
+
const journal = Object.freeze((result.journal ?? []).map(normalizeJournalDraft));
|
|
289
|
+
if (journal.length > 64) {
|
|
290
|
+
throw new RangeError("Mesh durable transition journal is too large");
|
|
291
|
+
}
|
|
292
|
+
if (result.outcome === "rejected") {
|
|
293
|
+
boundedReason(result.reasonCode);
|
|
294
|
+
if ("outbox" in result || "nextState" in result) {
|
|
295
|
+
throw new TypeError("Rejected durable transition cannot change state");
|
|
296
|
+
}
|
|
297
|
+
return Object.freeze({
|
|
298
|
+
outcome: "rejected",
|
|
299
|
+
...(result.transitionId ? { transitionId: result.transitionId } : {}),
|
|
300
|
+
reasonCode: result.reasonCode,
|
|
301
|
+
journal,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
if (result.outcome !== "applied" || result.nextState === undefined) {
|
|
305
|
+
throw new TypeError("Applied durable transition requires nextState");
|
|
306
|
+
}
|
|
307
|
+
const canonical = canonicalizeMeshJsonBytes(result.nextState);
|
|
308
|
+
if (!canonical.ok) {
|
|
309
|
+
throw new TypeError("Mesh durable nextState must be bounded strict JSON");
|
|
310
|
+
}
|
|
311
|
+
const outbox = Object.freeze((result.outbox ?? []).map((draft) => normalizeOutboundDraft(draft, scope, inbox)));
|
|
312
|
+
if (outbox.length > 256) {
|
|
313
|
+
throw new RangeError("Mesh durable transition outbox is too large");
|
|
314
|
+
}
|
|
315
|
+
return Object.freeze({
|
|
316
|
+
outcome: "applied",
|
|
317
|
+
...(result.transitionId ? { transitionId: result.transitionId } : {}),
|
|
318
|
+
nextState: result.nextState,
|
|
319
|
+
journal,
|
|
320
|
+
outbox,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
function normalizeOutboundDraft(draft, scope, inbox) {
|
|
324
|
+
if (!draft || typeof draft !== "object") {
|
|
325
|
+
throw new TypeError("Mesh durable outbound draft is invalid");
|
|
326
|
+
}
|
|
327
|
+
boundedIdentifier(draft.effectId, "effectId");
|
|
328
|
+
const validated = validateSignedMeshEnvelope(draft.envelope);
|
|
329
|
+
if (!validated.ok ||
|
|
330
|
+
validated.value.tenantId !== scope.tenantId ||
|
|
331
|
+
validated.value.meshId !== scope.meshId ||
|
|
332
|
+
validated.value.sender.peerId !== scope.peerId ||
|
|
333
|
+
validated.value.sender.instanceId !== scope.instanceId) {
|
|
334
|
+
throw new TypeError("Mesh durable outbound envelope scope is invalid");
|
|
335
|
+
}
|
|
336
|
+
if (draft.targetPeerId !== undefined) {
|
|
337
|
+
boundedIdentifier(draft.targetPeerId, "targetPeerId");
|
|
338
|
+
if (validated.value.audience.kind === "peer" &&
|
|
339
|
+
validated.value.audience.peerId !== draft.targetPeerId) {
|
|
340
|
+
throw new TypeError("Mesh durable outbound target is invalid");
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (validated.value.audience.kind === "mesh" &&
|
|
344
|
+
draft.targetPeerId === undefined) {
|
|
345
|
+
throw new TypeError("Mesh durable topic outbox requires targetPeerId");
|
|
346
|
+
}
|
|
347
|
+
if (validated.value.messageId === inbox.messageId) {
|
|
348
|
+
throw new TypeError("Mesh durable outbound messageId must be distinct");
|
|
349
|
+
}
|
|
350
|
+
return Object.freeze({
|
|
351
|
+
effectId: draft.effectId,
|
|
352
|
+
envelope: validated.value,
|
|
353
|
+
...(draft.targetPeerId === undefined
|
|
354
|
+
? {}
|
|
355
|
+
: { targetPeerId: draft.targetPeerId }),
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
function normalizeJournalDraft(draft) {
|
|
359
|
+
if (!draft || typeof draft !== "object") {
|
|
360
|
+
throw new TypeError("Mesh durable journal draft is invalid");
|
|
361
|
+
}
|
|
362
|
+
boundedIdentifier(draft.entryId, "journal entryId");
|
|
363
|
+
boundedReason(draft.kind, "journal kind");
|
|
364
|
+
if (draft.reasonCode !== undefined)
|
|
365
|
+
boundedReason(draft.reasonCode);
|
|
366
|
+
return Object.freeze({
|
|
367
|
+
entryId: draft.entryId,
|
|
368
|
+
kind: draft.kind,
|
|
369
|
+
...(draft.reasonCode === undefined ? {} : { reasonCode: draft.reasonCode }),
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
function normalizeSettlement(settlement) {
|
|
373
|
+
if (!settlement || typeof settlement !== "object") {
|
|
374
|
+
throw new TypeError("Mesh durable outbox settlement is invalid");
|
|
375
|
+
}
|
|
376
|
+
if (settlement.reasonCode !== undefined)
|
|
377
|
+
boundedReason(settlement.reasonCode);
|
|
378
|
+
if (settlement.disposition === "retryable") {
|
|
379
|
+
return Object.freeze({
|
|
380
|
+
disposition: "retryable",
|
|
381
|
+
retryAfterMs: boundedInteger(settlement.retryAfterMs, "retryAfterMs", 3_600_000),
|
|
382
|
+
...(settlement.reasonCode === undefined
|
|
383
|
+
? {}
|
|
384
|
+
: { reasonCode: settlement.reasonCode }),
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
if (settlement.disposition !== "delivered" &&
|
|
388
|
+
settlement.disposition !== "permanent_rejection") {
|
|
389
|
+
throw new TypeError("Mesh durable outbox settlement is invalid");
|
|
390
|
+
}
|
|
391
|
+
return Object.freeze({
|
|
392
|
+
disposition: settlement.disposition,
|
|
393
|
+
...(settlement.reasonCode === undefined
|
|
394
|
+
? {}
|
|
395
|
+
: { reasonCode: settlement.reasonCode }),
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
function assertInboxClaim(inbox, scope, workerId) {
|
|
399
|
+
if (inbox.status !== "processing" ||
|
|
400
|
+
!inbox.claim ||
|
|
401
|
+
inbox.claim.workerId !== workerId ||
|
|
402
|
+
!scopeEquals(inbox.scope, scope)) {
|
|
403
|
+
throw new TypeError("Mesh durable inbox claim is invalid");
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
function assertOutboxClaim(outbox, scope, workerId) {
|
|
407
|
+
if (outbox.status !== "delivering" ||
|
|
408
|
+
!outbox.claim ||
|
|
409
|
+
outbox.claim.workerId !== workerId ||
|
|
410
|
+
!scopeEquals(outbox.scope, scope)) {
|
|
411
|
+
throw new TypeError("Mesh durable outbox claim is invalid");
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
function scopeEquals(left, right) {
|
|
415
|
+
return (left.tenantId === right.tenantId &&
|
|
416
|
+
left.meshId === right.meshId &&
|
|
417
|
+
left.peerId === right.peerId &&
|
|
418
|
+
left.instanceId === right.instanceId);
|
|
419
|
+
}
|
|
420
|
+
function workerDiagnostic(options, diagnostic) {
|
|
421
|
+
try {
|
|
422
|
+
options.onDiagnostic?.(Object.freeze(diagnostic));
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
// Diagnostics never change durable state.
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
function emptyBatch() {
|
|
429
|
+
return Object.freeze({ claimed: 0, completed: 0, conflicted: 0, failed: 0 });
|
|
430
|
+
}
|
|
431
|
+
function abortableDelay(milliseconds, signal) {
|
|
432
|
+
if (signal.aborted)
|
|
433
|
+
return Promise.resolve();
|
|
434
|
+
return new Promise((resolve) => {
|
|
435
|
+
const timer = setTimeout(done, milliseconds);
|
|
436
|
+
signal.addEventListener("abort", done, { once: true });
|
|
437
|
+
function done() {
|
|
438
|
+
clearTimeout(timer);
|
|
439
|
+
signal.removeEventListener("abort", done);
|
|
440
|
+
resolve();
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
function boundedIdentifier(value, label) {
|
|
445
|
+
if (typeof value !== "string" ||
|
|
446
|
+
value.length < 1 ||
|
|
447
|
+
new TextEncoder().encode(value).byteLength > 256 ||
|
|
448
|
+
!/^[A-Za-z0-9][A-Za-z0-9._:@-]*$/u.test(value)) {
|
|
449
|
+
throw new TypeError(`Mesh durable ${label} is invalid`);
|
|
450
|
+
}
|
|
451
|
+
return value;
|
|
452
|
+
}
|
|
453
|
+
function boundedReason(value, label = "reasonCode") {
|
|
454
|
+
if (typeof value !== "string" ||
|
|
455
|
+
value.length < 1 ||
|
|
456
|
+
value.length > 128 ||
|
|
457
|
+
!/^[a-z0-9][a-z0-9._:-]*$/u.test(value)) {
|
|
458
|
+
throw new TypeError(`Mesh durable ${label} is invalid`);
|
|
459
|
+
}
|
|
460
|
+
return value;
|
|
461
|
+
}
|
|
462
|
+
function assertMessageId(value) {
|
|
463
|
+
// Protocol message IDs are canonical base64url encodings of 16 bytes. The
|
|
464
|
+
// final character carries two significant bits and four zero padding bits.
|
|
465
|
+
if (typeof value !== "string" || !/^[A-Za-z0-9_-]{21}[AQgw]$/u.test(value)) {
|
|
466
|
+
throw new TypeError("Mesh durable inboxMessageId is invalid");
|
|
467
|
+
}
|
|
468
|
+
return value;
|
|
469
|
+
}
|
|
470
|
+
function boundedInteger(value, label, maximum) {
|
|
471
|
+
if (!Number.isSafeInteger(value) || value < 1 || value > maximum) {
|
|
472
|
+
throw new RangeError(`Mesh durable ${label} is outside its range`);
|
|
473
|
+
}
|
|
474
|
+
return value;
|
|
475
|
+
}
|
|
476
|
+
function nonNegativeInteger(value, label) {
|
|
477
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
478
|
+
throw new RangeError(`Mesh durable ${label} is outside its range`);
|
|
479
|
+
}
|
|
480
|
+
return value;
|
|
481
|
+
}
|
|
482
|
+
function assertDigest(value, label) {
|
|
483
|
+
if (typeof value !== "string" || !/^sha256:[A-Za-z0-9_-]{43}$/u.test(value)) {
|
|
484
|
+
throw new TypeError(`Mesh durable ${label} is invalid`);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
function assertTimestamp(value, label) {
|
|
488
|
+
if (typeof value !== "string" ||
|
|
489
|
+
!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/u.test(value) ||
|
|
490
|
+
Number.isNaN(Date.parse(value))) {
|
|
491
|
+
throw new TypeError(`Mesh durable ${label} is invalid`);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
function base64Url(bytes) {
|
|
495
|
+
let binary = "";
|
|
496
|
+
for (const byte of bytes)
|
|
497
|
+
binary += String.fromCharCode(byte);
|
|
498
|
+
return btoa(binary)
|
|
499
|
+
.replaceAll("+", "-")
|
|
500
|
+
.replaceAll("/", "_")
|
|
501
|
+
.replace(/=+$/u, "");
|
|
502
|
+
}
|
|
503
|
+
//# sourceMappingURL=durability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durability.js","sourceRoot":"","sources":["../src/durability.ts"],"names":[],"mappings":"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"}
|