@xyne/workflow-sdk 3.2.38 → 3.2.39
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/connectors/builtin/builtin-connector.d.ts +1 -0
- package/dist/connectors/builtin/builtin-connector.d.ts.map +1 -1
- package/dist/connectors/builtin/builtin-connector.js +1 -0
- package/dist/connectors/builtin/builtin-connector.js.map +1 -1
- package/dist/connectors/core/base-connector.d.ts +5 -0
- package/dist/connectors/core/base-connector.d.ts.map +1 -1
- package/dist/connectors/core/base-connector.js +5 -0
- package/dist/connectors/core/base-connector.js.map +1 -1
- package/dist/connectors/core/connector-registry.d.ts.map +1 -1
- package/dist/connectors/core/connector-registry.js +7 -11
- package/dist/connectors/core/connector-registry.js.map +1 -1
- package/dist/router/workflow-router.d.ts.map +1 -1
- package/dist/router/workflow-router.js +22 -5
- package/dist/router/workflow-router.js.map +1 -1
- package/dist/runtime/workflow-runtime.d.ts +8 -5
- package/dist/runtime/workflow-runtime.d.ts.map +1 -1
- package/dist/runtime/workflow-runtime.js +20 -5
- package/dist/runtime/workflow-runtime.js.map +1 -1
- package/dist/steps/base-step.d.ts +1 -0
- package/dist/steps/base-step.d.ts.map +1 -1
- package/dist/steps/base-step.js +1 -0
- package/dist/steps/base-step.js.map +1 -1
- package/dist/steps/step-descriptor.d.ts +2 -0
- package/dist/steps/step-descriptor.d.ts.map +1 -1
- package/dist/steps/step-descriptor.js +1 -0
- package/dist/steps/step-descriptor.js.map +1 -1
- package/dist/triggers/base-trigger.d.ts +1 -0
- package/dist/triggers/base-trigger.d.ts.map +1 -1
- package/dist/triggers/base-trigger.js +1 -0
- package/dist/triggers/base-trigger.js.map +1 -1
- package/dist/triggers/trigger-descriptor.d.ts +2 -0
- package/dist/triggers/trigger-descriptor.d.ts.map +1 -1
- package/dist/triggers/trigger-descriptor.js +1 -0
- package/dist/triggers/trigger-descriptor.js.map +1 -1
- package/dist/triggers/webhook-trigger.d.ts +22 -3
- package/dist/triggers/webhook-trigger.d.ts.map +1 -1
- package/dist/triggers/webhook-trigger.js +23 -2
- package/dist/triggers/webhook-trigger.js.map +1 -1
- package/package.json +1 -1
- package/dist/runtime/execution-event-bus.d.ts +0 -38
- package/dist/runtime/execution-event-bus.d.ts.map +0 -1
- package/dist/runtime/execution-event-bus.js +0 -87
- package/dist/runtime/execution-event-bus.js.map +0 -1
- package/dist/steps/builtin/code.step.d.ts +0 -99
- package/dist/steps/builtin/code.step.d.ts.map +0 -1
- package/dist/steps/builtin/code.step.js +0 -152
- package/dist/steps/builtin/code.step.js.map +0 -1
- package/dist/steps/builtin/conditional.step.d.ts +0 -182
- package/dist/steps/builtin/conditional.step.d.ts.map +0 -1
- package/dist/steps/builtin/conditional.step.js +0 -82
- package/dist/steps/builtin/conditional.step.js.map +0 -1
- package/dist/steps/builtin/dedup.step.d.ts +0 -65
- package/dist/steps/builtin/dedup.step.d.ts.map +0 -1
- package/dist/steps/builtin/dedup.step.js +0 -61
- package/dist/steps/builtin/dedup.step.js.map +0 -1
- package/dist/steps/builtin/http-request.step.d.ts +0 -1020
- package/dist/steps/builtin/http-request.step.d.ts.map +0 -1
- package/dist/steps/builtin/http-request.step.js +0 -491
- package/dist/steps/builtin/http-request.step.js.map +0 -1
- package/dist/steps/builtin/loop.step.d.ts +0 -100
- package/dist/steps/builtin/loop.step.d.ts.map +0 -1
- package/dist/steps/builtin/loop.step.js +0 -73
- package/dist/steps/builtin/loop.step.js.map +0 -1
- package/dist/steps/builtin/map.step.d.ts +0 -148
- package/dist/steps/builtin/map.step.d.ts.map +0 -1
- package/dist/steps/builtin/map.step.js +0 -111
- package/dist/steps/builtin/map.step.js.map +0 -1
- package/dist/steps/builtin/parallel.step.d.ts +0 -246
- package/dist/steps/builtin/parallel.step.d.ts.map +0 -1
- package/dist/steps/builtin/parallel.step.js +0 -175
- package/dist/steps/builtin/parallel.step.js.map +0 -1
- package/dist/steps/builtin/ssrf-guard.d.ts +0 -9
- package/dist/steps/builtin/ssrf-guard.d.ts.map +0 -1
- package/dist/steps/builtin/ssrf-guard.js +0 -115
- package/dist/steps/builtin/ssrf-guard.js.map +0 -1
- package/dist/steps/builtin/switch.step.d.ts +0 -235
- package/dist/steps/builtin/switch.step.d.ts.map +0 -1
- package/dist/steps/builtin/switch.step.js +0 -101
- package/dist/steps/builtin/switch.step.js.map +0 -1
- package/dist/steps/builtin/wait.step.d.ts +0 -1072
- package/dist/steps/builtin/wait.step.d.ts.map +0 -1
- package/dist/steps/builtin/wait.step.js +0 -254
- package/dist/steps/builtin/wait.step.js.map +0 -1
- package/dist/steps/step-registry.d.ts +0 -62
- package/dist/steps/step-registry.d.ts.map +0 -1
- package/dist/steps/step-registry.js +0 -103
- package/dist/steps/step-registry.js.map +0 -1
- package/dist/triggers/builtin/default-cron-trigger.d.ts +0 -44
- package/dist/triggers/builtin/default-cron-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-cron-trigger.js +0 -31
- package/dist/triggers/builtin/default-cron-trigger.js.map +0 -1
- package/dist/triggers/builtin/default-event-trigger.d.ts +0 -32
- package/dist/triggers/builtin/default-event-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-event-trigger.js +0 -21
- package/dist/triggers/builtin/default-event-trigger.js.map +0 -1
- package/dist/triggers/builtin/default-manual-trigger.d.ts +0 -45
- package/dist/triggers/builtin/default-manual-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-manual-trigger.js +0 -51
- package/dist/triggers/builtin/default-manual-trigger.js.map +0 -1
- package/dist/triggers/builtin/default-webhook-trigger.d.ts +0 -72
- package/dist/triggers/builtin/default-webhook-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-webhook-trigger.js +0 -91
- package/dist/triggers/builtin/default-webhook-trigger.js.map +0 -1
- package/dist/triggers/builtin/default-webhook-v2-trigger.d.ts +0 -29
- package/dist/triggers/builtin/default-webhook-v2-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-webhook-v2-trigger.js +0 -38
- package/dist/triggers/builtin/default-webhook-v2-trigger.js.map +0 -1
- package/dist/triggers/trigger-registry.d.ts +0 -48
- package/dist/triggers/trigger-registry.d.ts.map +0 -1
- package/dist/triggers/trigger-registry.js +0 -83
- package/dist/triggers/trigger-registry.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-request.step.d.ts","sourceRoot":"","sources":["../../../src/steps/builtin/http-request.step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAkB9D,eAAO,MAAM,wBAAwB,oEAOnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AA0C1E,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AA2BtD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAM7B,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAI1D,eAAO,MAAM,gBAAgB,yEAE3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAetC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAIhF,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,IAAI,EAAE,OAAO,CAAC;IACd,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAeD,qBAAa,eAAgB,SAAQ,cAAc,CACjD,OAAO,2BAA2B,EAClC,qBAAqB,CACtB;IACC,SAAkB,IAAI,gCAAgC;IACtD,SAAkB,IAAI,kBAAkB;IACxC,SAAkB,WAAW,yCAAyC;IACtE,SAAkB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAA+B;IAC7D,SAAkB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;OAA+B;IAC7D,SAAkB,QAAQ,EAAE,YAAY,CAAiB;IACzD,SAAkB,IAAI,WAAW;IAKjC,SAAkB,eAAe;;;OAEtB;IAEF,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAqC3F;;;;;OAKG;IACM,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsB1F,OAAO,CAAC,mBAAmB;IAkBlB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkB9D,OAAO,CACpB,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,qBAAqB,CAAC;IAuHjC,OAAO,CAAC,QAAQ;IAehB;;;;;OAKG;YACW,UAAU;IA+DxB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,aAAa;CAiBtB"}
|
|
@@ -1,491 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP_REQUEST step — make HTTP requests to external APIs.
|
|
3
|
-
*
|
|
4
|
-
* Action step that uses the global `fetch` API (Node 20+). Always
|
|
5
|
-
* returns the response — never throws on HTTP error status codes.
|
|
6
|
-
* The consumer can branch on `ok` or `status` via a CONDITIONAL step.
|
|
7
|
-
*
|
|
8
|
-
* ## Body modes (Postman-aligned)
|
|
9
|
-
*
|
|
10
|
-
* `body` is a discriminated union by `mode`. Each mode has its own shape:
|
|
11
|
-
*
|
|
12
|
-
* - `none` — no body
|
|
13
|
-
* - `raw` — single text payload; pick the content-type via `contentType`
|
|
14
|
-
* - `urlencoded` — `application/x-www-form-urlencoded` key/value pairs
|
|
15
|
-
* - `formdata` — `multipart/form-data` with text fields and optional files
|
|
16
|
-
*
|
|
17
|
-
* Binary request bodies are out of scope for the current iteration. Multipart
|
|
18
|
-
* file fields use the {@link Attachment} primitive and StorageAdapter.
|
|
19
|
-
*
|
|
20
|
-
* ## Auth
|
|
21
|
-
*
|
|
22
|
-
* The optional `credentialName` selects a stored credential from the vault.
|
|
23
|
-
* Before this step runs, the executor resolves that selection and injects the
|
|
24
|
-
* validated value through `ctx.credentials`. The step
|
|
25
|
-
* receives the resolved value and applies it after user-provided headers, so
|
|
26
|
-
* managed authentication cannot be accidentally overridden.
|
|
27
|
-
*
|
|
28
|
-
* ## Response shape
|
|
29
|
-
*
|
|
30
|
-
* The step's output IS the response:
|
|
31
|
-
*
|
|
32
|
-
* { status, statusText, ok, headers, body, bodyText, size, duration }
|
|
33
|
-
*
|
|
34
|
-
* `body` is the parsed value per `responseType`. `bodyText` is the raw text
|
|
35
|
-
* (always present, empty for `discard`). `size` is bytes received.
|
|
36
|
-
*
|
|
37
|
-
* The author optionally declares `responseBodySchema` (a JSON Schema). When
|
|
38
|
-
* present the step's `resolveOutputJsonSchema(config)` types the `body`
|
|
39
|
-
* field for downstream variable pickers; the runtime behaviour is unchanged.
|
|
40
|
-
*/
|
|
41
|
-
import { z } from 'zod';
|
|
42
|
-
import { BaseActionStep } from '../base-step.js';
|
|
43
|
-
import { BuiltinStepType } from '../../types/known-types.js';
|
|
44
|
-
import { applyResolvedCredentialAuth, CredentialNameSchema, } from '../../common/credentials.js';
|
|
45
|
-
import { AttachmentSchema, markAttachmentFields } from '../../common/attachment.js';
|
|
46
|
-
import { variableRef } from '../../types/workflow-config.js';
|
|
47
|
-
import { assertPublicHttpUrl } from './ssrf-guard.js';
|
|
48
|
-
const RAW_CONTENT_TYPES = {
|
|
49
|
-
json: 'application/json',
|
|
50
|
-
xml: 'application/xml',
|
|
51
|
-
html: 'text/html',
|
|
52
|
-
text: 'text/plain',
|
|
53
|
-
javascript: 'application/javascript',
|
|
54
|
-
};
|
|
55
|
-
export const HttpRawContentTypeSchema = z.enum([
|
|
56
|
-
'json',
|
|
57
|
-
'xml',
|
|
58
|
-
'html',
|
|
59
|
-
'text',
|
|
60
|
-
'javascript',
|
|
61
|
-
'custom',
|
|
62
|
-
]);
|
|
63
|
-
const HttpBodyNoneSchema = z.object({ mode: z.literal('none') });
|
|
64
|
-
const HttpBodyRawSchema = z.object({
|
|
65
|
-
mode: z.literal('raw'),
|
|
66
|
-
raw: z.string().describe('Raw body content'),
|
|
67
|
-
contentType: HttpRawContentTypeSchema.default('json')
|
|
68
|
-
.describe('Content-Type for the raw body'),
|
|
69
|
-
customContentType: z.string().optional()
|
|
70
|
-
.describe('Used when contentType is "custom" (e.g. application/vnd.api+json)'),
|
|
71
|
-
});
|
|
72
|
-
const HttpBodyUrlencodedFieldSchema = z.object({
|
|
73
|
-
key: z.string().min(1),
|
|
74
|
-
value: z.string(),
|
|
75
|
-
enabled: z.boolean().default(true),
|
|
76
|
-
});
|
|
77
|
-
const HttpBodyUrlencodedSchema = z.object({
|
|
78
|
-
mode: z.literal('urlencoded'),
|
|
79
|
-
fields: z.array(HttpBodyUrlencodedFieldSchema).default([]),
|
|
80
|
-
});
|
|
81
|
-
const HttpBodyFormdataFieldSchema = z.object({
|
|
82
|
-
key: z.string().min(1),
|
|
83
|
-
value: z.string(),
|
|
84
|
-
enabled: z.boolean().default(true),
|
|
85
|
-
});
|
|
86
|
-
const HttpBodyFormdataFileSchema = z.object({
|
|
87
|
-
key: z.string().min(1),
|
|
88
|
-
value: variableRef(z.union([AttachmentSchema, z.array(AttachmentSchema)])).optional(),
|
|
89
|
-
enabled: z.boolean().default(true),
|
|
90
|
-
});
|
|
91
|
-
const HttpBodyFormdataSchema = z.object({
|
|
92
|
-
mode: z.literal('formdata'),
|
|
93
|
-
fields: z.array(HttpBodyFormdataFieldSchema).default([]),
|
|
94
|
-
files: z.array(HttpBodyFormdataFileSchema).optional(),
|
|
95
|
-
});
|
|
96
|
-
export const HttpBodySchema = z.discriminatedUnion('mode', [
|
|
97
|
-
HttpBodyNoneSchema,
|
|
98
|
-
HttpBodyRawSchema,
|
|
99
|
-
HttpBodyUrlencodedSchema,
|
|
100
|
-
HttpBodyFormdataSchema,
|
|
101
|
-
]);
|
|
102
|
-
// ─── Response config (discriminated by type) ───
|
|
103
|
-
/**
|
|
104
|
-
* Response handling. Discriminated so the optional `bodySchema` only lives on
|
|
105
|
-
* the modes where it's meaningful (`json`, `auto`); a `text`/`base64`/`discard`
|
|
106
|
-
* config can't accidentally carry an irrelevant schema.
|
|
107
|
-
*/
|
|
108
|
-
const HttpResponseJsonSchema = z.object({
|
|
109
|
-
type: z.literal('json'),
|
|
110
|
-
bodySchema: z.record(z.unknown()).optional()
|
|
111
|
-
.describe('JSON Schema describing the parsed body. Drives the variable picker for downstream steps.'),
|
|
112
|
-
});
|
|
113
|
-
const HttpResponseAutoSchema = z.object({
|
|
114
|
-
type: z.literal('auto'),
|
|
115
|
-
bodySchema: z.record(z.unknown()).optional()
|
|
116
|
-
.describe('JSON Schema describing the body when the response is JSON. Drives the variable picker for downstream steps.'),
|
|
117
|
-
});
|
|
118
|
-
// `.strict()` so a `bodySchema` accidentally left on these variants is a
|
|
119
|
-
// validation error instead of being silently stripped.
|
|
120
|
-
const HttpResponseTextSchema = z.object({ type: z.literal('text') }).strict();
|
|
121
|
-
const HttpResponseBase64Schema = z.object({ type: z.literal('base64') }).strict();
|
|
122
|
-
const HttpResponseDiscardSchema = z.object({ type: z.literal('discard') }).strict();
|
|
123
|
-
export const HttpResponseSchema = z.discriminatedUnion('type', [
|
|
124
|
-
HttpResponseJsonSchema,
|
|
125
|
-
HttpResponseAutoSchema,
|
|
126
|
-
HttpResponseTextSchema,
|
|
127
|
-
HttpResponseBase64Schema,
|
|
128
|
-
HttpResponseDiscardSchema,
|
|
129
|
-
]);
|
|
130
|
-
// ─── Config ───
|
|
131
|
-
export const HttpMethodSchema = z.enum([
|
|
132
|
-
'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS',
|
|
133
|
-
]);
|
|
134
|
-
export const HttpRequestStepConfigSchema = z.object({
|
|
135
|
-
url: z.string().min(1).describe('Full URL including protocol (e.g. https://api.example.com/data)'),
|
|
136
|
-
method: HttpMethodSchema.default('GET').describe('HTTP method'),
|
|
137
|
-
credentialName: variableRef(CredentialNameSchema.describe('Credential from the vault used to authenticate the request. The executor resolves it before this step runs.')).optional(),
|
|
138
|
-
headers: z.record(z.string(), z.string()).optional().describe('Request headers as key-value pairs'),
|
|
139
|
-
queryParams: z.record(z.string(), z.string()).optional().describe('Query parameters appended to URL'),
|
|
140
|
-
body: HttpBodySchema.default({ mode: 'none' }).describe('Request body — ignored for GET/HEAD. Postman-style modes: none/raw/urlencoded/formdata/binary'),
|
|
141
|
-
response: HttpResponseSchema.default({ type: 'auto' })
|
|
142
|
-
.describe('How to parse the response body. `bodySchema` (on json/auto) types the variable picker for downstream steps.'),
|
|
143
|
-
timeoutMs: z.number().int().positive().default(30_000).describe('Request timeout in milliseconds'),
|
|
144
|
-
followRedirects: z.boolean().default(true).describe('Whether to follow HTTP redirects'),
|
|
145
|
-
});
|
|
146
|
-
const HttpRequestStepOutputSchema = z.object({
|
|
147
|
-
status: z.number().int(),
|
|
148
|
-
statusText: z.string(),
|
|
149
|
-
ok: z.boolean(),
|
|
150
|
-
headers: z.record(z.string(), z.string()),
|
|
151
|
-
body: z.unknown(),
|
|
152
|
-
bodyText: z.string(),
|
|
153
|
-
size: z.number().int().nonnegative(),
|
|
154
|
-
duration: z.number().nonnegative(),
|
|
155
|
-
});
|
|
156
|
-
// ─── Step ───
|
|
157
|
-
export class HttpRequestStep extends BaseActionStep {
|
|
158
|
-
type = BuiltinStepType.HTTP_REQUEST;
|
|
159
|
-
name = 'HTTP Request';
|
|
160
|
-
description = 'Make HTTP requests to external APIs';
|
|
161
|
-
configSchema = HttpRequestStepConfigSchema;
|
|
162
|
-
outputSchema = HttpRequestStepOutputSchema;
|
|
163
|
-
category = 'integration';
|
|
164
|
-
icon = 'globe';
|
|
165
|
-
// The slot name is also the config field: the executor reads the selected
|
|
166
|
-
// name from `config.credentialName` and injects the resolved, validated value
|
|
167
|
-
// as `ctx.credentials.credentialName` before execute() is called.
|
|
168
|
-
credentialSlots = [
|
|
169
|
-
{ name: 'credentialName', required: false },
|
|
170
|
-
];
|
|
171
|
-
decorateConfigSchema(jsonSchema) {
|
|
172
|
-
const rootProps = jsonSchema['properties'];
|
|
173
|
-
if (rootProps?.['credentialName']) {
|
|
174
|
-
rootProps['credentialName'] = {
|
|
175
|
-
...rootProps['credentialName'],
|
|
176
|
-
format: 'credential-name',
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
// The `bodySchema` field inside the discriminated `response` union should
|
|
180
|
-
// render with the JSON Schema builder UI. The schema-form renderer walks
|
|
181
|
-
// discriminator variants, so we tag the field within each variant that
|
|
182
|
-
// carries it (json/auto).
|
|
183
|
-
const props = jsonSchema['properties'];
|
|
184
|
-
const response = props?.['response'];
|
|
185
|
-
const variants = (response?.['anyOf'] ?? response?.['oneOf']);
|
|
186
|
-
if (variants) {
|
|
187
|
-
for (const variant of variants) {
|
|
188
|
-
const vProps = variant['properties'];
|
|
189
|
-
if (vProps?.['bodySchema']) {
|
|
190
|
-
vProps['bodySchema'] = { ...vProps['bodySchema'], format: 'json-schema' };
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
const body = props?.['body'];
|
|
195
|
-
const bodyVariants = (body?.['anyOf'] ?? body?.['oneOf']);
|
|
196
|
-
const formdataVariant = bodyVariants?.find((variant) => {
|
|
197
|
-
const vProps = variant['properties'];
|
|
198
|
-
return vProps?.['mode']?.['const'] === 'formdata';
|
|
199
|
-
});
|
|
200
|
-
const formdataProps = formdataVariant?.['properties'];
|
|
201
|
-
const filesItems = formdataProps?.['files']?.['items'];
|
|
202
|
-
if (filesItems) {
|
|
203
|
-
markAttachmentFields(filesItems, ['value']);
|
|
204
|
-
}
|
|
205
|
-
return jsonSchema;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Per-instance output schema. When the author's `response` config provides
|
|
209
|
-
* a `bodySchema` (json/auto), we plug it into `body`. For other response
|
|
210
|
-
* types (`text`, `base64`, `discard`) we set the body's static type since
|
|
211
|
-
* no user shape is involved.
|
|
212
|
-
*/
|
|
213
|
-
resolveOutputJsonSchema(config) {
|
|
214
|
-
const response = (config['response'] ?? { type: 'auto' });
|
|
215
|
-
const bodySchema = this.outputBodySchemaFor(response);
|
|
216
|
-
return {
|
|
217
|
-
type: 'object',
|
|
218
|
-
properties: {
|
|
219
|
-
status: { type: 'integer' },
|
|
220
|
-
statusText: { type: 'string' },
|
|
221
|
-
ok: { type: 'boolean' },
|
|
222
|
-
headers: {
|
|
223
|
-
type: 'object',
|
|
224
|
-
additionalProperties: { type: 'string' },
|
|
225
|
-
},
|
|
226
|
-
body: bodySchema,
|
|
227
|
-
bodyText: { type: 'string' },
|
|
228
|
-
size: { type: 'integer' },
|
|
229
|
-
duration: { type: 'integer' },
|
|
230
|
-
},
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
outputBodySchemaFor(response) {
|
|
234
|
-
switch (response.type) {
|
|
235
|
-
case 'json':
|
|
236
|
-
case 'auto':
|
|
237
|
-
return response.bodySchema && Object.keys(response.bodySchema).length > 0
|
|
238
|
-
? response.bodySchema
|
|
239
|
-
: { type: 'object' };
|
|
240
|
-
case 'text':
|
|
241
|
-
return { type: 'string' };
|
|
242
|
-
case 'base64':
|
|
243
|
-
return { type: 'string', contentEncoding: 'base64' };
|
|
244
|
-
case 'discard':
|
|
245
|
-
return { type: 'null' };
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
redactInput(input) {
|
|
249
|
-
const redacted = { ...input };
|
|
250
|
-
// Never persist body — may contain sensitive data
|
|
251
|
-
if ('body' in redacted) {
|
|
252
|
-
redacted['body'] = '[REDACTED]';
|
|
253
|
-
}
|
|
254
|
-
// Redact auth tokens
|
|
255
|
-
if (redacted['auth'] && typeof redacted['auth'] === 'object') {
|
|
256
|
-
const auth = { ...redacted['auth'] };
|
|
257
|
-
if ('token' in auth)
|
|
258
|
-
auth['token'] = '[REDACTED]';
|
|
259
|
-
if ('password' in auth)
|
|
260
|
-
auth['password'] = '[REDACTED]';
|
|
261
|
-
if ('key' in auth)
|
|
262
|
-
auth['key'] = '[REDACTED]';
|
|
263
|
-
if ('value' in auth)
|
|
264
|
-
auth['value'] = '[REDACTED]';
|
|
265
|
-
redacted['auth'] = auth;
|
|
266
|
-
}
|
|
267
|
-
return redacted;
|
|
268
|
-
}
|
|
269
|
-
async execute(config, ctx) {
|
|
270
|
-
// Build URL with query params
|
|
271
|
-
const url = this.buildUrl(config.url, config.queryParams);
|
|
272
|
-
// Build headers: user headers FIRST, then managed credential auth LAST — so
|
|
273
|
-
// a conflicting manually-entered header can't override the selected
|
|
274
|
-
// credential's authentication.
|
|
275
|
-
const headers = new Headers();
|
|
276
|
-
if (config.headers) {
|
|
277
|
-
for (const [k, v] of Object.entries(config.headers)) {
|
|
278
|
-
headers.set(k, v);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
const credential = ctx.credentials['credentialName'];
|
|
282
|
-
if (credential) {
|
|
283
|
-
applyResolvedCredentialAuth(headers, credential);
|
|
284
|
-
}
|
|
285
|
-
// Build request. Redirects are followed manually (redirect: 'manual') so the
|
|
286
|
-
// SSRF guard re-checks every hop — native 'follow' would chase a redirect
|
|
287
|
-
// straight to a private / cloud-metadata address.
|
|
288
|
-
const init = {
|
|
289
|
-
method: config.method,
|
|
290
|
-
headers,
|
|
291
|
-
redirect: 'manual',
|
|
292
|
-
};
|
|
293
|
-
// Encode body for methods that support it.
|
|
294
|
-
// GET/HEAD never carry a body even if the user configured one.
|
|
295
|
-
if (config.body.mode !== 'none' && !['GET', 'HEAD'].includes(config.method)) {
|
|
296
|
-
const encoded = await this.encodeBody(config.body, headers, ctx);
|
|
297
|
-
if (encoded !== undefined) {
|
|
298
|
-
init.body = encoded;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
// Timeout
|
|
302
|
-
const controller = new AbortController();
|
|
303
|
-
const timer = setTimeout(() => controller.abort(), config.timeoutMs);
|
|
304
|
-
init.signal = controller.signal;
|
|
305
|
-
const maxRedirects = config.followRedirects ? 5 : 0;
|
|
306
|
-
const t0 = Date.now();
|
|
307
|
-
let response;
|
|
308
|
-
try {
|
|
309
|
-
let currentUrl = url.toString();
|
|
310
|
-
let hops = 0;
|
|
311
|
-
for (;;) {
|
|
312
|
-
// SSRF guard runs on the initial URL and on every redirect target.
|
|
313
|
-
await assertPublicHttpUrl(currentUrl);
|
|
314
|
-
response = await fetch(currentUrl, init);
|
|
315
|
-
const location = response.headers.get('location');
|
|
316
|
-
const isRedirectStatus = response.status >= 300 && response.status < 400;
|
|
317
|
-
if (!isRedirectStatus || location === null || hops >= maxRedirects)
|
|
318
|
-
break;
|
|
319
|
-
hops += 1;
|
|
320
|
-
currentUrl = new URL(location, currentUrl).toString();
|
|
321
|
-
// A one-shot body (multipart/stream) can't be replayed on the next hop.
|
|
322
|
-
if (init.body instanceof FormData || init.body instanceof ReadableStream) {
|
|
323
|
-
init.body = null;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
catch (err) {
|
|
328
|
-
clearTimeout(timer);
|
|
329
|
-
if (err instanceof DOMException && err.name === 'AbortError') {
|
|
330
|
-
throw new Error(`HTTP_REQUEST to ${config.url} timed out after ${String(config.timeoutMs)}ms`);
|
|
331
|
-
}
|
|
332
|
-
throw new Error(`HTTP_REQUEST to ${config.url} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
333
|
-
}
|
|
334
|
-
clearTimeout(timer);
|
|
335
|
-
const duration = Date.now() - t0;
|
|
336
|
-
// Always capture raw bytes; we then expose size, bodyText, and the
|
|
337
|
-
// parsed body view in one pass.
|
|
338
|
-
const responseHeaders = {};
|
|
339
|
-
response.headers.forEach((value, key) => {
|
|
340
|
-
responseHeaders[key] = value;
|
|
341
|
-
});
|
|
342
|
-
if (config.response.type === 'discard') {
|
|
343
|
-
return {
|
|
344
|
-
status: response.status,
|
|
345
|
-
statusText: response.statusText,
|
|
346
|
-
ok: response.ok,
|
|
347
|
-
headers: responseHeaders,
|
|
348
|
-
body: null,
|
|
349
|
-
bodyText: '',
|
|
350
|
-
size: 0,
|
|
351
|
-
duration,
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
const rawBytes = new Uint8Array(await response.arrayBuffer());
|
|
355
|
-
const size = rawBytes.byteLength;
|
|
356
|
-
const bodyText = this.decodeText(rawBytes);
|
|
357
|
-
const body = this.parseResponseBody(rawBytes, bodyText, responseHeaders, config.response.type);
|
|
358
|
-
return {
|
|
359
|
-
status: response.status,
|
|
360
|
-
statusText: response.statusText,
|
|
361
|
-
ok: response.ok,
|
|
362
|
-
headers: responseHeaders,
|
|
363
|
-
body,
|
|
364
|
-
bodyText,
|
|
365
|
-
size,
|
|
366
|
-
duration,
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
// ─── URL building ───
|
|
370
|
-
buildUrl(baseUrl, queryParams) {
|
|
371
|
-
const url = new URL(baseUrl);
|
|
372
|
-
if (queryParams) {
|
|
373
|
-
for (const [k, v] of Object.entries(queryParams)) {
|
|
374
|
-
url.searchParams.append(k, v);
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
return url;
|
|
378
|
-
}
|
|
379
|
-
// ─── Body encoding (Postman-style modes) ───
|
|
380
|
-
/**
|
|
381
|
-
* Encode the request body for the given mode. Mutates `headers` to set
|
|
382
|
-
* the appropriate Content-Type unless the user already supplied one.
|
|
383
|
-
*
|
|
384
|
-
* Returns the `BodyInit` to attach (or `undefined` for empty bodies).
|
|
385
|
-
*/
|
|
386
|
-
async encodeBody(body, headers, ctx) {
|
|
387
|
-
switch (body.mode) {
|
|
388
|
-
case 'none':
|
|
389
|
-
return undefined;
|
|
390
|
-
case 'raw': {
|
|
391
|
-
if (!headers.has('content-type')) {
|
|
392
|
-
const ct = body.contentType === 'custom'
|
|
393
|
-
? body.customContentType ?? 'application/octet-stream'
|
|
394
|
-
: RAW_CONTENT_TYPES[body.contentType];
|
|
395
|
-
headers.set('content-type', ct);
|
|
396
|
-
}
|
|
397
|
-
return body.raw;
|
|
398
|
-
}
|
|
399
|
-
case 'urlencoded': {
|
|
400
|
-
if (!headers.has('content-type')) {
|
|
401
|
-
headers.set('content-type', 'application/x-www-form-urlencoded');
|
|
402
|
-
}
|
|
403
|
-
const params = new URLSearchParams();
|
|
404
|
-
for (const f of body.fields) {
|
|
405
|
-
if (f.enabled === false)
|
|
406
|
-
continue;
|
|
407
|
-
params.append(f.key, f.value);
|
|
408
|
-
}
|
|
409
|
-
return params.toString();
|
|
410
|
-
}
|
|
411
|
-
case 'formdata': {
|
|
412
|
-
// Let fetch set the multipart boundary in Content-Type automatically.
|
|
413
|
-
if (headers.has('content-type')) {
|
|
414
|
-
headers.delete('content-type');
|
|
415
|
-
}
|
|
416
|
-
const form = new FormData();
|
|
417
|
-
for (const f of body.fields) {
|
|
418
|
-
if (f.enabled === false)
|
|
419
|
-
continue;
|
|
420
|
-
form.append(f.key, f.value);
|
|
421
|
-
}
|
|
422
|
-
for (const f of body.files ?? []) {
|
|
423
|
-
if (f.enabled === false)
|
|
424
|
-
continue;
|
|
425
|
-
if (f.value === undefined || f.value === null)
|
|
426
|
-
continue;
|
|
427
|
-
const attachments = (Array.isArray(f.value) ? f.value : [f.value])
|
|
428
|
-
.filter((value) => typeof value === 'object' && value !== null);
|
|
429
|
-
for (const attachment of attachments) {
|
|
430
|
-
const bytes = await ctx.storage.read(attachment, ctx.runtime.attributes);
|
|
431
|
-
form.append(f.key, new Blob([bytes], { type: attachment.mimeType }), attachment.name);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
return form;
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
// ─── Response parsing ───
|
|
439
|
-
decodeText(bytes) {
|
|
440
|
-
try {
|
|
441
|
-
// strict: false → invalid utf-8 yields replacement chars instead of throwing.
|
|
442
|
-
return new TextDecoder('utf-8', { fatal: false }).decode(bytes);
|
|
443
|
-
}
|
|
444
|
-
catch {
|
|
445
|
-
return '';
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
parseResponseBody(bytes, bodyText, headers, responseType) {
|
|
449
|
-
switch (responseType) {
|
|
450
|
-
case 'json':
|
|
451
|
-
// Throws on malformed JSON — explicit opt-in to strict parsing.
|
|
452
|
-
return JSON.parse(bodyText);
|
|
453
|
-
case 'text':
|
|
454
|
-
return bodyText;
|
|
455
|
-
case 'base64':
|
|
456
|
-
return bytesToBase64(bytes);
|
|
457
|
-
case 'discard':
|
|
458
|
-
return null;
|
|
459
|
-
case 'auto':
|
|
460
|
-
return this.autoParseBody(bodyText, headers);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
autoParseBody(bodyText, headers) {
|
|
464
|
-
const ct = headers['content-type'] ?? '';
|
|
465
|
-
if (ct.includes('application/json')) {
|
|
466
|
-
try {
|
|
467
|
-
return JSON.parse(bodyText);
|
|
468
|
-
}
|
|
469
|
-
catch {
|
|
470
|
-
return bodyText;
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
if (ct.startsWith('text/')) {
|
|
474
|
-
return bodyText;
|
|
475
|
-
}
|
|
476
|
-
return null;
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
// ─── Helpers ───
|
|
480
|
-
/** Encode bytes as base64. Works in browsers and Node (no Buffer dependency). */
|
|
481
|
-
function bytesToBase64(bytes) {
|
|
482
|
-
let binary = '';
|
|
483
|
-
const chunkSize = 0x8000;
|
|
484
|
-
for (let i = 0; i < bytes.length; i += chunkSize) {
|
|
485
|
-
const chunk = bytes.subarray(i, i + chunkSize);
|
|
486
|
-
binary += String.fromCharCode(...chunk);
|
|
487
|
-
}
|
|
488
|
-
// btoa is global in Node 18+ and all browsers.
|
|
489
|
-
return btoa(binary);
|
|
490
|
-
}
|
|
491
|
-
//# sourceMappingURL=http-request.step.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-request.step.js","sourceRoot":"","sources":["../../../src/steps/builtin/http-request.step.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LOOP step — iterate over an array and walk a body branch per item.
|
|
3
|
-
*
|
|
4
|
-
* BaseControlFlowStep with a single `body` branch. For each item in the
|
|
5
|
-
* source array, sets `ctx.workflow.steps[loopStepId].currentItem` and walks
|
|
6
|
-
* the body branch.
|
|
7
|
-
*
|
|
8
|
-
* Output: `{ results: unknown[], count: number }`
|
|
9
|
-
*/
|
|
10
|
-
import { z } from 'zod';
|
|
11
|
-
import { BaseControlFlowStep } from '../base-step.js';
|
|
12
|
-
import type { ControlFlowExecutionContext } from '../base-step.js';
|
|
13
|
-
import { BuiltinStepType } from '../../types/known-types.js';
|
|
14
|
-
import type { WorkflowStepConfig } from '../../types/workflow-config.js';
|
|
15
|
-
export declare const LoopStepConfigSchema: z.ZodObject<{
|
|
16
|
-
source: z.ZodString;
|
|
17
|
-
body: z.ZodArray<z.ZodObject<{
|
|
18
|
-
id: z.ZodString;
|
|
19
|
-
type: z.ZodString;
|
|
20
|
-
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
21
|
-
id: z.ZodString;
|
|
22
|
-
type: z.ZodString;
|
|
23
|
-
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
24
|
-
id: z.ZodString;
|
|
25
|
-
type: z.ZodString;
|
|
26
|
-
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
27
|
-
maxIterations: z.ZodDefault<z.ZodNumber>;
|
|
28
|
-
}, "strip", z.ZodTypeAny, {
|
|
29
|
-
body: z.objectOutputType<{
|
|
30
|
-
id: z.ZodString;
|
|
31
|
-
type: z.ZodString;
|
|
32
|
-
}, z.ZodTypeAny, "passthrough">[];
|
|
33
|
-
source: string;
|
|
34
|
-
maxIterations: number;
|
|
35
|
-
}, {
|
|
36
|
-
body: z.objectInputType<{
|
|
37
|
-
id: z.ZodString;
|
|
38
|
-
type: z.ZodString;
|
|
39
|
-
}, z.ZodTypeAny, "passthrough">[];
|
|
40
|
-
source: string;
|
|
41
|
-
maxIterations?: number | undefined;
|
|
42
|
-
}>;
|
|
43
|
-
export type LoopStepConfig = z.infer<typeof LoopStepConfigSchema>;
|
|
44
|
-
export interface LoopStepOutput extends Record<string, unknown> {
|
|
45
|
-
results: unknown[];
|
|
46
|
-
count: number;
|
|
47
|
-
}
|
|
48
|
-
export declare class LoopStep extends BaseControlFlowStep<typeof LoopStepConfigSchema, LoopStepOutput> {
|
|
49
|
-
readonly type = BuiltinStepType.LOOP;
|
|
50
|
-
readonly name = "Loop";
|
|
51
|
-
readonly description = "Iterate over an array and execute steps for each item";
|
|
52
|
-
readonly configSchema: z.ZodObject<{
|
|
53
|
-
source: z.ZodString;
|
|
54
|
-
body: z.ZodArray<z.ZodObject<{
|
|
55
|
-
id: z.ZodString;
|
|
56
|
-
type: z.ZodString;
|
|
57
|
-
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
58
|
-
id: z.ZodString;
|
|
59
|
-
type: z.ZodString;
|
|
60
|
-
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
61
|
-
id: z.ZodString;
|
|
62
|
-
type: z.ZodString;
|
|
63
|
-
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
64
|
-
maxIterations: z.ZodDefault<z.ZodNumber>;
|
|
65
|
-
}, "strip", z.ZodTypeAny, {
|
|
66
|
-
body: z.objectOutputType<{
|
|
67
|
-
id: z.ZodString;
|
|
68
|
-
type: z.ZodString;
|
|
69
|
-
}, z.ZodTypeAny, "passthrough">[];
|
|
70
|
-
source: string;
|
|
71
|
-
maxIterations: number;
|
|
72
|
-
}, {
|
|
73
|
-
body: z.objectInputType<{
|
|
74
|
-
id: z.ZodString;
|
|
75
|
-
type: z.ZodString;
|
|
76
|
-
}, z.ZodTypeAny, "passthrough">[];
|
|
77
|
-
source: string;
|
|
78
|
-
maxIterations?: number | undefined;
|
|
79
|
-
}>;
|
|
80
|
-
readonly outputSchema: z.ZodObject<{
|
|
81
|
-
results: z.ZodArray<z.ZodUnknown, "many">;
|
|
82
|
-
count: z.ZodNumber;
|
|
83
|
-
}, "strip", z.ZodTypeAny, {
|
|
84
|
-
results: unknown[];
|
|
85
|
-
count: number;
|
|
86
|
-
}, {
|
|
87
|
-
results: unknown[];
|
|
88
|
-
count: number;
|
|
89
|
-
}>;
|
|
90
|
-
readonly category: "control";
|
|
91
|
-
readonly branchModel: "iterate";
|
|
92
|
-
readonly icon = "repeat";
|
|
93
|
-
readonly declaredOutputs: readonly [{
|
|
94
|
-
readonly key: "body";
|
|
95
|
-
readonly label: "For each item";
|
|
96
|
-
}];
|
|
97
|
-
getBranches(config: Record<string, unknown>): Record<string, WorkflowStepConfig[]>;
|
|
98
|
-
execute(config: LoopStepConfig, ctx: ControlFlowExecutionContext): Promise<LoopStepOutput>;
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=loop.step.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loop.step.d.ts","sourceRoot":"","sources":["../../../src/steps/builtin/loop.step.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAc,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAKzE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,MAAM,WAAW,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AASD,qBAAa,QAAS,SAAQ,mBAAmB,CAC/C,OAAO,oBAAoB,EAC3B,cAAc,CACf;IACC,SAAkB,IAAI,wBAAwB;IAC9C,SAAkB,IAAI,UAAU;IAChC,SAAkB,WAAW,2DAA2D;IACxF,SAAkB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;OAAwB;IACtD,SAAkB,YAAY;;;;;;;;;OAAwB;IACtD,SAAkB,QAAQ,EAAG,SAAS,CAAU;IAChD,SAAkB,WAAW,EAAG,SAAS,CAAU;IACnD,SAAkB,IAAI,YAAY;IAClC,SAAkB,eAAe;;;OAEtB;IAEF,WAAW,CAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAMxB,OAAO,CACpB,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,2BAA2B,GAC/B,OAAO,CAAC,cAAc,CAAC;CA4C3B"}
|