@superbee/core 0.2.0-pre.15 → 0.2.0-pre.17

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 (228) hide show
  1. package/README.md +316 -0
  2. package/dist/backend.d.ts +3 -0
  3. package/dist/backend.d.ts.map +1 -1
  4. package/dist/backend.js +7 -0
  5. package/dist/backend.js.map +1 -1
  6. package/dist/blob-contract.d.ts +80 -0
  7. package/dist/blob-contract.d.ts.map +1 -0
  8. package/dist/blob-contract.js +131 -0
  9. package/dist/blob-contract.js.map +1 -0
  10. package/dist/blob-journal.d.ts +117 -0
  11. package/dist/blob-journal.d.ts.map +1 -0
  12. package/dist/blob-journal.js +168 -0
  13. package/dist/blob-journal.js.map +1 -0
  14. package/dist/bundle-health/index.d.ts +14 -0
  15. package/dist/bundle-health/index.d.ts.map +1 -0
  16. package/dist/bundle-health/index.js +12 -0
  17. package/dist/bundle-health/index.js.map +1 -0
  18. package/dist/bundle-health/kind-findings.d.ts +44 -0
  19. package/dist/bundle-health/kind-findings.d.ts.map +1 -0
  20. package/dist/bundle-health/kind-findings.js +68 -0
  21. package/dist/bundle-health/kind-findings.js.map +1 -0
  22. package/dist/bundle-health/legacy-page.d.ts +39 -0
  23. package/dist/bundle-health/legacy-page.d.ts.map +1 -0
  24. package/dist/bundle-health/legacy-page.js +50 -0
  25. package/dist/bundle-health/legacy-page.js.map +1 -0
  26. package/dist/bundle-health/report.d.ts +202 -0
  27. package/dist/bundle-health/report.d.ts.map +1 -0
  28. package/dist/bundle-health/report.js +438 -0
  29. package/dist/bundle-health/report.js.map +1 -0
  30. package/dist/engine.d.ts +1 -1
  31. package/dist/engine.d.ts.map +1 -1
  32. package/dist/engine.js.map +1 -1
  33. package/dist/file-journaled-backend-internal.d.ts +2 -0
  34. package/dist/file-journaled-backend-internal.d.ts.map +1 -1
  35. package/dist/file-journaled-backend-internal.js +2 -0
  36. package/dist/file-journaled-backend-internal.js.map +1 -1
  37. package/dist/file-journaled-backend.d.ts +14 -2
  38. package/dist/file-journaled-backend.d.ts.map +1 -1
  39. package/dist/file-journaled-backend.js +245 -37
  40. package/dist/file-journaled-backend.js.map +1 -1
  41. package/dist/hosted-client/binding.d.ts +7 -0
  42. package/dist/hosted-client/binding.d.ts.map +1 -0
  43. package/dist/hosted-client/binding.js +10 -0
  44. package/dist/hosted-client/binding.js.map +1 -0
  45. package/dist/hosted-client/blob-delivery.d.ts +61 -0
  46. package/dist/hosted-client/blob-delivery.d.ts.map +1 -0
  47. package/dist/hosted-client/blob-delivery.js +147 -0
  48. package/dist/hosted-client/blob-delivery.js.map +1 -0
  49. package/dist/hosted-client/bundle-listing.d.ts +46 -0
  50. package/dist/hosted-client/bundle-listing.d.ts.map +1 -0
  51. package/dist/hosted-client/bundle-listing.js +36 -0
  52. package/dist/hosted-client/bundle-listing.js.map +1 -0
  53. package/dist/hosted-client/client.d.ts +155 -0
  54. package/dist/hosted-client/client.d.ts.map +1 -0
  55. package/dist/hosted-client/client.js +278 -0
  56. package/dist/hosted-client/client.js.map +1 -0
  57. package/dist/hosted-client/errors.d.ts +16 -0
  58. package/dist/hosted-client/errors.d.ts.map +1 -0
  59. package/dist/hosted-client/errors.js +22 -0
  60. package/dist/hosted-client/errors.js.map +1 -0
  61. package/dist/hosted-client/index.d.ts +23 -0
  62. package/dist/hosted-client/index.d.ts.map +1 -0
  63. package/dist/hosted-client/index.js +25 -0
  64. package/dist/hosted-client/index.js.map +1 -0
  65. package/dist/hosted-client/node.d.ts +70 -0
  66. package/dist/hosted-client/node.d.ts.map +1 -0
  67. package/dist/hosted-client/node.js +214 -0
  68. package/dist/hosted-client/node.js.map +1 -0
  69. package/dist/hosted-client/reference.d.ts +12 -0
  70. package/dist/hosted-client/reference.d.ts.map +1 -0
  71. package/dist/hosted-client/reference.js +29 -0
  72. package/dist/hosted-client/reference.js.map +1 -0
  73. package/dist/hosted-client/write.d.ts +200 -0
  74. package/dist/hosted-client/write.d.ts.map +1 -0
  75. package/dist/hosted-client/write.js +401 -0
  76. package/dist/hosted-client/write.js.map +1 -0
  77. package/dist/hosted-transport/answer-rows.d.ts +29 -2
  78. package/dist/hosted-transport/answer-rows.d.ts.map +1 -1
  79. package/dist/hosted-transport/answer-rows.js +60 -2
  80. package/dist/hosted-transport/answer-rows.js.map +1 -1
  81. package/dist/hosted-transport/blob-reads.d.ts +35 -0
  82. package/dist/hosted-transport/blob-reads.d.ts.map +1 -0
  83. package/dist/hosted-transport/blob-reads.js +179 -0
  84. package/dist/hosted-transport/blob-reads.js.map +1 -0
  85. package/dist/hosted-transport/blob-write.d.ts +34 -0
  86. package/dist/hosted-transport/blob-write.d.ts.map +1 -0
  87. package/dist/hosted-transport/blob-write.js +115 -0
  88. package/dist/hosted-transport/blob-write.js.map +1 -0
  89. package/dist/hosted-transport/carrier.d.ts +8 -9
  90. package/dist/hosted-transport/carrier.d.ts.map +1 -1
  91. package/dist/hosted-transport/carrier.js +40 -41
  92. package/dist/hosted-transport/carrier.js.map +1 -1
  93. package/dist/hosted-transport/index.d.ts +4 -4
  94. package/dist/hosted-transport/index.d.ts.map +1 -1
  95. package/dist/hosted-transport/index.js +4 -4
  96. package/dist/hosted-transport/index.js.map +1 -1
  97. package/dist/hosted-transport/read-adapter.d.ts +6 -0
  98. package/dist/hosted-transport/read-adapter.d.ts.map +1 -1
  99. package/dist/hosted-transport/read-adapter.js +11 -0
  100. package/dist/hosted-transport/read-adapter.js.map +1 -1
  101. package/dist/hosted-transport/whole-document-transport.d.ts +1 -1
  102. package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -1
  103. package/dist/hosted-transport/whole-document-transport.js +20 -12
  104. package/dist/hosted-transport/whole-document-transport.js.map +1 -1
  105. package/dist/index.d.ts +5 -2
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +5 -2
  108. package/dist/index.js.map +1 -1
  109. package/dist/journaled-backend.d.ts +10 -2
  110. package/dist/journaled-backend.d.ts.map +1 -1
  111. package/dist/journaled-backend.js +3 -3
  112. package/dist/journaled-backend.js.map +1 -1
  113. package/dist/kinds-load.js +4 -4
  114. package/dist/kinds-load.js.map +1 -1
  115. package/dist/kinds.d.ts.map +1 -1
  116. package/dist/kinds.js +3 -2
  117. package/dist/kinds.js.map +1 -1
  118. package/dist/link-types.d.ts +26 -0
  119. package/dist/link-types.d.ts.map +1 -0
  120. package/dist/link-types.js +57 -0
  121. package/dist/link-types.js.map +1 -0
  122. package/dist/paths.d.ts +16 -0
  123. package/dist/paths.d.ts.map +1 -1
  124. package/dist/paths.js +25 -0
  125. package/dist/paths.js.map +1 -1
  126. package/dist/platform.d.ts +4 -0
  127. package/dist/platform.d.ts.map +1 -1
  128. package/dist/platform.js +16 -0
  129. package/dist/platform.js.map +1 -1
  130. package/dist/query-filter.d.ts +9 -0
  131. package/dist/query-filter.d.ts.map +1 -1
  132. package/dist/query-filter.js +19 -3
  133. package/dist/query-filter.js.map +1 -1
  134. package/dist/recipe-lifecycle/errors.d.ts +77 -0
  135. package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
  136. package/dist/recipe-lifecycle/errors.js +96 -0
  137. package/dist/recipe-lifecycle/errors.js.map +1 -0
  138. package/dist/recipe-lifecycle/evolution.d.ts +71 -0
  139. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
  140. package/dist/recipe-lifecycle/evolution.js +659 -0
  141. package/dist/recipe-lifecycle/evolution.js.map +1 -0
  142. package/dist/recipe-lifecycle/index.d.ts +23 -0
  143. package/dist/recipe-lifecycle/index.d.ts.map +1 -0
  144. package/dist/recipe-lifecycle/index.js +19 -0
  145. package/dist/recipe-lifecycle/index.js.map +1 -0
  146. package/dist/recipe-lifecycle/install.d.ts +111 -0
  147. package/dist/recipe-lifecycle/install.d.ts.map +1 -0
  148. package/dist/recipe-lifecycle/install.js +412 -0
  149. package/dist/recipe-lifecycle/install.js.map +1 -0
  150. package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
  151. package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
  152. package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
  153. package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
  154. package/dist/recipe-lifecycle/stamp.d.ts +98 -0
  155. package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
  156. package/dist/recipe-lifecycle/stamp.js +260 -0
  157. package/dist/recipe-lifecycle/stamp.js.map +1 -0
  158. package/dist/recipes.d.ts +5 -0
  159. package/dist/recipes.d.ts.map +1 -1
  160. package/dist/recipes.js +5 -0
  161. package/dist/recipes.js.map +1 -1
  162. package/dist/record-overlay/apply.d.ts +43 -0
  163. package/dist/record-overlay/apply.d.ts.map +1 -0
  164. package/dist/record-overlay/apply.js +490 -0
  165. package/dist/record-overlay/apply.js.map +1 -0
  166. package/dist/record-overlay/canonical.d.ts +14 -0
  167. package/dist/record-overlay/canonical.d.ts.map +1 -0
  168. package/dist/record-overlay/canonical.js +31 -0
  169. package/dist/record-overlay/canonical.js.map +1 -0
  170. package/dist/record-overlay/digest.d.ts +4 -0
  171. package/dist/record-overlay/digest.d.ts.map +1 -0
  172. package/dist/record-overlay/digest.js +11 -0
  173. package/dist/record-overlay/digest.js.map +1 -0
  174. package/dist/record-overlay/errors.d.ts +40 -0
  175. package/dist/record-overlay/errors.d.ts.map +1 -0
  176. package/dist/record-overlay/errors.js +51 -0
  177. package/dist/record-overlay/errors.js.map +1 -0
  178. package/dist/record-overlay/findings.d.ts +5 -0
  179. package/dist/record-overlay/findings.d.ts.map +1 -0
  180. package/dist/record-overlay/findings.js +83 -0
  181. package/dist/record-overlay/findings.js.map +1 -0
  182. package/dist/record-overlay/index.d.ts +23 -0
  183. package/dist/record-overlay/index.d.ts.map +1 -0
  184. package/dist/record-overlay/index.js +21 -0
  185. package/dist/record-overlay/index.js.map +1 -0
  186. package/dist/record-overlay/plan.d.ts +12 -0
  187. package/dist/record-overlay/plan.d.ts.map +1 -0
  188. package/dist/record-overlay/plan.js +284 -0
  189. package/dist/record-overlay/plan.js.map +1 -0
  190. package/dist/record-overlay/policy.d.ts +60 -0
  191. package/dist/record-overlay/policy.d.ts.map +1 -0
  192. package/dist/record-overlay/policy.js +209 -0
  193. package/dist/record-overlay/policy.js.map +1 -0
  194. package/dist/record-overlay/redact.d.ts +3 -0
  195. package/dist/record-overlay/redact.d.ts.map +1 -0
  196. package/dist/record-overlay/redact.js +27 -0
  197. package/dist/record-overlay/redact.js.map +1 -0
  198. package/dist/record-overlay/signal-kind.d.ts +30 -0
  199. package/dist/record-overlay/signal-kind.d.ts.map +1 -0
  200. package/dist/record-overlay/signal-kind.js +38 -0
  201. package/dist/record-overlay/signal-kind.js.map +1 -0
  202. package/dist/record-overlay/signal-text.d.ts +45 -0
  203. package/dist/record-overlay/signal-text.d.ts.map +1 -0
  204. package/dist/record-overlay/signal-text.js +116 -0
  205. package/dist/record-overlay/signal-text.js.map +1 -0
  206. package/dist/record-overlay/source-index.d.ts +19 -0
  207. package/dist/record-overlay/source-index.d.ts.map +1 -0
  208. package/dist/record-overlay/source-index.js +102 -0
  209. package/dist/record-overlay/source-index.js.map +1 -0
  210. package/dist/record-overlay/types.d.ts +286 -0
  211. package/dist/record-overlay/types.d.ts.map +1 -0
  212. package/dist/record-overlay/types.js +2 -0
  213. package/dist/record-overlay/types.js.map +1 -0
  214. package/dist/remote-operations.js +5 -2
  215. package/dist/remote-operations.js.map +1 -1
  216. package/dist/storage.d.ts +5 -1
  217. package/dist/storage.d.ts.map +1 -1
  218. package/dist/storage.js +4 -1
  219. package/dist/storage.js.map +1 -1
  220. package/dist/uncertain-write.d.ts +107 -6
  221. package/dist/uncertain-write.d.ts.map +1 -1
  222. package/dist/uncertain-write.js +67 -32
  223. package/dist/uncertain-write.js.map +1 -1
  224. package/dist/write-identity.d.ts +5 -0
  225. package/dist/write-identity.d.ts.map +1 -0
  226. package/dist/write-identity.js +9 -0
  227. package/dist/write-identity.js.map +1 -0
  228. package/package.json +21 -1
@@ -73,21 +73,98 @@ export type Outcome = {
73
73
  kind: "conflict";
74
74
  actual: Version | null;
75
75
  tombstone?: Version;
76
- } | {
76
+ }
77
+ /**
78
+ * `executed` is present only on a refusal that is not the identity's recorded answer: `false`
79
+ * when this attempt was refused before it could execute (nothing was sent, or the authority
80
+ * refused it before dispatch), `"unknown"` when the authority's answer does not say. Such a
81
+ * refusal is evidence about this attempt only, never about an earlier delivery of the identity.
82
+ */
83
+ | {
77
84
  kind: "refused";
78
85
  code: string;
79
86
  message: string;
80
- } | {
87
+ executed?: false | "unknown";
88
+ }
89
+ /**
90
+ * `refusal` names the attempt-only refusal that ended the call, when one did: a resend refused
91
+ * before execution while an earlier delivery may still be held. The identity stays unknown;
92
+ * the refusal says why it could not be settled now (for example, access withdrawn).
93
+ */
94
+ | {
81
95
  kind: "unknown";
96
+ refusal?: {
97
+ code: string;
98
+ message: string;
99
+ };
82
100
  };
101
+ /**
102
+ * A lookup's answer that the authority holds the identity without a result yet: a delivery of
103
+ * it was admitted and may still commit. Distinct from `null`, which says it was never admitted.
104
+ */
105
+ export interface LookupPending {
106
+ kind: "pending";
107
+ }
108
+ /** The one {@link LookupPending} answer. */
109
+ export declare const LOOKUP_PENDING: LookupPending;
83
110
  /** A transport to a shared authority that records outcomes by request identity. */
84
111
  export interface OperationTransport {
85
112
  /** Deliver the intent once; a repeated `requestId` must return the recorded outcome unchanged. */
86
113
  submit(intent: OperationIntent, options?: {
87
114
  signal?: AbortSignal;
88
115
  }): Promise<Outcome>;
89
- /** The recorded outcome for `requestId`, or `null` when the authority never recorded it. */
90
- lookup(requestId: string): Promise<Outcome | null>;
116
+ /**
117
+ * The recorded outcome for `requestId`; {@link LookupPending} when the authority holds it
118
+ * unanswered; or `null` when the authority never recorded it. A transport that cannot tell
119
+ * pending from absent answers `null` for both.
120
+ */
121
+ lookup(requestId: string): Promise<Outcome | LookupPending | null>;
122
+ }
123
+ /** Minimal classification for recorded-only delivery. A commit need not invent a new-head
124
+ * version (for example, an identified blob delete can carry its complete absence receipt). */
125
+ export interface NonExecutedAttempt {
126
+ kind: "not-executed";
127
+ attempts: number;
128
+ details: unknown;
129
+ }
130
+ export type RecordedWriteOutcome = NonExecutedAttempt | {
131
+ kind: "committed";
132
+ } | {
133
+ kind: "conflict";
134
+ } | {
135
+ kind: "refused";
136
+ code: string;
137
+ message: string;
138
+ } | {
139
+ kind: "unknown";
140
+ };
141
+ export type RecordedWriteIntent = Pick<OperationIntent, "requestId" | "kind" | "target" | "createdAt" | "attempts" | "state"> & {
142
+ /** Opt-in qualification; old no-prefix explicit callers retain their contract. */
143
+ notAppliedThrough?: number;
144
+ };
145
+ export interface RecordedWriteTransport<I extends RecordedWriteIntent, O extends RecordedWriteOutcome> {
146
+ submit(intent: I, options?: {
147
+ signal?: AbortSignal;
148
+ }): Promise<O>;
149
+ /** Null/absence is inconclusive and NEVER grants this path permission to submit. */
150
+ lookup(requestId: string): Promise<O | null>;
151
+ }
152
+ /** Explicit starts are for callers that own persistence, not proof minted by this primitive.
153
+ * submit-claimed requires a freshly successful durable in_flight CAS, held under the checkout
154
+ * lock, immediately before this call; its counted attempt is sent at most once. After reopening,
155
+ * or when that freshness cannot be established, use lookup. Replaying a stored claim is NOT a
156
+ * fresh CAS. Nor does a new CAS prove an earlier unclear delivery cannot still commit: those
157
+ * identities must use lookup. This function creates no ticket or journal persistence itself. */
158
+ export type RecordedWriteOptions = Omit<UncertainWriteOptions, "settlement" | "maxSubmissions" | "earlierDeliveryUnclear"> & {
159
+ settlement: "recorded-only";
160
+ start: "submit-claimed" | "lookup";
161
+ };
162
+ export interface RecordedWriteResult<I extends RecordedWriteIntent, O extends RecordedWriteOutcome> {
163
+ intent: Omit<I, "attempts" | "state"> & Pick<RecordedWriteIntent, "attempts" | "state">;
164
+ outcome: O | {
165
+ kind: "unknown";
166
+ };
167
+ lookups: number;
91
168
  }
92
169
  /** Wait `ms`, resolving early and harmlessly when `signal` aborts. Injected by tests. */
93
170
  export type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;
@@ -104,6 +181,20 @@ export interface UncertainWriteOptions {
104
181
  maxSubmissions?: number;
105
182
  /** Timer; defaults to a `setTimeout` sleep. */
106
183
  sleep?: Sleep;
184
+ /**
185
+ * Ends the call early once aborted: no further lookup or resubmission starts, the wait between
186
+ * lookups is cut short, and the outcome is `unknown` unless one was already known. Absent, the
187
+ * call runs every lookup and submission it is permitted.
188
+ */
189
+ signal?: AbortSignal;
190
+ /**
191
+ * The intent's earlier submission, made by an earlier call, ended without a definitive answer
192
+ * (its outcome was unknown, or the call stopped while it was in flight). A resubmission refused
193
+ * before execution is then `unknown`, as one after an unclear submission in this call is.
194
+ * Default false: an earlier submission answered with such a refusal (a paused intent requeued)
195
+ * may be resent and refused again definitively.
196
+ */
197
+ earlierDeliveryUnclear?: boolean;
107
198
  }
108
199
  export interface UncertainWriteResult {
109
200
  /** The intent with `attempts` and `state` advanced to reflect this call. */
@@ -119,9 +210,9 @@ export interface UncertainWriteResult {
119
210
  */
120
211
  export declare const AUTHORIZATION_REFUSAL_CODES: ReadonlySet<string>;
121
212
  /** True when a refusal reports lost permission, which pauses further shared operations. */
122
- export declare function isAuthorizationRefusal(outcome: Outcome): boolean;
213
+ export declare function isAuthorizationRefusal(outcome: Outcome | RecordedWriteOutcome): boolean;
123
214
  /** The journal state an outcome settles an intent into. */
124
- export declare function stateForOutcome(outcome: Outcome): OperationState;
215
+ export declare function stateForOutcome(outcome: Outcome | RecordedWriteOutcome): OperationState;
125
216
  /** The longest request identity the wire accepts as `Idempotency-Key`. */
126
217
  export declare const REQUEST_ID_MAX_LENGTH = 128;
127
218
  /**
@@ -171,8 +262,18 @@ export declare function settleAgainstIntent(outcome: Outcome, intent: OperationI
171
262
  * transport never answers `null` for an absent record once the intent is older than the host's
172
263
  * stated retention window, less a skew margin, so it does not resubmit there.
173
264
  *
265
+ * A refusal before execution ({@link isAuthorizationRefusal}) of a resubmission that follows an
266
+ * unclear submission (in this call, or an earlier one per `earlierDeliveryUnclear`) is `unknown`,
267
+ * carrying that refusal, not settled: a `null` lookup cannot prove an earlier delivery will not
268
+ * still arrive, and the delivery can still commit. After a {@link LookupPending} answer, which
269
+ * says a delivery is held, the same holds for every refusal the transport marks `executed`
270
+ * (a gateway's `400` included). A pending lookup still permits the resubmission.
271
+ *
174
272
  * By default every outcome passes through {@link settleAgainstIntent}, so a conflict naming the
175
273
  * intent's own version is committed. `recorded-only` preserves the recorded outcome instead.
176
274
  */
275
+ export declare function performUncertainWrite<I extends RecordedWriteIntent, O extends RecordedWriteOutcome>(transport: RecordedWriteTransport<I, O>, intent: I, options: RecordedWriteOptions): Promise<RecordedWriteResult<I, O>>;
276
+ /** Compatibility path: a complete document intent, with the existing counters/resubmission
277
+ * defaults. Body delivery's recorded-only call without start remains on this path. */
177
278
  export declare function performUncertainWrite(transport: OperationTransport, intent: OperationIntent, options?: UncertainWriteOptions): Promise<UncertainWriteResult>;
178
279
  //# sourceMappingURL=uncertain-write.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uncertain-write.d.ts","sourceRoot":"","sources":["../src/uncertain-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uncertain-write.d.ts","sourceRoot":"","sources":["../src/uncertain-write.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@
15
15
  * `sleep` used for the submission deadline and the delay between lookups; there is no
16
16
  * injectable clock, and a transport's own latency is real.
17
17
  */
18
+ /** The one {@link LookupPending} answer. */
19
+ export const LOOKUP_PENDING = Object.freeze({ kind: "pending" });
18
20
  /**
19
21
  * Refusal codes that pause shared operations rather than say the content is wrong: the caller's
20
22
  * authorization is gone, or a hosted sync quota (`REQUEST_CAPACITY_*`, one per scope the host
@@ -32,6 +34,17 @@ export const AUTHORIZATION_REFUSAL_CODES = new Set([
32
34
  export function isAuthorizationRefusal(outcome) {
33
35
  return outcome.kind === "refused" && AUTHORIZATION_REFUSAL_CODES.has(outcome.code);
34
36
  }
37
+ /**
38
+ * True when a resend's refusal cannot settle an identity whose earlier delivery is unclear. An
39
+ * authorization refusal never can: access lost now says nothing about a delivery authorized
40
+ * earlier. Once a lookup answered {@link LookupPending}, an earlier delivery is known to be held,
41
+ * so no refusal the transport marks as attempt-only (`executed`) can either. Without that
42
+ * answer, a marked refusal of the same bytes (a schema `400`, the mass-delete hold) settles, as
43
+ * it would refuse a delayed first delivery too.
44
+ */
45
+ function refusalLeavesUnknown(outcome, held) {
46
+ return outcome.kind === "refused" && (isAuthorizationRefusal(outcome) || (held && outcome.executed !== undefined));
47
+ }
35
48
  /** The journal state an outcome settles an intent into. */
36
49
  export function stateForOutcome(outcome) {
37
50
  switch (outcome.kind) {
@@ -41,6 +54,8 @@ export function stateForOutcome(outcome) {
41
54
  return "conflict";
42
55
  case "refused":
43
56
  return "refused";
57
+ case "not-executed":
58
+ return "pending";
44
59
  case "unknown":
45
60
  return "unknown";
46
61
  }
@@ -120,64 +135,76 @@ async function submitOnce(transport, intent, deadlineMs, sleep) {
120
135
  controller.abort();
121
136
  return UNKNOWN;
122
137
  }
123
- /**
124
- * Deliver `intent` and settle it against the authority's recorded outcome.
125
- *
126
- * Flow: when the intent has never been submitted, submit it; when it has (`attempts > 0`), or
127
- * when a submission's outcome is unknown, look the request identity up. A positive lookup
128
- * settles the intent. A `null` lookup is taken as proof that the authority never recorded the
129
- * request, so a resubmission with the same `requestId` is the first delivery and is allowed, up
130
- * to `maxSubmissions`. A lookup that fails leaves the outcome unknown and the intent for a later
131
- * call.
132
- *
133
- * No resubmission happens without a `null` lookup because a blind retry after an unknown
134
- * outcome is unsound: on an authority without request identity the retry applies the write
135
- * twice, and even on one with it the retry can only ever learn what the lookup already knew.
136
- * The lookup is what turns "unknown" into a fact before any second delivery.
137
- *
138
- * That fact is only as good as the transport's `null`. An authority that has expired or lost a
139
- * record answers as if it never recorded it, and the reference wire transport returns `null`
140
- * then. The resubmission is guarded only by its `base`, and versions are content hashes: if the
141
- * write had landed and a third party has since restored `base` exactly, the premise matches, the
142
- * write is applied a second time over that revert, and the outcome is `committed`. The hosted
143
- * transport never answers `null` for an absent record once the intent is older than the host's
144
- * stated retention window, less a skew margin, so it does not resubmit there.
145
- *
146
- * By default every outcome passes through {@link settleAgainstIntent}, so a conflict naming the
147
- * intent's own version is committed. `recorded-only` preserves the recorded outcome instead.
148
- */
149
138
  export async function performUncertainWrite(transport, intent, options = {}) {
139
+ const explicitStart = "start" in options;
140
+ if (explicitStart) {
141
+ if (options.settlement !== "recorded-only" || (options.start !== "submit-claimed" && options.start !== "lookup") ||
142
+ !Number.isSafeInteger(intent.attempts) || intent.attempts < 0 ||
143
+ !["pending", "in_flight", "acknowledged", "conflict", "refused", "unknown"].includes(intent.state) ||
144
+ (options.start === "submit-claimed" && (intent.state !== "in_flight" || intent.attempts < 1)))
145
+ throw new Error("Invalid recorded-only delivery start or durable claim.");
146
+ if (intent.notAppliedThrough !== undefined && (!Number.isSafeInteger(intent.notAppliedThrough) || intent.notAppliedThrough < 0 || intent.notAppliedThrough > intent.attempts || options.start === "submit-claimed" && intent.notAppliedThrough !== intent.attempts - 1))
147
+ throw new Error("Invalid recorded-only non-execution prefix or durable claim.");
148
+ // Capture the descriptor before the first asynchronous boundary. Additional prepared data
149
+ // belongs to the typed caller; the primitive neither fabricates nor interprets its fields.
150
+ intent = { ...intent };
151
+ options = { ...options };
152
+ }
150
153
  if (options.settlement !== undefined && options.settlement !== "exact-content" && options.settlement !== "recorded-only") {
151
154
  throw new Error("Unknown uncertain-write settlement mode.");
152
155
  }
153
156
  const sleep = options.sleep ?? defaultSleep;
154
157
  const maxLookups = Math.max(1, options.maxLookups ?? 3);
155
- const maxSubmissions = Math.max(1, options.maxSubmissions ?? 2);
158
+ const maxSubmissions = explicitStart ? 1 : Math.max(1, options.maxSubmissions ?? 2);
156
159
  const lookupDelayMs = options.lookupDelayMs ?? 250;
160
+ const { signal } = options;
161
+ // Whether a submission of this identity may still be held by the authority unanswered.
162
+ let unclear = options.earlierDeliveryUnclear === true && intent.attempts > 0;
163
+ // Whether any lookup in this call answered pending: a delivery of this identity was held, so
164
+ // a later absent answer in the same call does not undo it.
165
+ let held = false;
157
166
  let attempts = intent.attempts;
158
167
  let submissions = 0;
159
168
  let lookups = 0;
160
169
  const finish = (raw) => {
170
+ // Only the compatibility overload admits exact-content settlement and it requires the
171
+ // original full OperationIntent/Outcome contract. Explicit starts never use those fields.
161
172
  const outcome = options.settlement === "recorded-only" ? raw : settleAgainstIntent(raw, intent);
162
173
  return { intent: { ...intent, attempts, state: stateForOutcome(outcome) }, outcome, lookups };
163
174
  };
164
175
  // A previously submitted intent starts at the lookup, never at a submission.
165
- let needSubmission = attempts === 0;
176
+ let needSubmission = explicitStart ? options.start === "submit-claimed" : attempts === 0;
166
177
  for (;;) {
167
178
  if (needSubmission) {
168
- if (submissions >= maxSubmissions)
179
+ if (submissions >= maxSubmissions || ((explicitStart || submissions > 0) && signal?.aborted))
169
180
  return finish(UNKNOWN);
170
181
  submissions += 1;
171
- attempts += 1;
182
+ if (!explicitStart)
183
+ attempts += 1;
172
184
  const outcome = await submitOnce(transport, { ...intent, attempts, state: "in_flight" }, options.deadlineMs, sleep);
185
+ if (outcome.kind === "not-executed") {
186
+ if (!explicitStart || intent.notAppliedThrough === undefined || intent.notAppliedThrough !== attempts - 1 || outcome.attempts !== attempts || signal?.aborted)
187
+ return finish(UNKNOWN);
188
+ return finish(outcome);
189
+ }
190
+ // A resend refused before it reached execution (no credential, access withdrawn, a spent
191
+ // quota, a gateway's schema check) is evidence about that resend only: an earlier, unclear delivery may still be held
192
+ // by the authority and commit, so the identity stays unknown and the intent is kept.
193
+ if (unclear && refusalLeavesUnknown(outcome, held))
194
+ return finish(explicitStart ? UNKNOWN : { kind: "unknown", refusal: { code: outcome.code, message: outcome.message } });
173
195
  if (outcome.kind !== "unknown")
174
196
  return finish(outcome);
197
+ unclear = true;
175
198
  }
176
199
  needSubmission = false;
177
200
  let recorded;
178
201
  for (let round = 0; round < maxLookups; round++) {
202
+ if (signal?.aborted)
203
+ break;
179
204
  if (round > 0)
180
- await sleep(lookupDelayMs);
205
+ await sleep(lookupDelayMs, signal);
206
+ if (signal?.aborted)
207
+ break;
181
208
  lookups += 1;
182
209
  try {
183
210
  recorded = await transport.lookup(intent.requestId);
@@ -190,8 +217,16 @@ export async function performUncertainWrite(transport, intent, options = {}) {
190
217
  }
191
218
  if (recorded === undefined)
192
219
  return finish(UNKNOWN);
220
+ if (recorded !== null && recorded.kind === "pending") {
221
+ // Held unanswered: a delivery of this identity was admitted and may still commit.
222
+ unclear = true;
223
+ held = true;
224
+ recorded = null;
225
+ }
193
226
  if (recorded !== null)
194
- return finish(recorded);
227
+ return finish(recorded.kind === "not-executed" ? UNKNOWN : recorded);
228
+ if (explicitStart)
229
+ return finish(UNKNOWN);
195
230
  needSubmission = true;
196
231
  }
197
232
  }
@@ -1 +1 @@
1
- {"version":3,"file":"uncertain-write.js","sourceRoot":"","sources":["../src/uncertain-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uncertain-write.js","sourceRoot":"","sources":["../src/uncertain-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Lexical write identity rules, independent of transport and payload families. */
2
+ export declare function isWriteRequestId(value: string): boolean;
3
+ export declare function isWriteBinding(value: string): boolean;
4
+ export declare function isAgentLabelVia(value: unknown): value is string;
5
+ //# sourceMappingURL=write-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-identity.d.ts","sourceRoot":"","sources":["../src/write-identity.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAgD;AACtG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE/D"}
@@ -0,0 +1,9 @@
1
+ /** Lexical write identity rules, independent of transport and payload families. */
2
+ export function isWriteRequestId(value) {
3
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(value);
4
+ }
5
+ export function isWriteBinding(value) { return /^sha256:[a-f0-9]{64}$/.test(value); }
6
+ export function isAgentLabelVia(value) {
7
+ return typeof value === "string" && /^[a-z0-9._-]{1,32}$/.test(value) && !value.startsWith("superbee");
8
+ }
9
+ //# sourceMappingURL=write-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-identity.js","sourceRoot":"","sources":["../src/write-identity.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,uEAAuE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,KAAa,IAAa,OAAO,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtG,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACzG,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superbee/core",
3
- "version": "0.2.0-pre.15",
3
+ "version": "0.2.0-pre.17",
4
4
  "type": "module",
5
5
  "description": "OKF store engine \u2014 bundle I/O, cross-links, derived backlinks, freshness, and versioned writes.",
6
6
  "license": "Apache-2.0",
@@ -47,6 +47,18 @@
47
47
  "types": "./dist/recipes.d.ts",
48
48
  "default": "./dist/recipes.js"
49
49
  },
50
+ "./recipe-lifecycle": {
51
+ "types": "./dist/recipe-lifecycle/index.d.ts",
52
+ "default": "./dist/recipe-lifecycle/index.js"
53
+ },
54
+ "./record-overlay": {
55
+ "types": "./dist/record-overlay/index.d.ts",
56
+ "default": "./dist/record-overlay/index.js"
57
+ },
58
+ "./bundle-health": {
59
+ "types": "./dist/bundle-health/index.d.ts",
60
+ "default": "./dist/bundle-health/index.js"
61
+ },
50
62
  "./kinds": {
51
63
  "types": "./dist/kinds.d.ts",
52
64
  "default": "./dist/kinds.js"
@@ -111,6 +123,14 @@
111
123
  "types": "./dist/hosted-transport/index.d.ts",
112
124
  "default": "./dist/hosted-transport/index.js"
113
125
  },
126
+ "./hosted-client": {
127
+ "types": "./dist/hosted-client/index.d.ts",
128
+ "default": "./dist/hosted-client/index.js"
129
+ },
130
+ "./hosted-client/node": {
131
+ "types": "./dist/hosted-client/node.d.ts",
132
+ "default": "./dist/hosted-client/node.js"
133
+ },
114
134
  "./storage": {
115
135
  "types": "./dist/storage.d.ts",
116
136
  "default": "./dist/storage.js"