@agentplat/mesh 0.3.0-alpha.4 → 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/package.json +8 -4
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import type { MeshJsonValue, MeshProtocolOptions, SignedMeshEnvelope } from "@agentplat/mesh-protocol";
|
|
2
|
+
export declare const MESH_DURABILITY_SCHEMA_VERSION: 1;
|
|
3
|
+
export declare const MESH_DURABLE_GENESIS_DIGEST = "sha256:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
|
|
4
|
+
export interface MeshDurableScope {
|
|
5
|
+
readonly tenantId: string;
|
|
6
|
+
readonly meshId: string;
|
|
7
|
+
readonly peerId: string;
|
|
8
|
+
readonly instanceId: string;
|
|
9
|
+
}
|
|
10
|
+
export interface MeshDurableClaim {
|
|
11
|
+
readonly workerId: string;
|
|
12
|
+
readonly leaseToken: string;
|
|
13
|
+
readonly generation: number;
|
|
14
|
+
/** Exclusive RFC 3339 expiry evaluated by the repository clock. */
|
|
15
|
+
readonly expiresAt: string;
|
|
16
|
+
}
|
|
17
|
+
export type MeshDurableInboxStatus = "pending" | "processing" | "applied" | "rejected";
|
|
18
|
+
export interface MeshDurableInboxRecord {
|
|
19
|
+
readonly schemaVersion: typeof MESH_DURABILITY_SCHEMA_VERSION;
|
|
20
|
+
readonly scope: MeshDurableScope;
|
|
21
|
+
readonly messageId: string;
|
|
22
|
+
readonly envelope: SignedMeshEnvelope;
|
|
23
|
+
readonly envelopeDigest: string;
|
|
24
|
+
readonly status: MeshDurableInboxStatus;
|
|
25
|
+
readonly attempts: number;
|
|
26
|
+
readonly receivedAt: string;
|
|
27
|
+
readonly availableAt: string;
|
|
28
|
+
readonly claim?: MeshDurableClaim;
|
|
29
|
+
readonly settledAt?: string;
|
|
30
|
+
readonly reasonCode?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface MeshDurablePeerSnapshot {
|
|
33
|
+
readonly schemaVersion: typeof MESH_DURABILITY_SCHEMA_VERSION;
|
|
34
|
+
readonly scope: MeshDurableScope;
|
|
35
|
+
readonly revision: number;
|
|
36
|
+
readonly state: MeshJsonValue;
|
|
37
|
+
readonly stateDigest: string;
|
|
38
|
+
readonly committedAt: string;
|
|
39
|
+
}
|
|
40
|
+
export interface MeshDurableJournalDraft {
|
|
41
|
+
readonly entryId: string;
|
|
42
|
+
readonly kind: string;
|
|
43
|
+
readonly reasonCode?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface MeshDurableJournalEntry extends MeshDurableJournalDraft {
|
|
46
|
+
readonly schemaVersion: typeof MESH_DURABILITY_SCHEMA_VERSION;
|
|
47
|
+
readonly scope: MeshDurableScope;
|
|
48
|
+
readonly sequence: number;
|
|
49
|
+
readonly previousDigest: string;
|
|
50
|
+
readonly digest: string;
|
|
51
|
+
readonly transitionId: string;
|
|
52
|
+
readonly inboxMessageId?: string;
|
|
53
|
+
readonly snapshotRevision: number;
|
|
54
|
+
readonly snapshotDigest: string;
|
|
55
|
+
readonly occurredAt: string;
|
|
56
|
+
}
|
|
57
|
+
export type MeshDurableOutboxStatus = "pending" | "delivering" | "delivered" | "rejected";
|
|
58
|
+
export interface MeshDurableOutboundDraft {
|
|
59
|
+
readonly effectId: string;
|
|
60
|
+
readonly envelope: SignedMeshEnvelope;
|
|
61
|
+
/** Required when a topic envelope is delivered to one selected peer. */
|
|
62
|
+
readonly targetPeerId?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface MeshDurableOutboxRecord extends MeshDurableOutboundDraft {
|
|
65
|
+
readonly schemaVersion: typeof MESH_DURABILITY_SCHEMA_VERSION;
|
|
66
|
+
readonly scope: MeshDurableScope;
|
|
67
|
+
readonly messageId: string;
|
|
68
|
+
readonly envelopeDigest: string;
|
|
69
|
+
readonly status: MeshDurableOutboxStatus;
|
|
70
|
+
readonly attempts: number;
|
|
71
|
+
readonly availableAt: string;
|
|
72
|
+
readonly createdAt: string;
|
|
73
|
+
readonly claim?: MeshDurableClaim;
|
|
74
|
+
readonly settledAt?: string;
|
|
75
|
+
readonly reasonCode?: string;
|
|
76
|
+
}
|
|
77
|
+
export type MeshDurableReceiveResult = {
|
|
78
|
+
readonly accepted: true;
|
|
79
|
+
readonly duplicate: boolean;
|
|
80
|
+
readonly receivedAt: string;
|
|
81
|
+
readonly envelopeDigest: string;
|
|
82
|
+
} | {
|
|
83
|
+
readonly accepted: false;
|
|
84
|
+
readonly code: "capacity_exceeded" | "message_conflict";
|
|
85
|
+
};
|
|
86
|
+
export interface MeshDurableClaimOptions {
|
|
87
|
+
readonly scope: MeshDurableScope;
|
|
88
|
+
readonly workerId: string;
|
|
89
|
+
readonly limit: number;
|
|
90
|
+
readonly leaseDurationMs: number;
|
|
91
|
+
}
|
|
92
|
+
export interface MeshDurableCommitInboxInput {
|
|
93
|
+
readonly inbox: MeshDurableInboxRecord;
|
|
94
|
+
readonly expectedSnapshotRevision: number;
|
|
95
|
+
readonly transitionId: string;
|
|
96
|
+
readonly outcome: "applied" | "rejected";
|
|
97
|
+
readonly nextState?: MeshJsonValue;
|
|
98
|
+
readonly journal: readonly MeshDurableJournalDraft[];
|
|
99
|
+
readonly outbox: readonly MeshDurableOutboundDraft[];
|
|
100
|
+
readonly reasonCode?: string;
|
|
101
|
+
}
|
|
102
|
+
export type MeshDurableCommitResult = {
|
|
103
|
+
readonly committed: true;
|
|
104
|
+
readonly snapshot?: MeshDurablePeerSnapshot;
|
|
105
|
+
readonly journal: readonly MeshDurableJournalEntry[];
|
|
106
|
+
readonly outbox: readonly MeshDurableOutboxRecord[];
|
|
107
|
+
} | {
|
|
108
|
+
readonly committed: false;
|
|
109
|
+
readonly code: "claim_lost" | "outbox_conflict" | "revision_conflict" | "transition_conflict";
|
|
110
|
+
};
|
|
111
|
+
export interface MeshDurableAbandonInput {
|
|
112
|
+
readonly inbox: MeshDurableInboxRecord;
|
|
113
|
+
readonly retryAfterMs: number;
|
|
114
|
+
readonly reasonCode?: string;
|
|
115
|
+
}
|
|
116
|
+
export type MeshDurableOutboxSettlement = {
|
|
117
|
+
readonly disposition: "delivered" | "permanent_rejection";
|
|
118
|
+
readonly reasonCode?: string;
|
|
119
|
+
} | {
|
|
120
|
+
readonly disposition: "retryable";
|
|
121
|
+
readonly retryAfterMs: number;
|
|
122
|
+
readonly reasonCode?: string;
|
|
123
|
+
};
|
|
124
|
+
export interface MeshDurableSettleOutboxInput {
|
|
125
|
+
readonly outbox: MeshDurableOutboxRecord;
|
|
126
|
+
readonly settlement: MeshDurableOutboxSettlement;
|
|
127
|
+
}
|
|
128
|
+
export interface MeshDurableJournalQuery {
|
|
129
|
+
readonly scope: MeshDurableScope;
|
|
130
|
+
readonly afterSequence?: number;
|
|
131
|
+
readonly limit: number;
|
|
132
|
+
}
|
|
133
|
+
export interface MeshDurableRepository {
|
|
134
|
+
receive(input: {
|
|
135
|
+
readonly scope: MeshDurableScope;
|
|
136
|
+
readonly envelope: SignedMeshEnvelope;
|
|
137
|
+
}): Promise<MeshDurableReceiveResult>;
|
|
138
|
+
loadSnapshot(scope: MeshDurableScope): Promise<MeshDurablePeerSnapshot | undefined>;
|
|
139
|
+
claimInbox(options: MeshDurableClaimOptions): Promise<readonly MeshDurableInboxRecord[]>;
|
|
140
|
+
commitInboxTransition(input: MeshDurableCommitInboxInput): Promise<MeshDurableCommitResult>;
|
|
141
|
+
abandonInbox(input: MeshDurableAbandonInput): Promise<boolean>;
|
|
142
|
+
claimOutbox(options: MeshDurableClaimOptions): Promise<readonly MeshDurableOutboxRecord[]>;
|
|
143
|
+
settleOutbox(input: MeshDurableSettleOutboxInput): Promise<boolean>;
|
|
144
|
+
inspectJournal(query: MeshDurableJournalQuery): Promise<readonly MeshDurableJournalEntry[]>;
|
|
145
|
+
close?(): void | Promise<void>;
|
|
146
|
+
}
|
|
147
|
+
export interface MeshDurableInboxProcessorInput {
|
|
148
|
+
readonly scope: MeshDurableScope;
|
|
149
|
+
readonly inbox: MeshDurableInboxRecord;
|
|
150
|
+
readonly snapshot?: MeshDurablePeerSnapshot;
|
|
151
|
+
readonly signal?: AbortSignal;
|
|
152
|
+
}
|
|
153
|
+
export type MeshDurableInboxProcessorResult = {
|
|
154
|
+
readonly outcome: "applied";
|
|
155
|
+
readonly transitionId?: string;
|
|
156
|
+
readonly nextState: MeshJsonValue;
|
|
157
|
+
readonly journal?: readonly MeshDurableJournalDraft[];
|
|
158
|
+
readonly outbox?: readonly MeshDurableOutboundDraft[];
|
|
159
|
+
} | {
|
|
160
|
+
readonly outcome: "rejected";
|
|
161
|
+
readonly transitionId?: string;
|
|
162
|
+
readonly reasonCode: string;
|
|
163
|
+
readonly journal?: readonly MeshDurableJournalDraft[];
|
|
164
|
+
};
|
|
165
|
+
export type MeshDurableInboxProcessor = (input: MeshDurableInboxProcessorInput) => MeshDurableInboxProcessorResult | Promise<MeshDurableInboxProcessorResult>;
|
|
166
|
+
export type MeshDurableOutboxDeliver = (outbox: MeshDurableOutboxRecord, signal?: AbortSignal) => MeshDurableOutboxSettlement | Promise<MeshDurableOutboxSettlement>;
|
|
167
|
+
export interface MeshDurableWorkerDiagnostic {
|
|
168
|
+
readonly kind: "inbox.abandoned" | "inbox.commit_conflict" | "inbox.processor_failure" | "outbox.delivery_failure" | "outbox.settle_conflict";
|
|
169
|
+
readonly recordId: string;
|
|
170
|
+
readonly code?: string;
|
|
171
|
+
}
|
|
172
|
+
export interface MeshDurableWorkerOptions {
|
|
173
|
+
readonly repository: MeshDurableRepository;
|
|
174
|
+
readonly scope: MeshDurableScope;
|
|
175
|
+
readonly workerId: string;
|
|
176
|
+
readonly processInbox: MeshDurableInboxProcessor;
|
|
177
|
+
readonly deliverOutbox: MeshDurableOutboxDeliver;
|
|
178
|
+
readonly inboxBatchSize?: number;
|
|
179
|
+
readonly outboxBatchSize?: number;
|
|
180
|
+
readonly leaseDurationMs?: number;
|
|
181
|
+
readonly failureRetryAfterMs?: number;
|
|
182
|
+
readonly onDiagnostic?: (diagnostic: MeshDurableWorkerDiagnostic) => void;
|
|
183
|
+
}
|
|
184
|
+
export interface MeshDurableWorkerBatchResult {
|
|
185
|
+
readonly claimed: number;
|
|
186
|
+
readonly completed: number;
|
|
187
|
+
readonly conflicted: number;
|
|
188
|
+
readonly failed: number;
|
|
189
|
+
}
|
|
190
|
+
export interface MeshDurableWorkerRunResult {
|
|
191
|
+
readonly inbox: MeshDurableWorkerBatchResult;
|
|
192
|
+
readonly outbox: MeshDurableWorkerBatchResult;
|
|
193
|
+
}
|
|
194
|
+
export interface MeshDurableWorker {
|
|
195
|
+
runInboxBatch(signal?: AbortSignal): Promise<MeshDurableWorkerBatchResult>;
|
|
196
|
+
runOutboxBatch(signal?: AbortSignal): Promise<MeshDurableWorkerBatchResult>;
|
|
197
|
+
runOnce(signal?: AbortSignal): Promise<MeshDurableWorkerRunResult>;
|
|
198
|
+
start(options: {
|
|
199
|
+
readonly signal: AbortSignal;
|
|
200
|
+
readonly idleDelayMs?: number;
|
|
201
|
+
}): Promise<void>;
|
|
202
|
+
}
|
|
203
|
+
/** Creates an inert worker. Work starts only through an explicit run method. */
|
|
204
|
+
export declare function createMeshDurableWorker(options: MeshDurableWorkerOptions): MeshDurableWorker;
|
|
205
|
+
export declare function normalizeMeshDurableScope(scope: MeshDurableScope): MeshDurableScope;
|
|
206
|
+
export declare function computeMeshDurableValueDigest(value: MeshJsonValue, options?: {
|
|
207
|
+
readonly protocolOptions?: MeshProtocolOptions;
|
|
208
|
+
readonly crypto?: Crypto;
|
|
209
|
+
}): Promise<string>;
|
|
210
|
+
export declare function createMeshDurableJournalEntry(input: {
|
|
211
|
+
readonly scope: MeshDurableScope;
|
|
212
|
+
readonly sequence: number;
|
|
213
|
+
readonly previousDigest: string;
|
|
214
|
+
readonly transitionId: string;
|
|
215
|
+
readonly inboxMessageId?: string;
|
|
216
|
+
readonly snapshotRevision: number;
|
|
217
|
+
readonly snapshotDigest: string;
|
|
218
|
+
readonly draft: MeshDurableJournalDraft;
|
|
219
|
+
readonly occurredAt: string;
|
|
220
|
+
readonly crypto?: Crypto;
|
|
221
|
+
}): Promise<MeshDurableJournalEntry>;
|
|
222
|
+
export declare function verifyMeshDurableJournal(input: {
|
|
223
|
+
readonly entries: readonly MeshDurableJournalEntry[];
|
|
224
|
+
readonly anchorDigest?: string;
|
|
225
|
+
readonly anchorSequence?: number;
|
|
226
|
+
readonly crypto?: Crypto;
|
|
227
|
+
}): Promise<boolean>;
|
|
228
|
+
//# sourceMappingURL=durability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durability.d.ts","sourceRoot":"","sources":["../src/durability.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentplat/mesh",
|
|
3
|
-
"version": "0.3.0-alpha.
|
|
3
|
+
"version": "0.3.0-alpha.5",
|
|
4
4
|
"description": "Provider-neutral peer state and effect contracts for AgentPlat Mesh applications.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
"types": "./dist/coordination.d.ts",
|
|
21
21
|
"import": "./dist/coordination.js"
|
|
22
22
|
},
|
|
23
|
+
"./durability": {
|
|
24
|
+
"types": "./dist/durability.d.ts",
|
|
25
|
+
"import": "./dist/durability.js"
|
|
26
|
+
},
|
|
23
27
|
"./trust": {
|
|
24
28
|
"types": "./dist/trust.d.ts",
|
|
25
29
|
"import": "./dist/trust.js"
|
|
@@ -30,9 +34,9 @@
|
|
|
30
34
|
"README.md"
|
|
31
35
|
],
|
|
32
36
|
"dependencies": {
|
|
33
|
-
"@agentplat/mesh-
|
|
34
|
-
"@agentplat/mesh-
|
|
35
|
-
"@agentplat/trust": "^0.3.0-alpha.
|
|
37
|
+
"@agentplat/mesh-protocol": "^0.3.0-alpha.5",
|
|
38
|
+
"@agentplat/mesh-crypto": "^0.3.0-alpha.5",
|
|
39
|
+
"@agentplat/trust": "^0.3.0-alpha.5"
|
|
36
40
|
},
|
|
37
41
|
"engines": {
|
|
38
42
|
"node": ">=20.19.3"
|