@powerhousedao/pieces-framework 6.2.3-dev.23 → 6.2.3-dev.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","names":[],"sources":["../upstream/common/lib/authentication/index.ts","../upstream/common/lib/http/core/http-headers.ts","../upstream/common/lib/http/core/delegating-authentication-converter.ts","../upstream/common/lib/http/core/http-message-body.ts","../upstream/common/lib/http/core/http-method.ts","../upstream/common/lib/http/core/query-params.ts","../upstream/common/lib/http/core/http-request-body.ts","../upstream/common/lib/http/core/http-request.ts","../upstream/common/lib/http/core/http-response.ts","../upstream/common/lib/http/core/http-client.ts","../upstream/common/lib/http/core/base-http-client.ts","../upstream/common/lib/http/core/fetch-http-client.ts","../upstream/common/lib/http/core/http-error.ts","../upstream/common/lib/http/core/http-header.ts","../upstream/common/lib/http/core/media-type.ts","../upstream/common/lib/helpers/index.ts","../upstream/common/lib/polling/index.ts","../upstream/common/lib/stream/index.ts","../upstream/common/lib/validation/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"common.d.ts","names":[],"sources":["../upstream/common/lib/authentication/index.ts","../upstream/common/lib/http/core/http-headers.ts","../upstream/common/lib/http/core/delegating-authentication-converter.ts","../upstream/common/lib/http/core/http-message-body.ts","../upstream/common/lib/http/core/http-method.ts","../upstream/common/lib/http/core/query-params.ts","../upstream/common/lib/http/core/http-request-body.ts","../upstream/common/lib/http/core/http-request.ts","../upstream/common/lib/http/core/http-response.ts","../upstream/common/lib/http/core/http-client.ts","../upstream/common/lib/http/core/base-http-client.ts","../upstream/common/lib/http/core/fetch-http-client.ts","../upstream/common/lib/http/core/http-error.ts","../upstream/common/lib/http/core/http-header.ts","../upstream/common/lib/http/core/media-type.ts","../upstream/common/lib/helpers/index.ts","../upstream/common/lib/polling/index.ts","../upstream/common/lib/stream/index.ts","../upstream/common/lib/validation/index.ts"],"mappings":"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"}
package/dist/common.js CHANGED
@@ -1,5 +1,5 @@
1
- import { n as Property, o as assertNotNullOrUndefined, y as createAction } from "./input-COuhC1I-.js";
2
- import { c as isNil$1, r as tryCatchSync, s as isEmpty } from "./markdown-property-Df2l6_y_.js";
1
+ import { n as Property, o as assertNotNullOrUndefined, y as createAction } from "./input-BHkj_oP5.js";
2
+ import { c as isNil$1, r as tryCatchSync, s as isEmpty } from "./markdown-property-DMfHjEiL.js";
3
3
  import * as z from "zod/mini";
4
4
  import { PassThrough, Readable } from "node:stream";
5
5
  import fs from "node:fs";
@@ -33,6 +33,8 @@ let MediaType = /* @__PURE__ */ function(MediaType) {
33
33
  //#endregion
34
34
  //#region upstream/common/lib/http/core/base-http-client.ts
35
35
  var BaseHttpClient = class {
36
+ baseUrl;
37
+ authenticationConverter;
36
38
  constructor(baseUrl, authenticationConverter) {
37
39
  this.baseUrl = baseUrl;
38
40
  this.authenticationConverter = authenticationConverter;
@@ -50,15 +52,13 @@ var BaseHttpClient = class {
50
52
  };
51
53
  }
52
54
  getHeaders(request) {
53
- let requestHeaders = { [HttpHeader.ACCEPT]: MediaType.APPLICATION_JSON };
55
+ let requestHeaders = { ["Accept"]: "application/json" };
54
56
  if (request.authentication) this.populateAuthentication(request.authentication, requestHeaders);
55
57
  if (request.body) switch (request.headers?.["Content-Type"]) {
56
58
  case "text/csv":
57
- requestHeaders[HttpHeader.CONTENT_TYPE] = MediaType.TEXT_CSV;
58
- break;
59
- default:
60
- requestHeaders[HttpHeader.CONTENT_TYPE] = MediaType.APPLICATION_JSON;
59
+ requestHeaders["Content-Type"] = "text/csv";
61
60
  break;
61
+ default: requestHeaders["Content-Type"] = "application/json";
62
62
  }
63
63
  if (request.headers) requestHeaders = {
64
64
  ...requestHeaders,
@@ -77,8 +77,8 @@ var DelegatingAuthenticationConverter = class {
77
77
  converters;
78
78
  constructor(bearerTokenConverter = new BearerTokenAuthenticationConverter(), basicTokenConverter = new BasicTokenAuthenticationConverter()) {
79
79
  this.converters = {
80
- [AuthenticationType.BEARER_TOKEN]: bearerTokenConverter,
81
- [AuthenticationType.BASIC]: basicTokenConverter
80
+ ["BEARER_TOKEN"]: bearerTokenConverter,
81
+ ["BASIC"]: basicTokenConverter
82
82
  };
83
83
  }
84
84
  convert(authentication, headers) {
@@ -87,7 +87,7 @@ var DelegatingAuthenticationConverter = class {
87
87
  };
88
88
  var BearerTokenAuthenticationConverter = class {
89
89
  convert(authentication, headers) {
90
- headers[HttpHeader.AUTHORIZATION] = `Bearer ${authentication.token}`;
90
+ headers["Authorization"] = `Bearer ${authentication.token}`;
91
91
  return headers;
92
92
  }
93
93
  };
@@ -95,7 +95,7 @@ var BasicTokenAuthenticationConverter = class {
95
95
  convert(authentication, headers) {
96
96
  const credentials = `${authentication.username}:${authentication.password}`;
97
97
  const encoded = Buffer.from(credentials).toString("base64");
98
- headers[HttpHeader.AUTHORIZATION] = `Basic ${encoded}`;
98
+ headers["Authorization"] = `Basic ${encoded}`;
99
99
  return headers;
100
100
  }
101
101
  };
@@ -103,6 +103,7 @@ var BasicTokenAuthenticationConverter = class {
103
103
  //#endregion
104
104
  //#region upstream/common/lib/http/core/http-error.ts
105
105
  var HttpError = class extends Error {
106
+ requestBody;
106
107
  status;
107
108
  responseBody;
108
109
  constructor(requestBody, params) {
@@ -221,7 +222,7 @@ var FetchHttpClient = class extends BaseHttpClient {
221
222
  }
222
223
  };
223
224
  function acceptsRequestBody(method) {
224
- return method !== HttpMethod.GET && method !== HttpMethod.HEAD;
225
+ return method !== "GET" && method !== "HEAD";
225
226
  }
226
227
  function serializeBody(body, headers) {
227
228
  if (isNil(body)) return {
@@ -332,7 +333,7 @@ function isNodeFormData(body) {
332
333
  function isNil(value) {
333
334
  return value === null || value === void 0;
334
335
  }
335
- const MAX_BUFFERED_FORM_DATA_BYTES = 100 * 1024 * 1024;
336
+ const MAX_BUFFERED_FORM_DATA_BYTES = 104857600;
336
337
 
337
338
  //#endregion
338
339
  //#region upstream/common/lib/http/core/http-client.ts
@@ -392,7 +393,8 @@ const CONTENT_TYPE_EXTENSIONS = {
392
393
  "font/otf": "otf"
393
394
  };
394
395
  function contentTypeToExtension(contentType) {
395
- return CONTENT_TYPE_EXTENSIONS[contentType.split(";")[0].trim().toLowerCase()] ?? "";
396
+ const type = contentType.split(";")[0].trim().toLowerCase();
397
+ return CONTENT_TYPE_EXTENSIONS[type] ?? "";
396
398
  }
397
399
  const getAccessTokenOrThrow = (auth) => {
398
400
  const accessToken = auth?.access_token;
@@ -440,7 +442,7 @@ function createCustomApiCallAction({ auth, baseUrl, authMapping, description, di
440
442
  method: Property.StaticDropdown({
441
443
  displayName: "Method",
442
444
  required: true,
443
- defaultValue: HttpMethod.GET,
445
+ defaultValue: "GET",
444
446
  options: { options: Object.values(HttpMethod).map((v) => {
445
447
  return {
446
448
  label: v,
@@ -520,40 +522,38 @@ function createCustomApiCallAction({ auth, baseUrl, authMapping, description, di
520
522
  required: true
521
523
  });
522
524
  break;
523
- case "form_data":
524
- fields["data"] = Property.Array({
525
- displayName: "Form Data",
526
- required: true,
527
- properties: {
528
- fieldName: Property.ShortText({
529
- displayName: "Field Name",
530
- required: true
531
- }),
532
- fieldType: Property.StaticDropdown({
533
- displayName: "Field Type",
534
- required: true,
535
- options: {
536
- disabled: false,
537
- options: [{
538
- label: "Text",
539
- value: "text"
540
- }, {
541
- label: "File",
542
- value: "file"
543
- }]
544
- }
545
- }),
546
- textFieldValue: Property.LongText({
547
- displayName: "Text Field Value",
548
- required: false
549
- }),
550
- fileFieldValue: Property.File({
551
- displayName: "File Field Value",
552
- required: false
553
- })
554
- }
555
- });
556
- break;
525
+ case "form_data": fields["data"] = Property.Array({
526
+ displayName: "Form Data",
527
+ required: true,
528
+ properties: {
529
+ fieldName: Property.ShortText({
530
+ displayName: "Field Name",
531
+ required: true
532
+ }),
533
+ fieldType: Property.StaticDropdown({
534
+ displayName: "Field Type",
535
+ required: true,
536
+ options: {
537
+ disabled: false,
538
+ options: [{
539
+ label: "Text",
540
+ value: "text"
541
+ }, {
542
+ label: "File",
543
+ value: "file"
544
+ }]
545
+ }
546
+ }),
547
+ textFieldValue: Property.LongText({
548
+ displayName: "Text Field Value",
549
+ required: false
550
+ }),
551
+ fileFieldValue: Property.File({
552
+ displayName: "File Field Value",
553
+ required: false
554
+ })
555
+ }
556
+ });
557
557
  }
558
558
  return fields;
559
559
  }
@@ -679,7 +679,7 @@ let DedupeStrategy = /* @__PURE__ */ function(DedupeStrategy) {
679
679
  const pollingHelper = {
680
680
  async poll(polling, { store, auth, propsValue, maxItemsToPoll, files, server }) {
681
681
  switch (polling.strategy) {
682
- case DedupeStrategy.TIMEBASED: {
682
+ case 0: {
683
683
  const lastEpochMilliSeconds = await store.get("lastPoll");
684
684
  if (isNil$1(lastEpochMilliSeconds)) throw new Error("lastPoll doesn't exist in the store.");
685
685
  const items = await polling.items({
@@ -693,7 +693,7 @@ const pollingHelper = {
693
693
  await store.put("lastPoll", newLastEpochMilliSeconds);
694
694
  return items.filter((f) => f.epochMilliSeconds > lastEpochMilliSeconds).map((item) => item.data);
695
695
  }
696
- case DedupeStrategy.LAST_ITEM: {
696
+ case 1: {
697
697
  const lastItemId = await store.get("lastItem");
698
698
  const items = await polling.items({
699
699
  store,
@@ -716,11 +716,11 @@ const pollingHelper = {
716
716
  },
717
717
  async onEnable(polling, { store, auth, propsValue, server, isRepublish }) {
718
718
  switch (polling.strategy) {
719
- case DedupeStrategy.TIMEBASED:
719
+ case 0:
720
720
  if (isRepublish && !isNil$1(await store.get("lastPoll"))) break;
721
721
  await store.put("lastPoll", Date.now());
722
722
  break;
723
- case DedupeStrategy.LAST_ITEM: {
723
+ case 1: {
724
724
  if (isRepublish && !isNil$1(await store.get("lastItem"))) break;
725
725
  const lastItemId = (await polling.items({
726
726
  store,
@@ -737,14 +737,14 @@ const pollingHelper = {
737
737
  },
738
738
  async onDisable(polling, params) {
739
739
  switch (polling.strategy) {
740
- case DedupeStrategy.TIMEBASED:
741
- case DedupeStrategy.LAST_ITEM: return;
740
+ case 0:
741
+ case 1: return;
742
742
  }
743
743
  },
744
744
  async test(polling, { auth, propsValue, store, files, server }) {
745
745
  let items = [];
746
746
  switch (polling.strategy) {
747
- case DedupeStrategy.TIMEBASED:
747
+ case 0:
748
748
  items = await polling.items({
749
749
  store,
750
750
  auth,
@@ -753,16 +753,14 @@ const pollingHelper = {
753
753
  server
754
754
  });
755
755
  break;
756
- case DedupeStrategy.LAST_ITEM:
757
- items = await polling.items({
758
- store,
759
- auth,
760
- propsValue,
761
- lastItemId: null,
762
- files,
763
- server
764
- });
765
- break;
756
+ case 1: items = await polling.items({
757
+ store,
758
+ auth,
759
+ propsValue,
760
+ lastItemId: null,
761
+ files,
762
+ server
763
+ });
766
764
  }
767
765
  return getFirstFiveOrAll(items.map((item) => item.data));
768
766
  }
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","names":["isNil","FormData","isNil"],"sources":["../upstream/common/lib/authentication/index.ts","../upstream/common/lib/http/core/http-header.ts","../upstream/common/lib/http/core/media-type.ts","../upstream/common/lib/http/core/base-http-client.ts","../upstream/common/lib/http/core/delegating-authentication-converter.ts","../upstream/common/lib/http/core/http-error.ts","../upstream/common/lib/http/core/http-method.ts","../upstream/common/lib/http/core/fetch-http-client.ts","../upstream/common/lib/http/core/http-client.ts","../upstream/common/lib/helpers/index.ts","../upstream/common/lib/polling/index.ts","../upstream/common/lib/stream/index.ts","../upstream/common/lib/validation/index.ts"],"sourcesContent":["// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/authentication/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport type Authentication = BearerTokenAuthentication | BasicAuthentication;\n\nexport enum AuthenticationType {\n BEARER_TOKEN = \"BEARER_TOKEN\",\n BASIC = \"BASIC\",\n}\n\nexport type BaseAuthentication<T extends AuthenticationType> = {\n type: T;\n};\n\nexport type BearerTokenAuthentication =\n BaseAuthentication<AuthenticationType.BEARER_TOKEN> & {\n token: string;\n };\n\nexport type BasicAuthentication =\n BaseAuthentication<AuthenticationType.BASIC> & {\n username: string;\n password: string;\n };\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/http-header.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport enum HttpHeader {\n AUTHORIZATION = \"Authorization\",\n ACCEPT = \"Accept\",\n API_KEY = \"x-api-key\",\n CONTENT_TYPE = \"Content-Type\",\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/media-type.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport enum MediaType {\n APPLICATION_JSON = \"application/json\",\n TEXT_CSV = \"text/csv\",\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/base-http-client.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { Authentication } from \"../../authentication/index.js\";\nimport type { DelegatingAuthenticationConverter } from \"./delegating-authentication-converter.js\";\nimport type { HttpClient } from \"./http-client.js\";\nimport { HttpHeader } from \"./http-header.js\";\nimport type { HttpHeaders } from \"./http-headers.js\";\nimport type { HttpMessageBody } from \"./http-message-body.js\";\nimport type { HttpRequest } from \"./http-request.js\";\nimport type { HttpRequestBody } from \"./http-request-body.js\";\nimport type { HttpResponse } from \"./http-response.js\";\nimport { MediaType } from \"./media-type.js\";\n\nexport abstract class BaseHttpClient implements HttpClient {\n constructor(\n private readonly baseUrl: string,\n private readonly authenticationConverter: DelegatingAuthenticationConverter,\n ) {}\n\n abstract sendRequest<\n RequestBody extends HttpMessageBody,\n ResponseBody extends HttpMessageBody,\n >(request: HttpRequest<RequestBody>): Promise<HttpResponse<ResponseBody>>;\n\n protected getUrl<RequestBody extends HttpMessageBody>(\n request: HttpRequest<RequestBody>,\n ): {\n urlWithoutQueryParams: string;\n queryParams: URLSearchParams;\n } {\n const url = new URL(`${this.baseUrl}${request.url}`);\n const urlWithoutQueryParams = `${url.origin}${url.pathname}`;\n const queryParams = new URLSearchParams();\n // Extract query parameters\n url.searchParams.forEach((value, key) => {\n queryParams.append(key, value);\n });\n return {\n urlWithoutQueryParams,\n queryParams,\n };\n }\n\n protected getHeaders<RequestBody extends HttpRequestBody>(\n request: HttpRequest<RequestBody>,\n ): HttpHeaders {\n let requestHeaders: HttpHeaders = {\n [HttpHeader.ACCEPT]: MediaType.APPLICATION_JSON,\n };\n\n if (request.authentication) {\n this.populateAuthentication(request.authentication, requestHeaders);\n }\n\n if (request.body) {\n switch (request.headers?.[\"Content-Type\"]) {\n case \"text/csv\":\n requestHeaders[HttpHeader.CONTENT_TYPE] = MediaType.TEXT_CSV;\n break;\n\n default:\n requestHeaders[HttpHeader.CONTENT_TYPE] = MediaType.APPLICATION_JSON;\n break;\n }\n }\n if (request.headers) {\n requestHeaders = { ...requestHeaders, ...request.headers };\n }\n return requestHeaders;\n }\n\n private populateAuthentication(\n authentication: Authentication,\n headers: HttpHeaders,\n ): void {\n this.authenticationConverter.convert(authentication, headers);\n }\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/delegating-authentication-converter.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { HttpHeaders } from \"./http-headers.js\";\nimport { HttpHeader } from \"./http-header.js\";\nimport type {\n Authentication,\n BasicAuthentication,\n BearerTokenAuthentication,\n} from \"../../authentication/index.js\";\nimport { AuthenticationType } from \"../../authentication/index.js\";\n\nexport class DelegatingAuthenticationConverter implements AuthenticationConverter<Authentication> {\n private readonly converters: Record<\n AuthenticationType,\n AuthenticationConverter<any>\n >;\n\n constructor(\n bearerTokenConverter = new BearerTokenAuthenticationConverter(),\n basicTokenConverter = new BasicTokenAuthenticationConverter(),\n ) {\n this.converters = {\n [AuthenticationType.BEARER_TOKEN]: bearerTokenConverter,\n [AuthenticationType.BASIC]: basicTokenConverter,\n };\n }\n\n convert(authentication: Authentication, headers: HttpHeaders): HttpHeaders {\n const converter = this.converters[authentication.type];\n return converter.convert(authentication, headers);\n }\n}\n\nclass BearerTokenAuthenticationConverter implements AuthenticationConverter<BearerTokenAuthentication> {\n convert(\n authentication: BearerTokenAuthentication,\n headers: HttpHeaders,\n ): HttpHeaders {\n headers[HttpHeader.AUTHORIZATION] = `Bearer ${authentication.token}`;\n return headers;\n }\n}\n\nclass BasicTokenAuthenticationConverter implements AuthenticationConverter<BasicAuthentication> {\n convert(\n authentication: BasicAuthentication,\n headers: HttpHeaders,\n ): HttpHeaders {\n const credentials = `${authentication.username}:${authentication.password}`;\n const encoded = Buffer.from(credentials).toString(\"base64\");\n headers[HttpHeader.AUTHORIZATION] = `Basic ${encoded}`;\n return headers;\n }\n}\n\ntype AuthenticationConverter<T extends Authentication> = {\n convert: (authentication: T, headers: HttpHeaders) => HttpHeaders;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/http-error.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport class HttpError extends Error {\n private readonly status: number;\n private readonly responseBody: unknown;\n\n constructor(\n private readonly requestBody: unknown,\n params: HttpErrorParams,\n ) {\n const status = params.status || 500;\n const responseBody = Buffer.isBuffer(params.responseBody)\n ? params.responseBody.toString()\n : params.responseBody;\n\n super(\n JSON.stringify({\n response: {\n status: status,\n body: responseBody,\n },\n request: {\n body: requestBody,\n },\n }),\n );\n\n this.status = status;\n this.responseBody = responseBody;\n }\n\n public errorMessage() {\n return {\n response: {\n status: this.status,\n body: this.responseBody,\n },\n request: {\n body: this.requestBody,\n },\n };\n }\n\n get response() {\n return {\n status: this.status,\n body: this.responseBody,\n };\n }\n\n get request() {\n return {\n body: this.requestBody,\n };\n }\n}\n\nexport function toFailsafeOutput({ error, requestBody }: FailsafeOutputParams) {\n if (error instanceof HttpError) {\n return error.errorMessage();\n }\n return {\n response: {\n status: 0,\n body: error instanceof Error ? error.message : String(error),\n },\n request: {\n body: requestBody,\n },\n };\n}\n\nexport type HttpErrorParams = {\n status: number;\n responseBody: unknown;\n};\n\nexport type FailsafeOutputParams = {\n error: unknown;\n requestBody: unknown;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/http-method.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport enum HttpMethod {\n GET = \"GET\",\n POST = \"POST\",\n PATCH = \"PATCH\",\n PUT = \"PUT\",\n DELETE = \"DELETE\",\n HEAD = \"HEAD\",\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/fetch-http-client.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { PassThrough, Readable } from \"node:stream\";\nimport { tryCatchSync } from \"../../../../core-utils/index.js\";\nimport { BaseHttpClient } from \"./base-http-client.js\";\nimport { DelegatingAuthenticationConverter } from \"./delegating-authentication-converter.js\";\nimport { HttpError } from \"./http-error.js\";\nimport type { HttpHeaders } from \"./http-headers.js\";\nimport type { HttpMessageBody } from \"./http-message-body.js\";\nimport { HttpMethod } from \"./http-method.js\";\nimport type { HttpRequest } from \"./http-request.js\";\nimport type { HttpRequestBody } from \"./http-request-body.js\";\nimport type { HttpResponse } from \"./http-response.js\";\n\n// Native-fetch implementation of HttpClient. SSRF egress is enforced by the engine's\n// in-process dns.lookup / Socket.connect guards (see ssrf-guard.ts) when\n// AP_NETWORK_MODE=STRICT, which cover fetch via net.connect — so there is no egress\n// proxy wiring here. A caller may still pass options.dispatcher for a user-configured\n// per-request proxy (the HTTP piece's \"Use Proxy\" feature).\nexport class FetchHttpClient extends BaseHttpClient {\n constructor(\n baseUrl = \"\",\n authenticationConverter: DelegatingAuthenticationConverter = new DelegatingAuthenticationConverter(),\n ) {\n super(baseUrl, authenticationConverter);\n }\n\n async sendRequest<ResponseBody extends HttpMessageBody = any>(\n request: HttpRequest<HttpRequestBody>,\n options?: SendRequestOptions,\n ): Promise<HttpResponse<ResponseBody>> {\n const { urlWithoutQueryParams, queryParams: urlQueryParams } =\n this.getUrl(request);\n const headers = this.getHeaders(request);\n const queryParams = request.queryParams ?? {};\n for (const [key, value] of Object.entries(queryParams)) {\n urlQueryParams.append(key, value);\n }\n const queryString = urlQueryParams.toString();\n const finalUrl = queryString\n ? `${urlWithoutQueryParams}?${queryString}`\n : urlWithoutQueryParams;\n\n const responseType = request.responseType ?? \"json\";\n const followRedirects = request.followRedirects ?? true;\n const retries = request.retries ?? 0;\n\n const { body, extraHeaders, isStream } = acceptsRequestBody(request.method)\n ? serializeBody(request.body, headers)\n : { body: undefined, extraHeaders: {}, isStream: false };\n const finalHeaders = normalizeHeaders({ ...headers, ...extraHeaders });\n\n const response = await sendWithRetries(\n async () => {\n const controller = new AbortController();\n const timeoutId =\n request.timeout && request.timeout > 0\n ? setTimeout(() => controller.abort(), request.timeout)\n : undefined;\n try {\n const init: FetchInit = {\n method: request.method.toString(),\n headers: finalHeaders,\n body,\n redirect: followRedirects ? \"follow\" : \"manual\",\n signal: controller.signal,\n };\n if (isStream) {\n init.duplex = \"half\";\n }\n // A caller-supplied undici Dispatcher (e.g. a ProxyAgent) for per-request proxying.\n if (options?.dispatcher !== undefined) {\n init.dispatcher = options.dispatcher;\n }\n return await fetch(finalUrl, init);\n } finally {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n }\n },\n isStream ? 0 : retries,\n );\n\n const successCeiling = followRedirects ? 300 : 400;\n if (response.status < 200 || response.status >= successCeiling) {\n // A stream response can't carry an error message usefully; read the error body as text.\n const errorBody = await parseResponseBody(\n response,\n responseType === \"stream\" ? \"text\" : responseType,\n );\n const httpError = new HttpError(request.body, {\n status: response.status,\n responseBody: errorBody,\n });\n throw httpError;\n }\n\n const responseBody = await parseResponseBody(response, responseType);\n return {\n status: response.status,\n headers: toHttpHeaders(response.headers),\n body: responseBody as ResponseBody,\n };\n }\n}\n\nexport function acceptsRequestBody(method: HttpMethod): boolean {\n return method !== HttpMethod.GET && method !== HttpMethod.HEAD;\n}\n\nfunction serializeBody(\n body: HttpRequestBody | undefined,\n headers: HttpHeaders,\n): {\n body: BodyInit | undefined;\n extraHeaders: Record<string, string>;\n isStream: boolean;\n} {\n if (isNil(body)) {\n return { body: undefined, extraHeaders: {}, isStream: false };\n }\n if (isNodeFormData(body)) {\n // A buffered multipart body lets undici send Content-Length; a streamed one is sent\n // chunked without a length, which strict multipart parsers reject with a 500. Streaming\n // with an explicit content-length header is not an option: undici stalls or throws\n // RequestContentLengthMismatchError on stream bodies that carry one.\n const buffered = bufferFormDataIfSafe(body);\n if (buffered !== null) {\n return {\n body: buffered as unknown as BodyInit,\n extraHeaders: body.getHeaders(),\n isStream: false,\n };\n }\n const stream = new PassThrough();\n body.on(\"error\", (error) => stream.destroy(error));\n body.pipe(stream);\n return {\n body: stream as unknown as BodyInit,\n extraHeaders: body.getHeaders(),\n isStream: true,\n };\n }\n if (body instanceof Readable) {\n return {\n body: body as unknown as BodyInit,\n extraHeaders: {},\n isStream: true,\n };\n }\n // Already a wire-ready body — pass through untouched.\n if (\n typeof body === \"string\" ||\n Buffer.isBuffer(body) ||\n body instanceof URLSearchParams ||\n body instanceof ArrayBuffer ||\n (typeof FormData !== \"undefined\" && body instanceof FormData) ||\n (typeof Blob !== \"undefined\" && body instanceof Blob)\n ) {\n return { body: body as BodyInit, extraHeaders: {}, isStream: false };\n }\n const contentType = headers[\"Content-Type\"] ?? headers[\"content-type\"] ?? \"\";\n if (contentType.includes(\"application/x-www-form-urlencoded\")) {\n return {\n body: new URLSearchParams(body as Record<string, string>).toString(),\n extraHeaders: {},\n isStream: false,\n };\n }\n return { body: JSON.stringify(body), extraHeaders: {}, isStream: false };\n}\n\nasync function parseResponseBody(\n response: Response,\n responseType: ResponseType,\n): Promise<unknown> {\n switch (responseType) {\n case \"arraybuffer\":\n return Buffer.from(await response.arrayBuffer());\n case \"stream\":\n // undici streams a Node web ReadableStream body; the DOM fetch types omit the fromWeb overload\n return isNil(response.body)\n ? Readable.from([])\n : Readable.fromWeb(\n response.body as unknown as Parameters<typeof Readable.fromWeb>[0],\n );\n case \"blob\":\n return await response.blob();\n case \"text\":\n return await response.text();\n case \"json\":\n default: {\n const text = await response.text();\n if (text.length === 0) {\n return undefined;\n }\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n }\n}\n\nasync function sendWithRetries(\n fn: () => Promise<Response>,\n retries: number,\n): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt <= retries; attempt++) {\n try {\n const response = await fn();\n if (response.status >= 500 && attempt < retries) {\n await backoff(attempt);\n continue;\n }\n return response;\n } catch (error) {\n lastError = error;\n if (attempt < retries) {\n await backoff(attempt);\n continue;\n }\n throw error;\n }\n }\n throw lastError;\n}\n\nfunction backoff(attempt: number): Promise<void> {\n const delayMs = Math.min(1000 * 2 ** attempt, 30000);\n return new Promise((resolve) => setTimeout(resolve, delayMs));\n}\n\nfunction normalizeHeaders(headers: HttpHeaders): Record<string, string> {\n const entriesByLowerCaseKey = new Map<string, [string, string]>();\n for (const [key, value] of Object.entries(headers)) {\n if (value === undefined) {\n continue;\n }\n entriesByLowerCaseKey.set(key.toLowerCase(), [\n key,\n Array.isArray(value) ? value.join(\", \") : value,\n ]);\n }\n return Object.fromEntries(entriesByLowerCaseKey.values());\n}\n\nfunction toHttpHeaders(headers: Headers): HttpHeaders {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n\nfunction bufferFormDataIfSafe(body: NodeFormData): Buffer | null {\n if (\n !body.hasKnownLength() ||\n body.getLengthSync() > MAX_BUFFERED_FORM_DATA_BYTES\n ) {\n return null;\n }\n // getBuffer throws on stream parts appended with an explicit knownLength; fall back to streaming.\n const { data } = tryCatchSync(() => body.getBuffer());\n return data;\n}\n\nfunction isNodeFormData(body: unknown): body is NodeFormData {\n return (\n typeof body === \"object\" &&\n body !== null &&\n typeof (body as NodeFormData).getHeaders === \"function\" &&\n typeof (body as NodeFormData).pipe === \"function\" &&\n typeof (body as NodeFormData).on === \"function\"\n );\n}\n\nfunction isNil(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\ntype NodeFormData = {\n getHeaders: () => Record<string, string>;\n pipe: (...args: unknown[]) => unknown;\n on: (event: \"error\", listener: (error: Error) => void) => unknown;\n hasKnownLength: () => boolean;\n getLengthSync: () => number;\n getBuffer: () => Buffer;\n};\n\nconst MAX_BUFFERED_FORM_DATA_BYTES = 100 * 1024 * 1024;\n\ntype ResponseType = NonNullable<HttpRequest[\"responseType\"]>;\n\ntype FetchInit = RequestInit & { duplex?: \"half\"; dispatcher?: unknown };\n\nexport type SendRequestOptions = {\n dispatcher?: unknown;\n};\n\nexport { FetchHttpClient as AxiosHttpClient };\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/http-client.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { SendRequestOptions } from \"./fetch-http-client.js\";\nimport { FetchHttpClient } from \"./fetch-http-client.js\";\nimport type { HttpMessageBody } from \"./http-message-body.js\";\nimport type { HttpRequest } from \"./http-request.js\";\nimport type { HttpRequestBody } from \"./http-request-body.js\";\nimport type { HttpResponse } from \"./http-response.js\";\n\nexport type HttpClient = {\n sendRequest<\n RequestBody extends HttpRequestBody,\n ResponseBody extends HttpMessageBody,\n >(\n request: HttpRequest<RequestBody>,\n options?: SendRequestOptions,\n ): Promise<HttpResponse<ResponseBody>>;\n};\n\nexport const httpClient = new FetchHttpClient();\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/helpers/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type {\n ActionClassification,\n OAuth2PropertyValue,\n PieceAuthProperty,\n StaticDropdownProperty,\n StaticPropsValue,\n InputPropertyMap,\n FilesService,\n AppConnectionValueForAuthProperty,\n ExtractPieceAuthPropertyTypeForMethods,\n ApFile,\n} from \"../../../framework/index.js\";\nimport { Property, createAction } from \"../../../framework/index.js\";\nimport type { HttpHeaders, HttpRequest, QueryParams } from \"../http/index.js\";\nimport {\n HttpMethod,\n acceptsRequestBody,\n httpClient,\n toFailsafeOutput,\n} from \"../http/index.js\";\nimport {\n assertNotNullOrUndefined,\n isEmpty,\n isNil,\n} from \"../../../core-utils/index.js\";\nimport fs from \"node:fs\";\n// Self-contained content-type → file-extension lookup, replacing the heavy\n// `mime-types`/`mime-db` dependency (~134 KB inlined into every piece bundle).\n// Covers the common types returned for binary HTTP responses; unknown → ''.\nconst CONTENT_TYPE_EXTENSIONS: Record<string, string> = {\n \"application/json\": \"json\",\n \"application/pdf\": \"pdf\",\n \"application/xml\": \"xml\",\n \"text/xml\": \"xml\",\n \"application/zip\": \"zip\",\n \"application/gzip\": \"gz\",\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-www-form-urlencoded\": \"bin\",\n \"text/plain\": \"txt\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/csv\": \"csv\",\n \"text/calendar\": \"ics\",\n \"text/markdown\": \"md\",\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpeg\",\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 \"audio/mpeg\": \"mp3\",\n \"audio/mp4\": \"m4a\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/webm\": \"weba\",\n \"video/mp4\": \"mp4\",\n \"video/mpeg\": \"mpeg\",\n \"video/webm\": \"webm\",\n \"video/quicktime\": \"mov\",\n \"video/x-msvideo\": \"avi\",\n \"font/woff\": \"woff\",\n \"font/woff2\": \"woff2\",\n \"font/ttf\": \"ttf\",\n \"font/otf\": \"otf\",\n};\n\nfunction contentTypeToExtension(contentType: string): string {\n const type = contentType.split(\";\")[0].trim().toLowerCase();\n return CONTENT_TYPE_EXTENSIONS[type] ?? \"\";\n}\nimport FormData from \"form-data\";\n\nexport const getAccessTokenOrThrow = (\n auth: OAuth2PropertyValue | undefined,\n): string => {\n const accessToken = auth?.access_token;\n\n if (accessToken === undefined) {\n throw new Error(\"Invalid bearer token\");\n }\n\n return accessToken;\n};\nconst joinBaseUrlWithRelativePath = ({\n baseUrl,\n relativePath,\n}: {\n baseUrl: string;\n relativePath: string;\n}) => {\n const baseUrlWithSlash = baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`;\n const relativePathWithoutSlash = relativePath.startsWith(\"/\")\n ? relativePath.slice(1)\n : relativePath;\n return `${baseUrlWithSlash}${relativePathWithoutSlash}`;\n};\n\nconst getBaseUrlForDescription = <\n PieceAuth extends PieceAuthProperty | PieceAuthProperty[] | undefined,\n>(\n baseUrl: BaseUrlGetter<PieceAuth>,\n auth?: AppConnectionValueForAuthProperty<\n ExtractPieceAuthPropertyTypeForMethods<PieceAuth>\n >,\n) => {\n const exampleBaseUrl = `https://api.example.com`;\n try {\n const baseUrlValue = auth ? baseUrl(auth) : undefined;\n const baseUrlValueWithoutTrailingSlash = baseUrlValue?.endsWith(\"/\")\n ? baseUrlValue.slice(0, -1)\n : baseUrlValue;\n return baseUrlValueWithoutTrailingSlash ?? exampleBaseUrl;\n } catch (error) {\n //If baseUrl fails we stil want to return a valid baseUrl for description\n {\n return exampleBaseUrl;\n }\n }\n};\ntype BaseUrlGetter<\n PieceAuth extends PieceAuthProperty | PieceAuthProperty[] | undefined,\n> = (\n auth?: AppConnectionValueForAuthProperty<\n ExtractPieceAuthPropertyTypeForMethods<PieceAuth>\n >,\n) => string;\nexport function createCustomApiCallAction<\n PieceAuth extends PieceAuthProperty | PieceAuthProperty[] | undefined,\n>({\n auth,\n baseUrl,\n authMapping,\n description,\n displayName,\n name,\n props,\n extraProps,\n authLocation = \"headers\",\n classification = \"WRITE\",\n}: {\n auth?: PieceAuth;\n baseUrl: BaseUrlGetter<PieceAuth>;\n authMapping?: (\n auth: AppConnectionValueForAuthProperty<\n ExtractPieceAuthPropertyTypeForMethods<PieceAuth>\n >,\n propsValue: StaticPropsValue<any>,\n ) => Promise<HttpHeaders | QueryParams>;\n // add description as a parameter that can be null\n description?: string | null;\n displayName?: string | null;\n name?: string | null;\n props?: {\n url?: Partial<ReturnType<typeof Property.ShortText>>;\n method?: Partial<StaticDropdownProperty<HttpMethod, boolean>>;\n headers?: Partial<ReturnType<typeof Property.Object>>;\n queryParams?: Partial<ReturnType<typeof Property.Object>>;\n body?: Partial<ReturnType<typeof Property.Json>>;\n response_is_binary?: Partial<ReturnType<typeof Property.Checkbox>>;\n failsafe?: Partial<ReturnType<typeof Property.Checkbox>>;\n timeout?: Partial<ReturnType<typeof Property.Number>>;\n followRedirects?: Partial<ReturnType<typeof Property.Checkbox>>;\n };\n extraProps?: InputPropertyMap;\n authLocation?: \"headers\" | \"queryParams\";\n // The method is caller-supplied at runtime, so a single tag has to assume mutation.\n classification?: ActionClassification;\n}) {\n return createAction({\n audience: \"human\",\n name: name ? name : \"custom_api_call\",\n classification,\n displayName: displayName ? displayName : \"Custom API Call\",\n description: description\n ? description\n : \"Make a custom API call to a specific endpoint\",\n auth,\n requireAuth: auth ? true : false,\n props: {\n url: Property.DynamicProperties({\n auth,\n displayName: \"\",\n required: true,\n refreshers: [],\n props: async ({ auth }) => {\n return {\n url: Property.ShortText({\n displayName: \"URL\",\n description: `Full URL, or a path relative to ${getBaseUrlForDescription(baseUrl, auth)}`,\n required: true,\n placeholder: \"/resource\",\n defaultValue: auth ? baseUrl(auth) : \"\",\n ...(props?.url ?? {}),\n }),\n };\n },\n }),\n method: Property.StaticDropdown({\n displayName: \"Method\",\n required: true,\n defaultValue: HttpMethod.GET,\n options: {\n options: Object.values(HttpMethod).map((v) => {\n return {\n label: v,\n value: v,\n };\n }),\n },\n ...(props?.method ?? {}),\n }),\n headers: Property.Object({\n displayName: \"Headers\",\n description:\n \"Authorization headers are injected automatically from your connection.\",\n required: false,\n ...(props?.headers ?? {}),\n }),\n queryParams: Property.Object({\n displayName: \"Query Parameters\",\n description: \"Appended to the URL as ?key=value.\",\n required: false,\n ...(props?.queryParams ?? {}),\n }),\n body_type: Property.Dropdown({\n auth,\n displayName: \"Body Type\",\n required: false,\n defaultValue: \"none\",\n refreshers: [\"method\"],\n options: async ({ method }) => {\n if (!acceptsRequestBody(method as HttpMethod)) {\n return {\n disabled: true,\n placeholder: \"Not available for GET or HEAD requests\",\n options: [],\n };\n }\n return {\n disabled: false,\n options: [\n { label: \"None\", value: \"none\" },\n { label: \"JSON\", value: \"json\" },\n { label: \"Form Data\", value: \"form_data\" },\n { label: \"Raw\", value: \"raw\" },\n ],\n };\n },\n }),\n body: Property.DynamicProperties({\n auth,\n displayName: \"Body\",\n refreshers: [\"body_type\", \"method\"],\n required: false,\n props: async ({ body_type, method }) => {\n if (!body_type || !acceptsRequestBody(method as HttpMethod))\n return {};\n\n const bodyTypeInput = body_type as unknown as string;\n\n const fields: InputPropertyMap = {};\n\n switch (bodyTypeInput) {\n case \"none\":\n break;\n case \"json\":\n fields[\"data\"] = Property.Json({\n displayName: \"JSON Body\",\n required: true,\n ...(props?.body ?? {}),\n });\n break;\n case \"raw\":\n fields[\"data\"] = Property.LongText({\n displayName: \"Raw Body\",\n required: true,\n });\n break;\n case \"form_data\":\n fields[\"data\"] = Property.Array({\n displayName: \"Form Data\",\n required: true,\n properties: {\n fieldName: Property.ShortText({\n displayName: \"Field Name\",\n required: true,\n }),\n fieldType: Property.StaticDropdown({\n displayName: \"Field Type\",\n required: true,\n options: {\n disabled: false,\n options: [\n { label: \"Text\", value: \"text\" },\n { label: \"File\", value: \"file\" },\n ],\n },\n }),\n textFieldValue: Property.LongText({\n displayName: \"Text Field Value\",\n required: false,\n }),\n fileFieldValue: Property.File({\n displayName: \"File Field Value\",\n required: false,\n }),\n },\n });\n break;\n }\n return fields;\n },\n }),\n response_is_binary: Property.Checkbox({\n displayName: \"Response is Binary\",\n description: \"Enable for files like PDFs, images, etc.\",\n required: false,\n defaultValue: false,\n advanced: true,\n ...(props?.response_is_binary ?? {}),\n }),\n failsafe: Property.Checkbox({\n displayName: \"Return Error as Output\",\n description:\n \"On a failed request, output the error instead of failing the step.\",\n required: false,\n advanced: true,\n ...(props?.failsafe ?? {}),\n }),\n timeout: Property.Number({\n displayName: \"Timeout\",\n description:\n \"Seconds to wait for a response. Empty: up to the flow limit (10 min).\",\n required: false,\n advanced: true,\n ...(props?.timeout ?? {}),\n }),\n followRedirects: Property.Checkbox({\n displayName: \"Follow redirects\",\n description:\n \"Follow 3xx redirects instead of returning them as the response.\",\n required: false,\n defaultValue: false,\n advanced: true,\n ...(props?.followRedirects ?? {}),\n }),\n ...extraProps,\n },\n\n run: async (context) => {\n const {\n method,\n url,\n headers,\n queryParams,\n body,\n body_type,\n failsafe,\n timeout,\n response_is_binary,\n followRedirects,\n } = context.propsValue;\n assertNotNullOrUndefined(method, \"Method\");\n assertNotNullOrUndefined(url, \"URL\");\n\n const authValue = !isNil(authMapping)\n ? await authMapping(context.auth, context.propsValue)\n : {};\n\n const urlValue = url[\"url\"] as string;\n const fullUrl =\n urlValue.startsWith(\"http://\") || urlValue.startsWith(\"https://\")\n ? urlValue\n : joinBaseUrlWithRelativePath({\n baseUrl: baseUrl(context.auth),\n relativePath: urlValue,\n });\n const request: HttpRequest = {\n method,\n url: fullUrl,\n headers: {\n ...((headers ?? {}) as HttpHeaders),\n ...(authLocation === \"headers\" ? authValue : {}),\n },\n queryParams: {\n ...(authLocation === \"queryParams\" ? (authValue as QueryParams) : {}),\n ...((queryParams as QueryParams) ?? {}),\n },\n timeout: timeout ? timeout * 1000 : 0,\n followRedirects,\n };\n\n // Set response type to arraybuffer if binary response is expected\n if (response_is_binary) {\n request.responseType = \"arraybuffer\";\n }\n\n if (body) {\n if (body_type && body_type !== \"none\") {\n const bodyInput = body[\"data\"];\n if (body_type === \"form_data\") {\n const formBodyInput = bodyInput as Array<{\n fieldName: string;\n fieldType: \"text\" | \"file\";\n textFieldValue?: string;\n fileFieldValue?: ApFile;\n }>;\n\n const formData = new FormData();\n\n for (const {\n fieldName,\n fieldType,\n textFieldValue,\n fileFieldValue,\n } of formBodyInput) {\n if (fieldType === \"text\" && !isEmpty(textFieldValue)) {\n formData.append(fieldName, textFieldValue);\n } else if (fieldType === \"file\" && !isEmpty(fileFieldValue)) {\n formData.append(fieldName, fileFieldValue!.data, {\n filename: fileFieldValue?.filename,\n });\n }\n }\n request.body = formData;\n request.headers = { ...request.headers, ...formData.getHeaders() };\n } else {\n request.body = bodyInput;\n }\n } else if (!body_type) {\n request.body = body;\n }\n }\n\n try {\n const response = await httpClient.sendRequest(request);\n return await handleBinaryResponse(\n context.files,\n response.body,\n response.status,\n response.headers,\n response_is_binary,\n );\n } catch (error) {\n if (failsafe) {\n return toFailsafeOutput({ error, requestBody: request.body });\n }\n throw error;\n }\n },\n });\n}\n\nexport function is_chromium_installed(): boolean {\n const chromiumPath = \"/usr/bin/chromium\";\n return fs.existsSync(chromiumPath);\n}\n\nconst handleBinaryResponse = async (\n files: FilesService,\n bodyContent: string | ArrayBuffer | Buffer,\n status: number,\n headers?: HttpHeaders,\n isBinary?: boolean,\n) => {\n let body;\n\n if (isBinary && isBinaryBody(bodyContent)) {\n const contentTypeValue = Array.isArray(headers?.[\"content-type\"])\n ? headers[\"content-type\"][0]\n : headers?.[\"content-type\"];\n const fileExtension: string =\n contentTypeToExtension(contentTypeValue ?? \"\") || \"txt\";\n\n let bufferData: Buffer;\n if (bodyContent instanceof ArrayBuffer) {\n bufferData = Buffer.from(new Uint8Array(bodyContent));\n } else if (Buffer.isBuffer(bodyContent)) {\n bufferData = bodyContent;\n } else {\n bufferData = Buffer.from(bodyContent);\n }\n\n body = await files.write({\n fileName: `output.${fileExtension}`,\n data: bufferData,\n });\n } else {\n body = bodyContent;\n }\n\n return { status, headers, body };\n};\n\nconst isBinaryBody = (body: string | ArrayBuffer | Buffer) => {\n return body instanceof ArrayBuffer || Buffer.isBuffer(body);\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/polling/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type {\n AppConnectionValueForAuthProperty,\n FilesService,\n ServerContext,\n Store,\n} from \"../../../framework/index.js\";\nimport { isNil } from \"../../../core-utils/index.js\";\n\ninterface TimebasedPolling<AuthValue, PropsValue> {\n strategy: DedupeStrategy.TIMEBASED;\n items: (params: {\n auth: AuthValue;\n store: Store;\n propsValue: PropsValue;\n lastFetchEpochMS: number;\n server?: ServerContext;\n }) => Promise<\n {\n epochMilliSeconds: number;\n data: unknown;\n }[]\n >;\n}\n\ninterface LastItemPolling<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n> {\n strategy: DedupeStrategy.LAST_ITEM;\n items: (params: {\n auth: AuthValue;\n store: Store;\n files?: FilesService;\n propsValue: PropsValue;\n lastItemId: unknown;\n server?: ServerContext;\n }) => Promise<\n {\n id: unknown;\n data: unknown;\n }[]\n >;\n}\n\nexport enum DedupeStrategy {\n TIMEBASED,\n LAST_ITEM,\n}\n\nexport type Polling<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n> =\n | TimebasedPolling<AuthValue, PropsValue>\n | LastItemPolling<AuthValue, PropsValue>;\n\nexport const pollingHelper = {\n async poll<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n >(\n polling: Polling<AuthValue, PropsValue>,\n {\n store,\n auth,\n propsValue,\n maxItemsToPoll,\n files,\n server,\n }: {\n store: Store;\n auth: AuthValue;\n propsValue: PropsValue;\n files: FilesService;\n maxItemsToPoll?: number;\n server?: ServerContext;\n },\n ): Promise<unknown[]> {\n switch (polling.strategy) {\n case DedupeStrategy.TIMEBASED: {\n const lastEpochMilliSeconds = await store.get<number>(\"lastPoll\");\n if (isNil(lastEpochMilliSeconds)) {\n throw new Error(\"lastPoll doesn't exist in the store.\");\n }\n const items = await polling.items({\n store,\n auth,\n propsValue,\n lastFetchEpochMS: lastEpochMilliSeconds,\n server,\n });\n const newLastEpochMilliSeconds = items.reduce(\n (acc, item) => Math.max(acc, item.epochMilliSeconds),\n lastEpochMilliSeconds,\n );\n await store.put(\"lastPoll\", newLastEpochMilliSeconds);\n return items\n .filter((f) => f.epochMilliSeconds > lastEpochMilliSeconds)\n .map((item) => item.data);\n }\n case DedupeStrategy.LAST_ITEM: {\n const lastItemId = await store.get<unknown>(\"lastItem\");\n const items = await polling.items({\n store,\n auth,\n propsValue,\n lastItemId,\n files,\n server,\n });\n\n const lastItemIndex = items.findIndex((f) => f.id === lastItemId);\n let newItems = [];\n if (isNil(lastItemId) || lastItemIndex == -1) {\n newItems = items ?? [];\n } else {\n newItems = items?.slice(0, lastItemIndex) ?? [];\n }\n // Sorted from newest to oldest\n if (!isNil(maxItemsToPoll)) {\n // Get the last polling.maxItemsToPoll items\n newItems = newItems.slice(-maxItemsToPoll);\n }\n const newLastItem = newItems?.[0]?.id;\n if (!isNil(newLastItem)) {\n await store.put(\"lastItem\", newLastItem);\n }\n return newItems.map((item) => item.data);\n }\n }\n },\n async onEnable<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n >(\n polling: Polling<AuthValue, PropsValue>,\n {\n store,\n auth,\n propsValue,\n server,\n isRepublish,\n }: {\n store: Store;\n auth: AuthValue;\n propsValue: PropsValue;\n server?: ServerContext;\n isRepublish?: boolean;\n },\n ): Promise<void> {\n switch (polling.strategy) {\n case DedupeStrategy.TIMEBASED: {\n if (isRepublish && !isNil(await store.get<number>(\"lastPoll\"))) {\n break;\n }\n await store.put(\"lastPoll\", Date.now());\n break;\n }\n case DedupeStrategy.LAST_ITEM: {\n if (isRepublish && !isNil(await store.get(\"lastItem\"))) {\n break;\n }\n const items = await polling.items({\n store,\n auth,\n propsValue,\n lastItemId: null,\n server,\n });\n const lastItemId = items?.[0]?.id;\n if (!isNil(lastItemId)) {\n await store.put(\"lastItem\", lastItemId);\n } else {\n await store.delete(\"lastItem\");\n }\n break;\n }\n }\n },\n async onDisable<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n >(\n polling: Polling<AuthValue, PropsValue>,\n params: { store: Store; auth: AuthValue; propsValue: PropsValue },\n ): Promise<void> {\n switch (polling.strategy) {\n case DedupeStrategy.TIMEBASED:\n case DedupeStrategy.LAST_ITEM:\n return;\n }\n },\n async test<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n >(\n polling: Polling<AuthValue, PropsValue>,\n {\n auth,\n propsValue,\n store,\n files,\n server,\n }: {\n store: Store;\n auth: AuthValue;\n propsValue: PropsValue;\n files: FilesService;\n server?: ServerContext;\n },\n ): Promise<unknown[]> {\n let items = [];\n switch (polling.strategy) {\n case DedupeStrategy.TIMEBASED: {\n items = await polling.items({\n store,\n auth,\n propsValue,\n lastFetchEpochMS: 0,\n server,\n });\n break;\n }\n case DedupeStrategy.LAST_ITEM: {\n items = await polling.items({\n store,\n auth,\n propsValue,\n lastItemId: null,\n files,\n server,\n });\n break;\n }\n }\n return getFirstFiveOrAll(items.map((item) => item.data));\n },\n};\n\nfunction getFirstFiveOrAll(array: unknown[]) {\n if (array.length <= 5) {\n return array;\n } else {\n return array.slice(0, 5);\n }\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/stream/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport type { ApFile, ApStreamingFile } from \"../../../framework/index.js\";\n\nfunction toStreamingBody(file: ApStreamingFile | ApFile): {\n body: Readable;\n size: number | undefined;\n} {\n if (\"body\" in file) {\n return { body: file.body, size: file.size };\n }\n return { body: Readable.from(file.data), size: file.data.length };\n}\n\nasync function* readChunks({\n readable,\n chunkSize,\n}: {\n readable: Readable;\n chunkSize: number;\n}): AsyncGenerator<Buffer> {\n let pending: Buffer[] = [];\n let pendingLength = 0;\n if (!Number.isInteger(chunkSize) || chunkSize <= 0) {\n throw new Error(\"chunkSize must be a positive integer\");\n }\n for await (const data of readable) {\n pending.push(Buffer.isBuffer(data) ? data : Buffer.from(data));\n pendingLength += pending[pending.length - 1].length;\n while (pendingLength >= chunkSize) {\n const combined =\n pending.length === 1 ? pending[0] : Buffer.concat(pending);\n yield combined.subarray(0, chunkSize);\n const rest = combined.subarray(chunkSize);\n pending = rest.length > 0 ? [rest] : [];\n pendingLength = rest.length;\n }\n }\n if (pendingLength > 0) {\n yield pending.length === 1 ? pending[0] : Buffer.concat(pending);\n }\n}\n\nexport const streamUtils = { readChunks, toStreamingBody };\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/validation/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport * as z from \"zod/mini\";\n\nexport const propsValidation = {\n async validateZod<T extends Record<string, unknown>>(\n props: T,\n schema: Partial<Record<keyof T, z.core.$ZodType>>,\n ): Promise<void> {\n const schemaObj = z.object(\n Object.entries(schema).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: value,\n }),\n {},\n ),\n );\n\n const result = await z.safeParseAsync(schemaObj, props);\n if (!result.success) {\n const errors = result.error.issues.reduce<Record<string, string>>(\n (acc, issue) => ({\n ...acc,\n [issue.path.join(\".\")]: issue.message,\n }),\n {},\n );\n throw new Error(JSON.stringify({ errors }, null, 2));\n }\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"common.js","names":["isNil","FormData","isNil"],"sources":["../upstream/common/lib/authentication/index.ts","../upstream/common/lib/http/core/http-header.ts","../upstream/common/lib/http/core/media-type.ts","../upstream/common/lib/http/core/base-http-client.ts","../upstream/common/lib/http/core/delegating-authentication-converter.ts","../upstream/common/lib/http/core/http-error.ts","../upstream/common/lib/http/core/http-method.ts","../upstream/common/lib/http/core/fetch-http-client.ts","../upstream/common/lib/http/core/http-client.ts","../upstream/common/lib/helpers/index.ts","../upstream/common/lib/polling/index.ts","../upstream/common/lib/stream/index.ts","../upstream/common/lib/validation/index.ts"],"sourcesContent":["// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/authentication/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport type Authentication = BearerTokenAuthentication | BasicAuthentication;\n\nexport enum AuthenticationType {\n BEARER_TOKEN = \"BEARER_TOKEN\",\n BASIC = \"BASIC\",\n}\n\nexport type BaseAuthentication<T extends AuthenticationType> = {\n type: T;\n};\n\nexport type BearerTokenAuthentication =\n BaseAuthentication<AuthenticationType.BEARER_TOKEN> & {\n token: string;\n };\n\nexport type BasicAuthentication =\n BaseAuthentication<AuthenticationType.BASIC> & {\n username: string;\n password: string;\n };\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/http-header.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport enum HttpHeader {\n AUTHORIZATION = \"Authorization\",\n ACCEPT = \"Accept\",\n API_KEY = \"x-api-key\",\n CONTENT_TYPE = \"Content-Type\",\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/media-type.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport enum MediaType {\n APPLICATION_JSON = \"application/json\",\n TEXT_CSV = \"text/csv\",\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/base-http-client.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { Authentication } from \"../../authentication/index.js\";\nimport type { DelegatingAuthenticationConverter } from \"./delegating-authentication-converter.js\";\nimport type { HttpClient } from \"./http-client.js\";\nimport { HttpHeader } from \"./http-header.js\";\nimport type { HttpHeaders } from \"./http-headers.js\";\nimport type { HttpMessageBody } from \"./http-message-body.js\";\nimport type { HttpRequest } from \"./http-request.js\";\nimport type { HttpRequestBody } from \"./http-request-body.js\";\nimport type { HttpResponse } from \"./http-response.js\";\nimport { MediaType } from \"./media-type.js\";\n\nexport abstract class BaseHttpClient implements HttpClient {\n constructor(\n private readonly baseUrl: string,\n private readonly authenticationConverter: DelegatingAuthenticationConverter,\n ) {}\n\n abstract sendRequest<\n RequestBody extends HttpMessageBody,\n ResponseBody extends HttpMessageBody,\n >(request: HttpRequest<RequestBody>): Promise<HttpResponse<ResponseBody>>;\n\n protected getUrl<RequestBody extends HttpMessageBody>(\n request: HttpRequest<RequestBody>,\n ): {\n urlWithoutQueryParams: string;\n queryParams: URLSearchParams;\n } {\n const url = new URL(`${this.baseUrl}${request.url}`);\n const urlWithoutQueryParams = `${url.origin}${url.pathname}`;\n const queryParams = new URLSearchParams();\n // Extract query parameters\n url.searchParams.forEach((value, key) => {\n queryParams.append(key, value);\n });\n return {\n urlWithoutQueryParams,\n queryParams,\n };\n }\n\n protected getHeaders<RequestBody extends HttpRequestBody>(\n request: HttpRequest<RequestBody>,\n ): HttpHeaders {\n let requestHeaders: HttpHeaders = {\n [HttpHeader.ACCEPT]: MediaType.APPLICATION_JSON,\n };\n\n if (request.authentication) {\n this.populateAuthentication(request.authentication, requestHeaders);\n }\n\n if (request.body) {\n switch (request.headers?.[\"Content-Type\"]) {\n case \"text/csv\":\n requestHeaders[HttpHeader.CONTENT_TYPE] = MediaType.TEXT_CSV;\n break;\n\n default:\n requestHeaders[HttpHeader.CONTENT_TYPE] = MediaType.APPLICATION_JSON;\n break;\n }\n }\n if (request.headers) {\n requestHeaders = { ...requestHeaders, ...request.headers };\n }\n return requestHeaders;\n }\n\n private populateAuthentication(\n authentication: Authentication,\n headers: HttpHeaders,\n ): void {\n this.authenticationConverter.convert(authentication, headers);\n }\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/delegating-authentication-converter.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { HttpHeaders } from \"./http-headers.js\";\nimport { HttpHeader } from \"./http-header.js\";\nimport type {\n Authentication,\n BasicAuthentication,\n BearerTokenAuthentication,\n} from \"../../authentication/index.js\";\nimport { AuthenticationType } from \"../../authentication/index.js\";\n\nexport class DelegatingAuthenticationConverter implements AuthenticationConverter<Authentication> {\n private readonly converters: Record<\n AuthenticationType,\n AuthenticationConverter<any>\n >;\n\n constructor(\n bearerTokenConverter = new BearerTokenAuthenticationConverter(),\n basicTokenConverter = new BasicTokenAuthenticationConverter(),\n ) {\n this.converters = {\n [AuthenticationType.BEARER_TOKEN]: bearerTokenConverter,\n [AuthenticationType.BASIC]: basicTokenConverter,\n };\n }\n\n convert(authentication: Authentication, headers: HttpHeaders): HttpHeaders {\n const converter = this.converters[authentication.type];\n return converter.convert(authentication, headers);\n }\n}\n\nclass BearerTokenAuthenticationConverter implements AuthenticationConverter<BearerTokenAuthentication> {\n convert(\n authentication: BearerTokenAuthentication,\n headers: HttpHeaders,\n ): HttpHeaders {\n headers[HttpHeader.AUTHORIZATION] = `Bearer ${authentication.token}`;\n return headers;\n }\n}\n\nclass BasicTokenAuthenticationConverter implements AuthenticationConverter<BasicAuthentication> {\n convert(\n authentication: BasicAuthentication,\n headers: HttpHeaders,\n ): HttpHeaders {\n const credentials = `${authentication.username}:${authentication.password}`;\n const encoded = Buffer.from(credentials).toString(\"base64\");\n headers[HttpHeader.AUTHORIZATION] = `Basic ${encoded}`;\n return headers;\n }\n}\n\ntype AuthenticationConverter<T extends Authentication> = {\n convert: (authentication: T, headers: HttpHeaders) => HttpHeaders;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/http-error.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport class HttpError extends Error {\n private readonly status: number;\n private readonly responseBody: unknown;\n\n constructor(\n private readonly requestBody: unknown,\n params: HttpErrorParams,\n ) {\n const status = params.status || 500;\n const responseBody = Buffer.isBuffer(params.responseBody)\n ? params.responseBody.toString()\n : params.responseBody;\n\n super(\n JSON.stringify({\n response: {\n status: status,\n body: responseBody,\n },\n request: {\n body: requestBody,\n },\n }),\n );\n\n this.status = status;\n this.responseBody = responseBody;\n }\n\n public errorMessage() {\n return {\n response: {\n status: this.status,\n body: this.responseBody,\n },\n request: {\n body: this.requestBody,\n },\n };\n }\n\n get response() {\n return {\n status: this.status,\n body: this.responseBody,\n };\n }\n\n get request() {\n return {\n body: this.requestBody,\n };\n }\n}\n\nexport function toFailsafeOutput({ error, requestBody }: FailsafeOutputParams) {\n if (error instanceof HttpError) {\n return error.errorMessage();\n }\n return {\n response: {\n status: 0,\n body: error instanceof Error ? error.message : String(error),\n },\n request: {\n body: requestBody,\n },\n };\n}\n\nexport type HttpErrorParams = {\n status: number;\n responseBody: unknown;\n};\n\nexport type FailsafeOutputParams = {\n error: unknown;\n requestBody: unknown;\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/http-method.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nexport enum HttpMethod {\n GET = \"GET\",\n POST = \"POST\",\n PATCH = \"PATCH\",\n PUT = \"PUT\",\n DELETE = \"DELETE\",\n HEAD = \"HEAD\",\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/fetch-http-client.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { PassThrough, Readable } from \"node:stream\";\nimport { tryCatchSync } from \"../../../../core-utils/index.js\";\nimport { BaseHttpClient } from \"./base-http-client.js\";\nimport { DelegatingAuthenticationConverter } from \"./delegating-authentication-converter.js\";\nimport { HttpError } from \"./http-error.js\";\nimport type { HttpHeaders } from \"./http-headers.js\";\nimport type { HttpMessageBody } from \"./http-message-body.js\";\nimport { HttpMethod } from \"./http-method.js\";\nimport type { HttpRequest } from \"./http-request.js\";\nimport type { HttpRequestBody } from \"./http-request-body.js\";\nimport type { HttpResponse } from \"./http-response.js\";\n\n// Native-fetch implementation of HttpClient. SSRF egress is enforced by the engine's\n// in-process dns.lookup / Socket.connect guards (see ssrf-guard.ts) when\n// AP_NETWORK_MODE=STRICT, which cover fetch via net.connect — so there is no egress\n// proxy wiring here. A caller may still pass options.dispatcher for a user-configured\n// per-request proxy (the HTTP piece's \"Use Proxy\" feature).\nexport class FetchHttpClient extends BaseHttpClient {\n constructor(\n baseUrl = \"\",\n authenticationConverter: DelegatingAuthenticationConverter = new DelegatingAuthenticationConverter(),\n ) {\n super(baseUrl, authenticationConverter);\n }\n\n async sendRequest<ResponseBody extends HttpMessageBody = any>(\n request: HttpRequest<HttpRequestBody>,\n options?: SendRequestOptions,\n ): Promise<HttpResponse<ResponseBody>> {\n const { urlWithoutQueryParams, queryParams: urlQueryParams } =\n this.getUrl(request);\n const headers = this.getHeaders(request);\n const queryParams = request.queryParams ?? {};\n for (const [key, value] of Object.entries(queryParams)) {\n urlQueryParams.append(key, value);\n }\n const queryString = urlQueryParams.toString();\n const finalUrl = queryString\n ? `${urlWithoutQueryParams}?${queryString}`\n : urlWithoutQueryParams;\n\n const responseType = request.responseType ?? \"json\";\n const followRedirects = request.followRedirects ?? true;\n const retries = request.retries ?? 0;\n\n const { body, extraHeaders, isStream } = acceptsRequestBody(request.method)\n ? serializeBody(request.body, headers)\n : { body: undefined, extraHeaders: {}, isStream: false };\n const finalHeaders = normalizeHeaders({ ...headers, ...extraHeaders });\n\n const response = await sendWithRetries(\n async () => {\n const controller = new AbortController();\n const timeoutId =\n request.timeout && request.timeout > 0\n ? setTimeout(() => controller.abort(), request.timeout)\n : undefined;\n try {\n const init: FetchInit = {\n method: request.method.toString(),\n headers: finalHeaders,\n body,\n redirect: followRedirects ? \"follow\" : \"manual\",\n signal: controller.signal,\n };\n if (isStream) {\n init.duplex = \"half\";\n }\n // A caller-supplied undici Dispatcher (e.g. a ProxyAgent) for per-request proxying.\n if (options?.dispatcher !== undefined) {\n init.dispatcher = options.dispatcher;\n }\n return await fetch(finalUrl, init);\n } finally {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n }\n },\n isStream ? 0 : retries,\n );\n\n const successCeiling = followRedirects ? 300 : 400;\n if (response.status < 200 || response.status >= successCeiling) {\n // A stream response can't carry an error message usefully; read the error body as text.\n const errorBody = await parseResponseBody(\n response,\n responseType === \"stream\" ? \"text\" : responseType,\n );\n const httpError = new HttpError(request.body, {\n status: response.status,\n responseBody: errorBody,\n });\n throw httpError;\n }\n\n const responseBody = await parseResponseBody(response, responseType);\n return {\n status: response.status,\n headers: toHttpHeaders(response.headers),\n body: responseBody as ResponseBody,\n };\n }\n}\n\nexport function acceptsRequestBody(method: HttpMethod): boolean {\n return method !== HttpMethod.GET && method !== HttpMethod.HEAD;\n}\n\nfunction serializeBody(\n body: HttpRequestBody | undefined,\n headers: HttpHeaders,\n): {\n body: BodyInit | undefined;\n extraHeaders: Record<string, string>;\n isStream: boolean;\n} {\n if (isNil(body)) {\n return { body: undefined, extraHeaders: {}, isStream: false };\n }\n if (isNodeFormData(body)) {\n // A buffered multipart body lets undici send Content-Length; a streamed one is sent\n // chunked without a length, which strict multipart parsers reject with a 500. Streaming\n // with an explicit content-length header is not an option: undici stalls or throws\n // RequestContentLengthMismatchError on stream bodies that carry one.\n const buffered = bufferFormDataIfSafe(body);\n if (buffered !== null) {\n return {\n body: buffered as unknown as BodyInit,\n extraHeaders: body.getHeaders(),\n isStream: false,\n };\n }\n const stream = new PassThrough();\n body.on(\"error\", (error) => stream.destroy(error));\n body.pipe(stream);\n return {\n body: stream as unknown as BodyInit,\n extraHeaders: body.getHeaders(),\n isStream: true,\n };\n }\n if (body instanceof Readable) {\n return {\n body: body as unknown as BodyInit,\n extraHeaders: {},\n isStream: true,\n };\n }\n // Already a wire-ready body — pass through untouched.\n if (\n typeof body === \"string\" ||\n Buffer.isBuffer(body) ||\n body instanceof URLSearchParams ||\n body instanceof ArrayBuffer ||\n (typeof FormData !== \"undefined\" && body instanceof FormData) ||\n (typeof Blob !== \"undefined\" && body instanceof Blob)\n ) {\n return { body: body as BodyInit, extraHeaders: {}, isStream: false };\n }\n const contentType = headers[\"Content-Type\"] ?? headers[\"content-type\"] ?? \"\";\n if (contentType.includes(\"application/x-www-form-urlencoded\")) {\n return {\n body: new URLSearchParams(body as Record<string, string>).toString(),\n extraHeaders: {},\n isStream: false,\n };\n }\n return { body: JSON.stringify(body), extraHeaders: {}, isStream: false };\n}\n\nasync function parseResponseBody(\n response: Response,\n responseType: ResponseType,\n): Promise<unknown> {\n switch (responseType) {\n case \"arraybuffer\":\n return Buffer.from(await response.arrayBuffer());\n case \"stream\":\n // undici streams a Node web ReadableStream body; the DOM fetch types omit the fromWeb overload\n return isNil(response.body)\n ? Readable.from([])\n : Readable.fromWeb(\n response.body as unknown as Parameters<typeof Readable.fromWeb>[0],\n );\n case \"blob\":\n return await response.blob();\n case \"text\":\n return await response.text();\n case \"json\":\n default: {\n const text = await response.text();\n if (text.length === 0) {\n return undefined;\n }\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n }\n}\n\nasync function sendWithRetries(\n fn: () => Promise<Response>,\n retries: number,\n): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt <= retries; attempt++) {\n try {\n const response = await fn();\n if (response.status >= 500 && attempt < retries) {\n await backoff(attempt);\n continue;\n }\n return response;\n } catch (error) {\n lastError = error;\n if (attempt < retries) {\n await backoff(attempt);\n continue;\n }\n throw error;\n }\n }\n throw lastError;\n}\n\nfunction backoff(attempt: number): Promise<void> {\n const delayMs = Math.min(1000 * 2 ** attempt, 30000);\n return new Promise((resolve) => setTimeout(resolve, delayMs));\n}\n\nfunction normalizeHeaders(headers: HttpHeaders): Record<string, string> {\n const entriesByLowerCaseKey = new Map<string, [string, string]>();\n for (const [key, value] of Object.entries(headers)) {\n if (value === undefined) {\n continue;\n }\n entriesByLowerCaseKey.set(key.toLowerCase(), [\n key,\n Array.isArray(value) ? value.join(\", \") : value,\n ]);\n }\n return Object.fromEntries(entriesByLowerCaseKey.values());\n}\n\nfunction toHttpHeaders(headers: Headers): HttpHeaders {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n\nfunction bufferFormDataIfSafe(body: NodeFormData): Buffer | null {\n if (\n !body.hasKnownLength() ||\n body.getLengthSync() > MAX_BUFFERED_FORM_DATA_BYTES\n ) {\n return null;\n }\n // getBuffer throws on stream parts appended with an explicit knownLength; fall back to streaming.\n const { data } = tryCatchSync(() => body.getBuffer());\n return data;\n}\n\nfunction isNodeFormData(body: unknown): body is NodeFormData {\n return (\n typeof body === \"object\" &&\n body !== null &&\n typeof (body as NodeFormData).getHeaders === \"function\" &&\n typeof (body as NodeFormData).pipe === \"function\" &&\n typeof (body as NodeFormData).on === \"function\"\n );\n}\n\nfunction isNil(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\ntype NodeFormData = {\n getHeaders: () => Record<string, string>;\n pipe: (...args: unknown[]) => unknown;\n on: (event: \"error\", listener: (error: Error) => void) => unknown;\n hasKnownLength: () => boolean;\n getLengthSync: () => number;\n getBuffer: () => Buffer;\n};\n\nconst MAX_BUFFERED_FORM_DATA_BYTES = 100 * 1024 * 1024;\n\ntype ResponseType = NonNullable<HttpRequest[\"responseType\"]>;\n\ntype FetchInit = RequestInit & { duplex?: \"half\"; dispatcher?: unknown };\n\nexport type SendRequestOptions = {\n dispatcher?: unknown;\n};\n\nexport { FetchHttpClient as AxiosHttpClient };\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/http/core/http-client.ts. MIT; see ../../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type { SendRequestOptions } from \"./fetch-http-client.js\";\nimport { FetchHttpClient } from \"./fetch-http-client.js\";\nimport type { HttpMessageBody } from \"./http-message-body.js\";\nimport type { HttpRequest } from \"./http-request.js\";\nimport type { HttpRequestBody } from \"./http-request-body.js\";\nimport type { HttpResponse } from \"./http-response.js\";\n\nexport type HttpClient = {\n sendRequest<\n RequestBody extends HttpRequestBody,\n ResponseBody extends HttpMessageBody,\n >(\n request: HttpRequest<RequestBody>,\n options?: SendRequestOptions,\n ): Promise<HttpResponse<ResponseBody>>;\n};\n\nexport const httpClient = new FetchHttpClient();\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/helpers/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type {\n ActionClassification,\n OAuth2PropertyValue,\n PieceAuthProperty,\n StaticDropdownProperty,\n StaticPropsValue,\n InputPropertyMap,\n FilesService,\n AppConnectionValueForAuthProperty,\n ExtractPieceAuthPropertyTypeForMethods,\n ApFile,\n} from \"../../../framework/index.js\";\nimport { Property, createAction } from \"../../../framework/index.js\";\nimport type { HttpHeaders, HttpRequest, QueryParams } from \"../http/index.js\";\nimport {\n HttpMethod,\n acceptsRequestBody,\n httpClient,\n toFailsafeOutput,\n} from \"../http/index.js\";\nimport {\n assertNotNullOrUndefined,\n isEmpty,\n isNil,\n} from \"../../../core-utils/index.js\";\nimport fs from \"node:fs\";\n// Self-contained content-type → file-extension lookup, replacing the heavy\n// `mime-types`/`mime-db` dependency (~134 KB inlined into every piece bundle).\n// Covers the common types returned for binary HTTP responses; unknown → ''.\nconst CONTENT_TYPE_EXTENSIONS: Record<string, string> = {\n \"application/json\": \"json\",\n \"application/pdf\": \"pdf\",\n \"application/xml\": \"xml\",\n \"text/xml\": \"xml\",\n \"application/zip\": \"zip\",\n \"application/gzip\": \"gz\",\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-www-form-urlencoded\": \"bin\",\n \"text/plain\": \"txt\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/csv\": \"csv\",\n \"text/calendar\": \"ics\",\n \"text/markdown\": \"md\",\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpeg\",\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 \"audio/mpeg\": \"mp3\",\n \"audio/mp4\": \"m4a\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/webm\": \"weba\",\n \"video/mp4\": \"mp4\",\n \"video/mpeg\": \"mpeg\",\n \"video/webm\": \"webm\",\n \"video/quicktime\": \"mov\",\n \"video/x-msvideo\": \"avi\",\n \"font/woff\": \"woff\",\n \"font/woff2\": \"woff2\",\n \"font/ttf\": \"ttf\",\n \"font/otf\": \"otf\",\n};\n\nfunction contentTypeToExtension(contentType: string): string {\n const type = contentType.split(\";\")[0].trim().toLowerCase();\n return CONTENT_TYPE_EXTENSIONS[type] ?? \"\";\n}\nimport FormData from \"form-data\";\n\nexport const getAccessTokenOrThrow = (\n auth: OAuth2PropertyValue | undefined,\n): string => {\n const accessToken = auth?.access_token;\n\n if (accessToken === undefined) {\n throw new Error(\"Invalid bearer token\");\n }\n\n return accessToken;\n};\nconst joinBaseUrlWithRelativePath = ({\n baseUrl,\n relativePath,\n}: {\n baseUrl: string;\n relativePath: string;\n}) => {\n const baseUrlWithSlash = baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`;\n const relativePathWithoutSlash = relativePath.startsWith(\"/\")\n ? relativePath.slice(1)\n : relativePath;\n return `${baseUrlWithSlash}${relativePathWithoutSlash}`;\n};\n\nconst getBaseUrlForDescription = <\n PieceAuth extends PieceAuthProperty | PieceAuthProperty[] | undefined,\n>(\n baseUrl: BaseUrlGetter<PieceAuth>,\n auth?: AppConnectionValueForAuthProperty<\n ExtractPieceAuthPropertyTypeForMethods<PieceAuth>\n >,\n) => {\n const exampleBaseUrl = `https://api.example.com`;\n try {\n const baseUrlValue = auth ? baseUrl(auth) : undefined;\n const baseUrlValueWithoutTrailingSlash = baseUrlValue?.endsWith(\"/\")\n ? baseUrlValue.slice(0, -1)\n : baseUrlValue;\n return baseUrlValueWithoutTrailingSlash ?? exampleBaseUrl;\n } catch (error) {\n //If baseUrl fails we stil want to return a valid baseUrl for description\n {\n return exampleBaseUrl;\n }\n }\n};\ntype BaseUrlGetter<\n PieceAuth extends PieceAuthProperty | PieceAuthProperty[] | undefined,\n> = (\n auth?: AppConnectionValueForAuthProperty<\n ExtractPieceAuthPropertyTypeForMethods<PieceAuth>\n >,\n) => string;\nexport function createCustomApiCallAction<\n PieceAuth extends PieceAuthProperty | PieceAuthProperty[] | undefined,\n>({\n auth,\n baseUrl,\n authMapping,\n description,\n displayName,\n name,\n props,\n extraProps,\n authLocation = \"headers\",\n classification = \"WRITE\",\n}: {\n auth?: PieceAuth;\n baseUrl: BaseUrlGetter<PieceAuth>;\n authMapping?: (\n auth: AppConnectionValueForAuthProperty<\n ExtractPieceAuthPropertyTypeForMethods<PieceAuth>\n >,\n propsValue: StaticPropsValue<any>,\n ) => Promise<HttpHeaders | QueryParams>;\n // add description as a parameter that can be null\n description?: string | null;\n displayName?: string | null;\n name?: string | null;\n props?: {\n url?: Partial<ReturnType<typeof Property.ShortText>>;\n method?: Partial<StaticDropdownProperty<HttpMethod, boolean>>;\n headers?: Partial<ReturnType<typeof Property.Object>>;\n queryParams?: Partial<ReturnType<typeof Property.Object>>;\n body?: Partial<ReturnType<typeof Property.Json>>;\n response_is_binary?: Partial<ReturnType<typeof Property.Checkbox>>;\n failsafe?: Partial<ReturnType<typeof Property.Checkbox>>;\n timeout?: Partial<ReturnType<typeof Property.Number>>;\n followRedirects?: Partial<ReturnType<typeof Property.Checkbox>>;\n };\n extraProps?: InputPropertyMap;\n authLocation?: \"headers\" | \"queryParams\";\n // The method is caller-supplied at runtime, so a single tag has to assume mutation.\n classification?: ActionClassification;\n}) {\n return createAction({\n audience: \"human\",\n name: name ? name : \"custom_api_call\",\n classification,\n displayName: displayName ? displayName : \"Custom API Call\",\n description: description\n ? description\n : \"Make a custom API call to a specific endpoint\",\n auth,\n requireAuth: auth ? true : false,\n props: {\n url: Property.DynamicProperties({\n auth,\n displayName: \"\",\n required: true,\n refreshers: [],\n props: async ({ auth }) => {\n return {\n url: Property.ShortText({\n displayName: \"URL\",\n description: `Full URL, or a path relative to ${getBaseUrlForDescription(baseUrl, auth)}`,\n required: true,\n placeholder: \"/resource\",\n defaultValue: auth ? baseUrl(auth) : \"\",\n ...(props?.url ?? {}),\n }),\n };\n },\n }),\n method: Property.StaticDropdown({\n displayName: \"Method\",\n required: true,\n defaultValue: HttpMethod.GET,\n options: {\n options: Object.values(HttpMethod).map((v) => {\n return {\n label: v,\n value: v,\n };\n }),\n },\n ...(props?.method ?? {}),\n }),\n headers: Property.Object({\n displayName: \"Headers\",\n description:\n \"Authorization headers are injected automatically from your connection.\",\n required: false,\n ...(props?.headers ?? {}),\n }),\n queryParams: Property.Object({\n displayName: \"Query Parameters\",\n description: \"Appended to the URL as ?key=value.\",\n required: false,\n ...(props?.queryParams ?? {}),\n }),\n body_type: Property.Dropdown({\n auth,\n displayName: \"Body Type\",\n required: false,\n defaultValue: \"none\",\n refreshers: [\"method\"],\n options: async ({ method }) => {\n if (!acceptsRequestBody(method as HttpMethod)) {\n return {\n disabled: true,\n placeholder: \"Not available for GET or HEAD requests\",\n options: [],\n };\n }\n return {\n disabled: false,\n options: [\n { label: \"None\", value: \"none\" },\n { label: \"JSON\", value: \"json\" },\n { label: \"Form Data\", value: \"form_data\" },\n { label: \"Raw\", value: \"raw\" },\n ],\n };\n },\n }),\n body: Property.DynamicProperties({\n auth,\n displayName: \"Body\",\n refreshers: [\"body_type\", \"method\"],\n required: false,\n props: async ({ body_type, method }) => {\n if (!body_type || !acceptsRequestBody(method as HttpMethod))\n return {};\n\n const bodyTypeInput = body_type as unknown as string;\n\n const fields: InputPropertyMap = {};\n\n switch (bodyTypeInput) {\n case \"none\":\n break;\n case \"json\":\n fields[\"data\"] = Property.Json({\n displayName: \"JSON Body\",\n required: true,\n ...(props?.body ?? {}),\n });\n break;\n case \"raw\":\n fields[\"data\"] = Property.LongText({\n displayName: \"Raw Body\",\n required: true,\n });\n break;\n case \"form_data\":\n fields[\"data\"] = Property.Array({\n displayName: \"Form Data\",\n required: true,\n properties: {\n fieldName: Property.ShortText({\n displayName: \"Field Name\",\n required: true,\n }),\n fieldType: Property.StaticDropdown({\n displayName: \"Field Type\",\n required: true,\n options: {\n disabled: false,\n options: [\n { label: \"Text\", value: \"text\" },\n { label: \"File\", value: \"file\" },\n ],\n },\n }),\n textFieldValue: Property.LongText({\n displayName: \"Text Field Value\",\n required: false,\n }),\n fileFieldValue: Property.File({\n displayName: \"File Field Value\",\n required: false,\n }),\n },\n });\n break;\n }\n return fields;\n },\n }),\n response_is_binary: Property.Checkbox({\n displayName: \"Response is Binary\",\n description: \"Enable for files like PDFs, images, etc.\",\n required: false,\n defaultValue: false,\n advanced: true,\n ...(props?.response_is_binary ?? {}),\n }),\n failsafe: Property.Checkbox({\n displayName: \"Return Error as Output\",\n description:\n \"On a failed request, output the error instead of failing the step.\",\n required: false,\n advanced: true,\n ...(props?.failsafe ?? {}),\n }),\n timeout: Property.Number({\n displayName: \"Timeout\",\n description:\n \"Seconds to wait for a response. Empty: up to the flow limit (10 min).\",\n required: false,\n advanced: true,\n ...(props?.timeout ?? {}),\n }),\n followRedirects: Property.Checkbox({\n displayName: \"Follow redirects\",\n description:\n \"Follow 3xx redirects instead of returning them as the response.\",\n required: false,\n defaultValue: false,\n advanced: true,\n ...(props?.followRedirects ?? {}),\n }),\n ...extraProps,\n },\n\n run: async (context) => {\n const {\n method,\n url,\n headers,\n queryParams,\n body,\n body_type,\n failsafe,\n timeout,\n response_is_binary,\n followRedirects,\n } = context.propsValue;\n assertNotNullOrUndefined(method, \"Method\");\n assertNotNullOrUndefined(url, \"URL\");\n\n const authValue = !isNil(authMapping)\n ? await authMapping(context.auth, context.propsValue)\n : {};\n\n const urlValue = url[\"url\"] as string;\n const fullUrl =\n urlValue.startsWith(\"http://\") || urlValue.startsWith(\"https://\")\n ? urlValue\n : joinBaseUrlWithRelativePath({\n baseUrl: baseUrl(context.auth),\n relativePath: urlValue,\n });\n const request: HttpRequest = {\n method,\n url: fullUrl,\n headers: {\n ...((headers ?? {}) as HttpHeaders),\n ...(authLocation === \"headers\" ? authValue : {}),\n },\n queryParams: {\n ...(authLocation === \"queryParams\" ? (authValue as QueryParams) : {}),\n ...((queryParams as QueryParams) ?? {}),\n },\n timeout: timeout ? timeout * 1000 : 0,\n followRedirects,\n };\n\n // Set response type to arraybuffer if binary response is expected\n if (response_is_binary) {\n request.responseType = \"arraybuffer\";\n }\n\n if (body) {\n if (body_type && body_type !== \"none\") {\n const bodyInput = body[\"data\"];\n if (body_type === \"form_data\") {\n const formBodyInput = bodyInput as Array<{\n fieldName: string;\n fieldType: \"text\" | \"file\";\n textFieldValue?: string;\n fileFieldValue?: ApFile;\n }>;\n\n const formData = new FormData();\n\n for (const {\n fieldName,\n fieldType,\n textFieldValue,\n fileFieldValue,\n } of formBodyInput) {\n if (fieldType === \"text\" && !isEmpty(textFieldValue)) {\n formData.append(fieldName, textFieldValue);\n } else if (fieldType === \"file\" && !isEmpty(fileFieldValue)) {\n formData.append(fieldName, fileFieldValue!.data, {\n filename: fileFieldValue?.filename,\n });\n }\n }\n request.body = formData;\n request.headers = { ...request.headers, ...formData.getHeaders() };\n } else {\n request.body = bodyInput;\n }\n } else if (!body_type) {\n request.body = body;\n }\n }\n\n try {\n const response = await httpClient.sendRequest(request);\n return await handleBinaryResponse(\n context.files,\n response.body,\n response.status,\n response.headers,\n response_is_binary,\n );\n } catch (error) {\n if (failsafe) {\n return toFailsafeOutput({ error, requestBody: request.body });\n }\n throw error;\n }\n },\n });\n}\n\nexport function is_chromium_installed(): boolean {\n const chromiumPath = \"/usr/bin/chromium\";\n return fs.existsSync(chromiumPath);\n}\n\nconst handleBinaryResponse = async (\n files: FilesService,\n bodyContent: string | ArrayBuffer | Buffer,\n status: number,\n headers?: HttpHeaders,\n isBinary?: boolean,\n) => {\n let body;\n\n if (isBinary && isBinaryBody(bodyContent)) {\n const contentTypeValue = Array.isArray(headers?.[\"content-type\"])\n ? headers[\"content-type\"][0]\n : headers?.[\"content-type\"];\n const fileExtension: string =\n contentTypeToExtension(contentTypeValue ?? \"\") || \"txt\";\n\n let bufferData: Buffer;\n if (bodyContent instanceof ArrayBuffer) {\n bufferData = Buffer.from(new Uint8Array(bodyContent));\n } else if (Buffer.isBuffer(bodyContent)) {\n bufferData = bodyContent;\n } else {\n bufferData = Buffer.from(bodyContent);\n }\n\n body = await files.write({\n fileName: `output.${fileExtension}`,\n data: bufferData,\n });\n } else {\n body = bodyContent;\n }\n\n return { status, headers, body };\n};\n\nconst isBinaryBody = (body: string | ArrayBuffer | Buffer) => {\n return body instanceof ArrayBuffer || Buffer.isBuffer(body);\n};\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/polling/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport type {\n AppConnectionValueForAuthProperty,\n FilesService,\n ServerContext,\n Store,\n} from \"../../../framework/index.js\";\nimport { isNil } from \"../../../core-utils/index.js\";\n\ninterface TimebasedPolling<AuthValue, PropsValue> {\n strategy: DedupeStrategy.TIMEBASED;\n items: (params: {\n auth: AuthValue;\n store: Store;\n propsValue: PropsValue;\n lastFetchEpochMS: number;\n server?: ServerContext;\n }) => Promise<\n {\n epochMilliSeconds: number;\n data: unknown;\n }[]\n >;\n}\n\ninterface LastItemPolling<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n> {\n strategy: DedupeStrategy.LAST_ITEM;\n items: (params: {\n auth: AuthValue;\n store: Store;\n files?: FilesService;\n propsValue: PropsValue;\n lastItemId: unknown;\n server?: ServerContext;\n }) => Promise<\n {\n id: unknown;\n data: unknown;\n }[]\n >;\n}\n\nexport enum DedupeStrategy {\n TIMEBASED,\n LAST_ITEM,\n}\n\nexport type Polling<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n> =\n | TimebasedPolling<AuthValue, PropsValue>\n | LastItemPolling<AuthValue, PropsValue>;\n\nexport const pollingHelper = {\n async poll<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n >(\n polling: Polling<AuthValue, PropsValue>,\n {\n store,\n auth,\n propsValue,\n maxItemsToPoll,\n files,\n server,\n }: {\n store: Store;\n auth: AuthValue;\n propsValue: PropsValue;\n files: FilesService;\n maxItemsToPoll?: number;\n server?: ServerContext;\n },\n ): Promise<unknown[]> {\n switch (polling.strategy) {\n case DedupeStrategy.TIMEBASED: {\n const lastEpochMilliSeconds = await store.get<number>(\"lastPoll\");\n if (isNil(lastEpochMilliSeconds)) {\n throw new Error(\"lastPoll doesn't exist in the store.\");\n }\n const items = await polling.items({\n store,\n auth,\n propsValue,\n lastFetchEpochMS: lastEpochMilliSeconds,\n server,\n });\n const newLastEpochMilliSeconds = items.reduce(\n (acc, item) => Math.max(acc, item.epochMilliSeconds),\n lastEpochMilliSeconds,\n );\n await store.put(\"lastPoll\", newLastEpochMilliSeconds);\n return items\n .filter((f) => f.epochMilliSeconds > lastEpochMilliSeconds)\n .map((item) => item.data);\n }\n case DedupeStrategy.LAST_ITEM: {\n const lastItemId = await store.get<unknown>(\"lastItem\");\n const items = await polling.items({\n store,\n auth,\n propsValue,\n lastItemId,\n files,\n server,\n });\n\n const lastItemIndex = items.findIndex((f) => f.id === lastItemId);\n let newItems = [];\n if (isNil(lastItemId) || lastItemIndex == -1) {\n newItems = items ?? [];\n } else {\n newItems = items?.slice(0, lastItemIndex) ?? [];\n }\n // Sorted from newest to oldest\n if (!isNil(maxItemsToPoll)) {\n // Get the last polling.maxItemsToPoll items\n newItems = newItems.slice(-maxItemsToPoll);\n }\n const newLastItem = newItems?.[0]?.id;\n if (!isNil(newLastItem)) {\n await store.put(\"lastItem\", newLastItem);\n }\n return newItems.map((item) => item.data);\n }\n }\n },\n async onEnable<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n >(\n polling: Polling<AuthValue, PropsValue>,\n {\n store,\n auth,\n propsValue,\n server,\n isRepublish,\n }: {\n store: Store;\n auth: AuthValue;\n propsValue: PropsValue;\n server?: ServerContext;\n isRepublish?: boolean;\n },\n ): Promise<void> {\n switch (polling.strategy) {\n case DedupeStrategy.TIMEBASED: {\n if (isRepublish && !isNil(await store.get<number>(\"lastPoll\"))) {\n break;\n }\n await store.put(\"lastPoll\", Date.now());\n break;\n }\n case DedupeStrategy.LAST_ITEM: {\n if (isRepublish && !isNil(await store.get(\"lastItem\"))) {\n break;\n }\n const items = await polling.items({\n store,\n auth,\n propsValue,\n lastItemId: null,\n server,\n });\n const lastItemId = items?.[0]?.id;\n if (!isNil(lastItemId)) {\n await store.put(\"lastItem\", lastItemId);\n } else {\n await store.delete(\"lastItem\");\n }\n break;\n }\n }\n },\n async onDisable<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n >(\n polling: Polling<AuthValue, PropsValue>,\n params: { store: Store; auth: AuthValue; propsValue: PropsValue },\n ): Promise<void> {\n switch (polling.strategy) {\n case DedupeStrategy.TIMEBASED:\n case DedupeStrategy.LAST_ITEM:\n return;\n }\n },\n async test<\n AuthValue extends AppConnectionValueForAuthProperty<any>,\n PropsValue,\n >(\n polling: Polling<AuthValue, PropsValue>,\n {\n auth,\n propsValue,\n store,\n files,\n server,\n }: {\n store: Store;\n auth: AuthValue;\n propsValue: PropsValue;\n files: FilesService;\n server?: ServerContext;\n },\n ): Promise<unknown[]> {\n let items = [];\n switch (polling.strategy) {\n case DedupeStrategy.TIMEBASED: {\n items = await polling.items({\n store,\n auth,\n propsValue,\n lastFetchEpochMS: 0,\n server,\n });\n break;\n }\n case DedupeStrategy.LAST_ITEM: {\n items = await polling.items({\n store,\n auth,\n propsValue,\n lastItemId: null,\n files,\n server,\n });\n break;\n }\n }\n return getFirstFiveOrAll(items.map((item) => item.data));\n },\n};\n\nfunction getFirstFiveOrAll(array: unknown[]) {\n if (array.length <= 5) {\n return array;\n } else {\n return array.slice(0, 5);\n }\n}\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/stream/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport { Readable } from \"node:stream\";\nimport type { ApFile, ApStreamingFile } from \"../../../framework/index.js\";\n\nfunction toStreamingBody(file: ApStreamingFile | ApFile): {\n body: Readable;\n size: number | undefined;\n} {\n if (\"body\" in file) {\n return { body: file.body, size: file.size };\n }\n return { body: Readable.from(file.data), size: file.data.length };\n}\n\nasync function* readChunks({\n readable,\n chunkSize,\n}: {\n readable: Readable;\n chunkSize: number;\n}): AsyncGenerator<Buffer> {\n let pending: Buffer[] = [];\n let pendingLength = 0;\n if (!Number.isInteger(chunkSize) || chunkSize <= 0) {\n throw new Error(\"chunkSize must be a positive integer\");\n }\n for await (const data of readable) {\n pending.push(Buffer.isBuffer(data) ? data : Buffer.from(data));\n pendingLength += pending[pending.length - 1].length;\n while (pendingLength >= chunkSize) {\n const combined =\n pending.length === 1 ? pending[0] : Buffer.concat(pending);\n yield combined.subarray(0, chunkSize);\n const rest = combined.subarray(chunkSize);\n pending = rest.length > 0 ? [rest] : [];\n pendingLength = rest.length;\n }\n }\n if (pendingLength > 0) {\n yield pending.length === 1 ? pending[0] : Buffer.concat(pending);\n }\n}\n\nexport const streamUtils = { readChunks, toStreamingBody };\n","// Vendored from activepieces/activepieces@0.91.0 packages/pieces/common/src/lib/validation/index.ts. MIT; see ../../../../LICENSE.\n// Generated by scripts/sync-upstream.mts — do not edit by hand.\nimport * as z from \"zod/mini\";\n\nexport const propsValidation = {\n async validateZod<T extends Record<string, unknown>>(\n props: T,\n schema: Partial<Record<keyof T, z.core.$ZodType>>,\n ): Promise<void> {\n const schemaObj = z.object(\n Object.entries(schema).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: value,\n }),\n {},\n ),\n );\n\n const result = await z.safeParseAsync(schemaObj, props);\n if (!result.success) {\n const errors = result.error.issues.reduce<Record<string, string>>(\n (acc, issue) => ({\n ...acc,\n [issue.path.join(\".\")]: issue.message,\n }),\n {},\n );\n throw new Error(JSON.stringify({ errors }, null, 2));\n }\n },\n};\n"],"mappings":"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"}