@meetploy/emulator 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,5 +5,6 @@ export interface BundlerOptions {
5
5
  entryPoint: string;
6
6
  config: PloyConfig;
7
7
  mockServiceUrl: string;
8
+ envVars?: Record<string, string>;
8
9
  }
9
10
  export declare function bundleWorker(options: BundlerOptions): Promise<string>;
@@ -49,7 +49,7 @@ const NODE_BUILTINS = [
49
49
  "worker_threads",
50
50
  "zlib",
51
51
  ];
52
- function generateWrapperCode(config, mockServiceUrl) {
52
+ function generateWrapperCode(config, mockServiceUrl, envVars) {
53
53
  const imports = [];
54
54
  const bindings = [];
55
55
  if (config.db) {
@@ -143,6 +143,14 @@ function generateWrapperCode(config, mockServiceUrl) {
143
143
  }
144
144
  }`
145
145
  : "";
146
+ const envVarsEntries = envVars && Object.keys(envVars).length > 0
147
+ ? Object.entries(envVars)
148
+ .map(([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)}`)
149
+ .join(",\n")
150
+ : "";
151
+ const envVarsCode = envVarsEntries
152
+ ? `\n injectedEnv.vars = {\n${envVarsEntries}\n };`
153
+ : "";
146
154
  return `${imports.join("\n")}
147
155
 
148
156
  const ployBindings = {
@@ -151,7 +159,7 @@ ${bindings.join("\n")}
151
159
 
152
160
  export default {
153
161
  async fetch(request, env, ctx) {
154
- const injectedEnv = { ...env, ...ployBindings };
162
+ const injectedEnv = { ...env, ...ployBindings };${envVarsCode}
155
163
  ${workflowHandlerCode}
156
164
  ${queueHandlerCode}
157
165
 
@@ -164,7 +172,7 @@ export default {
164
172
 
165
173
  async scheduled(event, env, ctx) {
166
174
  if (userWorker.scheduled) {
167
- const injectedEnv = { ...env, ...ployBindings };
175
+ const injectedEnv = { ...env, ...ployBindings };${envVarsCode}
168
176
  return userWorker.scheduled(event, injectedEnv, ctx);
169
177
  }
170
178
  }
@@ -219,8 +227,8 @@ function createRuntimePlugin(_config) {
219
227
  };
220
228
  }
221
229
  export async function bundleWorker(options) {
222
- const { projectDir, tempDir, entryPoint, config, mockServiceUrl } = options;
223
- const wrapperCode = generateWrapperCode(config, mockServiceUrl);
230
+ const { projectDir, tempDir, entryPoint, config, mockServiceUrl, envVars } = options;
231
+ const wrapperCode = generateWrapperCode(config, mockServiceUrl, envVars);
224
232
  const wrapperPath = join(tempDir, "wrapper.ts");
225
233
  writeFileSync(wrapperPath, wrapperCode);
226
234
  const bundlePath = join(tempDir, "worker.bundle.js");
@@ -1 +1 @@
1
- {"version":3,"file":"bundler.js","sourceRoot":"","sources":["../../src/bundler/bundler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bundler.js","sourceRoot":"","sources":["../../src/bundler/bundler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { PloyConfig } from "./ploy-config.js";
2
+ export declare function resolveEnvVars(projectDir: string, config: PloyConfig): Record<string, string>;
@@ -0,0 +1,9 @@
1
+ import { loadDotEnvSync, resolveEnvVars as sharedResolveEnvVars, } from "@meetploy/tools/cli";
2
+ export function resolveEnvVars(projectDir, config) {
3
+ if (!config.env) {
4
+ return {};
5
+ }
6
+ const dotEnv = loadDotEnvSync(projectDir);
7
+ return sharedResolveEnvVars(config.env, dotEnv, process.env);
8
+ }
9
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,cAAc,EACd,cAAc,IAAI,oBAAoB,GACtC,MAAM,qBAAqB,CAAC;AAS7B,MAAM,UAAU,cAAc,CAC7B,UAAkB,EAClB,MAAkB;IAElB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9D,CAAC"}
@@ -16,6 +16,7 @@ export declare class EmulatorServer {
16
16
  private workerdProcess;
17
17
  private fileWatcher;
18
18
  private queueProcessor;
19
+ private resolvedEnvVars;
19
20
  constructor(options?: EmulatorOptions);
20
21
  start(): Promise<void>;
21
22
  private bundle;
package/dist/emulator.js CHANGED
@@ -4,6 +4,7 @@ import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { bundleWorker } from "./bundler/bundler.js";
6
6
  import { createFileWatcher } from "./bundler/watcher.js";
7
+ import { resolveEnvVars } from "./config/env.js";
7
8
  import { readPloyConfig, getWorkerEntryPoint, } from "./config/ploy-config.js";
8
9
  import { writeWorkerdConfig } from "./config/workerd-config.js";
9
10
  import { startMockServer } from "./services/mock-server.js";
@@ -21,6 +22,7 @@ export class EmulatorServer {
21
22
  workerdProcess = null;
22
23
  fileWatcher = null;
23
24
  queueProcessor = null;
25
+ resolvedEnvVars = {};
24
26
  constructor(options = {}) {
25
27
  const port = options.port ?? 8787;
26
28
  this.options = {
@@ -38,6 +40,10 @@ export class EmulatorServer {
38
40
  try {
39
41
  this.config = readPloyConfig(this.projectDir, this.options.configPath);
40
42
  logger.debug(`Loaded config: ${JSON.stringify(this.config)}`, this.options.verbose);
43
+ this.resolvedEnvVars = resolveEnvVars(this.projectDir, this.config);
44
+ if (Object.keys(this.resolvedEnvVars).length > 0) {
45
+ logger.debug(`Resolved env vars: ${Object.keys(this.resolvedEnvVars).join(", ")}`, this.options.verbose);
46
+ }
41
47
  this.tempDir = ensureTempDir(this.projectDir);
42
48
  ensureDataDir(this.projectDir);
43
49
  logger.debug(`Temp dir: ${this.tempDir}`, this.options.verbose);
@@ -86,6 +92,9 @@ export class EmulatorServer {
86
92
  }
87
93
  logger.success(`Emulator running at http://${this.options.host}:${String(this.options.port)}`);
88
94
  logger.log(` Dashboard: http://${this.options.host}:${String(this.mockServer.port)}`);
95
+ if (Object.keys(this.resolvedEnvVars).length > 0) {
96
+ logger.log(` Env vars: ${Object.keys(this.resolvedEnvVars).join(", ")}`);
97
+ }
89
98
  if (this.config.db) {
90
99
  logger.log(` DB bindings: ${Object.keys(this.config.db).join(", ")}`);
91
100
  }
@@ -116,6 +125,7 @@ export class EmulatorServer {
116
125
  entryPoint,
117
126
  config: this.config,
118
127
  mockServiceUrl,
128
+ envVars: this.resolvedEnvVars,
119
129
  });
120
130
  }
121
131
  async startWorkerd(configPath) {
@@ -141,9 +151,7 @@ export class EmulatorServer {
141
151
  let stderrOutput = "";
142
152
  this.workerdProcess.stdout?.on("data", (data) => {
143
153
  const output = data.toString();
144
- if (this.options.verbose) {
145
- process.stdout.write(output);
146
- }
154
+ logger.log(`[workerd stdout] ${output.trim()}`);
147
155
  if (!started &&
148
156
  (output.includes("Listening") || output.includes("running"))) {
149
157
  started = true;
@@ -1 +1 @@
1
- {"version":3,"file":"emulator.js","sourceRoot":"","sources":["../src/emulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emulator.js","sourceRoot":"","sources":["../src/emulator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meetploy/emulator",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -1 +0,0 @@
1
- export declare const FS_RUNTIME_CODE = "\ninterface FileStoragePutOptions {\n contentType?: string;\n}\n\ninterface FileStorageListOptions {\n prefix?: string;\n limit?: number;\n}\n\ninterface FileStorageObject {\n body: string;\n contentType: string;\n size: number;\n}\n\ninterface FileStorageKey {\n key: string;\n size: number;\n contentType: string;\n}\n\ninterface FileStorageListResult {\n keys: FileStorageKey[];\n}\n\ninterface FileStorageBinding {\n put: (key: string, value: string, options?: FileStoragePutOptions) => Promise<void>;\n get: (key: string) => Promise<FileStorageObject | null>;\n delete: (key: string) => Promise<void>;\n list: (options?: FileStorageListOptions) => Promise<FileStorageListResult>;\n}\n\nexport function initializeFileStorage(fsName: string, serviceUrl: string): FileStorageBinding {\n return {\n async put(key: string, value: string, options?: FileStoragePutOptions): Promise<void> {\n const response = await fetch(serviceUrl + \"/fs/put\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n fsName,\n key,\n value,\n contentType: options?.contentType || \"application/octet-stream\",\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\"File storage put failed: \" + errorText);\n }\n },\n\n async get(key: string): Promise<FileStorageObject | null> {\n const response = await fetch(serviceUrl + \"/fs/get\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ fsName, key }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\"File storage get failed: \" + errorText);\n }\n\n const result = await response.json();\n if (result.found === false) {\n return null;\n }\n return {\n body: result.body,\n contentType: result.contentType,\n size: result.size,\n };\n },\n\n async delete(key: string): Promise<void> {\n const response = await fetch(serviceUrl + \"/fs/delete\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ fsName, key }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\"File storage delete failed: \" + errorText);\n }\n },\n\n async list(options?: FileStorageListOptions): Promise<FileStorageListResult> {\n const response = await fetch(serviceUrl + \"/fs/list\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n fsName,\n prefix: options?.prefix,\n limit: options?.limit,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\"File storage list failed: \" + errorText);\n }\n\n const result = await response.json();\n return { keys: result.keys };\n },\n };\n}\n";
@@ -1,112 +0,0 @@
1
- export const FS_RUNTIME_CODE = `
2
- interface FileStoragePutOptions {
3
- contentType?: string;
4
- }
5
-
6
- interface FileStorageListOptions {
7
- prefix?: string;
8
- limit?: number;
9
- }
10
-
11
- interface FileStorageObject {
12
- body: string;
13
- contentType: string;
14
- size: number;
15
- }
16
-
17
- interface FileStorageKey {
18
- key: string;
19
- size: number;
20
- contentType: string;
21
- }
22
-
23
- interface FileStorageListResult {
24
- keys: FileStorageKey[];
25
- }
26
-
27
- interface FileStorageBinding {
28
- put: (key: string, value: string, options?: FileStoragePutOptions) => Promise<void>;
29
- get: (key: string) => Promise<FileStorageObject | null>;
30
- delete: (key: string) => Promise<void>;
31
- list: (options?: FileStorageListOptions) => Promise<FileStorageListResult>;
32
- }
33
-
34
- export function initializeFileStorage(fsName: string, serviceUrl: string): FileStorageBinding {
35
- return {
36
- async put(key: string, value: string, options?: FileStoragePutOptions): Promise<void> {
37
- const response = await fetch(serviceUrl + "/fs/put", {
38
- method: "POST",
39
- headers: { "Content-Type": "application/json" },
40
- body: JSON.stringify({
41
- fsName,
42
- key,
43
- value,
44
- contentType: options?.contentType || "application/octet-stream",
45
- }),
46
- });
47
-
48
- if (!response.ok) {
49
- const errorText = await response.text();
50
- throw new Error("File storage put failed: " + errorText);
51
- }
52
- },
53
-
54
- async get(key: string): Promise<FileStorageObject | null> {
55
- const response = await fetch(serviceUrl + "/fs/get", {
56
- method: "POST",
57
- headers: { "Content-Type": "application/json" },
58
- body: JSON.stringify({ fsName, key }),
59
- });
60
-
61
- if (!response.ok) {
62
- const errorText = await response.text();
63
- throw new Error("File storage get failed: " + errorText);
64
- }
65
-
66
- const result = await response.json();
67
- if (result.found === false) {
68
- return null;
69
- }
70
- return {
71
- body: result.body,
72
- contentType: result.contentType,
73
- size: result.size,
74
- };
75
- },
76
-
77
- async delete(key: string): Promise<void> {
78
- const response = await fetch(serviceUrl + "/fs/delete", {
79
- method: "POST",
80
- headers: { "Content-Type": "application/json" },
81
- body: JSON.stringify({ fsName, key }),
82
- });
83
-
84
- if (!response.ok) {
85
- const errorText = await response.text();
86
- throw new Error("File storage delete failed: " + errorText);
87
- }
88
- },
89
-
90
- async list(options?: FileStorageListOptions): Promise<FileStorageListResult> {
91
- const response = await fetch(serviceUrl + "/fs/list", {
92
- method: "POST",
93
- headers: { "Content-Type": "application/json" },
94
- body: JSON.stringify({
95
- fsName,
96
- prefix: options?.prefix,
97
- limit: options?.limit,
98
- }),
99
- });
100
-
101
- if (!response.ok) {
102
- const errorText = await response.text();
103
- throw new Error("File storage list failed: " + errorText);
104
- }
105
-
106
- const result = await response.json();
107
- return { keys: result.keys };
108
- },
109
- };
110
- }
111
- `;
112
- //# sourceMappingURL=fs-runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs-runtime.js","sourceRoot":"","sources":["../../src/runtime/fs-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8G9B,CAAC"}
@@ -1,25 +0,0 @@
1
- import type Database from "better-sqlite3";
2
- import type { Context } from "hono";
3
- export declare function createFsHandlers(db: Database.Database, dataDir: string): {
4
- putHandler: (c: Context) => Promise<Response & import("hono").TypedResponse<{
5
- success: true;
6
- }, import("hono/utils/http-status").ContentfulStatusCode, "json">>;
7
- getHandler: (c: Context) => Promise<(Response & import("hono").TypedResponse<{
8
- found: false;
9
- }, import("hono/utils/http-status").ContentfulStatusCode, "json">) | (Response & import("hono").TypedResponse<{
10
- found: true;
11
- body: string;
12
- contentType: string;
13
- size: number;
14
- }, import("hono/utils/http-status").ContentfulStatusCode, "json">)>;
15
- deleteHandler: (c: Context) => Promise<Response & import("hono").TypedResponse<{
16
- success: true;
17
- }, import("hono/utils/http-status").ContentfulStatusCode, "json">>;
18
- listHandler: (c: Context) => Promise<Response & import("hono").TypedResponse<{
19
- keys: {
20
- key: string;
21
- size: number;
22
- contentType: string;
23
- }[];
24
- }, import("hono/utils/http-status").ContentfulStatusCode, "json">>;
25
- };
@@ -1,85 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
2
- import { join } from "node:path";
3
- export function createFsHandlers(db, dataDir) {
4
- const fsBaseDir = join(dataDir, "fs");
5
- mkdirSync(fsBaseDir, { recursive: true });
6
- function getFsDir(fsName) {
7
- const dir = join(fsBaseDir, fsName);
8
- mkdirSync(dir, { recursive: true });
9
- return dir;
10
- }
11
- function encodedKeyPath(fsDir, key) {
12
- return join(fsDir, encodeURIComponent(key));
13
- }
14
- const putHandler = async (c) => {
15
- const body = await c.req.json();
16
- const { fsName, key, value, contentType } = body;
17
- const fsDir = getFsDir(fsName);
18
- const filePath = encodedKeyPath(fsDir, key);
19
- writeFileSync(filePath, value, "utf-8");
20
- const size = Buffer.byteLength(value, "utf-8");
21
- const now = Math.floor(Date.now() / 1000);
22
- db.prepare(`INSERT OR REPLACE INTO fs_entries (fs_name, key, content_type, size, created_at) VALUES (?, ?, ?, ?, ?)`).run(fsName, key, contentType || "application/octet-stream", size, now);
23
- return c.json({ success: true });
24
- };
25
- const getHandler = async (c) => {
26
- const body = await c.req.json();
27
- const { fsName, key } = body;
28
- const row = db
29
- .prepare(`SELECT content_type, size FROM fs_entries WHERE fs_name = ? AND key = ?`)
30
- .get(fsName, key);
31
- if (!row) {
32
- return c.json({ found: false });
33
- }
34
- const fsDir = getFsDir(fsName);
35
- const filePath = encodedKeyPath(fsDir, key);
36
- if (!existsSync(filePath)) {
37
- db.prepare(`DELETE FROM fs_entries WHERE fs_name = ? AND key = ?`).run(fsName, key);
38
- return c.json({ found: false });
39
- }
40
- const fileContent = readFileSync(filePath, "utf-8");
41
- return c.json({
42
- found: true,
43
- body: fileContent,
44
- contentType: row.content_type,
45
- size: row.size,
46
- });
47
- };
48
- const deleteHandler = async (c) => {
49
- const body = await c.req.json();
50
- const { fsName, key } = body;
51
- db.prepare(`DELETE FROM fs_entries WHERE fs_name = ? AND key = ?`).run(fsName, key);
52
- const fsDir = getFsDir(fsName);
53
- const filePath = encodedKeyPath(fsDir, key);
54
- if (existsSync(filePath)) {
55
- unlinkSync(filePath);
56
- }
57
- return c.json({ success: true });
58
- };
59
- const listHandler = async (c) => {
60
- const body = await c.req.json();
61
- const { fsName, prefix, limit } = body;
62
- const effectiveLimit = limit ?? 1000;
63
- const keys = prefix
64
- ? db
65
- .prepare(`SELECT key, size, content_type FROM fs_entries WHERE fs_name = ? AND key LIKE ? ORDER BY key ASC LIMIT ?`)
66
- .all(fsName, `${prefix}%`, effectiveLimit)
67
- : db
68
- .prepare(`SELECT key, size, content_type FROM fs_entries WHERE fs_name = ? ORDER BY key ASC LIMIT ?`)
69
- .all(fsName, effectiveLimit);
70
- return c.json({
71
- keys: keys.map((k) => ({
72
- key: k.key,
73
- size: k.size,
74
- contentType: k.content_type,
75
- })),
76
- });
77
- };
78
- return {
79
- putHandler,
80
- getHandler,
81
- deleteHandler,
82
- listHandler,
83
- };
84
- }
85
- //# sourceMappingURL=fs-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs-service.js","sourceRoot":"","sources":["../../src/services/fs-service.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,258 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import Database from "better-sqlite3";
3
- import { Hono } from "hono";
4
- import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
5
- import { createWorkflowHandlers, startStalledWorkflowRecovery, } from "./workflow-service.js";
6
- const SCHEMA = `
7
- CREATE TABLE IF NOT EXISTS workflow_executions (
8
- id TEXT PRIMARY KEY,
9
- workflow_name TEXT NOT NULL,
10
- status TEXT DEFAULT 'pending',
11
- input TEXT,
12
- output TEXT,
13
- error TEXT,
14
- started_at INTEGER,
15
- completed_at INTEGER,
16
- created_at INTEGER DEFAULT (strftime('%s', 'now'))
17
- );
18
-
19
- CREATE TABLE IF NOT EXISTS workflow_steps (
20
- id INTEGER PRIMARY KEY AUTOINCREMENT,
21
- execution_id TEXT NOT NULL,
22
- step_name TEXT NOT NULL,
23
- step_index INTEGER NOT NULL,
24
- status TEXT DEFAULT 'pending',
25
- output TEXT,
26
- error TEXT,
27
- duration_ms INTEGER,
28
- created_at INTEGER DEFAULT (strftime('%s', 'now')),
29
- FOREIGN KEY (execution_id) REFERENCES workflow_executions(id)
30
- );
31
- `;
32
- function createTestApp(db) {
33
- const handlers = createWorkflowHandlers(db);
34
- const app = new Hono();
35
- app.post("/workflow/trigger", handlers.triggerHandler);
36
- app.post("/workflow/status", handlers.statusHandler);
37
- app.post("/workflow/step/start", handlers.stepStartHandler);
38
- app.post("/workflow/step/complete", handlers.stepCompleteHandler);
39
- app.post("/workflow/step/fail", handlers.stepFailHandler);
40
- app.post("/workflow/complete", handlers.completeHandler);
41
- app.post("/workflow/fail", handlers.failHandler);
42
- return app;
43
- }
44
- function post(app, path, body) {
45
- return app.request(path, {
46
- method: "POST",
47
- headers: { "Content-Type": "application/json" },
48
- body: JSON.stringify(body),
49
- });
50
- }
51
- describe("workflow step idempotency and resume", () => {
52
- let db;
53
- let app;
54
- beforeEach(() => {
55
- db = new Database(":memory:");
56
- db.exec(SCHEMA);
57
- app = createTestApp(db);
58
- });
59
- afterEach(() => {
60
- db.close();
61
- });
62
- function insertExecution(id, opts = {}) {
63
- const now = Math.floor(Date.now() / 1000);
64
- db.prepare(`INSERT INTO workflow_executions (id, workflow_name, status, input, started_at, created_at)
65
- VALUES (?, ?, ?, ?, ?, ?)`).run(id, opts.workflowName ?? "test_workflow", opts.status ?? "running", opts.input ? JSON.stringify(opts.input) : null, opts.startedAt ?? now, now);
66
- }
67
- function insertStep(executionId, stepName, stepIndex, opts = {}) {
68
- const now = Math.floor(Date.now() / 1000);
69
- db.prepare(`INSERT INTO workflow_steps (execution_id, step_name, step_index, status, output, error, created_at)
70
- VALUES (?, ?, ?, ?, ?, ?, ?)`).run(executionId, stepName, stepIndex, opts.status ?? "running", opts.output ? JSON.stringify(opts.output) : null, opts.error ?? null, now);
71
- }
72
- test("completed step returns cached output (idempotency)", async () => {
73
- const executionId = randomUUID();
74
- insertExecution(executionId);
75
- insertStep(executionId, "step_1", 0, {
76
- status: "completed",
77
- output: { result: 42 },
78
- });
79
- const res = await post(app, "/workflow/step/start", {
80
- executionId,
81
- stepName: "step_1",
82
- stepIndex: 0,
83
- });
84
- const body = (await res.json());
85
- expect(body.success).toBe(true);
86
- expect(body.alreadyCompleted).toBe(true);
87
- expect(body.output).toEqual({ result: 42 });
88
- });
89
- test("running step is reset and returned as not completed (resume after crash)", async () => {
90
- const executionId = randomUUID();
91
- insertExecution(executionId);
92
- insertStep(executionId, "step_2", 1, { status: "running" });
93
- const res = await post(app, "/workflow/step/start", {
94
- executionId,
95
- stepName: "step_2",
96
- stepIndex: 1,
97
- });
98
- const body = (await res.json());
99
- expect(body.success).toBe(true);
100
- expect(body.alreadyCompleted).toBe(false);
101
- const step = db
102
- .prepare(`SELECT status, error FROM workflow_steps WHERE execution_id = ? AND step_name = ?`)
103
- .get(executionId, "step_2");
104
- expect(step.status).toBe("running");
105
- expect(step.error).toBeNull();
106
- });
107
- test("failed step is reset and returned as not completed (resume after crash)", async () => {
108
- const executionId = randomUUID();
109
- insertExecution(executionId);
110
- insertStep(executionId, "step_3", 2, {
111
- status: "failed",
112
- error: "previous error",
113
- });
114
- const res = await post(app, "/workflow/step/start", {
115
- executionId,
116
- stepName: "step_3",
117
- stepIndex: 2,
118
- });
119
- const body = (await res.json());
120
- expect(body.success).toBe(true);
121
- expect(body.alreadyCompleted).toBe(false);
122
- const step = db
123
- .prepare(`SELECT status, error FROM workflow_steps WHERE execution_id = ? AND step_name = ?`)
124
- .get(executionId, "step_3");
125
- expect(step.status).toBe("running");
126
- expect(step.error).toBeNull();
127
- });
128
- test("new step is created when none exists", async () => {
129
- const executionId = randomUUID();
130
- insertExecution(executionId);
131
- const res = await post(app, "/workflow/step/start", {
132
- executionId,
133
- stepName: "new_step",
134
- stepIndex: 0,
135
- });
136
- const body = (await res.json());
137
- expect(body.success).toBe(true);
138
- expect(body.alreadyCompleted).toBe(false);
139
- const step = db
140
- .prepare(`SELECT status FROM workflow_steps WHERE execution_id = ? AND step_name = ?`)
141
- .get(executionId, "new_step");
142
- expect(step.status).toBe("running");
143
- });
144
- test("full workflow replay: completed steps skipped, pending steps re-execute", async () => {
145
- const executionId = randomUUID();
146
- insertExecution(executionId);
147
- for (let i = 0; i < 5; i++) {
148
- insertStep(executionId, `step_${i}`, i, {
149
- status: "completed",
150
- output: { value: i * 10 },
151
- });
152
- }
153
- insertStep(executionId, "step_5", 5, { status: "running" });
154
- for (let i = 0; i < 10; i++) {
155
- const res = await post(app, "/workflow/step/start", {
156
- executionId,
157
- stepName: `step_${i}`,
158
- stepIndex: i,
159
- });
160
- const body = (await res.json());
161
- expect(body.success).toBe(true);
162
- if (i < 5) {
163
- expect(body.alreadyCompleted).toBe(true);
164
- expect(body.output).toEqual({ value: i * 10 });
165
- }
166
- else {
167
- expect(body.alreadyCompleted).toBe(false);
168
- }
169
- if (!body.alreadyCompleted) {
170
- await post(app, "/workflow/step/complete", {
171
- executionId,
172
- stepName: `step_${i}`,
173
- output: { value: i * 10 },
174
- durationMs: 50,
175
- });
176
- }
177
- }
178
- const steps = db
179
- .prepare(`SELECT step_name, status FROM workflow_steps WHERE execution_id = ? ORDER BY step_index`)
180
- .all(executionId);
181
- expect(steps).toHaveLength(10);
182
- for (const step of steps) {
183
- expect(step.status).toBe("completed");
184
- }
185
- });
186
- });
187
- describe("stalled workflow recovery", () => {
188
- let db;
189
- beforeEach(() => {
190
- db = new Database(":memory:");
191
- db.exec(SCHEMA);
192
- vi.useFakeTimers();
193
- });
194
- afterEach(() => {
195
- vi.useRealTimers();
196
- vi.unstubAllGlobals();
197
- db.close();
198
- });
199
- test("recovers workflows that have been running longer than the stall timeout", async () => {
200
- const fetchSpy = vi.fn().mockResolvedValue(new Response("ok"));
201
- vi.stubGlobal("fetch", fetchSpy);
202
- const executionId = randomUUID();
203
- const tenMinutesAgo = Math.floor(Date.now() / 1000) - 600;
204
- db.prepare(`INSERT INTO workflow_executions (id, workflow_name, status, input, started_at, created_at)
205
- VALUES (?, ?, 'running', ?, ?, ?)`).run(executionId, "stalled_workflow", JSON.stringify({ data: 1 }), tenMinutesAgo, tenMinutesAgo);
206
- db.prepare(`INSERT INTO workflow_steps (execution_id, step_name, step_index, status, created_at)
207
- VALUES (?, ?, ?, 'running', ?)`).run(executionId, "stuck_step", 0, tenMinutesAgo);
208
- const interval = startStalledWorkflowRecovery(db, "http://localhost:9999", 100);
209
- await vi.advanceTimersByTimeAsync(200);
210
- clearInterval(interval);
211
- const step = db
212
- .prepare(`SELECT status FROM workflow_steps WHERE execution_id = ? AND step_name = ?`)
213
- .get(executionId, "stuck_step");
214
- expect(step.status).toBe("pending");
215
- const execution = db
216
- .prepare(`SELECT started_at FROM workflow_executions WHERE id = ?`)
217
- .get(executionId);
218
- expect(execution.started_at).toBeGreaterThan(tenMinutesAgo);
219
- expect(fetchSpy).toHaveBeenCalledWith("http://localhost:9999", expect.objectContaining({
220
- method: "POST",
221
- headers: expect.objectContaining({
222
- "X-Ploy-Workflow-Execution": "true",
223
- "X-Ploy-Workflow-Name": "stalled_workflow",
224
- "X-Ploy-Execution-Id": executionId,
225
- }),
226
- }));
227
- });
228
- test("does not recover workflows that are still within the stall timeout", async () => {
229
- const fetchSpy = vi.fn().mockResolvedValue(new Response("ok"));
230
- vi.stubGlobal("fetch", fetchSpy);
231
- const executionId = randomUUID();
232
- const oneMinuteAgo = Math.floor(Date.now() / 1000) - 60;
233
- db.prepare(`INSERT INTO workflow_executions (id, workflow_name, status, input, started_at, created_at)
234
- VALUES (?, ?, 'running', ?, ?, ?)`).run(executionId, "recent_workflow", null, oneMinuteAgo, oneMinuteAgo);
235
- const interval = startStalledWorkflowRecovery(db, "http://localhost:9999", 100);
236
- await vi.advanceTimersByTimeAsync(200);
237
- clearInterval(interval);
238
- expect(fetchSpy).not.toHaveBeenCalled();
239
- const execution = db
240
- .prepare(`SELECT status FROM workflow_executions WHERE id = ?`)
241
- .get(executionId);
242
- expect(execution.status).toBe("running");
243
- });
244
- test("does not recover completed or failed workflows", async () => {
245
- const fetchSpy = vi.fn().mockResolvedValue(new Response("ok"));
246
- vi.stubGlobal("fetch", fetchSpy);
247
- const tenMinutesAgo = Math.floor(Date.now() / 1000) - 600;
248
- db.prepare(`INSERT INTO workflow_executions (id, workflow_name, status, input, started_at, created_at)
249
- VALUES (?, ?, 'completed', null, ?, ?)`).run(randomUUID(), "done_workflow", tenMinutesAgo, tenMinutesAgo);
250
- db.prepare(`INSERT INTO workflow_executions (id, workflow_name, status, input, started_at, created_at)
251
- VALUES (?, ?, 'failed', null, ?, ?)`).run(randomUUID(), "failed_workflow", tenMinutesAgo, tenMinutesAgo);
252
- const interval = startStalledWorkflowRecovery(db, "http://localhost:9999", 100);
253
- await vi.advanceTimersByTimeAsync(200);
254
- clearInterval(interval);
255
- expect(fetchSpy).not.toHaveBeenCalled();
256
- });
257
- });
258
- //# sourceMappingURL=workflow-service.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-service.spec.js","sourceRoot":"","sources":["../../src/services/workflow-service.spec.ts"],"names":[],"mappings":"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"}