@powerhousedao/pieces-framework 6.2.3-dev.23 → 6.2.3-dev.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -0
- package/UPSTREAM.md +57 -10
- package/dist/{action--RmO83_Y.d.ts → action-BOq8m66H.d.ts} +6116 -6119
- package/dist/{action--RmO83_Y.d.ts.map → action-BOq8m66H.d.ts.map} +1 -1
- package/dist/{authentication-B7brX_It.js → authentication-o-4CdAPR.js} +20 -20
- package/dist/{authentication-B7brX_It.js.map → authentication-o-4CdAPR.js.map} +1 -1
- package/dist/common.d.ts +41 -77
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +64 -66
- package/dist/common.js.map +1 -1
- package/dist/host.d.ts +26 -22
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +33 -28
- package/dist/host.js.map +1 -1
- package/dist/{index-BW6GxXEN.d.ts → index-Ceki0QqC.d.ts} +957 -968
- package/dist/index-Ceki0QqC.d.ts.map +1 -0
- package/dist/index.d.ts +176 -175
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +185 -155
- package/dist/index.js.map +1 -1
- package/dist/{input-COuhC1I-.js → input-BHkj_oP5.js} +45 -32
- package/dist/{input-COuhC1I-.js.map → input-BHkj_oP5.js.map} +1 -1
- package/dist/{markdown-property-Df2l6_y_.js → markdown-property-DMfHjEiL.js} +13 -10
- package/dist/{markdown-property-Df2l6_y_.js.map → markdown-property-DMfHjEiL.js.map} +1 -1
- package/package.json +4 -3
- package/dist/index-BW6GxXEN.d.ts.map +0 -1
package/dist/host.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { I as PieceProperty, L as PiecePropertyMap,
|
|
2
|
-
|
|
1
|
+
import { I as PieceProperty, L as PiecePropertyMap, Nt as PropertyType, P as InputPropertyMap, R as StaticPropsValue, st as PieceAuthProperty } from "./index-Ceki0QqC.js";
|
|
3
2
|
//#region upstream/core-utils/lib/friendly-piece-error.d.ts
|
|
4
|
-
declare const formatPieceError: (error: unknown, options?: FormatPieceErrorOptions) => FriendlyPieceError;
|
|
5
|
-
declare const tryParseFriendlyPieceError: (value: unknown) => FriendlyPieceError | null;
|
|
3
|
+
export declare const formatPieceError: (error: unknown, options?: FormatPieceErrorOptions) => FriendlyPieceError;
|
|
4
|
+
export declare const tryParseFriendlyPieceError: (value: unknown) => FriendlyPieceError | null;
|
|
6
5
|
type FriendlyPieceError = {
|
|
7
6
|
__apErrorVersion: 1;
|
|
8
7
|
message: string;
|
|
@@ -21,14 +20,11 @@ type FormatPieceErrorOptions = {
|
|
|
21
20
|
};
|
|
22
21
|
//#endregion
|
|
23
22
|
//#region upstream/core-utils/lib/ssrf-ip-classifier.d.ts
|
|
24
|
-
declare function isBlockedIp({
|
|
25
|
-
ip,
|
|
26
|
-
allowList
|
|
27
|
-
}: {
|
|
23
|
+
declare function isBlockedIp({ ip, allowList }: {
|
|
28
24
|
ip: string;
|
|
29
25
|
allowList: string[];
|
|
30
26
|
}): boolean;
|
|
31
|
-
declare const ssrfIpClassifier: {
|
|
27
|
+
export declare const ssrfIpClassifier: {
|
|
32
28
|
isBlockedIp: typeof isBlockedIp;
|
|
33
29
|
};
|
|
34
30
|
//#endregion
|
|
@@ -36,7 +32,7 @@ declare const ssrfIpClassifier: {
|
|
|
36
32
|
declare function escapePropsKeys(props: InputPropertyMap): InputPropertyMap;
|
|
37
33
|
declare function unescapePropsKeys(props: InputPropertyMap): InputPropertyMap;
|
|
38
34
|
declare function unescapeInputKeys<T>(value: T): T;
|
|
39
|
-
declare const dynamicPropKeys: {
|
|
35
|
+
export declare const dynamicPropKeys: {
|
|
40
36
|
escapePropsKeys: typeof escapePropsKeys;
|
|
41
37
|
unescapePropsKeys: typeof unescapePropsKeys;
|
|
42
38
|
unescapeInputKeys: typeof unescapeInputKeys;
|
|
@@ -46,37 +42,43 @@ declare const dynamicPropKeys: {
|
|
|
46
42
|
type ProcessorFn<INPUT = any, OUTPUT = any> = (property: PieceProperty, value: INPUT) => OUTPUT;
|
|
47
43
|
//#endregion
|
|
48
44
|
//#region upstream/engine/lib/variables/processors/array-zipper.d.ts
|
|
49
|
-
declare const arrayZipperProcessor: ProcessorFn;
|
|
45
|
+
export declare const arrayZipperProcessor: ProcessorFn;
|
|
50
46
|
//#endregion
|
|
51
47
|
//#region upstream/engine/lib/variables/processors/checkbox.d.ts
|
|
52
|
-
declare const checkboxProcessor: ProcessorFn;
|
|
48
|
+
export declare const checkboxProcessor: ProcessorFn;
|
|
53
49
|
//#endregion
|
|
54
50
|
//#region upstream/engine/lib/variables/processors/date-time.d.ts
|
|
55
|
-
declare const dateTimeProcessor: ProcessorFn;
|
|
51
|
+
export declare const dateTimeProcessor: ProcessorFn;
|
|
56
52
|
//#endregion
|
|
57
53
|
//#region upstream/engine/lib/variables/processors/file.d.ts
|
|
58
|
-
declare const fileProcessor: ProcessorFn;
|
|
54
|
+
export declare const fileProcessor: ProcessorFn;
|
|
59
55
|
//#endregion
|
|
60
56
|
//#region upstream/engine/lib/variables/processors/index.d.ts
|
|
61
|
-
declare const processors: Partial<Record<PropertyType, ProcessorFn>>;
|
|
57
|
+
export declare const processors: Partial<Record<PropertyType, ProcessorFn>>;
|
|
62
58
|
//#endregion
|
|
63
59
|
//#region upstream/engine/lib/variables/processors/json.d.ts
|
|
64
|
-
declare const jsonProcessor: ProcessorFn;
|
|
60
|
+
export declare const jsonProcessor: ProcessorFn;
|
|
65
61
|
//#endregion
|
|
66
62
|
//#region upstream/engine/lib/variables/processors/multi-select.d.ts
|
|
67
|
-
declare const multiSelectProcessor: ProcessorFn;
|
|
63
|
+
export declare const multiSelectProcessor: ProcessorFn;
|
|
68
64
|
//#endregion
|
|
69
65
|
//#region upstream/engine/lib/variables/processors/number.d.ts
|
|
70
|
-
declare const numberProcessor: ProcessorFn;
|
|
66
|
+
export declare const numberProcessor: ProcessorFn;
|
|
71
67
|
//#endregion
|
|
72
68
|
//#region upstream/engine/lib/variables/processors/object.d.ts
|
|
73
|
-
declare const objectProcessor: ProcessorFn;
|
|
69
|
+
export declare const objectProcessor: ProcessorFn;
|
|
74
70
|
//#endregion
|
|
75
71
|
//#region upstream/engine/lib/variables/processors/text.d.ts
|
|
76
|
-
declare const textProcessor: ProcessorFn;
|
|
72
|
+
export declare const textProcessor: ProcessorFn;
|
|
77
73
|
//#endregion
|
|
78
74
|
//#region src/host/shared-shim.d.ts
|
|
75
|
+
declare const PropertyExecutionType: {
|
|
76
|
+
readonly MANUAL: "MANUAL";
|
|
77
|
+
readonly DYNAMIC: "DYNAMIC";
|
|
78
|
+
};
|
|
79
|
+
type PropertyExecutionType = (typeof PropertyExecutionType)[keyof typeof PropertyExecutionType];
|
|
79
80
|
type PropertySettings = {
|
|
81
|
+
type?: PropertyExecutionType;
|
|
80
82
|
schema: InputPropertyMap;
|
|
81
83
|
};
|
|
82
84
|
//#endregion
|
|
@@ -84,12 +86,14 @@ type PropertySettings = {
|
|
|
84
86
|
type PropsValidationError = {
|
|
85
87
|
[key: string]: string[] | PropsValidationError | PropsValidationError[];
|
|
86
88
|
};
|
|
87
|
-
declare const propsProcessor: {
|
|
89
|
+
export declare const propsProcessor: {
|
|
88
90
|
applyProcessorsAndValidators: (resolvedInput: StaticPropsValue<PiecePropertyMap>, props: InputPropertyMap, auth: PieceAuthProperty | PieceAuthProperty[] | undefined, requireAuth: boolean, propertySettings: Record<string, PropertySettings>) => Promise<{
|
|
89
91
|
processedInput: StaticPropsValue<PiecePropertyMap>;
|
|
90
92
|
errors: PropsValidationError;
|
|
91
93
|
}>;
|
|
92
94
|
};
|
|
95
|
+
export declare const validateProperty: (property: PieceProperty, value: unknown, originalValue: unknown) => string[];
|
|
93
96
|
//#endregion
|
|
94
|
-
export {
|
|
97
|
+
export type { FriendlyPieceError, ProcessorFn, PropertySettings };
|
|
98
|
+
export {};
|
|
95
99
|
//# sourceMappingURL=host.d.ts.map
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/types.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../src/host/shared-shim.ts","../upstream/engine/lib/variables/props-processor.ts"],"mappings":"
|
|
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":";;qBAkYa,mBAAgB,gBACb,UACJ,4BACT;qBAgDU,6BAA0B,mBAEpC;KAwBS;EACV;EACA;EACA;EACA;EACA;EACA,kBAAkB;EAClB;EACA;EACA;EACA;EACA;;KAGG;EACH;;;;iBCzaO,cACP,IACA;EAEA;EACA;;qBAYW;sBAAA;;;;iBC7DJ,gBAAgB,OAAO,mBAAmB;iBAM1C,kBAAkB,OAAO,mBAAmB;iBAS5C,kBAAkB,GAAG,OAAO,IAAI;qBAkD5B;;;;;;;KCpED,YAAY,aAAa,iBACnC,UAAU,eACV,OAAO,UACJ;;;qBCiBQ,sBAAsB;;;qBCrBtB,mBAAmB;;;qBCEnB,mBAAmB;;;qBCCnB,eAAe;;;qBCKf,YAAY,QAAQ,OAAO,cAAc;;;qBCRzC,eAAe;;;qBCAf,sBAAsB;;;qBCAtB,iBAAiB;;;qBCAjB,iBAAiB;;;qBCAjB,eAAe;;;cCAf;WACX;WACA;;KAEU,gCACF,oCAAoC;KAIlC;EACV,OAAO;EACP,QAAQ;;;;KCOL;GACF,yBAAyB,uBAAuB;;qBAGtC;EACX,+BAA4B,eACX,iBAAiB,mBAAiB,OAC1C,kBAAgB,MACjB,oBAAoB,iCAA+B,sBACrC,kBACF,eAAe,sBAChC;IACD,gBAAgB,iBAAiB;IACjC,QAAQ;;;qBA0IC,mBAAgB,UACjB,eAAa,gBACT"}
|
package/dist/host.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as PropertyType, b as ApFile, c as isNil, d as parseToJsonIfPossible, l as isString, o as isBase64, r as tryCatchSync, v as DateRangeValue } from "./markdown-property-
|
|
2
|
-
import { g as AUTHENTICATION_PROPERTY_NAME, i as getAuthPropertyForValue, m as isObject } from "./authentication-
|
|
1
|
+
import { A as PropertyType, b as ApFile, c as isNil, d as parseToJsonIfPossible, l as isString, o as isBase64, r as tryCatchSync, v as DateRangeValue } from "./markdown-property-DMfHjEiL.js";
|
|
2
|
+
import { g as AUTHENTICATION_PROPERTY_NAME, i as getAuthPropertyForValue, m as isObject } from "./authentication-o-4CdAPR.js";
|
|
3
3
|
import ipaddr from "ipaddr.js";
|
|
4
4
|
import { Readable } from "node:stream";
|
|
5
5
|
import dayjs from "dayjs";
|
|
@@ -52,7 +52,8 @@ const decodeHtmlEntities = (value) => {
|
|
|
52
52
|
const stripMarkup = (value) => {
|
|
53
53
|
const titleMatch = value.match(/<title[^>]*>([\s\S]*?)<\/title>/i);
|
|
54
54
|
const title = titleMatch ? decodeHtmlEntities(titleMatch[1]).replace(/\s+/g, " ").trim() : "";
|
|
55
|
-
const
|
|
55
|
+
const withoutNoise = value.replace(/<script[\s\S]*?<\/script>/gi, " ").replace(/<style[\s\S]*?<\/style>/gi, " ").replace(/<head[\s\S]*?<\/head>/gi, " ");
|
|
56
|
+
const textOnly = decodeHtmlEntities(withoutNoise.replace(/<[^>]+>/g, " ")).replace(/\s+/g, " ").trim();
|
|
56
57
|
if (textOnly.length > 0 && title.length > 0 && !textOnly.startsWith(title)) return `${title} — ${textOnly}`;
|
|
57
58
|
return textOnly.length > 0 ? textOnly : title;
|
|
58
59
|
};
|
|
@@ -84,8 +85,9 @@ const collectMessageFrom = ({ value, depth, seen }) => {
|
|
|
84
85
|
if (isObjectRecord(value)) {
|
|
85
86
|
if (seen.has(value)) return;
|
|
86
87
|
seen.add(value);
|
|
88
|
+
const nested = value["message"] ?? value["detail"] ?? value["description"] ?? value["reason"] ?? value["error"];
|
|
87
89
|
return collectMessageFrom({
|
|
88
|
-
value:
|
|
90
|
+
value: nested,
|
|
89
91
|
depth: depth + 1,
|
|
90
92
|
seen
|
|
91
93
|
});
|
|
@@ -258,12 +260,14 @@ const formatPieceError = (error, options) => {
|
|
|
258
260
|
if (isFriendlyPieceError(error)) return withRaw(error);
|
|
259
261
|
const httpDetails = extractHttpDetails(error);
|
|
260
262
|
const errorName = readErrorName(error);
|
|
263
|
+
const rawMessage = readErrorMessage(error);
|
|
264
|
+
const message = pickPlainMessage({
|
|
265
|
+
httpDetails,
|
|
266
|
+
rawMessage
|
|
267
|
+
});
|
|
261
268
|
return withRaw({
|
|
262
269
|
__apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,
|
|
263
|
-
message
|
|
264
|
-
httpDetails,
|
|
265
|
-
rawMessage: readErrorMessage(error)
|
|
266
|
-
}),
|
|
270
|
+
message,
|
|
267
271
|
errorName,
|
|
268
272
|
...toSerializableHttpDetails(httpDetails) ?? {}
|
|
269
273
|
});
|
|
@@ -400,7 +404,7 @@ const dateTimeProcessor = (_property, value) => {
|
|
|
400
404
|
//#region upstream/engine/lib/variables/processors/file.ts
|
|
401
405
|
const fileProcessor = async (property, urlOrBase64) => {
|
|
402
406
|
if (isNil(urlOrBase64) || !isString(urlOrBase64)) return null;
|
|
403
|
-
const streaming = property.type ===
|
|
407
|
+
const streaming = property.type === "FILE" && property.streaming === true;
|
|
404
408
|
try {
|
|
405
409
|
if (streaming) return await handleStreamingFile(urlOrBase64);
|
|
406
410
|
const file = handleBase64File(urlOrBase64);
|
|
@@ -483,7 +487,8 @@ function getFileName(path, disposition, mimeType) {
|
|
|
483
487
|
return null;
|
|
484
488
|
}
|
|
485
489
|
function mimeExtension(mimeType) {
|
|
486
|
-
|
|
490
|
+
const normalized = mimeType.split(";")[0].trim().toLowerCase();
|
|
491
|
+
return MIME_EXTENSIONS[normalized] ?? null;
|
|
487
492
|
}
|
|
488
493
|
const MIME_EXTENSIONS = {
|
|
489
494
|
"application/json": "json",
|
|
@@ -637,7 +642,7 @@ const propsProcessor = { applyProcessorsAndValidators: async (resolvedInput, pro
|
|
|
637
642
|
for (const [key, value] of Object.entries(resolvedInput)) {
|
|
638
643
|
const property = props[key];
|
|
639
644
|
if (isNil(property)) continue;
|
|
640
|
-
if (property.type ===
|
|
645
|
+
if (property.type === "DYNAMIC") {
|
|
641
646
|
const valueWithOriginalKeys = dynamicPropKeys.unescapeInputKeys(value);
|
|
642
647
|
processedInput[key] = valueWithOriginalKeys;
|
|
643
648
|
if (!isNil(dynamaicPropertiesSchema?.[key])) {
|
|
@@ -646,7 +651,7 @@ const propsProcessor = { applyProcessorsAndValidators: async (resolvedInput, pro
|
|
|
646
651
|
if (Object.keys(itemErrors).length > 0) errors[key] = itemErrors;
|
|
647
652
|
}
|
|
648
653
|
}
|
|
649
|
-
if (property.type ===
|
|
654
|
+
if (property.type === "ARRAY" && property.properties) {
|
|
650
655
|
const arrayOfObjects = arrayZipperProcessor(property, value) ?? [];
|
|
651
656
|
const processedArray = [];
|
|
652
657
|
const processedErrors = [];
|
|
@@ -661,7 +666,7 @@ const propsProcessor = { applyProcessorsAndValidators: async (resolvedInput, pro
|
|
|
661
666
|
if (!property.required && isNil(processedInput[key])) processedInput[key] = void 0;
|
|
662
667
|
const processor = processors[property.type];
|
|
663
668
|
if (processor) processedInput[key] = await processor(property, processedInput[key]);
|
|
664
|
-
if (!(key !== "auth" && property.type !==
|
|
669
|
+
if (!(key !== "auth" && property.type !== "MARKDOWN")) continue;
|
|
665
670
|
}
|
|
666
671
|
for (const [key, value] of Object.entries(processedInput)) {
|
|
667
672
|
const property = props[key];
|
|
@@ -684,7 +689,7 @@ function destroyOpenStreams(value) {
|
|
|
684
689
|
for (const child of Object.values(value)) destroyOpenStreams(child);
|
|
685
690
|
}
|
|
686
691
|
const validateProperty = (property, value, originalValue) => {
|
|
687
|
-
if (property.type ===
|
|
692
|
+
if (property.type === "JSON") {
|
|
688
693
|
if (!property.required && originalValue === "") return [];
|
|
689
694
|
if (!isNil(originalValue) && isNil(value)) return [`Expected JSON, received: ${originalValue}`];
|
|
690
695
|
if (!property.required && isNil(value)) return [];
|
|
@@ -693,18 +698,18 @@ const validateProperty = (property, value, originalValue) => {
|
|
|
693
698
|
}
|
|
694
699
|
if (!property.required && isNil(value)) return [];
|
|
695
700
|
switch (property.type) {
|
|
696
|
-
case
|
|
697
|
-
case
|
|
698
|
-
case
|
|
699
|
-
case
|
|
700
|
-
case
|
|
701
|
-
case
|
|
702
|
-
case
|
|
703
|
-
case
|
|
704
|
-
case
|
|
705
|
-
case
|
|
706
|
-
case
|
|
707
|
-
case
|
|
701
|
+
case "SHORT_TEXT":
|
|
702
|
+
case "LONG_TEXT":
|
|
703
|
+
case "RICH_TEXT": return typeof value === "string" ? [] : [`Expected string, received: ${originalValue}`];
|
|
704
|
+
case "NUMBER": return typeof value === "number" && !Number.isNaN(value) ? [] : [`Expected number, received: ${originalValue}`];
|
|
705
|
+
case "CHECKBOX": return typeof value === "boolean" ? [] : [`Expected boolean, received: ${originalValue}`];
|
|
706
|
+
case "DATE_TIME": return typeof value === "string" ? [] : [`Invalid datetime format. Expected ISO format (e.g. 2024-03-14T12:00:00.000Z), received: ${originalValue}`];
|
|
707
|
+
case "DATE_RANGE": return DateRangeValue.safeParse(value).success ? [] : [`Expected date range, received: ${originalValue}`];
|
|
708
|
+
case "ARRAY":
|
|
709
|
+
case "MULTI_SELECT_DROPDOWN":
|
|
710
|
+
case "STATIC_MULTI_SELECT_DROPDOWN": return Array.isArray(value) ? [] : [`Expected array, received: ${originalValue}`];
|
|
711
|
+
case "OBJECT": return isObject(value) ? [] : [`Expected object, received: ${originalValue}`];
|
|
712
|
+
case "FILE": return isObject(value) ? [] : [`Expected file url or base64 with mimeType, received: ${originalValue}`];
|
|
708
713
|
default: return [];
|
|
709
714
|
}
|
|
710
715
|
};
|
|
@@ -714,10 +719,10 @@ function getAuthPropsToProcess(authValue, auth) {
|
|
|
714
719
|
authValueType: authValue.type,
|
|
715
720
|
pieceAuth: auth
|
|
716
721
|
});
|
|
717
|
-
if ((usedAuthProperty?.type ===
|
|
722
|
+
if ((usedAuthProperty?.type === "CUSTOM_AUTH" || usedAuthProperty?.type === "OAUTH2" || usedAuthProperty?.type === "OIDC") && !isNil(usedAuthProperty?.props)) return usedAuthProperty.props;
|
|
718
723
|
return null;
|
|
719
724
|
}
|
|
720
725
|
|
|
721
726
|
//#endregion
|
|
722
|
-
export { arrayZipperProcessor, checkboxProcessor, dateTimeProcessor, dynamicPropKeys, fileProcessor, formatPieceError, jsonProcessor, multiSelectProcessor, numberProcessor, objectProcessor, processors, propsProcessor, ssrfIpClassifier, textProcessor, tryParseFriendlyPieceError };
|
|
727
|
+
export { arrayZipperProcessor, checkboxProcessor, dateTimeProcessor, dynamicPropKeys, fileProcessor, formatPieceError, jsonProcessor, multiSelectProcessor, numberProcessor, objectProcessor, processors, propsProcessor, ssrfIpClassifier, textProcessor, tryParseFriendlyPieceError, validateProperty };
|
|
723
728
|
//# sourceMappingURL=host.js.map
|
package/dist/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/props-processor.ts"],"sourcesContent":["// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/friendly-piece-error.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { tryCatchSync } from \"./try-catch.js\";\nimport { isNil, isString } from \"./utils.js\";\n\nconst FRIENDLY_PIECE_ERROR_VERSION = 1;\n\nconst STACK_LINE_REGEX = /\\n\\s*at\\s+.+$/gm;\nconst HTTP_ERROR_MESSAGE_MAX_LENGTH = 2000;\nconst RAW_ERROR_MAX_LENGTH = 16000;\nconst HTTP_STATUS_MIN = 100;\nconst HTTP_STATUS_MAX = 599;\nconst MAX_MESSAGE_DEPTH = 12;\nconst MAX_SERIALIZED_DEPTH = 64;\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst TOO_DEEP_PLACEHOLDER = \"[Too deep]\";\nconst UNSERIALIZABLE_PLACEHOLDER = \"[Unserializable]\";\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> => {\n return !isNil(value) && typeof value === \"object\" && !Array.isArray(value);\n};\n\nconst safeJsonParse = (value: string): unknown => {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n};\n\nconst stripStack = (value: string): string => {\n return value.replace(STACK_LINE_REGEX, \"\").trim();\n};\n\nconst truncate = (value: string): string => {\n if (value.length <= HTTP_ERROR_MESSAGE_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, HTTP_ERROR_MESSAGE_MAX_LENGTH)}…`;\n};\n\nconst truncateRaw = (value: string): string => {\n if (value.length <= RAW_ERROR_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, RAW_ERROR_MAX_LENGTH)}\\n…[truncated]`;\n};\n\nconst HTML_DOC_REGEX = /^\\s*(<!doctype\\s+html|<html\\b|<\\?xml)/i;\nconst HTML_TAG_LIKE_REGEX =\n /<\\s*(html|body|head|title|meta|p|div|span|h[1-6]|table|script|style)\\b/i;\n\nconst isLikelyMarkupBody = (value: string): boolean => {\n if (HTML_DOC_REGEX.test(value)) {\n return true;\n }\n if (!value.includes(\"<\") || !value.includes(\">\")) {\n return false;\n }\n return HTML_TAG_LIKE_REGEX.test(value);\n};\n\nconst decodeHtmlEntities = (value: string): string => {\n return value\n .replace(/ /g, \" \")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\");\n};\n\nconst stripMarkup = (value: string): string => {\n const titleMatch = value.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i);\n const title = titleMatch\n ? decodeHtmlEntities(titleMatch[1]).replace(/\\s+/g, \" \").trim()\n : \"\";\n\n const withoutNoise = value\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<head[\\s\\S]*?<\\/head>/gi, \" \");\n const textOnly = decodeHtmlEntities(withoutNoise.replace(/<[^>]+>/g, \" \"))\n .replace(/\\s+/g, \" \")\n .trim();\n\n if (textOnly.length > 0 && title.length > 0 && !textOnly.startsWith(title)) {\n return `${title} — ${textOnly}`;\n }\n return textOnly.length > 0 ? textOnly : title;\n};\n\nconst readString = (\n record: Record<string, unknown>,\n key: string,\n): string | undefined => {\n const value = record[key];\n return isString(value) ? value : undefined;\n};\n\nconst collectMessageFrom = ({\n value,\n depth,\n seen,\n}: TraversalParams): string | undefined => {\n if (isNil(value) || depth > MAX_MESSAGE_DEPTH) {\n return undefined;\n }\n if (isString(value)) {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n if (isLikelyMarkupBody(trimmed)) {\n const stripped = stripMarkup(trimmed);\n return stripped.length > 0 ? stripped : undefined;\n }\n return trimmed;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const parts = value\n .map((entry) =>\n collectMessageFrom({ value: entry, depth: depth + 1, seen }),\n )\n .filter((entry): entry is string => isString(entry) && entry.length > 0);\n return parts.length > 0 ? parts.join(\"; \") : undefined;\n }\n if (isObjectRecord(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const nested =\n value[\"message\"] ??\n value[\"detail\"] ??\n value[\"description\"] ??\n value[\"reason\"] ??\n value[\"error\"];\n return collectMessageFrom({ value: nested, depth: depth + 1, seen });\n }\n return undefined;\n};\n\nconst collectMessage = (value: unknown): string | undefined => {\n return collectMessageFrom({ value, depth: 0, seen: new WeakSet() });\n};\n\nconst extractApiMessage = (responseBody: unknown): string | undefined => {\n if (isNil(responseBody)) {\n return undefined;\n }\n if (isString(responseBody) || Array.isArray(responseBody)) {\n const collected = collectMessage(responseBody);\n return collected ? truncate(collected) : undefined;\n }\n if (!isObjectRecord(responseBody)) {\n return truncate(String(responseBody));\n }\n const candidates: unknown[] = [\n responseBody[\"message\"],\n responseBody[\"error_description\"],\n responseBody[\"errorDescription\"],\n responseBody[\"detail\"],\n responseBody[\"title\"],\n responseBody[\"error_message\"],\n responseBody[\"errorMessage\"],\n responseBody[\"errorMessages\"],\n responseBody[\"errors\"],\n responseBody[\"error\"],\n responseBody[\"faultstring\"],\n responseBody[\"fault\"],\n responseBody[\"reason\"],\n responseBody[\"description\"],\n ];\n for (const candidate of candidates) {\n const collected = collectMessage(candidate);\n if (collected) {\n return truncate(collected);\n }\n }\n return undefined;\n};\n\nconst toHttpStatus = (value: unknown): number | undefined => {\n return typeof value === \"number\" &&\n value >= HTTP_STATUS_MIN &&\n value <= HTTP_STATUS_MAX\n ? value\n : undefined;\n};\n\nconst extractResponseHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const response = error[\"response\"];\n if (!isObjectRecord(response)) {\n return null;\n }\n const statusValue = response[\"status\"];\n const status = typeof statusValue === \"number\" ? statusValue : undefined;\n const responseBody = response[\"body\"];\n const headersValue = response[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n const requestRaw = error[\"request\"];\n const request = isObjectRecord(requestRaw) ? requestRaw : undefined;\n const requestBody = request?.[\"body\"];\n const requestUrl =\n request === undefined ? undefined : readString(request, \"url\");\n const requestMethod =\n request === undefined ? undefined : readString(request, \"method\");\n\n if (isNil(status) && isNil(responseBody) && isNil(requestBody)) {\n return null;\n }\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n requestBody,\n requestUrl,\n requestMethod,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractClientHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const status = toHttpStatus(error[\"status\"]);\n if (isNil(status)) {\n return null;\n }\n const responseBody = error[\"error\"] ?? error[\"body\"];\n const headersValue = error[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n return extractResponseHttpDetails(error) ?? extractClientHttpDetails(error);\n};\n\nconst rebuildSerializable = ({\n value,\n depth,\n seen,\n}: TraversalParams): unknown => {\n if (\n isNil(value) ||\n isString(value) ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value) || isObjectRecord(value)) {\n if (seen.has(value)) {\n return CIRCULAR_PLACEHOLDER;\n }\n if (depth >= MAX_SERIALIZED_DEPTH) {\n return TOO_DEEP_PLACEHOLDER;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((entry) =>\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n );\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n ]),\n );\n }\n return String(value);\n};\n\nconst toSerializable = (value: unknown): unknown => {\n if (isNil(value)) {\n return value;\n }\n const { error } = tryCatchSync(() => JSON.stringify(value));\n if (isNil(error)) {\n return value;\n }\n const rebuilt = tryCatchSync(() =>\n rebuildSerializable({ value, depth: 0, seen: new WeakSet() }),\n );\n return isNil(rebuilt.error) ? rebuilt.data : UNSERIALIZABLE_PLACEHOLDER;\n};\n\nconst toSerializableHttpDetails = (\n httpDetails: HttpDetails | null,\n): HttpDetails | null => {\n if (isNil(httpDetails)) {\n return null;\n }\n const { responseBody, requestBody, responseHeaders } = httpDetails;\n return {\n ...httpDetails,\n responseBody: toSerializable(responseBody),\n requestBody: toSerializable(requestBody),\n responseHeaders: isNil(responseHeaders)\n ? undefined\n : Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n toSerializable(value),\n ]),\n ),\n };\n};\n\nconst readErrorName = (error: Record<string, unknown>): string | undefined => {\n const name = readString(error, \"name\");\n if (!isNil(name) && name.length > 0 && name !== \"Error\") {\n return name;\n }\n const ctor = error[\"constructor\"];\n if (\n typeof ctor === \"function\" &&\n isString(ctor.name) &&\n ctor.name.length > 0 &&\n ctor.name !== \"Object\" &&\n ctor.name !== \"Error\"\n ) {\n return ctor.name;\n }\n return undefined;\n};\n\nconst readErrorMessage = (error: Record<string, unknown>): string => {\n const messageString = readString(error, \"message\");\n if (!isNil(messageString)) {\n return messageString;\n }\n const stringified = String(error);\n if (stringified.length > 0 && stringified !== \"[object Object]\") {\n return stringified;\n }\n return \"Unknown error\";\n};\n\nconst pickPlainMessage = ({\n httpDetails,\n rawMessage,\n}: {\n httpDetails: HttpDetails | null;\n rawMessage: string;\n}): string => {\n if (httpDetails?.apiMessage) {\n return httpDetails.apiMessage;\n }\n const cleaned = stripStack(rawMessage);\n if (cleaned.length > 0) {\n return truncate(cleaned);\n }\n return \"Unknown error\";\n};\n\nconst isFriendlyPieceError = (value: unknown): value is FriendlyPieceError => {\n if (!isObjectRecord(value)) {\n return false;\n }\n return (\n value[\"__apErrorVersion\"] === FRIENDLY_PIECE_ERROR_VERSION &&\n typeof value[\"message\"] === \"string\"\n );\n};\n\nexport const formatPieceError = (\n error: unknown,\n options?: FormatPieceErrorOptions,\n): FriendlyPieceError => {\n const raw = options?.raw;\n const withRaw = (base: FriendlyPieceError): FriendlyPieceError => {\n if (isNil(raw) || raw.length === 0 || !isNil(base.raw)) {\n return base;\n }\n return { ...base, raw: truncateRaw(raw) };\n };\n\n if (isNil(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: \"Unknown error\",\n });\n }\n\n if (isString(error)) {\n const cleaned = stripStack(error);\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: cleaned.length > 0 ? cleaned : \"Unknown error\",\n });\n }\n\n if (!isObjectRecord(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: truncate(String(error)),\n });\n }\n\n if (isFriendlyPieceError(error)) {\n return withRaw(error);\n }\n\n const httpDetails = extractHttpDetails(error);\n const errorName = readErrorName(error);\n const rawMessage = readErrorMessage(error);\n const message = pickPlainMessage({ httpDetails, rawMessage });\n\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message,\n errorName,\n ...(toSerializableHttpDetails(httpDetails) ?? {}),\n });\n};\n\nexport const tryParseFriendlyPieceError = (\n value: unknown,\n): FriendlyPieceError | null => {\n if (isNil(value)) {\n return null;\n }\n const candidate = isString(value) ? safeJsonParse(value) : value;\n return isFriendlyPieceError(candidate) ? candidate : null;\n};\n\ntype TraversalParams = {\n value: unknown;\n depth: number;\n seen: WeakSet<object>;\n};\n\ntype HttpDetails = {\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n};\n\nexport type FriendlyPieceError = {\n __apErrorVersion: 1;\n message: string;\n errorName?: string;\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n raw?: string;\n};\n\ntype FormatPieceErrorOptions = {\n raw?: string;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/ssrf-ip-classifier.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport ipaddr from \"ipaddr.js\";\n\nfunction parseOrNull(ip: string): ipaddr.IPv4 | ipaddr.IPv6 | null {\n try {\n return ipaddr.parse(ip);\n } catch {\n return null;\n }\n}\n\nfunction isInAllowList({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (allowList.includes(ip)) return true;\n const addr = parseOrNull(ip);\n if (!addr) return false;\n return allowList.some(\n (entry) => entry.includes(\"/\") && matchesCidr({ addr, cidr: entry }),\n );\n}\n\nfunction matchesCidr({\n addr,\n cidr,\n}: {\n addr: ipaddr.IPv4 | ipaddr.IPv6;\n cidr: string;\n}): boolean {\n try {\n const range = ipaddr.parseCIDR(cidr);\n if (addr.kind() !== range[0].kind()) return false;\n return addr.match(range);\n } catch {\n return false;\n }\n}\n\nfunction isBlockedRange(addr: ipaddr.IPv4 | ipaddr.IPv6): boolean {\n if (addr.kind() === \"ipv6\") {\n const v6 = addr as ipaddr.IPv6;\n if (v6.isIPv4MappedAddress()) {\n return isBlockedRange(v6.toIPv4Address());\n }\n }\n return addr.range() !== \"unicast\";\n}\n\nfunction isBlockedIp({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (isInAllowList({ ip, allowList })) {\n return false;\n }\n const addr = parseOrNull(ip);\n if (!addr) {\n return true;\n }\n return isBlockedRange(addr);\n}\n\nexport const ssrfIpClassifier = {\n isBlockedIp,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/helper/dynamic-prop-keys.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../core-utils/index.js\";\nimport type { InputPropertyMap } from \"../../../framework/index.js\";\n\n// react-hook-form treats `.` and `[` as path separators and strips `]`, `\"` and `'`\n// (see its stringToPath util), so dynamic-property keys containing any of these break\n// the builder form. Escape them (JSON-Pointer style, `~` escapes the escape char) before\n// keys reach the UI, and reverse the mapping before the piece consumes the values.\nfunction escapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [escapeKey(key), property]),\n );\n}\n\nfunction unescapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [\n unescapeKey(key),\n property,\n ]),\n );\n}\n\nfunction unescapeInputKeys<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [unescapeKey(key), child]),\n ) as T;\n}\n\n// Escaped keys carry the ESCAPED_KEY_MARKER prefix so unescaping only ever touches keys\n// this module produced: a literal key like `field~1name` that never went through\n// escapeKey (schema-less tool calls, API-created flows) passes through unchanged.\n// The mapping stays bijective because unescaped keys can never contain `~` (any `~`\n// triggers escaping), so they can never start with the marker.\nfunction escapeKey(key: string): string {\n if (!RESERVED_CHARS.test(key)) {\n return key;\n }\n return (\n ESCAPED_KEY_MARKER +\n key.replace(/[~.[\\]\"']/g, (char) => ESCAPE_SEQUENCES[char])\n );\n}\n\nfunction unescapeKey(key: string): string {\n if (!key.startsWith(ESCAPED_KEY_MARKER)) {\n return key;\n }\n return key\n .slice(ESCAPED_KEY_MARKER.length)\n .replace(/~[0-5]/g, (sequence) => UNESCAPE_SEQUENCES[sequence]);\n}\n\nconst ESCAPED_KEY_MARKER = \"~ap~\";\n\nconst RESERVED_CHARS = /[~.[\\]\"']/;\n\nconst ESCAPE_SEQUENCES: Record<string, string> = {\n \"~\": \"~0\",\n \".\": \"~1\",\n \"[\": \"~2\",\n \"]\": \"~3\",\n '\"': \"~4\",\n \"'\": \"~5\",\n};\n\nconst UNESCAPE_SEQUENCES: Record<string, string> = Object.fromEntries(\n Object.entries(ESCAPE_SEQUENCES).map(([char, sequence]) => [sequence, char]),\n);\n\nexport const dynamicPropKeys = {\n escapePropsKeys,\n unescapePropsKeys,\n unescapeInputKeys,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/array-zipper.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nfunction getLongestArrayLengthInObject(props: Record<string, unknown>): number {\n return Math.max(\n ...Object.values(props).map((value) =>\n Array.isArray(value) ? value.length : 1,\n ),\n );\n}\n\nfunction constructResultForIndex(\n props: Record<string, unknown>,\n index: number,\n): Record<string, unknown> {\n return Object.entries(props).reduce(\n (result, [key, value]) => {\n result[key] = Array.isArray(value) ? value[index] : value;\n return result;\n },\n {} as Record<string, unknown>,\n );\n}\n\nexport const arrayZipperProcessor: ProcessorFn = (_property, value) => {\n if (Array.isArray(value) || !isObject(value)) {\n return value;\n }\n\n return Array.from(\n { length: getLongestArrayLengthInObject(value) },\n (_, index) => constructResultForIndex(value, index),\n );\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/checkbox.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const checkboxProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return typeof parsed === \"boolean\" ? parsed : value;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/date-time.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport dayjs from \"dayjs\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const dateTimeProcessor: ProcessorFn = (_property, value) => {\n dayjs.extend(utc);\n dayjs.extend(timezone);\n const dateTimeString = value;\n try {\n if (!dateTimeString) throw Error(\"Undefined input\");\n return dayjs.tz(dateTimeString, \"UTC\").toISOString();\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/file.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isBase64, isNil, isString } from \"../../../../core-utils/index.js\";\nimport type { ApStreamingFile } from \"../../../../framework/index.js\";\nimport { ApFile, PropertyType } from \"../../../../framework/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const fileProcessor: ProcessorFn = async (property, urlOrBase64) => {\n if (isNil(urlOrBase64) || !isString(urlOrBase64)) {\n return null;\n }\n const streaming =\n property.type === PropertyType.FILE && property.streaming === true;\n try {\n if (streaming) {\n return await handleStreamingFile(urlOrBase64);\n }\n const file = handleBase64File(urlOrBase64);\n if (!isNil(file)) {\n return file;\n }\n return await handleUrlFile(urlOrBase64);\n } catch (e) {\n console.error(e);\n return null;\n }\n};\n\nfunction parseBase64File(\n propertyValue: string,\n): { extension: string; buffer: Buffer } | null {\n if (!isBase64(propertyValue, { allowMime: true })) {\n return null;\n }\n const matches = propertyValue.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); // example match: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\n if (!matches || matches?.length !== 3) {\n return null;\n }\n return {\n extension: mimeExtension(matches[1]) || \"bin\",\n buffer: Buffer.from(matches[2], \"base64\"),\n };\n}\n\nfunction handleBase64File(propertyValue: string): ApFile | null {\n const parsed = parseBase64File(propertyValue);\n if (isNil(parsed)) {\n return null;\n }\n return new ApFile(\n `unknown.${parsed.extension}`,\n parsed.buffer,\n parsed.extension,\n );\n}\n\nasync function handleUrlFile(path: string): Promise<ApFile | null> {\n const fileResponse = await fetch(path);\n // A 4xx/5xx body is the server's error page, not the file. handleStreamingFile\n // already refuses one.\n if (!fileResponse.ok) {\n return null;\n }\n\n const filename =\n getFileName(\n path,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n\n return new ApFile(\n filename,\n Buffer.from(await fileResponse.arrayBuffer()),\n extension,\n );\n}\n\nasync function handleStreamingFile(\n propertyValue: string,\n): Promise<ApStreamingFile | null> {\n const parsed = parseBase64File(propertyValue);\n if (!isNil(parsed)) {\n return {\n filename: `unknown.${parsed.extension}`,\n extension: parsed.extension,\n size: parsed.buffer.length,\n body: Readable.from(parsed.buffer),\n };\n }\n\n const fileResponse = await fetch(propertyValue);\n if (!fileResponse.ok || isNil(fileResponse.body)) {\n await fileResponse.body?.cancel();\n return null;\n }\n const filename =\n getFileName(\n propertyValue,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n const contentEncoding = fileResponse.headers.get(\"content-encoding\");\n const contentLength = Number(fileResponse.headers.get(\"content-length\"));\n // undici transparently decompresses gzip/br/deflate but leaves the compressed\n // Content-Length in place, so it would understate the streamed byte count and\n // truncate the destination. Only trust the size when the body is not encoded.\n const sizeIsTrustworthy =\n (isNil(contentEncoding) || contentEncoding.toLowerCase() === \"identity\") &&\n Number.isInteger(contentLength) &&\n contentLength > 0;\n\n return {\n filename,\n extension,\n size: sizeIsTrustworthy ? contentLength : undefined,\n // @ts-expect-error -- undici streams a Node web ReadableStream body; the DOM fetch types omit the fromWeb overload\n body: Readable.fromWeb(fileResponse.body),\n };\n}\n\nfunction extensionFromFilename(filename: string): string | undefined {\n const parts = filename.split(\".\");\n const last = parts.length > 1 ? parts.pop() : undefined;\n return last ? last : undefined;\n}\n\nfunction getFileName(\n path: string,\n disposition: string | null,\n mimeType: string | undefined,\n): string | null {\n const url = new URL(path);\n if (isNil(disposition)) {\n const fileNameFromUrl =\n url.pathname.includes(\"/\") && url.pathname.split(\"/\").pop()?.includes(\".\")\n ? url.pathname.split(\"/\").pop()\n : null;\n if (!isNil(fileNameFromUrl)) {\n return fileNameFromUrl;\n }\n const resolvedExtension = mimeType ? mimeExtension(mimeType) : null;\n return `unknown.${resolvedExtension ?? \"bin\"}`;\n }\n const utf8FilenameRegex = /filename\\*=UTF-8''([\\w%\\-.]+)(?:; ?|$)/i;\n if (utf8FilenameRegex.test(disposition)) {\n const result = utf8FilenameRegex.exec(disposition);\n if (result && result.length > 1) {\n return decodeURIComponent(result[1]);\n }\n }\n // prevent ReDos attacks by anchoring the ascii regex to string start and\n // slicing off everything before 'filename='\n const filenameStart = disposition.toLowerCase().indexOf(\"filename=\");\n const asciiFilenameRegex = /^filename=([\"']?)(.*?[^\\\\])\\1(?:; ?|$)/i;\n\n if (filenameStart >= 0) {\n const partialDisposition = disposition.slice(filenameStart);\n const matches = asciiFilenameRegex.exec(partialDisposition);\n if (matches != null && matches[2]) {\n return matches[2];\n }\n }\n return null;\n}\n\nfunction mimeExtension(mimeType: string): string | null {\n const normalized = mimeType.split(\";\")[0].trim().toLowerCase();\n return MIME_EXTENSIONS[normalized] ?? null;\n}\n\nconst MIME_EXTENSIONS: Record<string, string> = {\n \"application/json\": \"json\",\n \"application/pdf\": \"pdf\",\n \"application/xml\": \"xml\",\n \"application/zip\": \"zip\",\n \"application/gzip\": \"gz\",\n \"application/x-7z-compressed\": \"7z\",\n \"application/x-tar\": \"tar\",\n \"application/octet-stream\": \"bin\",\n \"application/msword\": \"doc\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n \"docx\",\n \"application/vnd.ms-excel\": \"xls\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": \"xlsx\",\n \"application/vnd.ms-powerpoint\": \"ppt\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\":\n \"pptx\",\n \"application/rtf\": \"rtf\",\n \"application/javascript\": \"js\",\n \"application/x-javascript\": \"js\",\n \"application/x-yaml\": \"yaml\",\n \"application/yaml\": \"yaml\",\n \"application/x-httpd-php\": \"php\",\n \"application/x-sh\": \"sh\",\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/jpg\": \"jpg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n \"image/svg+xml\": \"svg\",\n \"image/bmp\": \"bmp\",\n \"image/tiff\": \"tiff\",\n \"image/x-icon\": \"ico\",\n \"image/vnd.microsoft.icon\": \"ico\",\n \"image/heic\": \"heic\",\n \"image/heif\": \"heif\",\n \"image/avif\": \"avif\",\n \"text/plain\": \"txt\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/csv\": \"csv\",\n \"text/javascript\": \"js\",\n \"text/markdown\": \"md\",\n \"text/xml\": \"xml\",\n \"text/tab-separated-values\": \"tsv\",\n \"text/yaml\": \"yaml\",\n \"audio/mpeg\": \"mp3\",\n \"audio/mp3\": \"mp3\",\n \"audio/mp4\": \"m4a\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/webm\": \"weba\",\n \"audio/flac\": \"flac\",\n \"audio/aac\": \"aac\",\n \"video/mp4\": \"mp4\",\n \"video/mpeg\": \"mpeg\",\n \"video/webm\": \"webm\",\n \"video/quicktime\": \"mov\",\n \"video/x-msvideo\": \"avi\",\n \"video/ogg\": \"ogv\",\n \"font/woff\": \"woff\",\n \"font/woff2\": \"woff2\",\n \"font/ttf\": \"ttf\",\n \"font/otf\": \"otf\",\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/json.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const jsonProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n try {\n if (typeof value === \"object\") {\n return value;\n }\n return JSON.parse(value);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/multi-select.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const multiSelectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || Array.isArray(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return Array.isArray(parsed) ? parsed : [value];\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/number.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const numberProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (value === \"\") {\n return undefined;\n }\n return Number(value);\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/object.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const objectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch (e) {\n return undefined;\n }\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n return value;\n }\n return undefined;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/text.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const textProcessor: ProcessorFn = (property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n\n const result = value.toString();\n if (result.length === 0 && !property.required) {\n return undefined;\n }\n return result;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/index.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { PropertyType } from \"../../../../framework/index.js\";\nimport { checkboxProcessor } from \"./checkbox.js\";\nimport { dateTimeProcessor } from \"./date-time.js\";\nimport { fileProcessor } from \"./file.js\";\nimport { jsonProcessor } from \"./json.js\";\nimport { multiSelectProcessor } from \"./multi-select.js\";\nimport { numberProcessor } from \"./number.js\";\nimport { objectProcessor } from \"./object.js\";\nimport { textProcessor } from \"./text.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const processors: Partial<Record<PropertyType, ProcessorFn>> = {\n JSON: jsonProcessor,\n OBJECT: objectProcessor,\n NUMBER: numberProcessor,\n LONG_TEXT: textProcessor,\n SHORT_TEXT: textProcessor,\n SECRET_TEXT: textProcessor,\n DATE_TIME: dateTimeProcessor,\n FILE: fileProcessor,\n MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n STATIC_MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n CHECKBOX: checkboxProcessor,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/props-processor.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isNil, isObject } from \"../../../core-utils/index.js\";\nimport type {\n InputPropertyMap,\n PieceAuthProperty,\n PieceProperty,\n PiecePropertyMap,\n StaticPropsValue,\n} from \"../../../framework/index.js\";\nimport {\n DateRangeValue,\n getAuthPropertyForValue,\n PropertyType,\n} from \"../../../framework/index.js\";\nimport { dynamicPropKeys } from \"../helper/dynamic-prop-keys.js\";\nimport { processors } from \"./processors/index.js\";\nimport { arrayZipperProcessor } from \"./processors/array-zipper.js\";\nimport type { AppConnectionValue } from \"../../../core-piece-types/index.js\";\nimport { AUTHENTICATION_PROPERTY_NAME } from \"../../../core-piece-types/index.js\";\nimport type { PropertySettings } from \"../../../../src/host/shared-shim.js\";\n\ntype PropsValidationError = {\n [key: string]: string[] | PropsValidationError | PropsValidationError[];\n};\n\nexport const propsProcessor = {\n applyProcessorsAndValidators: async (\n resolvedInput: StaticPropsValue<PiecePropertyMap>,\n props: InputPropertyMap,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n requireAuth: boolean,\n propertySettings: Record<string, PropertySettings>,\n ): Promise<{\n processedInput: StaticPropsValue<PiecePropertyMap>;\n errors: PropsValidationError;\n }> => {\n let dynamaicPropertiesSchema: Record<string, InputPropertyMap> | undefined =\n undefined;\n if (Object.keys(propertySettings).length > 0) {\n dynamaicPropertiesSchema = Object.fromEntries(\n Object.entries(propertySettings).map(([key, propertySetting]) => [\n key,\n propertySetting.schema,\n ]),\n );\n }\n const processedInput = { ...resolvedInput };\n const errors: PropsValidationError = {};\n const authValue: AppConnectionValue | undefined =\n resolvedInput[AUTHENTICATION_PROPERTY_NAME];\n if (authValue && requireAuth) {\n const authPropsToProcess = getAuthPropsToProcess(authValue, auth);\n if (authPropsToProcess) {\n const { processedInput: authProcessedInput, errors: authErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n resolvedInput[AUTHENTICATION_PROPERTY_NAME],\n authPropsToProcess,\n undefined,\n false,\n {},\n );\n processedInput[AUTHENTICATION_PROPERTY_NAME] = authProcessedInput;\n if (Object.keys(authErrors).length > 0) {\n errors[AUTHENTICATION_PROPERTY_NAME] = authErrors;\n }\n }\n }\n for (const [key, value] of Object.entries(resolvedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n if (property.type === PropertyType.DYNAMIC) {\n const valueWithOriginalKeys = dynamicPropKeys.unescapeInputKeys(value);\n processedInput[key] = valueWithOriginalKeys;\n if (!isNil(dynamaicPropertiesSchema?.[key])) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n valueWithOriginalKeys,\n dynamicPropKeys.unescapePropsKeys(dynamaicPropertiesSchema[key]),\n undefined,\n false,\n {},\n );\n processedInput[key] = itemProcessedInput;\n if (Object.keys(itemErrors).length > 0) {\n errors[key] = itemErrors;\n }\n }\n }\n if (property.type === PropertyType.ARRAY && property.properties) {\n const arrayOfObjects = arrayZipperProcessor(property, value) ?? [];\n const processedArray = [];\n const processedErrors = [];\n for (const item of arrayOfObjects) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n item,\n property.properties,\n undefined,\n false,\n {},\n );\n processedArray.push(itemProcessedInput);\n processedErrors.push(itemErrors);\n }\n processedInput[key] = processedArray;\n const isThereErrors = processedErrors.some(\n (error) => Object.keys(error).length > 0,\n );\n if (isThereErrors) {\n errors[key] = {\n properties: processedErrors,\n };\n }\n }\n if (!property.required && isNil(processedInput[key])) {\n processedInput[key] = undefined;\n }\n const processor = processors[property.type];\n if (processor) {\n processedInput[key] = await processor(property, processedInput[key]);\n }\n\n const shouldValidate =\n key !== AUTHENTICATION_PROPERTY_NAME &&\n property.type !== PropertyType.MARKDOWN;\n if (!shouldValidate) {\n continue;\n }\n }\n\n for (const [key, value] of Object.entries(processedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n\n const validationErrors = validateProperty(\n property,\n value,\n resolvedInput[key],\n );\n if (validationErrors.length > 0) {\n errors[key] = validationErrors;\n }\n }\n\n // Streaming file inputs open a live connection when resolved. If any property\n // fails validation the action never runs, so drain those bodies here to avoid\n // leaking connections until GC.\n if (Object.keys(errors).length > 0) {\n destroyOpenStreams(processedInput);\n }\n\n return { processedInput, errors };\n },\n};\n\nfunction destroyOpenStreams(value: unknown): void {\n if (isNil(value) || typeof value !== \"object\" || Buffer.isBuffer(value)) {\n return;\n }\n if (value instanceof Readable) {\n value.destroy();\n return;\n }\n for (const child of Object.values(value)) {\n destroyOpenStreams(child);\n }\n}\n\nconst validateProperty = (\n property: PieceProperty,\n value: unknown,\n originalValue: unknown,\n): string[] => {\n if (property.type === PropertyType.JSON) {\n if (!property.required && originalValue === \"\") {\n return [];\n }\n if (!isNil(originalValue) && isNil(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n if (!property.required && isNil(value)) {\n return [];\n }\n if (!isObject(value) && !Array.isArray(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n return [];\n }\n\n if (!property.required && isNil(value)) {\n return [];\n }\n\n switch (property.type) {\n case PropertyType.SHORT_TEXT:\n case PropertyType.LONG_TEXT:\n case PropertyType.RICH_TEXT:\n return typeof value === \"string\"\n ? []\n : [`Expected string, received: ${originalValue}`];\n case PropertyType.NUMBER:\n return typeof value === \"number\" && !Number.isNaN(value)\n ? []\n : [`Expected number, received: ${originalValue}`];\n case PropertyType.CHECKBOX:\n return typeof value === \"boolean\"\n ? []\n : [`Expected boolean, received: ${originalValue}`];\n case PropertyType.DATE_TIME:\n return typeof value === \"string\"\n ? []\n : [\n `Invalid datetime format. Expected ISO format (e.g. 2024-03-14T12:00:00.000Z), received: ${originalValue}`,\n ];\n case PropertyType.DATE_RANGE:\n return DateRangeValue.safeParse(value).success\n ? []\n : [`Expected date range, received: ${originalValue}`];\n case PropertyType.ARRAY:\n case PropertyType.MULTI_SELECT_DROPDOWN:\n case PropertyType.STATIC_MULTI_SELECT_DROPDOWN:\n return Array.isArray(value)\n ? []\n : [`Expected array, received: ${originalValue}`];\n case PropertyType.OBJECT:\n return isObject(value)\n ? []\n : [`Expected object, received: ${originalValue}`];\n case PropertyType.FILE:\n return isObject(value)\n ? []\n : [\n `Expected file url or base64 with mimeType, received: ${originalValue}`,\n ];\n default:\n return [];\n }\n};\n\nfunction getAuthPropsToProcess(\n authValue: AppConnectionValue,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n): null {\n if (isNil(auth)) {\n return null;\n }\n const usedAuthProperty = getAuthPropertyForValue({\n authValueType: authValue.type,\n pieceAuth: auth,\n });\n const doesAuthHaveProps =\n usedAuthProperty?.type === PropertyType.CUSTOM_AUTH ||\n usedAuthProperty?.type === PropertyType.OAUTH2 ||\n usedAuthProperty?.type === PropertyType.OIDC;\n if (doesAuthHaveProps && !isNil(usedAuthProperty?.props)) {\n return usedAuthProperty.props;\n }\n return null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"host.js","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/props-processor.ts"],"sourcesContent":["// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/friendly-piece-error.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { tryCatchSync } from \"./try-catch.js\";\nimport { isNil, isString } from \"./utils.js\";\n\nconst FRIENDLY_PIECE_ERROR_VERSION = 1;\n\nconst STACK_LINE_REGEX = /\\n\\s*at\\s+.+$/gm;\nconst HTTP_ERROR_MESSAGE_MAX_LENGTH = 2000;\nconst RAW_ERROR_MAX_LENGTH = 16000;\nconst HTTP_STATUS_MIN = 100;\nconst HTTP_STATUS_MAX = 599;\nconst MAX_MESSAGE_DEPTH = 12;\nconst MAX_SERIALIZED_DEPTH = 64;\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst TOO_DEEP_PLACEHOLDER = \"[Too deep]\";\nconst UNSERIALIZABLE_PLACEHOLDER = \"[Unserializable]\";\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> => {\n return !isNil(value) && typeof value === \"object\" && !Array.isArray(value);\n};\n\nconst safeJsonParse = (value: string): unknown => {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n};\n\nconst stripStack = (value: string): string => {\n return value.replace(STACK_LINE_REGEX, \"\").trim();\n};\n\nconst truncate = (value: string): string => {\n if (value.length <= HTTP_ERROR_MESSAGE_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, HTTP_ERROR_MESSAGE_MAX_LENGTH)}…`;\n};\n\nconst truncateRaw = (value: string): string => {\n if (value.length <= RAW_ERROR_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, RAW_ERROR_MAX_LENGTH)}\\n…[truncated]`;\n};\n\nconst HTML_DOC_REGEX = /^\\s*(<!doctype\\s+html|<html\\b|<\\?xml)/i;\nconst HTML_TAG_LIKE_REGEX =\n /<\\s*(html|body|head|title|meta|p|div|span|h[1-6]|table|script|style)\\b/i;\n\nconst isLikelyMarkupBody = (value: string): boolean => {\n if (HTML_DOC_REGEX.test(value)) {\n return true;\n }\n if (!value.includes(\"<\") || !value.includes(\">\")) {\n return false;\n }\n return HTML_TAG_LIKE_REGEX.test(value);\n};\n\nconst decodeHtmlEntities = (value: string): string => {\n return value\n .replace(/ /g, \" \")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\");\n};\n\nconst stripMarkup = (value: string): string => {\n const titleMatch = value.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i);\n const title = titleMatch\n ? decodeHtmlEntities(titleMatch[1]).replace(/\\s+/g, \" \").trim()\n : \"\";\n\n const withoutNoise = value\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<head[\\s\\S]*?<\\/head>/gi, \" \");\n const textOnly = decodeHtmlEntities(withoutNoise.replace(/<[^>]+>/g, \" \"))\n .replace(/\\s+/g, \" \")\n .trim();\n\n if (textOnly.length > 0 && title.length > 0 && !textOnly.startsWith(title)) {\n return `${title} — ${textOnly}`;\n }\n return textOnly.length > 0 ? textOnly : title;\n};\n\nconst readString = (\n record: Record<string, unknown>,\n key: string,\n): string | undefined => {\n const value = record[key];\n return isString(value) ? value : undefined;\n};\n\nconst collectMessageFrom = ({\n value,\n depth,\n seen,\n}: TraversalParams): string | undefined => {\n if (isNil(value) || depth > MAX_MESSAGE_DEPTH) {\n return undefined;\n }\n if (isString(value)) {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n if (isLikelyMarkupBody(trimmed)) {\n const stripped = stripMarkup(trimmed);\n return stripped.length > 0 ? stripped : undefined;\n }\n return trimmed;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const parts = value\n .map((entry) =>\n collectMessageFrom({ value: entry, depth: depth + 1, seen }),\n )\n .filter((entry): entry is string => isString(entry) && entry.length > 0);\n return parts.length > 0 ? parts.join(\"; \") : undefined;\n }\n if (isObjectRecord(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const nested =\n value[\"message\"] ??\n value[\"detail\"] ??\n value[\"description\"] ??\n value[\"reason\"] ??\n value[\"error\"];\n return collectMessageFrom({ value: nested, depth: depth + 1, seen });\n }\n return undefined;\n};\n\nconst collectMessage = (value: unknown): string | undefined => {\n return collectMessageFrom({ value, depth: 0, seen: new WeakSet() });\n};\n\nconst extractApiMessage = (responseBody: unknown): string | undefined => {\n if (isNil(responseBody)) {\n return undefined;\n }\n if (isString(responseBody) || Array.isArray(responseBody)) {\n const collected = collectMessage(responseBody);\n return collected ? truncate(collected) : undefined;\n }\n if (!isObjectRecord(responseBody)) {\n return truncate(String(responseBody));\n }\n const candidates: unknown[] = [\n responseBody[\"message\"],\n responseBody[\"error_description\"],\n responseBody[\"errorDescription\"],\n responseBody[\"detail\"],\n responseBody[\"title\"],\n responseBody[\"error_message\"],\n responseBody[\"errorMessage\"],\n responseBody[\"errorMessages\"],\n responseBody[\"errors\"],\n responseBody[\"error\"],\n responseBody[\"faultstring\"],\n responseBody[\"fault\"],\n responseBody[\"reason\"],\n responseBody[\"description\"],\n ];\n for (const candidate of candidates) {\n const collected = collectMessage(candidate);\n if (collected) {\n return truncate(collected);\n }\n }\n return undefined;\n};\n\nconst toHttpStatus = (value: unknown): number | undefined => {\n return typeof value === \"number\" &&\n value >= HTTP_STATUS_MIN &&\n value <= HTTP_STATUS_MAX\n ? value\n : undefined;\n};\n\nconst extractResponseHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const response = error[\"response\"];\n if (!isObjectRecord(response)) {\n return null;\n }\n const statusValue = response[\"status\"];\n const status = typeof statusValue === \"number\" ? statusValue : undefined;\n const responseBody = response[\"body\"];\n const headersValue = response[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n const requestRaw = error[\"request\"];\n const request = isObjectRecord(requestRaw) ? requestRaw : undefined;\n const requestBody = request?.[\"body\"];\n const requestUrl =\n request === undefined ? undefined : readString(request, \"url\");\n const requestMethod =\n request === undefined ? undefined : readString(request, \"method\");\n\n if (isNil(status) && isNil(responseBody) && isNil(requestBody)) {\n return null;\n }\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n requestBody,\n requestUrl,\n requestMethod,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractClientHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const status = toHttpStatus(error[\"status\"]);\n if (isNil(status)) {\n return null;\n }\n const responseBody = error[\"error\"] ?? error[\"body\"];\n const headersValue = error[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n return extractResponseHttpDetails(error) ?? extractClientHttpDetails(error);\n};\n\nconst rebuildSerializable = ({\n value,\n depth,\n seen,\n}: TraversalParams): unknown => {\n if (\n isNil(value) ||\n isString(value) ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value) || isObjectRecord(value)) {\n if (seen.has(value)) {\n return CIRCULAR_PLACEHOLDER;\n }\n if (depth >= MAX_SERIALIZED_DEPTH) {\n return TOO_DEEP_PLACEHOLDER;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((entry) =>\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n );\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n ]),\n );\n }\n return String(value);\n};\n\nconst toSerializable = (value: unknown): unknown => {\n if (isNil(value)) {\n return value;\n }\n const { error } = tryCatchSync(() => JSON.stringify(value));\n if (isNil(error)) {\n return value;\n }\n const rebuilt = tryCatchSync(() =>\n rebuildSerializable({ value, depth: 0, seen: new WeakSet() }),\n );\n return isNil(rebuilt.error) ? rebuilt.data : UNSERIALIZABLE_PLACEHOLDER;\n};\n\nconst toSerializableHttpDetails = (\n httpDetails: HttpDetails | null,\n): HttpDetails | null => {\n if (isNil(httpDetails)) {\n return null;\n }\n const { responseBody, requestBody, responseHeaders } = httpDetails;\n return {\n ...httpDetails,\n responseBody: toSerializable(responseBody),\n requestBody: toSerializable(requestBody),\n responseHeaders: isNil(responseHeaders)\n ? undefined\n : Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n toSerializable(value),\n ]),\n ),\n };\n};\n\nconst readErrorName = (error: Record<string, unknown>): string | undefined => {\n const name = readString(error, \"name\");\n if (!isNil(name) && name.length > 0 && name !== \"Error\") {\n return name;\n }\n const ctor = error[\"constructor\"];\n if (\n typeof ctor === \"function\" &&\n isString(ctor.name) &&\n ctor.name.length > 0 &&\n ctor.name !== \"Object\" &&\n ctor.name !== \"Error\"\n ) {\n return ctor.name;\n }\n return undefined;\n};\n\nconst readErrorMessage = (error: Record<string, unknown>): string => {\n const messageString = readString(error, \"message\");\n if (!isNil(messageString)) {\n return messageString;\n }\n const stringified = String(error);\n if (stringified.length > 0 && stringified !== \"[object Object]\") {\n return stringified;\n }\n return \"Unknown error\";\n};\n\nconst pickPlainMessage = ({\n httpDetails,\n rawMessage,\n}: {\n httpDetails: HttpDetails | null;\n rawMessage: string;\n}): string => {\n if (httpDetails?.apiMessage) {\n return httpDetails.apiMessage;\n }\n const cleaned = stripStack(rawMessage);\n if (cleaned.length > 0) {\n return truncate(cleaned);\n }\n return \"Unknown error\";\n};\n\nconst isFriendlyPieceError = (value: unknown): value is FriendlyPieceError => {\n if (!isObjectRecord(value)) {\n return false;\n }\n return (\n value[\"__apErrorVersion\"] === FRIENDLY_PIECE_ERROR_VERSION &&\n typeof value[\"message\"] === \"string\"\n );\n};\n\nexport const formatPieceError = (\n error: unknown,\n options?: FormatPieceErrorOptions,\n): FriendlyPieceError => {\n const raw = options?.raw;\n const withRaw = (base: FriendlyPieceError): FriendlyPieceError => {\n if (isNil(raw) || raw.length === 0 || !isNil(base.raw)) {\n return base;\n }\n return { ...base, raw: truncateRaw(raw) };\n };\n\n if (isNil(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: \"Unknown error\",\n });\n }\n\n if (isString(error)) {\n const cleaned = stripStack(error);\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: cleaned.length > 0 ? cleaned : \"Unknown error\",\n });\n }\n\n if (!isObjectRecord(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: truncate(String(error)),\n });\n }\n\n if (isFriendlyPieceError(error)) {\n return withRaw(error);\n }\n\n const httpDetails = extractHttpDetails(error);\n const errorName = readErrorName(error);\n const rawMessage = readErrorMessage(error);\n const message = pickPlainMessage({ httpDetails, rawMessage });\n\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message,\n errorName,\n ...(toSerializableHttpDetails(httpDetails) ?? {}),\n });\n};\n\nexport const tryParseFriendlyPieceError = (\n value: unknown,\n): FriendlyPieceError | null => {\n if (isNil(value)) {\n return null;\n }\n const candidate = isString(value) ? safeJsonParse(value) : value;\n return isFriendlyPieceError(candidate) ? candidate : null;\n};\n\ntype TraversalParams = {\n value: unknown;\n depth: number;\n seen: WeakSet<object>;\n};\n\ntype HttpDetails = {\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n};\n\nexport type FriendlyPieceError = {\n __apErrorVersion: 1;\n message: string;\n errorName?: string;\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n raw?: string;\n};\n\ntype FormatPieceErrorOptions = {\n raw?: string;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/ssrf-ip-classifier.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport ipaddr from \"ipaddr.js\";\n\nfunction parseOrNull(ip: string): ipaddr.IPv4 | ipaddr.IPv6 | null {\n try {\n return ipaddr.parse(ip);\n } catch {\n return null;\n }\n}\n\nfunction isInAllowList({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (allowList.includes(ip)) return true;\n const addr = parseOrNull(ip);\n if (!addr) return false;\n return allowList.some(\n (entry) => entry.includes(\"/\") && matchesCidr({ addr, cidr: entry }),\n );\n}\n\nfunction matchesCidr({\n addr,\n cidr,\n}: {\n addr: ipaddr.IPv4 | ipaddr.IPv6;\n cidr: string;\n}): boolean {\n try {\n const range = ipaddr.parseCIDR(cidr);\n if (addr.kind() !== range[0].kind()) return false;\n return addr.match(range);\n } catch {\n return false;\n }\n}\n\nfunction isBlockedRange(addr: ipaddr.IPv4 | ipaddr.IPv6): boolean {\n if (addr.kind() === \"ipv6\") {\n const v6 = addr as ipaddr.IPv6;\n if (v6.isIPv4MappedAddress()) {\n return isBlockedRange(v6.toIPv4Address());\n }\n }\n return addr.range() !== \"unicast\";\n}\n\nfunction isBlockedIp({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (isInAllowList({ ip, allowList })) {\n return false;\n }\n const addr = parseOrNull(ip);\n if (!addr) {\n return true;\n }\n return isBlockedRange(addr);\n}\n\nexport const ssrfIpClassifier = {\n isBlockedIp,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/helper/dynamic-prop-keys.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../core-utils/index.js\";\nimport type { InputPropertyMap } from \"../../../framework/index.js\";\n\n// react-hook-form treats `.` and `[` as path separators and strips `]`, `\"` and `'`\n// (see its stringToPath util), so dynamic-property keys containing any of these break\n// the builder form. Escape them (JSON-Pointer style, `~` escapes the escape char) before\n// keys reach the UI, and reverse the mapping before the piece consumes the values.\nfunction escapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [escapeKey(key), property]),\n );\n}\n\nfunction unescapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [\n unescapeKey(key),\n property,\n ]),\n );\n}\n\nfunction unescapeInputKeys<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [unescapeKey(key), child]),\n ) as T;\n}\n\n// Escaped keys carry the ESCAPED_KEY_MARKER prefix so unescaping only ever touches keys\n// this module produced: a literal key like `field~1name` that never went through\n// escapeKey (schema-less tool calls, API-created flows) passes through unchanged.\n// The mapping stays bijective because unescaped keys can never contain `~` (any `~`\n// triggers escaping), so they can never start with the marker.\nfunction escapeKey(key: string): string {\n if (!RESERVED_CHARS.test(key)) {\n return key;\n }\n return (\n ESCAPED_KEY_MARKER +\n key.replace(/[~.[\\]\"']/g, (char) => ESCAPE_SEQUENCES[char])\n );\n}\n\nfunction unescapeKey(key: string): string {\n if (!key.startsWith(ESCAPED_KEY_MARKER)) {\n return key;\n }\n return key\n .slice(ESCAPED_KEY_MARKER.length)\n .replace(/~[0-5]/g, (sequence) => UNESCAPE_SEQUENCES[sequence]);\n}\n\nconst ESCAPED_KEY_MARKER = \"~ap~\";\n\nconst RESERVED_CHARS = /[~.[\\]\"']/;\n\nconst ESCAPE_SEQUENCES: Record<string, string> = {\n \"~\": \"~0\",\n \".\": \"~1\",\n \"[\": \"~2\",\n \"]\": \"~3\",\n '\"': \"~4\",\n \"'\": \"~5\",\n};\n\nconst UNESCAPE_SEQUENCES: Record<string, string> = Object.fromEntries(\n Object.entries(ESCAPE_SEQUENCES).map(([char, sequence]) => [sequence, char]),\n);\n\nexport const dynamicPropKeys = {\n escapePropsKeys,\n unescapePropsKeys,\n unescapeInputKeys,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/array-zipper.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nfunction getLongestArrayLengthInObject(props: Record<string, unknown>): number {\n return Math.max(\n ...Object.values(props).map((value) =>\n Array.isArray(value) ? value.length : 1,\n ),\n );\n}\n\nfunction constructResultForIndex(\n props: Record<string, unknown>,\n index: number,\n): Record<string, unknown> {\n return Object.entries(props).reduce(\n (result, [key, value]) => {\n result[key] = Array.isArray(value) ? value[index] : value;\n return result;\n },\n {} as Record<string, unknown>,\n );\n}\n\nexport const arrayZipperProcessor: ProcessorFn = (_property, value) => {\n if (Array.isArray(value) || !isObject(value)) {\n return value;\n }\n\n return Array.from(\n { length: getLongestArrayLengthInObject(value) },\n (_, index) => constructResultForIndex(value, index),\n );\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/checkbox.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const checkboxProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return typeof parsed === \"boolean\" ? parsed : value;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/date-time.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport dayjs from \"dayjs\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const dateTimeProcessor: ProcessorFn = (_property, value) => {\n dayjs.extend(utc);\n dayjs.extend(timezone);\n const dateTimeString = value;\n try {\n if (!dateTimeString) throw Error(\"Undefined input\");\n return dayjs.tz(dateTimeString, \"UTC\").toISOString();\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/file.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isBase64, isNil, isString } from \"../../../../core-utils/index.js\";\nimport type { ApStreamingFile } from \"../../../../framework/index.js\";\nimport { ApFile, PropertyType } from \"../../../../framework/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const fileProcessor: ProcessorFn = async (property, urlOrBase64) => {\n if (isNil(urlOrBase64) || !isString(urlOrBase64)) {\n return null;\n }\n const streaming =\n property.type === PropertyType.FILE && property.streaming === true;\n try {\n if (streaming) {\n return await handleStreamingFile(urlOrBase64);\n }\n const file = handleBase64File(urlOrBase64);\n if (!isNil(file)) {\n return file;\n }\n return await handleUrlFile(urlOrBase64);\n } catch (e) {\n console.error(e);\n return null;\n }\n};\n\nfunction parseBase64File(\n propertyValue: string,\n): { extension: string; buffer: Buffer } | null {\n if (!isBase64(propertyValue, { allowMime: true })) {\n return null;\n }\n const matches = propertyValue.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); // example match: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\n if (!matches || matches?.length !== 3) {\n return null;\n }\n return {\n extension: mimeExtension(matches[1]) || \"bin\",\n buffer: Buffer.from(matches[2], \"base64\"),\n };\n}\n\nfunction handleBase64File(propertyValue: string): ApFile | null {\n const parsed = parseBase64File(propertyValue);\n if (isNil(parsed)) {\n return null;\n }\n return new ApFile(\n `unknown.${parsed.extension}`,\n parsed.buffer,\n parsed.extension,\n );\n}\n\nasync function handleUrlFile(path: string): Promise<ApFile | null> {\n const fileResponse = await fetch(path);\n // A 4xx/5xx body is the server's error page, not the file. handleStreamingFile\n // already refuses one.\n if (!fileResponse.ok) {\n return null;\n }\n\n const filename =\n getFileName(\n path,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n\n return new ApFile(\n filename,\n Buffer.from(await fileResponse.arrayBuffer()),\n extension,\n );\n}\n\nasync function handleStreamingFile(\n propertyValue: string,\n): Promise<ApStreamingFile | null> {\n const parsed = parseBase64File(propertyValue);\n if (!isNil(parsed)) {\n return {\n filename: `unknown.${parsed.extension}`,\n extension: parsed.extension,\n size: parsed.buffer.length,\n body: Readable.from(parsed.buffer),\n };\n }\n\n const fileResponse = await fetch(propertyValue);\n if (!fileResponse.ok || isNil(fileResponse.body)) {\n await fileResponse.body?.cancel();\n return null;\n }\n const filename =\n getFileName(\n propertyValue,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n const contentEncoding = fileResponse.headers.get(\"content-encoding\");\n const contentLength = Number(fileResponse.headers.get(\"content-length\"));\n // undici transparently decompresses gzip/br/deflate but leaves the compressed\n // Content-Length in place, so it would understate the streamed byte count and\n // truncate the destination. Only trust the size when the body is not encoded.\n const sizeIsTrustworthy =\n (isNil(contentEncoding) || contentEncoding.toLowerCase() === \"identity\") &&\n Number.isInteger(contentLength) &&\n contentLength > 0;\n\n return {\n filename,\n extension,\n size: sizeIsTrustworthy ? contentLength : undefined,\n // @ts-expect-error -- undici streams a Node web ReadableStream body; the DOM fetch types omit the fromWeb overload\n body: Readable.fromWeb(fileResponse.body),\n };\n}\n\nfunction extensionFromFilename(filename: string): string | undefined {\n const parts = filename.split(\".\");\n const last = parts.length > 1 ? parts.pop() : undefined;\n return last ? last : undefined;\n}\n\nfunction getFileName(\n path: string,\n disposition: string | null,\n mimeType: string | undefined,\n): string | null {\n const url = new URL(path);\n if (isNil(disposition)) {\n const fileNameFromUrl =\n url.pathname.includes(\"/\") && url.pathname.split(\"/\").pop()?.includes(\".\")\n ? url.pathname.split(\"/\").pop()\n : null;\n if (!isNil(fileNameFromUrl)) {\n return fileNameFromUrl;\n }\n const resolvedExtension = mimeType ? mimeExtension(mimeType) : null;\n return `unknown.${resolvedExtension ?? \"bin\"}`;\n }\n const utf8FilenameRegex = /filename\\*=UTF-8''([\\w%\\-.]+)(?:; ?|$)/i;\n if (utf8FilenameRegex.test(disposition)) {\n const result = utf8FilenameRegex.exec(disposition);\n if (result && result.length > 1) {\n return decodeURIComponent(result[1]);\n }\n }\n // prevent ReDos attacks by anchoring the ascii regex to string start and\n // slicing off everything before 'filename='\n const filenameStart = disposition.toLowerCase().indexOf(\"filename=\");\n const asciiFilenameRegex = /^filename=([\"']?)(.*?[^\\\\])\\1(?:; ?|$)/i;\n\n if (filenameStart >= 0) {\n const partialDisposition = disposition.slice(filenameStart);\n const matches = asciiFilenameRegex.exec(partialDisposition);\n if (matches != null && matches[2]) {\n return matches[2];\n }\n }\n return null;\n}\n\nfunction mimeExtension(mimeType: string): string | null {\n const normalized = mimeType.split(\";\")[0].trim().toLowerCase();\n return MIME_EXTENSIONS[normalized] ?? null;\n}\n\nconst MIME_EXTENSIONS: Record<string, string> = {\n \"application/json\": \"json\",\n \"application/pdf\": \"pdf\",\n \"application/xml\": \"xml\",\n \"application/zip\": \"zip\",\n \"application/gzip\": \"gz\",\n \"application/x-7z-compressed\": \"7z\",\n \"application/x-tar\": \"tar\",\n \"application/octet-stream\": \"bin\",\n \"application/msword\": \"doc\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n \"docx\",\n \"application/vnd.ms-excel\": \"xls\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": \"xlsx\",\n \"application/vnd.ms-powerpoint\": \"ppt\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\":\n \"pptx\",\n \"application/rtf\": \"rtf\",\n \"application/javascript\": \"js\",\n \"application/x-javascript\": \"js\",\n \"application/x-yaml\": \"yaml\",\n \"application/yaml\": \"yaml\",\n \"application/x-httpd-php\": \"php\",\n \"application/x-sh\": \"sh\",\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/jpg\": \"jpg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n \"image/svg+xml\": \"svg\",\n \"image/bmp\": \"bmp\",\n \"image/tiff\": \"tiff\",\n \"image/x-icon\": \"ico\",\n \"image/vnd.microsoft.icon\": \"ico\",\n \"image/heic\": \"heic\",\n \"image/heif\": \"heif\",\n \"image/avif\": \"avif\",\n \"text/plain\": \"txt\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/csv\": \"csv\",\n \"text/javascript\": \"js\",\n \"text/markdown\": \"md\",\n \"text/xml\": \"xml\",\n \"text/tab-separated-values\": \"tsv\",\n \"text/yaml\": \"yaml\",\n \"audio/mpeg\": \"mp3\",\n \"audio/mp3\": \"mp3\",\n \"audio/mp4\": \"m4a\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/webm\": \"weba\",\n \"audio/flac\": \"flac\",\n \"audio/aac\": \"aac\",\n \"video/mp4\": \"mp4\",\n \"video/mpeg\": \"mpeg\",\n \"video/webm\": \"webm\",\n \"video/quicktime\": \"mov\",\n \"video/x-msvideo\": \"avi\",\n \"video/ogg\": \"ogv\",\n \"font/woff\": \"woff\",\n \"font/woff2\": \"woff2\",\n \"font/ttf\": \"ttf\",\n \"font/otf\": \"otf\",\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/json.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const jsonProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n try {\n if (typeof value === \"object\") {\n return value;\n }\n return JSON.parse(value);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/multi-select.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const multiSelectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || Array.isArray(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return Array.isArray(parsed) ? parsed : [value];\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/number.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const numberProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (value === \"\") {\n return undefined;\n }\n return Number(value);\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/object.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const objectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch (e) {\n return undefined;\n }\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n return value;\n }\n return undefined;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/text.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const textProcessor: ProcessorFn = (property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n\n const result = value.toString();\n if (result.length === 0 && !property.required) {\n return undefined;\n }\n return result;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/index.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { PropertyType } from \"../../../../framework/index.js\";\nimport { checkboxProcessor } from \"./checkbox.js\";\nimport { dateTimeProcessor } from \"./date-time.js\";\nimport { fileProcessor } from \"./file.js\";\nimport { jsonProcessor } from \"./json.js\";\nimport { multiSelectProcessor } from \"./multi-select.js\";\nimport { numberProcessor } from \"./number.js\";\nimport { objectProcessor } from \"./object.js\";\nimport { textProcessor } from \"./text.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const processors: Partial<Record<PropertyType, ProcessorFn>> = {\n JSON: jsonProcessor,\n OBJECT: objectProcessor,\n NUMBER: numberProcessor,\n LONG_TEXT: textProcessor,\n SHORT_TEXT: textProcessor,\n SECRET_TEXT: textProcessor,\n DATE_TIME: dateTimeProcessor,\n FILE: fileProcessor,\n MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n STATIC_MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n CHECKBOX: checkboxProcessor,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/props-processor.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isNil, isObject } from \"../../../core-utils/index.js\";\nimport type {\n InputPropertyMap,\n PieceAuthProperty,\n PieceProperty,\n PiecePropertyMap,\n StaticPropsValue,\n} from \"../../../framework/index.js\";\nimport {\n DateRangeValue,\n getAuthPropertyForValue,\n PropertyType,\n} from \"../../../framework/index.js\";\nimport { dynamicPropKeys } from \"../helper/dynamic-prop-keys.js\";\nimport { processors } from \"./processors/index.js\";\nimport { arrayZipperProcessor } from \"./processors/array-zipper.js\";\nimport type { AppConnectionValue } from \"../../../core-piece-types/index.js\";\nimport { AUTHENTICATION_PROPERTY_NAME } from \"../../../core-piece-types/index.js\";\nimport type { PropertySettings } from \"../../../../src/host/shared-shim.js\";\n\ntype PropsValidationError = {\n [key: string]: string[] | PropsValidationError | PropsValidationError[];\n};\n\nexport const propsProcessor = {\n applyProcessorsAndValidators: async (\n resolvedInput: StaticPropsValue<PiecePropertyMap>,\n props: InputPropertyMap,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n requireAuth: boolean,\n propertySettings: Record<string, PropertySettings>,\n ): Promise<{\n processedInput: StaticPropsValue<PiecePropertyMap>;\n errors: PropsValidationError;\n }> => {\n let dynamaicPropertiesSchema: Record<string, InputPropertyMap> | undefined =\n undefined;\n if (Object.keys(propertySettings).length > 0) {\n dynamaicPropertiesSchema = Object.fromEntries(\n Object.entries(propertySettings).map(([key, propertySetting]) => [\n key,\n propertySetting.schema,\n ]),\n );\n }\n const processedInput = { ...resolvedInput };\n const errors: PropsValidationError = {};\n const authValue: AppConnectionValue | undefined =\n resolvedInput[AUTHENTICATION_PROPERTY_NAME];\n if (authValue && requireAuth) {\n const authPropsToProcess = getAuthPropsToProcess(authValue, auth);\n if (authPropsToProcess) {\n const { processedInput: authProcessedInput, errors: authErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n resolvedInput[AUTHENTICATION_PROPERTY_NAME],\n authPropsToProcess,\n undefined,\n false,\n {},\n );\n processedInput[AUTHENTICATION_PROPERTY_NAME] = authProcessedInput;\n if (Object.keys(authErrors).length > 0) {\n errors[AUTHENTICATION_PROPERTY_NAME] = authErrors;\n }\n }\n }\n for (const [key, value] of Object.entries(resolvedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n if (property.type === PropertyType.DYNAMIC) {\n const valueWithOriginalKeys = dynamicPropKeys.unescapeInputKeys(value);\n processedInput[key] = valueWithOriginalKeys;\n if (!isNil(dynamaicPropertiesSchema?.[key])) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n valueWithOriginalKeys,\n dynamicPropKeys.unescapePropsKeys(dynamaicPropertiesSchema[key]),\n undefined,\n false,\n {},\n );\n processedInput[key] = itemProcessedInput;\n if (Object.keys(itemErrors).length > 0) {\n errors[key] = itemErrors;\n }\n }\n }\n if (property.type === PropertyType.ARRAY && property.properties) {\n const arrayOfObjects = arrayZipperProcessor(property, value) ?? [];\n const processedArray = [];\n const processedErrors = [];\n for (const item of arrayOfObjects) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n item,\n property.properties,\n undefined,\n false,\n {},\n );\n processedArray.push(itemProcessedInput);\n processedErrors.push(itemErrors);\n }\n processedInput[key] = processedArray;\n const isThereErrors = processedErrors.some(\n (error) => Object.keys(error).length > 0,\n );\n if (isThereErrors) {\n errors[key] = {\n properties: processedErrors,\n };\n }\n }\n if (!property.required && isNil(processedInput[key])) {\n processedInput[key] = undefined;\n }\n const processor = processors[property.type];\n if (processor) {\n processedInput[key] = await processor(property, processedInput[key]);\n }\n\n const shouldValidate =\n key !== AUTHENTICATION_PROPERTY_NAME &&\n property.type !== PropertyType.MARKDOWN;\n if (!shouldValidate) {\n continue;\n }\n }\n\n for (const [key, value] of Object.entries(processedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n\n const validationErrors = validateProperty(\n property,\n value,\n resolvedInput[key],\n );\n if (validationErrors.length > 0) {\n errors[key] = validationErrors;\n }\n }\n\n // Streaming file inputs open a live connection when resolved. If any property\n // fails validation the action never runs, so drain those bodies here to avoid\n // leaking connections until GC.\n if (Object.keys(errors).length > 0) {\n destroyOpenStreams(processedInput);\n }\n\n return { processedInput, errors };\n },\n};\n\nfunction destroyOpenStreams(value: unknown): void {\n if (isNil(value) || typeof value !== \"object\" || Buffer.isBuffer(value)) {\n return;\n }\n if (value instanceof Readable) {\n value.destroy();\n return;\n }\n for (const child of Object.values(value)) {\n destroyOpenStreams(child);\n }\n}\n\nexport const validateProperty = (\n property: PieceProperty,\n value: unknown,\n originalValue: unknown,\n): string[] => {\n if (property.type === PropertyType.JSON) {\n if (!property.required && originalValue === \"\") {\n return [];\n }\n if (!isNil(originalValue) && isNil(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n if (!property.required && isNil(value)) {\n return [];\n }\n if (!isObject(value) && !Array.isArray(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n return [];\n }\n\n if (!property.required && isNil(value)) {\n return [];\n }\n\n switch (property.type) {\n case PropertyType.SHORT_TEXT:\n case PropertyType.LONG_TEXT:\n case PropertyType.RICH_TEXT:\n return typeof value === \"string\"\n ? []\n : [`Expected string, received: ${originalValue}`];\n case PropertyType.NUMBER:\n return typeof value === \"number\" && !Number.isNaN(value)\n ? []\n : [`Expected number, received: ${originalValue}`];\n case PropertyType.CHECKBOX:\n return typeof value === \"boolean\"\n ? []\n : [`Expected boolean, received: ${originalValue}`];\n case PropertyType.DATE_TIME:\n return typeof value === \"string\"\n ? []\n : [\n `Invalid datetime format. Expected ISO format (e.g. 2024-03-14T12:00:00.000Z), received: ${originalValue}`,\n ];\n case PropertyType.DATE_RANGE:\n return DateRangeValue.safeParse(value).success\n ? []\n : [`Expected date range, received: ${originalValue}`];\n case PropertyType.ARRAY:\n case PropertyType.MULTI_SELECT_DROPDOWN:\n case PropertyType.STATIC_MULTI_SELECT_DROPDOWN:\n return Array.isArray(value)\n ? []\n : [`Expected array, received: ${originalValue}`];\n case PropertyType.OBJECT:\n return isObject(value)\n ? []\n : [`Expected object, received: ${originalValue}`];\n case PropertyType.FILE:\n return isObject(value)\n ? []\n : [\n `Expected file url or base64 with mimeType, received: ${originalValue}`,\n ];\n default:\n return [];\n }\n};\n\nfunction getAuthPropsToProcess(\n authValue: AppConnectionValue,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n): null {\n if (isNil(auth)) {\n return null;\n }\n const usedAuthProperty = getAuthPropertyForValue({\n authValueType: authValue.type,\n pieceAuth: auth,\n });\n const doesAuthHaveProps =\n usedAuthProperty?.type === PropertyType.CUSTOM_AUTH ||\n usedAuthProperty?.type === PropertyType.OAUTH2 ||\n usedAuthProperty?.type === PropertyType.OIDC;\n if (doesAuthHaveProps && !isNil(usedAuthProperty?.props)) {\n return usedAuthProperty.props;\n }\n return null;\n}\n"],"mappings":"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"}
|