@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 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 `test/variables/props-validator.test.ts` and
47
- `test/variables/file-processor.test.ts` come along: the rest need
48
- `@activepieces/shared`, `props-resolver` or `FlowExecutorContext`.
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 declaration of the minimal
55
- shape `props-processor.ts` reads. An unmapped symbol fails the sync.
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
@@ -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;;;KCChB,gBAAA;EACV,MAAA,EAAQ,gBAAA;AAAA;;;KCgBL,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"}
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(/&nbsp;/g, \" \")\n .replace(/&amp;/g, \"&\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&apos;/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(/&nbsp;/g, \" \")\n .replace(/&amp;/g, \"&\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&apos;/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