@workflow/core 5.0.0-beta.4 → 5.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attribute-changes.d.ts +7 -0
- package/dist/attribute-changes.d.ts.map +1 -0
- package/dist/attribute-changes.js +25 -0
- package/dist/capabilities.d.ts +33 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +71 -4
- package/dist/capture-stack.d.ts +16 -0
- package/dist/capture-stack.d.ts.map +1 -0
- package/dist/capture-stack.js +21 -0
- package/dist/class-serialization.d.ts +32 -0
- package/dist/class-serialization.d.ts.map +1 -1
- package/dist/class-serialization.js +37 -1
- package/dist/classify-error.d.ts +26 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +109 -6
- package/dist/context-errors.d.ts +27 -0
- package/dist/context-errors.d.ts.map +1 -0
- package/dist/context-errors.js +101 -0
- package/dist/context-violation-error.d.ts +97 -0
- package/dist/context-violation-error.d.ts.map +1 -0
- package/dist/context-violation-error.js +149 -0
- package/dist/create-hook.d.ts +62 -4
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +4 -3
- package/dist/define-hook.d.ts.map +1 -1
- package/dist/define-hook.js +20 -5
- package/dist/describe-error.d.ts +70 -0
- package/dist/describe-error.d.ts.map +1 -0
- package/dist/describe-error.js +189 -0
- package/dist/encryption.d.ts +37 -3
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +97 -31
- package/dist/events-consumer.d.ts +147 -1
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +444 -43
- package/dist/flushable-stream.d.ts +65 -10
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +131 -18
- package/dist/global.d.ts +37 -1
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +21 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/log-format.d.ts +25 -0
- package/dist/log-format.d.ts.map +1 -0
- package/dist/log-format.js +250 -0
- package/dist/logger.d.ts +29 -30
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +82 -32
- package/dist/private.d.ts +246 -8
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +345 -9
- package/dist/replay-payload-cache.d.ts +68 -0
- package/dist/replay-payload-cache.d.ts.map +1 -0
- package/dist/replay-payload-cache.js +160 -0
- package/dist/runtime/compute-instance.d.ts +12 -0
- package/dist/runtime/compute-instance.d.ts.map +1 -0
- package/dist/runtime/compute-instance.js +13 -0
- package/dist/runtime/constants.d.ts +251 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +425 -16
- package/dist/runtime/count-step-started-events.d.ts +52 -0
- package/dist/runtime/count-step-started-events.d.ts.map +1 -0
- package/dist/runtime/count-step-started-events.js +72 -0
- package/dist/runtime/deployment-guard.d.ts +99 -0
- package/dist/runtime/deployment-guard.d.ts.map +1 -0
- package/dist/runtime/deployment-guard.js +154 -0
- package/dist/runtime/get-port-lazy.d.ts +25 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -0
- package/dist/runtime/get-port-lazy.js +92 -0
- package/dist/runtime/get-world-lazy.d.ts +23 -0
- package/dist/runtime/get-world-lazy.d.ts.map +1 -0
- package/dist/runtime/get-world-lazy.js +46 -0
- package/dist/runtime/helpers.d.ts +327 -10
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +586 -40
- package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
- package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
- package/dist/runtime/quickjs-assets.generated.js +30 -0
- package/dist/runtime/quickjs-entrypoint.d.ts +124 -0
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
- package/dist/runtime/quickjs-entrypoint.js +1437 -0
- package/dist/runtime/quickjs-runtime.d.ts +228 -0
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.js +2372 -0
- package/dist/runtime/quickjs-serde.d.ts +107 -0
- package/dist/runtime/quickjs-serde.d.ts.map +1 -0
- package/dist/runtime/quickjs-serde.js +2098 -0
- package/dist/runtime/replay-budget.d.ts +89 -0
- package/dist/runtime/replay-budget.d.ts.map +1 -0
- package/dist/runtime/replay-budget.js +139 -0
- package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
- package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
- package/dist/runtime/replay-recovery-reporter.js +64 -0
- package/dist/runtime/resume-hook.d.ts +27 -4
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +452 -76
- package/dist/runtime/run-id-time.d.ts +19 -0
- package/dist/runtime/run-id-time.d.ts.map +1 -0
- package/dist/runtime/run-id-time.js +42 -0
- package/dist/runtime/run.d.ts +8 -2
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +62 -15
- package/dist/runtime/runs.d.ts +54 -3
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +119 -13
- package/dist/runtime/start.d.ts +70 -1
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +313 -60
- package/dist/runtime/step-executor.d.ts +177 -0
- package/dist/runtime/step-executor.d.ts.map +1 -0
- package/dist/runtime/step-executor.js +946 -0
- package/dist/runtime/step-latency.d.ts +197 -0
- package/dist/runtime/step-latency.d.ts.map +1 -0
- package/dist/runtime/step-latency.js +207 -0
- package/dist/runtime/step-ownership.d.ts +72 -0
- package/dist/runtime/step-ownership.d.ts.map +1 -0
- package/dist/runtime/step-ownership.js +114 -0
- package/dist/runtime/step-single-flight.d.ts +12 -0
- package/dist/runtime/step-single-flight.d.ts.map +1 -0
- package/dist/runtime/step-single-flight.js +69 -0
- package/dist/runtime/suspension-handler.d.ts +109 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +486 -140
- package/dist/runtime/vm-mode.d.ts +44 -0
- package/dist/runtime/vm-mode.d.ts.map +1 -0
- package/dist/runtime/vm-mode.js +62 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
- package/dist/runtime/vm-serde-bundle.generated.js +16 -0
- package/dist/runtime/wait-continuation.d.ts +84 -0
- package/dist/runtime/wait-continuation.d.ts.map +1 -0
- package/dist/runtime/wait-continuation.js +105 -0
- package/dist/runtime/wait-until.d.ts +18 -0
- package/dist/runtime/wait-until.d.ts.map +1 -0
- package/dist/runtime/wait-until.js +42 -0
- package/dist/runtime/world-compatibility.d.ts +20 -0
- package/dist/runtime/world-compatibility.d.ts.map +1 -0
- package/dist/runtime/world-compatibility.js +32 -0
- package/dist/runtime/world-init.d.ts +50 -0
- package/dist/runtime/world-init.d.ts.map +1 -0
- package/dist/runtime/world-init.js +50 -0
- package/dist/runtime/world.d.ts +14 -2
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +101 -26
- package/dist/runtime.d.ts +17 -12
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3135 -328
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -1
- package/dist/sealed-box.d.ts +167 -0
- package/dist/sealed-box.d.ts.map +1 -0
- package/dist/sealed-box.js +571 -0
- package/dist/serialization/client.d.ts +17 -0
- package/dist/serialization/client.d.ts.map +1 -0
- package/dist/serialization/client.js +48 -0
- package/dist/serialization/codec-devalue-vm.d.ts +16 -0
- package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
- package/dist/serialization/codec-devalue-vm.js +148 -0
- package/dist/serialization/codec-devalue.d.ts +14 -0
- package/dist/serialization/codec-devalue.d.ts.map +1 -0
- package/dist/serialization/codec-devalue.js +105 -0
- package/dist/serialization/codec.d.ts +125 -0
- package/dist/serialization/codec.d.ts.map +1 -0
- package/dist/serialization/codec.js +17 -0
- package/dist/serialization/compression.d.ts +104 -0
- package/dist/serialization/compression.d.ts.map +1 -0
- package/dist/serialization/compression.js +260 -0
- package/dist/serialization/encryption.d.ts +134 -0
- package/dist/serialization/encryption.d.ts.map +1 -0
- package/dist/serialization/encryption.js +186 -0
- package/dist/serialization/errors.d.ts +34 -0
- package/dist/serialization/errors.d.ts.map +1 -0
- package/dist/serialization/errors.js +59 -0
- package/dist/serialization/format.d.ts +60 -0
- package/dist/serialization/format.d.ts.map +1 -0
- package/dist/serialization/format.js +97 -0
- package/dist/serialization/hardened.d.ts +155 -0
- package/dist/serialization/hardened.d.ts.map +1 -0
- package/dist/serialization/hardened.js +523 -0
- package/dist/serialization/index.d.ts +20 -0
- package/dist/serialization/index.d.ts.map +1 -0
- package/dist/serialization/index.js +22 -0
- package/dist/serialization/reducers/class-vm.d.ts +20 -0
- package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/class-vm.js +77 -0
- package/dist/serialization/reducers/class.d.ts +11 -0
- package/dist/serialization/reducers/class.d.ts.map +1 -0
- package/dist/serialization/reducers/class.js +73 -0
- package/dist/serialization/reducers/common-vm.d.ts +15 -0
- package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/common-vm.js +579 -0
- package/dist/serialization/reducers/common.d.ts +16 -0
- package/dist/serialization/reducers/common.d.ts.map +1 -0
- package/dist/serialization/reducers/common.js +478 -0
- package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
- package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function-vm.js +97 -0
- package/dist/serialization/reducers/step-function.d.ts +35 -0
- package/dist/serialization/reducers/step-function.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function.js +104 -0
- package/dist/serialization/step.d.ts +17 -0
- package/dist/serialization/step.d.ts.map +1 -0
- package/dist/serialization/step.js +48 -0
- package/dist/serialization/types.d.ts +273 -0
- package/dist/serialization/types.d.ts.map +1 -0
- package/dist/serialization/types.js +35 -0
- package/dist/serialization/workflow-vm.d.ts +29 -0
- package/dist/serialization/workflow-vm.d.ts.map +1 -0
- package/dist/serialization/workflow-vm.js +71 -0
- package/dist/serialization/workflow.d.ts +29 -0
- package/dist/serialization/workflow.d.ts.map +1 -0
- package/dist/serialization/workflow.js +54 -0
- package/dist/serialization-format.d.ts +60 -4
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +276 -56
- package/dist/serialization.d.ts +374 -221
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +2300 -783
- package/dist/set-attributes.d.ts +13 -0
- package/dist/set-attributes.d.ts.map +1 -0
- package/dist/set-attributes.js +60 -0
- package/dist/sleep.d.ts.map +1 -1
- package/dist/sleep.js +3 -2
- package/dist/source-map.d.ts +25 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +148 -10
- package/dist/step/context-storage.d.ts +61 -2
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +7 -5
- package/dist/step/get-closure-vars.d.ts.map +1 -1
- package/dist/step/get-closure-vars.js +3 -2
- package/dist/step/get-step-metadata.d.ts.map +1 -1
- package/dist/step/get-step-metadata.js +3 -2
- package/dist/step/get-workflow-metadata.d.ts.map +1 -1
- package/dist/step/get-workflow-metadata.js +3 -2
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +71 -7
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +225 -29
- package/dist/symbols.d.ts +54 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +55 -1
- package/dist/telemetry/semantic-conventions.d.ts +265 -2
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +190 -1
- package/dist/telemetry.d.ts +73 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +153 -16
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +23 -1
- package/dist/util.d.ts +16 -6
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +25 -16
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +85 -14
- package/dist/vm/script-cache.d.ts +28 -0
- package/dist/vm/script-cache.d.ts.map +1 -0
- package/dist/vm/script-cache.js +140 -0
- package/dist/workflow/abort-controller.d.ts +65 -0
- package/dist/workflow/abort-controller.d.ts.map +1 -0
- package/dist/workflow/abort-controller.js +312 -0
- package/dist/workflow/attribute-dispatcher.d.ts +6 -0
- package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
- package/dist/workflow/attribute-dispatcher.js +48 -0
- package/dist/workflow/create-hook.d.ts.map +1 -1
- package/dist/workflow/create-hook.js +25 -3
- package/dist/workflow/define-hook.d.ts +1 -1
- package/dist/workflow/define-hook.d.ts.map +1 -1
- package/dist/workflow/define-hook.js +8 -4
- package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
- package/dist/workflow/get-workflow-metadata.js +14 -3
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +302 -36
- package/dist/workflow/index.d.ts +1 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +5 -3
- package/dist/workflow/set-attributes.d.ts +68 -0
- package/dist/workflow/set-attributes.d.ts.map +1 -0
- package/dist/workflow/set-attributes.js +60 -0
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +57 -8
- package/dist/workflow/world-init-stub.d.ts +15 -0
- package/dist/workflow/world-init-stub.d.ts.map +1 -0
- package/dist/workflow/world-init-stub.js +15 -0
- package/dist/workflow.d.ts +79 -3
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +831 -553
- package/docs/api-reference/create-hook.mdx +79 -0
- package/docs/api-reference/create-webhook.mdx +1 -0
- package/docs/api-reference/define-hook.mdx +26 -24
- package/docs/api-reference/fatal-error.mdx +29 -7
- package/docs/api-reference/fetch.mdx +8 -4
- package/docs/api-reference/index.mdx +3 -0
- package/docs/api-reference/set-attributes.mdx +61 -0
- package/docs/api-reference/sleep.mdx +1 -1
- package/docs/foundations/cancellation.mdx +459 -0
- package/docs/foundations/errors-and-retries.mdx +7 -3
- package/docs/foundations/hooks.mdx +29 -0
- package/docs/foundations/idempotency.mdx +243 -11
- package/docs/foundations/index.mdx +1 -23
- package/docs/foundations/meta.json +3 -1
- package/docs/foundations/serialization.mdx +77 -41
- package/docs/foundations/starting-workflows.mdx +79 -2
- package/docs/foundations/streaming.mdx +14 -23
- package/docs/foundations/versioning.mdx +263 -0
- package/docs/how-it-works/cancellation.mdx +287 -0
- package/docs/how-it-works/code-transform.mdx +21 -17
- package/docs/how-it-works/encryption.mdx +5 -5
- package/docs/how-it-works/event-sourcing.mdx +17 -9
- package/docs/how-it-works/framework-integrations.mdx +96 -337
- package/docs/how-it-works/meta.json +2 -1
- package/package.json +31 -13
- package/dist/runtime/step-handler.d.ts +0 -2
- package/dist/runtime/step-handler.d.ts.map +0 -1
- package/dist/runtime/step-handler.js +0 -678
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the serialization system.
|
|
3
|
+
*/
|
|
4
|
+
import type { RuntimeDecryptionErrorContext } from '@workflow/errors';
|
|
5
|
+
/**
|
|
6
|
+
* A format prefix is exactly 4 lowercase alphanumeric characters [a-z0-9].
|
|
7
|
+
*
|
|
8
|
+
* This is a branded string type — use `isFormatPrefix()` to validate
|
|
9
|
+
* at runtime. The `SerializationFormat` object provides well-known
|
|
10
|
+
* constants, but codecs may define additional prefixes.
|
|
11
|
+
*/
|
|
12
|
+
export type FormatPrefix = string & {
|
|
13
|
+
readonly __brand: 'FormatPrefix';
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Runtime type guard for format prefix strings.
|
|
17
|
+
*
|
|
18
|
+
* Validates that a string is exactly 4 characters of [a-z0-9].
|
|
19
|
+
*/
|
|
20
|
+
export declare function isFormatPrefix(value: string): value is FormatPrefix;
|
|
21
|
+
/**
|
|
22
|
+
* Well-known format prefix constants. Codecs may define additional ones.
|
|
23
|
+
*/
|
|
24
|
+
export declare const SerializationFormat: {
|
|
25
|
+
/** devalue stringify/parse with TextEncoder/TextDecoder */
|
|
26
|
+
readonly DEVALUE_V1: FormatPrefix;
|
|
27
|
+
/** Encrypted payload (inner payload has its own format prefix) */
|
|
28
|
+
readonly ENCRYPTED: FormatPrefix;
|
|
29
|
+
/**
|
|
30
|
+
* Sealed payload — asymmetrically encrypted to a run's X25519 public key
|
|
31
|
+
* (inner payload has its own format prefix).
|
|
32
|
+
*
|
|
33
|
+
* Used for *cross-run* writes (hook payloads, forwarded stream frames),
|
|
34
|
+
* where the writer holds only the recipient run's public key and therefore
|
|
35
|
+
* cannot decrypt. A run's own payloads continue to use {@link ENCRYPTED}.
|
|
36
|
+
* See `sealed-box.ts` for the construction.
|
|
37
|
+
*/
|
|
38
|
+
readonly SEALED: FormatPrefix;
|
|
39
|
+
/** Gzip-compressed payload (inner payload has its own format prefix) */
|
|
40
|
+
readonly GZIP: FormatPrefix;
|
|
41
|
+
/** Zstandard-compressed payload (inner payload has its own format prefix) */
|
|
42
|
+
readonly ZSTD: FormatPrefix;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Wire-framing format identifier carried in the serialized
|
|
46
|
+
* `ReadableStream` ref's `framing` field.
|
|
47
|
+
*
|
|
48
|
+
* - absent / `'raw'`: chunks are written to the transport verbatim
|
|
49
|
+
* (legacy format — no auto-reconnect support).
|
|
50
|
+
* - `'framed-v1'`: each chunk is wrapped in a 4-byte big-endian length
|
|
51
|
+
* prefix, allowing the reader to identify chunk boundaries and
|
|
52
|
+
* transparently reconnect on transient stream errors.
|
|
53
|
+
*/
|
|
54
|
+
export type ByteStreamFraming = 'raw' | 'framed-v1';
|
|
55
|
+
/**
|
|
56
|
+
* Types that need specialized handling when serialized/deserialized.
|
|
57
|
+
* If a type is added here, it MUST also be added to the `Serializable`
|
|
58
|
+
* type in `schemas.ts`.
|
|
59
|
+
*/
|
|
60
|
+
export interface SerializableSpecial {
|
|
61
|
+
ArrayBuffer: string;
|
|
62
|
+
BigInt: string;
|
|
63
|
+
BigInt64Array: string;
|
|
64
|
+
BigUint64Array: string;
|
|
65
|
+
Date: string;
|
|
66
|
+
DOMException: {
|
|
67
|
+
message: string;
|
|
68
|
+
name: string;
|
|
69
|
+
stack?: string;
|
|
70
|
+
cause?: unknown;
|
|
71
|
+
};
|
|
72
|
+
FatalError: {
|
|
73
|
+
message: string;
|
|
74
|
+
stack?: string;
|
|
75
|
+
cause?: unknown;
|
|
76
|
+
};
|
|
77
|
+
Float32Array: string;
|
|
78
|
+
Float64Array: string;
|
|
79
|
+
Error: {
|
|
80
|
+
name: string;
|
|
81
|
+
message: string;
|
|
82
|
+
stack?: string;
|
|
83
|
+
cause?: unknown;
|
|
84
|
+
};
|
|
85
|
+
EvalError: {
|
|
86
|
+
message: string;
|
|
87
|
+
stack?: string;
|
|
88
|
+
cause?: unknown;
|
|
89
|
+
};
|
|
90
|
+
Headers: [string, string][];
|
|
91
|
+
HookConflictError: {
|
|
92
|
+
message: string;
|
|
93
|
+
stack?: string;
|
|
94
|
+
cause?: unknown;
|
|
95
|
+
token: string;
|
|
96
|
+
conflictingRunId?: string;
|
|
97
|
+
};
|
|
98
|
+
Int8Array: string;
|
|
99
|
+
Int16Array: string;
|
|
100
|
+
Int32Array: string;
|
|
101
|
+
Map: [any, any][];
|
|
102
|
+
RangeError: {
|
|
103
|
+
message: string;
|
|
104
|
+
stack?: string;
|
|
105
|
+
cause?: unknown;
|
|
106
|
+
};
|
|
107
|
+
ReadableStream: {
|
|
108
|
+
name: string;
|
|
109
|
+
type?: 'bytes';
|
|
110
|
+
startIndex?: number;
|
|
111
|
+
/**
|
|
112
|
+
* Wire-framing format for byte streams. See {@link ByteStreamFraming}
|
|
113
|
+
* and `getByteFramingStream` / `getByteUnframingStream`.
|
|
114
|
+
*
|
|
115
|
+
* Only meaningful when `type === 'bytes'`. Absent on object streams
|
|
116
|
+
* (which always use length-prefixed devalue framing) and on legacy
|
|
117
|
+
* byte streams written by SDKs that predate framing support — those
|
|
118
|
+
* are interpreted as `'raw'` by the consumer.
|
|
119
|
+
*/
|
|
120
|
+
framing?: ByteStreamFraming;
|
|
121
|
+
} | {
|
|
122
|
+
bodyInit: any;
|
|
123
|
+
};
|
|
124
|
+
ReferenceError: {
|
|
125
|
+
message: string;
|
|
126
|
+
stack?: string;
|
|
127
|
+
cause?: unknown;
|
|
128
|
+
};
|
|
129
|
+
RegExp: {
|
|
130
|
+
source: string;
|
|
131
|
+
flags: string;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* `retryAfter` is serialized as a numeric epoch timestamp rather than a
|
|
135
|
+
* `Date` to be realm-safe. The Date reducer uses `instanceof global.Date`,
|
|
136
|
+
* which fails for Dates from a different VM realm.
|
|
137
|
+
*/
|
|
138
|
+
RetryableError: {
|
|
139
|
+
message: string;
|
|
140
|
+
stack?: string;
|
|
141
|
+
cause?: unknown;
|
|
142
|
+
retryAfter: number;
|
|
143
|
+
};
|
|
144
|
+
RuntimeDecryptionError: {
|
|
145
|
+
message: string;
|
|
146
|
+
stack?: string;
|
|
147
|
+
cause?: unknown;
|
|
148
|
+
context?: RuntimeDecryptionErrorContext;
|
|
149
|
+
};
|
|
150
|
+
Request: {
|
|
151
|
+
method: string;
|
|
152
|
+
url: string;
|
|
153
|
+
headers: Headers;
|
|
154
|
+
body: Request['body'];
|
|
155
|
+
duplex: Request['duplex'];
|
|
156
|
+
responseWritable?: WritableStream<Response>;
|
|
157
|
+
signal?: AbortSignal;
|
|
158
|
+
};
|
|
159
|
+
Response: {
|
|
160
|
+
type: Response['type'];
|
|
161
|
+
url: string;
|
|
162
|
+
status: number;
|
|
163
|
+
statusText: string;
|
|
164
|
+
headers: Headers;
|
|
165
|
+
body: Response['body'];
|
|
166
|
+
redirected: boolean;
|
|
167
|
+
};
|
|
168
|
+
Class: {
|
|
169
|
+
classId: string;
|
|
170
|
+
};
|
|
171
|
+
Instance: {
|
|
172
|
+
classId: string;
|
|
173
|
+
data: unknown;
|
|
174
|
+
};
|
|
175
|
+
Set: any[];
|
|
176
|
+
SyntaxError: {
|
|
177
|
+
message: string;
|
|
178
|
+
stack?: string;
|
|
179
|
+
cause?: unknown;
|
|
180
|
+
};
|
|
181
|
+
StepFunction: {
|
|
182
|
+
stepId: string;
|
|
183
|
+
closureVars?: Record<string, any>;
|
|
184
|
+
/**
|
|
185
|
+
* Captured lexical `this` for step proxies that were created via
|
|
186
|
+
* `useStep(...).bind(thisArg)` (the SWC plugin emits this for nested
|
|
187
|
+
* arrow steps that close over their enclosing function's `this`).
|
|
188
|
+
* The reviver re-binds the freshly-created proxy to this value so the
|
|
189
|
+
* binding survives serialization round-trips.
|
|
190
|
+
*/
|
|
191
|
+
boundThis?: unknown;
|
|
192
|
+
/**
|
|
193
|
+
* Prefilled arguments captured when the user (rather than the SWC
|
|
194
|
+
* plugin) called `useStep(...).bind(thisArg, x, y)`. The reviver
|
|
195
|
+
* re-applies these alongside `boundThis` so partial application
|
|
196
|
+
* survives serialization. The SWC plugin only ever emits
|
|
197
|
+
* `.bind(this)` with no extra args today; this slot exists so a
|
|
198
|
+
* hand-written `.bind(thisArg, x)` doesn't silently lose `x` after
|
|
199
|
+
* round-tripping through the reducer/reviver.
|
|
200
|
+
*/
|
|
201
|
+
boundArgs?: unknown[];
|
|
202
|
+
};
|
|
203
|
+
TypeError: {
|
|
204
|
+
message: string;
|
|
205
|
+
stack?: string;
|
|
206
|
+
cause?: unknown;
|
|
207
|
+
};
|
|
208
|
+
URIError: {
|
|
209
|
+
message: string;
|
|
210
|
+
stack?: string;
|
|
211
|
+
cause?: unknown;
|
|
212
|
+
};
|
|
213
|
+
URL: string;
|
|
214
|
+
WorkflowFunction: {
|
|
215
|
+
workflowId: string;
|
|
216
|
+
};
|
|
217
|
+
URLSearchParams: string;
|
|
218
|
+
Uint8Array: string;
|
|
219
|
+
Uint8ClampedArray: string;
|
|
220
|
+
Uint16Array: string;
|
|
221
|
+
Uint32Array: string;
|
|
222
|
+
AggregateError: {
|
|
223
|
+
message: string;
|
|
224
|
+
stack?: string;
|
|
225
|
+
cause?: unknown;
|
|
226
|
+
errors: unknown[];
|
|
227
|
+
};
|
|
228
|
+
WritableStream: {
|
|
229
|
+
name: string;
|
|
230
|
+
/**
|
|
231
|
+
* The runId of the workflow run that owns the underlying server
|
|
232
|
+
* stream. Present only when the writable was forwarded across a
|
|
233
|
+
* `start()` boundary (parent → child). When omitted, the writable
|
|
234
|
+
* belongs to the receiving run (the normal in-run case).
|
|
235
|
+
*/
|
|
236
|
+
runId?: string;
|
|
237
|
+
/**
|
|
238
|
+
* The deployment that owns the server stream. Carried with `runId`
|
|
239
|
+
* so a child running on a newer deployment can encrypt chunks with
|
|
240
|
+
* the parent's key without fetching the parent run first.
|
|
241
|
+
*/
|
|
242
|
+
deploymentId?: string;
|
|
243
|
+
/**
|
|
244
|
+
* The owning run's X25519 public key (base64), when it has one.
|
|
245
|
+
*
|
|
246
|
+
* Lets the receiving run seal frames to the stream's owner with no
|
|
247
|
+
* lookup at all — neither a run fetch nor a key-API round trip. The
|
|
248
|
+
* owner derives this locally when it creates the stream, so including
|
|
249
|
+
* it here is free. Absent for runs created by older SDKs, in which
|
|
250
|
+
* case the receiver falls back to resolving the owner's symmetric key.
|
|
251
|
+
*/
|
|
252
|
+
encryptionPublicKey?: string;
|
|
253
|
+
};
|
|
254
|
+
AbortController: {
|
|
255
|
+
streamName: string;
|
|
256
|
+
hookToken: string;
|
|
257
|
+
aborted: boolean;
|
|
258
|
+
reason?: unknown;
|
|
259
|
+
};
|
|
260
|
+
AbortSignal: {
|
|
261
|
+
streamName: string;
|
|
262
|
+
hookToken: string;
|
|
263
|
+
aborted: boolean;
|
|
264
|
+
reason?: unknown;
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
export type Reducers = {
|
|
268
|
+
[K in keyof SerializableSpecial]: (value: any) => SerializableSpecial[K] | false;
|
|
269
|
+
};
|
|
270
|
+
export type Revivers = {
|
|
271
|
+
[K in keyof SerializableSpecial]: (value: SerializableSpecial[K]) => any;
|
|
272
|
+
};
|
|
273
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/serialization/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAItE;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC;AAEzE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B,2DAA2D;yBACrC,YAAY;IAClC,kEAAkE;wBAC7C,YAAY;IACjC;;;;;;;;OAQG;qBACe,YAAY;IAC9B,wEAAwE;mBACxD,YAAY;IAC5B,6EAA6E;mBAC7D,YAAY;CACpB,CAAC;AAIX;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,WAAW,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC1E,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5B,iBAAiB,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QAEd,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAClB,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACjE,cAAc,EACV;QACE,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;;;;;;WAQG;QACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;KAC7B,GACD;QAAE,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC;IACtB,cAAc,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C;;;;OAIG;IACH,cAAc,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,sBAAsB,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,6BAA6B,CAAC;KACzC,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1B,gBAAgB,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,GAAG,EAAE,GAAG,EAAE,CAAC;IACX,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAClE,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB;;;;;;;;WAQG;QACH,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;KACvB,CAAC;IACF,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChE,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,OAAO,EAAE,CAAC;KACnB,CAAC;IACF,cAAc,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb;;;;;WAKG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;;WAIG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB;;;;;;;;WAQG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,eAAe,EAAE;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,QAAQ,GAAG;KACpB,CAAC,IAAI,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,GAAG,KACP,mBAAmB,CAAC,CAAC,CAAC,GAAG,KAAK;CACpC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;KACpB,CAAC,IAAI,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,GAAG;CACzE,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the serialization system.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Runtime type guard for format prefix strings.
|
|
6
|
+
*
|
|
7
|
+
* Validates that a string is exactly 4 characters of [a-z0-9].
|
|
8
|
+
*/
|
|
9
|
+
export function isFormatPrefix(value) {
|
|
10
|
+
return value.length === 4 && /^[a-z0-9]{4}$/.test(value);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Well-known format prefix constants. Codecs may define additional ones.
|
|
14
|
+
*/
|
|
15
|
+
export const SerializationFormat = {
|
|
16
|
+
/** devalue stringify/parse with TextEncoder/TextDecoder */
|
|
17
|
+
DEVALUE_V1: 'devl',
|
|
18
|
+
/** Encrypted payload (inner payload has its own format prefix) */
|
|
19
|
+
ENCRYPTED: 'encr',
|
|
20
|
+
/**
|
|
21
|
+
* Sealed payload — asymmetrically encrypted to a run's X25519 public key
|
|
22
|
+
* (inner payload has its own format prefix).
|
|
23
|
+
*
|
|
24
|
+
* Used for *cross-run* writes (hook payloads, forwarded stream frames),
|
|
25
|
+
* where the writer holds only the recipient run's public key and therefore
|
|
26
|
+
* cannot decrypt. A run's own payloads continue to use {@link ENCRYPTED}.
|
|
27
|
+
* See `sealed-box.ts` for the construction.
|
|
28
|
+
*/
|
|
29
|
+
SEALED: 'encp',
|
|
30
|
+
/** Gzip-compressed payload (inner payload has its own format prefix) */
|
|
31
|
+
GZIP: 'gzip',
|
|
32
|
+
/** Zstandard-compressed payload (inner payload has its own format prefix) */
|
|
33
|
+
ZSTD: 'zstd',
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQWVIOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWE7SUFDMUMsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLDJEQUEyRDtJQUMzRCxVQUFVLEVBQUUsTUFBc0I7SUFDbEMsa0VBQWtFO0lBQ2xFLFNBQVMsRUFBRSxNQUFzQjtJQUNqQzs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sRUFBRSxNQUFzQjtJQUM5Qix3RUFBd0U7SUFDeEUsSUFBSSxFQUFFLE1BQXNCO0lBQzVCLDZFQUE2RTtJQUM3RSxJQUFJLEVBQUUsTUFBc0I7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hhcmVkIHR5cGVzIGZvciB0aGUgc2VyaWFsaXphdGlvbiBzeXN0ZW0uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdW50aW1lRGVjcnlwdGlvbkVycm9yQ29udGV4dCB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuXG4vLyAtLS0tIEZvcm1hdCBQcmVmaXggLS0tLVxuXG4vKipcbiAqIEEgZm9ybWF0IHByZWZpeCBpcyBleGFjdGx5IDQgbG93ZXJjYXNlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIFthLXowLTldLlxuICpcbiAqIFRoaXMgaXMgYSBicmFuZGVkIHN0cmluZyB0eXBlIOKAlCB1c2UgYGlzRm9ybWF0UHJlZml4KClgIHRvIHZhbGlkYXRlXG4gKiBhdCBydW50aW1lLiBUaGUgYFNlcmlhbGl6YXRpb25Gb3JtYXRgIG9iamVjdCBwcm92aWRlcyB3ZWxsLWtub3duXG4gKiBjb25zdGFudHMsIGJ1dCBjb2RlY3MgbWF5IGRlZmluZSBhZGRpdGlvbmFsIHByZWZpeGVzLlxuICovXG5leHBvcnQgdHlwZSBGb3JtYXRQcmVmaXggPSBzdHJpbmcgJiB7IHJlYWRvbmx5IF9fYnJhbmQ6ICdGb3JtYXRQcmVmaXgnIH07XG5cbi8qKlxuICogUnVudGltZSB0eXBlIGd1YXJkIGZvciBmb3JtYXQgcHJlZml4IHN0cmluZ3MuXG4gKlxuICogVmFsaWRhdGVzIHRoYXQgYSBzdHJpbmcgaXMgZXhhY3RseSA0IGNoYXJhY3RlcnMgb2YgW2EtejAtOV0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm1hdFByZWZpeCh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgRm9ybWF0UHJlZml4IHtcbiAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gNCAmJiAvXlthLXowLTldezR9JC8udGVzdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogV2VsbC1rbm93biBmb3JtYXQgcHJlZml4IGNvbnN0YW50cy4gQ29kZWNzIG1heSBkZWZpbmUgYWRkaXRpb25hbCBvbmVzLlxuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkZvcm1hdCA9IHtcbiAgLyoqIGRldmFsdWUgc3RyaW5naWZ5L3BhcnNlIHdpdGggVGV4dEVuY29kZXIvVGV4dERlY29kZXIgKi9cbiAgREVWQUxVRV9WMTogJ2RldmwnIGFzIEZvcm1hdFByZWZpeCxcbiAgLyoqIEVuY3J5cHRlZCBwYXlsb2FkIChpbm5lciBwYXlsb2FkIGhhcyBpdHMgb3duIGZvcm1hdCBwcmVmaXgpICovXG4gIEVOQ1JZUFRFRDogJ2VuY3InIGFzIEZvcm1hdFByZWZpeCxcbiAgLyoqXG4gICAqIFNlYWxlZCBwYXlsb2FkIOKAlCBhc3ltbWV0cmljYWxseSBlbmNyeXB0ZWQgdG8gYSBydW4ncyBYMjU1MTkgcHVibGljIGtleVxuICAgKiAoaW5uZXIgcGF5bG9hZCBoYXMgaXRzIG93biBmb3JtYXQgcHJlZml4KS5cbiAgICpcbiAgICogVXNlZCBmb3IgKmNyb3NzLXJ1biogd3JpdGVzIChob29rIHBheWxvYWRzLCBmb3J3YXJkZWQgc3RyZWFtIGZyYW1lcyksXG4gICAqIHdoZXJlIHRoZSB3cml0ZXIgaG9sZHMgb25seSB0aGUgcmVjaXBpZW50IHJ1bidzIHB1YmxpYyBrZXkgYW5kIHRoZXJlZm9yZVxuICAgKiBjYW5ub3QgZGVjcnlwdC4gQSBydW4ncyBvd24gcGF5bG9hZHMgY29udGludWUgdG8gdXNlIHtAbGluayBFTkNSWVBURUR9LlxuICAgKiBTZWUgYHNlYWxlZC1ib3gudHNgIGZvciB0aGUgY29uc3RydWN0aW9uLlxuICAgKi9cbiAgU0VBTEVEOiAnZW5jcCcgYXMgRm9ybWF0UHJlZml4LFxuICAvKiogR3ppcC1jb21wcmVzc2VkIHBheWxvYWQgKGlubmVyIHBheWxvYWQgaGFzIGl0cyBvd24gZm9ybWF0IHByZWZpeCkgKi9cbiAgR1pJUDogJ2d6aXAnIGFzIEZvcm1hdFByZWZpeCxcbiAgLyoqIFpzdGFuZGFyZC1jb21wcmVzc2VkIHBheWxvYWQgKGlubmVyIHBheWxvYWQgaGFzIGl0cyBvd24gZm9ybWF0IHByZWZpeCkgKi9cbiAgWlNURDogJ3pzdGQnIGFzIEZvcm1hdFByZWZpeCxcbn0gYXMgY29uc3Q7XG5cbi8vIC0tLS0gU2VyaWFsaXphYmxlIFR5cGVzIC0tLS1cblxuLyoqXG4gKiBXaXJlLWZyYW1pbmcgZm9ybWF0IGlkZW50aWZpZXIgY2FycmllZCBpbiB0aGUgc2VyaWFsaXplZFxuICogYFJlYWRhYmxlU3RyZWFtYCByZWYncyBgZnJhbWluZ2AgZmllbGQuXG4gKlxuICogLSBhYnNlbnQgLyBgJ3JhdydgOiBjaHVua3MgYXJlIHdyaXR0ZW4gdG8gdGhlIHRyYW5zcG9ydCB2ZXJiYXRpbVxuICogICAobGVnYWN5IGZvcm1hdCDigJQgbm8gYXV0by1yZWNvbm5lY3Qgc3VwcG9ydCkuXG4gKiAtIGAnZnJhbWVkLXYxJ2A6IGVhY2ggY2h1bmsgaXMgd3JhcHBlZCBpbiBhIDQtYnl0ZSBiaWctZW5kaWFuIGxlbmd0aFxuICogICBwcmVmaXgsIGFsbG93aW5nIHRoZSByZWFkZXIgdG8gaWRlbnRpZnkgY2h1bmsgYm91bmRhcmllcyBhbmRcbiAqICAgdHJhbnNwYXJlbnRseSByZWNvbm5lY3Qgb24gdHJhbnNpZW50IHN0cmVhbSBlcnJvcnMuXG4gKi9cbmV4cG9ydCB0eXBlIEJ5dGVTdHJlYW1GcmFtaW5nID0gJ3JhdycgfCAnZnJhbWVkLXYxJztcblxuLyoqXG4gKiBUeXBlcyB0aGF0IG5lZWQgc3BlY2lhbGl6ZWQgaGFuZGxpbmcgd2hlbiBzZXJpYWxpemVkL2Rlc2VyaWFsaXplZC5cbiAqIElmIGEgdHlwZSBpcyBhZGRlZCBoZXJlLCBpdCBNVVNUIGFsc28gYmUgYWRkZWQgdG8gdGhlIGBTZXJpYWxpemFibGVgXG4gKiB0eXBlIGluIGBzY2hlbWFzLnRzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemFibGVTcGVjaWFsIHtcbiAgQXJyYXlCdWZmZXI6IHN0cmluZzsgLy8gYmFzZTY0IHN0cmluZ1xuICBCaWdJbnQ6IHN0cmluZzsgLy8gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJpZ2ludFxuICBCaWdJbnQ2NEFycmF5OiBzdHJpbmc7IC8vIGJhc2U2NCBzdHJpbmdcbiAgQmlnVWludDY0QXJyYXk6IHN0cmluZzsgLy8gYmFzZTY0IHN0cmluZ1xuICBEYXRlOiBzdHJpbmc7IC8vIElTTyBzdHJpbmdcbiAgRE9NRXhjZXB0aW9uOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzdGFjaz86IHN0cmluZztcbiAgICBjYXVzZT86IHVua25vd247XG4gIH07XG4gIEZhdGFsRXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIEZsb2F0MzJBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIEZsb2F0NjRBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIEVycm9yOiB7IG5hbWU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIEV2YWxFcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfTtcbiAgSGVhZGVyczogW3N0cmluZywgc3RyaW5nXVtdO1xuICBIb29rQ29uZmxpY3RFcnJvcjoge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBzdGFjaz86IHN0cmluZztcbiAgICBjYXVzZT86IHVua25vd247XG4gICAgdG9rZW46IHN0cmluZztcbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgcmVxdWlyZWQgd2hlbiBIb29rQ29uZmxpY3RFcnJvci5jb25mbGljdGluZ1J1bklkIGlzIHJlcXVpcmVkLlxuICAgIGNvbmZsaWN0aW5nUnVuSWQ/OiBzdHJpbmc7XG4gIH07XG4gIEludDhBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIEludDE2QXJyYXk6IHN0cmluZzsgLy8gYmFzZTY0IHN0cmluZ1xuICBJbnQzMkFycmF5OiBzdHJpbmc7IC8vIGJhc2U2NCBzdHJpbmdcbiAgTWFwOiBbYW55LCBhbnldW107XG4gIFJhbmdlRXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIFJlYWRhYmxlU3RyZWFtOlxuICAgIHwge1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHR5cGU/OiAnYnl0ZXMnO1xuICAgICAgICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2lyZS1mcmFtaW5nIGZvcm1hdCBmb3IgYnl0ZSBzdHJlYW1zLiBTZWUge0BsaW5rIEJ5dGVTdHJlYW1GcmFtaW5nfVxuICAgICAgICAgKiBhbmQgYGdldEJ5dGVGcmFtaW5nU3RyZWFtYCAvIGBnZXRCeXRlVW5mcmFtaW5nU3RyZWFtYC5cbiAgICAgICAgICpcbiAgICAgICAgICogT25seSBtZWFuaW5nZnVsIHdoZW4gYHR5cGUgPT09ICdieXRlcydgLiBBYnNlbnQgb24gb2JqZWN0IHN0cmVhbXNcbiAgICAgICAgICogKHdoaWNoIGFsd2F5cyB1c2UgbGVuZ3RoLXByZWZpeGVkIGRldmFsdWUgZnJhbWluZykgYW5kIG9uIGxlZ2FjeVxuICAgICAgICAgKiBieXRlIHN0cmVhbXMgd3JpdHRlbiBieSBTREtzIHRoYXQgcHJlZGF0ZSBmcmFtaW5nIHN1cHBvcnQg4oCUIHRob3NlXG4gICAgICAgICAqIGFyZSBpbnRlcnByZXRlZCBhcyBgJ3JhdydgIGJ5IHRoZSBjb25zdW1lci5cbiAgICAgICAgICovXG4gICAgICAgIGZyYW1pbmc/OiBCeXRlU3RyZWFtRnJhbWluZztcbiAgICAgIH1cbiAgICB8IHsgYm9keUluaXQ6IGFueSB9O1xuICBSZWZlcmVuY2VFcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfTtcbiAgUmVnRXhwOiB7IHNvdXJjZTogc3RyaW5nOyBmbGFnczogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBgcmV0cnlBZnRlcmAgaXMgc2VyaWFsaXplZCBhcyBhIG51bWVyaWMgZXBvY2ggdGltZXN0YW1wIHJhdGhlciB0aGFuIGFcbiAgICogYERhdGVgIHRvIGJlIHJlYWxtLXNhZmUuIFRoZSBEYXRlIHJlZHVjZXIgdXNlcyBgaW5zdGFuY2VvZiBnbG9iYWwuRGF0ZWAsXG4gICAqIHdoaWNoIGZhaWxzIGZvciBEYXRlcyBmcm9tIGEgZGlmZmVyZW50IFZNIHJlYWxtLlxuICAgKi9cbiAgUmV0cnlhYmxlRXJyb3I6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgc3RhY2s/OiBzdHJpbmc7XG4gICAgY2F1c2U/OiB1bmtub3duO1xuICAgIHJldHJ5QWZ0ZXI6IG51bWJlcjtcbiAgfTtcbiAgUnVudGltZURlY3J5cHRpb25FcnJvcjoge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBzdGFjaz86IHN0cmluZztcbiAgICBjYXVzZT86IHVua25vd247XG4gICAgY29udGV4dD86IFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3JDb250ZXh0O1xuICB9O1xuICBSZXF1ZXN0OiB7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgaGVhZGVyczogSGVhZGVycztcbiAgICBib2R5OiBSZXF1ZXN0Wydib2R5J107XG4gICAgZHVwbGV4OiBSZXF1ZXN0WydkdXBsZXgnXTtcbiAgICByZXNwb25zZVdyaXRhYmxlPzogV3JpdGFibGVTdHJlYW08UmVzcG9uc2U+O1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9O1xuICBSZXNwb25zZToge1xuICAgIHR5cGU6IFJlc3BvbnNlWyd0eXBlJ107XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgc3RhdHVzVGV4dDogc3RyaW5nO1xuICAgIGhlYWRlcnM6IEhlYWRlcnM7XG4gICAgYm9keTogUmVzcG9uc2VbJ2JvZHknXTtcbiAgICByZWRpcmVjdGVkOiBib29sZWFuO1xuICB9O1xuICBDbGFzczoge1xuICAgIGNsYXNzSWQ6IHN0cmluZztcbiAgfTtcbiAgSW5zdGFuY2U6IHtcbiAgICBjbGFzc0lkOiBzdHJpbmc7XG4gICAgZGF0YTogdW5rbm93bjtcbiAgfTtcbiAgU2V0OiBhbnlbXTtcbiAgU3ludGF4RXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIFN0ZXBGdW5jdGlvbjoge1xuICAgIHN0ZXBJZDogc3RyaW5nO1xuICAgIGNsb3N1cmVWYXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAvKipcbiAgICAgKiBDYXB0dXJlZCBsZXhpY2FsIGB0aGlzYCBmb3Igc3RlcCBwcm94aWVzIHRoYXQgd2VyZSBjcmVhdGVkIHZpYVxuICAgICAqIGB1c2VTdGVwKC4uLikuYmluZCh0aGlzQXJnKWAgKHRoZSBTV0MgcGx1Z2luIGVtaXRzIHRoaXMgZm9yIG5lc3RlZFxuICAgICAqIGFycm93IHN0ZXBzIHRoYXQgY2xvc2Ugb3ZlciB0aGVpciBlbmNsb3NpbmcgZnVuY3Rpb24ncyBgdGhpc2ApLlxuICAgICAqIFRoZSByZXZpdmVyIHJlLWJpbmRzIHRoZSBmcmVzaGx5LWNyZWF0ZWQgcHJveHkgdG8gdGhpcyB2YWx1ZSBzbyB0aGVcbiAgICAgKiBiaW5kaW5nIHN1cnZpdmVzIHNlcmlhbGl6YXRpb24gcm91bmQtdHJpcHMuXG4gICAgICovXG4gICAgYm91bmRUaGlzPzogdW5rbm93bjtcbiAgICAvKipcbiAgICAgKiBQcmVmaWxsZWQgYXJndW1lbnRzIGNhcHR1cmVkIHdoZW4gdGhlIHVzZXIgKHJhdGhlciB0aGFuIHRoZSBTV0NcbiAgICAgKiBwbHVnaW4pIGNhbGxlZCBgdXNlU3RlcCguLi4pLmJpbmQodGhpc0FyZywgeCwgeSlgLiBUaGUgcmV2aXZlclxuICAgICAqIHJlLWFwcGxpZXMgdGhlc2UgYWxvbmdzaWRlIGBib3VuZFRoaXNgIHNvIHBhcnRpYWwgYXBwbGljYXRpb25cbiAgICAgKiBzdXJ2aXZlcyBzZXJpYWxpemF0aW9uLiBUaGUgU1dDIHBsdWdpbiBvbmx5IGV2ZXIgZW1pdHNcbiAgICAgKiBgLmJpbmQodGhpcylgIHdpdGggbm8gZXh0cmEgYXJncyB0b2RheTsgdGhpcyBzbG90IGV4aXN0cyBzbyBhXG4gICAgICogaGFuZC13cml0dGVuIGAuYmluZCh0aGlzQXJnLCB4KWAgZG9lc24ndCBzaWxlbnRseSBsb3NlIGB4YCBhZnRlclxuICAgICAqIHJvdW5kLXRyaXBwaW5nIHRocm91Z2ggdGhlIHJlZHVjZXIvcmV2aXZlci5cbiAgICAgKi9cbiAgICBib3VuZEFyZ3M/OiB1bmtub3duW107XG4gIH07XG4gIFR5cGVFcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfTtcbiAgVVJJRXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIFVSTDogc3RyaW5nO1xuICBXb3JrZmxvd0Z1bmN0aW9uOiB7XG4gICAgd29ya2Zsb3dJZDogc3RyaW5nO1xuICB9O1xuICBVUkxTZWFyY2hQYXJhbXM6IHN0cmluZztcbiAgVWludDhBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIFVpbnQ4Q2xhbXBlZEFycmF5OiBzdHJpbmc7IC8vIGJhc2U2NCBzdHJpbmdcbiAgVWludDE2QXJyYXk6IHN0cmluZzsgLy8gYmFzZTY0IHN0cmluZ1xuICBVaW50MzJBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIEFnZ3JlZ2F0ZUVycm9yOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHN0YWNrPzogc3RyaW5nO1xuICAgIGNhdXNlPzogdW5rbm93bjtcbiAgICBlcnJvcnM6IHVua25vd25bXTtcbiAgfTtcbiAgV3JpdGFibGVTdHJlYW06IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHJ1bklkIG9mIHRoZSB3b3JrZmxvdyBydW4gdGhhdCBvd25zIHRoZSB1bmRlcmx5aW5nIHNlcnZlclxuICAgICAqIHN0cmVhbS4gUHJlc2VudCBvbmx5IHdoZW4gdGhlIHdyaXRhYmxlIHdhcyBmb3J3YXJkZWQgYWNyb3NzIGFcbiAgICAgKiBgc3RhcnQoKWAgYm91bmRhcnkgKHBhcmVudCDihpIgY2hpbGQpLiBXaGVuIG9taXR0ZWQsIHRoZSB3cml0YWJsZVxuICAgICAqIGJlbG9uZ3MgdG8gdGhlIHJlY2VpdmluZyBydW4gKHRoZSBub3JtYWwgaW4tcnVuIGNhc2UpLlxuICAgICAqL1xuICAgIHJ1bklkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBkZXBsb3ltZW50IHRoYXQgb3ducyB0aGUgc2VydmVyIHN0cmVhbS4gQ2FycmllZCB3aXRoIGBydW5JZGBcbiAgICAgKiBzbyBhIGNoaWxkIHJ1bm5pbmcgb24gYSBuZXdlciBkZXBsb3ltZW50IGNhbiBlbmNyeXB0IGNodW5rcyB3aXRoXG4gICAgICogdGhlIHBhcmVudCdzIGtleSB3aXRob3V0IGZldGNoaW5nIHRoZSBwYXJlbnQgcnVuIGZpcnN0LlxuICAgICAqL1xuICAgIGRlcGxveW1lbnRJZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIHJ1bidzIFgyNTUxOSBwdWJsaWMga2V5IChiYXNlNjQpLCB3aGVuIGl0IGhhcyBvbmUuXG4gICAgICpcbiAgICAgKiBMZXRzIHRoZSByZWNlaXZpbmcgcnVuIHNlYWwgZnJhbWVzIHRvIHRoZSBzdHJlYW0ncyBvd25lciB3aXRoIG5vXG4gICAgICogbG9va3VwIGF0IGFsbCDigJQgbmVpdGhlciBhIHJ1biBmZXRjaCBub3IgYSBrZXktQVBJIHJvdW5kIHRyaXAuIFRoZVxuICAgICAqIG93bmVyIGRlcml2ZXMgdGhpcyBsb2NhbGx5IHdoZW4gaXQgY3JlYXRlcyB0aGUgc3RyZWFtLCBzbyBpbmNsdWRpbmdcbiAgICAgKiBpdCBoZXJlIGlzIGZyZWUuIEFic2VudCBmb3IgcnVucyBjcmVhdGVkIGJ5IG9sZGVyIFNES3MsIGluIHdoaWNoXG4gICAgICogY2FzZSB0aGUgcmVjZWl2ZXIgZmFsbHMgYmFjayB0byByZXNvbHZpbmcgdGhlIG93bmVyJ3Mgc3ltbWV0cmljIGtleS5cbiAgICAgKi9cbiAgICBlbmNyeXB0aW9uUHVibGljS2V5Pzogc3RyaW5nO1xuICB9O1xuICBBYm9ydENvbnRyb2xsZXI6IHtcbiAgICBzdHJlYW1OYW1lOiBzdHJpbmc7XG4gICAgaG9va1Rva2VuOiBzdHJpbmc7XG4gICAgYWJvcnRlZDogYm9vbGVhbjtcbiAgICByZWFzb24/OiB1bmtub3duO1xuICB9O1xuICBBYm9ydFNpZ25hbDoge1xuICAgIHN0cmVhbU5hbWU6IHN0cmluZztcbiAgICBob29rVG9rZW46IHN0cmluZztcbiAgICBhYm9ydGVkOiBib29sZWFuO1xuICAgIHJlYXNvbj86IHVua25vd247XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlZHVjZXJzID0ge1xuICBbSyBpbiBrZXlvZiBTZXJpYWxpemFibGVTcGVjaWFsXTogKFxuICAgIHZhbHVlOiBhbnlcbiAgKSA9PiBTZXJpYWxpemFibGVTcGVjaWFsW0tdIHwgZmFsc2U7XG59O1xuXG5leHBvcnQgdHlwZSBSZXZpdmVycyA9IHtcbiAgW0sgaW4ga2V5b2YgU2VyaWFsaXphYmxlU3BlY2lhbF06ICh2YWx1ZTogU2VyaWFsaXphYmxlU3BlY2lhbFtLXSkgPT4gYW55O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-side reference implementation of the QuickJS engine's workflow-mode
|
|
3
|
+
* wire codec.
|
|
4
|
+
*
|
|
5
|
+
* The QuickJS engine serializes through handles on the host
|
|
6
|
+
* (runtime/quickjs-serde.ts); this module is the value-space equivalent of
|
|
7
|
+
* that codec and is used by tests to build wire fixtures and assert
|
|
8
|
+
* byte-level parity. It has NO Node.js dependencies (no Buffer, no
|
|
9
|
+
* node:util), which is also what made it bundleable into the VM before the
|
|
10
|
+
* serde moved host-side.
|
|
11
|
+
*
|
|
12
|
+
* Produces and consumes the same wire format as the Node.js workflow.ts —
|
|
13
|
+
* format-prefixed devalue data ("devl" + devalue.stringify output).
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Serialize a value to format-prefixed bytes.
|
|
17
|
+
*
|
|
18
|
+
* @param value - The value to serialize
|
|
19
|
+
* @returns Uint8Array with "devl" prefix + devalue payload
|
|
20
|
+
*/
|
|
21
|
+
export declare function serialize(value: unknown): Uint8Array;
|
|
22
|
+
/**
|
|
23
|
+
* Deserialize format-prefixed bytes back to a value.
|
|
24
|
+
*
|
|
25
|
+
* @param data - Uint8Array with format prefix, or legacy non-binary data
|
|
26
|
+
* @returns The deserialized value
|
|
27
|
+
*/
|
|
28
|
+
export declare function deserialize(data: Uint8Array | unknown): unknown;
|
|
29
|
+
//# sourceMappingURL=workflow-vm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-vm.d.ts","sourceRoot":"","sources":["../../src/serialization/workflow-vm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiBH;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAOpD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CA0B/D"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-side reference implementation of the QuickJS engine's workflow-mode
|
|
3
|
+
* wire codec.
|
|
4
|
+
*
|
|
5
|
+
* The QuickJS engine serializes through handles on the host
|
|
6
|
+
* (runtime/quickjs-serde.ts); this module is the value-space equivalent of
|
|
7
|
+
* that codec and is used by tests to build wire fixtures and assert
|
|
8
|
+
* byte-level parity. It has NO Node.js dependencies (no Buffer, no
|
|
9
|
+
* node:util), which is also what made it bundleable into the VM before the
|
|
10
|
+
* serde moved host-side.
|
|
11
|
+
*
|
|
12
|
+
* Produces and consumes the same wire format as the Node.js workflow.ts —
|
|
13
|
+
* format-prefixed devalue data ("devl" + devalue.stringify output).
|
|
14
|
+
*/
|
|
15
|
+
import { devalueVmCodec } from './codec-devalue-vm.js';
|
|
16
|
+
import { isFormatPrefix, SerializationFormat } from './types.js';
|
|
17
|
+
const FORMAT_PREFIX_LENGTH = 4;
|
|
18
|
+
let _encoder;
|
|
19
|
+
let _decoder;
|
|
20
|
+
function getEncoder() {
|
|
21
|
+
if (!_encoder)
|
|
22
|
+
_encoder = new globalThis.TextEncoder();
|
|
23
|
+
return _encoder;
|
|
24
|
+
}
|
|
25
|
+
function getDecoder() {
|
|
26
|
+
if (!_decoder)
|
|
27
|
+
_decoder = new globalThis.TextDecoder();
|
|
28
|
+
return _decoder;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Serialize a value to format-prefixed bytes.
|
|
32
|
+
*
|
|
33
|
+
* @param value - The value to serialize
|
|
34
|
+
* @returns Uint8Array with "devl" prefix + devalue payload
|
|
35
|
+
*/
|
|
36
|
+
export function serialize(value) {
|
|
37
|
+
const payload = devalueVmCodec.serialize(value, 'workflow');
|
|
38
|
+
const prefix = getEncoder().encode(SerializationFormat.DEVALUE_V1);
|
|
39
|
+
const result = new Uint8Array(prefix.length + payload.length);
|
|
40
|
+
result.set(prefix, 0);
|
|
41
|
+
result.set(payload, prefix.length);
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Deserialize format-prefixed bytes back to a value.
|
|
46
|
+
*
|
|
47
|
+
* @param data - Uint8Array with format prefix, or legacy non-binary data
|
|
48
|
+
* @returns The deserialized value
|
|
49
|
+
*/
|
|
50
|
+
export function deserialize(data) {
|
|
51
|
+
// Legacy: non-binary data
|
|
52
|
+
if (!(data instanceof Uint8Array)) {
|
|
53
|
+
if (devalueVmCodec.deserializeLegacy) {
|
|
54
|
+
return devalueVmCodec.deserializeLegacy(data, 'workflow');
|
|
55
|
+
}
|
|
56
|
+
throw new Error('Cannot deserialize non-binary data without legacy support');
|
|
57
|
+
}
|
|
58
|
+
if (data.length < FORMAT_PREFIX_LENGTH) {
|
|
59
|
+
throw new Error('Data too short to contain format prefix');
|
|
60
|
+
}
|
|
61
|
+
const prefixStr = getDecoder().decode(data.subarray(0, FORMAT_PREFIX_LENGTH));
|
|
62
|
+
if (!isFormatPrefix(prefixStr)) {
|
|
63
|
+
throw new Error(`Invalid format prefix: "${prefixStr}"`);
|
|
64
|
+
}
|
|
65
|
+
if (prefixStr === SerializationFormat.DEVALUE_V1) {
|
|
66
|
+
const payload = data.subarray(FORMAT_PREFIX_LENGTH);
|
|
67
|
+
return devalueVmCodec.deserialize(payload, 'workflow');
|
|
68
|
+
}
|
|
69
|
+
throw new Error(`Unsupported serialization format: ${prefixStr}`);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctdm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi93b3JrZmxvdy12bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakUsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDL0IsSUFBSSxRQUEyQyxDQUFDO0FBQ2hELElBQUksUUFBMkMsQ0FBQztBQUNoRCxTQUFTLFVBQVU7SUFDakIsSUFBSSxDQUFDLFFBQVE7UUFBRSxRQUFRLEdBQUcsSUFBSyxVQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFDRCxTQUFTLFVBQVU7SUFDakIsSUFBSSxDQUFDLFFBQVE7UUFBRSxRQUFRLEdBQUcsSUFBSyxVQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYztJQUN0QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBMEI7SUFDcEQsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2xDLElBQUksY0FBYyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckMsT0FBTyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRCxDQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUM5RSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBSSxTQUFTLEtBQUssbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSG9zdC1zaWRlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUXVpY2tKUyBlbmdpbmUncyB3b3JrZmxvdy1tb2RlXG4gKiB3aXJlIGNvZGVjLlxuICpcbiAqIFRoZSBRdWlja0pTIGVuZ2luZSBzZXJpYWxpemVzIHRocm91Z2ggaGFuZGxlcyBvbiB0aGUgaG9zdFxuICogKHJ1bnRpbWUvcXVpY2tqcy1zZXJkZS50cyk7IHRoaXMgbW9kdWxlIGlzIHRoZSB2YWx1ZS1zcGFjZSBlcXVpdmFsZW50IG9mXG4gKiB0aGF0IGNvZGVjIGFuZCBpcyB1c2VkIGJ5IHRlc3RzIHRvIGJ1aWxkIHdpcmUgZml4dHVyZXMgYW5kIGFzc2VydFxuICogYnl0ZS1sZXZlbCBwYXJpdHkuIEl0IGhhcyBOTyBOb2RlLmpzIGRlcGVuZGVuY2llcyAobm8gQnVmZmVyLCBub1xuICogbm9kZTp1dGlsKSwgd2hpY2ggaXMgYWxzbyB3aGF0IG1hZGUgaXQgYnVuZGxlYWJsZSBpbnRvIHRoZSBWTSBiZWZvcmUgdGhlXG4gKiBzZXJkZSBtb3ZlZCBob3N0LXNpZGUuXG4gKlxuICogUHJvZHVjZXMgYW5kIGNvbnN1bWVzIHRoZSBzYW1lIHdpcmUgZm9ybWF0IGFzIHRoZSBOb2RlLmpzIHdvcmtmbG93LnRzIOKAlFxuICogZm9ybWF0LXByZWZpeGVkIGRldmFsdWUgZGF0YSAoXCJkZXZsXCIgKyBkZXZhbHVlLnN0cmluZ2lmeSBvdXRwdXQpLlxuICovXG5cbmltcG9ydCB7IGRldmFsdWVWbUNvZGVjIH0gZnJvbSAnLi9jb2RlYy1kZXZhbHVlLXZtLmpzJztcbmltcG9ydCB7IGlzRm9ybWF0UHJlZml4LCBTZXJpYWxpemF0aW9uRm9ybWF0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmNvbnN0IEZPUk1BVF9QUkVGSVhfTEVOR1RIID0gNDtcbmxldCBfZW5jb2RlcjogeyBlbmNvZGUoczogc3RyaW5nKTogVWludDhBcnJheSB9O1xubGV0IF9kZWNvZGVyOiB7IGRlY29kZShkOiBVaW50OEFycmF5KTogc3RyaW5nIH07XG5mdW5jdGlvbiBnZXRFbmNvZGVyKCkge1xuICBpZiAoIV9lbmNvZGVyKSBfZW5jb2RlciA9IG5ldyAoZ2xvYmFsVGhpcyBhcyBhbnkpLlRleHRFbmNvZGVyKCk7XG4gIHJldHVybiBfZW5jb2Rlcjtcbn1cbmZ1bmN0aW9uIGdldERlY29kZXIoKSB7XG4gIGlmICghX2RlY29kZXIpIF9kZWNvZGVyID0gbmV3IChnbG9iYWxUaGlzIGFzIGFueSkuVGV4dERlY29kZXIoKTtcbiAgcmV0dXJuIF9kZWNvZGVyO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHZhbHVlIHRvIGZvcm1hdC1wcmVmaXhlZCBieXRlcy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2VyaWFsaXplXG4gKiBAcmV0dXJucyBVaW50OEFycmF5IHdpdGggXCJkZXZsXCIgcHJlZml4ICsgZGV2YWx1ZSBwYXlsb2FkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUodmFsdWU6IHVua25vd24pOiBVaW50OEFycmF5IHtcbiAgY29uc3QgcGF5bG9hZCA9IGRldmFsdWVWbUNvZGVjLnNlcmlhbGl6ZSh2YWx1ZSwgJ3dvcmtmbG93Jyk7XG4gIGNvbnN0IHByZWZpeCA9IGdldEVuY29kZXIoKS5lbmNvZGUoU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxKTtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkocHJlZml4Lmxlbmd0aCArIHBheWxvYWQubGVuZ3RoKTtcbiAgcmVzdWx0LnNldChwcmVmaXgsIDApO1xuICByZXN1bHQuc2V0KHBheWxvYWQsIHByZWZpeC5sZW5ndGgpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIGZvcm1hdC1wcmVmaXhlZCBieXRlcyBiYWNrIHRvIGEgdmFsdWUuXG4gKlxuICogQHBhcmFtIGRhdGEgLSBVaW50OEFycmF5IHdpdGggZm9ybWF0IHByZWZpeCwgb3IgbGVnYWN5IG5vbi1iaW5hcnkgZGF0YVxuICogQHJldHVybnMgVGhlIGRlc2VyaWFsaXplZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemUoZGF0YTogVWludDhBcnJheSB8IHVua25vd24pOiB1bmtub3duIHtcbiAgLy8gTGVnYWN5OiBub24tYmluYXJ5IGRhdGFcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgaWYgKGRldmFsdWVWbUNvZGVjLmRlc2VyaWFsaXplTGVnYWN5KSB7XG4gICAgICByZXR1cm4gZGV2YWx1ZVZtQ29kZWMuZGVzZXJpYWxpemVMZWdhY3koZGF0YSwgJ3dvcmtmbG93Jyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYW5ub3QgZGVzZXJpYWxpemUgbm9uLWJpbmFyeSBkYXRhIHdpdGhvdXQgbGVnYWN5IHN1cHBvcnQnXG4gICAgKTtcbiAgfVxuXG4gIGlmIChkYXRhLmxlbmd0aCA8IEZPUk1BVF9QUkVGSVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIHRvbyBzaG9ydCB0byBjb250YWluIGZvcm1hdCBwcmVmaXgnKTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeFN0ciA9IGdldERlY29kZXIoKS5kZWNvZGUoZGF0YS5zdWJhcnJheSgwLCBGT1JNQVRfUFJFRklYX0xFTkdUSCkpO1xuICBpZiAoIWlzRm9ybWF0UHJlZml4KHByZWZpeFN0cikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybWF0IHByZWZpeDogXCIke3ByZWZpeFN0cn1cImApO1xuICB9XG5cbiAgaWYgKHByZWZpeFN0ciA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGRhdGEuc3ViYXJyYXkoRk9STUFUX1BSRUZJWF9MRU5HVEgpO1xuICAgIHJldHVybiBkZXZhbHVlVm1Db2RlYy5kZXNlcmlhbGl6ZShwYXlsb2FkLCAnd29ya2Zsb3cnKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2VyaWFsaXphdGlvbiBmb3JtYXQ6ICR7cHJlZml4U3RyfWApO1xufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow mode serialization.
|
|
3
|
+
*
|
|
4
|
+
* Provides serialize/deserialize for use inside the workflow execution
|
|
5
|
+
* environment (QuickJS VM or Node.js vm). It is:
|
|
6
|
+
* - Synchronous (no async operations)
|
|
7
|
+
* - No encryption (encryption is handled outside the VM on the host side)
|
|
8
|
+
*
|
|
9
|
+
* Designed to be bundled into the workflow code by esbuild and executed
|
|
10
|
+
* inside the sandboxed VM.
|
|
11
|
+
*/
|
|
12
|
+
import type { CodecOptions } from './codec.js';
|
|
13
|
+
/**
|
|
14
|
+
* Serialize a value for storage/transmission from the workflow environment.
|
|
15
|
+
*
|
|
16
|
+
* @param value - The value to serialize
|
|
17
|
+
* @param options - Optional global, extra reducers/revivers for VM-context serialization
|
|
18
|
+
* @returns Format-prefixed serialized bytes
|
|
19
|
+
*/
|
|
20
|
+
export declare function serialize(value: unknown, options?: CodecOptions): Uint8Array;
|
|
21
|
+
/**
|
|
22
|
+
* Deserialize a value received in the workflow environment.
|
|
23
|
+
*
|
|
24
|
+
* @param data - Format-prefixed serialized bytes, or legacy data
|
|
25
|
+
* @param options - Optional global, extra revivers for VM-context deserialization
|
|
26
|
+
* @returns The deserialized value
|
|
27
|
+
*/
|
|
28
|
+
export declare function deserialize(data: Uint8Array | unknown, options?: CodecOptions): unknown;
|
|
29
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/serialization/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAW5E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,GAAG,OAAO,EAC1B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAiBT"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow mode serialization.
|
|
3
|
+
*
|
|
4
|
+
* Provides serialize/deserialize for use inside the workflow execution
|
|
5
|
+
* environment (QuickJS VM or Node.js vm). It is:
|
|
6
|
+
* - Synchronous (no async operations)
|
|
7
|
+
* - No encryption (encryption is handled outside the VM on the host side)
|
|
8
|
+
*
|
|
9
|
+
* Designed to be bundled into the workflow code by esbuild and executed
|
|
10
|
+
* inside the sandboxed VM.
|
|
11
|
+
*/
|
|
12
|
+
import { SerializationError } from '@workflow/errors';
|
|
13
|
+
import { devalueCodec } from './codec-devalue.js';
|
|
14
|
+
import { formatSerializationError } from './errors.js';
|
|
15
|
+
import { decodeFormatPrefix, encodeWithFormatPrefix } from './format.js';
|
|
16
|
+
import { SerializationFormat } from './types.js';
|
|
17
|
+
/**
|
|
18
|
+
* Serialize a value for storage/transmission from the workflow environment.
|
|
19
|
+
*
|
|
20
|
+
* @param value - The value to serialize
|
|
21
|
+
* @param options - Optional global, extra reducers/revivers for VM-context serialization
|
|
22
|
+
* @returns Format-prefixed serialized bytes
|
|
23
|
+
*/
|
|
24
|
+
export function serialize(value, options) {
|
|
25
|
+
try {
|
|
26
|
+
const payload = devalueCodec.serialize(value, 'workflow', options);
|
|
27
|
+
return encodeWithFormatPrefix(SerializationFormat.DEVALUE_V1, payload);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
const { message, hint } = formatSerializationError('workflow value', error);
|
|
31
|
+
throw new SerializationError(message, { hint, cause: error });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Deserialize a value received in the workflow environment.
|
|
36
|
+
*
|
|
37
|
+
* @param data - Format-prefixed serialized bytes, or legacy data
|
|
38
|
+
* @param options - Optional global, extra revivers for VM-context deserialization
|
|
39
|
+
* @returns The deserialized value
|
|
40
|
+
*/
|
|
41
|
+
export function deserialize(data, options) {
|
|
42
|
+
if (!(data instanceof Uint8Array)) {
|
|
43
|
+
if (devalueCodec.deserializeLegacy) {
|
|
44
|
+
return devalueCodec.deserializeLegacy(data, 'workflow', options);
|
|
45
|
+
}
|
|
46
|
+
throw new Error('Cannot deserialize non-binary data without legacy support');
|
|
47
|
+
}
|
|
48
|
+
const { format, payload } = decodeFormatPrefix(data);
|
|
49
|
+
if (format === SerializationFormat.DEVALUE_V1) {
|
|
50
|
+
return devalueCodec.deserialize(payload, 'workflow', options);
|
|
51
|
+
}
|
|
52
|
+
throw new Error(`Unsupported serialization format: ${format}`);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi93b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYyxFQUFFLE9BQXNCO0lBQzlELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxPQUFPLHNCQUFzQixDQUMzQixtQkFBbUIsQ0FBQyxVQUFVLEVBQzlCLE9BQU8sQ0FDTSxDQUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxNQUFNLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsSUFBMEIsRUFDMUIsT0FBc0I7SUFFdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDbEMsSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRCxDQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckQsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUMsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya2Zsb3cgbW9kZSBzZXJpYWxpemF0aW9uLlxuICpcbiAqIFByb3ZpZGVzIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBmb3IgdXNlIGluc2lkZSB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uXG4gKiBlbnZpcm9ubWVudCAoUXVpY2tKUyBWTSBvciBOb2RlLmpzIHZtKS4gSXQgaXM6XG4gKiAtIFN5bmNocm9ub3VzIChubyBhc3luYyBvcGVyYXRpb25zKVxuICogLSBObyBlbmNyeXB0aW9uIChlbmNyeXB0aW9uIGlzIGhhbmRsZWQgb3V0c2lkZSB0aGUgVk0gb24gdGhlIGhvc3Qgc2lkZSlcbiAqXG4gKiBEZXNpZ25lZCB0byBiZSBidW5kbGVkIGludG8gdGhlIHdvcmtmbG93IGNvZGUgYnkgZXNidWlsZCBhbmQgZXhlY3V0ZWRcbiAqIGluc2lkZSB0aGUgc2FuZGJveGVkIFZNLlxuICovXG5cbmltcG9ydCB7IFNlcmlhbGl6YXRpb25FcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlY09wdGlvbnMgfSBmcm9tICcuL2NvZGVjLmpzJztcbmltcG9ydCB7IGRldmFsdWVDb2RlYyB9IGZyb20gJy4vY29kZWMtZGV2YWx1ZS5qcyc7XG5pbXBvcnQgeyBmb3JtYXRTZXJpYWxpemF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBkZWNvZGVGb3JtYXRQcmVmaXgsIGVuY29kZVdpdGhGb3JtYXRQcmVmaXggfSBmcm9tICcuL2Zvcm1hdC5qcyc7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uRm9ybWF0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogU2VyaWFsaXplIGEgdmFsdWUgZm9yIHN0b3JhZ2UvdHJhbnNtaXNzaW9uIGZyb20gdGhlIHdvcmtmbG93IGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXJpYWxpemVcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgZ2xvYmFsLCBleHRyYSByZWR1Y2Vycy9yZXZpdmVycyBmb3IgVk0tY29udGV4dCBzZXJpYWxpemF0aW9uXG4gKiBAcmV0dXJucyBGb3JtYXQtcHJlZml4ZWQgc2VyaWFsaXplZCBieXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogQ29kZWNPcHRpb25zKTogVWludDhBcnJheSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGRldmFsdWVDb2RlYy5zZXJpYWxpemUodmFsdWUsICd3b3JrZmxvdycsIG9wdGlvbnMpO1xuICAgIHJldHVybiBlbmNvZGVXaXRoRm9ybWF0UHJlZml4KFxuICAgICAgU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxLFxuICAgICAgcGF5bG9hZFxuICAgICkgYXMgVWludDhBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIGhpbnQgfSA9IGZvcm1hdFNlcmlhbGl6YXRpb25FcnJvcignd29ya2Zsb3cgdmFsdWUnLCBlcnJvcik7XG4gICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihtZXNzYWdlLCB7IGhpbnQsIGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIGEgdmFsdWUgcmVjZWl2ZWQgaW4gdGhlIHdvcmtmbG93IGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIC0gRm9ybWF0LXByZWZpeGVkIHNlcmlhbGl6ZWQgYnl0ZXMsIG9yIGxlZ2FjeSBkYXRhXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGdsb2JhbCwgZXh0cmEgcmV2aXZlcnMgZm9yIFZNLWNvbnRleHQgZGVzZXJpYWxpemF0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVzZXJpYWxpemVkIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZShcbiAgZGF0YTogVWludDhBcnJheSB8IHVua25vd24sXG4gIG9wdGlvbnM/OiBDb2RlY09wdGlvbnNcbik6IHVua25vd24ge1xuICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICBpZiAoZGV2YWx1ZUNvZGVjLmRlc2VyaWFsaXplTGVnYWN5KSB7XG4gICAgICByZXR1cm4gZGV2YWx1ZUNvZGVjLmRlc2VyaWFsaXplTGVnYWN5KGRhdGEsICd3b3JrZmxvdycsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ2Fubm90IGRlc2VyaWFsaXplIG5vbi1iaW5hcnkgZGF0YSB3aXRob3V0IGxlZ2FjeSBzdXBwb3J0J1xuICAgICk7XG4gIH1cblxuICBjb25zdCB7IGZvcm1hdCwgcGF5bG9hZCB9ID0gZGVjb2RlRm9ybWF0UHJlZml4KGRhdGEpO1xuXG4gIGlmIChmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuREVWQUxVRV9WMSkge1xuICAgIHJldHVybiBkZXZhbHVlQ29kZWMuZGVzZXJpYWxpemUocGF5bG9hZCwgJ3dvcmtmbG93Jywgb3B0aW9ucyk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHNlcmlhbGl6YXRpb24gZm9ybWF0OiAke2Zvcm1hdH1gKTtcbn1cbiJdfQ==
|
|
@@ -5,11 +5,36 @@
|
|
|
5
5
|
* dispatch, and shared types/classes used by all environments (runtime, web
|
|
6
6
|
* o11y, CLI o11y). It has NO Node.js dependencies.
|
|
7
7
|
*/
|
|
8
|
+
/**
|
|
9
|
+
* Re-exported from the envelope layer so browser consumers (web dashboard,
|
|
10
|
+
* web-shared) can resolve key material without importing
|
|
11
|
+
* `@workflow/core/serialization`, whose module graph reaches Node built-ins
|
|
12
|
+
* (`node:util`, `node:async_hooks`) and cannot be bundled for the browser.
|
|
13
|
+
*
|
|
14
|
+
* Everything below is Web Crypto only: `serialization/encryption.ts`,
|
|
15
|
+
* `encryption.ts` and `sealed-box.ts` are all free of Node dependencies.
|
|
16
|
+
*/
|
|
17
|
+
export { type DecryptionKey, decrypt as decryptEnvelope, deriveRunPayloadKeys, encrypt as encryptEnvelope, isRunPayloadKeys, isSealTarget, type PayloadKey, type RunPayloadKeys, runPayloadKeys, type SealTarget, sealTo, } from './serialization/encryption.js';
|
|
8
18
|
export declare const SerializationFormat: {
|
|
9
19
|
/** devalue stringify/parse with TextEncoder/TextDecoder */
|
|
10
20
|
readonly DEVALUE_V1: "devl";
|
|
11
21
|
/** Encrypted payload (inner payload has its own format prefix after decryption) */
|
|
12
22
|
readonly ENCRYPTED: "encr";
|
|
23
|
+
/**
|
|
24
|
+
* Sealed payload — asymmetrically encrypted to a run's X25519 public key
|
|
25
|
+
* (inner payload has its own format prefix after opening).
|
|
26
|
+
*
|
|
27
|
+
* Written by cross-run writers that hold only the recipient run's public
|
|
28
|
+
* key. Opening it requires the run's private scalar rather than the
|
|
29
|
+
* symmetric per-run key, so o11y display treats it as ciphertext via
|
|
30
|
+
* {@link isEncryptedData} but {@link hydrateDataWithKey} does not attempt
|
|
31
|
+
* an AES-GCM decrypt on it.
|
|
32
|
+
*/
|
|
33
|
+
readonly SEALED: "encp";
|
|
34
|
+
/** Gzip-compressed payload (inner payload has its own format prefix after decompression) */
|
|
35
|
+
readonly GZIP: "gzip";
|
|
36
|
+
/** Zstandard-compressed payload (inner payload has its own format prefix after decompression) */
|
|
37
|
+
readonly ZSTD: "zstd";
|
|
13
38
|
};
|
|
14
39
|
export type SerializationFormatType = (typeof SerializationFormat)[keyof typeof SerializationFormat];
|
|
15
40
|
/**
|
|
@@ -38,10 +63,36 @@ export declare const ENCRYPTED_PLACEHOLDER = "\uD83D\uDD12 Encrypted";
|
|
|
38
63
|
*/
|
|
39
64
|
export declare function isExpiredStub(data: unknown): boolean;
|
|
40
65
|
/**
|
|
41
|
-
* Check if a binary value
|
|
66
|
+
* Check if a binary value is ciphertext — either a symmetrically encrypted
|
|
67
|
+
* payload ('encr') or a sealed cross-run payload ('encp').
|
|
68
|
+
*
|
|
69
|
+
* This is the predicate display layers want: both schemes are opaque bytes
|
|
70
|
+
* that must not be fed to the devalue parser, and both render as the same
|
|
71
|
+
* "Encrypted" affordance in the CLI and web UI. Use {@link isSealedData} when
|
|
72
|
+
* the *scheme* matters — notably when choosing a decryption path, since a
|
|
73
|
+
* sealed payload needs the run's private scalar rather than its symmetric key.
|
|
74
|
+
*
|
|
42
75
|
* Browser-safe — does not depend on the full serialization module.
|
|
43
76
|
*/
|
|
44
77
|
export declare function isEncryptedData(data: unknown): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Check if a binary value has the 'encp' format prefix, indicating a sealed
|
|
80
|
+
* (asymmetrically encrypted) cross-run payload.
|
|
81
|
+
*
|
|
82
|
+
* Browser-safe — does not depend on the full serialization module.
|
|
83
|
+
*/
|
|
84
|
+
export declare function isSealedData(data: unknown): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Check if a binary value has a compression format prefix ('gzip' or 'zstd').
|
|
87
|
+
* Browser-safe — does not depend on the full serialization module.
|
|
88
|
+
*/
|
|
89
|
+
export declare function isCompressedData(data: unknown): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Register a browser zstd decoder (e.g. a WASM-backed one). The web o11y UI
|
|
92
|
+
* calls this at init so `hydrateDataWithKey` can inflate zstd payloads after
|
|
93
|
+
* client-side decryption. Node readers use `node:zlib` and ignore this.
|
|
94
|
+
*/
|
|
95
|
+
export declare function registerZstdDecoder(decoder: (payload: Uint8Array) => Promise<Uint8Array>): void;
|
|
45
96
|
/**
|
|
46
97
|
* A map of type name → reviver function, used by devalue's `parse`/`unflatten`.
|
|
47
98
|
* Each environment (runtime, web, CLI) provides its own set.
|
|
@@ -70,11 +121,15 @@ export declare function hydrateData(value: unknown, revivers: Revivers): unknown
|
|
|
70
121
|
* decryption. Used by o11y tooling (web UI, CLI) when the user requests
|
|
71
122
|
* decryption.
|
|
72
123
|
*
|
|
73
|
-
* @param value - The value to hydrate (may be encrypted)
|
|
124
|
+
* @param value - The value to hydrate (may be encrypted or sealed)
|
|
74
125
|
* @param revivers - Devalue revivers for deserialization
|
|
75
|
-
* @param key -
|
|
126
|
+
* @param key - The run's key material. Pass `RunPayloadKeys` (from
|
|
127
|
+
* `deriveRunPayloadKeys`) to open both symmetric (`encr`) and sealed
|
|
128
|
+
* (`encp`) payloads; a bare `CryptoKey` opens only the symmetric ones.
|
|
129
|
+
* Typed as a read capability so a write-only seal target — which could open
|
|
130
|
+
* neither scheme — is rejected at compile time rather than failing here.
|
|
76
131
|
*/
|
|
77
|
-
export declare function hydrateDataWithKey(value: unknown, revivers: Revivers, key: import('./encryption.js').
|
|
132
|
+
export declare function hydrateDataWithKey(value: unknown, revivers: Revivers, key: import('./serialization/encryption.js').DecryptionKey | undefined): Promise<unknown>;
|
|
78
133
|
/** Marker for stream reference objects rendered as links in the UI */
|
|
79
134
|
export declare const STREAM_REF_TYPE = "__workflow_stream_ref__";
|
|
80
135
|
/** A stream reference for UI display */
|
|
@@ -158,6 +213,7 @@ export declare function hydrateResourceIO<T extends {
|
|
|
158
213
|
stepId?: string;
|
|
159
214
|
hookId?: string;
|
|
160
215
|
eventId?: string;
|
|
216
|
+
eventType?: string;
|
|
161
217
|
input?: any;
|
|
162
218
|
output?: any;
|
|
163
219
|
metadata?: any;
|