@ironflow/node 0.20.2 → 0.21.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/dist/agent/agent.d.ts +60 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +133 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/approve.d.ts +23 -0
- package/dist/agent/approve.d.ts.map +1 -0
- package/dist/agent/approve.js +42 -0
- package/dist/agent/approve.js.map +1 -0
- package/dist/agent/dispatch.d.ts +63 -0
- package/dist/agent/dispatch.d.ts.map +1 -0
- package/dist/agent/dispatch.js +130 -0
- package/dist/agent/dispatch.js.map +1 -0
- package/dist/agent/errors.d.ts +90 -0
- package/dist/agent/errors.d.ts.map +1 -0
- package/dist/agent/errors.js +136 -0
- package/dist/agent/errors.js.map +1 -0
- package/dist/agent/index.d.ts +35 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +32 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/internal-registry.d.ts +27 -0
- package/dist/agent/internal-registry.d.ts.map +1 -0
- package/dist/agent/internal-registry.js +36 -0
- package/dist/agent/internal-registry.js.map +1 -0
- package/dist/agent/internal.d.ts +24 -0
- package/dist/agent/internal.d.ts.map +1 -0
- package/dist/agent/internal.js +29 -0
- package/dist/agent/internal.js.map +1 -0
- package/dist/agent/llm.d.ts +39 -0
- package/dist/agent/llm.d.ts.map +1 -0
- package/dist/agent/llm.js +59 -0
- package/dist/agent/llm.js.map +1 -0
- package/dist/agent/mcp.d.ts +51 -0
- package/dist/agent/mcp.d.ts.map +1 -0
- package/dist/agent/mcp.js +155 -0
- package/dist/agent/mcp.js.map +1 -0
- package/dist/agent/memory.d.ts +74 -0
- package/dist/agent/memory.d.ts.map +1 -0
- package/dist/agent/memory.js +130 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/spawn.d.ts +20 -0
- package/dist/agent/spawn.d.ts.map +1 -0
- package/dist/agent/spawn.js +29 -0
- package/dist/agent/spawn.js.map +1 -0
- package/dist/agent/tool.d.ts +39 -0
- package/dist/agent/tool.d.ts.map +1 -0
- package/dist/agent/tool.js +103 -0
- package/dist/agent/tool.js.map +1 -0
- package/dist/agent/types.d.ts +363 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +9 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/client.d.ts +942 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +1557 -0
- package/dist/client.js.map +1 -0
- package/dist/command-dedup.d.ts +61 -0
- package/dist/command-dedup.d.ts.map +1 -0
- package/dist/command-dedup.js +129 -0
- package/dist/command-dedup.js.map +1 -0
- package/dist/config-client.d.ts +58 -0
- package/dist/config-client.d.ts.map +1 -0
- package/dist/config-client.js +171 -0
- package/dist/config-client.js.map +1 -0
- package/dist/function.d.ts +53 -0
- package/dist/function.d.ts.map +1 -0
- package/dist/function.js +72 -0
- package/dist/function.js.map +1 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/assert-defined.d.ts +10 -0
- package/dist/internal/assert-defined.d.ts.map +1 -0
- package/dist/internal/assert-defined.js +15 -0
- package/dist/internal/assert-defined.js.map +1 -0
- package/dist/internal/context.d.ts +142 -0
- package/dist/internal/context.d.ts.map +1 -0
- package/dist/internal/context.js +306 -0
- package/dist/internal/context.js.map +1 -0
- package/dist/internal/errors.d.ts +66 -0
- package/dist/internal/errors.d.ts.map +1 -0
- package/dist/internal/errors.js +29 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/run-context.d.ts +10 -0
- package/dist/internal/run-context.d.ts.map +1 -0
- package/dist/internal/run-context.js +23 -0
- package/dist/internal/run-context.js.map +1 -0
- package/dist/kv.d.ts +86 -0
- package/dist/kv.d.ts.map +1 -0
- package/dist/kv.js +261 -0
- package/dist/kv.js.map +1 -0
- package/dist/projection-runner.d.ts +83 -0
- package/dist/projection-runner.d.ts.map +1 -0
- package/dist/projection-runner.js +498 -0
- package/dist/projection-runner.js.map +1 -0
- package/dist/projection.d.ts +36 -0
- package/dist/projection.d.ts.map +1 -0
- package/dist/projection.js +55 -0
- package/dist/projection.js.map +1 -0
- package/dist/secrets.d.ts +6 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +19 -0
- package/dist/secrets.js.map +1 -0
- package/dist/serve.d.ts +71 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +460 -0
- package/dist/serve.js.map +1 -0
- package/dist/step.d.ts +18 -0
- package/dist/step.d.ts.map +1 -0
- package/dist/step.js +581 -0
- package/dist/step.js.map +1 -0
- package/dist/subscribe.d.ts +164 -0
- package/dist/subscribe.d.ts.map +1 -0
- package/dist/subscribe.js +487 -0
- package/dist/subscribe.js.map +1 -0
- package/dist/test/index.d.ts +22 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +112 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/test-step.d.ts +21 -0
- package/dist/test/test-step.d.ts.map +1 -0
- package/dist/test/test-step.js +83 -0
- package/dist/test/test-step.js.map +1 -0
- package/dist/types.d.ts +108 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/dist/webhook.d.ts +22 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +23 -0
- package/dist/webhook.js.map +1 -0
- package/dist/worker-streaming.d.ts +17 -0
- package/dist/worker-streaming.d.ts.map +1 -0
- package/dist/worker-streaming.js +510 -0
- package/dist/worker-streaming.js.map +1 -0
- package/dist/worker.d.ts +28 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +559 -0
- package/dist/worker.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AnyIronflowFunction } from "@ironflow/core";
|
|
2
|
+
import { type TestStep } from "./test-step.js";
|
|
3
|
+
export interface TestClientConfig {
|
|
4
|
+
functions: AnyIronflowFunction[];
|
|
5
|
+
}
|
|
6
|
+
export interface TestRun {
|
|
7
|
+
status: "completed" | "failed";
|
|
8
|
+
steps: TestStep[];
|
|
9
|
+
output: unknown;
|
|
10
|
+
error?: Error;
|
|
11
|
+
compensationsRan: string[];
|
|
12
|
+
stepOutput(name: string): unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface TestClient {
|
|
15
|
+
mockStep(name: string, fn: () => unknown): void;
|
|
16
|
+
mockInvoke(functionId: string, fn: (data: unknown) => unknown): void;
|
|
17
|
+
sendEvent(eventName: string, data: unknown): void;
|
|
18
|
+
emit(eventName: string, data: unknown): Promise<TestRun>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createTestClient(config: TestClientConfig): TestClient;
|
|
21
|
+
export type { TestStep };
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EAKpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;IAChD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI,CAAC;IACrE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CA6GrE;AAsBD,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { createTestStepClient, } from "./test-step.js";
|
|
2
|
+
export function createTestClient(config) {
|
|
3
|
+
const stepMocks = new Map();
|
|
4
|
+
const invokeMocks = new Map();
|
|
5
|
+
const eventQueue = new Map();
|
|
6
|
+
// Index functions by trigger event
|
|
7
|
+
const functionsByEvent = new Map();
|
|
8
|
+
for (const fn of config.functions) {
|
|
9
|
+
for (const trigger of fn.config.triggers) {
|
|
10
|
+
const existing = functionsByEvent.get(trigger.event) ?? [];
|
|
11
|
+
existing.push(fn);
|
|
12
|
+
functionsByEvent.set(trigger.event, existing);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
mockStep(name, fn) {
|
|
17
|
+
stepMocks.set(name, fn);
|
|
18
|
+
},
|
|
19
|
+
mockInvoke(functionId, fn) {
|
|
20
|
+
invokeMocks.set(functionId, fn);
|
|
21
|
+
},
|
|
22
|
+
sendEvent(eventName, data) {
|
|
23
|
+
const existing = eventQueue.get(eventName) ?? [];
|
|
24
|
+
existing.push(data);
|
|
25
|
+
eventQueue.set(eventName, existing);
|
|
26
|
+
},
|
|
27
|
+
async emit(eventName, data) {
|
|
28
|
+
const fns = functionsByEvent.get(eventName);
|
|
29
|
+
if (!fns || fns.length === 0) {
|
|
30
|
+
throw new Error(`No function registered for event "${eventName}". ` +
|
|
31
|
+
`Check that your function has a trigger for this event.`);
|
|
32
|
+
}
|
|
33
|
+
const fn = fns[0];
|
|
34
|
+
const registries = { stepMocks, invokeMocks, eventQueue };
|
|
35
|
+
const state = { steps: [], compensations: [] };
|
|
36
|
+
const step = createTestStepClient(registries, state);
|
|
37
|
+
const event = {
|
|
38
|
+
id: `test-evt-${Date.now()}`,
|
|
39
|
+
name: eventName,
|
|
40
|
+
version: 1,
|
|
41
|
+
data,
|
|
42
|
+
timestamp: new Date(),
|
|
43
|
+
};
|
|
44
|
+
const noopLogger = {
|
|
45
|
+
debug: () => { },
|
|
46
|
+
info: () => { },
|
|
47
|
+
warn: () => { },
|
|
48
|
+
error: () => { },
|
|
49
|
+
};
|
|
50
|
+
const noopSecrets = {
|
|
51
|
+
get(name) {
|
|
52
|
+
throw new Error(`Secret "${name}" not available in test mode`);
|
|
53
|
+
},
|
|
54
|
+
has() {
|
|
55
|
+
return false;
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
const ctx = {
|
|
59
|
+
event,
|
|
60
|
+
step,
|
|
61
|
+
run: {
|
|
62
|
+
id: `test-run-${Date.now()}`,
|
|
63
|
+
functionId: fn.config.id,
|
|
64
|
+
attempt: 1,
|
|
65
|
+
startedAt: new Date(),
|
|
66
|
+
},
|
|
67
|
+
logger: noopLogger,
|
|
68
|
+
secrets: noopSecrets,
|
|
69
|
+
};
|
|
70
|
+
try {
|
|
71
|
+
const output = await fn.handler(ctx);
|
|
72
|
+
return buildTestRun("completed", state.steps, output, undefined, []);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
76
|
+
// Run compensations in reverse order
|
|
77
|
+
const compensationsRan = [];
|
|
78
|
+
const reversed = [...state.compensations].reverse();
|
|
79
|
+
for (const { stepName, fn: compFn } of reversed) {
|
|
80
|
+
try {
|
|
81
|
+
await compFn();
|
|
82
|
+
compensationsRan.push(stepName);
|
|
83
|
+
state.steps.push({ name: `compensate:${stepName}`, type: "compensate" });
|
|
84
|
+
}
|
|
85
|
+
catch (compErr) {
|
|
86
|
+
compensationsRan.push(stepName);
|
|
87
|
+
state.steps.push({
|
|
88
|
+
name: `compensate:${stepName}`,
|
|
89
|
+
type: "compensate",
|
|
90
|
+
error: compErr instanceof Error ? compErr : new Error(String(compErr)),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return buildTestRun("failed", state.steps, undefined, err, compensationsRan);
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function buildTestRun(status, steps, output, error, compensationsRan) {
|
|
100
|
+
return {
|
|
101
|
+
status,
|
|
102
|
+
steps,
|
|
103
|
+
output,
|
|
104
|
+
error,
|
|
105
|
+
compensationsRan,
|
|
106
|
+
stepOutput(name) {
|
|
107
|
+
const s = steps.find((step) => step.name === name);
|
|
108
|
+
return s?.output;
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { StepClient } from "@ironflow/core";
|
|
2
|
+
export interface TestStep {
|
|
3
|
+
name: string;
|
|
4
|
+
type: "run" | "invoke" | "sleep" | "waitForEvent" | "compensate";
|
|
5
|
+
output?: unknown;
|
|
6
|
+
error?: Error;
|
|
7
|
+
}
|
|
8
|
+
export interface TestStepRegistries {
|
|
9
|
+
stepMocks: Map<string, () => unknown>;
|
|
10
|
+
invokeMocks: Map<string, (data: unknown) => unknown>;
|
|
11
|
+
eventQueue: Map<string, unknown[]>;
|
|
12
|
+
}
|
|
13
|
+
export interface TestStepState {
|
|
14
|
+
steps: TestStep[];
|
|
15
|
+
compensations: Array<{
|
|
16
|
+
stepName: string;
|
|
17
|
+
fn: () => Promise<void>;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createTestStepClient(registries: TestStepRegistries, state: TestStepState): StepClient;
|
|
21
|
+
//# sourceMappingURL=test-step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-step.d.ts","sourceRoot":"","sources":["../../src/test/test-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAMX,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,YAAY,CAAC;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC;IACtC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;IACrD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,aAAa,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,kBAAkB,EAC9B,KAAK,EAAE,aAAa,GACnB,UAAU,CAsHZ"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export function createTestStepClient(registries, state) {
|
|
2
|
+
const stepClient = {
|
|
3
|
+
async run(name, _fn) {
|
|
4
|
+
const mock = registries.stepMocks.get(name);
|
|
5
|
+
if (!mock) {
|
|
6
|
+
throw new Error(`Step "${name}" was called but has no mock. ` +
|
|
7
|
+
`Use t.mockStep("${name}", fn) to provide one.`);
|
|
8
|
+
}
|
|
9
|
+
const output = await Promise.resolve(mock());
|
|
10
|
+
state.steps.push({ name, type: "run", output });
|
|
11
|
+
return output;
|
|
12
|
+
},
|
|
13
|
+
async sleep(name, _duration) {
|
|
14
|
+
state.steps.push({ name, type: "sleep" });
|
|
15
|
+
},
|
|
16
|
+
async sleepUntil(name, _until) {
|
|
17
|
+
state.steps.push({ name, type: "sleep" });
|
|
18
|
+
},
|
|
19
|
+
async waitForEvent(name, filter) {
|
|
20
|
+
const events = registries.eventQueue.get(filter.event);
|
|
21
|
+
if (!events || events.length === 0) {
|
|
22
|
+
throw new Error(`step.waitForEvent("${name}") is waiting for "${filter.event}" ` +
|
|
23
|
+
`but no events were pre-registered. ` +
|
|
24
|
+
`Use t.sendEvent("${filter.event}", data) before calling t.emit().`);
|
|
25
|
+
}
|
|
26
|
+
const data = events.shift();
|
|
27
|
+
const event = {
|
|
28
|
+
id: `test-evt-${Date.now()}`,
|
|
29
|
+
name: filter.event,
|
|
30
|
+
version: 1,
|
|
31
|
+
data: data,
|
|
32
|
+
timestamp: new Date(),
|
|
33
|
+
};
|
|
34
|
+
state.steps.push({ name, type: "waitForEvent", output: event });
|
|
35
|
+
return event;
|
|
36
|
+
},
|
|
37
|
+
async parallel(_name, branches, _options) {
|
|
38
|
+
const results = [];
|
|
39
|
+
for (const branch of branches) {
|
|
40
|
+
const result = await branch(stepClient);
|
|
41
|
+
results.push(result);
|
|
42
|
+
}
|
|
43
|
+
return results;
|
|
44
|
+
},
|
|
45
|
+
async map(_name, items, fn, _options) {
|
|
46
|
+
const results = [];
|
|
47
|
+
for (let i = 0; i < items.length; i++) {
|
|
48
|
+
const result = await fn(items[i], stepClient, i);
|
|
49
|
+
results.push(result);
|
|
50
|
+
}
|
|
51
|
+
return results;
|
|
52
|
+
},
|
|
53
|
+
compensate(stepName, fn) {
|
|
54
|
+
state.compensations.push({ stepName, fn });
|
|
55
|
+
},
|
|
56
|
+
async invoke(functionId, input, _options) {
|
|
57
|
+
const mock = registries.invokeMocks.get(functionId);
|
|
58
|
+
if (!mock) {
|
|
59
|
+
throw new Error(`step.invoke("${functionId}") was called but has no mock. ` +
|
|
60
|
+
`Use t.mockInvoke("${functionId}", fn) to provide one.`);
|
|
61
|
+
}
|
|
62
|
+
const output = await Promise.resolve(mock(input));
|
|
63
|
+
state.steps.push({ name: functionId, type: "invoke", output });
|
|
64
|
+
return output;
|
|
65
|
+
},
|
|
66
|
+
async invokeAsync(functionId, input) {
|
|
67
|
+
const mock = registries.invokeMocks.get(functionId);
|
|
68
|
+
if (!mock) {
|
|
69
|
+
throw new Error(`step.invokeAsync("${functionId}") was called but has no mock. ` +
|
|
70
|
+
`Use t.mockInvoke("${functionId}", fn) to provide one.`);
|
|
71
|
+
}
|
|
72
|
+
await Promise.resolve(mock(input));
|
|
73
|
+
const runId = `test-run-${Date.now()}`;
|
|
74
|
+
state.steps.push({ name: functionId, type: "invoke", output: { runId } });
|
|
75
|
+
return { runId };
|
|
76
|
+
},
|
|
77
|
+
async publish(_topic, _data) {
|
|
78
|
+
return { eventId: `test-msg-${Date.now()}`, sequence: 0 };
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
return stepClient;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=test-step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-step.js","sourceRoot":"","sources":["../../src/test/test-step.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js-specific type definitions
|
|
3
|
+
*/
|
|
4
|
+
import type { AnyIronflowFunction, IronflowProjection, IronflowWebhook, Logger, FunctionConfig, EventDefinitionRegistry } from "@ironflow/core";
|
|
5
|
+
/**
|
|
6
|
+
* Configuration for the serve handler
|
|
7
|
+
*/
|
|
8
|
+
export interface ServeConfig {
|
|
9
|
+
/** Functions to serve */
|
|
10
|
+
functions: AnyIronflowFunction[];
|
|
11
|
+
/** Projections to register */
|
|
12
|
+
projections?: IronflowProjection[];
|
|
13
|
+
/** Signing key for webhook verification */
|
|
14
|
+
signingKey?: string;
|
|
15
|
+
/** Skip signature verification (dev only) */
|
|
16
|
+
skipVerification?: boolean;
|
|
17
|
+
/** Logger instance (or false to disable) */
|
|
18
|
+
logger?: Logger | false;
|
|
19
|
+
/** Target environment (default: IRONFLOW_ENV or "default") */
|
|
20
|
+
environment?: string;
|
|
21
|
+
/** Event definition registry for automatic upcasting of event data */
|
|
22
|
+
eventDefinitions?: EventDefinitionRegistry;
|
|
23
|
+
/** Ironflow server URL for emitting webhook events */
|
|
24
|
+
serverUrl?: string;
|
|
25
|
+
/** Webhook sources to handle */
|
|
26
|
+
webhooks?: IronflowWebhook[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Handler options for incoming requests
|
|
30
|
+
*/
|
|
31
|
+
export interface HandlerOptions {
|
|
32
|
+
/** Override signing key per-request */
|
|
33
|
+
signingKey?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Context available in the handler
|
|
37
|
+
*/
|
|
38
|
+
export interface HandlerContext {
|
|
39
|
+
/** Raw request body */
|
|
40
|
+
rawBody: string;
|
|
41
|
+
/** Signature from headers */
|
|
42
|
+
signature?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Configuration for pull mode worker
|
|
46
|
+
*/
|
|
47
|
+
export interface WorkerConfig {
|
|
48
|
+
/** Ironflow server URL */
|
|
49
|
+
serverUrl?: string;
|
|
50
|
+
/** Functions this worker handles */
|
|
51
|
+
functions: AnyIronflowFunction[];
|
|
52
|
+
/** Projections to register */
|
|
53
|
+
projections?: IronflowProjection[];
|
|
54
|
+
/** Maximum concurrent jobs (default: 10) */
|
|
55
|
+
maxConcurrentJobs?: number;
|
|
56
|
+
/** Heartbeat interval in ms (default: 30000) */
|
|
57
|
+
heartbeatInterval?: number;
|
|
58
|
+
/** Reconnect delay in ms (default: 5000) */
|
|
59
|
+
reconnectDelay?: number;
|
|
60
|
+
/** Worker labels for routing */
|
|
61
|
+
labels?: Record<string, string>;
|
|
62
|
+
/** Transport type: "polling" or "streaming" */
|
|
63
|
+
transport?: "polling" | "streaming";
|
|
64
|
+
/** Logger instance (or false to disable) */
|
|
65
|
+
logger?: Logger | false;
|
|
66
|
+
/** Target environment (default: IRONFLOW_ENV or "default") */
|
|
67
|
+
environment?: string;
|
|
68
|
+
/** Event definition registry for automatic upcasting of event data */
|
|
69
|
+
eventDefinitions?: EventDefinitionRegistry;
|
|
70
|
+
/** API key for authentication (default: IRONFLOW_API_KEY env var) */
|
|
71
|
+
apiKey?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Worker instance interface
|
|
75
|
+
*/
|
|
76
|
+
export interface Worker {
|
|
77
|
+
/** Start the worker (blocks until stopped) */
|
|
78
|
+
start(): Promise<void>;
|
|
79
|
+
/** Gracefully drain and stop */
|
|
80
|
+
drain(): Promise<void>;
|
|
81
|
+
/** Force stop immediately */
|
|
82
|
+
stop(): void;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create function configuration helper
|
|
86
|
+
*/
|
|
87
|
+
export interface CreateFunctionConfig<TEvent = unknown> extends Omit<FunctionConfig<import("zod").ZodType>, 'schema'> {
|
|
88
|
+
/** Schema for event validation */
|
|
89
|
+
schema?: import("zod").ZodType<TEvent>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Context passed to the global onError handler when a client operation fails.
|
|
93
|
+
*/
|
|
94
|
+
export interface ErrorContext {
|
|
95
|
+
/** Client method name (e.g. "emit", "streams.append", "apiKeys.create") */
|
|
96
|
+
method: string;
|
|
97
|
+
/** ConnectRPC or REST endpoint path (e.g. "/ironflow.v1.IronflowService/Trigger") */
|
|
98
|
+
endpoint: string;
|
|
99
|
+
/** HTTP status code (undefined for connection/timeout errors) */
|
|
100
|
+
statusCode?: number;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Global error handler callback type.
|
|
104
|
+
* Return value is awaited; if the callback throws, the error is swallowed
|
|
105
|
+
* and logged to stderr — the original error is always re-thrown.
|
|
106
|
+
*/
|
|
107
|
+
export type OnErrorHandler = (error: Error, context: ErrorContext) => void | Promise<void>;
|
|
108
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,WAAW,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { WebhookConfig, IronflowWebhook } from "@ironflow/core";
|
|
2
|
+
/**
|
|
3
|
+
* Create a webhook source definition.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const stripeWebhook = createWebhook({
|
|
8
|
+
* id: "stripe",
|
|
9
|
+
* verify: (req) => {
|
|
10
|
+
* const sig = req.headers["stripe-signature"];
|
|
11
|
+
* return stripe.webhooks.constructEvent(req.body, sig, secret);
|
|
12
|
+
* },
|
|
13
|
+
* transform: (payload) => ({
|
|
14
|
+
* name: `stripe.${payload.type}`,
|
|
15
|
+
* data: payload.data.object,
|
|
16
|
+
* idempotencyKey: payload.id,
|
|
17
|
+
* }),
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function createWebhook(config: WebhookConfig): IronflowWebhook;
|
|
22
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAErE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,eAAe,CAEpE"}
|
package/dist/webhook.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a webhook source definition.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* const stripeWebhook = createWebhook({
|
|
7
|
+
* id: "stripe",
|
|
8
|
+
* verify: (req) => {
|
|
9
|
+
* const sig = req.headers["stripe-signature"];
|
|
10
|
+
* return stripe.webhooks.constructEvent(req.body, sig, secret);
|
|
11
|
+
* },
|
|
12
|
+
* transform: (payload) => ({
|
|
13
|
+
* name: `stripe.${payload.type}`,
|
|
14
|
+
* data: payload.data.object,
|
|
15
|
+
* idempotencyKey: payload.id,
|
|
16
|
+
* }),
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function createWebhook(config) {
|
|
21
|
+
return { config };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ironflow Streaming Worker
|
|
3
|
+
*
|
|
4
|
+
* ConnectRPC bidirectional streaming worker for low-latency pull mode.
|
|
5
|
+
*/
|
|
6
|
+
import type { WorkerConfig, Worker } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Create a streaming worker for Pull mode execution using ConnectRPC
|
|
9
|
+
*
|
|
10
|
+
* Uses bidirectional gRPC streaming for efficient job dispatch.
|
|
11
|
+
*
|
|
12
|
+
* @param config - Worker configuration
|
|
13
|
+
* @returns Worker instance
|
|
14
|
+
*/
|
|
15
|
+
export declare function createStreamingWorker(config: WorkerConfig): Worker;
|
|
16
|
+
export default createStreamingWorker;
|
|
17
|
+
//# sourceMappingURL=worker-streaming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-streaming.d.ts","sourceRoot":"","sources":["../src/worker-streaming.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgCH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAiCvD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAElE;AA8jBD,eAAe,qBAAqB,CAAC"}
|