@cotal-ai/core 0.86.0 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/browser-control.d.ts +53 -1
  2. package/dist/browser-control.d.ts.map +1 -1
  3. package/dist/browser-control.js +102 -1
  4. package/dist/browser-control.js.map +1 -1
  5. package/dist/channels.d.ts +4 -0
  6. package/dist/channels.d.ts.map +1 -1
  7. package/dist/channels.js +6 -2
  8. package/dist/channels.js.map +1 -1
  9. package/dist/endpoint-action.d.ts +2 -2
  10. package/dist/endpoint-action.d.ts.map +1 -1
  11. package/dist/endpoint-action.js +4 -28
  12. package/dist/endpoint-action.js.map +1 -1
  13. package/dist/endpoint-goal-follow.d.ts +37 -0
  14. package/dist/endpoint-goal-follow.d.ts.map +1 -0
  15. package/dist/endpoint-goal-follow.js +328 -0
  16. package/dist/endpoint-goal-follow.js.map +1 -0
  17. package/dist/endpoint-grants.d.ts +0 -4
  18. package/dist/endpoint-grants.d.ts.map +1 -1
  19. package/dist/endpoint-grants.js +1 -7
  20. package/dist/endpoint-grants.js.map +1 -1
  21. package/dist/endpoint-invoke.d.ts +4 -27
  22. package/dist/endpoint-invoke.d.ts.map +1 -1
  23. package/dist/endpoint-invoke.js +6 -307
  24. package/dist/endpoint-invoke.js.map +1 -1
  25. package/dist/endpoint-signing.d.ts +1 -1
  26. package/dist/endpoint-signing.d.ts.map +1 -1
  27. package/dist/endpoint-signing.js +1 -1
  28. package/dist/endpoint-signing.js.map +1 -1
  29. package/dist/endpoint-subjects.d.ts +4 -0
  30. package/dist/endpoint-subjects.d.ts.map +1 -1
  31. package/dist/endpoint-subjects.js +6 -0
  32. package/dist/endpoint-subjects.js.map +1 -1
  33. package/dist/endpoint.d.ts +78 -13
  34. package/dist/endpoint.d.ts.map +1 -1
  35. package/dist/endpoint.js +247 -43
  36. package/dist/endpoint.js.map +1 -1
  37. package/dist/goal-result-fact.d.ts +13 -0
  38. package/dist/goal-result-fact.d.ts.map +1 -0
  39. package/dist/goal-result-fact.js +40 -0
  40. package/dist/goal-result-fact.js.map +1 -0
  41. package/dist/index.d.ts +1 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +1 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/jetstream-missing.d.ts +4 -0
  46. package/dist/jetstream-missing.d.ts.map +1 -1
  47. package/dist/jetstream-missing.js +6 -0
  48. package/dist/jetstream-missing.js.map +1 -1
  49. package/dist/kv-scan.d.ts +15 -0
  50. package/dist/kv-scan.d.ts.map +1 -1
  51. package/dist/kv-scan.js +32 -0
  52. package/dist/kv-scan.js.map +1 -1
  53. package/dist/launch-material.d.ts.map +1 -1
  54. package/dist/launch-material.js +6 -2
  55. package/dist/launch-material.js.map +1 -1
  56. package/dist/lease.d.ts +50 -0
  57. package/dist/lease.d.ts.map +1 -1
  58. package/dist/lease.js +71 -0
  59. package/dist/lease.js.map +1 -1
  60. package/dist/private-tool-results.d.ts +253 -0
  61. package/dist/private-tool-results.d.ts.map +1 -0
  62. package/dist/private-tool-results.js +141 -0
  63. package/dist/private-tool-results.js.map +1 -0
  64. package/dist/provision.d.ts +5 -0
  65. package/dist/provision.d.ts.map +1 -1
  66. package/dist/provision.js +32 -14
  67. package/dist/provision.js.map +1 -1
  68. package/dist/remote-manager-authority.d.ts +17 -0
  69. package/dist/remote-manager-authority.d.ts.map +1 -1
  70. package/dist/remote-manager-authority.js +40 -1
  71. package/dist/remote-manager-authority.js.map +1 -1
  72. package/dist/run-journal.d.ts.map +1 -1
  73. package/dist/run-journal.js +1 -6
  74. package/dist/run-journal.js.map +1 -1
  75. package/dist/subjects.d.ts +17 -0
  76. package/dist/subjects.d.ts.map +1 -1
  77. package/dist/subjects.js +29 -0
  78. package/dist/subjects.js.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,13 @@
1
+ /** The goal-result fact's closed shape (SPEC 13.6) with no Node built-in. The root's
2
+ * `parseGoalResultFact` and the browser entry's `verifyGoalResultFact` both run these checks; they
3
+ * differ only in how they hash the payload for the outcome digest. */
4
+ import { EpEnvelopeError } from "./endpoint-error.js";
5
+ import type { GoalRef, GoalState } from "./endpoint-action.js";
6
+ /** All five are TERMINAL and immutable; first-terminal-fact-wins applies uniformly. */
7
+ export declare const GOAL_TERMINAL_STATES: readonly GoalState[];
8
+ export declare function assertClosedKeys(o: Record<string, unknown>, allowed: readonly string[], what: string): void;
9
+ /** Closed validation, IDENTITY-BOUND to the ref; every check but the outcome digest. */
10
+ export declare function assertGoalResultFactShape(raw: unknown, subject: string, ref: GoalRef): Record<string, unknown>;
11
+ /** The refusal for a fact whose payload does not hash to its `outcomeDigest`. */
12
+ export declare function goalOutcomeDigestMismatch(subject: string): EpEnvelopeError;
13
+ //# sourceMappingURL=goal-result-fact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-result-fact.d.ts","sourceRoot":"","sources":["../src/goal-result-fact.ts"],"names":[],"mappings":"AAAA;;uEAEuE;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE/D,uFAAuF;AACvF,eAAO,MAAM,oBAAoB,EAAE,SAAS,SAAS,EAAgF,CAAC;AAEtI,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAI3G;AAED,wFAAwF;AACxF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsB9G;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAE1E"}
@@ -0,0 +1,40 @@
1
+ /** The goal-result fact's closed shape (SPEC 13.6) with no Node built-in. The root's
2
+ * `parseGoalResultFact` and the browser entry's `verifyGoalResultFact` both run these checks; they
3
+ * differ only in how they hash the payload for the outcome digest. */
4
+ import { EpEnvelopeError } from "./endpoint-error.js";
5
+ /** All five are TERMINAL and immutable; first-terminal-fact-wins applies uniformly. */
6
+ export const GOAL_TERMINAL_STATES = Object.freeze(["succeeded", "failed", "cancelled", "expired", "uncertain"]);
7
+ export function assertClosedKeys(o, allowed, what) {
8
+ for (const k of Object.keys(o))
9
+ if (!allowed.includes(k))
10
+ throw new EpEnvelopeError("internal", `${what} carries unknown field ${JSON.stringify(k)}; a closed schema admits no extras - garbled state never authorizes (SPEC 13.4)`);
11
+ }
12
+ /** Closed validation, IDENTITY-BOUND to the ref; every check but the outcome digest. */
13
+ export function assertGoalResultFactShape(raw, subject, ref) {
14
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw))
15
+ throw new EpEnvelopeError("internal", `goal result fact on ${subject} is not an object; garbled state never authorizes (SPEC 13.6)`);
16
+ const o = raw;
17
+ assertClosedKeys(o, ["v", "goalId", "fingerprint", "state", "outcomeDigest", "data", "committer", "ts"], `goal result fact on ${subject}`);
18
+ if (o.committer !== undefined) {
19
+ const cm = o.committer;
20
+ if (cm === null || typeof cm !== "object" || Array.isArray(cm))
21
+ throw new EpEnvelopeError("internal", `goal result fact on ${subject} committer is not an object; garbled state never authorizes (SPEC 13.6)`);
22
+ assertClosedKeys(cm, ["instanceId", "epoch"], `goal result fact on ${subject} committer`);
23
+ if (typeof cm.instanceId !== "string" || cm.instanceId.length === 0
24
+ || typeof cm.epoch !== "number" || !Number.isSafeInteger(cm.epoch) || cm.epoch < 0)
25
+ throw new EpEnvelopeError("internal", `goal result fact on ${subject} carries a malformed committer; garbled state never authorizes (SPEC 13.6)`);
26
+ }
27
+ if (o.v !== 1 || typeof o.goalId !== "string" || typeof o.fingerprint !== "string" || o.fingerprint.length === 0
28
+ || typeof o.state !== "string" || !GOAL_TERMINAL_STATES.includes(o.state)
29
+ || typeof o.outcomeDigest !== "string" || o.outcomeDigest.length === 0
30
+ || typeof o.ts !== "number" || !Number.isSafeInteger(o.ts) || o.ts < 0)
31
+ throw new EpEnvelopeError("internal", `goal result fact on ${subject} is malformed; garbled state never authorizes (SPEC 13.6)`);
32
+ if (o.goalId !== ref.goalId)
33
+ throw new EpEnvelopeError("internal", `goal result fact on ${subject} names goalId ${JSON.stringify(o.goalId)}, not its subject's ${ref.goalId}; a mis-subjected fact never authorizes (SPEC 13.4)`);
34
+ return o;
35
+ }
36
+ /** The refusal for a fact whose payload does not hash to its `outcomeDigest`. */
37
+ export function goalOutcomeDigestMismatch(subject) {
38
+ return new EpEnvelopeError("internal", `goal result fact on ${subject} carries an outcomeDigest that does not match its payload; a digest-inconsistent fact never authorizes (SPEC 13.6)`);
39
+ }
40
+ //# sourceMappingURL=goal-result-fact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-result-fact.js","sourceRoot":"","sources":["../src/goal-result-fact.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -98,6 +98,7 @@ export * from "./run-migration.js";
98
98
  export * from "./run-program.js";
99
99
  export * from "./run-driver-grants.js";
100
100
  export * from "./turn-contract.js";
101
+ export * from "./private-tool-results.js";
101
102
  export * from "./run-host.js";
102
103
  export * from "./issued-authority.js";
103
104
  export * from "./run-admission.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -102,6 +102,7 @@ export * from "./run-migration.js";
102
102
  export * from "./run-program.js";
103
103
  export * from "./run-driver-grants.js";
104
104
  export * from "./turn-contract.js";
105
+ export * from "./private-tool-results.js";
105
106
  export * from "./run-host.js";
106
107
  export * from "./issued-authority.js";
107
108
  export * from "./run-admission.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,8 @@ export declare function isJetStreamMissing(e: unknown, ...codes: number[]): bool
5
5
  /** One rule for every catch site that treats a missing consumer as success, so no site accepts an
6
6
  * error shape another refuses. */
7
7
  export declare function isConsumerNotFound(e: unknown): boolean;
8
+ /** Measured on nats-server 2.15: a create whose config differs from the consumer already under that
9
+ * name is a `JetStreamApiError` with `code: 10148`, and the client gives it no class of its own. A
10
+ * create whose config equals it returns that consumer instead. */
11
+ export declare function isConsumerAlreadyExists(e: unknown): boolean;
8
12
  //# sourceMappingURL=jetstream-missing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jetstream-missing.d.ts","sourceRoot":"","sources":["../src/jetstream-missing.ts"],"names":[],"mappings":"AAEA;;kGAEkG;AAClG,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAE1E;AAED;mCACmC;AACnC,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAEtD"}
1
+ {"version":3,"file":"jetstream-missing.d.ts","sourceRoot":"","sources":["../src/jetstream-missing.ts"],"names":[],"mappings":"AAEA;;kGAEkG;AAClG,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAE1E;AAED;mCACmC;AACnC,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAEtD;AAED;;mEAEmE;AACnE,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAE3D"}
@@ -10,4 +10,10 @@ export function isJetStreamMissing(e, ...codes) {
10
10
  export function isConsumerNotFound(e) {
11
11
  return isJetStreamMissing(e, JetStreamApiCodes.ConsumerNotFound);
12
12
  }
13
+ /** Measured on nats-server 2.15: a create whose config differs from the consumer already under that
14
+ * name is a `JetStreamApiError` with `code: 10148`, and the client gives it no class of its own. A
15
+ * create whose config equals it returns that consumer instead. */
16
+ export function isConsumerAlreadyExists(e) {
17
+ return Number(e?.code) === 10148;
18
+ }
13
19
  //# sourceMappingURL=jetstream-missing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jetstream-missing.js","sourceRoot":"","sources":["../src/jetstream-missing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;kGAEkG;AAClG,MAAM,UAAU,kBAAkB,CAAC,CAAU,EAAE,GAAG,KAAe;IAC/D,OAAO,CAAC,YAAY,iBAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED;mCACmC;AACnC,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,kBAAkB,CAAC,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"jetstream-missing.js","sourceRoot":"","sources":["../src/jetstream-missing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;kGAEkG;AAClG,MAAM,UAAU,kBAAkB,CAAC,CAAU,EAAE,GAAG,KAAe;IAC/D,OAAO,CAAC,YAAY,iBAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED;mCACmC;AACnC,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,kBAAkB,CAAC,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AACnE,CAAC;AAED;;mEAEmE;AACnE,MAAM,UAAU,uBAAuB,CAAC,CAAU;IAChD,OAAO,MAAM,CAAE,CAA2C,EAAE,IAAI,CAAC,KAAK,KAAK,CAAC;AAC9E,CAAC"}
package/dist/kv-scan.d.ts CHANGED
@@ -137,6 +137,21 @@ export declare function walkKvEntries(kv: KV, filter: string): Promise<KvEntry[]
137
137
  * matches, DEL and PURGE markers included. For a key family whose rows are never deleted, so a
138
138
  * marker is corruption the caller must surface. */
139
139
  export declare function walkKvLatest(kv: KV, filter: string): Promise<KvEntry[]>;
140
+ /**
141
+ * The last entry of every key in `kv`, DEL and PURGE markers included, read WITHOUT a consumer.
142
+ *
143
+ * One batched Direct Get (`multi_last` over the whole bucket) answers in a single round trip however
144
+ * many keys there are. It exists for short-lived readers that must leave nothing on the broker when
145
+ * they exit: a watch's or a scan's consumer outlives its reader by the five-minute inactive threshold
146
+ * nats.js gives it whenever the reader's profile holds no CONSUMER.DELETE (#691), and one per process
147
+ * piles up until the broker refuses new consumers on the bucket (#4091).
148
+ *
149
+ * The broker answers at most 1024 keys and refuses a larger bucket with "too many results" rather
150
+ * than truncating, so the error reaches the caller. Each delivered message reports how many are still
151
+ * behind it, so a batch that stops early (its request timed out after a dropped link) throws
152
+ * {@link IncompleteKvScan} instead of returning a short list.
153
+ */
154
+ export declare function lastKvEntries(kv: KV): Promise<KvEntry[]>;
140
155
  /** {@link liveKvEntries}, decoded. `decode` returning `undefined` drops the entry — for callers that
141
156
  * skip garbled records rather than failing the whole read (the prevailing convention in the
142
157
  * registries: one unparseable row must not blind the surface to every other row). */
@@ -1 +1 @@
1
- {"version":3,"file":"kv-scan.d.ts","sourceRoot":"","sources":["../src/kv-scan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,EAAgB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAuC,KAAK,YAAY,EAAwC,MAAM,oBAAoB,CAAC;AAIlI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AAEH;sFACsF;AACtF,qBAAa,gBAAiB,SAAQ,KAAK;IAEvC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAFhB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM;CAO5B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpG;;iGAE6F;IAC7F,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,EAAE,EACN,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,oBAAoB,EAC1D,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,OAAO,EAAE,CAAC,CAqJpB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAE9E;AAED;;oDAEoD;AACpD,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CA+B7E;AAED;;sFAEsF;AACtF,wBAAsB,YAAY,CAAC,CAAC,EAClC,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,GAAG,SAAS,EACrC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,oBAAoB,EAC1D,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,CAAC,EAAE,CAAC,CAOd"}
1
+ {"version":3,"file":"kv-scan.d.ts","sourceRoot":"","sources":["../src/kv-scan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,EAAgB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAuC,KAAK,YAAY,EAAwC,MAAM,oBAAoB,CAAC;AAIlI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AAEH;sFACsF;AACtF,qBAAa,gBAAiB,SAAQ,KAAK;IAEvC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAFhB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM;CAO5B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpG;;iGAE6F;IAC7F,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,EAAE,EACN,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,oBAAoB,EAC1D,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,OAAO,EAAE,CAAC,CAqJpB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAE9E;AAED;;oDAEoD;AACpD,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CA+B7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAgB9D;AAED;;sFAEsF;AACtF,wBAAsB,YAAY,CAAC,CAAC,EAClC,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,GAAG,SAAS,EACrC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,oBAAoB,EAC1D,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,CAAC,EAAE,CAAC,CAOd"}
package/dist/kv-scan.js CHANGED
@@ -331,6 +331,38 @@ export async function walkKvLatest(kv, filter) {
331
331
  }
332
332
  return [...latest.values()];
333
333
  }
334
+ /**
335
+ * The last entry of every key in `kv`, DEL and PURGE markers included, read WITHOUT a consumer.
336
+ *
337
+ * One batched Direct Get (`multi_last` over the whole bucket) answers in a single round trip however
338
+ * many keys there are. It exists for short-lived readers that must leave nothing on the broker when
339
+ * they exit: a watch's or a scan's consumer outlives its reader by the five-minute inactive threshold
340
+ * nats.js gives it whenever the reader's profile holds no CONSUMER.DELETE (#691), and one per process
341
+ * piles up until the broker refuses new consumers on the bucket (#4091).
342
+ *
343
+ * The broker answers at most 1024 keys and refuses a larger bucket with "too many results" rather
344
+ * than truncating, so the error reaches the caller. Each delivered message reports how many are still
345
+ * behind it, so a batch that stops early (its request timed out after a dropped link) throws
346
+ * {@link IncompleteKvScan} instead of returning a short list.
347
+ */
348
+ export async function lastKvEntries(kv) {
349
+ if (!(kv instanceof Bucket))
350
+ throw new Error(`lastKvEntries needs the @nats-io/kv Bucket implementation to address its backing stream (got ${kv?.constructor?.name ?? typeof kv})`);
351
+ const bucket = kv;
352
+ // Not gated on `bucket.direct`: `kvm.open` binds without reading the stream, so that flag holds the
353
+ // caller's open options, not the stream's `allow_direct`. A stream without it has no Direct Get
354
+ // responder and the request fails.
355
+ const iter = await bucket.jsm.direct.getLastMessagesFor(bucket.stream, { multi_last: [`${bucket.prefix}.>`] });
356
+ const out = [];
357
+ let pending = 0;
358
+ for await (const sm of iter) {
359
+ out.push(bucket.smToEntry(sm));
360
+ pending = sm.pending;
361
+ }
362
+ if (pending !== 0)
363
+ throw new IncompleteKvScan(bucket.bucket, out.length, out.length + pending);
364
+ return out;
365
+ }
334
366
  /** {@link liveKvEntries}, decoded. `decode` returning `undefined` drops the entry — for callers that
335
367
  * skip garbled records rather than failing the whole read (the prevailing convention in the
336
368
  * registries: one unparseable row must not blind the surface to every other row). */
@@ -1 +1 @@
1
- {"version":3,"file":"kv-scan.js","sourceRoot":"","sources":["../src/kv-scan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kv-scan.js","sourceRoot":"","sources":["../src/kv-scan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"launch-material.d.ts","sourceRoot":"","sources":["../src/launch-material.ts"],"names":[],"mappings":"AAkDA,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D;;;yEAGyE;AACzE,MAAM,MAAM,cAAc,GAAG;IAC3B,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mGAAmG;IACnG,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC7F,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAWpE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAuB/D;AA6DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBxD"}
1
+ {"version":3,"file":"launch-material.d.ts","sourceRoot":"","sources":["../src/launch-material.ts"],"names":[],"mappings":"AAsDA,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D;;;yEAGyE;AACzE,MAAM,MAAM,cAAc,GAAG;IAC3B,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mGAAmG;IACnG,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC7F,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAWpE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAuB/D;AA6DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBxD"}
@@ -33,8 +33,12 @@
33
33
  * there is no later reader, so that session calls {@link discardLaunchMaterial} at startup and the
34
34
  * file and its private directory cease to exist. Where readers start LATER (the Claude connector's
35
35
  * MCP server and its one-process-per-hook relays, the Hermes launcher's gateway child) the file has
36
- * to outlive startup, so it lives as long as the seat and the OS temp reaper is what removes it. A
37
- * launch that dies before its session starts leaves its file to that same reaper.
36
+ * to outlive startup. For every connector the launch also lists the private directory on
37
+ * `LaunchSpec.artifacts` (see `materialEnv` in the connector runtime), so the launcher that spawns
38
+ * the spec removes it once the child has exited, as it does a persona carrier (core
39
+ * launch-artifacts). The second file the Hermes launcher writes for its gateway child is not on that
40
+ * list. A file whose launcher and watcher were both killed, or whose spawn failed before any child
41
+ * started, is left to the OS temp reaper.
38
42
  */
39
43
  import { mkdtempSync, readFileSync, realpathSync, rmSync, rmdirSync, statSync } from "node:fs";
40
44
  import { tmpdir } from "node:os";
@@ -1 +1 @@
1
- {"version":3,"file":"launch-material.js","sourceRoot":"","sources":["../src/launch-material.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launch-material.js","sourceRoot":"","sources":["../src/launch-material.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;;iCAGiC;AACjC,MAAM,UAAU,GAAG,eAAe,CAAC;AACnC,MAAM,aAAa,GAAG,eAAe,CAAC;AAEtC,sFAAsF;AACtF,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAqB3D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAwB;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACrE,IAAI,CAAC,OAAO;QACV,MAAM,IAAI,KAAK,CACb,qIAAqI,CACtI,CAAC;IACJ,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IACpD,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,yEAAyE;IACpG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACtC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;YACzC,IAAI,IAAI,GAAG,KAAK;gBACd,MAAM,IAAI,KAAK,CACb,sCAAsC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,mFAAmF,CAC1I,CAAC;QACN,CAAC;QACD,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1G,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,oBAAoB,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,6BAA6B,CAAC,CAAC;IACzE,OAAO,QAAQ,CAAC,MAAiC,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAS,QAAQ,CAAC,GAA4B,EAAE,IAAY;IAC1D,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,CAAC,GAAmD,EAAQ,EAAE;QACxE,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO;QAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,UAAU,GAAG,iCAAiC,CAAC,CAAC;QAC1F,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,GAAG,CAAC,SAAS,CAAC,CAAC;IACf,GAAG,CAAC,OAAO,CAAC,CAAC;IACb,GAAG,CAAC,OAAO,CAAC,CAAC;IACb,GAAG,CAAC,cAAc,CAAC,CAAC;IACpB,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,cAAc,KAAK,IAAI;YAC7B,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,8CAA8C,CAAC,CAAC;QAC1F,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC;IACjC,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,uCAAuC,CAAC,CAAC;QACnF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,CAA4B,CAAC;QACpF,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YACxC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;gBACpC,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,mBAAmB,CAAC,iCAAiC,CAAC,CAAC;QACnG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC;YAC5G,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,oEAAoE,CAAC,CAAC;QAChH,QAAQ,CAAC,QAAQ,GAAG;YAClB,KAAK,EAAE,KAAe;YACtB,KAAK,EAAE,KAAe;YACtB,iBAAiB,EAAE,iBAA2B;YAC9C,SAAS,EAAE,SAAqB;SACjC,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,oBAAoB,IAAI,qLAAqL,CAC9M,CAAC;IACJ,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;IAC5E,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IACtF,IAAI,CAAC;QACH,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;YAAE,OAAO;QAClE,+EAA+E;QAC/E,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,mFAAmF;IACrF,CAAC;AACH,CAAC"}
package/dist/lease.d.ts CHANGED
@@ -95,4 +95,54 @@ export declare function waitForDeliveryLease(opts: {
95
95
  holder: string | undefined;
96
96
  timeoutMs?: number;
97
97
  }): Promise<boolean>;
98
+ /** How long past a stale row's expiry {@link awaitLeaseExpiry} keeps looking before it gives up. The
99
+ * broker removes an expired message on its own timer, not at the exact millisecond. */
100
+ export declare const LEASE_EXPIRY_GRACE_MS = 5000;
101
+ /** How a wait for a dead holder's lease row to expire ended. `expired`: the row is gone and the key
102
+ * can be created again. `rewritten`: the row changed revision while we waited, so some live process
103
+ * wrote it and holds the lease. `timeout`: the row outlived its TTL plus the grace, unchanged.
104
+ * `aborted`: the caller stopped the wait. */
105
+ export type LeaseExpiryWait = "expired" | "rewritten" | "timeout" | "aborted";
106
+ /** Wait out a lease row whose holder the caller has shown to be dead, until the bucket TTL removes
107
+ * it (#4092). This never writes the key. A takeover by revision-checked update would act on the
108
+ * caller's proof of death, and that proof is only as good as its view of one host. Waiting needs
109
+ * no proof to be safe: a live holder renews its row before the TTL runs out, the revision moves,
110
+ * and the wait returns `rewritten` for the caller to refuse. The proof only decides whether a
111
+ * conflict is worth waiting on at all.
112
+ *
113
+ * `read` returns the row's current revision and broker write time (epoch ms), or `undefined` when
114
+ * no live row is there; a read that fails throws through. The wait is bounded from now as well as
115
+ * from the row's write time, so a skewed clock cannot stretch it past one TTL plus the grace. */
116
+ export declare function awaitLeaseExpiry(opts: {
117
+ read: () => Promise<{
118
+ revision: number;
119
+ created: number;
120
+ } | undefined>;
121
+ revision: number;
122
+ created: number;
123
+ ttlMs: number;
124
+ aborted?: () => boolean;
125
+ pollMs?: number;
126
+ }): Promise<LeaseExpiryWait>;
127
+ /** The time left before a row written at `created` expires under `ttlMs`, for an operator line. */
128
+ export declare function leaseRemainingMs(created: number, ttlMs: number, now?: number): number;
129
+ /** Wait out the shard-0 delivery lease when it is held by `deadHolder`, a holder the caller has
130
+ * shown to be dead (#4092). The CLI's `ensureDelivery` calls this before it starts a replacement
131
+ * daemon: a daemon SIGKILLed, or one that exited because its broker went away, cannot release its
132
+ * row, and a replacement started inside the remaining TTL loses the create and refuses to bind.
133
+ *
134
+ * Returns `free` when no row is held, `other-holder` when a row names someone else (the caller
135
+ * proved nothing about them, so their conflict is left to the daemon's own refusal), and otherwise
136
+ * how {@link awaitLeaseExpiry} ended. `onWait` hears the remaining TTL once, before the wait.
137
+ * Connects with the scoped delivery creds the caller minted. */
138
+ export declare function awaitDeadDeliveryLease(opts: {
139
+ servers: string;
140
+ space: string;
141
+ creds: string;
142
+ /** The broker's transport decision: true REQUIRES TLS on this credentialed connection. */
143
+ tls: boolean;
144
+ deadHolder: string;
145
+ ttlMs: number;
146
+ onWait: (remainingMs: number) => void;
147
+ }): Promise<"free" | "other-holder" | LeaseExpiryWait>;
98
148
  //# sourceMappingURL=lease.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../src/lease.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAO,KAAK,EAAE,EAAE,MAAM,aAAa,CAAC;AAK3C;;;;;;;;mGAQmG;AACnG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;qEAIqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;sGAUkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;2FAEuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;yDAKyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B;;;;;8BAK0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf;0GACsG;IACtG,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;6GAC6G;AAC7G,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,OAAO,yBAAyB,EAAE,cAAc,EACpD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,EAAE,CAAC,CAEb;AAED;;;;;;;;;;;;gGAYgG;AAChG,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkCnB"}
1
+ {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../src/lease.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAO,KAAK,EAAE,EAAE,MAAM,aAAa,CAAC;AAM3C;;;;;;;;mGAQmG;AACnG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;qEAIqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;sGAUkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;2FAEuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;yDAKyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B;;;;;8BAK0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf;0GACsG;IACtG,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;6GAC6G;AAC7G,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,OAAO,yBAAyB,EAAE,cAAc,EACpD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,EAAE,CAAC,CAEb;AAED;;;;;;;;;;;;gGAYgG;AAChG,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkCnB;AAED;wFACwF;AACxF,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAE3C;;;8CAG8C;AAC9C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9E;;;;;;;;;kGASkG;AAClG,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,MAAM,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,eAAe,CAAC,CAU3B;AAED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAEjG;AAED;;;;;;;;iEAQiE;AACjE,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,GAAG,OAAO,CAAC,MAAM,GAAG,cAAc,GAAG,eAAe,CAAC,CAyBrD"}
package/dist/lease.js CHANGED
@@ -15,6 +15,7 @@ import { Kvm } from "@nats-io/kv";
15
15
  import { connect, credsAuthenticator } from "@nats-io/transport-node";
16
16
  import { deliveryBucket, leaseKey, principalKey, DEV_OWNER } from "./subjects.js";
17
17
  import { idFromCreds } from "./identity.js";
18
+ import { standaloneConnectOpts } from "./streams.js";
18
19
  /** The `holder` string a delivery daemon holding THIS credential will write into its lease row.
19
20
  *
20
21
  * EXISTS BECAUSE THE OBVIOUS ANSWER IS WRONG, and was wrong at three separate call sites. A caller
@@ -85,4 +86,74 @@ export async function waitForDeliveryLease(opts) {
85
86
  }
86
87
  return false;
87
88
  }
89
+ /** How long past a stale row's expiry {@link awaitLeaseExpiry} keeps looking before it gives up. The
90
+ * broker removes an expired message on its own timer, not at the exact millisecond. */
91
+ export const LEASE_EXPIRY_GRACE_MS = 5_000;
92
+ /** Wait out a lease row whose holder the caller has shown to be dead, until the bucket TTL removes
93
+ * it (#4092). This never writes the key. A takeover by revision-checked update would act on the
94
+ * caller's proof of death, and that proof is only as good as its view of one host. Waiting needs
95
+ * no proof to be safe: a live holder renews its row before the TTL runs out, the revision moves,
96
+ * and the wait returns `rewritten` for the caller to refuse. The proof only decides whether a
97
+ * conflict is worth waiting on at all.
98
+ *
99
+ * `read` returns the row's current revision and broker write time (epoch ms), or `undefined` when
100
+ * no live row is there; a read that fails throws through. The wait is bounded from now as well as
101
+ * from the row's write time, so a skewed clock cannot stretch it past one TTL plus the grace. */
102
+ export async function awaitLeaseExpiry(opts) {
103
+ const deadline = Math.min(opts.created, Date.now()) + opts.ttlMs + LEASE_EXPIRY_GRACE_MS;
104
+ for (;;) {
105
+ if (opts.aborted?.())
106
+ return "aborted";
107
+ const row = await opts.read();
108
+ if (row === undefined)
109
+ return "expired";
110
+ if (row.revision !== opts.revision)
111
+ return "rewritten";
112
+ if (Date.now() >= deadline)
113
+ return "timeout";
114
+ await new Promise((r) => setTimeout(r, opts.pollMs ?? 250));
115
+ }
116
+ }
117
+ /** The time left before a row written at `created` expires under `ttlMs`, for an operator line. */
118
+ export function leaseRemainingMs(created, ttlMs, now = Date.now()) {
119
+ return Math.max(0, created + ttlMs - now);
120
+ }
121
+ /** Wait out the shard-0 delivery lease when it is held by `deadHolder`, a holder the caller has
122
+ * shown to be dead (#4092). The CLI's `ensureDelivery` calls this before it starts a replacement
123
+ * daemon: a daemon SIGKILLed, or one that exited because its broker went away, cannot release its
124
+ * row, and a replacement started inside the remaining TTL loses the create and refuses to bind.
125
+ *
126
+ * Returns `free` when no row is held, `other-holder` when a row names someone else (the caller
127
+ * proved nothing about them, so their conflict is left to the daemon's own refusal), and otherwise
128
+ * how {@link awaitLeaseExpiry} ended. `onWait` hears the remaining TTL once, before the wait.
129
+ * Connects with the scoped delivery creds the caller minted. */
130
+ export async function awaitDeadDeliveryLease(opts) {
131
+ const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts({ creds: opts.creds, tls: opts.tls }), maxReconnectAttempts: 5 });
132
+ try {
133
+ const kv = await openDeliveryRegistry(nc, opts.space);
134
+ const read = async () => {
135
+ const e = await kv.get(leaseKey(0));
136
+ return !e || e.operation === "DEL" || e.operation === "PURGE" ? undefined : e;
137
+ };
138
+ const row = await read();
139
+ if (row === undefined)
140
+ return "free";
141
+ if (row.json().holder !== opts.deadHolder)
142
+ return "other-holder";
143
+ const created = row.created.getTime();
144
+ opts.onWait(leaseRemainingMs(created, opts.ttlMs));
145
+ return await awaitLeaseExpiry({
146
+ read: async () => {
147
+ const e = await read();
148
+ return e && { revision: e.revision, created: e.created.getTime() };
149
+ },
150
+ revision: row.revision,
151
+ created,
152
+ ttlMs: opts.ttlMs,
153
+ });
154
+ }
155
+ finally {
156
+ await nc.drain().catch(() => { });
157
+ }
158
+ }
88
159
  //# sourceMappingURL=lease.js.map
package/dist/lease.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lease.js","sourceRoot":"","sources":["../src/lease.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,GAAG,EAAW,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;;;;mGAQmG;AACnG,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AACzD,CAAC;AAqDD;6GAC6G;AAC7G,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAoD,EACpD,KAAa;IAEb,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;gGAYgG;AAChG,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAO1C;IACC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;IACvD,IAAI,EAAmD,CAAC;IACxD,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,OAAO,CAAC;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,kBAAkB,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvE,WAAW,EAAE,UAAU,IAAI,CAAC,EAAE,EAAE;YAChC,oBAAoB,EAAE,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;gBAC1D,yFAAyF;gBACzF,uFAAuF;gBACvF,+CAA+C;gBAC/C,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,EAAqB,CAAC;oBACzC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;wBAAE,OAAO,IAAI,CAAC;gBACrG,CAAC;gBAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"lease.js","sourceRoot":"","sources":["../src/lease.ts"],"names":[],"mappings":"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"}