@workflow/world-vercel 4.1.0-beta.33 → 4.1.0-beta.35
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/encryption.d.ts +62 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +145 -0
- package/dist/encryption.js.map +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +148 -8
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +17 -13
- package/dist/queue.js.map +1 -1
- package/dist/refs.d.ts +51 -0
- package/dist/refs.d.ts.map +1 -0
- package/dist/refs.js +131 -0
- package/dist/refs.js.map +1 -0
- package/dist/runs.d.ts.map +1 -1
- package/dist/runs.js +3 -2
- package/dist/runs.js.map +1 -1
- package/dist/steps.d.ts +3 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel-specific key management for workflow encryption.
|
|
3
|
+
*
|
|
4
|
+
* This module handles:
|
|
5
|
+
* - HKDF key derivation (deployment key + projectId + runId → per-run key)
|
|
6
|
+
* - Cross-deployment key retrieval via the Vercel API
|
|
7
|
+
*
|
|
8
|
+
* The actual AES-GCM encrypt/decrypt operations are in @workflow/core/encryption
|
|
9
|
+
* which is browser-compatible. This module is Node.js only (uses node:crypto
|
|
10
|
+
* for HKDF and the Vercel API for key retrieval).
|
|
11
|
+
*/
|
|
12
|
+
import type { World } from '@workflow/world';
|
|
13
|
+
/**
|
|
14
|
+
* Derive a per-run AES-256 encryption key using HKDF-SHA256.
|
|
15
|
+
*
|
|
16
|
+
* The derivation uses `projectId|runId` as the HKDF info parameter,
|
|
17
|
+
* ensuring that each run has a unique encryption key even when sharing
|
|
18
|
+
* the same deployment key.
|
|
19
|
+
*
|
|
20
|
+
* @param deploymentKey - Raw 32-byte deployment key
|
|
21
|
+
* @param projectId - Vercel project ID for context isolation
|
|
22
|
+
* @param runId - Workflow run ID for per-run key isolation
|
|
23
|
+
* @returns Raw 32-byte AES-256 key
|
|
24
|
+
*/
|
|
25
|
+
export declare function deriveRunKey(deploymentKey: Uint8Array, projectId: string, runId: string): Promise<Uint8Array>;
|
|
26
|
+
/**
|
|
27
|
+
* Fetch the per-run encryption key from the Vercel API.
|
|
28
|
+
*
|
|
29
|
+
* The API performs HKDF-SHA256 derivation server-side, so the raw
|
|
30
|
+
* deployment key never leaves the API boundary. The returned key
|
|
31
|
+
* is ready-to-use for AES-GCM encrypt/decrypt operations.
|
|
32
|
+
*
|
|
33
|
+
* Uses OIDC token authentication (for cross-deployment runtime calls like
|
|
34
|
+
* resumeHook) or falls back to VERCEL_TOKEN (for external tooling like o11y).
|
|
35
|
+
*
|
|
36
|
+
* @param deploymentId - The deployment ID that holds the base key material
|
|
37
|
+
* @param projectId - The project ID for HKDF context isolation
|
|
38
|
+
* @param runId - The workflow run ID for per-run key derivation
|
|
39
|
+
* @param options.token - Auth token (from config). Falls back to OIDC or VERCEL_TOKEN.
|
|
40
|
+
* @returns Derived 32-byte per-run AES-256 key, or `undefined` when the
|
|
41
|
+
* deployment has no key (encryption disabled for that run)
|
|
42
|
+
*/
|
|
43
|
+
export declare function fetchRunKey(deploymentId: string, projectId: string, runId: string, options?: {
|
|
44
|
+
/** Auth token (from config). Falls back to OIDC or VERCEL_TOKEN. */
|
|
45
|
+
token?: string;
|
|
46
|
+
/** Team ID for team-scoped API requests. */
|
|
47
|
+
teamId?: string;
|
|
48
|
+
}): Promise<Uint8Array | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* Create the `getEncryptionKeyForRun` implementation for a Vercel World.
|
|
51
|
+
*
|
|
52
|
+
* Resolves the per-run AES-256 key by either:
|
|
53
|
+
* - Deriving it locally via HKDF when the run belongs to the current deployment
|
|
54
|
+
* - Fetching it from the Vercel API when the run belongs to a different deployment
|
|
55
|
+
*
|
|
56
|
+
* @param projectId - Vercel project ID for HKDF context isolation
|
|
57
|
+
* @param teamId - Optional team ID for team-scoped API requests
|
|
58
|
+
* @param token - Optional auth token from config
|
|
59
|
+
* @returns The `getEncryptionKeyForRun` function, or `undefined` if no projectId
|
|
60
|
+
*/
|
|
61
|
+
export declare function createGetEncryptionKeyForRun(projectId: string | undefined, teamId?: string, token?: string): World['getEncryptionKeyForRun'];
|
|
62
|
+
//# sourceMappingURL=encryption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAe,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAK1D;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,UAAU,EACzB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC,CAmCrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAyCjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,KAAK,CAAC,wBAAwB,CAAC,CAyCjC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel-specific key management for workflow encryption.
|
|
3
|
+
*
|
|
4
|
+
* This module handles:
|
|
5
|
+
* - HKDF key derivation (deployment key + projectId + runId → per-run key)
|
|
6
|
+
* - Cross-deployment key retrieval via the Vercel API
|
|
7
|
+
*
|
|
8
|
+
* The actual AES-GCM encrypt/decrypt operations are in @workflow/core/encryption
|
|
9
|
+
* which is browser-compatible. This module is Node.js only (uses node:crypto
|
|
10
|
+
* for HKDF and the Vercel API for key retrieval).
|
|
11
|
+
*/
|
|
12
|
+
import { webcrypto } from 'node:crypto';
|
|
13
|
+
import { getVercelOidcToken } from '@vercel/oidc';
|
|
14
|
+
import * as z from 'zod';
|
|
15
|
+
const KEY_BYTES = 32; // 256 bits = 32 bytes (AES-256)
|
|
16
|
+
/**
|
|
17
|
+
* Derive a per-run AES-256 encryption key using HKDF-SHA256.
|
|
18
|
+
*
|
|
19
|
+
* The derivation uses `projectId|runId` as the HKDF info parameter,
|
|
20
|
+
* ensuring that each run has a unique encryption key even when sharing
|
|
21
|
+
* the same deployment key.
|
|
22
|
+
*
|
|
23
|
+
* @param deploymentKey - Raw 32-byte deployment key
|
|
24
|
+
* @param projectId - Vercel project ID for context isolation
|
|
25
|
+
* @param runId - Workflow run ID for per-run key isolation
|
|
26
|
+
* @returns Raw 32-byte AES-256 key
|
|
27
|
+
*/
|
|
28
|
+
export async function deriveRunKey(deploymentKey, projectId, runId) {
|
|
29
|
+
if (deploymentKey.length !== KEY_BYTES) {
|
|
30
|
+
throw new Error(`Invalid deployment key length: expected ${KEY_BYTES} bytes for AES-256, got ${deploymentKey.length} bytes`);
|
|
31
|
+
}
|
|
32
|
+
if (!projectId || typeof projectId !== 'string') {
|
|
33
|
+
throw new Error('projectId must be a non-empty string');
|
|
34
|
+
}
|
|
35
|
+
const baseKey = await webcrypto.subtle.importKey('raw', deploymentKey, 'HKDF', false, ['deriveBits']);
|
|
36
|
+
const info = new TextEncoder().encode(`${projectId}|${runId}`);
|
|
37
|
+
// Zero salt is acceptable per RFC 5869 Section 3.1 when the input key
|
|
38
|
+
// material has high entropy (as is the case with our random deployment key).
|
|
39
|
+
// The `info` parameter provides per-run context separation.
|
|
40
|
+
const derivedBits = await webcrypto.subtle.deriveBits({
|
|
41
|
+
name: 'HKDF',
|
|
42
|
+
hash: 'SHA-256',
|
|
43
|
+
salt: new Uint8Array(32),
|
|
44
|
+
info,
|
|
45
|
+
}, baseKey, KEY_BYTES * 8 // bits
|
|
46
|
+
);
|
|
47
|
+
return new Uint8Array(derivedBits);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Fetch the per-run encryption key from the Vercel API.
|
|
51
|
+
*
|
|
52
|
+
* The API performs HKDF-SHA256 derivation server-side, so the raw
|
|
53
|
+
* deployment key never leaves the API boundary. The returned key
|
|
54
|
+
* is ready-to-use for AES-GCM encrypt/decrypt operations.
|
|
55
|
+
*
|
|
56
|
+
* Uses OIDC token authentication (for cross-deployment runtime calls like
|
|
57
|
+
* resumeHook) or falls back to VERCEL_TOKEN (for external tooling like o11y).
|
|
58
|
+
*
|
|
59
|
+
* @param deploymentId - The deployment ID that holds the base key material
|
|
60
|
+
* @param projectId - The project ID for HKDF context isolation
|
|
61
|
+
* @param runId - The workflow run ID for per-run key derivation
|
|
62
|
+
* @param options.token - Auth token (from config). Falls back to OIDC or VERCEL_TOKEN.
|
|
63
|
+
* @returns Derived 32-byte per-run AES-256 key, or `undefined` when the
|
|
64
|
+
* deployment has no key (encryption disabled for that run)
|
|
65
|
+
*/
|
|
66
|
+
export async function fetchRunKey(deploymentId, projectId, runId, options) {
|
|
67
|
+
// Authenticate via provided token (CLI/config), OIDC token (runtime),
|
|
68
|
+
// or VERCEL_TOKEN env var (external tooling)
|
|
69
|
+
const oidcToken = await getVercelOidcToken().catch(() => null);
|
|
70
|
+
const token = options?.token ?? oidcToken ?? process.env.VERCEL_TOKEN;
|
|
71
|
+
if (!token) {
|
|
72
|
+
throw new Error('Cannot fetch run key: no OIDC token or VERCEL_TOKEN available');
|
|
73
|
+
}
|
|
74
|
+
const params = new URLSearchParams({ projectId, runId });
|
|
75
|
+
if (options?.teamId) {
|
|
76
|
+
params.set('teamId', options.teamId);
|
|
77
|
+
}
|
|
78
|
+
const response = await fetch(`https://api.vercel.com/v1/workflow/run-key/${deploymentId}?${params}`, {
|
|
79
|
+
headers: {
|
|
80
|
+
Authorization: `Bearer ${token}`,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
throw new Error(`Failed to fetch run key for ${runId} (deployment ${deploymentId}): HTTP ${response.status}`);
|
|
85
|
+
}
|
|
86
|
+
const data = await response.json();
|
|
87
|
+
const result = z.object({ key: z.string().nullable() }).safeParse(data);
|
|
88
|
+
if (!result.success) {
|
|
89
|
+
throw new Error(`Invalid response from Vercel API: expected { key: string | null }. Zod error: ${result.error.message}`);
|
|
90
|
+
}
|
|
91
|
+
if (result.data.key === null) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
return Buffer.from(result.data.key, 'base64');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create the `getEncryptionKeyForRun` implementation for a Vercel World.
|
|
98
|
+
*
|
|
99
|
+
* Resolves the per-run AES-256 key by either:
|
|
100
|
+
* - Deriving it locally via HKDF when the run belongs to the current deployment
|
|
101
|
+
* - Fetching it from the Vercel API when the run belongs to a different deployment
|
|
102
|
+
*
|
|
103
|
+
* @param projectId - Vercel project ID for HKDF context isolation
|
|
104
|
+
* @param teamId - Optional team ID for team-scoped API requests
|
|
105
|
+
* @param token - Optional auth token from config
|
|
106
|
+
* @returns The `getEncryptionKeyForRun` function, or `undefined` if no projectId
|
|
107
|
+
*/
|
|
108
|
+
export function createGetEncryptionKeyForRun(projectId, teamId, token) {
|
|
109
|
+
if (!projectId)
|
|
110
|
+
return undefined;
|
|
111
|
+
const currentDeploymentId = process.env.VERCEL_DEPLOYMENT_ID;
|
|
112
|
+
// Parse the local deployment key from env (lazy, only when encryption is used)
|
|
113
|
+
let localDeploymentKey;
|
|
114
|
+
function getLocalDeploymentKey() {
|
|
115
|
+
if (localDeploymentKey)
|
|
116
|
+
return localDeploymentKey;
|
|
117
|
+
const deploymentKeyBase64 = process.env.VERCEL_DEPLOYMENT_KEY;
|
|
118
|
+
if (!deploymentKeyBase64)
|
|
119
|
+
return undefined;
|
|
120
|
+
localDeploymentKey = Buffer.from(deploymentKeyBase64, 'base64');
|
|
121
|
+
return localDeploymentKey;
|
|
122
|
+
}
|
|
123
|
+
return async function getEncryptionKeyForRun(run, context) {
|
|
124
|
+
const runId = typeof run === 'string' ? run : run.runId;
|
|
125
|
+
const deploymentId = typeof run === 'string'
|
|
126
|
+
? context?.deploymentId
|
|
127
|
+
: run.deploymentId;
|
|
128
|
+
// Same deployment, or no deploymentId provided (e.g., start() on
|
|
129
|
+
// current deployment, or step-handler during same-deployment execution)
|
|
130
|
+
// → use local deployment key + local HKDF derivation
|
|
131
|
+
if (!deploymentId || deploymentId === currentDeploymentId) {
|
|
132
|
+
const localKey = getLocalDeploymentKey();
|
|
133
|
+
if (!localKey)
|
|
134
|
+
return undefined;
|
|
135
|
+
return deriveRunKey(localKey, projectId, runId);
|
|
136
|
+
}
|
|
137
|
+
// Different deployment — fetch the derived per-run key from the
|
|
138
|
+
// Vercel API. The API performs HKDF derivation server-side so the
|
|
139
|
+
// raw deployment key never leaves the API boundary.
|
|
140
|
+
// Covers cross-deployment resumeHook() (OIDC auth) and o11y
|
|
141
|
+
// tooling reading data from other deployments (VERCEL_TOKEN).
|
|
142
|
+
return fetchRunKey(deploymentId, projectId, runId, { token, teamId });
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=encryption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"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"}
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACV,KAAK,WAAW,EAIhB,KAAK,+BAA+B,EACpC,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAIvB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACV,KAAK,WAAW,EAIhB,KAAK,+BAA+B,EACpC,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAIvB,MAAM,iBAAiB,CAAC;AAWzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAsM5C,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,gBAAgB,GAAG,+BAA+B,EAC1D,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAyEnC;AAED,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,IAAI,EAAE,eAAe,EACrB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,WAAW,CAAC,CA6CtB"}
|
package/dist/events.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { EventSchema, EventTypeSchema, HookSchema, PaginatedResponseSchema, WorkflowRunSchema, } from '@workflow/world';
|
|
2
2
|
import z from 'zod';
|
|
3
|
+
import { isRefDescriptor, resolveRefDescriptors, } from './refs.js';
|
|
3
4
|
import { cancelWorkflowRunV1, createWorkflowRunV1 } from './runs.js';
|
|
4
5
|
import { deserializeStep, StepWireSchema } from './steps.js';
|
|
6
|
+
import { trace } from './telemetry.js';
|
|
5
7
|
import { DEFAULT_RESOLVE_DATA_OPTION, makeRequest } from './utils.js';
|
|
6
|
-
// Helper to filter event data based on resolveData setting
|
|
8
|
+
// Helper to filter event data based on resolveData setting.
|
|
9
|
+
// Strips both eventData and eventDataRef since the server always returns
|
|
10
|
+
// lazy refs now, and callers with resolveData='none' should not see either.
|
|
7
11
|
function filterEventData(event, resolveData) {
|
|
8
12
|
if (resolveData === 'none') {
|
|
9
|
-
const { eventData: _eventData, ...rest } = event;
|
|
13
|
+
const { eventData: _eventData, eventDataRef: _eventDataRef, ...rest } = event;
|
|
10
14
|
return rest;
|
|
11
15
|
}
|
|
12
16
|
return event;
|
|
@@ -19,18 +23,34 @@ const EventResultWireSchema = z.object({
|
|
|
19
23
|
step: StepWireSchema.optional(),
|
|
20
24
|
hook: HookSchema.optional(),
|
|
21
25
|
});
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// specVersion
|
|
26
|
+
// Schema for events returned with `remoteRefBehavior=lazy`.
|
|
27
|
+
// Includes both `eventDataRef` (legacy, specVersion=1) and `eventData`
|
|
28
|
+
// (v2, specVersion=2 — may contain nested RefDescriptor values).
|
|
29
|
+
// specVersion defaults to 1 (legacy) when parsing responses from storage.
|
|
25
30
|
const EventWithRefsSchema = z.object({
|
|
26
31
|
eventId: z.string(),
|
|
27
32
|
runId: z.string(),
|
|
28
33
|
eventType: EventTypeSchema,
|
|
29
34
|
correlationId: z.string().optional(),
|
|
30
35
|
eventDataRef: z.any().optional(),
|
|
36
|
+
eventData: z.any().optional(),
|
|
31
37
|
createdAt: z.coerce.date(),
|
|
32
38
|
specVersion: z.number().default(1),
|
|
33
39
|
});
|
|
40
|
+
/**
|
|
41
|
+
* Maps event types to the field name within `eventData` that may contain
|
|
42
|
+
* a ref descriptor. Mirrors the server-side `resolveEventDataRefs()` mapping.
|
|
43
|
+
*/
|
|
44
|
+
const eventDataRefFieldMap = {
|
|
45
|
+
run_created: 'input',
|
|
46
|
+
run_completed: 'output',
|
|
47
|
+
run_failed: 'error',
|
|
48
|
+
step_created: 'input',
|
|
49
|
+
step_completed: 'result',
|
|
50
|
+
step_failed: 'error',
|
|
51
|
+
step_retrying: 'error',
|
|
52
|
+
hook_created: 'metadata',
|
|
53
|
+
};
|
|
34
54
|
// Events where the client uses the response entity data need 'resolve' (default).
|
|
35
55
|
// Events where the client discards the response can use 'lazy' to skip expensive
|
|
36
56
|
// S3 ref resolution on the server, saving ~200-460ms per event.
|
|
@@ -39,6 +59,101 @@ const eventsNeedingResolve = new Set([
|
|
|
39
59
|
'run_started', // client reads result.run (checks startedAt, status)
|
|
40
60
|
'step_started', // client reads result.step (checks attempt, state)
|
|
41
61
|
]);
|
|
62
|
+
function collectPendingRefs(events) {
|
|
63
|
+
const pending = [];
|
|
64
|
+
for (let i = 0; i < events.length; i++) {
|
|
65
|
+
const event = events[i];
|
|
66
|
+
// Legacy events (specVersion=1): eventDataRef is a RefDescriptor
|
|
67
|
+
if (event.eventDataRef && isRefDescriptor(event.eventDataRef)) {
|
|
68
|
+
pending.push({
|
|
69
|
+
eventIndex: i,
|
|
70
|
+
refType: 'entity',
|
|
71
|
+
descriptor: event.eventDataRef,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// V2 events: eventData may contain a nested RefDescriptor
|
|
75
|
+
if (event.eventData && typeof event.eventData === 'object') {
|
|
76
|
+
const fieldName = eventDataRefFieldMap[event.eventType];
|
|
77
|
+
if (fieldName) {
|
|
78
|
+
const fieldValue = event.eventData[fieldName];
|
|
79
|
+
if (isRefDescriptor(fieldValue)) {
|
|
80
|
+
pending.push({
|
|
81
|
+
eventIndex: i,
|
|
82
|
+
refType: 'nested',
|
|
83
|
+
fieldName,
|
|
84
|
+
descriptor: fieldValue,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return pending;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Hydrate lazy-loaded events by resolving all ref descriptors client-side.
|
|
94
|
+
* For entity-level refs (eventDataRef), the resolved value becomes eventData.
|
|
95
|
+
* For nested refs (eventData[field]), the resolved value replaces the descriptor.
|
|
96
|
+
*
|
|
97
|
+
* Events are shallow-cloned before mutation to avoid corrupting any upstream
|
|
98
|
+
* caches (SWR, React cache, etc.) that might hold references to the originals.
|
|
99
|
+
*/
|
|
100
|
+
async function hydrateEventRefs(events, config) {
|
|
101
|
+
const pending = collectPendingRefs(events);
|
|
102
|
+
if (pending.length === 0)
|
|
103
|
+
return events;
|
|
104
|
+
return trace('world.refs.hydrate', async (span) => {
|
|
105
|
+
span?.setAttribute('workflow.refs.hydrated_count', pending.length);
|
|
106
|
+
// Deduplicate descriptors by _ref key to avoid redundant resolutions.
|
|
107
|
+
// Multiple events may reference the same ref (e.g., shared input).
|
|
108
|
+
const uniqueRefs = new Map();
|
|
109
|
+
for (const p of pending) {
|
|
110
|
+
if (!uniqueRefs.has(p.descriptor._ref)) {
|
|
111
|
+
const eventRunId = events[p.eventIndex].runId;
|
|
112
|
+
uniqueRefs.set(p.descriptor._ref, {
|
|
113
|
+
descriptor: p.descriptor,
|
|
114
|
+
runId: eventRunId,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const deduped = Array.from(uniqueRefs.values());
|
|
119
|
+
// Resolve unique descriptors in parallel with bounded concurrency
|
|
120
|
+
const dedupedResults = await resolveRefDescriptors(deduped, config).catch((err) => {
|
|
121
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
122
|
+
throw new Error(`Failed to hydrate ${pending.length} ref(s) across ${events.length} event(s): ${msg}`);
|
|
123
|
+
});
|
|
124
|
+
// Build a map from ref key → resolved value for fast lookup
|
|
125
|
+
const resolvedMap = new Map();
|
|
126
|
+
const dedupedKeys = Array.from(uniqueRefs.keys());
|
|
127
|
+
for (let i = 0; i < dedupedKeys.length; i++) {
|
|
128
|
+
resolvedMap.set(dedupedKeys[i], dedupedResults[i]);
|
|
129
|
+
}
|
|
130
|
+
// Shallow-clone events that need modification, then apply resolved values
|
|
131
|
+
const result = [...events];
|
|
132
|
+
for (let i = 0; i < pending.length; i++) {
|
|
133
|
+
const { eventIndex, refType, fieldName, descriptor } = pending[i];
|
|
134
|
+
const resolved = resolvedMap.get(descriptor._ref);
|
|
135
|
+
// Shallow-clone the event (and eventData if nested) before mutating
|
|
136
|
+
if (result[eventIndex] === events[eventIndex]) {
|
|
137
|
+
result[eventIndex] = { ...events[eventIndex] };
|
|
138
|
+
}
|
|
139
|
+
const event = result[eventIndex];
|
|
140
|
+
if (refType === 'entity') {
|
|
141
|
+
// Legacy: eventDataRef → eventData, remove the ref field
|
|
142
|
+
event.eventData = resolved;
|
|
143
|
+
delete event.eventDataRef;
|
|
144
|
+
}
|
|
145
|
+
else if (refType === 'nested' && fieldName) {
|
|
146
|
+
// Shallow-clone eventData before mutating if not yet cloned
|
|
147
|
+
if (event.eventData === events[eventIndex].eventData) {
|
|
148
|
+
event.eventData = { ...event.eventData };
|
|
149
|
+
}
|
|
150
|
+
// V2: replace the nested ref descriptor with resolved value
|
|
151
|
+
event.eventData[fieldName] = resolved;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
42
157
|
// Functions
|
|
43
158
|
export async function getWorkflowRunEvents(params, config) {
|
|
44
159
|
const searchParams = new URLSearchParams();
|
|
@@ -62,8 +177,10 @@ export async function getWorkflowRunEvents(params, config) {
|
|
|
62
177
|
searchParams.set('sortOrder', pagination.sortOrder);
|
|
63
178
|
if (correlationId)
|
|
64
179
|
searchParams.set('correlationId', correlationId);
|
|
65
|
-
|
|
66
|
-
|
|
180
|
+
// Always send 'lazy' to the server to avoid memory pressure from resolving
|
|
181
|
+
// all refs in memory. When resolveData is 'all', we hydrate refs client-side
|
|
182
|
+
// via individual ref resolution requests.
|
|
183
|
+
searchParams.set('remoteRefBehavior', 'lazy');
|
|
67
184
|
const queryString = searchParams.toString();
|
|
68
185
|
const query = queryString ? `?${queryString}` : '';
|
|
69
186
|
const endpoint = correlationId
|
|
@@ -73,8 +190,31 @@ export async function getWorkflowRunEvents(params, config) {
|
|
|
73
190
|
endpoint,
|
|
74
191
|
options: { method: 'GET' },
|
|
75
192
|
config,
|
|
76
|
-
schema: PaginatedResponseSchema(
|
|
193
|
+
schema: PaginatedResponseSchema(EventWithRefsSchema),
|
|
77
194
|
}));
|
|
195
|
+
if (resolveData === 'all') {
|
|
196
|
+
// Hydrate refs client-side: resolve all ref descriptors in parallel
|
|
197
|
+
const hydratedEvents = await hydrateEventRefs(response.data, config);
|
|
198
|
+
// Re-parse hydrated events through EventSchema to apply type coercions
|
|
199
|
+
// (e.g., z.coerce.date() for resumeAt) that EventWithRefsSchema skips.
|
|
200
|
+
// Use safeParse to gracefully handle any events that don't match a known
|
|
201
|
+
// type — pass them through as-is rather than failing the entire request.
|
|
202
|
+
let coercionFailures = 0;
|
|
203
|
+
const validatedEvents = hydratedEvents.map((event) => {
|
|
204
|
+
const result = EventSchema.safeParse(event);
|
|
205
|
+
if (!result.success)
|
|
206
|
+
coercionFailures++;
|
|
207
|
+
return result.success ? result.data : event;
|
|
208
|
+
});
|
|
209
|
+
if (coercionFailures > 0) {
|
|
210
|
+
console.warn(`[world-vercel] EventSchema coercion failed for ${coercionFailures}/${hydratedEvents.length} events`);
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
...response,
|
|
214
|
+
data: validatedEvents,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// resolveData === 'none': strip eventData and eventDataRef
|
|
78
218
|
return {
|
|
79
219
|
...response,
|
|
80
220
|
data: response.data.map((event) => filterEventData(event, resolveData)),
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,WAAW,EACX,eAAe,EACf,UAAU,EAIV,uBAAuB,EAEvB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { World } from '@workflow/world';
|
|
2
2
|
import type { APIConfig } from './utils.js';
|
|
3
|
+
export { createGetEncryptionKeyForRun, deriveRunKey, fetchRunKey, } from './encryption.js';
|
|
3
4
|
export { createQueue } from './queue.js';
|
|
4
5
|
export { createStorage } from './storage.js';
|
|
5
6
|
export { createStreamer } from './streamer.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAK7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACL,4BAA4B,EAC5B,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,CAgB3D"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
|
+
import { createGetEncryptionKeyForRun } from './encryption.js';
|
|
1
2
|
import { createQueue } from './queue.js';
|
|
2
3
|
import { createStorage } from './storage.js';
|
|
3
4
|
import { createStreamer } from './streamer.js';
|
|
5
|
+
export { createGetEncryptionKeyForRun, deriveRunKey, fetchRunKey, } from './encryption.js';
|
|
4
6
|
export { createQueue } from './queue.js';
|
|
5
7
|
export { createStorage } from './storage.js';
|
|
6
8
|
export { createStreamer } from './streamer.js';
|
|
7
9
|
export function createVercelWorld(config) {
|
|
10
|
+
// Project ID for HKDF key derivation context.
|
|
11
|
+
// Use config value first (set correctly by CLI/web), fall back to env var (runtime).
|
|
12
|
+
const projectId = config?.projectConfig?.projectId || process.env.VERCEL_PROJECT_ID;
|
|
8
13
|
return {
|
|
9
14
|
...createQueue(config),
|
|
10
15
|
...createStorage(config),
|
|
11
16
|
...createStreamer(config),
|
|
17
|
+
getEncryptionKeyForRun: createGetEncryptionKeyForRun(projectId, config?.projectConfig?.teamId, config?.token),
|
|
12
18
|
};
|
|
13
19
|
}
|
|
14
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,OAAO;QACL,GAAG,WAAW,CAAC,MAAM,CAAC;QACtB,GAAG,aAAa,CAAC,MAAM,CAAC;QACxB,GAAG,cAAc,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EACL,4BAA4B,EAC5B,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,8CAA8C;IAC9C,qFAAqF;IACrF,MAAM,SAAS,GACb,MAAM,EAAE,aAAa,EAAE,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAEpE,OAAO;QACL,GAAG,WAAW,CAAC,MAAM,CAAC;QACtB,GAAG,aAAa,CAAC,MAAM,CAAC;QACxB,GAAG,cAAc,CAAC,MAAM,CAAC;QACzB,sBAAsB,EAAE,4BAA4B,CAClD,SAAS,EACT,MAAM,EAAE,aAAa,EAAE,MAAM,EAC7B,MAAM,EAAE,KAAK,CACd;KACF,CAAC;AACJ,CAAC"}
|
package/dist/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,KAAK,EAKX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,SAAS,EAA0B,MAAM,YAAY,CAAC;AAoEpE,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,CAgIrD"}
|
package/dist/queue.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { QueueClient, DuplicateMessageError } from '@vercel/queue';
|
|
2
|
-
import { handleCallback } from '@vercel/queue/web';
|
|
3
2
|
import { MessageId, QueuePayloadSchema, ValidQueueName, } from '@workflow/world';
|
|
4
3
|
import * as z from 'zod';
|
|
5
4
|
import { getHeaders, getHttpUrl } from './utils.js';
|
|
@@ -58,13 +57,15 @@ function getHeadersFromPayload(payload) {
|
|
|
58
57
|
export function createQueue(config) {
|
|
59
58
|
const { baseUrl, usingProxy } = getHttpUrl(config);
|
|
60
59
|
const headers = getHeaders(config, { usingProxy });
|
|
60
|
+
const region = 'iad1';
|
|
61
61
|
const clientOptions = {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
region,
|
|
63
|
+
...(usingProxy && {
|
|
64
|
+
// final path will be /queues-proxy/api/v3/topic/...
|
|
65
|
+
// and the proxy will strip the /queues-proxy prefix before forwarding to VQS
|
|
66
|
+
resolveBaseUrl: () => new URL(`${baseUrl}/queues-proxy`),
|
|
67
|
+
token: config?.token,
|
|
68
|
+
}),
|
|
68
69
|
headers: Object.fromEntries(headers.entries()),
|
|
69
70
|
};
|
|
70
71
|
const queue = async (queueName, payload, opts) => {
|
|
@@ -96,9 +97,7 @@ export function createQueue(config) {
|
|
|
96
97
|
});
|
|
97
98
|
const sanitizedQueueName = queueName.replace(/[^A-Za-z0-9-_]/g, '-');
|
|
98
99
|
try {
|
|
99
|
-
const { messageId } = await client.
|
|
100
|
-
queueName: sanitizedQueueName,
|
|
101
|
-
payload: encoded,
|
|
100
|
+
const { messageId } = await client.send(sanitizedQueueName, encoded, {
|
|
102
101
|
idempotencyKey: opts?.idempotencyKey,
|
|
103
102
|
delaySeconds: opts?.delaySeconds,
|
|
104
103
|
headers: {
|
|
@@ -106,7 +105,11 @@ export function createQueue(config) {
|
|
|
106
105
|
...opts?.headers,
|
|
107
106
|
},
|
|
108
107
|
});
|
|
109
|
-
return {
|
|
108
|
+
return {
|
|
109
|
+
// messageId may be null when VQS fails over to a different region —
|
|
110
|
+
// the event is ingested but the responding region cannot return an ID.
|
|
111
|
+
messageId: messageId ? MessageId.parse(messageId) : null,
|
|
112
|
+
};
|
|
110
113
|
}
|
|
111
114
|
catch (error) {
|
|
112
115
|
// Silently handle idempotency key conflicts - the message was already queued.
|
|
@@ -122,7 +125,8 @@ export function createQueue(config) {
|
|
|
122
125
|
}
|
|
123
126
|
};
|
|
124
127
|
const createQueueHandler = (_prefix, handler) => {
|
|
125
|
-
|
|
128
|
+
const client = new QueueClient(clientOptions);
|
|
129
|
+
return client.handleCallback(async (message, metadata) => {
|
|
126
130
|
if (!message || !metadata) {
|
|
127
131
|
return;
|
|
128
132
|
}
|
|
@@ -142,7 +146,7 @@ export function createQueue(config) {
|
|
|
142
146
|
// we may get a duplicate invocation but won't lose the scheduled wakeup.
|
|
143
147
|
await queue(queueName, payload, { deploymentId, delaySeconds });
|
|
144
148
|
}
|
|
145
|
-
}
|
|
149
|
+
});
|
|
146
150
|
};
|
|
147
151
|
const getDeploymentId = async () => {
|
|
148
152
|
const deploymentId = process.env.VERCEL_DEPLOYMENT_ID;
|
package/dist/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
|
package/dist/refs.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type APIConfig } from './utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* A ref descriptor as returned by workflow-server when `remoteRefBehavior=lazy`.
|
|
4
|
+
* Matches the server-side `RefDescriptor` type in `lib/data/remote-ref.ts`.
|
|
5
|
+
*/
|
|
6
|
+
export interface RefDescriptor {
|
|
7
|
+
_type: 'RemoteRef';
|
|
8
|
+
_ref: string;
|
|
9
|
+
/** Base64-encoded inline payload. Present only for dbrf: (inline) refs. */
|
|
10
|
+
_data?: string;
|
|
11
|
+
/** Content type of the inline payload. Present only for dbrf: refs. */
|
|
12
|
+
_ct?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Checks if a value is a RefDescriptor object.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isRefDescriptor(value: unknown): value is RefDescriptor;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a single ref descriptor.
|
|
20
|
+
*
|
|
21
|
+
* For inline refs (dbrf: prefix), the data is decoded locally from the
|
|
22
|
+
* descriptor's `_data` field — no network request is needed.
|
|
23
|
+
*
|
|
24
|
+
* For S3 refs (s3rf:) and Redis refs (kvrf:), a request is made to the
|
|
25
|
+
* `GET /v2/runs/:runId/refs` endpoint on workflow-server which returns
|
|
26
|
+
* raw CBOR or binary bytes.
|
|
27
|
+
*
|
|
28
|
+
* @param descriptor - The ref descriptor to resolve
|
|
29
|
+
* @param runId - The runId that owns this ref (used in the URL path)
|
|
30
|
+
* @param config - API configuration
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveRefDescriptor(descriptor: RefDescriptor, runId: string, config?: APIConfig): Promise<unknown>;
|
|
33
|
+
/**
|
|
34
|
+
* A ref descriptor paired with the runId that owns it, for resolution.
|
|
35
|
+
*/
|
|
36
|
+
export interface RefWithRunId {
|
|
37
|
+
descriptor: RefDescriptor;
|
|
38
|
+
runId: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve multiple ref descriptors in parallel with bounded concurrency.
|
|
42
|
+
*
|
|
43
|
+
* If any ref in a batch fails, the batch rejects and remaining batches
|
|
44
|
+
* are aborted to avoid cascading failures.
|
|
45
|
+
*
|
|
46
|
+
* @param refs - Array of ref descriptors with their owning runIds
|
|
47
|
+
* @param config - API configuration
|
|
48
|
+
* @returns Array of resolved values in the same order as input
|
|
49
|
+
*/
|
|
50
|
+
export declare function resolveRefDescriptors(refs: RefWithRunId[], config?: APIConfig): Promise<unknown[]>;
|
|
51
|
+
//# sourceMappingURL=refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../src/refs.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,YAAY,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAStE;AAQD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,aAAa,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,OAAO,CAAC,CA2ElB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,aAAa,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,YAAY,EAAE,EACpB,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,OAAO,EAAE,CAAC,CAsCpB"}
|
package/dist/refs.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { WorkflowAPIError } from '@workflow/errors';
|
|
2
|
+
import { decode } from 'cbor-x';
|
|
3
|
+
import { ErrorType, getSpanKind, HttpRequestMethod, HttpResponseStatusCode, PeerService, trace, UrlFull, } from './telemetry.js';
|
|
4
|
+
import { getHttpConfig } from './utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Checks if a value is a RefDescriptor object.
|
|
7
|
+
*/
|
|
8
|
+
export function isRefDescriptor(value) {
|
|
9
|
+
return (typeof value === 'object' &&
|
|
10
|
+
value !== null &&
|
|
11
|
+
'_type' in value &&
|
|
12
|
+
'_ref' in value &&
|
|
13
|
+
typeof value._ref === 'string' &&
|
|
14
|
+
value._type === 'RemoteRef');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Maximum number of concurrent ref resolution requests.
|
|
18
|
+
* Limits peak concurrency to avoid overwhelming the server.
|
|
19
|
+
*/
|
|
20
|
+
const REF_RESOLVE_CONCURRENCY = 10;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a single ref descriptor.
|
|
23
|
+
*
|
|
24
|
+
* For inline refs (dbrf: prefix), the data is decoded locally from the
|
|
25
|
+
* descriptor's `_data` field — no network request is needed.
|
|
26
|
+
*
|
|
27
|
+
* For S3 refs (s3rf:) and Redis refs (kvrf:), a request is made to the
|
|
28
|
+
* `GET /v2/runs/:runId/refs` endpoint on workflow-server which returns
|
|
29
|
+
* raw CBOR or binary bytes.
|
|
30
|
+
*
|
|
31
|
+
* @param descriptor - The ref descriptor to resolve
|
|
32
|
+
* @param runId - The runId that owns this ref (used in the URL path)
|
|
33
|
+
* @param config - API configuration
|
|
34
|
+
*/
|
|
35
|
+
export async function resolveRefDescriptor(descriptor, runId, config) {
|
|
36
|
+
const ref = descriptor._ref;
|
|
37
|
+
// Inline refs (dbrf:) carry their data in the descriptor — decode locally
|
|
38
|
+
if (ref.startsWith('dbrf:')) {
|
|
39
|
+
if (!descriptor._data) {
|
|
40
|
+
throw new Error(`Inline ref descriptor missing _data field: ${ref}`);
|
|
41
|
+
}
|
|
42
|
+
const contentType = descriptor._ct ?? 'application/cbor';
|
|
43
|
+
const binaryData = Buffer.from(descriptor._data, 'base64');
|
|
44
|
+
if (contentType === 'application/octet-stream') {
|
|
45
|
+
// Buffer is a Uint8Array subclass — return directly to avoid a copy.
|
|
46
|
+
return binaryData;
|
|
47
|
+
}
|
|
48
|
+
// CBOR-encoded data — decode it. Buffer is accepted by cbor-x directly.
|
|
49
|
+
return decode(binaryData);
|
|
50
|
+
}
|
|
51
|
+
// Remote refs (s3rf:, kvrf:) — fetch raw bytes from the server.
|
|
52
|
+
// The server returns the raw stored bytes directly (not wrapped in a
|
|
53
|
+
// JSON/CBOR envelope). The Content-Type may be 'application/cbor' (for
|
|
54
|
+
// CBOR-encoded data) or 'application/octet-stream' (for raw binary like
|
|
55
|
+
// Uint8Array). We handle both content types directly rather than going
|
|
56
|
+
// through makeRequest, which only handles JSON/CBOR API responses.
|
|
57
|
+
const { baseUrl, headers } = await getHttpConfig(config);
|
|
58
|
+
const endpoint = `/v2/runs/${encodeURIComponent(runId)}/refs?ref=${encodeURIComponent(ref)}`;
|
|
59
|
+
const url = `${baseUrl}${endpoint}`;
|
|
60
|
+
// Set headers that makeRequest normally adds: Accept for content
|
|
61
|
+
// negotiation and X-Request-Time to bypass RSC request memoization.
|
|
62
|
+
headers.set('Accept', 'application/cbor, application/octet-stream');
|
|
63
|
+
headers.set('X-Request-Time', Date.now().toString());
|
|
64
|
+
return trace('http GET', { kind: await getSpanKind('CLIENT') }, async (span) => {
|
|
65
|
+
span?.setAttributes({
|
|
66
|
+
...HttpRequestMethod('GET'),
|
|
67
|
+
...UrlFull(url),
|
|
68
|
+
...PeerService('workflow-server'),
|
|
69
|
+
});
|
|
70
|
+
const response = await fetch(new Request(url, { method: 'GET', headers }));
|
|
71
|
+
span?.setAttributes({
|
|
72
|
+
...HttpResponseStatusCode(response.status),
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
const error = new WorkflowAPIError(`Failed to resolve ref: HTTP ${response.status} ${response.statusText}`, { url, status: response.status });
|
|
76
|
+
span?.setAttributes({
|
|
77
|
+
...ErrorType(`HTTP ${response.status}`),
|
|
78
|
+
});
|
|
79
|
+
span?.recordException?.(error);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
const contentType = response.headers.get('Content-Type') || '';
|
|
83
|
+
const buffer = await response.arrayBuffer();
|
|
84
|
+
if (contentType.includes('application/octet-stream')) {
|
|
85
|
+
// Raw binary data (e.g., Uint8Array stored by the workflow)
|
|
86
|
+
return new Uint8Array(buffer);
|
|
87
|
+
}
|
|
88
|
+
// CBOR-encoded data (the common case for structured values)
|
|
89
|
+
return decode(new Uint8Array(buffer));
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Resolve multiple ref descriptors in parallel with bounded concurrency.
|
|
94
|
+
*
|
|
95
|
+
* If any ref in a batch fails, the batch rejects and remaining batches
|
|
96
|
+
* are aborted to avoid cascading failures.
|
|
97
|
+
*
|
|
98
|
+
* @param refs - Array of ref descriptors with their owning runIds
|
|
99
|
+
* @param config - API configuration
|
|
100
|
+
* @returns Array of resolved values in the same order as input
|
|
101
|
+
*/
|
|
102
|
+
export async function resolveRefDescriptors(refs, config) {
|
|
103
|
+
if (refs.length === 0)
|
|
104
|
+
return [];
|
|
105
|
+
return trace('world.refs.resolve', async (span) => {
|
|
106
|
+
const inlineCount = refs.filter((r) => r.descriptor._ref.startsWith('dbrf:')).length;
|
|
107
|
+
const remoteCount = refs.length - inlineCount;
|
|
108
|
+
span?.setAttributes({
|
|
109
|
+
'workflow.refs.total_count': refs.length,
|
|
110
|
+
'workflow.refs.inline_count': inlineCount,
|
|
111
|
+
'workflow.refs.remote_count': remoteCount,
|
|
112
|
+
});
|
|
113
|
+
// Simple case: if under concurrency limit, resolve all at once
|
|
114
|
+
if (refs.length <= REF_RESOLVE_CONCURRENCY) {
|
|
115
|
+
return Promise.all(refs.map((r) => resolveRefDescriptor(r.descriptor, r.runId, config)));
|
|
116
|
+
}
|
|
117
|
+
// Batch with bounded concurrency. If any ref in a batch fails,
|
|
118
|
+
// the batch rejects and remaining batches are aborted to avoid
|
|
119
|
+
// cascading failures.
|
|
120
|
+
const results = new Array(refs.length);
|
|
121
|
+
for (let i = 0; i < refs.length; i += REF_RESOLVE_CONCURRENCY) {
|
|
122
|
+
const batch = refs.slice(i, i + REF_RESOLVE_CONCURRENCY);
|
|
123
|
+
const batchResults = await Promise.all(batch.map((r) => resolveRefDescriptor(r.descriptor, r.runId, config)));
|
|
124
|
+
for (let j = 0; j < batchResults.length; j++) {
|
|
125
|
+
results[i + j] = batchResults[j];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return results;
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=refs.js.map
|
package/dist/refs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.js","sourceRoot":"","sources":["../src/refs.ts"],"names":[],"mappings":"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"}
|
package/dist/runs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EAGtB,KAAK,WAAW,EAEhB,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EAGtB,KAAK,WAAW,EAEhB,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAsE5C;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,sBAAsB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EACxD,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACtD,wBAAsB,gBAAgB,CACpC,MAAM,CAAC,EAAE,sBAAsB,GAAG;IAAE,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,EACzD,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;AAC3C,wBAAsB,gBAAgB,CACpC,MAAM,CAAC,EAAE,sBAAsB,EAC/B,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,iBAAiB,CAAC,WAAW,GAAG,sBAAsB,CAAC,CAAC,CAAC;AA6CpE,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,wBAAwB,EAC9B,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,WAAW,CAAC,CAStB;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,oBAAoB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EACtD,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,sBAAsB,CAAC,CAAC;AACnC,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,oBAAoB,GAAG;IAAE,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,EACvD,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC;AACxB,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,oBAAoB,EAC7B,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,WAAW,GAAG,sBAAsB,CAAC,CAAC;AAkCjD,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,uBAAuB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EACzD,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,sBAAsB,CAAC,CAAC;AACnC,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,uBAAuB,GAAG;IAAE,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,EAC1D,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,WAAW,CAAC,CAAC;AACxB,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,uBAAuB,EAChC,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,WAAW,GAAG,sBAAsB,CAAC,CAAC"}
|
package/dist/runs.js
CHANGED
|
@@ -16,6 +16,9 @@ const WorkflowRunWireBaseSchema = WorkflowRunBaseSchema.omit({
|
|
|
16
16
|
}).extend({
|
|
17
17
|
// Backend returns error as either a JSON string or structured object
|
|
18
18
|
error: z.union([z.string(), StructuredErrorSchema]).optional(),
|
|
19
|
+
// Not part of the World interface, but passed through for direct consumers and debugging
|
|
20
|
+
blobStorageBytes: z.number().optional(),
|
|
21
|
+
streamStorageBytes: z.number().optional(),
|
|
19
22
|
});
|
|
20
23
|
// Wire schema for resolved data (full input/output)
|
|
21
24
|
const WorkflowRunWireSchema = WorkflowRunWireBaseSchema;
|
|
@@ -31,8 +34,6 @@ const WorkflowRunWireWithRefsSchema = WorkflowRunWireBaseSchema.omit({
|
|
|
31
34
|
// Accept both Uint8Array (v2 format) and any (legacy v1 JSON format)
|
|
32
35
|
input: z.union([z.instanceof(Uint8Array), z.any()]).optional(),
|
|
33
36
|
output: z.union([z.instanceof(Uint8Array), z.any()]).optional(),
|
|
34
|
-
blobStorageBytes: z.number().optional(),
|
|
35
|
-
streamStorageBytes: z.number().optional(),
|
|
36
37
|
});
|
|
37
38
|
// Implementation
|
|
38
39
|
function filterRunData(run, resolveData) {
|
package/dist/runs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAML,uBAAuB,EACvB,qBAAqB,EAErB,qBAAqB,GAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB;;;;;;;;GAQG;AACH,MAAM,yBAAyB,GAAG,qBAAqB,CAAC,IAAI,CAAC;IAC3D,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC,MAAM,CAAC;IACR,qEAAqE;IACrE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"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"}
|
package/dist/steps.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import type { APIConfig } from './utils.js';
|
|
|
8
8
|
export declare const StepWireSchema: z.ZodObject<{
|
|
9
9
|
output: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>]>>;
|
|
10
10
|
input: z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>]>;
|
|
11
|
+
runId: z.ZodString;
|
|
11
12
|
status: z.ZodEnum<{
|
|
12
13
|
pending: "pending";
|
|
13
14
|
running: "running";
|
|
@@ -15,13 +16,12 @@ export declare const StepWireSchema: z.ZodObject<{
|
|
|
15
16
|
failed: "failed";
|
|
16
17
|
cancelled: "cancelled";
|
|
17
18
|
}>;
|
|
18
|
-
retryAfter: z.ZodOptional<z.ZodCoercedDate<unknown>>;
|
|
19
|
-
runId: z.ZodString;
|
|
20
19
|
specVersion: z.ZodOptional<z.ZodNumber>;
|
|
21
20
|
startedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
|
|
22
|
-
completedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
|
|
23
21
|
createdAt: z.ZodCoercedDate<unknown>;
|
|
24
22
|
updatedAt: z.ZodCoercedDate<unknown>;
|
|
23
|
+
completedAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
|
|
24
|
+
retryAfter: z.ZodOptional<z.ZodCoercedDate<unknown>>;
|
|
25
25
|
stepId: z.ZodString;
|
|
26
26
|
stepName: z.ZodString;
|
|
27
27
|
attempt: z.ZodNumber;
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "4.1.0-beta.
|
|
1
|
+
export declare const version = "4.1.0-beta.35";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/world-vercel",
|
|
3
|
-
"version": "4.1.0-beta.
|
|
3
|
+
"version": "4.1.0-beta.35",
|
|
4
4
|
"description": "Vercel platform World implementation for Workflow DevKit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,11 +24,11 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@vercel/oidc": "3.0.5",
|
|
27
|
-
"@vercel/queue": "0.0.
|
|
27
|
+
"@vercel/queue": "0.0.2",
|
|
28
28
|
"cbor-x": "1.6.0",
|
|
29
29
|
"zod": "4.1.11",
|
|
30
30
|
"@workflow/errors": "4.1.0-beta.16",
|
|
31
|
-
"@workflow/world": "4.1.0-beta.
|
|
31
|
+
"@workflow/world": "4.1.0-beta.7"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@opentelemetry/api": "1"
|