@xyne/workflow-sdk 3.2.37 → 3.2.38
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/agents/agent-step.d.ts +2 -2
- package/dist/agents/host-agent-step.d.ts +1 -1
- package/dist/builder/index.d.ts +2 -2
- package/dist/builder/index.d.ts.map +1 -1
- package/dist/builder/index.js +1 -1
- package/dist/builder/index.js.map +1 -1
- package/dist/client/types.d.ts +7 -5
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/workflow-client.d.ts.map +1 -1
- package/dist/client/workflow-client.js +7 -0
- package/dist/client/workflow-client.js.map +1 -1
- package/dist/common/citation-ref.d.ts +4 -4
- package/dist/common/credentials.d.ts +107 -0
- package/dist/common/credentials.d.ts.map +1 -1
- package/dist/common/credentials.js +67 -0
- package/dist/common/credentials.js.map +1 -1
- package/dist/common/index.d.ts +2 -2
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +2 -2
- package/dist/common/index.js.map +1 -1
- package/dist/connectors/builtin/builtin-connector.d.ts +32 -0
- package/dist/connectors/builtin/builtin-connector.d.ts.map +1 -0
- package/dist/connectors/builtin/builtin-connector.js +62 -0
- package/dist/connectors/builtin/builtin-connector.js.map +1 -0
- package/dist/connectors/builtin/credentials.d.ts +18 -0
- package/dist/connectors/builtin/credentials.d.ts.map +1 -0
- package/dist/connectors/builtin/credentials.js +50 -0
- package/dist/connectors/builtin/credentials.js.map +1 -0
- package/dist/connectors/builtin/steps/code.step.d.ts +99 -0
- package/dist/connectors/builtin/steps/code.step.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/code.step.js +152 -0
- package/dist/connectors/builtin/steps/code.step.js.map +1 -0
- package/dist/connectors/builtin/steps/conditional.step.d.ts +182 -0
- package/dist/connectors/builtin/steps/conditional.step.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/conditional.step.js +82 -0
- package/dist/connectors/builtin/steps/conditional.step.js.map +1 -0
- package/dist/connectors/builtin/steps/dedup.step.d.ts +65 -0
- package/dist/connectors/builtin/steps/dedup.step.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/dedup.step.js +61 -0
- package/dist/connectors/builtin/steps/dedup.step.js.map +1 -0
- package/dist/connectors/builtin/steps/http-request.step.d.ts +1027 -0
- package/dist/connectors/builtin/steps/http-request.step.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/http-request.step.js +497 -0
- package/dist/connectors/builtin/steps/http-request.step.js.map +1 -0
- package/dist/connectors/builtin/steps/loop.step.d.ts +100 -0
- package/dist/connectors/builtin/steps/loop.step.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/loop.step.js +73 -0
- package/dist/connectors/builtin/steps/loop.step.js.map +1 -0
- package/dist/connectors/builtin/steps/map.step.d.ts +148 -0
- package/dist/connectors/builtin/steps/map.step.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/map.step.js +111 -0
- package/dist/connectors/builtin/steps/map.step.js.map +1 -0
- package/dist/connectors/builtin/steps/parallel.step.d.ts +246 -0
- package/dist/connectors/builtin/steps/parallel.step.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/parallel.step.js +175 -0
- package/dist/connectors/builtin/steps/parallel.step.js.map +1 -0
- package/dist/connectors/builtin/steps/ssrf-guard.d.ts +9 -0
- package/dist/connectors/builtin/steps/ssrf-guard.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/ssrf-guard.js +115 -0
- package/dist/connectors/builtin/steps/ssrf-guard.js.map +1 -0
- package/dist/connectors/builtin/steps/switch.step.d.ts +235 -0
- package/dist/connectors/builtin/steps/switch.step.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/switch.step.js +101 -0
- package/dist/connectors/builtin/steps/switch.step.js.map +1 -0
- package/dist/connectors/builtin/steps/wait.step.d.ts +1072 -0
- package/dist/connectors/builtin/steps/wait.step.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/wait.step.js +254 -0
- package/dist/connectors/builtin/steps/wait.step.js.map +1 -0
- package/dist/connectors/builtin/triggers/default-cron-trigger.d.ts +44 -0
- package/dist/connectors/builtin/triggers/default-cron-trigger.d.ts.map +1 -0
- package/dist/connectors/builtin/triggers/default-cron-trigger.js +31 -0
- package/dist/connectors/builtin/triggers/default-cron-trigger.js.map +1 -0
- package/dist/connectors/builtin/triggers/default-event-trigger.d.ts +32 -0
- package/dist/connectors/builtin/triggers/default-event-trigger.d.ts.map +1 -0
- package/dist/connectors/builtin/triggers/default-event-trigger.js +21 -0
- package/dist/connectors/builtin/triggers/default-event-trigger.js.map +1 -0
- package/dist/connectors/builtin/triggers/default-manual-trigger.d.ts +45 -0
- package/dist/connectors/builtin/triggers/default-manual-trigger.d.ts.map +1 -0
- package/dist/connectors/builtin/triggers/default-manual-trigger.js +51 -0
- package/dist/connectors/builtin/triggers/default-manual-trigger.js.map +1 -0
- package/dist/connectors/builtin/triggers/default-webhook-v2-trigger.d.ts +31 -0
- package/dist/connectors/builtin/triggers/default-webhook-v2-trigger.d.ts.map +1 -0
- package/dist/connectors/builtin/triggers/default-webhook-v2-trigger.js +40 -0
- package/dist/connectors/builtin/triggers/default-webhook-v2-trigger.js.map +1 -0
- package/dist/connectors/core/base-connector.d.ts +45 -0
- package/dist/connectors/core/base-connector.d.ts.map +1 -0
- package/dist/connectors/core/base-connector.js +3 -0
- package/dist/connectors/core/base-connector.js.map +1 -0
- package/dist/connectors/core/connector-registry.d.ts +130 -0
- package/dist/connectors/core/connector-registry.d.ts.map +1 -0
- package/dist/connectors/core/connector-registry.js +357 -0
- package/dist/connectors/core/connector-registry.js.map +1 -0
- package/dist/connectors/core/credentials.d.ts +104 -0
- package/dist/connectors/core/credentials.d.ts.map +1 -0
- package/dist/connectors/core/credentials.js +67 -0
- package/dist/connectors/core/credentials.js.map +1 -0
- package/dist/connectors/core/index.d.ts +7 -0
- package/dist/connectors/core/index.d.ts.map +1 -0
- package/dist/connectors/core/index.js +5 -0
- package/dist/connectors/core/index.js.map +1 -0
- package/dist/engine/available-context.d.ts +3 -4
- package/dist/engine/available-context.d.ts.map +1 -1
- package/dist/engine/available-context.js +17 -13
- package/dist/engine/available-context.js.map +1 -1
- package/dist/engine/config-validator.d.ts +13 -5
- package/dist/engine/config-validator.d.ts.map +1 -1
- package/dist/engine/config-validator.js +89 -11
- package/dist/engine/config-validator.js.map +1 -1
- package/dist/engine/credential-resolver.d.ts +42 -0
- package/dist/engine/credential-resolver.d.ts.map +1 -0
- package/dist/engine/credential-resolver.js +63 -0
- package/dist/engine/credential-resolver.js.map +1 -0
- package/dist/engine/workflow-executor.d.ts +4 -5
- package/dist/engine/workflow-executor.d.ts.map +1 -1
- package/dist/engine/workflow-executor.js +16 -38
- package/dist/engine/workflow-executor.js.map +1 -1
- package/dist/index.d.ts +43 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -15
- package/dist/index.js.map +1 -1
- package/dist/ingest/body.d.ts +18 -0
- package/dist/ingest/body.d.ts.map +1 -0
- package/dist/ingest/body.js +47 -0
- package/dist/ingest/body.js.map +1 -0
- package/dist/ingest/filter.d.ts +11 -0
- package/dist/ingest/filter.d.ts.map +1 -0
- package/dist/ingest/filter.js +23 -0
- package/dist/ingest/filter.js.map +1 -0
- package/dist/ingest/headers.d.ts +3 -0
- package/dist/ingest/headers.d.ts.map +1 -0
- package/dist/ingest/headers.js +11 -0
- package/dist/ingest/headers.js.map +1 -0
- package/dist/ingest/types.d.ts +50 -0
- package/dist/ingest/types.d.ts.map +1 -0
- package/dist/ingest/types.js +9 -0
- package/dist/ingest/types.js.map +1 -0
- package/dist/persistence/in-memory-adapter.d.ts +4 -8
- package/dist/persistence/in-memory-adapter.d.ts.map +1 -1
- package/dist/persistence/in-memory-adapter.js +8 -25
- package/dist/persistence/in-memory-adapter.js.map +1 -1
- package/dist/persistence/types.d.ts +5 -19
- package/dist/persistence/types.d.ts.map +1 -1
- package/dist/router/types.d.ts +31 -3
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/workflow-router.d.ts +4 -3
- package/dist/router/workflow-router.d.ts.map +1 -1
- package/dist/router/workflow-router.js +66 -40
- package/dist/router/workflow-router.js.map +1 -1
- package/dist/runtime/types.d.ts +6 -4
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/workflow-runtime.d.ts +43 -37
- package/dist/runtime/workflow-runtime.d.ts.map +1 -1
- package/dist/runtime/workflow-runtime.js +158 -133
- package/dist/runtime/workflow-runtime.js.map +1 -1
- package/dist/steps/base-step.d.ts +23 -0
- package/dist/steps/base-step.d.ts.map +1 -1
- package/dist/steps/base-step.js +22 -0
- package/dist/steps/base-step.js.map +1 -1
- package/dist/steps/step-descriptor.d.ts +52 -0
- package/dist/steps/step-descriptor.d.ts.map +1 -0
- package/dist/steps/step-descriptor.js +32 -0
- package/dist/steps/step-descriptor.js.map +1 -0
- package/dist/testing/authz-conformance.d.ts.map +1 -1
- package/dist/testing/authz-conformance.js +6 -7
- package/dist/testing/authz-conformance.js.map +1 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/mock-step-context.d.ts +1 -0
- package/dist/testing/mock-step-context.d.ts.map +1 -1
- package/dist/testing/mock-step-context.js +1 -0
- package/dist/testing/mock-step-context.js.map +1 -1
- package/dist/testing/test-connector.d.ts +40 -0
- package/dist/testing/test-connector.d.ts.map +1 -0
- package/dist/testing/test-connector.js +39 -0
- package/dist/testing/test-connector.js.map +1 -0
- package/dist/triggers/api-trigger.d.ts +15 -0
- package/dist/triggers/api-trigger.d.ts.map +1 -0
- package/dist/triggers/api-trigger.js +14 -0
- package/dist/triggers/api-trigger.js.map +1 -0
- package/dist/triggers/base-trigger.d.ts +29 -0
- package/dist/triggers/base-trigger.d.ts.map +1 -1
- package/dist/triggers/base-trigger.js +16 -0
- package/dist/triggers/base-trigger.js.map +1 -1
- package/dist/triggers/trigger-descriptor.d.ts +42 -0
- package/dist/triggers/trigger-descriptor.d.ts.map +1 -0
- package/dist/triggers/trigger-descriptor.js +29 -0
- package/dist/triggers/trigger-descriptor.js.map +1 -0
- package/dist/triggers/webhook-trigger.d.ts +31 -38
- package/dist/triggers/webhook-trigger.d.ts.map +1 -1
- package/dist/triggers/webhook-trigger.js +19 -6
- package/dist/triggers/webhook-trigger.js.map +1 -1
- package/dist/types/known-types.d.ts +0 -1
- package/dist/types/known-types.d.ts.map +1 -1
- package/dist/types/known-types.js +0 -1
- package/dist/types/known-types.js.map +1 -1
- package/dist/types/validation.d.ts +3 -1
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/types/validation.js +2 -0
- package/dist/types/validation.js.map +1 -1
- package/dist/types/workflow-config.d.ts +23 -0
- package/dist/types/workflow-config.d.ts.map +1 -1
- package/dist/types/workflow-config.js +8 -0
- package/dist/types/workflow-config.js.map +1 -1
- package/dist/util/credential-slot-schema.d.ts +20 -0
- package/dist/util/credential-slot-schema.d.ts.map +1 -0
- package/dist/util/credential-slot-schema.js +30 -0
- package/dist/util/credential-slot-schema.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CONDITIONAL step — branch on a recursive {@link Condition} AST.
|
|
3
|
+
*
|
|
4
|
+
* BaseControlFlowStep with two branches: `if_true` and `if_false`.
|
|
5
|
+
*
|
|
6
|
+
* evaluator.evaluate(config.condition, ctx.workflow)
|
|
7
|
+
* true → walk `if_true` → output.branch = 'if_true'
|
|
8
|
+
* false → walk `if_false` → output.branch = 'if_false'
|
|
9
|
+
* (no-op when `if_false` is omitted → output.branch = 'none')
|
|
10
|
+
*
|
|
11
|
+
* The condition evaluator + variable resolver already understand `{{...}}`
|
|
12
|
+
* refs and the operator catalog, so a leaf condition like
|
|
13
|
+
*
|
|
14
|
+
* { variable: 'steps.fetch.output.status', operator: '==', value: 200 }
|
|
15
|
+
*
|
|
16
|
+
* works without any per-step parsing here.
|
|
17
|
+
*
|
|
18
|
+
* Pause/resume inside either branch is handled by the executor's
|
|
19
|
+
* `walkBranchSteps` — same mechanism the PARALLEL and LOOP steps rely on.
|
|
20
|
+
*/
|
|
21
|
+
import { z } from 'zod';
|
|
22
|
+
import { BaseControlFlowStep, collectBranchSteps } from '../../../steps/base-step.js';
|
|
23
|
+
import { BuiltinStepType } from '../../../types/known-types.js';
|
|
24
|
+
import { ConditionSchema } from '../../../types/workflow-config.js';
|
|
25
|
+
import { ConditionEvaluator } from '../../../engine/condition-evaluator.js';
|
|
26
|
+
// ─── Config ───
|
|
27
|
+
export const ConditionalStepConfigSchema = z.object({
|
|
28
|
+
condition: ConditionSchema
|
|
29
|
+
.describe('Recursive condition tree. Leaf nodes reference {{variables}} and apply operators; `all`/`any` compose children.'),
|
|
30
|
+
if_true: z.array(z.object({ id: z.string(), type: z.string() }).passthrough()).describe('Steps to execute when the condition resolves true'),
|
|
31
|
+
if_false: z.array(z.object({ id: z.string(), type: z.string() }).passthrough()).optional().describe('Steps to execute when the condition resolves false. Omit to no-op on the false branch.'),
|
|
32
|
+
});
|
|
33
|
+
const ConditionalStepOutputSchema = z.object({
|
|
34
|
+
branch: z.enum(['if_true', 'if_false', 'none']),
|
|
35
|
+
evaluated: z.boolean(),
|
|
36
|
+
branches: z.record(z.object({ steps: z.record(z.object({ output: z.record(z.unknown()) })) })),
|
|
37
|
+
});
|
|
38
|
+
// ─── Step ───
|
|
39
|
+
export class ConditionalStep extends BaseControlFlowStep {
|
|
40
|
+
type = BuiltinStepType.CONDITIONAL;
|
|
41
|
+
name = 'Conditional';
|
|
42
|
+
description = 'Branch execution based on a condition';
|
|
43
|
+
configSchema = ConditionalStepConfigSchema;
|
|
44
|
+
outputSchema = ConditionalStepOutputSchema;
|
|
45
|
+
category = 'control';
|
|
46
|
+
icon = 'fork';
|
|
47
|
+
declaredOutputs = [
|
|
48
|
+
{ key: 'if_true', label: 'When true' },
|
|
49
|
+
{ key: 'if_false', label: 'When false' },
|
|
50
|
+
];
|
|
51
|
+
/** Allows config-validator to recursively validate nested branches. */
|
|
52
|
+
getBranches(config) {
|
|
53
|
+
return {
|
|
54
|
+
if_true: (config['if_true'] ?? []),
|
|
55
|
+
if_false: (config['if_false'] ?? []),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async execute(config, ctx) {
|
|
59
|
+
const evaluator = new ConditionEvaluator();
|
|
60
|
+
const evaluated = evaluator.evaluate(config.condition, ctx.workflow);
|
|
61
|
+
if (evaluated) {
|
|
62
|
+
const branchSteps = config.if_true;
|
|
63
|
+
await ctx.walkBranch(branchSteps, ctx.workflow, 'if_true');
|
|
64
|
+
return {
|
|
65
|
+
branch: 'if_true',
|
|
66
|
+
evaluated: true,
|
|
67
|
+
branches: { if_true: { steps: collectBranchSteps(branchSteps, ctx.workflow) } },
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (config.if_false && config.if_false.length > 0) {
|
|
71
|
+
const branchSteps = config.if_false;
|
|
72
|
+
await ctx.walkBranch(branchSteps, ctx.workflow, 'if_false');
|
|
73
|
+
return {
|
|
74
|
+
branch: 'if_false',
|
|
75
|
+
evaluated: false,
|
|
76
|
+
branches: { if_false: { steps: collectBranchSteps(branchSteps, ctx.workflow) } },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return { branch: 'none', evaluated: false, branches: {} };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=conditional.step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditional.step.js","sourceRoot":"","sources":["../../../../src/connectors/builtin/steps/conditional.step.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DEDUP step — deduplication via ctx.staticData.
|
|
3
|
+
*
|
|
4
|
+
* Checks whether a key (derived from the current context) has been
|
|
5
|
+
* seen before. If it has, marks the output as `duplicate: true` so
|
|
6
|
+
* downstream steps/conditions can skip processing.
|
|
7
|
+
*
|
|
8
|
+
* Uses `ctx.staticData` for persistence — keys survive across executions.
|
|
9
|
+
* Optional TTL: stored timestamps are compared against current time.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { BaseActionStep } from '../../../steps/base-step.js';
|
|
13
|
+
import type { StepExecutionContext } from '../../../steps/base-step.js';
|
|
14
|
+
import { BuiltinStepType } from '../../../types/known-types.js';
|
|
15
|
+
import type { StepCategory } from '../../../types/categories.js';
|
|
16
|
+
export declare const DedupStepConfigSchema: z.ZodObject<{
|
|
17
|
+
keyPath: z.ZodString;
|
|
18
|
+
ttlMs: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
keyPrefix: z.ZodDefault<z.ZodString>;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
keyPath: string;
|
|
22
|
+
keyPrefix: string;
|
|
23
|
+
ttlMs?: number | undefined;
|
|
24
|
+
}, {
|
|
25
|
+
keyPath: string;
|
|
26
|
+
ttlMs?: number | undefined;
|
|
27
|
+
keyPrefix?: string | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
export type DedupStepConfig = z.infer<typeof DedupStepConfigSchema>;
|
|
30
|
+
export interface DedupStepOutput extends Record<string, unknown> {
|
|
31
|
+
duplicate: boolean;
|
|
32
|
+
key: string;
|
|
33
|
+
}
|
|
34
|
+
export declare class DedupStep extends BaseActionStep<typeof DedupStepConfigSchema, DedupStepOutput> {
|
|
35
|
+
readonly type = BuiltinStepType.DEDUP;
|
|
36
|
+
readonly name = "Dedup";
|
|
37
|
+
readonly description = "Skip duplicate items using persistent key tracking";
|
|
38
|
+
readonly configSchema: z.ZodObject<{
|
|
39
|
+
keyPath: z.ZodString;
|
|
40
|
+
ttlMs: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
keyPrefix: z.ZodDefault<z.ZodString>;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
keyPath: string;
|
|
44
|
+
keyPrefix: string;
|
|
45
|
+
ttlMs?: number | undefined;
|
|
46
|
+
}, {
|
|
47
|
+
keyPath: string;
|
|
48
|
+
ttlMs?: number | undefined;
|
|
49
|
+
keyPrefix?: string | undefined;
|
|
50
|
+
}>;
|
|
51
|
+
readonly outputSchema: z.ZodObject<{
|
|
52
|
+
duplicate: z.ZodBoolean;
|
|
53
|
+
key: z.ZodString;
|
|
54
|
+
}, "strip", z.ZodTypeAny, {
|
|
55
|
+
key: string;
|
|
56
|
+
duplicate: boolean;
|
|
57
|
+
}, {
|
|
58
|
+
key: string;
|
|
59
|
+
duplicate: boolean;
|
|
60
|
+
}>;
|
|
61
|
+
readonly category: StepCategory;
|
|
62
|
+
readonly icon = "copy-check";
|
|
63
|
+
execute(config: DedupStepConfig, ctx: StepExecutionContext): Promise<DedupStepOutput>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=dedup.step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedup.step.d.ts","sourceRoot":"","sources":["../../../../src/connectors/builtin/steps/dedup.step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAKjE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAIhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AASD,qBAAa,SAAU,SAAQ,cAAc,CAC3C,OAAO,qBAAqB,EAC5B,eAAe,CAChB;IACC,SAAkB,IAAI,yBAAyB;IAC/C,SAAkB,IAAI,WAAW;IACjC,SAAkB,WAAW,wDAAwD;IACrF,SAAkB,YAAY;;;;;;;;;;;;OAAyB;IACvD,SAAkB,YAAY;;;;;;;;;OAAyB;IACvD,SAAkB,QAAQ,EAAE,YAAY,CAAU;IAClD,SAAkB,IAAI,gBAAgB;IAEvB,OAAO,CACpB,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,eAAe,CAAC;CAmC5B"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DEDUP step — deduplication via ctx.staticData.
|
|
3
|
+
*
|
|
4
|
+
* Checks whether a key (derived from the current context) has been
|
|
5
|
+
* seen before. If it has, marks the output as `duplicate: true` so
|
|
6
|
+
* downstream steps/conditions can skip processing.
|
|
7
|
+
*
|
|
8
|
+
* Uses `ctx.staticData` for persistence — keys survive across executions.
|
|
9
|
+
* Optional TTL: stored timestamps are compared against current time.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { BaseActionStep } from '../../../steps/base-step.js';
|
|
13
|
+
import { BuiltinStepType } from '../../../types/known-types.js';
|
|
14
|
+
import { resolvePath } from '../../../engine/variable-resolver.js';
|
|
15
|
+
// ─── Config ───
|
|
16
|
+
export const DedupStepConfigSchema = z.object({
|
|
17
|
+
keyPath: z.string().min(1).describe('Dotted path to the deduplication key in the workflow context'),
|
|
18
|
+
ttlMs: z.number().int().positive().optional().describe('Time-to-live in milliseconds. Keys older than this are treated as new'),
|
|
19
|
+
keyPrefix: z.string().default('dedup:').describe('Prefix for the storage key to avoid collisions'),
|
|
20
|
+
});
|
|
21
|
+
const DedupStepOutputSchema = z.object({
|
|
22
|
+
duplicate: z.boolean(),
|
|
23
|
+
key: z.string(),
|
|
24
|
+
});
|
|
25
|
+
// ─── Step ───
|
|
26
|
+
export class DedupStep extends BaseActionStep {
|
|
27
|
+
type = BuiltinStepType.DEDUP;
|
|
28
|
+
name = 'Dedup';
|
|
29
|
+
description = 'Skip duplicate items using persistent key tracking';
|
|
30
|
+
configSchema = DedupStepConfigSchema;
|
|
31
|
+
outputSchema = DedupStepOutputSchema;
|
|
32
|
+
category = 'data';
|
|
33
|
+
icon = 'copy-check';
|
|
34
|
+
async execute(config, ctx) {
|
|
35
|
+
// Resolve the dedup key from context
|
|
36
|
+
const rawKey = resolvePath(ctx.workflow, config.keyPath);
|
|
37
|
+
if (rawKey === undefined || rawKey === null) {
|
|
38
|
+
throw new Error(`DEDUP keyPath "${config.keyPath}" resolved to ${String(rawKey)}`);
|
|
39
|
+
}
|
|
40
|
+
const key = `${config.keyPrefix}${String(rawKey)}`;
|
|
41
|
+
// Check if key exists in staticData
|
|
42
|
+
const existing = (await ctx.staticData.get(key));
|
|
43
|
+
if (existing !== undefined) {
|
|
44
|
+
// Check TTL if configured
|
|
45
|
+
if (config.ttlMs !== undefined) {
|
|
46
|
+
const age = Date.now() - existing.seenAt;
|
|
47
|
+
if (age < config.ttlMs) {
|
|
48
|
+
return { duplicate: true, key };
|
|
49
|
+
}
|
|
50
|
+
// Expired — treat as new, fall through to record
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return { duplicate: true, key };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Record the key
|
|
57
|
+
await ctx.staticData.set(key, { seenAt: Date.now() });
|
|
58
|
+
return { duplicate: false, key };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=dedup.step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedup.step.js","sourceRoot":"","sources":["../../../../src/connectors/builtin/steps/dedup.step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,iBAAiB;AAEjB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IACnG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;IAC/H,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;CACnG,CAAC,CAAC;AAWH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,eAAe;AAEf,MAAM,OAAO,SAAU,SAAQ,cAG9B;IACmB,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC;IAC7B,IAAI,GAAG,OAAO,CAAC;IACf,WAAW,GAAG,oDAAoD,CAAC;IACnE,YAAY,GAAG,qBAAqB,CAAC;IACrC,YAAY,GAAG,qBAAqB,CAAC;IACrC,QAAQ,GAAiB,MAAM,CAAC;IAChC,IAAI,GAAG,YAAY,CAAC;IAE7B,KAAK,CAAC,OAAO,CACpB,MAAuB,EACvB,GAAyB;QAEzB,qCAAqC;QACrC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,kBAAkB,MAAM,CAAC,OAAO,iBAAiB,MAAM,CAAC,MAAM,CAAC,EAAE,CAClE,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAEnD,oCAAoC;QACpC,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAElC,CAAC;QAEd,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,0BAA0B;YAC1B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACzC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBACvB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;gBAClC,CAAC;gBACD,iDAAiD;YACnD,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEtD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACnC,CAAC;CACF"}
|