@superbee/server 0.1.6 → 0.2.0-pre.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy-router.d.ts +11 -2
- package/dist/legacy-router.d.ts.map +1 -1
- package/dist/legacy-router.js +8 -5
- package/dist/legacy-router.js.map +1 -1
- package/dist/operation-outcomes.d.ts +91 -0
- package/dist/operation-outcomes.d.ts.map +1 -0
- package/dist/operation-outcomes.js +122 -0
- package/dist/operation-outcomes.js.map +1 -0
- package/dist/router.d.ts +32 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +398 -8
- package/dist/router.js.map +1 -1
- package/dist/serve.d.ts +12 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +24 -4
- package/dist/serve.js.map +1 -1
- package/package.json +7 -3
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
* @packageDocumentation
|
|
9
9
|
*/
|
|
10
10
|
export { createRouter, createRouterForBackend } from "./legacy-router.js";
|
|
11
|
+
export type { LegacyRouterOptions } from "./legacy-router.js";
|
|
12
|
+
export { MemoryOperationOutcomeStore } from "./operation-outcomes.js";
|
|
13
|
+
export type { MemoryOperationOutcomeStoreOptions, OperationClaim, OperationOutcomeStore, RecordedOperation, RecordedOutcome, RecordedResponse, } from "./operation-outcomes.js";
|
|
11
14
|
export { WIRE_ENDPOINTS } from "./router.js";
|
|
12
15
|
export { RequestBodyTooLargeError, serve, requestFromIncomingMessage, writeResponseToServerResponse, } from "./serve.js";
|
|
13
16
|
export type { RequestAdapterOptions, ServeOptions, ServerHandle, } from "./serve.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,wBAAwB,EACxB,KAAK,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,YAAY,EACV,kCAAkC,EAClC,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,wBAAwB,EACxB,KAAK,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* @packageDocumentation
|
|
9
9
|
*/
|
|
10
10
|
export { createRouter, createRouterForBackend } from "./legacy-router.js";
|
|
11
|
+
export { MemoryOperationOutcomeStore } from "./operation-outcomes.js";
|
|
11
12
|
export { WIRE_ENDPOINTS } from "./router.js";
|
|
12
13
|
export { RequestBodyTooLargeError, serve, requestFromIncomingMessage, writeResponseToServerResponse, } from "./serve.js";
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAStE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,wBAAwB,EACxB,KAAK,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,YAAY,CAAC"}
|
package/dist/legacy-router.d.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
/** Node-specific compatibility adapter for the historical single-backend package root. */
|
|
2
2
|
import { type Bundle, type StorageBackend } from "@superbee/core";
|
|
3
|
+
import { type OperationOutcomeStore } from "./operation-outcomes.js";
|
|
4
|
+
export interface LegacyRouterOptions {
|
|
5
|
+
/**
|
|
6
|
+
* The store behind identified document writes. Omitted, the reference router gets a fresh
|
|
7
|
+
* in-memory store so identity works out of the box; `null` builds a router without one, which
|
|
8
|
+
* refuses identity and reports `operations: false`.
|
|
9
|
+
*/
|
|
10
|
+
outcomes?: OperationOutcomeStore | null;
|
|
11
|
+
}
|
|
3
12
|
/** Historical explicit-backend entry point retained at the Node package root. */
|
|
4
|
-
export declare function createRouterForBackend(backend: StorageBackend): (request: Request) => Promise<Response>;
|
|
13
|
+
export declare function createRouterForBackend(backend: StorageBackend, options?: LegacyRouterOptions): (request: Request) => Promise<Response>;
|
|
5
14
|
/** Historical Bundle entry point retained at the Node package root, including `/bundles/default`. */
|
|
6
|
-
export declare function createRouter(bundle: Bundle): (request: Request) => Promise<Response>;
|
|
15
|
+
export declare function createRouter(bundle: Bundle, options?: LegacyRouterOptions): (request: Request) => Promise<Response>;
|
|
7
16
|
//# sourceMappingURL=legacy-router.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-router.d.ts","sourceRoot":"","sources":["../src/legacy-router.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"legacy-router.d.ts","sourceRoot":"","sources":["../src/legacy-router.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAA+B,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAQlG,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACzC;AA4CD,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,GAAE,mBAAwB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAE1I;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAEvH"}
|
package/dist/legacy-router.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Node-specific compatibility adapter for the historical single-backend package root. */
|
|
2
2
|
import { FilesystemBackend, MemoryBackend, } from "@superbee/core";
|
|
3
|
+
import { MemoryOperationOutcomeStore } from "./operation-outcomes.js";
|
|
3
4
|
import { createRouter as createWorkerRouter, } from "./router.js";
|
|
4
5
|
const LEGACY_INTERNAL_BUNDLE_ID = "bnd_00000000000000000000000000000000";
|
|
5
6
|
function capabilitiesForBackend(backend) {
|
|
@@ -30,19 +31,21 @@ function canonicalizeLegacyBundleRoute(request) {
|
|
|
30
31
|
url.pathname = `/v0/bundles/${LEGACY_INTERNAL_BUNDLE_ID}/${match[2]}`;
|
|
31
32
|
return new Request(url, request);
|
|
32
33
|
}
|
|
33
|
-
function buildLegacyRouter(backend) {
|
|
34
|
+
function buildLegacyRouter(backend, options) {
|
|
35
|
+
const outcomes = options.outcomes === undefined ? new MemoryOperationOutcomeStore() : options.outcomes;
|
|
34
36
|
const workerRouter = createWorkerRouter({
|
|
35
37
|
capabilities: capabilitiesForBackend(backend),
|
|
38
|
+
...(outcomes === null ? {} : { outcomes }),
|
|
36
39
|
resolveContext: (request) => ({ backend, attribution: legacyAttribution(request) }),
|
|
37
40
|
});
|
|
38
41
|
return (request) => workerRouter(canonicalizeLegacyBundleRoute(request));
|
|
39
42
|
}
|
|
40
43
|
/** Historical explicit-backend entry point retained at the Node package root. */
|
|
41
|
-
export function createRouterForBackend(backend) {
|
|
42
|
-
return buildLegacyRouter(backend);
|
|
44
|
+
export function createRouterForBackend(backend, options = {}) {
|
|
45
|
+
return buildLegacyRouter(backend, options);
|
|
43
46
|
}
|
|
44
47
|
/** Historical Bundle entry point retained at the Node package root, including `/bundles/default`. */
|
|
45
|
-
export function createRouter(bundle) {
|
|
46
|
-
return buildLegacyRouter(bundle.backend ?? new FilesystemBackend(bundle.root));
|
|
48
|
+
export function createRouter(bundle, options = {}) {
|
|
49
|
+
return buildLegacyRouter(bundle.backend ?? new FilesystemBackend(bundle.root), options);
|
|
47
50
|
}
|
|
48
51
|
//# sourceMappingURL=legacy-router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-router.js","sourceRoot":"","sources":["../src/legacy-router.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,EACL,iBAAiB,EACjB,aAAa,GAId,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,YAAY,IAAI,kBAAkB,GAEnC,MAAM,aAAa,CAAC;AAErB,MAAM,yBAAyB,GAAG,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"legacy-router.js","sourceRoot":"","sources":["../src/legacy-router.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,EACL,iBAAiB,EACjB,aAAa,GAId,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,2BAA2B,EAA8B,MAAM,yBAAyB,CAAC;AAClG,OAAO,EACL,YAAY,IAAI,kBAAkB,GAEnC,MAAM,aAAa,CAAC;AAErB,MAAM,yBAAyB,GAAG,sCAAsC,CAAC;AAWzE,SAAS,sBAAsB,CAAC,OAAuB;IACrD,OAAO,CACL,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI;QAC1B,YAAY,EAAE,OAAO,YAAY,aAAa;QAC9C,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,KAAK;KACjB,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAgB;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;IACrD,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,SAAS;QACzB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,6BAA6B,CAAC,OAAgB;IACrD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAC3B,GAAG,CAAC,QAAQ,GAAG,eAAe,yBAAyB,IAAI,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC;IACvE,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuB,EAAE,OAA4B;IAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,2BAA2B,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACvG,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACtC,YAAY,EAAE,sBAAsB,CAAC,OAAO,CAAC;QAC7C,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC1C,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;KACpF,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,sBAAsB,CAAC,OAAuB,EAAE,UAA+B,EAAE;IAC/F,OAAO,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,UAA+B,EAAE;IAC5E,OAAO,iBAAiB,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recorded outcomes of identified writes: the store behind the wire's `Idempotency-Key` header
|
|
3
|
+
* and `GET /operations/{key}` route (`docs/WIRE-PROTOCOL.md`, "Identified writes").
|
|
4
|
+
*
|
|
5
|
+
* A key is claimed before its write is applied. The claim answers in one of three ways: the
|
|
6
|
+
* key already has a recorded operation, so the caller replays it; another application of the
|
|
7
|
+
* same key is in progress, so the caller waits for it; or the key is now the caller's, who
|
|
8
|
+
* either records the response it produced or releases the claim when the application threw
|
|
9
|
+
* before any response existed. Recording binds the outcome to the method and document id it
|
|
10
|
+
* was produced for, so a resubmission under the same key that names a different operation can
|
|
11
|
+
* be refused instead of replayed.
|
|
12
|
+
*
|
|
13
|
+
* Keys are scoped: the reference router scopes by canonical bundle id, so two bundles cannot
|
|
14
|
+
* share or collide on a key. The memory store keeps each record for a retention window and
|
|
15
|
+
* forgets it lazily on access, pruning on every record so the map stays bounded by what was
|
|
16
|
+
* written inside one window. The module imports no Node builtin: the Worker-safe router
|
|
17
|
+
* subpath consumes it unchanged.
|
|
18
|
+
*/
|
|
19
|
+
import type { Outcome } from "@superbee/core/storage";
|
|
20
|
+
/** The outcome kinds an authority can record; `unknown` is the client's word, never the store's. */
|
|
21
|
+
export type RecordedOutcome = Exclude<Outcome, {
|
|
22
|
+
kind: "unknown";
|
|
23
|
+
}>;
|
|
24
|
+
/** The parts of a response that replay verbatim to a duplicate submission. */
|
|
25
|
+
export interface RecordedResponse {
|
|
26
|
+
status: number;
|
|
27
|
+
headers: Array<[string, string]>;
|
|
28
|
+
body: string;
|
|
29
|
+
}
|
|
30
|
+
/** One identified write the authority applied, as recorded under its key. */
|
|
31
|
+
export interface RecordedOperation {
|
|
32
|
+
/** The HTTP method the outcome was recorded for. */
|
|
33
|
+
method: string;
|
|
34
|
+
/** The decoded document id the outcome was recorded for. */
|
|
35
|
+
id: string;
|
|
36
|
+
response: RecordedResponse;
|
|
37
|
+
outcome: RecordedOutcome;
|
|
38
|
+
/** Milliseconds since the epoch on the store's clock; retention counts from here. */
|
|
39
|
+
recordedAt: number;
|
|
40
|
+
}
|
|
41
|
+
/** What a caller learns when it claims a key. */
|
|
42
|
+
export type OperationClaim = {
|
|
43
|
+
kind: "recorded";
|
|
44
|
+
operation: RecordedOperation;
|
|
45
|
+
} | {
|
|
46
|
+
kind: "in_progress";
|
|
47
|
+
/** Resolves with the record once the other application records, or `null` if it released instead. */
|
|
48
|
+
settled: Promise<RecordedOperation | null>;
|
|
49
|
+
} | {
|
|
50
|
+
kind: "claimed";
|
|
51
|
+
/** Record the application's response under the key; the key stays claimed until this or `release` runs. */
|
|
52
|
+
record(operation: Omit<RecordedOperation, "recordedAt">): RecordedOperation;
|
|
53
|
+
/** Give the key back with nothing recorded, so a later submission applies fresh. */
|
|
54
|
+
release(): void;
|
|
55
|
+
};
|
|
56
|
+
export interface OperationOutcomeStore {
|
|
57
|
+
/** Claim `key` within `scope` ahead of applying the write it identifies. */
|
|
58
|
+
claim(scope: string, key: string): Promise<OperationClaim>;
|
|
59
|
+
/** The record under `key` within `scope`, or `null` when nothing is recorded (never, or no longer). */
|
|
60
|
+
lookup(scope: string, key: string): Promise<RecordedOperation | null>;
|
|
61
|
+
}
|
|
62
|
+
export interface MemoryOperationOutcomeStoreOptions {
|
|
63
|
+
/** How long a record stays answerable after it is recorded. Default 24 hours. */
|
|
64
|
+
retentionMs?: number;
|
|
65
|
+
/** The clock retention is measured on; injectable so a test can expire records deterministically. */
|
|
66
|
+
now?: () => number;
|
|
67
|
+
}
|
|
68
|
+
/** The reference store: one map per process, bounded by the retention window. */
|
|
69
|
+
export declare class MemoryOperationOutcomeStore implements OperationOutcomeStore {
|
|
70
|
+
private readonly recorded;
|
|
71
|
+
private readonly inProgress;
|
|
72
|
+
private readonly retentionMs;
|
|
73
|
+
private readonly now;
|
|
74
|
+
constructor(options?: MemoryOperationOutcomeStoreOptions);
|
|
75
|
+
/** Records currently held, expired ones included until they are next touched. */
|
|
76
|
+
get size(): number;
|
|
77
|
+
claim(scope: string, key: string): Promise<OperationClaim>;
|
|
78
|
+
lookup(scope: string, key: string): Promise<RecordedOperation | null>;
|
|
79
|
+
/** The record at `slot` if it is inside the window; an expired record is dropped on the way. */
|
|
80
|
+
private live;
|
|
81
|
+
private expired;
|
|
82
|
+
/**
|
|
83
|
+
* Drop expired records from the front of the map. Records are inserted in clock order (a
|
|
84
|
+
* record always lands as a fresh key, since `live` removes an expired one before a new claim
|
|
85
|
+
* can be handed out), so the scan stops at the first live record and each record is visited
|
|
86
|
+
* once over its life. A clock that moves backwards can leave an expired record behind a live
|
|
87
|
+
* one; `live` still drops it on its next touch, so correctness never depends on this scan.
|
|
88
|
+
*/
|
|
89
|
+
private prune;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=operation-outcomes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-outcomes.d.ts","sourceRoot":"","sources":["../src/operation-outcomes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,oGAAoG;AACpG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAEpE,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,iDAAiD;AACjD,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,iBAAiB,CAAA;CAAE,GAClD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,qGAAqG;IACrG,OAAO,EAAE,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CAC5C,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,2GAA2G;IAC3G,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAAG,iBAAiB,CAAC;IAC5E,oFAAoF;IACpF,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEN,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3D,uGAAuG;IACvG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,kCAAkC;IACjD,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AASD,iFAAiF;AACjF,qBAAa,2BAA4B,YAAW,qBAAqB;IACvE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,OAAO,GAAE,kCAAuC;IAK5D,iFAAiF;IACjF,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgD1D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAI3E,gGAAgG;IAChG,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,OAAO;IAIf;;;;;;OAMG;IACH,OAAO,CAAC,KAAK;CAMd"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recorded outcomes of identified writes: the store behind the wire's `Idempotency-Key` header
|
|
3
|
+
* and `GET /operations/{key}` route (`docs/WIRE-PROTOCOL.md`, "Identified writes").
|
|
4
|
+
*
|
|
5
|
+
* A key is claimed before its write is applied. The claim answers in one of three ways: the
|
|
6
|
+
* key already has a recorded operation, so the caller replays it; another application of the
|
|
7
|
+
* same key is in progress, so the caller waits for it; or the key is now the caller's, who
|
|
8
|
+
* either records the response it produced or releases the claim when the application threw
|
|
9
|
+
* before any response existed. Recording binds the outcome to the method and document id it
|
|
10
|
+
* was produced for, so a resubmission under the same key that names a different operation can
|
|
11
|
+
* be refused instead of replayed.
|
|
12
|
+
*
|
|
13
|
+
* Keys are scoped: the reference router scopes by canonical bundle id, so two bundles cannot
|
|
14
|
+
* share or collide on a key. The memory store keeps each record for a retention window and
|
|
15
|
+
* forgets it lazily on access, pruning on every record so the map stays bounded by what was
|
|
16
|
+
* written inside one window. The module imports no Node builtin: the Worker-safe router
|
|
17
|
+
* subpath consumes it unchanged.
|
|
18
|
+
*/
|
|
19
|
+
const DEFAULT_RETENTION_MS = 24 * 60 * 60 * 1000;
|
|
20
|
+
/** The reference store: one map per process, bounded by the retention window. */
|
|
21
|
+
export class MemoryOperationOutcomeStore {
|
|
22
|
+
recorded = new Map();
|
|
23
|
+
inProgress = new Map();
|
|
24
|
+
retentionMs;
|
|
25
|
+
now;
|
|
26
|
+
constructor(options = {}) {
|
|
27
|
+
this.retentionMs = options.retentionMs ?? DEFAULT_RETENTION_MS;
|
|
28
|
+
this.now = options.now ?? (() => Date.now());
|
|
29
|
+
}
|
|
30
|
+
/** Records currently held, expired ones included until they are next touched. */
|
|
31
|
+
get size() {
|
|
32
|
+
return this.recorded.size;
|
|
33
|
+
}
|
|
34
|
+
async claim(scope, key) {
|
|
35
|
+
// No await precedes the map reads and writes below, so a claim is atomic against every
|
|
36
|
+
// other claim in this process: two concurrent submissions cannot both be handed the key.
|
|
37
|
+
const slot = slotKey(scope, key);
|
|
38
|
+
const existing = this.live(slot);
|
|
39
|
+
if (existing)
|
|
40
|
+
return { kind: "recorded", operation: existing };
|
|
41
|
+
const running = this.inProgress.get(slot);
|
|
42
|
+
if (running)
|
|
43
|
+
return { kind: "in_progress", settled: running.settled };
|
|
44
|
+
let resolve;
|
|
45
|
+
const settled = new Promise((done) => {
|
|
46
|
+
resolve = done;
|
|
47
|
+
});
|
|
48
|
+
const entry = { settled, resolve };
|
|
49
|
+
this.inProgress.set(slot, entry);
|
|
50
|
+
let open = true;
|
|
51
|
+
const assertOpen = () => {
|
|
52
|
+
if (!open)
|
|
53
|
+
throw new Error(`operation outcome for '${key}' was already recorded or released`);
|
|
54
|
+
};
|
|
55
|
+
const finish = (value) => {
|
|
56
|
+
assertOpen();
|
|
57
|
+
open = false;
|
|
58
|
+
if (this.inProgress.get(slot) === entry)
|
|
59
|
+
this.inProgress.delete(slot);
|
|
60
|
+
entry.resolve(value);
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
kind: "claimed",
|
|
64
|
+
record: (operation) => {
|
|
65
|
+
// A settled claim is refused before any map is touched, so a second record cannot land
|
|
66
|
+
// a row the caller was told was rejected. The clock is injected, so it can throw; a
|
|
67
|
+
// record that never lands still gives the key back, or every waiter on this claim would
|
|
68
|
+
// hang and the key would stay unusable until the process restarts.
|
|
69
|
+
assertOpen();
|
|
70
|
+
try {
|
|
71
|
+
const record = { ...operation, recordedAt: this.now() };
|
|
72
|
+
this.prune();
|
|
73
|
+
this.recorded.set(slot, record);
|
|
74
|
+
finish(record);
|
|
75
|
+
return record;
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
if (open)
|
|
79
|
+
finish(null);
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
release: () => finish(null),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
async lookup(scope, key) {
|
|
87
|
+
return this.live(slotKey(scope, key));
|
|
88
|
+
}
|
|
89
|
+
/** The record at `slot` if it is inside the window; an expired record is dropped on the way. */
|
|
90
|
+
live(slot) {
|
|
91
|
+
const record = this.recorded.get(slot);
|
|
92
|
+
if (!record)
|
|
93
|
+
return null;
|
|
94
|
+
if (this.expired(record)) {
|
|
95
|
+
this.recorded.delete(slot);
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
return record;
|
|
99
|
+
}
|
|
100
|
+
expired(record) {
|
|
101
|
+
return this.now() - record.recordedAt >= this.retentionMs;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Drop expired records from the front of the map. Records are inserted in clock order (a
|
|
105
|
+
* record always lands as a fresh key, since `live` removes an expired one before a new claim
|
|
106
|
+
* can be handed out), so the scan stops at the first live record and each record is visited
|
|
107
|
+
* once over its life. A clock that moves backwards can leave an expired record behind a live
|
|
108
|
+
* one; `live` still drops it on its next touch, so correctness never depends on this scan.
|
|
109
|
+
*/
|
|
110
|
+
prune() {
|
|
111
|
+
for (const [slot, record] of this.recorded) {
|
|
112
|
+
if (!this.expired(record))
|
|
113
|
+
break;
|
|
114
|
+
this.recorded.delete(slot);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** Scope and key joined on a separator no key can contain (keys are printable ASCII, so no NUL). */
|
|
119
|
+
function slotKey(scope, key) {
|
|
120
|
+
return `${scope}\u0000${key}`;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=operation-outcomes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-outcomes.js","sourceRoot":"","sources":["../src/operation-outcomes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAwDH,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAOjD,iFAAiF;AACjF,MAAM,OAAO,2BAA2B;IACrB,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAChD,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC3C,WAAW,CAAS;IACpB,GAAG,CAAe;IAEnC,YAAY,UAA8C,EAAE;QAC1D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;QAC/D,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,iFAAiF;IACjF,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,GAAW;QACpC,uFAAuF;QACvF,yFAAyF;QACzF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QAEtE,IAAI,OAAmD,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,OAAO,CAA2B,CAAC,IAAI,EAAE,EAAE;YAC7D,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAe,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,MAAM,UAAU,GAAG,GAAS,EAAE;YAC5B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,oCAAoC,CAAC,CAAC;QAChG,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,KAA+B,EAAQ,EAAE;YACvD,UAAU,EAAE,CAAC;YACb,IAAI,GAAG,KAAK,CAAC;YACb,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;gBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE;gBACpB,uFAAuF;gBACvF,oFAAoF;gBACpF,wFAAwF;gBACxF,mEAAmE;gBACnE,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC;oBACH,MAAM,MAAM,GAAsB,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;oBAC3E,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAChC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACf,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBACvB,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;SAC5B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,GAAW;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,gGAAgG;IACxF,IAAI,CAAC,IAAY;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,OAAO,CAAC,MAAyB;QACvC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC;IAC5D,CAAC;IAED;;;;;;OAMG;IACK,KAAK;QACX,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,MAAM;YACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF;AAED,oGAAoG;AACpG,SAAS,OAAO,CAAC,KAAa,EAAE,GAAW;IACzC,OAAO,GAAG,KAAK,SAAS,GAAG,EAAE,CAAC;AAChC,CAAC"}
|
package/dist/router.d.ts
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* endpoint set and any recorded deviations from the draft.
|
|
18
18
|
*/
|
|
19
19
|
import { type BlobKey, type ConceptId, type ReservedFilename, type StorageBackend, type StorageCapabilities } from "@superbee/core/storage";
|
|
20
|
+
import type { OperationOutcomeStore } from "./operation-outcomes.js";
|
|
20
21
|
/** Canonical remote bundle id: 16 random bytes rendered as lowercase hexadecimal. */
|
|
21
22
|
export type BundleId = `bnd_${string}`;
|
|
22
23
|
/** Access needed before a registered endpoint may dispatch. */
|
|
@@ -44,6 +45,18 @@ export declare const WIRE_ENDPOINTS: readonly [{
|
|
|
44
45
|
readonly method: "POST";
|
|
45
46
|
readonly path: "/v0/bundles/{bundle}/docs:read-many";
|
|
46
47
|
readonly accessClass: "read";
|
|
48
|
+
}, {
|
|
49
|
+
readonly id: "docs-heads";
|
|
50
|
+
readonly resource: "docs-heads";
|
|
51
|
+
readonly method: "GET";
|
|
52
|
+
readonly path: "/v0/bundles/{bundle}/heads";
|
|
53
|
+
readonly accessClass: "read";
|
|
54
|
+
}, {
|
|
55
|
+
readonly id: "docs-snapshot";
|
|
56
|
+
readonly resource: "docs-snapshot";
|
|
57
|
+
readonly method: "GET";
|
|
58
|
+
readonly path: "/v0/bundles/{bundle}/snapshot";
|
|
59
|
+
readonly accessClass: "read";
|
|
47
60
|
}, {
|
|
48
61
|
readonly id: "doc-read";
|
|
49
62
|
readonly resource: "doc";
|
|
@@ -116,6 +129,12 @@ export declare const WIRE_ENDPOINTS: readonly [{
|
|
|
116
129
|
readonly method: "DELETE";
|
|
117
130
|
readonly path: "/v0/bundles/{bundle}/blobs/{key...}";
|
|
118
131
|
readonly accessClass: "write";
|
|
132
|
+
}, {
|
|
133
|
+
readonly id: "operation-lookup";
|
|
134
|
+
readonly resource: "operation";
|
|
135
|
+
readonly method: "GET";
|
|
136
|
+
readonly path: "/v0/bundles/{bundle}/operations/{key}";
|
|
137
|
+
readonly accessClass: "write";
|
|
119
138
|
}];
|
|
120
139
|
export type WireEndpointId = (typeof WIRE_ENDPOINTS)[number]["id"];
|
|
121
140
|
export type ResolvedWireResource = {
|
|
@@ -124,6 +143,10 @@ export type ResolvedWireResource = {
|
|
|
124
143
|
kind: "docs";
|
|
125
144
|
} | {
|
|
126
145
|
kind: "docs-read-many";
|
|
146
|
+
} | {
|
|
147
|
+
kind: "docs-heads";
|
|
148
|
+
} | {
|
|
149
|
+
kind: "docs-snapshot";
|
|
127
150
|
} | {
|
|
128
151
|
kind: "doc";
|
|
129
152
|
id: ConceptId;
|
|
@@ -139,6 +162,9 @@ export type ResolvedWireResource = {
|
|
|
139
162
|
} | {
|
|
140
163
|
kind: "blob";
|
|
141
164
|
key: BlobKey;
|
|
165
|
+
} | {
|
|
166
|
+
kind: "operation";
|
|
167
|
+
key: string;
|
|
142
168
|
};
|
|
143
169
|
interface ResolvedWireRouteBase {
|
|
144
170
|
endpointId: WireEndpointId;
|
|
@@ -174,6 +200,12 @@ export interface TrustedRouterContext {
|
|
|
174
200
|
}
|
|
175
201
|
export interface RouterOptions {
|
|
176
202
|
capabilities: StorageCapabilities;
|
|
203
|
+
/**
|
|
204
|
+
* Where identified document writes record their outcomes, scoped by canonical bundle id.
|
|
205
|
+
* Without one the router refuses every request that carries `Idempotency-Key` and the lookup
|
|
206
|
+
* route with `400 USAGE`, and `GET /v0/capabilities` reports `operations: false`.
|
|
207
|
+
*/
|
|
208
|
+
outcomes?: OperationOutcomeStore;
|
|
177
209
|
resolveContext(request: Request, route: ResolvedBundleWireRoute): TrustedRouterContext | Response | Promise<TrustedRouterContext | Response>;
|
|
178
210
|
}
|
|
179
211
|
/** Typed resolution failure retained as a stable host-side rejection seam. */
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/router.js
CHANGED
|
@@ -16,10 +16,79 @@
|
|
|
16
16
|
* See `docs/WIRE-PROTOCOL.md` "Implemented by reference" section for the exact
|
|
17
17
|
* endpoint set and any recorded deviations from the draft.
|
|
18
18
|
*/
|
|
19
|
-
import { InvalidInputError, VersionConflict, assertSafeBlobKey, assertSafeConceptId, assertSafeReservedDir, isReservedFile, pathFromConceptId, stripETagWrapper, } from "@superbee/core/storage";
|
|
19
|
+
import { InvalidInputError, VersionConflict, assertSafeBlobKey, assertSafeConceptId, assertSafeReservedDir, headsDigest, sortHeads, isReservedFile, isContentVersion, pathFromConceptId, stripETagWrapper, } from "@superbee/core/storage";
|
|
20
20
|
import { queryHeads, writeDocVersioned } from "@superbee/core/engine";
|
|
21
|
+
import { isRequestIdentity } from "@superbee/core/storage";
|
|
21
22
|
/** Default page size for `GET /docs` when `limit` is not supplied. */
|
|
22
23
|
const DEFAULT_LIST_LIMIT = 50;
|
|
24
|
+
/** Documents read per backend batch while a snapshot streams; one NDJSON chunk per batch. */
|
|
25
|
+
const SNAPSHOT_BATCH_SIZE = 50;
|
|
26
|
+
/** The snapshot body's media type: one JSON object per line (`docs/WIRE-PROTOCOL.md`, "Heads and snapshot"). */
|
|
27
|
+
const NDJSON_CONTENT_TYPE = "application/x-ndjson; charset=utf-8";
|
|
28
|
+
/** The header that carries a document write's durable request identity (`docs/WIRE-PROTOCOL.md`, "Identified writes"). */
|
|
29
|
+
const IDENTITY_HEADER = "Idempotency-Key";
|
|
30
|
+
/** The only endpoints that accept {@link IDENTITY_HEADER}; every other endpoint refuses it as `400 USAGE`. */
|
|
31
|
+
const IDENTIFIED_ENDPOINTS = new Set(["doc-write", "doc-delete"]);
|
|
32
|
+
/** The one answer for identity on a host that records no outcomes; a client must never mistake it for silent acceptance. */
|
|
33
|
+
const IDENTITY_UNSUPPORTED = "request identity is not supported by this host";
|
|
34
|
+
/** A request identity from an `operations/{key}` path segment: decoded once, then held to the wire's key rule. */
|
|
35
|
+
function decodeOperationKey(rawSegment) {
|
|
36
|
+
let key;
|
|
37
|
+
try {
|
|
38
|
+
key = decodeURIComponent(rawSegment);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
throw new InvalidInputError(`invalid percent-encoding in operation key '${rawSegment}'`);
|
|
42
|
+
}
|
|
43
|
+
assertRequestIdentity(key);
|
|
44
|
+
return key;
|
|
45
|
+
}
|
|
46
|
+
function assertRequestIdentity(key) {
|
|
47
|
+
if (!isRequestIdentity(key)) {
|
|
48
|
+
throw new InvalidInputError("Idempotency-Key must be 1 to 128 printable ASCII characters with no space");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Capture a response so it can be recorded and replayed verbatim to a duplicate submission. */
|
|
52
|
+
async function recordableResponse(response) {
|
|
53
|
+
const headers = [];
|
|
54
|
+
response.headers.forEach((value, name) => headers.push([name, value]));
|
|
55
|
+
return { status: response.status, headers, body: await response.text() };
|
|
56
|
+
}
|
|
57
|
+
function replayResponse(recorded) {
|
|
58
|
+
return new Response(recorded.body, { status: recorded.status, headers: recorded.headers });
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The outcome a recorded response reports through the lookup route: a success is `committed`
|
|
62
|
+
* at the version the response carried, a `412` is `conflict` at the envelope's `actual`, and
|
|
63
|
+
* anything else is `refused` with the envelope's code. The same mapping a client applies to a
|
|
64
|
+
* live response, so a looked-up outcome and a replayed response never disagree.
|
|
65
|
+
*/
|
|
66
|
+
function outcomeOf(recorded) {
|
|
67
|
+
let payload = {};
|
|
68
|
+
try {
|
|
69
|
+
payload = JSON.parse(recorded.body);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
payload = {};
|
|
73
|
+
}
|
|
74
|
+
if (recorded.status === 200 || recorded.status === 201) {
|
|
75
|
+
const version = recorded.headers.find(([name]) => name.toLowerCase() === "x-version")?.[1];
|
|
76
|
+
if (!version)
|
|
77
|
+
throw new Error("an identified write produced a success response that carries no version");
|
|
78
|
+
return { kind: "committed", version };
|
|
79
|
+
}
|
|
80
|
+
if (recorded.status === 412) {
|
|
81
|
+
const actual = payload.error?.details?.actual;
|
|
82
|
+
return { kind: "conflict", actual: typeof actual === "string" ? actual : null };
|
|
83
|
+
}
|
|
84
|
+
const code = payload.error?.code;
|
|
85
|
+
const message = payload.error?.message;
|
|
86
|
+
return {
|
|
87
|
+
kind: "refused",
|
|
88
|
+
code: typeof code === "string" ? code : "RUNTIME",
|
|
89
|
+
message: typeof message === "string" ? message : `status ${recorded.status}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
23
92
|
/** True when `err` carries the `ENOENT`-shaped `.code` the seam's adapters use for "absent". */
|
|
24
93
|
function isEnoent(err) {
|
|
25
94
|
return typeof err === "object" && err !== null && err.code === "ENOENT";
|
|
@@ -60,11 +129,42 @@ function decodeBlobKey(rawPathTail) {
|
|
|
60
129
|
* principle 4: OKF/id-safety invariants are enforced server-side too).
|
|
61
130
|
*/
|
|
62
131
|
function assertValidDocId(id) {
|
|
132
|
+
if (hasControlCharacter(id)) {
|
|
133
|
+
throw new InvalidInputError("document ids cannot contain control characters");
|
|
134
|
+
}
|
|
63
135
|
assertSafeConceptId(id);
|
|
64
136
|
if (isReservedFile(pathFromConceptId(id))) {
|
|
65
137
|
throw new InvalidInputError(`'${id}' is a reserved file, not a concept document`);
|
|
66
138
|
}
|
|
67
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* True when `id` holds any code unit below U+0020 or equal to U+007F. The core id rule admits
|
|
142
|
+
* such characters (a local bundle may hold `"line\nbreak"`), but the heads digest concatenates
|
|
143
|
+
* `id`, `\n`, `version`, `\n` per row and is injective only when no id contains a line feed. The
|
|
144
|
+
* wire therefore refuses the whole control range on every document route
|
|
145
|
+
* ({@link assertValidDocId}) and refuses to list such an id ({@link UnservableIdError}), so no
|
|
146
|
+
* digest is ever minted over a listing the recipe cannot tell apart from another.
|
|
147
|
+
*/
|
|
148
|
+
function hasControlCharacter(id) {
|
|
149
|
+
for (let i = 0; i < id.length; i += 1) {
|
|
150
|
+
const unit = id.charCodeAt(i);
|
|
151
|
+
if (unit < 0x20 || unit === 0x7f)
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* A bundle written outside the wire holds a document id the wire cannot serve through heads or
|
|
158
|
+
* snapshot (see {@link hasControlCharacter}). Mapped to `500 RUNTIME` with this message: the
|
|
159
|
+
* request is well formed, the bundle is what cannot be served, and the listing fails closed
|
|
160
|
+
* rather than minting a non-injective digest.
|
|
161
|
+
*/
|
|
162
|
+
class UnservableIdError extends Error {
|
|
163
|
+
constructor() {
|
|
164
|
+
super("bundle holds a document id the wire cannot serve");
|
|
165
|
+
this.name = "UnservableIdError";
|
|
166
|
+
}
|
|
167
|
+
}
|
|
68
168
|
/** Build a JSON `Response` with the standard `content-type`, merging in any extra headers. */
|
|
69
169
|
function jsonResponse(status, body, headers = {}) {
|
|
70
170
|
return new Response(JSON.stringify(body), {
|
|
@@ -94,6 +194,9 @@ function errorFromCaught(err) {
|
|
|
94
194
|
if (err instanceof InvalidInputError) {
|
|
95
195
|
return errorResponse(400, "USAGE", err.message);
|
|
96
196
|
}
|
|
197
|
+
if (err instanceof UnservableIdError) {
|
|
198
|
+
return errorResponse(500, "RUNTIME", err.message);
|
|
199
|
+
}
|
|
97
200
|
return errorResponse(500, "RUNTIME", "internal server error");
|
|
98
201
|
}
|
|
99
202
|
/**
|
|
@@ -170,6 +273,20 @@ export const WIRE_ENDPOINTS = [
|
|
|
170
273
|
path: "/v0/bundles/{bundle}/docs:read-many",
|
|
171
274
|
accessClass: "read",
|
|
172
275
|
},
|
|
276
|
+
{
|
|
277
|
+
id: "docs-heads",
|
|
278
|
+
resource: "docs-heads",
|
|
279
|
+
method: "GET",
|
|
280
|
+
path: "/v0/bundles/{bundle}/heads",
|
|
281
|
+
accessClass: "read",
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
id: "docs-snapshot",
|
|
285
|
+
resource: "docs-snapshot",
|
|
286
|
+
method: "GET",
|
|
287
|
+
path: "/v0/bundles/{bundle}/snapshot",
|
|
288
|
+
accessClass: "read",
|
|
289
|
+
},
|
|
173
290
|
{
|
|
174
291
|
id: "doc-read",
|
|
175
292
|
resource: "doc",
|
|
@@ -254,6 +371,13 @@ export const WIRE_ENDPOINTS = [
|
|
|
254
371
|
path: "/v0/bundles/{bundle}/blobs/{key...}",
|
|
255
372
|
accessClass: "write",
|
|
256
373
|
},
|
|
374
|
+
{
|
|
375
|
+
id: "operation-lookup",
|
|
376
|
+
resource: "operation",
|
|
377
|
+
method: "GET",
|
|
378
|
+
path: "/v0/bundles/{bundle}/operations/{key}",
|
|
379
|
+
accessClass: "write",
|
|
380
|
+
},
|
|
257
381
|
];
|
|
258
382
|
/** Typed resolution failure retained as a stable host-side rejection seam. */
|
|
259
383
|
export class WireRequestResolutionError extends Error {
|
|
@@ -312,6 +436,10 @@ function resourceFromMatch(resource, params, searchParams) {
|
|
|
312
436
|
return { kind: "docs" };
|
|
313
437
|
case "docs-read-many":
|
|
314
438
|
return { kind: "docs-read-many" };
|
|
439
|
+
case "docs-heads":
|
|
440
|
+
return { kind: "docs-heads" };
|
|
441
|
+
case "docs-snapshot":
|
|
442
|
+
return { kind: "docs-snapshot" };
|
|
315
443
|
case "doc": {
|
|
316
444
|
const id = decodeId(params.id);
|
|
317
445
|
assertValidDocId(id);
|
|
@@ -338,6 +466,8 @@ function resourceFromMatch(resource, params, searchParams) {
|
|
|
338
466
|
assertSafeBlobKey(key);
|
|
339
467
|
return { kind: "blob", key };
|
|
340
468
|
}
|
|
469
|
+
case "operation":
|
|
470
|
+
return { kind: "operation", key: decodeOperationKey(params.key) };
|
|
341
471
|
}
|
|
342
472
|
}
|
|
343
473
|
function invalidBundleFromPath(pathname) {
|
|
@@ -423,6 +553,12 @@ function routeLabel(resource) {
|
|
|
423
553
|
case "docs-read-many":
|
|
424
554
|
label = "/docs:read-many";
|
|
425
555
|
break;
|
|
556
|
+
case "docs-heads":
|
|
557
|
+
label = "/heads";
|
|
558
|
+
break;
|
|
559
|
+
case "docs-snapshot":
|
|
560
|
+
label = "/snapshot";
|
|
561
|
+
break;
|
|
426
562
|
case "doc":
|
|
427
563
|
case "doc-versions":
|
|
428
564
|
label = "a doc route";
|
|
@@ -436,6 +572,9 @@ function routeLabel(resource) {
|
|
|
436
572
|
case "blob":
|
|
437
573
|
label = "a blob route";
|
|
438
574
|
break;
|
|
575
|
+
case "operation":
|
|
576
|
+
label = "an operation route";
|
|
577
|
+
break;
|
|
439
578
|
case "capabilities":
|
|
440
579
|
label = "/v0/capabilities";
|
|
441
580
|
break;
|
|
@@ -551,12 +690,89 @@ function buildRouter(options) {
|
|
|
551
690
|
* catch-all (`VersionConflict` -> `412` via `errorFromCaught`, same as a write). `200
|
|
552
691
|
* { deleted }` unconditionally — never a `404`, matching the wire's absence-is-success
|
|
553
692
|
* contract (AXI P6).
|
|
693
|
+
*
|
|
694
|
+
* A delete that carried `If-Match` answers with the version headers naming that token: the
|
|
695
|
+
* revision the delete acted on, and the version an identified delete's recorded outcome is
|
|
696
|
+
* committed at. When the target was already absent the delete is still the idempotent success
|
|
697
|
+
* the wire promises, and the token the client supplied is still the revision its outcome
|
|
698
|
+
* names. An unconditional delete has no revision to name and sends no version headers.
|
|
554
699
|
*/
|
|
555
700
|
async function handleDeleteDoc(backend, id, req) {
|
|
556
701
|
assertValidDocId(id);
|
|
557
702
|
const options = deleteOptionsFromHeaders(req);
|
|
558
703
|
const deleted = await backend.delete(id, options);
|
|
559
|
-
|
|
704
|
+
const headers = options.expectedVersion === undefined ? {} : versionHeaders(options.expectedVersion);
|
|
705
|
+
return jsonResponse(200, { deleted }, headers);
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Apply one identified write at most once under `key`. The key is claimed before `apply`
|
|
709
|
+
* runs; a duplicate that finds the key recorded replays the recorded response, and one that
|
|
710
|
+
* finds the first application still in progress waits for it. A typed rejection thrown by the
|
|
711
|
+
* engine (`412`, `400`, `404`) is the write's answer and is recorded like a returned response;
|
|
712
|
+
* a runtime failure produced no answer, so the claim is released with nothing recorded and a
|
|
713
|
+
* later submission applies fresh. A recorded outcome is bound to its method and document id,
|
|
714
|
+
* so the same key resubmitted for a different operation is refused, never replayed.
|
|
715
|
+
*/
|
|
716
|
+
async function applyIdentified(scope, key, method, id, apply) {
|
|
717
|
+
try {
|
|
718
|
+
assertRequestIdentity(key);
|
|
719
|
+
}
|
|
720
|
+
catch (err) {
|
|
721
|
+
return errorFromCaught(err);
|
|
722
|
+
}
|
|
723
|
+
const store = options.outcomes;
|
|
724
|
+
if (!store)
|
|
725
|
+
return errorResponse(400, "USAGE", IDENTITY_UNSUPPORTED);
|
|
726
|
+
for (;;) {
|
|
727
|
+
const claim = await store.claim(scope, key);
|
|
728
|
+
if (claim.kind === "recorded")
|
|
729
|
+
return replayRecorded(claim.operation, method, id);
|
|
730
|
+
if (claim.kind === "in_progress") {
|
|
731
|
+
const settled = await claim.settled;
|
|
732
|
+
if (settled === null)
|
|
733
|
+
continue;
|
|
734
|
+
return replayRecorded(settled, method, id);
|
|
735
|
+
}
|
|
736
|
+
let response;
|
|
737
|
+
try {
|
|
738
|
+
response = await apply();
|
|
739
|
+
}
|
|
740
|
+
catch (err) {
|
|
741
|
+
if (!(err instanceof VersionConflict || err instanceof InvalidInputError || isEnoent(err))) {
|
|
742
|
+
claim.release();
|
|
743
|
+
throw err;
|
|
744
|
+
}
|
|
745
|
+
response = errorFromCaught(err);
|
|
746
|
+
}
|
|
747
|
+
let recorded;
|
|
748
|
+
let outcome;
|
|
749
|
+
try {
|
|
750
|
+
recorded = await recordableResponse(response);
|
|
751
|
+
outcome = outcomeOf(recorded);
|
|
752
|
+
}
|
|
753
|
+
catch (err) {
|
|
754
|
+
claim.release();
|
|
755
|
+
throw err;
|
|
756
|
+
}
|
|
757
|
+
claim.record({ method, id, response: recorded, outcome });
|
|
758
|
+
return replayResponse(recorded);
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
function replayRecorded(operation, method, id) {
|
|
762
|
+
if (operation.method !== method || operation.id !== id) {
|
|
763
|
+
return errorResponse(400, "USAGE", `Idempotency-Key was recorded for ${operation.method} '${operation.id}', not ${method} '${id}'`, { recorded: { method: operation.method, id: operation.id } });
|
|
764
|
+
}
|
|
765
|
+
return replayResponse(operation.response);
|
|
766
|
+
}
|
|
767
|
+
/** `GET /operations/{key}`: the recorded outcome, or `404` when the store holds nothing under the key. */
|
|
768
|
+
async function handleOperationLookup(scope, key) {
|
|
769
|
+
const store = options.outcomes;
|
|
770
|
+
if (!store)
|
|
771
|
+
return errorResponse(400, "USAGE", IDENTITY_UNSUPPORTED);
|
|
772
|
+
const operation = await store.lookup(scope, key);
|
|
773
|
+
if (!operation)
|
|
774
|
+
return errorResponse(404, "NOT_FOUND", `no recorded outcome for '${key}'`);
|
|
775
|
+
return jsonResponse(200, operation.outcome);
|
|
560
776
|
}
|
|
561
777
|
async function handleVersions(backend, id) {
|
|
562
778
|
assertValidDocId(id);
|
|
@@ -583,8 +799,9 @@ function buildRouter(options) {
|
|
|
583
799
|
try {
|
|
584
800
|
assertValidDocId(id);
|
|
585
801
|
}
|
|
586
|
-
catch {
|
|
587
|
-
|
|
802
|
+
catch (err) {
|
|
803
|
+
const reason = err instanceof InvalidInputError ? err.message : `invalid document id '${id}'`;
|
|
804
|
+
return errorResponse(400, "USAGE", reason, { id });
|
|
588
805
|
}
|
|
589
806
|
}
|
|
590
807
|
// Determine the missing set up front (§ readMany: "404 + { missing }" if ANY id is
|
|
@@ -641,6 +858,148 @@ function buildRouter(options) {
|
|
|
641
858
|
});
|
|
642
859
|
return jsonResponse(200, { count, docs, next_cursor: nextCursor });
|
|
643
860
|
}
|
|
861
|
+
/**
|
|
862
|
+
* Every document's id and current version, in the wire's id order. The one listing behind
|
|
863
|
+
* both `GET /heads` and `GET /snapshot`: `list` for the ids, then `readMany` in batches of
|
|
864
|
+
* `SNAPSHOT_BATCH_SIZE`, keeping only each result's version and dropping the bodies with the
|
|
865
|
+
* batch. Neither reference backend pushes `queryHeads` down, and the engine's scan reads every
|
|
866
|
+
* body in one `readMany`, which is why the listing is computed here rather than through it.
|
|
867
|
+
* Every document is still read once for the listing. A document deleted between `list` and
|
|
868
|
+
* its batch is simply not a head, as in the engine's scan; a malformed document fails the
|
|
869
|
+
* listing exactly as it fails `GET /docs` (deviation 4): there is no skip envelope on the wire.
|
|
870
|
+
* An id the wire cannot serve (a control character, which the digest recipe cannot delimit)
|
|
871
|
+
* fails the listing closed before any document is read: heads answers `500 RUNTIME`, and the
|
|
872
|
+
* snapshot fails before its header line exists, so the client sees no snapshot rather than
|
|
873
|
+
* a digest that another listing could share.
|
|
874
|
+
*/
|
|
875
|
+
async function listHeads(backend) {
|
|
876
|
+
const ids = await backend.list();
|
|
877
|
+
if (ids.some(hasControlCharacter))
|
|
878
|
+
throw new UnservableIdError();
|
|
879
|
+
const heads = [];
|
|
880
|
+
for (let offset = 0; offset < ids.length; offset += SNAPSHOT_BATCH_SIZE) {
|
|
881
|
+
const batch = ids.slice(offset, offset + SNAPSHOT_BATCH_SIZE);
|
|
882
|
+
for (const { id, version } of await readBatchExisting(backend, batch))
|
|
883
|
+
heads.push({ id, version });
|
|
884
|
+
}
|
|
885
|
+
return sortHeads(heads);
|
|
886
|
+
}
|
|
887
|
+
/**
|
|
888
|
+
* `readMany` for one batch, tolerating a document that vanished after `list` named it: on an
|
|
889
|
+
* ENOENT-shaped failure the batch is re-read one id at a time and absent ids are dropped.
|
|
890
|
+
* Any other failure (a malformed document included) propagates.
|
|
891
|
+
*/
|
|
892
|
+
async function readBatchExisting(backend, ids) {
|
|
893
|
+
try {
|
|
894
|
+
const results = await backend.readMany(ids);
|
|
895
|
+
assertBatchShape(results.length, ids.length);
|
|
896
|
+
return results.map((result, index) => ({ id: ids[index], version: result.version }));
|
|
897
|
+
}
|
|
898
|
+
catch (err) {
|
|
899
|
+
if (!isEnoent(err))
|
|
900
|
+
throw err;
|
|
901
|
+
}
|
|
902
|
+
const out = [];
|
|
903
|
+
for (const id of ids) {
|
|
904
|
+
try {
|
|
905
|
+
out.push({ id, version: (await backend.read(id)).version });
|
|
906
|
+
}
|
|
907
|
+
catch (err) {
|
|
908
|
+
if (!isEnoent(err))
|
|
909
|
+
throw err;
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
return out;
|
|
913
|
+
}
|
|
914
|
+
/** A conforming `readMany` answers one result per id, in order; anything else is a backend defect, never silently paired. */
|
|
915
|
+
function assertBatchShape(resultCount, idCount) {
|
|
916
|
+
if (resultCount !== idCount) {
|
|
917
|
+
throw new Error(`readMany answered ${resultCount} result(s) for ${idCount} id(s); results are paired to ids by index`);
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
/** True when `If-None-Match` names `digest` in bare, quoted, or weak form, alone or in a list. */
|
|
921
|
+
function ifNoneMatchNames(req, digest) {
|
|
922
|
+
const header = req.headers.get("If-None-Match");
|
|
923
|
+
if (header === null)
|
|
924
|
+
return false;
|
|
925
|
+
return header.split(",").some((token) => stripETagWrapper(token) === digest);
|
|
926
|
+
}
|
|
927
|
+
/**
|
|
928
|
+
* `GET /heads`: `{ count, digest, heads }` with the digest as a quoted `ETag`, or a bodyless
|
|
929
|
+
* `304` when the client already holds that digest. A `304` means nothing changed; a `200` is
|
|
930
|
+
* diffed by the client against its own copy (a missing id is a deletion, a differing version a
|
|
931
|
+
* change). No pagination: the whole listing is the point of the route.
|
|
932
|
+
*/
|
|
933
|
+
async function handleHeads(backend, req) {
|
|
934
|
+
const heads = await listHeads(backend);
|
|
935
|
+
const digest = headsDigest(heads);
|
|
936
|
+
if (ifNoneMatchNames(req, digest)) {
|
|
937
|
+
return new Response(null, { status: 304, headers: { ETag: `"${digest}"` } });
|
|
938
|
+
}
|
|
939
|
+
return jsonResponse(200, { count: heads.length, digest, heads }, { ETag: `"${digest}"` });
|
|
940
|
+
}
|
|
941
|
+
/**
|
|
942
|
+
* The snapshot's NDJSON lines: the header, one chunk of document lines per backend batch, and
|
|
943
|
+
* the `end` terminator. The listing holds only ids and versions; bodies are read in batches of
|
|
944
|
+
* `SNAPSHOT_BATCH_SIZE` after the header has been produced and encoded as each batch arrives,
|
|
945
|
+
* so at most one batch of bodies is held at a time. A document that vanishes between the heads
|
|
946
|
+
* listing and its batch makes the batch read throw, which errors the stream: the client then
|
|
947
|
+
* sees a body without its terminator and treats the snapshot as truncated. A document that
|
|
948
|
+
* changes in that window is caught the same way: its read version no longer matches the listed
|
|
949
|
+
* head, and the stream errors rather than emitting a line the header digest does not describe,
|
|
950
|
+
* so the digest always describes exactly the emitted lines and the client retries.
|
|
951
|
+
*/
|
|
952
|
+
async function* snapshotLines(backend, heads, digest) {
|
|
953
|
+
yield `${JSON.stringify({ kind: "snapshot", count: heads.length, digest })}\n`;
|
|
954
|
+
for (let offset = 0; offset < heads.length; offset += SNAPSHOT_BATCH_SIZE) {
|
|
955
|
+
const batch = heads.slice(offset, offset + SNAPSHOT_BATCH_SIZE);
|
|
956
|
+
const results = await backend.readMany(batch.map((head) => head.id));
|
|
957
|
+
assertBatchShape(results.length, batch.length);
|
|
958
|
+
let chunk = "";
|
|
959
|
+
results.forEach((result, index) => {
|
|
960
|
+
// The heads listing owns identity, as the read-many route does: never a payload id.
|
|
961
|
+
const head = batch[index];
|
|
962
|
+
if (result.version !== head.version) {
|
|
963
|
+
throw new Error(`document '${head.id}' changed from version ${head.version} to ${result.version} while the snapshot streamed`);
|
|
964
|
+
}
|
|
965
|
+
const line = { kind: "doc", id: head.id, version: head.version, frontmatter: result.doc.frontmatter, body: result.doc.body };
|
|
966
|
+
chunk += `${JSON.stringify(line)}\n`;
|
|
967
|
+
});
|
|
968
|
+
yield chunk;
|
|
969
|
+
}
|
|
970
|
+
yield `${JSON.stringify({ kind: "end", count: heads.length })}\n`;
|
|
971
|
+
}
|
|
972
|
+
/** Encode produced lines into a pull-driven byte stream: one enqueue per produced chunk, nothing buffered ahead of the reader. */
|
|
973
|
+
function ndjsonStream(lines) {
|
|
974
|
+
const encoder = new TextEncoder();
|
|
975
|
+
return new ReadableStream({
|
|
976
|
+
async pull(controller) {
|
|
977
|
+
const next = await lines.next();
|
|
978
|
+
if (next.done)
|
|
979
|
+
controller.close();
|
|
980
|
+
else
|
|
981
|
+
controller.enqueue(encoder.encode(next.value));
|
|
982
|
+
},
|
|
983
|
+
async cancel() {
|
|
984
|
+
await lines.return(undefined);
|
|
985
|
+
},
|
|
986
|
+
});
|
|
987
|
+
}
|
|
988
|
+
/**
|
|
989
|
+
* `GET /snapshot`: every document as a streamed NDJSON body whose header carries the same
|
|
990
|
+
* digest `GET /heads` would return for this state, so a bootstrap can start its later heads
|
|
991
|
+
* checks from it. The heads listing (and so a malformed-document failure) completes before any
|
|
992
|
+
* byte of the response exists; only the batched body reads stream. Reserved files are not part
|
|
993
|
+
* of a snapshot.
|
|
994
|
+
*/
|
|
995
|
+
async function handleSnapshot(backend) {
|
|
996
|
+
const heads = await listHeads(backend);
|
|
997
|
+
const digest = headsDigest(heads);
|
|
998
|
+
return new Response(ndjsonStream(snapshotLines(backend, heads, digest)), {
|
|
999
|
+
status: 200,
|
|
1000
|
+
headers: { "content-type": NDJSON_CONTENT_TYPE, ETag: `"${digest}"` },
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
644
1003
|
async function handleReadReserved(backend, dir, name) {
|
|
645
1004
|
assertSafeReservedDir(dir);
|
|
646
1005
|
const result = await backend.readReserved(dir, name);
|
|
@@ -748,9 +1107,19 @@ function buildRouter(options) {
|
|
|
748
1107
|
projections: caps.projections ?? true,
|
|
749
1108
|
backlinks: caps.backlinks ?? false,
|
|
750
1109
|
blobs: caps.blobs,
|
|
1110
|
+
operations: options.outcomes !== undefined,
|
|
1111
|
+
heads: true,
|
|
1112
|
+
snapshot: true,
|
|
751
1113
|
});
|
|
752
1114
|
}
|
|
753
1115
|
return registeredWireRouter(async (req, { resolved }) => {
|
|
1116
|
+
// Identity is refused wherever it is not honored, so a client never believes an
|
|
1117
|
+
// unsupported write was identified. The refusal precedes context resolution the way route
|
|
1118
|
+
// resolution does; on the two identified endpoints the host's own answer comes first.
|
|
1119
|
+
const identity = req.headers.get(IDENTITY_HEADER);
|
|
1120
|
+
if (identity !== null && !IDENTIFIED_ENDPOINTS.has(resolved.endpointId)) {
|
|
1121
|
+
return errorResponse(400, "USAGE", "Idempotency-Key is accepted only on document PUT and DELETE");
|
|
1122
|
+
}
|
|
754
1123
|
if (resolved.scope === "deployment")
|
|
755
1124
|
return handleCapabilities();
|
|
756
1125
|
const context = await options.resolveContext(req, resolved);
|
|
@@ -764,16 +1133,37 @@ function buildRouter(options) {
|
|
|
764
1133
|
return await handleList(backend, resolved.searchParams);
|
|
765
1134
|
case "docs-read-many":
|
|
766
1135
|
return await handleReadMany(backend, req);
|
|
1136
|
+
case "docs-heads":
|
|
1137
|
+
return await handleHeads(backend, req);
|
|
1138
|
+
case "docs-snapshot":
|
|
1139
|
+
return await handleSnapshot(backend);
|
|
767
1140
|
case "doc-versions":
|
|
768
1141
|
return await handleVersions(backend, resolved.resource.id);
|
|
769
1142
|
case "doc-read":
|
|
770
1143
|
return await handleReadDoc(backend, resolved.resource.id);
|
|
771
|
-
case "doc-write":
|
|
772
|
-
|
|
1144
|
+
case "doc-write": {
|
|
1145
|
+
const { id } = resolved.resource;
|
|
1146
|
+
const write = () => handleWriteDoc(backend, attribution, id, req);
|
|
1147
|
+
return identity === null ? await write() : await applyIdentified(resolved.bundleId, identity, "PUT", id, write);
|
|
1148
|
+
}
|
|
773
1149
|
case "doc-head":
|
|
774
1150
|
return await handleHeadDoc(backend, resolved.resource.id);
|
|
775
|
-
case "doc-delete":
|
|
776
|
-
|
|
1151
|
+
case "doc-delete": {
|
|
1152
|
+
const { id } = resolved.resource;
|
|
1153
|
+
if (identity !== null) {
|
|
1154
|
+
// The token becomes the version the recorded outcome is committed at and the version
|
|
1155
|
+
// headers the answer carries, so it must be a real content-addressed version, checked
|
|
1156
|
+
// before the key is claimed: an absent, empty or malformed premise records nothing.
|
|
1157
|
+
const premise = req.headers.get("If-Match");
|
|
1158
|
+
if (premise === null || !isContentVersion(stripETagWrapper(premise))) {
|
|
1159
|
+
return errorResponse(400, "USAGE", "an identified delete must carry a well-formed If-Match token");
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
const remove = () => handleDeleteDoc(backend, id, req);
|
|
1163
|
+
return identity === null ? await remove() : await applyIdentified(resolved.bundleId, identity, "DELETE", id, remove);
|
|
1164
|
+
}
|
|
1165
|
+
case "operation-lookup":
|
|
1166
|
+
return await handleOperationLookup(resolved.bundleId, resolved.resource.key);
|
|
777
1167
|
case "reserved-read": {
|
|
778
1168
|
const resource = resolved.resource;
|
|
779
1169
|
return await handleReadReserved(backend, resource.dir, resource.name);
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.d.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* implementation for proving the protocol end-to-end, not a production deployment.
|
|
11
11
|
*/
|
|
12
12
|
import { type IncomingMessage, type ServerResponse } from "node:http";
|
|
13
|
+
import type { OperationOutcomeStore } from "./operation-outcomes.js";
|
|
13
14
|
import type { Bundle } from "@superbee/core";
|
|
14
15
|
/** Options for {@link serve}. */
|
|
15
16
|
export interface ServeOptions {
|
|
@@ -19,6 +20,8 @@ export interface ServeOptions {
|
|
|
19
20
|
host?: string;
|
|
20
21
|
/** Port to bind. `0` (the default) picks an ephemeral port — read it back via {@link ServerHandle.port}. */
|
|
21
22
|
port?: number;
|
|
23
|
+
/** The store behind identified writes; a fresh in-memory store when omitted, none when `null`. */
|
|
24
|
+
outcomes?: OperationOutcomeStore | null;
|
|
22
25
|
}
|
|
23
26
|
/** A running server, returned by {@link serve}. */
|
|
24
27
|
export interface ServerHandle {
|
|
@@ -45,7 +48,15 @@ export declare class RequestBodyTooLargeError extends Error {
|
|
|
45
48
|
* adapter means the CLI never forks the Request/Response marshaling this module already owns.
|
|
46
49
|
*/
|
|
47
50
|
export declare function requestFromIncomingMessage(req: IncomingMessage, origin: string, options?: RequestAdapterOptions): Promise<Request>;
|
|
48
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Write a Web-standard `Response` back onto a Node `ServerResponse`. EXPORTED for the same
|
|
53
|
+
* reason as {@link requestFromIncomingMessage}.
|
|
54
|
+
*
|
|
55
|
+
* The body is piped, never buffered: a streamed response (the snapshot route) reaches the socket
|
|
56
|
+
* chunk by chunk under backpressure and is never held in memory a second time. A body that fails
|
|
57
|
+
* mid-stream destroys the socket, so the client observes a truncated body rather than a
|
|
58
|
+
* well-formed short one, and this call rejects after the headers have already been sent.
|
|
59
|
+
*/
|
|
49
60
|
export declare function writeResponseToServerResponse(res: ServerResponse, response: Response): Promise<void>;
|
|
50
61
|
/**
|
|
51
62
|
* Start the wire-protocol v0 reference server for `bundle` and resolve once it is
|
package/dist/serve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAMpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,iCAAiC;AACjC,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4GAA4G;IAC5G,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,QAAQ,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACzC;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,mGAAmG;IACnG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,MAAM;CAK/B;AAuCD;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1G;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAuClE"}
|
package/dist/serve.js
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* implementation for proving the protocol end-to-end, not a production deployment.
|
|
11
11
|
*/
|
|
12
12
|
import { createServer } from "node:http";
|
|
13
|
+
import { Readable } from "node:stream";
|
|
14
|
+
import { pipeline } from "node:stream/promises";
|
|
13
15
|
import { createRouter } from "./legacy-router.js";
|
|
14
16
|
export class RequestBodyTooLargeError extends Error {
|
|
15
17
|
limitBytes;
|
|
@@ -83,22 +85,33 @@ export async function requestFromIncomingMessage(req, origin, options = {}) {
|
|
|
83
85
|
const body = await readBody(req, options.maxBodyBytes);
|
|
84
86
|
return new Request(url, { method: req.method ?? "GET", headers, body });
|
|
85
87
|
}
|
|
86
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* Write a Web-standard `Response` back onto a Node `ServerResponse`. EXPORTED for the same
|
|
90
|
+
* reason as {@link requestFromIncomingMessage}.
|
|
91
|
+
*
|
|
92
|
+
* The body is piped, never buffered: a streamed response (the snapshot route) reaches the socket
|
|
93
|
+
* chunk by chunk under backpressure and is never held in memory a second time. A body that fails
|
|
94
|
+
* mid-stream destroys the socket, so the client observes a truncated body rather than a
|
|
95
|
+
* well-formed short one, and this call rejects after the headers have already been sent.
|
|
96
|
+
*/
|
|
87
97
|
export async function writeResponseToServerResponse(res, response) {
|
|
88
98
|
const headers = {};
|
|
89
99
|
response.headers.forEach((value, key) => {
|
|
90
100
|
headers[key] = value;
|
|
91
101
|
});
|
|
92
102
|
res.writeHead(response.status, headers);
|
|
93
|
-
|
|
94
|
-
|
|
103
|
+
if (!response.body) {
|
|
104
|
+
res.end();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
await pipeline(Readable.fromWeb(response.body), res);
|
|
95
108
|
}
|
|
96
109
|
/**
|
|
97
110
|
* Start the wire-protocol v0 reference server for `bundle` and resolve once it is
|
|
98
111
|
* listening. See the module doc for the no-auth / loopback-only caveat.
|
|
99
112
|
*/
|
|
100
113
|
export function serve(options) {
|
|
101
|
-
const router = createRouter(options.bundle);
|
|
114
|
+
const router = createRouter(options.bundle, { outcomes: options.outcomes });
|
|
102
115
|
const host = options.host ?? "127.0.0.1";
|
|
103
116
|
return new Promise((resolve, reject) => {
|
|
104
117
|
const server = createServer((req, res) => {
|
|
@@ -107,6 +120,13 @@ export function serve(options) {
|
|
|
107
120
|
.then((request) => router(request))
|
|
108
121
|
.then((response) => writeResponseToServerResponse(res, response))
|
|
109
122
|
.catch((err) => {
|
|
123
|
+
// Once headers are on the wire a body failure cannot become a 500 envelope; the
|
|
124
|
+
// severed socket is the client's signal, and a throwing fallback here would only
|
|
125
|
+
// surface as an unhandled rejection.
|
|
126
|
+
if (res.headersSent || res.destroyed) {
|
|
127
|
+
res.destroy();
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
110
130
|
res.writeHead(500, { "content-type": "application/json; charset=utf-8" });
|
|
111
131
|
res.end(JSON.stringify({ error: { code: "RUNTIME", message: err instanceof Error ? err.message : String(err) } }));
|
|
112
132
|
});
|
package/dist/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superbee/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-pre.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Wire-protocol v0 REFERENCE server: a Web-standard fetch(Request)->Response router over the OKF engine (docs/WIRE-PROTOCOL.md), plus a thin node:http bootstrap. Local-first, no auth (loopback-only default). A reference implementation, not a production deployment.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -20,13 +20,17 @@
|
|
|
20
20
|
"./router": {
|
|
21
21
|
"types": "./dist/router.d.ts",
|
|
22
22
|
"default": "./dist/router.js"
|
|
23
|
+
},
|
|
24
|
+
"./operation-outcomes": {
|
|
25
|
+
"types": "./dist/operation-outcomes.d.ts",
|
|
26
|
+
"default": "./dist/operation-outcomes.js"
|
|
23
27
|
}
|
|
24
28
|
},
|
|
25
29
|
"files": [
|
|
26
30
|
"dist"
|
|
27
31
|
],
|
|
28
32
|
"publishConfig": {
|
|
29
|
-
"access": "
|
|
33
|
+
"access": "public",
|
|
30
34
|
"registry": "https://registry.npmjs.org/"
|
|
31
35
|
},
|
|
32
36
|
"scripts": {
|
|
@@ -36,6 +40,6 @@
|
|
|
36
40
|
"prepublishOnly": "node -e \"console.error('@superbee/server is released by .github/workflows/release-libraries.yml; do not run npm publish here'); process.exit(1)\""
|
|
37
41
|
},
|
|
38
42
|
"dependencies": {
|
|
39
|
-
"@superbee/core": "0.
|
|
43
|
+
"@superbee/core": "0.2.0-pre.2"
|
|
40
44
|
}
|
|
41
45
|
}
|