@superbee/core 0.2.0-pre.14 → 0.2.0-pre.16
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/README.md +213 -0
- package/dist/backend.d.ts +3 -0
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +7 -0
- package/dist/backend.js.map +1 -1
- package/dist/blob-contract.d.ts +80 -0
- package/dist/blob-contract.d.ts.map +1 -0
- package/dist/blob-contract.js +131 -0
- package/dist/blob-contract.js.map +1 -0
- package/dist/blob-journal.d.ts +117 -0
- package/dist/blob-journal.d.ts.map +1 -0
- package/dist/blob-journal.js +168 -0
- package/dist/blob-journal.js.map +1 -0
- package/dist/engine.d.ts +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js.map +1 -1
- package/dist/file-journaled-backend-internal.d.ts +2 -0
- package/dist/file-journaled-backend-internal.d.ts.map +1 -1
- package/dist/file-journaled-backend-internal.js +2 -0
- package/dist/file-journaled-backend-internal.js.map +1 -1
- package/dist/file-journaled-backend.d.ts +14 -2
- package/dist/file-journaled-backend.d.ts.map +1 -1
- package/dist/file-journaled-backend.js +245 -37
- package/dist/file-journaled-backend.js.map +1 -1
- package/dist/hosted-client/binding.d.ts +7 -0
- package/dist/hosted-client/binding.d.ts.map +1 -0
- package/dist/hosted-client/binding.js +10 -0
- package/dist/hosted-client/binding.js.map +1 -0
- package/dist/hosted-client/blob-delivery.d.ts +61 -0
- package/dist/hosted-client/blob-delivery.d.ts.map +1 -0
- package/dist/hosted-client/blob-delivery.js +147 -0
- package/dist/hosted-client/blob-delivery.js.map +1 -0
- package/dist/hosted-client/bundle-listing.d.ts +46 -0
- package/dist/hosted-client/bundle-listing.d.ts.map +1 -0
- package/dist/hosted-client/bundle-listing.js +36 -0
- package/dist/hosted-client/bundle-listing.js.map +1 -0
- package/dist/hosted-client/client.d.ts +155 -0
- package/dist/hosted-client/client.d.ts.map +1 -0
- package/dist/hosted-client/client.js +278 -0
- package/dist/hosted-client/client.js.map +1 -0
- package/dist/hosted-client/errors.d.ts +16 -0
- package/dist/hosted-client/errors.d.ts.map +1 -0
- package/dist/hosted-client/errors.js +22 -0
- package/dist/hosted-client/errors.js.map +1 -0
- package/dist/hosted-client/index.d.ts +23 -0
- package/dist/hosted-client/index.d.ts.map +1 -0
- package/dist/hosted-client/index.js +25 -0
- package/dist/hosted-client/index.js.map +1 -0
- package/dist/hosted-client/node.d.ts +70 -0
- package/dist/hosted-client/node.d.ts.map +1 -0
- package/dist/hosted-client/node.js +214 -0
- package/dist/hosted-client/node.js.map +1 -0
- package/dist/hosted-client/reference.d.ts +12 -0
- package/dist/hosted-client/reference.d.ts.map +1 -0
- package/dist/hosted-client/reference.js +29 -0
- package/dist/hosted-client/reference.js.map +1 -0
- package/dist/hosted-client/write.d.ts +191 -0
- package/dist/hosted-client/write.d.ts.map +1 -0
- package/dist/hosted-client/write.js +396 -0
- package/dist/hosted-client/write.js.map +1 -0
- package/dist/hosted-transport/answer-rows.d.ts +26 -0
- package/dist/hosted-transport/answer-rows.d.ts.map +1 -1
- package/dist/hosted-transport/answer-rows.js +59 -1
- package/dist/hosted-transport/answer-rows.js.map +1 -1
- package/dist/hosted-transport/blob-reads.d.ts +35 -0
- package/dist/hosted-transport/blob-reads.d.ts.map +1 -0
- package/dist/hosted-transport/blob-reads.js +179 -0
- package/dist/hosted-transport/blob-reads.js.map +1 -0
- package/dist/hosted-transport/blob-write.d.ts +34 -0
- package/dist/hosted-transport/blob-write.d.ts.map +1 -0
- package/dist/hosted-transport/blob-write.js +115 -0
- package/dist/hosted-transport/blob-write.js.map +1 -0
- package/dist/hosted-transport/carrier.d.ts +8 -9
- package/dist/hosted-transport/carrier.d.ts.map +1 -1
- package/dist/hosted-transport/carrier.js +40 -41
- package/dist/hosted-transport/carrier.js.map +1 -1
- package/dist/hosted-transport/index.d.ts +4 -4
- package/dist/hosted-transport/index.d.ts.map +1 -1
- package/dist/hosted-transport/index.js +4 -4
- package/dist/hosted-transport/index.js.map +1 -1
- package/dist/hosted-transport/read-adapter.d.ts +6 -0
- package/dist/hosted-transport/read-adapter.d.ts.map +1 -1
- package/dist/hosted-transport/read-adapter.js +11 -0
- package/dist/hosted-transport/read-adapter.js.map +1 -1
- package/dist/hosted-transport/whole-document-transport.d.ts +9 -8
- package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -1
- package/dist/hosted-transport/whole-document-transport.js +10 -9
- package/dist/hosted-transport/whole-document-transport.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/journaled-backend.d.ts +10 -2
- package/dist/journaled-backend.d.ts.map +1 -1
- package/dist/journaled-backend.js +3 -3
- package/dist/journaled-backend.js.map +1 -1
- package/dist/link-types.d.ts +26 -0
- package/dist/link-types.d.ts.map +1 -0
- package/dist/link-types.js +57 -0
- package/dist/link-types.js.map +1 -0
- package/dist/platform.d.ts +4 -0
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +16 -0
- package/dist/platform.js.map +1 -1
- package/dist/recipe-lifecycle/errors.d.ts +77 -0
- package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
- package/dist/recipe-lifecycle/errors.js +96 -0
- package/dist/recipe-lifecycle/errors.js.map +1 -0
- package/dist/recipe-lifecycle/evolution.d.ts +71 -0
- package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
- package/dist/recipe-lifecycle/evolution.js +659 -0
- package/dist/recipe-lifecycle/evolution.js.map +1 -0
- package/dist/recipe-lifecycle/index.d.ts +23 -0
- package/dist/recipe-lifecycle/index.d.ts.map +1 -0
- package/dist/recipe-lifecycle/index.js +19 -0
- package/dist/recipe-lifecycle/index.js.map +1 -0
- package/dist/recipe-lifecycle/install.d.ts +111 -0
- package/dist/recipe-lifecycle/install.d.ts.map +1 -0
- package/dist/recipe-lifecycle/install.js +412 -0
- package/dist/recipe-lifecycle/install.js.map +1 -0
- package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
- package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
- package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
- package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
- package/dist/recipe-lifecycle/stamp.d.ts +98 -0
- package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
- package/dist/recipe-lifecycle/stamp.js +260 -0
- package/dist/recipe-lifecycle/stamp.js.map +1 -0
- package/dist/recipes.d.ts +5 -0
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +5 -0
- package/dist/recipes.js.map +1 -1
- package/dist/storage.d.ts +3 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +3 -0
- package/dist/storage.js.map +1 -1
- package/dist/uncertain-write.d.ts +70 -2
- package/dist/uncertain-write.d.ts.map +1 -1
- package/dist/uncertain-write.js +45 -32
- package/dist/uncertain-write.js.map +1 -1
- package/dist/write-identity.d.ts +5 -0
- package/dist/write-identity.d.ts.map +1 -0
- package/dist/write-identity.js +9 -0
- package/dist/write-identity.js.map +1 -0
- package/package.json +13 -1
package/dist/uncertain-write.js
CHANGED
|
@@ -41,6 +41,8 @@ export function stateForOutcome(outcome) {
|
|
|
41
41
|
return "conflict";
|
|
42
42
|
case "refused":
|
|
43
43
|
return "refused";
|
|
44
|
+
case "not-executed":
|
|
45
|
+
return "pending";
|
|
44
46
|
case "unknown":
|
|
45
47
|
return "unknown";
|
|
46
48
|
}
|
|
@@ -120,64 +122,73 @@ async function submitOnce(transport, intent, deadlineMs, sleep) {
|
|
|
120
122
|
controller.abort();
|
|
121
123
|
return UNKNOWN;
|
|
122
124
|
}
|
|
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
125
|
export async function performUncertainWrite(transport, intent, options = {}) {
|
|
126
|
+
const explicitStart = "start" in options;
|
|
127
|
+
if (explicitStart) {
|
|
128
|
+
if (options.settlement !== "recorded-only" || (options.start !== "submit-claimed" && options.start !== "lookup") ||
|
|
129
|
+
!Number.isSafeInteger(intent.attempts) || intent.attempts < 0 ||
|
|
130
|
+
!["pending", "in_flight", "acknowledged", "conflict", "refused", "unknown"].includes(intent.state) ||
|
|
131
|
+
(options.start === "submit-claimed" && (intent.state !== "in_flight" || intent.attempts < 1)))
|
|
132
|
+
throw new Error("Invalid recorded-only delivery start or durable claim.");
|
|
133
|
+
if (intent.notAppliedThrough !== undefined && (!Number.isSafeInteger(intent.notAppliedThrough) || intent.notAppliedThrough < 0 || intent.notAppliedThrough > intent.attempts || options.start === "submit-claimed" && intent.notAppliedThrough !== intent.attempts - 1))
|
|
134
|
+
throw new Error("Invalid recorded-only non-execution prefix or durable claim.");
|
|
135
|
+
// Capture the descriptor before the first asynchronous boundary. Additional prepared data
|
|
136
|
+
// belongs to the typed caller; the primitive neither fabricates nor interprets its fields.
|
|
137
|
+
intent = { ...intent };
|
|
138
|
+
options = { ...options };
|
|
139
|
+
}
|
|
150
140
|
if (options.settlement !== undefined && options.settlement !== "exact-content" && options.settlement !== "recorded-only") {
|
|
151
141
|
throw new Error("Unknown uncertain-write settlement mode.");
|
|
152
142
|
}
|
|
153
143
|
const sleep = options.sleep ?? defaultSleep;
|
|
154
144
|
const maxLookups = Math.max(1, options.maxLookups ?? 3);
|
|
155
|
-
const maxSubmissions = Math.max(1, options.maxSubmissions ?? 2);
|
|
145
|
+
const maxSubmissions = explicitStart ? 1 : Math.max(1, options.maxSubmissions ?? 2);
|
|
156
146
|
const lookupDelayMs = options.lookupDelayMs ?? 250;
|
|
147
|
+
const { signal } = options;
|
|
148
|
+
// Whether a submission of this identity may still be held by the authority unanswered.
|
|
149
|
+
let unclear = options.earlierDeliveryUnclear === true && intent.attempts > 0;
|
|
157
150
|
let attempts = intent.attempts;
|
|
158
151
|
let submissions = 0;
|
|
159
152
|
let lookups = 0;
|
|
160
153
|
const finish = (raw) => {
|
|
154
|
+
// Only the compatibility overload admits exact-content settlement and it requires the
|
|
155
|
+
// original full OperationIntent/Outcome contract. Explicit starts never use those fields.
|
|
161
156
|
const outcome = options.settlement === "recorded-only" ? raw : settleAgainstIntent(raw, intent);
|
|
162
157
|
return { intent: { ...intent, attempts, state: stateForOutcome(outcome) }, outcome, lookups };
|
|
163
158
|
};
|
|
164
159
|
// A previously submitted intent starts at the lookup, never at a submission.
|
|
165
|
-
let needSubmission = attempts === 0;
|
|
160
|
+
let needSubmission = explicitStart ? options.start === "submit-claimed" : attempts === 0;
|
|
166
161
|
for (;;) {
|
|
167
162
|
if (needSubmission) {
|
|
168
|
-
if (submissions >= maxSubmissions)
|
|
163
|
+
if (submissions >= maxSubmissions || ((explicitStart || submissions > 0) && signal?.aborted))
|
|
169
164
|
return finish(UNKNOWN);
|
|
170
165
|
submissions += 1;
|
|
171
|
-
|
|
166
|
+
if (!explicitStart)
|
|
167
|
+
attempts += 1;
|
|
172
168
|
const outcome = await submitOnce(transport, { ...intent, attempts, state: "in_flight" }, options.deadlineMs, sleep);
|
|
169
|
+
if (outcome.kind === "not-executed") {
|
|
170
|
+
if (!explicitStart || intent.notAppliedThrough === undefined || intent.notAppliedThrough !== attempts - 1 || outcome.attempts !== attempts || signal?.aborted)
|
|
171
|
+
return finish(UNKNOWN);
|
|
172
|
+
return finish(outcome);
|
|
173
|
+
}
|
|
174
|
+
// A resend refused before it reached execution (no credential, access withdrawn, a spent
|
|
175
|
+
// quota) is evidence about that resend only: an earlier, unclear delivery may still be held
|
|
176
|
+
// by the authority and commit, so the identity stays unknown and the intent is kept.
|
|
177
|
+
if (unclear && isAuthorizationRefusal(outcome))
|
|
178
|
+
return finish(UNKNOWN);
|
|
173
179
|
if (outcome.kind !== "unknown")
|
|
174
180
|
return finish(outcome);
|
|
181
|
+
unclear = true;
|
|
175
182
|
}
|
|
176
183
|
needSubmission = false;
|
|
177
184
|
let recorded;
|
|
178
185
|
for (let round = 0; round < maxLookups; round++) {
|
|
186
|
+
if (signal?.aborted)
|
|
187
|
+
break;
|
|
179
188
|
if (round > 0)
|
|
180
|
-
await sleep(lookupDelayMs);
|
|
189
|
+
await sleep(lookupDelayMs, signal);
|
|
190
|
+
if (signal?.aborted)
|
|
191
|
+
break;
|
|
181
192
|
lookups += 1;
|
|
182
193
|
try {
|
|
183
194
|
recorded = await transport.lookup(intent.requestId);
|
|
@@ -191,7 +202,9 @@ export async function performUncertainWrite(transport, intent, options = {}) {
|
|
|
191
202
|
if (recorded === undefined)
|
|
192
203
|
return finish(UNKNOWN);
|
|
193
204
|
if (recorded !== null)
|
|
194
|
-
return finish(recorded);
|
|
205
|
+
return finish(recorded.kind === "not-executed" ? UNKNOWN : recorded);
|
|
206
|
+
if (explicitStart)
|
|
207
|
+
return finish(UNKNOWN);
|
|
195
208
|
needSubmission = true;
|
|
196
209
|
}
|
|
197
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uncertain-write.js","sourceRoot":"","sources":["../src/uncertain-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
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.
|
|
3
|
+
"version": "0.2.0-pre.16",
|
|
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,10 @@
|
|
|
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
|
+
},
|
|
50
54
|
"./kinds": {
|
|
51
55
|
"types": "./dist/kinds.d.ts",
|
|
52
56
|
"default": "./dist/kinds.js"
|
|
@@ -111,6 +115,14 @@
|
|
|
111
115
|
"types": "./dist/hosted-transport/index.d.ts",
|
|
112
116
|
"default": "./dist/hosted-transport/index.js"
|
|
113
117
|
},
|
|
118
|
+
"./hosted-client": {
|
|
119
|
+
"types": "./dist/hosted-client/index.d.ts",
|
|
120
|
+
"default": "./dist/hosted-client/index.js"
|
|
121
|
+
},
|
|
122
|
+
"./hosted-client/node": {
|
|
123
|
+
"types": "./dist/hosted-client/node.d.ts",
|
|
124
|
+
"default": "./dist/hosted-client/node.js"
|
|
125
|
+
},
|
|
114
126
|
"./storage": {
|
|
115
127
|
"types": "./dist/storage.d.ts",
|
|
116
128
|
"default": "./dist/storage.js"
|