@tangle-network/agent-integrations 0.73.0 → 0.74.1

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.
Files changed (49) hide show
  1. package/data/bundled-adapter-manifests.json +1 -1
  2. package/dist/{adapters-D8TvHRA1.js → adapters-DVwQyQCI.js} +414 -631
  3. package/dist/{adapters-D8TvHRA1.js.map → adapters-DVwQyQCI.js.map} +1 -1
  4. package/dist/{bundled-manifest-data-MdURriam.js → bundled-manifest-data-Bj_ENela.js} +276 -12
  5. package/dist/{bundled-manifest-data-MdURriam.js.map → bundled-manifest-data-Bj_ENela.js.map} +1 -1
  6. package/dist/cloudbeds-BL5EF3xl.js +1195 -0
  7. package/dist/cloudbeds-BL5EF3xl.js.map +1 -0
  8. package/dist/connect/index.js +1 -1
  9. package/dist/connectors/adapters/index.d.ts +1 -1
  10. package/dist/connectors/adapters/index.js +3 -2
  11. package/dist/connectors/index.d.ts +2 -2
  12. package/dist/connectors/index.js +5 -4
  13. package/dist/{consumer-DaKqPDG-.d.ts → consumer-BslMZthR.d.ts} +2 -2
  14. package/dist/{consumer-DaKqPDG-.d.ts.map → consumer-BslMZthR.d.ts.map} +1 -1
  15. package/dist/consumer.d.ts +1 -1
  16. package/dist/consumer.js +1 -1
  17. package/dist/{index-b05PzTtX.d.ts → index-B227L17C.d.ts} +2 -2
  18. package/dist/{index-b05PzTtX.d.ts.map → index-B227L17C.d.ts.map} +1 -1
  19. package/dist/{index-udV3gGjx.d.ts → index-Gn72pQCA.d.ts} +10 -1
  20. package/dist/index-Gn72pQCA.d.ts.map +1 -0
  21. package/dist/index.d.ts +3 -3
  22. package/dist/index.js +7 -6
  23. package/dist/internal/bundled-manifest-runtime.js +1 -1
  24. package/dist/mcp.d.ts +1 -1
  25. package/dist/mcp.js +1 -1
  26. package/dist/middleware/index.js +1 -1
  27. package/dist/registry.js +1 -1
  28. package/dist/runtime.d.ts +1 -1
  29. package/dist/sandbox.d.ts +1 -1
  30. package/dist/{specs-BYUQOsSC.js → specs-BnY10gv2.js} +2 -2
  31. package/dist/{specs-BYUQOsSC.js.map → specs-BnY10gv2.js.map} +1 -1
  32. package/dist/specs.js +1 -1
  33. package/dist/{src-c7Ru9_WT.js → src-Bgyicg7S.js} +4 -4
  34. package/dist/{src-c7Ru9_WT.js.map → src-Bgyicg7S.js.map} +1 -1
  35. package/dist/{tangle-id-D2kPF0rX.js → tangle-id-81ShqJ7k.js} +3 -262
  36. package/dist/tangle-id-81ShqJ7k.js.map +1 -0
  37. package/dist/types-BSDXGSi5.js +263 -0
  38. package/dist/types-BSDXGSi5.js.map +1 -0
  39. package/dist/webhooks/index.d.ts +5 -0
  40. package/dist/webhooks/index.d.ts.map +1 -1
  41. package/dist/webhooks/index.js +92 -2
  42. package/dist/webhooks/index.js.map +1 -1
  43. package/docs/hospitality-connectors.md +91 -11
  44. package/docs/knowledge-provider-contracts.md +86 -0
  45. package/package.json +2 -1
  46. package/dist/index-udV3gGjx.d.ts.map +0 -1
  47. package/dist/tangle-id-D2kPF0rX.js.map +0 -1
  48. package/dist/webhooks-FsjqRN_0.js +0 -117
  49. package/dist/webhooks-FsjqRN_0.js.map +0 -1
@@ -1,7 +1,8 @@
1
1
  import { t as IntegrationRuntimeError } from "./errors-CvO_y8JO.js";
2
- import { a as TangleIdentityUnreachableError, c as CredentialsExpired, d as ProviderRateLimited, f as ProviderRequestError, i as TANGLE_SERVICE_TOKEN_PREFIX, l as InvalidCapabilityArgument, n as TANGLE_API_KEY_PREFIX, o as createTangleIdentityClient, p as ResourceContention, s as tangleIdentity, t as DEFAULT_TANGLE_PLATFORM_URL, u as ProviderConfigError } from "./tangle-id-D2kPF0rX.js";
2
+ import { a as ProviderRequestError, i as ProviderRateLimited, n as InvalidCapabilityArgument, o as ResourceContention, r as ProviderConfigError, t as CredentialsExpired } from "./types-BSDXGSi5.js";
3
+ import { a as TangleIdentityUnreachableError, i as TANGLE_SERVICE_TOKEN_PREFIX, n as TANGLE_API_KEY_PREFIX, o as createTangleIdentityClient, s as tangleIdentity, t as DEFAULT_TANGLE_PLATFORM_URL } from "./tangle-id-81ShqJ7k.js";
3
4
  import { createOAuthBasicAuthorizationHeader, exchangeAuthorizationCode, oauthClientCredentialRedactionValues, redactOAuthSensitiveText, refreshAccessToken } from "./connectors/oauth.js";
4
- import { n as firstHeader, o as verifySlackSignature, s as verifyStripeSignature } from "./webhooks-FsjqRN_0.js";
5
+ import { c as verifySlackSignature, i as firstHeader, l as verifyStripeSignature, n as cloudbedsConnector } from "./cloudbeds-BL5EF3xl.js";
5
6
  import { i as retryAfterMs$6, n as record$3, r as requestJson, t as ProviderProtocolError } from "./response-json-BnUINkTL.js";
6
7
  import { t as linqWhatsappAttachmentUrl } from "./linq-whatsapp-attachment-url-C9jHVGw5.js";
7
8
  import { createHash, createHmac, createSign, randomBytes, timingSafeEqual } from "node:crypto";
@@ -13,6 +14,7 @@ import { parse } from "csv-parse/sync";
13
14
  import { stringify } from "csv-stringify/sync";
14
15
  import readXlsxFile from "read-excel-file/node";
15
16
  import writeXlsxFile from "write-excel-file/node";
17
+ import { XMLParser, XMLValidator } from "fast-xml-parser";
16
18
  import tls, { createSecureContext } from "node:tls";
17
19
  import { Kafka, logLevel } from "kafkajs";
18
20
  import { lookup } from "node:dns/promises";
@@ -1992,11 +1994,11 @@ async function executeRestRequest(spec, request, inv, requiredArgs) {
1992
1994
  const placement = spec.credentialPlacement ?? { kind: "bearer" };
1993
1995
  const aws = placement.kind === "aws-sigv4" ? parseAwsCredentialBundle(inv.source.credentials) : void 0;
1994
1996
  const awsRegion = aws ? resolveAwsRegion(aws, inv.source.metadata, placement) : void 0;
1995
- let baseUrl = resolveBaseUrl(spec.baseUrl, inv.source.metadata, spec.allowedBaseUrls, spec.allowedBaseUrlSuffixes, spec.requirePublicHttpsBaseUrl);
1997
+ let baseUrl = resolveBaseUrl(request.baseUrl ?? spec.baseUrl, inv.source.metadata, spec.allowedBaseUrls, spec.allowedBaseUrlSuffixes, spec.requirePublicHttpsBaseUrl);
1996
1998
  if (aws) baseUrl = applyRegionTemplate(baseUrl, awsRegion, aws.endpoint);
1997
1999
  const scope = renderScope(inv, aws?.bucket ? { bucket: aws.bucket } : void 0);
1998
2000
  const templatePath = request.path.replace(/^\/+/, "");
1999
- const renderedPath = interpolate(templatePath, scope);
2001
+ const renderedPath = interpolate(templatePath, scope, request.pathSegmentParameters);
2000
2002
  const templateSegments = templatePath.split("/");
2001
2003
  if (renderedPath.split("/").some((segment, index) => (segment === "." || segment === "..") && templateSegments[index] !== segment)) throw new Error("invalid path argument: dot segment");
2002
2004
  const baseWithSlash = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
@@ -2068,13 +2070,15 @@ async function executeRestRequest(spec, request, inv, requiredArgs) {
2068
2070
  } else if (placement.kind !== "structured-headers" && placement.kind !== "structured-json-body") applyCredentials(headers, url, placement, inv.source.credentials);
2069
2071
  const res = await fetch(url, {
2070
2072
  method: request.method,
2073
+ ...request.redirect ? { redirect: request.redirect } : {},
2071
2074
  headers,
2072
2075
  body: bodyString,
2073
2076
  signal: AbortSignal.timeout(2e4)
2074
2077
  });
2078
+ const boundedBytes = request.maxResponseBytes === void 0 ? void 0 : await readBoundedResponse(res, request.maxResponseBytes);
2075
2079
  if ((spec.credentialsExpiredStatuses ?? [401, 403]).includes(res.status)) throw new CredentialsExpired(`${spec.displayName} rejected credentials (${res.status})`, inv.source.id);
2076
2080
  if (res.status === 409 || res.status === 412) {
2077
- const text = redactCredentialText(await safeErrorText(res), inv.source.credentials, [getHeaderCI(headers, "authorization"), ...Object.values(spec.credentialHeaders ?? {})]);
2081
+ const text = redactCredentialText(boundedBytes?.toString("utf8") ?? await safeErrorText(res), inv.source.credentials, [getHeaderCI(headers, "authorization"), ...Object.values(spec.credentialHeaders ?? {})]);
2078
2082
  return {
2079
2083
  data: parseBodyText(text),
2080
2084
  outcome: "conflict",
@@ -2084,7 +2088,7 @@ async function executeRestRequest(spec, request, inv, requiredArgs) {
2084
2088
  };
2085
2089
  }
2086
2090
  if (res.status === 429) {
2087
- const text = redactCredentialText(await safeErrorText(res), inv.source.credentials, [getHeaderCI(headers, "authorization"), ...Object.values(spec.credentialHeaders ?? {})]);
2091
+ const text = redactCredentialText(boundedBytes?.toString("utf8") ?? await safeErrorText(res), inv.source.credentials, [getHeaderCI(headers, "authorization"), ...Object.values(spec.credentialHeaders ?? {})]);
2088
2092
  return {
2089
2093
  data: parseBodyText(text),
2090
2094
  outcome: "rate-limited",
@@ -2095,14 +2099,17 @@ async function executeRestRequest(spec, request, inv, requiredArgs) {
2095
2099
  }
2096
2100
  if (request.existenceCheck && (res.status === 204 || res.status === 404)) return { data: { exists: res.status === 204 } };
2097
2101
  if (!res.ok) {
2098
- const text = redactCredentialText(await safeErrorText(res), inv.source.credentials, [getHeaderCI(headers, "authorization"), ...Object.values(spec.credentialHeaders ?? {})]);
2102
+ const text = redactCredentialText(boundedBytes?.toString("utf8") ?? await safeErrorText(res), inv.source.credentials, [getHeaderCI(headers, "authorization"), ...Object.values(spec.credentialHeaders ?? {})]);
2099
2103
  throw new Error(`${spec.kind} ${request.method} ${url.pathname} HTTP ${res.status}: ${text.slice(0, 300)}`);
2100
2104
  }
2101
- if (request.responseBody === "base64") return { data: {
2102
- base64: Buffer.from(await res.arrayBuffer()).toString("base64"),
2103
- contentType: res.headers.get("content-type") ?? void 0
2104
- } };
2105
- const text = await res.text();
2105
+ if (request.responseBody === "base64") return {
2106
+ data: {
2107
+ base64: (boundedBytes ?? Buffer.from(await res.arrayBuffer())).toString("base64"),
2108
+ contentType: res.headers.get("content-type") ?? void 0
2109
+ },
2110
+ etag: res.headers.get("etag") ?? void 0
2111
+ };
2112
+ const text = boundedBytes?.toString("utf8") ?? await res.text();
2106
2113
  let data = null;
2107
2114
  if (text) try {
2108
2115
  data = JSON.parse(text);
@@ -2391,10 +2398,15 @@ function renderQueryValue(value, args) {
2391
2398
  return;
2392
2399
  }
2393
2400
  }
2394
- function interpolate(template, args) {
2401
+ function interpolate(template, args, pathSegmentParameters) {
2395
2402
  return template.replace(/\{([a-zA-Z0-9_.-]+)\}/g, (_match, key) => {
2396
2403
  const value = readPath(args, key);
2397
2404
  if (value === void 0 || value === null) throw new Error(`missing required argument: ${key}`);
2405
+ if (pathSegmentParameters?.includes(key)) {
2406
+ const segments = String(value).split("/");
2407
+ if (segments.some((segment) => segment === "." || segment === "..")) throw new Error("invalid path argument: dot segment");
2408
+ return segments.map((segment) => encodeURIComponent(segment).replace(/[!'()*]/g, (char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`)).join("/");
2409
+ }
2398
2410
  return encodeURIComponent(String(value));
2399
2411
  });
2400
2412
  }
@@ -2416,6 +2428,34 @@ function readPathFromUnknown(input, path) {
2416
2428
  async function safeErrorText(res) {
2417
2429
  return await res.text().catch(() => res.statusText) || res.statusText;
2418
2430
  }
2431
+ /** Prevent a provider response from allocating beyond an operation's declared budget. */
2432
+ async function readBoundedResponse(response, maximum) {
2433
+ if (!Number.isSafeInteger(maximum) || maximum < 1) throw new Error("invalid response byte limit");
2434
+ const declared = response.headers.get("content-length");
2435
+ if (declared !== null && Number(declared) > maximum) {
2436
+ await response.body?.cancel();
2437
+ throw new Error(`provider response exceeds ${maximum} byte limit`);
2438
+ }
2439
+ if (!response.body) return Buffer.alloc(0);
2440
+ const reader = response.body.getReader();
2441
+ const chunks = [];
2442
+ let size = 0;
2443
+ try {
2444
+ while (true) {
2445
+ const result = await reader.read();
2446
+ if (result.done) break;
2447
+ size += result.value.byteLength;
2448
+ if (size > maximum) {
2449
+ await reader.cancel();
2450
+ throw new Error(`provider response exceeds ${maximum} byte limit`);
2451
+ }
2452
+ chunks.push(result.value);
2453
+ }
2454
+ return Buffer.concat(chunks, size);
2455
+ } finally {
2456
+ reader.releaseLock();
2457
+ }
2458
+ }
2419
2459
  //#endregion
2420
2460
  //#region src/connectors/adapters/okta.ts
2421
2461
  const userId$3 = {
@@ -27056,7 +27096,7 @@ function arbitraryBodyParameters() {
27056
27096
  }
27057
27097
  //#endregion
27058
27098
  //#region src/connectors/adapters/amplitude.ts
27059
- const date$4 = {
27099
+ const date$3 = {
27060
27100
  type: "string",
27061
27101
  pattern: "^[0-9]{8}$",
27062
27102
  description: "Inclusive date in YYYYMMDD format."
@@ -27173,8 +27213,8 @@ const amplitudeConnector = declarativeRestConnector({
27173
27213
  type: "string",
27174
27214
  enum: ["any", "active"]
27175
27215
  },
27176
- start: date$4,
27177
- end: date$4,
27216
+ start: date$3,
27217
+ end: date$3,
27178
27218
  interval: {
27179
27219
  type: "integer",
27180
27220
  enum: [
@@ -27240,8 +27280,8 @@ const amplitudeConnector = declarativeRestConnector({
27240
27280
  parameters: {
27241
27281
  type: "object",
27242
27282
  properties: {
27243
- start: date$4,
27244
- end: date$4,
27283
+ start: date$3,
27284
+ end: date$3,
27245
27285
  mode: {
27246
27286
  type: "string",
27247
27287
  enum: ["active", "new"]
@@ -27282,8 +27322,8 @@ const amplitudeConnector = declarativeRestConnector({
27282
27322
  parameters: {
27283
27323
  type: "object",
27284
27324
  properties: {
27285
- start: date$4,
27286
- end: date$4
27325
+ start: date$3,
27326
+ end: date$3
27287
27327
  },
27288
27328
  required: ["start", "end"]
27289
27329
  },
@@ -28775,7 +28815,7 @@ const amazonLambdaConnector = declarativeRestConnector({
28775
28815
  });
28776
28816
  //#endregion
28777
28817
  //#region src/connectors/adapters/amazon-s3.ts
28778
- const amazonS3Connector = declarativeRestConnector({
28818
+ const restConnector = declarativeRestConnector({
28779
28819
  kind: "amazon-s3",
28780
28820
  displayName: "Amazon S3",
28781
28821
  description: "Scalable storage in the cloud. Read, upload, delete, and manage files in S3 buckets.",
@@ -28798,16 +28838,27 @@ const amazonS3Connector = declarativeRestConnector({
28798
28838
  {
28799
28839
  name: "files.list",
28800
28840
  class: "read",
28801
- description: "List files in an S3 bucket folder.",
28841
+ description: "List one page of objects in a bucket using ListObjectsV2. Returns objects (key, etag, size), isTruncated, and nextContinuationToken. Follow the token while isTruncated is true, including empty pages.",
28802
28842
  parameters: {
28803
28843
  type: "object",
28804
28844
  properties: {
28845
+ bucket: {
28846
+ type: "string",
28847
+ minLength: 1,
28848
+ description: "Bucket name; defaults to the connection credential bundle bucket when omitted."
28849
+ },
28850
+ continuationToken: {
28851
+ type: "string",
28852
+ description: "Opaque NextContinuationToken from the previous ListObjectsV2 XML response."
28853
+ },
28805
28854
  prefix: {
28806
28855
  type: "string",
28807
28856
  description: "Folder path to filter results (e.g., docs/)"
28808
28857
  },
28809
28858
  maxKeys: {
28810
28859
  type: "integer",
28860
+ minimum: 1,
28861
+ maximum: 1e3,
28811
28862
  description: "Maximum number of files to return (1–1000)"
28812
28863
  }
28813
28864
  },
@@ -28815,10 +28866,14 @@ const amazonS3Connector = declarativeRestConnector({
28815
28866
  },
28816
28867
  request: {
28817
28868
  method: "GET",
28818
- path: "/",
28869
+ path: "/{bucket}",
28870
+ redirect: "error",
28871
+ maxResponseBytes: 2097152,
28819
28872
  query: {
28873
+ "list-type": 2,
28820
28874
  prefix: "{prefix}",
28821
- "max-keys": "{maxKeys}"
28875
+ "max-keys": "{maxKeys}",
28876
+ "continuation-token": "{continuationToken}"
28822
28877
  }
28823
28878
  }
28824
28879
  },
@@ -28828,15 +28883,65 @@ const amazonS3Connector = declarativeRestConnector({
28828
28883
  description: "Read a file from S3.",
28829
28884
  parameters: {
28830
28885
  type: "object",
28831
- properties: { key: {
28832
- type: "string",
28833
- description: "The full path to the file in S3"
28834
- } },
28886
+ properties: {
28887
+ bucket: {
28888
+ type: "string",
28889
+ minLength: 1,
28890
+ description: "Bucket name; defaults to the connection credential bundle bucket when omitted."
28891
+ },
28892
+ versionId: {
28893
+ type: "string",
28894
+ description: "Optional immutable S3 object version."
28895
+ },
28896
+ key: {
28897
+ type: "string",
28898
+ minLength: 1,
28899
+ description: "Exact object key relative to the bucket, not a URL. Slashes are preserved; dot segments are refused."
28900
+ }
28901
+ },
28835
28902
  required: ["key"]
28836
28903
  },
28837
28904
  request: {
28838
28905
  method: "GET",
28839
- path: "/{key}"
28906
+ path: "/{bucket}/{key}",
28907
+ pathSegmentParameters: ["key"],
28908
+ redirect: "error",
28909
+ maxResponseBytes: 33554432,
28910
+ query: { versionId: "{versionId}" }
28911
+ }
28912
+ },
28913
+ {
28914
+ name: "files.readBytes",
28915
+ class: "read",
28916
+ description: "Read exact object bytes as data.base64 plus data.contentType and an ETag. Use this for binary files and source-evidence ingestion; decode base64 before parsing.",
28917
+ parameters: {
28918
+ type: "object",
28919
+ properties: {
28920
+ bucket: {
28921
+ type: "string",
28922
+ minLength: 1,
28923
+ description: "Bucket name; defaults to the connection credential bundle bucket when omitted."
28924
+ },
28925
+ versionId: {
28926
+ type: "string",
28927
+ description: "Optional immutable S3 object version."
28928
+ },
28929
+ key: {
28930
+ type: "string",
28931
+ minLength: 1,
28932
+ description: "Exact object key relative to the bucket, not a URL. Slashes are preserved; dot segments are refused."
28933
+ }
28934
+ },
28935
+ required: ["key"]
28936
+ },
28937
+ request: {
28938
+ method: "GET",
28939
+ path: "/{bucket}/{key}",
28940
+ pathSegmentParameters: ["key"],
28941
+ redirect: "error",
28942
+ maxResponseBytes: 33554432,
28943
+ responseBody: "base64",
28944
+ query: { versionId: "{versionId}" }
28840
28945
  }
28841
28946
  },
28842
28947
  {
@@ -29020,6 +29125,56 @@ const amazonS3Connector = declarativeRestConnector({
29020
29125
  }
29021
29126
  ]
29022
29127
  });
29128
+ /** Provider XML stays inside the adapter; hosts consume one paginated shape. */
29129
+ const amazonS3Connector = {
29130
+ ...restConnector,
29131
+ async executeRead(inv) {
29132
+ if (inv.capabilityName === "files.list" || inv.capabilityName === "files.read" || inv.capabilityName === "files.readBytes") {
29133
+ const bucket = inv.args.bucket;
29134
+ if (bucket !== void 0 && (typeof bucket !== "string" || !/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/.test(bucket))) throw new Error("S3 bucket must be a bucket name, not a URL or path");
29135
+ if (inv.capabilityName === "files.list") {
29136
+ const maximum = inv.args.maxKeys;
29137
+ if (maximum !== void 0 && (typeof maximum !== "number" || !Number.isInteger(maximum) || maximum < 1 || maximum > 1e3)) throw new Error("S3 maxKeys must be an integer between 1 and 1000");
29138
+ } else if (typeof inv.args.key !== "string" || !inv.args.key || Buffer.byteLength(inv.args.key, "utf8") > 1024) throw new Error("S3 key must contain between 1 and 1024 UTF-8 bytes");
29139
+ }
29140
+ const result = await restConnector.executeRead(inv);
29141
+ if (inv.capabilityName !== "files.list") return result;
29142
+ const raw = result.data?.raw;
29143
+ if (typeof raw !== "string" || /<!DOCTYPE|<!ENTITY/i.test(raw) || XMLValidator.validate(raw) !== true) throw new Error("S3 returned an invalid ListObjectsV2 XML response");
29144
+ if ((raw.match(/</g)?.length ?? 0) > 3e4) throw new Error("S3 XML exceeds element limit");
29145
+ const page = new XMLParser({
29146
+ parseTagValue: false,
29147
+ trimValues: false,
29148
+ ignoreAttributes: true,
29149
+ maxNestedTags: 16
29150
+ }).parse(raw)?.ListBucketResult;
29151
+ if (!page || page.IsTruncated !== "true" && page.IsTruncated !== "false") throw new Error("S3 returned an invalid ListObjectsV2 page");
29152
+ const isTruncated = page.IsTruncated === "true";
29153
+ const nextContinuationToken = page.NextContinuationToken;
29154
+ if (isTruncated && (typeof nextContinuationToken !== "string" || !nextContinuationToken || nextContinuationToken.length > 16384)) throw new Error("S3 truncated page is missing its continuation token");
29155
+ const contents = page.Contents === void 0 ? [] : Array.isArray(page.Contents) ? page.Contents : [page.Contents];
29156
+ if (contents.length > 1e3) throw new Error("S3 page exceeds 1000 object limit");
29157
+ const objects = contents.map((item) => {
29158
+ if (typeof item.Key !== "string" || !item.Key || Buffer.byteLength(item.Key, "utf8") > 1024) throw new Error("S3 object is missing its key");
29159
+ const size = Number(item.Size);
29160
+ if (typeof item.Size !== "string" || !/^\d+$/.test(item.Size) || !Number.isSafeInteger(size)) throw new Error("S3 object has an invalid size");
29161
+ if (item.ETag !== void 0 && typeof item.ETag !== "string") throw new Error("S3 object has an invalid ETag");
29162
+ return {
29163
+ key: item.Key,
29164
+ size,
29165
+ ...item.ETag === void 0 ? {} : { etag: item.ETag }
29166
+ };
29167
+ });
29168
+ return {
29169
+ ...result,
29170
+ data: {
29171
+ objects,
29172
+ isTruncated,
29173
+ ...isTruncated ? { nextContinuationToken } : {}
29174
+ }
29175
+ };
29176
+ }
29177
+ };
29023
29178
  //#endregion
29024
29179
  //#region src/connectors/adapters/amazon-sns.ts
29025
29180
  const amazonSnsConnector = declarativeRestConnector({
@@ -48775,7 +48930,7 @@ const SCOPE_SEND$1 = "https://www.googleapis.com/auth/gmail.send";
48775
48930
  const SCOPE_MODIFY = "https://www.googleapis.com/auth/gmail.modify";
48776
48931
  const AUTH_URL$17 = "https://accounts.google.com/o/oauth2/v2/auth";
48777
48932
  const TOKEN_URL$20 = "https://oauth2.googleapis.com/token";
48778
- const API$13 = "https://gmail.googleapis.com/gmail/v1/users/me";
48933
+ const API$12 = "https://gmail.googleapis.com/gmail/v1/users/me";
48779
48934
  function gmail(opts) {
48780
48935
  const { clientId, clientSecret } = opts;
48781
48936
  const timeoutMs = opts.timeoutMs ?? 3e4;
@@ -49003,7 +49158,7 @@ function gmail(opts) {
49003
49158
  async test(source) {
49004
49159
  try {
49005
49160
  const accessToken = await ensureFreshAccessToken$14(source.credentials, clientId, clientSecret);
49006
- const res = await fetch(`${API$13}/profile`, {
49161
+ const res = await fetch(`${API$12}/profile`, {
49007
49162
  headers: { authorization: `Bearer ${accessToken}` },
49008
49163
  signal: AbortSignal.timeout(8e3)
49009
49164
  });
@@ -49030,7 +49185,7 @@ async function listMessages$1(inv, accessToken, timeoutMs) {
49030
49185
  for (const id of args.labelIds ?? ["INBOX"]) params.append("labelIds", id);
49031
49186
  if (args.query) params.set("q", args.query);
49032
49187
  if (args.pageToken) params.set("pageToken", args.pageToken);
49033
- const listRes = await fetch(`${API$13}/messages?${params.toString()}`, {
49188
+ const listRes = await fetch(`${API$12}/messages?${params.toString()}`, {
49034
49189
  headers: { authorization: `Bearer ${accessToken}` },
49035
49190
  signal: AbortSignal.timeout(timeoutMs)
49036
49191
  });
@@ -49040,7 +49195,7 @@ async function listMessages$1(inv, accessToken, timeoutMs) {
49040
49195
  return {
49041
49196
  data: {
49042
49197
  messages: (await Promise.all(ids.map(async ({ id }) => {
49043
- const res = await fetch(`${API$13}/messages/${encodeURIComponent(id)}?format=metadata&metadataHeaders=From&metadataHeaders=To&metadataHeaders=Subject&metadataHeaders=Date`, {
49198
+ const res = await fetch(`${API$12}/messages/${encodeURIComponent(id)}?format=metadata&metadataHeaders=From&metadataHeaders=To&metadataHeaders=Subject&metadataHeaders=Date`, {
49044
49199
  headers: { authorization: `Bearer ${accessToken}` },
49045
49200
  signal: AbortSignal.timeout(timeoutMs)
49046
49201
  });
@@ -49068,7 +49223,7 @@ function toMessageSummary$1(meta) {
49068
49223
  }
49069
49224
  async function readMessage$1(inv, accessToken, timeoutMs) {
49070
49225
  const { id } = inv.args;
49071
- const res = await fetch(`${API$13}/messages/${encodeURIComponent(id)}?format=full`, {
49226
+ const res = await fetch(`${API$12}/messages/${encodeURIComponent(id)}?format=full`, {
49072
49227
  headers: { authorization: `Bearer ${accessToken}` },
49073
49228
  signal: AbortSignal.timeout(timeoutMs)
49074
49229
  });
@@ -49129,7 +49284,7 @@ async function send$1(inv, accessToken, timeoutMs) {
49129
49284
  rfcHeaders.push(`Content-Type: ${contentType}`);
49130
49285
  rfcHeaders.push("MIME-Version: 1.0");
49131
49286
  const raw = `${rfcHeaders.join("\r\n")}\r\n\r\n${args.body}`;
49132
- const sendRes = await fetch(`${API$13}/messages/send`, {
49287
+ const sendRes = await fetch(`${API$12}/messages/send`, {
49133
49288
  method: "POST",
49134
49289
  headers: {
49135
49290
  authorization: `Bearer ${accessToken}`,
@@ -49153,7 +49308,7 @@ async function send$1(inv, accessToken, timeoutMs) {
49153
49308
  }
49154
49309
  async function sendReply$1(inv, accessToken, timeoutMs) {
49155
49310
  const { threadId, body, replyAll, cc } = inv.args;
49156
- const threadRes = await fetch(`${API$13}/threads/${encodeURIComponent(threadId)}?format=metadata&metadataHeaders=From&metadataHeaders=To&metadataHeaders=Cc&metadataHeaders=Subject&metadataHeaders=Message-ID&metadataHeaders=References`, {
49311
+ const threadRes = await fetch(`${API$12}/threads/${encodeURIComponent(threadId)}?format=metadata&metadataHeaders=From&metadataHeaders=To&metadataHeaders=Cc&metadataHeaders=Subject&metadataHeaders=Message-ID&metadataHeaders=References`, {
49157
49312
  headers: { authorization: `Bearer ${accessToken}` },
49158
49313
  signal: AbortSignal.timeout(timeoutMs)
49159
49314
  });
@@ -49190,7 +49345,7 @@ async function sendReply$1(inv, accessToken, timeoutMs) {
49190
49345
  threadId,
49191
49346
  raw: encodeBase64Url(`${rfcHeaders.join("\r\n")}\r\n\r\n${body}`)
49192
49347
  };
49193
- const sendRes = await fetch(`${API$13}/messages/send`, {
49348
+ const sendRes = await fetch(`${API$12}/messages/send`, {
49194
49349
  method: "POST",
49195
49350
  headers: {
49196
49351
  authorization: `Bearer ${accessToken}`,
@@ -49219,7 +49374,7 @@ async function watchLabel(inv, accessToken, timeoutMs) {
49219
49374
  labelIds: labelIds ?? ["INBOX"],
49220
49375
  labelFilterAction: labelFilterAction ?? "include"
49221
49376
  };
49222
- const res = await fetch(`${API$13}/watch`, {
49377
+ const res = await fetch(`${API$12}/watch`, {
49223
49378
  method: "POST",
49224
49379
  headers: {
49225
49380
  authorization: `Bearer ${accessToken}`,
@@ -51302,7 +51457,7 @@ const text$9 = {
51302
51457
  type: "string",
51303
51458
  minLength: 1
51304
51459
  };
51305
- const money$4 = {
51460
+ const money$3 = {
51306
51461
  type: "integer",
51307
51462
  minimum: 1,
51308
51463
  description: "Positive amount in the ad account currency minor units, e.g. 10000 = USD 100. Confirm account currency first."
@@ -51316,7 +51471,7 @@ const url$1 = {
51316
51471
  format: "uri",
51317
51472
  pattern: "^https://"
51318
51473
  };
51319
- const page$7 = {
51474
+ const page$6 = {
51320
51475
  limit: {
51321
51476
  type: "integer",
51322
51477
  minimum: 1,
@@ -51389,7 +51544,7 @@ const base$9 = declarativeRestConnector({
51389
51544
  class: "read",
51390
51545
  description: "Discover permitted ad accounts, currencies, timezones and readiness. Follow paging.cursors.after.",
51391
51546
  requiredScopes: ["ads_read"],
51392
- parameters: parameters$8(page$7),
51547
+ parameters: parameters$8(page$6),
51393
51548
  request: {
51394
51549
  method: "GET",
51395
51550
  path: "/me/adaccounts",
@@ -51404,7 +51559,7 @@ const base$9 = declarativeRestConnector({
51404
51559
  class: "read",
51405
51560
  description: "Discover Pages and their linked Instagram business identities for ad creatives. Page access tokens are deliberately not requested.",
51406
51561
  requiredScopes: ["pages_show_list"],
51407
- parameters: parameters$8(page$7),
51562
+ parameters: parameters$8(page$6),
51408
51563
  request: {
51409
51564
  method: "GET",
51410
51565
  path: "/me/accounts",
@@ -51426,7 +51581,7 @@ const base$9 = declarativeRestConnector({
51426
51581
  description: `Read ${edge} in an ad account, including native IDs and readiness. Follow paging.cursors.after.`,
51427
51582
  parameters: parameters$8({
51428
51583
  accountId: id$13,
51429
- ...page$7
51584
+ ...page$6
51430
51585
  }, ["accountId"]),
51431
51586
  request: {
51432
51587
  method: "GET",
@@ -51440,7 +51595,7 @@ const base$9 = declarativeRestConnector({
51440
51595
  mutation$2("campaigns.createTraffic", "Create a PAUSED auction traffic campaign with an explicit campaign spend cap across all its ad sets. The cap is not a daily budget; configure bounded ad sets before enabling.", {
51441
51596
  accountId: id$13,
51442
51597
  name: text$9,
51443
- spendCap: money$4,
51598
+ spendCap: money$3,
51444
51599
  specialAdCategories: {
51445
51600
  type: "array",
51446
51601
  items: {
@@ -51472,7 +51627,7 @@ const base$9 = declarativeRestConnector({
51472
51627
  accountId: id$13,
51473
51628
  campaignId: id$13,
51474
51629
  name: text$9,
51475
- lifetimeBudget: money$4,
51630
+ lifetimeBudget: money$3,
51476
51631
  startTime: dateTime,
51477
51632
  endTime: dateTime,
51478
51633
  countries: {
@@ -51597,7 +51752,7 @@ const base$9 = declarativeRestConnector({
51597
51752
  "ad"
51598
51753
  ]
51599
51754
  },
51600
- ...page$7
51755
+ ...page$6
51601
51756
  }, [
51602
51757
  "accountId",
51603
51758
  "since",
@@ -51700,7 +51855,7 @@ const time$4 = {
51700
51855
  type: "string",
51701
51856
  format: "date-time"
51702
51857
  };
51703
- const page$6 = {
51858
+ const page$5 = {
51704
51859
  cursor: { type: "string" },
51705
51860
  count: {
51706
51861
  type: "integer",
@@ -51759,7 +51914,7 @@ const base$8 = declarativeRestConnector({
51759
51914
  name: "accounts.list",
51760
51915
  class: "read",
51761
51916
  description: "Discover accessible advertising accounts, approval status and timezone. Follow next_cursor.",
51762
- parameters: parameters$7(page$6),
51917
+ parameters: parameters$7(page$5),
51763
51918
  request: {
51764
51919
  method: "GET",
51765
51920
  path: "/accounts",
@@ -51789,7 +51944,7 @@ const base$8 = declarativeRestConnector({
51789
51944
  description: `Read ${resource} with native IDs, status, budget and pagination. Funding instruments include currency and funding readiness.`,
51790
51945
  parameters: parameters$7({
51791
51946
  accountId: id$12,
51792
- ...page$6
51947
+ ...page$5
51793
51948
  }, ["accountId"]),
51794
51949
  request: {
51795
51950
  method: "GET",
@@ -52580,7 +52735,7 @@ const text$6 = {
52580
52735
  minLength: 1,
52581
52736
  maxLength: 255
52582
52737
  };
52583
- const money$3 = {
52738
+ const money$2 = {
52584
52739
  type: "string",
52585
52740
  pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]{1,2})?|0\\.(?:0[1-9]|[1-9][0-9]?))$",
52586
52741
  description: "Positive decimal amount in account currency, not micros."
@@ -52670,7 +52825,7 @@ function nativeTargeting(value) {
52670
52825
  };
52671
52826
  }
52672
52827
  const account$1 = "/adAccounts/{accountId}";
52673
- const page$5 = {
52828
+ const page$4 = {
52674
52829
  pageSize: {
52675
52830
  type: "integer",
52676
52831
  minimum: 1,
@@ -52743,7 +52898,7 @@ const base$6 = declarativeRestConnector({
52743
52898
  class: "read",
52744
52899
  requiredScopes: ["rw_ads"],
52745
52900
  description: "List accessible advertiser accounts, currency, account status and native nextPageToken. Includes test accounts.",
52746
- parameters: parameters$5(page$5),
52901
+ parameters: parameters$5(page$4),
52747
52902
  request: {
52748
52903
  method: "GET",
52749
52904
  path: "/adAccounts",
@@ -52763,7 +52918,7 @@ const base$6 = declarativeRestConnector({
52763
52918
  description: "Read campaigns or groups with native budgets, serving holds and nextPageToken.",
52764
52919
  parameters: parameters$5({
52765
52920
  accountId: id$10,
52766
- ...page$5
52921
+ ...page$4
52767
52922
  }, ["accountId"]),
52768
52923
  request: {
52769
52924
  method: "GET",
@@ -52792,7 +52947,7 @@ const base$6 = declarativeRestConnector({
52792
52947
  }),
52793
52948
  write$4("campaignGroups.create", "Create a DRAFT campaign group with a cumulative total budget and fixed schedule. New groups only accept DRAFT or ACTIVE at creation.", "/adCampaignGroups", {
52794
52949
  name: text$6,
52795
- totalBudget: money$3,
52950
+ totalBudget: money$2,
52796
52951
  currencyCode: currency,
52797
52952
  startTime: time$2,
52798
52953
  endTime: time$2
@@ -52824,9 +52979,9 @@ const base$6 = declarativeRestConnector({
52824
52979
  pattern: "^urn:li:(organization:[0-9]+|person:[A-Za-z0-9_-]+)$",
52825
52980
  description: "Beneficiary organization or member URN with sponsorship rights for this campaign."
52826
52981
  },
52827
- totalBudget: money$3,
52982
+ totalBudget: money$2,
52828
52983
  currencyCode: currency,
52829
- bidAmount: money$3,
52984
+ bidAmount: money$2,
52830
52985
  startTime: time$2,
52831
52986
  endTime: time$2,
52832
52987
  targetingCriteria: targeting,
@@ -53047,7 +53202,7 @@ const base$6 = declarativeRestConnector({
53047
53202
  const linkedinAdsConnector = {
53048
53203
  ...base$6,
53049
53204
  async executeMutation(inv) {
53050
- for (const key of ["totalBudget", "bidAmount"]) if (inv.args[key] !== void 0 && (typeof inv.args[key] !== "string" || !new RegExp(money$3.pattern).test(inv.args[key]))) throw new Error(`linkedin-ads: ${key} must be positive decimal currency`);
53205
+ for (const key of ["totalBudget", "bidAmount"]) if (inv.args[key] !== void 0 && (typeof inv.args[key] !== "string" || !new RegExp(money$2.pattern).test(inv.args[key]))) throw new Error(`linkedin-ads: ${key} must be positive decimal currency`);
53051
53206
  if (inv.capabilityName === "campaignGroups.create" || inv.capabilityName === "campaigns.createSponsored") {
53052
53207
  if (!(typeof inv.args.startTime === "number" && typeof inv.args.endTime === "number" && Number.isSafeInteger(inv.args.startTime) && Number.isSafeInteger(inv.args.endTime) && Number(inv.args.startTime) > 0 && Number(inv.args.endTime) > Number(inv.args.startTime))) throw new Error("linkedin-ads: endTime must be after startTime in epoch milliseconds");
53053
53208
  }
@@ -53095,7 +53250,7 @@ const micros$2 = {
53095
53250
  maximum: Number.MAX_SAFE_INTEGER,
53096
53251
  description: "Positive integer microcurrency in the advertiser account currency; 1000000 = one currency unit."
53097
53252
  };
53098
- const page$4 = {
53253
+ const page$3 = {
53099
53254
  pageToken: { type: "string" },
53100
53255
  pageSize: {
53101
53256
  type: "integer",
@@ -53175,7 +53330,7 @@ const base$5 = declarativeRestConnector({
53175
53330
  class: "read",
53176
53331
  requiredScopes: ["adsread"],
53177
53332
  description: "Discover advertiser businesses available to the connected user. Follow pagination tokens.",
53178
- parameters: parameters$4(page$4),
53333
+ parameters: parameters$4(page$3),
53179
53334
  request: {
53180
53335
  method: "GET",
53181
53336
  path: "/me/businesses",
@@ -53189,7 +53344,7 @@ const base$5 = declarativeRestConnector({
53189
53344
  description: "List advertiser accounts in one accessible business. Use account currency and billing readiness before budgeting.",
53190
53345
  parameters: parameters$4({
53191
53346
  businessId: id$9,
53192
- ...page$4
53347
+ ...page$3
53193
53348
  }, ["businessId"]),
53194
53349
  request: {
53195
53350
  method: "GET",
@@ -53221,7 +53376,7 @@ const base$5 = declarativeRestConnector({
53221
53376
  description: `List ${resource} under this advertiser account. Retain provider IDs and pagination.`,
53222
53377
  parameters: parameters$4({
53223
53378
  accountId: id$9,
53224
- ...page$4
53379
+ ...page$3
53225
53380
  }, ["accountId"]),
53226
53381
  request: {
53227
53382
  method: "GET",
@@ -53318,7 +53473,7 @@ const base$5 = declarativeRestConnector({
53318
53473
  description: "Search targetable communities by name or topic. Use returned community names in ad-group targeting.",
53319
53474
  parameters: parameters$4({
53320
53475
  query: text$5,
53321
- ...page$4
53476
+ ...page$3
53322
53477
  }, ["query"]),
53323
53478
  request: {
53324
53479
  method: "GET",
@@ -54224,12 +54379,12 @@ const id$6 = {
54224
54379
  ...text$2,
54225
54380
  pattern: "^[0-9]+$"
54226
54381
  };
54227
- const money$2 = {
54382
+ const money$1 = {
54228
54383
  type: "number",
54229
54384
  exclusiveMinimum: 0,
54230
54385
  description: "Amount in the advertising account currency, not micros or cents."
54231
54386
  };
54232
- const date$3 = {
54387
+ const date$2 = {
54233
54388
  type: "object",
54234
54389
  properties: {
54235
54390
  Year: {
@@ -54398,8 +54553,8 @@ function createMicrosoftAdsConnector(options) {
54398
54553
  },
54399
54554
  write$1("campaigns.createSearch", "Create a PAUSED Search campaign with a DAILY budget in account currency and MaxClicks bidding capped by maximum CPC. This is not a lifetime spend cap. Configure dated ad groups, location targeting and ads before enabling.", "/Campaigns", {
54400
54555
  name: text$2,
54401
- dailyBudget: money$2,
54402
- maxCpc: money$2,
54556
+ dailyBudget: money$1,
54557
+ maxCpc: money$1,
54403
54558
  languages: {
54404
54559
  type: "array",
54405
54560
  minItems: 1,
@@ -54431,9 +54586,9 @@ function createMicrosoftAdsConnector(options) {
54431
54586
  write$1("adGroups.create", "Create a PAUSED Search ad group with explicit start/end dates and currency CPC bid. Serving is limited to Microsoft owned and operated networks; the parent daily budget is not a total cap.", "/AdGroups", {
54432
54587
  campaignId: id$6,
54433
54588
  name: text$2,
54434
- cpcBid: money$2,
54435
- startDate: date$3,
54436
- endDate: date$3
54589
+ cpcBid: money$1,
54590
+ startDate: date$2,
54591
+ endDate: date$2
54437
54592
  }, [
54438
54593
  "campaignId",
54439
54594
  "name",
@@ -54462,7 +54617,7 @@ function createMicrosoftAdsConnector(options) {
54462
54617
  "Broad"
54463
54618
  ]
54464
54619
  },
54465
- bid: money$2
54620
+ bid: money$1
54466
54621
  }, [
54467
54622
  "adGroupId",
54468
54623
  "text",
@@ -54574,8 +54729,8 @@ function createMicrosoftAdsConnector(options) {
54574
54729
  requiredScopes: [scope$1],
54575
54730
  description: "Submit a daily campaign performance CSV report for a closed date range. Returns ReportRequestId; poll reports.get. Spend is in account currency and attribution can lag.",
54576
54731
  parameters: parameters$1({
54577
- startDate: date$3,
54578
- endDate: date$3
54732
+ startDate: date$2,
54733
+ endDate: date$2
54579
54734
  }, ["startDate", "endDate"]),
54580
54735
  request: {
54581
54736
  method: "POST",
@@ -54692,12 +54847,12 @@ const id$5 = {
54692
54847
  ...text$1,
54693
54848
  pattern: "^[0-9]+$"
54694
54849
  };
54695
- const money$1 = {
54850
+ const money = {
54696
54851
  type: "number",
54697
54852
  exclusiveMinimum: 0,
54698
54853
  description: "Amount in the profile currency, not micros or cents. Provider marketplace minimums apply."
54699
54854
  };
54700
- const date$2 = {
54855
+ const date$1 = {
54701
54856
  type: "string",
54702
54857
  format: "date",
54703
54858
  description: "YYYY-MM-DD in the advertiser marketplace timezone."
@@ -54816,9 +54971,9 @@ function createAmazonAdsConnector(options) {
54816
54971
  }),
54817
54972
  write("campaigns.createSponsoredProducts", "Create a PAUSED manual Sponsored Products campaign. DAILY budget is in profile currency and is an average daily budget, not a hard daily or lifetime spend cap. Required end date bounds the schedule; only eligible products may advertise.", "campaigns", {
54818
54973
  name: text$1,
54819
- dailyBudget: money$1,
54820
- startDate: date$2,
54821
- endDate: date$2
54974
+ dailyBudget: money,
54975
+ startDate: date$1,
54976
+ endDate: date$1
54822
54977
  }, [
54823
54978
  "name",
54824
54979
  "dailyBudget",
@@ -54839,7 +54994,7 @@ function createAmazonAdsConnector(options) {
54839
54994
  write("adGroups.create", "Create a PAUSED Sponsored Products ad group with a default bid in profile currency.", "adGroups", {
54840
54995
  campaignId: id$5,
54841
54996
  name: text$1,
54842
- defaultBid: money$1
54997
+ defaultBid: money
54843
54998
  }, [
54844
54999
  "campaignId",
54845
55000
  "name",
@@ -54862,7 +55017,7 @@ function createAmazonAdsConnector(options) {
54862
55017
  "BROAD"
54863
55018
  ]
54864
55019
  },
54865
- bid: money$1
55020
+ bid: money
54866
55021
  }, [
54867
55022
  "campaignId",
54868
55023
  "adGroupId",
@@ -54901,8 +55056,8 @@ function createAmazonAdsConnector(options) {
54901
55056
  requiredScopes: [scope],
54902
55057
  description: "Request a daily Sponsored Products campaign report. Returns reportId; poll reports.get until COMPLETED. Costs are profile currency; attribution and reporting lag apply.",
54903
55058
  parameters: parameters({
54904
- startDate: date$2,
54905
- endDate: date$2
55059
+ startDate: date$1,
55060
+ endDate: date$1
54906
55061
  }, ["startDate", "endDate"]),
54907
55062
  request: {
54908
55063
  method: "POST",
@@ -56561,7 +56716,7 @@ const googleContactsConnector = declarativeRestConnector({
56561
56716
  const SCOPES$12 = ["https://www.googleapis.com/auth/documents", "https://www.googleapis.com/auth/drive.file"];
56562
56717
  const AUTH_URL$15 = "https://accounts.google.com/o/oauth2/v2/auth";
56563
56718
  const TOKEN_URL$17 = "https://oauth2.googleapis.com/token";
56564
- const API$12 = "https://docs.googleapis.com/v1";
56719
+ const API$11 = "https://docs.googleapis.com/v1";
56565
56720
  const DRIVE_API = "https://www.googleapis.com/drive/v3";
56566
56721
  const EXPORT_MIME = {
56567
56722
  pdf: "application/pdf",
@@ -56803,7 +56958,7 @@ function findAppendIndex(doc) {
56803
56958
  }
56804
56959
  async function getDocument$1(inv, accessToken, timeoutMs) {
56805
56960
  const { documentId } = inv.args ?? {};
56806
- const res = await fetch(`${API$12}/documents/${encodeURIComponent(documentId)}`, {
56961
+ const res = await fetch(`${API$11}/documents/${encodeURIComponent(documentId)}`, {
56807
56962
  headers: { authorization: `Bearer ${accessToken}` },
56808
56963
  signal: AbortSignal.timeout(timeoutMs)
56809
56964
  });
@@ -56827,7 +56982,7 @@ async function getDocument$1(inv, accessToken, timeoutMs) {
56827
56982
  async function createDocument$1(inv, accessToken, timeoutMs) {
56828
56983
  const { title, body } = inv.args ?? {};
56829
56984
  if (!title || typeof title !== "string") throw new Error("google-docs create_document: title is required");
56830
- const createRes = await fetch(`${API$12}/documents`, {
56985
+ const createRes = await fetch(`${API$11}/documents`, {
56831
56986
  method: "POST",
56832
56987
  headers: {
56833
56988
  authorization: `Bearer ${accessToken}`,
@@ -56840,7 +56995,7 @@ async function createDocument$1(inv, accessToken, timeoutMs) {
56840
56995
  const created = await createRes.json();
56841
56996
  let revisionId = created.revisionId;
56842
56997
  if (typeof body === "string" && body.length > 0) {
56843
- const insertRes = await fetch(`${API$12}/documents/${encodeURIComponent(created.documentId)}:batchUpdate`, {
56998
+ const insertRes = await fetch(`${API$11}/documents/${encodeURIComponent(created.documentId)}:batchUpdate`, {
56844
56999
  method: "POST",
56845
57000
  headers: {
56846
57001
  authorization: `Bearer ${accessToken}`,
@@ -56870,7 +57025,7 @@ async function createDocument$1(inv, accessToken, timeoutMs) {
56870
57025
  async function appendText(inv, accessToken, timeoutMs) {
56871
57026
  const { documentId, text, requiredRevisionId } = inv.args ?? {};
56872
57027
  if (!text) throw new Error("google-docs append_text: text is required");
56873
- const docRes = await fetch(`${API$12}/documents/${encodeURIComponent(documentId)}?fields=documentId,revisionId,body(content(endIndex))`, {
57028
+ const docRes = await fetch(`${API$11}/documents/${encodeURIComponent(documentId)}?fields=documentId,revisionId,body(content(endIndex))`, {
56874
57029
  headers: { authorization: `Bearer ${accessToken}` },
56875
57030
  signal: AbortSignal.timeout(timeoutMs)
56876
57031
  });
@@ -56881,7 +57036,7 @@ async function appendText(inv, accessToken, timeoutMs) {
56881
57036
  text
56882
57037
  } }] };
56883
57038
  if (requiredRevisionId) body.writeControl = { requiredRevisionId };
56884
- const res = await fetch(`${API$12}/documents/${encodeURIComponent(documentId)}:batchUpdate`, {
57039
+ const res = await fetch(`${API$11}/documents/${encodeURIComponent(documentId)}:batchUpdate`, {
56885
57040
  method: "POST",
56886
57041
  headers: {
56887
57042
  authorization: `Bearer ${accessToken}`,
@@ -57021,7 +57176,7 @@ const SCOPE_WATCH = "https://www.googleapis.com/auth/drive";
57021
57176
  const SCOPE_WRITE$2 = "https://www.googleapis.com/auth/drive.file";
57022
57177
  const AUTH_URL$14 = "https://accounts.google.com/o/oauth2/v2/auth";
57023
57178
  const TOKEN_URL$16 = "https://oauth2.googleapis.com/token";
57024
- const API$11 = "https://www.googleapis.com/drive/v3";
57179
+ const API$10 = "https://www.googleapis.com/drive/v3";
57025
57180
  const UPLOAD_API = "https://www.googleapis.com/upload/drive/v3";
57026
57181
  function googleDrive(opts) {
57027
57182
  const { clientId, clientSecret } = opts;
@@ -57277,7 +57432,7 @@ function googleDrive(opts) {
57277
57432
  async test(source) {
57278
57433
  try {
57279
57434
  const accessToken = await ensureFreshAccessToken$11(source.credentials, clientId, clientSecret);
57280
- const res = await fetch(`${API$11}/about?fields=user`, {
57435
+ const res = await fetch(`${API$10}/about?fields=user`, {
57281
57436
  headers: { authorization: `Bearer ${accessToken}` },
57282
57437
  signal: AbortSignal.timeout(8e3)
57283
57438
  });
@@ -57310,7 +57465,7 @@ async function listFiles$1(inv, accessToken, timeoutMs) {
57310
57465
  fields: "nextPageToken, files(id,name,mimeType,modifiedTime,size,md5Checksum,parents)"
57311
57466
  });
57312
57467
  if (args.pageToken) params.set("pageToken", args.pageToken);
57313
- const res = await fetch(`${API$11}/files?${params.toString()}`, {
57468
+ const res = await fetch(`${API$10}/files?${params.toString()}`, {
57314
57469
  headers: { authorization: `Bearer ${accessToken}` },
57315
57470
  signal: AbortSignal.timeout(timeoutMs)
57316
57471
  });
@@ -57331,7 +57486,7 @@ const GOOGLE_NATIVE_DEFAULTS = {
57331
57486
  };
57332
57487
  async function readFile$1(inv, accessToken, timeoutMs) {
57333
57488
  const { fileId, exportMime } = inv.args ?? {};
57334
- const metaRes = await fetch(`${API$11}/files/${encodeURIComponent(fileId)}?fields=id,name,mimeType,modifiedTime`, {
57489
+ const metaRes = await fetch(`${API$10}/files/${encodeURIComponent(fileId)}?fields=id,name,mimeType,modifiedTime`, {
57335
57490
  headers: { authorization: `Bearer ${accessToken}` },
57336
57491
  signal: AbortSignal.timeout(timeoutMs)
57337
57492
  });
@@ -57342,7 +57497,7 @@ async function readFile$1(inv, accessToken, timeoutMs) {
57342
57497
  const fetchedAt = Date.now();
57343
57498
  if (isNative) {
57344
57499
  const targetMime = exportMime ?? GOOGLE_NATIVE_DEFAULTS[meta.mimeType] ?? "text/plain";
57345
- const res = await fetch(`${API$11}/files/${encodeURIComponent(fileId)}/export?mimeType=${encodeURIComponent(targetMime)}`, {
57500
+ const res = await fetch(`${API$10}/files/${encodeURIComponent(fileId)}/export?mimeType=${encodeURIComponent(targetMime)}`, {
57346
57501
  headers: { authorization: `Bearer ${accessToken}` },
57347
57502
  signal: AbortSignal.timeout(timeoutMs)
57348
57503
  });
@@ -57372,7 +57527,7 @@ async function readFile$1(inv, accessToken, timeoutMs) {
57372
57527
  fetchedAt
57373
57528
  };
57374
57529
  }
57375
- const res = await fetch(`${API$11}/files/${encodeURIComponent(fileId)}?alt=media`, {
57530
+ const res = await fetch(`${API$10}/files/${encodeURIComponent(fileId)}?alt=media`, {
57376
57531
  headers: { authorization: `Bearer ${accessToken}` },
57377
57532
  signal: AbortSignal.timeout(timeoutMs)
57378
57533
  });
@@ -57410,7 +57565,7 @@ async function watchFolder$1(inv, accessToken, timeoutMs) {
57410
57565
  address
57411
57566
  };
57412
57567
  if (ttlMs && ttlMs > 0) body.expiration = String(Date.now() + ttlMs);
57413
- const res = await fetch(`${API$11}/files/${encodeURIComponent(folderId)}/watch`, {
57568
+ const res = await fetch(`${API$10}/files/${encodeURIComponent(folderId)}/watch`, {
57414
57569
  method: "POST",
57415
57570
  headers: {
57416
57571
  authorization: `Bearer ${accessToken}`,
@@ -57498,7 +57653,7 @@ async function createFolder$1(inv, accessToken, timeoutMs) {
57498
57653
  mimeType: "application/vnd.google-apps.folder"
57499
57654
  };
57500
57655
  if (args.parents?.length) body.parents = args.parents;
57501
- const res = await fetch(`${API$11}/files?fields=id,name,mimeType,parents,modifiedTime`, {
57656
+ const res = await fetch(`${API$10}/files?fields=id,name,mimeType,parents,modifiedTime`, {
57502
57657
  method: "POST",
57503
57658
  headers: {
57504
57659
  authorization: `Bearer ${accessToken}`,
@@ -57525,7 +57680,7 @@ async function createFolder$1(inv, accessToken, timeoutMs) {
57525
57680
  async function deleteFile(inv, accessToken, timeoutMs) {
57526
57681
  const args = inv.args ?? {};
57527
57682
  if (!args.fileId) throw new Error("google-drive delete_file: `fileId` is required");
57528
- const res = await fetch(`${API$11}/files/${encodeURIComponent(args.fileId)}`, {
57683
+ const res = await fetch(`${API$10}/files/${encodeURIComponent(args.fileId)}`, {
57529
57684
  method: "DELETE",
57530
57685
  headers: { authorization: `Bearer ${accessToken}` },
57531
57686
  signal: AbortSignal.timeout(timeoutMs)
@@ -57548,7 +57703,7 @@ async function moveFile(inv, accessToken, timeoutMs) {
57548
57703
  const params = new URLSearchParams({ fields: "id,name,parents,modifiedTime" });
57549
57704
  if (args.addParents?.length) params.set("addParents", args.addParents.join(","));
57550
57705
  if (args.removeParents?.length) params.set("removeParents", args.removeParents.join(","));
57551
- const res = await fetch(`${API$11}/files/${encodeURIComponent(args.fileId)}?${params.toString()}`, {
57706
+ const res = await fetch(`${API$10}/files/${encodeURIComponent(args.fileId)}?${params.toString()}`, {
57552
57707
  method: "PATCH",
57553
57708
  headers: {
57554
57709
  authorization: `Bearer ${accessToken}`,
@@ -57653,7 +57808,7 @@ const SCOPES$11 = [
57653
57808
  ];
57654
57809
  const AUTH_URL$13 = "https://accounts.google.com/o/oauth2/v2/auth";
57655
57810
  const TOKEN_URL$15 = "https://oauth2.googleapis.com/token";
57656
- const API$10 = "https://forms.googleapis.com/v1";
57811
+ const API$9 = "https://forms.googleapis.com/v1";
57657
57812
  function googleForms(opts) {
57658
57813
  const { clientId, clientSecret } = opts;
57659
57814
  const timeoutMs = opts.timeoutMs ?? 3e4;
@@ -57880,7 +58035,7 @@ function flattenAnswers(answers) {
57880
58035
  async function getForm(inv, accessToken, timeoutMs) {
57881
58036
  const { formId } = inv.args ?? {};
57882
58037
  if (!formId) throw new Error("google-forms get_form: formId is required");
57883
- const res = await fetch(`${API$10}/forms/${encodeURIComponent(formId)}`, {
58038
+ const res = await fetch(`${API$9}/forms/${encodeURIComponent(formId)}`, {
57884
58039
  headers: { authorization: `Bearer ${accessToken}` },
57885
58040
  signal: AbortSignal.timeout(timeoutMs)
57886
58041
  });
@@ -57907,7 +58062,7 @@ async function listResponses(inv, accessToken, timeoutMs) {
57907
58062
  if (pageToken) params.set("pageToken", pageToken);
57908
58063
  if (filter) params.set("filter", filter);
57909
58064
  const qs = params.toString();
57910
- const url = `${API$10}/forms/${encodeURIComponent(formId)}/responses${qs ? `?${qs}` : ""}`;
58065
+ const url = `${API$9}/forms/${encodeURIComponent(formId)}/responses${qs ? `?${qs}` : ""}`;
57911
58066
  const res = await fetch(url, {
57912
58067
  headers: { authorization: `Bearer ${accessToken}` },
57913
58068
  signal: AbortSignal.timeout(timeoutMs)
@@ -57934,7 +58089,7 @@ async function getResponse(inv, accessToken, timeoutMs) {
57934
58089
  const { formId, responseId } = inv.args ?? {};
57935
58090
  if (!formId) throw new Error("google-forms get_response: formId is required");
57936
58091
  if (!responseId) throw new Error("google-forms get_response: responseId is required");
57937
- const res = await fetch(`${API$10}/forms/${encodeURIComponent(formId)}/responses/${encodeURIComponent(responseId)}`, {
58092
+ const res = await fetch(`${API$9}/forms/${encodeURIComponent(formId)}/responses/${encodeURIComponent(responseId)}`, {
57938
58093
  headers: { authorization: `Bearer ${accessToken}` },
57939
58094
  signal: AbortSignal.timeout(timeoutMs)
57940
58095
  });
@@ -57958,7 +58113,7 @@ async function createForm(inv, accessToken, timeoutMs) {
57958
58113
  if (!title) throw new Error("google-forms create_form: title is required");
57959
58114
  const info = { title };
57960
58115
  if (documentTitle) info.documentTitle = documentTitle;
57961
- const res = await fetch(`${API$10}/forms`, {
58116
+ const res = await fetch(`${API$9}/forms`, {
57962
58117
  method: "POST",
57963
58118
  headers: {
57964
58119
  authorization: `Bearer ${accessToken}`,
@@ -57989,7 +58144,7 @@ async function batchUpdate(inv, accessToken, timeoutMs) {
57989
58144
  const body = { requests };
57990
58145
  if (typeof includeFormInResponse === "boolean") body.includeFormInResponse = includeFormInResponse;
57991
58146
  if (writeControl) body.writeControl = writeControl;
57992
- const res = await fetch(`${API$10}/forms/${encodeURIComponent(formId)}:batchUpdate`, {
58147
+ const res = await fetch(`${API$9}/forms/${encodeURIComponent(formId)}:batchUpdate`, {
57993
58148
  method: "POST",
57994
58149
  headers: {
57995
58150
  authorization: `Bearer ${accessToken}`,
@@ -61555,16 +61710,18 @@ const helpscoutConnector = declarativeRestConnector({
61555
61710
  */
61556
61711
  const SCOPE_CONTACTS_READ = "crm.objects.contacts.read";
61557
61712
  const SCOPE_CONTACTS_WRITE = "crm.objects.contacts.write";
61713
+ const SCOPE_DEALS_READ = "crm.objects.deals.read";
61558
61714
  const SCOPE_DEALS_WRITE = "crm.objects.deals.write";
61559
61715
  const SCOPE_TICKETS_WRITE = "tickets";
61560
61716
  const SCOPES_BASE = [
61561
61717
  "oauth",
61562
61718
  SCOPE_CONTACTS_READ,
61563
- SCOPE_CONTACTS_WRITE
61719
+ SCOPE_CONTACTS_WRITE,
61720
+ SCOPE_DEALS_READ
61564
61721
  ];
61565
61722
  const AUTH_URL$10 = "https://app.hubspot.com/oauth/authorize";
61566
61723
  const TOKEN_URL$12 = "https://api.hubapi.com/oauth/v1/token";
61567
- const API$9 = "https://api.hubapi.com";
61724
+ const API$8 = "https://api.hubapi.com";
61568
61725
  function hubspot(opts) {
61569
61726
  const { clientId, clientSecret } = opts;
61570
61727
  const scopes = opts.includeWriteScope ? [
@@ -61822,7 +61979,7 @@ function hubspot(opts) {
61822
61979
  if (inv.capabilityName !== "find_contact") throw new Error(`hubspot: unknown read capability ${inv.capabilityName}`);
61823
61980
  const { email } = inv.args;
61824
61981
  const accessToken = await ensureFreshAccessToken$7(inv.source.credentials, clientId, clientSecret);
61825
- const res = await fetch(`${API$9}/crm/v3/objects/contacts/search`, {
61982
+ const res = await fetch(`${API$8}/crm/v3/objects/contacts/search`, {
61826
61983
  method: "POST",
61827
61984
  headers: {
61828
61985
  authorization: `Bearer ${accessToken}`,
@@ -61911,7 +62068,7 @@ function hubspot(opts) {
61911
62068
  async test(source) {
61912
62069
  try {
61913
62070
  const accessToken = await ensureFreshAccessToken$7(source.credentials, clientId, clientSecret);
61914
- const res = await fetch(`${API$9}/oauth/v1/access-tokens/${encodeURIComponent(accessToken)}`, { signal: AbortSignal.timeout(8e3) });
62071
+ const res = await fetch(`${API$8}/oauth/v1/access-tokens/${encodeURIComponent(accessToken)}`, { signal: AbortSignal.timeout(8e3) });
61915
62072
  if (res.status === 401 || res.status === 403 || res.status === 404) return {
61916
62073
  ok: false,
61917
62074
  reason: `HubSpot rejected token (${res.status}) — reconnect required`
@@ -61933,7 +62090,7 @@ function hubspot(opts) {
61933
62090
  async function upsertContact(inv, accessToken) {
61934
62091
  const { email, properties } = inv.args;
61935
62092
  const idemKey = sanitizeIdempotencyKey(inv.idempotencyKey);
61936
- const url = `${API$9}/crm/v3/objects/contacts/batch/upsert?idempotencyKey=${encodeURIComponent(idemKey)}`;
62093
+ const url = `${API$8}/crm/v3/objects/contacts/batch/upsert?idempotencyKey=${encodeURIComponent(idemKey)}`;
61937
62094
  const body = { inputs: [{
61938
62095
  idProperty: "email",
61939
62096
  id: email.toLowerCase(),
@@ -61976,7 +62133,7 @@ async function upsertContact(inv, accessToken) {
61976
62133
  async function createNote(inv, accessToken) {
61977
62134
  const { contactId, body } = inv.args;
61978
62135
  const idemKey = sanitizeIdempotencyKey(inv.idempotencyKey);
61979
- const url = `${API$9}/crm/v3/objects/notes/batch/create?idempotencyKey=${encodeURIComponent(idemKey)}`;
62136
+ const url = `${API$8}/crm/v3/objects/notes/batch/create?idempotencyKey=${encodeURIComponent(idemKey)}`;
61980
62137
  const payload = { inputs: [{
61981
62138
  properties: {
61982
62139
  hs_note_body: body,
@@ -62035,7 +62192,7 @@ async function createDeal(inv, accessToken, timeoutMs) {
62035
62192
  associationTypeId: 3
62036
62193
  }]
62037
62194
  }));
62038
- const res = await fetch(`${API$9}/crm/v3/objects/deals`, {
62195
+ const res = await fetch(`${API$8}/crm/v3/objects/deals`, {
62039
62196
  method: "POST",
62040
62197
  headers: {
62041
62198
  authorization: `Bearer ${accessToken}`,
@@ -62070,7 +62227,7 @@ async function updateDealStage(inv, accessToken, timeoutMs) {
62070
62227
  const args = inv.args ?? {};
62071
62228
  if (!args.dealId) throw new Error("hubspot update_deal_stage: `dealId` is required");
62072
62229
  if (!args.dealstage) throw new Error("hubspot update_deal_stage: `dealstage` is required");
62073
- const res = await fetch(`${API$9}/crm/v3/objects/deals/${encodeURIComponent(args.dealId)}`, {
62230
+ const res = await fetch(`${API$8}/crm/v3/objects/deals/${encodeURIComponent(args.dealId)}`, {
62074
62231
  method: "PATCH",
62075
62232
  headers: {
62076
62233
  authorization: `Bearer ${accessToken}`,
@@ -62109,7 +62266,7 @@ async function createTicket(inv, accessToken, timeoutMs) {
62109
62266
  if (args.properties.content !== void 0) ticketProperties.content = args.properties.content;
62110
62267
  if (args.properties.hs_pipeline_stage !== void 0) ticketProperties.hs_pipeline_stage = args.properties.hs_pipeline_stage;
62111
62268
  if (args.properties.hs_ticket_priority !== void 0) ticketProperties.hs_ticket_priority = args.properties.hs_ticket_priority;
62112
- const res = await fetch(`${API$9}/crm/v3/objects/tickets`, {
62269
+ const res = await fetch(`${API$8}/crm/v3/objects/tickets`, {
62113
62270
  method: "POST",
62114
62271
  headers: {
62115
62272
  authorization: `Bearer ${accessToken}`,
@@ -62172,7 +62329,7 @@ async function searchCreatedSince(inv, accessToken, object, properties, label) {
62172
62329
  const { createdAfter, limit, after } = inv.args;
62173
62330
  const since = Date.parse(createdAfter);
62174
62331
  if (!Number.isFinite(since)) throw new Error(`hubspot ${label}: createdAfter must be an ISO-8601 time`);
62175
- const res = await fetch(`${API$9}/crm/v3/objects/${object}/search`, {
62332
+ const res = await fetch(`${API$8}/crm/v3/objects/${object}/search`, {
62176
62333
  method: "POST",
62177
62334
  headers: {
62178
62335
  authorization: `Bearer ${accessToken}`,
@@ -62259,7 +62416,7 @@ async function listNewContacts(inv, accessToken) {
62259
62416
  };
62260
62417
  }
62261
62418
  async function hubspotJson(inv, accessToken, path, init = {}) {
62262
- const res = await fetch(`${API$9}${path}`, {
62419
+ const res = await fetch(`${API$8}${path}`, {
62263
62420
  ...init,
62264
62421
  headers: {
62265
62422
  authorization: `Bearer ${accessToken}`,
@@ -76323,7 +76480,7 @@ const SCOPE_WRITE = "https://graph.microsoft.com/Files.ReadWrite";
76323
76480
  const SCOPE_OFFLINE$1 = "offline_access";
76324
76481
  const AUTH_URL$6 = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
76325
76482
  const TOKEN_URL$7 = "https://login.microsoftonline.com/common/oauth2/v2.0/token";
76326
- const API$8 = "https://graph.microsoft.com/v1.0";
76483
+ const API$7 = "https://graph.microsoft.com/v1.0";
76327
76484
  function oneDrive(opts) {
76328
76485
  const { clientId, clientSecret } = opts;
76329
76486
  const timeoutMs = opts.timeoutMs ?? 3e4;
@@ -76640,7 +76797,7 @@ function oneDrive(opts) {
76640
76797
  async test(source) {
76641
76798
  try {
76642
76799
  const accessToken = await ensureFreshAccessToken$3(source.credentials, clientId, clientSecret);
76643
- const res = await fetch(`${API$8}/me/drive?$select=id`, {
76800
+ const res = await fetch(`${API$7}/me/drive?$select=id`, {
76644
76801
  headers: { authorization: `Bearer ${accessToken}` },
76645
76802
  signal: AbortSignal.timeout(8e3)
76646
76803
  });
@@ -76674,7 +76831,7 @@ async function listFiles(inv, accessToken, timeoutMs) {
76674
76831
  const headers = { authorization: `Bearer ${accessToken}` };
76675
76832
  if (args.query) headers["ConsistencyLevel"] = "eventual";
76676
76833
  const path = args.folderId ? `/me/drive/items/${encodeURIComponent(args.folderId)}/children` : "/me/drive/root/children";
76677
- const url = !!args.query && !args.folderId ? `${API$8}/me/drive/root/search(q=${encodeURIComponent(`'${args.query.replace(/'/g, "''")}'`)})?${stripSearch(params).toString()}` : `${API$8}${path}?${params.toString()}`;
76834
+ const url = !!args.query && !args.folderId ? `${API$7}/me/drive/root/search(q=${encodeURIComponent(`'${args.query.replace(/'/g, "''")}'`)})?${stripSearch(params).toString()}` : `${API$7}${path}?${params.toString()}`;
76678
76835
  const res = await fetch(url, {
76679
76836
  headers,
76680
76837
  signal: AbortSignal.timeout(timeoutMs)
@@ -76703,7 +76860,7 @@ function stripSearch(params) {
76703
76860
  async function readFile(inv, accessToken, timeoutMs) {
76704
76861
  const { fileId } = inv.args ?? {};
76705
76862
  if (!fileId) throw new Error("onedrive read_file: fileId is required");
76706
- const metaUrl = `${API$8}/me/drive/items/${encodeURIComponent(fileId)}?$select=id,name,eTag,lastModifiedDateTime,size,file,folder`;
76863
+ const metaUrl = `${API$7}/me/drive/items/${encodeURIComponent(fileId)}?$select=id,name,eTag,lastModifiedDateTime,size,file,folder`;
76707
76864
  const metaRes = await fetch(metaUrl, {
76708
76865
  headers: { authorization: `Bearer ${accessToken}` },
76709
76866
  signal: AbortSignal.timeout(timeoutMs)
@@ -76718,7 +76875,7 @@ async function readFile(inv, accessToken, timeoutMs) {
76718
76875
  if (meta.folder) throw new Error(`onedrive read_file: item ${fileId} is a folder, not a file`);
76719
76876
  const mimeType = meta.file?.mimeType ?? "application/octet-stream";
76720
76877
  const fetchedAt = Date.now();
76721
- const contentRes = await fetch(`${API$8}/me/drive/items/${encodeURIComponent(fileId)}/content`, {
76878
+ const contentRes = await fetch(`${API$7}/me/drive/items/${encodeURIComponent(fileId)}/content`, {
76722
76879
  headers: { authorization: `Bearer ${accessToken}` },
76723
76880
  signal: AbortSignal.timeout(timeoutMs)
76724
76881
  });
@@ -76767,7 +76924,7 @@ async function watchFolder(inv, accessToken, timeoutMs) {
76767
76924
  expirationDateTime,
76768
76925
  clientState: clientState ?? inv.idempotencyKey
76769
76926
  };
76770
- const res = await fetch(`${API$8}/subscriptions`, {
76927
+ const res = await fetch(`${API$7}/subscriptions`, {
76771
76928
  method: "POST",
76772
76929
  headers: {
76773
76930
  authorization: `Bearer ${accessToken}`,
@@ -76803,7 +76960,7 @@ async function uploadFile$1(inv, accessToken, timeoutMs) {
76803
76960
  if (fileContent === void 0 || fileContent === null) throw new Error("onedrive files.upload: fileContent is required");
76804
76961
  const body = encoding === "base64" ? Buffer.from(fileContent, "base64") : Buffer.from(fileContent, "utf-8");
76805
76962
  const parentSegment = folderId === "root" ? "/me/drive/root" : `/me/drive/items/${encodeURIComponent(folderId)}`;
76806
- const url = `${API$8}${parentSegment}:/${encodeURIComponent(fileName)}:/content`;
76963
+ const url = `${API$7}${parentSegment}:/${encodeURIComponent(fileName)}:/content`;
76807
76964
  const res = await fetch(url, {
76808
76965
  method: "PUT",
76809
76966
  headers: {
@@ -76837,7 +76994,7 @@ async function uploadFile$1(inv, accessToken, timeoutMs) {
76837
76994
  async function deleteItem(inv, accessToken, timeoutMs) {
76838
76995
  const { itemId } = inv.args ?? {};
76839
76996
  if (!itemId) throw new Error("onedrive files.delete: itemId is required");
76840
- const res = await fetch(`${API$8}${itemPath(itemId)}`, {
76997
+ const res = await fetch(`${API$7}${itemPath(itemId)}`, {
76841
76998
  method: "DELETE",
76842
76999
  headers: { authorization: `Bearer ${accessToken}` },
76843
77000
  signal: AbortSignal.timeout(timeoutMs)
@@ -76873,7 +77030,7 @@ async function moveItem(inv, accessToken, timeoutMs) {
76873
77030
  const body = {};
76874
77031
  if (newParentId) body.parentReference = newParentId === "root" ? { path: "/drive/root" } : { id: newParentId };
76875
77032
  if (newName) body.name = newName;
76876
- const res = await fetch(`${API$8}${itemPath(itemId)}`, {
77033
+ const res = await fetch(`${API$7}${itemPath(itemId)}`, {
76877
77034
  method: "PATCH",
76878
77035
  headers: {
76879
77036
  authorization: `Bearer ${accessToken}`,
@@ -76911,7 +77068,7 @@ async function shareItem(inv, accessToken, timeoutMs) {
76911
77068
  };
76912
77069
  if (password) body.password = password;
76913
77070
  if (expirationDateTime) body.expirationDateTime = expirationDateTime;
76914
- const res = await fetch(`${API$8}${itemPath(itemId)}/createLink`, {
77071
+ const res = await fetch(`${API$7}${itemPath(itemId)}/createLink`, {
76915
77072
  method: "POST",
76916
77073
  headers: {
76917
77074
  authorization: `Bearer ${accessToken}`,
@@ -76948,7 +77105,7 @@ async function createFolder(inv, accessToken, timeoutMs) {
76948
77105
  folder: {},
76949
77106
  "@microsoft.graph.conflictBehavior": conflictBehavior ?? "fail"
76950
77107
  };
76951
- const res = await fetch(`${API$8}${parentSegment}`, {
77108
+ const res = await fetch(`${API$7}${parentSegment}`, {
76952
77109
  method: "POST",
76953
77110
  headers: {
76954
77111
  authorization: `Bearer ${accessToken}`,
@@ -77225,7 +77382,7 @@ const SCOPE_RW = "https://graph.microsoft.com/Mail.ReadWrite";
77225
77382
  const SCOPE_OFFLINE = "offline_access";
77226
77383
  const AUTH_URL$5 = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
77227
77384
  const TOKEN_URL$6 = "https://login.microsoftonline.com/common/oauth2/v2.0/token";
77228
- const API$7 = "https://graph.microsoft.com/v1.0";
77385
+ const API$6 = "https://graph.microsoft.com/v1.0";
77229
77386
  function outlookMail(opts) {
77230
77387
  const { clientId, clientSecret } = opts;
77231
77388
  const timeoutMs = opts.timeoutMs ?? 3e4;
@@ -77651,7 +77808,7 @@ function outlookMail(opts) {
77651
77808
  async test(source) {
77652
77809
  try {
77653
77810
  const accessToken = await ensureFreshAccessToken$2(source.credentials, clientId, clientSecret);
77654
- const res = await fetch(`${API$7}/me?$select=id,userPrincipalName`, {
77811
+ const res = await fetch(`${API$6}/me?$select=id,userPrincipalName`, {
77655
77812
  headers: { authorization: `Bearer ${accessToken}` },
77656
77813
  signal: AbortSignal.timeout(8e3)
77657
77814
  });
@@ -77685,7 +77842,7 @@ async function listMessages(inv, accessToken, timeoutMs) {
77685
77842
  if (args.skipToken) params.set("$skiptoken", args.skipToken);
77686
77843
  const headers = { authorization: `Bearer ${accessToken}` };
77687
77844
  if (args.query) headers["ConsistencyLevel"] = "eventual";
77688
- const res = await fetch(`${API$7}/me/mailFolders/${folder}/messages?${params.toString()}`, {
77845
+ const res = await fetch(`${API$6}/me/mailFolders/${folder}/messages?${params.toString()}`, {
77689
77846
  headers,
77690
77847
  signal: AbortSignal.timeout(timeoutMs)
77691
77848
  });
@@ -77719,7 +77876,7 @@ function toMessageSummary(m) {
77719
77876
  }
77720
77877
  async function readMessage(inv, accessToken, timeoutMs) {
77721
77878
  const { id } = inv.args;
77722
- const url = `${API$7}/me/messages/${encodeURIComponent(id)}?$expand=attachments($select=id,name,contentType,size,isInline)`;
77879
+ const url = `${API$6}/me/messages/${encodeURIComponent(id)}?$expand=attachments($select=id,name,contentType,size,isInline)`;
77723
77880
  const res = await fetch(url, {
77724
77881
  headers: { authorization: `Bearer ${accessToken}` },
77725
77882
  signal: AbortSignal.timeout(timeoutMs)
@@ -77758,7 +77915,7 @@ async function readMessage(inv, accessToken, timeoutMs) {
77758
77915
  async function sendReply(inv, accessToken, timeoutMs) {
77759
77916
  const { messageId, body, bodyType, replyAll, comment } = inv.args;
77760
77917
  const action = replyAll ? "createReplyAll" : "createReply";
77761
- const draftRes = await fetch(`${API$7}/me/messages/${encodeURIComponent(messageId)}/${action}`, {
77918
+ const draftRes = await fetch(`${API$6}/me/messages/${encodeURIComponent(messageId)}/${action}`, {
77762
77919
  method: "POST",
77763
77920
  headers: {
77764
77921
  authorization: `Bearer ${accessToken}`,
@@ -77783,7 +77940,7 @@ async function sendReply(inv, accessToken, timeoutMs) {
77783
77940
  value: inv.idempotencyKey
77784
77941
  }]
77785
77942
  };
77786
- const patchRes = await fetch(`${API$7}/me/messages/${encodeURIComponent(draft.id)}`, {
77943
+ const patchRes = await fetch(`${API$6}/me/messages/${encodeURIComponent(draft.id)}`, {
77787
77944
  method: "PATCH",
77788
77945
  headers: {
77789
77946
  authorization: `Bearer ${accessToken}`,
@@ -77797,7 +77954,7 @@ async function sendReply(inv, accessToken, timeoutMs) {
77797
77954
  const text = await patchRes.text().catch(() => "");
77798
77955
  throw new Error(`outlook-mail send_reply patch ${patchRes.status}: ${text.slice(0, 200)}`);
77799
77956
  }
77800
- const sendRes = await fetch(`${API$7}/me/messages/${encodeURIComponent(draft.id)}/send`, {
77957
+ const sendRes = await fetch(`${API$6}/me/messages/${encodeURIComponent(draft.id)}/send`, {
77801
77958
  method: "POST",
77802
77959
  headers: { authorization: `Bearer ${accessToken}` },
77803
77960
  signal: AbortSignal.timeout(timeoutMs)
@@ -77853,7 +78010,7 @@ function buildMessagePayload(args, idempotencyKey, cap) {
77853
78010
  async function sendMessage(inv, accessToken, timeoutMs) {
77854
78011
  const args = inv.args ?? {};
77855
78012
  const message = buildMessagePayload(args, inv.idempotencyKey, "send_message");
77856
- const res = await fetch(`${API$7}/me/sendMail`, {
78013
+ const res = await fetch(`${API$6}/me/sendMail`, {
77857
78014
  method: "POST",
77858
78015
  headers: {
77859
78016
  authorization: `Bearer ${accessToken}`,
@@ -77883,7 +78040,7 @@ async function sendMessage(inv, accessToken, timeoutMs) {
77883
78040
  }
77884
78041
  async function createDraft(inv, accessToken, timeoutMs) {
77885
78042
  const message = buildMessagePayload(inv.args ?? {}, inv.idempotencyKey, "create_draft");
77886
- const res = await fetch(`${API$7}/me/messages`, {
78043
+ const res = await fetch(`${API$6}/me/messages`, {
77887
78044
  method: "POST",
77888
78045
  headers: {
77889
78046
  authorization: `Bearer ${accessToken}`,
@@ -77922,7 +78079,7 @@ async function subscribeFolder(inv, accessToken, timeoutMs) {
77922
78079
  expirationDateTime,
77923
78080
  clientState: clientState ?? inv.idempotencyKey
77924
78081
  };
77925
- const res = await fetch(`${API$7}/subscriptions`, {
78082
+ const res = await fetch(`${API$6}/subscriptions`, {
77926
78083
  method: "POST",
77927
78084
  headers: {
77928
78085
  authorization: `Bearer ${accessToken}`,
@@ -77956,7 +78113,7 @@ async function forwardMessage(inv, accessToken, timeoutMs) {
77956
78113
  const toList = Array.isArray(to) ? to : [to];
77957
78114
  const fwdBody = { toRecipients: toList.map((address) => ({ emailAddress: { address } })) };
77958
78115
  if (comment !== void 0) fwdBody.comment = comment;
77959
- const res = await fetch(`${API$7}/me/messages/${encodeURIComponent(messageId)}/forward`, {
78116
+ const res = await fetch(`${API$6}/me/messages/${encodeURIComponent(messageId)}/forward`, {
77960
78117
  method: "POST",
77961
78118
  headers: {
77962
78119
  authorization: `Bearer ${accessToken}`,
@@ -77985,7 +78142,7 @@ async function moveMessage(inv, accessToken, timeoutMs) {
77985
78142
  const { messageId, destinationId } = inv.args;
77986
78143
  if (!messageId) throw new Error("outlook-mail move_message: `messageId` is required");
77987
78144
  if (!destinationId) throw new Error("outlook-mail move_message: `destinationId` is required");
77988
- const res = await fetch(`${API$7}/me/messages/${encodeURIComponent(messageId)}/move`, {
78145
+ const res = await fetch(`${API$6}/me/messages/${encodeURIComponent(messageId)}/move`, {
77989
78146
  method: "POST",
77990
78147
  headers: {
77991
78148
  authorization: `Bearer ${accessToken}`,
@@ -78016,7 +78173,7 @@ async function setLabels(inv, accessToken, timeoutMs) {
78016
78173
  const { messageId, categories } = inv.args;
78017
78174
  if (!messageId) throw new Error("outlook-mail set_labels: `messageId` is required");
78018
78175
  if (!Array.isArray(categories)) throw new Error("outlook-mail set_labels: `categories` must be an array (the full desired set)");
78019
- const res = await fetch(`${API$7}/me/messages/${encodeURIComponent(messageId)}`, {
78176
+ const res = await fetch(`${API$6}/me/messages/${encodeURIComponent(messageId)}`, {
78020
78177
  method: "PATCH",
78021
78178
  headers: {
78022
78179
  authorization: `Bearer ${accessToken}`,
@@ -78044,7 +78201,7 @@ async function setLabels(inv, accessToken, timeoutMs) {
78044
78201
  async function sendDraft(inv, accessToken, timeoutMs) {
78045
78202
  const { messageId } = inv.args;
78046
78203
  if (!messageId) throw new Error("outlook-mail send_draft: `messageId` is required");
78047
- const res = await fetch(`${API$7}/me/messages/${encodeURIComponent(messageId)}/send`, {
78204
+ const res = await fetch(`${API$6}/me/messages/${encodeURIComponent(messageId)}/send`, {
78048
78205
  method: "POST",
78049
78206
  headers: { authorization: `Bearer ${accessToken}` },
78050
78207
  signal: AbortSignal.timeout(timeoutMs)
@@ -78066,7 +78223,7 @@ async function sendDraft(inv, accessToken, timeoutMs) {
78066
78223
  }
78067
78224
  async function downloadAttachment$1(inv, accessToken, timeoutMs) {
78068
78225
  const { messageId, attachmentId } = inv.args;
78069
- const url = `${API$7}/me/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachmentId)}`;
78226
+ const url = `${API$6}/me/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachmentId)}`;
78070
78227
  const res = await fetch(url, {
78071
78228
  headers: { authorization: `Bearer ${accessToken}` },
78072
78229
  signal: AbortSignal.timeout(timeoutMs)
@@ -78170,10 +78327,10 @@ async function ensureFreshAccessToken$2(creds, clientId, clientSecret, onCredent
78170
78327
  const SCOPES$5 = ["read", "read+write"];
78171
78328
  const AUTH_URL$4 = "https://app.pandadoc.com/oauth2/authorize";
78172
78329
  const TOKEN_URL$5 = "https://api.pandadoc.com/oauth2/access_token";
78173
- const API$6 = "https://api.pandadoc.com/public/v1";
78330
+ const API$5 = "https://api.pandadoc.com/public/v1";
78174
78331
  function pandadoc(opts) {
78175
78332
  const { clientId, clientSecret } = opts;
78176
- const baseUrl = (opts.baseUrl ?? API$6).replace(/\/$/, "");
78333
+ const baseUrl = (opts.baseUrl ?? API$5).replace(/\/$/, "");
78177
78334
  const timeoutMs = opts.timeoutMs ?? 3e4;
78178
78335
  return {
78179
78336
  manifest: {
@@ -85486,7 +85643,7 @@ const SCOPES$3 = [
85486
85643
  ];
85487
85644
  const AUTH_URL$2 = "https://slack.com/oauth/v2/authorize";
85488
85645
  const TOKEN_URL$3 = "https://slack.com/api/oauth.v2.access";
85489
- const API$5 = "https://slack.com/api";
85646
+ const API$4 = "https://slack.com/api";
85490
85647
  function slack(opts) {
85491
85648
  const { clientId, clientSecret } = opts;
85492
85649
  return {
@@ -85709,7 +85866,7 @@ function slack(opts) {
85709
85866
  const accessToken = readBotToken(inv.source.credentials);
85710
85867
  if (inv.capabilityName === "lookup_user") {
85711
85868
  const { email } = inv.args;
85712
- const json = await slackGet(`${API$5}/users.lookupByEmail?email=${encodeURIComponent(email)}`, accessToken, inv.source.id);
85869
+ const json = await slackGet(`${API$4}/users.lookupByEmail?email=${encodeURIComponent(email)}`, accessToken, inv.source.id);
85713
85870
  if (!json.ok) {
85714
85871
  if (json.error === "users_not_found") return {
85715
85872
  data: { found: false },
@@ -85736,7 +85893,7 @@ function slack(opts) {
85736
85893
  limit: String(Math.min(Math.max(1, limit ?? 200), 1e3)),
85737
85894
  types: types ?? "public_channel,private_channel"
85738
85895
  });
85739
- const json = await slackGet(`${API$5}/conversations.list?${params.toString()}`, accessToken, inv.source.id);
85896
+ const json = await slackGet(`${API$4}/conversations.list?${params.toString()}`, accessToken, inv.source.id);
85740
85897
  if (!json.ok) throw new Error(`slack list_channels: ${json.error ?? "unknown"}`);
85741
85898
  return {
85742
85899
  data: { channels: (json.channels ?? []).map((c) => ({
@@ -85799,7 +85956,7 @@ function slack(opts) {
85799
85956
  async test(source) {
85800
85957
  try {
85801
85958
  const accessToken = readBotToken(source.credentials);
85802
- const res = await fetch(`${API$5}/auth.test`, {
85959
+ const res = await fetch(`${API$4}/auth.test`, {
85803
85960
  method: "POST",
85804
85961
  headers: { authorization: `Bearer ${accessToken}` },
85805
85962
  signal: AbortSignal.timeout(8e3)
@@ -85843,7 +86000,7 @@ async function downloadFile(inv, accessToken) {
85843
86000
  const { file_id: rawFileId } = inv.args;
85844
86001
  const fileId = typeof rawFileId === "string" ? rawFileId.trim() : "";
85845
86002
  if (!fileId || fileId.length > 300) throw new Error("slack download_file: a bounded `file_id` is required");
85846
- const info = await slackGet(`${API$5}/files.info?file=${encodeURIComponent(fileId)}`, accessToken, inv.source.id);
86003
+ const info = await slackGet(`${API$4}/files.info?file=${encodeURIComponent(fileId)}`, accessToken, inv.source.id);
85847
86004
  if (!info.ok) {
85848
86005
  if (isAuthError(info.error)) throw new CredentialsExpired(`Slack rejected token: ${info.error}`, inv.source.id);
85849
86006
  throw new Error(`slack download_file: ${info.error ?? "unknown"}`);
@@ -85943,7 +86100,7 @@ async function slackPostJson(url, accessToken, body, timeoutMs, dataSourceId, ca
85943
86100
  async function postMessage(inv, accessToken, timeoutMs) {
85944
86101
  const { channel, text, blocks } = inv.args;
85945
86102
  if (!channel) throw new Error("slack post_message: `channel` is required");
85946
- const json = await slackPostJson(`${API$5}/chat.postMessage`, accessToken, {
86103
+ const json = await slackPostJson(`${API$4}/chat.postMessage`, accessToken, {
85947
86104
  channel,
85948
86105
  text,
85949
86106
  blocks
@@ -85962,7 +86119,7 @@ async function postInThread(inv, accessToken, timeoutMs) {
85962
86119
  const { channel, thread_ts, text, blocks } = inv.args;
85963
86120
  if (!channel) throw new Error("slack post_in_thread: `channel` is required");
85964
86121
  if (!thread_ts) throw new Error("slack post_in_thread: `thread_ts` is required");
85965
- const json = await slackPostJson(`${API$5}/chat.postMessage`, accessToken, {
86122
+ const json = await slackPostJson(`${API$4}/chat.postMessage`, accessToken, {
85966
86123
  channel,
85967
86124
  thread_ts,
85968
86125
  text,
@@ -85984,7 +86141,7 @@ async function updateMessage(inv, accessToken, timeoutMs) {
85984
86141
  if (!channel) throw new Error("slack update_message: `channel` is required");
85985
86142
  if (!ts) throw new Error("slack update_message: `ts` is required");
85986
86143
  if (text === void 0 && blocks === void 0) throw new Error("slack update_message: `text` or `blocks` is required");
85987
- const json = await slackPostJson(`${API$5}/chat.update`, accessToken, {
86144
+ const json = await slackPostJson(`${API$4}/chat.update`, accessToken, {
85988
86145
  channel,
85989
86146
  ts,
85990
86147
  text,
@@ -86005,7 +86162,7 @@ async function deleteMessage(inv, accessToken, timeoutMs) {
86005
86162
  const { channel, ts } = inv.args;
86006
86163
  if (!channel) throw new Error("slack delete_message: `channel` is required");
86007
86164
  if (!ts) throw new Error("slack delete_message: `ts` is required");
86008
- const json = await slackPostJson(`${API$5}/chat.delete`, accessToken, {
86165
+ const json = await slackPostJson(`${API$4}/chat.delete`, accessToken, {
86009
86166
  channel,
86010
86167
  ts
86011
86168
  }, timeoutMs, inv.source.id, "delete_message");
@@ -86024,7 +86181,7 @@ async function addReaction(inv, accessToken, timeoutMs) {
86024
86181
  if (!channel) throw new Error("slack add_reaction: `channel` is required");
86025
86182
  if (!timestamp) throw new Error("slack add_reaction: `timestamp` is required");
86026
86183
  if (!name) throw new Error("slack add_reaction: `name` is required");
86027
- const res = await fetch(`${API$5}/reactions.add`, {
86184
+ const res = await fetch(`${API$4}/reactions.add`, {
86028
86185
  method: "POST",
86029
86186
  headers: {
86030
86187
  authorization: `Bearer ${accessToken}`,
@@ -86074,7 +86231,7 @@ async function uploadFile(inv, accessToken, timeoutMs) {
86074
86231
  if (!args.filename) throw new Error("slack upload_file: `filename` is required");
86075
86232
  if (!args.content) throw new Error("slack upload_file: `content` is required");
86076
86233
  const bytes = Buffer.from(args.content, "base64");
86077
- const stepOne = await fetch(`${API$5}/files.getUploadURLExternal`, {
86234
+ const stepOne = await fetch(`${API$4}/files.getUploadURLExternal`, {
86078
86235
  method: "POST",
86079
86236
  headers: {
86080
86237
  authorization: `Bearer ${accessToken}`,
@@ -86114,7 +86271,7 @@ async function uploadFile(inv, accessToken, timeoutMs) {
86114
86271
  channel_id: args.channels.join(",")
86115
86272
  };
86116
86273
  if (args.initial_comment) completePayload.initial_comment = args.initial_comment;
86117
- const files = (await slackPostJson(`${API$5}/files.completeUploadExternal`, accessToken, completePayload, timeoutMs, inv.source.id, "upload_file")).files ?? [];
86274
+ const files = (await slackPostJson(`${API$4}/files.completeUploadExternal`, accessToken, completePayload, timeoutMs, inv.source.id, "upload_file")).files ?? [];
86118
86275
  return {
86119
86276
  status: "committed",
86120
86277
  data: {
@@ -87274,7 +87431,7 @@ const squareConnector = declarativeRestConnector({
87274
87431
  * directly. MutationGuard short-circuits before us on retry; Stripe's
87275
87432
  * own dedup is the second line of defense.
87276
87433
  */
87277
- const API$4 = "https://api.stripe.com/v1";
87434
+ const API$3 = "https://api.stripe.com/v1";
87278
87435
  /** Stripe events that mean a new customer: an account, a purchase, or a subscription or trial. */
87279
87436
  const SIGNUP_EVENT_TYPES = [
87280
87437
  "customer.created",
@@ -87596,7 +87753,7 @@ const stripePackConnector = {
87596
87753
  if (inv.capabilityName === "list_signup_events") return listSignupEvents(inv, apiKey);
87597
87754
  if (inv.capabilityName !== "find_customer") throw new Error(`stripe-pack: unknown read capability ${inv.capabilityName}`);
87598
87755
  const { email } = inv.args;
87599
- const url = `${API$4}/customers/search?query=${encodeURIComponent(`email:'${email.toLowerCase()}'`)}&limit=1`;
87756
+ const url = `${API$3}/customers/search?query=${encodeURIComponent(`email:'${email.toLowerCase()}'`)}&limit=1`;
87600
87757
  const res = await fetch(url, {
87601
87758
  headers: { authorization: `Bearer ${apiKey}` },
87602
87759
  signal: AbortSignal.timeout(1e4)
@@ -87634,7 +87791,7 @@ const stripePackConnector = {
87634
87791
  async test(source) {
87635
87792
  try {
87636
87793
  const apiKey = readApiKey(source.credentials);
87637
- const res = await fetch(`${API$4}/account`, {
87794
+ const res = await fetch(`${API$3}/account`, {
87638
87795
  headers: { authorization: `Bearer ${apiKey}` },
87639
87796
  signal: AbortSignal.timeout(8e3)
87640
87797
  });
@@ -87667,7 +87824,7 @@ async function createInvoice(inv, apiKey) {
87667
87824
  quantity: String(it.quantity ?? 1)
87668
87825
  });
87669
87826
  if (it.description) body.set("description", it.description);
87670
- const res = await fetch(`${API$4}/invoiceitems`, {
87827
+ const res = await fetch(`${API$3}/invoiceitems`, {
87671
87828
  method: "POST",
87672
87829
  headers: {
87673
87830
  authorization: `Bearer ${apiKey}`,
@@ -87690,7 +87847,7 @@ async function createInvoice(inv, apiKey) {
87690
87847
  collection_method: "send_invoice",
87691
87848
  days_until_due: "14"
87692
87849
  });
87693
- const invRes = await fetch(`${API$4}/invoices`, {
87850
+ const invRes = await fetch(`${API$3}/invoices`, {
87694
87851
  method: "POST",
87695
87852
  headers: {
87696
87853
  authorization: `Bearer ${apiKey}`,
@@ -87730,7 +87887,7 @@ async function createCheckoutSession(inv, apiKey) {
87730
87887
  body.set(`line_items[${i}][price]`, it.price);
87731
87888
  body.set(`line_items[${i}][quantity]`, String(it.quantity ?? 1));
87732
87889
  });
87733
- const res = await fetch(`${API$4}/checkout/sessions`, {
87890
+ const res = await fetch(`${API$3}/checkout/sessions`, {
87734
87891
  method: "POST",
87735
87892
  headers: {
87736
87893
  authorization: `Bearer ${apiKey}`,
@@ -87759,7 +87916,7 @@ async function createCheckoutSession(inv, apiKey) {
87759
87916
  };
87760
87917
  }
87761
87918
  async function stripeGet(inv, apiKey, path, label) {
87762
- const res = await fetch(`${API$4}${path}`, {
87919
+ const res = await fetch(`${API$3}${path}`, {
87763
87920
  headers: { authorization: `Bearer ${apiKey}` },
87764
87921
  signal: AbortSignal.timeout(1e4)
87765
87922
  });
@@ -87838,7 +87995,7 @@ async function listSubscriptions(inv, apiKey) {
87838
87995
  });
87839
87996
  if (status && status !== "all") params.set("status", status);
87840
87997
  else params.set("status", "all");
87841
- const res = await fetch(`${API$4}/subscriptions?${params.toString()}`, {
87998
+ const res = await fetch(`${API$3}/subscriptions?${params.toString()}`, {
87842
87999
  headers: { authorization: `Bearer ${apiKey}` },
87843
88000
  signal: AbortSignal.timeout(1e4)
87844
88001
  });
@@ -87869,7 +88026,7 @@ async function cancelSubscription(inv, apiKey) {
87869
88026
  let res;
87870
88027
  if (atPeriodEnd) {
87871
88028
  const body = new URLSearchParams({ cancel_at_period_end: "true" });
87872
- res = await fetch(`${API$4}/subscriptions/${encodeURIComponent(subscriptionId)}`, {
88029
+ res = await fetch(`${API$3}/subscriptions/${encodeURIComponent(subscriptionId)}`, {
87873
88030
  method: "POST",
87874
88031
  headers: {
87875
88032
  authorization: `Bearer ${apiKey}`,
@@ -87879,7 +88036,7 @@ async function cancelSubscription(inv, apiKey) {
87879
88036
  body,
87880
88037
  signal: AbortSignal.timeout(15e3)
87881
88038
  });
87882
- } else res = await fetch(`${API$4}/subscriptions/${encodeURIComponent(subscriptionId)}`, {
88039
+ } else res = await fetch(`${API$3}/subscriptions/${encodeURIComponent(subscriptionId)}`, {
87883
88040
  method: "DELETE",
87884
88041
  headers: {
87885
88042
  authorization: `Bearer ${apiKey}`,
@@ -87914,7 +88071,7 @@ async function createBillingPortalSession(inv, apiKey) {
87914
88071
  customer: customerId,
87915
88072
  return_url: returnUrl
87916
88073
  });
87917
- const res = await fetch(`${API$4}/billing_portal/sessions`, {
88074
+ const res = await fetch(`${API$3}/billing_portal/sessions`, {
87918
88075
  method: "POST",
87919
88076
  headers: {
87920
88077
  authorization: `Bearer ${apiKey}`,
@@ -87954,7 +88111,7 @@ async function createPaymentIntent(inv, apiKey) {
87954
88111
  if (args.description) body.set("description", args.description);
87955
88112
  if (args.automatic_payment_methods && typeof args.automatic_payment_methods.enabled === "boolean") body.set("automatic_payment_methods[enabled]", args.automatic_payment_methods.enabled ? "true" : "false");
87956
88113
  if (args.metadata) for (const [k, v] of Object.entries(args.metadata)) body.set(`metadata[${k}]`, String(v));
87957
- const res = await fetch(`${API$4}/payment_intents`, {
88114
+ const res = await fetch(`${API$3}/payment_intents`, {
87958
88115
  method: "POST",
87959
88116
  headers: {
87960
88117
  authorization: `Bearer ${apiKey}`,
@@ -87994,7 +88151,7 @@ async function createRefund(inv, apiKey) {
87994
88151
  if (args.charge) body.set("charge", args.charge);
87995
88152
  if (typeof args.amount === "number") body.set("amount", String(args.amount));
87996
88153
  if (args.reason) body.set("reason", args.reason);
87997
- const res = await fetch(`${API$4}/refunds`, {
88154
+ const res = await fetch(`${API$3}/refunds`, {
87998
88155
  method: "POST",
87999
88156
  headers: {
88000
88157
  authorization: `Bearer ${apiKey}`,
@@ -88034,7 +88191,7 @@ async function createCustomer(inv, apiKey) {
88034
88191
  if (args.phone) body.set("phone", args.phone);
88035
88192
  if (args.description) body.set("description", args.description);
88036
88193
  if (args.metadata) for (const [k, v] of Object.entries(args.metadata)) body.set(`metadata[${k}]`, String(v));
88037
- const res = await fetch(`${API$4}/customers`, {
88194
+ const res = await fetch(`${API$3}/customers`, {
88038
88195
  method: "POST",
88039
88196
  headers: {
88040
88197
  authorization: `Bearer ${apiKey}`,
@@ -91885,7 +92042,7 @@ function safeProviderValue(value) {
91885
92042
  * filtered by To/From. Useful for "did the confirmation actually
91886
92043
  * send?" introspection inside an agent run.
91887
92044
  */
91888
- const API$3 = "https://api.twilio.com/2010-04-01";
92045
+ const API$2 = "https://api.twilio.com/2010-04-01";
91889
92046
  const LOOKUP_API = "https://lookups.twilio.com/v1";
91890
92047
  const twilioSmsConnector = {
91891
92048
  manifest: {
@@ -92119,7 +92276,7 @@ const twilioSmsConnector = {
92119
92276
  params.set("PageSize", String(Math.min(Math.max(1, limit ?? 20), 100)));
92120
92277
  if (to) params.set("To", to);
92121
92278
  if (from) params.set("From", from);
92122
- const url = `${API$3}/Accounts/${encodeURIComponent(auth.accountSid)}/Messages.json?${params.toString()}`;
92279
+ const url = `${API$2}/Accounts/${encodeURIComponent(auth.accountSid)}/Messages.json?${params.toString()}`;
92123
92280
  const res = await fetch(url, {
92124
92281
  headers: { authorization: basicAuth(auth) },
92125
92282
  signal: AbortSignal.timeout(1e4)
@@ -92140,7 +92297,7 @@ const twilioSmsConnector = {
92140
92297
  const params = new URLSearchParams();
92141
92298
  params.set("PageSize", String(Math.min(Math.max(1, limit ?? 50), 100)));
92142
92299
  if (phoneNumber) params.set("PhoneNumber", phoneNumber);
92143
- const baseUrl = `${API$3}/Accounts/${encodeURIComponent(auth.accountSid)}/IncomingPhoneNumbers`;
92300
+ const baseUrl = `${API$2}/Accounts/${encodeURIComponent(auth.accountSid)}/IncomingPhoneNumbers`;
92144
92301
  const url = numberSid ? `${baseUrl}/${numberSid}.json` : `${baseUrl}.json?${params.toString()}`;
92145
92302
  const res = await fetch(url, {
92146
92303
  headers: { authorization: basicAuth(auth) },
@@ -92180,7 +92337,7 @@ const twilioSmsConnector = {
92180
92337
  if (inv.capabilityName === "get_media") {
92181
92338
  const { messageSid, mediaSid } = inv.args;
92182
92339
  if (!/^(SM|MM)[a-f\d]{32}$/i.test(messageSid) || !/^ME[a-f\d]{32}$/i.test(mediaSid)) throw new Error("twilio-sms get_media requires exact message and media SIDs");
92183
- const url = `${API$3}/Accounts/${encodeURIComponent(auth.accountSid)}/Messages/${messageSid}/Media/${mediaSid}`;
92340
+ const url = `${API$2}/Accounts/${encodeURIComponent(auth.accountSid)}/Messages/${messageSid}/Media/${mediaSid}`;
92184
92341
  const signal = AbortSignal.timeout(2e4);
92185
92342
  let res = await fetch(url, {
92186
92343
  headers: { authorization: basicAuth(auth) },
@@ -92265,7 +92422,7 @@ const twilioSmsConnector = {
92265
92422
  }
92266
92423
  if (inv.capabilityName === "redact_message") {
92267
92424
  const { messageSid } = inv.args;
92268
- const url = `${API$3}/Accounts/${encodeURIComponent(auth.accountSid)}/Messages/${encodeURIComponent(messageSid)}.json`;
92425
+ const url = `${API$2}/Accounts/${encodeURIComponent(auth.accountSid)}/Messages/${encodeURIComponent(messageSid)}.json`;
92269
92426
  const formBody = new URLSearchParams({ Body: "" });
92270
92427
  const res = await fetch(url, {
92271
92428
  method: "POST",
@@ -92298,7 +92455,7 @@ const twilioSmsConnector = {
92298
92455
  async test(source) {
92299
92456
  try {
92300
92457
  const auth = parseAuth(source.credentials);
92301
- const res = await fetch(`${API$3}/Accounts/${encodeURIComponent(auth.accountSid)}.json`, {
92458
+ const res = await fetch(`${API$2}/Accounts/${encodeURIComponent(auth.accountSid)}.json`, {
92302
92459
  headers: { authorization: basicAuth(auth) },
92303
92460
  signal: AbortSignal.timeout(8e3)
92304
92461
  });
@@ -92355,7 +92512,7 @@ function readMetaStringOptional(meta, key) {
92355
92512
  return typeof v === "string" && v.length > 0 ? v : void 0;
92356
92513
  }
92357
92514
  async function postMessages(inv, auth, formBody, label) {
92358
- const url = `${API$3}/Accounts/${encodeURIComponent(auth.accountSid)}/Messages.json`;
92515
+ const url = `${API$2}/Accounts/${encodeURIComponent(auth.accountSid)}/Messages.json`;
92359
92516
  const res = await fetch(url, {
92360
92517
  method: "POST",
92361
92518
  headers: {
@@ -92592,13 +92749,13 @@ const SCOPES = [
92592
92749
  ];
92593
92750
  const AUTH_URL = "https://www.facebook.com/v21.0/dialog/oauth";
92594
92751
  const TOKEN_URL = "https://graph.facebook.com/v21.0/oauth/access_token";
92595
- const API$2 = "https://graph.facebook.com/v21.0";
92752
+ const API$1 = "https://graph.facebook.com/v21.0";
92596
92753
  function whatsappBusiness(opts) {
92597
92754
  const { clientId, clientSecret } = opts;
92598
92755
  return {
92599
92756
  manifest: {
92600
92757
  kind: "whatsapp-business",
92601
- displayName: "WhatsApp Business",
92758
+ displayName: "WhatsApp Business (your own number)",
92602
92759
  description: "Send text and template messages from a verified WhatsApp Business number, and read your approved message templates. Advisory surface — WhatsApp sends are append-only.",
92603
92760
  auth: {
92604
92761
  kind: "oauth2",
@@ -92842,7 +92999,7 @@ function whatsappBusiness(opts) {
92842
92999
  params.set("limit", String(Math.min(Math.max(1, limit ?? 50), 200)));
92843
93000
  if (status) params.set("status", status);
92844
93001
  return {
92845
- data: { templates: ((await graphGet(`${API$2}/${encodeURIComponent(wabaId)}/message_templates?${params.toString()}`, accessToken, inv.source.id)).data ?? []).map((t) => ({
93002
+ data: { templates: ((await graphGet(`${API$1}/${encodeURIComponent(wabaId)}/message_templates?${params.toString()}`, accessToken, inv.source.id)).data ?? []).map((t) => ({
92846
93003
  id: t.id,
92847
93004
  name: t.name,
92848
93005
  status: t.status,
@@ -92855,7 +93012,7 @@ function whatsappBusiness(opts) {
92855
93012
  if (inv.capabilityName === "get_business_phone_number") {
92856
93013
  const phoneNumberId = readMetaString$1(inv.source.metadata, "phoneNumberId");
92857
93014
  const params = new URLSearchParams({ fields: "display_phone_number,verified_name,quality_rating,code_verification_status,platform_type" });
92858
- const json = await graphGet(`${API$2}/${encodeURIComponent(phoneNumberId)}?${params.toString()}`, accessToken, inv.source.id);
93015
+ const json = await graphGet(`${API$1}/${encodeURIComponent(phoneNumberId)}?${params.toString()}`, accessToken, inv.source.id);
92859
93016
  return {
92860
93017
  data: {
92861
93018
  phoneNumber: json.display_phone_number,
@@ -92875,7 +93032,7 @@ function whatsappBusiness(opts) {
92875
93032
  if (inv.capabilityName === "templates.create") return createTemplate(inv, accessToken);
92876
93033
  if (inv.capabilityName === "templates.delete") return deleteTemplate(inv, accessToken);
92877
93034
  const phoneNumberId = readMetaString$1(inv.source.metadata, "phoneNumberId");
92878
- const url = `${API$2}/${encodeURIComponent(phoneNumberId)}/messages`;
93035
+ const url = `${API$1}/${encodeURIComponent(phoneNumberId)}/messages`;
92879
93036
  let body;
92880
93037
  if (inv.capabilityName === "messages.reply") {
92881
93038
  const { to, text, replyToMessageId } = inv.args;
@@ -92981,7 +93138,7 @@ function whatsappBusiness(opts) {
92981
93138
  try {
92982
93139
  const accessToken = readAccessToken(source.credentials);
92983
93140
  const phoneNumberId = typeof source.metadata.phoneNumberId === "string" ? source.metadata.phoneNumberId : void 0;
92984
- const probeUrl = phoneNumberId ? `${API$2}/${encodeURIComponent(phoneNumberId)}?fields=display_phone_number` : `${API$2}/me?fields=id`;
93141
+ const probeUrl = phoneNumberId ? `${API$1}/${encodeURIComponent(phoneNumberId)}?fields=display_phone_number` : `${API$1}/me?fields=id`;
92985
93142
  const res = await fetch(probeUrl, {
92986
93143
  headers: { authorization: `Bearer ${accessToken}` },
92987
93144
  signal: AbortSignal.timeout(8e3)
@@ -93048,7 +93205,7 @@ async function uploadMedia(inv, accessToken) {
93048
93205
  form.set("messaging_product", "whatsapp");
93049
93206
  form.set("type", mimeType);
93050
93207
  form.set("file", new Blob([bytes], { type: mimeType }), filename ?? "upload");
93051
- const url = `${API$2}/${encodeURIComponent(phoneNumberId)}/media`;
93208
+ const url = `${API$1}/${encodeURIComponent(phoneNumberId)}/media`;
93052
93209
  const res = await fetch(url, {
93053
93210
  method: "POST",
93054
93211
  headers: { authorization: `Bearer ${accessToken}` },
@@ -93074,7 +93231,7 @@ async function createTemplate(inv, accessToken) {
93074
93231
  if (typeof language !== "string" || language.length === 0) throw new Error("whatsapp-business templates.create: language is required");
93075
93232
  if (typeof category !== "string" || category.length === 0) throw new Error("whatsapp-business templates.create: category is required");
93076
93233
  if (!Array.isArray(components)) throw new Error("whatsapp-business templates.create: components must be an array");
93077
- const url = `${API$2}/${encodeURIComponent(wabaId)}/message_templates`;
93234
+ const url = `${API$1}/${encodeURIComponent(wabaId)}/message_templates`;
93078
93235
  const res = await fetch(url, {
93079
93236
  method: "POST",
93080
93237
  headers: {
@@ -93113,7 +93270,7 @@ async function deleteTemplate(inv, accessToken) {
93113
93270
  const params = new URLSearchParams();
93114
93271
  params.set("name", name);
93115
93272
  if (typeof hsmId === "string" && hsmId.length > 0) params.set("hsm_id", hsmId);
93116
- const url = `${API$2}/${encodeURIComponent(wabaId)}/message_templates?${params.toString()}`;
93273
+ const url = `${API$1}/${encodeURIComponent(wabaId)}/message_templates?${params.toString()}`;
93117
93274
  const res = await fetch(url, {
93118
93275
  method: "DELETE",
93119
93276
  headers: { authorization: `Bearer ${accessToken}` },
@@ -96873,446 +97030,6 @@ function retryAfterMs(value) {
96873
97030
  return Number.isFinite(seconds) && seconds >= 0 ? Math.max(1e3, seconds * 1e3) : 6e4;
96874
97031
  }
96875
97032
  //#endregion
96876
- //#region src/connectors/adapters/cloudbeds.ts
96877
- const API$1 = "https://api.cloudbeds.com/api/v1.3";
96878
- const DATE$1 = /^\d{4}-\d{2}-\d{2}$/;
96879
- const PROPERTY_ID = /^[1-9]\d{0,19}$/;
96880
- const OPERATION_ID = /^[A-Za-z0-9:._-]{1,128}$/;
96881
- const STATUSES = /* @__PURE__ */ new Set([
96882
- "not_confirmed",
96883
- "confirmed",
96884
- "canceled",
96885
- "checked_in",
96886
- "checked_out",
96887
- "no_show"
96888
- ]);
96889
- function boundedString(value, name, max = 256) {
96890
- if (typeof value !== "string" || !value.trim() || value.length > max || /[\u0000-\u001f\u007f]/.test(value)) throw new Error(`cloudbeds: invalid ${name}`);
96891
- return value;
96892
- }
96893
- function providerText$1(value) {
96894
- return typeof value === "string" && value.length <= 256 && !/[\u0000-\u001f\u007f]/.test(value) ? value : null;
96895
- }
96896
- function propertyId(source) {
96897
- const value = source.metadata.propertyId;
96898
- if (typeof value !== "string" || !PROPERTY_ID.test(value)) throw new Error("cloudbeds: connection requires one numeric propertyId");
96899
- return value;
96900
- }
96901
- function apiKey$1(source) {
96902
- const value = source.credentials;
96903
- if (value.kind !== "api-key" || !value.apiKey || /[\u0000-\u0020\u007f]/.test(value.apiKey)) throw new Error("cloudbeds: connection requires an API key");
96904
- return value.apiKey;
96905
- }
96906
- async function call$1(source, path, init) {
96907
- const headers = {
96908
- "x-api-key": apiKey$1(source),
96909
- accept: "application/json",
96910
- ...init.headers
96911
- };
96912
- let result;
96913
- try {
96914
- result = await requestJson(`${API$1}/${path}`, {
96915
- ...init,
96916
- headers
96917
- }, { maxResponseBytes: 2e6 });
96918
- } catch (error) {
96919
- if (error instanceof ProviderProtocolError && error.status === 401) throw new CredentialsExpired("Cloudbeds rejected the API key", source.id);
96920
- if (error instanceof ProviderProtocolError && error.status === 429) throw new ProviderRateLimited("Cloudbeds rate limit (429)", source.id, {
96921
- status: 429,
96922
- retryAfterMs: error.retryAfterMs
96923
- });
96924
- throw error;
96925
- }
96926
- if (record$3(result) && result.success === false) throw new ProviderProtocolError("Cloudbeds rejected the request", "provider_rejected", 422, true);
96927
- if (!record$3(result) || result.success !== true) throw new ProviderProtocolError("Cloudbeds returned an unsuccessful or malformed response", "invalid_response");
96928
- return result;
96929
- }
96930
- function date$1(value, label) {
96931
- if (typeof value !== "string" || !DATE$1.test(value) || Number.isNaN(Date.parse(`${value}T00:00:00Z`)) || (/* @__PURE__ */ new Date(`${value}T00:00:00Z`)).toISOString().slice(0, 10) !== value) throw new Error(`cloudbeds: invalid ${label}`);
96932
- return value;
96933
- }
96934
- function page$3(value, label, fallback, max) {
96935
- const selected = value ?? fallback;
96936
- if (!Number.isSafeInteger(selected) || selected < 1 || selected > max) throw new Error(`cloudbeds: invalid ${label}`);
96937
- return selected;
96938
- }
96939
- function money(value, label, allowZero = false) {
96940
- if (typeof value !== "number" || !Number.isFinite(value) || value < (allowZero ? 0 : .01) || value > 1e6 || Math.abs(value * 100 - Math.round(value * 100)) > 1e-7) throw new Error(`cloudbeds: invalid ${label}`);
96941
- return value;
96942
- }
96943
- function reservationQuery(args, property) {
96944
- const query = new URLSearchParams({ propertyID: property });
96945
- const pairs = [["checkInFrom", "checkInTo"], ["checkOutFrom", "checkOutTo"]];
96946
- let found = false;
96947
- for (const [fromKey, toKey] of pairs) {
96948
- if (args[fromKey] === void 0 && args[toKey] === void 0) continue;
96949
- const from = date$1(args[fromKey], fromKey);
96950
- const to = date$1(args[toKey], toKey);
96951
- const days = (Date.parse(`${to}T00:00:00Z`) - Date.parse(`${from}T00:00:00Z`)) / 864e5;
96952
- if (days < 0 || days > 31) throw new Error("cloudbeds: reservation date range must be at most 31 days");
96953
- query.set(fromKey, from);
96954
- query.set(toKey, to);
96955
- found = true;
96956
- }
96957
- if (!found) throw new Error("cloudbeds: an arrival or departure date range is required");
96958
- if (args.status !== void 0) {
96959
- if (typeof args.status !== "string" || !STATUSES.has(args.status)) throw new Error("cloudbeds: invalid status");
96960
- query.set("status", args.status);
96961
- }
96962
- query.set("pageNumber", String(page$3(args.pageNumber, "pageNumber", 1, 1e5)));
96963
- query.set("pageSize", String(page$3(args.pageSize, "pageSize", 100, 100)));
96964
- return query;
96965
- }
96966
- function reservations(result, property, query) {
96967
- if (!Array.isArray(result.data) || !Number.isSafeInteger(result.count) || !Number.isSafeInteger(result.total) || result.count < 0 || result.total < 0 || result.count !== result.data.length || result.total < result.count || result.count > Number(query.get("pageSize"))) throw new ProviderProtocolError("Cloudbeds returned malformed reservation pagination", "invalid_response");
96968
- const items = result.data.map((raw) => {
96969
- if (!record$3(raw) || raw.propertyID !== property || typeof raw.reservationID !== "string" || !raw.reservationID || typeof raw.startDate !== "string" || typeof raw.endDate !== "string" || typeof raw.status !== "string" || !STATUSES.has(raw.status)) throw new ProviderProtocolError("Cloudbeds returned a reservation outside the connected property or with invalid fields", "invalid_response");
96970
- try {
96971
- date$1(raw.startDate, "provider startDate");
96972
- date$1(raw.endDate, "provider endDate");
96973
- } catch {
96974
- throw new ProviderProtocolError("Cloudbeds returned an invalid reservation date", "invalid_response");
96975
- }
96976
- return {
96977
- propertyId: property,
96978
- reservationId: raw.reservationID,
96979
- status: raw.status,
96980
- arrivalDate: raw.startDate,
96981
- departureDate: raw.endDate,
96982
- guestName: providerText$1(raw.guestName),
96983
- balance: typeof raw.balance === "number" && Number.isFinite(raw.balance) ? raw.balance : null
96984
- };
96985
- });
96986
- const pageNumber = Number(query.get("pageNumber"));
96987
- const pageSize = Number(query.get("pageSize"));
96988
- return {
96989
- reservations: items,
96990
- pageNumber,
96991
- pageSize,
96992
- total: result.total,
96993
- hasMore: pageNumber * pageSize < result.total
96994
- };
96995
- }
96996
- function roomAvailabilityQuery(args, property) {
96997
- const startDate = date$1(args.startDate, "startDate");
96998
- const endDate = date$1(args.endDate, "endDate");
96999
- const days = (Date.parse(`${endDate}T00:00:00Z`) - Date.parse(`${startDate}T00:00:00Z`)) / 864e5;
97000
- if (days < 1 || days > 31) throw new Error("cloudbeds: stay must be between 1 and 31 nights");
97001
- const children = args.children ?? 0;
97002
- if (!Number.isSafeInteger(children) || children < 0 || children > 20) throw new Error("cloudbeds: invalid children");
97003
- return new URLSearchParams({
97004
- propertyIDs: property,
97005
- startDate,
97006
- endDate,
97007
- rooms: String(page$3(args.rooms, "rooms", 1, 10)),
97008
- adults: String(page$3(args.adults, "adults", 1, 20)),
97009
- children: String(children),
97010
- pageNumber: String(page$3(args.pageNumber, "pageNumber", 1, 1e5)),
97011
- pageSize: String(page$3(args.pageSize, "pageSize", 100, 100)),
97012
- detailedRates: "false",
97013
- includeSharedRooms: "false"
97014
- });
97015
- }
97016
- function roomAvailability(result, property, query) {
97017
- if (!Array.isArray(result.data) || !Number.isSafeInteger(result.count) || !Number.isSafeInteger(result.total) || !Number.isSafeInteger(result.roomCount) || result.count < 0 || result.count > 1 || result.total < result.count || result.count !== result.data.length || result.roomCount < 0 || result.count > Number(query.get("pageSize"))) throw new ProviderProtocolError("Cloudbeds returned malformed room availability pagination", "invalid_response");
97018
- const roomTypes = result.data.flatMap((raw) => {
97019
- if (!record$3(raw) || raw.propertyID !== property || !Array.isArray(raw.propertyRooms)) throw new ProviderProtocolError("Cloudbeds returned availability outside the connected property", "invalid_response");
97020
- return raw.propertyRooms.map((room) => {
97021
- if (!record$3(room) || typeof room.roomTypeID !== "string" || !room.roomTypeID || !Number.isSafeInteger(room.roomsAvailable) || room.roomsAvailable < 0 || room.roomRate !== void 0 && (typeof room.roomRate !== "number" || !Number.isFinite(room.roomRate) || room.roomRate < 0)) throw new ProviderProtocolError("Cloudbeds returned malformed room-type availability", "invalid_response");
97022
- return {
97023
- roomTypeId: room.roomTypeID,
97024
- roomTypeName: providerText$1(room.roomTypeName),
97025
- roomsAvailable: room.roomsAvailable,
97026
- roomRate: typeof room.roomRate === "number" ? room.roomRate : null
97027
- };
97028
- });
97029
- });
97030
- if (roomTypes.length !== result.roomCount) throw new ProviderProtocolError("Cloudbeds returned mismatched room-type count", "invalid_response");
97031
- return {
97032
- propertyId: property,
97033
- startDate: query.get("startDate"),
97034
- endDate: query.get("endDate"),
97035
- rooms: Number(query.get("rooms")),
97036
- adults: Number(query.get("adults")),
97037
- children: Number(query.get("children")),
97038
- roomTypes,
97039
- pageNumber: Number(query.get("pageNumber")),
97040
- pageSize: Number(query.get("pageSize")),
97041
- mayHaveMore: Number(query.get("pageNumber")) * Number(query.get("pageSize")) < result.total
97042
- };
97043
- }
97044
- function formForItem(inv, property) {
97045
- const args = inv.args;
97046
- const reservationId = boundedString(args.reservationId, "reservationId");
97047
- const appItemId = boundedString(args.appItemId, "appItemId");
97048
- const itemName = boundedString(args.itemName, "itemName");
97049
- const itemCategoryName = boundedString(args.itemCategoryName, "itemCategoryName");
97050
- const itemPrice = money(args.itemPrice, "itemPrice");
97051
- const itemQuantity = page$3(args.itemQuantity, "itemQuantity", 1, 1e3);
97052
- if (!OPERATION_ID.test(inv.idempotencyKey)) throw new Error("cloudbeds: stable bounded idempotencyKey is required");
97053
- if (!Array.isArray(args.taxes) || args.taxes.length > 10) throw new Error("cloudbeds: explicit taxes array is required");
97054
- const form = new URLSearchParams({
97055
- propertyID: property,
97056
- reservationID: reservationId,
97057
- referenceID: inv.idempotencyKey,
97058
- "items[0][appItemID]": appItemId,
97059
- "items[0][itemName]": itemName,
97060
- "items[0][itemCategoryName]": itemCategoryName,
97061
- "items[0][itemPrice]": itemPrice.toFixed(2),
97062
- "items[0][itemQuantity]": String(itemQuantity),
97063
- itemPaid: "false"
97064
- });
97065
- args.taxes.forEach((tax, index) => {
97066
- if (!record$3(tax)) throw new Error("cloudbeds: invalid tax");
97067
- form.set(`items[0][itemTaxes][${index}][taxName]`, boundedString(tax.taxName, "taxName"));
97068
- form.set(`items[0][itemTaxes][${index}][taxValue]`, money(tax.taxValue, "taxValue", true).toFixed(2));
97069
- });
97070
- return form;
97071
- }
97072
- const cloudbedsConnector = {
97073
- manifest: {
97074
- kind: "cloudbeds",
97075
- displayName: "Cloudbeds",
97076
- description: "Read reservations and room availability for one connected property, then post an approved custom item to a guest folio.",
97077
- auth: {
97078
- kind: "api-key",
97079
- hint: "Property-scoped Cloudbeds API key with read:reservation, read:room and write:item scopes. Set the connection propertyId."
97080
- },
97081
- category: "other",
97082
- defaultConsistencyModel: "authoritative",
97083
- capabilities: [
97084
- {
97085
- name: "reservations.list",
97086
- class: "read",
97087
- requiredScopes: ["read:reservation"],
97088
- description: "List one page of arrivals or departures for the connected property. Guest requirements are never requested.",
97089
- parameters: {
97090
- type: "object",
97091
- properties: {
97092
- checkInFrom: {
97093
- type: "string",
97094
- format: "date"
97095
- },
97096
- checkInTo: {
97097
- type: "string",
97098
- format: "date"
97099
- },
97100
- checkOutFrom: {
97101
- type: "string",
97102
- format: "date"
97103
- },
97104
- checkOutTo: {
97105
- type: "string",
97106
- format: "date"
97107
- },
97108
- status: {
97109
- type: "string",
97110
- enum: [...STATUSES]
97111
- },
97112
- pageNumber: {
97113
- type: "integer",
97114
- minimum: 1,
97115
- maximum: 1e5
97116
- },
97117
- pageSize: {
97118
- type: "integer",
97119
- minimum: 1,
97120
- maximum: 100
97121
- }
97122
- }
97123
- }
97124
- },
97125
- {
97126
- name: "room-types.available",
97127
- class: "read",
97128
- requiredScopes: ["read:room"],
97129
- description: "Read provider-reported room-type availability for a stay at the connected property. This does not hold or confirm a booking.",
97130
- parameters: {
97131
- type: "object",
97132
- properties: {
97133
- startDate: {
97134
- type: "string",
97135
- format: "date"
97136
- },
97137
- endDate: {
97138
- type: "string",
97139
- format: "date"
97140
- },
97141
- rooms: {
97142
- type: "integer",
97143
- minimum: 1,
97144
- maximum: 10
97145
- },
97146
- adults: {
97147
- type: "integer",
97148
- minimum: 1,
97149
- maximum: 20
97150
- },
97151
- children: {
97152
- type: "integer",
97153
- minimum: 0,
97154
- maximum: 20
97155
- },
97156
- pageNumber: {
97157
- type: "integer",
97158
- minimum: 1,
97159
- maximum: 1e5
97160
- },
97161
- pageSize: {
97162
- type: "integer",
97163
- minimum: 1,
97164
- maximum: 100
97165
- }
97166
- },
97167
- required: ["startDate", "endDate"]
97168
- }
97169
- },
97170
- {
97171
- name: "folio-items.post",
97172
- class: "mutation",
97173
- cas: "native-idempotency",
97174
- externalEffect: true,
97175
- requiredScopes: ["read:reservation", "write:item"],
97176
- description: "Verify reservation ownership, then post one unpaid custom item to the connected property guest folio. The Hub operation key becomes Cloudbeds referenceID.",
97177
- parameters: {
97178
- type: "object",
97179
- properties: {
97180
- reservationId: {
97181
- type: "string",
97182
- minLength: 1,
97183
- maxLength: 256
97184
- },
97185
- appItemId: {
97186
- type: "string",
97187
- minLength: 1,
97188
- maxLength: 256
97189
- },
97190
- itemName: {
97191
- type: "string",
97192
- minLength: 1,
97193
- maxLength: 256
97194
- },
97195
- itemCategoryName: {
97196
- type: "string",
97197
- minLength: 1,
97198
- maxLength: 256
97199
- },
97200
- itemPrice: {
97201
- type: "number",
97202
- minimum: .01,
97203
- maximum: 1e6,
97204
- multipleOf: .01
97205
- },
97206
- itemQuantity: {
97207
- type: "integer",
97208
- minimum: 1,
97209
- maximum: 1e3
97210
- },
97211
- taxes: {
97212
- type: "array",
97213
- description: "Explicit tax amounts in the property currency. Use [] only when no tax applies.",
97214
- maxItems: 10,
97215
- items: {
97216
- type: "object",
97217
- properties: {
97218
- taxName: {
97219
- type: "string",
97220
- minLength: 1,
97221
- maxLength: 256
97222
- },
97223
- taxValue: {
97224
- type: "number",
97225
- minimum: 0,
97226
- maximum: 1e6,
97227
- multipleOf: .01
97228
- }
97229
- },
97230
- required: ["taxName", "taxValue"]
97231
- }
97232
- }
97233
- },
97234
- required: [
97235
- "reservationId",
97236
- "appItemId",
97237
- "itemName",
97238
- "itemCategoryName",
97239
- "itemPrice",
97240
- "taxes"
97241
- ]
97242
- }
97243
- }
97244
- ]
97245
- },
97246
- async executeRead(inv) {
97247
- const property = propertyId(inv.source);
97248
- if (inv.capabilityName === "room-types.available") {
97249
- const query = roomAvailabilityQuery(inv.args, property);
97250
- return {
97251
- data: roomAvailability(await call$1(inv.source, `getAvailableRoomTypes?${query}`, { method: "GET" }), property, query),
97252
- fetchedAt: Date.now()
97253
- };
97254
- }
97255
- if (inv.capabilityName !== "reservations.list") throw new Error(`cloudbeds: unknown read ${inv.capabilityName}`);
97256
- const query = reservationQuery(inv.args, property);
97257
- return {
97258
- data: reservations(await call$1(inv.source, `getReservations?${query}`, { method: "GET" }), property, query),
97259
- fetchedAt: Date.now()
97260
- };
97261
- },
97262
- async executeMutation(inv) {
97263
- if (inv.capabilityName !== "folio-items.post") throw new Error(`cloudbeds: unknown mutation ${inv.capabilityName}`);
97264
- const property = propertyId(inv.source);
97265
- const form = formForItem(inv, property);
97266
- const reservationId = form.get("reservationID");
97267
- const query = new URLSearchParams({
97268
- propertyID: property,
97269
- reservationID: reservationId
97270
- });
97271
- const reservation = await call$1(inv.source, `getReservation?${query}`, { method: "GET" });
97272
- if (!record$3(reservation.data) || reservation.data.propertyID !== property || reservation.data.reservationID !== reservationId) throw new ProviderProtocolError("Cloudbeds could not verify the reservation belongs to the connected property", "invalid_response");
97273
- const result = await call$1(inv.source, "postCustomItem", {
97274
- method: "POST",
97275
- headers: { "content-type": "application/x-www-form-urlencoded" },
97276
- body: form.toString()
97277
- });
97278
- if (!record$3(result.data)) throw new ProviderProtocolError("Cloudbeds returned a malformed folio item receipt", "invalid_response");
97279
- const soldProductId = typeof result.data.soldProductID === "string" && result.data.soldProductID ? result.data.soldProductID : null;
97280
- const notice = providerText$1(result.data.notice);
97281
- const duplicate = soldProductId === null && notice !== null && /referenceid/i.test(notice) && /nothing was created/i.test(notice);
97282
- if (!soldProductId && !duplicate) throw new ProviderProtocolError("Cloudbeds returned an indeterminate folio item receipt", "capability_outcome_indeterminate");
97283
- return {
97284
- status: "committed",
97285
- data: {
97286
- referenceId: inv.idempotencyKey,
97287
- soldProductId,
97288
- transactionId: typeof result.data.transactionID === "string" ? result.data.transactionID : null,
97289
- duplicate,
97290
- notice
97291
- },
97292
- committedAt: Date.now(),
97293
- idempotentReplay: duplicate
97294
- };
97295
- },
97296
- async test(source) {
97297
- try {
97298
- const property = propertyId(source);
97299
- const result = await call$1(source, `getReservations?${new URLSearchParams({
97300
- propertyID: property,
97301
- status: "checked_in",
97302
- pageNumber: "1",
97303
- pageSize: "1"
97304
- })}`, { method: "GET" });
97305
- if (!Array.isArray(result.data)) throw new ProviderProtocolError("Cloudbeds returned malformed reservations", "invalid_response");
97306
- return { ok: true };
97307
- } catch (error) {
97308
- return {
97309
- ok: false,
97310
- reason: error instanceof Error ? error.message : "Cloudbeds connection failed"
97311
- };
97312
- }
97313
- }
97314
- };
97315
- //#endregion
97316
97033
  //#region src/connectors/adapters/pricelabs.ts
97317
97034
  const API = "https://api.pricelabs.co/v1";
97318
97035
  const DATE = /^\d{4}-\d{2}-\d{2}$/;
@@ -111177,6 +110894,34 @@ const githubSpec = {
111177
110894
  message: "pass the bare branch name (`main`), not a ref path (`refs/heads/main`)."
111178
110895
  }]
111179
110896
  },
110897
+ {
110898
+ name: "repos.getCommit",
110899
+ class: "read",
110900
+ description: "Resolve a branch, tag, HEAD or commit SHA to an immutable repository commit. Returns sha and commit.tree.sha; use the tree SHA for a consistent source snapshot.",
110901
+ parameters: {
110902
+ type: "object",
110903
+ properties: {
110904
+ owner: { type: "string" },
110905
+ repo: { type: "string" },
110906
+ ref: {
110907
+ type: "string",
110908
+ minLength: 1,
110909
+ description: "Branch, tag, HEAD, or commit SHA. Slash-containing branch names are supported."
110910
+ }
110911
+ },
110912
+ required: [
110913
+ "owner",
110914
+ "repo",
110915
+ "ref"
110916
+ ]
110917
+ },
110918
+ request: {
110919
+ method: "GET",
110920
+ path: "/repos/{owner}/{repo}/commits/{ref}",
110921
+ redirect: "error",
110922
+ maxResponseBytes: 8388608
110923
+ }
110924
+ },
111180
110925
  {
111181
110926
  name: "git.getCommit",
111182
110927
  class: "read",
@@ -111229,6 +110974,8 @@ const githubSpec = {
111229
110974
  ]
111230
110975
  },
111231
110976
  request: {
110977
+ redirect: "error",
110978
+ maxResponseBytes: 8388608,
111232
110979
  method: "GET",
111233
110980
  path: "/repos/{owner}/{repo}/git/trees/{tree_sha}",
111234
110981
  query: { recursive: "{recursive}" }
@@ -111252,6 +110999,8 @@ const githubSpec = {
111252
110999
  ]
111253
111000
  },
111254
111001
  request: {
111002
+ redirect: "error",
111003
+ maxResponseBytes: 33554432,
111255
111004
  method: "GET",
111256
111005
  path: "/repos/{owner}/{repo}/git/blobs/{file_sha}"
111257
111006
  }
@@ -118489,10 +118238,10 @@ const pineconeConnector = declarativeRestConnector({
118489
118238
  },
118490
118239
  category: "other",
118491
118240
  defaultConsistencyModel: "authoritative",
118492
- baseUrl: {
118493
- metadataKey: "indexHost",
118494
- fallback: "https://api.pinecone.io"
118495
- },
118241
+ baseUrl: "https://api.pinecone.io",
118242
+ allowedBaseUrls: ["https://api.pinecone.io"],
118243
+ allowedBaseUrlSuffixes: [".pinecone.io"],
118244
+ requirePublicHttpsBaseUrl: true,
118496
118245
  credentialPlacement: {
118497
118246
  kind: "header",
118498
118247
  header: "Api-Key"
@@ -118715,6 +118464,8 @@ const pineconeConnector = declarativeRestConnector({
118715
118464
  required: ["vectors"]
118716
118465
  },
118717
118466
  request: {
118467
+ baseUrl: { metadataKey: "indexHost" },
118468
+ redirect: "error",
118718
118469
  method: "POST",
118719
118470
  path: "/vectors/upsert",
118720
118471
  body: {
@@ -118751,6 +118502,8 @@ const pineconeConnector = declarativeRestConnector({
118751
118502
  required: ["top_k"]
118752
118503
  },
118753
118504
  request: {
118505
+ baseUrl: { metadataKey: "indexHost" },
118506
+ redirect: "error",
118754
118507
  method: "POST",
118755
118508
  path: "/query",
118756
118509
  body: "args"
@@ -118772,6 +118525,8 @@ const pineconeConnector = declarativeRestConnector({
118772
118525
  required: ["ids"]
118773
118526
  },
118774
118527
  request: {
118528
+ baseUrl: { metadataKey: "indexHost" },
118529
+ redirect: "error",
118775
118530
  method: "GET",
118776
118531
  path: "/vectors/fetch",
118777
118532
  query: {
@@ -118799,6 +118554,8 @@ const pineconeConnector = declarativeRestConnector({
118799
118554
  required: ["id"]
118800
118555
  },
118801
118556
  request: {
118557
+ baseUrl: { metadataKey: "indexHost" },
118558
+ redirect: "error",
118802
118559
  method: "POST",
118803
118560
  path: "/vectors/update",
118804
118561
  body: "args"
@@ -118823,6 +118580,8 @@ const pineconeConnector = declarativeRestConnector({
118823
118580
  }
118824
118581
  },
118825
118582
  request: {
118583
+ baseUrl: { metadataKey: "indexHost" },
118584
+ redirect: "error",
118826
118585
  method: "POST",
118827
118586
  path: "/vectors/delete",
118828
118587
  body: "args"
@@ -118848,6 +118607,8 @@ const pineconeConnector = declarativeRestConnector({
118848
118607
  }
118849
118608
  },
118850
118609
  request: {
118610
+ baseUrl: { metadataKey: "indexHost" },
118611
+ redirect: "error",
118851
118612
  method: "GET",
118852
118613
  path: "/vectors/list",
118853
118614
  query: {
@@ -118867,6 +118628,8 @@ const pineconeConnector = declarativeRestConnector({
118867
118628
  properties: { filter: { type: "object" } }
118868
118629
  },
118869
118630
  request: {
118631
+ baseUrl: { metadataKey: "indexHost" },
118632
+ redirect: "error",
118870
118633
  method: "POST",
118871
118634
  path: "/describe_index_stats",
118872
118635
  body: "args"
@@ -119092,6 +118855,8 @@ const qdrantConnector = declarativeRestConnector({
119092
118855
  properties: {}
119093
118856
  },
119094
118857
  request: {
118858
+ redirect: "error",
118859
+ maxResponseBytes: 8388608,
119095
118860
  method: "GET",
119096
118861
  path: "/collections"
119097
118862
  }
@@ -119106,6 +118871,8 @@ const qdrantConnector = declarativeRestConnector({
119106
118871
  required: ["collection_name"]
119107
118872
  },
119108
118873
  request: {
118874
+ redirect: "error",
118875
+ maxResponseBytes: 8388608,
119109
118876
  method: "GET",
119110
118877
  path: "/collections/{collection_name}"
119111
118878
  }
@@ -119120,6 +118887,8 @@ const qdrantConnector = declarativeRestConnector({
119120
118887
  required: ["collection_name"]
119121
118888
  },
119122
118889
  request: {
118890
+ redirect: "error",
118891
+ maxResponseBytes: 8388608,
119123
118892
  method: "GET",
119124
118893
  path: "/collections/{collection_name}/exists"
119125
118894
  }
@@ -119161,6 +118930,8 @@ const qdrantConnector = declarativeRestConnector({
119161
118930
  required: ["collection_name", "vectors"]
119162
118931
  },
119163
118932
  request: {
118933
+ redirect: "error",
118934
+ maxResponseBytes: 8388608,
119164
118935
  method: "PUT",
119165
118936
  path: "/collections/{collection_name}",
119166
118937
  body: {
@@ -119226,6 +118997,8 @@ const qdrantConnector = declarativeRestConnector({
119226
118997
  required: ["collection_name"]
119227
118998
  },
119228
118999
  request: {
119000
+ redirect: "error",
119001
+ maxResponseBytes: 8388608,
119229
119002
  method: "DELETE",
119230
119003
  path: "/collections/{collection_name}"
119231
119004
  },
@@ -119370,6 +119143,8 @@ const qdrantConnector = declarativeRestConnector({
119370
119143
  required: ["collection_name"]
119371
119144
  },
119372
119145
  request: {
119146
+ redirect: "error",
119147
+ maxResponseBytes: 8388608,
119373
119148
  method: "PUT",
119374
119149
  path: "/collections/{collection_name}/points",
119375
119150
  query: {
@@ -119448,6 +119223,8 @@ const qdrantConnector = declarativeRestConnector({
119448
119223
  required: ["collection_name"]
119449
119224
  },
119450
119225
  request: {
119226
+ redirect: "error",
119227
+ maxResponseBytes: 8388608,
119451
119228
  method: "POST",
119452
119229
  path: "/collections/{collection_name}/points/delete",
119453
119230
  query: {
@@ -119800,6 +119577,8 @@ const qdrantConnector = declarativeRestConnector({
119800
119577
  ]
119801
119578
  },
119802
119579
  request: {
119580
+ redirect: "error",
119581
+ maxResponseBytes: 8388608,
119803
119582
  method: "POST",
119804
119583
  path: "/collections/{collection_name}/points/search",
119805
119584
  query: {
@@ -119878,6 +119657,8 @@ const qdrantConnector = declarativeRestConnector({
119878
119657
  required: ["collection_name"]
119879
119658
  },
119880
119659
  request: {
119660
+ redirect: "error",
119661
+ maxResponseBytes: 8388608,
119881
119662
  method: "POST",
119882
119663
  path: "/collections/{collection_name}/points/query",
119883
119664
  query: {
@@ -120016,6 +119797,8 @@ const qdrantConnector = declarativeRestConnector({
120016
119797
  required: ["collection_name"]
120017
119798
  },
120018
119799
  request: {
119800
+ redirect: "error",
119801
+ maxResponseBytes: 8388608,
120019
119802
  method: "POST",
120020
119803
  path: "/collections/{collection_name}/points/scroll",
120021
119804
  query: {
@@ -187231,7 +187014,7 @@ const webscrapingAiConnector = declarativeRestConnector({
187231
187014
  //#region src/connectors/adapters/whatsapp.ts
187232
187015
  const base$2 = declarativeRestConnector({
187233
187016
  kind: "whatsapp",
187234
- displayName: "WhatsApp Business",
187017
+ displayName: "WhatsApp (Tangle number)",
187235
187018
  description: "Send messages, media, and templates via WhatsApp Business API.",
187236
187019
  auth: {
187237
187020
  kind: "api-key",
@@ -196057,6 +195840,6 @@ var adapters_exports = /* @__PURE__ */ __exportAll({
196057
195840
  zuoraConnector: () => zuoraConnector
196058
195841
  });
196059
195842
  //#endregion
196060
- export { vboutConnector as $, googleGeminiConnector as $a, hubspot as $c, codyConnector as $d, captainDataConnector as $i, docuseal as $l, mauticConnector as $n, zohoInvoiceConnector as $o, fragmentConnector as $r, rabbitMqConnector as $s, predictLeadsConnector as $t, tenzoConnector as $u, contactoutConnector as A, amazonSesConnector as Aa, microsoftDynamicsCrmConnector as Ac, adobeCreativeCloudConnector as Ad, cryptolensConnector as Ai, gongConnector as Al, knockConnector as An, firebaseConnector as Ao, kapsoConnector as Ar, squareConnector as As, serpstatConnector as At, azureAdConnector as Au, workableConnector as B, afforaiConnector as Ba, leadConnectorConnector as Bc, excelFilesConnector as Bd, clearoutConnector as Bi, folkConnector as Bl, griptapeConnector as Bn, matrixConnector as Bo, housecallProConnector as Br, sftpConnector as Bs, robollyConnector as Bt, amazonLambdaConnector as Bu, warmlyConnector as C, similarwebConnector as Ca, mastodonConnector as Cc, cloudconvertConnector as Cd, oneloginConnector as Cf, dittofeedConnector as Ci, tiktokAdsConnector as Cl, odooConnector as Cn, supabaseConnector as Co, leapAiConnector as Cr, twentyConnector as Cs, smartsheetConnector as Ct, boxConnector as Cu, wizaConnector as D, ampecoConnector as Da, microsoftTeams as Dc, bigcommerceConnector as Dd, createPhonyConnector as Df, denserAiConnector as Di, googleAnalyticsConnector as Dl, medullarConnector as Dn, metabaseConnector as Do, klentyConnector as Dr, ticktickConnector as Ds, signrequestConnector as Dt, azureServiceBusConnector as Du, commonRoomConnector as E, appfollowConnector as Ea, microsoftOnenoteConnector as Ec, canvaConnector as Ed, declarativeRestConnector as Ef, devinConnector as Ei, googleAdsConnector as El, mindStudioConnector as En, mysqlConnector as Eo, knackConnector as Er, tlDvConnector as Es, shortIoConnector as Et, basecampConnector as Eu, amplemarketConnector as F, amazonSecretsManagerConnector as Fa, makeConnector as Fc, gammaConnector as Fd, crispConnector as Fi, googleErrorReason as Fl, ibmCognoseConnector as Fn, baserowConnector as Fo, jinaAiConnector as Fr, shippoConnector as Fs, scrapelessConnector as Ft, attioConnector as Fu, whatsappConnector as G, smooveConnector as Ga, jotformConnector as Gc, duckdbConnector as Gd, chatDataConnector as Gi, firefliesAiConnector as Gl, googleVertexaiConnector as Gn, marketoConnector as Go, guideliteConnector as Gr, recallAiConnector as Gs, reachinboxConnector as Gt, aircallConnector as Gu, woodpeckerConnector as H, airOpsConnector as Ha, kafkaConnector as Hc, echowinConnector as Hd, clockifyConnector as Hi, filloutFormsConnector as Hl, gptzeroDetectAiConnector as Hn, smartleadConnector as Ho, hashiCorpVaultConnector as Hr, rssConnector as Hs, retableConnector as Ht, amazonEventBridgeConnector as Hu, zeplinConnector as I, amazonBedrockConnector as Ia, createLinkedinConnector as Ic, flowParserConnector as Id, comfyicuConnector as Ii, googleTestFailureReason as Il, hystructConnector as In, airtableConnector as Io, imageRouterConnector as Ir, sharepoint as Is, scrapegraphaiConnector as It, asanaConnector as Iu, wafeqConnector as J, qdrantConnector as Ja, invoiceninjaConnector as Jc, deepgramConnector as Jd, chatlingConnector as Ji, etsyConnector as Jl, mixpanelConnector as Jn, klaviyoConnector as Jo, googleSearchConnector as Jr, createRedshiftConnector as Js, quadernoConnector as Jt, zoominfoConnector as Ju, webscrapingAiConnector as K, greenhouseConnector as Ka, jiraCloudConnector as Kc, digitalPilotConnector as Kd, chartlyConnector as Ki, fireberryConnector as Kl, exaConnector as Kn, mailchimpConnector as Ko, greipConnector as Kr, createPostgresConnector as Ks, rapidtextAiConnector as Kt, adobeSignConnector as Ku, youcanbookmeConnector as L, aipriseConnector as La, linkedinConnector as Lc, fellowConnector as Ld, cometapiConnector as Li, frontConnector as Ll, humeAiConnector as Ln, TELEGRAM_FILE_DOWNLOAD_ROOT as Lo, instantlyAiConnector as Lr, savvycalConnector as Ls, sardisConnector as Lt, amazonSqsConnector as Lu, saleshandyConnector as M, altTextAiConnector as Ma, microsoftCalendar as Mc, giftbitConnector as Md, copyAiConnector as Mi, classifyGoogleError as Ml, instasentConnector as Mn, digitalOceanConnector as Mo, joggAiConnector as Mr, sageIntacctConnector as Ms, sendinblueConnector as Mt, avomaConnector as Mu, lagrowthmachineConnector as N, alaiConnector as Na, microsoft365PlannerConnector as Nc, generatebannersConnector as Nd, dashworksConnector as Ni, classifyGoogleReason as Nl, insightoAiConnector as Nn, discourseConnector as No, justInvoiceConnector as Nr, slack as Ns, skyprepConnector as Nt, acuitySchedulingConnector as Nu, snovIoConnector as O, apitemplateIoConnector as Oa, microsoftGraph as Oc, bexioConnector as Od, phonyConnector as Of, deepseekConnector as Oi, googleCalendar as Ol, mailchainConnector as On, hightouchConnector as Oo, kissflowConnector as Or, tallyConnector as Os, serviceNowConnector as Ot, azureEventGridConnector as Ou, heyreachConnector as P, airtopConnector as Pa, microsoft365PeopleConnector as Pc, genderApiConnector as Pd, convertkitConnector as Pi, googleApiError as Pl, imapConnector as Pn, datadogConnector as Po, jiraDataCenterConnector as Pr, signNowConnector as Ps, seekTableConnector as Pt, auth0Connector as Pu, vidlab7Connector as Q, geminiConnector as Qa, httpConnector as Qc, contextualAiConnector as Qd, certopusConnector as Qi, docusignConnector as Ql, memConnector as Qn, zohoMailConnector as Qo, gameballConnector as Qr, createRabbitMqConnector as Qs, productboardConnector as Qt, vercelConnector as Qu, wufooConnector as R, acumbamailConnector as Ra, linearConnector as Rc, featheryConnector as Rd, cohereConnector as Ri, freshsalesConnector as Rl, hedyConnector as Rn, telegramConnector as Ro, huggingFaceConnector as Rr, saleorConnector as Rs, saasticConnector as Rt, amazonSnsConnector as Ru, autoboundConnector as S, semrushConnector as Sa, meetgeekAiConnector as Sc, constantContactConnector as Sd, pingIdentityConnector as Sf, documergeConnector as Si, linkedinAdsConnector as Sl, omniCoConnector as Sn, builtwithConnector as So, kommoConnector as Sr, typeformConnector as Ss, smartsuiteConnector as St, baremetricsConnector as Su, leadfeederConnector as T, apitableConnector as Ta, microsoftPowerBiConnector as Tc, clicdataConnector as Td, oktaConnector as Tf, descriptConnector as Ti, metaAdsConnector as Tl, nocodbConnector as Tn, createMySqlConnector as To, koFiConnector as Tr, todoistConnector as Ts, simplirouteConnector as Tt, backblazeConnector as Tu, wonderchatConnector as U, kustomerConnector as Ua, publicKafkaSocketFactory as Uc, dripConnector as Ud, clockodoConnector as Ui, figmaConnector as Ul, gotifyConnector as Un, salesloftConnector as Uo, heygenConnector as Ur, ringcentralConnector as Us, replyIoConnector as Ut, amplitudeConnector as Uu, woocommerceConnector as V, agentxConnector as Va, createKafkaConnector as Vc, elevenlabsConnector as Vd, cloutlyConnector as Vi, flowluConnector as Vl, gristConnector as Vn, chatwootConnector as Vo, heymarketSmsConnector as Vr, salesforceConnector as Vs, retellAiConnector as Vt, amazonCloudWatchConnector as Vu, whatsscaleConnector as W, activecampaignConnector as Wa, justcallConnector as Wc, docsbotConnector as Wd, chatnodeConnector as Wi, figjamConnector as Wl, glideConnector as Wn, outreachConnector as Wo, hastewireConnector as Wr, rampConnector as Ws, reoonVerifierConnector as Wt, affinityConnector as Wu, vtexConnector as X, weaviateConnector as Xa, instagramBusinessConnector as Xc, couchbaseConnector as Xd, cannyConnector as Xi, dropboxConnector as Xl, mindeeConnector as Xn, brazeConnector as Xo, ghostcmsConnector as Xr, createRedisConnector as Xs, pushoverConnector as Xt, wootricConnector as Xu, vtigerConnector as Y, pineconeConnector as Ya, insightlyConnector as Yc, dappierConnector as Yd, chargekeepConnector as Yi, ebayConnector as Yl, mixmaxConnector as Yn, customerIoConnector as Yo, gistlyConnector as Yr, redshiftConnector as Ys, qawafelConnector as Yt, workdayConnector as Yu, vlmRunConnector as Z, huggingfaceConnector as Za, intercomConnector as Zc, contiguityConnector as Zd, chainalysisApiConnector as Zi, dialpadConnector as Zl, millionverifierConnector as Zn, apolloConnector as Zo, freshserviceConnector as Zr, redisConnector as Zs, proxycurlConnector as Zt, videoaskConnector as Zu, zenrowsConnector as _, avianConnector as _a, createMongoDbConnector as _c, giteaConnector as _d, anyhookWebsocketConnector as _f, elasticEmailConnector as _i, createAmazonAdsConnector as _l, opnformConnector as _n, zerobounceConnector as _o, linkaConnector as _r, twilioSmsConnector as _s, stripeConnector as _t, calCom as _u, linqWhatsappConnector as a, bolnaConnector as aa, paddleConnector as ac, reddit as ad, chaindeskConnector as af, flipandoConnector as ai, googleTasksConnector as al, placidConnector as an, zendeskSellConnector as ao, lucidyaConnector as ar, cloudbedsConnector as as, twilioConnector as at, recurlyConnector as au, leadmagicConnector as b, clayConnector as ba, miroConnector as bc, discordConnector as bd, actualbudgetConnector as bf, dumplingAiConnector as bi, snapchatAdsConnector as bl, openRouterConnector as bn, hunterConnector as bo, lettaConnector as br, twitter as bs, socialkitConnector as bt, billComConnector as bu, getresponseConnector as c, bitlyConnector as ca, oneSpanSignConnector as cc, paychexConnector as cd, cartloomConnector as cf, enrichlayerConnector as ci, googleSearchConsoleConnector as cl, peekshotConnector as cn, facebookPagesConnector as co, lushaConnector as cr, zendeskConnector as cs, totalcmsConnector as ct, contentfulConnector as cu, nooksConnector as d, beamerConnector as da, ninjapipeConnector as dc, niftyConnector as dd, bikaConnector as df, esignaturesConnector as di, googleForms as dl, paywhirlConnector as dn, slackEventsConnector as do, logrocketConnector as dr, wrikeConnector as ds, timeOpsConnector as dt, cloudinaryConnector as du, braveSearchConnector as ea, quickbooksConnector as ec, teableConnector as ed, clickfunnelsConnector as ef, frameConnector as ei, helpscoutConnector as el, posthogConnector as en, anthropicConnector as eo, messagebirdConnector as er, zohoCampaignsConnector as es, uscreenConnector as et, chessComConnector as eu, signwellConnector as f, azureOpenaiConnector as fa, netsuiteConnector as fc, netlifyConnector as fd, beehiivConnector as ff, emailitConnector as fi, googleDrive as fl, pinchPaymentsConnector as fn, stripeWebhookReceiverConnector as fo, lokaliseConnector as fr, wordpressConnector as fs, textcortexAiConnector as ft, cloudflareConnector as fu, oceanIoConnector as g, asknewsConnector as ga, mycaseConnector as gc, gustoConnector as gd, apifyConnector as gf, edenAiConnector as gi, googleCloudStorageConnector as gl, orimonConnector as gn, resolveConnectorAdapterFactoryOptions as go, localaiConnector as gr, voucheryIoConnector as gs, systemeIoConnector as gt, calendlyConnector as gu, seamlessAiConnector as h, azureCommunicationServicesConnector as ha, notionConnector as hc, instaChartsConnector as hd, askHandleConnector as hf, easyPeasyAiConnector as hi, googlePubSubConnector as hl, oracleDatabaseConnector as hn, CONNECTOR_ADAPTER_FACTORIES as ho, lobstermailConnector as hr, whatsappBusiness as hs, tableauConnector as ht, capsuleCrmConnector as hu, resendConnector as i, bookedinConnector as ia, plaidConnector as ic, ripplingConnector as id, chatAidConnector as if, formbricksConnector as ii, googlechatConnector as il, plausibleConnector as in, sendgridConnector as io, matomoConnector as ir, pricelabsConnector as is, upgradechatConnector as it, taxjarConnector as iu, bettercontactConnector as j, alttextifyConnector as ja, microsoftDynamics365BusinessCentralConnector as jc, modelslabConnector as jd, datafuelConnector as ji, gmail as jl, kallabotAiConnector as jn, clicksendConnector as jo, kizeoFormsConnector as jr, shopifyConnector as js, senjaConnector as jt, avalaraConnector as ju, findymailConnector as k, amazonTextractConnector as ka, microsoftExcel365Connector as kc, adpConnector as kd, customgptConnector as ki, gorgiasConnector as kl, loopsConnector as kn, googleBigqueryConnector as ko, kimaiConnector as kr, stripePackConnector as ks, tregConnector as kt, azureBlobStorageConnector as ku, factorsAiConnector as l, blandAiConnector as la, oneDrive as lc, pagerdutyConnector as ld, cambAiConnector as lf, fathomAnalyticsConnector as li, googleMyBusinessConnector as ll, pdfmonkeyConnector as ln, gitlabConnector as lo, loftyConnector as lr, zapierConnector as ls, togglTrackConnector as lt, confluenceConnector as lu, usergemsConnector as m, autocallsConnector as ma, notion as mc, leverConnector as md, bannerbearConnector as mf, dustConnector as mi, googleContactsConnector as ml, paperformConnector as mn, webhookConnector as mo, llmrailsConnector as mr, xeroConnector as ms, talkableConnector as mt, closeConnector as mu, sendblueConnector as n, brilliantDirectoriesConnector as na, pipedriveConnector as nc, sendpulseConnector as nd, claudeConnector as nf, fountainConnector as ni, hellosign as nl, pollybotAiConnector as nn, sentryConnector as no, mailgunConnector as nr, zohoCrmConnector as ns, validatedmailsConnector as nt, circleConnector as nu, linqConnector as o, blueskyConnector as oa, pandadoc as oc, redditConnector as od, chainAwareConnector as of, flowiseConnector as oi, googleSlidesConnector as ol, personalAiConnector as on, zagomailConnector as oo, luxuryPresenceConnector as or, zohoBookingsConnector as os, twinLabsConnector as ot, chargebeeConnector as ou, polytomicConnector as p, barcodeLookupConnector as pa, n8nConnector as pc, lightfunnelsConnector as pd, base44Connector as pf, emailoctopusConnector as pi, googleDocs as pl, pastefyConnector as pn, gtmAgentConnector as po, magicalApiConnector as pr, webflowConnector as ps, telnyxConnector as pt, clickupConnector as pu, whatConvertsConnector as q, bamboohrConnector as qa, ironcladConnector as qc, detectingAiConnector as qd, chatbaseConnector as qi, fathomConnector as ql, missiveConnector as qn, lemlistConnector as qo, greenptConnector as qr, postgresConnector as qs, raiaAiConnector as qt, zuoraConnector as qu, clerkConnector as r, browseAiConnector as ra, pipedreamConnector as rc, sanityConnector as rd, chatsistantConnector as rf, foreplayCoConnector as ri, granolaConnector as rl, pocketbaseConnector as rn, postmarkConnector as ro, manychatConnector as rr, zohoDeskConnector as rs, vapiConnector as rt, cashfreePaymentsConnector as ru, inkboxConnector as s, bonjoroConnector as sa, outlookMail as sc, pushbulletConnector as sd, csvFilesConnector as sf, facebookLeadsConnector as si, googleSheets as sl, perplexityAiConnector as sn, quickzuConnector as so, mailerLiteConnector as sr, zoomConnector as ss, typefullyConnector as st, copperConnector as su, adapters_exports as t, campaignMonitorConnector as ta, parquetFilesConnector as tc, snowflakeConnector as td, clearoutphoneConnector as tf, mailercheckConnector as ti, harvestConnector as tl, postizConnector as tn, openaiConnector as to, mailerooConnector as tr, zohoBooksConnector as ts, umamiConnector as tt, checkoutConnector as tu, modjoConnector as u, bettermodeConnector as ua, openPhoneConnector as uc, opsgenieConnector as ud, buttondownConnector as uf, firecrawlConnector as ui, googleMeetConnector as ul, parseurConnector as un, githubConnector as uo, logsnagConnector as ur, youtubeDataConnector as us, timelinesAiConnector as ut, codaConnector as uu, phantombusterConnector as v, assemblyaiConnector as va, mongodbConnector as vc, freeAgentConnector as vd, airparserConnector as vf, documentproConnector as vi, createMicrosoftAdsConnector as vl, openmicAiConnector as vn, theirstackConnector as vo, letsCalendarConnector as vr, tiktok as vs, swarmnodeConnector as vt, calComConnector as vu, serperConnector as w, aminosConnector as wa, microsoftTodoConnector as wc, clioConnector as wd, clientCredentialsRestConnector as wf, datocmsConnector as wi, xAdsConnector as wl, ntfyConnector as wn, segmentConnector as wo, kudosityConnector as wr, trelloConnector as ws, simplybookmeConnector as wt, biginByZohoConnector as wu, crustdataConnector as x, cognismConnector as xa, mollieConnector as xc, demandbaseConnector as xd, scimConnector as xf, doctlyConnector as xi, redditAdsConnector as xl, omnihrConnector as xn, fullenrichConnector as xo, leexiConnector as xr, twitterConnector as xs, smsmodeConnector as xt, brexConnector as xu, brightdataConnector as y, ashbyConnector as ya, mondayConnector as yc, formstackConnector as yd, aianswerConnector as yf, dubConnector as yi, pinterestAdsConnector as yl, opportifyConnector as yn, neverbounceConnector as yo, linkupConnector as yr, tiktokConnector as ys, supadataConnector as yt, billplzConnector as yu, writesonicBulkConnector as z, aidbaseConnector as za, lemonSqueezyConnector as zc, everhourConnector as zd, cognitoFormsConnector as zi, freshdeskConnector as zl, heartbeatConnector as zn, mattermostConnector as zo, influencersClubConnector as zr, createSftpConnector as zs, runwareConnector as zt, amazonS3Connector as zu };
195843
+ export { vboutConnector as $, googleGeminiConnector as $a, helpscoutConnector as $c, clickfunnelsConnector as $d, captainDataConnector as $i, chessComConnector as $l, mauticConnector as $n, zohoInvoiceConnector as $o, fragmentConnector as $r, quickbooksConnector as $s, predictLeadsConnector as $t, teableConnector as $u, contactoutConnector as A, amazonSesConnector as Aa, microsoftDynamics365BusinessCentralConnector as Ac, modelslabConnector as Ad, cryptolensConnector as Ai, gmail as Al, knockConnector as An, firebaseConnector as Ao, kapsoConnector as Ar, shopifyConnector as As, serpstatConnector as At, avalaraConnector as Au, workableConnector as B, afforaiConnector as Ba, createKafkaConnector as Bc, elevenlabsConnector as Bd, clearoutConnector as Bi, flowluConnector as Bl, griptapeConnector as Bn, matrixConnector as Bo, housecallProConnector as Br, salesforceConnector as Bs, robollyConnector as Bt, amazonCloudWatchConnector as Bu, warmlyConnector as C, similarwebConnector as Ca, microsoftTodoConnector as Cc, clioConnector as Cd, clientCredentialsRestConnector as Cf, dittofeedConnector as Ci, xAdsConnector as Cl, odooConnector as Cn, supabaseConnector as Co, leapAiConnector as Cr, trelloConnector as Cs, smartsheetConnector as Ct, biginByZohoConnector as Cu, wizaConnector as D, ampecoConnector as Da, microsoftGraph as Dc, bexioConnector as Dd, phonyConnector as Df, denserAiConnector as Di, googleCalendar as Dl, medullarConnector as Dn, metabaseConnector as Do, klentyConnector as Dr, tallyConnector as Ds, signrequestConnector as Dt, azureEventGridConnector as Du, commonRoomConnector as E, appfollowConnector as Ea, microsoftTeams as Ec, bigcommerceConnector as Ed, createPhonyConnector as Ef, devinConnector as Ei, googleAnalyticsConnector as El, mindStudioConnector as En, mysqlConnector as Eo, knackConnector as Er, ticktickConnector as Es, shortIoConnector as Et, azureServiceBusConnector as Eu, amplemarketConnector as F, amazonSecretsManagerConnector as Fa, createLinkedinConnector as Fc, flowParserConnector as Fd, crispConnector as Fi, googleTestFailureReason as Fl, ibmCognoseConnector as Fn, baserowConnector as Fo, jinaAiConnector as Fr, sharepoint as Fs, scrapelessConnector as Ft, asanaConnector as Fu, whatsappConnector as G, smooveConnector as Ga, jiraCloudConnector as Gc, digitalPilotConnector as Gd, chatDataConnector as Gi, fireberryConnector as Gl, googleVertexaiConnector as Gn, marketoConnector as Go, guideliteConnector as Gr, createPostgresConnector as Gs, reachinboxConnector as Gt, adobeSignConnector as Gu, woodpeckerConnector as H, airOpsConnector as Ha, publicKafkaSocketFactory as Hc, dripConnector as Hd, clockifyConnector as Hi, figmaConnector as Hl, gptzeroDetectAiConnector as Hn, smartleadConnector as Ho, hashiCorpVaultConnector as Hr, ringcentralConnector as Hs, retableConnector as Ht, amplitudeConnector as Hu, zeplinConnector as I, amazonBedrockConnector as Ia, linkedinConnector as Ic, fellowConnector as Id, comfyicuConnector as Ii, frontConnector as Il, hystructConnector as In, airtableConnector as Io, imageRouterConnector as Ir, savvycalConnector as Is, scrapegraphaiConnector as It, amazonSqsConnector as Iu, wafeqConnector as J, qdrantConnector as Ja, insightlyConnector as Jc, dappierConnector as Jd, chatlingConnector as Ji, ebayConnector as Jl, mixpanelConnector as Jn, klaviyoConnector as Jo, googleSearchConnector as Jr, redshiftConnector as Js, quadernoConnector as Jt, workdayConnector as Ju, webscrapingAiConnector as K, greenhouseConnector as Ka, ironcladConnector as Kc, detectingAiConnector as Kd, chartlyConnector as Ki, fathomConnector as Kl, exaConnector as Kn, mailchimpConnector as Ko, greipConnector as Kr, postgresConnector as Ks, rapidtextAiConnector as Kt, zuoraConnector as Ku, youcanbookmeConnector as L, aipriseConnector as La, linearConnector as Lc, featheryConnector as Ld, cometapiConnector as Li, freshsalesConnector as Ll, humeAiConnector as Ln, TELEGRAM_FILE_DOWNLOAD_ROOT as Lo, instantlyAiConnector as Lr, saleorConnector as Ls, sardisConnector as Lt, amazonSnsConnector as Lu, saleshandyConnector as M, altTextAiConnector as Ma, microsoft365PlannerConnector as Mc, generatebannersConnector as Md, copyAiConnector as Mi, classifyGoogleReason as Ml, instasentConnector as Mn, digitalOceanConnector as Mo, joggAiConnector as Mr, slack as Ms, sendinblueConnector as Mt, acuitySchedulingConnector as Mu, lagrowthmachineConnector as N, alaiConnector as Na, microsoft365PeopleConnector as Nc, genderApiConnector as Nd, dashworksConnector as Ni, googleApiError as Nl, insightoAiConnector as Nn, discourseConnector as No, justInvoiceConnector as Nr, signNowConnector as Ns, skyprepConnector as Nt, auth0Connector as Nu, snovIoConnector as O, apitemplateIoConnector as Oa, microsoftExcel365Connector as Oc, adpConnector as Od, deepseekConnector as Oi, gorgiasConnector as Ol, mailchainConnector as On, hightouchConnector as Oo, kissflowConnector as Or, stripePackConnector as Os, serviceNowConnector as Ot, azureBlobStorageConnector as Ou, heyreachConnector as P, airtopConnector as Pa, makeConnector as Pc, gammaConnector as Pd, convertkitConnector as Pi, googleErrorReason as Pl, imapConnector as Pn, datadogConnector as Po, jiraDataCenterConnector as Pr, shippoConnector as Ps, seekTableConnector as Pt, attioConnector as Pu, vidlab7Connector as Q, geminiConnector as Qa, hubspot as Qc, codyConnector as Qd, certopusConnector as Qi, docuseal as Ql, memConnector as Qn, zohoMailConnector as Qo, gameballConnector as Qr, rabbitMqConnector as Qs, productboardConnector as Qt, tenzoConnector as Qu, wufooConnector as R, acumbamailConnector as Ra, lemonSqueezyConnector as Rc, everhourConnector as Rd, cohereConnector as Ri, freshdeskConnector as Rl, hedyConnector as Rn, telegramConnector as Ro, huggingFaceConnector as Rr, createSftpConnector as Rs, saasticConnector as Rt, amazonS3Connector as Ru, autoboundConnector as S, semrushConnector as Sa, mastodonConnector as Sc, cloudconvertConnector as Sd, oneloginConnector as Sf, documergeConnector as Si, tiktokAdsConnector as Sl, omniCoConnector as Sn, builtwithConnector as So, kommoConnector as Sr, twentyConnector as Ss, smartsuiteConnector as St, boxConnector as Su, leadfeederConnector as T, apitableConnector as Ta, microsoftOnenoteConnector as Tc, canvaConnector as Td, declarativeRestConnector as Tf, descriptConnector as Ti, googleAdsConnector as Tl, nocodbConnector as Tn, createMySqlConnector as To, koFiConnector as Tr, tlDvConnector as Ts, simplirouteConnector as Tt, basecampConnector as Tu, wonderchatConnector as U, kustomerConnector as Ua, justcallConnector as Uc, docsbotConnector as Ud, clockodoConnector as Ui, figjamConnector as Ul, gotifyConnector as Un, salesloftConnector as Uo, heygenConnector as Ur, rampConnector as Us, replyIoConnector as Ut, affinityConnector as Uu, woocommerceConnector as V, agentxConnector as Va, kafkaConnector as Vc, echowinConnector as Vd, cloutlyConnector as Vi, filloutFormsConnector as Vl, gristConnector as Vn, chatwootConnector as Vo, heymarketSmsConnector as Vr, rssConnector as Vs, retellAiConnector as Vt, amazonEventBridgeConnector as Vu, whatsscaleConnector as W, activecampaignConnector as Wa, jotformConnector as Wc, duckdbConnector as Wd, chatnodeConnector as Wi, firefliesAiConnector as Wl, glideConnector as Wn, outreachConnector as Wo, hastewireConnector as Wr, recallAiConnector as Ws, reoonVerifierConnector as Wt, aircallConnector as Wu, vtexConnector as X, weaviateConnector as Xa, intercomConnector as Xc, contiguityConnector as Xd, cannyConnector as Xi, dialpadConnector as Xl, mindeeConnector as Xn, brazeConnector as Xo, ghostcmsConnector as Xr, redisConnector as Xs, pushoverConnector as Xt, videoaskConnector as Xu, vtigerConnector as Y, pineconeConnector as Ya, instagramBusinessConnector as Yc, couchbaseConnector as Yd, chargekeepConnector as Yi, dropboxConnector as Yl, mixmaxConnector as Yn, customerIoConnector as Yo, gistlyConnector as Yr, createRedisConnector as Ys, qawafelConnector as Yt, wootricConnector as Yu, vlmRunConnector as Z, huggingfaceConnector as Za, httpConnector as Zc, contextualAiConnector as Zd, chainalysisApiConnector as Zi, docusignConnector as Zl, millionverifierConnector as Zn, apolloConnector as Zo, freshserviceConnector as Zr, createRabbitMqConnector as Zs, proxycurlConnector as Zt, vercelConnector as Zu, zenrowsConnector as _, avianConnector as _a, mongodbConnector as _c, freeAgentConnector as _d, airparserConnector as _f, elasticEmailConnector as _i, createMicrosoftAdsConnector as _l, opnformConnector as _n, zerobounceConnector as _o, linkaConnector as _r, tiktok as _s, stripeConnector as _t, calComConnector as _u, linqWhatsappConnector as a, bolnaConnector as aa, pandadoc as ac, redditConnector as ad, chainAwareConnector as af, flipandoConnector as ai, googleSlidesConnector as al, placidConnector as an, zendeskSellConnector as ao, lucidyaConnector as ar, zohoBookingsConnector as as, twilioConnector as at, chargebeeConnector as au, leadmagicConnector as b, clayConnector as ba, mollieConnector as bc, demandbaseConnector as bd, scimConnector as bf, dumplingAiConnector as bi, redditAdsConnector as bl, openRouterConnector as bn, hunterConnector as bo, lettaConnector as br, twitterConnector as bs, socialkitConnector as bt, brexConnector as bu, getresponseConnector as c, bitlyConnector as ca, oneDrive as cc, pagerdutyConnector as cd, cambAiConnector as cf, enrichlayerConnector as ci, googleMyBusinessConnector as cl, peekshotConnector as cn, facebookPagesConnector as co, lushaConnector as cr, zapierConnector as cs, totalcmsConnector as ct, confluenceConnector as cu, nooksConnector as d, beamerConnector as da, netsuiteConnector as dc, netlifyConnector as dd, beehiivConnector as df, esignaturesConnector as di, googleDrive as dl, paywhirlConnector as dn, slackEventsConnector as do, logrocketConnector as dr, wordpressConnector as ds, timeOpsConnector as dt, cloudflareConnector as du, braveSearchConnector as ea, parquetFilesConnector as ec, snowflakeConnector as ed, clearoutphoneConnector as ef, frameConnector as ei, harvestConnector as el, posthogConnector as en, anthropicConnector as eo, messagebirdConnector as er, zohoCampaignsConnector as es, uscreenConnector as et, checkoutConnector as eu, signwellConnector as f, azureOpenaiConnector as fa, n8nConnector as fc, lightfunnelsConnector as fd, base44Connector as ff, emailitConnector as fi, googleDocs as fl, pinchPaymentsConnector as fn, stripeWebhookReceiverConnector as fo, lokaliseConnector as fr, webflowConnector as fs, textcortexAiConnector as ft, clickupConnector as fu, oceanIoConnector as g, asknewsConnector as ga, createMongoDbConnector as gc, giteaConnector as gd, anyhookWebsocketConnector as gf, edenAiConnector as gi, createAmazonAdsConnector as gl, orimonConnector as gn, resolveConnectorAdapterFactoryOptions as go, localaiConnector as gr, twilioSmsConnector as gs, systemeIoConnector as gt, calCom as gu, seamlessAiConnector as h, azureCommunicationServicesConnector as ha, mycaseConnector as hc, gustoConnector as hd, apifyConnector as hf, easyPeasyAiConnector as hi, googleCloudStorageConnector as hl, oracleDatabaseConnector as hn, CONNECTOR_ADAPTER_FACTORIES as ho, lobstermailConnector as hr, voucheryIoConnector as hs, tableauConnector as ht, calendlyConnector as hu, resendConnector as i, bookedinConnector as ia, paddleConnector as ic, reddit as id, chaindeskConnector as if, formbricksConnector as ii, googleTasksConnector as il, plausibleConnector as in, sendgridConnector as io, matomoConnector as ir, pricelabsConnector as is, upgradechatConnector as it, recurlyConnector as iu, bettercontactConnector as j, alttextifyConnector as ja, microsoftCalendar as jc, giftbitConnector as jd, datafuelConnector as ji, classifyGoogleError as jl, kallabotAiConnector as jn, clicksendConnector as jo, kizeoFormsConnector as jr, sageIntacctConnector as js, senjaConnector as jt, avomaConnector as ju, findymailConnector as k, amazonTextractConnector as ka, microsoftDynamicsCrmConnector as kc, adobeCreativeCloudConnector as kd, customgptConnector as ki, gongConnector as kl, loopsConnector as kn, googleBigqueryConnector as ko, kimaiConnector as kr, squareConnector as ks, tregConnector as kt, azureAdConnector as ku, factorsAiConnector as l, blandAiConnector as la, openPhoneConnector as lc, opsgenieConnector as ld, buttondownConnector as lf, fathomAnalyticsConnector as li, googleMeetConnector as ll, pdfmonkeyConnector as ln, gitlabConnector as lo, loftyConnector as lr, youtubeDataConnector as ls, togglTrackConnector as lt, codaConnector as lu, usergemsConnector as m, autocallsConnector as ma, notionConnector as mc, instaChartsConnector as md, askHandleConnector as mf, dustConnector as mi, googlePubSubConnector as ml, paperformConnector as mn, webhookConnector as mo, llmrailsConnector as mr, whatsappBusiness as ms, talkableConnector as mt, capsuleCrmConnector as mu, sendblueConnector as n, brilliantDirectoriesConnector as na, pipedreamConnector as nc, sanityConnector as nd, chatsistantConnector as nf, fountainConnector as ni, granolaConnector as nl, pollybotAiConnector as nn, sentryConnector as no, mailgunConnector as nr, zohoCrmConnector as ns, validatedmailsConnector as nt, cashfreePaymentsConnector as nu, linqConnector as o, blueskyConnector as oa, outlookMail as oc, pushbulletConnector as od, csvFilesConnector as of, flowiseConnector as oi, googleSheets as ol, personalAiConnector as on, zagomailConnector as oo, luxuryPresenceConnector as or, zoomConnector as os, twinLabsConnector as ot, copperConnector as ou, polytomicConnector as p, barcodeLookupConnector as pa, notion as pc, leverConnector as pd, bannerbearConnector as pf, emailoctopusConnector as pi, googleContactsConnector as pl, pastefyConnector as pn, gtmAgentConnector as po, magicalApiConnector as pr, xeroConnector as ps, telnyxConnector as pt, closeConnector as pu, whatConvertsConnector as q, bamboohrConnector as qa, invoiceninjaConnector as qc, deepgramConnector as qd, chatbaseConnector as qi, etsyConnector as ql, missiveConnector as qn, lemlistConnector as qo, greenptConnector as qr, createRedshiftConnector as qs, raiaAiConnector as qt, zoominfoConnector as qu, clerkConnector as r, browseAiConnector as ra, plaidConnector as rc, ripplingConnector as rd, chatAidConnector as rf, foreplayCoConnector as ri, googlechatConnector as rl, pocketbaseConnector as rn, postmarkConnector as ro, manychatConnector as rr, zohoDeskConnector as rs, vapiConnector as rt, taxjarConnector as ru, inkboxConnector as s, bonjoroConnector as sa, oneSpanSignConnector as sc, paychexConnector as sd, cartloomConnector as sf, facebookLeadsConnector as si, googleSearchConsoleConnector as sl, perplexityAiConnector as sn, quickzuConnector as so, mailerLiteConnector as sr, zendeskConnector as ss, typefullyConnector as st, contentfulConnector as su, adapters_exports as t, campaignMonitorConnector as ta, pipedriveConnector as tc, sendpulseConnector as td, claudeConnector as tf, mailercheckConnector as ti, hellosign as tl, postizConnector as tn, openaiConnector as to, mailerooConnector as tr, zohoBooksConnector as ts, umamiConnector as tt, circleConnector as tu, modjoConnector as u, bettermodeConnector as ua, ninjapipeConnector as uc, niftyConnector as ud, bikaConnector as uf, firecrawlConnector as ui, googleForms as ul, parseurConnector as un, githubConnector as uo, logsnagConnector as ur, wrikeConnector as us, timelinesAiConnector as ut, cloudinaryConnector as uu, phantombusterConnector as v, assemblyaiConnector as va, mondayConnector as vc, formstackConnector as vd, aianswerConnector as vf, documentproConnector as vi, pinterestAdsConnector as vl, openmicAiConnector as vn, theirstackConnector as vo, letsCalendarConnector as vr, tiktokConnector as vs, swarmnodeConnector as vt, billplzConnector as vu, serperConnector as w, aminosConnector as wa, microsoftPowerBiConnector as wc, clicdataConnector as wd, oktaConnector as wf, datocmsConnector as wi, metaAdsConnector as wl, ntfyConnector as wn, segmentConnector as wo, kudosityConnector as wr, todoistConnector as ws, simplybookmeConnector as wt, backblazeConnector as wu, crustdataConnector as x, cognismConnector as xa, meetgeekAiConnector as xc, constantContactConnector as xd, pingIdentityConnector as xf, doctlyConnector as xi, linkedinAdsConnector as xl, omnihrConnector as xn, fullenrichConnector as xo, leexiConnector as xr, typeformConnector as xs, smsmodeConnector as xt, baremetricsConnector as xu, brightdataConnector as y, ashbyConnector as ya, miroConnector as yc, discordConnector as yd, actualbudgetConnector as yf, dubConnector as yi, snapchatAdsConnector as yl, opportifyConnector as yn, neverbounceConnector as yo, linkupConnector as yr, twitter as ys, supadataConnector as yt, billComConnector as yu, writesonicBulkConnector as z, aidbaseConnector as za, leadConnectorConnector as zc, excelFilesConnector as zd, cognitoFormsConnector as zi, folkConnector as zl, heartbeatConnector as zn, mattermostConnector as zo, influencersClubConnector as zr, sftpConnector as zs, runwareConnector as zt, amazonLambdaConnector as zu };
196061
195844
 
196062
- //# sourceMappingURL=adapters-D8TvHRA1.js.map
195845
+ //# sourceMappingURL=adapters-DVwQyQCI.js.map