@powerhousedao/pieces-framework 6.2.3-dev.24 → 6.2.3-dev.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/host.d.ts CHANGED
@@ -1,8 +1,7 @@
1
- import { I as PieceProperty, L as PiecePropertyMap, P as InputPropertyMap, Pt as PropertyType, R as StaticPropsValue, ct as PieceAuthProperty } from "./index-BW6GxXEN.js";
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,34 +42,34 @@ 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
79
75
  declare const PropertyExecutionType: {
@@ -90,13 +86,14 @@ type PropertySettings = {
90
86
  type PropsValidationError = {
91
87
  [key: string]: string[] | PropsValidationError | PropsValidationError[];
92
88
  };
93
- declare const propsProcessor: {
89
+ export declare const propsProcessor: {
94
90
  applyProcessorsAndValidators: (resolvedInput: StaticPropsValue<PiecePropertyMap>, props: InputPropertyMap, auth: PieceAuthProperty | PieceAuthProperty[] | undefined, requireAuth: boolean, propertySettings: Record<string, PropertySettings>) => Promise<{
95
91
  processedInput: StaticPropsValue<PiecePropertyMap>;
96
92
  errors: PropsValidationError;
97
93
  }>;
98
94
  };
99
- declare const validateProperty: (property: PieceProperty, value: unknown, originalValue: unknown) => string[];
95
+ export declare const validateProperty: (property: PieceProperty, value: unknown, originalValue: unknown) => string[];
100
96
  //#endregion
101
- export { type FriendlyPieceError, type ProcessorFn, type PropertySettings, arrayZipperProcessor, checkboxProcessor, dateTimeProcessor, dynamicPropKeys, fileProcessor, formatPieceError, jsonProcessor, multiSelectProcessor, numberProcessor, objectProcessor, processors, propsProcessor, ssrfIpClassifier, textProcessor, tryParseFriendlyPieceError, validateProperty };
97
+ export type { FriendlyPieceError, ProcessorFn, PropertySettings };
98
+ export {};
102
99
  //# sourceMappingURL=host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/types.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../src/host/shared-shim.ts","../upstream/engine/lib/variables/props-processor.ts"],"mappings":";;;cAkYa,gBAAA,GACX,KAAA,WACA,OAAA,GAAU,uBAAA,KACT,kBAAA;AAAA,cAgDU,0BAAA,GACX,KAAA,cACC,kBAAA;AAAA,KAwBS,kBAAA;EACV,gBAAA;EACA,OAAA;EACA,SAAA;EACA,MAAA;EACA,YAAA;EACA,eAAA,GAAkB,MAAA;EAClB,WAAA;EACA,UAAA;EACA,aAAA;EACA,UAAA;EACA,GAAA;AAAA;AAAA,KAGG,uBAAA;EACH,GAAA;AAAA;;;iBCzaO,WAAA,CAAA;EACP,EAAA;EACA;AAAA;EAEA,EAAA;EACA,SAAA;AAAA;AAAA,cAYW,gBAAA;sBAEZ,WAAA;AAAA;;;iBC/DQ,eAAA,CAAgB,KAAA,EAAO,gBAAA,GAAmB,gBAAA;AAAA,iBAM1C,iBAAA,CAAkB,KAAA,EAAO,gBAAA,GAAmB,gBAAA;AAAA,iBAS5C,iBAAA,GAAA,CAAqB,KAAA,EAAO,CAAA,GAAI,CAAA;AAAA,cAkD5B,eAAA;;;;;;;KCpED,WAAA,+BACV,QAAA,EAAU,aAAA,EACV,KAAA,EAAO,KAAA,KACJ,MAAA;;;cCiBQ,oBAAA,EAAsB,WAAA;;;cCrBtB,iBAAA,EAAmB,WAAA;;;cCEnB,iBAAA,EAAmB,WAAA;;;cCCnB,aAAA,EAAe,WAAA;;;cCKf,UAAA,EAAY,OAAA,CAAQ,MAAA,CAAO,YAAA,EAAc,WAAA;;;cCRzC,aAAA,EAAe,WAAA;;;cCAf,oBAAA,EAAsB,WAAA;;;cCAtB,eAAA,EAAiB,WAAA;;;cCAjB,eAAA,EAAiB,WAAA;;;cCAjB,aAAA,EAAe,WAAA;;;cCAf,qBAAA;EAAA,SAGH,MAAA;EAAA,SAAA,OAAA;AAAA;AAAA,KACE,qBAAA,WACF,qBAAA,eAAoC,qBAAA;AAAA,KAIlC,gBAAA;EACV,IAAA,GAAO,qBAAA;EACP,MAAA,EAAQ,gBAAA;AAAA;;;KCOL,oBAAA;EAAA,CACF,GAAA,sBAAyB,oBAAA,GAAuB,oBAAA;AAAA;AAAA,cAGtC,cAAA;gDAEM,gBAAA,CAAiB,gBAAA,GAAiB,KAAA,EAC1C,gBAAA,EAAgB,IAAA,EACjB,iBAAA,GAAoB,iBAAA,gBAA+B,WAAA,WACrC,gBAAA,EACF,MAAA,SAAe,gBAAA,MAChC,OAAA;IACD,cAAA,EAAgB,gBAAA,CAAiB,gBAAA;IACjC,MAAA,EAAQ,oBAAA;EAAA;AAAA;AAAA,cA0IC,gBAAA,GACX,QAAA,EAAU,aAAA,EACV,KAAA,WACA,aAAA"}
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-Df2l6_y_.js";
2
- import { g as AUTHENTICATION_PROPERTY_NAME, i as getAuthPropertyForValue, m as isObject } from "./authentication-B7brX_It.js";
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 textOnly = decodeHtmlEntities(value.replace(/<script[\s\S]*?<\/script>/gi, " ").replace(/<style[\s\S]*?<\/style>/gi, " ").replace(/<head[\s\S]*?<\/head>/gi, " ").replace(/<[^>]+>/g, " ")).replace(/\s+/g, " ").trim();
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: value["message"] ?? value["detail"] ?? value["description"] ?? value["reason"] ?? value["error"],
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: pickPlainMessage({
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 === PropertyType.FILE && property.streaming === true;
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
- return MIME_EXTENSIONS[mimeType.split(";")[0].trim().toLowerCase()] ?? null;
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 === PropertyType.DYNAMIC) {
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 === PropertyType.ARRAY && property.properties) {
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 !== PropertyType.MARKDOWN)) continue;
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 === PropertyType.JSON) {
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 PropertyType.SHORT_TEXT:
697
- case PropertyType.LONG_TEXT:
698
- case PropertyType.RICH_TEXT: return typeof value === "string" ? [] : [`Expected string, received: ${originalValue}`];
699
- case PropertyType.NUMBER: return typeof value === "number" && !Number.isNaN(value) ? [] : [`Expected number, received: ${originalValue}`];
700
- case PropertyType.CHECKBOX: return typeof value === "boolean" ? [] : [`Expected boolean, received: ${originalValue}`];
701
- case PropertyType.DATE_TIME: return typeof value === "string" ? [] : [`Invalid datetime format. Expected ISO format (e.g. 2024-03-14T12:00:00.000Z), received: ${originalValue}`];
702
- case PropertyType.DATE_RANGE: return DateRangeValue.safeParse(value).success ? [] : [`Expected date range, received: ${originalValue}`];
703
- case PropertyType.ARRAY:
704
- case PropertyType.MULTI_SELECT_DROPDOWN:
705
- case PropertyType.STATIC_MULTI_SELECT_DROPDOWN: return Array.isArray(value) ? [] : [`Expected array, received: ${originalValue}`];
706
- case PropertyType.OBJECT: return isObject(value) ? [] : [`Expected object, received: ${originalValue}`];
707
- case PropertyType.FILE: return isObject(value) ? [] : [`Expected file url or base64 with mimeType, received: ${originalValue}`];
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,7 +719,7 @@ function getAuthPropsToProcess(authValue, auth) {
714
719
  authValueType: authValue.type,
715
720
  pieceAuth: auth
716
721
  });
717
- if ((usedAuthProperty?.type === PropertyType.CUSTOM_AUTH || usedAuthProperty?.type === PropertyType.OAUTH2 || usedAuthProperty?.type === PropertyType.OIDC) && !isNil(usedAuthProperty?.props)) return usedAuthProperty.props;
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
 
package/dist/host.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/props-processor.ts"],"sourcesContent":["// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/friendly-piece-error.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { tryCatchSync } from \"./try-catch.js\";\nimport { isNil, isString } from \"./utils.js\";\n\nconst FRIENDLY_PIECE_ERROR_VERSION = 1;\n\nconst STACK_LINE_REGEX = /\\n\\s*at\\s+.+$/gm;\nconst HTTP_ERROR_MESSAGE_MAX_LENGTH = 2000;\nconst RAW_ERROR_MAX_LENGTH = 16000;\nconst HTTP_STATUS_MIN = 100;\nconst HTTP_STATUS_MAX = 599;\nconst MAX_MESSAGE_DEPTH = 12;\nconst MAX_SERIALIZED_DEPTH = 64;\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst TOO_DEEP_PLACEHOLDER = \"[Too deep]\";\nconst UNSERIALIZABLE_PLACEHOLDER = \"[Unserializable]\";\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> => {\n return !isNil(value) && typeof value === \"object\" && !Array.isArray(value);\n};\n\nconst safeJsonParse = (value: string): unknown => {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n};\n\nconst stripStack = (value: string): string => {\n return value.replace(STACK_LINE_REGEX, \"\").trim();\n};\n\nconst truncate = (value: string): string => {\n if (value.length <= HTTP_ERROR_MESSAGE_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, HTTP_ERROR_MESSAGE_MAX_LENGTH)}…`;\n};\n\nconst truncateRaw = (value: string): string => {\n if (value.length <= RAW_ERROR_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, RAW_ERROR_MAX_LENGTH)}\\n…[truncated]`;\n};\n\nconst HTML_DOC_REGEX = /^\\s*(<!doctype\\s+html|<html\\b|<\\?xml)/i;\nconst HTML_TAG_LIKE_REGEX =\n /<\\s*(html|body|head|title|meta|p|div|span|h[1-6]|table|script|style)\\b/i;\n\nconst isLikelyMarkupBody = (value: string): boolean => {\n if (HTML_DOC_REGEX.test(value)) {\n return true;\n }\n if (!value.includes(\"<\") || !value.includes(\">\")) {\n return false;\n }\n return HTML_TAG_LIKE_REGEX.test(value);\n};\n\nconst decodeHtmlEntities = (value: string): string => {\n return value\n .replace(/&nbsp;/g, \" \")\n .replace(/&amp;/g, \"&\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&apos;/g, \"'\");\n};\n\nconst stripMarkup = (value: string): string => {\n const titleMatch = value.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i);\n const title = titleMatch\n ? decodeHtmlEntities(titleMatch[1]).replace(/\\s+/g, \" \").trim()\n : \"\";\n\n const withoutNoise = value\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<head[\\s\\S]*?<\\/head>/gi, \" \");\n const textOnly = decodeHtmlEntities(withoutNoise.replace(/<[^>]+>/g, \" \"))\n .replace(/\\s+/g, \" \")\n .trim();\n\n if (textOnly.length > 0 && title.length > 0 && !textOnly.startsWith(title)) {\n return `${title} — ${textOnly}`;\n }\n return textOnly.length > 0 ? textOnly : title;\n};\n\nconst readString = (\n record: Record<string, unknown>,\n key: string,\n): string | undefined => {\n const value = record[key];\n return isString(value) ? value : undefined;\n};\n\nconst collectMessageFrom = ({\n value,\n depth,\n seen,\n}: TraversalParams): string | undefined => {\n if (isNil(value) || depth > MAX_MESSAGE_DEPTH) {\n return undefined;\n }\n if (isString(value)) {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n if (isLikelyMarkupBody(trimmed)) {\n const stripped = stripMarkup(trimmed);\n return stripped.length > 0 ? stripped : undefined;\n }\n return trimmed;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const parts = value\n .map((entry) =>\n collectMessageFrom({ value: entry, depth: depth + 1, seen }),\n )\n .filter((entry): entry is string => isString(entry) && entry.length > 0);\n return parts.length > 0 ? parts.join(\"; \") : undefined;\n }\n if (isObjectRecord(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const nested =\n value[\"message\"] ??\n value[\"detail\"] ??\n value[\"description\"] ??\n value[\"reason\"] ??\n value[\"error\"];\n return collectMessageFrom({ value: nested, depth: depth + 1, seen });\n }\n return undefined;\n};\n\nconst collectMessage = (value: unknown): string | undefined => {\n return collectMessageFrom({ value, depth: 0, seen: new WeakSet() });\n};\n\nconst extractApiMessage = (responseBody: unknown): string | undefined => {\n if (isNil(responseBody)) {\n return undefined;\n }\n if (isString(responseBody) || Array.isArray(responseBody)) {\n const collected = collectMessage(responseBody);\n return collected ? truncate(collected) : undefined;\n }\n if (!isObjectRecord(responseBody)) {\n return truncate(String(responseBody));\n }\n const candidates: unknown[] = [\n responseBody[\"message\"],\n responseBody[\"error_description\"],\n responseBody[\"errorDescription\"],\n responseBody[\"detail\"],\n responseBody[\"title\"],\n responseBody[\"error_message\"],\n responseBody[\"errorMessage\"],\n responseBody[\"errorMessages\"],\n responseBody[\"errors\"],\n responseBody[\"error\"],\n responseBody[\"faultstring\"],\n responseBody[\"fault\"],\n responseBody[\"reason\"],\n responseBody[\"description\"],\n ];\n for (const candidate of candidates) {\n const collected = collectMessage(candidate);\n if (collected) {\n return truncate(collected);\n }\n }\n return undefined;\n};\n\nconst toHttpStatus = (value: unknown): number | undefined => {\n return typeof value === \"number\" &&\n value >= HTTP_STATUS_MIN &&\n value <= HTTP_STATUS_MAX\n ? value\n : undefined;\n};\n\nconst extractResponseHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const response = error[\"response\"];\n if (!isObjectRecord(response)) {\n return null;\n }\n const statusValue = response[\"status\"];\n const status = typeof statusValue === \"number\" ? statusValue : undefined;\n const responseBody = response[\"body\"];\n const headersValue = response[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n const requestRaw = error[\"request\"];\n const request = isObjectRecord(requestRaw) ? requestRaw : undefined;\n const requestBody = request?.[\"body\"];\n const requestUrl =\n request === undefined ? undefined : readString(request, \"url\");\n const requestMethod =\n request === undefined ? undefined : readString(request, \"method\");\n\n if (isNil(status) && isNil(responseBody) && isNil(requestBody)) {\n return null;\n }\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n requestBody,\n requestUrl,\n requestMethod,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractClientHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const status = toHttpStatus(error[\"status\"]);\n if (isNil(status)) {\n return null;\n }\n const responseBody = error[\"error\"] ?? error[\"body\"];\n const headersValue = error[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n return extractResponseHttpDetails(error) ?? extractClientHttpDetails(error);\n};\n\nconst rebuildSerializable = ({\n value,\n depth,\n seen,\n}: TraversalParams): unknown => {\n if (\n isNil(value) ||\n isString(value) ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value) || isObjectRecord(value)) {\n if (seen.has(value)) {\n return CIRCULAR_PLACEHOLDER;\n }\n if (depth >= MAX_SERIALIZED_DEPTH) {\n return TOO_DEEP_PLACEHOLDER;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((entry) =>\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n );\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n ]),\n );\n }\n return String(value);\n};\n\nconst toSerializable = (value: unknown): unknown => {\n if (isNil(value)) {\n return value;\n }\n const { error } = tryCatchSync(() => JSON.stringify(value));\n if (isNil(error)) {\n return value;\n }\n const rebuilt = tryCatchSync(() =>\n rebuildSerializable({ value, depth: 0, seen: new WeakSet() }),\n );\n return isNil(rebuilt.error) ? rebuilt.data : UNSERIALIZABLE_PLACEHOLDER;\n};\n\nconst toSerializableHttpDetails = (\n httpDetails: HttpDetails | null,\n): HttpDetails | null => {\n if (isNil(httpDetails)) {\n return null;\n }\n const { responseBody, requestBody, responseHeaders } = httpDetails;\n return {\n ...httpDetails,\n responseBody: toSerializable(responseBody),\n requestBody: toSerializable(requestBody),\n responseHeaders: isNil(responseHeaders)\n ? undefined\n : Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n toSerializable(value),\n ]),\n ),\n };\n};\n\nconst readErrorName = (error: Record<string, unknown>): string | undefined => {\n const name = readString(error, \"name\");\n if (!isNil(name) && name.length > 0 && name !== \"Error\") {\n return name;\n }\n const ctor = error[\"constructor\"];\n if (\n typeof ctor === \"function\" &&\n isString(ctor.name) &&\n ctor.name.length > 0 &&\n ctor.name !== \"Object\" &&\n ctor.name !== \"Error\"\n ) {\n return ctor.name;\n }\n return undefined;\n};\n\nconst readErrorMessage = (error: Record<string, unknown>): string => {\n const messageString = readString(error, \"message\");\n if (!isNil(messageString)) {\n return messageString;\n }\n const stringified = String(error);\n if (stringified.length > 0 && stringified !== \"[object Object]\") {\n return stringified;\n }\n return \"Unknown error\";\n};\n\nconst pickPlainMessage = ({\n httpDetails,\n rawMessage,\n}: {\n httpDetails: HttpDetails | null;\n rawMessage: string;\n}): string => {\n if (httpDetails?.apiMessage) {\n return httpDetails.apiMessage;\n }\n const cleaned = stripStack(rawMessage);\n if (cleaned.length > 0) {\n return truncate(cleaned);\n }\n return \"Unknown error\";\n};\n\nconst isFriendlyPieceError = (value: unknown): value is FriendlyPieceError => {\n if (!isObjectRecord(value)) {\n return false;\n }\n return (\n value[\"__apErrorVersion\"] === FRIENDLY_PIECE_ERROR_VERSION &&\n typeof value[\"message\"] === \"string\"\n );\n};\n\nexport const formatPieceError = (\n error: unknown,\n options?: FormatPieceErrorOptions,\n): FriendlyPieceError => {\n const raw = options?.raw;\n const withRaw = (base: FriendlyPieceError): FriendlyPieceError => {\n if (isNil(raw) || raw.length === 0 || !isNil(base.raw)) {\n return base;\n }\n return { ...base, raw: truncateRaw(raw) };\n };\n\n if (isNil(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: \"Unknown error\",\n });\n }\n\n if (isString(error)) {\n const cleaned = stripStack(error);\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: cleaned.length > 0 ? cleaned : \"Unknown error\",\n });\n }\n\n if (!isObjectRecord(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: truncate(String(error)),\n });\n }\n\n if (isFriendlyPieceError(error)) {\n return withRaw(error);\n }\n\n const httpDetails = extractHttpDetails(error);\n const errorName = readErrorName(error);\n const rawMessage = readErrorMessage(error);\n const message = pickPlainMessage({ httpDetails, rawMessage });\n\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message,\n errorName,\n ...(toSerializableHttpDetails(httpDetails) ?? {}),\n });\n};\n\nexport const tryParseFriendlyPieceError = (\n value: unknown,\n): FriendlyPieceError | null => {\n if (isNil(value)) {\n return null;\n }\n const candidate = isString(value) ? safeJsonParse(value) : value;\n return isFriendlyPieceError(candidate) ? candidate : null;\n};\n\ntype TraversalParams = {\n value: unknown;\n depth: number;\n seen: WeakSet<object>;\n};\n\ntype HttpDetails = {\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n};\n\nexport type FriendlyPieceError = {\n __apErrorVersion: 1;\n message: string;\n errorName?: string;\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n raw?: string;\n};\n\ntype FormatPieceErrorOptions = {\n raw?: string;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/ssrf-ip-classifier.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport ipaddr from \"ipaddr.js\";\n\nfunction parseOrNull(ip: string): ipaddr.IPv4 | ipaddr.IPv6 | null {\n try {\n return ipaddr.parse(ip);\n } catch {\n return null;\n }\n}\n\nfunction isInAllowList({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (allowList.includes(ip)) return true;\n const addr = parseOrNull(ip);\n if (!addr) return false;\n return allowList.some(\n (entry) => entry.includes(\"/\") && matchesCidr({ addr, cidr: entry }),\n );\n}\n\nfunction matchesCidr({\n addr,\n cidr,\n}: {\n addr: ipaddr.IPv4 | ipaddr.IPv6;\n cidr: string;\n}): boolean {\n try {\n const range = ipaddr.parseCIDR(cidr);\n if (addr.kind() !== range[0].kind()) return false;\n return addr.match(range);\n } catch {\n return false;\n }\n}\n\nfunction isBlockedRange(addr: ipaddr.IPv4 | ipaddr.IPv6): boolean {\n if (addr.kind() === \"ipv6\") {\n const v6 = addr as ipaddr.IPv6;\n if (v6.isIPv4MappedAddress()) {\n return isBlockedRange(v6.toIPv4Address());\n }\n }\n return addr.range() !== \"unicast\";\n}\n\nfunction isBlockedIp({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (isInAllowList({ ip, allowList })) {\n return false;\n }\n const addr = parseOrNull(ip);\n if (!addr) {\n return true;\n }\n return isBlockedRange(addr);\n}\n\nexport const ssrfIpClassifier = {\n isBlockedIp,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/helper/dynamic-prop-keys.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../core-utils/index.js\";\nimport type { InputPropertyMap } from \"../../../framework/index.js\";\n\n// react-hook-form treats `.` and `[` as path separators and strips `]`, `\"` and `'`\n// (see its stringToPath util), so dynamic-property keys containing any of these break\n// the builder form. Escape them (JSON-Pointer style, `~` escapes the escape char) before\n// keys reach the UI, and reverse the mapping before the piece consumes the values.\nfunction escapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [escapeKey(key), property]),\n );\n}\n\nfunction unescapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [\n unescapeKey(key),\n property,\n ]),\n );\n}\n\nfunction unescapeInputKeys<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [unescapeKey(key), child]),\n ) as T;\n}\n\n// Escaped keys carry the ESCAPED_KEY_MARKER prefix so unescaping only ever touches keys\n// this module produced: a literal key like `field~1name` that never went through\n// escapeKey (schema-less tool calls, API-created flows) passes through unchanged.\n// The mapping stays bijective because unescaped keys can never contain `~` (any `~`\n// triggers escaping), so they can never start with the marker.\nfunction escapeKey(key: string): string {\n if (!RESERVED_CHARS.test(key)) {\n return key;\n }\n return (\n ESCAPED_KEY_MARKER +\n key.replace(/[~.[\\]\"']/g, (char) => ESCAPE_SEQUENCES[char])\n );\n}\n\nfunction unescapeKey(key: string): string {\n if (!key.startsWith(ESCAPED_KEY_MARKER)) {\n return key;\n }\n return key\n .slice(ESCAPED_KEY_MARKER.length)\n .replace(/~[0-5]/g, (sequence) => UNESCAPE_SEQUENCES[sequence]);\n}\n\nconst ESCAPED_KEY_MARKER = \"~ap~\";\n\nconst RESERVED_CHARS = /[~.[\\]\"']/;\n\nconst ESCAPE_SEQUENCES: Record<string, string> = {\n \"~\": \"~0\",\n \".\": \"~1\",\n \"[\": \"~2\",\n \"]\": \"~3\",\n '\"': \"~4\",\n \"'\": \"~5\",\n};\n\nconst UNESCAPE_SEQUENCES: Record<string, string> = Object.fromEntries(\n Object.entries(ESCAPE_SEQUENCES).map(([char, sequence]) => [sequence, char]),\n);\n\nexport const dynamicPropKeys = {\n escapePropsKeys,\n unescapePropsKeys,\n unescapeInputKeys,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/array-zipper.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nfunction getLongestArrayLengthInObject(props: Record<string, unknown>): number {\n return Math.max(\n ...Object.values(props).map((value) =>\n Array.isArray(value) ? value.length : 1,\n ),\n );\n}\n\nfunction constructResultForIndex(\n props: Record<string, unknown>,\n index: number,\n): Record<string, unknown> {\n return Object.entries(props).reduce(\n (result, [key, value]) => {\n result[key] = Array.isArray(value) ? value[index] : value;\n return result;\n },\n {} as Record<string, unknown>,\n );\n}\n\nexport const arrayZipperProcessor: ProcessorFn = (_property, value) => {\n if (Array.isArray(value) || !isObject(value)) {\n return value;\n }\n\n return Array.from(\n { length: getLongestArrayLengthInObject(value) },\n (_, index) => constructResultForIndex(value, index),\n );\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/checkbox.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const checkboxProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return typeof parsed === \"boolean\" ? parsed : value;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/date-time.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport dayjs from \"dayjs\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const dateTimeProcessor: ProcessorFn = (_property, value) => {\n dayjs.extend(utc);\n dayjs.extend(timezone);\n const dateTimeString = value;\n try {\n if (!dateTimeString) throw Error(\"Undefined input\");\n return dayjs.tz(dateTimeString, \"UTC\").toISOString();\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/file.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isBase64, isNil, isString } from \"../../../../core-utils/index.js\";\nimport type { ApStreamingFile } from \"../../../../framework/index.js\";\nimport { ApFile, PropertyType } from \"../../../../framework/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const fileProcessor: ProcessorFn = async (property, urlOrBase64) => {\n if (isNil(urlOrBase64) || !isString(urlOrBase64)) {\n return null;\n }\n const streaming =\n property.type === PropertyType.FILE && property.streaming === true;\n try {\n if (streaming) {\n return await handleStreamingFile(urlOrBase64);\n }\n const file = handleBase64File(urlOrBase64);\n if (!isNil(file)) {\n return file;\n }\n return await handleUrlFile(urlOrBase64);\n } catch (e) {\n console.error(e);\n return null;\n }\n};\n\nfunction parseBase64File(\n propertyValue: string,\n): { extension: string; buffer: Buffer } | null {\n if (!isBase64(propertyValue, { allowMime: true })) {\n return null;\n }\n const matches = propertyValue.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); // example match: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\n if (!matches || matches?.length !== 3) {\n return null;\n }\n return {\n extension: mimeExtension(matches[1]) || \"bin\",\n buffer: Buffer.from(matches[2], \"base64\"),\n };\n}\n\nfunction handleBase64File(propertyValue: string): ApFile | null {\n const parsed = parseBase64File(propertyValue);\n if (isNil(parsed)) {\n return null;\n }\n return new ApFile(\n `unknown.${parsed.extension}`,\n parsed.buffer,\n parsed.extension,\n );\n}\n\nasync function handleUrlFile(path: string): Promise<ApFile | null> {\n const fileResponse = await fetch(path);\n // A 4xx/5xx body is the server's error page, not the file. handleStreamingFile\n // already refuses one.\n if (!fileResponse.ok) {\n return null;\n }\n\n const filename =\n getFileName(\n path,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n\n return new ApFile(\n filename,\n Buffer.from(await fileResponse.arrayBuffer()),\n extension,\n );\n}\n\nasync function handleStreamingFile(\n propertyValue: string,\n): Promise<ApStreamingFile | null> {\n const parsed = parseBase64File(propertyValue);\n if (!isNil(parsed)) {\n return {\n filename: `unknown.${parsed.extension}`,\n extension: parsed.extension,\n size: parsed.buffer.length,\n body: Readable.from(parsed.buffer),\n };\n }\n\n const fileResponse = await fetch(propertyValue);\n if (!fileResponse.ok || isNil(fileResponse.body)) {\n await fileResponse.body?.cancel();\n return null;\n }\n const filename =\n getFileName(\n propertyValue,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n const contentEncoding = fileResponse.headers.get(\"content-encoding\");\n const contentLength = Number(fileResponse.headers.get(\"content-length\"));\n // undici transparently decompresses gzip/br/deflate but leaves the compressed\n // Content-Length in place, so it would understate the streamed byte count and\n // truncate the destination. Only trust the size when the body is not encoded.\n const sizeIsTrustworthy =\n (isNil(contentEncoding) || contentEncoding.toLowerCase() === \"identity\") &&\n Number.isInteger(contentLength) &&\n contentLength > 0;\n\n return {\n filename,\n extension,\n size: sizeIsTrustworthy ? contentLength : undefined,\n // @ts-expect-error -- undici streams a Node web ReadableStream body; the DOM fetch types omit the fromWeb overload\n body: Readable.fromWeb(fileResponse.body),\n };\n}\n\nfunction extensionFromFilename(filename: string): string | undefined {\n const parts = filename.split(\".\");\n const last = parts.length > 1 ? parts.pop() : undefined;\n return last ? last : undefined;\n}\n\nfunction getFileName(\n path: string,\n disposition: string | null,\n mimeType: string | undefined,\n): string | null {\n const url = new URL(path);\n if (isNil(disposition)) {\n const fileNameFromUrl =\n url.pathname.includes(\"/\") && url.pathname.split(\"/\").pop()?.includes(\".\")\n ? url.pathname.split(\"/\").pop()\n : null;\n if (!isNil(fileNameFromUrl)) {\n return fileNameFromUrl;\n }\n const resolvedExtension = mimeType ? mimeExtension(mimeType) : null;\n return `unknown.${resolvedExtension ?? \"bin\"}`;\n }\n const utf8FilenameRegex = /filename\\*=UTF-8''([\\w%\\-.]+)(?:; ?|$)/i;\n if (utf8FilenameRegex.test(disposition)) {\n const result = utf8FilenameRegex.exec(disposition);\n if (result && result.length > 1) {\n return decodeURIComponent(result[1]);\n }\n }\n // prevent ReDos attacks by anchoring the ascii regex to string start and\n // slicing off everything before 'filename='\n const filenameStart = disposition.toLowerCase().indexOf(\"filename=\");\n const asciiFilenameRegex = /^filename=([\"']?)(.*?[^\\\\])\\1(?:; ?|$)/i;\n\n if (filenameStart >= 0) {\n const partialDisposition = disposition.slice(filenameStart);\n const matches = asciiFilenameRegex.exec(partialDisposition);\n if (matches != null && matches[2]) {\n return matches[2];\n }\n }\n return null;\n}\n\nfunction mimeExtension(mimeType: string): string | null {\n const normalized = mimeType.split(\";\")[0].trim().toLowerCase();\n return MIME_EXTENSIONS[normalized] ?? null;\n}\n\nconst MIME_EXTENSIONS: Record<string, string> = {\n \"application/json\": \"json\",\n \"application/pdf\": \"pdf\",\n \"application/xml\": \"xml\",\n \"application/zip\": \"zip\",\n \"application/gzip\": \"gz\",\n \"application/x-7z-compressed\": \"7z\",\n \"application/x-tar\": \"tar\",\n \"application/octet-stream\": \"bin\",\n \"application/msword\": \"doc\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n \"docx\",\n \"application/vnd.ms-excel\": \"xls\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": \"xlsx\",\n \"application/vnd.ms-powerpoint\": \"ppt\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\":\n \"pptx\",\n \"application/rtf\": \"rtf\",\n \"application/javascript\": \"js\",\n \"application/x-javascript\": \"js\",\n \"application/x-yaml\": \"yaml\",\n \"application/yaml\": \"yaml\",\n \"application/x-httpd-php\": \"php\",\n \"application/x-sh\": \"sh\",\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/jpg\": \"jpg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n \"image/svg+xml\": \"svg\",\n \"image/bmp\": \"bmp\",\n \"image/tiff\": \"tiff\",\n \"image/x-icon\": \"ico\",\n \"image/vnd.microsoft.icon\": \"ico\",\n \"image/heic\": \"heic\",\n \"image/heif\": \"heif\",\n \"image/avif\": \"avif\",\n \"text/plain\": \"txt\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/csv\": \"csv\",\n \"text/javascript\": \"js\",\n \"text/markdown\": \"md\",\n \"text/xml\": \"xml\",\n \"text/tab-separated-values\": \"tsv\",\n \"text/yaml\": \"yaml\",\n \"audio/mpeg\": \"mp3\",\n \"audio/mp3\": \"mp3\",\n \"audio/mp4\": \"m4a\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/webm\": \"weba\",\n \"audio/flac\": \"flac\",\n \"audio/aac\": \"aac\",\n \"video/mp4\": \"mp4\",\n \"video/mpeg\": \"mpeg\",\n \"video/webm\": \"webm\",\n \"video/quicktime\": \"mov\",\n \"video/x-msvideo\": \"avi\",\n \"video/ogg\": \"ogv\",\n \"font/woff\": \"woff\",\n \"font/woff2\": \"woff2\",\n \"font/ttf\": \"ttf\",\n \"font/otf\": \"otf\",\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/json.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const jsonProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n try {\n if (typeof value === \"object\") {\n return value;\n }\n return JSON.parse(value);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/multi-select.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const multiSelectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || Array.isArray(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return Array.isArray(parsed) ? parsed : [value];\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/number.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const numberProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (value === \"\") {\n return undefined;\n }\n return Number(value);\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/object.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const objectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch (e) {\n return undefined;\n }\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n return value;\n }\n return undefined;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/text.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const textProcessor: ProcessorFn = (property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n\n const result = value.toString();\n if (result.length === 0 && !property.required) {\n return undefined;\n }\n return result;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/index.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { PropertyType } from \"../../../../framework/index.js\";\nimport { checkboxProcessor } from \"./checkbox.js\";\nimport { dateTimeProcessor } from \"./date-time.js\";\nimport { fileProcessor } from \"./file.js\";\nimport { jsonProcessor } from \"./json.js\";\nimport { multiSelectProcessor } from \"./multi-select.js\";\nimport { numberProcessor } from \"./number.js\";\nimport { objectProcessor } from \"./object.js\";\nimport { textProcessor } from \"./text.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const processors: Partial<Record<PropertyType, ProcessorFn>> = {\n JSON: jsonProcessor,\n OBJECT: objectProcessor,\n NUMBER: numberProcessor,\n LONG_TEXT: textProcessor,\n SHORT_TEXT: textProcessor,\n SECRET_TEXT: textProcessor,\n DATE_TIME: dateTimeProcessor,\n FILE: fileProcessor,\n MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n STATIC_MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n CHECKBOX: checkboxProcessor,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/props-processor.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isNil, isObject } from \"../../../core-utils/index.js\";\nimport type {\n InputPropertyMap,\n PieceAuthProperty,\n PieceProperty,\n PiecePropertyMap,\n StaticPropsValue,\n} from \"../../../framework/index.js\";\nimport {\n DateRangeValue,\n getAuthPropertyForValue,\n PropertyType,\n} from \"../../../framework/index.js\";\nimport { dynamicPropKeys } from \"../helper/dynamic-prop-keys.js\";\nimport { processors } from \"./processors/index.js\";\nimport { arrayZipperProcessor } from \"./processors/array-zipper.js\";\nimport type { AppConnectionValue } from \"../../../core-piece-types/index.js\";\nimport { AUTHENTICATION_PROPERTY_NAME } from \"../../../core-piece-types/index.js\";\nimport type { PropertySettings } from \"../../../../src/host/shared-shim.js\";\n\ntype PropsValidationError = {\n [key: string]: string[] | PropsValidationError | PropsValidationError[];\n};\n\nexport const propsProcessor = {\n applyProcessorsAndValidators: async (\n resolvedInput: StaticPropsValue<PiecePropertyMap>,\n props: InputPropertyMap,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n requireAuth: boolean,\n propertySettings: Record<string, PropertySettings>,\n ): Promise<{\n processedInput: StaticPropsValue<PiecePropertyMap>;\n errors: PropsValidationError;\n }> => {\n let dynamaicPropertiesSchema: Record<string, InputPropertyMap> | undefined =\n undefined;\n if (Object.keys(propertySettings).length > 0) {\n dynamaicPropertiesSchema = Object.fromEntries(\n Object.entries(propertySettings).map(([key, propertySetting]) => [\n key,\n propertySetting.schema,\n ]),\n );\n }\n const processedInput = { ...resolvedInput };\n const errors: PropsValidationError = {};\n const authValue: AppConnectionValue | undefined =\n resolvedInput[AUTHENTICATION_PROPERTY_NAME];\n if (authValue && requireAuth) {\n const authPropsToProcess = getAuthPropsToProcess(authValue, auth);\n if (authPropsToProcess) {\n const { processedInput: authProcessedInput, errors: authErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n resolvedInput[AUTHENTICATION_PROPERTY_NAME],\n authPropsToProcess,\n undefined,\n false,\n {},\n );\n processedInput[AUTHENTICATION_PROPERTY_NAME] = authProcessedInput;\n if (Object.keys(authErrors).length > 0) {\n errors[AUTHENTICATION_PROPERTY_NAME] = authErrors;\n }\n }\n }\n for (const [key, value] of Object.entries(resolvedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n if (property.type === PropertyType.DYNAMIC) {\n const valueWithOriginalKeys = dynamicPropKeys.unescapeInputKeys(value);\n processedInput[key] = valueWithOriginalKeys;\n if (!isNil(dynamaicPropertiesSchema?.[key])) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n valueWithOriginalKeys,\n dynamicPropKeys.unescapePropsKeys(dynamaicPropertiesSchema[key]),\n undefined,\n false,\n {},\n );\n processedInput[key] = itemProcessedInput;\n if (Object.keys(itemErrors).length > 0) {\n errors[key] = itemErrors;\n }\n }\n }\n if (property.type === PropertyType.ARRAY && property.properties) {\n const arrayOfObjects = arrayZipperProcessor(property, value) ?? [];\n const processedArray = [];\n const processedErrors = [];\n for (const item of arrayOfObjects) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n item,\n property.properties,\n undefined,\n false,\n {},\n );\n processedArray.push(itemProcessedInput);\n processedErrors.push(itemErrors);\n }\n processedInput[key] = processedArray;\n const isThereErrors = processedErrors.some(\n (error) => Object.keys(error).length > 0,\n );\n if (isThereErrors) {\n errors[key] = {\n properties: processedErrors,\n };\n }\n }\n if (!property.required && isNil(processedInput[key])) {\n processedInput[key] = undefined;\n }\n const processor = processors[property.type];\n if (processor) {\n processedInput[key] = await processor(property, processedInput[key]);\n }\n\n const shouldValidate =\n key !== AUTHENTICATION_PROPERTY_NAME &&\n property.type !== PropertyType.MARKDOWN;\n if (!shouldValidate) {\n continue;\n }\n }\n\n for (const [key, value] of Object.entries(processedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n\n const validationErrors = validateProperty(\n property,\n value,\n resolvedInput[key],\n );\n if (validationErrors.length > 0) {\n errors[key] = validationErrors;\n }\n }\n\n // Streaming file inputs open a live connection when resolved. If any property\n // fails validation the action never runs, so drain those bodies here to avoid\n // leaking connections until GC.\n if (Object.keys(errors).length > 0) {\n destroyOpenStreams(processedInput);\n }\n\n return { processedInput, errors };\n },\n};\n\nfunction destroyOpenStreams(value: unknown): void {\n if (isNil(value) || typeof value !== \"object\" || Buffer.isBuffer(value)) {\n return;\n }\n if (value instanceof Readable) {\n value.destroy();\n return;\n }\n for (const child of Object.values(value)) {\n destroyOpenStreams(child);\n }\n}\n\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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"}
1
+ {"version":3,"file":"host.js","names":[],"sources":["../upstream/core-utils/lib/friendly-piece-error.ts","../upstream/core-utils/lib/ssrf-ip-classifier.ts","../upstream/engine/lib/helper/dynamic-prop-keys.ts","../upstream/engine/lib/variables/processors/array-zipper.ts","../upstream/engine/lib/variables/processors/checkbox.ts","../upstream/engine/lib/variables/processors/date-time.ts","../upstream/engine/lib/variables/processors/file.ts","../upstream/engine/lib/variables/processors/json.ts","../upstream/engine/lib/variables/processors/multi-select.ts","../upstream/engine/lib/variables/processors/number.ts","../upstream/engine/lib/variables/processors/object.ts","../upstream/engine/lib/variables/processors/text.ts","../upstream/engine/lib/variables/processors/index.ts","../upstream/engine/lib/variables/props-processor.ts"],"sourcesContent":["// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/friendly-piece-error.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { tryCatchSync } from \"./try-catch.js\";\nimport { isNil, isString } from \"./utils.js\";\n\nconst FRIENDLY_PIECE_ERROR_VERSION = 1;\n\nconst STACK_LINE_REGEX = /\\n\\s*at\\s+.+$/gm;\nconst HTTP_ERROR_MESSAGE_MAX_LENGTH = 2000;\nconst RAW_ERROR_MAX_LENGTH = 16000;\nconst HTTP_STATUS_MIN = 100;\nconst HTTP_STATUS_MAX = 599;\nconst MAX_MESSAGE_DEPTH = 12;\nconst MAX_SERIALIZED_DEPTH = 64;\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst TOO_DEEP_PLACEHOLDER = \"[Too deep]\";\nconst UNSERIALIZABLE_PLACEHOLDER = \"[Unserializable]\";\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> => {\n return !isNil(value) && typeof value === \"object\" && !Array.isArray(value);\n};\n\nconst safeJsonParse = (value: string): unknown => {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n};\n\nconst stripStack = (value: string): string => {\n return value.replace(STACK_LINE_REGEX, \"\").trim();\n};\n\nconst truncate = (value: string): string => {\n if (value.length <= HTTP_ERROR_MESSAGE_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, HTTP_ERROR_MESSAGE_MAX_LENGTH)}…`;\n};\n\nconst truncateRaw = (value: string): string => {\n if (value.length <= RAW_ERROR_MAX_LENGTH) {\n return value;\n }\n return `${value.slice(0, RAW_ERROR_MAX_LENGTH)}\\n…[truncated]`;\n};\n\nconst HTML_DOC_REGEX = /^\\s*(<!doctype\\s+html|<html\\b|<\\?xml)/i;\nconst HTML_TAG_LIKE_REGEX =\n /<\\s*(html|body|head|title|meta|p|div|span|h[1-6]|table|script|style)\\b/i;\n\nconst isLikelyMarkupBody = (value: string): boolean => {\n if (HTML_DOC_REGEX.test(value)) {\n return true;\n }\n if (!value.includes(\"<\") || !value.includes(\">\")) {\n return false;\n }\n return HTML_TAG_LIKE_REGEX.test(value);\n};\n\nconst decodeHtmlEntities = (value: string): string => {\n return value\n .replace(/&nbsp;/g, \" \")\n .replace(/&amp;/g, \"&\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&apos;/g, \"'\");\n};\n\nconst stripMarkup = (value: string): string => {\n const titleMatch = value.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i);\n const title = titleMatch\n ? decodeHtmlEntities(titleMatch[1]).replace(/\\s+/g, \" \").trim()\n : \"\";\n\n const withoutNoise = value\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<head[\\s\\S]*?<\\/head>/gi, \" \");\n const textOnly = decodeHtmlEntities(withoutNoise.replace(/<[^>]+>/g, \" \"))\n .replace(/\\s+/g, \" \")\n .trim();\n\n if (textOnly.length > 0 && title.length > 0 && !textOnly.startsWith(title)) {\n return `${title} — ${textOnly}`;\n }\n return textOnly.length > 0 ? textOnly : title;\n};\n\nconst readString = (\n record: Record<string, unknown>,\n key: string,\n): string | undefined => {\n const value = record[key];\n return isString(value) ? value : undefined;\n};\n\nconst collectMessageFrom = ({\n value,\n depth,\n seen,\n}: TraversalParams): string | undefined => {\n if (isNil(value) || depth > MAX_MESSAGE_DEPTH) {\n return undefined;\n }\n if (isString(value)) {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n if (isLikelyMarkupBody(trimmed)) {\n const stripped = stripMarkup(trimmed);\n return stripped.length > 0 ? stripped : undefined;\n }\n return trimmed;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const parts = value\n .map((entry) =>\n collectMessageFrom({ value: entry, depth: depth + 1, seen }),\n )\n .filter((entry): entry is string => isString(entry) && entry.length > 0);\n return parts.length > 0 ? parts.join(\"; \") : undefined;\n }\n if (isObjectRecord(value)) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n const nested =\n value[\"message\"] ??\n value[\"detail\"] ??\n value[\"description\"] ??\n value[\"reason\"] ??\n value[\"error\"];\n return collectMessageFrom({ value: nested, depth: depth + 1, seen });\n }\n return undefined;\n};\n\nconst collectMessage = (value: unknown): string | undefined => {\n return collectMessageFrom({ value, depth: 0, seen: new WeakSet() });\n};\n\nconst extractApiMessage = (responseBody: unknown): string | undefined => {\n if (isNil(responseBody)) {\n return undefined;\n }\n if (isString(responseBody) || Array.isArray(responseBody)) {\n const collected = collectMessage(responseBody);\n return collected ? truncate(collected) : undefined;\n }\n if (!isObjectRecord(responseBody)) {\n return truncate(String(responseBody));\n }\n const candidates: unknown[] = [\n responseBody[\"message\"],\n responseBody[\"error_description\"],\n responseBody[\"errorDescription\"],\n responseBody[\"detail\"],\n responseBody[\"title\"],\n responseBody[\"error_message\"],\n responseBody[\"errorMessage\"],\n responseBody[\"errorMessages\"],\n responseBody[\"errors\"],\n responseBody[\"error\"],\n responseBody[\"faultstring\"],\n responseBody[\"fault\"],\n responseBody[\"reason\"],\n responseBody[\"description\"],\n ];\n for (const candidate of candidates) {\n const collected = collectMessage(candidate);\n if (collected) {\n return truncate(collected);\n }\n }\n return undefined;\n};\n\nconst toHttpStatus = (value: unknown): number | undefined => {\n return typeof value === \"number\" &&\n value >= HTTP_STATUS_MIN &&\n value <= HTTP_STATUS_MAX\n ? value\n : undefined;\n};\n\nconst extractResponseHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const response = error[\"response\"];\n if (!isObjectRecord(response)) {\n return null;\n }\n const statusValue = response[\"status\"];\n const status = typeof statusValue === \"number\" ? statusValue : undefined;\n const responseBody = response[\"body\"];\n const headersValue = response[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n const requestRaw = error[\"request\"];\n const request = isObjectRecord(requestRaw) ? requestRaw : undefined;\n const requestBody = request?.[\"body\"];\n const requestUrl =\n request === undefined ? undefined : readString(request, \"url\");\n const requestMethod =\n request === undefined ? undefined : readString(request, \"method\");\n\n if (isNil(status) && isNil(responseBody) && isNil(requestBody)) {\n return null;\n }\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n requestBody,\n requestUrl,\n requestMethod,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractClientHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n const status = toHttpStatus(error[\"status\"]);\n if (isNil(status)) {\n return null;\n }\n const responseBody = error[\"error\"] ?? error[\"body\"];\n const headersValue = error[\"headers\"];\n const headers = isObjectRecord(headersValue) ? headersValue : undefined;\n\n return {\n status,\n responseBody,\n responseHeaders: headers,\n apiMessage: extractApiMessage(responseBody),\n };\n};\n\nconst extractHttpDetails = (\n error: Record<string, unknown>,\n): HttpDetails | null => {\n return extractResponseHttpDetails(error) ?? extractClientHttpDetails(error);\n};\n\nconst rebuildSerializable = ({\n value,\n depth,\n seen,\n}: TraversalParams): unknown => {\n if (\n isNil(value) ||\n isString(value) ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value) || isObjectRecord(value)) {\n if (seen.has(value)) {\n return CIRCULAR_PLACEHOLDER;\n }\n if (depth >= MAX_SERIALIZED_DEPTH) {\n return TOO_DEEP_PLACEHOLDER;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((entry) =>\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n );\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n rebuildSerializable({ value: entry, depth: depth + 1, seen }),\n ]),\n );\n }\n return String(value);\n};\n\nconst toSerializable = (value: unknown): unknown => {\n if (isNil(value)) {\n return value;\n }\n const { error } = tryCatchSync(() => JSON.stringify(value));\n if (isNil(error)) {\n return value;\n }\n const rebuilt = tryCatchSync(() =>\n rebuildSerializable({ value, depth: 0, seen: new WeakSet() }),\n );\n return isNil(rebuilt.error) ? rebuilt.data : UNSERIALIZABLE_PLACEHOLDER;\n};\n\nconst toSerializableHttpDetails = (\n httpDetails: HttpDetails | null,\n): HttpDetails | null => {\n if (isNil(httpDetails)) {\n return null;\n }\n const { responseBody, requestBody, responseHeaders } = httpDetails;\n return {\n ...httpDetails,\n responseBody: toSerializable(responseBody),\n requestBody: toSerializable(requestBody),\n responseHeaders: isNil(responseHeaders)\n ? undefined\n : Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n toSerializable(value),\n ]),\n ),\n };\n};\n\nconst readErrorName = (error: Record<string, unknown>): string | undefined => {\n const name = readString(error, \"name\");\n if (!isNil(name) && name.length > 0 && name !== \"Error\") {\n return name;\n }\n const ctor = error[\"constructor\"];\n if (\n typeof ctor === \"function\" &&\n isString(ctor.name) &&\n ctor.name.length > 0 &&\n ctor.name !== \"Object\" &&\n ctor.name !== \"Error\"\n ) {\n return ctor.name;\n }\n return undefined;\n};\n\nconst readErrorMessage = (error: Record<string, unknown>): string => {\n const messageString = readString(error, \"message\");\n if (!isNil(messageString)) {\n return messageString;\n }\n const stringified = String(error);\n if (stringified.length > 0 && stringified !== \"[object Object]\") {\n return stringified;\n }\n return \"Unknown error\";\n};\n\nconst pickPlainMessage = ({\n httpDetails,\n rawMessage,\n}: {\n httpDetails: HttpDetails | null;\n rawMessage: string;\n}): string => {\n if (httpDetails?.apiMessage) {\n return httpDetails.apiMessage;\n }\n const cleaned = stripStack(rawMessage);\n if (cleaned.length > 0) {\n return truncate(cleaned);\n }\n return \"Unknown error\";\n};\n\nconst isFriendlyPieceError = (value: unknown): value is FriendlyPieceError => {\n if (!isObjectRecord(value)) {\n return false;\n }\n return (\n value[\"__apErrorVersion\"] === FRIENDLY_PIECE_ERROR_VERSION &&\n typeof value[\"message\"] === \"string\"\n );\n};\n\nexport const formatPieceError = (\n error: unknown,\n options?: FormatPieceErrorOptions,\n): FriendlyPieceError => {\n const raw = options?.raw;\n const withRaw = (base: FriendlyPieceError): FriendlyPieceError => {\n if (isNil(raw) || raw.length === 0 || !isNil(base.raw)) {\n return base;\n }\n return { ...base, raw: truncateRaw(raw) };\n };\n\n if (isNil(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: \"Unknown error\",\n });\n }\n\n if (isString(error)) {\n const cleaned = stripStack(error);\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: cleaned.length > 0 ? cleaned : \"Unknown error\",\n });\n }\n\n if (!isObjectRecord(error)) {\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message: truncate(String(error)),\n });\n }\n\n if (isFriendlyPieceError(error)) {\n return withRaw(error);\n }\n\n const httpDetails = extractHttpDetails(error);\n const errorName = readErrorName(error);\n const rawMessage = readErrorMessage(error);\n const message = pickPlainMessage({ httpDetails, rawMessage });\n\n return withRaw({\n __apErrorVersion: FRIENDLY_PIECE_ERROR_VERSION,\n message,\n errorName,\n ...(toSerializableHttpDetails(httpDetails) ?? {}),\n });\n};\n\nexport const tryParseFriendlyPieceError = (\n value: unknown,\n): FriendlyPieceError | null => {\n if (isNil(value)) {\n return null;\n }\n const candidate = isString(value) ? safeJsonParse(value) : value;\n return isFriendlyPieceError(candidate) ? candidate : null;\n};\n\ntype TraversalParams = {\n value: unknown;\n depth: number;\n seen: WeakSet<object>;\n};\n\ntype HttpDetails = {\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n};\n\nexport type FriendlyPieceError = {\n __apErrorVersion: 1;\n message: string;\n errorName?: string;\n status?: number;\n responseBody?: unknown;\n responseHeaders?: Record<string, unknown>;\n requestBody?: unknown;\n requestUrl?: string;\n requestMethod?: string;\n apiMessage?: string;\n raw?: string;\n};\n\ntype FormatPieceErrorOptions = {\n raw?: string;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/core/utils/src/lib/ssrf-ip-classifier.ts. MIT; see ../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport ipaddr from \"ipaddr.js\";\n\nfunction parseOrNull(ip: string): ipaddr.IPv4 | ipaddr.IPv6 | null {\n try {\n return ipaddr.parse(ip);\n } catch {\n return null;\n }\n}\n\nfunction isInAllowList({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (allowList.includes(ip)) return true;\n const addr = parseOrNull(ip);\n if (!addr) return false;\n return allowList.some(\n (entry) => entry.includes(\"/\") && matchesCidr({ addr, cidr: entry }),\n );\n}\n\nfunction matchesCidr({\n addr,\n cidr,\n}: {\n addr: ipaddr.IPv4 | ipaddr.IPv6;\n cidr: string;\n}): boolean {\n try {\n const range = ipaddr.parseCIDR(cidr);\n if (addr.kind() !== range[0].kind()) return false;\n return addr.match(range);\n } catch {\n return false;\n }\n}\n\nfunction isBlockedRange(addr: ipaddr.IPv4 | ipaddr.IPv6): boolean {\n if (addr.kind() === \"ipv6\") {\n const v6 = addr as ipaddr.IPv6;\n if (v6.isIPv4MappedAddress()) {\n return isBlockedRange(v6.toIPv4Address());\n }\n }\n return addr.range() !== \"unicast\";\n}\n\nfunction isBlockedIp({\n ip,\n allowList,\n}: {\n ip: string;\n allowList: string[];\n}): boolean {\n if (isInAllowList({ ip, allowList })) {\n return false;\n }\n const addr = parseOrNull(ip);\n if (!addr) {\n return true;\n }\n return isBlockedRange(addr);\n}\n\nexport const ssrfIpClassifier = {\n isBlockedIp,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/helper/dynamic-prop-keys.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../core-utils/index.js\";\nimport type { InputPropertyMap } from \"../../../framework/index.js\";\n\n// react-hook-form treats `.` and `[` as path separators and strips `]`, `\"` and `'`\n// (see its stringToPath util), so dynamic-property keys containing any of these break\n// the builder form. Escape them (JSON-Pointer style, `~` escapes the escape char) before\n// keys reach the UI, and reverse the mapping before the piece consumes the values.\nfunction escapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [escapeKey(key), property]),\n );\n}\n\nfunction unescapePropsKeys(props: InputPropertyMap): InputPropertyMap {\n return Object.fromEntries(\n Object.entries(props).map(([key, property]) => [\n unescapeKey(key),\n property,\n ]),\n );\n}\n\nfunction unescapeInputKeys<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [unescapeKey(key), child]),\n ) as T;\n}\n\n// Escaped keys carry the ESCAPED_KEY_MARKER prefix so unescaping only ever touches keys\n// this module produced: a literal key like `field~1name` that never went through\n// escapeKey (schema-less tool calls, API-created flows) passes through unchanged.\n// The mapping stays bijective because unescaped keys can never contain `~` (any `~`\n// triggers escaping), so they can never start with the marker.\nfunction escapeKey(key: string): string {\n if (!RESERVED_CHARS.test(key)) {\n return key;\n }\n return (\n ESCAPED_KEY_MARKER +\n key.replace(/[~.[\\]\"']/g, (char) => ESCAPE_SEQUENCES[char])\n );\n}\n\nfunction unescapeKey(key: string): string {\n if (!key.startsWith(ESCAPED_KEY_MARKER)) {\n return key;\n }\n return key\n .slice(ESCAPED_KEY_MARKER.length)\n .replace(/~[0-5]/g, (sequence) => UNESCAPE_SEQUENCES[sequence]);\n}\n\nconst ESCAPED_KEY_MARKER = \"~ap~\";\n\nconst RESERVED_CHARS = /[~.[\\]\"']/;\n\nconst ESCAPE_SEQUENCES: Record<string, string> = {\n \"~\": \"~0\",\n \".\": \"~1\",\n \"[\": \"~2\",\n \"]\": \"~3\",\n '\"': \"~4\",\n \"'\": \"~5\",\n};\n\nconst UNESCAPE_SEQUENCES: Record<string, string> = Object.fromEntries(\n Object.entries(ESCAPE_SEQUENCES).map(([char, sequence]) => [sequence, char]),\n);\n\nexport const dynamicPropKeys = {\n escapePropsKeys,\n unescapePropsKeys,\n unescapeInputKeys,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/array-zipper.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isObject } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nfunction getLongestArrayLengthInObject(props: Record<string, unknown>): number {\n return Math.max(\n ...Object.values(props).map((value) =>\n Array.isArray(value) ? value.length : 1,\n ),\n );\n}\n\nfunction constructResultForIndex(\n props: Record<string, unknown>,\n index: number,\n): Record<string, unknown> {\n return Object.entries(props).reduce(\n (result, [key, value]) => {\n result[key] = Array.isArray(value) ? value[index] : value;\n return result;\n },\n {} as Record<string, unknown>,\n );\n}\n\nexport const arrayZipperProcessor: ProcessorFn = (_property, value) => {\n if (Array.isArray(value) || !isObject(value)) {\n return value;\n }\n\n return Array.from(\n { length: getLongestArrayLengthInObject(value) },\n (_, index) => constructResultForIndex(value, index),\n );\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/checkbox.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const checkboxProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return typeof parsed === \"boolean\" ? parsed : value;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/date-time.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport dayjs from \"dayjs\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const dateTimeProcessor: ProcessorFn = (_property, value) => {\n dayjs.extend(utc);\n dayjs.extend(timezone);\n const dateTimeString = value;\n try {\n if (!dateTimeString) throw Error(\"Undefined input\");\n return dayjs.tz(dateTimeString, \"UTC\").toISOString();\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/file.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isBase64, isNil, isString } from \"../../../../core-utils/index.js\";\nimport type { ApStreamingFile } from \"../../../../framework/index.js\";\nimport { ApFile, PropertyType } from \"../../../../framework/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const fileProcessor: ProcessorFn = async (property, urlOrBase64) => {\n if (isNil(urlOrBase64) || !isString(urlOrBase64)) {\n return null;\n }\n const streaming =\n property.type === PropertyType.FILE && property.streaming === true;\n try {\n if (streaming) {\n return await handleStreamingFile(urlOrBase64);\n }\n const file = handleBase64File(urlOrBase64);\n if (!isNil(file)) {\n return file;\n }\n return await handleUrlFile(urlOrBase64);\n } catch (e) {\n console.error(e);\n return null;\n }\n};\n\nfunction parseBase64File(\n propertyValue: string,\n): { extension: string; buffer: Buffer } | null {\n if (!isBase64(propertyValue, { allowMime: true })) {\n return null;\n }\n const matches = propertyValue.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); // example match: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC\n if (!matches || matches?.length !== 3) {\n return null;\n }\n return {\n extension: mimeExtension(matches[1]) || \"bin\",\n buffer: Buffer.from(matches[2], \"base64\"),\n };\n}\n\nfunction handleBase64File(propertyValue: string): ApFile | null {\n const parsed = parseBase64File(propertyValue);\n if (isNil(parsed)) {\n return null;\n }\n return new ApFile(\n `unknown.${parsed.extension}`,\n parsed.buffer,\n parsed.extension,\n );\n}\n\nasync function handleUrlFile(path: string): Promise<ApFile | null> {\n const fileResponse = await fetch(path);\n // A 4xx/5xx body is the server's error page, not the file. handleStreamingFile\n // already refuses one.\n if (!fileResponse.ok) {\n return null;\n }\n\n const filename =\n getFileName(\n path,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n\n return new ApFile(\n filename,\n Buffer.from(await fileResponse.arrayBuffer()),\n extension,\n );\n}\n\nasync function handleStreamingFile(\n propertyValue: string,\n): Promise<ApStreamingFile | null> {\n const parsed = parseBase64File(propertyValue);\n if (!isNil(parsed)) {\n return {\n filename: `unknown.${parsed.extension}`,\n extension: parsed.extension,\n size: parsed.buffer.length,\n body: Readable.from(parsed.buffer),\n };\n }\n\n const fileResponse = await fetch(propertyValue);\n if (!fileResponse.ok || isNil(fileResponse.body)) {\n await fileResponse.body?.cancel();\n return null;\n }\n const filename =\n getFileName(\n propertyValue,\n fileResponse.headers.get(\"content-disposition\"),\n fileResponse.headers.get(\"content-type\") ?? undefined,\n ) ?? \"unknown\";\n const extension = extensionFromFilename(filename);\n const contentEncoding = fileResponse.headers.get(\"content-encoding\");\n const contentLength = Number(fileResponse.headers.get(\"content-length\"));\n // undici transparently decompresses gzip/br/deflate but leaves the compressed\n // Content-Length in place, so it would understate the streamed byte count and\n // truncate the destination. Only trust the size when the body is not encoded.\n const sizeIsTrustworthy =\n (isNil(contentEncoding) || contentEncoding.toLowerCase() === \"identity\") &&\n Number.isInteger(contentLength) &&\n contentLength > 0;\n\n return {\n filename,\n extension,\n size: sizeIsTrustworthy ? contentLength : undefined,\n // @ts-expect-error -- undici streams a Node web ReadableStream body; the DOM fetch types omit the fromWeb overload\n body: Readable.fromWeb(fileResponse.body),\n };\n}\n\nfunction extensionFromFilename(filename: string): string | undefined {\n const parts = filename.split(\".\");\n const last = parts.length > 1 ? parts.pop() : undefined;\n return last ? last : undefined;\n}\n\nfunction getFileName(\n path: string,\n disposition: string | null,\n mimeType: string | undefined,\n): string | null {\n const url = new URL(path);\n if (isNil(disposition)) {\n const fileNameFromUrl =\n url.pathname.includes(\"/\") && url.pathname.split(\"/\").pop()?.includes(\".\")\n ? url.pathname.split(\"/\").pop()\n : null;\n if (!isNil(fileNameFromUrl)) {\n return fileNameFromUrl;\n }\n const resolvedExtension = mimeType ? mimeExtension(mimeType) : null;\n return `unknown.${resolvedExtension ?? \"bin\"}`;\n }\n const utf8FilenameRegex = /filename\\*=UTF-8''([\\w%\\-.]+)(?:; ?|$)/i;\n if (utf8FilenameRegex.test(disposition)) {\n const result = utf8FilenameRegex.exec(disposition);\n if (result && result.length > 1) {\n return decodeURIComponent(result[1]);\n }\n }\n // prevent ReDos attacks by anchoring the ascii regex to string start and\n // slicing off everything before 'filename='\n const filenameStart = disposition.toLowerCase().indexOf(\"filename=\");\n const asciiFilenameRegex = /^filename=([\"']?)(.*?[^\\\\])\\1(?:; ?|$)/i;\n\n if (filenameStart >= 0) {\n const partialDisposition = disposition.slice(filenameStart);\n const matches = asciiFilenameRegex.exec(partialDisposition);\n if (matches != null && matches[2]) {\n return matches[2];\n }\n }\n return null;\n}\n\nfunction mimeExtension(mimeType: string): string | null {\n const normalized = mimeType.split(\";\")[0].trim().toLowerCase();\n return MIME_EXTENSIONS[normalized] ?? null;\n}\n\nconst MIME_EXTENSIONS: Record<string, string> = {\n \"application/json\": \"json\",\n \"application/pdf\": \"pdf\",\n \"application/xml\": \"xml\",\n \"application/zip\": \"zip\",\n \"application/gzip\": \"gz\",\n \"application/x-7z-compressed\": \"7z\",\n \"application/x-tar\": \"tar\",\n \"application/octet-stream\": \"bin\",\n \"application/msword\": \"doc\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n \"docx\",\n \"application/vnd.ms-excel\": \"xls\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": \"xlsx\",\n \"application/vnd.ms-powerpoint\": \"ppt\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\":\n \"pptx\",\n \"application/rtf\": \"rtf\",\n \"application/javascript\": \"js\",\n \"application/x-javascript\": \"js\",\n \"application/x-yaml\": \"yaml\",\n \"application/yaml\": \"yaml\",\n \"application/x-httpd-php\": \"php\",\n \"application/x-sh\": \"sh\",\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/jpg\": \"jpg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n \"image/svg+xml\": \"svg\",\n \"image/bmp\": \"bmp\",\n \"image/tiff\": \"tiff\",\n \"image/x-icon\": \"ico\",\n \"image/vnd.microsoft.icon\": \"ico\",\n \"image/heic\": \"heic\",\n \"image/heif\": \"heif\",\n \"image/avif\": \"avif\",\n \"text/plain\": \"txt\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/csv\": \"csv\",\n \"text/javascript\": \"js\",\n \"text/markdown\": \"md\",\n \"text/xml\": \"xml\",\n \"text/tab-separated-values\": \"tsv\",\n \"text/yaml\": \"yaml\",\n \"audio/mpeg\": \"mp3\",\n \"audio/mp3\": \"mp3\",\n \"audio/mp4\": \"m4a\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/webm\": \"weba\",\n \"audio/flac\": \"flac\",\n \"audio/aac\": \"aac\",\n \"video/mp4\": \"mp4\",\n \"video/mpeg\": \"mpeg\",\n \"video/webm\": \"webm\",\n \"video/quicktime\": \"mov\",\n \"video/x-msvideo\": \"avi\",\n \"video/ogg\": \"ogv\",\n \"font/woff\": \"woff\",\n \"font/woff2\": \"woff2\",\n \"font/ttf\": \"ttf\",\n \"font/otf\": \"otf\",\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/json.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const jsonProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n try {\n if (typeof value === \"object\") {\n return value;\n }\n return JSON.parse(value);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/multi-select.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil, parseToJsonIfPossible } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const multiSelectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value) || Array.isArray(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return undefined;\n }\n const parsed = parseToJsonIfPossible(value);\n return Array.isArray(parsed) ? parsed : [value];\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/number.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const numberProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (value === \"\") {\n return undefined;\n }\n return Number(value);\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/object.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const objectProcessor: ProcessorFn = (_property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch (e) {\n return undefined;\n }\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n return value;\n }\n return undefined;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/text.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { isNil } from \"../../../../core-utils/index.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const textProcessor: ProcessorFn = (property, value) => {\n if (isNil(value)) {\n return value;\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n\n const result = value.toString();\n if (result.length === 0 && !property.required) {\n return undefined;\n }\n return result;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/processors/index.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { PropertyType } from \"../../../../framework/index.js\";\nimport { checkboxProcessor } from \"./checkbox.js\";\nimport { dateTimeProcessor } from \"./date-time.js\";\nimport { fileProcessor } from \"./file.js\";\nimport { jsonProcessor } from \"./json.js\";\nimport { multiSelectProcessor } from \"./multi-select.js\";\nimport { numberProcessor } from \"./number.js\";\nimport { objectProcessor } from \"./object.js\";\nimport { textProcessor } from \"./text.js\";\nimport type { ProcessorFn } from \"./types.js\";\n\nexport const processors: Partial<Record<PropertyType, ProcessorFn>> = {\n JSON: jsonProcessor,\n OBJECT: objectProcessor,\n NUMBER: numberProcessor,\n LONG_TEXT: textProcessor,\n SHORT_TEXT: textProcessor,\n SECRET_TEXT: textProcessor,\n DATE_TIME: dateTimeProcessor,\n FILE: fileProcessor,\n MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n STATIC_MULTI_SELECT_DROPDOWN: multiSelectProcessor,\n CHECKBOX: checkboxProcessor,\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/server/engine/src/lib/variables/props-processor.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport { isNil, isObject } from \"../../../core-utils/index.js\";\nimport type {\n InputPropertyMap,\n PieceAuthProperty,\n PieceProperty,\n PiecePropertyMap,\n StaticPropsValue,\n} from \"../../../framework/index.js\";\nimport {\n DateRangeValue,\n getAuthPropertyForValue,\n PropertyType,\n} from \"../../../framework/index.js\";\nimport { dynamicPropKeys } from \"../helper/dynamic-prop-keys.js\";\nimport { processors } from \"./processors/index.js\";\nimport { arrayZipperProcessor } from \"./processors/array-zipper.js\";\nimport type { AppConnectionValue } from \"../../../core-piece-types/index.js\";\nimport { AUTHENTICATION_PROPERTY_NAME } from \"../../../core-piece-types/index.js\";\nimport type { PropertySettings } from \"../../../../src/host/shared-shim.js\";\n\ntype PropsValidationError = {\n [key: string]: string[] | PropsValidationError | PropsValidationError[];\n};\n\nexport const propsProcessor = {\n applyProcessorsAndValidators: async (\n resolvedInput: StaticPropsValue<PiecePropertyMap>,\n props: InputPropertyMap,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n requireAuth: boolean,\n propertySettings: Record<string, PropertySettings>,\n ): Promise<{\n processedInput: StaticPropsValue<PiecePropertyMap>;\n errors: PropsValidationError;\n }> => {\n let dynamaicPropertiesSchema: Record<string, InputPropertyMap> | undefined =\n undefined;\n if (Object.keys(propertySettings).length > 0) {\n dynamaicPropertiesSchema = Object.fromEntries(\n Object.entries(propertySettings).map(([key, propertySetting]) => [\n key,\n propertySetting.schema,\n ]),\n );\n }\n const processedInput = { ...resolvedInput };\n const errors: PropsValidationError = {};\n const authValue: AppConnectionValue | undefined =\n resolvedInput[AUTHENTICATION_PROPERTY_NAME];\n if (authValue && requireAuth) {\n const authPropsToProcess = getAuthPropsToProcess(authValue, auth);\n if (authPropsToProcess) {\n const { processedInput: authProcessedInput, errors: authErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n resolvedInput[AUTHENTICATION_PROPERTY_NAME],\n authPropsToProcess,\n undefined,\n false,\n {},\n );\n processedInput[AUTHENTICATION_PROPERTY_NAME] = authProcessedInput;\n if (Object.keys(authErrors).length > 0) {\n errors[AUTHENTICATION_PROPERTY_NAME] = authErrors;\n }\n }\n }\n for (const [key, value] of Object.entries(resolvedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n if (property.type === PropertyType.DYNAMIC) {\n const valueWithOriginalKeys = dynamicPropKeys.unescapeInputKeys(value);\n processedInput[key] = valueWithOriginalKeys;\n if (!isNil(dynamaicPropertiesSchema?.[key])) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n valueWithOriginalKeys,\n dynamicPropKeys.unescapePropsKeys(dynamaicPropertiesSchema[key]),\n undefined,\n false,\n {},\n );\n processedInput[key] = itemProcessedInput;\n if (Object.keys(itemErrors).length > 0) {\n errors[key] = itemErrors;\n }\n }\n }\n if (property.type === PropertyType.ARRAY && property.properties) {\n const arrayOfObjects = arrayZipperProcessor(property, value) ?? [];\n const processedArray = [];\n const processedErrors = [];\n for (const item of arrayOfObjects) {\n const { processedInput: itemProcessedInput, errors: itemErrors } =\n await propsProcessor.applyProcessorsAndValidators(\n item,\n property.properties,\n undefined,\n false,\n {},\n );\n processedArray.push(itemProcessedInput);\n processedErrors.push(itemErrors);\n }\n processedInput[key] = processedArray;\n const isThereErrors = processedErrors.some(\n (error) => Object.keys(error).length > 0,\n );\n if (isThereErrors) {\n errors[key] = {\n properties: processedErrors,\n };\n }\n }\n if (!property.required && isNil(processedInput[key])) {\n processedInput[key] = undefined;\n }\n const processor = processors[property.type];\n if (processor) {\n processedInput[key] = await processor(property, processedInput[key]);\n }\n\n const shouldValidate =\n key !== AUTHENTICATION_PROPERTY_NAME &&\n property.type !== PropertyType.MARKDOWN;\n if (!shouldValidate) {\n continue;\n }\n }\n\n for (const [key, value] of Object.entries(processedInput)) {\n const property = props[key];\n if (isNil(property)) {\n continue;\n }\n\n const validationErrors = validateProperty(\n property,\n value,\n resolvedInput[key],\n );\n if (validationErrors.length > 0) {\n errors[key] = validationErrors;\n }\n }\n\n // Streaming file inputs open a live connection when resolved. If any property\n // fails validation the action never runs, so drain those bodies here to avoid\n // leaking connections until GC.\n if (Object.keys(errors).length > 0) {\n destroyOpenStreams(processedInput);\n }\n\n return { processedInput, errors };\n },\n};\n\nfunction destroyOpenStreams(value: unknown): void {\n if (isNil(value) || typeof value !== \"object\" || Buffer.isBuffer(value)) {\n return;\n }\n if (value instanceof Readable) {\n value.destroy();\n return;\n }\n for (const child of Object.values(value)) {\n destroyOpenStreams(child);\n }\n}\n\nexport const validateProperty = (\n property: PieceProperty,\n value: unknown,\n originalValue: unknown,\n): string[] => {\n if (property.type === PropertyType.JSON) {\n if (!property.required && originalValue === \"\") {\n return [];\n }\n if (!isNil(originalValue) && isNil(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n if (!property.required && isNil(value)) {\n return [];\n }\n if (!isObject(value) && !Array.isArray(value)) {\n return [`Expected JSON, received: ${originalValue}`];\n }\n return [];\n }\n\n if (!property.required && isNil(value)) {\n return [];\n }\n\n switch (property.type) {\n case PropertyType.SHORT_TEXT:\n case PropertyType.LONG_TEXT:\n case PropertyType.RICH_TEXT:\n return typeof value === \"string\"\n ? []\n : [`Expected string, received: ${originalValue}`];\n case PropertyType.NUMBER:\n return typeof value === \"number\" && !Number.isNaN(value)\n ? []\n : [`Expected number, received: ${originalValue}`];\n case PropertyType.CHECKBOX:\n return typeof value === \"boolean\"\n ? []\n : [`Expected boolean, received: ${originalValue}`];\n case PropertyType.DATE_TIME:\n return typeof value === \"string\"\n ? []\n : [\n `Invalid datetime format. Expected ISO format (e.g. 2024-03-14T12:00:00.000Z), received: ${originalValue}`,\n ];\n case PropertyType.DATE_RANGE:\n return DateRangeValue.safeParse(value).success\n ? []\n : [`Expected date range, received: ${originalValue}`];\n case PropertyType.ARRAY:\n case PropertyType.MULTI_SELECT_DROPDOWN:\n case PropertyType.STATIC_MULTI_SELECT_DROPDOWN:\n return Array.isArray(value)\n ? []\n : [`Expected array, received: ${originalValue}`];\n case PropertyType.OBJECT:\n return isObject(value)\n ? []\n : [`Expected object, received: ${originalValue}`];\n case PropertyType.FILE:\n return isObject(value)\n ? []\n : [\n `Expected file url or base64 with mimeType, received: ${originalValue}`,\n ];\n default:\n return [];\n }\n};\n\nfunction getAuthPropsToProcess(\n authValue: AppConnectionValue,\n auth: PieceAuthProperty | PieceAuthProperty[] | undefined,\n): null {\n if (isNil(auth)) {\n return null;\n }\n const usedAuthProperty = getAuthPropertyForValue({\n authValueType: authValue.type,\n pieceAuth: auth,\n });\n const doesAuthHaveProps =\n usedAuthProperty?.type === PropertyType.CUSTOM_AUTH ||\n usedAuthProperty?.type === PropertyType.OAUTH2 ||\n usedAuthProperty?.type === PropertyType.OIDC;\n if (doesAuthHaveProps && !isNil(usedAuthProperty?.props)) {\n return usedAuthProperty.props;\n }\n return null;\n}\n"],"mappings":"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"}