@powerhousedao/pieces-framework 6.2.3-dev.22 → 6.2.3-dev.24
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 +33 -0
- package/UPSTREAM.md +52 -5
- package/dist/host.d.ts +8 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +1 -1
- package/dist/host.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -87,6 +87,39 @@ import { httpClient, HttpMethod } from "@powerhousedao/pieces-framework/common";
|
|
|
87
87
|
Powerhouse documents is the reactor piece's job, and a workflow composes the
|
|
88
88
|
two as separate steps.
|
|
89
89
|
|
|
90
|
+
To give a connection a status and an account label in Connect, declare
|
|
91
|
+
`validate` and `getConnectionIdentifier` on the auth. Both are handed the
|
|
92
|
+
flat auth value (here the props themselves, not `{ type, props }`):
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
const invoicesAuth = PieceAuth.CustomAuth({
|
|
96
|
+
displayName: "Invoices",
|
|
97
|
+
required: true,
|
|
98
|
+
props: {
|
|
99
|
+
base_url: Property.ShortText({
|
|
100
|
+
displayName: "Base URL",
|
|
101
|
+
required: true,
|
|
102
|
+
}),
|
|
103
|
+
token: PieceAuth.SecretText({ displayName: "Token", required: true }),
|
|
104
|
+
},
|
|
105
|
+
validate: async ({ auth }) => {
|
|
106
|
+
try {
|
|
107
|
+
await clientFor(auth).ping();
|
|
108
|
+
return { valid: true };
|
|
109
|
+
} catch (error) {
|
|
110
|
+
return { valid: false, error: String(error) };
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
getConnectionIdentifier: async ({ auth }) =>
|
|
114
|
+
(await clientFor(auth).me()).email,
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
A reactor runs `validate` for the check's result and, when it passes,
|
|
119
|
+
`getConnectionIdentifier` for the account label. The label is best-effort:
|
|
120
|
+
returning `undefined` or throwing keeps the previous label and still passes
|
|
121
|
+
the check.
|
|
122
|
+
|
|
90
123
|
3. **Register it.** List the piece in `pieces/index.ts` as a `PackagePiece`
|
|
91
124
|
and in the package manifest under `"pieces"`:
|
|
92
125
|
|
package/UPSTREAM.md
CHANGED
|
@@ -43,16 +43,20 @@ Left out: `mime-db-min.cjs` (upstream's bundler alias that keeps `mime-db`,
|
|
|
43
43
|
pulled in through `form-data`, out of piece bundles; aliasing is the piece
|
|
44
44
|
build's job, so `ph build` may adopt it later) and upstream's unused `ai` and
|
|
45
45
|
`semver` dependencies.
|
|
46
|
-
Of the engine's own tests only
|
|
47
|
-
`test/variables/file-processor.test.ts
|
|
48
|
-
|
|
46
|
+
Of the engine's own tests only those that exercise vendored code come along:
|
|
47
|
+
`test/variables/{props-validator,file-processor,dynamic-prop-keys}.test.ts`,
|
|
48
|
+
`test/helper/polling-helper.test.ts` and
|
|
49
|
+
`test/http/formdata-multipart-claim-verify.test.ts` (which guards the patched
|
|
50
|
+
`fetch-http-client.ts`). The rest need `@activepieces/shared`,
|
|
51
|
+
`props-resolver` or `FlowExecutorContext`.
|
|
49
52
|
|
|
50
53
|
`@activepieces/shared` (8k lines of platform entities) is not vendored. The four
|
|
51
54
|
piece packages never import it; the engine files do, so the codemod re-homes
|
|
52
55
|
each symbol they use — `AUTHENTICATION_PROPERTY_NAME` and `AppConnectionValue`
|
|
53
56
|
to `upstream/core-piece-types/`, which really defines them, and `PropertySettings`
|
|
54
|
-
to `src/host/shared-shim.ts`, a Powerhouse-owned
|
|
55
|
-
|
|
57
|
+
and `PropertyExecutionType` to `src/host/shared-shim.ts`, a Powerhouse-owned
|
|
58
|
+
declaration of the minimal shapes `props-processor.ts` and its tests read. An
|
|
59
|
+
unmapped symbol fails the sync.
|
|
56
60
|
|
|
57
61
|
`deepmerge-ts` is a devDependency only: `core-utils` imports it in
|
|
58
62
|
`deepMergeAndCast`, which the framework barrel never re-exports, so the source
|
|
@@ -149,6 +153,11 @@ Current patches:
|
|
|
149
153
|
`Property.MarkDown` always writes one and the exported type declares it,
|
|
150
154
|
but the schema had no such key, so zod silently stripped
|
|
151
155
|
`WARNING`/`TIP`/`BORDERLESS` variants on parse.
|
|
156
|
+
- `upstream/framework/lib/trigger/trigger.ts`: give `createTrigger`'s switch a
|
|
157
|
+
`default` that throws, naming the trigger and its `type`. The switch had none,
|
|
158
|
+
so a missing or misspelt strategy returned `undefined`, and the piece failed
|
|
159
|
+
later wherever that trigger was first read. TypeScript already rejects it;
|
|
160
|
+
this covers code that bypasses the types.
|
|
152
161
|
- `upstream/framework/index.ts` and `upstream/framework/lib/property/index.ts`:
|
|
153
162
|
re-export `SeekPage`, `McpAuthConfig` and `InputProperty` as values instead
|
|
154
163
|
of `export type`. Each is a zod schema merged with a type; rolldown-plugin-dts
|
|
@@ -156,8 +165,14 @@ Current patches:
|
|
|
156
165
|
type-only re-export let `import { SeekPage }` typecheck and then fail at link
|
|
157
166
|
time. The runtime gains three exports upstream's lacks; `test/dist.test.ts`
|
|
158
167
|
holds the d.ts to the runtime.
|
|
168
|
+
- `upstream/engine/lib/variables/props-processor.ts`: export
|
|
169
|
+
`validateProperty`, the validator half of `applyProcessorsAndValidators`.
|
|
170
|
+
A host that coerces values with its own processors first (reactor-workflow
|
|
171
|
+
hydrates FILE props itself) validates the result with it.
|
|
159
172
|
- `test/upstream/framework/test/connection-identifier-flag.test.ts`: pass
|
|
160
173
|
`authors: []` to `createPiece` (upstream does not typecheck its tests).
|
|
174
|
+
- `test/upstream/engine/test/variables/dynamic-prop-keys.test.ts`: pass
|
|
175
|
+
`auth: undefined` to `Property.DynamicProperties`, which requires it.
|
|
161
176
|
- `test/upstream/core-utils/test/ai-provider-health.test.ts`: make the outcome
|
|
162
177
|
reporter return `void` instead of `Array.prototype.push`'s number (three
|
|
163
178
|
sites).
|
|
@@ -170,3 +185,35 @@ Current patches:
|
|
|
170
185
|
|
|
171
186
|
The vendored trees are excluded from the root ESLint run: their lint stance is
|
|
172
187
|
upstream's, and the codemod already applies this repo's formatting.
|
|
188
|
+
|
|
189
|
+
## Conformance suite for reactor-workflow
|
|
190
|
+
|
|
191
|
+
The same sync also generates
|
|
192
|
+
[`../reactor-workflow/test/upstream/`](../reactor-workflow/test/upstream):
|
|
193
|
+
Activepieces engine tests that run against our engine instead of vendored code.
|
|
194
|
+
It lives in this script rather than a second one so that one run, from one
|
|
195
|
+
checkout, regenerates both trees under one codemod and one patch contract.
|
|
196
|
+
|
|
197
|
+
`CONFORMANCE` in `scripts/sync-upstream.mts` lists each upstream test and its
|
|
198
|
+
target, optionally cut down to literal `excerpt` segments. For each file the
|
|
199
|
+
sync:
|
|
200
|
+
|
|
201
|
+
1. Rewrites `@activepieces/pieces-framework` and `@activepieces/pieces-common`
|
|
202
|
+
to our published `@powerhousedao/pieces-framework` entries.
|
|
203
|
+
2. Rewrites every other upstream import through `IMPORT_REDIRECTS` to an adapter
|
|
204
|
+
in `../reactor-workflow/test/upstream-adapters/`, which exposes the upstream
|
|
205
|
+
API (`createContextStore`, `createConnectionResolver`, `ssrfGuard`,
|
|
206
|
+
`propsProcessor`, the `@activepieces/shared` symbols) over our code. An
|
|
207
|
+
import with no redirect fails the sync.
|
|
208
|
+
3. Adds the header, formats, and applies `CONFORMANCE_PATCHES`, which carry the
|
|
209
|
+
same `count` and `why` as `PATCHES`.
|
|
210
|
+
4. Marks each `CONFORMANCE_SKIPS` case `it.skip` and each `KNOWN_DIVERGENCES`
|
|
211
|
+
case `it.fails`, with a comment giving the reason and, for a divergence, the
|
|
212
|
+
issue or README item that fixes it; a deliberate divergence names none. A
|
|
213
|
+
name that no longer matches upstream fails the sync. When a fix lands, its
|
|
214
|
+
`it.fails` starts failing: drop the entry and re-sync.
|
|
215
|
+
5. Writes `test/upstream/MANIFEST.json` there, with the upstream path and
|
|
216
|
+
SHA-256 of each original and the lists of divergences and skips.
|
|
217
|
+
|
|
218
|
+
Nothing is taken from `packages/ee/` or `packages/server/api/src/app/ee`, which
|
|
219
|
+
are not MIT.
|
package/dist/host.d.ts
CHANGED
|
@@ -76,7 +76,13 @@ declare const objectProcessor: ProcessorFn;
|
|
|
76
76
|
declare const textProcessor: ProcessorFn;
|
|
77
77
|
//#endregion
|
|
78
78
|
//#region src/host/shared-shim.d.ts
|
|
79
|
+
declare const PropertyExecutionType: {
|
|
80
|
+
readonly MANUAL: "MANUAL";
|
|
81
|
+
readonly DYNAMIC: "DYNAMIC";
|
|
82
|
+
};
|
|
83
|
+
type PropertyExecutionType = (typeof PropertyExecutionType)[keyof typeof PropertyExecutionType];
|
|
79
84
|
type PropertySettings = {
|
|
85
|
+
type?: PropertyExecutionType;
|
|
80
86
|
schema: InputPropertyMap;
|
|
81
87
|
};
|
|
82
88
|
//#endregion
|
|
@@ -90,6 +96,7 @@ declare const propsProcessor: {
|
|
|
90
96
|
errors: PropsValidationError;
|
|
91
97
|
}>;
|
|
92
98
|
};
|
|
99
|
+
declare const validateProperty: (property: PieceProperty, value: unknown, originalValue: unknown) => string[];
|
|
93
100
|
//#endregion
|
|
94
|
-
export { type FriendlyPieceError, type ProcessorFn, type PropertySettings, arrayZipperProcessor, checkboxProcessor, dateTimeProcessor, dynamicPropKeys, fileProcessor, formatPieceError, jsonProcessor, multiSelectProcessor, numberProcessor, objectProcessor, processors, propsProcessor, ssrfIpClassifier, textProcessor, tryParseFriendlyPieceError };
|
|
101
|
+
export { type FriendlyPieceError, type ProcessorFn, type PropertySettings, arrayZipperProcessor, checkboxProcessor, dateTimeProcessor, dynamicPropKeys, fileProcessor, formatPieceError, jsonProcessor, multiSelectProcessor, numberProcessor, objectProcessor, processors, propsProcessor, ssrfIpClassifier, textProcessor, tryParseFriendlyPieceError, validateProperty };
|
|
95
102
|
//# sourceMappingURL=host.d.ts.map
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/types.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../src/host/shared-shim.ts","../upstream/engine/lib/variables/props-processor.ts"],"mappings":";;;cAkYa,gBAAA,GACX,KAAA,WACA,OAAA,GAAU,uBAAA,KACT,kBAAA;AAAA,cAgDU,0BAAA,GACX,KAAA,cACC,kBAAA;AAAA,KAwBS,kBAAA;EACV,gBAAA;EACA,OAAA;EACA,SAAA;EACA,MAAA;EACA,YAAA;EACA,eAAA,GAAkB,MAAA;EAClB,WAAA;EACA,UAAA;EACA,aAAA;EACA,UAAA;EACA,GAAA;AAAA;AAAA,KAGG,uBAAA;EACH,GAAA;AAAA;;;iBCzaO,WAAA,CAAA;EACP,EAAA;EACA;AAAA;EAEA,EAAA;EACA,SAAA;AAAA;AAAA,cAYW,gBAAA;sBAEZ,WAAA;AAAA;;;iBC/DQ,eAAA,CAAgB,KAAA,EAAO,gBAAA,GAAmB,gBAAA;AAAA,iBAM1C,iBAAA,CAAkB,KAAA,EAAO,gBAAA,GAAmB,gBAAA;AAAA,iBAS5C,iBAAA,GAAA,CAAqB,KAAA,EAAO,CAAA,GAAI,CAAA;AAAA,cAkD5B,eAAA;;;;;;;KCpED,WAAA,+BACV,QAAA,EAAU,aAAA,EACV,KAAA,EAAO,KAAA,KACJ,MAAA;;;cCiBQ,oBAAA,EAAsB,WAAA;;;cCrBtB,iBAAA,EAAmB,WAAA;;;cCEnB,iBAAA,EAAmB,WAAA;;;cCCnB,aAAA,EAAe,WAAA;;;cCKf,UAAA,EAAY,OAAA,CAAQ,MAAA,CAAO,YAAA,EAAc,WAAA;;;cCRzC,aAAA,EAAe,WAAA;;;cCAf,oBAAA,EAAsB,WAAA;;;cCAtB,eAAA,EAAiB,WAAA;;;cCAjB,eAAA,EAAiB,WAAA;;;cCAjB,aAAA,EAAe,WAAA;;;
|
|
1
|
+
{"version":3,"file":"host.d.ts","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/types.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../src/host/shared-shim.ts","../upstream/engine/lib/variables/props-processor.ts"],"mappings":";;;cAkYa,gBAAA,GACX,KAAA,WACA,OAAA,GAAU,uBAAA,KACT,kBAAA;AAAA,cAgDU,0BAAA,GACX,KAAA,cACC,kBAAA;AAAA,KAwBS,kBAAA;EACV,gBAAA;EACA,OAAA;EACA,SAAA;EACA,MAAA;EACA,YAAA;EACA,eAAA,GAAkB,MAAA;EAClB,WAAA;EACA,UAAA;EACA,aAAA;EACA,UAAA;EACA,GAAA;AAAA;AAAA,KAGG,uBAAA;EACH,GAAA;AAAA;;;iBCzaO,WAAA,CAAA;EACP,EAAA;EACA;AAAA;EAEA,EAAA;EACA,SAAA;AAAA;AAAA,cAYW,gBAAA;sBAEZ,WAAA;AAAA;;;iBC/DQ,eAAA,CAAgB,KAAA,EAAO,gBAAA,GAAmB,gBAAA;AAAA,iBAM1C,iBAAA,CAAkB,KAAA,EAAO,gBAAA,GAAmB,gBAAA;AAAA,iBAS5C,iBAAA,GAAA,CAAqB,KAAA,EAAO,CAAA,GAAI,CAAA;AAAA,cAkD5B,eAAA;;;;;;;KCpED,WAAA,+BACV,QAAA,EAAU,aAAA,EACV,KAAA,EAAO,KAAA,KACJ,MAAA;;;cCiBQ,oBAAA,EAAsB,WAAA;;;cCrBtB,iBAAA,EAAmB,WAAA;;;cCEnB,iBAAA,EAAmB,WAAA;;;cCCnB,aAAA,EAAe,WAAA;;;cCKf,UAAA,EAAY,OAAA,CAAQ,MAAA,CAAO,YAAA,EAAc,WAAA;;;cCRzC,aAAA,EAAe,WAAA;;;cCAf,oBAAA,EAAsB,WAAA;;;cCAtB,eAAA,EAAiB,WAAA;;;cCAjB,eAAA,EAAiB,WAAA;;;cCAjB,aAAA,EAAe,WAAA;;;cCAf,qBAAA;EAAA,SAGH,MAAA;EAAA,SAAA,OAAA;AAAA;AAAA,KACE,qBAAA,WACF,qBAAA,eAAoC,qBAAA;AAAA,KAIlC,gBAAA;EACV,IAAA,GAAO,qBAAA;EACP,MAAA,EAAQ,gBAAA;AAAA;;;KCOL,oBAAA;EAAA,CACF,GAAA,sBAAyB,oBAAA,GAAuB,oBAAA;AAAA;AAAA,cAGtC,cAAA;gDAEM,gBAAA,CAAiB,gBAAA,GAAiB,KAAA,EAC1C,gBAAA,EAAgB,IAAA,EACjB,iBAAA,GAAoB,iBAAA,gBAA+B,WAAA,WACrC,gBAAA,EACF,MAAA,SAAe,gBAAA,MAChC,OAAA;IACD,cAAA,EAAgB,gBAAA,CAAiB,gBAAA;IACjC,MAAA,EAAQ,oBAAA;EAAA;AAAA;AAAA,cA0IC,gBAAA,GACX,QAAA,EAAU,aAAA,EACV,KAAA,WACA,aAAA"}
|
package/dist/host.js
CHANGED
|
@@ -719,5 +719,5 @@ function getAuthPropsToProcess(authValue, auth) {
|
|
|
719
719
|
}
|
|
720
720
|
|
|
721
721
|
//#endregion
|
|
722
|
-
export { arrayZipperProcessor, checkboxProcessor, dateTimeProcessor, dynamicPropKeys, fileProcessor, formatPieceError, jsonProcessor, multiSelectProcessor, numberProcessor, objectProcessor, processors, propsProcessor, ssrfIpClassifier, textProcessor, tryParseFriendlyPieceError };
|
|
722
|
+
export { arrayZipperProcessor, checkboxProcessor, dateTimeProcessor, dynamicPropKeys, fileProcessor, formatPieceError, jsonProcessor, multiSelectProcessor, numberProcessor, objectProcessor, processors, propsProcessor, ssrfIpClassifier, textProcessor, tryParseFriendlyPieceError, validateProperty };
|
|
723
723
|
//# sourceMappingURL=host.js.map
|
package/dist/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/props-processor.ts"],"sourcesContent":["// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/friendly-piece-error.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { tryCatchSync } from \"./try-catch.js\";\nimport { isNil, isString } from \"./utils.js\";\n\nconst FRIENDLY_PIECE_ERROR_VERSION = 1;\n\nconst STACK_LINE_REGEX = /\\n\\s*at\\s+.+$/gm;\nconst HTTP_ERROR_MESSAGE_MAX_LENGTH = 2000;\nconst RAW_ERROR_MAX_LENGTH = 16000;\nconst HTTP_STATUS_MIN = 100;\nconst HTTP_STATUS_MAX = 599;\nconst MAX_MESSAGE_DEPTH = 12;\nconst MAX_SERIALIZED_DEPTH = 64;\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst TOO_DEEP_PLACEHOLDER = \"[Too deep]\";\nconst UNSERIALIZABLE_PLACEHOLDER = \"[Unserializable]\";\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> => {\n return !isNil(value) && typeof value === \"object\" && !Array.isArray(value);\n};\n\nconst safeJsonParse = (value: string): unknown => {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n};\n\nconst stripStack = (value: string): string => {\n return value.replace(STACK_LINE_REGEX, \"\").trim();\n};\n\nconst truncate = (value: string): string => {\n if (value.length <= HTTP_ERROR_MESSAGE_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, HTTP_ERROR_MESSAGE_MAX_LENGTH)}…`;\n};\n\nconst truncateRaw = (value: string): string => {\n if (value.length <= RAW_ERROR_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, RAW_ERROR_MAX_LENGTH)}\\n…[truncated]`;\n};\n\nconst HTML_DOC_REGEX = /^\\s*(<!doctype\\s+html|<html\\b|<\\?xml)/i;\nconst HTML_TAG_LIKE_REGEX =\n /<\\s*(html|body|head|title|meta|p|div|span|h[1-6]|table|script|style)\\b/i;\n\nconst isLikelyMarkupBody = (value: string): boolean => {\n if (HTML_DOC_REGEX.test(value)) {\n return true;\n }\n if (!value.includes(\"<\") || !value.includes(\">\")) {\n return false;\n }\n return HTML_TAG_LIKE_REGEX.test(value);\n};\n\nconst decodeHtmlEntities = (value: string): string => {\n return value\n .replace(/ /g, \" \")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\");\n};\n\nconst stripMarkup = (value: string): string => {\n const titleMatch = value.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i);\n const title = titleMatch\n ? decodeHtmlEntities(titleMatch[1]).replace(/\\s+/g, \" \").trim()\n : \"\";\n\n const withoutNoise = value\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<head[\\s\\S]*?<\\/head>/gi, \" \");\n const textOnly = decodeHtmlEntities(withoutNoise.replace(/<[^>]+>/g, \" \"))\n .replace(/\\s+/g, \" \")\n .trim();\n\n if (textOnly.length > 0 && title.length > 0 && !textOnly.startsWith(title)) {\n return `${title} — ${textOnly}`;\n }\n return textOnly.length > 0 ? textOnly : title;\n};\n\nconst readString = (\n record: Record<string, unknown>,\n key: string,\n): string | undefined => {\n const value = record[key];\n return isString(value) ? value : undefined;\n};\n\nconst collectMessageFrom = ({\n value,\n depth,\n seen,\n}: TraversalParams): string | undefined => {\n if (isNil(value) || depth > MAX_MESSAGE_DEPTH) {\n return undefined;\n }\n if (isString(value)) {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n if (isLikelyMarkupBody(trimmed)) {\n const stripped = stripMarkup(trimmed);\n return stripped.length > 0 ? stripped : undefined;\n }\n return trimmed;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const parts = value\n .map((entry) =>\n collectMessageFrom({ value: entry, depth: depth + 1, seen }),\n )\n .filter((entry): entry is string => isString(entry) && entry.length > 0);\n return parts.length > 0 ? parts.join(\"; \") : undefined;\n }\n if (isObjectRecord(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const nested =\n value[\"message\"] ??\n value[\"detail\"] ??\n value[\"description\"] ??\n value[\"reason\"] ??\n value[\"error\"];\n return collectMessageFrom({ value: nested, depth: depth + 1, seen });\n }\n return undefined;\n};\n\nconst collectMessage = (value: unknown): string | undefined => {\n return collectMessageFrom({ value, depth: 0, seen: new WeakSet() });\n};\n\nconst extractApiMessage = (responseBody: unknown): string | undefined => {\n if (isNil(responseBody)) {\n return undefined;\n }\n if (isString(responseBody) || Array.isArray(responseBody)) {\n const collected = collectMessage(responseBody);\n return collected ? truncate(collected) : undefined;\n }\n if (!isObjectRecord(responseBody)) {\n return truncate(String(responseBody));\n }\n const candidates: unknown[] = [\n responseBody[\"message\"],\n responseBody[\"error_description\"],\n responseBody[\"errorDescription\"],\n responseBody[\"detail\"],\n responseBody[\"title\"],\n responseBody[\"error_message\"],\n responseBody[\"errorMessage\"],\n responseBody[\"errorMessages\"],\n responseBody[\"errors\"],\n responseBody[\"error\"],\n responseBody[\"faultstring\"],\n responseBody[\"fault\"],\n responseBody[\"reason\"],\n responseBody[\"description\"],\n ];\n for (const candidate of candidates) {\n const collected = collectMessage(candidate);\n if (collected) {\n return truncate(collected);\n }\n }\n return undefined;\n};\n\nconst toHttpStatus = (value: unknown): number | undefined => {\n return typeof value === \"number\" &&\n value >= HTTP_STATUS_MIN &&\n value <= HTTP_STATUS_MAX\n ? value\n : undefined;\n};\n\nconst extractResponseHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const response = error[\"response\"];\n if (!isObjectRecord(response)) {\n return null;\n }\n const statusValue = response[\"status\"];\n const status = typeof statusValue === \"number\" ? statusValue : undefined;\n const responseBody = response[\"body\"];\n const headersValue = response[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n const requestRaw = error[\"request\"];\n const request = isObjectRecord(requestRaw) ? requestRaw : undefined;\n const requestBody = request?.[\"body\"];\n const requestUrl =\n request === undefined ? undefined : readString(request, \"url\");\n const requestMethod =\n request === undefined ? undefined : readString(request, \"method\");\n\n if (isNil(status) && isNil(responseBody) && isNil(requestBody)) {\n return null;\n }\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n requestBody,\n requestUrl,\n requestMethod,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractClientHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const status = toHttpStatus(error[\"status\"]);\n if (isNil(status)) {\n return null;\n }\n const responseBody = error[\"error\"] ?? error[\"body\"];\n const headersValue = error[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n return extractResponseHttpDetails(error) ?? extractClientHttpDetails(error);\n};\n\nconst rebuildSerializable = ({\n value,\n depth,\n seen,\n}: TraversalParams): unknown => {\n if (\n isNil(value) ||\n isString(value) ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value) || isObjectRecord(value)) {\n if (seen.has(value)) {\n return CIRCULAR_PLACEHOLDER;\n }\n if (depth >= MAX_SERIALIZED_DEPTH) {\n return TOO_DEEP_PLACEHOLDER;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((entry) =>\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n );\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n ]),\n );\n }\n return String(value);\n};\n\nconst toSerializable = (value: unknown): unknown => {\n if (isNil(value)) {\n return value;\n }\n const { error } = tryCatchSync(() => JSON.stringify(value));\n if (isNil(error)) {\n return value;\n }\n const rebuilt = tryCatchSync(() =>\n rebuildSerializable({ value, depth: 0, seen: new WeakSet() }),\n );\n return isNil(rebuilt.error) ? rebuilt.data : UNSERIALIZABLE_PLACEHOLDER;\n};\n\nconst toSerializableHttpDetails = (\n httpDetails: HttpDetails | null,\n): HttpDetails | null => {\n if (isNil(httpDetails)) {\n return null;\n }\n const { responseBody, requestBody, responseHeaders } = httpDetails;\n return {\n ...httpDetails,\n responseBody: toSerializable(responseBody),\n requestBody: toSerializable(requestBody),\n responseHeaders: isNil(responseHeaders)\n ? undefined\n : Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n toSerializable(value),\n ]),\n ),\n };\n};\n\nconst readErrorName = (error: Record<string, unknown>): string | undefined => {\n const name = readString(error, \"name\");\n if (!isNil(name) && name.length > 0 && name !== \"Error\") {\n return name;\n }\n const ctor = error[\"constructor\"];\n if (\n typeof ctor === \"function\" &&\n isString(ctor.name) &&\n ctor.name.length > 0 &&\n ctor.name !== \"Object\" &&\n ctor.name !== \"Error\"\n ) {\n return ctor.name;\n }\n return undefined;\n};\n\nconst readErrorMessage = (error: Record<string, unknown>): string => {\n const messageString = readString(error, \"message\");\n if (!isNil(messageString)) {\n return messageString;\n }\n const stringified = String(error);\n if (stringified.length > 0 && stringified !== \"[object Object]\") {\n return stringified;\n }\n return \"Unknown error\";\n};\n\nconst pickPlainMessage = ({\n httpDetails,\n rawMessage,\n}: {\n httpDetails: HttpDetails | null;\n rawMessage: string;\n}): string => {\n if (httpDetails?.apiMessage) {\n return httpDetails.apiMessage;\n }\n const cleaned = stripStack(rawMessage);\n if (cleaned.length > 0) {\n return truncate(cleaned);\n }\n return \"Unknown error\";\n};\n\nconst isFriendlyPieceError = (value: unknown): value is FriendlyPieceError => {\n if (!isObjectRecord(value)) {\n return false;\n }\n return (\n value[\"__apErrorVersion\"] === FRIENDLY_PIECE_ERROR_VERSION &&\n typeof value[\"message\"] === \"string\"\n );\n};\n\nexport const formatPieceError = (\n error: unknown,\n options?: FormatPieceErrorOptions,\n): FriendlyPieceError => {\n const raw = options?.raw;\n const withRaw = (base: FriendlyPieceError): FriendlyPieceError => {\n if (isNil(raw) || raw.length === 0 || !isNil(base.raw)) {\n return base;\n }\n return { ...base, raw: truncateRaw(raw) };\n };\n\n if (isNil(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: \"Unknown error\",\n });\n }\n\n if (isString(error)) {\n const cleaned = stripStack(error);\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: cleaned.length > 0 ? cleaned : \"Unknown error\",\n });\n }\n\n if (!isObjectRecord(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: truncate(String(error)),\n });\n }\n\n if (isFriendlyPieceError(error)) {\n return withRaw(error);\n }\n\n const httpDetails = extractHttpDetails(error);\n const errorName = readErrorName(error);\n const rawMessage = readErrorMessage(error);\n const message = pickPlainMessage({ httpDetails, rawMessage });\n\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message,\n errorName,\n ...(toSerializableHttpDetails(httpDetails) ?? {}),\n });\n};\n\nexport const tryParseFriendlyPieceError = (\n value: unknown,\n): FriendlyPieceError | null => {\n if (isNil(value)) {\n return null;\n }\n const candidate = isString(value) ? safeJsonParse(value) : value;\n return isFriendlyPieceError(candidate) ? candidate : null;\n};\n\ntype TraversalParams = {\n value: unknown;\n depth: number;\n seen: WeakSet<object>;\n};\n\ntype HttpDetails = {\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n};\n\nexport type FriendlyPieceError = {\n __apErrorVersion: 1;\n message: string;\n errorName?: string;\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n raw?: string;\n};\n\ntype FormatPieceErrorOptions = {\n raw?: string;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/ssrf-ip-classifier.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport ipaddr from \"ipaddr.js\";\n\nfunction parseOrNull(ip: string): ipaddr.IPv4 | ipaddr.IPv6 | null {\n try {\n return ipaddr.parse(ip);\n } catch {\n return null;\n }\n}\n\nfunction isInAllowList({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (allowList.includes(ip)) return true;\n const addr = parseOrNull(ip);\n if (!addr) return false;\n return allowList.some(\n (entry) => entry.includes(\"/\") && matchesCidr({ addr, cidr: entry }),\n );\n}\n\nfunction matchesCidr({\n addr,\n cidr,\n}: {\n addr: ipaddr.IPv4 | ipaddr.IPv6;\n cidr: string;\n}): boolean {\n try {\n const range = ipaddr.parseCIDR(cidr);\n if (addr.kind() !== range[0].kind()) return false;\n return addr.match(range);\n } catch {\n return false;\n }\n}\n\nfunction isBlockedRange(addr: ipaddr.IPv4 | ipaddr.IPv6): boolean {\n if (addr.kind() === \"ipv6\") {\n const v6 = addr as ipaddr.IPv6;\n if (v6.isIPv4MappedAddress()) {\n return isBlockedRange(v6.toIPv4Address());\n }\n }\n return addr.range() !== \"unicast\";\n}\n\nfunction isBlockedIp({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (isInAllowList({ ip, allowList })) {\n return false;\n }\n const addr = parseOrNull(ip);\n if (!addr) {\n return true;\n }\n return isBlockedRange(addr);\n}\n\nexport const ssrfIpClassifier = {\n isBlockedIp,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/helper/dynamic-prop-keys.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../core-utils/index.js\";\nimport type { InputPropertyMap } from \"../../../framework/index.js\";\n\n// react-hook-form treats `.` and `[` as path separators and strips `]`, `\"` and `'`\n// (see its stringToPath util), so dynamic-property keys containing any of these break\n// the builder form. Escape them (JSON-Pointer style, `~` escapes the escape char) before\n// keys reach the UI, and reverse the mapping before the piece consumes the values.\nfunction escapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [escapeKey(key), property]),\n );\n}\n\nfunction unescapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [\n unescapeKey(key),\n property,\n ]),\n );\n}\n\nfunction unescapeInputKeys<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [unescapeKey(key), child]),\n ) as T;\n}\n\n// Escaped keys carry the ESCAPED_KEY_MARKER prefix so unescaping only ever touches keys\n// this module produced: a literal key like `field~1name` that never went through\n// escapeKey (schema-less tool calls, API-created flows) passes through unchanged.\n// The mapping stays bijective because unescaped keys can never contain `~` (any `~`\n// triggers escaping), so they can never start with the marker.\nfunction escapeKey(key: string): string {\n if (!RESERVED_CHARS.test(key)) {\n return key;\n }\n return (\n ESCAPED_KEY_MARKER +\n key.replace(/[~.[\\]\"']/g, (char) => ESCAPE_SEQUENCES[char])\n );\n}\n\nfunction unescapeKey(key: string): string {\n if (!key.startsWith(ESCAPED_KEY_MARKER)) {\n return key;\n }\n return key\n .slice(ESCAPED_KEY_MARKER.length)\n .replace(/~[0-5]/g, (sequence) => UNESCAPE_SEQUENCES[sequence]);\n}\n\nconst ESCAPED_KEY_MARKER = \"~ap~\";\n\nconst RESERVED_CHARS = /[~.[\\]\"']/;\n\nconst ESCAPE_SEQUENCES: Record<string, string> = {\n \"~\": \"~0\",\n \".\": \"~1\",\n \"[\": \"~2\",\n \"]\": \"~3\",\n '\"': \"~4\",\n \"'\": \"~5\",\n};\n\nconst UNESCAPE_SEQUENCES: Record<string, string> = Object.fromEntries(\n Object.entries(ESCAPE_SEQUENCES).map(([char, sequence]) => [sequence, char]),\n);\n\nexport const dynamicPropKeys = {\n escapePropsKeys,\n unescapePropsKeys,\n unescapeInputKeys,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/array-zipper.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nfunction getLongestArrayLengthInObject(props: Record<string, unknown>): number {\n return Math.max(\n ...Object.values(props).map((value) =>\n Array.isArray(value) ? value.length : 1,\n ),\n );\n}\n\nfunction constructResultForIndex(\n props: Record<string, unknown>,\n index: number,\n): Record<string, unknown> {\n return Object.entries(props).reduce(\n (result, [key, value]) => {\n result[key] = Array.isArray(value) ? value[index] : value;\n return result;\n },\n {} as Record<string, unknown>,\n );\n}\n\nexport const arrayZipperProcessor: ProcessorFn = (_property, value) => {\n if (Array.isArray(value) || !isObject(value)) {\n return value;\n }\n\n return Array.from(\n { length: getLongestArrayLengthInObject(value) },\n (_, index) => constructResultForIndex(value, index),\n );\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/checkbox.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const checkboxProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return typeof parsed === \"boolean\" ? parsed : value;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/date-time.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport dayjs from \"dayjs\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const dateTimeProcessor: ProcessorFn = (_property, value) => {\n dayjs.extend(utc);\n dayjs.extend(timezone);\n const dateTimeString = value;\n try {\n if (!dateTimeString) throw Error(\"Undefined input\");\n return dayjs.tz(dateTimeString, \"UTC\").toISOString();\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/file.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isBase64, isNil, isString } from \"../../../../core-utils/index.js\";\nimport type { ApStreamingFile } from \"../../../../framework/index.js\";\nimport { ApFile, PropertyType } from \"../../../../framework/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const fileProcessor: ProcessorFn = async (property, urlOrBase64) => {\n if (isNil(urlOrBase64) || !isString(urlOrBase64)) {\n return null;\n }\n const streaming =\n property.type === PropertyType.FILE && property.streaming === true;\n try {\n if (streaming) {\n return await handleStreamingFile(urlOrBase64);\n }\n const file = handleBase64File(urlOrBase64);\n if (!isNil(file)) {\n return file;\n }\n return await handleUrlFile(urlOrBase64);\n } catch (e) {\n console.error(e);\n return null;\n }\n};\n\nfunction parseBase64File(\n propertyValue: string,\n): { extension: string; buffer: Buffer } | null {\n if (!isBase64(propertyValue, { allowMime: true })) {\n return null;\n }\n const matches = propertyValue.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); // example match: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\n if (!matches || matches?.length !== 3) {\n return null;\n }\n return {\n extension: mimeExtension(matches[1]) || \"bin\",\n buffer: Buffer.from(matches[2], \"base64\"),\n };\n}\n\nfunction handleBase64File(propertyValue: string): ApFile | null {\n const parsed = parseBase64File(propertyValue);\n if (isNil(parsed)) {\n return null;\n }\n return new ApFile(\n `unknown.${parsed.extension}`,\n parsed.buffer,\n parsed.extension,\n );\n}\n\nasync function handleUrlFile(path: string): Promise<ApFile | null> {\n const fileResponse = await fetch(path);\n // A 4xx/5xx body is the server's error page, not the file. handleStreamingFile\n // already refuses one.\n if (!fileResponse.ok) {\n return null;\n }\n\n const filename =\n getFileName(\n path,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n\n return new ApFile(\n filename,\n Buffer.from(await fileResponse.arrayBuffer()),\n extension,\n );\n}\n\nasync function handleStreamingFile(\n propertyValue: string,\n): Promise<ApStreamingFile | null> {\n const parsed = parseBase64File(propertyValue);\n if (!isNil(parsed)) {\n return {\n filename: `unknown.${parsed.extension}`,\n extension: parsed.extension,\n size: parsed.buffer.length,\n body: Readable.from(parsed.buffer),\n };\n }\n\n const fileResponse = await fetch(propertyValue);\n if (!fileResponse.ok || isNil(fileResponse.body)) {\n await fileResponse.body?.cancel();\n return null;\n }\n const filename =\n getFileName(\n propertyValue,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n const contentEncoding = fileResponse.headers.get(\"content-encoding\");\n const contentLength = Number(fileResponse.headers.get(\"content-length\"));\n // undici transparently decompresses gzip/br/deflate but leaves the compressed\n // Content-Length in place, so it would understate the streamed byte count and\n // truncate the destination. Only trust the size when the body is not encoded.\n const sizeIsTrustworthy =\n (isNil(contentEncoding) || contentEncoding.toLowerCase() === \"identity\") &&\n Number.isInteger(contentLength) &&\n contentLength > 0;\n\n return {\n filename,\n extension,\n size: sizeIsTrustworthy ? contentLength : undefined,\n // @ts-expect-error -- undici streams a Node web ReadableStream body; the DOM fetch types omit the fromWeb overload\n body: Readable.fromWeb(fileResponse.body),\n };\n}\n\nfunction extensionFromFilename(filename: string): string | undefined {\n const parts = filename.split(\".\");\n const last = parts.length > 1 ? parts.pop() : undefined;\n return last ? last : undefined;\n}\n\nfunction getFileName(\n path: string,\n disposition: string | null,\n mimeType: string | undefined,\n): string | null {\n const url = new URL(path);\n if (isNil(disposition)) {\n const fileNameFromUrl =\n url.pathname.includes(\"/\") && url.pathname.split(\"/\").pop()?.includes(\".\")\n ? url.pathname.split(\"/\").pop()\n : null;\n if (!isNil(fileNameFromUrl)) {\n return fileNameFromUrl;\n }\n const resolvedExtension = mimeType ? mimeExtension(mimeType) : null;\n return `unknown.${resolvedExtension ?? \"bin\"}`;\n }\n const utf8FilenameRegex = /filename\\*=UTF-8''([\\w%\\-.]+)(?:; ?|$)/i;\n if (utf8FilenameRegex.test(disposition)) {\n const result = utf8FilenameRegex.exec(disposition);\n if (result && result.length > 1) {\n return decodeURIComponent(result[1]);\n }\n }\n // prevent ReDos attacks by anchoring the ascii regex to string start and\n // slicing off everything before 'filename='\n const filenameStart = disposition.toLowerCase().indexOf(\"filename=\");\n const asciiFilenameRegex = /^filename=([\"']?)(.*?[^\\\\])\\1(?:; ?|$)/i;\n\n if (filenameStart >= 0) {\n const partialDisposition = disposition.slice(filenameStart);\n const matches = asciiFilenameRegex.exec(partialDisposition);\n if (matches != null && matches[2]) {\n return matches[2];\n }\n }\n return null;\n}\n\nfunction mimeExtension(mimeType: string): string | null {\n const normalized = mimeType.split(\";\")[0].trim().toLowerCase();\n return MIME_EXTENSIONS[normalized] ?? null;\n}\n\nconst MIME_EXTENSIONS: Record<string, string> = {\n \"application/json\": \"json\",\n \"application/pdf\": \"pdf\",\n \"application/xml\": \"xml\",\n \"application/zip\": \"zip\",\n \"application/gzip\": \"gz\",\n \"application/x-7z-compressed\": \"7z\",\n \"application/x-tar\": \"tar\",\n \"application/octet-stream\": \"bin\",\n \"application/msword\": \"doc\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n \"docx\",\n \"application/vnd.ms-excel\": \"xls\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": \"xlsx\",\n \"application/vnd.ms-powerpoint\": \"ppt\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\":\n \"pptx\",\n \"application/rtf\": \"rtf\",\n \"application/javascript\": \"js\",\n \"application/x-javascript\": \"js\",\n \"application/x-yaml\": \"yaml\",\n \"application/yaml\": \"yaml\",\n \"application/x-httpd-php\": \"php\",\n \"application/x-sh\": \"sh\",\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/jpg\": \"jpg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n \"image/svg+xml\": \"svg\",\n \"image/bmp\": \"bmp\",\n \"image/tiff\": \"tiff\",\n \"image/x-icon\": \"ico\",\n \"image/vnd.microsoft.icon\": \"ico\",\n \"image/heic\": \"heic\",\n \"image/heif\": \"heif\",\n \"image/avif\": \"avif\",\n \"text/plain\": \"txt\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/csv\": \"csv\",\n \"text/javascript\": \"js\",\n \"text/markdown\": \"md\",\n \"text/xml\": \"xml\",\n \"text/tab-separated-values\": \"tsv\",\n \"text/yaml\": \"yaml\",\n \"audio/mpeg\": \"mp3\",\n \"audio/mp3\": \"mp3\",\n \"audio/mp4\": \"m4a\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/webm\": \"weba\",\n \"audio/flac\": \"flac\",\n \"audio/aac\": \"aac\",\n \"video/mp4\": \"mp4\",\n \"video/mpeg\": \"mpeg\",\n \"video/webm\": \"webm\",\n \"video/quicktime\": \"mov\",\n \"video/x-msvideo\": \"avi\",\n \"video/ogg\": \"ogv\",\n \"font/woff\": \"woff\",\n \"font/woff2\": \"woff2\",\n \"font/ttf\": \"ttf\",\n \"font/otf\": \"otf\",\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/json.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const jsonProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n try {\n if (typeof value === \"object\") {\n return value;\n }\n return JSON.parse(value);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/multi-select.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const multiSelectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || Array.isArray(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return Array.isArray(parsed) ? parsed : [value];\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/number.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const numberProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (value === \"\") {\n return undefined;\n }\n return Number(value);\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/object.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const objectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch (e) {\n return undefined;\n }\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n return value;\n }\n return undefined;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/text.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const textProcessor: ProcessorFn = (property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n\n const result = value.toString();\n if (result.length === 0 && !property.required) {\n return undefined;\n }\n return result;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/index.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { PropertyType } from \"../../../../framework/index.js\";\nimport { checkboxProcessor } from \"./checkbox.js\";\nimport { dateTimeProcessor } from \"./date-time.js\";\nimport { fileProcessor } from \"./file.js\";\nimport { jsonProcessor } from \"./json.js\";\nimport { multiSelectProcessor } from \"./multi-select.js\";\nimport { numberProcessor } from \"./number.js\";\nimport { objectProcessor } from \"./object.js\";\nimport { textProcessor } from \"./text.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const processors: Partial<Record<PropertyType, ProcessorFn>> = {\n JSON: jsonProcessor,\n OBJECT: objectProcessor,\n NUMBER: numberProcessor,\n LONG_TEXT: textProcessor,\n SHORT_TEXT: textProcessor,\n SECRET_TEXT: textProcessor,\n DATE_TIME: dateTimeProcessor,\n FILE: fileProcessor,\n MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n STATIC_MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n CHECKBOX: checkboxProcessor,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/props-processor.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isNil, isObject } from \"../../../core-utils/index.js\";\nimport type {\n InputPropertyMap,\n PieceAuthProperty,\n PieceProperty,\n PiecePropertyMap,\n StaticPropsValue,\n} from \"../../../framework/index.js\";\nimport {\n DateRangeValue,\n getAuthPropertyForValue,\n PropertyType,\n} from \"../../../framework/index.js\";\nimport { dynamicPropKeys } from \"../helper/dynamic-prop-keys.js\";\nimport { processors } from \"./processors/index.js\";\nimport { arrayZipperProcessor } from \"./processors/array-zipper.js\";\nimport type { AppConnectionValue } from \"../../../core-piece-types/index.js\";\nimport { AUTHENTICATION_PROPERTY_NAME } from \"../../../core-piece-types/index.js\";\nimport type { PropertySettings } from \"../../../../src/host/shared-shim.js\";\n\ntype PropsValidationError = {\n [key: string]: string[] | PropsValidationError | PropsValidationError[];\n};\n\nexport const propsProcessor = {\n applyProcessorsAndValidators: async (\n resolvedInput: StaticPropsValue<PiecePropertyMap>,\n props: InputPropertyMap,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n requireAuth: boolean,\n propertySettings: Record<string, PropertySettings>,\n ): Promise<{\n processedInput: StaticPropsValue<PiecePropertyMap>;\n errors: PropsValidationError;\n }> => {\n let dynamaicPropertiesSchema: Record<string, InputPropertyMap> | undefined =\n undefined;\n if (Object.keys(propertySettings).length > 0) {\n dynamaicPropertiesSchema = Object.fromEntries(\n Object.entries(propertySettings).map(([key, propertySetting]) => [\n key,\n propertySetting.schema,\n ]),\n );\n }\n const processedInput = { ...resolvedInput };\n const errors: PropsValidationError = {};\n const authValue: AppConnectionValue | undefined =\n resolvedInput[AUTHENTICATION_PROPERTY_NAME];\n if (authValue && requireAuth) {\n const authPropsToProcess = getAuthPropsToProcess(authValue, auth);\n if (authPropsToProcess) {\n const { processedInput: authProcessedInput, errors: authErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n resolvedInput[AUTHENTICATION_PROPERTY_NAME],\n authPropsToProcess,\n undefined,\n false,\n {},\n );\n processedInput[AUTHENTICATION_PROPERTY_NAME] = authProcessedInput;\n if (Object.keys(authErrors).length > 0) {\n errors[AUTHENTICATION_PROPERTY_NAME] = authErrors;\n }\n }\n }\n for (const [key, value] of Object.entries(resolvedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n if (property.type === PropertyType.DYNAMIC) {\n const valueWithOriginalKeys = dynamicPropKeys.unescapeInputKeys(value);\n processedInput[key] = valueWithOriginalKeys;\n if (!isNil(dynamaicPropertiesSchema?.[key])) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n valueWithOriginalKeys,\n dynamicPropKeys.unescapePropsKeys(dynamaicPropertiesSchema[key]),\n undefined,\n false,\n {},\n );\n processedInput[key] = itemProcessedInput;\n if (Object.keys(itemErrors).length > 0) {\n errors[key] = itemErrors;\n }\n }\n }\n if (property.type === PropertyType.ARRAY && property.properties) {\n const arrayOfObjects = arrayZipperProcessor(property, value) ?? [];\n const processedArray = [];\n const processedErrors = [];\n for (const item of arrayOfObjects) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n item,\n property.properties,\n undefined,\n false,\n {},\n );\n processedArray.push(itemProcessedInput);\n processedErrors.push(itemErrors);\n }\n processedInput[key] = processedArray;\n const isThereErrors = processedErrors.some(\n (error) => Object.keys(error).length > 0,\n );\n if (isThereErrors) {\n errors[key] = {\n properties: processedErrors,\n };\n }\n }\n if (!property.required && isNil(processedInput[key])) {\n processedInput[key] = undefined;\n }\n const processor = processors[property.type];\n if (processor) {\n processedInput[key] = await processor(property, processedInput[key]);\n }\n\n const shouldValidate =\n key !== AUTHENTICATION_PROPERTY_NAME &&\n property.type !== PropertyType.MARKDOWN;\n if (!shouldValidate) {\n continue;\n }\n }\n\n for (const [key, value] of Object.entries(processedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n\n const validationErrors = validateProperty(\n property,\n value,\n resolvedInput[key],\n );\n if (validationErrors.length > 0) {\n errors[key] = validationErrors;\n }\n }\n\n // Streaming file inputs open a live connection when resolved. If any property\n // fails validation the action never runs, so drain those bodies here to avoid\n // leaking connections until GC.\n if (Object.keys(errors).length > 0) {\n destroyOpenStreams(processedInput);\n }\n\n return { processedInput, errors };\n },\n};\n\nfunction destroyOpenStreams(value: unknown): void {\n if (isNil(value) || typeof value !== \"object\" || Buffer.isBuffer(value)) {\n return;\n }\n if (value instanceof Readable) {\n value.destroy();\n return;\n }\n for (const child of Object.values(value)) {\n destroyOpenStreams(child);\n }\n}\n\nconst validateProperty = (\n property: PieceProperty,\n value: unknown,\n originalValue: unknown,\n): string[] => {\n if (property.type === PropertyType.JSON) {\n if (!property.required && originalValue === \"\") {\n return [];\n }\n if (!isNil(originalValue) && isNil(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n if (!property.required && isNil(value)) {\n return [];\n }\n if (!isObject(value) && !Array.isArray(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n return [];\n }\n\n if (!property.required && isNil(value)) {\n return [];\n }\n\n switch (property.type) {\n case PropertyType.SHORT_TEXT:\n case PropertyType.LONG_TEXT:\n case PropertyType.RICH_TEXT:\n return typeof value === \"string\"\n ? []\n : [`Expected string, received: ${originalValue}`];\n case PropertyType.NUMBER:\n return typeof value === \"number\" && !Number.isNaN(value)\n ? []\n : [`Expected number, received: ${originalValue}`];\n case PropertyType.CHECKBOX:\n return typeof value === \"boolean\"\n ? []\n : [`Expected boolean, received: ${originalValue}`];\n case PropertyType.DATE_TIME:\n return typeof value === \"string\"\n ? []\n : [\n `Invalid datetime format. Expected ISO format (e.g. 2024-03-14T12:00:00.000Z), received: ${originalValue}`,\n ];\n case PropertyType.DATE_RANGE:\n return DateRangeValue.safeParse(value).success\n ? []\n : [`Expected date range, received: ${originalValue}`];\n case PropertyType.ARRAY:\n case PropertyType.MULTI_SELECT_DROPDOWN:\n case PropertyType.STATIC_MULTI_SELECT_DROPDOWN:\n return Array.isArray(value)\n ? []\n : [`Expected array, received: ${originalValue}`];\n case PropertyType.OBJECT:\n return isObject(value)\n ? []\n : [`Expected object, received: ${originalValue}`];\n case PropertyType.FILE:\n return isObject(value)\n ? []\n : [\n `Expected file url or base64 with mimeType, received: ${originalValue}`,\n ];\n default:\n return [];\n }\n};\n\nfunction getAuthPropsToProcess(\n authValue: AppConnectionValue,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n): null {\n if (isNil(auth)) {\n return null;\n }\n const usedAuthProperty = getAuthPropertyForValue({\n authValueType: authValue.type,\n pieceAuth: auth,\n });\n const doesAuthHaveProps =\n usedAuthProperty?.type === PropertyType.CUSTOM_AUTH ||\n usedAuthProperty?.type === PropertyType.OAUTH2 ||\n usedAuthProperty?.type === PropertyType.OIDC;\n if (doesAuthHaveProps && !isNil(usedAuthProperty?.props)) {\n return usedAuthProperty.props;\n }\n return null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"host.js","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/props-processor.ts"],"sourcesContent":["// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/friendly-piece-error.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { tryCatchSync } from \"./try-catch.js\";\nimport { isNil, isString } from \"./utils.js\";\n\nconst FRIENDLY_PIECE_ERROR_VERSION = 1;\n\nconst STACK_LINE_REGEX = /\\n\\s*at\\s+.+$/gm;\nconst HTTP_ERROR_MESSAGE_MAX_LENGTH = 2000;\nconst RAW_ERROR_MAX_LENGTH = 16000;\nconst HTTP_STATUS_MIN = 100;\nconst HTTP_STATUS_MAX = 599;\nconst MAX_MESSAGE_DEPTH = 12;\nconst MAX_SERIALIZED_DEPTH = 64;\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst TOO_DEEP_PLACEHOLDER = \"[Too deep]\";\nconst UNSERIALIZABLE_PLACEHOLDER = \"[Unserializable]\";\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> => {\n return !isNil(value) && typeof value === \"object\" && !Array.isArray(value);\n};\n\nconst safeJsonParse = (value: string): unknown => {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n};\n\nconst stripStack = (value: string): string => {\n return value.replace(STACK_LINE_REGEX, \"\").trim();\n};\n\nconst truncate = (value: string): string => {\n if (value.length <= HTTP_ERROR_MESSAGE_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, HTTP_ERROR_MESSAGE_MAX_LENGTH)}…`;\n};\n\nconst truncateRaw = (value: string): string => {\n if (value.length <= RAW_ERROR_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, RAW_ERROR_MAX_LENGTH)}\\n…[truncated]`;\n};\n\nconst HTML_DOC_REGEX = /^\\s*(<!doctype\\s+html|<html\\b|<\\?xml)/i;\nconst HTML_TAG_LIKE_REGEX =\n /<\\s*(html|body|head|title|meta|p|div|span|h[1-6]|table|script|style)\\b/i;\n\nconst isLikelyMarkupBody = (value: string): boolean => {\n if (HTML_DOC_REGEX.test(value)) {\n return true;\n }\n if (!value.includes(\"<\") || !value.includes(\">\")) {\n return false;\n }\n return HTML_TAG_LIKE_REGEX.test(value);\n};\n\nconst decodeHtmlEntities = (value: string): string => {\n return value\n .replace(/ /g, \" \")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\");\n};\n\nconst stripMarkup = (value: string): string => {\n const titleMatch = value.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i);\n const title = titleMatch\n ? decodeHtmlEntities(titleMatch[1]).replace(/\\s+/g, \" \").trim()\n : \"\";\n\n const withoutNoise = value\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<head[\\s\\S]*?<\\/head>/gi, \" \");\n const textOnly = decodeHtmlEntities(withoutNoise.replace(/<[^>]+>/g, \" \"))\n .replace(/\\s+/g, \" \")\n .trim();\n\n if (textOnly.length > 0 && title.length > 0 && !textOnly.startsWith(title)) {\n return `${title} — ${textOnly}`;\n }\n return textOnly.length > 0 ? textOnly : title;\n};\n\nconst readString = (\n record: Record<string, unknown>,\n key: string,\n): string | undefined => {\n const value = record[key];\n return isString(value) ? value : undefined;\n};\n\nconst collectMessageFrom = ({\n value,\n depth,\n seen,\n}: TraversalParams): string | undefined => {\n if (isNil(value) || depth > MAX_MESSAGE_DEPTH) {\n return undefined;\n }\n if (isString(value)) {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n if (isLikelyMarkupBody(trimmed)) {\n const stripped = stripMarkup(trimmed);\n return stripped.length > 0 ? stripped : undefined;\n }\n return trimmed;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const parts = value\n .map((entry) =>\n collectMessageFrom({ value: entry, depth: depth + 1, seen }),\n )\n .filter((entry): entry is string => isString(entry) && entry.length > 0);\n return parts.length > 0 ? parts.join(\"; \") : undefined;\n }\n if (isObjectRecord(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const nested =\n value[\"message\"] ??\n value[\"detail\"] ??\n value[\"description\"] ??\n value[\"reason\"] ??\n value[\"error\"];\n return collectMessageFrom({ value: nested, depth: depth + 1, seen });\n }\n return undefined;\n};\n\nconst collectMessage = (value: unknown): string | undefined => {\n return collectMessageFrom({ value, depth: 0, seen: new WeakSet() });\n};\n\nconst extractApiMessage = (responseBody: unknown): string | undefined => {\n if (isNil(responseBody)) {\n return undefined;\n }\n if (isString(responseBody) || Array.isArray(responseBody)) {\n const collected = collectMessage(responseBody);\n return collected ? truncate(collected) : undefined;\n }\n if (!isObjectRecord(responseBody)) {\n return truncate(String(responseBody));\n }\n const candidates: unknown[] = [\n responseBody[\"message\"],\n responseBody[\"error_description\"],\n responseBody[\"errorDescription\"],\n responseBody[\"detail\"],\n responseBody[\"title\"],\n responseBody[\"error_message\"],\n responseBody[\"errorMessage\"],\n responseBody[\"errorMessages\"],\n responseBody[\"errors\"],\n responseBody[\"error\"],\n responseBody[\"faultstring\"],\n responseBody[\"fault\"],\n responseBody[\"reason\"],\n responseBody[\"description\"],\n ];\n for (const candidate of candidates) {\n const collected = collectMessage(candidate);\n if (collected) {\n return truncate(collected);\n }\n }\n return undefined;\n};\n\nconst toHttpStatus = (value: unknown): number | undefined => {\n return typeof value === \"number\" &&\n value >= HTTP_STATUS_MIN &&\n value <= HTTP_STATUS_MAX\n ? value\n : undefined;\n};\n\nconst extractResponseHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const response = error[\"response\"];\n if (!isObjectRecord(response)) {\n return null;\n }\n const statusValue = response[\"status\"];\n const status = typeof statusValue === \"number\" ? statusValue : undefined;\n const responseBody = response[\"body\"];\n const headersValue = response[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n const requestRaw = error[\"request\"];\n const request = isObjectRecord(requestRaw) ? requestRaw : undefined;\n const requestBody = request?.[\"body\"];\n const requestUrl =\n request === undefined ? undefined : readString(request, \"url\");\n const requestMethod =\n request === undefined ? undefined : readString(request, \"method\");\n\n if (isNil(status) && isNil(responseBody) && isNil(requestBody)) {\n return null;\n }\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n requestBody,\n requestUrl,\n requestMethod,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractClientHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const status = toHttpStatus(error[\"status\"]);\n if (isNil(status)) {\n return null;\n }\n const responseBody = error[\"error\"] ?? error[\"body\"];\n const headersValue = error[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n return extractResponseHttpDetails(error) ?? extractClientHttpDetails(error);\n};\n\nconst rebuildSerializable = ({\n value,\n depth,\n seen,\n}: TraversalParams): unknown => {\n if (\n isNil(value) ||\n isString(value) ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value) || isObjectRecord(value)) {\n if (seen.has(value)) {\n return CIRCULAR_PLACEHOLDER;\n }\n if (depth >= MAX_SERIALIZED_DEPTH) {\n return TOO_DEEP_PLACEHOLDER;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((entry) =>\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n );\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n ]),\n );\n }\n return String(value);\n};\n\nconst toSerializable = (value: unknown): unknown => {\n if (isNil(value)) {\n return value;\n }\n const { error } = tryCatchSync(() => JSON.stringify(value));\n if (isNil(error)) {\n return value;\n }\n const rebuilt = tryCatchSync(() =>\n rebuildSerializable({ value, depth: 0, seen: new WeakSet() }),\n );\n return isNil(rebuilt.error) ? rebuilt.data : UNSERIALIZABLE_PLACEHOLDER;\n};\n\nconst toSerializableHttpDetails = (\n httpDetails: HttpDetails | null,\n): HttpDetails | null => {\n if (isNil(httpDetails)) {\n return null;\n }\n const { responseBody, requestBody, responseHeaders } = httpDetails;\n return {\n ...httpDetails,\n responseBody: toSerializable(responseBody),\n requestBody: toSerializable(requestBody),\n responseHeaders: isNil(responseHeaders)\n ? undefined\n : Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n toSerializable(value),\n ]),\n ),\n };\n};\n\nconst readErrorName = (error: Record<string, unknown>): string | undefined => {\n const name = readString(error, \"name\");\n if (!isNil(name) && name.length > 0 && name !== \"Error\") {\n return name;\n }\n const ctor = error[\"constructor\"];\n if (\n typeof ctor === \"function\" &&\n isString(ctor.name) &&\n ctor.name.length > 0 &&\n ctor.name !== \"Object\" &&\n ctor.name !== \"Error\"\n ) {\n return ctor.name;\n }\n return undefined;\n};\n\nconst readErrorMessage = (error: Record<string, unknown>): string => {\n const messageString = readString(error, \"message\");\n if (!isNil(messageString)) {\n return messageString;\n }\n const stringified = String(error);\n if (stringified.length > 0 && stringified !== \"[object Object]\") {\n return stringified;\n }\n return \"Unknown error\";\n};\n\nconst pickPlainMessage = ({\n httpDetails,\n rawMessage,\n}: {\n httpDetails: HttpDetails | null;\n rawMessage: string;\n}): string => {\n if (httpDetails?.apiMessage) {\n return httpDetails.apiMessage;\n }\n const cleaned = stripStack(rawMessage);\n if (cleaned.length > 0) {\n return truncate(cleaned);\n }\n return \"Unknown error\";\n};\n\nconst isFriendlyPieceError = (value: unknown): value is FriendlyPieceError => {\n if (!isObjectRecord(value)) {\n return false;\n }\n return (\n value[\"__apErrorVersion\"] === FRIENDLY_PIECE_ERROR_VERSION &&\n typeof value[\"message\"] === \"string\"\n );\n};\n\nexport const formatPieceError = (\n error: unknown,\n options?: FormatPieceErrorOptions,\n): FriendlyPieceError => {\n const raw = options?.raw;\n const withRaw = (base: FriendlyPieceError): FriendlyPieceError => {\n if (isNil(raw) || raw.length === 0 || !isNil(base.raw)) {\n return base;\n }\n return { ...base, raw: truncateRaw(raw) };\n };\n\n if (isNil(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: \"Unknown error\",\n });\n }\n\n if (isString(error)) {\n const cleaned = stripStack(error);\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: cleaned.length > 0 ? cleaned : \"Unknown error\",\n });\n }\n\n if (!isObjectRecord(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: truncate(String(error)),\n });\n }\n\n if (isFriendlyPieceError(error)) {\n return withRaw(error);\n }\n\n const httpDetails = extractHttpDetails(error);\n const errorName = readErrorName(error);\n const rawMessage = readErrorMessage(error);\n const message = pickPlainMessage({ httpDetails, rawMessage });\n\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message,\n errorName,\n ...(toSerializableHttpDetails(httpDetails) ?? {}),\n });\n};\n\nexport const tryParseFriendlyPieceError = (\n value: unknown,\n): FriendlyPieceError | null => {\n if (isNil(value)) {\n return null;\n }\n const candidate = isString(value) ? safeJsonParse(value) : value;\n return isFriendlyPieceError(candidate) ? candidate : null;\n};\n\ntype TraversalParams = {\n value: unknown;\n depth: number;\n seen: WeakSet<object>;\n};\n\ntype HttpDetails = {\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n};\n\nexport type FriendlyPieceError = {\n __apErrorVersion: 1;\n message: string;\n errorName?: string;\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n raw?: string;\n};\n\ntype FormatPieceErrorOptions = {\n raw?: string;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/ssrf-ip-classifier.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport ipaddr from \"ipaddr.js\";\n\nfunction parseOrNull(ip: string): ipaddr.IPv4 | ipaddr.IPv6 | null {\n try {\n return ipaddr.parse(ip);\n } catch {\n return null;\n }\n}\n\nfunction isInAllowList({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (allowList.includes(ip)) return true;\n const addr = parseOrNull(ip);\n if (!addr) return false;\n return allowList.some(\n (entry) => entry.includes(\"/\") && matchesCidr({ addr, cidr: entry }),\n );\n}\n\nfunction matchesCidr({\n addr,\n cidr,\n}: {\n addr: ipaddr.IPv4 | ipaddr.IPv6;\n cidr: string;\n}): boolean {\n try {\n const range = ipaddr.parseCIDR(cidr);\n if (addr.kind() !== range[0].kind()) return false;\n return addr.match(range);\n } catch {\n return false;\n }\n}\n\nfunction isBlockedRange(addr: ipaddr.IPv4 | ipaddr.IPv6): boolean {\n if (addr.kind() === \"ipv6\") {\n const v6 = addr as ipaddr.IPv6;\n if (v6.isIPv4MappedAddress()) {\n return isBlockedRange(v6.toIPv4Address());\n }\n }\n return addr.range() !== \"unicast\";\n}\n\nfunction isBlockedIp({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (isInAllowList({ ip, allowList })) {\n return false;\n }\n const addr = parseOrNull(ip);\n if (!addr) {\n return true;\n }\n return isBlockedRange(addr);\n}\n\nexport const ssrfIpClassifier = {\n isBlockedIp,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/helper/dynamic-prop-keys.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../core-utils/index.js\";\nimport type { InputPropertyMap } from \"../../../framework/index.js\";\n\n// react-hook-form treats `.` and `[` as path separators and strips `]`, `\"` and `'`\n// (see its stringToPath util), so dynamic-property keys containing any of these break\n// the builder form. Escape them (JSON-Pointer style, `~` escapes the escape char) before\n// keys reach the UI, and reverse the mapping before the piece consumes the values.\nfunction escapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [escapeKey(key), property]),\n );\n}\n\nfunction unescapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [\n unescapeKey(key),\n property,\n ]),\n );\n}\n\nfunction unescapeInputKeys<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [unescapeKey(key), child]),\n ) as T;\n}\n\n// Escaped keys carry the ESCAPED_KEY_MARKER prefix so unescaping only ever touches keys\n// this module produced: a literal key like `field~1name` that never went through\n// escapeKey (schema-less tool calls, API-created flows) passes through unchanged.\n// The mapping stays bijective because unescaped keys can never contain `~` (any `~`\n// triggers escaping), so they can never start with the marker.\nfunction escapeKey(key: string): string {\n if (!RESERVED_CHARS.test(key)) {\n return key;\n }\n return (\n ESCAPED_KEY_MARKER +\n key.replace(/[~.[\\]\"']/g, (char) => ESCAPE_SEQUENCES[char])\n );\n}\n\nfunction unescapeKey(key: string): string {\n if (!key.startsWith(ESCAPED_KEY_MARKER)) {\n return key;\n }\n return key\n .slice(ESCAPED_KEY_MARKER.length)\n .replace(/~[0-5]/g, (sequence) => UNESCAPE_SEQUENCES[sequence]);\n}\n\nconst ESCAPED_KEY_MARKER = \"~ap~\";\n\nconst RESERVED_CHARS = /[~.[\\]\"']/;\n\nconst ESCAPE_SEQUENCES: Record<string, string> = {\n \"~\": \"~0\",\n \".\": \"~1\",\n \"[\": \"~2\",\n \"]\": \"~3\",\n '\"': \"~4\",\n \"'\": \"~5\",\n};\n\nconst UNESCAPE_SEQUENCES: Record<string, string> = Object.fromEntries(\n Object.entries(ESCAPE_SEQUENCES).map(([char, sequence]) => [sequence, char]),\n);\n\nexport const dynamicPropKeys = {\n escapePropsKeys,\n unescapePropsKeys,\n unescapeInputKeys,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/array-zipper.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nfunction getLongestArrayLengthInObject(props: Record<string, unknown>): number {\n return Math.max(\n ...Object.values(props).map((value) =>\n Array.isArray(value) ? value.length : 1,\n ),\n );\n}\n\nfunction constructResultForIndex(\n props: Record<string, unknown>,\n index: number,\n): Record<string, unknown> {\n return Object.entries(props).reduce(\n (result, [key, value]) => {\n result[key] = Array.isArray(value) ? value[index] : value;\n return result;\n },\n {} as Record<string, unknown>,\n );\n}\n\nexport const arrayZipperProcessor: ProcessorFn = (_property, value) => {\n if (Array.isArray(value) || !isObject(value)) {\n return value;\n }\n\n return Array.from(\n { length: getLongestArrayLengthInObject(value) },\n (_, index) => constructResultForIndex(value, index),\n );\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/checkbox.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const checkboxProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return typeof parsed === \"boolean\" ? parsed : value;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/date-time.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport dayjs from \"dayjs\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const dateTimeProcessor: ProcessorFn = (_property, value) => {\n dayjs.extend(utc);\n dayjs.extend(timezone);\n const dateTimeString = value;\n try {\n if (!dateTimeString) throw Error(\"Undefined input\");\n return dayjs.tz(dateTimeString, \"UTC\").toISOString();\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/file.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isBase64, isNil, isString } from \"../../../../core-utils/index.js\";\nimport type { ApStreamingFile } from \"../../../../framework/index.js\";\nimport { ApFile, PropertyType } from \"../../../../framework/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const fileProcessor: ProcessorFn = async (property, urlOrBase64) => {\n if (isNil(urlOrBase64) || !isString(urlOrBase64)) {\n return null;\n }\n const streaming =\n property.type === PropertyType.FILE && property.streaming === true;\n try {\n if (streaming) {\n return await handleStreamingFile(urlOrBase64);\n }\n const file = handleBase64File(urlOrBase64);\n if (!isNil(file)) {\n return file;\n }\n return await handleUrlFile(urlOrBase64);\n } catch (e) {\n console.error(e);\n return null;\n }\n};\n\nfunction parseBase64File(\n propertyValue: string,\n): { extension: string; buffer: Buffer } | null {\n if (!isBase64(propertyValue, { allowMime: true })) {\n return null;\n }\n const matches = propertyValue.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); // example match: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\n if (!matches || matches?.length !== 3) {\n return null;\n }\n return {\n extension: mimeExtension(matches[1]) || \"bin\",\n buffer: Buffer.from(matches[2], \"base64\"),\n };\n}\n\nfunction handleBase64File(propertyValue: string): ApFile | null {\n const parsed = parseBase64File(propertyValue);\n if (isNil(parsed)) {\n return null;\n }\n return new ApFile(\n `unknown.${parsed.extension}`,\n parsed.buffer,\n parsed.extension,\n );\n}\n\nasync function handleUrlFile(path: string): Promise<ApFile | null> {\n const fileResponse = await fetch(path);\n // A 4xx/5xx body is the server's error page, not the file. handleStreamingFile\n // already refuses one.\n if (!fileResponse.ok) {\n return null;\n }\n\n const filename =\n getFileName(\n path,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n\n return new ApFile(\n filename,\n Buffer.from(await fileResponse.arrayBuffer()),\n extension,\n );\n}\n\nasync function handleStreamingFile(\n propertyValue: string,\n): Promise<ApStreamingFile | null> {\n const parsed = parseBase64File(propertyValue);\n if (!isNil(parsed)) {\n return {\n filename: `unknown.${parsed.extension}`,\n extension: parsed.extension,\n size: parsed.buffer.length,\n body: Readable.from(parsed.buffer),\n };\n }\n\n const fileResponse = await fetch(propertyValue);\n if (!fileResponse.ok || isNil(fileResponse.body)) {\n await fileResponse.body?.cancel();\n return null;\n }\n const filename =\n getFileName(\n propertyValue,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n const contentEncoding = fileResponse.headers.get(\"content-encoding\");\n const contentLength = Number(fileResponse.headers.get(\"content-length\"));\n // undici transparently decompresses gzip/br/deflate but leaves the compressed\n // Content-Length in place, so it would understate the streamed byte count and\n // truncate the destination. Only trust the size when the body is not encoded.\n const sizeIsTrustworthy =\n (isNil(contentEncoding) || contentEncoding.toLowerCase() === \"identity\") &&\n Number.isInteger(contentLength) &&\n contentLength > 0;\n\n return {\n filename,\n extension,\n size: sizeIsTrustworthy ? contentLength : undefined,\n // @ts-expect-error -- undici streams a Node web ReadableStream body; the DOM fetch types omit the fromWeb overload\n body: Readable.fromWeb(fileResponse.body),\n };\n}\n\nfunction extensionFromFilename(filename: string): string | undefined {\n const parts = filename.split(\".\");\n const last = parts.length > 1 ? parts.pop() : undefined;\n return last ? last : undefined;\n}\n\nfunction getFileName(\n path: string,\n disposition: string | null,\n mimeType: string | undefined,\n): string | null {\n const url = new URL(path);\n if (isNil(disposition)) {\n const fileNameFromUrl =\n url.pathname.includes(\"/\") && url.pathname.split(\"/\").pop()?.includes(\".\")\n ? url.pathname.split(\"/\").pop()\n : null;\n if (!isNil(fileNameFromUrl)) {\n return fileNameFromUrl;\n }\n const resolvedExtension = mimeType ? mimeExtension(mimeType) : null;\n return `unknown.${resolvedExtension ?? \"bin\"}`;\n }\n const utf8FilenameRegex = /filename\\*=UTF-8''([\\w%\\-.]+)(?:; ?|$)/i;\n if (utf8FilenameRegex.test(disposition)) {\n const result = utf8FilenameRegex.exec(disposition);\n if (result && result.length > 1) {\n return decodeURIComponent(result[1]);\n }\n }\n // prevent ReDos attacks by anchoring the ascii regex to string start and\n // slicing off everything before 'filename='\n const filenameStart = disposition.toLowerCase().indexOf(\"filename=\");\n const asciiFilenameRegex = /^filename=([\"']?)(.*?[^\\\\])\\1(?:; ?|$)/i;\n\n if (filenameStart >= 0) {\n const partialDisposition = disposition.slice(filenameStart);\n const matches = asciiFilenameRegex.exec(partialDisposition);\n if (matches != null && matches[2]) {\n return matches[2];\n }\n }\n return null;\n}\n\nfunction mimeExtension(mimeType: string): string | null {\n const normalized = mimeType.split(\";\")[0].trim().toLowerCase();\n return MIME_EXTENSIONS[normalized] ?? null;\n}\n\nconst MIME_EXTENSIONS: Record<string, string> = {\n \"application/json\": \"json\",\n \"application/pdf\": \"pdf\",\n \"application/xml\": \"xml\",\n \"application/zip\": \"zip\",\n \"application/gzip\": \"gz\",\n \"application/x-7z-compressed\": \"7z\",\n \"application/x-tar\": \"tar\",\n \"application/octet-stream\": \"bin\",\n \"application/msword\": \"doc\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n \"docx\",\n \"application/vnd.ms-excel\": \"xls\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": \"xlsx\",\n \"application/vnd.ms-powerpoint\": \"ppt\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\":\n \"pptx\",\n \"application/rtf\": \"rtf\",\n \"application/javascript\": \"js\",\n \"application/x-javascript\": \"js\",\n \"application/x-yaml\": \"yaml\",\n \"application/yaml\": \"yaml\",\n \"application/x-httpd-php\": \"php\",\n \"application/x-sh\": \"sh\",\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/jpg\": \"jpg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n \"image/svg+xml\": \"svg\",\n \"image/bmp\": \"bmp\",\n \"image/tiff\": \"tiff\",\n \"image/x-icon\": \"ico\",\n \"image/vnd.microsoft.icon\": \"ico\",\n \"image/heic\": \"heic\",\n \"image/heif\": \"heif\",\n \"image/avif\": \"avif\",\n \"text/plain\": \"txt\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/csv\": \"csv\",\n \"text/javascript\": \"js\",\n \"text/markdown\": \"md\",\n \"text/xml\": \"xml\",\n \"text/tab-separated-values\": \"tsv\",\n \"text/yaml\": \"yaml\",\n \"audio/mpeg\": \"mp3\",\n \"audio/mp3\": \"mp3\",\n \"audio/mp4\": \"m4a\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/webm\": \"weba\",\n \"audio/flac\": \"flac\",\n \"audio/aac\": \"aac\",\n \"video/mp4\": \"mp4\",\n \"video/mpeg\": \"mpeg\",\n \"video/webm\": \"webm\",\n \"video/quicktime\": \"mov\",\n \"video/x-msvideo\": \"avi\",\n \"video/ogg\": \"ogv\",\n \"font/woff\": \"woff\",\n \"font/woff2\": \"woff2\",\n \"font/ttf\": \"ttf\",\n \"font/otf\": \"otf\",\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/json.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const jsonProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n try {\n if (typeof value === \"object\") {\n return value;\n }\n return JSON.parse(value);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/multi-select.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const multiSelectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || Array.isArray(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return Array.isArray(parsed) ? parsed : [value];\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/number.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const numberProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (value === \"\") {\n return undefined;\n }\n return Number(value);\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/object.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const objectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch (e) {\n return undefined;\n }\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n return value;\n }\n return undefined;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/text.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const textProcessor: ProcessorFn = (property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n\n const result = value.toString();\n if (result.length === 0 && !property.required) {\n return undefined;\n }\n return result;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/index.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { PropertyType } from \"../../../../framework/index.js\";\nimport { checkboxProcessor } from \"./checkbox.js\";\nimport { dateTimeProcessor } from \"./date-time.js\";\nimport { fileProcessor } from \"./file.js\";\nimport { jsonProcessor } from \"./json.js\";\nimport { multiSelectProcessor } from \"./multi-select.js\";\nimport { numberProcessor } from \"./number.js\";\nimport { objectProcessor } from \"./object.js\";\nimport { textProcessor } from \"./text.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const processors: Partial<Record<PropertyType, ProcessorFn>> = {\n JSON: jsonProcessor,\n OBJECT: objectProcessor,\n NUMBER: numberProcessor,\n LONG_TEXT: textProcessor,\n SHORT_TEXT: textProcessor,\n SECRET_TEXT: textProcessor,\n DATE_TIME: dateTimeProcessor,\n FILE: fileProcessor,\n MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n STATIC_MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n CHECKBOX: checkboxProcessor,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/props-processor.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isNil, isObject } from \"../../../core-utils/index.js\";\nimport type {\n InputPropertyMap,\n PieceAuthProperty,\n PieceProperty,\n PiecePropertyMap,\n StaticPropsValue,\n} from \"../../../framework/index.js\";\nimport {\n DateRangeValue,\n getAuthPropertyForValue,\n PropertyType,\n} from \"../../../framework/index.js\";\nimport { dynamicPropKeys } from \"../helper/dynamic-prop-keys.js\";\nimport { processors } from \"./processors/index.js\";\nimport { arrayZipperProcessor } from \"./processors/array-zipper.js\";\nimport type { AppConnectionValue } from \"../../../core-piece-types/index.js\";\nimport { AUTHENTICATION_PROPERTY_NAME } from \"../../../core-piece-types/index.js\";\nimport type { PropertySettings } from \"../../../../src/host/shared-shim.js\";\n\ntype PropsValidationError = {\n [key: string]: string[] | PropsValidationError | PropsValidationError[];\n};\n\nexport const propsProcessor = {\n applyProcessorsAndValidators: async (\n resolvedInput: StaticPropsValue<PiecePropertyMap>,\n props: InputPropertyMap,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n requireAuth: boolean,\n propertySettings: Record<string, PropertySettings>,\n ): Promise<{\n processedInput: StaticPropsValue<PiecePropertyMap>;\n errors: PropsValidationError;\n }> => {\n let dynamaicPropertiesSchema: Record<string, InputPropertyMap> | undefined =\n undefined;\n if (Object.keys(propertySettings).length > 0) {\n dynamaicPropertiesSchema = Object.fromEntries(\n Object.entries(propertySettings).map(([key, propertySetting]) => [\n key,\n propertySetting.schema,\n ]),\n );\n }\n const processedInput = { ...resolvedInput };\n const errors: PropsValidationError = {};\n const authValue: AppConnectionValue | undefined =\n resolvedInput[AUTHENTICATION_PROPERTY_NAME];\n if (authValue && requireAuth) {\n const authPropsToProcess = getAuthPropsToProcess(authValue, auth);\n if (authPropsToProcess) {\n const { processedInput: authProcessedInput, errors: authErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n resolvedInput[AUTHENTICATION_PROPERTY_NAME],\n authPropsToProcess,\n undefined,\n false,\n {},\n );\n processedInput[AUTHENTICATION_PROPERTY_NAME] = authProcessedInput;\n if (Object.keys(authErrors).length > 0) {\n errors[AUTHENTICATION_PROPERTY_NAME] = authErrors;\n }\n }\n }\n for (const [key, value] of Object.entries(resolvedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n if (property.type === PropertyType.DYNAMIC) {\n const valueWithOriginalKeys = dynamicPropKeys.unescapeInputKeys(value);\n processedInput[key] = valueWithOriginalKeys;\n if (!isNil(dynamaicPropertiesSchema?.[key])) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n valueWithOriginalKeys,\n dynamicPropKeys.unescapePropsKeys(dynamaicPropertiesSchema[key]),\n undefined,\n false,\n {},\n );\n processedInput[key] = itemProcessedInput;\n if (Object.keys(itemErrors).length > 0) {\n errors[key] = itemErrors;\n }\n }\n }\n if (property.type === PropertyType.ARRAY && property.properties) {\n const arrayOfObjects = arrayZipperProcessor(property, value) ?? [];\n const processedArray = [];\n const processedErrors = [];\n for (const item of arrayOfObjects) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n item,\n property.properties,\n undefined,\n false,\n {},\n );\n processedArray.push(itemProcessedInput);\n processedErrors.push(itemErrors);\n }\n processedInput[key] = processedArray;\n const isThereErrors = processedErrors.some(\n (error) => Object.keys(error).length > 0,\n );\n if (isThereErrors) {\n errors[key] = {\n properties: processedErrors,\n };\n }\n }\n if (!property.required && isNil(processedInput[key])) {\n processedInput[key] = undefined;\n }\n const processor = processors[property.type];\n if (processor) {\n processedInput[key] = await processor(property, processedInput[key]);\n }\n\n const shouldValidate =\n key !== AUTHENTICATION_PROPERTY_NAME &&\n property.type !== PropertyType.MARKDOWN;\n if (!shouldValidate) {\n continue;\n }\n }\n\n for (const [key, value] of Object.entries(processedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n\n const validationErrors = validateProperty(\n property,\n value,\n resolvedInput[key],\n );\n if (validationErrors.length > 0) {\n errors[key] = validationErrors;\n }\n }\n\n // Streaming file inputs open a live connection when resolved. If any property\n // fails validation the action never runs, so drain those bodies here to avoid\n // leaking connections until GC.\n if (Object.keys(errors).length > 0) {\n destroyOpenStreams(processedInput);\n }\n\n return { processedInput, errors };\n },\n};\n\nfunction destroyOpenStreams(value: unknown): void {\n if (isNil(value) || typeof value !== \"object\" || Buffer.isBuffer(value)) {\n return;\n }\n if (value instanceof Readable) {\n value.destroy();\n return;\n }\n for (const child of Object.values(value)) {\n destroyOpenStreams(child);\n }\n}\n\nexport const validateProperty = (\n property: PieceProperty,\n value: unknown,\n originalValue: unknown,\n): string[] => {\n if (property.type === PropertyType.JSON) {\n if (!property.required && originalValue === \"\") {\n return [];\n }\n if (!isNil(originalValue) && isNil(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n if (!property.required && isNil(value)) {\n return [];\n }\n if (!isObject(value) && !Array.isArray(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n return [];\n }\n\n if (!property.required && isNil(value)) {\n return [];\n }\n\n switch (property.type) {\n case PropertyType.SHORT_TEXT:\n case PropertyType.LONG_TEXT:\n case PropertyType.RICH_TEXT:\n return typeof value === \"string\"\n ? []\n : [`Expected string, received: ${originalValue}`];\n case PropertyType.NUMBER:\n return typeof value === \"number\" && !Number.isNaN(value)\n ? []\n : [`Expected number, received: ${originalValue}`];\n case PropertyType.CHECKBOX:\n return typeof value === \"boolean\"\n ? []\n : [`Expected boolean, received: ${originalValue}`];\n case PropertyType.DATE_TIME:\n return typeof value === \"string\"\n ? []\n : [\n `Invalid datetime format. Expected ISO format (e.g. 2024-03-14T12:00:00.000Z), received: ${originalValue}`,\n ];\n case PropertyType.DATE_RANGE:\n return DateRangeValue.safeParse(value).success\n ? []\n : [`Expected date range, received: ${originalValue}`];\n case PropertyType.ARRAY:\n case PropertyType.MULTI_SELECT_DROPDOWN:\n case PropertyType.STATIC_MULTI_SELECT_DROPDOWN:\n return Array.isArray(value)\n ? []\n : [`Expected array, received: ${originalValue}`];\n case PropertyType.OBJECT:\n return isObject(value)\n ? []\n : [`Expected object, received: ${originalValue}`];\n case PropertyType.FILE:\n return isObject(value)\n ? []\n : [\n `Expected file url or base64 with mimeType, received: ${originalValue}`,\n ];\n default:\n return [];\n }\n};\n\nfunction getAuthPropsToProcess(\n authValue: AppConnectionValue,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n): null {\n if (isNil(auth)) {\n return null;\n }\n const usedAuthProperty = getAuthPropertyForValue({\n authValueType: authValue.type,\n pieceAuth: auth,\n });\n const doesAuthHaveProps =\n usedAuthProperty?.type === PropertyType.CUSTOM_AUTH ||\n usedAuthProperty?.type === PropertyType.OAUTH2 ||\n usedAuthProperty?.type === PropertyType.OIDC;\n if (doesAuthHaveProps && !isNil(usedAuthProperty?.props)) {\n return usedAuthProperty.props;\n }\n return null;\n}\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1134,6 +1134,10 @@ const createTrigger = (params) => {
|
|
|
1134
1134
|
case TriggerStrategy.POLLING: return new ITrigger(params.name, params.displayName, params.description, params.requireAuth ?? true, params.props, params.type, { strategy: WebhookHandshakeStrategy.NONE }, async () => ({ status: 200 }), { strategy: WebhookRenewStrategy.NONE }, async () => Promise.resolve(), params.onEnable, params.onDisable, params.onStart ?? (async () => Promise.resolve()), params.run, params.test ?? (() => Promise.resolve([params.sampleData])), params.sampleData, TriggerTestStrategy.TEST_FUNCTION, params.outputSchema, params.aiMetadata, params.classification, params.propertyGroups);
|
|
1135
1135
|
case TriggerStrategy.MANUAL: return new ITrigger(params.name, params.displayName, params.description, params.requireAuth ?? true, params.props, params.type, { strategy: WebhookHandshakeStrategy.NONE }, async () => ({ status: 200 }), { strategy: WebhookRenewStrategy.NONE }, async () => Promise.resolve(), params.onEnable, params.onDisable, params.onStart ?? (async () => Promise.resolve()), params.run, params.test ?? (() => Promise.resolve([params.sampleData])), params.sampleData, TriggerTestStrategy.TEST_FUNCTION, params.outputSchema, params.aiMetadata, params.classification, params.propertyGroups);
|
|
1136
1136
|
case TriggerStrategy.APP_WEBHOOK: return new ITrigger(params.name, params.displayName, params.description, params.requireAuth ?? true, params.props, params.type, { strategy: WebhookHandshakeStrategy.NONE }, async () => ({ status: 200 }), { strategy: WebhookRenewStrategy.NONE }, async () => Promise.resolve(), params.onEnable, params.onDisable, params.onStart ?? (async () => Promise.resolve()), params.run, params.test ?? (() => Promise.resolve([params.sampleData])), params.sampleData, isNil(params.sampleData) && isNil(params.test) ? TriggerTestStrategy.SIMULATION : TriggerTestStrategy.TEST_FUNCTION, params.outputSchema, params.aiMetadata, params.classification, params.propertyGroups);
|
|
1137
|
+
default: {
|
|
1138
|
+
const { name, type, strategy } = params;
|
|
1139
|
+
throw new Error(type === void 0 && strategy !== void 0 ? `createTrigger: trigger ${JSON.stringify(name)} sets \`strategy\`; the field is \`type\`, e.g. type: TriggerStrategy.POLLING` : `createTrigger: trigger ${JSON.stringify(name)} has \`type\` ${JSON.stringify(type)}; set type: TriggerStrategy.POLLING or TriggerStrategy.WEBHOOK`);
|
|
1140
|
+
}
|
|
1137
1141
|
}
|
|
1138
1142
|
};
|
|
1139
1143
|
|