@workflow/world-local 4.0.1-beta.7 → 4.1.0-beta.28
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/config.d.ts +15 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +35 -9
- package/dist/config.js.map +1 -1
- package/dist/fs.d.ts +13 -0
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +108 -13
- package/dist/fs.js.map +1 -1
- package/dist/index.d.ts +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -9
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +91 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +263 -0
- package/dist/init.js.map +1 -0
- package/dist/queue.d.ts +2 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +83 -40
- package/dist/queue.js.map +1 -1
- package/dist/storage/events-storage.d.ts +7 -0
- package/dist/storage/events-storage.d.ts.map +1 -0
- package/dist/storage/events-storage.js +527 -0
- package/dist/storage/events-storage.js.map +1 -0
- package/dist/storage/filters.d.ts +26 -0
- package/dist/storage/filters.d.ts.map +1 -0
- package/dist/storage/filters.js +43 -0
- package/dist/storage/filters.js.map +1 -0
- package/dist/storage/helpers.d.ts +14 -0
- package/dist/storage/helpers.d.ts.map +1 -0
- package/dist/storage/helpers.js +34 -0
- package/dist/storage/helpers.js.map +1 -0
- package/dist/storage/hooks-storage.d.ts +12 -0
- package/dist/storage/hooks-storage.d.ts.map +1 -0
- package/dist/storage/hooks-storage.js +89 -0
- package/dist/storage/hooks-storage.js.map +1 -0
- package/dist/storage/index.d.ts +10 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +20 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/legacy.d.ts +13 -0
- package/dist/storage/legacy.d.ts.map +1 -0
- package/dist/storage/legacy.js +73 -0
- package/dist/storage/legacy.js.map +1 -0
- package/dist/storage/runs-storage.d.ts +7 -0
- package/dist/storage/runs-storage.d.ts.map +1 -0
- package/dist/storage/runs-storage.js +59 -0
- package/dist/storage/runs-storage.js.map +1 -0
- package/dist/storage/steps-storage.d.ts +7 -0
- package/dist/storage/steps-storage.d.ts.map +1 -0
- package/dist/storage/steps-storage.js +58 -0
- package/dist/storage/steps-storage.js.map +1 -0
- package/dist/storage.d.ts +9 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +8 -437
- package/dist/storage.js.map +1 -1
- package/dist/streamer.d.ts +1 -1
- package/dist/streamer.d.ts.map +1 -1
- package/dist/streamer.js +103 -20
- package/dist/streamer.js.map +1 -1
- package/dist/test-helpers.d.ts +43 -0
- package/dist/test-helpers.d.ts.map +1 -0
- package/dist/test-helpers.js +89 -0
- package/dist/test-helpers.js.map +1 -0
- package/package.json +10 -9
package/dist/init.js
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { access, constants, mkdir, readFile, unlink, writeFile, } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
/** Package name - hardcoded since it doesn't change */
|
|
5
|
+
const PACKAGE_NAME = '@workflow/world-local';
|
|
6
|
+
let cachedPackageInfo = null;
|
|
7
|
+
/**
|
|
8
|
+
* Get the directory path for this module.
|
|
9
|
+
* Works in ESM and falls back to a constant in CJS contexts (which shouldn't happen)
|
|
10
|
+
*/
|
|
11
|
+
function getModuleDir() {
|
|
12
|
+
// In bundled CJS contexts, import.meta.url may be undefined or empty
|
|
13
|
+
if (typeof import.meta.url === 'string' && import.meta.url) {
|
|
14
|
+
return path.dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns the package name and version from package.json.
|
|
20
|
+
* The result is cached after the first read.
|
|
21
|
+
*
|
|
22
|
+
* In bundled contexts where package.json cannot be read,
|
|
23
|
+
* returns 'bundled' as the version.
|
|
24
|
+
*/
|
|
25
|
+
export async function getPackageInfo() {
|
|
26
|
+
if (cachedPackageInfo) {
|
|
27
|
+
return cachedPackageInfo;
|
|
28
|
+
}
|
|
29
|
+
const moduleDir = getModuleDir();
|
|
30
|
+
if (moduleDir) {
|
|
31
|
+
try {
|
|
32
|
+
const content = await readFile(path.join(moduleDir, '../package.json'), 'utf-8');
|
|
33
|
+
cachedPackageInfo = JSON.parse(content);
|
|
34
|
+
return cachedPackageInfo;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Fall through to bundled fallback
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Bundled context - package.json not accessible
|
|
41
|
+
cachedPackageInfo = {
|
|
42
|
+
name: PACKAGE_NAME,
|
|
43
|
+
version: 'bundled',
|
|
44
|
+
};
|
|
45
|
+
return cachedPackageInfo;
|
|
46
|
+
}
|
|
47
|
+
/** Filename for storing version information in the data directory */
|
|
48
|
+
const VERSION_FILENAME = 'version.txt';
|
|
49
|
+
/**
|
|
50
|
+
* Error thrown when the data directory cannot be accessed or created.
|
|
51
|
+
*/
|
|
52
|
+
export class DataDirAccessError extends Error {
|
|
53
|
+
dataDir;
|
|
54
|
+
code;
|
|
55
|
+
constructor(message, dataDir, code) {
|
|
56
|
+
super(message);
|
|
57
|
+
this.name = 'DataDirAccessError';
|
|
58
|
+
this.dataDir = dataDir;
|
|
59
|
+
this.code = code;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Error thrown when data directory version is incompatible.
|
|
64
|
+
*/
|
|
65
|
+
export class DataDirVersionError extends Error {
|
|
66
|
+
oldVersion;
|
|
67
|
+
newVersion;
|
|
68
|
+
suggestedVersion;
|
|
69
|
+
constructor(message, oldVersion, newVersion, suggestedVersion) {
|
|
70
|
+
super(message);
|
|
71
|
+
this.name = 'DataDirVersionError';
|
|
72
|
+
this.oldVersion = oldVersion;
|
|
73
|
+
this.newVersion = newVersion;
|
|
74
|
+
this.suggestedVersion = suggestedVersion;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parses a version string into its components.
|
|
79
|
+
*
|
|
80
|
+
* @param versionString - Version string like "4.0.1" or "4.0.1-beta.20"
|
|
81
|
+
* @returns Parsed version object with major, minor, patch, and optional prerelease
|
|
82
|
+
*/
|
|
83
|
+
export function parseVersion(versionString) {
|
|
84
|
+
// Match: major.minor.patch with optional prerelease
|
|
85
|
+
const match = versionString.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);
|
|
86
|
+
if (!match) {
|
|
87
|
+
throw new Error(`Invalid version string: "${versionString}"`);
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
major: parseInt(match[1], 10),
|
|
91
|
+
minor: parseInt(match[2], 10),
|
|
92
|
+
patch: parseInt(match[3], 10),
|
|
93
|
+
prerelease: match[4],
|
|
94
|
+
raw: versionString,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Formats a parsed version back to a string.
|
|
99
|
+
*/
|
|
100
|
+
export function formatVersion(version) {
|
|
101
|
+
const base = `${version.major}.${version.minor}.${version.patch}`;
|
|
102
|
+
return version.prerelease ? `${base}-${version.prerelease}` : base;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Parses the version file content to extract package name and version.
|
|
106
|
+
*
|
|
107
|
+
* @param content - Content like "@workflow/world-local@4.0.1-beta.20"
|
|
108
|
+
* @returns Object with packageName and version
|
|
109
|
+
*/
|
|
110
|
+
export function parseVersionFile(content) {
|
|
111
|
+
const trimmed = content.trim();
|
|
112
|
+
const lastAtIndex = trimmed.lastIndexOf('@');
|
|
113
|
+
if (lastAtIndex <= 0) {
|
|
114
|
+
throw new Error(`Invalid version file content: "${content}"`);
|
|
115
|
+
}
|
|
116
|
+
const packageName = trimmed.substring(0, lastAtIndex);
|
|
117
|
+
const versionString = trimmed.substring(lastAtIndex + 1);
|
|
118
|
+
return {
|
|
119
|
+
packageName,
|
|
120
|
+
version: parseVersion(versionString),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Formats the version file content.
|
|
125
|
+
*/
|
|
126
|
+
export function formatVersionFile(packageName, version) {
|
|
127
|
+
return `${packageName}@${formatVersion(version)}`;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Handles version upgrades between old and new versions.
|
|
131
|
+
* This function is called when the data directory was created with a different version.
|
|
132
|
+
*
|
|
133
|
+
* @param oldVersion - The version that created the data directory
|
|
134
|
+
* @param newVersion - The current package version
|
|
135
|
+
* @throws {DataDirVersionError} If the versions are incompatible
|
|
136
|
+
*/
|
|
137
|
+
export function upgradeVersion(oldVersion, newVersion) {
|
|
138
|
+
console.log(`[world-local] Upgrading from version ${formatVersion(oldVersion)} to ${formatVersion(newVersion)}`);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Ensures the data directory exists and is writable.
|
|
142
|
+
* Creates the directory if it doesn't exist.
|
|
143
|
+
*
|
|
144
|
+
* @param dataDir - The path to the data directory
|
|
145
|
+
* @throws {DataDirAccessError} If the directory cannot be created or accessed
|
|
146
|
+
*/
|
|
147
|
+
export async function ensureDataDir(dataDir) {
|
|
148
|
+
const absolutePath = path.resolve(dataDir);
|
|
149
|
+
// Try to create the directory if it doesn't exist
|
|
150
|
+
try {
|
|
151
|
+
await mkdir(absolutePath, { recursive: true });
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
const nodeError = error;
|
|
155
|
+
// EEXIST is fine - directory already exists
|
|
156
|
+
if (nodeError.code !== 'EEXIST') {
|
|
157
|
+
throw new DataDirAccessError(`Failed to create data directory "${absolutePath}": ${nodeError.message}`, absolutePath, nodeError.code);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Verify the directory is accessible (readable)
|
|
161
|
+
try {
|
|
162
|
+
await access(absolutePath, constants.R_OK);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
const nodeError = error;
|
|
166
|
+
throw new DataDirAccessError(`Data directory "${absolutePath}" is not readable: ${nodeError.message}`, absolutePath, nodeError.code);
|
|
167
|
+
}
|
|
168
|
+
// Verify the directory is writable by attempting to write a temp file
|
|
169
|
+
const testFile = path.join(absolutePath, `.workflow-write-test-${Date.now()}`);
|
|
170
|
+
try {
|
|
171
|
+
await writeFile(testFile, '');
|
|
172
|
+
await unlink(testFile);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
const nodeError = error;
|
|
176
|
+
throw new DataDirAccessError(`Data directory "${absolutePath}" is not writable: ${nodeError.message}`, absolutePath, nodeError.code);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Reads the version from the data directory's version file.
|
|
181
|
+
*
|
|
182
|
+
* @param dataDir - Path to the data directory
|
|
183
|
+
* @returns The parsed version info, or null if the file doesn't exist
|
|
184
|
+
*/
|
|
185
|
+
async function readVersionFile(dataDir) {
|
|
186
|
+
const versionFilePath = path.join(path.resolve(dataDir), VERSION_FILENAME);
|
|
187
|
+
try {
|
|
188
|
+
const content = await readFile(versionFilePath, 'utf-8');
|
|
189
|
+
return parseVersionFile(content);
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
const nodeError = error;
|
|
193
|
+
if (nodeError.code === 'ENOENT') {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Writes the current version to the data directory's version file.
|
|
201
|
+
*
|
|
202
|
+
* @param dataDir - Path to the data directory
|
|
203
|
+
* @param version - The version to write
|
|
204
|
+
*/
|
|
205
|
+
async function writeVersionFile(dataDir, version) {
|
|
206
|
+
const versionFilePath = path.join(path.resolve(dataDir), VERSION_FILENAME);
|
|
207
|
+
const packageInfo = await getPackageInfo();
|
|
208
|
+
const content = formatVersionFile(packageInfo.name, version);
|
|
209
|
+
await writeFile(versionFilePath, content);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Gets the suggested downgrade version based on the old version.
|
|
213
|
+
* If a specific version is suggested in the error, use that.
|
|
214
|
+
* Otherwise, suggest the previous minor version if patch is 0,
|
|
215
|
+
* or previous major version if minor is also 0.
|
|
216
|
+
*/
|
|
217
|
+
function getSuggestedDowngradeVersion(oldVersion, suggestedVersion) {
|
|
218
|
+
if (suggestedVersion) {
|
|
219
|
+
return suggestedVersion;
|
|
220
|
+
}
|
|
221
|
+
// Suggest the old version as the downgrade target
|
|
222
|
+
return formatVersion(oldVersion);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Initializes the data directory, ensuring it exists, is accessible,
|
|
226
|
+
* and handles version compatibility.
|
|
227
|
+
*
|
|
228
|
+
* @param dataDir - The path to the data directory
|
|
229
|
+
* @throws {DataDirAccessError} If the directory cannot be created or accessed
|
|
230
|
+
*/
|
|
231
|
+
export async function initDataDir(dataDir) {
|
|
232
|
+
// First ensure the directory exists and is accessible
|
|
233
|
+
await ensureDataDir(dataDir);
|
|
234
|
+
const packageInfo = await getPackageInfo();
|
|
235
|
+
const currentVersion = parseVersion(packageInfo.version);
|
|
236
|
+
// Read existing version file
|
|
237
|
+
const existingVersionInfo = await readVersionFile(dataDir);
|
|
238
|
+
if (existingVersionInfo === null) {
|
|
239
|
+
// New data directory - write the current version
|
|
240
|
+
await writeVersionFile(dataDir, currentVersion);
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const { version: oldVersion } = existingVersionInfo;
|
|
244
|
+
// Check if versions are the same (no upgrade needed)
|
|
245
|
+
if (formatVersion(oldVersion) === formatVersion(currentVersion)) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
// Attempt upgrade
|
|
249
|
+
try {
|
|
250
|
+
upgradeVersion(oldVersion, currentVersion);
|
|
251
|
+
// Upgrade succeeded - write the new version
|
|
252
|
+
await writeVersionFile(dataDir, currentVersion);
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
const suggestedVersion = error instanceof DataDirVersionError ? error.suggestedVersion : undefined;
|
|
256
|
+
const downgradeTarget = getSuggestedDowngradeVersion(oldVersion, suggestedVersion);
|
|
257
|
+
console.error(`[world-local] Failed to upgrade data directory from version ${formatVersion(oldVersion)} to ${formatVersion(currentVersion)}:`, error instanceof Error ? error.message : error);
|
|
258
|
+
console.error(`[world-local] Data is not compatible with the current version. ` +
|
|
259
|
+
`Please downgrade to ${packageInfo.name}@${downgradeTarget}`);
|
|
260
|
+
throw error;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,uDAAuD;AACvD,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAO7C,IAAI,iBAAiB,GAAuB,IAAI,CAAC;AAEjD;;;GAGG;AACH,SAAS,YAAY;IACnB,qEAAqE;IACrE,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EACvC,OAAO,CACR,CAAC;YACF,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;YACvD,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,iBAAiB,GAAG;QAClB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,SAAS;KACnB,CAAC;IACF,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,qEAAqE;AACrE,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAavC;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,OAAO,CAAS;IAChB,IAAI,CAAU;IAEvB,YAAY,OAAe,EAAE,OAAe,EAAE,IAAa;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,UAAU,CAAgB;IAC1B,UAAU,CAAgB;IAC1B,gBAAgB,CAAU;IAEnC,YACE,OAAe,EACf,UAAyB,EACzB,UAAyB,EACzB,gBAAyB;QAEzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,oDAAoD;IACpD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAErE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,aAAa,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QACpB,GAAG,EAAE,aAAa;KACnB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAClE,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAI9C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE7C,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAEzD,OAAO;QACL,WAAW;QACX,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC;KACrC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,OAAsB;IAEtB,OAAO,GAAG,WAAW,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,UAAyB,EACzB,UAAyB;IAEzB,OAAO,CAAC,GAAG,CACT,wCAAwC,aAAa,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,UAAU,CAAC,EAAE,CACpG,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3C,kDAAkD;IAClD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,KAA8B,CAAC;QACjD,4CAA4C;QAC5C,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,kBAAkB,CAC1B,oCAAoC,YAAY,MAAM,SAAS,CAAC,OAAO,EAAE,EACzE,YAAY,EACZ,SAAS,CAAC,IAAI,CACf,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,KAA8B,CAAC;QACjD,MAAM,IAAI,kBAAkB,CAC1B,mBAAmB,YAAY,sBAAsB,SAAS,CAAC,OAAO,EAAE,EACxE,YAAY,EACZ,SAAS,CAAC,IAAI,CACf,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,YAAY,EACZ,wBAAwB,IAAI,CAAC,GAAG,EAAE,EAAE,CACrC,CAAC;IACF,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9B,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,KAA8B,CAAC;QACjD,MAAM,IAAI,kBAAkB,CAC1B,mBAAmB,YAAY,sBAAsB,SAAS,CAAC,OAAO,EAAE,EACxE,YAAY,EACZ,SAAS,CAAC,IAAI,CACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,eAAe,CAAC,OAAe;IAI5C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAE3E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,KAA8B,CAAC;QACjD,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAC7B,OAAe,EACf,OAAsB;IAEtB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAS,4BAA4B,CACnC,UAAyB,EACzB,gBAAyB;IAEzB,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAClD,OAAO,aAAa,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,sDAAsD;IACtD,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAE7B,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;IAC3C,MAAM,cAAc,GAAG,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzD,6BAA6B;IAC7B,MAAM,mBAAmB,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE3D,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACjC,iDAAiD;QACjD,MAAM,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC;IAEpD,qDAAqD;IACrD,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;QAChE,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC;QACH,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC3C,4CAA4C;QAC5C,MAAM,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,gBAAgB,GACpB,KAAK,YAAY,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5E,MAAM,eAAe,GAAG,4BAA4B,CAClD,UAAU,EACV,gBAAgB,CACjB,CAAC;QAEF,OAAO,CAAC,KAAK,CACX,+DAA+D,aAAa,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,cAAc,CAAC,GAAG,EAC/H,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,OAAO,CAAC,KAAK,CACX,iEAAiE;YAC/D,uBAAuB,WAAW,CAAC,IAAI,IAAI,eAAe,EAAE,CAC/D,CAAC;QAEF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/queue.d.ts
CHANGED
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":"AAEA,OAAO,EAAa,KAAK,KAAK,EAAkB,MAAM,iBAAiB,CAAC;AAKxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAkC1C,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAwL1D"}
|
package/dist/queue.js
CHANGED
|
@@ -1,21 +1,40 @@
|
|
|
1
1
|
import { setTimeout } from 'node:timers/promises';
|
|
2
2
|
import { JsonTransport } from '@vercel/queue';
|
|
3
|
-
import { getPort } from '@workflow/utils/get-port';
|
|
4
3
|
import { MessageId, ValidQueueName } from '@workflow/world';
|
|
4
|
+
import { Sema } from 'async-sema';
|
|
5
5
|
import { monotonicFactory } from 'ulid';
|
|
6
6
|
import { Agent } from 'undici';
|
|
7
7
|
import z from 'zod';
|
|
8
|
+
import { resolveBaseUrl } from './config.js';
|
|
9
|
+
import { getPackageInfo } from './init.js';
|
|
8
10
|
// For local queue, there is no technical limit on the message visibility lifespan,
|
|
9
11
|
// but the environment variable can be used for testing purposes to set a max visibility limit.
|
|
10
12
|
const LOCAL_QUEUE_MAX_VISIBILITY = parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY ?? '0', 10) ||
|
|
11
13
|
Infinity;
|
|
12
|
-
//
|
|
14
|
+
// Maximum safe delay for setTimeout in Node.js (2^31 - 1 milliseconds ≈ 24.85 days)
|
|
15
|
+
// Larger values cause "TimeoutOverflowWarning: X does not fit into a 32-bit signed integer"
|
|
16
|
+
// When the clamped timeout fires, the handler will recalculate remaining time from
|
|
17
|
+
// persistent state and return another timeoutSeconds if needed.
|
|
18
|
+
const MAX_SAFE_TIMEOUT_MS = 2147483647;
|
|
19
|
+
// The local workers share the same Node.js process and event loop,
|
|
20
|
+
// so we need to limit concurrency to avoid overwhelming the system.
|
|
21
|
+
const DEFAULT_CONCURRENCY_LIMIT = 1000;
|
|
22
|
+
const WORKFLOW_LOCAL_QUEUE_CONCURRENCY = parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY ?? '0', 10) ||
|
|
23
|
+
DEFAULT_CONCURRENCY_LIMIT;
|
|
24
|
+
// Create a custom agent optimized for high-concurrency local workflows:
|
|
25
|
+
// - headersTimeout: 0 allows long-running steps
|
|
26
|
+
// - connections: 1000 allows many parallel connections to the same host
|
|
27
|
+
// - pipelining: 1 (default) for HTTP/1.1 compatibility
|
|
28
|
+
// - keepAliveTimeout: 30s keeps connections warm for rapid step execution
|
|
13
29
|
const httpAgent = new Agent({
|
|
14
30
|
headersTimeout: 0,
|
|
31
|
+
connections: 1000,
|
|
32
|
+
keepAliveTimeout: 30_000,
|
|
15
33
|
});
|
|
16
|
-
export function createQueue(
|
|
34
|
+
export function createQueue(config) {
|
|
17
35
|
const transport = new JsonTransport();
|
|
18
36
|
const generateId = monotonicFactory();
|
|
37
|
+
const semaphore = new Sema(WORKFLOW_LOCAL_QUEUE_CONCURRENCY);
|
|
19
38
|
/**
|
|
20
39
|
* holds inflight messages by idempotency key to ensure
|
|
21
40
|
* that we don't queue the same message multiple times
|
|
@@ -49,45 +68,68 @@ export function createQueue(port) {
|
|
|
49
68
|
});
|
|
50
69
|
}
|
|
51
70
|
(async () => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
'
|
|
64
|
-
'
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
defaultRetriesLeft++;
|
|
77
|
-
continue;
|
|
71
|
+
const token = semaphore.tryAcquire();
|
|
72
|
+
if (!token) {
|
|
73
|
+
console.warn(`[world-local]: concurrency limit (${WORKFLOW_LOCAL_QUEUE_CONCURRENCY}) reached, waiting for queue to free up`);
|
|
74
|
+
await semaphore.acquire();
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
let defaultRetriesLeft = 3;
|
|
78
|
+
const baseUrl = await resolveBaseUrl(config);
|
|
79
|
+
for (let attempt = 0; defaultRetriesLeft > 0; attempt++) {
|
|
80
|
+
defaultRetriesLeft--;
|
|
81
|
+
const response = await fetch(`${baseUrl}/.well-known/workflow/v1/${pathname}`, {
|
|
82
|
+
method: 'POST',
|
|
83
|
+
duplex: 'half',
|
|
84
|
+
dispatcher: httpAgent,
|
|
85
|
+
headers: {
|
|
86
|
+
'content-type': 'application/json',
|
|
87
|
+
'x-vqs-queue-name': queueName,
|
|
88
|
+
'x-vqs-message-id': messageId,
|
|
89
|
+
'x-vqs-message-attempt': String(attempt + 1),
|
|
90
|
+
},
|
|
91
|
+
body,
|
|
92
|
+
});
|
|
93
|
+
if (response.ok) {
|
|
94
|
+
return;
|
|
78
95
|
}
|
|
79
|
-
|
|
96
|
+
const text = await response.text();
|
|
97
|
+
if (response.status === 503) {
|
|
98
|
+
try {
|
|
99
|
+
const timeoutSeconds = Number(JSON.parse(text).timeoutSeconds);
|
|
100
|
+
// Clamp to MAX_SAFE_TIMEOUT_MS to avoid Node.js setTimeout overflow warning.
|
|
101
|
+
// When this fires early, the handler recalculates remaining time from
|
|
102
|
+
// persistent state and returns another timeoutSeconds if needed.
|
|
103
|
+
const timeoutMs = Math.min(timeoutSeconds * 1000, MAX_SAFE_TIMEOUT_MS);
|
|
104
|
+
await setTimeout(timeoutMs);
|
|
105
|
+
defaultRetriesLeft++;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
catch { }
|
|
109
|
+
}
|
|
110
|
+
console.error(`[local world] Failed to queue message`, {
|
|
111
|
+
queueName,
|
|
112
|
+
text,
|
|
113
|
+
status: response.status,
|
|
114
|
+
headers: Object.fromEntries(response.headers.entries()),
|
|
115
|
+
body: body.toString(),
|
|
116
|
+
});
|
|
80
117
|
}
|
|
81
|
-
console.error(`[
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
118
|
+
console.error(`[local world] Reached max retries of local world queue implementation`);
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
semaphore.release();
|
|
122
|
+
}
|
|
123
|
+
})()
|
|
124
|
+
.catch((err) => {
|
|
125
|
+
// Silently ignore client disconnect errors (e.g., browser refresh during streaming)
|
|
126
|
+
// These are expected and should not cause unhandled rejection warnings
|
|
127
|
+
const isAbortError = err?.name === 'AbortError' || err?.name === 'ResponseAborted';
|
|
128
|
+
if (!isAbortError) {
|
|
129
|
+
console.error('[local world] Queue operation failed:', err);
|
|
88
130
|
}
|
|
89
|
-
|
|
90
|
-
|
|
131
|
+
})
|
|
132
|
+
.finally(() => {
|
|
91
133
|
for (const fn of cleanup) {
|
|
92
134
|
fn();
|
|
93
135
|
}
|
|
@@ -133,7 +175,8 @@ export function createQueue(port) {
|
|
|
133
175
|
};
|
|
134
176
|
};
|
|
135
177
|
const getDeploymentId = async () => {
|
|
136
|
-
|
|
178
|
+
const packageInfo = await getPackageInfo();
|
|
179
|
+
return `dpl_local@${packageInfo.version}`;
|
|
137
180
|
};
|
|
138
181
|
return { queue, createQueueHandler, getDeploymentId };
|
|
139
182
|
}
|
package/dist/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Storage } from '@workflow/world';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the events storage implementation using the filesystem.
|
|
4
|
+
* Implements the Storage['events'] interface with create, list, and listByCorrelationId operations.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createEventsStorage(basedir: string): Storage['events'];
|
|
7
|
+
//# sourceMappingURL=events-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-storage.d.ts","sourceRoot":"","sources":["../../src/storage/events-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAMV,OAAO,EAER,MAAM,iBAAiB,CAAC;AAuBzB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+nBtE"}
|