@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.
- package/data/bundled-adapter-manifests.json +1 -1
- package/dist/{adapters-D8TvHRA1.js → adapters-DVwQyQCI.js} +414 -631
- package/dist/{adapters-D8TvHRA1.js.map → adapters-DVwQyQCI.js.map} +1 -1
- package/dist/{bundled-manifest-data-MdURriam.js → bundled-manifest-data-Bj_ENela.js} +276 -12
- package/dist/{bundled-manifest-data-MdURriam.js.map → bundled-manifest-data-Bj_ENela.js.map} +1 -1
- package/dist/cloudbeds-BL5EF3xl.js +1195 -0
- package/dist/cloudbeds-BL5EF3xl.js.map +1 -0
- package/dist/connect/index.js +1 -1
- package/dist/connectors/adapters/index.d.ts +1 -1
- package/dist/connectors/adapters/index.js +3 -2
- package/dist/connectors/index.d.ts +2 -2
- package/dist/connectors/index.js +5 -4
- package/dist/{consumer-DaKqPDG-.d.ts → consumer-BslMZthR.d.ts} +2 -2
- package/dist/{consumer-DaKqPDG-.d.ts.map → consumer-BslMZthR.d.ts.map} +1 -1
- package/dist/consumer.d.ts +1 -1
- package/dist/consumer.js +1 -1
- package/dist/{index-b05PzTtX.d.ts → index-B227L17C.d.ts} +2 -2
- package/dist/{index-b05PzTtX.d.ts.map → index-B227L17C.d.ts.map} +1 -1
- package/dist/{index-udV3gGjx.d.ts → index-Gn72pQCA.d.ts} +10 -1
- package/dist/index-Gn72pQCA.d.ts.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +7 -6
- package/dist/internal/bundled-manifest-runtime.js +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.js +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/registry.js +1 -1
- package/dist/runtime.d.ts +1 -1
- package/dist/sandbox.d.ts +1 -1
- package/dist/{specs-BYUQOsSC.js → specs-BnY10gv2.js} +2 -2
- package/dist/{specs-BYUQOsSC.js.map → specs-BnY10gv2.js.map} +1 -1
- package/dist/specs.js +1 -1
- package/dist/{src-c7Ru9_WT.js → src-Bgyicg7S.js} +4 -4
- package/dist/{src-c7Ru9_WT.js.map → src-Bgyicg7S.js.map} +1 -1
- package/dist/{tangle-id-D2kPF0rX.js → tangle-id-81ShqJ7k.js} +3 -262
- package/dist/tangle-id-81ShqJ7k.js.map +1 -0
- package/dist/types-BSDXGSi5.js +263 -0
- package/dist/types-BSDXGSi5.js.map +1 -0
- package/dist/webhooks/index.d.ts +5 -0
- package/dist/webhooks/index.d.ts.map +1 -1
- package/dist/webhooks/index.js +92 -2
- package/dist/webhooks/index.js.map +1 -1
- package/docs/hospitality-connectors.md +91 -11
- package/docs/knowledge-provider-contracts.md +86 -0
- package/package.json +2 -1
- package/dist/index-udV3gGjx.d.ts.map +0 -1
- package/dist/tangle-id-D2kPF0rX.js.map +0 -1
- package/dist/webhooks-FsjqRN_0.js +0 -117
- 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
|
|
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 {
|
|
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 {
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
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$
|
|
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$
|
|
27177
|
-
end: date$
|
|
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$
|
|
27244
|
-
end: date$
|
|
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$
|
|
27286
|
-
end: date$
|
|
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
|
|
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
|
|
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: {
|
|
28832
|
-
|
|
28833
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
52982
|
+
totalBudget: money$2,
|
|
52828
52983
|
currencyCode: currency,
|
|
52829
|
-
bidAmount: money$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
54402
|
-
maxCpc: money$
|
|
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$
|
|
54435
|
-
startDate: date$
|
|
54436
|
-
endDate: date$
|
|
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$
|
|
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$
|
|
54578
|
-
endDate: date$
|
|
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
|
|
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$
|
|
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
|
|
54820
|
-
startDate: date$
|
|
54821
|
-
endDate: date$
|
|
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
|
|
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
|
|
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$
|
|
54905
|
-
endDate: date$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
118494
|
-
|
|
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
|
|
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-
|
|
195845
|
+
//# sourceMappingURL=adapters-DVwQyQCI.js.map
|