@xyne/workflow-sdk 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.
- package/README.md +36 -0
- package/dist/agents/agent-step.d.ts +152 -0
- package/dist/agents/agent-step.d.ts.map +1 -0
- package/dist/agents/agent-step.js +403 -0
- package/dist/agents/agent-step.js.map +1 -0
- package/dist/agents/base-runtime.d.ts +38 -0
- package/dist/agents/base-runtime.d.ts.map +1 -0
- package/dist/agents/base-runtime.js +21 -0
- package/dist/agents/base-runtime.js.map +1 -0
- package/dist/agents/index.d.ts +12 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +17 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/interceptor.d.ts +19 -0
- package/dist/agents/interceptor.d.ts.map +1 -0
- package/dist/agents/interceptor.js +21 -0
- package/dist/agents/interceptor.js.map +1 -0
- package/dist/agents/interceptors/approval-gate.d.ts +14 -0
- package/dist/agents/interceptors/approval-gate.d.ts.map +1 -0
- package/dist/agents/interceptors/approval-gate.js +19 -0
- package/dist/agents/interceptors/approval-gate.js.map +1 -0
- package/dist/agents/interceptors/tool-logger.d.ts +15 -0
- package/dist/agents/interceptors/tool-logger.d.ts.map +1 -0
- package/dist/agents/interceptors/tool-logger.js +23 -0
- package/dist/agents/interceptors/tool-logger.js.map +1 -0
- package/dist/agents/pi-mono-runtime.d.ts +88 -0
- package/dist/agents/pi-mono-runtime.d.ts.map +1 -0
- package/dist/agents/pi-mono-runtime.js +129 -0
- package/dist/agents/pi-mono-runtime.js.map +1 -0
- package/dist/agents/tool-registry.d.ts +25 -0
- package/dist/agents/tool-registry.d.ts.map +1 -0
- package/dist/agents/tool-registry.js +47 -0
- package/dist/agents/tool-registry.js.map +1 -0
- package/dist/agents/tool-types.d.ts +25 -0
- package/dist/agents/tool-types.d.ts.map +1 -0
- package/dist/agents/tool-types.js +9 -0
- package/dist/agents/tool-types.js.map +1 -0
- package/dist/agents/types.d.ts +91 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +12 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/builder/index.d.ts +30 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +32 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/client/index.d.ts +19 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +18 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +128 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +10 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/workflow-client.d.ts +15 -0
- package/dist/client/workflow-client.d.ts.map +1 -0
- package/dist/client/workflow-client.js +293 -0
- package/dist/client/workflow-client.js.map +1 -0
- package/dist/common/attachment.d.ts +31 -0
- package/dist/common/attachment.d.ts.map +1 -0
- package/dist/common/attachment.js +21 -0
- package/dist/common/attachment.js.map +1 -0
- package/dist/common/executable-check.d.ts +42 -0
- package/dist/common/executable-check.d.ts.map +1 -0
- package/dist/common/executable-check.js +115 -0
- package/dist/common/executable-check.js.map +1 -0
- package/dist/common/index.d.ts +21 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +19 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/resume-payload.d.ts +34 -0
- package/dist/common/resume-payload.d.ts.map +1 -0
- package/dist/common/resume-payload.js +12 -0
- package/dist/common/resume-payload.js.map +1 -0
- package/dist/engine/available-context.d.ts +29 -0
- package/dist/engine/available-context.d.ts.map +1 -0
- package/dist/engine/available-context.js +66 -0
- package/dist/engine/available-context.js.map +1 -0
- package/dist/engine/condition-evaluator.d.ts +13 -0
- package/dist/engine/condition-evaluator.d.ts.map +1 -0
- package/dist/engine/condition-evaluator.js +92 -0
- package/dist/engine/condition-evaluator.js.map +1 -0
- package/dist/engine/config-validator.d.ts +25 -0
- package/dist/engine/config-validator.d.ts.map +1 -0
- package/dist/engine/config-validator.js +316 -0
- package/dist/engine/config-validator.js.map +1 -0
- package/dist/engine/pause-step.d.ts +20 -0
- package/dist/engine/pause-step.d.ts.map +1 -0
- package/dist/engine/pause-step.js +24 -0
- package/dist/engine/pause-step.js.map +1 -0
- package/dist/engine/service-registry.d.ts +49 -0
- package/dist/engine/service-registry.d.ts.map +1 -0
- package/dist/engine/service-registry.js +76 -0
- package/dist/engine/service-registry.js.map +1 -0
- package/dist/engine/variable-resolver.d.ts +29 -0
- package/dist/engine/variable-resolver.d.ts.map +1 -0
- package/dist/engine/variable-resolver.js +130 -0
- package/dist/engine/variable-resolver.js.map +1 -0
- package/dist/engine/workflow-executor.d.ts +96 -0
- package/dist/engine/workflow-executor.d.ts.map +1 -0
- package/dist/engine/workflow-executor.js +837 -0
- package/dist/engine/workflow-executor.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/persistence/in-memory-adapter.d.ts +138 -0
- package/dist/persistence/in-memory-adapter.d.ts.map +1 -0
- package/dist/persistence/in-memory-adapter.js +315 -0
- package/dist/persistence/in-memory-adapter.js.map +1 -0
- package/dist/persistence/types.d.ts +214 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +8 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/router/types.d.ts +57 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +8 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router/workflow-router.d.ts +26 -0
- package/dist/router/workflow-router.d.ts.map +1 -0
- package/dist/router/workflow-router.js +611 -0
- package/dist/router/workflow-router.js.map +1 -0
- package/dist/runtime/execution-event-bus.d.ts +38 -0
- package/dist/runtime/execution-event-bus.d.ts.map +1 -0
- package/dist/runtime/execution-event-bus.js +87 -0
- package/dist/runtime/execution-event-bus.js.map +1 -0
- package/dist/runtime/types.d.ts +129 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +5 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/workflow-runtime.d.ts +256 -0
- package/dist/runtime/workflow-runtime.d.ts.map +1 -0
- package/dist/runtime/workflow-runtime.js +699 -0
- package/dist/runtime/workflow-runtime.js.map +1 -0
- package/dist/steps/base-step.d.ts +204 -0
- package/dist/steps/base-step.d.ts.map +1 -0
- package/dist/steps/base-step.js +69 -0
- package/dist/steps/base-step.js.map +1 -0
- package/dist/steps/builtin/code.step.d.ts +95 -0
- package/dist/steps/builtin/code.step.d.ts.map +1 -0
- package/dist/steps/builtin/code.step.js +122 -0
- package/dist/steps/builtin/code.step.js.map +1 -0
- package/dist/steps/builtin/conditional.step.d.ts +146 -0
- package/dist/steps/builtin/conditional.step.d.ts.map +1 -0
- package/dist/steps/builtin/conditional.step.js +71 -0
- package/dist/steps/builtin/conditional.step.js.map +1 -0
- package/dist/steps/builtin/dedup.step.d.ts +65 -0
- package/dist/steps/builtin/dedup.step.d.ts.map +1 -0
- package/dist/steps/builtin/dedup.step.js +61 -0
- package/dist/steps/builtin/dedup.step.js.map +1 -0
- package/dist/steps/builtin/http-request.step.d.ts +928 -0
- package/dist/steps/builtin/http-request.step.d.ts.map +1 -0
- package/dist/steps/builtin/http-request.step.js +570 -0
- package/dist/steps/builtin/http-request.step.js.map +1 -0
- package/dist/steps/builtin/loop.step.d.ts +100 -0
- package/dist/steps/builtin/loop.step.d.ts.map +1 -0
- package/dist/steps/builtin/loop.step.js +79 -0
- package/dist/steps/builtin/loop.step.js.map +1 -0
- package/dist/steps/builtin/parallel.step.d.ts +208 -0
- package/dist/steps/builtin/parallel.step.d.ts.map +1 -0
- package/dist/steps/builtin/parallel.step.js +249 -0
- package/dist/steps/builtin/parallel.step.js.map +1 -0
- package/dist/steps/builtin/switch.step.d.ts +200 -0
- package/dist/steps/builtin/switch.step.d.ts.map +1 -0
- package/dist/steps/builtin/switch.step.js +92 -0
- package/dist/steps/builtin/switch.step.js.map +1 -0
- package/dist/steps/builtin/transform.step.d.ts +247 -0
- package/dist/steps/builtin/transform.step.d.ts.map +1 -0
- package/dist/steps/builtin/transform.step.js +135 -0
- package/dist/steps/builtin/transform.step.js.map +1 -0
- package/dist/steps/builtin/wait.step.d.ts +921 -0
- package/dist/steps/builtin/wait.step.d.ts.map +1 -0
- package/dist/steps/builtin/wait.step.js +211 -0
- package/dist/steps/builtin/wait.step.js.map +1 -0
- package/dist/steps/step-registry.d.ts +64 -0
- package/dist/steps/step-registry.d.ts.map +1 -0
- package/dist/steps/step-registry.js +102 -0
- package/dist/steps/step-registry.js.map +1 -0
- package/dist/storage/in-memory-adapter.d.ts +25 -0
- package/dist/storage/in-memory-adapter.d.ts.map +1 -0
- package/dist/storage/in-memory-adapter.js +41 -0
- package/dist/storage/in-memory-adapter.js.map +1 -0
- package/dist/storage/types.d.ts +53 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +13 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-context.d.ts +13 -0
- package/dist/testing/mock-context.d.ts.map +1 -0
- package/dist/testing/mock-context.js +21 -0
- package/dist/testing/mock-context.js.map +1 -0
- package/dist/testing/mock-step-context.d.ts +47 -0
- package/dist/testing/mock-step-context.d.ts.map +1 -0
- package/dist/testing/mock-step-context.js +59 -0
- package/dist/testing/mock-step-context.js.map +1 -0
- package/dist/triggers/base-trigger.d.ts +58 -0
- package/dist/triggers/base-trigger.d.ts.map +1 -0
- package/dist/triggers/base-trigger.js +37 -0
- package/dist/triggers/base-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-cron-trigger.d.ts +44 -0
- package/dist/triggers/builtin/default-cron-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-cron-trigger.js +31 -0
- package/dist/triggers/builtin/default-cron-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-event-trigger.d.ts +32 -0
- package/dist/triggers/builtin/default-event-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-event-trigger.js +21 -0
- package/dist/triggers/builtin/default-event-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-manual-trigger.d.ts +119 -0
- package/dist/triggers/builtin/default-manual-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-manual-trigger.js +64 -0
- package/dist/triggers/builtin/default-manual-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-webhook-trigger.d.ts +72 -0
- package/dist/triggers/builtin/default-webhook-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-webhook-trigger.js +91 -0
- package/dist/triggers/builtin/default-webhook-trigger.js.map +1 -0
- package/dist/triggers/cron-trigger.d.ts +52 -0
- package/dist/triggers/cron-trigger.d.ts.map +1 -0
- package/dist/triggers/cron-trigger.js +15 -0
- package/dist/triggers/cron-trigger.js.map +1 -0
- package/dist/triggers/event-trigger.d.ts +14 -0
- package/dist/triggers/event-trigger.d.ts.map +1 -0
- package/dist/triggers/event-trigger.js +13 -0
- package/dist/triggers/event-trigger.js.map +1 -0
- package/dist/triggers/manual-trigger.d.ts +11 -0
- package/dist/triggers/manual-trigger.d.ts.map +1 -0
- package/dist/triggers/manual-trigger.js +10 -0
- package/dist/triggers/manual-trigger.js.map +1 -0
- package/dist/triggers/trigger-registry.d.ts +48 -0
- package/dist/triggers/trigger-registry.d.ts.map +1 -0
- package/dist/triggers/trigger-registry.js +81 -0
- package/dist/triggers/trigger-registry.js.map +1 -0
- package/dist/triggers/webhook-trigger.d.ts +54 -0
- package/dist/triggers/webhook-trigger.d.ts.map +1 -0
- package/dist/triggers/webhook-trigger.js +13 -0
- package/dist/triggers/webhook-trigger.js.map +1 -0
- package/dist/types/attachment.d.ts +23 -0
- package/dist/types/attachment.d.ts.map +1 -0
- package/dist/types/attachment.js +2 -0
- package/dist/types/attachment.js.map +1 -0
- package/dist/types/categories.d.ts +14 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +10 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/context.d.ts +61 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/known-types.d.ts +34 -0
- package/dist/types/known-types.d.ts.map +1 -0
- package/dist/types/known-types.js +49 -0
- package/dist/types/known-types.js.map +1 -0
- package/dist/types/operators.d.ts +20 -0
- package/dist/types/operators.d.ts.map +1 -0
- package/dist/types/operators.js +27 -0
- package/dist/types/operators.js.map +1 -0
- package/dist/types/pause-path.d.ts +23 -0
- package/dist/types/pause-path.d.ts.map +1 -0
- package/dist/types/pause-path.js +2 -0
- package/dist/types/pause-path.js.map +1 -0
- package/dist/types/pause-state.d.ts +100 -0
- package/dist/types/pause-state.d.ts.map +1 -0
- package/dist/types/pause-state.js +15 -0
- package/dist/types/pause-state.js.map +1 -0
- package/dist/types/resume-payload.d.ts +34 -0
- package/dist/types/resume-payload.d.ts.map +1 -0
- package/dist/types/resume-payload.js +12 -0
- package/dist/types/resume-payload.js.map +1 -0
- package/dist/types/status.d.ts +27 -0
- package/dist/types/status.d.ts.map +1 -0
- package/dist/types/status.js +41 -0
- package/dist/types/status.js.map +1 -0
- package/dist/types/step-events.d.ts +22 -0
- package/dist/types/step-events.d.ts.map +1 -0
- package/dist/types/step-events.js +8 -0
- package/dist/types/step-events.js.map +1 -0
- package/dist/types/step-types.d.ts +12 -0
- package/dist/types/step-types.d.ts.map +1 -0
- package/dist/types/step-types.js +2 -0
- package/dist/types/step-types.js.map +1 -0
- package/dist/types/trigger-types.d.ts +12 -0
- package/dist/types/trigger-types.d.ts.map +1 -0
- package/dist/types/trigger-types.js +2 -0
- package/dist/types/trigger-types.js.map +1 -0
- package/dist/types/validation.d.ts +19 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +11 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/types/workflow-config.d.ts +122 -0
- package/dist/types/workflow-config.d.ts.map +1 -0
- package/dist/types/workflow-config.js +71 -0
- package/dist/types/workflow-config.js.map +1 -0
- package/dist/util/executable-check.d.ts +42 -0
- package/dist/util/executable-check.d.ts.map +1 -0
- package/dist/util/executable-check.js +115 -0
- package/dist/util/executable-check.js.map +1 -0
- package/dist/util/schema-convert.d.ts +14 -0
- package/dist/util/schema-convert.d.ts.map +1 -0
- package/dist/util/schema-convert.js +16 -0
- package/dist/util/schema-convert.js.map +1 -0
- package/dist/util/variable-ref.d.ts +52 -0
- package/dist/util/variable-ref.d.ts.map +1 -0
- package/dist/util/variable-ref.js +89 -0
- package/dist/util/variable-ref.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory PersistenceAdapter for testing.
|
|
3
|
+
*
|
|
4
|
+
* All data lives in Maps — no external deps. Useful for unit tests
|
|
5
|
+
* and for hosts bootstrapping without a database.
|
|
6
|
+
*/
|
|
7
|
+
export class InMemoryPersistenceAdapter {
|
|
8
|
+
workflows = new Map();
|
|
9
|
+
executions = new Map();
|
|
10
|
+
executionStates = new Map();
|
|
11
|
+
/** Keyed by `${executionId}::${stepName}`. */
|
|
12
|
+
steps = new Map();
|
|
13
|
+
/** Keyed by `${workflowId}::${key}`. */
|
|
14
|
+
staticData = new Map();
|
|
15
|
+
/** Keyed by `${metadataKey}::${name}` — simplified for testing. */
|
|
16
|
+
credentials = new Map();
|
|
17
|
+
/** Keyed by `${executionId}::${stepName}`, stores ordered event arrays. */
|
|
18
|
+
stepEvents = new Map();
|
|
19
|
+
/** Keyed by workflowId. */
|
|
20
|
+
webhooks = new Map();
|
|
21
|
+
/** Reverse lookup: path → workflowId. */
|
|
22
|
+
webhooksByPath = new Map();
|
|
23
|
+
/** Keyed by executionId. */
|
|
24
|
+
resumePayloads = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* Per-workflow wait-callback secret. Keyed by workflowId; the secret
|
|
27
|
+
* also indexed in a reverse map for O(1) lookup at callback time.
|
|
28
|
+
*/
|
|
29
|
+
workflowCallbacks = new Map();
|
|
30
|
+
/** Reverse index: secret → workflowId. The Map.get hash IS the comparison. */
|
|
31
|
+
workflowCallbacksBySecret = new Map();
|
|
32
|
+
nextId = 1;
|
|
33
|
+
genId() {
|
|
34
|
+
return `id_${String(this.nextId++)}`;
|
|
35
|
+
}
|
|
36
|
+
// --- Workflow definitions ---
|
|
37
|
+
async getWorkflow(id) {
|
|
38
|
+
return this.workflows.get(id) ?? null;
|
|
39
|
+
}
|
|
40
|
+
async listWorkflows(_metadata) {
|
|
41
|
+
return Array.from(this.workflows.values());
|
|
42
|
+
}
|
|
43
|
+
async findActiveWorkflows(eventType, _metadata) {
|
|
44
|
+
return Array.from(this.workflows.values()).filter((w) => w.eventType === eventType && w.status === 'ACTIVE');
|
|
45
|
+
}
|
|
46
|
+
async createWorkflow(data) {
|
|
47
|
+
const id = data.id ?? this.genId();
|
|
48
|
+
const record = {
|
|
49
|
+
id,
|
|
50
|
+
status: data.status,
|
|
51
|
+
config: data.config,
|
|
52
|
+
metadata: data.metadata,
|
|
53
|
+
eventType: data.eventType,
|
|
54
|
+
};
|
|
55
|
+
this.workflows.set(id, record);
|
|
56
|
+
return id;
|
|
57
|
+
}
|
|
58
|
+
async updateWorkflow(id, data) {
|
|
59
|
+
const existing = this.workflows.get(id);
|
|
60
|
+
if (!existing)
|
|
61
|
+
throw new Error(`Workflow ${id} not found`);
|
|
62
|
+
if (data.status !== undefined)
|
|
63
|
+
existing.status = data.status;
|
|
64
|
+
if (data.config !== undefined)
|
|
65
|
+
existing.config = data.config;
|
|
66
|
+
if (data.metadata !== undefined)
|
|
67
|
+
existing.metadata = data.metadata;
|
|
68
|
+
if (data.eventType !== undefined)
|
|
69
|
+
existing.eventType = data.eventType;
|
|
70
|
+
}
|
|
71
|
+
// --- Execution lifecycle ---
|
|
72
|
+
async createExecution(data) {
|
|
73
|
+
const id = this.genId();
|
|
74
|
+
const record = {
|
|
75
|
+
id,
|
|
76
|
+
workflowId: data.workflowId,
|
|
77
|
+
status: data.status,
|
|
78
|
+
createdAt: new Date(),
|
|
79
|
+
};
|
|
80
|
+
if (data.sourceExecutionId !== undefined) {
|
|
81
|
+
record.sourceExecutionId = data.sourceExecutionId;
|
|
82
|
+
}
|
|
83
|
+
this.executions.set(id, record);
|
|
84
|
+
this.executionStates.set(id, {
|
|
85
|
+
context: data.context,
|
|
86
|
+
currentStepIndex: 0,
|
|
87
|
+
pausePath: null,
|
|
88
|
+
});
|
|
89
|
+
return id;
|
|
90
|
+
}
|
|
91
|
+
async updateExecutionStatus(executionId, status) {
|
|
92
|
+
const exec = this.executions.get(executionId);
|
|
93
|
+
if (exec) {
|
|
94
|
+
exec.status = status;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async getExecution(executionId) {
|
|
98
|
+
return this.executions.get(executionId) ?? null;
|
|
99
|
+
}
|
|
100
|
+
async listExecutions(params) {
|
|
101
|
+
let items = Array.from(this.executions.values());
|
|
102
|
+
if (params.workflowId) {
|
|
103
|
+
items = items.filter((e) => e.workflowId === params.workflowId);
|
|
104
|
+
}
|
|
105
|
+
if (params.status) {
|
|
106
|
+
items = items.filter((e) => e.status === params.status);
|
|
107
|
+
}
|
|
108
|
+
// Sort by createdAt descending (newest first)
|
|
109
|
+
items.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
|
|
110
|
+
// Cursor-based pagination: cursor is the execution ID after which to start
|
|
111
|
+
if (params.cursor) {
|
|
112
|
+
const idx = items.findIndex((e) => e.id === params.cursor);
|
|
113
|
+
if (idx >= 0) {
|
|
114
|
+
items = items.slice(idx + 1);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const limit = params.limit ?? 50;
|
|
118
|
+
const page = items.slice(0, limit);
|
|
119
|
+
const result = { items: page };
|
|
120
|
+
if (page.length === limit) {
|
|
121
|
+
result.nextCursor = page[page.length - 1].id;
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
// --- Execution state ---
|
|
126
|
+
async getExecutionState(executionId) {
|
|
127
|
+
return this.executionStates.get(executionId) ?? null;
|
|
128
|
+
}
|
|
129
|
+
async persistState(executionId, data) {
|
|
130
|
+
const existing = this.executionStates.get(executionId);
|
|
131
|
+
const next = {
|
|
132
|
+
context: data.context,
|
|
133
|
+
currentStepIndex: data.currentStepIndex ?? existing?.currentStepIndex ?? 0,
|
|
134
|
+
pausePath: data.pausePath ?? null,
|
|
135
|
+
};
|
|
136
|
+
if (data.pauseType !== undefined) {
|
|
137
|
+
next.pauseType = data.pauseType;
|
|
138
|
+
}
|
|
139
|
+
this.executionStates.set(executionId, next);
|
|
140
|
+
}
|
|
141
|
+
// --- Step tracking ---
|
|
142
|
+
async upsertStep(executionId, stepName, data) {
|
|
143
|
+
const key = `${executionId}::${stepName}`;
|
|
144
|
+
this.steps.set(key, {
|
|
145
|
+
stepName,
|
|
146
|
+
status: data.status,
|
|
147
|
+
executorType: data.executorType,
|
|
148
|
+
data: data.data ?? null,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
async getStepRows(executionId) {
|
|
152
|
+
const prefix = `${executionId}::`;
|
|
153
|
+
const result = [];
|
|
154
|
+
for (const [key, value] of this.steps) {
|
|
155
|
+
if (key.startsWith(prefix)) {
|
|
156
|
+
result.push(value);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
async getStep(executionId, stepName) {
|
|
162
|
+
return this.steps.get(`${executionId}::${stepName}`) ?? null;
|
|
163
|
+
}
|
|
164
|
+
// --- Failure handling ---
|
|
165
|
+
async markFailed(executionId, _error) {
|
|
166
|
+
const exec = this.executions.get(executionId);
|
|
167
|
+
if (!exec)
|
|
168
|
+
return 'not-found';
|
|
169
|
+
if (exec.status === 'COMPLETED' || exec.status === 'FAILED') {
|
|
170
|
+
return 'skipped-terminal';
|
|
171
|
+
}
|
|
172
|
+
exec.status = 'FAILED';
|
|
173
|
+
return 'marked';
|
|
174
|
+
}
|
|
175
|
+
// --- Static data ---
|
|
176
|
+
async getStaticData(workflowId, key) {
|
|
177
|
+
return this.staticData.get(`${workflowId}::${key}`);
|
|
178
|
+
}
|
|
179
|
+
async setStaticData(workflowId, key, value) {
|
|
180
|
+
this.staticData.set(`${workflowId}::${key}`, value);
|
|
181
|
+
}
|
|
182
|
+
async deleteStaticData(workflowId, key) {
|
|
183
|
+
this.staticData.delete(`${workflowId}::${key}`);
|
|
184
|
+
}
|
|
185
|
+
// --- Step events ---
|
|
186
|
+
async appendStepEvent(executionId, stepName, event) {
|
|
187
|
+
const key = `${executionId}::${stepName}`;
|
|
188
|
+
let events = this.stepEvents.get(key);
|
|
189
|
+
if (!events) {
|
|
190
|
+
events = [];
|
|
191
|
+
this.stepEvents.set(key, events);
|
|
192
|
+
}
|
|
193
|
+
events.push({
|
|
194
|
+
id: this.genId(),
|
|
195
|
+
type: event.type,
|
|
196
|
+
data: event.data,
|
|
197
|
+
createdAt: new Date(),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
async getStepEvents(executionId, stepName, after) {
|
|
201
|
+
const key = `${executionId}::${stepName}`;
|
|
202
|
+
const events = this.stepEvents.get(key) ?? [];
|
|
203
|
+
if (after) {
|
|
204
|
+
return events.filter((e) => e.createdAt > after);
|
|
205
|
+
}
|
|
206
|
+
return [...events];
|
|
207
|
+
}
|
|
208
|
+
// --- Credentials ---
|
|
209
|
+
async resolveCredential(_metadata, name) {
|
|
210
|
+
return this.credentials.get(name) ?? null;
|
|
211
|
+
}
|
|
212
|
+
async listCredentials(_metadata) {
|
|
213
|
+
return Array.from(this.credentials.entries()).map(([name, cred]) => ({
|
|
214
|
+
name,
|
|
215
|
+
type: cred.type,
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
async storeCredential(_metadata, name, credential) {
|
|
219
|
+
this.credentials.set(name, credential);
|
|
220
|
+
}
|
|
221
|
+
async deleteCredential(_metadata, name) {
|
|
222
|
+
this.credentials.delete(name);
|
|
223
|
+
}
|
|
224
|
+
// --- Webhook registration ---
|
|
225
|
+
async storeWebhookPath(workflowId, path, secret) {
|
|
226
|
+
const record = { workflowId, path, secret };
|
|
227
|
+
this.webhooks.set(workflowId, record);
|
|
228
|
+
this.webhooksByPath.set(path, workflowId);
|
|
229
|
+
}
|
|
230
|
+
async removeWebhookPath(workflowId) {
|
|
231
|
+
const existing = this.webhooks.get(workflowId);
|
|
232
|
+
if (existing) {
|
|
233
|
+
this.webhooksByPath.delete(existing.path);
|
|
234
|
+
this.webhooks.delete(workflowId);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async getWebhookByPath(path) {
|
|
238
|
+
const workflowId = this.webhooksByPath.get(path);
|
|
239
|
+
if (!workflowId)
|
|
240
|
+
return null;
|
|
241
|
+
return this.webhooks.get(workflowId) ?? null;
|
|
242
|
+
}
|
|
243
|
+
// --- Resume payload ---
|
|
244
|
+
async persistResumePayload(executionId, payload) {
|
|
245
|
+
this.resumePayloads.set(executionId, payload);
|
|
246
|
+
}
|
|
247
|
+
async getResumePayload(executionId) {
|
|
248
|
+
const payload = this.resumePayloads.get(executionId) ?? null;
|
|
249
|
+
if (payload) {
|
|
250
|
+
this.resumePayloads.delete(executionId);
|
|
251
|
+
}
|
|
252
|
+
return payload;
|
|
253
|
+
}
|
|
254
|
+
// --- Workflow callback secret ---
|
|
255
|
+
async storeWorkflowCallback(record) {
|
|
256
|
+
// If a previous secret existed for this workflow, evict it from the
|
|
257
|
+
// reverse index so the old URL stops working immediately.
|
|
258
|
+
const existing = this.workflowCallbacks.get(record.workflowId);
|
|
259
|
+
if (existing) {
|
|
260
|
+
this.workflowCallbacksBySecret.delete(existing.secret);
|
|
261
|
+
}
|
|
262
|
+
this.workflowCallbacks.set(record.workflowId, record);
|
|
263
|
+
this.workflowCallbacksBySecret.set(record.secret, record.workflowId);
|
|
264
|
+
}
|
|
265
|
+
async getWorkflowCallbackBySecret(secret) {
|
|
266
|
+
const workflowId = this.workflowCallbacksBySecret.get(secret);
|
|
267
|
+
if (!workflowId)
|
|
268
|
+
return null;
|
|
269
|
+
return this.workflowCallbacks.get(workflowId) ?? null;
|
|
270
|
+
}
|
|
271
|
+
async getWorkflowCallback(workflowId) {
|
|
272
|
+
return this.workflowCallbacks.get(workflowId) ?? null;
|
|
273
|
+
}
|
|
274
|
+
async rotateWorkflowCallback(workflowId, newSecret) {
|
|
275
|
+
const record = {
|
|
276
|
+
workflowId,
|
|
277
|
+
secret: newSecret,
|
|
278
|
+
createdAt: new Date(),
|
|
279
|
+
};
|
|
280
|
+
await this.storeWorkflowCallback(record);
|
|
281
|
+
return record;
|
|
282
|
+
}
|
|
283
|
+
async removeWorkflowCallback(workflowId) {
|
|
284
|
+
const existing = this.workflowCallbacks.get(workflowId);
|
|
285
|
+
if (!existing)
|
|
286
|
+
return;
|
|
287
|
+
this.workflowCallbacks.delete(workflowId);
|
|
288
|
+
this.workflowCallbacksBySecret.delete(existing.secret);
|
|
289
|
+
}
|
|
290
|
+
// --- Test helpers ---
|
|
291
|
+
/** Seed a workflow record for testing. */
|
|
292
|
+
seedWorkflow(record) {
|
|
293
|
+
this.workflows.set(record.id, record);
|
|
294
|
+
}
|
|
295
|
+
/** Seed a credential for testing. */
|
|
296
|
+
seedCredential(name, cred) {
|
|
297
|
+
this.credentials.set(name, cred);
|
|
298
|
+
}
|
|
299
|
+
/** Clear all data. */
|
|
300
|
+
clear() {
|
|
301
|
+
this.workflows.clear();
|
|
302
|
+
this.executions.clear();
|
|
303
|
+
this.executionStates.clear();
|
|
304
|
+
this.steps.clear();
|
|
305
|
+
this.staticData.clear();
|
|
306
|
+
this.credentials.clear();
|
|
307
|
+
this.stepEvents.clear();
|
|
308
|
+
this.webhooks.clear();
|
|
309
|
+
this.webhooksByPath.clear();
|
|
310
|
+
this.resumePayloads.clear();
|
|
311
|
+
this.workflowCallbacks.clear();
|
|
312
|
+
this.workflowCallbacksBySecret.clear();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=in-memory-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-adapter.js","sourceRoot":"","sources":["../../src/persistence/in-memory-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence interfaces for the workflow SDK.
|
|
3
|
+
*
|
|
4
|
+
* The runtime depends on these abstractions — hosts provide concrete
|
|
5
|
+
* implementations (Prisma, MongoDB, in-memory for testing, etc.).
|
|
6
|
+
*/
|
|
7
|
+
import type { ResumePayload } from '../common/resume-payload.js';
|
|
8
|
+
/** What the engine stores about a workflow definition. */
|
|
9
|
+
export interface WorkflowRecord {
|
|
10
|
+
id: string;
|
|
11
|
+
status: string;
|
|
12
|
+
/** JSON string — the full WorkflowConfig (trigger + steps + settings). */
|
|
13
|
+
config: string | null;
|
|
14
|
+
/** JSON string — host-defined metadata (description, name, etc.). */
|
|
15
|
+
metadata: string | null;
|
|
16
|
+
/** Maps to trigger type for event routing. */
|
|
17
|
+
eventType: string;
|
|
18
|
+
}
|
|
19
|
+
/** Webhook registration for a workflow. */
|
|
20
|
+
export interface WebhookRecord {
|
|
21
|
+
workflowId: string;
|
|
22
|
+
/** URL path segment (e.g. '/webhooks/<workflowId>/<secret>'). */
|
|
23
|
+
path: string;
|
|
24
|
+
secret: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Stable wait-callback secret bound to a workflow.
|
|
28
|
+
*
|
|
29
|
+
* One row per workflow. The secret is generated at workflow create and
|
|
30
|
+
* remains stable across executions so authors can paste a single URL
|
|
31
|
+
* template into their external system's configuration:
|
|
32
|
+
*
|
|
33
|
+
* POST {baseUrl}/wait/callback/{secret}/{executionId}
|
|
34
|
+
*
|
|
35
|
+
* The external system substitutes the per-execution `executionId` from
|
|
36
|
+
* whatever correlation token the workflow's HTTP step gave it. The runtime
|
|
37
|
+
* resolves `secret → workflowId` via this table, validates the execution
|
|
38
|
+
* belongs to that workflow, finds the paused step, and resumes.
|
|
39
|
+
*
|
|
40
|
+
* Mirrors the trigger-webhook security model: secret IS the lookup key,
|
|
41
|
+
* `Map.get` returns null on mismatch, no distinction leaked.
|
|
42
|
+
*/
|
|
43
|
+
export interface WorkflowCallbackRecord {
|
|
44
|
+
workflowId: string;
|
|
45
|
+
/** 192-bit hex string. Primary lookup key — the URL's bearer credential. */
|
|
46
|
+
secret: string;
|
|
47
|
+
createdAt: Date;
|
|
48
|
+
}
|
|
49
|
+
/** What the engine stores per execution run. */
|
|
50
|
+
export interface ExecutionRecord {
|
|
51
|
+
id: string;
|
|
52
|
+
workflowId: string;
|
|
53
|
+
status: string;
|
|
54
|
+
createdAt: Date;
|
|
55
|
+
/** Set when this execution was created via `rerunFromStep()` — links to the source. */
|
|
56
|
+
sourceExecutionId?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Why the execution is paused.
|
|
60
|
+
* - `step`: a step called `ctx.pause()` mid-execution (tool approval, input required, etc.)
|
|
61
|
+
* - `review`: the step completed successfully but `onComplete: 'review'` gated advancement
|
|
62
|
+
*
|
|
63
|
+
* Determines the resume path: `step` resumes via `onResume`, `review` either advances
|
|
64
|
+
* (approve) or re-executes the step (retry with feedback).
|
|
65
|
+
*/
|
|
66
|
+
export type ExecutionPauseType = 'step' | 'review';
|
|
67
|
+
/** Execution state — separate from execution for size (context can be multi-MB). */
|
|
68
|
+
export interface ExecutionStateRecord {
|
|
69
|
+
/** JSON string — full WorkflowContext snapshot. */
|
|
70
|
+
context: string | null;
|
|
71
|
+
currentStepIndex: number;
|
|
72
|
+
/** JSON string — PausePath for nested pause/resume. */
|
|
73
|
+
pausePath: string | null;
|
|
74
|
+
/** Why the execution is paused. Absent for non-paused executions. */
|
|
75
|
+
pauseType?: ExecutionPauseType;
|
|
76
|
+
}
|
|
77
|
+
/** Per-step tracking within an execution. */
|
|
78
|
+
export interface StepRecord {
|
|
79
|
+
stepName: string;
|
|
80
|
+
status: string;
|
|
81
|
+
executorType: string;
|
|
82
|
+
/** JSON string — { type, input?, output, error?, statePatch? }. */
|
|
83
|
+
data: string | null;
|
|
84
|
+
}
|
|
85
|
+
export interface PersistenceAdapter {
|
|
86
|
+
getWorkflow(id: string): Promise<WorkflowRecord | null>;
|
|
87
|
+
listWorkflows(metadata: Record<string, unknown>): Promise<WorkflowRecord[]>;
|
|
88
|
+
findActiveWorkflows(eventType: string, metadata: Record<string, unknown>): Promise<WorkflowRecord[]>;
|
|
89
|
+
/** Create a new workflow definition. Returns the assigned workflow ID. */
|
|
90
|
+
createWorkflow(data: {
|
|
91
|
+
id?: string;
|
|
92
|
+
status: string;
|
|
93
|
+
config: string;
|
|
94
|
+
metadata: string;
|
|
95
|
+
eventType: string;
|
|
96
|
+
}): Promise<string>;
|
|
97
|
+
/** Update an existing workflow definition. */
|
|
98
|
+
updateWorkflow(id: string, data: {
|
|
99
|
+
status?: string;
|
|
100
|
+
config?: string;
|
|
101
|
+
metadata?: string;
|
|
102
|
+
eventType?: string;
|
|
103
|
+
}): Promise<void>;
|
|
104
|
+
createExecution(data: {
|
|
105
|
+
workflowId: string;
|
|
106
|
+
status: string;
|
|
107
|
+
/** Initial WorkflowContext as JSON. */
|
|
108
|
+
context: string;
|
|
109
|
+
/** Source execution this run was derived from (rerun). */
|
|
110
|
+
sourceExecutionId?: string;
|
|
111
|
+
}): Promise<string>;
|
|
112
|
+
updateExecutionStatus(executionId: string, status: string): Promise<void>;
|
|
113
|
+
getExecution(executionId: string): Promise<ExecutionRecord | null>;
|
|
114
|
+
listExecutions(params: {
|
|
115
|
+
workflowId?: string;
|
|
116
|
+
status?: string;
|
|
117
|
+
limit?: number;
|
|
118
|
+
cursor?: string;
|
|
119
|
+
}): Promise<{
|
|
120
|
+
items: ExecutionRecord[];
|
|
121
|
+
nextCursor?: string;
|
|
122
|
+
}>;
|
|
123
|
+
getExecutionState(executionId: string): Promise<ExecutionStateRecord | null>;
|
|
124
|
+
persistState(executionId: string, data: {
|
|
125
|
+
context: string;
|
|
126
|
+
currentStepIndex?: number;
|
|
127
|
+
pausePath?: string;
|
|
128
|
+
pauseType?: ExecutionPauseType;
|
|
129
|
+
}): Promise<void>;
|
|
130
|
+
upsertStep(executionId: string, stepName: string, data: {
|
|
131
|
+
status: string;
|
|
132
|
+
executorType: string;
|
|
133
|
+
data?: string;
|
|
134
|
+
}): Promise<void>;
|
|
135
|
+
getStepRows(executionId: string): Promise<StepRecord[]>;
|
|
136
|
+
getStep(executionId: string, stepName: string): Promise<StepRecord | null>;
|
|
137
|
+
markFailed(executionId: string, error: string): Promise<'marked' | 'skipped-terminal' | 'not-found'>;
|
|
138
|
+
getStaticData(workflowId: string, key: string): Promise<unknown>;
|
|
139
|
+
setStaticData(workflowId: string, key: string, value: unknown): Promise<void>;
|
|
140
|
+
deleteStaticData(workflowId: string, key: string): Promise<void>;
|
|
141
|
+
appendStepEvent(executionId: string, stepName: string, event: {
|
|
142
|
+
type: string;
|
|
143
|
+
data: string;
|
|
144
|
+
}): Promise<void>;
|
|
145
|
+
getStepEvents(executionId: string, stepName: string, after?: Date): Promise<Array<{
|
|
146
|
+
id: string;
|
|
147
|
+
type: string;
|
|
148
|
+
data: string;
|
|
149
|
+
createdAt: Date;
|
|
150
|
+
}>>;
|
|
151
|
+
resolveCredential(metadata: Record<string, unknown>, name: string): Promise<{
|
|
152
|
+
type: string;
|
|
153
|
+
data: Record<string, unknown>;
|
|
154
|
+
} | null>;
|
|
155
|
+
listCredentials(metadata: Record<string, unknown>): Promise<Array<{
|
|
156
|
+
name: string;
|
|
157
|
+
type: string;
|
|
158
|
+
}>>;
|
|
159
|
+
storeCredential(metadata: Record<string, unknown>, name: string, credential: {
|
|
160
|
+
type: string;
|
|
161
|
+
data: Record<string, unknown>;
|
|
162
|
+
}): Promise<void>;
|
|
163
|
+
deleteCredential(metadata: Record<string, unknown>, name: string): Promise<void>;
|
|
164
|
+
/** Store a webhook path+secret for a workflow. */
|
|
165
|
+
storeWebhookPath(workflowId: string, path: string, secret: string): Promise<void>;
|
|
166
|
+
/** Remove the webhook registration for a workflow. */
|
|
167
|
+
removeWebhookPath(workflowId: string): Promise<void>;
|
|
168
|
+
/** Look up which workflow owns a given webhook path. */
|
|
169
|
+
getWebhookByPath(path: string): Promise<WebhookRecord | null>;
|
|
170
|
+
/** Store a resume payload for a paused execution. */
|
|
171
|
+
persistResumePayload(executionId: string, payload: ResumePayload): Promise<void>;
|
|
172
|
+
/** Retrieve and consume the resume payload (returns null if none). */
|
|
173
|
+
getResumePayload(executionId: string): Promise<ResumePayload | null>;
|
|
174
|
+
/**
|
|
175
|
+
* Store the workflow's callback secret. Called at workflow create / save
|
|
176
|
+
* so the UI can show a stable URL the author pastes into their external
|
|
177
|
+
* system. Mirrors {@link storeWebhookPath} — secret is the URL bearer
|
|
178
|
+
* credential AND the lookup key.
|
|
179
|
+
*/
|
|
180
|
+
storeWorkflowCallback(record: WorkflowCallbackRecord): Promise<void>;
|
|
181
|
+
/**
|
|
182
|
+
* Look up the workflow that owns a callback secret. Returns null on
|
|
183
|
+
* mismatch — same semantics as {@link getWebhookByPath}, no distinction
|
|
184
|
+
* leaked between "wrong secret" and "no such workflow."
|
|
185
|
+
*/
|
|
186
|
+
getWorkflowCallbackBySecret(secret: string): Promise<WorkflowCallbackRecord | null>;
|
|
187
|
+
/**
|
|
188
|
+
* Look up a workflow's callback record by workflow id. Used when the UI
|
|
189
|
+
* needs to display the URL template.
|
|
190
|
+
*/
|
|
191
|
+
getWorkflowCallback(workflowId: string): Promise<WorkflowCallbackRecord | null>;
|
|
192
|
+
/**
|
|
193
|
+
* Replace the current secret with a new one. Returns the new record.
|
|
194
|
+
* Used by the rotate-secret UI affordance after a leak.
|
|
195
|
+
*/
|
|
196
|
+
rotateWorkflowCallback(workflowId: string, newSecret: string): Promise<WorkflowCallbackRecord>;
|
|
197
|
+
/**
|
|
198
|
+
* Remove the callback registration. Called when the workflow itself is
|
|
199
|
+
* deleted (not on deactivate — the URL stays stable across activation
|
|
200
|
+
* cycles so external configurations don't break).
|
|
201
|
+
*/
|
|
202
|
+
removeWorkflowCallback(workflowId: string): Promise<void>;
|
|
203
|
+
}
|
|
204
|
+
export interface QueueAdapter {
|
|
205
|
+
enqueue(data: {
|
|
206
|
+
executionId: string;
|
|
207
|
+
delay?: number;
|
|
208
|
+
}): Promise<void>;
|
|
209
|
+
}
|
|
210
|
+
export interface SchedulerAdapter {
|
|
211
|
+
schedule(workflowId: string, cronExpression: string, timezone?: string): Promise<void>;
|
|
212
|
+
unschedule(workflowId: string): Promise<void>;
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/persistence/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/persistence/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Router types — framework-agnostic request/response abstractions.
|
|
3
|
+
*
|
|
4
|
+
* The router produces plain handler functions. The host maps them to their
|
|
5
|
+
* HTTP framework (Express, Fastify, Hono, etc.) with minimal glue code.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Extracted from the request by the host's `authenticate` function.
|
|
9
|
+
* The router passes this to every handler.
|
|
10
|
+
*/
|
|
11
|
+
export interface AuthContext {
|
|
12
|
+
userId: string;
|
|
13
|
+
/** Host-defined metadata — workspaceId, tenantId, etc. */
|
|
14
|
+
metadata: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
export interface RouterOptions {
|
|
17
|
+
/**
|
|
18
|
+
* Extract auth context from request headers/cookies.
|
|
19
|
+
* Throw to reject the request (the router will catch and return 401).
|
|
20
|
+
*/
|
|
21
|
+
authenticate: (headers: Record<string, string | string[] | undefined>) => AuthContext | Promise<AuthContext>;
|
|
22
|
+
}
|
|
23
|
+
/** The shape every route handler returns. */
|
|
24
|
+
export interface RouteResponse {
|
|
25
|
+
status: number;
|
|
26
|
+
body: unknown;
|
|
27
|
+
headers?: Record<string, string>;
|
|
28
|
+
/** If present, the host should stream this as SSE instead of sending body as JSON. */
|
|
29
|
+
stream?: AsyncIterable<string>;
|
|
30
|
+
}
|
|
31
|
+
/** Parsed request data passed to handlers. */
|
|
32
|
+
export interface RouteRequest {
|
|
33
|
+
params: Record<string, string>;
|
|
34
|
+
query: Record<string, string | string[] | undefined>;
|
|
35
|
+
body: unknown;
|
|
36
|
+
headers: Record<string, string | string[] | undefined>;
|
|
37
|
+
/**
|
|
38
|
+
* Populated by the host's multipart parser for file-upload routes.
|
|
39
|
+
* The framework never parses multipart itself — the host's middleware
|
|
40
|
+
* (multer, @fastify/multipart, Hono's parseBody, etc.) runs first and
|
|
41
|
+
* fills this array before the route handler is invoked.
|
|
42
|
+
*/
|
|
43
|
+
files?: Array<{
|
|
44
|
+
name: string;
|
|
45
|
+
mimeType: string;
|
|
46
|
+
bytes: Uint8Array;
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
/** A single route definition. */
|
|
50
|
+
export interface RouteDefinition {
|
|
51
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
52
|
+
path: string;
|
|
53
|
+
/** Whether this route requires authentication. Defaults to true. */
|
|
54
|
+
authenticated?: boolean;
|
|
55
|
+
handler: (req: RouteRequest, auth: AuthContext | null) => Promise<RouteResponse>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAID,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9G;AAID,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,sFAAsF;IACtF,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAChC;AAED,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACrD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD;;;;;OAKG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,iCAAiC;AACjC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,CACP,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,WAAW,GAAG,IAAI,KACrB,OAAO,CAAC,aAAa,CAAC,CAAC;CAC7B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Router types — framework-agnostic request/response abstractions.
|
|
3
|
+
*
|
|
4
|
+
* The router produces plain handler functions. The host maps them to their
|
|
5
|
+
* HTTP framework (Express, Fastify, Hono, etc.) with minimal glue code.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|