@lostgradient/weft 0.23.0 → 0.24.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/README.md +72 -4
- package/dist/cli/codegen-emit-dedup.d.ts +81 -0
- package/dist/cli/codegen-emit-dedup.js +45 -0
- package/dist/cli/codegen-emit-registry.d.ts +90 -0
- package/dist/cli/codegen-emit-registry.js +50 -0
- package/dist/cli/codegen-emit.d.ts +26 -39
- package/dist/cli/codegen-emit.js +4 -27
- package/dist/cli/codegen-validate.d.ts +49 -0
- package/dist/cli/codegen-validate.js +186 -0
- package/dist/cli/codegen.js +6 -87
- package/dist/cli/generated/operation-catalog.snapshot.json +287 -3
- package/dist/cli/generated/operation-client.generated.d.ts +324 -10
- package/dist/cli/generated/operation-client.generated.js +12 -0
- package/dist/cli/output.js +1 -1
- package/dist/cli/storage-factory.js +2 -0
- package/dist/cli/workflow-commands.js +2 -0
- package/dist/cli-main.js +1 -1
- package/dist/core/application-payload-digest.d.ts +42 -0
- package/dist/core/application-payload-digest.js +76 -0
- package/dist/core/application-primitive-abort.d.ts +50 -0
- package/dist/core/application-primitive-abort.js +40 -0
- package/dist/core/application-primitive-attempt-registry.d.ts +74 -0
- package/dist/core/application-primitive-attempt-registry.js +73 -0
- package/dist/core/application-primitive-codec.d.ts +36 -0
- package/dist/core/application-primitive-codec.js +56 -0
- package/dist/core/application-primitive-commit.d.ts +67 -0
- package/dist/core/application-primitive-commit.js +66 -0
- package/dist/core/application-primitive-guards.d.ts +62 -0
- package/dist/core/application-primitive-guards.js +89 -0
- package/dist/core/application-primitive-payload.d.ts +29 -0
- package/dist/core/application-primitive-payload.js +65 -0
- package/dist/core/application-primitive-timing.d.ts +18 -0
- package/dist/core/application-primitive-timing.js +22 -0
- package/dist/core/atomic-state.js +2 -0
- package/dist/core/catalog/codec.d.ts +40 -0
- package/dist/core/catalog/codec.js +45 -0
- package/dist/core/catalog/errors.d.ts +104 -0
- package/dist/core/catalog/errors.js +41 -0
- package/dist/core/catalog/index.d.ts +25 -0
- package/dist/core/catalog/index.js +15 -0
- package/dist/core/catalog/reference-counts.d.ts +105 -0
- package/dist/core/catalog/reference-counts.js +28 -0
- package/dist/core/catalog/removal.d.ts +52 -0
- package/dist/core/catalog/removal.js +14 -0
- package/dist/core/catalog/storage-io.d.ts +78 -0
- package/dist/core/catalog/storage-io.js +106 -0
- package/dist/core/catalog/types.d.ts +108 -0
- package/dist/core/catalog/types.js +0 -0
- package/dist/core/catalog/workflow-catalog.d.ts +165 -0
- package/dist/core/catalog/workflow-catalog.js +198 -0
- package/dist/core/compare-codepoint.d.ts +13 -0
- package/dist/core/compare-codepoint.js +7 -0
- package/dist/core/compression.js +2 -0
- package/dist/core/context/attributes.d.ts +1 -1
- package/dist/core/context/durable-operations.d.ts +2 -2
- package/dist/core/context/index.js +5 -3
- package/dist/core/context/state-namespace.d.ts +1 -1
- package/dist/core/contract/build.d.ts +64 -0
- package/dist/core/contract/build.js +99 -0
- package/dist/core/contract/compatibility.d.ts +187 -0
- package/dist/core/contract/compatibility.js +37 -0
- package/dist/core/contract/failure.d.ts +64 -0
- package/dist/core/contract/failure.js +4 -0
- package/dist/core/contract/hash.d.ts +92 -0
- package/dist/core/contract/hash.js +34 -0
- package/dist/core/contract/index.d.ts +21 -0
- package/dist/core/contract/index.js +22 -0
- package/dist/core/contract/limits.d.ts +74 -0
- package/dist/core/contract/limits.js +1 -0
- package/dist/core/contract/manifest-parse-schema.d.ts +37 -0
- package/dist/core/contract/manifest-parse-schema.js +106 -0
- package/dist/core/contract/manifest-parse.d.ts +76 -0
- package/dist/core/contract/manifest-parse.js +189 -0
- package/dist/core/contract/manifest.d.ts +56 -0
- package/dist/core/contract/manifest.js +31 -0
- package/dist/core/contract/normalize.d.ts +97 -0
- package/dist/core/contract/normalize.js +127 -0
- package/dist/core/contract/revision.d.ts +29 -0
- package/dist/core/contract/revision.js +5 -0
- package/dist/core/contract/types.d.ts +274 -0
- package/dist/core/contract/types.js +1 -0
- package/dist/core/engine/catalog-activation.d.ts +40 -0
- package/dist/core/engine/catalog-activation.js +17 -0
- package/dist/core/engine/catalog-events.d.ts +36 -0
- package/dist/core/engine/catalog-events.js +15 -0
- package/dist/core/engine/catalog-readiness.d.ts +49 -0
- package/dist/core/engine/catalog-readiness.js +59 -0
- package/dist/core/engine/catalog-removal.d.ts +132 -0
- package/dist/core/engine/catalog-removal.js +70 -0
- package/dist/core/engine/construction.d.ts +1 -1
- package/dist/core/engine/construction.js +4 -2
- package/dist/core/engine/disposal.js +9 -0
- package/dist/core/engine/engine-workflows-namespace.d.ts +130 -0
- package/dist/core/engine/engine-workflows-namespace.js +49 -0
- package/dist/core/engine/finalizer-metadata.d.ts +22 -0
- package/dist/core/engine/finalizer-metadata.js +12 -0
- package/dist/core/engine/handle-result.js +2 -0
- package/dist/core/engine/index.d.ts +83 -0
- package/dist/core/engine/index.js +61 -0
- package/dist/core/engine/internals.d.ts +44 -1
- package/dist/core/engine/internals.js +6 -0
- package/dist/core/engine/lifecycle/start.js +3 -0
- package/dist/core/engine/registration.d.ts +76 -0
- package/dist/core/engine/registration.js +12 -6
- package/dist/core/engine/source-registration.d.ts +42 -0
- package/dist/core/engine/source-registration.js +36 -0
- package/dist/core/engine/source-resolution.d.ts +85 -0
- package/dist/core/engine/source-resolution.js +119 -0
- package/dist/core/engine/validation.js +2 -2
- package/dist/core/events/catalog-events.d.ts +117 -0
- package/dist/core/events/catalog-events.js +62 -0
- package/dist/core/events/event-map.d.ts +6 -0
- package/dist/core/events/index.d.ts +1 -0
- package/dist/core/events/index.js +1 -0
- package/dist/core/mailbox-admission.d.ts +26 -0
- package/dist/core/mailbox-admission.js +130 -0
- package/dist/core/mailbox-claims.d.ts +251 -0
- package/dist/core/mailbox-claims.js +0 -0
- package/dist/core/mailbox-codec.d.ts +32 -0
- package/dist/core/mailbox-codec.js +221 -0
- package/dist/core/mailbox-contract.d.ts +290 -0
- package/dist/core/mailbox-contract.js +0 -0
- package/dist/core/mailbox-delivery.d.ts +37 -0
- package/dist/core/mailbox-delivery.js +193 -0
- package/dist/core/mailbox-guards.d.ts +78 -0
- package/dist/core/mailbox-guards.js +58 -0
- package/dist/core/mailbox-index-codec.d.ts +41 -0
- package/dist/core/mailbox-index-codec.js +71 -0
- package/dist/core/mailbox-internals.d.ts +156 -0
- package/dist/core/mailbox-internals.js +154 -0
- package/dist/core/mailbox-maintenance.d.ts +29 -0
- package/dist/core/mailbox-maintenance.js +196 -0
- package/dist/core/mailbox-settlement.d.ts +69 -0
- package/dist/core/mailbox-settlement.js +206 -0
- package/dist/core/mailbox-storage.d.ts +117 -0
- package/dist/core/mailbox-storage.js +115 -0
- package/dist/core/mailbox-transition-helpers.d.ts +70 -0
- package/dist/core/mailbox-transition-helpers.js +43 -0
- package/dist/core/mailbox-transitions-recovery.d.ts +28 -0
- package/dist/core/mailbox-transitions-recovery.js +64 -0
- package/dist/core/mailbox-transitions.d.ts +138 -0
- package/dist/core/mailbox-transitions.js +180 -0
- package/dist/core/mailbox-types.d.ts +406 -0
- package/dist/core/mailbox-types.js +16 -0
- package/dist/core/mailbox-validation.d.ts +65 -0
- package/dist/core/mailbox-validation.js +73 -0
- package/dist/core/mailbox-waits.d.ts +50 -0
- package/dist/core/mailbox-waits.js +97 -0
- package/dist/core/mailbox.d.ts +163 -0
- package/dist/core/mailbox.js +211 -0
- package/dist/core/outbox-claims.d.ts +307 -0
- package/dist/core/outbox-claims.js +0 -0
- package/dist/core/outbox-codec.d.ts +24 -0
- package/dist/core/outbox-codec.js +257 -0
- package/dist/core/outbox-contract.d.ts +346 -0
- package/dist/core/outbox-contract.js +0 -0
- package/dist/core/outbox-delivery.d.ts +34 -0
- package/dist/core/outbox-delivery.js +149 -0
- package/dist/core/outbox-drain.d.ts +29 -0
- package/dist/core/outbox-drain.js +158 -0
- package/dist/core/outbox-enqueue.d.ts +24 -0
- package/dist/core/outbox-enqueue.js +115 -0
- package/dist/core/outbox-guards.d.ts +76 -0
- package/dist/core/outbox-guards.js +60 -0
- package/dist/core/outbox-index-codec.d.ts +33 -0
- package/dist/core/outbox-index-codec.js +71 -0
- package/dist/core/outbox-internals.d.ts +99 -0
- package/dist/core/outbox-internals.js +159 -0
- package/dist/core/outbox-listing.d.ts +12 -0
- package/dist/core/outbox-listing.js +38 -0
- package/dist/core/outbox-maintenance.d.ts +28 -0
- package/dist/core/outbox-maintenance.js +191 -0
- package/dist/core/outbox-operations.d.ts +18 -0
- package/dist/core/outbox-operations.js +46 -0
- package/dist/core/outbox-runner.d.ts +30 -0
- package/dist/core/outbox-runner.js +217 -0
- package/dist/core/outbox-settlement.d.ts +57 -0
- package/dist/core/outbox-settlement.js +183 -0
- package/dist/core/outbox-storage.d.ts +107 -0
- package/dist/core/outbox-storage.js +127 -0
- package/dist/core/outbox-transition-helpers.d.ts +83 -0
- package/dist/core/outbox-transition-helpers.js +63 -0
- package/dist/core/outbox-transitions-recovery.d.ts +30 -0
- package/dist/core/outbox-transitions-recovery.js +42 -0
- package/dist/core/outbox-transitions.d.ts +145 -0
- package/dist/core/outbox-transitions.js +236 -0
- package/dist/core/outbox-types.d.ts +400 -0
- package/dist/core/outbox-types.js +20 -0
- package/dist/core/outbox-validation.d.ts +101 -0
- package/dist/core/outbox-validation.js +127 -0
- package/dist/core/outbox-waits.d.ts +39 -0
- package/dist/core/outbox-waits.js +88 -0
- package/dist/core/outbox.d.ts +156 -0
- package/dist/core/outbox.js +234 -0
- package/dist/core/registry-limits.d.ts +49 -0
- package/dist/core/registry-limits.js +10 -0
- package/dist/core/registry-schema-conversion.d.ts +20 -0
- package/dist/core/registry-schema-conversion.js +22 -0
- package/dist/core/registry-snapshot.d.ts +91 -42
- package/dist/core/registry-snapshot.js +39 -77
- package/dist/core/registry-workflow-contract-draft.d.ts +32 -0
- package/dist/core/registry-workflow-contract-draft.js +28 -0
- package/dist/core/registry-workflow-manifest.d.ts +122 -0
- package/dist/core/registry-workflow-manifest.js +92 -0
- package/dist/core/source/errors.d.ts +55 -0
- package/dist/core/source/errors.js +13 -0
- package/dist/core/source/index.d.ts +19 -0
- package/dist/core/source/index.js +4 -0
- package/dist/core/source/resolvers.d.ts +45 -0
- package/dist/core/source/resolvers.js +9 -0
- package/dist/core/source/types.d.ts +211 -0
- package/dist/core/source/types.js +0 -0
- package/dist/core/source/validate.d.ts +91 -0
- package/dist/core/source/validate.js +62 -0
- package/dist/core/source/workflow-source.d.ts +43 -0
- package/dist/core/source/workflow-source.js +16 -0
- package/dist/core/types/workflow-registries.d.ts +7 -0
- package/dist/core/types/workflow-registry.d.ts +12 -0
- package/dist/core/versioning.js +2 -0
- package/dist/core/weft-error.d.ts +1 -1
- package/dist/core/weft-error.js +9 -1
- package/dist/http.js +2 -2
- package/dist/index.d.ts +23 -2
- package/dist/index.js +50 -0
- package/dist/indexeddb.js +1 -1
- package/dist/json-schema.js +3 -3
- package/dist/mcp/resources.js +2 -0
- package/dist/runtime/portable.d.ts +9 -1
- package/dist/server/fault-to-json-rpc.js +3 -1
- package/dist/server/handler/auth-context-principal.js +4 -0
- package/dist/server/json-rpc-http.js +2 -0
- package/dist/server/json-rpc-websocket.js +6 -4
- package/dist/server/operation-catalog/index.d.ts +1 -1
- package/dist/server/operation-catalog/pipeline-helpers.js +2 -0
- package/dist/server/operation-catalog/types.d.ts +17 -0
- package/dist/server/operation-fault.d.ts +3 -0
- package/dist/server/operation-fault.js +3 -1
- package/dist/server/operations/activate-workflow-revision.d.ts +30 -0
- package/dist/server/operations/activate-workflow-revision.js +69 -0
- package/dist/server/operations/fleet-events-subscription.js +1 -1
- package/dist/server/operations/fork-workflow.js +1 -1
- package/dist/server/operations/get-active-workflow-revision.d.ts +32 -0
- package/dist/server/operations/get-active-workflow-revision.js +46 -0
- package/dist/server/operations/get-catalog-diagnostics.d.ts +85 -0
- package/dist/server/operations/get-catalog-diagnostics.js +57 -0
- package/dist/server/operations/get-registry.js +17 -4
- package/dist/server/operations/get-workflow-revision.d.ts +25 -0
- package/dist/server/operations/get-workflow-revision.js +50 -0
- package/dist/server/operations/install-workflow-revision.d.ts +27 -0
- package/dist/server/operations/install-workflow-revision.js +46 -0
- package/dist/server/operations/list-workflow-revisions.d.ts +20 -0
- package/dist/server/operations/list-workflow-revisions.js +40 -0
- package/dist/server/operations/start-or-signal-workflow.js +1 -1
- package/dist/server/operations/start-workflow.js +1 -1
- package/dist/server/operations/static-registrations.js +36 -0
- package/dist/server/operations/storage.js +2 -2
- package/dist/server/operations/submit-review-decision.js +1 -1
- package/dist/server/operations/workflow-catalog-operation-helpers.d.ts +59 -0
- package/dist/server/operations/workflow-catalog-operation-helpers.js +135 -0
- package/dist/server/runtime/websocket-upgrade.js +2 -0
- package/dist/storage/bun-sql.js +49 -6
- package/dist/storage/catalog-keys.d.ts +45 -0
- package/dist/storage/catalog-keys.js +6 -0
- package/dist/storage/compressed-storage.js +1 -1
- package/dist/storage/derived-operations.js +1 -1
- package/dist/storage/index.d.ts +26 -1
- package/dist/storage/interface.d.ts +26 -1
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-encoding.d.ts +15 -0
- package/dist/storage/key-encoding.js +3 -0
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +15 -0
- package/dist/storage/lmdb.d.ts +26 -1
- package/dist/storage/lmdb.js +1 -1
- package/dist/storage/mailbox-keys.d.ts +80 -0
- package/dist/storage/mailbox-keys.js +14 -0
- package/dist/storage/memory.js +1 -1
- package/dist/storage/neon.js +2 -2
- package/dist/storage/node-sqlite-loader.d.ts +1 -1
- package/dist/storage/node-sqlite-loader.js +2 -2
- package/dist/storage/node-sqlite.js +51 -8
- package/dist/storage/outbox-keys.d.ts +77 -0
- package/dist/storage/outbox-keys.js +14 -0
- package/dist/storage/postgres.js +2 -2
- package/dist/storage/resolve.js +1 -1
- package/dist/storage/scoped-storage.js +1 -1
- package/dist/storage/storage-configuration.d.ts +6 -0
- package/dist/storage/testing.js +1 -1
- package/dist/storage/turso.js +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/web-extension.js +1 -1
- package/dist/worker/manifest/registry-contract-builder.d.ts +21 -3
- package/dist/worker/manifest/registry-contract-builder.js +40 -31
- package/package.json +1 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The validation pipeline that turns a resolved-but-untrusted module value
|
|
3
|
+
* into an installable {@link WorkflowRevisionManifest}, or a bounded,
|
|
4
|
+
* structured rejection. Engine-agnostic and pure(-ish): no `Engine`
|
|
5
|
+
* instance, no storage, no catalog access — every check here operates only
|
|
6
|
+
* on the descriptor and the loaded module value, so it can be unit-tested
|
|
7
|
+
* (`validate.test.ts`) without constructing an engine.
|
|
8
|
+
*
|
|
9
|
+
* @module core/source/validate
|
|
10
|
+
*/
|
|
11
|
+
import type { ActivityRegistry } from '../activity-registry.ts';
|
|
12
|
+
import type { WorkflowRevisionManifest } from '../contract/types.ts';
|
|
13
|
+
import type { WorkflowDefinition } from '../types.ts';
|
|
14
|
+
import type { RegisteredWorkflowDefinition } from '../types/workflow-registry.ts';
|
|
15
|
+
import type { WorkflowSourceRejectionReason } from './errors.ts';
|
|
16
|
+
import type { WorkflowSourceDescriptor } from './types.ts';
|
|
17
|
+
/**
|
|
18
|
+
* The outcome of {@link validateResolvedWorkflowSource}: either every check
|
|
19
|
+
* passed and this is an installable revision, or validation failed with the
|
|
20
|
+
* complete, ordered list of every applicable
|
|
21
|
+
* {@link WorkflowSourceRejectionReason} — never just the first one found.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* import type { WorkflowSourceValidationOutcome } from './validate.ts';
|
|
26
|
+
*
|
|
27
|
+
* const outcome: WorkflowSourceValidationOutcome = { ok: false, reasons: ['missing-export'] };
|
|
28
|
+
* console.log(outcome.ok);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export type WorkflowSourceValidationOutcome = Readonly<{
|
|
32
|
+
ok: true;
|
|
33
|
+
manifest: WorkflowRevisionManifest;
|
|
34
|
+
definition: RegisteredWorkflowDefinition;
|
|
35
|
+
activityRegistry: ActivityRegistry;
|
|
36
|
+
loadedDefinition: WorkflowDefinition;
|
|
37
|
+
}> | Readonly<{
|
|
38
|
+
ok: false;
|
|
39
|
+
reasons: readonly WorkflowSourceRejectionReason[];
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Build the synthetic "expected" manifest `checkWorkflowCompatibility`
|
|
43
|
+
* compares `actual` against: `name`/`revision` always overridden to the
|
|
44
|
+
* descriptor's values (the whole point — an actual revision that
|
|
45
|
+
* legitimately differs from what the descriptor expected must be reported
|
|
46
|
+
* as `artifact-revision-mismatch`, never silently accepted), and
|
|
47
|
+
* `workflowVersion`/`contractHash` overridden ONLY when the descriptor pins
|
|
48
|
+
* them, otherwise copied from `actual` so an unpinned field can never
|
|
49
|
+
* produce a false-positive mismatch.
|
|
50
|
+
*
|
|
51
|
+
* Exported (not just used internally by {@link validateResolvedWorkflowSource})
|
|
52
|
+
* so `core/engine/source-resolution.ts`'s catalog fast path can run the
|
|
53
|
+
* identical pin check against an already-cached manifest — a registered
|
|
54
|
+
* handle that pins `workflowVersion`/`contractHash` must reject a cached
|
|
55
|
+
* manifest that contradicts those pins exactly as a fresh load-and-validate
|
|
56
|
+
* would, never silently returning mismatched cached data.
|
|
57
|
+
*/
|
|
58
|
+
export declare function buildExpectedManifest(descriptor: WorkflowSourceDescriptor, actual: WorkflowRevisionManifest): WorkflowRevisionManifest;
|
|
59
|
+
/**
|
|
60
|
+
* Validate a resolved-but-untrusted `moduleValue` (the raw value a
|
|
61
|
+
* {@link import('./resolvers.ts').resolveSourceModule} call produced)
|
|
62
|
+
* against `descriptor`'s expectations, in order:
|
|
63
|
+
*
|
|
64
|
+
* 1. `moduleValue` must be a plain record and must own `descriptor.exportName` — else `missing-export`.
|
|
65
|
+
* 2. The export must not itself be an ES module namespace object (an `export * as x` barrel) — else `ambiguous-export`.
|
|
66
|
+
* 3. The export must be a builder-produced `WorkflowDefinition` — else `invalid-definition` (covers the removed bare-handler shape).
|
|
67
|
+
* 4. The export's `name` must pass the wire-safe name grammar — else `invalid-definition`.
|
|
68
|
+
* 5. The export's activities/signals/updates/queries must normalize without error — else `invalid-definition`.
|
|
69
|
+
* 6. A `WorkflowRevisionManifest` must build from the normalized definition without exceeding a WFT-5 hostile-input limit — else `manifest-build-failed`.
|
|
70
|
+
* 7. The built manifest must be compatible with the descriptor's expectations via `checkWorkflowCompatibility` — else the returned `WorkflowCompatibilityReason`s.
|
|
71
|
+
*
|
|
72
|
+
* Every applicable reason at whichever step first fails is returned;
|
|
73
|
+
* later steps never run once an earlier step already failed, since each
|
|
74
|
+
* step's output feeds the next (there is nothing left to check once, say,
|
|
75
|
+
* the export cannot even be found).
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* import type { WorkflowSourceDescriptor } from '@lostgradient/weft';
|
|
80
|
+
*
|
|
81
|
+
* const descriptor: WorkflowSourceDescriptor = {
|
|
82
|
+
* kind: 'module',
|
|
83
|
+
* name: 'checkout',
|
|
84
|
+
* location: './checkout.ts',
|
|
85
|
+
* exportName: 'checkout',
|
|
86
|
+
* revision: 'r1',
|
|
87
|
+
* };
|
|
88
|
+
* console.log(descriptor.exportName);
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export declare function validateResolvedWorkflowSource(descriptor: WorkflowSourceDescriptor, moduleValue: unknown): Promise<WorkflowSourceValidationOutcome>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { isRecord } from "../../worker/manifest/is-record.js";
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_WORKFLOW_COMPATIBILITY_POLICY,
|
|
4
|
+
checkWorkflowCompatibility
|
|
5
|
+
} from "../contract/compatibility.js";
|
|
6
|
+
import { copyWorkflowDefinition } from "../engine/construction.js";
|
|
7
|
+
import {
|
|
8
|
+
buildPerWorkflowActivityRegistry,
|
|
9
|
+
buildRegistrationEntry,
|
|
10
|
+
isBuilderWorkflowDefinition
|
|
11
|
+
} from "../engine/registration.js";
|
|
12
|
+
import { buildWorkflowManifestFromDefinition } from "../registry-workflow-manifest.js";
|
|
13
|
+
import { validateWorkflowOrActivityName } from "../types/name-grammar.js";
|
|
14
|
+
function readOwnExport(moduleValue, exportName) {
|
|
15
|
+
return Object.hasOwn(moduleValue, exportName) ? moduleValue[exportName] : void 0;
|
|
16
|
+
}
|
|
17
|
+
export function buildExpectedManifest(descriptor, actual) {
|
|
18
|
+
return {
|
|
19
|
+
...actual,
|
|
20
|
+
name: descriptor.name,
|
|
21
|
+
revision: descriptor.revision,
|
|
22
|
+
...descriptor.workflowVersion === void 0 ? {} : { workflowVersion: descriptor.workflowVersion },
|
|
23
|
+
...descriptor.contractHash === void 0 ? {} : { contractHash: descriptor.contractHash }
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export async function validateResolvedWorkflowSource(descriptor, moduleValue) {
|
|
27
|
+
if (!isRecord(moduleValue))
|
|
28
|
+
return { ok: !1, reasons: ["missing-export"] };
|
|
29
|
+
const exportValue = readOwnExport(moduleValue, descriptor.exportName);
|
|
30
|
+
if (exportValue === void 0)
|
|
31
|
+
return { ok: !1, reasons: ["missing-export"] };
|
|
32
|
+
if (Object.prototype.toString.call(exportValue) === "[object Module]")
|
|
33
|
+
return { ok: !1, reasons: ["ambiguous-export"] };
|
|
34
|
+
if (!isBuilderWorkflowDefinition(exportValue))
|
|
35
|
+
return { ok: !1, reasons: ["invalid-definition"] };
|
|
36
|
+
const loadedDefinition = exportValue;
|
|
37
|
+
let entry, activityRegistry;
|
|
38
|
+
try {
|
|
39
|
+
validateWorkflowOrActivityName(loadedDefinition.name, "workflow");
|
|
40
|
+
entry = buildRegistrationEntry(loadedDefinition.name, loadedDefinition);
|
|
41
|
+
activityRegistry = buildPerWorkflowActivityRegistry(exportValue.activities);
|
|
42
|
+
} catch {
|
|
43
|
+
return { ok: !1, reasons: ["invalid-definition"] };
|
|
44
|
+
}
|
|
45
|
+
const registeredDefinition = copyWorkflowDefinition(loadedDefinition.name, entry);
|
|
46
|
+
let actualManifest;
|
|
47
|
+
try {
|
|
48
|
+
actualManifest = await buildWorkflowManifestFromDefinition(registeredDefinition, activityRegistry.listDefinitions());
|
|
49
|
+
} catch {
|
|
50
|
+
return { ok: !1, reasons: ["manifest-build-failed"] };
|
|
51
|
+
}
|
|
52
|
+
const expectedManifest = buildExpectedManifest(descriptor, actualManifest), verdict = checkWorkflowCompatibility(expectedManifest, actualManifest, DEFAULT_WORKFLOW_COMPATIBILITY_POLICY);
|
|
53
|
+
if (!verdict.compatible)
|
|
54
|
+
return { ok: !1, reasons: verdict.reasons };
|
|
55
|
+
return {
|
|
56
|
+
ok: !0,
|
|
57
|
+
manifest: actualManifest,
|
|
58
|
+
definition: registeredDefinition,
|
|
59
|
+
activityRegistry,
|
|
60
|
+
loadedDefinition
|
|
61
|
+
};
|
|
62
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `workflowSource()` — the typed factory pairing a serializable
|
|
3
|
+
* {@link WorkflowSourceDescriptor} with a host-side loader capability.
|
|
4
|
+
*
|
|
5
|
+
* @module core/source/workflow-source
|
|
6
|
+
*/
|
|
7
|
+
import type { InputOf, IsAny, ModuleWorkflowDefinition, NameOf, OutputOf, ServicesOf, WorkflowSourceDescriptorInput, WorkflowSourceHandle } from './types.ts';
|
|
8
|
+
/**
|
|
9
|
+
* Build a typed {@link WorkflowSourceHandle} from a `descriptor` and a
|
|
10
|
+
* `loader` capability. The loader is stored on the returned handle
|
|
11
|
+
* unchanged (identity, not wrapped) and is never invoked by this function —
|
|
12
|
+
* `workflowSource()` is pure construction, matching `engine.registerSource()`'s
|
|
13
|
+
* own "records a candidate, never imports" contract one level up.
|
|
14
|
+
*
|
|
15
|
+
* `loader` must be a literal `() => import('./x.ts')` (or an equivalent
|
|
16
|
+
* statically-typed async function) for `TInput`/`TOutput`/`TName`/`TServices`
|
|
17
|
+
* to infer from the module's real export types. A dynamic import
|
|
18
|
+
* (`() => import(pathVariable)`, typed `Promise<any>`) is rejected at the
|
|
19
|
+
* type level via `descriptor`'s `IsAny<TModule> extends true ? never : ...`
|
|
20
|
+
* guard — see `workflow-source.test-d.ts`.
|
|
21
|
+
*
|
|
22
|
+
* `descriptor.location` is carried verbatim into the returned handle and
|
|
23
|
+
* never read, parsed, or concatenated by this function or any other
|
|
24
|
+
* `core/source/**` module — there is no timestamp-query-string or
|
|
25
|
+
* cache-busting mechanism anywhere in this package; single-flight
|
|
26
|
+
* deduplication in `resolveWorkflowSource` is keyed by `(name, revision)`,
|
|
27
|
+
* not by `location`.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* import { workflowSource } from '@lostgradient/weft';
|
|
32
|
+
*
|
|
33
|
+
* declare const loadCheckout: () => Promise<{
|
|
34
|
+
* checkout: import('@lostgradient/weft').WorkflowDefinition<{ orderId: string }, { shipped: boolean }, 'checkout'>;
|
|
35
|
+
* }>;
|
|
36
|
+
* const source = workflowSource(
|
|
37
|
+
* { name: 'checkout', location: './workflows/checkout.ts', exportName: 'checkout', revision: 'r1' },
|
|
38
|
+
* loadCheckout,
|
|
39
|
+
* );
|
|
40
|
+
* console.log(source.descriptor.kind);
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function workflowSource<TModule extends Record<string, unknown>, TExportName extends keyof TModule & string>(descriptor: IsAny<TModule> extends true ? never : WorkflowSourceDescriptorInput<TExportName>, loader: () => Promise<TModule>): WorkflowSourceHandle<InputOf<ModuleWorkflowDefinition<TModule, TExportName>>, OutputOf<ModuleWorkflowDefinition<TModule, TExportName>>, NameOf<ModuleWorkflowDefinition<TModule, TExportName>>, ServicesOf<ModuleWorkflowDefinition<TModule, TExportName>>>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const DEFAULT_WORKFLOW_SOURCE_KIND = "module";
|
|
2
|
+
export function workflowSource(descriptor, loader) {
|
|
3
|
+
const input = descriptor;
|
|
4
|
+
return Object.freeze({
|
|
5
|
+
descriptor: Object.freeze({
|
|
6
|
+
kind: input.kind ?? DEFAULT_WORKFLOW_SOURCE_KIND,
|
|
7
|
+
name: input.name,
|
|
8
|
+
location: input.location,
|
|
9
|
+
exportName: input.exportName,
|
|
10
|
+
revision: input.revision,
|
|
11
|
+
...input.workflowVersion === void 0 ? {} : { workflowVersion: input.workflowVersion },
|
|
12
|
+
...input.contractHash === void 0 ? {} : { contractHash: input.contractHash }
|
|
13
|
+
}),
|
|
14
|
+
load: loader
|
|
15
|
+
});
|
|
16
|
+
}
|
|
@@ -5,6 +5,13 @@ import type { StepWorkflowFunction, WorkflowDefinition, WorkflowFunction } from
|
|
|
5
5
|
* `input` and `output` fields to make `engine.register`, `engine.start`, and
|
|
6
6
|
* `WorkflowHandle.result()` type-safe for string workflow names.
|
|
7
7
|
*
|
|
8
|
+
* `weft codegen`-generated entries additionally carry `revision`/
|
|
9
|
+
* `workflowVersion` string-literal fields for compile-time introspection —
|
|
10
|
+
* see `documentation/reference/cli.md#codegen` for the generated shape.
|
|
11
|
+
* Neither is required here: {@link WorkflowInput}/{@link WorkflowOutput}
|
|
12
|
+
* read only `input`/`output`, so a hand-authored entry (as below) never
|
|
13
|
+
* needs to supply them.
|
|
14
|
+
*
|
|
8
15
|
* @example
|
|
9
16
|
* ```ts
|
|
10
17
|
* import type { WorkflowRegistry } from '@lostgradient/weft';
|
|
@@ -38,4 +38,16 @@ export interface RegisteredWorkflowDefinition<TInput = unknown, TOutput = unknow
|
|
|
38
38
|
searchAttributes?: SearchAttributeSchema;
|
|
39
39
|
/** Optional start admission policy for this workflow type. */
|
|
40
40
|
concurrency?: WorkflowConcurrencyOptions<TInput>;
|
|
41
|
+
/**
|
|
42
|
+
* Schema-only metadata for the workflow's definition-level finalizer
|
|
43
|
+
* activity ({@link WorkflowDefinition.finalizer}), when registered. Carries
|
|
44
|
+
* only `name`/`inputSchema`/`outputSchema` — never the finalizer's
|
|
45
|
+
* `execute` handler — matching this interface's read-only introspection
|
|
46
|
+
* contract (the workflow's own handler is likewise never exposed here).
|
|
47
|
+
*/
|
|
48
|
+
finalizer?: Readonly<{
|
|
49
|
+
name: string;
|
|
50
|
+
inputSchema?: DefinitionSchema;
|
|
51
|
+
outputSchema?: DefinitionSchema;
|
|
52
|
+
}>;
|
|
41
53
|
}
|
package/dist/core/versioning.js
CHANGED
|
@@ -45,6 +45,8 @@ ${diffs.map((diff) => {
|
|
|
45
45
|
return ` - field \`${diff.field}\` was removed (was: ${diff.oldType})`;
|
|
46
46
|
case "type-changed":
|
|
47
47
|
return ` - field \`${diff.field}\` changed type: ${diff.oldType} \u2192 ${diff.newType}`;
|
|
48
|
+
default:
|
|
49
|
+
throw Error(`Unknown field diff change: ${JSON.stringify(diff)}`);
|
|
48
50
|
}
|
|
49
51
|
}).join(`
|
|
50
52
|
`)}`;
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* }
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
|
-
export type WeftErrorCode = 'WorkflowAlreadyExistsError' | 'BulkDeleteRequiresTerminalWorkflowsError' | 'BulkOperationConfirmationError' | 'WorkflowTypeNotRegisteredForRecoveryError' | 'EngineCreateNameMismatchError' | 'EngineDisposedError' | 'EngineDisposalError' | 'WorkflowNotFoundError' | 'WorkflowNotRegisteredError' | 'WorkflowConcurrencyLimitExceededError' | 'WorkflowSuspendNotSupportedError' | 'ActivityResolutionError' | 'BranchTopologyChangedError' | 'PersistedDataIncompatibleError' | 'PersistedDataCorruptError' | 'WorkflowTimeoutError' | 'HttpClientError' | 'WorkerProtocolIncompatibleError' | 'UpdateTimeoutError' | 'UpdateValidationError' | 'WorkflowTerminalError' | 'WorkflowBuilderError' | 'VersionMismatchError' | 'EffectReplayConflictError' | 'ReviewTimeoutError' | 'AtomicStateConflictError' | 'StandardSchemaValidationError' | 'ActivityReconciliationCapabilityError' | 'ActivityReconciliationConflictError' | 'ActivityReconciliationIndeterminateError' | 'DurableActivityScopeError' | 'DurableActivityUnsupportedError' | 'AsyncActivityTokenNotFoundError' | 'ActivityScheduleToCloseTimeoutError' | 'ActivityPerAttemptTimeoutError' | 'PayloadSizeExceededError' | 'StartOrSignalConflictError' | 'WorkflowTeardownPendingError' | 'IdempotencyKeyPurgedError' | 'WorkerManifestBuildError' | 'OwnershipModeMismatchError';
|
|
28
|
+
export type WeftErrorCode = 'WorkflowAlreadyExistsError' | 'BulkDeleteRequiresTerminalWorkflowsError' | 'BulkOperationConfirmationError' | 'WorkflowTypeNotRegisteredForRecoveryError' | 'EngineCreateNameMismatchError' | 'EngineDisposedError' | 'EngineDisposalError' | 'WorkflowNotFoundError' | 'WorkflowNotRegisteredError' | 'WorkflowConcurrencyLimitExceededError' | 'WorkflowSuspendNotSupportedError' | 'ActivityResolutionError' | 'BranchTopologyChangedError' | 'PersistedDataIncompatibleError' | 'PersistedDataCorruptError' | 'WorkflowTimeoutError' | 'HttpClientError' | 'WorkerProtocolIncompatibleError' | 'UpdateTimeoutError' | 'UpdateValidationError' | 'WorkflowTerminalError' | 'WorkflowBuilderError' | 'VersionMismatchError' | 'EffectReplayConflictError' | 'ReviewTimeoutError' | 'AtomicStateConflictError' | 'StandardSchemaValidationError' | 'ActivityReconciliationCapabilityError' | 'ActivityReconciliationConflictError' | 'ActivityReconciliationIndeterminateError' | 'DurableActivityScopeError' | 'DurableActivityUnsupportedError' | 'AsyncActivityTokenNotFoundError' | 'ActivityScheduleToCloseTimeoutError' | 'ActivityPerAttemptTimeoutError' | 'PayloadSizeExceededError' | 'StartOrSignalConflictError' | 'WorkflowTeardownPendingError' | 'IdempotencyKeyPurgedError' | 'WorkerManifestBuildError' | 'OwnershipModeMismatchError' | 'ApplicationCommandValidationError' | 'MailboxContentionError' | 'ApplicationDeliveryValidationError' | 'OutboxContentionError' | 'WaitBudgetElapsedError' | 'WorkflowCatalogConflictError' | 'WorkflowRevisionNotInstalledError' | 'WorkflowSourceValidationError';
|
|
29
29
|
/**
|
|
30
30
|
* Generic abstract base for all Weft library errors. The `TCode` parameter
|
|
31
31
|
* makes each subclass's `code` its own literal type; the exported base surface
|
package/dist/core/weft-error.js
CHANGED
|
@@ -47,7 +47,15 @@ const publicWeftErrorCodeMap = {
|
|
|
47
47
|
WorkflowTeardownPendingError: !0,
|
|
48
48
|
IdempotencyKeyPurgedError: !0,
|
|
49
49
|
WorkerManifestBuildError: !0,
|
|
50
|
-
OwnershipModeMismatchError: !0
|
|
50
|
+
OwnershipModeMismatchError: !0,
|
|
51
|
+
ApplicationCommandValidationError: !0,
|
|
52
|
+
MailboxContentionError: !0,
|
|
53
|
+
ApplicationDeliveryValidationError: !0,
|
|
54
|
+
OutboxContentionError: !0,
|
|
55
|
+
WaitBudgetElapsedError: !0,
|
|
56
|
+
WorkflowCatalogConflictError: !0,
|
|
57
|
+
WorkflowRevisionNotInstalledError: !0,
|
|
58
|
+
WorkflowSourceValidationError: !0
|
|
51
59
|
}, PUBLIC_WEFT_ERROR_CODES = new Set(Object.keys(publicWeftErrorCodeMap));
|
|
52
60
|
export function isWeftError(value) {
|
|
53
61
|
return value instanceof WeftError;
|
package/dist/http.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
async function*
|
|
2
|
-
`);o=B.pop()??"";for(let V of B)yield V}if(o+=i.decode(),o.length>0)yield o}finally{if(!u)try{await n.cancel()}catch{}n.releaseLock()}}function m(e){let t=[];for(let n=0;n<e.length;n+=512)t.push(String.fromCharCode(...e.subarray(n,n+512)));return btoa(t.join(""))}function C(e){let t=atob(e),n=new Uint8Array(t.length);for(let i=0;i<t.length;i+=1)n[i]=t.charCodeAt(i);return n}function b(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}async function p(e,t){return await e.get(t)!==null}async function*c(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function f(e,t){let n=0;for await(let i of c(e,t))n++;return n}async function y(e,t){let n=[];for await(let i of c(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function h(e,t,n){let i=[];for await(let o of c(e,t,n))i.push({type:"delete",key:o});if(i.length===0)return 0;return await e.batch(i),i.length}function P(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}var k="default";function r(e){return encodeURIComponent(e)}var v={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var S=1e4;class E extends Error{code="StorageBatchOperationLimitExceededError";cap=S;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${S}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function l(e,t){if(t>S)throw new E(e,t)}function A(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"ÿ"}function fe(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function ye(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function D(e,t){if(e.has)return e.has(t);return p(e,t)}function U(e,t,n){if(e.keys)return e.keys(t,n);return c(e,t,n)}async function I(e,t){if(e.count)return e.count(t);return f(e,t)}async function L(e,t){if(e.deletePrefix)return e.deletePrefix(t);return y(e,t)}async function _(e,t,n){if(l("conditionalBatch conditions",t.length),l("conditionalBatch operations",n.length),P(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var a=(e)=>String(e).padStart(16,"0"),W="0",q="1",T=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,he={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${a(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${a(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${a(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>T(e,t,n,q),startSignal:(e,t,n)=>T(e,t,n,W),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${a(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${a(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${a(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${a(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${a(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...v,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${k}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${a(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${a(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${a(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function M(e){if(e===void 0)return;if(typeof e!=="number"||!Number.isInteger(e)||e<0)throw Error("deleteRange limit must be a finite non-negative integer");return e===0?0:e}function d(e){let t={},n=!1;for(let o of["gt","gte","lt","lte"]){let s=e[o];if(s===void 0)continue;if(typeof s!=="string")throw Error("deleteRange bounds must be strings");t[o]=s,n=!0}if(!n)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=M(e.limit);if(i!==void 0)t.limit=i;return t}async function N(e,t,n){let i=d(n);if(e.deleteRange)return e.deleteRange(t,i);return h(e,t,i)}function j(e,t){let n={key:e,open:!1};if(t.gte!==void 0&&t.gte>n.key)n.key=t.gte,n.open=!1;if(t.gt!==void 0&&t.gt>=n.key)n.key=t.gt,n.open=!0;return n}function G(e,t){let n={key:A(e),open:!0};if(t.lt!==void 0&&t.lt<=n.key)n.key=t.lt,n.open=!0;if(t.lte!==void 0&&t.lte<n.key)n.key=t.lte,n.open=!1;return n}function we(e,t){let n=j(e,t),i=G(e,t);if(n.key>i.key||n.key===i.key&&(n.open||i.open))return null;return{lower:n,upper:i}}function w(e){return e.replaceAll(/:+$/g,"")}function F(e,t){let n=w(e),i=w(t);if(n.length===0)return i;if(i.length===0)return n;return`${n}:${i}`}class x{#e;#n;constructor(e,t){this.#e=e,this.#n=w(t)}#t(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#i(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#t(t.key),value:t.value};return{type:"delete",key:this.#t(t.key)}})}#o(e){if(this.#n.length===0)return e;return e.slice(this.#n.length+1)}#a(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#t(e.gt);if(e.gte!==void 0)t.gte=this.#t(e.gte);if(e.lt!==void 0)t.lt=this.#t(e.lt);if(e.lte!==void 0)t.lte=this.#t(e.lte);return t}#r(e={}){let t=this.#a(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#s(e){return this.#a(e)}capabilities(){return this.#e.capabilities()}scoped(e){return new x(this.#e,F(this.#n,e))}async get(e){return this.#e.get(this.#t(e))}async put(e,t){await this.#e.put(this.#t(e),t)}async delete(e){await this.#e.delete(this.#t(e))}async*scan(e,t){for await(let[n,i]of this.#e.scan(this.#t(e),this.#r(t)))yield[this.#o(n),i]}async batch(e){l("batch operations",e.length),await this.#e.batch(this.#i(e))}async conditionalBatch(e,t){return _(this.#e,e.map((n)=>({key:this.#t(n.key),expectedValue:n.expectedValue})),this.#i(t))}async has(e){return D(this.#e,this.#t(e))}async deletePrefix(e){return L(this.#e,this.#t(e))}async deleteRange(e,t){let n=this.#s(d(t));return N(this.#e,this.#t(e),n)}async*keys(e,t){for await(let n of U(this.#e,this.#t(e),this.#r(t)))yield this.#o(n)}async count(e){return I(this.#e,this.#t(e))}[Symbol.dispose](){this.#e[Symbol.dispose]()}}function H(e,t){return new x(e,t)}var Y=67108864;function z(e){if(e.type==="put")return{type:"put",key:e.key,value:m(e.value)};return{type:"delete",key:e.key}}function X(e){return{key:e.key,expectedValue:e.expectedValue===null?null:m(e.expectedValue)}}function J(e){if(!b(e)||typeof e.key!=="string"||typeof e.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:e.key,value:e.value}}function Z(e){if(!b(e)||typeof e.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return e.applied}function g(e,t,n){if(n!==void 0)e.searchParams.set(t,String(n))}function Q(e){if(e.trim().length===0)return null;let t=J(JSON.parse(e));return[t.key,C(t.value)]}class ee{#e;#n;#t;constructor(e){this.#e=e.baseUrl instanceof URL?e.baseUrl:new URL(e.baseUrl),this.#n={...e.headers},this.#t=e.remoteConditionalBatch??!1}capabilities(){return{persistence:"remote",readAfterWrite:"eventual",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:this.#t,boundedRangeDelete:!1}}#i(e){let t=this.#e.href.endsWith("/")?this.#e.href:`${this.#e.href}/`;return new URL(e.replace(/^\/+/,""),t)}#o(e){return this.#i(`/v1/storage/${encodeURIComponent(e)}`)}#a(e,t){let n=this.#i("/v1/storage");return n.searchParams.set("prefix",e),g(n,"limit",t.limit),g(n,"reverse",t.reverse),g(n,"gt",t.gt),g(n,"gte",t.gte),g(n,"lt",t.lt),g(n,"lte",t.lte),n}async#r(e,t={},n=[]){let i=new Headers(this.#n);for(let[s,u]of new Headers(t.headers).entries())i.set(s,u);let o=await fetch(e,{...t,headers:i});if(!o.ok&&!n.includes(o.status))throw Error(`HTTPStorage request failed: ${t.method??"GET"} ${e.pathname} returned ${String(o.status)}.`);return o}async get(e){let t=await this.#r(this.#o(e),{method:"GET"},[404]);if(t.status===404)return null;return new Uint8Array(await t.arrayBuffer())}async put(e,t){await this.#r(this.#o(e),{method:"PUT",headers:{"content-type":"application/octet-stream"},body:new Blob([new Uint8Array(t)])})}async delete(e){await this.#r(this.#o(e),{method:"DELETE"})}async*scan(e,t={}){let n=await this.#r(this.#a(e,t),{method:"GET",headers:{accept:"application/x-ndjson"}});for await(let i of O(n,{maximumBytes:Y,sizeLimitError:()=>Error("HTTPStorage scan response exceeded the maximum allowed size.")})){let o=Q(i);if(o!==null)yield o}}async batch(e){l("batch operations",e.length),await this.#r(this.#i("/v1/storage/-/batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({operations:e.map(z)})})}async conditionalBatch(e,t){l("conditionalBatch conditions",e.length),l("conditionalBatch operations",t.length);let n=await this.#r(this.#i("/v1/storage/-/conditional-batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({conditions:e.map(X),operations:t.map(z)})});return Z(await n.json())}has(e){return p(this,e)}async*keys(e,t){yield*c(this,e,t)}count(e){return f(this,e)}deletePrefix(e){return y(this,e)}deleteRange(e,t){return h(this,e,d(t))}scoped(e){return H(this,e)}[Symbol.dispose](){}}export{ee as HTTPStorage};
|
|
1
|
+
async function*B(e,t){if(e.body===null)return;let r=e.body.getReader(),i=new TextDecoder,o="",l=0,u=!1;try{while(!0){let{done:V,value:O}=await r.read();if(V){u=!0;break}if(l+=O.byteLength,l>t.maximumBytes)throw t.sizeLimitError();o+=i.decode(O,{stream:!0});let C=o.split(`
|
|
2
|
+
`);o=C.pop()??"";for(let Y of C)yield Y}if(o+=i.decode(),o.length>0)yield o}finally{if(!u)try{await r.cancel()}catch{}r.releaseLock()}}function b(e){let t=[];for(let r=0;r<e.length;r+=512)t.push(String.fromCharCode(...e.subarray(r,r+512)));return btoa(t.join(""))}function R(e){let t=atob(e),r=new Uint8Array(t.length);for(let i=0;i<t.length;i+=1)r[i]=t.charCodeAt(i);return r}function S(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}async function f(e,t){return await e.get(t)!==null}async function*c(e,t,r){for await(let[i]of e.scan(t,r))yield i}async function m(e,t){let r=0;for await(let i of c(e,t))r++;return r}async function y(e,t){let r=[];for await(let i of c(e,t))r.push({type:"delete",key:i});if(r.length===0)return 0;return await e.batch(r),r.length}async function h(e,t,r){let i=[];for await(let o of c(e,t,r))i.push({type:"delete",key:o});if(i.length===0)return 0;return await e.batch(i),i.length}function P(e,t,r){if(!e.capabilities()[t])throw Error(`Feature "${r}" requires storage capability "${t}", but this storage backend does not provide it.`)}function n(e){return encodeURIComponent(e)}function s(e){return String(e).padStart(16,"0")}var k={catalogEntry:(e,t)=>`catalog-entry:${n(e)}:${n(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${n(e)}:`,catalogActive:(e)=>`catalog-active:${n(e)}`};var T="default";var E={applicationMailbox:(e,t)=>`appmbx:v1:${n(e)}:${n(t)}`,applicationMailboxSinkProbe:(e,t,r)=>`appprobe:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${n(e)}:${n(t)}:`,applicationCommand:(e,t,r)=>`appcmd:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${n(e)}:${n(t)}:`,applicationCommandReady:(e,t,r)=>`appready:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandIdempotency:(e,t,r)=>`appidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${n(e)}:${n(t)}:`,applicationCommandBySequence:(e,t,r)=>`appseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${n(e)}:${n(t)}:`,applicationCommandTerminal:(e,t,r,i)=>`appterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var A={applicationOutbox:(e,t)=>`appobx:v1:${n(e)}:${n(t)}`,applicationOutboxSinkProbe:(e,t,r)=>`appprobe:v1:outbox:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${n(e)}:${n(t)}:`,applicationDelivery:(e,t,r)=>`appdlv:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${n(e)}:${n(t)}:`,applicationDeliveryDue:(e,t,r,i)=>`appdue:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`,applicationDeliveryIdempotency:(e,t,r)=>`appdidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${n(e)}:${n(t)}:`,applicationDeliveryBySequence:(e,t,r)=>`appdseq:v1:${n(e)}:${n(t)}:${s(r)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${n(e)}:${n(t)}:`,applicationDeliveryTerminal:(e,t,r,i)=>`appdterm:v1:${n(e)}:${n(t)}:${s(r)}:${n(i)}`};var D={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${n(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${n(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var w=1e4;class I extends Error{code="StorageBatchOperationLimitExceededError";cap=w;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${w}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function g(e,t){if(t>w)throw new I(e,t)}function L(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"ÿ"}function Re(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function Pe(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r<e.byteLength;r++)if(e[r]!==t[r])return!1;return!0}async function _(e,t){if(e.has)return e.has(t);return f(e,t)}function K(e,t,r){if(e.keys)return e.keys(t,r);return c(e,t,r)}async function N(e,t){if(e.count)return e.count(t);return m(e,t)}async function H(e,t){if(e.deletePrefix)return e.deletePrefix(t);return y(e,t)}async function z(e,t,r){if(g("conditionalBatch conditions",t.length),g("conditionalBatch operations",r.length),P(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,r)}var a=s,G="0",j="1",U=(e,t,r,i)=>`sig:${n(e)}:${n(t)}:${i}:${n(r)}`,ke={workflow:(e)=>`wf:${n(e)}`,checkpoint:(e)=>`wf:${n(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${n(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${n(e)}:timeline:`,timeline:(e,t)=>`wf:${n(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${n(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${n(t)}`,scheduleRun:(e)=>`schedule-run:${n(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${n(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${n(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${n(e)}:${n(t)}`,operation:(e,t,r)=>`op:${e}:${a(t)}:${r}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,r)=>`audit:bulk:${a(e)}:${n(t)}:${n(r)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${a(e)}:${n(t)}`,asyncActivity:(e,t)=>`async-act:v1:${n(e)}:${n(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${n(e)}:${n(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${n(e)}:`,activityReconciliation:(e,t,r)=>`actrec:v1:${n(e)}:${n(t)}:${r}`,eventPrefix:(e)=>`ev:${n(e)}:`,event:(e,t)=>`ev:${n(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${n(e)}:head`,eventWatermark:(e)=>`ev:${n(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${n(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${n(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,r)=>U(e,t,r,j),startSignal:(e,t,r)=>U(e,t,r,G),signalSequence:(e)=>`sigseq:v1:${n(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${n(e)}:`,signalAcceptedResponse:(e,t,r)=>`sigres:v1:${n(e)}:${n(t)}:${n(r)}`,deadline:(e,t)=>`wf-deadline:${a(e)}:${n(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${a(e)}:${n(t)}`,teardownTimer:(e,t)=>`wf-teardown:${a(e)}:${n(t)}`,delayedStart:(e,t)=>`wf-delayed:${a(e)}:${n(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${a(e)}:${n(t)}`,attribute:(e)=>`attr:${n(e)}`,attributeIndex:(e,t,r)=>`idx:${e}:${t}:${n(r)}`,tagIndex:(e,t)=>`tag:${n(e)}:${n(t)}`,updatePrefix:(e)=>`upd:${n(e)}:`,update:(e,t)=>`upd:${n(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${n(e)}:${t}`,startIdempotency:(e)=>`start-idem:${n(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${n(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...E,...A,...D,...k,budget:(e,t,r)=>`budget:${e}:${t}:${r}`,review:(e,t)=>`review:${n(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${n(e)}`,childCancellationPrefix:(e)=>`child-cancel:${n(e)}:`,childCancellation:(e,t)=>`child-cancel:${n(e)}:${n(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}`,childWorkflowByParent:(e,t,r)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}${n(r)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${n(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${n(e)}:${n(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${n(e)}`,workflowHasServices:(e)=>`wf-has-services:${n(e)}`,finalizerState:(e)=>`wf-finalizer-state:${n(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${n(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${n(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${n(e)}`,offload:(e,t)=>`offload:${n(e)}:${t}`,archive:(e,t)=>`archive:${n(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${n(e)}:${n(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${T}:${n(e)}:${n(t)}`,streamChunkPrefix:(e,t)=>`blob:${n(e)}:${t}:chunk:`,streamChunk:(e,t,r)=>`blob:${n(e)}:${t}:chunk:${String(r).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${n(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${n(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,r)=>`tool-effect:${n(e)}:${t}:${r}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${n(e)}:${n(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${n(e)}:${n(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${a(e)}:${n(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${a(e)}:${n(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${a(e)}:${n(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${n(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function F(e){if(e===void 0)return;if(typeof e!=="number"||!Number.isInteger(e)||e<0)throw Error("deleteRange limit must be a finite non-negative integer");return e===0?0:e}function p(e){let t={},r=!1;for(let o of["gt","gte","lt","lte"]){let l=e[o];if(l===void 0)continue;if(typeof l!=="string")throw Error("deleteRange bounds must be strings");t[o]=l,r=!0}if(!r)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=F(e.limit);if(i!==void 0)t.limit=i;return t}async function q(e,t,r){let i=p(r);if(e.deleteRange)return e.deleteRange(t,i);return h(e,t,i)}function X(e,t){let r={key:e,open:!1};if(t.gte!==void 0&&t.gte>r.key)r.key=t.gte,r.open=!1;if(t.gt!==void 0&&t.gt>=r.key)r.key=t.gt,r.open=!0;return r}function J(e,t){let r={key:L(e),open:!0};if(t.lt!==void 0&&t.lt<=r.key)r.key=t.lt,r.open=!0;if(t.lte!==void 0&&t.lte<r.key)r.key=t.lte,r.open=!1;return r}function De(e,t){let r=X(e,t),i=J(e,t);if(r.key>i.key||r.key===i.key&&(r.open||i.open))return null;return{lower:r,upper:i}}function x(e){return e.replaceAll(/:+$/g,"")}function Z(e,t){let r=x(e),i=x(t);if(r.length===0)return i;if(i.length===0)return r;return`${r}:${i}`}class v{#e;#n;constructor(e,t){this.#e=e,this.#n=x(t)}#t(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#i(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#t(t.key),value:t.value};return{type:"delete",key:this.#t(t.key)}})}#o(e){if(this.#n.length===0)return e;return e.slice(this.#n.length+1)}#a(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#t(e.gt);if(e.gte!==void 0)t.gte=this.#t(e.gte);if(e.lt!==void 0)t.lt=this.#t(e.lt);if(e.lte!==void 0)t.lte=this.#t(e.lte);return t}#r(e={}){let t=this.#a(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#s(e){return this.#a(e)}capabilities(){return this.#e.capabilities()}scoped(e){return new v(this.#e,Z(this.#n,e))}async get(e){return this.#e.get(this.#t(e))}async put(e,t){await this.#e.put(this.#t(e),t)}async delete(e){await this.#e.delete(this.#t(e))}async*scan(e,t){for await(let[r,i]of this.#e.scan(this.#t(e),this.#r(t)))yield[this.#o(r),i]}async batch(e){g("batch operations",e.length),await this.#e.batch(this.#i(e))}async conditionalBatch(e,t){return z(this.#e,e.map((r)=>({key:this.#t(r.key),expectedValue:r.expectedValue})),this.#i(t))}async has(e){return _(this.#e,this.#t(e))}async deletePrefix(e){return H(this.#e,this.#t(e))}async deleteRange(e,t){let r=this.#s(p(t));return q(this.#e,this.#t(e),r)}async*keys(e,t){for await(let r of K(this.#e,this.#t(e),this.#r(t)))yield this.#o(r)}async count(e){return N(this.#e,this.#t(e))}[Symbol.dispose](){this.#e[Symbol.dispose]()}}function W(e,t){return new v(e,t)}var Q=67108864;function M(e){if(e.type==="put")return{type:"put",key:e.key,value:b(e.value)};return{type:"delete",key:e.key}}function ee(e){return{key:e.key,expectedValue:e.expectedValue===null?null:b(e.expectedValue)}}function te(e){if(!S(e)||typeof e.key!=="string"||typeof e.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:e.key,value:e.value}}function ne(e){if(!S(e)||typeof e.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return e.applied}function d(e,t,r){if(r!==void 0)e.searchParams.set(t,String(r))}function re(e){if(e.trim().length===0)return null;let t=te(JSON.parse(e));return[t.key,R(t.value)]}class ie{#e;#n;#t;constructor(e){this.#e=e.baseUrl instanceof URL?e.baseUrl:new URL(e.baseUrl),this.#n={...e.headers},this.#t=e.remoteConditionalBatch??!1}capabilities(){return{persistence:"remote",readAfterWrite:"eventual",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:this.#t,boundedRangeDelete:!1}}#i(e){let t=this.#e.href.endsWith("/")?this.#e.href:`${this.#e.href}/`;return new URL(e.replace(/^\/+/,""),t)}#o(e){return this.#i(`/v1/storage/${encodeURIComponent(e)}`)}#a(e,t){let r=this.#i("/v1/storage");return r.searchParams.set("prefix",e),d(r,"limit",t.limit),d(r,"reverse",t.reverse),d(r,"gt",t.gt),d(r,"gte",t.gte),d(r,"lt",t.lt),d(r,"lte",t.lte),r}async#r(e,t={},r=[]){let i=new Headers(this.#n);for(let[l,u]of new Headers(t.headers).entries())i.set(l,u);let o=await fetch(e,{...t,headers:i});if(!o.ok&&!r.includes(o.status))throw Error(`HTTPStorage request failed: ${t.method??"GET"} ${e.pathname} returned ${String(o.status)}.`);return o}async get(e){let t=await this.#r(this.#o(e),{method:"GET"},[404]);if(t.status===404)return null;return new Uint8Array(await t.arrayBuffer())}async put(e,t){await this.#r(this.#o(e),{method:"PUT",headers:{"content-type":"application/octet-stream"},body:new Blob([new Uint8Array(t)])})}async delete(e){await this.#r(this.#o(e),{method:"DELETE"})}async*scan(e,t={}){let r=await this.#r(this.#a(e,t),{method:"GET",headers:{accept:"application/x-ndjson"}});for await(let i of B(r,{maximumBytes:Q,sizeLimitError:()=>Error("HTTPStorage scan response exceeded the maximum allowed size.")})){let o=re(i);if(o!==null)yield o}}async batch(e){g("batch operations",e.length),await this.#r(this.#i("/v1/storage/-/batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({operations:e.map(M)})})}async conditionalBatch(e,t){g("conditionalBatch conditions",e.length),g("conditionalBatch operations",t.length);let r=await this.#r(this.#i("/v1/storage/-/conditional-batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({conditions:e.map(ee),operations:t.map(M)})});return ne(await r.json())}has(e){return f(this,e)}async*keys(e,t){yield*c(this,e,t)}count(e){return m(this,e)}deletePrefix(e){return y(this,e)}deleteRange(e,t){return h(this,e,p(t))}scoped(e){return W(this,e)}[Symbol.dispose](){}}export{ie as HTTPStorage};
|
package/dist/index.d.ts
CHANGED
|
@@ -23,12 +23,18 @@ export type { FaultCode } from './core/fault-code.ts';
|
|
|
23
23
|
export { DurableActivityScopeError, DurableActivityUnsupportedError, durableActivity, } from './core/context/durable-activity.ts';
|
|
24
24
|
export { ActivityReconciliationCapabilityError, ActivityReconciliationConflictError, ActivityReconciliationIndeterminateError, ActivityResolutionError, AsyncActivityTokenNotFoundError, BulkDeleteRequiresTerminalWorkflowsError, BulkOperationConfirmationError, ENGINE_LEASE_LOST_WARNING_NAME, ENGINE_LEASE_SYNCHRONOUS_DISPOSE_WARNING_NAME, Engine, EngineCreateNameMismatchError, EngineDisposalError, EngineDisposedError, EngineLeaseAcquisitionTimeoutError, EngineLeaseCorruptedError, EngineLeaseNotHeldError, IdempotencyKeyPurgedError, PersistedDataCorruptError, PersistedDataIncompatibleError, ScheduleHandle, StartOrSignalConflictError, WorkflowAlreadyExistsError, WorkflowConcurrencyLimitExceededError, WorkflowHandle, WorkflowNotFoundError, WorkflowNotRegisteredError, WorkflowSuspendNotSupportedError, WorkflowTeardownPendingError, WorkflowTypeNotRegisteredForRecoveryError, } from './core/engine';
|
|
25
25
|
export { OwnershipModeMismatchError, WORKFLOW_CLAIM_LOST_WARNING_NAME, WORKFLOW_WAKE_DISCARDED_WARNING_NAME, WeftWorkflowClaimLostWarning, WeftWorkflowWakeDiscardedWarning, WorkflowClaimUnavailableError, } from './core/engine';
|
|
26
|
-
export type { EngineCreateOptions, EngineLeaseHealth, EngineStateNamespace, LeaseLostReason, RecoverAllOptions, RecoveredWorkflowInfo, RegistryAgnosticEngine, WorkflowWakeKind, } from './core/engine';
|
|
26
|
+
export type { ActivateWorkflowRevisionOptions, EngineCreateOptions, EngineLeaseHealth, EngineStateNamespace, EngineWorkflowsNamespace, LeaseLostReason, RecoverAllOptions, RecoveredWorkflowInfo, RegistryAgnosticEngine, ResolveWorkflowSourceOptions, WorkflowWakeKind, } from './core/engine';
|
|
27
|
+
export { WorkflowCatalogConflictError, WorkflowRevisionNotInstalledError, } from './core/catalog/index.ts';
|
|
28
|
+
export type { WorkflowCatalogActivationResult, WorkflowCatalogActivePointer, WorkflowRevisionRecord, } from './core/catalog/index.ts';
|
|
29
|
+
export { WorkflowSourceValidationError, workflowSource } from './core/source/index.ts';
|
|
30
|
+
export type { WorkflowSourceDescriptor, WorkflowSourceDescriptorInput, WorkflowSourceHandle, WorkflowSourceKind, WorkflowSourceRejectionReason, } from './core/source/index.ts';
|
|
31
|
+
export { getWorkflowRevisionDiagnostics, removeWorkflowRevision } from './core/engine';
|
|
32
|
+
export type { WorkflowCatalogRemovalResult, WorkflowRevisionDiagnostics, WorkflowRevisionReferenceCounts, } from './core/engine';
|
|
27
33
|
export { DEFAULT_CHECKPOINT_SIZE_WARNING_THRESHOLD, DEFAULT_MAX_NESTING_DEPTH, DEFAULT_POLL_INTERVAL_MS, DEFAULT_RETRY_POLICY, DEFAULT_VISIBILITY_TIMEOUT_MS, HISTORY_CIRCUIT_BREAKER_REASON, WorkflowBuilderError, query, schedule, signal, update, workflow, } from './core/types';
|
|
28
34
|
export type { ActivityArgsFor, ActivityCallOptions, ActivityCallable, ActivityContext, ActivityDefinition, ActivityEntryInput, ActivityFunction, ActivityMap, ActivityMapInput, ActivityObjectInput, ActivityResultFor, ActivityVerificationContext, ActivityVerificationPhase, ActivityVerificationResult, AnyActivityDefinition, AnyWorkflowDefinition, ArchiveAdapter, BuilderState, BuiltWorkflowDefinition, BulkCancelResult, BulkDeleteResult, BulkOperationAction, BulkOperationAuditEvent, BulkOperationCommitOptions, BulkOperationDryRunOptions, BulkOperationDryRunResult, BulkOperationError, BulkOperationFilterSummary, BulkOperationOptions, BulkOperationPrincipal, BulkOperationScopeSummary, BulkRetryFailedResult, BulkSignalAllCommitOptions, BulkSignalAllDryRunOptions, BulkSignalAllOptions, BulkSignalResult, BulkTagResult, Checkpoint, CheckpointState, CheckpointSummary, CompletedReviewEntry, CoordinatedUpdateResult, DefinitionSchema, Duration, EngineOptions, FailureCategory, ForkLineage, ForkOptions, HistoryPolicy, InferActivityEntries, InferActivityEntry, InferWorkflowEntries, InferWorkflowEntry, InitialBuilderState, LaunchMetadata, ListFilter, ListOptions, MarkBuilderState, NormalizeActivities, NormalizedActivityEntry, NormalizedRetentionPolicy, PaginatedResult, PayloadSizePolicy, PendingAsyncActivityInfo, PendingAsyncActivityListOptions, PendingAsyncActivityPage, PendingReviewEntry, PurgeResult, QueryDefinition, QueryMap, QueryShape, RegisteredWorkflowDefinition, RestartLineage, RetentionOverview, RetentionPolicy, RetryPolicy, ReviewDecision, ReviewListEntry, ReviewListFilter, ReviewStatus, ScheduleDefinition, ScheduleFilter, ScheduleOptions, ScheduleOverlapPolicy, ScheduleQueuedRun, ScheduleSpec, ScheduleState, ScheduleStatus, ScheduleSummary, ScheduleUpdateOptions, SearchAttributeDefinition, SearchAttributeHandle, SearchAttributeSchema, SearchAttributeValue, Serializer, SignalDefinition, SignalDeliveryOptions, SignalMap, SignalPayload, StartOptions, StartOrSignalOptions, StartOrSignalSignal, SubmitReviewOptions, TerminationReason, UpdateDefinition, UpdateMap, UpdatePayload, WorkerReplayOperationFailure, WorkerReplayOperationSignature, WorkflowAlreadyRegistered, WorkflowAtomicState, WorkflowAtomicStateOptions, WorkflowBuilder, WorkflowBuilderOptions, WorkflowConcurrencyOptions, WorkflowContext, WorkflowDefinition, WorkflowEvent, WorkflowFinalizerStatus, WorkflowFunction, WorkflowGenerator, WorkflowId, WorkflowKeyedRaceResult, WorkflowLogLevel, WorkflowLogRecord, WorkflowLogger, WorkflowRegistry, WorkflowReplay, WorkflowScheduleProvenance, WorkflowServicesResolution, WorkflowServicesResolverInfo, WorkflowServicesResolverLaunchOptions, WorkflowServicesResolverScheduleInfo, WorkflowSessionState, WorkflowSnapshot, WorkflowState, WorkflowStateNamespace, WorkflowStatus, WorkflowSummary, WorkflowTimelineEntry, WorkflowTimelineOperationDetail, WorkflowTimelineStatus, WorkflowTypeRetentionPolicy, } from './core/types';
|
|
29
35
|
export { AlertManager } from './alerting/index';
|
|
30
36
|
export type { AlertAction, AlertMetric, AlertRule, AlertStateSnapshot, AlertStatus, AlertingOptions, WebhookTarget, } from './alerting/types';
|
|
31
|
-
export { ActivityAsyncPendingEvent, ActivityCompletedEvent, ActivityFailedEvent, ActivityStartedEvent, AlertFiredEvent, AlertResolvedEvent, AttributesChangedEvent, CheckpointSizeWarningEvent, ConstraintViolatedEvent, DevelopmentWarningEvent, ScheduleFiredEvent, ScheduleMissedFireEvent, SignalDeliveredEvent, SignalReceivedEvent, StorageSizeReportedEvent, TaskResultDeadLetteredEvent, UpdateCompletedEvent, UpdateReceivedEvent, WorkflowCancelledEvent, WorkflowCompletedEvent, WorkflowDefinitionRegisteredEvent, WorkflowFailedEvent, WorkflowRecoverySkippedEvent, WorkflowResumedEvent, WorkflowStartedEvent, WorkflowSuspendedEvent, WorkflowTeardownEvent, WorkflowTimedOutEvent, } from './core/events';
|
|
37
|
+
export { ActivityAsyncPendingEvent, ActivityCompletedEvent, ActivityFailedEvent, ActivityStartedEvent, AlertFiredEvent, AlertResolvedEvent, AttributesChangedEvent, CheckpointSizeWarningEvent, ConstraintViolatedEvent, DevelopmentWarningEvent, ScheduleFiredEvent, ScheduleMissedFireEvent, SignalDeliveredEvent, SignalReceivedEvent, StorageSizeReportedEvent, TaskResultDeadLetteredEvent, UpdateCompletedEvent, UpdateReceivedEvent, WorkflowCancelledEvent, WorkflowCompletedEvent, WorkflowDefinitionRegisteredEvent, WorkflowFailedEvent, WorkflowRecoverySkippedEvent, WorkflowResumedEvent, WorkflowRevisionActivatedEvent, WorkflowRevisionActivationRejectedEvent, WorkflowRevisionDrainingEvent, WorkflowRevisionInstalledEvent, WorkflowRevisionRemovedEvent, WorkflowStartedEvent, WorkflowSuspendedEvent, WorkflowTeardownEvent, WorkflowTimedOutEvent, } from './core/events';
|
|
32
38
|
export type { TypedEventTarget, WeftEventMap, WorkflowRecoverySkippedReason, WorkflowTeardownStatus, } from './core/events';
|
|
33
39
|
export { detectRuntime, detectRuntimeVersion, hashBytes, hashString, sleep, } from './runtime/portable';
|
|
34
40
|
export type { RuntimeKind } from './runtime/portable';
|
|
@@ -72,6 +78,19 @@ export type { FieldDiff, ShapeDescriptor, ShapeDiffOptions } from './core/versio
|
|
|
72
78
|
export { WorkflowTimeoutError, checkExpiredDeadlines, createDeadlineOperations, timeRemaining, } from './core/timeouts';
|
|
73
79
|
export { AtomicState, AtomicStateChangeEvent, AtomicStateConflictError, AtomicStateConflictEvent, AtomicStateExhaustedEvent, OBSERVABLE_SYMBOL, } from './core/atomic-state';
|
|
74
80
|
export type { AtomicStateCommitResult, AtomicStateEvent, AtomicStateObserver, AtomicStateOptions, AtomicStateScope, AtomicStateSnapshot, AtomicStateSubscription, SleepFunction, } from './core/atomic-state';
|
|
81
|
+
export { WaitBudgetElapsedError } from './core/application-primitive-abort';
|
|
82
|
+
export { Mailbox } from './core/mailbox';
|
|
83
|
+
export type { ApplicationCommandAdmission, ApplicationCommandCancellationResult, ApplicationCommandClaim, ApplicationCommandClaimedPayload, ApplicationCommandCleanupResult, ApplicationCommandInput, ApplicationCommandReceipt, ApplicationCommandRejection, ApplicationCommandRenewalResult, ApplicationCommandSettleResult, MailboxCapacity, MailboxClaimResult, MailboxEventSink, MailboxListOptions, MailboxMaintenanceReport, MailboxOptions, MailboxWaitOptions, } from './core/mailbox-contract';
|
|
84
|
+
export { MailboxContentionError } from './core/mailbox-internals';
|
|
85
|
+
export { isApplicationCommandLeased, isApplicationCommandTerminalState, isApplicationCommandWaiting, } from './core/mailbox-types';
|
|
86
|
+
export type { ApplicationCommandAccepted, ApplicationCommandAvailable, ApplicationCommandCancelling, ApplicationCommandCausation, ApplicationCommandClaimed, ApplicationCommandFailure, ApplicationCommandFailureReason, ApplicationCommandInlinePayload, ApplicationCommandLeasedRecord, ApplicationCommandPayload, ApplicationCommandRecord, ApplicationCommandReferencePayload, ApplicationCommandState, ApplicationCommandTerminalRecord, ApplicationCommandTerminalState, ApplicationCommandWaitingRecord, MailboxRecord, } from './core/mailbox-types';
|
|
87
|
+
export { ApplicationCommandValidationError } from './core/mailbox-validation';
|
|
88
|
+
export { Outbox } from './core/outbox';
|
|
89
|
+
export type { ApplicationDeliveryAdapter, ApplicationDeliveryAdmission, ApplicationDeliveryCancellationResult, ApplicationDeliveryClaim, ApplicationDeliveryClaimedPayload, ApplicationDeliveryCleanupResult, ApplicationDeliveryHeartbeatResult, ApplicationDeliveryInput, ApplicationDeliveryOperatorResult, ApplicationDeliveryOutcome, ApplicationDeliveryReceipt, ApplicationDeliverySendRequest, ApplicationDeliverySettleResult, OutboxCapacity, OutboxClaimResult, OutboxDeliverResult, OutboxDrainReport, OutboxEventSink, OutboxListOptions, OutboxMaintenanceReport, OutboxOptions, OutboxWaitOptions, } from './core/outbox-contract';
|
|
90
|
+
export { ApplicationDeliveryValidationError } from './core/outbox-guards';
|
|
91
|
+
export { OutboxContentionError } from './core/outbox-internals';
|
|
92
|
+
export { isApplicationDeliveryAttempting, isApplicationDeliveryLeased, isApplicationDeliveryTerminalState, isApplicationDeliveryWaiting, } from './core/outbox-types';
|
|
93
|
+
export type { ApplicationDeliveryAttempting, ApplicationDeliveryCancelling, ApplicationDeliveryCausation, ApplicationDeliveryClaimed, ApplicationDeliveryFailure, ApplicationDeliveryLeasedRecord, ApplicationDeliveryPayload, ApplicationDeliveryQueued, ApplicationDeliveryRecord, ApplicationDeliveryRetryScheduled, ApplicationDeliveryState, ApplicationDeliveryTerminalRecord, ApplicationDeliveryTerminalState, ApplicationDeliveryUnknownOutcomePolicy, ApplicationDeliveryWaitingRecord, OutboxRecord, } from './core/outbox-types';
|
|
75
94
|
export { DurableMutex, DurableSemaphore, initialLockRecord } from './core/concurrency';
|
|
76
95
|
export type { AcquireAttempt, AcquireWithSlot, CasSlot, DurableSemaphoreOptions, LockHolder, LockRecord, RenewWithSlot, } from './core/concurrency';
|
|
77
96
|
export { handleRequest } from './server/handler';
|
|
@@ -100,6 +119,8 @@ export { createActivityWorkerEntryUrl, initializeActivityWorkerMessageLoop, revo
|
|
|
100
119
|
export type { ActivityHandlerLookup } from './workers/activity-worker-entry';
|
|
101
120
|
export { WorkerPool } from './workers/pool';
|
|
102
121
|
export type { WorkerPoolOptions } from './workers/pool';
|
|
122
|
+
export { DEFAULT_WORKFLOW_COMPATIBILITY_POLICY, MAX_CONTRACT_IDENTIFIER_BYTES, MAX_CONTRACT_MESSAGE_COUNT, MAX_CONTRACT_SCHEMA_DEPTH, MAX_NORMALIZED_CONTRACT_BYTES, WORKFLOW_CONTRACT_DIGEST_ALGORITHM, WORKFLOW_CONTRACT_VERSION, WORKFLOW_REVISION_MANIFEST_VERSION, WorkflowContractConversionError, activityContractHash, buildWorkflowContract, buildWorkflowRevisionManifest, canonicalWorkflowContractJson, checkWorkflowCompatibility, contractHash, deriveWorkflowRevision, digestCanonicalWorkflowContract, normalizeWorkflowContract, parseWorkflowRevisionManifest, } from './core/contract/index.ts';
|
|
123
|
+
export type { BuildWorkflowRevisionManifestOptions, WorkflowActivityContract, WorkflowCompatibilityPolicy, WorkflowCompatibilityReason, WorkflowCompatibilityVerdict, WorkflowContract, WorkflowContractActivitySource, WorkflowContractMessageSource, WorkflowContractSource, WorkflowMessageContract, WorkflowRevisionManifest, WorkflowRevisionManifestParseResult, WorkflowRevisionManifestParseSuccess, WorkflowRevisionManifestRejectionReason, WorkflowRevisionManifestValidationFailure, } from './core/contract/index.ts';
|
|
103
124
|
export { HeartbeatManager } from './worker/heartbeat';
|
|
104
125
|
export { RemoteWorker } from './worker/index';
|
|
105
126
|
export { LongPollWorker } from './worker/long-poll';
|
package/dist/index.js
CHANGED
|
@@ -55,6 +55,12 @@ export {
|
|
|
55
55
|
WeftWorkflowWakeDiscardedWarning,
|
|
56
56
|
WorkflowClaimUnavailableError
|
|
57
57
|
} from "./core/engine.js";
|
|
58
|
+
export {
|
|
59
|
+
WorkflowCatalogConflictError,
|
|
60
|
+
WorkflowRevisionNotInstalledError
|
|
61
|
+
} from "./core/catalog/index.js";
|
|
62
|
+
export { WorkflowSourceValidationError, workflowSource } from "./core/source/index.js";
|
|
63
|
+
export { getWorkflowRevisionDiagnostics, removeWorkflowRevision } from "./core/engine.js";
|
|
58
64
|
export {
|
|
59
65
|
DEFAULT_CHECKPOINT_SIZE_WARNING_THRESHOLD,
|
|
60
66
|
DEFAULT_MAX_NESTING_DEPTH,
|
|
@@ -95,6 +101,11 @@ export {
|
|
|
95
101
|
WorkflowFailedEvent,
|
|
96
102
|
WorkflowRecoverySkippedEvent,
|
|
97
103
|
WorkflowResumedEvent,
|
|
104
|
+
WorkflowRevisionActivatedEvent,
|
|
105
|
+
WorkflowRevisionActivationRejectedEvent,
|
|
106
|
+
WorkflowRevisionDrainingEvent,
|
|
107
|
+
WorkflowRevisionInstalledEvent,
|
|
108
|
+
WorkflowRevisionRemovedEvent,
|
|
98
109
|
WorkflowStartedEvent,
|
|
99
110
|
WorkflowSuspendedEvent,
|
|
100
111
|
WorkflowTeardownEvent,
|
|
@@ -189,6 +200,24 @@ export {
|
|
|
189
200
|
AtomicStateExhaustedEvent,
|
|
190
201
|
OBSERVABLE_SYMBOL
|
|
191
202
|
} from "./core/atomic-state.js";
|
|
203
|
+
export { WaitBudgetElapsedError } from "./core/application-primitive-abort.js";
|
|
204
|
+
export { Mailbox } from "./core/mailbox.js";
|
|
205
|
+
export { MailboxContentionError } from "./core/mailbox-internals.js";
|
|
206
|
+
export {
|
|
207
|
+
isApplicationCommandLeased,
|
|
208
|
+
isApplicationCommandTerminalState,
|
|
209
|
+
isApplicationCommandWaiting
|
|
210
|
+
} from "./core/mailbox-types.js";
|
|
211
|
+
export { ApplicationCommandValidationError } from "./core/mailbox-validation.js";
|
|
212
|
+
export { Outbox } from "./core/outbox.js";
|
|
213
|
+
export { ApplicationDeliveryValidationError } from "./core/outbox-guards.js";
|
|
214
|
+
export { OutboxContentionError } from "./core/outbox-internals.js";
|
|
215
|
+
export {
|
|
216
|
+
isApplicationDeliveryAttempting,
|
|
217
|
+
isApplicationDeliveryLeased,
|
|
218
|
+
isApplicationDeliveryTerminalState,
|
|
219
|
+
isApplicationDeliveryWaiting
|
|
220
|
+
} from "./core/outbox-types.js";
|
|
192
221
|
export { DurableMutex, DurableSemaphore, initialLockRecord } from "./core/concurrency.js";
|
|
193
222
|
export { handleRequest } from "./server/handler.js";
|
|
194
223
|
export { createAuthenticator, validateAuthConfig } from "./server/authentication.js";
|
|
@@ -221,6 +250,27 @@ export {
|
|
|
221
250
|
revokeActivityWorkerEntryUrl
|
|
222
251
|
} from "./workers/activity-worker-entry.js";
|
|
223
252
|
export { WorkerPool } from "./workers/pool.js";
|
|
253
|
+
export {
|
|
254
|
+
DEFAULT_WORKFLOW_COMPATIBILITY_POLICY,
|
|
255
|
+
MAX_CONTRACT_IDENTIFIER_BYTES,
|
|
256
|
+
MAX_CONTRACT_MESSAGE_COUNT,
|
|
257
|
+
MAX_CONTRACT_SCHEMA_DEPTH,
|
|
258
|
+
MAX_NORMALIZED_CONTRACT_BYTES,
|
|
259
|
+
WORKFLOW_CONTRACT_DIGEST_ALGORITHM,
|
|
260
|
+
WORKFLOW_CONTRACT_VERSION,
|
|
261
|
+
WORKFLOW_REVISION_MANIFEST_VERSION,
|
|
262
|
+
WorkflowContractConversionError,
|
|
263
|
+
activityContractHash,
|
|
264
|
+
buildWorkflowContract,
|
|
265
|
+
buildWorkflowRevisionManifest,
|
|
266
|
+
canonicalWorkflowContractJson,
|
|
267
|
+
checkWorkflowCompatibility,
|
|
268
|
+
contractHash,
|
|
269
|
+
deriveWorkflowRevision,
|
|
270
|
+
digestCanonicalWorkflowContract,
|
|
271
|
+
normalizeWorkflowContract,
|
|
272
|
+
parseWorkflowRevisionManifest
|
|
273
|
+
} from "./core/contract/index.js";
|
|
224
274
|
export { HeartbeatManager } from "./worker/heartbeat.js";
|
|
225
275
|
export { RemoteWorker } from "./worker/index.js";
|
|
226
276
|
export { LongPollWorker } from "./worker/long-poll.js";
|
package/dist/indexeddb.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
async function k(e,t){return await e.get(t)!==null}async function*C(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function I(e,t){let n=0;for await(let i of C(e,t))n++;return n}async function A(e,t){let n=[];for await(let i of C(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function E(e,t,n){let i=[];for await(let o of C(e,t,n))i.push({type:"delete",key:o});if(i.length===0)return 0;return await e.batch(i),i.length}function T(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}var K="default";function r(e){return encodeURIComponent(e)}var z={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var O=1e4;class L extends Error{code="StorageBatchOperationLimitExceededError";cap=O;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${O}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function m(e,t){if(t>O)throw new L(e,t)}function w(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"ÿ"}function U(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function V(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function N(e,t){if(e.has)return e.has(t);return k(e,t)}function M(e,t,n){if(e.keys)return e.keys(t,n);return C(e,t,n)}async function W(e,t){if(e.count)return e.count(t);return I(e,t)}async function j(e,t){if(e.deletePrefix)return e.deletePrefix(t);return A(e,t)}async function q(e,t,n){if(m("conditionalBatch conditions",t.length),m("conditionalBatch operations",n.length),T(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var f=(e)=>String(e).padStart(16,"0"),Q="0",J="1",_=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,he={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${f(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${f(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${f(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>_(e,t,n,J),startSignal:(e,t,n)=>_(e,t,n,Q),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${f(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${f(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${f(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${f(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${f(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...z,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${K}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${f(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${f(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${f(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function Z(e){if(e===void 0)return;if(typeof e!=="number"||!Number.isInteger(e)||e<0)throw Error("deleteRange limit must be a finite non-negative integer");return e===0?0:e}function R(e){let t={},n=!1;for(let o of["gt","gte","lt","lte"]){let s=e[o];if(s===void 0)continue;if(typeof s!=="string")throw Error("deleteRange bounds must be strings");t[o]=s,n=!0}if(!n)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=Z(e.limit);if(i!==void 0)t.limit=i;return t}async function H(e,t,n){let i=R(n);if(e.deleteRange)return e.deleteRange(t,i);return E(e,t,i)}function ee(e,t){let n={key:e,open:!1};if(t.gte!==void 0&&t.gte>n.key)n.key=t.gte,n.open=!1;if(t.gt!==void 0&&t.gt>=n.key)n.key=t.gt,n.open=!0;return n}function te(e,t){let n={key:w(e),open:!0};if(t.lt!==void 0&&t.lt<=n.key)n.key=t.lt,n.open=!0;if(t.lte!==void 0&&t.lte<n.key)n.key=t.lte,n.open=!1;return n}function F(e,t){let n=ee(e,t),i=te(e,t);if(n.key>i.key||n.key===i.key&&(n.open||i.open))return null;return{lower:n,upper:i}}function v(e){return e.replaceAll(/:+$/g,"")}function ne(e,t){let n=v(e),i=v(t);if(n.length===0)return i;if(i.length===0)return n;return`${n}:${i}`}class P{#t;#n;constructor(e,t){this.#t=e,this.#n=v(t)}#e(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#r(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#e(t.key),value:t.value};return{type:"delete",key:this.#e(t.key)}})}#i(e){if(this.#n.length===0)return e;return e.slice(this.#n.length+1)}#o(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#e(e.gt);if(e.gte!==void 0)t.gte=this.#e(e.gte);if(e.lt!==void 0)t.lt=this.#e(e.lt);if(e.lte!==void 0)t.lte=this.#e(e.lte);return t}#s(e={}){let t=this.#o(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#a(e){return this.#o(e)}capabilities(){return this.#t.capabilities()}scoped(e){return new P(this.#t,ne(this.#n,e))}async get(e){return this.#t.get(this.#e(e))}async put(e,t){await this.#t.put(this.#e(e),t)}async delete(e){await this.#t.delete(this.#e(e))}async*scan(e,t){for await(let[n,i]of this.#t.scan(this.#e(e),this.#s(t)))yield[this.#i(n),i]}async batch(e){m("batch operations",e.length),await this.#t.batch(this.#r(e))}async conditionalBatch(e,t){return q(this.#t,e.map((n)=>({key:this.#e(n.key),expectedValue:n.expectedValue})),this.#r(t))}async has(e){return N(this.#t,this.#e(e))}async deletePrefix(e){return j(this.#t,this.#e(e))}async deleteRange(e,t){let n=this.#a(R(t));return H(this.#t,this.#e(e),n)}async*keys(e,t){for await(let n of M(this.#t,this.#e(e),this.#s(t)))yield this.#i(n)}async count(e){return W(this.#t,this.#e(e))}[Symbol.dispose](){this.#t[Symbol.dispose]()}}function G(e,t){return new P(e,t)}var l="kv";function re(e=globalThis){let{indexedDB:t,IDBKeyRange:n}=e;if(t===void 0||n===void 0)throw Error("IndexedDBStorage requires both indexedDB and IDBKeyRange runtime globals.");return{indexedDB:t,IDBKeyRange:n}}function S(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}function ie(e,t){let n=null,i=null,o=null,s=(a,c)=>{let d=a??Error(c);if(i){let g=i;n=null,i=null,g(d);return}o=d};return e.onsuccess=()=>{if(!n)return;let a=n;n=null,i=null,a(e.result)},e.onerror=()=>{s(e.error,"IndexedDB cursor request failed.")},t.onerror=()=>{s(t.error,"IndexedDB transaction failed.")},t.onabort=()=>{s(t.error,"IndexedDB transaction aborted.")},()=>new Promise((a,c)=>{if(o){let d=o;o=null,c(d);return}if(n=a,i=c,e.readyState==="done"){let d=n;n=null,i=null,d?.(e.result)}})}async function*X(e,t,n,i,o,s){let{limit:a,reverse:c}=i,d=w(n),g=t.bound(n,d,!1,!0),h=c?"prev":"next",p=e.transaction(l,"readonly"),u=p.objectStore(l),y=o(u,g,h),b=ie(y,p),x=0,D=!1;try{let B=await b();while(B){if(a!==void 0&&x>=a)break;let Y=B.key;if(U(Y,i))yield s(B),x++;B.continue(),B=await b()}D=!0}finally{if(!D)try{p.abort()}catch{}}}class oe{#t;#n=null;#e;#r;constructor(e="weft",t=re()){this.#t=e,this.#r=t,this.#e=this.#i()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#i(){let e=this.#r.indexedDB.open(this.#t,1);return e.onupgradeneeded=()=>{let t=e.result;if(!t.objectStoreNames.contains(l))t.createObjectStore(l)},S(e).then((t)=>(this.#n=t,t))}async get(e){let i=(await this.#e).transaction(l,"readonly").objectStore(l),o=await S(i.get(e));return o===void 0?null:new Uint8Array(o)}async put(e,t){let o=(await this.#e).transaction(l,"readwrite").objectStore(l);await S(o.put(t,e))}async delete(e){let i=(await this.#e).transaction(l,"readwrite").objectStore(l);await S(i.delete(e))}async has(e){let i=(await this.#e).transaction(l,"readonly").objectStore(l);return await S(i.count(e))>0}async deletePrefix(e){let t=await this.#e,n=w(e),i=this.#r.IDBKeyRange.bound(e,n,!1,!0);return new Promise((o,s)=>{let a=t.transaction(l,"readwrite"),c=a.objectStore(l),d=0,g=c.count(i);g.onsuccess=()=>{d=g.result,c.delete(i)},a.oncomplete=()=>o(d),a.onerror=()=>s(a.error)})}async deleteRange(e,t){let n=R(t),i=F(e,n);if(i===null)return 0;let o=this.#r.IDBKeyRange.bound(i.lower.key,i.upper.key,i.lower.open,i.upper.open),s=await this.#e,{limit:a}=n;return new Promise((c,d)=>{let g=s.transaction(l,"readwrite"),h=g.objectStore(l),p=0;if(a===void 0){let u=h.count(o);u.onsuccess=()=>{p=u.result,h.delete(o)}}else{let u=h.openCursor(o,"next");u.onsuccess=()=>{let y=u.result;if(y===null||p>=a)return;if(y.delete(),p++,p<a)y.continue()}}g.oncomplete=()=>c(p),g.onerror=()=>d(g.error)})}async*scan(e,t={}){let n=await this.#e;yield*X(n,this.#r.IDBKeyRange,e,t,(i,o,s)=>i.openCursor(o,s),(i)=>[i.key,new Uint8Array(i.value)])}async batch(e){if(m("batch operations",e.length),e.length===0)return;let t=await this.#e;return new Promise((n,i)=>{let o=t.transaction(l,"readwrite"),s=o.objectStore(l);for(let a of e)if(a.type==="put")s.put(a.value,a.key);else s.delete(a.key);o.oncomplete=()=>n(),o.onerror=()=>i(o.error)})}async conditionalBatch(e,t){m("conditionalBatch conditions",e.length),m("conditionalBatch operations",t.length);let n=await this.#e;return new Promise((i,o)=>{let s=n.transaction(l,"readwrite"),a=s.objectStore(l),c=!1,d=!1,g=(u,y)=>{if(c)return;c=!0,o(u??Error(y))};s.oncomplete=()=>{if(c)return;c=!0,i(!0)},s.onerror=()=>{g(s.error,"IndexedDB conditionalBatch transaction failed.")},s.onabort=()=>{if(c)return;if(c=!0,d){i(!1);return}o(s.error??Error("IndexedDB conditionalBatch transaction aborted."))};let h=()=>{for(let u of t)if(u.type==="put")a.put(u.value,u.key);else a.delete(u.key)},p=(u)=>{if(u>=e.length){h();return}let y=e[u],b=a.get(y.key);b.onsuccess=()=>{let x=b.result,D=x===void 0?null:new Uint8Array(x);if(!V(D,y.expectedValue)){d=!0,s.abort();return}p(u+1)},b.onerror=()=>{g(b.error,"IndexedDB conditionalBatch condition check failed.")}};p(0)})}async*keys(e,t={}){let n=await this.#e;yield*X(n,this.#r.IDBKeyRange,e,t,(i,o,s)=>i.openKeyCursor(o,s),(i)=>i.key)}async count(e){let t=await this.#e,n=w(e),o=t.transaction(l,"readonly").objectStore(l);return S(o.count(this.#r.IDBKeyRange.bound(e,n,!1,!0)))}scoped(e){return G(this,e)}[Symbol.dispose](){if(this.#n)this.#n.close(),this.#n=null}}export{oe as IndexedDBStorage};
|
|
1
|
+
async function I(e,t){return await e.get(t)!==null}async function*C(e,t,r){for await(let[i]of e.scan(t,r))yield i}async function A(e,t){let r=0;for await(let i of C(e,t))r++;return r}async function E(e,t){let r=[];for await(let i of C(e,t))r.push({type:"delete",key:i});if(r.length===0)return 0;return await e.batch(r),r.length}async function T(e,t,r){let i=[];for await(let o of C(e,t,r))i.push({type:"delete",key:o});if(i.length===0)return 0;return await e.batch(i),i.length}function K(e,t,r){if(!e.capabilities()[t])throw Error(`Feature "${r}" requires storage capability "${t}", but this storage backend does not provide it.`)}function n(e){return encodeURIComponent(e)}function y(e){return String(e).padStart(16,"0")}var _={catalogEntry:(e,t)=>`catalog-entry:${n(e)}:${n(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${n(e)}:`,catalogActive:(e)=>`catalog-active:${n(e)}`};var L="default";var z={applicationMailbox:(e,t)=>`appmbx:v1:${n(e)}:${n(t)}`,applicationMailboxSinkProbe:(e,t,r)=>`appprobe:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${n(e)}:${n(t)}:`,applicationCommand:(e,t,r)=>`appcmd:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${n(e)}:${n(t)}:`,applicationCommandReady:(e,t,r)=>`appready:v1:${n(e)}:${n(t)}:${y(r)}`,applicationCommandIdempotency:(e,t,r)=>`appidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${n(e)}:${n(t)}:`,applicationCommandBySequence:(e,t,r)=>`appseq:v1:${n(e)}:${n(t)}:${y(r)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${n(e)}:${n(t)}:`,applicationCommandTerminal:(e,t,r,i)=>`appterm:v1:${n(e)}:${n(t)}:${y(r)}:${n(i)}`};var U={applicationOutbox:(e,t)=>`appobx:v1:${n(e)}:${n(t)}`,applicationOutboxSinkProbe:(e,t,r)=>`appprobe:v1:outbox:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${n(e)}:${n(t)}:`,applicationDelivery:(e,t,r)=>`appdlv:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${n(e)}:${n(t)}:`,applicationDeliveryDue:(e,t,r,i)=>`appdue:v1:${n(e)}:${n(t)}:${y(r)}:${n(i)}`,applicationDeliveryIdempotency:(e,t,r)=>`appdidem:v1:${n(e)}:${n(t)}:${n(r)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${n(e)}:${n(t)}:`,applicationDeliveryBySequence:(e,t,r)=>`appdseq:v1:${n(e)}:${n(t)}:${y(r)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${n(e)}:${n(t)}:`,applicationDeliveryTerminal:(e,t,r,i)=>`appdterm:v1:${n(e)}:${n(t)}:${y(r)}:${n(i)}`};var q={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${n(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${n(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var O=1e4;class M extends Error{code="StorageBatchOperationLimitExceededError";cap=O;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${O}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function h(e,t){if(t>O)throw new M(e,t)}function w(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"ÿ"}function W(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function N(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r<e.byteLength;r++)if(e[r]!==t[r])return!1;return!0}async function j(e,t){if(e.has)return e.has(t);return I(e,t)}function H(e,t,r){if(e.keys)return e.keys(t,r);return C(e,t,r)}async function F(e,t){if(e.count)return e.count(t);return A(e,t)}async function Y(e,t){if(e.deletePrefix)return e.deletePrefix(t);return E(e,t)}async function X(e,t,r){if(h("conditionalBatch conditions",t.length),h("conditionalBatch operations",r.length),K(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,r)}var f=y,te="0",ne="1",V=(e,t,r,i)=>`sig:${n(e)}:${n(t)}:${i}:${n(r)}`,ke={workflow:(e)=>`wf:${n(e)}`,checkpoint:(e)=>`wf:${n(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${n(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${n(e)}:timeline:`,timeline:(e,t)=>`wf:${n(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${n(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${n(t)}`,scheduleRun:(e)=>`schedule-run:${n(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${n(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${n(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${n(e)}:${n(t)}`,operation:(e,t,r)=>`op:${e}:${f(t)}:${r}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,r)=>`audit:bulk:${f(e)}:${n(t)}:${n(r)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${f(e)}:${n(t)}`,asyncActivity:(e,t)=>`async-act:v1:${n(e)}:${n(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${n(e)}:${n(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${n(e)}:`,activityReconciliation:(e,t,r)=>`actrec:v1:${n(e)}:${n(t)}:${r}`,eventPrefix:(e)=>`ev:${n(e)}:`,event:(e,t)=>`ev:${n(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${n(e)}:head`,eventWatermark:(e)=>`ev:${n(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${n(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${n(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,r)=>V(e,t,r,ne),startSignal:(e,t,r)=>V(e,t,r,te),signalSequence:(e)=>`sigseq:v1:${n(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${n(e)}:`,signalAcceptedResponse:(e,t,r)=>`sigres:v1:${n(e)}:${n(t)}:${n(r)}`,deadline:(e,t)=>`wf-deadline:${f(e)}:${n(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${f(e)}:${n(t)}`,teardownTimer:(e,t)=>`wf-teardown:${f(e)}:${n(t)}`,delayedStart:(e,t)=>`wf-delayed:${f(e)}:${n(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${f(e)}:${n(t)}`,attribute:(e)=>`attr:${n(e)}`,attributeIndex:(e,t,r)=>`idx:${e}:${t}:${n(r)}`,tagIndex:(e,t)=>`tag:${n(e)}:${n(t)}`,updatePrefix:(e)=>`upd:${n(e)}:`,update:(e,t)=>`upd:${n(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${n(e)}:${t}`,startIdempotency:(e)=>`start-idem:${n(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${n(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...z,...U,...q,..._,budget:(e,t,r)=>`budget:${e}:${t}:${r}`,review:(e,t)=>`review:${n(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${n(e)}`,childCancellationPrefix:(e)=>`child-cancel:${n(e)}:`,childCancellation:(e,t)=>`child-cancel:${n(e)}:${n(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}`,childWorkflowByParent:(e,t,r)=>`child-by-parent:${n(e)}:${t===void 0?"":`${n(t)}:`}${n(r)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${n(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${n(e)}:${n(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${n(e)}`,workflowHasServices:(e)=>`wf-has-services:${n(e)}`,finalizerState:(e)=>`wf-finalizer-state:${n(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${n(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${n(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${n(e)}`,offload:(e,t)=>`offload:${n(e)}:${t}`,archive:(e,t)=>`archive:${n(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${n(e)}:${n(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${L}:${n(e)}:${n(t)}`,streamChunkPrefix:(e,t)=>`blob:${n(e)}:${t}:chunk:`,streamChunk:(e,t,r)=>`blob:${n(e)}:${t}:chunk:${String(r).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${n(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${n(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,r)=>`tool-effect:${n(e)}:${t}:${r}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${n(e)}:${n(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${n(e)}:${n(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${f(e)}:${n(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${f(e)}:${n(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${f(e)}:${n(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${n(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function re(e){if(e===void 0)return;if(typeof e!=="number"||!Number.isInteger(e)||e<0)throw Error("deleteRange limit must be a finite non-negative integer");return e===0?0:e}function D(e){let t={},r=!1;for(let o of["gt","gte","lt","lte"]){let a=e[o];if(a===void 0)continue;if(typeof a!=="string")throw Error("deleteRange bounds must be strings");t[o]=a,r=!0}if(!r)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let i=re(e.limit);if(i!==void 0)t.limit=i;return t}async function G(e,t,r){let i=D(r);if(e.deleteRange)return e.deleteRange(t,i);return T(e,t,i)}function ie(e,t){let r={key:e,open:!1};if(t.gte!==void 0&&t.gte>r.key)r.key=t.gte,r.open=!1;if(t.gt!==void 0&&t.gt>=r.key)r.key=t.gt,r.open=!0;return r}function oe(e,t){let r={key:w(e),open:!0};if(t.lt!==void 0&&t.lt<=r.key)r.key=t.lt,r.open=!0;if(t.lte!==void 0&&t.lte<r.key)r.key=t.lte,r.open=!1;return r}function Q(e,t){let r=ie(e,t),i=oe(e,t);if(r.key>i.key||r.key===i.key&&(r.open||i.open))return null;return{lower:r,upper:i}}function P(e){return e.replaceAll(/:+$/g,"")}function ae(e,t){let r=P(e),i=P(t);if(r.length===0)return i;if(i.length===0)return r;return`${r}:${i}`}class k{#t;#n;constructor(e,t){this.#t=e,this.#n=P(t)}#e(e){if(this.#n.length===0)return e;return e.length===0?`${this.#n}:`:`${this.#n}:${e}`}#r(e){return e.map((t)=>{if(t.type==="put")return{type:"put",key:this.#e(t.key),value:t.value};return{type:"delete",key:this.#e(t.key)}})}#i(e){if(this.#n.length===0)return e;return e.slice(this.#n.length+1)}#o(e){let t={};if(e.limit!==void 0)t.limit=e.limit;if(e.gt!==void 0)t.gt=this.#e(e.gt);if(e.gte!==void 0)t.gte=this.#e(e.gte);if(e.lt!==void 0)t.lt=this.#e(e.lt);if(e.lte!==void 0)t.lte=this.#e(e.lte);return t}#a(e={}){let t=this.#o(e);if(e.reverse!==void 0)t.reverse=e.reverse;return t}#s(e){return this.#o(e)}capabilities(){return this.#t.capabilities()}scoped(e){return new k(this.#t,ae(this.#n,e))}async get(e){return this.#t.get(this.#e(e))}async put(e,t){await this.#t.put(this.#e(e),t)}async delete(e){await this.#t.delete(this.#e(e))}async*scan(e,t){for await(let[r,i]of this.#t.scan(this.#e(e),this.#a(t)))yield[this.#i(r),i]}async batch(e){h("batch operations",e.length),await this.#t.batch(this.#r(e))}async conditionalBatch(e,t){return X(this.#t,e.map((r)=>({key:this.#e(r.key),expectedValue:r.expectedValue})),this.#r(t))}async has(e){return j(this.#t,this.#e(e))}async deletePrefix(e){return Y(this.#t,this.#e(e))}async deleteRange(e,t){let r=this.#s(D(t));return G(this.#t,this.#e(e),r)}async*keys(e,t){for await(let r of H(this.#t,this.#e(e),this.#a(t)))yield this.#i(r)}async count(e){return F(this.#t,this.#e(e))}[Symbol.dispose](){this.#t[Symbol.dispose]()}}function J(e,t){return new k(e,t)}var l="kv";function se(e=globalThis){let{indexedDB:t,IDBKeyRange:r}=e;if(t===void 0||r===void 0)throw Error("IndexedDBStorage requires both indexedDB and IDBKeyRange runtime globals.");return{indexedDB:t,IDBKeyRange:r}}function x(e){return new Promise((t,r)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>r(e.error)})}function le(e,t){let r=null,i=null,o=null,a=(s,c)=>{let u=s??Error(c);if(i){let d=i;r=null,i=null,d(u);return}o=u};return e.onsuccess=()=>{if(!r)return;let s=r;r=null,i=null,s(e.result)},e.onerror=()=>{a(e.error,"IndexedDB cursor request failed.")},t.onerror=()=>{a(t.error,"IndexedDB transaction failed.")},t.onabort=()=>{a(t.error,"IndexedDB transaction aborted.")},()=>new Promise((s,c)=>{if(o){let u=o;o=null,c(u);return}if(r=s,i=c,e.readyState==="done"){let u=r;r=null,i=null,u?.(e.result)}})}async function*Z(e,t,r,i,o,a){let{limit:s,reverse:c}=i,u=w(r),d=t.bound(r,u,!1,!0),b=c?"prev":"next",p=e.transaction(l,"readonly"),g=p.objectStore(l),m=o(g,d,b),S=le(m,p),v=0,R=!1;try{let B=await S();while(B){if(s!==void 0&&v>=s)break;let ee=B.key;if(W(ee,i))yield a(B),v++;B.continue(),B=await S()}R=!0}finally{if(!R)try{p.abort()}catch{}}}class ce{#t;#n=null;#e;#r;constructor(e="weft",t=se()){this.#t=e,this.#r=t,this.#e=this.#i()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#i(){let e=this.#r.indexedDB.open(this.#t,1);return e.onupgradeneeded=()=>{let t=e.result;if(!t.objectStoreNames.contains(l))t.createObjectStore(l)},x(e).then((t)=>(this.#n=t,t))}async get(e){let i=(await this.#e).transaction(l,"readonly").objectStore(l),o=await x(i.get(e));return o===void 0?null:new Uint8Array(o)}async put(e,t){let o=(await this.#e).transaction(l,"readwrite").objectStore(l);await x(o.put(t,e))}async delete(e){let i=(await this.#e).transaction(l,"readwrite").objectStore(l);await x(i.delete(e))}async has(e){let i=(await this.#e).transaction(l,"readonly").objectStore(l);return await x(i.count(e))>0}async deletePrefix(e){let t=await this.#e,r=w(e),i=this.#r.IDBKeyRange.bound(e,r,!1,!0);return new Promise((o,a)=>{let s=t.transaction(l,"readwrite"),c=s.objectStore(l),u=0,d=c.count(i);d.onsuccess=()=>{u=d.result,c.delete(i)},s.oncomplete=()=>o(u),s.onerror=()=>a(s.error)})}async deleteRange(e,t){let r=D(t),i=Q(e,r);if(i===null)return 0;let o=this.#r.IDBKeyRange.bound(i.lower.key,i.upper.key,i.lower.open,i.upper.open),a=await this.#e,{limit:s}=r;return new Promise((c,u)=>{let d=a.transaction(l,"readwrite"),b=d.objectStore(l),p=0;if(s===void 0){let g=b.count(o);g.onsuccess=()=>{p=g.result,b.delete(o)}}else{let g=b.openCursor(o,"next");g.onsuccess=()=>{let m=g.result;if(m===null||p>=s)return;if(m.delete(),p++,p<s)m.continue()}}d.oncomplete=()=>c(p),d.onerror=()=>u(d.error)})}async*scan(e,t={}){let r=await this.#e;yield*Z(r,this.#r.IDBKeyRange,e,t,(i,o,a)=>i.openCursor(o,a),(i)=>[i.key,new Uint8Array(i.value)])}async batch(e){if(h("batch operations",e.length),e.length===0)return;let t=await this.#e;return new Promise((r,i)=>{let o=t.transaction(l,"readwrite"),a=o.objectStore(l);for(let s of e)if(s.type==="put")a.put(s.value,s.key);else a.delete(s.key);o.oncomplete=()=>r(),o.onerror=()=>i(o.error)})}async conditionalBatch(e,t){h("conditionalBatch conditions",e.length),h("conditionalBatch operations",t.length);let r=await this.#e;return new Promise((i,o)=>{let a=r.transaction(l,"readwrite"),s=a.objectStore(l),c=!1,u=!1,d=(g,m)=>{if(c)return;c=!0,o(g??Error(m))};a.oncomplete=()=>{if(c)return;c=!0,i(!0)},a.onerror=()=>{d(a.error,"IndexedDB conditionalBatch transaction failed.")},a.onabort=()=>{if(c)return;if(c=!0,u){i(!1);return}o(a.error??Error("IndexedDB conditionalBatch transaction aborted."))};let b=()=>{for(let g of t)if(g.type==="put")s.put(g.value,g.key);else s.delete(g.key)},p=(g)=>{if(g>=e.length){b();return}let m=e[g],S=s.get(m.key);S.onsuccess=()=>{let v=S.result,R=v===void 0?null:new Uint8Array(v);if(!N(R,m.expectedValue)){u=!0,a.abort();return}p(g+1)},S.onerror=()=>{d(S.error,"IndexedDB conditionalBatch condition check failed.")}};p(0)})}async*keys(e,t={}){let r=await this.#e;yield*Z(r,this.#r.IDBKeyRange,e,t,(i,o,a)=>i.openKeyCursor(o,a),(i)=>i.key)}async count(e){let t=await this.#e,r=w(e),o=t.transaction(l,"readonly").objectStore(l);return x(o.count(this.#r.IDBKeyRange.bound(e,r,!1,!0)))}scoped(e){return J(this,e)}[Symbol.dispose](){if(this.#n)this.#n.close(),this.#n=null}}export{ce as IndexedDBStorage};
|
package/dist/json-schema.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
3
|
-
`)}function
|
|
4
|
-
${d(t)}`}var W=d,
|
|
2
|
+
var y=import.meta.require;class i extends Error{code;constructor(r,e,t){super(e,t);this.code=r,this.name=r}}var u={WorkflowAlreadyExistsError:!0,BulkDeleteRequiresTerminalWorkflowsError:!0,BulkOperationConfirmationError:!0,WorkflowTypeNotRegisteredForRecoveryError:!0,EngineCreateNameMismatchError:!0,EngineDisposedError:!0,EngineDisposalError:!0,WorkflowNotFoundError:!0,WorkflowNotRegisteredError:!0,WorkflowConcurrencyLimitExceededError:!0,WorkflowSuspendNotSupportedError:!0,ActivityResolutionError:!0,BranchTopologyChangedError:!0,PersistedDataIncompatibleError:!0,PersistedDataCorruptError:!0,WorkflowTimeoutError:!0,HttpClientError:!0,WorkerProtocolIncompatibleError:!0,UpdateTimeoutError:!0,UpdateValidationError:!0,WorkflowTerminalError:!0,WorkflowBuilderError:!0,VersionMismatchError:!0,EffectReplayConflictError:!0,ReviewTimeoutError:!0,AtomicStateConflictError:!0,StandardSchemaValidationError:!0,ActivityReconciliationCapabilityError:!0,ActivityReconciliationConflictError:!0,ActivityReconciliationIndeterminateError:!0,DurableActivityScopeError:!0,DurableActivityUnsupportedError:!0,AsyncActivityTokenNotFoundError:!0,ActivityScheduleToCloseTimeoutError:!0,ActivityPerAttemptTimeoutError:!0,PayloadSizeExceededError:!0,StartOrSignalConflictError:!0,WorkflowTeardownPendingError:!0,IdempotencyKeyPurgedError:!0,WorkerManifestBuildError:!0,OwnershipModeMismatchError:!0,ApplicationCommandValidationError:!0,MailboxContentionError:!0,ApplicationDeliveryValidationError:!0,OutboxContentionError:!0,WaitBudgetElapsedError:!0,WorkflowCatalogConflictError:!0,WorkflowRevisionNotInstalledError:!0,WorkflowSourceValidationError:!0},g=new Set(Object.keys(u));class o extends i{fieldName;operation;issues;constructor(r){super("StandardSchemaValidationError",S(r.fieldName,r.operation,r.issues));this.fieldName=r.fieldName,this.operation=r.operation,this.issues=r.issues}}async function s(r,e,t){let n=r["~standard"];if(!l(n))throw TypeError(`Schema for ${t.fieldName} does not provide runtime validation. Attach a Standard Schema validator (Zod, Valibot, or another vendor) or supply a runtime-validating schema at this boundary.`);let a=await n.validate(e);if(a.issues===void 0)return a.value;throw new o({fieldName:t.fieldName,operation:t.operation,issues:a.issues.map(c)})}function d(r){return r.map((e)=>e.path===""?e.message:`${e.path}: ${e.message}`).join(`
|
|
3
|
+
`)}function l(r){return typeof r.validate==="function"}function c(r){return{message:r.message,path:E(r.path)}}function E(r){if(r===void 0||r.length===0)return"";let e="";for(let t of r)e+="/",e+=f(t);return e}function f(r){let e=m(r)?r.key:r;return p(String(e))}function m(r){return r!==null&&typeof r==="object"&&"key"in r}function p(r){return r.replace(/~/g,"~0").replace(/\//g,"~1")}function S(r,e,t){return`Validation failed for ${e===void 0?r:`${e} ${r}`}:
|
|
4
|
+
${d(t)}`}var W=d,v=o,A=s;export{v as StandardSchemaValidationError,W as formatStandardSchemaIssues,A as validateStandardSchema};
|
package/dist/mcp/resources.js
CHANGED
|
@@ -68,6 +68,8 @@ export async function readMcpResource(uri, context) {
|
|
|
68
68
|
return jsonResource(uri, {
|
|
69
69
|
checkpoints: await context.engine.listCheckpoints(parsed.workflowId)
|
|
70
70
|
});
|
|
71
|
+
default:
|
|
72
|
+
throw Error(`Unknown Weft resource URI kind: ${JSON.stringify(parsed)}`);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
export async function subscribeMcpResource(uri, session, context) {
|