@substrat-run/control-plane-api 0.161.0 → 0.163.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +44 -4
- package/dist/api.js.map +1 -1
- package/dist/platform-drain.d.ts +3 -3
- package/dist/platform-drain.d.ts.map +1 -1
- package/dist/platform-drain.js +24 -0
- package/dist/platform-drain.js.map +1 -1
- package/dist/platform-entry.generated.d.ts +1 -1
- package/dist/platform-entry.generated.d.ts.map +1 -1
- package/dist/platform-entry.generated.js +2 -2
- package/dist/platform-entry.generated.js.map +1 -1
- package/dist/platform-wire.d.ts +2 -1
- package/dist/platform-wire.d.ts.map +1 -1
- package/dist/platform-wire.js +23 -3
- package/dist/platform-wire.js.map +1 -1
- package/dist/wire-readiness.d.ts +150 -0
- package/dist/wire-readiness.d.ts.map +1 -0
- package/dist/wire-readiness.js +255 -0
- package/dist/wire-readiness.js.map +1 -0
- package/dist/wire-walk.d.ts +22 -1
- package/dist/wire-walk.d.ts.map +1 -1
- package/dist/wire-walk.js +45 -39
- package/dist/wire-walk.js.map +1 -1
- package/package.json +8 -8
package/dist/platform-drain.d.ts
CHANGED
|
@@ -266,9 +266,9 @@ export declare function peerInvokeHandler(deps: PeerInvokeDeps): PlatformRequest
|
|
|
266
266
|
* `provision-tenant` payload's vertical must be among the declared targets. Phased:
|
|
267
267
|
* a granted manager with no declaration keeps its unbounded #444 behavior until its
|
|
268
268
|
* next push declares (then the bound engages, reviewably).
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
*
|
|
269
|
+
* 4. ownership (#412 invariant 2, #2564) — the payload's tenant must be one the manager's
|
|
270
|
+
* tenant provisioned (`provisionedByTenant`), so a manager acts only on what it made.
|
|
271
|
+
* A tenant created any other way, or before the stamp existed, is refused.
|
|
272
272
|
*/
|
|
273
273
|
export interface ManagedTenantDeps {
|
|
274
274
|
host: ScopeHost;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-drain.d.ts","sourceRoot":"","sources":["../src/platform-drain.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"platform-drain.d.ts","sourceRoot":"","sources":["../src/platform-drain.ts"],"names":[],"mappings":"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"}
|
package/dist/platform-drain.js
CHANGED
|
@@ -625,6 +625,22 @@ async function admitManager(deps, ctx, requestedKeys, targetVertical) {
|
|
|
625
625
|
}
|
|
626
626
|
return { declared };
|
|
627
627
|
}
|
|
628
|
+
/**
|
|
629
|
+
* The manager's ownership bound (#2564): the refusal when `tenantId` is not a tenant the drained
|
|
630
|
+
* scope's tenant provisioned, or `undefined` when it is. The sentence names no tenant. For
|
|
631
|
+
* `set-entitlements` it is the same for a foreign tenant and a missing one; `provision-tenant` runs
|
|
632
|
+
* this after its create, so a free id is created and an existing tenant it does not own is refused.
|
|
633
|
+
*/
|
|
634
|
+
async function refuseUnmanagedTenant(deps, ctx, tenantId) {
|
|
635
|
+
const tenant = await deps.host.admin.getTenant(deps.actor, tenantId);
|
|
636
|
+
if (tenant?.provisionedByTenant === ctx.tenantId)
|
|
637
|
+
return undefined;
|
|
638
|
+
return {
|
|
639
|
+
status: 'failed',
|
|
640
|
+
error: "the payload's tenant was not provisioned by this vertical's tenant",
|
|
641
|
+
failure: { origin: 'platform', code: 'permission_denied', permission: null },
|
|
642
|
+
};
|
|
643
|
+
}
|
|
628
644
|
/**
|
|
629
645
|
* The `provision-tenant` platform-request handler (#412): create a NEW customer tenant, its
|
|
630
646
|
* first scope running the PAYLOAD's vertical (never inherited — the manager and the managed
|
|
@@ -692,6 +708,11 @@ export function provisionTenantHandler(deps) {
|
|
|
692
708
|
return { status: 'failed', error: message };
|
|
693
709
|
throw e;
|
|
694
710
|
}
|
|
711
|
+
// After the create, which is a no-op on an existing id: the read sees whichever create won,
|
|
712
|
+
// so a retry of the manager's own tenant passes and anyone else's stops before any write.
|
|
713
|
+
const unmanaged = await refuseUnmanagedTenant(deps, ctx, tenantId);
|
|
714
|
+
if (unmanaged)
|
|
715
|
+
return unmanaged;
|
|
695
716
|
// #2556: from here every write and call concerns the tenant being provisioned and the
|
|
696
717
|
// payload vertical's deployment, neither of them the manager's, so a throw's text is withheld
|
|
697
718
|
// from the manager's journal: it learns the step, and staff read the text under the reference.
|
|
@@ -836,6 +857,9 @@ export function setEntitlementsHandler(deps) {
|
|
|
836
857
|
const admin = deps.host.admin;
|
|
837
858
|
const tenantId = tenantIdSchema.parse(payload.tenantId);
|
|
838
859
|
const scopeId = scopeIdSchema.parse(payload.authScopeId);
|
|
860
|
+
const unmanaged = await refuseUnmanagedTenant(deps, ctx, tenantId);
|
|
861
|
+
if (unmanaged)
|
|
862
|
+
return unmanaged;
|
|
839
863
|
const scope = await admin.getScopeRecord(actor, tenantId, scopeId);
|
|
840
864
|
if (!scope) {
|
|
841
865
|
return { status: 'failed', error: `unknown scope for tenant: (${tenantId}, ${scopeId})` };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-drain.js","sourceRoot":"","sources":["../src/platform-drain.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform-drain.js","sourceRoot":"","sources":["../src/platform-drain.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
export declare const PLATFORM_ENTRY_MODULE = "substrat-platform-entry.js";
|
|
8
8
|
/** The import specifier the uploader replaces with `./<the bundle's entry>`. */
|
|
9
9
|
export declare const PLATFORM_ENTRY_PLACEHOLDER = "__SUBSTRAT_VERTICAL_ENTRY__";
|
|
10
|
-
/** The entry itself —
|
|
10
|
+
/** The entry itself — 49661 bytes of ESM. */
|
|
11
11
|
export declare const PLATFORM_ENTRY_SOURCE: string;
|
|
12
12
|
/**
|
|
13
13
|
* #2245: the entry's `node:async_hooks` import, as it appears in `PLATFORM_ENTRY_SOURCE`, and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-entry.generated.d.ts","sourceRoot":"","sources":["../src/platform-entry.generated.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAElE,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,gCAAgC,CAAC;AAExE,6CAA6C;AAC7C,eAAO,MAAM,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"platform-entry.generated.d.ts","sourceRoot":"","sources":["../src/platform-entry.generated.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAElE,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,gCAAgC,CAAC;AAExE,6CAA6C;AAC7C,eAAO,MAAM,qBAAqB,EAAE,MAAqilD,CAAC;AAE1klD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,4DAA4D,CAAC;AACnG,eAAO,MAAM,2BAA2B,yCAAyC,CAAC;AAElF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,iCAAiC,CAAC;AAEtE,+CAA+C;AAC/C,eAAO,MAAM,uBAAuB,EAAE,MAAuqW,CAAC"}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
export const PLATFORM_ENTRY_MODULE = 'substrat-platform-entry.js';
|
|
10
10
|
/** The import specifier the uploader replaces with `./<the bundle's entry>`. */
|
|
11
11
|
export const PLATFORM_ENTRY_PLACEHOLDER = '__SUBSTRAT_VERTICAL_ENTRY__';
|
|
12
|
-
/** The entry itself —
|
|
13
|
-
export const PLATFORM_ENTRY_SOURCE = "// substrat-platform-entry.ts\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\n// packages/contracts/dist/auth-diagnostics.js\nvar AUTH_CHECK_STAGES = [\"bearer\", \"session\", \"mcp-audience\", \"mcp-caller\"];\nvar AUTH_CHECK_OUTCOMES = [\"accepted\", \"refused\", \"absent\", \"error\"];\nvar AUTH_CHECK_REASONS = [\n \"verified\",\n \"session-invalid\",\n \"credential-missing\",\n \"discovery-failed\",\n \"key-resolution-failed\",\n \"token-expired\",\n \"token-not-active\",\n \"issuer-invalid\",\n \"audience-invalid\",\n \"claims-invalid\",\n \"signature-invalid\",\n \"token-invalid\",\n \"verification-failed\",\n \"subject-missing\",\n \"assertion-not-access-token\",\n \"delegation-refused\",\n \"token-not-for-app\",\n \"resource-mismatch\",\n \"caller-resolved\",\n \"caller-refused\",\n \"caller-error\"\n];\nvar AUTH_CHECK_CAP = 16;\nvar AUTH_DIAGNOSTICS_KEY = /* @__PURE__ */ Symbol.for(\"substrat.auth-diagnostics\");\nfunction authCheckOf(value) {\n if (!value || typeof value !== \"object\")\n return void 0;\n const v = value;\n if (!AUTH_CHECK_STAGES.includes(v.stage) || !AUTH_CHECK_OUTCOMES.includes(v.outcome) || !AUTH_CHECK_REASONS.includes(v.reason))\n return void 0;\n return { stage: v.stage, outcome: v.outcome, reason: v.reason };\n}\nfunction tallyAuthCheck(record2, value) {\n const check = authCheckOf(value);\n if (!check)\n return;\n const checks = record2.authChecks ??= [];\n if (checks.length < AUTH_CHECK_CAP)\n checks.push(check);\n else\n record2.authChecksDropped = (record2.authChecksDropped ?? 0) + 1;\n}\n\n// packages/contracts/dist/invocation-record.js\nvar INVOCATION_RECORD_HEADER = \"x-substrat-invocation-record\";\nvar REQUEST_ID_HEADER = \"x-substrat-request-id\";\nvar PARENT_REQUEST_ID_HEADER = \"x-substrat-parent-request-id\";\nvar REQUEST_ID_SHAPE = /^[0-9A-HJKMNP-TV-Z]{26}$/;\nfunction parentRequestIdOf(value) {\n return typeof value === \"string\" && REQUEST_ID_SHAPE.test(value) ? value : void 0;\n}\nvar INVOCATION_RECORD_FIELD_MAX = 128;\nvar FIELDS = [\"operation\", \"problemCode\", \"principalKind\"];\nfunction encodeInvocationRecord(record2) {\n const params = new URLSearchParams();\n for (const key of FIELDS) {\n const v = record2[key];\n if (typeof v === \"string\" && v !== \"\")\n params.set(key, v.slice(0, INVOCATION_RECORD_FIELD_MAX));\n }\n const value = params.toString();\n return value === \"\" ? null : value;\n}\nvar FIELD_COVERAGE_HEADER = \"x-substrat-field-coverage\";\nfunction invocationLevelOf(status, threw, problemCode) {\n if (threw || status === null || status >= 500)\n return \"error\";\n if (status >= 400)\n return \"warn\";\n if (problemCode)\n return \"warn\";\n return \"info\";\n}\n\n// packages/contracts/dist/trace-sink.js\nvar TRACE_SINK_KEY = /* @__PURE__ */ Symbol.for(\"substrat.trace-sink\");\nvar STARTS_KEY = /* @__PURE__ */ Symbol.for(\"substrat.trace-starts\");\nfunction starts() {\n const slots = globalThis;\n return slots[STARTS_KEY] ??= /* @__PURE__ */ new Map();\n}\nfunction markTraceStart(invocationId, at = performance.now()) {\n const map = starts();\n if (!map.has(invocationId))\n map.set(invocationId, at);\n}\nfunction forgetTraceStart(invocationId) {\n starts().delete(invocationId);\n}\nfunction installedTraceSink() {\n return globalThis[TRACE_SINK_KEY];\n}\n\n// packages/kernel/dist/invocation-line.js\nfunction invocationLine(f) {\n const emitted = f.emitted;\n return {\n substrat: \"invocation\",\n ...f.kind ? { kind: f.kind } : {},\n tenantId: f.tenantId,\n scopeId: f.scopeId,\n vertical: f.vertical ?? null,\n surface: f.surface ?? null,\n method: f.method ?? null,\n path: f.path ?? null,\n status: f.status ?? null,\n threw: f.threw,\n durationMs: f.durationMs,\n invocationId: f.invocationId,\n level: f.level,\n operation: f.operation ?? null,\n problemCode: f.problemCode ?? null,\n principalKind: f.principalKind ?? null,\n eventCount: emitted ? emitted.total : null,\n eventTypes: emitted ? distinct(emitted.events.map((e) => e.type)) : [],\n entities: emitted && f.withEntities !== false ? distinct(emitted.events.map((e) => e.entity)) : [],\n versionId: f.versionId ?? null,\n ...f.outputFields ? { outputFields: f.outputFields, ...f.fieldCoverageId ? { fieldCoverageId: f.fieldCoverageId } : {} } : {},\n ...f.storeCalls && f.storeCalls.length > 0 ? { storeCalls: f.storeCalls } : {},\n ...f.storeCallsDropped ? { storeCallsDropped: f.storeCallsDropped } : {},\n ...f.outboundCalls && f.outboundCalls.length > 0 ? { outboundCalls: f.outboundCalls } : {},\n ...f.outboundCallsDropped ? { outboundCallsDropped: f.outboundCallsDropped } : {},\n ...f.authChecks?.length ? { authChecks: f.authChecks } : {},\n ...f.authChecksDropped ? { authChecksDropped: f.authChecksDropped } : {},\n ...f.parentInvocationId ? { parentInvocationId: f.parentInvocationId, ...f.parentScopeId ? { parentScopeId: f.parentScopeId } : {} } : {},\n ...f.async ?? {}\n };\n}\nvar STORE_CALL_LOG_CAP = 16;\nfunction tallyStoreCall(tally, call) {\n const calls = tally.storeCalls ?? (tally.storeCalls = []);\n if (calls.length < STORE_CALL_LOG_CAP) {\n calls.push({ binding: call.binding, operation: call.operation, outcome: call.outcome, durationMs: call.durationMs });\n } else {\n tally.storeCallsDropped = (tally.storeCallsDropped ?? 0) + 1;\n }\n}\nvar OUTBOUND_CALL_LOG_CAP = 16;\nfunction tallyOutboundCall(tally, call) {\n const calls = tally.outboundCalls ?? (tally.outboundCalls = []);\n if (calls.length < OUTBOUND_CALL_LOG_CAP) {\n calls.push({\n host: call.host,\n path: call.path,\n method: call.method,\n status: call.status,\n outcome: call.outcome,\n durationMs: call.durationMs,\n atMs: call.atMs,\n ...call.reason !== void 0 ? { reason: call.reason } : {}\n });\n } else {\n tally.outboundCallsDropped = (tally.outboundCallsDropped ?? 0) + 1;\n }\n}\nvar STORE_CALL_SINK_KEY = \"substrat.store-call-sink\";\nfunction distinct(values) {\n return [...new Set(values)];\n}\n\n// packages/kernel/dist/ulid.js\nvar B32 = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nvar MAX_ULID_TIME = 2 ** 48 - 1;\nvar ULID_SHAPE = /^[0-9A-HJKMNP-TV-Z]{26}$/;\nvar unencodable = (t) => `not an encodable ULID instant: ${t} (want 0..${MAX_ULID_TIME})`;\nfunction encodeTime(time) {\n let ts = \"\";\n let t = time;\n for (let i = 0; i < 10; i++) {\n ts = B32[t % 32] + ts;\n t = Math.floor(t / 32);\n }\n return ts;\n}\nfunction createUlid() {\n let lastTime = -1;\n const lastRand = new Array(16).fill(0);\n function freshRandom() {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n for (let i = 0; i < 16; i++)\n lastRand[i] = bytes[i] % 32;\n }\n function incrementRandom() {\n for (let i = 15; i >= 0; i--) {\n if (lastRand[i] < 31) {\n lastRand[i]++;\n return true;\n }\n lastRand[i] = 0;\n }\n return false;\n }\n const mint = ((now = Date.now()) => {\n if (!Number.isSafeInteger(now))\n throw new RangeError(unencodable(now));\n let time = now;\n if (time <= lastTime) {\n time = lastTime;\n if (!incrementRandom()) {\n time = lastTime + 1;\n freshRandom();\n }\n } else {\n freshRandom();\n }\n if (time < 0 || time > MAX_ULID_TIME)\n throw new RangeError(unencodable(time));\n lastTime = time;\n let r = \"\";\n for (const d of lastRand)\n r += B32[d];\n return encodeTime(time) + r;\n });\n mint.seedFrom = (id) => {\n const time = ulidTime(id);\n if (time < lastTime)\n return;\n const rand = [];\n for (const ch of id.slice(10))\n rand.push(B32.indexOf(ch));\n if (time === lastTime) {\n let ahead = false;\n for (let i = 0; i < 16; i++) {\n if (rand[i] !== lastRand[i]) {\n ahead = rand[i] > lastRand[i];\n break;\n }\n }\n if (!ahead)\n return;\n }\n lastTime = time;\n for (let i = 0; i < 16; i++)\n lastRand[i] = rand[i];\n };\n return mint;\n}\nvar processUlid = createUlid();\nfunction ulid(now = Date.now()) {\n return processUlid(now);\n}\nfunction ulidTime(id) {\n if (!ULID_SHAPE.test(id))\n throw new Error(`not a ULID: ${id}`);\n let t = 0;\n for (const ch of id.slice(0, 10))\n t = t * 32 + B32.indexOf(ch);\n if (t > MAX_ULID_TIME)\n throw new Error(`not a ULID: ${id}`);\n return t;\n}\n\n// packages/vertical-host/src/outbound-calls.ts\nvar EGRESS_REFUSAL_HEADER = \"x-substrat-egress\";\nvar STORE_CALL_HOST = \"store.substrat.internal\";\nvar REDACTED = \"[redacted]\";\nvar PATH_MAX = 200;\nvar WORDS = /^[a-z]{1,16}(?:[-_][a-z]{1,16}){0,3}$/;\nvar WORDS_WITH_EXTENSION = /^[a-z]{1,16}(?:[-_][a-z]{1,16}){0,3}\\.[a-z][a-z0-9]{0,4}$/;\nvar SEGMENT_MAX = 40;\nvar SMALL_INTEGER = /^[0-9]{1,10}$/;\nvar VERSION = /^v[0-9]{1,3}(?:\\.[0-9]{1,3}){0,2}$/;\nfunction keepsSegment(segment) {\n if (segment.length > SEGMENT_MAX) return false;\n return segment === \"\" || WORDS.test(segment) || WORDS_WITH_EXTENSION.test(segment) || SMALL_INTEGER.test(segment) || VERSION.test(segment);\n}\nfunction redactOutboundPath(pathname) {\n const path = pathname.split(\"/\").map((segment) => keepsSegment(segment) ? segment : REDACTED).join(\"/\");\n return path.length > PATH_MAX ? `${path.slice(0, PATH_MAX)}…` : path;\n}\nvar ERROR_CLASS = /^[A-Z][A-Za-z]{0,30}(?:Error|Exception)$/;\nfunction errorName(e) {\n const name = e?.name;\n return typeof name === \"string\" && ERROR_CLASS.test(name) ? name : \"Error\";\n}\nfunction answeredOutcome(response) {\n if (response.status === 403 && response.headers?.get?.(EGRESS_REFUSAL_HEADER) === \"refused\") return \"refused\";\n return response.status >= 400 ? \"http-error\" : \"ok\";\n}\nfunction rejectedOutcome(e) {\n const name = errorName(e);\n if (name === \"TimeoutError\") return { outcome: \"timeout\" };\n if (name === \"AbortError\") return { outcome: \"aborted\" };\n return { outcome: \"failed\", reason: name };\n}\nvar SINCE = /* @__PURE__ */ Symbol.for(\"substrat.outbound-since\");\nfunction sinceMap() {\n const g = globalThis;\n return g[SINCE] ??= /* @__PURE__ */ new WeakMap();\n}\nfunction markRequestStart(recording, started) {\n try {\n sinceMap().set(recording, started);\n } catch {\n }\n}\nfunction destinationOf(input, init) {\n const fromRequest = typeof input === \"object\" && input !== null && !(input instanceof URL);\n const raw = fromRequest ? input.url : input;\n let url;\n try {\n url = new URL(String(raw));\n } catch {\n return null;\n }\n const initMethod = init?.method;\n const requestMethod = fromRequest ? input.method : void 0;\n const method = typeof initMethod === \"string\" ? initMethod : typeof requestMethod === \"string\" ? requestMethod : \"GET\";\n return { url, method: method.toUpperCase().slice(0, 16) };\n}\nfunction record(recording, destination, startedAt, end) {\n try {\n const call = {\n host: destination.url.host.toLowerCase(),\n path: redactOutboundPath(destination.url.pathname),\n method: destination.method,\n status: end.status,\n outcome: end.outcome,\n durationMs: Math.max(0, Date.now() - startedAt),\n atMs: Math.max(0, startedAt - (sinceMap().get(recording) ?? startedAt)),\n ...end.reason !== void 0 ? { reason: end.reason } : {}\n };\n tallyOutboundCall(recording, call);\n } catch {\n }\n}\nvar WRAPPED = /* @__PURE__ */ Symbol.for(\"substrat.outbound-fetch\");\nvar IN_CALL = /* @__PURE__ */ Symbol.for(\"substrat.outbound-fetch.in-call\");\nfunction recordingFetch(original, current) {\n const wrapped = function fetch(input, init) {\n const g = globalThis;\n if (g[IN_CALL] === true) return original.call(globalThis, input, init);\n let recording;\n let destination = null;\n try {\n recording = current();\n if (recording) destination = destinationOf(input, init);\n } catch {\n recording = void 0;\n }\n if (!recording || !destination || destination.url.hostname.toLowerCase() === STORE_CALL_HOST) {\n return original.call(globalThis, input, init);\n }\n const rec = recording;\n const dest = destination;\n const startedAt = Date.now();\n let pending;\n g[IN_CALL] = true;\n try {\n pending = original.call(globalThis, input, init);\n } finally {\n g[IN_CALL] = false;\n }\n return pending.then(\n (response) => {\n let status = null;\n let outcome = \"failed\";\n try {\n status = response.status;\n outcome = answeredOutcome(response);\n } catch {\n }\n record(rec, dest, startedAt, { status, outcome });\n return response;\n },\n (e) => {\n let end = { outcome: \"failed\", reason: \"Error\" };\n try {\n end = rejectedOutcome(e);\n } catch {\n }\n record(rec, dest, startedAt, { status: null, ...end });\n throw e;\n }\n );\n };\n Object.defineProperty(wrapped, WRAPPED, { value: true });\n return wrapped;\n}\nfunction installOutboundRecorder(current) {\n try {\n const g = globalThis;\n const existing = g.fetch;\n if (typeof existing !== \"function\" || existing[WRAPPED]) return;\n g.fetch = recordingFetch(existing, current);\n } catch {\n }\n}\n\n// packages/contracts/dist/wire-headers.js\nvar PLATFORM_SECRET_HEADER = \"x-substrat-platform\";\nvar CONNECTOR_ATTACHMENT_META_MAX_BYTES = 8 * 1024;\n\n// packages/contracts/dist/wire-auth.js\nvar PlatformCallError = class extends Error {\n};\nfunction secretMatches(presented, expected) {\n const given = presented ?? \"\";\n let diff = given.length ^ expected.length | (given.length === 0 ? 1 : 0);\n for (let i = 0; i < expected.length; i++) {\n diff |= (i < given.length ? given.charCodeAt(i) : 0) ^ expected.charCodeAt(i);\n }\n return diff === 0;\n}\nfunction assertPlatformCall(headers, options = {}) {\n const { expectedSecret } = options;\n if (!expectedSecret) {\n throw new PlatformCallError(\"platform calls are not configured on this deployment\");\n }\n if (!secretMatches(headers.get(PLATFORM_SECRET_HEADER), expectedSecret)) {\n throw new PlatformCallError(\"not a platform call\");\n }\n}\n\n// packages/vertical-host/src/routed-node.ts\nvar ROUTED_ID = /^[0-9A-HJKMNP-TV-Z]{26}$/;\nvar RouterAssertionError = class extends Error {\n};\nfunction readRoutedNode(headers, options = {}) {\n const rawTenant = headers.get(\"x-substrat-tenant\");\n const rawScope = headers.get(\"x-substrat-scope\");\n if (!rawTenant && !rawScope) return null;\n const { expectedSecret, allowUnsigned: allowUnsigned2 = false } = options;\n if (expectedSecret) {\n if (!secretMatches(headers.get(\"x-substrat-router\"), expectedSecret)) {\n throw new RouterAssertionError(\"router assertion is not signed by a known router\");\n }\n } else if (!allowUnsigned2) {\n throw new RouterAssertionError(\n \"router assertion cannot be verified: this worker has no ROUTER_SECRET configured\"\n );\n }\n if (!rawTenant || !rawScope) {\n throw new RouterAssertionError(\"router assertion is incomplete\");\n }\n if (!ROUTED_ID.test(rawTenant) || !ROUTED_ID.test(rawScope)) {\n throw new RouterAssertionError(\"router assertion carries a malformed id\");\n }\n return {\n tenantId: rawTenant,\n scopeId: rawScope,\n surface: headers.get(\"x-substrat-surface\") ?? \"app\",\n verticalSlug: headers.get(\"x-substrat-vertical\")\n };\n}\n\n// packages/vertical-host/src/invocation-log.ts\nfunction builtinAsyncLocalStorage() {\n try {\n const proc = globalThis.process;\n const mod = proc?.getBuiltinModule?.(\"node:async_hooks\");\n return typeof mod?.AsyncLocalStorage === \"function\" ? mod.AsyncLocalStorage : void 0;\n } catch {\n return void 0;\n }\n}\nfunction storeCallSlot(provided) {\n try {\n const g = globalThis;\n const key = Symbol.for(STORE_CALL_SINK_KEY);\n const existing = g[key];\n if (typeof existing?.run === \"function\" && typeof existing.current === \"function\") return existing;\n const Als = provided ?? builtinAsyncLocalStorage();\n if (!Als) return void 0;\n const storage = new Als();\n const slot = {\n current() {\n const tally = storage.getStore()?.tally;\n return tally ? (call) => tallyStoreCall(tally, call) : void 0;\n },\n invocationId: () => storage.getStore()?.invocationId,\n run: (tally, fn, invocationId) => storage.run({ tally, invocationId }, fn),\n recording: () => storage.getStore()?.tally\n };\n g[key] = slot;\n return slot;\n } catch {\n return void 0;\n }\n}\nfunction currentRecording() {\n const slot = globalThis[Symbol.for(STORE_CALL_SINK_KEY)];\n return typeof slot?.recording === \"function\" ? slot.recording() : void 0;\n}\nfunction runRecording(stamp, started, provided, fn) {\n const slot = storeCallSlot(provided);\n if (!slot) return fn();\n try {\n const authSink = {\n record(check) {\n const record2 = currentRecording();\n if (record2) tallyAuthCheck(record2, check);\n }\n };\n globalThis[AUTH_DIAGNOSTICS_KEY] = authSink;\n } catch {\n }\n markRequestStart(stamp.record, started);\n installOutboundRecorder(currentRecording);\n return slot.run(stamp.record, fn, stamp.invocationId);\n}\nfunction versionIdOf(env) {\n const v = env?.SUBSTRAT_VERSION_ID;\n return typeof v === \"string\" && v.length > 0 ? v : null;\n}\nvar UPLOAD_LINK_LOG_SECRET_PREFIX = \"sbup_\";\nvar UPLOAD_LINK_SECRET_SEGMENT = /^(\\/api\\/attachment-uploads\\/[^/]+\\/[^/]+\\/)[^/]+/;\nvar SECRET_SHAPED_SEGMENT = new RegExp(`(^|/)${UPLOAD_LINK_LOG_SECRET_PREFIX}[^/]*`, \"g\");\nvar redactUploadLinkSecret = (pathname) => pathname.replace(UPLOAD_LINK_SECRET_SEGMENT, \"$1[redacted]\").replace(SECRET_SHAPED_SEGMENT, \"$1[redacted]\");\nfunction pathOf(url) {\n try {\n return redactUploadLinkSecret(new URL(url).pathname);\n } catch {\n return \"/\";\n }\n}\nvar STAMPS = /* @__PURE__ */ Symbol.for(\"substrat.invocation-stamp\");\nfunction stamps() {\n const g = globalThis;\n return g[STAMPS] ??= /* @__PURE__ */ new WeakMap();\n}\nfunction invocationStampOf(request) {\n return stamps().get(request);\n}\nfunction withRequestId(response, id) {\n const headers = response?.headers;\n try {\n headers?.set?.(REQUEST_ID_HEADER, id);\n return response;\n } catch {\n }\n try {\n const r = response;\n if (r.status === 101) return response;\n const copy = new Response(r.body, r);\n copy.headers.set(REQUEST_ID_HEADER, id);\n return copy;\n } catch {\n return response;\n }\n}\nfunction beginStamp(request, env, options) {\n const stamp = { invocationId: ulid(), record: {} };\n if (installedTraceSink()) markTraceStart(stamp.invocationId);\n const fieldCoverageId = armedFieldCoverageId(request.headers, env, options);\n if (fieldCoverageId) stamp.fieldCoverageId = fieldCoverageId;\n stamps().set(request, stamp);\n return stamp;\n}\nfunction armedFieldCoverageId(headers, env, options) {\n let id;\n try {\n id = headers.get(FIELD_COVERAGE_HEADER);\n } catch {\n return void 0;\n }\n if (id === null || !ROUTED_ID.test(id)) return void 0;\n return routedNodeOrNull(headers, env, options) !== null ? id : void 0;\n}\nfunction writeInvocationLine(stamp, done, options) {\n traceRequest(stamp, done);\n try {\n writeLineOrThrow(stamp, done, options);\n } catch (e) {\n try {\n console.log(JSON.stringify({ substrat: \"invocation-log-fault\", detail: String(e) }));\n } catch {\n }\n }\n}\nfunction traceRequest(stamp, done) {\n const sink = installedTraceSink();\n if (!sink) return;\n try {\n const { record: record2, invocationId } = stamp;\n const durationMs = Date.now() - done.started;\n const line = invocationLine({\n tenantId: \"\",\n scopeId: null,\n vertical: null,\n surface: null,\n method: done.request.method,\n path: pathOf(done.request.url),\n status: done.status,\n threw: done.threw,\n durationMs,\n invocationId,\n level: invocationLevelOf(done.status, done.threw, record2.problemCode),\n operation: record2.operation,\n problemCode: record2.problemCode,\n principalKind: record2.principalKind,\n ...record2.emitted ? { emitted: record2.emitted } : {},\n versionId: versionIdOf(done.env)\n });\n sink.head(invocationId, {\n startedAt: new Date(done.started).toISOString(),\n method: line.method,\n path: line.path,\n status: line.status,\n threw: line.threw,\n durationMs: line.durationMs,\n level: line.level,\n operation: line.operation,\n problemCode: line.problemCode,\n principalKind: line.principalKind,\n eventCount: line.eventCount,\n eventTypes: line.eventTypes,\n entities: line.entities,\n versionId: line.versionId,\n // Calls the record kept no room for: a truncated list must read as truncated.\n ...record2.outboundCallsDropped ? { stepsDropped: record2.outboundCallsDropped } : {}\n });\n for (const call of record2.outboundCalls ?? []) {\n sink.step(invocationId, {\n type: \"outbound\",\n atMs: call.atMs,\n durationMs: call.durationMs,\n host: call.host,\n path: call.path,\n method: call.method,\n status: call.status,\n outcome: call.outcome,\n ...call.reason ? { reason: call.reason } : {}\n });\n }\n for (const check of record2.authChecks ?? []) {\n sink.step(invocationId, { type: \"log\", atMs: durationMs, level: check.outcome === \"refused\" || check.outcome === \"error\" ? \"warn\" : \"info\", message: `auth ${check.stage}: ${check.outcome} (${check.reason})` });\n }\n if (record2.authChecksDropped) sink.head(invocationId, { stepsDropped: record2.authChecksDropped });\n sink.end(invocationId);\n forgetTraceStart(invocationId);\n } catch {\n }\n}\nfunction writeLineOrThrow(stamp, done, options) {\n const node = routedNodeOrNull(done.request.headers, done.env, options);\n if (!node) return;\n const { record: record2, invocationId } = stamp;\n const line = invocationLine({\n tenantId: node.tenantId,\n scopeId: node.scopeId,\n vertical: node.verticalSlug,\n surface: node.surface,\n method: done.request.method,\n path: pathOf(done.request.url),\n status: done.status,\n threw: done.threw,\n durationMs: Date.now() - done.started,\n invocationId,\n level: invocationLevelOf(done.status, done.threw, record2.problemCode),\n operation: record2.operation,\n problemCode: record2.problemCode,\n principalKind: record2.principalKind,\n ...record2.emitted ? { emitted: record2.emitted } : {},\n versionId: versionIdOf(done.env),\n ...record2.outputFields ? { outputFields: record2.outputFields } : {},\n ...stamp.fieldCoverageId ? { fieldCoverageId: stamp.fieldCoverageId } : {},\n ...record2.storeCalls && record2.storeCalls.length > 0 ? { storeCalls: record2.storeCalls } : {},\n ...record2.storeCallsDropped ? { storeCallsDropped: record2.storeCallsDropped } : {},\n ...record2.outboundCalls && record2.outboundCalls.length > 0 ? { outboundCalls: record2.outboundCalls } : {},\n ...record2.outboundCallsDropped ? { outboundCallsDropped: record2.outboundCallsDropped } : {},\n ...record2.authChecks?.length ? { authChecks: record2.authChecks } : {},\n ...record2.authChecksDropped ? { authChecksDropped: record2.authChecksDropped } : {}\n });\n console.log(JSON.stringify(line));\n}\nvar OTHER_HANDLERS = [\"scheduled\", \"queue\", \"email\", \"tail\", \"trace\", \"alarm\", \"test\"];\nfunction withInvocationLog(worker, options = {}) {\n const inner = worker?.fetch;\n if (typeof inner !== \"function\") return worker;\n const wrapped = {\n async fetch(request, env, ctx) {\n if (invocationStampOf(request)) return inner.call(worker, request, env, ctx);\n const started = Date.now();\n const stamp = beginStamp(request, env, options);\n let status = null;\n let threw = false;\n try {\n const response = withRequestId(\n await runRecording(stamp, started, options.asyncLocalStorage, () => inner.call(worker, request, env, ctx)),\n stamp.invocationId\n );\n status = response.status;\n handRecordToRouter(response, stamp.record, request, env, options);\n return response;\n } catch (e) {\n threw = true;\n throw e;\n } finally {\n writeInvocationLine(stamp, { request, env, status, threw, started }, options);\n }\n }\n };\n for (const name of OTHER_HANDLERS) {\n const h = worker[name];\n if (typeof h === \"function\") wrapped[name] = h.bind(worker);\n }\n return wrapped;\n}\nfunction handRecordToRouter(response, record2, request, env, options) {\n try {\n const value = encodeInvocationRecord(record2);\n if (value === null || !routedNodeOrNull(request.headers, env, options)) return;\n response.headers?.set?.(\n INVOCATION_RECORD_HEADER,\n value\n );\n } catch {\n }\n}\nfunction routedNodeOrNull(headers, env, options) {\n try {\n return readRoutedNode(headers, {\n expectedSecret: options.routerSecret?.(env),\n allowUnsigned: options.allowUnsigned?.(env) ?? false\n });\n } catch (e) {\n if (!(e instanceof RouterAssertionError)) console.log(JSON.stringify({ substrat: \"invocation-log-fault\", detail: String(e) }));\n return null;\n }\n}\n\n// packages/contracts/dist/scope-store-envelope.js\nfunction bytesToBase64Url(bytes) {\n let binary = \"\";\n for (const byte of bytes)\n binary += String.fromCharCode(byte);\n return btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replaceAll(\"=\", \"\");\n}\nfunction base64UrlToBytes(value) {\n if (!/^[A-Za-z0-9_-]+$/.test(value))\n return void 0;\n const padded = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\") + \"=\".repeat((4 - value.length % 4) % 4);\n try {\n const binary = atob(padded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++)\n bytes[i] = binary.charCodeAt(i);\n return bytes;\n } catch {\n return void 0;\n }\n}\nfunction copyBytes(bytes) {\n const copy = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(copy).set(bytes);\n return copy;\n}\nvar SMALL_ORDER_KEYS = [\n \"0000000000000000000000000000000000000000000000000000000000000000\",\n // y = 0, order 4\n \"0100000000000000000000000000000000000000000000000000000000000000\",\n // the identity, order 1\n \"26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05\",\n // order 8\n \"c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a\",\n // order 8\n \"ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\",\n // y = p - 1, order 2\n \"edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\",\n // y = p, a non-canonical 0\n \"eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\"\n // y = p + 1, a non-canonical identity\n];\nfunction isSmallOrderKey(bytes) {\n const unsigned = Uint8Array.from(bytes);\n unsigned[31] = unsigned[31] & 127;\n const hex = [...unsigned].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n return SMALL_ORDER_KEYS.includes(hex);\n}\nasync function scopeStoreKeyId(publicKey) {\n const bytes = base64UrlToBytes(publicKey);\n if (!bytes || bytes.length !== 32)\n throw new Error(\"a store public key is not 32 bytes of base64url\");\n if (isSmallOrderKey(bytes))\n throw new Error(\"a store public key is a small-order point\");\n const hash = await crypto.subtle.digest(\"SHA-256\", copyBytes(bytes));\n return bytesToBase64Url(new Uint8Array(hash).slice(0, 8));\n}\nfunction scopeStorePublicKeyProblem(key) {\n if (key.length === 0)\n return \"empty\";\n const bytes = base64UrlToBytes(key);\n if (bytes?.length !== 32)\n return \"length\";\n if (isSmallOrderKey(bytes))\n return \"small-order\";\n if (bytesToBase64Url(bytes) !== key)\n return \"non-canonical\";\n return void 0;\n}\nvar PUBLIC_KEY_PROBLEM = {\n empty: \"a store public key list is empty or has an empty entry\",\n length: \"a store public key is not 32 bytes of base64url\",\n \"small-order\": \"a store public key is a small-order point\",\n \"non-canonical\": \"a store public key is not canonical base64url\"\n};\nfunction parseScopeStorePublicKeys(text) {\n const keys = text.split(\",\").map((key) => key.trim());\n if (keys.some((key) => key.length === 0))\n throw new Error(PUBLIC_KEY_PROBLEM.empty);\n const seen = /* @__PURE__ */ new Set();\n for (const key of keys) {\n const problem2 = scopeStorePublicKeyProblem(key);\n if (problem2)\n throw new Error(PUBLIC_KEY_PROBLEM[problem2]);\n if (seen.has(key))\n throw new Error(\"a store public key is listed twice\");\n seen.add(key);\n }\n return keys;\n}\nasync function verifyScopeStoreEnvelope(publicKey, canonical, signature) {\n const keyBytes = base64UrlToBytes(publicKey);\n const sigBytes = base64UrlToBytes(signature);\n if (!keyBytes || !sigBytes || sigBytes.length !== 64)\n return false;\n try {\n const key = await crypto.subtle.importKey(\"raw\", copyBytes(keyBytes), { name: \"Ed25519\" }, false, [\"verify\"]);\n return await crypto.subtle.verify(\"Ed25519\", key, copyBytes(sigBytes), new TextEncoder().encode(canonical));\n } catch {\n return false;\n }\n}\n\n// packages/contracts/dist/wire-signing.js\nvar WIRE_ENVELOPE_VERSION = 1;\nvar WIRE_ENVELOPE_TAG = `substrat-wire/${WIRE_ENVELOPE_VERSION}`;\nvar WIRE_ENVELOPE_HEADER = \"x-substrat-wire-envelope\";\nvar WIRE_SIGNATURE_HEADER = \"x-substrat-wire-signature\";\nvar WIRE_ENVELOPE_MAX_LIFETIME_SECONDS = 120;\nvar WIRE_CLOCK_SKEW_SECONDS = 30;\nvar SHAPES = {\n router: {\n // An end user's request the router resolved: always a tenant, a scope and a surface. The\n // body is a stream the router does not buffer, so a route binds none.\n route: { scope: \"required\", surface: \"required\", vertical: \"optional\", body: \"absent\" },\n // An internal call the router makes itself, such as a peer invocation.\n call: { scope: \"optional\", surface: \"absent\", vertical: \"optional\", body: \"required\" }\n },\n platform: {\n call: { scope: \"optional\", surface: \"absent\", vertical: \"absent\", body: \"required\" }\n }\n};\nfunction wireEnvelopeShape(iss, kind) {\n const byKind = Object.hasOwn(SHAPES, iss) ? SHAPES[iss] : void 0;\n return byKind && Object.hasOwn(byKind, kind) ? byKind[kind] : void 0;\n}\nvar LINES = 15;\nvar ULID = /^[0-9A-HJKMNP-TV-Z]{26}$/;\nvar METHOD = /^[!#$%&'*+.^_`|~0-9A-Z-]{1,32}$/;\nvar DIGEST = /^[0-9a-f]{64}$/;\nvar SECONDS = /^(0|[1-9]\\d{0,14})$/;\nvar CONTROL = /[\\u0000-\\u001f\\u007f]/;\nvar LONE_SURROGATE = /[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?<![\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]/;\nvar MAX_TEXT = 255;\nvar isText = (value) => value.length <= MAX_TEXT && !CONTROL.test(value) && !LONE_SURROGATE.test(value);\nvar isWireAudience = (value) => value !== \"\" && isText(value);\nfunction isCanonicalBase64Url(text, length) {\n const bytes = base64UrlToBytes(text);\n return bytes?.length === length && bytesToBase64Url(bytes) === text;\n}\nfunction admits(presence, value, valid) {\n if (value === \"\")\n return presence !== \"required\";\n return presence !== \"absent\" && valid(value);\n}\nfunction parseWireEnvelope(canonical) {\n const lines = canonical.split(\"\\n\");\n if (lines.length !== LINES)\n return void 0;\n const [tag, iss, kind, kid, aud, tenantId, scopeId, surface, vertical2, method, targetDigest, bodyDigest, iat, exp, nonce] = lines;\n if (tag !== WIRE_ENVELOPE_TAG)\n return void 0;\n const shape = wireEnvelopeShape(iss, kind);\n if (!shape)\n return void 0;\n if (!isCanonicalBase64Url(kid, 8) || !isCanonicalBase64Url(nonce, 16))\n return void 0;\n if (!isWireAudience(aud))\n return void 0;\n if (tenantId === \"\" !== (scopeId === \"\"))\n return void 0;\n if (!admits(shape.scope, tenantId, (id) => ULID.test(id)) || !admits(shape.scope, scopeId, (id) => ULID.test(id)))\n return void 0;\n if (!admits(shape.surface, surface, isText) || !admits(shape.vertical, vertical2, isText))\n return void 0;\n if (!METHOD.test(method) || !DIGEST.test(targetDigest) || !admits(shape.body, bodyDigest, (d) => DIGEST.test(d)))\n return void 0;\n if (!SECONDS.test(iat) || !SECONDS.test(exp))\n return void 0;\n const orNull = (value) => value === \"\" ? null : value;\n return {\n v: 1,\n iss,\n kind,\n kid,\n aud,\n tenantId: orNull(tenantId),\n scopeId: orNull(scopeId),\n surface: orNull(surface),\n vertical: orNull(vertical2),\n method,\n targetDigest,\n bodyDigest: orNull(bodyDigest),\n iat: Number(iat),\n exp: Number(exp),\n nonce\n };\n}\nfunction decodeWireEnvelope(header) {\n const bytes = base64UrlToBytes(header);\n if (!bytes)\n return void 0;\n let canonical;\n try {\n canonical = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(bytes);\n } catch {\n return void 0;\n }\n const claims = parseWireEnvelope(canonical);\n return claims ? { canonical, claims } : void 0;\n}\nfunction bytesOf(data) {\n if (typeof data === \"string\")\n return new TextEncoder().encode(data);\n const view = ArrayBuffer.isView(data) ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength) : new Uint8Array(data);\n return view.buffer instanceof ArrayBuffer ? view : view.slice();\n}\nasync function wireDigest(data) {\n const hash = await crypto.subtle.digest(\"SHA-256\", bytesOf(data));\n return [...new Uint8Array(hash)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\nfunction wireRequestBinding(request) {\n const url = new URL(request.url);\n return { method: request.method.toUpperCase(), target: `${url.pathname}${url.search}` };\n}\nfunction lifetimeAdmitted(iat, exp) {\n return exp > iat && exp - iat <= WIRE_ENVELOPE_MAX_LIFETIME_SECONDS;\n}\nvar PREPARED = /* @__PURE__ */ new WeakMap();\nasync function wireVerificationKeys(config) {\n const listed = (text) => text?.trim() ? parseScopeStorePublicKeys(text) : [];\n const router = listed(config.router);\n const platform = listed(config.platform);\n if (router.some((key) => platform.includes(key)))\n throw new Error(\"a wire public key is listed for both issuers\");\n const byKid = async (keys2) => new Map(await Promise.all(keys2.map(async (key) => [await scopeStoreKeyId(key), key])));\n const own = Object.freeze({ router: await byKid(router), platform: await byKid(platform) });\n const keys = Object.freeze({ router: new Map(own.router), platform: new Map(own.platform) });\n PREPARED.set(keys, own);\n return keys;\n}\nvar WIRE_REFUSED = Object.freeze({ ok: false });\nasync function verifyWireEnvelope(input) {\n const refuse = (reason) => {\n try {\n void Promise.resolve(input.onRefusal?.(reason)).catch(() => {\n });\n } catch {\n }\n return WIRE_REFUSED;\n };\n const { expected, keys, nowSeconds } = input;\n const own = PREPARED.get(keys);\n if (!own)\n throw new TypeError(\"verifyWireEnvelope takes the key set wireVerificationKeys built\");\n const replay = expected.kind === \"call\" ? expected.replay : \"none\";\n if (replay !== \"none\" && typeof replay?.claim !== \"function\") {\n throw new TypeError(\"a call's expectation states its replay policy: 'none' or a nonce cache\");\n }\n if (replay !== \"none\" && expected.scopeId == null) {\n throw new TypeError(\"a call that keeps nonces pins the scope whose object holds them\");\n }\n if (replay !== \"none\" && typeof input.clockSeconds !== \"function\") {\n throw new TypeError(\"a call that keeps nonces takes a clockSeconds function to time its claim\");\n }\n const header = input.headers.get(WIRE_ENVELOPE_HEADER);\n const signature = input.headers.get(WIRE_SIGNATURE_HEADER);\n if (!header || !signature)\n return refuse(\"missing\");\n const decoded = decodeWireEnvelope(header);\n if (!decoded)\n return refuse(\"malformed\");\n const { canonical, claims } = decoded;\n if (claims.iss !== expected.iss)\n return refuse(\"issuer\");\n if (claims.kind !== expected.kind)\n return refuse(\"kind\");\n const publicKey = own[claims.iss].get(claims.kid);\n if (!publicKey)\n return refuse(\"kid\");\n if (!await verifyScopeStoreEnvelope(publicKey, canonical, signature))\n return refuse(\"signature\");\n if (claims.aud !== expected.aud)\n return refuse(\"audience\");\n if (!lifetimeAdmitted(claims.iat, claims.exp))\n return refuse(\"lifetime\");\n if (!(nowSeconds >= claims.iat - WIRE_CLOCK_SKEW_SECONDS))\n return refuse(\"not-yet-valid\");\n if (!(nowSeconds <= claims.exp + WIRE_CLOCK_SKEW_SECONDS))\n return refuse(\"expired\");\n if (claims.method !== expected.method)\n return refuse(\"method\");\n if (claims.targetDigest !== await wireDigest(expected.target))\n return refuse(\"target\");\n if (expected.kind === \"call\") {\n const body = typeof expected.body === \"function\" ? await expected.body() : expected.body;\n if (body == null || claims.bodyDigest !== await wireDigest(body))\n return refuse(\"body\");\n }\n if (expected.tenantId !== void 0 && claims.tenantId !== expected.tenantId)\n return refuse(\"scope\");\n if (expected.scopeId !== void 0 && claims.scopeId !== expected.scopeId)\n return refuse(\"scope\");\n if (replay !== \"none\") {\n const until = claims.exp + WIRE_CLOCK_SKEW_SECONDS;\n const claimedAt = input.clockSeconds();\n if (!Number.isFinite(claimedAt) || claimedAt < 0) {\n throw new TypeError(\"clockSeconds read something other than a time in seconds\");\n }\n if (!(claimedAt <= until))\n return refuse(\"claim-after-until\");\n if (await replay.claim(claims.nonce, until) !== true)\n return refuse(\"replay\");\n }\n return { ok: true, claims };\n}\nvar WIRE_ROUTER_KEYS_VAR = \"SUBSTRAT_WIRE_ROUTER_KEYS\";\nvar WIRE_PLATFORM_KEYS_VAR = \"SUBSTRAT_WIRE_PLATFORM_KEYS\";\nvar WIRE_AUDIENCE_VAR = \"SUBSTRAT_WIRE_AUDIENCE\";\nvar WIRE_STATE_VAR = \"SUBSTRAT_WIRE_STATE\";\nfunction wireStateOf(config) {\n const listed = (value) => typeof value === \"string\" && value.trim() !== \"\";\n if (!listed(config.routerKeys) && !listed(config.platformKeys))\n return \"legacy-only\";\n return config.state === \"legacy-only\" || config.state === \"signed-only\" ? config.state : \"dual\";\n}\nvar ROUTE_ENDPOINT = Object.freeze({ kind: \"route\", issuers: Object.freeze([\"router\"]) });\nvar CALL_ENDPOINT = Object.freeze({ kind: \"call\", issuers: Object.freeze([\"platform\"]) });\nvar PEER_INVOKE_ENDPOINT = Object.freeze({ kind: \"call\", issuers: Object.freeze([\"platform\", \"router\"]) });\nfunction tryDecode(path, decoder) {\n try {\n return decoder(path);\n } catch {\n return path.replace(/(?:%[0-9A-Fa-f]{2})+/g, (run) => {\n try {\n return decoder(run);\n } catch {\n return run;\n }\n });\n }\n}\nfunction collapsed(path) {\n const segments = [];\n for (const segment of path.split(\"/\")) {\n if (segment === \"..\")\n segments.pop();\n else if (segment !== \"\" && segment !== \".\")\n segments.push(segment);\n }\n return `/${segments.join(\"/\")}`;\n}\nvar INTERNAL = /^\\/internal(?:\\/|$)/i;\nfunction wireEndpoint(pathname) {\n const routed = tryDecode(pathname.includes(\"%25\") ? pathname.replace(/%25/g, \"%2525\") : pathname, decodeURI);\n const forms = [pathname, routed, tryDecode(pathname, decodeURIComponent)];\n if (!forms.some((form) => INTERNAL.test(form) || INTERNAL.test(collapsed(form))))\n return ROUTE_ENDPOINT;\n return pathname === \"/internal/vertical-invoke\" ? PEER_INVOKE_ENDPOINT : CALL_ENDPOINT;\n}\nvar WIRE_REPLAY_FREE_CALLS = Object.freeze([\n \"/internal/query\",\n \"/internal/redrain-count\",\n \"/internal/lifecycle-flow\",\n \"/internal/operation-series\",\n \"/internal/connector-grants\"\n]);\nvar SAFE_METHODS = /* @__PURE__ */ new Set([\"GET\", \"HEAD\", \"OPTIONS\"]);\nfunction wireReplayOf(method, pathname) {\n return SAFE_METHODS.has(method.toUpperCase()) || WIRE_REPLAY_FREE_CALLS.includes(pathname) ? \"none\" : \"nonce\";\n}\nvar UNSIGNED = Object.freeze([\n [FIELD_COVERAGE_HEADER, \"route\", (value) => ULID.test(value)],\n [PARENT_REQUEST_ID_HEADER, \"call\", (value) => parentRequestIdOf(value) !== void 0]\n]);\nvar WIRE_UNSIGNED_HEADERS = Object.freeze(Object.fromEntries(UNSIGNED.map(([name, kind]) => [name, kind])));\nfunction wireUnsignedHeadersOf(kind, headers) {\n const kept = [];\n for (const [name, on, valid] of UNSIGNED) {\n const value = on === kind ? headers.get(name) : null;\n if (value !== null && valid(value))\n kept.push([name, value]);\n }\n return kept;\n}\n\n// packages/control-plane-api/platform-entry/wire-gate.ts\nvar WIRE_CLAIM_TIMEOUT_MS = 1e3;\nvar WIRE_REFUSAL_BODY = '{\"type\":\"about:blank\",\"title\":\"Unauthorized\",\"status\":401,\"detail\":\"unauthorized\",\"error\":\"unauthorized\"}';\nvar WIRE_FAULT_BODY = '{\"type\":\"about:blank\",\"title\":\"Service unavailable\",\"status\":503,\"detail\":\"this request could not be verified\",\"error\":\"this request could not be verified\"}';\nvar problem = (body, status) => new Response(body, { status, headers: { \"content-type\": \"application/problem+json\" } });\nvar ASSERTED_PREFIX = \"x-substrat-\";\nvar TENANT = \"x-substrat-tenant\";\nvar SCOPE = \"x-substrat-scope\";\nvar SURFACE = \"x-substrat-surface\";\nvar VERTICAL = \"x-substrat-vertical\";\nvar ROUTER_CREDENTIAL = \"x-substrat-router\";\nvar GateFault = class extends Error {\n constructor(fault) {\n super(fault);\n this.fault = fault;\n }\n fault;\n};\nfunction claimedThrough(reach, timeoutMs) {\n return {\n async claim(nonce, until) {\n let cache;\n try {\n cache = reach();\n } catch {\n throw new GateFault(\"nonce-store\");\n }\n if (cache == null) throw new GateFault(\"no-nonce-store\");\n let timer;\n try {\n return await Promise.race([\n cache.claim(nonce, until),\n new Promise((_, reject) => {\n timer = setTimeout(() => reject(new Error(\"the nonce store did not answer in time\")), timeoutMs);\n })\n ]);\n } catch {\n throw new GateFault(\"nonce-store\");\n } finally {\n clearTimeout(timer);\n }\n }\n };\n}\nvar builtKeys;\nfunction keysFor(router, platform) {\n const text = `${router}\n${platform}`;\n if (builtKeys?.text !== text) builtKeys = { text, keys: wireVerificationKeys({ router, platform }) };\n return builtKeys.keys;\n}\nvar textOf = (value) => typeof value === \"string\" ? value : \"\";\nfunction stateOf(env) {\n const e = env ?? {};\n return wireStateOf({ routerKeys: e[WIRE_ROUTER_KEYS_VAR], platformKeys: e[WIRE_PLATFORM_KEYS_VAR], state: e[WIRE_STATE_VAR] });\n}\nfunction legacyOf(request, call, env, options) {\n if (call) {\n let credential = request.headers.has(PLATFORM_SECRET_HEADER) ? \"invalid\" : \"absent\";\n try {\n assertPlatformCall(request.headers, { expectedSecret: options.platformSecret(env) });\n credential = \"valid\";\n } catch {\n }\n return { credential, identity: null };\n }\n try {\n const node = options.routedNode(request.headers, env);\n return node ? { credential: \"valid\", identity: node } : { credential: \"absent\", identity: null };\n } catch {\n return { credential: \"invalid\", identity: null };\n }\n}\nvar sameIdentity = (legacy, claims) => legacy.tenantId === claims.tenantId && legacy.scopeId === claims.scopeId && legacy.surface === claims.surface && legacy.verticalSlug === claims.vertical;\nvar servedAs = (who) => ({\n tenantId: who?.tenantId ?? null,\n scopeId: who?.scopeId ?? null\n});\nfunction withWireGate(worker, options) {\n const inner = worker?.fetch;\n if (typeof inner !== \"function\") return worker;\n const clock = options.clock ?? Date.now;\n const seconds = () => Math.floor(clock() / 1e3);\n const timeoutMs = options.claimTimeoutMs ?? WIRE_CLAIM_TIMEOUT_MS;\n const log = options.log ?? ((line) => console.log(line));\n const serve = (request, env, ctx) => inner.call(worker, request, env, ctx);\n async function judged(request, env, ctx, state) {\n const nowSeconds = seconds();\n const e = env;\n const aud = textOf(e[WIRE_AUDIENCE_VAR]);\n const { method, target } = wireRequestBinding(request);\n const pathname = new URL(request.url).pathname;\n const endpoint = wireEndpoint(pathname);\n const call = endpoint.kind === \"call\";\n const claimed = call ? decodeWireEnvelope(request.headers.get(WIRE_ENVELOPE_HEADER) ?? \"\")?.claims : void 0;\n const issuer = claimed && endpoint.issuers.includes(claimed.iss) ? claimed.iss : endpoint.issuers[0];\n let claims;\n const line = (outcome, legacy2, extra = {}) => {\n const v = e[\"SUBSTRAT_VERSION_ID\"];\n const record2 = {\n substrat: \"wire\",\n state,\n issuer: claims?.iss ?? (endpoint.issuers.length === 1 ? endpoint.issuers[0] : null),\n kind: endpoint.kind,\n outcome,\n reason: null,\n fault: null,\n legacy: legacy2,\n tenantId: null,\n scopeId: null,\n versionId: typeof v === \"string\" && v.length > 0 ? v : null,\n ...extra\n };\n try {\n log(JSON.stringify(record2));\n } catch {\n }\n };\n const faulted = (fault, legacy2) => {\n line(\"fault\", legacy2, { fault });\n return problem(WIRE_FAULT_BODY, 503);\n };\n const legacy = legacyOf(request, call, env, options);\n let downstream = request;\n const staticFault = (fault, extra = {}) => {\n if (state !== \"dual\") return faulted(fault, legacy.credential);\n line(\"fault\", legacy.credential, { fault, ...extra });\n return serve(downstream, env, ctx);\n };\n let keys;\n try {\n keys = await keysFor(textOf(e[WIRE_ROUTER_KEYS_VAR]), textOf(e[WIRE_PLATFORM_KEYS_VAR]));\n } catch {\n return staticFault(\"keys\", servedAs(legacy.identity));\n }\n const readBody = async () => {\n if (request.body === null) return \"\";\n let body;\n try {\n body = await request.arrayBuffer();\n } catch {\n return null;\n }\n downstream = new Request(request, { body });\n return body;\n };\n const keepsNonces = call && wireReplayOf(method, pathname) === \"nonce\";\n const pinned = keepsNonces ? claimed?.scopeId ?? void 0 : void 0;\n const reach = options.nonceCache;\n const store = pinned !== void 0 && reach ? claimedThrough(() => reach(env, pinned), timeoutMs) : void 0;\n const expected = call ? {\n iss: issuer,\n kind: \"call\",\n aud,\n method,\n target,\n body: readBody,\n replay: store ?? \"none\",\n scopeId: store ? pinned : void 0\n } : { iss: \"router\", kind: \"route\", aud, method, target };\n let reason = null;\n let noStore = !store;\n try {\n const verdict = await verifyWireEnvelope({\n headers: request.headers,\n keys,\n expected,\n nowSeconds,\n clockSeconds: seconds,\n onRefusal: (why) => {\n reason = why;\n }\n });\n if (verdict.ok) claims = verdict.claims;\n } catch (error) {\n if (error instanceof GateFault && error.fault === \"no-nonce-store\") {\n claims = claimed;\n noStore = true;\n } else {\n return faulted(error instanceof GateFault ? error.fault : \"verifier\", legacy.credential);\n }\n }\n if (claims && keepsNonces && noStore) {\n return staticFault(\"no-nonce-store\", servedAs(legacy.identity ?? claims));\n }\n const mismatched = !!claims && !!legacy.identity && !sameIdentity(legacy.identity, claims);\n if (state === \"dual\" && legacy.credential === \"valid\") {\n const outcome = !claims ? \"legacy-accepted\" : mismatched ? \"dual-mismatch\" : \"signed-accepted\";\n line(outcome, \"valid\", { reason, ...servedAs(legacy.identity ?? claims ?? null) });\n return serve(downstream, env, ctx);\n }\n if (!claims) {\n line(\"refused\", legacy.credential, { reason });\n if (state === \"dual\") return serve(downstream, env, ctx);\n return problem(WIRE_REFUSAL_BODY, 401);\n }\n let proven;\n try {\n proven = provenAs(downstream, claims, env, options);\n } catch {\n return faulted(\"verifier\", legacy.credential);\n }\n line(mismatched ? \"dual-mismatch\" : \"signed-accepted\", legacy.credential, servedAs(claims));\n return serve(proven, env, ctx);\n }\n return {\n ...worker,\n fetch(request, env, ctx) {\n const state = stateOf(env);\n if (state === \"legacy-only\") return serve(request, env, ctx);\n return judged(request, env, ctx, state);\n }\n };\n}\nfunction provenAs(request, claims, env, options) {\n const headers = new Headers(request.headers);\n for (const name of [...headers.keys()]) if (name.startsWith(ASSERTED_PREFIX)) headers.delete(name);\n for (const [name, value] of wireUnsignedHeadersOf(claims.kind, request.headers)) headers.set(name, value);\n const put = (name, value) => {\n if (value) headers.set(name, value);\n };\n if (claims.kind === \"route\") {\n put(TENANT, claims.tenantId);\n put(SCOPE, claims.scopeId);\n put(SURFACE, claims.surface);\n put(VERTICAL, claims.vertical);\n put(ROUTER_CREDENTIAL, options.routerSecret(env));\n } else {\n put(VERTICAL, claims.vertical);\n put(PLATFORM_SECRET_HEADER, options.platformSecret(env));\n }\n return new Request(request, { headers });\n}\n\n// substrat-platform-entry.ts\nimport * as vertical from \"__SUBSTRAT_VERTICAL_ENTRY__\";\nexport * from \"__SUBSTRAT_VERTICAL_ENTRY__\";\nvar routerSecret = (env) => env.ROUTER_SECRET;\nvar allowUnsigned = (env) => env.ALLOW_DEV_NODE === \"true\";\nvar substrat_platform_entry_default = withWireGate(\n withInvocationLog(vertical.default, { routerSecret, allowUnsigned, asyncLocalStorage: AsyncLocalStorage }),\n {\n routedNode: (headers, env) => readRoutedNode(headers, { expectedSecret: routerSecret(env), allowUnsigned: allowUnsigned(env) }),\n routerSecret,\n platformSecret: (env) => env.PLATFORM_SECRET\n }\n);\nexport {\n substrat_platform_entry_default as default\n};\n";
|
|
12
|
+
/** The entry itself — 49661 bytes of ESM. */
|
|
13
|
+
export const PLATFORM_ENTRY_SOURCE = "// substrat-platform-entry.ts\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\n// packages/contracts/dist/auth-diagnostics.js\nvar AUTH_CHECK_STAGES = [\"bearer\", \"session\", \"mcp-audience\", \"mcp-caller\"];\nvar AUTH_CHECK_OUTCOMES = [\"accepted\", \"refused\", \"absent\", \"error\"];\nvar AUTH_CHECK_REASONS = [\n \"verified\",\n \"session-invalid\",\n \"credential-missing\",\n \"discovery-failed\",\n \"key-resolution-failed\",\n \"token-expired\",\n \"token-not-active\",\n \"issuer-invalid\",\n \"audience-invalid\",\n \"claims-invalid\",\n \"signature-invalid\",\n \"token-invalid\",\n \"verification-failed\",\n \"subject-missing\",\n \"assertion-not-access-token\",\n \"delegation-refused\",\n \"token-not-for-app\",\n \"resource-mismatch\",\n \"caller-resolved\",\n \"caller-refused\",\n \"caller-error\"\n];\nvar AUTH_CHECK_CAP = 16;\nvar AUTH_DIAGNOSTICS_KEY = /* @__PURE__ */ Symbol.for(\"substrat.auth-diagnostics\");\nfunction authCheckOf(value) {\n if (!value || typeof value !== \"object\")\n return void 0;\n const v = value;\n if (!AUTH_CHECK_STAGES.includes(v.stage) || !AUTH_CHECK_OUTCOMES.includes(v.outcome) || !AUTH_CHECK_REASONS.includes(v.reason))\n return void 0;\n return { stage: v.stage, outcome: v.outcome, reason: v.reason };\n}\nfunction tallyAuthCheck(record2, value) {\n const check = authCheckOf(value);\n if (!check)\n return;\n const checks = record2.authChecks ??= [];\n if (checks.length < AUTH_CHECK_CAP)\n checks.push(check);\n else\n record2.authChecksDropped = (record2.authChecksDropped ?? 0) + 1;\n}\n\n// packages/contracts/dist/invocation-record.js\nvar INVOCATION_RECORD_HEADER = \"x-substrat-invocation-record\";\nvar REQUEST_ID_HEADER = \"x-substrat-request-id\";\nvar PARENT_REQUEST_ID_HEADER = \"x-substrat-parent-request-id\";\nvar REQUEST_ID_SHAPE = /^[0-9A-HJKMNP-TV-Z]{26}$/;\nfunction parentRequestIdOf(value) {\n return typeof value === \"string\" && REQUEST_ID_SHAPE.test(value) ? value : void 0;\n}\nvar INVOCATION_RECORD_FIELD_MAX = 128;\nvar FIELDS = [\"operation\", \"problemCode\", \"principalKind\"];\nfunction encodeInvocationRecord(record2) {\n const params = new URLSearchParams();\n for (const key of FIELDS) {\n const v = record2[key];\n if (typeof v === \"string\" && v !== \"\")\n params.set(key, v.slice(0, INVOCATION_RECORD_FIELD_MAX));\n }\n const value = params.toString();\n return value === \"\" ? null : value;\n}\nvar FIELD_COVERAGE_HEADER = \"x-substrat-field-coverage\";\nfunction invocationLevelOf(status, threw, problemCode) {\n if (threw || status === null || status >= 500)\n return \"error\";\n if (status >= 400)\n return \"warn\";\n if (problemCode)\n return \"warn\";\n return \"info\";\n}\n\n// packages/contracts/dist/trace-sink.js\nvar TRACE_SINK_KEY = /* @__PURE__ */ Symbol.for(\"substrat.trace-sink\");\nvar STARTS_KEY = /* @__PURE__ */ Symbol.for(\"substrat.trace-starts\");\nfunction starts() {\n const slots = globalThis;\n return slots[STARTS_KEY] ??= /* @__PURE__ */ new Map();\n}\nfunction markTraceStart(invocationId, at = performance.now()) {\n const map = starts();\n if (!map.has(invocationId))\n map.set(invocationId, at);\n}\nfunction forgetTraceStart(invocationId) {\n starts().delete(invocationId);\n}\nfunction installedTraceSink() {\n return globalThis[TRACE_SINK_KEY];\n}\n\n// packages/kernel/dist/invocation-line.js\nfunction invocationLine(f) {\n const emitted = f.emitted;\n return {\n substrat: \"invocation\",\n ...f.kind ? { kind: f.kind } : {},\n tenantId: f.tenantId,\n scopeId: f.scopeId,\n vertical: f.vertical ?? null,\n surface: f.surface ?? null,\n method: f.method ?? null,\n path: f.path ?? null,\n status: f.status ?? null,\n threw: f.threw,\n durationMs: f.durationMs,\n invocationId: f.invocationId,\n level: f.level,\n operation: f.operation ?? null,\n problemCode: f.problemCode ?? null,\n principalKind: f.principalKind ?? null,\n eventCount: emitted ? emitted.total : null,\n eventTypes: emitted ? distinct(emitted.events.map((e) => e.type)) : [],\n entities: emitted && f.withEntities !== false ? distinct(emitted.events.map((e) => e.entity)) : [],\n versionId: f.versionId ?? null,\n ...f.outputFields ? { outputFields: f.outputFields, ...f.fieldCoverageId ? { fieldCoverageId: f.fieldCoverageId } : {} } : {},\n ...f.storeCalls && f.storeCalls.length > 0 ? { storeCalls: f.storeCalls } : {},\n ...f.storeCallsDropped ? { storeCallsDropped: f.storeCallsDropped } : {},\n ...f.outboundCalls && f.outboundCalls.length > 0 ? { outboundCalls: f.outboundCalls } : {},\n ...f.outboundCallsDropped ? { outboundCallsDropped: f.outboundCallsDropped } : {},\n ...f.authChecks?.length ? { authChecks: f.authChecks } : {},\n ...f.authChecksDropped ? { authChecksDropped: f.authChecksDropped } : {},\n ...f.parentInvocationId ? { parentInvocationId: f.parentInvocationId, ...f.parentScopeId ? { parentScopeId: f.parentScopeId } : {} } : {},\n ...f.async ?? {}\n };\n}\nvar STORE_CALL_LOG_CAP = 16;\nfunction tallyStoreCall(tally, call) {\n const calls = tally.storeCalls ?? (tally.storeCalls = []);\n if (calls.length < STORE_CALL_LOG_CAP) {\n calls.push({ binding: call.binding, operation: call.operation, outcome: call.outcome, durationMs: call.durationMs });\n } else {\n tally.storeCallsDropped = (tally.storeCallsDropped ?? 0) + 1;\n }\n}\nvar OUTBOUND_CALL_LOG_CAP = 16;\nfunction tallyOutboundCall(tally, call) {\n const calls = tally.outboundCalls ?? (tally.outboundCalls = []);\n if (calls.length < OUTBOUND_CALL_LOG_CAP) {\n calls.push({\n host: call.host,\n path: call.path,\n method: call.method,\n status: call.status,\n outcome: call.outcome,\n durationMs: call.durationMs,\n atMs: call.atMs,\n ...call.reason !== void 0 ? { reason: call.reason } : {}\n });\n } else {\n tally.outboundCallsDropped = (tally.outboundCallsDropped ?? 0) + 1;\n }\n}\nvar STORE_CALL_SINK_KEY = \"substrat.store-call-sink\";\nfunction distinct(values) {\n return [...new Set(values)];\n}\n\n// packages/kernel/dist/ulid.js\nvar B32 = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nvar MAX_ULID_TIME = 2 ** 48 - 1;\nvar ULID_SHAPE = /^[0-9A-HJKMNP-TV-Z]{26}$/;\nvar unencodable = (t) => `not an encodable ULID instant: ${t} (want 0..${MAX_ULID_TIME})`;\nfunction encodeTime(time) {\n let ts = \"\";\n let t = time;\n for (let i = 0; i < 10; i++) {\n ts = B32[t % 32] + ts;\n t = Math.floor(t / 32);\n }\n return ts;\n}\nfunction createUlid() {\n let lastTime = -1;\n const lastRand = new Array(16).fill(0);\n function freshRandom() {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n for (let i = 0; i < 16; i++)\n lastRand[i] = bytes[i] % 32;\n }\n function incrementRandom() {\n for (let i = 15; i >= 0; i--) {\n if (lastRand[i] < 31) {\n lastRand[i]++;\n return true;\n }\n lastRand[i] = 0;\n }\n return false;\n }\n const mint = ((now = Date.now()) => {\n if (!Number.isSafeInteger(now))\n throw new RangeError(unencodable(now));\n let time = now;\n if (time <= lastTime) {\n time = lastTime;\n if (!incrementRandom()) {\n time = lastTime + 1;\n freshRandom();\n }\n } else {\n freshRandom();\n }\n if (time < 0 || time > MAX_ULID_TIME)\n throw new RangeError(unencodable(time));\n lastTime = time;\n let r = \"\";\n for (const d of lastRand)\n r += B32[d];\n return encodeTime(time) + r;\n });\n mint.seedFrom = (id) => {\n const time = ulidTime(id);\n if (time < lastTime)\n return;\n const rand = [];\n for (const ch of id.slice(10))\n rand.push(B32.indexOf(ch));\n if (time === lastTime) {\n let ahead = false;\n for (let i = 0; i < 16; i++) {\n if (rand[i] !== lastRand[i]) {\n ahead = rand[i] > lastRand[i];\n break;\n }\n }\n if (!ahead)\n return;\n }\n lastTime = time;\n for (let i = 0; i < 16; i++)\n lastRand[i] = rand[i];\n };\n return mint;\n}\nvar processUlid = createUlid();\nfunction ulid(now = Date.now()) {\n return processUlid(now);\n}\nfunction ulidTime(id) {\n if (!ULID_SHAPE.test(id))\n throw new Error(`not a ULID: ${id}`);\n let t = 0;\n for (const ch of id.slice(0, 10))\n t = t * 32 + B32.indexOf(ch);\n if (t > MAX_ULID_TIME)\n throw new Error(`not a ULID: ${id}`);\n return t;\n}\n\n// packages/vertical-host/src/outbound-calls.ts\nvar EGRESS_REFUSAL_HEADER = \"x-substrat-egress\";\nvar STORE_CALL_HOST = \"store.substrat.internal\";\nvar REDACTED = \"[redacted]\";\nvar PATH_MAX = 200;\nvar WORDS = /^[a-z]{1,16}(?:[-_][a-z]{1,16}){0,3}$/;\nvar WORDS_WITH_EXTENSION = /^[a-z]{1,16}(?:[-_][a-z]{1,16}){0,3}\\.[a-z][a-z0-9]{0,4}$/;\nvar SEGMENT_MAX = 40;\nvar SMALL_INTEGER = /^[0-9]{1,10}$/;\nvar VERSION = /^v[0-9]{1,3}(?:\\.[0-9]{1,3}){0,2}$/;\nfunction keepsSegment(segment) {\n if (segment.length > SEGMENT_MAX) return false;\n return segment === \"\" || WORDS.test(segment) || WORDS_WITH_EXTENSION.test(segment) || SMALL_INTEGER.test(segment) || VERSION.test(segment);\n}\nfunction redactOutboundPath(pathname) {\n const path = pathname.split(\"/\").map((segment) => keepsSegment(segment) ? segment : REDACTED).join(\"/\");\n return path.length > PATH_MAX ? `${path.slice(0, PATH_MAX)}…` : path;\n}\nvar ERROR_CLASS = /^[A-Z][A-Za-z]{0,30}(?:Error|Exception)$/;\nfunction errorName(e) {\n const name = e?.name;\n return typeof name === \"string\" && ERROR_CLASS.test(name) ? name : \"Error\";\n}\nfunction answeredOutcome(response) {\n if (response.status === 403 && response.headers?.get?.(EGRESS_REFUSAL_HEADER) === \"refused\") return \"refused\";\n return response.status >= 400 ? \"http-error\" : \"ok\";\n}\nfunction rejectedOutcome(e) {\n const name = errorName(e);\n if (name === \"TimeoutError\") return { outcome: \"timeout\" };\n if (name === \"AbortError\") return { outcome: \"aborted\" };\n return { outcome: \"failed\", reason: name };\n}\nvar SINCE = /* @__PURE__ */ Symbol.for(\"substrat.outbound-since\");\nfunction sinceMap() {\n const g = globalThis;\n return g[SINCE] ??= /* @__PURE__ */ new WeakMap();\n}\nfunction markRequestStart(recording, started) {\n try {\n sinceMap().set(recording, started);\n } catch {\n }\n}\nfunction destinationOf(input, init) {\n const fromRequest = typeof input === \"object\" && input !== null && !(input instanceof URL);\n const raw = fromRequest ? input.url : input;\n let url;\n try {\n url = new URL(String(raw));\n } catch {\n return null;\n }\n const initMethod = init?.method;\n const requestMethod = fromRequest ? input.method : void 0;\n const method = typeof initMethod === \"string\" ? initMethod : typeof requestMethod === \"string\" ? requestMethod : \"GET\";\n return { url, method: method.toUpperCase().slice(0, 16) };\n}\nfunction record(recording, destination, startedAt, end) {\n try {\n const call = {\n host: destination.url.host.toLowerCase(),\n path: redactOutboundPath(destination.url.pathname),\n method: destination.method,\n status: end.status,\n outcome: end.outcome,\n durationMs: Math.max(0, Date.now() - startedAt),\n atMs: Math.max(0, startedAt - (sinceMap().get(recording) ?? startedAt)),\n ...end.reason !== void 0 ? { reason: end.reason } : {}\n };\n tallyOutboundCall(recording, call);\n } catch {\n }\n}\nvar WRAPPED = /* @__PURE__ */ Symbol.for(\"substrat.outbound-fetch\");\nvar IN_CALL = /* @__PURE__ */ Symbol.for(\"substrat.outbound-fetch.in-call\");\nfunction recordingFetch(original, current) {\n const wrapped = function fetch(input, init) {\n const g = globalThis;\n if (g[IN_CALL] === true) return original.call(globalThis, input, init);\n let recording;\n let destination = null;\n try {\n recording = current();\n if (recording) destination = destinationOf(input, init);\n } catch {\n recording = void 0;\n }\n if (!recording || !destination || destination.url.hostname.toLowerCase() === STORE_CALL_HOST) {\n return original.call(globalThis, input, init);\n }\n const rec = recording;\n const dest = destination;\n const startedAt = Date.now();\n let pending;\n g[IN_CALL] = true;\n try {\n pending = original.call(globalThis, input, init);\n } finally {\n g[IN_CALL] = false;\n }\n return pending.then(\n (response) => {\n let status = null;\n let outcome = \"failed\";\n try {\n status = response.status;\n outcome = answeredOutcome(response);\n } catch {\n }\n record(rec, dest, startedAt, { status, outcome });\n return response;\n },\n (e) => {\n let end = { outcome: \"failed\", reason: \"Error\" };\n try {\n end = rejectedOutcome(e);\n } catch {\n }\n record(rec, dest, startedAt, { status: null, ...end });\n throw e;\n }\n );\n };\n Object.defineProperty(wrapped, WRAPPED, { value: true });\n return wrapped;\n}\nfunction installOutboundRecorder(current) {\n try {\n const g = globalThis;\n const existing = g.fetch;\n if (typeof existing !== \"function\" || existing[WRAPPED]) return;\n g.fetch = recordingFetch(existing, current);\n } catch {\n }\n}\n\n// packages/contracts/dist/wire-headers.js\nvar PLATFORM_SECRET_HEADER = \"x-substrat-platform\";\nvar CONNECTOR_ATTACHMENT_META_MAX_BYTES = 8 * 1024;\n\n// packages/contracts/dist/wire-auth.js\nvar PlatformCallError = class extends Error {\n};\nfunction secretMatches(presented, expected) {\n const given = presented ?? \"\";\n let diff = given.length ^ expected.length | (given.length === 0 ? 1 : 0);\n for (let i = 0; i < expected.length; i++) {\n diff |= (i < given.length ? given.charCodeAt(i) : 0) ^ expected.charCodeAt(i);\n }\n return diff === 0;\n}\nfunction assertPlatformCall(headers, options = {}) {\n const { expectedSecret } = options;\n if (!expectedSecret) {\n throw new PlatformCallError(\"platform calls are not configured on this deployment\");\n }\n if (!secretMatches(headers.get(PLATFORM_SECRET_HEADER), expectedSecret)) {\n throw new PlatformCallError(\"not a platform call\");\n }\n}\n\n// packages/vertical-host/src/routed-node.ts\nvar ROUTED_ID = /^[0-9A-HJKMNP-TV-Z]{26}$/;\nvar RouterAssertionError = class extends Error {\n};\nfunction readRoutedNode(headers, options = {}) {\n const rawTenant = headers.get(\"x-substrat-tenant\");\n const rawScope = headers.get(\"x-substrat-scope\");\n if (!rawTenant && !rawScope) return null;\n const { expectedSecret, allowUnsigned: allowUnsigned2 = false } = options;\n if (expectedSecret) {\n if (!secretMatches(headers.get(\"x-substrat-router\"), expectedSecret)) {\n throw new RouterAssertionError(\"router assertion is not signed by a known router\");\n }\n } else if (!allowUnsigned2) {\n throw new RouterAssertionError(\n \"router assertion cannot be verified: this worker has no ROUTER_SECRET configured\"\n );\n }\n if (!rawTenant || !rawScope) {\n throw new RouterAssertionError(\"router assertion is incomplete\");\n }\n if (!ROUTED_ID.test(rawTenant) || !ROUTED_ID.test(rawScope)) {\n throw new RouterAssertionError(\"router assertion carries a malformed id\");\n }\n return {\n tenantId: rawTenant,\n scopeId: rawScope,\n surface: headers.get(\"x-substrat-surface\") ?? \"app\",\n verticalSlug: headers.get(\"x-substrat-vertical\")\n };\n}\n\n// packages/vertical-host/src/invocation-log.ts\nfunction builtinAsyncLocalStorage() {\n try {\n const proc = globalThis.process;\n const mod = proc?.getBuiltinModule?.(\"node:async_hooks\");\n return typeof mod?.AsyncLocalStorage === \"function\" ? mod.AsyncLocalStorage : void 0;\n } catch {\n return void 0;\n }\n}\nfunction storeCallSlot(provided) {\n try {\n const g = globalThis;\n const key = Symbol.for(STORE_CALL_SINK_KEY);\n const existing = g[key];\n if (typeof existing?.run === \"function\" && typeof existing.current === \"function\") return existing;\n const Als = provided ?? builtinAsyncLocalStorage();\n if (!Als) return void 0;\n const storage = new Als();\n const slot2 = {\n current() {\n const tally = storage.getStore()?.tally;\n return tally ? (call) => tallyStoreCall(tally, call) : void 0;\n },\n invocationId: () => storage.getStore()?.invocationId,\n run: (tally, fn, invocationId) => storage.run({ tally, invocationId }, fn),\n recording: () => storage.getStore()?.tally\n };\n g[key] = slot2;\n return slot2;\n } catch {\n return void 0;\n }\n}\nfunction currentRecording() {\n const slot2 = globalThis[Symbol.for(STORE_CALL_SINK_KEY)];\n return typeof slot2?.recording === \"function\" ? slot2.recording() : void 0;\n}\nfunction runRecording(stamp, started, provided, fn) {\n const slot2 = storeCallSlot(provided);\n if (!slot2) return fn();\n try {\n const authSink = {\n record(check) {\n const record2 = currentRecording();\n if (record2) tallyAuthCheck(record2, check);\n }\n };\n globalThis[AUTH_DIAGNOSTICS_KEY] = authSink;\n } catch {\n }\n markRequestStart(stamp.record, started);\n installOutboundRecorder(currentRecording);\n return slot2.run(stamp.record, fn, stamp.invocationId);\n}\nfunction versionIdOf(env) {\n const v = env?.SUBSTRAT_VERSION_ID;\n return typeof v === \"string\" && v.length > 0 ? v : null;\n}\nvar UPLOAD_LINK_LOG_SECRET_PREFIX = \"sbup_\";\nvar UPLOAD_LINK_SECRET_SEGMENT = /^(\\/api\\/attachment-uploads\\/[^/]+\\/[^/]+\\/)[^/]+/;\nvar SECRET_SHAPED_SEGMENT = new RegExp(`(^|/)${UPLOAD_LINK_LOG_SECRET_PREFIX}[^/]*`, \"g\");\nvar redactUploadLinkSecret = (pathname) => pathname.replace(UPLOAD_LINK_SECRET_SEGMENT, \"$1[redacted]\").replace(SECRET_SHAPED_SEGMENT, \"$1[redacted]\");\nfunction pathOf(url) {\n try {\n return redactUploadLinkSecret(new URL(url).pathname);\n } catch {\n return \"/\";\n }\n}\nvar STAMPS = /* @__PURE__ */ Symbol.for(\"substrat.invocation-stamp\");\nfunction stamps() {\n const g = globalThis;\n return g[STAMPS] ??= /* @__PURE__ */ new WeakMap();\n}\nfunction invocationStampOf(request) {\n return stamps().get(request);\n}\nfunction withRequestId(response, id) {\n const headers = response?.headers;\n try {\n headers?.set?.(REQUEST_ID_HEADER, id);\n return response;\n } catch {\n }\n try {\n const r = response;\n if (r.status === 101) return response;\n const copy = new Response(r.body, r);\n copy.headers.set(REQUEST_ID_HEADER, id);\n return copy;\n } catch {\n return response;\n }\n}\nfunction beginStamp(request, env, options) {\n const stamp = { invocationId: ulid(), record: {} };\n if (installedTraceSink()) markTraceStart(stamp.invocationId);\n const fieldCoverageId = armedFieldCoverageId(request.headers, env, options);\n if (fieldCoverageId) stamp.fieldCoverageId = fieldCoverageId;\n stamps().set(request, stamp);\n return stamp;\n}\nfunction armedFieldCoverageId(headers, env, options) {\n let id;\n try {\n id = headers.get(FIELD_COVERAGE_HEADER);\n } catch {\n return void 0;\n }\n if (id === null || !ROUTED_ID.test(id)) return void 0;\n return routedNodeOrNull(headers, env, options) !== null ? id : void 0;\n}\nfunction writeInvocationLine(stamp, done, options) {\n traceRequest(stamp, done);\n try {\n writeLineOrThrow(stamp, done, options);\n } catch (e) {\n try {\n console.log(JSON.stringify({ substrat: \"invocation-log-fault\", detail: String(e) }));\n } catch {\n }\n }\n}\nfunction traceRequest(stamp, done) {\n const sink = installedTraceSink();\n if (!sink) return;\n try {\n const { record: record2, invocationId } = stamp;\n const durationMs = Date.now() - done.started;\n const line = invocationLine({\n tenantId: \"\",\n scopeId: null,\n vertical: null,\n surface: null,\n method: done.request.method,\n path: pathOf(done.request.url),\n status: done.status,\n threw: done.threw,\n durationMs,\n invocationId,\n level: invocationLevelOf(done.status, done.threw, record2.problemCode),\n operation: record2.operation,\n problemCode: record2.problemCode,\n principalKind: record2.principalKind,\n ...record2.emitted ? { emitted: record2.emitted } : {},\n versionId: versionIdOf(done.env)\n });\n sink.head(invocationId, {\n startedAt: new Date(done.started).toISOString(),\n method: line.method,\n path: line.path,\n status: line.status,\n threw: line.threw,\n durationMs: line.durationMs,\n level: line.level,\n operation: line.operation,\n problemCode: line.problemCode,\n principalKind: line.principalKind,\n eventCount: line.eventCount,\n eventTypes: line.eventTypes,\n entities: line.entities,\n versionId: line.versionId,\n // Calls the record kept no room for: a truncated list must read as truncated.\n ...record2.outboundCallsDropped ? { stepsDropped: record2.outboundCallsDropped } : {}\n });\n for (const call of record2.outboundCalls ?? []) {\n sink.step(invocationId, {\n type: \"outbound\",\n atMs: call.atMs,\n durationMs: call.durationMs,\n host: call.host,\n path: call.path,\n method: call.method,\n status: call.status,\n outcome: call.outcome,\n ...call.reason ? { reason: call.reason } : {}\n });\n }\n for (const check of record2.authChecks ?? []) {\n sink.step(invocationId, { type: \"log\", atMs: durationMs, level: check.outcome === \"refused\" || check.outcome === \"error\" ? \"warn\" : \"info\", message: `auth ${check.stage}: ${check.outcome} (${check.reason})` });\n }\n if (record2.authChecksDropped) sink.head(invocationId, { stepsDropped: record2.authChecksDropped });\n sink.end(invocationId);\n forgetTraceStart(invocationId);\n } catch {\n }\n}\nfunction writeLineOrThrow(stamp, done, options) {\n const node = routedNodeOrNull(done.request.headers, done.env, options);\n if (!node) return;\n const { record: record2, invocationId } = stamp;\n const line = invocationLine({\n tenantId: node.tenantId,\n scopeId: node.scopeId,\n vertical: node.verticalSlug,\n surface: node.surface,\n method: done.request.method,\n path: pathOf(done.request.url),\n status: done.status,\n threw: done.threw,\n durationMs: Date.now() - done.started,\n invocationId,\n level: invocationLevelOf(done.status, done.threw, record2.problemCode),\n operation: record2.operation,\n problemCode: record2.problemCode,\n principalKind: record2.principalKind,\n ...record2.emitted ? { emitted: record2.emitted } : {},\n versionId: versionIdOf(done.env),\n ...record2.outputFields ? { outputFields: record2.outputFields } : {},\n ...stamp.fieldCoverageId ? { fieldCoverageId: stamp.fieldCoverageId } : {},\n ...record2.storeCalls && record2.storeCalls.length > 0 ? { storeCalls: record2.storeCalls } : {},\n ...record2.storeCallsDropped ? { storeCallsDropped: record2.storeCallsDropped } : {},\n ...record2.outboundCalls && record2.outboundCalls.length > 0 ? { outboundCalls: record2.outboundCalls } : {},\n ...record2.outboundCallsDropped ? { outboundCallsDropped: record2.outboundCallsDropped } : {},\n ...record2.authChecks?.length ? { authChecks: record2.authChecks } : {},\n ...record2.authChecksDropped ? { authChecksDropped: record2.authChecksDropped } : {}\n });\n console.log(JSON.stringify(line));\n}\nvar OTHER_HANDLERS = [\"scheduled\", \"queue\", \"email\", \"tail\", \"trace\", \"alarm\", \"test\"];\nfunction withInvocationLog(worker, options = {}) {\n const inner = worker?.fetch;\n if (typeof inner !== \"function\") return worker;\n const wrapped = {\n async fetch(request, env, ctx) {\n if (invocationStampOf(request)) return inner.call(worker, request, env, ctx);\n const started = Date.now();\n const stamp = beginStamp(request, env, options);\n let status = null;\n let threw = false;\n try {\n const response = withRequestId(\n await runRecording(stamp, started, options.asyncLocalStorage, () => inner.call(worker, request, env, ctx)),\n stamp.invocationId\n );\n status = response.status;\n handRecordToRouter(response, stamp.record, request, env, options);\n return response;\n } catch (e) {\n threw = true;\n throw e;\n } finally {\n writeInvocationLine(stamp, { request, env, status, threw, started }, options);\n }\n }\n };\n for (const name of OTHER_HANDLERS) {\n const h = worker[name];\n if (typeof h === \"function\") wrapped[name] = h.bind(worker);\n }\n return wrapped;\n}\nfunction handRecordToRouter(response, record2, request, env, options) {\n try {\n const value = encodeInvocationRecord(record2);\n if (value === null || !routedNodeOrNull(request.headers, env, options)) return;\n response.headers?.set?.(\n INVOCATION_RECORD_HEADER,\n value\n );\n } catch {\n }\n}\nfunction routedNodeOrNull(headers, env, options) {\n try {\n return readRoutedNode(headers, {\n expectedSecret: options.routerSecret?.(env),\n allowUnsigned: options.allowUnsigned?.(env) ?? false\n });\n } catch (e) {\n if (!(e instanceof RouterAssertionError)) console.log(JSON.stringify({ substrat: \"invocation-log-fault\", detail: String(e) }));\n return null;\n }\n}\n\n// packages/contracts/dist/scope-store-envelope.js\nfunction bytesToBase64Url(bytes) {\n let binary = \"\";\n for (const byte of bytes)\n binary += String.fromCharCode(byte);\n return btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replaceAll(\"=\", \"\");\n}\nfunction base64UrlToBytes(value) {\n if (!/^[A-Za-z0-9_-]+$/.test(value))\n return void 0;\n const padded = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\") + \"=\".repeat((4 - value.length % 4) % 4);\n try {\n const binary = atob(padded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++)\n bytes[i] = binary.charCodeAt(i);\n return bytes;\n } catch {\n return void 0;\n }\n}\nfunction copyBytes(bytes) {\n const copy = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(copy).set(bytes);\n return copy;\n}\nvar SMALL_ORDER_KEYS = [\n \"0000000000000000000000000000000000000000000000000000000000000000\",\n // y = 0, order 4\n \"0100000000000000000000000000000000000000000000000000000000000000\",\n // the identity, order 1\n \"26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05\",\n // order 8\n \"c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a\",\n // order 8\n \"ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\",\n // y = p - 1, order 2\n \"edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\",\n // y = p, a non-canonical 0\n \"eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\"\n // y = p + 1, a non-canonical identity\n];\nfunction isSmallOrderKey(bytes) {\n const unsigned = Uint8Array.from(bytes);\n unsigned[31] = unsigned[31] & 127;\n const hex = [...unsigned].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n return SMALL_ORDER_KEYS.includes(hex);\n}\nasync function scopeStoreKeyId(publicKey) {\n const bytes = base64UrlToBytes(publicKey);\n if (!bytes || bytes.length !== 32)\n throw new Error(\"a store public key is not 32 bytes of base64url\");\n if (isSmallOrderKey(bytes))\n throw new Error(\"a store public key is a small-order point\");\n const hash = await crypto.subtle.digest(\"SHA-256\", copyBytes(bytes));\n return bytesToBase64Url(new Uint8Array(hash).slice(0, 8));\n}\nfunction scopeStorePublicKeyProblem(key) {\n if (key.length === 0)\n return \"empty\";\n const bytes = base64UrlToBytes(key);\n if (bytes?.length !== 32)\n return \"length\";\n if (isSmallOrderKey(bytes))\n return \"small-order\";\n if (bytesToBase64Url(bytes) !== key)\n return \"non-canonical\";\n return void 0;\n}\nvar PUBLIC_KEY_PROBLEM = {\n empty: \"a store public key list is empty or has an empty entry\",\n length: \"a store public key is not 32 bytes of base64url\",\n \"small-order\": \"a store public key is a small-order point\",\n \"non-canonical\": \"a store public key is not canonical base64url\"\n};\nfunction parseScopeStorePublicKeys(text) {\n const keys = text.split(\",\").map((key) => key.trim());\n if (keys.some((key) => key.length === 0))\n throw new Error(PUBLIC_KEY_PROBLEM.empty);\n const seen = /* @__PURE__ */ new Set();\n for (const key of keys) {\n const problem2 = scopeStorePublicKeyProblem(key);\n if (problem2)\n throw new Error(PUBLIC_KEY_PROBLEM[problem2]);\n if (seen.has(key))\n throw new Error(\"a store public key is listed twice\");\n seen.add(key);\n }\n return keys;\n}\nasync function verifyScopeStoreEnvelope(publicKey, canonical, signature) {\n const keyBytes = base64UrlToBytes(publicKey);\n const sigBytes = base64UrlToBytes(signature);\n if (!keyBytes || !sigBytes || sigBytes.length !== 64)\n return false;\n try {\n const key = await crypto.subtle.importKey(\"raw\", copyBytes(keyBytes), { name: \"Ed25519\" }, false, [\"verify\"]);\n return await crypto.subtle.verify(\"Ed25519\", key, copyBytes(sigBytes), new TextEncoder().encode(canonical));\n } catch {\n return false;\n }\n}\n\n// packages/contracts/dist/wire-signing.js\nvar WIRE_ENVELOPE_VERSION = 1;\nvar WIRE_ENVELOPE_TAG = `substrat-wire/${WIRE_ENVELOPE_VERSION}`;\nvar WIRE_ENVELOPE_HEADER = \"x-substrat-wire-envelope\";\nvar WIRE_SIGNATURE_HEADER = \"x-substrat-wire-signature\";\nvar WIRE_ENVELOPE_MAX_LIFETIME_SECONDS = 120;\nvar WIRE_CLOCK_SKEW_SECONDS = 30;\nvar SHAPES = {\n router: {\n // An end user's request the router resolved: always a tenant, a scope and a surface. The\n // body is a stream the router does not buffer, so a route binds none.\n route: { scope: \"required\", surface: \"required\", vertical: \"optional\", body: \"absent\" },\n // An internal call the router makes itself, such as a peer invocation.\n call: { scope: \"optional\", surface: \"absent\", vertical: \"optional\", body: \"required\" }\n },\n platform: {\n call: { scope: \"optional\", surface: \"absent\", vertical: \"absent\", body: \"required\" }\n }\n};\nfunction wireEnvelopeShape(iss, kind) {\n const byKind = Object.hasOwn(SHAPES, iss) ? SHAPES[iss] : void 0;\n return byKind && Object.hasOwn(byKind, kind) ? byKind[kind] : void 0;\n}\nvar LINES = 15;\nvar ULID = /^[0-9A-HJKMNP-TV-Z]{26}$/;\nvar METHOD = /^[!#$%&'*+.^_`|~0-9A-Z-]{1,32}$/;\nvar DIGEST = /^[0-9a-f]{64}$/;\nvar SECONDS = /^(0|[1-9]\\d{0,14})$/;\nvar CONTROL = /[\\u0000-\\u001f\\u007f]/;\nvar LONE_SURROGATE = /[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?<![\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]/;\nvar MAX_TEXT = 255;\nvar isText = (value) => value.length <= MAX_TEXT && !CONTROL.test(value) && !LONE_SURROGATE.test(value);\nvar isWireAudience = (value) => value !== \"\" && isText(value);\nfunction isCanonicalBase64Url(text, length) {\n const bytes = base64UrlToBytes(text);\n return bytes?.length === length && bytesToBase64Url(bytes) === text;\n}\nfunction admits(presence, value, valid) {\n if (value === \"\")\n return presence !== \"required\";\n return presence !== \"absent\" && valid(value);\n}\nfunction parseWireEnvelope(canonical) {\n const lines = canonical.split(\"\\n\");\n if (lines.length !== LINES)\n return void 0;\n const [tag, iss, kind, kid, aud, tenantId, scopeId, surface, vertical2, method, targetDigest, bodyDigest, iat, exp, nonce] = lines;\n if (tag !== WIRE_ENVELOPE_TAG)\n return void 0;\n const shape = wireEnvelopeShape(iss, kind);\n if (!shape)\n return void 0;\n if (!isCanonicalBase64Url(kid, 8) || !isCanonicalBase64Url(nonce, 16))\n return void 0;\n if (!isWireAudience(aud))\n return void 0;\n if (tenantId === \"\" !== (scopeId === \"\"))\n return void 0;\n if (!admits(shape.scope, tenantId, (id) => ULID.test(id)) || !admits(shape.scope, scopeId, (id) => ULID.test(id)))\n return void 0;\n if (!admits(shape.surface, surface, isText) || !admits(shape.vertical, vertical2, isText))\n return void 0;\n if (!METHOD.test(method) || !DIGEST.test(targetDigest) || !admits(shape.body, bodyDigest, (d) => DIGEST.test(d)))\n return void 0;\n if (!SECONDS.test(iat) || !SECONDS.test(exp))\n return void 0;\n const orNull = (value) => value === \"\" ? null : value;\n return {\n v: 1,\n iss,\n kind,\n kid,\n aud,\n tenantId: orNull(tenantId),\n scopeId: orNull(scopeId),\n surface: orNull(surface),\n vertical: orNull(vertical2),\n method,\n targetDigest,\n bodyDigest: orNull(bodyDigest),\n iat: Number(iat),\n exp: Number(exp),\n nonce\n };\n}\nfunction decodeWireEnvelope(header) {\n const bytes = base64UrlToBytes(header);\n if (!bytes)\n return void 0;\n let canonical;\n try {\n canonical = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(bytes);\n } catch {\n return void 0;\n }\n const claims = parseWireEnvelope(canonical);\n return claims ? { canonical, claims } : void 0;\n}\nfunction bytesOf(data) {\n if (typeof data === \"string\")\n return new TextEncoder().encode(data);\n const view = ArrayBuffer.isView(data) ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength) : new Uint8Array(data);\n return view.buffer instanceof ArrayBuffer ? view : view.slice();\n}\nasync function wireDigest(data) {\n const hash = await crypto.subtle.digest(\"SHA-256\", bytesOf(data));\n return [...new Uint8Array(hash)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\nfunction wireRequestBinding(request) {\n const url = new URL(request.url);\n return { method: request.method.toUpperCase(), target: `${url.pathname}${url.search}` };\n}\nfunction lifetimeAdmitted(iat, exp) {\n return exp > iat && exp - iat <= WIRE_ENVELOPE_MAX_LIFETIME_SECONDS;\n}\nvar PREPARED = /* @__PURE__ */ new WeakMap();\nasync function wireVerificationKeys(config) {\n const listed = (text) => text?.trim() ? parseScopeStorePublicKeys(text) : [];\n const router = listed(config.router);\n const platform = listed(config.platform);\n if (router.some((key) => platform.includes(key)))\n throw new Error(\"a wire public key is listed for both issuers\");\n const byKid = async (keys2) => new Map(await Promise.all(keys2.map(async (key) => [await scopeStoreKeyId(key), key])));\n const own = Object.freeze({ router: await byKid(router), platform: await byKid(platform) });\n const keys = Object.freeze({ router: new Map(own.router), platform: new Map(own.platform) });\n PREPARED.set(keys, own);\n return keys;\n}\nvar WIRE_REFUSED = Object.freeze({ ok: false });\nasync function verifyWireEnvelope(input) {\n const refuse = (reason) => {\n try {\n void Promise.resolve(input.onRefusal?.(reason)).catch(() => {\n });\n } catch {\n }\n return WIRE_REFUSED;\n };\n const { expected, keys, nowSeconds } = input;\n const own = PREPARED.get(keys);\n if (!own)\n throw new TypeError(\"verifyWireEnvelope takes the key set wireVerificationKeys built\");\n const replay = expected.kind === \"call\" ? expected.replay : \"none\";\n if (replay !== \"none\" && typeof replay?.claim !== \"function\") {\n throw new TypeError(\"a call's expectation states its replay policy: 'none' or a nonce cache\");\n }\n if (replay !== \"none\" && expected.scopeId == null) {\n throw new TypeError(\"a call that keeps nonces pins the scope whose object holds them\");\n }\n if (replay !== \"none\" && typeof input.clockSeconds !== \"function\") {\n throw new TypeError(\"a call that keeps nonces takes a clockSeconds function to time its claim\");\n }\n const header = input.headers.get(WIRE_ENVELOPE_HEADER);\n const signature = input.headers.get(WIRE_SIGNATURE_HEADER);\n if (!header || !signature)\n return refuse(\"missing\");\n const decoded = decodeWireEnvelope(header);\n if (!decoded)\n return refuse(\"malformed\");\n const { canonical, claims } = decoded;\n if (claims.iss !== expected.iss)\n return refuse(\"issuer\");\n if (claims.kind !== expected.kind)\n return refuse(\"kind\");\n const publicKey = own[claims.iss].get(claims.kid);\n if (!publicKey)\n return refuse(\"kid\");\n if (!await verifyScopeStoreEnvelope(publicKey, canonical, signature))\n return refuse(\"signature\");\n if (claims.aud !== expected.aud)\n return refuse(\"audience\");\n if (!lifetimeAdmitted(claims.iat, claims.exp))\n return refuse(\"lifetime\");\n if (!(nowSeconds >= claims.iat - WIRE_CLOCK_SKEW_SECONDS))\n return refuse(\"not-yet-valid\");\n if (!(nowSeconds <= claims.exp + WIRE_CLOCK_SKEW_SECONDS))\n return refuse(\"expired\");\n if (claims.method !== expected.method)\n return refuse(\"method\");\n if (claims.targetDigest !== await wireDigest(expected.target))\n return refuse(\"target\");\n if (expected.kind === \"call\") {\n const body = typeof expected.body === \"function\" ? await expected.body() : expected.body;\n if (body == null || claims.bodyDigest !== await wireDigest(body))\n return refuse(\"body\");\n }\n if (expected.tenantId !== void 0 && claims.tenantId !== expected.tenantId)\n return refuse(\"scope\");\n if (expected.scopeId !== void 0 && claims.scopeId !== expected.scopeId)\n return refuse(\"scope\");\n if (replay !== \"none\") {\n const until = claims.exp + WIRE_CLOCK_SKEW_SECONDS;\n const claimedAt = input.clockSeconds();\n if (!Number.isFinite(claimedAt) || claimedAt < 0) {\n throw new TypeError(\"clockSeconds read something other than a time in seconds\");\n }\n if (!(claimedAt <= until))\n return refuse(\"claim-after-until\");\n if (await replay.claim(claims.nonce, until) !== true)\n return refuse(\"replay\");\n }\n return { ok: true, claims };\n}\nvar WIRE_ROUTER_KEYS_VAR = \"SUBSTRAT_WIRE_ROUTER_KEYS\";\nvar WIRE_PLATFORM_KEYS_VAR = \"SUBSTRAT_WIRE_PLATFORM_KEYS\";\nvar WIRE_AUDIENCE_VAR = \"SUBSTRAT_WIRE_AUDIENCE\";\nvar WIRE_STATE_VAR = \"SUBSTRAT_WIRE_STATE\";\nfunction wireStateOf(config) {\n const listed = (value) => typeof value === \"string\" && value.trim() !== \"\";\n if (!listed(config.routerKeys) && !listed(config.platformKeys))\n return \"legacy-only\";\n return config.state === \"legacy-only\" || config.state === \"signed-only\" ? config.state : \"dual\";\n}\nvar ROUTE_ENDPOINT = Object.freeze({ kind: \"route\", issuers: Object.freeze([\"router\"]) });\nvar CALL_ENDPOINT = Object.freeze({ kind: \"call\", issuers: Object.freeze([\"platform\"]) });\nvar PEER_INVOKE_ENDPOINT = Object.freeze({ kind: \"call\", issuers: Object.freeze([\"platform\", \"router\"]) });\nfunction tryDecode(path, decoder) {\n try {\n return decoder(path);\n } catch {\n return path.replace(/(?:%[0-9A-Fa-f]{2})+/g, (run) => {\n try {\n return decoder(run);\n } catch {\n return run;\n }\n });\n }\n}\nfunction collapsed(path) {\n const segments = [];\n for (const segment of path.split(\"/\")) {\n if (segment === \"..\")\n segments.pop();\n else if (segment !== \"\" && segment !== \".\")\n segments.push(segment);\n }\n return `/${segments.join(\"/\")}`;\n}\nvar INTERNAL = /^\\/internal(?:\\/|$)/i;\nfunction wireEndpoint(pathname) {\n const routed = tryDecode(pathname.includes(\"%25\") ? pathname.replace(/%25/g, \"%2525\") : pathname, decodeURI);\n const forms = [pathname, routed, tryDecode(pathname, decodeURIComponent)];\n if (!forms.some((form) => INTERNAL.test(form) || INTERNAL.test(collapsed(form))))\n return ROUTE_ENDPOINT;\n return pathname === \"/internal/vertical-invoke\" ? PEER_INVOKE_ENDPOINT : CALL_ENDPOINT;\n}\nvar WIRE_REPLAY_FREE_CALLS = Object.freeze([\n \"/internal/query\",\n \"/internal/redrain-count\",\n \"/internal/lifecycle-flow\",\n \"/internal/operation-series\",\n \"/internal/connector-grants\"\n]);\nvar SAFE_METHODS = /* @__PURE__ */ new Set([\"GET\", \"HEAD\", \"OPTIONS\"]);\nfunction wireReplayOf(method, pathname) {\n return SAFE_METHODS.has(method.toUpperCase()) || WIRE_REPLAY_FREE_CALLS.includes(pathname) ? \"none\" : \"nonce\";\n}\nvar UNSIGNED = Object.freeze([\n [FIELD_COVERAGE_HEADER, \"route\", (value) => ULID.test(value)],\n [PARENT_REQUEST_ID_HEADER, \"call\", (value) => parentRequestIdOf(value) !== void 0]\n]);\nvar WIRE_UNSIGNED_HEADERS = Object.freeze(Object.fromEntries(UNSIGNED.map(([name, kind]) => [name, kind])));\nfunction wireUnsignedHeadersOf(kind, headers) {\n const kept = [];\n for (const [name, on, valid] of UNSIGNED) {\n const value = on === kind ? headers.get(name) : null;\n if (value !== null && valid(value))\n kept.push([name, value]);\n }\n return kept;\n}\n\n// packages/control-plane-api/platform-entry/wire-gate.ts\nvar WIRE_CLAIM_TIMEOUT_MS = 1e3;\nvar WIRE_REFUSAL_BODY = '{\"type\":\"about:blank\",\"title\":\"Unauthorized\",\"status\":401,\"detail\":\"unauthorized\",\"error\":\"unauthorized\"}';\nvar WIRE_FAULT_BODY = '{\"type\":\"about:blank\",\"title\":\"Service unavailable\",\"status\":503,\"detail\":\"this request could not be verified\",\"error\":\"this request could not be verified\"}';\nvar problem = (body, status) => new Response(body, { status, headers: { \"content-type\": \"application/problem+json\" } });\nvar ASSERTED_PREFIX = \"x-substrat-\";\nvar TENANT = \"x-substrat-tenant\";\nvar SCOPE = \"x-substrat-scope\";\nvar SURFACE = \"x-substrat-surface\";\nvar VERTICAL = \"x-substrat-vertical\";\nvar ROUTER_CREDENTIAL = \"x-substrat-router\";\nvar GateFault = class extends Error {\n constructor(fault) {\n super(fault);\n this.fault = fault;\n }\n fault;\n};\nfunction claimedThrough(reach, timeoutMs) {\n return {\n async claim(nonce, until) {\n let cache;\n try {\n cache = reach();\n } catch {\n throw new GateFault(\"nonce-store\");\n }\n if (cache == null) throw new GateFault(\"no-nonce-store\");\n let timer;\n try {\n return await Promise.race([\n cache.claim(nonce, until),\n new Promise((_, reject) => {\n timer = setTimeout(() => reject(new Error(\"the nonce store did not answer in time\")), timeoutMs);\n })\n ]);\n } catch {\n throw new GateFault(\"nonce-store\");\n } finally {\n clearTimeout(timer);\n }\n }\n };\n}\nvar builtKeys;\nfunction keysFor(router, platform) {\n const text = `${router}\n${platform}`;\n if (builtKeys?.text !== text) builtKeys = { text, keys: wireVerificationKeys({ router, platform }) };\n return builtKeys.keys;\n}\nvar textOf = (value) => typeof value === \"string\" ? value : \"\";\nfunction stateOf(env) {\n const e = env ?? {};\n return wireStateOf({ routerKeys: e[WIRE_ROUTER_KEYS_VAR], platformKeys: e[WIRE_PLATFORM_KEYS_VAR], state: e[WIRE_STATE_VAR] });\n}\nfunction legacyOf(request, call, env, options) {\n if (call) {\n let credential = request.headers.has(PLATFORM_SECRET_HEADER) ? \"invalid\" : \"absent\";\n try {\n assertPlatformCall(request.headers, { expectedSecret: options.platformSecret(env) });\n credential = \"valid\";\n } catch {\n }\n return { credential, identity: null };\n }\n try {\n const node = options.routedNode(request.headers, env);\n return node ? { credential: \"valid\", identity: node } : { credential: \"absent\", identity: null };\n } catch {\n return { credential: \"invalid\", identity: null };\n }\n}\nvar sameIdentity = (legacy, claims) => legacy.tenantId === claims.tenantId && legacy.scopeId === claims.scopeId && legacy.surface === claims.surface && legacy.verticalSlug === claims.vertical;\nvar servedAs = (who) => ({\n tenantId: who?.tenantId ?? null,\n scopeId: who?.scopeId ?? null\n});\nfunction withWireGate(worker, options) {\n const inner = worker?.fetch;\n if (typeof inner !== \"function\") return worker;\n const clock = options.clock ?? Date.now;\n const seconds = () => Math.floor(clock() / 1e3);\n const timeoutMs = options.claimTimeoutMs ?? WIRE_CLAIM_TIMEOUT_MS;\n const log = options.log ?? ((line) => console.log(line));\n const serve = (request, env, ctx) => inner.call(worker, request, env, ctx);\n async function judged(request, env, ctx, state) {\n const nowSeconds = seconds();\n const e = env;\n const aud = textOf(e[WIRE_AUDIENCE_VAR]);\n const { method, target } = wireRequestBinding(request);\n const pathname = new URL(request.url).pathname;\n const endpoint = wireEndpoint(pathname);\n const call = endpoint.kind === \"call\";\n const claimed = call ? decodeWireEnvelope(request.headers.get(WIRE_ENVELOPE_HEADER) ?? \"\")?.claims : void 0;\n const issuer = claimed && endpoint.issuers.includes(claimed.iss) ? claimed.iss : endpoint.issuers[0];\n let claims;\n const line = (outcome, legacy2, extra = {}) => {\n const v = e[\"SUBSTRAT_VERSION_ID\"];\n const record2 = {\n substrat: \"wire\",\n state,\n issuer: claims?.iss ?? (endpoint.issuers.length === 1 ? endpoint.issuers[0] : null),\n kind: endpoint.kind,\n outcome,\n reason: null,\n fault: null,\n legacy: legacy2,\n tenantId: null,\n scopeId: null,\n versionId: typeof v === \"string\" && v.length > 0 ? v : null,\n ...extra\n };\n try {\n log(JSON.stringify(record2));\n } catch {\n }\n };\n const faulted = (fault, legacy2) => {\n line(\"fault\", legacy2, { fault });\n return problem(WIRE_FAULT_BODY, 503);\n };\n const legacy = legacyOf(request, call, env, options);\n let downstream = request;\n const staticFault = (fault, extra = {}) => {\n if (state !== \"dual\") return faulted(fault, legacy.credential);\n line(\"fault\", legacy.credential, { fault, ...extra });\n return serve(downstream, env, ctx);\n };\n let keys;\n try {\n keys = await keysFor(textOf(e[WIRE_ROUTER_KEYS_VAR]), textOf(e[WIRE_PLATFORM_KEYS_VAR]));\n } catch {\n return staticFault(\"keys\", servedAs(legacy.identity));\n }\n const readBody = async () => {\n if (request.body === null) return \"\";\n let body;\n try {\n body = await request.arrayBuffer();\n } catch {\n return null;\n }\n downstream = new Request(request, { body });\n return body;\n };\n const keepsNonces = call && wireReplayOf(method, pathname) === \"nonce\";\n const pinned = keepsNonces ? claimed?.scopeId ?? void 0 : void 0;\n const reach = options.nonceCache;\n const store = pinned !== void 0 && reach ? claimedThrough(() => reach(env, pinned, claimed?.tenantId ?? null), timeoutMs) : void 0;\n const expected = call ? {\n iss: issuer,\n kind: \"call\",\n aud,\n method,\n target,\n body: readBody,\n replay: store ?? \"none\",\n scopeId: store ? pinned : void 0\n } : { iss: \"router\", kind: \"route\", aud, method, target };\n let reason = null;\n let noStore = !store;\n try {\n const verdict = await verifyWireEnvelope({\n headers: request.headers,\n keys,\n expected,\n nowSeconds,\n clockSeconds: seconds,\n onRefusal: (why) => {\n reason = why;\n }\n });\n if (verdict.ok) claims = verdict.claims;\n } catch (error) {\n if (error instanceof GateFault && error.fault === \"no-nonce-store\") {\n claims = claimed;\n noStore = true;\n } else {\n return faulted(error instanceof GateFault ? error.fault : \"verifier\", legacy.credential);\n }\n }\n if (claims && keepsNonces && noStore) {\n return staticFault(claims.scopeId == null ? \"unscoped\" : \"no-nonce-store\", servedAs(legacy.identity ?? claims));\n }\n const mismatched = !!claims && !!legacy.identity && !sameIdentity(legacy.identity, claims);\n if (state === \"dual\" && legacy.credential === \"valid\") {\n const outcome = !claims ? \"legacy-accepted\" : mismatched ? \"dual-mismatch\" : \"signed-accepted\";\n line(outcome, \"valid\", { reason, ...servedAs(legacy.identity ?? claims ?? null) });\n return serve(downstream, env, ctx);\n }\n if (!claims) {\n line(\"refused\", legacy.credential, { reason });\n if (state === \"dual\") return serve(downstream, env, ctx);\n return problem(WIRE_REFUSAL_BODY, 401);\n }\n let proven;\n try {\n proven = provenAs(downstream, claims, env, options);\n } catch {\n return faulted(\"verifier\", legacy.credential);\n }\n line(mismatched ? \"dual-mismatch\" : \"signed-accepted\", legacy.credential, servedAs(claims));\n return serve(proven, env, ctx);\n }\n return {\n ...worker,\n fetch(request, env, ctx) {\n const state = stateOf(env);\n if (state === \"legacy-only\") return serve(request, env, ctx);\n return judged(request, env, ctx, state);\n }\n };\n}\nfunction provenAs(request, claims, env, options) {\n const headers = new Headers(request.headers);\n for (const name of [...headers.keys()]) if (name.startsWith(ASSERTED_PREFIX)) headers.delete(name);\n for (const [name, value] of wireUnsignedHeadersOf(claims.kind, request.headers)) headers.set(name, value);\n const put = (name, value) => {\n if (value) headers.set(name, value);\n };\n if (claims.kind === \"route\") {\n put(TENANT, claims.tenantId);\n put(SCOPE, claims.scopeId);\n put(SURFACE, claims.surface);\n put(VERTICAL, claims.vertical);\n put(ROUTER_CREDENTIAL, options.routerSecret(env));\n } else {\n put(VERTICAL, claims.vertical);\n put(PLATFORM_SECRET_HEADER, options.platformSecret(env));\n }\n return new Request(request, { headers });\n}\n\n// packages/control-plane-api/platform-entry/nonce-store.ts\nfunction nonceStoreOf(registered) {\n return (env, scopeId, tenantId) => {\n const hostFor = registered();\n if (!hostFor) return void 0;\n const store = hostFor(env);\n if (typeof store?.claimWireNonceLocal !== \"function\" || tenantId === null) return void 0;\n const claim = store.claimWireNonceLocal.bind(store);\n return { claim: (nonce, until) => claim(tenantId, scopeId, nonce, until) };\n };\n}\n\n// packages/vertical-host/src/scope-sweep-host.ts\nvar SCOPE_SWEEP_HOST_KEY = \"substrat.scope-sweep-host\";\nfunction slot() {\n return globalThis;\n}\nfunction registeredScopeSweepHost() {\n return slot()[Symbol.for(SCOPE_SWEEP_HOST_KEY)];\n}\n\n// substrat-platform-entry.ts\nimport * as vertical from \"__SUBSTRAT_VERTICAL_ENTRY__\";\nexport * from \"__SUBSTRAT_VERTICAL_ENTRY__\";\nvar routerSecret = (env) => env.ROUTER_SECRET;\nvar allowUnsigned = (env) => env.ALLOW_DEV_NODE === \"true\";\nvar substrat_platform_entry_default = withWireGate(\n withInvocationLog(vertical.default, { routerSecret, allowUnsigned, asyncLocalStorage: AsyncLocalStorage }),\n {\n routedNode: (headers, env) => readRoutedNode(headers, { expectedSecret: routerSecret(env), allowUnsigned: allowUnsigned(env) }),\n routerSecret,\n platformSecret: (env) => env.PLATFORM_SECRET,\n nonceCache: nonceStoreOf(registeredScopeSweepHost)\n }\n);\nexport {\n substrat_platform_entry_default as default\n};\n";
|
|
14
14
|
/**
|
|
15
15
|
* #2245: the entry's `node:async_hooks` import, as it appears in `PLATFORM_ENTRY_SOURCE`, and
|
|
16
16
|
* the line the uploader puts in its place for a script that can have no `AsyncLocalStorage`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-entry.generated.js","sourceRoot":"","sources":["../src/platform-entry.generated.ts"],"names":[],"mappings":"AAAA,sOAAsO;AACtO,sEAAsE;AAEtE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAElE,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,6BAA6B,CAAC;AAExE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAW,
|
|
1
|
+
{"version":3,"file":"platform-entry.generated.js","sourceRoot":"","sources":["../src/platform-entry.generated.ts"],"names":[],"mappings":"AAAA,sOAAsO;AACtO,sEAAsE;AAEtE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAElE,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,6BAA6B,CAAC;AAExE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAW,4hlDAA4hlD,CAAC;AAE1klD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,yDAAyD,CAAC;AACnG,MAAM,CAAC,MAAM,2BAA2B,GAAG,sCAAsC,CAAC;AAElF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AAEtE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAW,8pWAA8pW,CAAC"}
|
package/dist/platform-wire.d.ts
CHANGED
|
@@ -45,7 +45,8 @@ export declare function platformCallScope(request: Request, body: ArrayBuffer |
|
|
|
45
45
|
* dispatch stub from, so the envelope always names the script the call reaches. A signer that cannot
|
|
46
46
|
* sign never fails the call: it goes with its legacy header and its whole body, and the line says
|
|
47
47
|
* why, never a key. A streamed call is not signed and its body is not read: it goes exactly as
|
|
48
|
-
* given, counted `skipped
|
|
48
|
+
* given, counted `skipped` when its route is listed as unsigned by design, which is a decision, not a
|
|
49
|
+
* failure, and `failed` (`stream-unlisted`) when it is not.
|
|
49
50
|
*/
|
|
50
51
|
export declare function platformSignedFetch(settings: PlatformWireSettings, aud: string, send: typeof fetch): typeof fetch;
|
|
51
52
|
//# sourceMappingURL=platform-wire.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-wire.d.ts","sourceRoot":"","sources":["../src/platform-wire.ts"],"names":[],"mappings":"AAUA,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,iGAAiG;IACjG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CA6CxF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAY/H;
|
|
1
|
+
{"version":3,"file":"platform-wire.d.ts","sourceRoot":"","sources":["../src/platform-wire.ts"],"names":[],"mappings":"AAUA,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,iGAAiG;IACjG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CA6CxF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAY/H;AAmCD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,GAAG,OAAO,KAAK,CAgBjH"}
|