@meetploy/emulator 1.0.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.
Files changed (49) hide show
  1. package/dist/bundler/bundler.d.ts +9 -0
  2. package/dist/bundler/bundler.js +174 -0
  3. package/dist/bundler/bundler.js.map +1 -0
  4. package/dist/bundler/watcher.d.ts +5 -0
  5. package/dist/bundler/watcher.js +65 -0
  6. package/dist/bundler/watcher.js.map +1 -0
  7. package/dist/config/ploy-config.d.ts +13 -0
  8. package/dist/config/ploy-config.js +40 -0
  9. package/dist/config/ploy-config.js.map +1 -0
  10. package/dist/config/workerd-config.d.ts +10 -0
  11. package/dist/config/workerd-config.js +49 -0
  12. package/dist/config/workerd-config.js.map +1 -0
  13. package/dist/emulator.d.ts +27 -0
  14. package/dist/emulator.js +247 -0
  15. package/dist/emulator.js.map +1 -0
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.js +2 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/runtime/db-runtime.d.ts +1 -0
  20. package/dist/runtime/db-runtime.js +142 -0
  21. package/dist/runtime/db-runtime.js.map +1 -0
  22. package/dist/runtime/queue-runtime.d.ts +1 -0
  23. package/dist/runtime/queue-runtime.js +60 -0
  24. package/dist/runtime/queue-runtime.js.map +1 -0
  25. package/dist/runtime/workflow-runtime.d.ts +1 -0
  26. package/dist/runtime/workflow-runtime.js +206 -0
  27. package/dist/runtime/workflow-runtime.js.map +1 -0
  28. package/dist/services/db-service.d.ts +22 -0
  29. package/dist/services/db-service.js +103 -0
  30. package/dist/services/db-service.js.map +1 -0
  31. package/dist/services/mock-server.d.ts +10 -0
  32. package/dist/services/mock-server.js +46 -0
  33. package/dist/services/mock-server.js.map +1 -0
  34. package/dist/services/queue-service.d.ts +64 -0
  35. package/dist/services/queue-service.js +198 -0
  36. package/dist/services/queue-service.js.map +1 -0
  37. package/dist/services/workflow-service.d.ts +108 -0
  38. package/dist/services/workflow-service.js +217 -0
  39. package/dist/services/workflow-service.js.map +1 -0
  40. package/dist/utils/logger.d.ts +5 -0
  41. package/dist/utils/logger.js +30 -0
  42. package/dist/utils/logger.js.map +1 -0
  43. package/dist/utils/paths.d.ts +6 -0
  44. package/dist/utils/paths.js +29 -0
  45. package/dist/utils/paths.js.map +1 -0
  46. package/dist/utils/sqlite.d.ts +7 -0
  47. package/dist/utils/sqlite.js +82 -0
  48. package/dist/utils/sqlite.js.map +1 -0
  49. package/package.json +41 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emulator.js","sourceRoot":"","sources":["../src/emulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { EmulatorServer, startEmulator } from "./emulator.js";
2
+ export type { EmulatorOptions } from "./emulator.js";
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { EmulatorServer, startEmulator } from "./emulator.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const DB_RUNTIME_CODE = "\ninterface DBResult {\n results: unknown[];\n success: boolean;\n meta: {\n duration: number;\n rows_read: number;\n rows_written: number;\n };\n}\n\ninterface DBPreparedStatement {\n bind: (...values: unknown[]) => DBPreparedStatement;\n run: () => Promise<DBResult>;\n all: () => Promise<DBResult>;\n first: (colName?: string) => Promise<unknown | null>;\n raw: (options?: { columnNames?: boolean }) => Promise<unknown[][]>;\n}\n\ninterface DBDatabase {\n prepare: (query: string) => DBPreparedStatement;\n dump: () => Promise<ArrayBuffer>;\n batch: (statements: DBPreparedStatement[]) => Promise<DBResult[]>;\n exec: (query: string) => Promise<DBResult>;\n}\n\nexport function initializeDB(bindingName: string, serviceUrl: string): DBDatabase {\n return {\n prepare(query: string): DBPreparedStatement {\n let boundParams: unknown[] = [];\n\n const stmt: DBPreparedStatement = {\n bind(...values: unknown[]) {\n boundParams = values;\n return this;\n },\n\n async run(): Promise<DBResult> {\n const response = await fetch(serviceUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n bindingName,\n method: \"prepare\",\n query,\n params: boundParams,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\"DB query failed: \" + errorText);\n }\n\n return await response.json();\n },\n\n async all(): Promise<DBResult> {\n return await this.run();\n },\n\n async first(colName?: string): Promise<unknown | null> {\n const result = await this.run();\n if (result.results.length === 0) {\n return null;\n }\n\n const firstRow = result.results[0] as Record<string, unknown>;\n if (colName) {\n return firstRow[colName] ?? null;\n }\n return firstRow;\n },\n\n async raw(options?: { columnNames?: boolean }): Promise<unknown[][]> {\n const result = await this.run();\n const rows = result.results as Record<string, unknown>[];\n\n if (rows.length === 0) {\n return [];\n }\n\n const keys = Object.keys(rows[0]);\n const arrayRows = rows.map((row) => keys.map((key) => row[key]));\n\n if (options?.columnNames) {\n return [keys, ...arrayRows];\n }\n\n return arrayRows;\n },\n };\n\n return stmt;\n },\n\n async dump(): Promise<ArrayBuffer> {\n const response = await fetch(serviceUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n bindingName,\n method: \"dump\",\n }),\n });\n\n if (!response.ok) {\n throw new Error(\"DB dump failed: \" + response.statusText);\n }\n\n return await response.arrayBuffer();\n },\n\n async batch(statements: DBPreparedStatement[]): Promise<DBResult[]> {\n const results: DBResult[] = [];\n for (const stmt of statements) {\n results.push(await stmt.run());\n }\n return results;\n },\n\n async exec(query: string): Promise<DBResult> {\n const response = await fetch(serviceUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n bindingName,\n method: \"exec\",\n query,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\"DB exec failed: \" + response.statusText);\n }\n\n return await response.json();\n },\n };\n}\n";
@@ -0,0 +1,142 @@
1
+ export const DB_RUNTIME_CODE = `
2
+ interface DBResult {
3
+ results: unknown[];
4
+ success: boolean;
5
+ meta: {
6
+ duration: number;
7
+ rows_read: number;
8
+ rows_written: number;
9
+ };
10
+ }
11
+
12
+ interface DBPreparedStatement {
13
+ bind: (...values: unknown[]) => DBPreparedStatement;
14
+ run: () => Promise<DBResult>;
15
+ all: () => Promise<DBResult>;
16
+ first: (colName?: string) => Promise<unknown | null>;
17
+ raw: (options?: { columnNames?: boolean }) => Promise<unknown[][]>;
18
+ }
19
+
20
+ interface DBDatabase {
21
+ prepare: (query: string) => DBPreparedStatement;
22
+ dump: () => Promise<ArrayBuffer>;
23
+ batch: (statements: DBPreparedStatement[]) => Promise<DBResult[]>;
24
+ exec: (query: string) => Promise<DBResult>;
25
+ }
26
+
27
+ export function initializeDB(bindingName: string, serviceUrl: string): DBDatabase {
28
+ return {
29
+ prepare(query: string): DBPreparedStatement {
30
+ let boundParams: unknown[] = [];
31
+
32
+ const stmt: DBPreparedStatement = {
33
+ bind(...values: unknown[]) {
34
+ boundParams = values;
35
+ return this;
36
+ },
37
+
38
+ async run(): Promise<DBResult> {
39
+ const response = await fetch(serviceUrl, {
40
+ method: "POST",
41
+ headers: { "Content-Type": "application/json" },
42
+ body: JSON.stringify({
43
+ bindingName,
44
+ method: "prepare",
45
+ query,
46
+ params: boundParams,
47
+ }),
48
+ });
49
+
50
+ if (!response.ok) {
51
+ const errorText = await response.text();
52
+ throw new Error("DB query failed: " + errorText);
53
+ }
54
+
55
+ return await response.json();
56
+ },
57
+
58
+ async all(): Promise<DBResult> {
59
+ return await this.run();
60
+ },
61
+
62
+ async first(colName?: string): Promise<unknown | null> {
63
+ const result = await this.run();
64
+ if (result.results.length === 0) {
65
+ return null;
66
+ }
67
+
68
+ const firstRow = result.results[0] as Record<string, unknown>;
69
+ if (colName) {
70
+ return firstRow[colName] ?? null;
71
+ }
72
+ return firstRow;
73
+ },
74
+
75
+ async raw(options?: { columnNames?: boolean }): Promise<unknown[][]> {
76
+ const result = await this.run();
77
+ const rows = result.results as Record<string, unknown>[];
78
+
79
+ if (rows.length === 0) {
80
+ return [];
81
+ }
82
+
83
+ const keys = Object.keys(rows[0]);
84
+ const arrayRows = rows.map((row) => keys.map((key) => row[key]));
85
+
86
+ if (options?.columnNames) {
87
+ return [keys, ...arrayRows];
88
+ }
89
+
90
+ return arrayRows;
91
+ },
92
+ };
93
+
94
+ return stmt;
95
+ },
96
+
97
+ async dump(): Promise<ArrayBuffer> {
98
+ const response = await fetch(serviceUrl, {
99
+ method: "POST",
100
+ headers: { "Content-Type": "application/json" },
101
+ body: JSON.stringify({
102
+ bindingName,
103
+ method: "dump",
104
+ }),
105
+ });
106
+
107
+ if (!response.ok) {
108
+ throw new Error("DB dump failed: " + response.statusText);
109
+ }
110
+
111
+ return await response.arrayBuffer();
112
+ },
113
+
114
+ async batch(statements: DBPreparedStatement[]): Promise<DBResult[]> {
115
+ const results: DBResult[] = [];
116
+ for (const stmt of statements) {
117
+ results.push(await stmt.run());
118
+ }
119
+ return results;
120
+ },
121
+
122
+ async exec(query: string): Promise<DBResult> {
123
+ const response = await fetch(serviceUrl, {
124
+ method: "POST",
125
+ headers: { "Content-Type": "application/json" },
126
+ body: JSON.stringify({
127
+ bindingName,
128
+ method: "exec",
129
+ query,
130
+ }),
131
+ });
132
+
133
+ if (!response.ok) {
134
+ throw new Error("DB exec failed: " + response.statusText);
135
+ }
136
+
137
+ return await response.json();
138
+ },
139
+ };
140
+ }
141
+ `;
142
+ //# sourceMappingURL=db-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-runtime.js","sourceRoot":"","sources":["../../src/runtime/db-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4I9B,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const QUEUE_RUNTIME_CODE = "\ninterface QueueSendResult {\n success: boolean;\n messageId?: string;\n error?: string;\n}\n\ninterface QueueBatchSendResult {\n success: boolean;\n messageIds?: string[];\n error?: string;\n}\n\ninterface Queue<T = unknown> {\n send: (payload: T, options?: { delaySeconds?: number }) => Promise<QueueSendResult>;\n sendBatch: (messages: Array<{ payload: T; delaySeconds?: number }>) => Promise<QueueBatchSendResult>;\n}\n\nexport function initializeQueue<T = unknown>(queueName: string, serviceUrl: string): Queue<T> {\n return {\n async send(payload: T, options?: { delaySeconds?: number }): Promise<QueueSendResult> {\n const response = await fetch(serviceUrl + \"/queue/send\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n queueName,\n payload,\n delaySeconds: options?.delaySeconds,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n return { success: false, error: \"Queue send failed: \" + errorText };\n }\n\n return await response.json();\n },\n\n async sendBatch(messages: Array<{ payload: T; delaySeconds?: number }>): Promise<QueueBatchSendResult> {\n const response = await fetch(serviceUrl + \"/queue/batch-send\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n queueName,\n messages,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n return { success: false, error: \"Queue batch send failed: \" + errorText };\n }\n\n return await response.json();\n },\n };\n}\n";
@@ -0,0 +1,60 @@
1
+ export const QUEUE_RUNTIME_CODE = `
2
+ interface QueueSendResult {
3
+ success: boolean;
4
+ messageId?: string;
5
+ error?: string;
6
+ }
7
+
8
+ interface QueueBatchSendResult {
9
+ success: boolean;
10
+ messageIds?: string[];
11
+ error?: string;
12
+ }
13
+
14
+ interface Queue<T = unknown> {
15
+ send: (payload: T, options?: { delaySeconds?: number }) => Promise<QueueSendResult>;
16
+ sendBatch: (messages: Array<{ payload: T; delaySeconds?: number }>) => Promise<QueueBatchSendResult>;
17
+ }
18
+
19
+ export function initializeQueue<T = unknown>(queueName: string, serviceUrl: string): Queue<T> {
20
+ return {
21
+ async send(payload: T, options?: { delaySeconds?: number }): Promise<QueueSendResult> {
22
+ const response = await fetch(serviceUrl + "/queue/send", {
23
+ method: "POST",
24
+ headers: { "Content-Type": "application/json" },
25
+ body: JSON.stringify({
26
+ queueName,
27
+ payload,
28
+ delaySeconds: options?.delaySeconds,
29
+ }),
30
+ });
31
+
32
+ if (!response.ok) {
33
+ const errorText = await response.text();
34
+ return { success: false, error: "Queue send failed: " + errorText };
35
+ }
36
+
37
+ return await response.json();
38
+ },
39
+
40
+ async sendBatch(messages: Array<{ payload: T; delaySeconds?: number }>): Promise<QueueBatchSendResult> {
41
+ const response = await fetch(serviceUrl + "/queue/batch-send", {
42
+ method: "POST",
43
+ headers: { "Content-Type": "application/json" },
44
+ body: JSON.stringify({
45
+ queueName,
46
+ messages,
47
+ }),
48
+ });
49
+
50
+ if (!response.ok) {
51
+ const errorText = await response.text();
52
+ return { success: false, error: "Queue batch send failed: " + errorText };
53
+ }
54
+
55
+ return await response.json();
56
+ },
57
+ };
58
+ }
59
+ `;
60
+ //# sourceMappingURL=queue-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-runtime.js","sourceRoot":"","sources":["../../src/runtime/queue-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DjC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const WORKFLOW_RUNTIME_CODE = "\ninterface WorkflowExecution {\n id: string;\n status: \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\";\n result?: unknown;\n error?: string;\n}\n\ninterface Workflow<TInput = unknown> {\n trigger: (input: TInput) => Promise<{ executionId: string }>;\n getExecution: (executionId: string) => Promise<WorkflowExecution>;\n cancel: (executionId: string) => Promise<void>;\n}\n\nexport function initializeWorkflow<TInput = unknown>(\n workflowName: string,\n serviceUrl: string\n): Workflow<TInput> {\n return {\n async trigger(input: TInput): Promise<{ executionId: string }> {\n const response = await fetch(serviceUrl + \"/workflow/trigger\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ workflowName, input }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\"Workflow trigger failed: \" + errorText);\n }\n\n const result = await response.json();\n if (!result.success) {\n throw new Error(result.error || \"Workflow trigger failed\");\n }\n\n return { executionId: result.executionId };\n },\n\n async getExecution(executionId: string): Promise<WorkflowExecution> {\n const response = await fetch(serviceUrl + \"/workflow/status\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ executionId }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\"Workflow status failed: \" + errorText);\n }\n\n const result = await response.json();\n if (!result.success) {\n throw new Error(result.error || \"Workflow status failed\");\n }\n\n const exec = result.execution;\n return {\n id: exec.id,\n status: exec.status,\n result: exec.output,\n error: exec.error,\n };\n },\n\n async cancel(executionId: string): Promise<void> {\n const response = await fetch(serviceUrl + \"/workflow/cancel\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ executionId }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\"Workflow cancel failed: \" + errorText);\n }\n\n const result = await response.json();\n if (!result.success) {\n throw new Error(result.error || \"Workflow cancel failed\");\n }\n },\n };\n}\n\ninterface WorkflowStepContext {\n run: <T>(stepName: string, fn: () => T | Promise<T>, options?: { retries?: number }) => Promise<T>;\n sleep: (durationMs: number) => Promise<void>;\n}\n\ninterface WorkflowContext<TInput = unknown, TEnv = unknown> {\n input: TInput;\n env: TEnv;\n step: WorkflowStepContext;\n}\n\nexport function createStepContext(executionId: string, serviceUrl: string): WorkflowStepContext {\n let stepIndex = 0;\n\n return {\n async run<T>(stepName: string, fn: () => T | Promise<T>, options?: { retries?: number }): Promise<T> {\n const currentStepIndex = stepIndex++;\n const maxRetries = options?.retries ?? 0;\n\n const startResponse = await fetch(serviceUrl + \"/workflow/step/start\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ executionId, stepName, stepIndex: currentStepIndex }),\n });\n\n if (!startResponse.ok) {\n const errorText = await startResponse.text();\n throw new Error(\"Failed to start step: \" + errorText);\n }\n\n const startResult = await startResponse.json();\n\n if (startResult.alreadyCompleted) {\n return startResult.output as T;\n }\n\n const startTime = Date.now();\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const result = await fn();\n const durationMs = Date.now() - startTime;\n\n await fetch(serviceUrl + \"/workflow/step/complete\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ executionId, stepName, output: result, durationMs }),\n });\n\n return result;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n if (attempt < maxRetries) {\n await new Promise((resolve) => setTimeout(resolve, Math.min(1000 * Math.pow(2, attempt), 30000)));\n }\n }\n }\n\n const durationMs = Date.now() - startTime;\n await fetch(serviceUrl + \"/workflow/step/fail\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ executionId, stepName, error: lastError?.message || \"Step execution failed\", durationMs }),\n });\n\n throw lastError;\n },\n\n async sleep(durationMs: number): Promise<void> {\n const stepName = \"__sleep_\" + stepIndex++;\n\n await fetch(serviceUrl + \"/workflow/step/start\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ executionId, stepName, stepIndex: stepIndex - 1 }),\n });\n\n await new Promise((resolve) => setTimeout(resolve, durationMs));\n\n await fetch(serviceUrl + \"/workflow/step/complete\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ executionId, stepName, output: { sleptMs: durationMs }, durationMs }),\n });\n },\n };\n}\n\nexport async function executeWorkflow<TInput, TOutput, TEnv>(\n executionId: string,\n workflowFn: (context: WorkflowContext<TInput, TEnv>) => Promise<TOutput>,\n input: TInput,\n env: TEnv,\n serviceUrl: string\n): Promise<TOutput> {\n const step = createStepContext(executionId, serviceUrl);\n const context: WorkflowContext<TInput, TEnv> = { input, env, step };\n\n try {\n const output = await workflowFn(context);\n\n await fetch(serviceUrl + \"/workflow/complete\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ executionId, output }),\n });\n\n return output;\n } catch (error) {\n await fetch(serviceUrl + \"/workflow/fail\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ executionId, error: error instanceof Error ? error.message : String(error) }),\n });\n\n throw error;\n }\n}\n";
@@ -0,0 +1,206 @@
1
+ export const WORKFLOW_RUNTIME_CODE = `
2
+ interface WorkflowExecution {
3
+ id: string;
4
+ status: "pending" | "running" | "completed" | "failed" | "cancelled";
5
+ result?: unknown;
6
+ error?: string;
7
+ }
8
+
9
+ interface Workflow<TInput = unknown> {
10
+ trigger: (input: TInput) => Promise<{ executionId: string }>;
11
+ getExecution: (executionId: string) => Promise<WorkflowExecution>;
12
+ cancel: (executionId: string) => Promise<void>;
13
+ }
14
+
15
+ export function initializeWorkflow<TInput = unknown>(
16
+ workflowName: string,
17
+ serviceUrl: string
18
+ ): Workflow<TInput> {
19
+ return {
20
+ async trigger(input: TInput): Promise<{ executionId: string }> {
21
+ const response = await fetch(serviceUrl + "/workflow/trigger", {
22
+ method: "POST",
23
+ headers: { "Content-Type": "application/json" },
24
+ body: JSON.stringify({ workflowName, input }),
25
+ });
26
+
27
+ if (!response.ok) {
28
+ const errorText = await response.text();
29
+ throw new Error("Workflow trigger failed: " + errorText);
30
+ }
31
+
32
+ const result = await response.json();
33
+ if (!result.success) {
34
+ throw new Error(result.error || "Workflow trigger failed");
35
+ }
36
+
37
+ return { executionId: result.executionId };
38
+ },
39
+
40
+ async getExecution(executionId: string): Promise<WorkflowExecution> {
41
+ const response = await fetch(serviceUrl + "/workflow/status", {
42
+ method: "POST",
43
+ headers: { "Content-Type": "application/json" },
44
+ body: JSON.stringify({ executionId }),
45
+ });
46
+
47
+ if (!response.ok) {
48
+ const errorText = await response.text();
49
+ throw new Error("Workflow status failed: " + errorText);
50
+ }
51
+
52
+ const result = await response.json();
53
+ if (!result.success) {
54
+ throw new Error(result.error || "Workflow status failed");
55
+ }
56
+
57
+ const exec = result.execution;
58
+ return {
59
+ id: exec.id,
60
+ status: exec.status,
61
+ result: exec.output,
62
+ error: exec.error,
63
+ };
64
+ },
65
+
66
+ async cancel(executionId: string): Promise<void> {
67
+ const response = await fetch(serviceUrl + "/workflow/cancel", {
68
+ method: "POST",
69
+ headers: { "Content-Type": "application/json" },
70
+ body: JSON.stringify({ executionId }),
71
+ });
72
+
73
+ if (!response.ok) {
74
+ const errorText = await response.text();
75
+ throw new Error("Workflow cancel failed: " + errorText);
76
+ }
77
+
78
+ const result = await response.json();
79
+ if (!result.success) {
80
+ throw new Error(result.error || "Workflow cancel failed");
81
+ }
82
+ },
83
+ };
84
+ }
85
+
86
+ interface WorkflowStepContext {
87
+ run: <T>(stepName: string, fn: () => T | Promise<T>, options?: { retries?: number }) => Promise<T>;
88
+ sleep: (durationMs: number) => Promise<void>;
89
+ }
90
+
91
+ interface WorkflowContext<TInput = unknown, TEnv = unknown> {
92
+ input: TInput;
93
+ env: TEnv;
94
+ step: WorkflowStepContext;
95
+ }
96
+
97
+ export function createStepContext(executionId: string, serviceUrl: string): WorkflowStepContext {
98
+ let stepIndex = 0;
99
+
100
+ return {
101
+ async run<T>(stepName: string, fn: () => T | Promise<T>, options?: { retries?: number }): Promise<T> {
102
+ const currentStepIndex = stepIndex++;
103
+ const maxRetries = options?.retries ?? 0;
104
+
105
+ const startResponse = await fetch(serviceUrl + "/workflow/step/start", {
106
+ method: "POST",
107
+ headers: { "Content-Type": "application/json" },
108
+ body: JSON.stringify({ executionId, stepName, stepIndex: currentStepIndex }),
109
+ });
110
+
111
+ if (!startResponse.ok) {
112
+ const errorText = await startResponse.text();
113
+ throw new Error("Failed to start step: " + errorText);
114
+ }
115
+
116
+ const startResult = await startResponse.json();
117
+
118
+ if (startResult.alreadyCompleted) {
119
+ return startResult.output as T;
120
+ }
121
+
122
+ const startTime = Date.now();
123
+ let lastError: Error | null = null;
124
+
125
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
126
+ try {
127
+ const result = await fn();
128
+ const durationMs = Date.now() - startTime;
129
+
130
+ await fetch(serviceUrl + "/workflow/step/complete", {
131
+ method: "POST",
132
+ headers: { "Content-Type": "application/json" },
133
+ body: JSON.stringify({ executionId, stepName, output: result, durationMs }),
134
+ });
135
+
136
+ return result;
137
+ } catch (error) {
138
+ lastError = error instanceof Error ? error : new Error(String(error));
139
+ if (attempt < maxRetries) {
140
+ await new Promise((resolve) => setTimeout(resolve, Math.min(1000 * Math.pow(2, attempt), 30000)));
141
+ }
142
+ }
143
+ }
144
+
145
+ const durationMs = Date.now() - startTime;
146
+ await fetch(serviceUrl + "/workflow/step/fail", {
147
+ method: "POST",
148
+ headers: { "Content-Type": "application/json" },
149
+ body: JSON.stringify({ executionId, stepName, error: lastError?.message || "Step execution failed", durationMs }),
150
+ });
151
+
152
+ throw lastError;
153
+ },
154
+
155
+ async sleep(durationMs: number): Promise<void> {
156
+ const stepName = "__sleep_" + stepIndex++;
157
+
158
+ await fetch(serviceUrl + "/workflow/step/start", {
159
+ method: "POST",
160
+ headers: { "Content-Type": "application/json" },
161
+ body: JSON.stringify({ executionId, stepName, stepIndex: stepIndex - 1 }),
162
+ });
163
+
164
+ await new Promise((resolve) => setTimeout(resolve, durationMs));
165
+
166
+ await fetch(serviceUrl + "/workflow/step/complete", {
167
+ method: "POST",
168
+ headers: { "Content-Type": "application/json" },
169
+ body: JSON.stringify({ executionId, stepName, output: { sleptMs: durationMs }, durationMs }),
170
+ });
171
+ },
172
+ };
173
+ }
174
+
175
+ export async function executeWorkflow<TInput, TOutput, TEnv>(
176
+ executionId: string,
177
+ workflowFn: (context: WorkflowContext<TInput, TEnv>) => Promise<TOutput>,
178
+ input: TInput,
179
+ env: TEnv,
180
+ serviceUrl: string
181
+ ): Promise<TOutput> {
182
+ const step = createStepContext(executionId, serviceUrl);
183
+ const context: WorkflowContext<TInput, TEnv> = { input, env, step };
184
+
185
+ try {
186
+ const output = await workflowFn(context);
187
+
188
+ await fetch(serviceUrl + "/workflow/complete", {
189
+ method: "POST",
190
+ headers: { "Content-Type": "application/json" },
191
+ body: JSON.stringify({ executionId, output }),
192
+ });
193
+
194
+ return output;
195
+ } catch (error) {
196
+ await fetch(serviceUrl + "/workflow/fail", {
197
+ method: "POST",
198
+ headers: { "Content-Type": "application/json" },
199
+ body: JSON.stringify({ executionId, error: error instanceof Error ? error.message : String(error) }),
200
+ });
201
+
202
+ throw error;
203
+ }
204
+ }
205
+ `;
206
+ //# sourceMappingURL=workflow-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-runtime.js","sourceRoot":"","sources":["../../src/runtime/workflow-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4MpC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { Context } from "hono";
3
+ export interface DBRequest {
4
+ bindingName: string;
5
+ method: "prepare" | "exec" | "batch" | "dump";
6
+ query?: string;
7
+ params?: unknown[];
8
+ statements?: Array<{
9
+ query: string;
10
+ params?: unknown[];
11
+ }>;
12
+ }
13
+ export interface DBResult<T = unknown> {
14
+ results: T[];
15
+ success: boolean;
16
+ meta: {
17
+ duration: number;
18
+ rows_read: number;
19
+ rows_written: number;
20
+ };
21
+ }
22
+ export declare function createDbHandler(getDatabase: (bindingName: string) => Database.Database): (c: Context) => Promise<Response>;
@@ -0,0 +1,103 @@
1
+ export function createDbHandler(getDatabase) {
2
+ return async (c) => {
3
+ const startTime = Date.now();
4
+ try {
5
+ const body = (await c.req.json());
6
+ const { bindingName, method, query, params, statements } = body;
7
+ const db = getDatabase(bindingName);
8
+ if (method === "prepare" && query) {
9
+ const stmt = db.prepare(query);
10
+ const isSelect = query.trim().toUpperCase().startsWith("SELECT");
11
+ let results;
12
+ let changes = 0;
13
+ if (isSelect) {
14
+ results = params?.length ? stmt.all(...params) : stmt.all();
15
+ }
16
+ else {
17
+ const info = params?.length ? stmt.run(...params) : stmt.run();
18
+ changes = info.changes;
19
+ results = [];
20
+ }
21
+ const duration = Date.now() - startTime;
22
+ return c.json({
23
+ results,
24
+ success: true,
25
+ meta: {
26
+ duration,
27
+ rows_read: results.length,
28
+ rows_written: changes,
29
+ },
30
+ });
31
+ }
32
+ if (method === "exec" && query) {
33
+ db.exec(query);
34
+ const duration = Date.now() - startTime;
35
+ return c.json({
36
+ results: [],
37
+ success: true,
38
+ meta: {
39
+ duration,
40
+ rows_read: 0,
41
+ rows_written: 0,
42
+ },
43
+ });
44
+ }
45
+ if (method === "batch" && statements) {
46
+ const results = [];
47
+ const transaction = db.transaction(() => {
48
+ for (const stmt of statements) {
49
+ const prepared = db.prepare(stmt.query);
50
+ const isSelect = stmt.query
51
+ .trim()
52
+ .toUpperCase()
53
+ .startsWith("SELECT");
54
+ if (isSelect) {
55
+ const rows = stmt.params?.length
56
+ ? prepared.all(...stmt.params)
57
+ : prepared.all();
58
+ results.push({
59
+ results: rows,
60
+ success: true,
61
+ meta: {
62
+ duration: 0,
63
+ rows_read: rows.length,
64
+ rows_written: 0,
65
+ },
66
+ });
67
+ }
68
+ else {
69
+ const info = stmt.params?.length
70
+ ? prepared.run(...stmt.params)
71
+ : prepared.run();
72
+ results.push({
73
+ results: [],
74
+ success: true,
75
+ meta: {
76
+ duration: 0,
77
+ rows_read: 0,
78
+ rows_written: info.changes,
79
+ },
80
+ });
81
+ }
82
+ }
83
+ });
84
+ transaction();
85
+ return c.json(results);
86
+ }
87
+ if (method === "dump") {
88
+ const buffer = db.serialize();
89
+ return new Response(new Uint8Array(buffer), {
90
+ headers: {
91
+ "Content-Type": "application/octet-stream",
92
+ },
93
+ });
94
+ }
95
+ return c.json({ error: "Invalid method" }, 400);
96
+ }
97
+ catch (err) {
98
+ const message = err instanceof Error ? err.message : String(err);
99
+ return c.json({ error: message }, 500);
100
+ }
101
+ };
102
+ }
103
+ //# sourceMappingURL=db-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-service.js","sourceRoot":"","sources":["../../src/services/db-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { PloyConfig } from "../config/ploy-config.js";
2
+ import type { DatabaseManager } from "../utils/sqlite.js";
3
+ export interface MockServer {
4
+ port: number;
5
+ close: () => Promise<void>;
6
+ }
7
+ export interface MockServerOptions {
8
+ workerUrl?: string;
9
+ }
10
+ export declare function startMockServer(dbManager: DatabaseManager, config: PloyConfig, options?: MockServerOptions): Promise<MockServer>;