@cello-protocol/daemon 0.0.182 → 0.0.184
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/agent-settings-keys.d.ts.map +1 -1
- package/dist/agent-settings-keys.js +18 -0
- package/dist/agent-settings-keys.js.map +1 -1
- package/dist/close-session-handler.d.ts.map +1 -1
- package/dist/close-session-handler.js +90 -16
- package/dist/close-session-handler.js.map +1 -1
- package/dist/consortium-bootstrap.d.ts.map +1 -1
- package/dist/consortium-bootstrap.js +117 -2
- package/dist/consortium-bootstrap.js.map +1 -1
- package/dist/content-encryption-status.d.ts +97 -0
- package/dist/content-encryption-status.d.ts.map +1 -0
- package/dist/content-encryption-status.js +122 -0
- package/dist/content-encryption-status.js.map +1 -0
- package/dist/content-park-client.d.ts +10 -0
- package/dist/content-park-client.d.ts.map +1 -1
- package/dist/content-park-client.js +84 -3
- package/dist/content-park-client.js.map +1 -1
- package/dist/content-park.d.ts.map +1 -1
- package/dist/content-park.js +184 -13
- package/dist/content-park.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +671 -67
- package/dist/daemon.js.map +1 -1
- package/dist/document-handlers.d.ts.map +1 -1
- package/dist/document-handlers.js +119 -0
- package/dist/document-handlers.js.map +1 -1
- package/dist/document-layer.d.ts +0 -2
- package/dist/document-layer.d.ts.map +1 -1
- package/dist/document-layer.js.map +1 -1
- package/dist/frame-values.d.ts.map +1 -1
- package/dist/frame-values.js +14 -0
- package/dist/frame-values.js.map +1 -1
- package/dist/inclusion-proof-handlers.d.ts +43 -0
- package/dist/inclusion-proof-handlers.d.ts.map +1 -0
- package/dist/inclusion-proof-handlers.js +565 -0
- package/dist/inclusion-proof-handlers.js.map +1 -0
- package/dist/inclusion-proof.d.ts +151 -0
- package/dist/inclusion-proof.d.ts.map +1 -0
- package/dist/inclusion-proof.js +228 -0
- package/dist/inclusion-proof.js.map +1 -0
- package/dist/initiate-session-handler.d.ts.map +1 -1
- package/dist/initiate-session-handler.js +34 -3
- package/dist/initiate-session-handler.js.map +1 -1
- package/dist/manifest-deps.d.ts +0 -11
- package/dist/manifest-deps.d.ts.map +1 -1
- package/dist/manifest-deps.js +28 -2
- package/dist/manifest-deps.js.map +1 -1
- package/dist/manifest-validity.d.ts +2 -0
- package/dist/manifest-validity.d.ts.map +1 -1
- package/dist/manifest-validity.js +1 -1
- package/dist/manifest-validity.js.map +1 -1
- package/dist/network-directory-node.d.ts +16 -0
- package/dist/network-directory-node.d.ts.map +1 -1
- package/dist/network-directory-node.js +40 -0
- package/dist/network-directory-node.js.map +1 -1
- package/dist/notification-handlers.d.ts.map +1 -1
- package/dist/notification-handlers.js +71 -2
- package/dist/notification-handlers.js.map +1 -1
- package/dist/outbound-sessions.d.ts +6 -0
- package/dist/outbound-sessions.d.ts.map +1 -1
- package/dist/outbound-sessions.js +50 -7
- package/dist/outbound-sessions.js.map +1 -1
- package/dist/park-envelope.d.ts +23 -0
- package/dist/park-envelope.d.ts.map +1 -1
- package/dist/park-envelope.js +76 -0
- package/dist/park-envelope.js.map +1 -1
- package/dist/register-handler.d.ts.map +1 -1
- package/dist/register-handler.js +76 -0
- package/dist/register-handler.js.map +1 -1
- package/dist/relay-only.d.ts +133 -0
- package/dist/relay-only.d.ts.map +1 -0
- package/dist/relay-only.js +183 -0
- package/dist/relay-only.js.map +1 -0
- package/dist/retry-queue.d.ts +26 -1
- package/dist/retry-queue.d.ts.map +1 -1
- package/dist/retry-queue.js +18 -1
- package/dist/retry-queue.js.map +1 -1
- package/dist/seal-coordinator.d.ts +51 -1
- package/dist/seal-coordinator.d.ts.map +1 -1
- package/dist/seal-coordinator.js +248 -1
- package/dist/seal-coordinator.js.map +1 -1
- package/dist/seal-escalation.d.ts.map +1 -1
- package/dist/seal-escalation.js +28 -0
- package/dist/seal-escalation.js.map +1 -1
- package/dist/seal-failure-store.d.ts.map +1 -1
- package/dist/seal-failure-store.js +5 -1
- package/dist/seal-failure-store.js.map +1 -1
- package/dist/sealed-leaf-set.d.ts +92 -0
- package/dist/sealed-leaf-set.d.ts.map +1 -0
- package/dist/sealed-leaf-set.js +129 -0
- package/dist/sealed-leaf-set.js.map +1 -0
- package/dist/session-ceremony.d.ts +27 -1
- package/dist/session-ceremony.d.ts.map +1 -1
- package/dist/session-ceremony.js +109 -7
- package/dist/session-ceremony.js.map +1 -1
- package/dist/session-content-handlers.d.ts +12 -0
- package/dist/session-content-handlers.d.ts.map +1 -1
- package/dist/session-content-handlers.js +39 -4
- package/dist/session-content-handlers.js.map +1 -1
- package/dist/session-node-manager.d.ts +387 -4
- package/dist/session-node-manager.d.ts.map +1 -1
- package/dist/session-node-manager.js +3529 -279
- package/dist/session-node-manager.js.map +1 -1
- package/dist/session-read-handlers.d.ts.map +1 -1
- package/dist/session-read-handlers.js +16 -1
- package/dist/session-read-handlers.js.map +1 -1
- package/dist/session-relay-client.d.ts +163 -1
- package/dist/session-relay-client.d.ts.map +1 -1
- package/dist/session-relay-client.js +540 -6
- package/dist/session-relay-client.js.map +1 -1
- package/dist/session-salt-agreement.d.ts +58 -4
- package/dist/session-salt-agreement.d.ts.map +1 -1
- package/dist/session-salt-agreement.js +110 -3
- package/dist/session-salt-agreement.js.map +1 -1
- package/dist/signal-submission.d.ts +11 -1
- package/dist/signal-submission.d.ts.map +1 -1
- package/dist/signal-submission.js.map +1 -1
- package/dist/signaling-connect.d.ts +18 -1
- package/dist/signaling-connect.d.ts.map +1 -1
- package/dist/signaling-connect.js +164 -1
- package/dist/signaling-connect.js.map +1 -1
- package/dist/submission-retry.d.ts +208 -0
- package/dist/submission-retry.d.ts.map +1 -0
- package/dist/submission-retry.js +505 -0
- package/dist/submission-retry.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vocabulary.d.ts +13 -3
- package/dist/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary.js +14 -3
- package/dist/vocabulary.js.map +1 -1
- package/dist/wire-content-hash.d.ts +15 -3
- package/dist/wire-content-hash.d.ts.map +1 -1
- package/dist/wire-content-hash.js +15 -3
- package/dist/wire-content-hash.js.map +1 -1
- package/package.json +5 -5
|
@@ -59,6 +59,17 @@ async function safeStop(node) {
|
|
|
59
59
|
/* best-effort teardown */
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
+
/** A directory node the daemon can dial, resolved from bootstrap config or a manifest. */
|
|
63
|
+
/**
|
|
64
|
+
* DOD-M15-STEP6-REPLAY-1 — how far out of date a directory identity proof may be.
|
|
65
|
+
*
|
|
66
|
+
* ±5 minutes: wide enough for ordinary clock skew between an operator's machine and a directory
|
|
67
|
+
* node without requiring either to be time-synced, narrow enough that a captured proof stops being
|
|
68
|
+
* useful in minutes rather than never. An UNPARSEABLE timestamp is treated as out of window — the
|
|
69
|
+
* NaN-comparison lesson from the manifest gate, where `new Date("nonsense") <= x` is false and a
|
|
70
|
+
* garbage value sailed through a check that looked like it covered it.
|
|
71
|
+
*/
|
|
72
|
+
const IDENTITY_PROOF_MAX_SKEW_MS = 5 * 60_000;
|
|
62
73
|
/**
|
|
63
74
|
* Parse signaling_auth_ok's optional `relay_endpoints` field. Per-entry strict:
|
|
64
75
|
* a malformed entry is dropped (auth must never fail on a bad hint), a valid one
|
|
@@ -92,6 +103,20 @@ function parseRelayEndpoints(raw) {
|
|
|
92
103
|
* transport SignalingManager catches the throw and schedules a reconnect.
|
|
93
104
|
*/
|
|
94
105
|
export function createSignalingConnect(deps) {
|
|
106
|
+
/**
|
|
107
|
+
* DOD-M15-DIRAUTH-1 — directory peers already told about a skipped identity check.
|
|
108
|
+
*
|
|
109
|
+
* Mirrors `consortium-bootstrap`'s `lapsedMembershipReportedFor` idiom: the fact is about a PEER,
|
|
110
|
+
* not about a connection, so reporting it per connection says the same true thing ~48 times an
|
|
111
|
+
* hour forever. Keyed on the peer this daemon DIALLED — never on the peer's own claim about
|
|
112
|
+
* itself, which on this path is precisely the thing that was not verified.
|
|
113
|
+
*
|
|
114
|
+
* ⚠️ SCOPED TO THE FACTORY, not the module. A module-level set is shared by every daemon wiring in
|
|
115
|
+
* the process and never resets, which makes the suppression outlive the thing it describes and
|
|
116
|
+
* makes test order load-bearing — my first version did exactly that and a later test silently lost
|
|
117
|
+
* its warning to an earlier one.
|
|
118
|
+
*/
|
|
119
|
+
const authSkipReportedFor = new Set();
|
|
95
120
|
return async function connect() {
|
|
96
121
|
const endpoint = await deps.getDirectoryEndpoint();
|
|
97
122
|
if (!endpoint) {
|
|
@@ -218,6 +243,52 @@ export function createSignalingConnect(deps) {
|
|
|
218
243
|
// Runs only when a challengeVerifier is configured. M6 ran without one.
|
|
219
244
|
let directoryNodeId = typeof ackFrame["nodeId"] === "string" ? ackFrame["nodeId"] : endpoint.peerId;
|
|
220
245
|
const verifier = deps.challengeVerifier;
|
|
246
|
+
if (!verifier) {
|
|
247
|
+
/**
|
|
248
|
+
* DOD-M15-DIRAUTH-1 — **A DISARMED CHECK MUST NOT LOOK LIKE A HEALTHY ONE.**
|
|
249
|
+
*
|
|
250
|
+
* With no verifier configured, step 6 does not run at all: this daemon takes the
|
|
251
|
+
* directory's word for which directory it is. Until now the only trace of that was
|
|
252
|
+
* `verified: false` — a boolean field inside the **info** line at the bottom of a successful
|
|
253
|
+
* connect. Every other connect logged the same event at the same level, so the disarmed
|
|
254
|
+
* state and the enforced state were distinguishable only by reading one field of one line,
|
|
255
|
+
* which nothing alerts on and no operator reads.
|
|
256
|
+
*
|
|
257
|
+
* ⚠️ THIS IS NOT THE FIX AND MUST NOT BE MISTAKEN FOR ONE — this entry's own conclusion is
|
|
258
|
+
* that **a log is not a control**, and a WARN is still a log. What it buys is that the
|
|
259
|
+
* absence has a name and a level of its own, so "authentication is off" can be seen without
|
|
260
|
+
* knowing to look for it. The control is `CELLO_REQUIRE_DIRECTORY_AUTH`, which refuses at
|
|
261
|
+
* startup; this is what tells an operator who has not set it what they are running.
|
|
262
|
+
*/
|
|
263
|
+
/**
|
|
264
|
+
* ⚠️ ONCE PER DIRECTORY, NOT ONCE PER CONNECT — review F3, and the number is the argument.
|
|
265
|
+
* The signaling stream turns over roughly every 70 seconds and reconnects forever, so a
|
|
266
|
+
* per-connect WARN is ~48 an hour PER AGENT, indefinitely, and the daemon's stdout logger
|
|
267
|
+
* has no level filtering. Three agents is ~3,400 identical lines a day. **A signal that
|
|
268
|
+
* fires on the normal case is not a signal** — this repo's own rule — and it would bury the
|
|
269
|
+
* public-directory case this exists to raise.
|
|
270
|
+
*
|
|
271
|
+
* ⚠️ AND THE FIELD IS NAMED FOR WHAT IT IS — review F4. On this path `directoryNodeId` is
|
|
272
|
+
* `ackFrame["nodeId"]`: a string the REMOTE sent about itself, with nothing checked. Printing
|
|
273
|
+
* it under that name inside a line whose whole subject is *"we did not check which directory
|
|
274
|
+
* this is"* presents the peer's own answer as the answer. `dialedPeerId` sits beside it as
|
|
275
|
+
* the thing this daemon actually chose.
|
|
276
|
+
*/
|
|
277
|
+
const claimedNodeId = typeof ackFrame["nodeId"] === "string" ? ackFrame["nodeId"] : null;
|
|
278
|
+
if (!authSkipReportedFor.has(endpoint.peerId)) {
|
|
279
|
+
authSkipReportedFor.add(endpoint.peerId);
|
|
280
|
+
deps.logger.warn("directory.auth.skipped", {
|
|
281
|
+
dialedPeerId: endpoint.peerId,
|
|
282
|
+
claimedNodeId,
|
|
283
|
+
agentPubkey: identity.pubkeyHex,
|
|
284
|
+
impact: "no directory identity verifier is configured, so this connection did NOT check which " +
|
|
285
|
+
"directory it reached — the peer's claim of its own identity was accepted as given. " +
|
|
286
|
+
"Set CELLO_CONSORTIUM_ROOT_KEYS (with CELLO_CONSORTIUM_THRESHOLD) to enable " +
|
|
287
|
+
"verification, or CELLO_REQUIRE_DIRECTORY_AUTH=1 to refuse at startup instead of " +
|
|
288
|
+
"connecting unverified. Reported ONCE per directory peer, not per reconnect.",
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
221
292
|
if (verifier) {
|
|
222
293
|
const nodeId = ackFrame["nodeId"];
|
|
223
294
|
const signature = ackFrame["signature"];
|
|
@@ -237,8 +308,55 @@ export function createSignalingConnect(deps) {
|
|
|
237
308
|
deps.logger.error("directory.auth.challenge.failed", { directoryNodeId: nodeId, reason: result.reason });
|
|
238
309
|
throw new Error(`directory_challenge_failed: ${result.reason}`);
|
|
239
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* DOD-M15-STEP6-REPLAY-1 — A VALID SIGNATURE IS NOT A FRESH ONE.
|
|
313
|
+
*
|
|
314
|
+
* The TBS covers `nodeId ‖ agent pubkey ‖ nonce ‖ timestamp`, and until this check the
|
|
315
|
+
* client verified the signature over that tuple and looked at **neither** the timestamp nor
|
|
316
|
+
* the nonce. So **any party that once obtained a valid tuple for this agent could replay it
|
|
317
|
+
* indefinitely.**
|
|
318
|
+
*
|
|
319
|
+
* ─── WHY THE NONCE CANNOT CARRY THE FRESHNESS, WHICH IS THE PART THAT SURPRISED ME ──────
|
|
320
|
+
*
|
|
321
|
+
* The obvious answer is "check the nonce is the one we just sent". **We did not send it.**
|
|
322
|
+
* The nonce here is `challengeFrame["nonce"]` — the DIRECTORY's own, from step 1-2. The
|
|
323
|
+
* client contributes no fresh value to this exchange at all, so it holds nothing of its own
|
|
324
|
+
* to bind against. A replaying party simply replays the captured nonce in step 2 and the
|
|
325
|
+
* captured ack in step 5, and both halves agree.
|
|
326
|
+
*
|
|
327
|
+
* **That leaves the timestamp as the only freshness anchor**, and it is a real one: it is
|
|
328
|
+
* inside the signed bytes, so a replayer cannot move it without invalidating the signature
|
|
329
|
+
* they are replaying.
|
|
330
|
+
*
|
|
331
|
+
* ─── AFTER the signature, deliberately ─────────────────────────────────────────────────
|
|
332
|
+
*
|
|
333
|
+
* A stale proof and a forged one are different facts and must not collapse into one
|
|
334
|
+
* message. Checking freshness only once the signature verifies means `identity_proof_stale`
|
|
335
|
+
* always describes a GENUINE proof that is too old — never a forgery — which is what makes
|
|
336
|
+
* it diagnostic rather than another exit-point label.
|
|
337
|
+
*
|
|
338
|
+
* **The window, and what it does NOT fix.** ±5 minutes tolerates ordinary client/directory
|
|
339
|
+
* clock skew without a time-sync dependency. It BOUNDS replay to that window; it does not
|
|
340
|
+
* eliminate it, because with no client-chosen nonce there is nothing to make a proof
|
|
341
|
+
* single-use. Closing the remainder needs either a client contribution in the challenge or a
|
|
342
|
+
* seen-nonce cache — both wire or state changes, and neither is this line.
|
|
343
|
+
*/
|
|
344
|
+
const proofMs = Date.parse(timestamp);
|
|
345
|
+
const skewMs = Number.isFinite(proofMs) ? Math.abs(Date.now() - proofMs) : Number.NaN;
|
|
346
|
+
if (!Number.isFinite(skewMs) || skewMs > IDENTITY_PROOF_MAX_SKEW_MS) {
|
|
347
|
+
deps.logger.error("directory.auth.challenge.failed", {
|
|
348
|
+
directoryNodeId: nodeId,
|
|
349
|
+
reason: "identity_proof_stale",
|
|
350
|
+
timestamp,
|
|
351
|
+
skewMs: Number.isFinite(skewMs) ? Math.round(skewMs) : null,
|
|
352
|
+
maxSkewMs: IDENTITY_PROOF_MAX_SKEW_MS,
|
|
353
|
+
detail: "the directory's identity proof carries a valid signature over a timestamp outside the " +
|
|
354
|
+
"freshness window — either a replayed proof, or a clock that is badly out on one side.",
|
|
355
|
+
});
|
|
356
|
+
throw new Error("directory_challenge_failed: identity_proof_stale");
|
|
357
|
+
}
|
|
240
358
|
directoryNodeId = nodeId;
|
|
241
|
-
deps.logger.info("directory.auth.challenge.verified", { directoryNodeId });
|
|
359
|
+
deps.logger.info("directory.auth.challenge.verified", { directoryNodeId, skewMs: Math.round(skewMs) });
|
|
242
360
|
}
|
|
243
361
|
// DOD-NAT-REACHABILITY-1 (Phase 2): the directory's relay pool rides
|
|
244
362
|
// signaling_auth_ok so the standing receiver can reserve BEFORE any
|
|
@@ -254,6 +372,51 @@ export function createSignalingConnect(deps) {
|
|
|
254
372
|
deps.onRelayEndpoints(endpoints);
|
|
255
373
|
}
|
|
256
374
|
}
|
|
375
|
+
/**
|
|
376
|
+
* DOD-M15-RELAYSLOTS-1: the online token rides the same frame as the relay pool above, for
|
|
377
|
+
* the same reason — a standing receiver needs both before any session exists: WHERE to ask
|
|
378
|
+
* for a reservation slot, and the credential that lets it keep one.
|
|
379
|
+
*
|
|
380
|
+
* A field of the wrong type is dropped rather than failing the handshake, exactly as a
|
|
381
|
+
* malformed relay endpoint is. The consequence is bounded and visible (this agent gets no
|
|
382
|
+
* slot on any relay, and the relay names the reason when it refuses), whereas failing the
|
|
383
|
+
* handshake would also cost session offers, which arrive on this same stream.
|
|
384
|
+
*/
|
|
385
|
+
if (deps.onOnlineToken) {
|
|
386
|
+
const raw = ackFrame["online_token"];
|
|
387
|
+
const token = raw instanceof Uint8Array ? raw : Buffer.isBuffer(raw) ? new Uint8Array(raw) : undefined;
|
|
388
|
+
if (token && token.length > 0) {
|
|
389
|
+
deps.logger.info("directory.online_token.received", { directoryNodeId, bytes: token.length });
|
|
390
|
+
deps.onOnlineToken(token);
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
/**
|
|
394
|
+
* Review M1: the directory names WHICH absence, so this is no longer one label for three
|
|
395
|
+
* different problems. `not_registered_here` in particular is a payload fact, and reporting
|
|
396
|
+
* it as a generic "no token" sent the operator to check a directory connection that is
|
|
397
|
+
* working perfectly.
|
|
398
|
+
*/
|
|
399
|
+
const raw = ackFrame["online_token_absent_reason"];
|
|
400
|
+
const absentReason = raw === "not_registered_here" || raw === "issue_failed" ? raw : undefined;
|
|
401
|
+
deps.onOnlineTokenAbsent?.(absentReason);
|
|
402
|
+
deps.logger.warn("directory.online_token.absent", {
|
|
403
|
+
directoryNodeId,
|
|
404
|
+
agentPubkey: identity.pubkeyHex,
|
|
405
|
+
reason: absentReason ?? "unstated",
|
|
406
|
+
impact: absentReason === "not_registered_here"
|
|
407
|
+
? "this directory holds no agent profile for this key, so it issued no online token " +
|
|
408
|
+
"and no relay will grant this agent a reservation. The directory connection is FINE " +
|
|
409
|
+
"— either this agent registered against a different sovereign node and its profile " +
|
|
410
|
+
"has not replicated here yet, or it is not registered at all."
|
|
411
|
+
: absentReason === "issue_failed"
|
|
412
|
+
? "this directory could not issue an online token — its own lookup or signing failed. " +
|
|
413
|
+
"That is a fault on the directory, not on this agent or on any relay."
|
|
414
|
+
: "this directory issued no online token, so no relay will let this agent hold a " +
|
|
415
|
+
"circuit reservation and it will be reachable only over a direct connection. It " +
|
|
416
|
+
"stated no reason, which means it predates the token.",
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
}
|
|
257
420
|
// ── Step 7: announce our peer info so the directory can broker sessions ──
|
|
258
421
|
const peerInfo = encodeCbor({
|
|
259
422
|
type: "peer_info_announce",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signaling-connect.js","sourceRoot":"","sources":["../src/signaling-connect.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signaling-connect.js","sourceRoot":"","sources":["../src/signaling-connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,EACL,UAAU,EACV,aAAa,GAKd,MAAM,2BAA2B,CAAC;AAInC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AACvD,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAC5C,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B,SAAS,IAAI,CAAC,CAAU;IACtB,IAAI,CAAC,YAAY,UAAU;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,UAAU,CAAC,CAAW,CAAC,CAAC;IAC3D,IAAI,OAAQ,CAAyB,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC3D,OAAQ,CAA6B,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,CAAC,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,MAAM,CAAC,GAAY;IAC1B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,eAAe,CAAI,IAAsB,EAAE,SAAiB;IACzE,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;KAClG,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAe;IACrC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;AACH,CAAC;AAED,0FAA0F;AAC1F;;;;;;;;GAQG;AACH,MAAM,0BAA0B,GAAG,CAAC,GAAG,MAAM,CAAC;AAkF9C;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAA+C,EAAE,CAAC;IAC3D,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAChE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACpE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAAE,SAAS;QAC3F,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA0B;IAC/D;;;;;;;;;;;;OAYG;IACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9C,OAAO,KAAK,UAAU,OAAO;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,2EAA2E;QAC3E,EAAE;QACF,8FAA8F;QAC9F,yFAAyF;QACzF,8FAA8F;QAC9F,+FAA+F;QAC/F,2DAA2D;QAC3D,EAAE;QACF,6FAA6F;QAC7F,+FAA+F;QAC/F,6FAA6F;QAC7F,yFAAyF;QACzF,gDAAgD;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB;YACnC,CAAC,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC;YACtD,CAAC,CAAC,MAAM,UAAU,CAAC;gBACf,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA4BG;gBACH,eAAe,EAAE,EAAE;gBACnB,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC/B,yFAAyF;gBACzF,qFAAqF;gBACrF,iFAAiF;gBACjF,gBAAgB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;aACrC,CAAC,CAAC;QAEP,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,qEAAqE;YACrE,qEAAqE;YACrE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,8EAA8E;gBAC9E,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACtC,CAAC;gBAAC,OAAO,OAAgB,EAAE,CAAC;oBAC1B,yEAAyE;oBACzE,uDAAuD;oBACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;wBACzC,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;qBACvB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,GAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAA4B,CAAC,MAAM,CAAC,aAAa,CAAC,EAA+B,CAAC;QAEnH,IAAI,CAAC;YACH,0EAA0E;YAC1E,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC/D,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACpG,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAA4B,CAAC;YAChF,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,0BAA0B,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAErE,6EAA6E;YAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9E,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,UAAU,CAAC;gBAC9B,IAAI,EAAE,yBAAyB;gBAC/B,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,GAAG;gBACd,iGAAiG;gBACjG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAe,CAAC;YACjB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YAE/C,0CAA0C;YAC1C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACzD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAClF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAA4B,CAAC;YACpE,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,mBAAmB,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;YAED,2EAA2E;YAC3E,wEAAwE;YACxE,IAAI,eAAe,GAAG,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,QAAQ,CAAC,QAAQ,CAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChH,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd;;;;;;;;;;;;;;;mBAeG;gBACH;;;;;;;;;;;;;mBAaG;gBACH,MAAM,aAAa,GAAG,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,QAAQ,CAAC,QAAQ,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9C,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;wBACzC,YAAY,EAAE,QAAQ,CAAC,MAAM;wBAC7B,aAAa;wBACb,WAAW,EAAE,QAAQ,CAAC,SAAS;wBAC/B,MAAM,EACJ,uFAAuF;4BACvF,qFAAqF;4BACrF,6EAA6E;4BAC7E,kFAAkF;4BAClF,6EAA6E;qBAChF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAuB,CAAC;gBACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAuB,CAAC;gBAC9D,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAuB,CAAC;gBAC9D,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;oBACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;oBACtF,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,CAAC;gBACD,MAAM,QAAQ,GAAG,aAAa,CAAC;oBAC7B,MAAM;oBACN,cAAc,EAAE,QAAQ,CAAC,SAAS;oBAClC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC5C,YAAY,EAAE,SAAS;iBACxB,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACzG,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAClE,CAAC;gBACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAgCG;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACtC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACtF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,0BAA0B,EAAE,CAAC;oBACpE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;wBACnD,eAAe,EAAE,MAAM;wBACvB,MAAM,EAAE,sBAAsB;wBAC9B,SAAS;wBACT,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;wBAC3D,SAAS,EAAE,0BAA0B;wBACrC,MAAM,EACJ,wFAAwF;4BACxF,uFAAuF;qBAC1F,CAAC,CAAC;oBACH,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBACtE,CAAC;gBACD,eAAe,GAAG,MAAM,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzG,CAAC;YAED,qEAAqE;YACrE,oEAAoE;YACpE,sEAAsE;YACtE,uBAAuB;YACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACnE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;wBACrD,eAAe;wBACf,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;qBAC7C,CAAC,CAAC;oBACH,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED;;;;;;;;;eASG;YACH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvG,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC9F,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN;;;;;uBAKG;oBACH,MAAM,GAAG,GAAG,QAAQ,CAAC,4BAA4B,CAAC,CAAC;oBACnD,MAAM,YAAY,GAAG,GAAG,KAAK,qBAAqB,IAAI,GAAG,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC/F,IAAI,CAAC,mBAAmB,EAAE,CAAC,YAAY,CAAC,CAAC;oBACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;wBAChD,eAAe;wBACf,WAAW,EAAE,QAAQ,CAAC,SAAS;wBAC/B,MAAM,EAAE,YAAY,IAAI,UAAU;wBAClC,MAAM,EAAE,YAAY,KAAK,qBAAqB;4BAC5C,CAAC,CAAC,mFAAmF;gCACnF,qFAAqF;gCACrF,oFAAoF;gCACpF,8DAA8D;4BAChE,CAAC,CAAC,YAAY,KAAK,cAAc;gCAC/B,CAAC,CAAC,qFAAqF;oCACrF,sEAAsE;gCACxE,CAAC,CAAC,gFAAgF;oCAChF,iFAAiF;oCACjF,sDAAsD;qBAC7D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,4EAA4E;YAC5E,MAAM,QAAQ,GAAG,UAAU,CAAC;gBAC1B,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE;gBACzB,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE;aACnC,CAAe,CAAC;YACjB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAE3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBAChD,eAAe;gBACf,WAAW,EAAE,QAAQ,CAAC,SAAS;gBAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC;YAEH,4EAA4E;YAC5E,0DAA0D;YAC1D,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;YAEzB,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACzF,OAAO;gBACL,MAAM;gBACN,eAAe;gBACf,eAAe,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC;aAClD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,iFAAiF;YACjF,gFAAgF;YAChF,sEAAsE;YACtE,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC;gBACH,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;YACD,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAC1B,SAAiB,EACjB,IAA+B,EAC/B,IAAe,EACf,MAAc,EACd,WAA8C;IAE9C,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAc;YACvB,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAe,CAAC;YAChD,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,SAAS,CAAC,OAAiC;YACzC,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC;oBACH,SAAS,CAAC;wBACR,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC1C,IAAI,IAAI,IAAI,KAAK,KAAK,SAAS;4BAAE,MAAM;wBACvC,IAAI,KAAc,CAAC;wBACnB,IAAI,CAAC;4BACH,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC9B,CAAC;wBAAC,MAAM,CAAC;4BACP,gEAAgE;4BAChE,SAAS;wBACX,CAAC;wBACD,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;oBACD,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvE,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACtB,uFAAuF;oBACvF,uFAAuF;oBACvF,0FAA0F;oBAC1F,2FAA2F;oBAC3F,wDAAwD;oBACxD,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3F,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QACD,KAAK;YACH,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,4EAA4E;YAC5E,wDAAwD;YACxD,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC;gBACH,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,oBAAoB;YACtB,CAAC;YACD,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-M15-ENDORSE-RETRY-1 — a sealed submission survives the directory node going away.
|
|
3
|
+
*
|
|
4
|
+
* An operator mints a trust signal, the one directory node this daemon holds a signaling stream to
|
|
5
|
+
* is down or restarting, and the command fails and it is over: nothing queues the submission,
|
|
6
|
+
* nothing retries it, and the operator has to notice and run it again. The consortium has three
|
|
7
|
+
* nodes, and surviving one of them being unavailable is the entire reason there are three.
|
|
8
|
+
*
|
|
9
|
+
* THIS IS THE RETRY, NOT THE ROUTING, AND THAT DISTINCTION IS RULED. `sendSealedSubmission` says so
|
|
10
|
+
* in its own header: the daemon holds ONE signaling stream, registration already works this way
|
|
11
|
+
* (the client sends to the connected node and the DIRECTORY fans out), and inventing a client-side
|
|
12
|
+
* multi-node write here would duplicate the SignalingManager's reconnect. So the failover mechanism
|
|
13
|
+
* is that existing reconnect — this module never chooses a node, never holds an endpoint, and never
|
|
14
|
+
* learns which node answered. It waits to be told the stream is up again and sends the same bytes.
|
|
15
|
+
*
|
|
16
|
+
* WHY A RETRY IS SAFE, and it is the load-bearing fact for the whole design: `submission_id` is
|
|
17
|
+
* sha256 of the SIGNED PLAINTEXT body, so the same submission produces the same id however many
|
|
18
|
+
* times it is sent. A node stores it once (`ON CONFLICT DO NOTHING` on the id) and the portal mints
|
|
19
|
+
* once (`processed_submissions`, checked before the mint path). Nothing here may ever re-COMPOSE a
|
|
20
|
+
* submission: the sealed bytes are captured at compose time and re-sent verbatim, because a re-seal
|
|
21
|
+
* is randomised and a re-compose could pick up a different `issued_at` — which changes the id, and
|
|
22
|
+
* a changed id is a second endorsement rather than a retry.
|
|
23
|
+
*
|
|
24
|
+
* SERIAL AND STAGGERED, on the `RestartSealResolver`'s pattern, and one of its lessons is carried
|
|
25
|
+
* over wholesale: a refusal that is a precondition OF OURS is not a verdict on the submission, so it
|
|
26
|
+
* must not spend the attempt budget. There the population was `standing_receiver_unavailable` on a
|
|
27
|
+
* fresh boot; here it is a signaling stream that is reconnecting. Production turns that stream over
|
|
28
|
+
* roughly every 70 seconds, so charging each reconnect an attempt would burn a five-attempt budget
|
|
29
|
+
* in six minutes and give up on a submission whose only problem was that the network moved.
|
|
30
|
+
*
|
|
31
|
+
* IN MEMORY, FOR THE LIFE OF THE PROCESS, and stated rather than implied. The queue holds sealed
|
|
32
|
+
* ciphertext, and persisting it would mean a new table, a client-side migration, and a blob at rest
|
|
33
|
+
* whose retention outlives the intake key it is sealed to. A daemon restart therefore loses the
|
|
34
|
+
* pending retries — the operator sees them disappear from `cello_attestations_issued` rather than
|
|
35
|
+
* seeing a lie, they are NAMED in the log on the way out (`retry.dropped_on_shutdown`), and
|
|
36
|
+
* re-submitting is safe by the same content-derived id.
|
|
37
|
+
*
|
|
38
|
+
* THE INTAKE KEY IS CHECKED BY THE CALLER, not assumed here. An earlier version of this paragraph
|
|
39
|
+
* asserted that the retry window "is far shorter than any manifest validity window, so a queued
|
|
40
|
+
* blob cannot outlive the intake key it was sealed to" — which is only true when the manifest has
|
|
41
|
+
* more than a window left at compose time. The enqueue site in `daemon.ts` holds the manifest and
|
|
42
|
+
* refuses to hold a submission whose intake key would expire inside the window; see
|
|
43
|
+
* `DEFAULT_RETRY_WINDOW_MS` below for what goes wrong when nothing checks.
|
|
44
|
+
*/
|
|
45
|
+
import type { SubmissionOp } from "@cello-protocol/protocol-types";
|
|
46
|
+
import type { SendSubmissionResult, SubmissionSendFailure } from "./signal-submission.js";
|
|
47
|
+
import type { Logger } from "./types.js";
|
|
48
|
+
export declare function isRetryableSendFailure(reason: SubmissionSendFailure): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Why a retry stopped. FOUR names, because they lead to four different operator actions and this is
|
|
51
|
+
* the field a machine consumer branches on.
|
|
52
|
+
*
|
|
53
|
+
* `refused_by_node` and `agent_unloaded` exist because of review H3: a refusal arriving on retry
|
|
54
|
+
* attempt 1 used to be stamped `attempts_exhausted` with `attempts: 0` printed beside it. The
|
|
55
|
+
* node's own words survived in `guidance`, but EVERY machine-readable field said transport — so an
|
|
56
|
+
* operator grepping the log for exhaustion found a quota refusal, and one grepping for refusals
|
|
57
|
+
* found it filed under a transport give-up. The work order's recorded trap is exactly this: *"the
|
|
58
|
+
* operator must be able to tell 'the network is flaky, hold on' from 'the directory said no.'"*
|
|
59
|
+
*/
|
|
60
|
+
export type SubmissionGiveUpReason =
|
|
61
|
+
/** Failures that REACHED a node and got no usable answer, until the budget ran out. */
|
|
62
|
+
"attempts_exhausted"
|
|
63
|
+
/** Only ever local preconditions — the stream never came back inside the window. */
|
|
64
|
+
| "retry_window_elapsed"
|
|
65
|
+
/** A node decoded it, evaluated it, and said no. Nothing about waiting changes that. */
|
|
66
|
+
| "refused_by_node"
|
|
67
|
+
/** This daemon can no longer sign as the submitting agent, so nobody can send these bytes. */
|
|
68
|
+
| "agent_unloaded";
|
|
69
|
+
/** One submission this daemon composed, sealed, and has not yet handed to a directory node. */
|
|
70
|
+
export interface PendingSubmission {
|
|
71
|
+
agentName: string;
|
|
72
|
+
/** The STABLE key. `agentName` is a display label and is reusable after a retire; the surface
|
|
73
|
+
* that lists these is scoped by id. */
|
|
74
|
+
agentId: string;
|
|
75
|
+
/** Content-derived. Never recomputed here — see the header. */
|
|
76
|
+
submissionId: string;
|
|
77
|
+
intakeKeyId: string;
|
|
78
|
+
/** The sealed blob, re-sent verbatim. */
|
|
79
|
+
ciphertext: Uint8Array;
|
|
80
|
+
op: SubmissionOp;
|
|
81
|
+
subject: string;
|
|
82
|
+
}
|
|
83
|
+
export type SubmissionDelivery = {
|
|
84
|
+
state: "retrying";
|
|
85
|
+
attempts: number;
|
|
86
|
+
lastReason: SubmissionSendFailure;
|
|
87
|
+
nextAttemptAt: number;
|
|
88
|
+
guidance: string;
|
|
89
|
+
} | {
|
|
90
|
+
state: "gave_up";
|
|
91
|
+
attempts: number;
|
|
92
|
+
lastReason: SubmissionSendFailure;
|
|
93
|
+
gaveUpBecause: SubmissionGiveUpReason;
|
|
94
|
+
guidance: string;
|
|
95
|
+
};
|
|
96
|
+
export interface PendingSubmissionView {
|
|
97
|
+
submissionId: string;
|
|
98
|
+
op: SubmissionOp;
|
|
99
|
+
subject: string;
|
|
100
|
+
intakeKeyId: string;
|
|
101
|
+
delivery: SubmissionDelivery;
|
|
102
|
+
}
|
|
103
|
+
export interface ScheduledTask {
|
|
104
|
+
cancel: () => void;
|
|
105
|
+
}
|
|
106
|
+
export interface SubmissionRetryQueueDeps {
|
|
107
|
+
logger: Logger;
|
|
108
|
+
/**
|
|
109
|
+
* Re-send THESE bytes on whatever stream the agent's SignalingManager currently holds. The queue
|
|
110
|
+
* does not know or care which node that is — that is the point of the ruling in the header.
|
|
111
|
+
*/
|
|
112
|
+
send: (item: PendingSubmission) => Promise<SendSubmissionResult>;
|
|
113
|
+
/**
|
|
114
|
+
* A retry landed. The caller writes the same local record a first-pass send writes, or a later
|
|
115
|
+
* withdrawal has no handle to name. Called on the retry path only; the first-pass send records
|
|
116
|
+
* its own.
|
|
117
|
+
*/
|
|
118
|
+
onAccepted: (item: PendingSubmission, stored: boolean) => void;
|
|
119
|
+
now?: () => number;
|
|
120
|
+
schedule?: (fn: () => void, ms: number) => ScheduledTask;
|
|
121
|
+
/** Gap between two attempts, so a queue of submissions is not a burst of frames. */
|
|
122
|
+
staggerMs?: number;
|
|
123
|
+
/** Ceiling on attempts that reached a node. */
|
|
124
|
+
maxAttempts?: number;
|
|
125
|
+
/** Wall-clock ceiling for a submission whose failures were all local preconditions. */
|
|
126
|
+
retryWindowMs?: number;
|
|
127
|
+
/**
|
|
128
|
+
* Gap before re-trying a LOCAL PRECONDITION failure. Injectable because it and `baseBackoffMs`
|
|
129
|
+
* were the only two intervals a test could not vary — which is why the live wiring test's green
|
|
130
|
+
* depended on a real reconnect ladder racing a real 5-second timer.
|
|
131
|
+
*/
|
|
132
|
+
localPreconditionRetryMs?: number;
|
|
133
|
+
/** First non-local backoff; doubles from here. */
|
|
134
|
+
baseBackoffMs?: number;
|
|
135
|
+
/** Ceiling on pending submissions held at once, across all agents. */
|
|
136
|
+
queueCap?: number;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* One hour. Chosen against the intake key, not against patience: the queued blob is sealed to the
|
|
140
|
+
* intake key the manifest published at compose time, and a manifest window is measured in weeks.
|
|
141
|
+
*
|
|
142
|
+
* THIS COMMENT USED TO ASSERT THAT AN HOUR "CANNOT OUTLIVE THE KEY", AND THAT WAS AN UNCHECKED
|
|
143
|
+
* CLAIM (review M4). It holds only when the manifest has more than an hour left at compose time.
|
|
144
|
+
* `composeSealedSubmission` refuses an already-expired manifest, but nothing stopped a submission
|
|
145
|
+
* composed one minute before expiry from being held and re-sent for the next fifty-nine — and the
|
|
146
|
+
* portal's rotated-key retention does not cover it either, because that rule keeps a retired key
|
|
147
|
+
* "until no undrained row references it" (M10B-D11) and a HELD submission has no row at any node.
|
|
148
|
+
* The result is exactly the state the expiry gate exists to prevent: a blob the portal cannot open
|
|
149
|
+
* and cannot attribute, arriving as poison with no reply possible — while the operator has been
|
|
150
|
+
* told it is held and needs nothing from them.
|
|
151
|
+
*
|
|
152
|
+
* So the CALLER checks rather than this comment asserting. See the enqueue site in `daemon.ts`,
|
|
153
|
+
* which has the manifest in hand and refuses to hold a submission whose intake key would expire
|
|
154
|
+
* inside this window.
|
|
155
|
+
*/
|
|
156
|
+
export declare const DEFAULT_RETRY_WINDOW_MS: number;
|
|
157
|
+
/**
|
|
158
|
+
* The retry queue. One per daemon; keyed by (agentId, submissionId) because two agents on one
|
|
159
|
+
* daemon can each submit about the same subject and the rows are per-agent facts.
|
|
160
|
+
*/
|
|
161
|
+
export declare class SubmissionRetryQueue {
|
|
162
|
+
#private;
|
|
163
|
+
constructor(deps: SubmissionRetryQueueDeps);
|
|
164
|
+
/**
|
|
165
|
+
* Take ownership of a submission whose send failed for a retryable reason.
|
|
166
|
+
*
|
|
167
|
+
* Returns `false` when the queue is full, and the caller then reports the plain failure — an
|
|
168
|
+
* operator who is told "the daemon has it" about a submission the daemon dropped is worse off
|
|
169
|
+
* than one who is told it failed, because only the second knows to act.
|
|
170
|
+
*/
|
|
171
|
+
enqueue(item: PendingSubmission, lastReason: SubmissionSendFailure): boolean;
|
|
172
|
+
/**
|
|
173
|
+
* The agent's directory signaling stream reached 'connected' — the first connect and every
|
|
174
|
+
* reconnect after a drop. THIS IS THE FAILOVER. Which node it landed on is not this module's
|
|
175
|
+
* business and is deliberately not read.
|
|
176
|
+
*/
|
|
177
|
+
onSignalingConnected(agentName: string): void;
|
|
178
|
+
/**
|
|
179
|
+
* What this agent still has in flight, and what was given up on. Read by `wallet_list_issued`,
|
|
180
|
+
* which is the surface behind `cello_attestations_issued` — the verb whose whole question is
|
|
181
|
+
* "what happened to what I sent?".
|
|
182
|
+
*/
|
|
183
|
+
list(agentId: string): PendingSubmissionView[];
|
|
184
|
+
/**
|
|
185
|
+
* A submission finally landed by some other route — the operator re-issued it, and the
|
|
186
|
+
* first-pass send succeeded. Drop any give-up recorded for it (review L9).
|
|
187
|
+
*
|
|
188
|
+
* The id is content-derived, so re-issuing the SAME words about the SAME subject produces the
|
|
189
|
+
* SAME id: this is precisely the "I wrote it again and it worked" case. Without it the operator
|
|
190
|
+
* sees the old failure and the new accepted row side by side for the life of the daemon, with no
|
|
191
|
+
* way to dismiss the one that is no longer true.
|
|
192
|
+
*/
|
|
193
|
+
clearGaveUp(agentId: string, submissionId: string): void;
|
|
194
|
+
/**
|
|
195
|
+
* Stop, and start nothing further.
|
|
196
|
+
*
|
|
197
|
+
* EVERY DROPPED SUBMISSION IS NAMED (review H2). The queue is in memory by design, but the
|
|
198
|
+
* operator was told in as many words "you do NOT need to run this again" — and before this, a
|
|
199
|
+
* restart left no durable trace anywhere naming what had been lost. A comment in the composition
|
|
200
|
+
* root asserting "in memory by design" is not a record; these lines are.
|
|
201
|
+
*
|
|
202
|
+
* The SUBJECT is logged and the body is not: the subject is a pubkey or a signal hash, and the
|
|
203
|
+
* body is the operator's own words about a third party, which this whole path exists to keep out
|
|
204
|
+
* of the clear on disk.
|
|
205
|
+
*/
|
|
206
|
+
stop(): void;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=submission-retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission-retry.d.ts","sourceRoot":"","sources":["../src/submission-retry.ts"],"names":[],"mappings":"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"}
|