@workflow/world-local 4.0.1-beta.2 → 4.0.1-beta.21

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/init.d.ts ADDED
@@ -0,0 +1,82 @@
1
+ /** Package name for version tracking */
2
+ export declare const PACKAGE_NAME = "@workflow/world-local";
3
+ /** Current package version - imported at build time */
4
+ export declare const PACKAGE_VERSION = "4.0.1-beta.20";
5
+ /**
6
+ * Represents a parsed semantic version with optional prerelease tag.
7
+ */
8
+ export interface ParsedVersion {
9
+ major: number;
10
+ minor: number;
11
+ patch: number;
12
+ prerelease?: string;
13
+ raw: string;
14
+ }
15
+ /**
16
+ * Error thrown when the data directory cannot be accessed or created.
17
+ */
18
+ export declare class DataDirAccessError extends Error {
19
+ readonly dataDir: string;
20
+ readonly code?: string;
21
+ constructor(message: string, dataDir: string, code?: string);
22
+ }
23
+ /**
24
+ * Error thrown when data directory version is incompatible.
25
+ */
26
+ export declare class DataDirVersionError extends Error {
27
+ readonly oldVersion: ParsedVersion;
28
+ readonly newVersion: ParsedVersion;
29
+ readonly suggestedVersion?: string;
30
+ constructor(message: string, oldVersion: ParsedVersion, newVersion: ParsedVersion, suggestedVersion?: string);
31
+ }
32
+ /**
33
+ * Parses a version string into its components.
34
+ *
35
+ * @param versionString - Version string like "4.0.1" or "4.0.1-beta.20"
36
+ * @returns Parsed version object with major, minor, patch, and optional prerelease
37
+ */
38
+ export declare function parseVersion(versionString: string): ParsedVersion;
39
+ /**
40
+ * Formats a parsed version back to a string.
41
+ */
42
+ export declare function formatVersion(version: ParsedVersion): string;
43
+ /**
44
+ * Parses the version file content to extract package name and version.
45
+ *
46
+ * @param content - Content like "@workflow/world-local@4.0.1-beta.20"
47
+ * @returns Object with packageName and version
48
+ */
49
+ export declare function parseVersionFile(content: string): {
50
+ packageName: string;
51
+ version: ParsedVersion;
52
+ };
53
+ /**
54
+ * Formats the version file content.
55
+ */
56
+ export declare function formatVersionFile(packageName: string, version: ParsedVersion): string;
57
+ /**
58
+ * Handles version upgrades between old and new versions.
59
+ * This function is called when the data directory was created with a different version.
60
+ *
61
+ * @param oldVersion - The version that created the data directory
62
+ * @param newVersion - The current package version
63
+ * @throws {DataDirVersionError} If the versions are incompatible
64
+ */
65
+ export declare function upgradeVersion(oldVersion: ParsedVersion, newVersion: ParsedVersion): void;
66
+ /**
67
+ * Ensures the data directory exists and is writable.
68
+ * Creates the directory if it doesn't exist.
69
+ *
70
+ * @param dataDir - The path to the data directory
71
+ * @throws {DataDirAccessError} If the directory cannot be created or accessed
72
+ */
73
+ export declare function ensureDataDir(dataDir: string): void;
74
+ /**
75
+ * Initializes the data directory, ensuring it exists, is accessible,
76
+ * and handles version compatibility.
77
+ *
78
+ * @param dataDir - The path to the data directory
79
+ * @throws {DataDirAccessError} If the directory cannot be created or accessed
80
+ */
81
+ export declare function initDataDir(dataDir: string): void;
82
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAUA,wCAAwC;AACxC,eAAO,MAAM,YAAY,0BAA0B,CAAC;AAEpD,uDAAuD;AACvD,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAK/C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAM5D;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAGjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,UAAU,EAAE,aAAa,EACzB,gBAAgB,CAAC,EAAE,MAAM;CAQ5B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,CAejE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAG5D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;CACxB,CAeA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,GACrB,MAAM,CAER;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,aAAa,EACzB,UAAU,EAAE,aAAa,GACxB,IAAI,CAKN;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CA8CnD;AAwDD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CA+CjD"}
package/dist/init.js ADDED
@@ -0,0 +1,222 @@
1
+ import { accessSync, constants, mkdirSync, readFileSync, unlinkSync, writeFileSync, } from 'node:fs';
2
+ import path from 'node:path';
3
+ /** Package name for version tracking */
4
+ export const PACKAGE_NAME = '@workflow/world-local';
5
+ /** Current package version - imported at build time */
6
+ export const PACKAGE_VERSION = '4.0.1-beta.20';
7
+ /** Filename for storing version information in the data directory */
8
+ const VERSION_FILENAME = 'version.txt';
9
+ /**
10
+ * Error thrown when the data directory cannot be accessed or created.
11
+ */
12
+ export class DataDirAccessError extends Error {
13
+ dataDir;
14
+ code;
15
+ constructor(message, dataDir, code) {
16
+ super(message);
17
+ this.name = 'DataDirAccessError';
18
+ this.dataDir = dataDir;
19
+ this.code = code;
20
+ }
21
+ }
22
+ /**
23
+ * Error thrown when data directory version is incompatible.
24
+ */
25
+ export class DataDirVersionError extends Error {
26
+ oldVersion;
27
+ newVersion;
28
+ suggestedVersion;
29
+ constructor(message, oldVersion, newVersion, suggestedVersion) {
30
+ super(message);
31
+ this.name = 'DataDirVersionError';
32
+ this.oldVersion = oldVersion;
33
+ this.newVersion = newVersion;
34
+ this.suggestedVersion = suggestedVersion;
35
+ }
36
+ }
37
+ /**
38
+ * Parses a version string into its components.
39
+ *
40
+ * @param versionString - Version string like "4.0.1" or "4.0.1-beta.20"
41
+ * @returns Parsed version object with major, minor, patch, and optional prerelease
42
+ */
43
+ export function parseVersion(versionString) {
44
+ // Match: major.minor.patch with optional prerelease
45
+ const match = versionString.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);
46
+ if (!match) {
47
+ throw new Error(`Invalid version string: "${versionString}"`);
48
+ }
49
+ return {
50
+ major: parseInt(match[1], 10),
51
+ minor: parseInt(match[2], 10),
52
+ patch: parseInt(match[3], 10),
53
+ prerelease: match[4],
54
+ raw: versionString,
55
+ };
56
+ }
57
+ /**
58
+ * Formats a parsed version back to a string.
59
+ */
60
+ export function formatVersion(version) {
61
+ const base = `${version.major}.${version.minor}.${version.patch}`;
62
+ return version.prerelease ? `${base}-${version.prerelease}` : base;
63
+ }
64
+ /**
65
+ * Parses the version file content to extract package name and version.
66
+ *
67
+ * @param content - Content like "@workflow/world-local@4.0.1-beta.20"
68
+ * @returns Object with packageName and version
69
+ */
70
+ export function parseVersionFile(content) {
71
+ const trimmed = content.trim();
72
+ const lastAtIndex = trimmed.lastIndexOf('@');
73
+ if (lastAtIndex <= 0) {
74
+ throw new Error(`Invalid version file content: "${content}"`);
75
+ }
76
+ const packageName = trimmed.substring(0, lastAtIndex);
77
+ const versionString = trimmed.substring(lastAtIndex + 1);
78
+ return {
79
+ packageName,
80
+ version: parseVersion(versionString),
81
+ };
82
+ }
83
+ /**
84
+ * Formats the version file content.
85
+ */
86
+ export function formatVersionFile(packageName, version) {
87
+ return `${packageName}@${formatVersion(version)}`;
88
+ }
89
+ /**
90
+ * Handles version upgrades between old and new versions.
91
+ * This function is called when the data directory was created with a different version.
92
+ *
93
+ * @param oldVersion - The version that created the data directory
94
+ * @param newVersion - The current package version
95
+ * @throws {DataDirVersionError} If the versions are incompatible
96
+ */
97
+ export function upgradeVersion(oldVersion, newVersion) {
98
+ console.log(`[world-local] Upgrading from version ${formatVersion(oldVersion)} to ${formatVersion(newVersion)}`);
99
+ // Future: Add migration logic here when needed
100
+ }
101
+ /**
102
+ * Ensures the data directory exists and is writable.
103
+ * Creates the directory if it doesn't exist.
104
+ *
105
+ * @param dataDir - The path to the data directory
106
+ * @throws {DataDirAccessError} If the directory cannot be created or accessed
107
+ */
108
+ export function ensureDataDir(dataDir) {
109
+ const absolutePath = path.resolve(dataDir);
110
+ // Try to create the directory if it doesn't exist
111
+ try {
112
+ mkdirSync(absolutePath, { recursive: true });
113
+ }
114
+ catch (error) {
115
+ const nodeError = error;
116
+ // EEXIST is fine - directory already exists
117
+ if (nodeError.code !== 'EEXIST') {
118
+ throw new DataDirAccessError(`Failed to create data directory "${absolutePath}": ${nodeError.message}`, absolutePath, nodeError.code);
119
+ }
120
+ }
121
+ // Verify the directory is accessible (readable)
122
+ try {
123
+ accessSync(absolutePath, constants.R_OK);
124
+ }
125
+ catch (error) {
126
+ const nodeError = error;
127
+ throw new DataDirAccessError(`Data directory "${absolutePath}" is not readable: ${nodeError.message}`, absolutePath, nodeError.code);
128
+ }
129
+ // Verify the directory is writable by attempting to write a temp file
130
+ const testFile = path.join(absolutePath, `.workflow-write-test-${Date.now()}`);
131
+ try {
132
+ writeFileSync(testFile, '');
133
+ unlinkSync(testFile);
134
+ }
135
+ catch (error) {
136
+ const nodeError = error;
137
+ throw new DataDirAccessError(`Data directory "${absolutePath}" is not writable: ${nodeError.message}`, absolutePath, nodeError.code);
138
+ }
139
+ }
140
+ /**
141
+ * Reads the version from the data directory's version file.
142
+ *
143
+ * @param dataDir - Path to the data directory
144
+ * @returns The parsed version info, or null if the file doesn't exist
145
+ */
146
+ function readVersionFile(dataDir) {
147
+ const versionFilePath = path.join(path.resolve(dataDir), VERSION_FILENAME);
148
+ try {
149
+ const content = readFileSync(versionFilePath, 'utf-8');
150
+ return parseVersionFile(content);
151
+ }
152
+ catch (error) {
153
+ const nodeError = error;
154
+ if (nodeError.code === 'ENOENT') {
155
+ return null;
156
+ }
157
+ throw error;
158
+ }
159
+ }
160
+ /**
161
+ * Writes the current version to the data directory's version file.
162
+ *
163
+ * @param dataDir - Path to the data directory
164
+ * @param version - The version to write
165
+ */
166
+ function writeVersionFile(dataDir, version) {
167
+ const versionFilePath = path.join(path.resolve(dataDir), VERSION_FILENAME);
168
+ const content = formatVersionFile(PACKAGE_NAME, version);
169
+ writeFileSync(versionFilePath, content);
170
+ }
171
+ /**
172
+ * Gets the suggested downgrade version based on the old version.
173
+ * If a specific version is suggested in the error, use that.
174
+ * Otherwise, suggest the previous minor version if patch is 0,
175
+ * or previous major version if minor is also 0.
176
+ */
177
+ function getSuggestedDowngradeVersion(oldVersion, suggestedVersion) {
178
+ if (suggestedVersion) {
179
+ return suggestedVersion;
180
+ }
181
+ // Suggest the old version as the downgrade target
182
+ return formatVersion(oldVersion);
183
+ }
184
+ /**
185
+ * Initializes the data directory, ensuring it exists, is accessible,
186
+ * and handles version compatibility.
187
+ *
188
+ * @param dataDir - The path to the data directory
189
+ * @throws {DataDirAccessError} If the directory cannot be created or accessed
190
+ */
191
+ export function initDataDir(dataDir) {
192
+ // First ensure the directory exists and is accessible
193
+ ensureDataDir(dataDir);
194
+ const currentVersion = parseVersion(PACKAGE_VERSION);
195
+ // Read existing version file
196
+ const existingVersionInfo = readVersionFile(dataDir);
197
+ if (existingVersionInfo === null) {
198
+ // New data directory - write the current version
199
+ writeVersionFile(dataDir, currentVersion);
200
+ return;
201
+ }
202
+ const { version: oldVersion } = existingVersionInfo;
203
+ // Check if versions are the same (no upgrade needed)
204
+ if (formatVersion(oldVersion) === formatVersion(currentVersion)) {
205
+ return;
206
+ }
207
+ // Attempt upgrade
208
+ try {
209
+ upgradeVersion(oldVersion, currentVersion);
210
+ // Upgrade succeeded - write the new version
211
+ writeVersionFile(dataDir, currentVersion);
212
+ }
213
+ catch (error) {
214
+ const suggestedVersion = error instanceof DataDirVersionError ? error.suggestedVersion : undefined;
215
+ const downgradeTarget = getSuggestedDowngradeVersion(oldVersion, suggestedVersion);
216
+ console.error(`[world-local] Failed to upgrade data directory from version ${formatVersion(oldVersion)} to ${formatVersion(currentVersion)}:`, error instanceof Error ? error.message : error);
217
+ console.error(`[world-local] Data is not compatible with the current version. ` +
218
+ `Please downgrade to ${PACKAGE_NAME}@${downgradeTarget}`);
219
+ throw error;
220
+ }
221
+ }
222
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
package/dist/queue.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import { type Queue } from '@workflow/world';
2
- export declare function createQueue(port?: number): Queue;
2
+ import type { Config } from './config.js';
3
+ export declare function createQueue(config: Partial<Config>): Queue;
3
4
  //# sourceMappingURL=queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,KAAK,EAAkB,MAAM,iBAAiB,CAAC;AAIxE,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CA4IhD"}
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;AA4B1C,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAgL1D"}
package/dist/queue.js CHANGED
@@ -1,11 +1,35 @@
1
1
  import { setTimeout } from 'node:timers/promises';
2
2
  import { JsonTransport } from '@vercel/queue';
3
3
  import { MessageId, ValidQueueName } from '@workflow/world';
4
+ import { Sema } from 'async-sema';
4
5
  import { monotonicFactory } from 'ulid';
6
+ import { Agent } from 'undici';
5
7
  import z from 'zod';
6
- export function createQueue(port) {
8
+ import { resolveBaseUrl } from './config.js';
9
+ import { PACKAGE_VERSION } from './init.js';
10
+ // For local queue, there is no technical limit on the message visibility lifespan,
11
+ // but the environment variable can be used for testing purposes to set a max visibility limit.
12
+ const LOCAL_QUEUE_MAX_VISIBILITY = parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY ?? '0', 10) ||
13
+ Infinity;
14
+ // The local workers share the same Node.js process and event loop,
15
+ // so we need to limit concurrency to avoid overwhelming the system.
16
+ const DEFAULT_CONCURRENCY_LIMIT = 100;
17
+ const WORKFLOW_LOCAL_QUEUE_CONCURRENCY = parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY ?? '0', 10) ||
18
+ DEFAULT_CONCURRENCY_LIMIT;
19
+ // Create a custom agent optimized for high-concurrency local workflows:
20
+ // - headersTimeout: 0 allows long-running steps
21
+ // - connections: 100 allows many parallel connections to the same host
22
+ // - pipelining: 1 (default) for HTTP/1.1 compatibility
23
+ // - keepAliveTimeout: 30s keeps connections warm for rapid step execution
24
+ const httpAgent = new Agent({
25
+ headersTimeout: 0,
26
+ connections: 100,
27
+ keepAliveTimeout: 30_000,
28
+ });
29
+ export function createQueue(config) {
7
30
  const transport = new JsonTransport();
8
31
  const generateId = monotonicFactory();
32
+ const semaphore = new Sema(WORKFLOW_LOCAL_QUEUE_CONCURRENCY);
9
33
  /**
10
34
  * holds inflight messages by idempotency key to ensure
11
35
  * that we don't queue the same message multiple times
@@ -39,42 +63,64 @@ export function createQueue(port) {
39
63
  });
40
64
  }
41
65
  (async () => {
42
- let defaultRetriesLeft = 3;
43
- for (let attempt = 0; defaultRetriesLeft > 0; attempt++) {
44
- defaultRetriesLeft--;
45
- const response = await fetch(`http://localhost:${port}/.well-known/workflow/v1/${pathname}`, {
46
- method: 'POST',
47
- duplex: 'half',
48
- headers: {
49
- 'x-vqs-queue-name': queueName,
50
- 'x-vqs-message-id': messageId,
51
- 'x-vqs-message-attempt': String(attempt + 1),
52
- },
53
- body,
54
- });
55
- if (response.ok) {
56
- return;
57
- }
58
- const text = await response.text();
59
- if (response.status === 503) {
60
- try {
61
- const retryIn = Number(JSON.parse(text).retryIn);
62
- await setTimeout(retryIn * 1000);
63
- defaultRetriesLeft++;
64
- continue;
66
+ const token = semaphore.tryAcquire();
67
+ if (!token) {
68
+ console.warn(`[world-local]: concurrency limit (${WORKFLOW_LOCAL_QUEUE_CONCURRENCY}) reached, waiting for queue to free up`);
69
+ await semaphore.acquire();
70
+ }
71
+ try {
72
+ let defaultRetriesLeft = 3;
73
+ const baseUrl = await resolveBaseUrl(config);
74
+ for (let attempt = 0; defaultRetriesLeft > 0; attempt++) {
75
+ defaultRetriesLeft--;
76
+ const response = await fetch(`${baseUrl}/.well-known/workflow/v1/${pathname}`, {
77
+ method: 'POST',
78
+ duplex: 'half',
79
+ dispatcher: httpAgent,
80
+ headers: {
81
+ 'content-type': 'application/json',
82
+ 'x-vqs-queue-name': queueName,
83
+ 'x-vqs-message-id': messageId,
84
+ 'x-vqs-message-attempt': String(attempt + 1),
85
+ },
86
+ body,
87
+ });
88
+ if (response.ok) {
89
+ return;
90
+ }
91
+ const text = await response.text();
92
+ if (response.status === 503) {
93
+ try {
94
+ const timeoutSeconds = Number(JSON.parse(text).timeoutSeconds);
95
+ await setTimeout(timeoutSeconds * 1000);
96
+ defaultRetriesLeft++;
97
+ continue;
98
+ }
99
+ catch { }
65
100
  }
66
- catch { }
101
+ console.error(`[local world] Failed to queue message`, {
102
+ queueName,
103
+ text,
104
+ status: response.status,
105
+ headers: Object.fromEntries(response.headers.entries()),
106
+ body: body.toString(),
107
+ });
67
108
  }
68
- console.error(`[embedded world] Failed to queue message`, {
69
- queueName,
70
- text,
71
- status: response.status,
72
- headers: Object.fromEntries(response.headers.entries()),
73
- body: body.toString(),
74
- });
109
+ console.error(`[local world] Reached max retries of local world queue implementation`);
75
110
  }
76
- console.error(`[embedded world] Reached max retries of embedded world queue implementation`);
77
- })().finally(() => {
111
+ finally {
112
+ semaphore.release();
113
+ }
114
+ })()
115
+ .catch((err) => {
116
+ // Silently ignore client disconnect errors (e.g., browser refresh during streaming)
117
+ // These are expected and should not cause unhandled rejection warnings
118
+ const isAbortError = err?.name === 'AbortError' || err?.name === 'ResponseAborted';
119
+ if (!isAbortError) {
120
+ console.error('[local world] Queue operation failed:', err);
121
+ }
122
+ })
123
+ .finally(() => {
78
124
  for (const fn of cleanup) {
79
125
  fn();
80
126
  }
@@ -90,7 +136,11 @@ export function createQueue(port) {
90
136
  return async (req) => {
91
137
  const headers = HeaderParser.safeParse(Object.fromEntries(req.headers));
92
138
  if (!headers.success || !req.body) {
93
- return Response.json({ error: 'Missing required headers' }, { status: 400 });
139
+ return Response.json({
140
+ error: !req.body
141
+ ? 'Missing request body'
142
+ : 'Missing required headers',
143
+ }, { status: 400 });
94
144
  }
95
145
  const queueName = headers.data['x-vqs-queue-name'];
96
146
  const messageId = headers.data['x-vqs-message-id'];
@@ -100,10 +150,13 @@ export function createQueue(port) {
100
150
  }
101
151
  const body = await new JsonTransport().deserialize(req.body);
102
152
  try {
103
- const response = await handler(body, { attempt, queueName, messageId });
104
- const retryIn = typeof response === 'undefined' ? null : response.timeoutSeconds;
105
- if (retryIn) {
106
- return Response.json({ retryIn }, { status: 503 });
153
+ const result = await handler(body, { attempt, queueName, messageId });
154
+ let timeoutSeconds = null;
155
+ if (typeof result?.timeoutSeconds === 'number') {
156
+ timeoutSeconds = Math.min(result.timeoutSeconds, LOCAL_QUEUE_MAX_VISIBILITY);
157
+ }
158
+ if (timeoutSeconds) {
159
+ return Response.json({ timeoutSeconds }, { status: 503 });
107
160
  }
108
161
  return Response.json({ ok: true });
109
162
  }
@@ -113,7 +166,7 @@ export function createQueue(port) {
113
166
  };
114
167
  };
115
168
  const getDeploymentId = async () => {
116
- return 'dpl_embedded';
169
+ return `dpl_local@${PACKAGE_VERSION}`;
117
170
  };
118
171
  return { queue, createQueueHandler, getDeploymentId };
119
172
  }
package/dist/queue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,OAAO,EAGb,MAAM,iBAAiB,CAAC;AAoFzB,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA8ZtD"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAWL,KAAK,OAAO,EAGb,MAAM,iBAAiB,CAAC;AA4NzB,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA+VtD"}