@tangle-network/agent-integrations 0.68.0 → 0.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/data/bundled-adapter-manifests.json +1 -1
  2. package/dist/{adapters-BM6A29Y6.js → adapters-Cyo2DsIw.js} +919 -30
  3. package/dist/{adapters-BM6A29Y6.js.map → adapters-Cyo2DsIw.js.map} +1 -1
  4. package/dist/{bundled-manifest-data-DhcRFr4L.js → bundled-manifest-data-CwAju2Nc.js} +350 -12
  5. package/dist/{bundled-manifest-data-DhcRFr4L.js.map → bundled-manifest-data-CwAju2Nc.js.map} +1 -1
  6. package/dist/{bundled-manifest-runtime-D1unUvQL.d.ts → bundled-manifest-runtime-G6p2i9W-.d.ts} +2 -2
  7. package/dist/bundled-manifest-runtime-G6p2i9W-.d.ts.map +1 -0
  8. package/dist/{catalog-DgqwU5CZ.d.ts → catalog-DmAjfp4i.d.ts} +3 -3
  9. package/dist/{catalog-DgqwU5CZ.d.ts.map → catalog-DmAjfp4i.d.ts.map} +1 -1
  10. package/dist/catalog.d.ts +1 -1
  11. package/dist/connect/index.d.ts +1 -1
  12. package/dist/connect/index.js +1 -1
  13. package/dist/connectors/adapters/index.d.ts +3 -3
  14. package/dist/connectors/adapters/index.js +3 -3
  15. package/dist/connectors/index.d.ts +7 -7
  16. package/dist/connectors/index.js +4 -4
  17. package/dist/connectors/oauth.d.ts +1 -1
  18. package/dist/{consumer-BtrQO_N5.d.ts → consumer-sWg-n7bk.d.ts} +8 -8
  19. package/dist/{consumer-BtrQO_N5.d.ts.map → consumer-sWg-n7bk.d.ts.map} +1 -1
  20. package/dist/consumer.d.ts +1 -1
  21. package/dist/consumer.js +1 -1
  22. package/dist/{core-types-CIez54KT.d.ts → core-types-DfCMwTYt.d.ts} +2 -2
  23. package/dist/{core-types-CIez54KT.d.ts.map → core-types-DfCMwTYt.d.ts.map} +1 -1
  24. package/dist/{coverage-catalog-DRTB89P0.d.ts → coverage-catalog-oQiZ8yot.d.ts} +2 -2
  25. package/dist/{coverage-catalog-DRTB89P0.d.ts.map → coverage-catalog-oQiZ8yot.d.ts.map} +1 -1
  26. package/dist/coverage-catalog.d.ts +1 -1
  27. package/dist/{hub-Cdujm_53.d.ts → hub-fmmnwC2s.d.ts} +3 -3
  28. package/dist/{hub-Cdujm_53.d.ts.map → hub-fmmnwC2s.d.ts.map} +1 -1
  29. package/dist/hub.d.ts +1 -1
  30. package/dist/{index-5hnHPubX.d.ts → index-B-VH5b3E.d.ts} +2 -2
  31. package/dist/{index-5hnHPubX.d.ts.map → index-B-VH5b3E.d.ts.map} +1 -1
  32. package/dist/{index-CtJOt-Va.d.ts → index-CW1fmxQi.d.ts} +3 -3
  33. package/dist/{index-CtJOt-Va.d.ts.map → index-CW1fmxQi.d.ts.map} +1 -1
  34. package/dist/{index-BIH6grDK.d.ts → index-DbwNiedC.d.ts} +2 -2
  35. package/dist/{index-BIH6grDK.d.ts.map → index-DbwNiedC.d.ts.map} +1 -1
  36. package/dist/{index-B0ijSDnT.d.ts → index-pK_3vBC7.d.ts} +18 -3
  37. package/dist/{index-B0ijSDnT.d.ts.map → index-pK_3vBC7.d.ts.map} +1 -1
  38. package/dist/{index-q7Sw2D9T.d.ts → index-xviDgOK9.d.ts} +3 -3
  39. package/dist/{index-q7Sw2D9T.d.ts.map → index-xviDgOK9.d.ts.map} +1 -1
  40. package/dist/index.d.ts +18 -18
  41. package/dist/index.js +6 -6
  42. package/dist/internal/bundled-manifest-runtime.d.ts +1 -1
  43. package/dist/internal/bundled-manifest-runtime.js +1 -1
  44. package/dist/mcp.d.ts +2 -2
  45. package/dist/mcp.js +1 -1
  46. package/dist/middleware/index.d.ts +1 -1
  47. package/dist/middleware/index.js +1 -1
  48. package/dist/{oauth-DNBrs_kX.d.ts → oauth-tzsnaJIb.d.ts} +2 -2
  49. package/dist/{oauth-DNBrs_kX.d.ts.map → oauth-tzsnaJIb.d.ts.map} +1 -1
  50. package/dist/{policy-BFvREV-D.d.ts → policy-C9frNJFH.d.ts} +2 -2
  51. package/dist/{policy-BFvREV-D.d.ts.map → policy-C9frNJFH.d.ts.map} +1 -1
  52. package/dist/{registry-BzTp-XSg.d.ts → registry-CE1iu5zX.d.ts} +3 -3
  53. package/dist/{registry-BzTp-XSg.d.ts.map → registry-CE1iu5zX.d.ts.map} +1 -1
  54. package/dist/{registry-core-DqYvz99E.d.ts → registry-core-DtFI-9kF.d.ts} +2 -2
  55. package/dist/{registry-core-DqYvz99E.d.ts.map → registry-core-DtFI-9kF.d.ts.map} +1 -1
  56. package/dist/registry.d.ts +2 -2
  57. package/dist/registry.js +1 -1
  58. package/dist/runtime.d.ts +1 -1
  59. package/dist/sandbox.d.ts +1 -1
  60. package/dist/{specs-DJnPNKEq.js → specs-By1F6mFV.js} +2 -2
  61. package/dist/{specs-DJnPNKEq.js.map → specs-By1F6mFV.js.map} +1 -1
  62. package/dist/specs.d.ts +1 -1
  63. package/dist/specs.js +1 -1
  64. package/dist/{src-DSLPcXSN.js → src-CfhhSno8.js} +4 -4
  65. package/dist/{src-DSLPcXSN.js.map → src-CfhhSno8.js.map} +1 -1
  66. package/dist/{tangle-id-WKgOA6u9.d.ts → tangle-id-Bq7jkKmE.d.ts} +2 -2
  67. package/dist/{tangle-id-WKgOA6u9.d.ts.map → tangle-id-Bq7jkKmE.d.ts.map} +1 -1
  68. package/dist/{tangle-id-DSH2t9nP.js → tangle-id-D2kPF0rX.js} +18 -2
  69. package/dist/tangle-id-D2kPF0rX.js.map +1 -0
  70. package/dist/{types-BdWDKvd0.d.ts → types-W418mSuf.d.ts} +15 -2
  71. package/dist/{types-BdWDKvd0.d.ts.map → types-W418mSuf.d.ts.map} +1 -1
  72. package/dist/worker.d.ts +2 -2
  73. package/package.json +1 -1
  74. package/dist/bundled-manifest-runtime-D1unUvQL.d.ts.map +0 -1
  75. package/dist/tangle-id-DSH2t9nP.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { t as IntegrationRuntimeError } from "./errors-CvO_y8JO.js";
2
- import { a as TangleIdentityUnreachableError, c as CredentialsExpired, d as ProviderRequestError, f as ResourceContention, i as TANGLE_SERVICE_TOKEN_PREFIX, l as ProviderConfigError, n as TANGLE_API_KEY_PREFIX, o as createTangleIdentityClient, s as tangleIdentity, t as DEFAULT_TANGLE_PLATFORM_URL, u as ProviderRateLimited } from "./tangle-id-DSH2t9nP.js";
2
+ import { a as TangleIdentityUnreachableError, c as CredentialsExpired, d as ProviderRateLimited, f as ProviderRequestError, i as TANGLE_SERVICE_TOKEN_PREFIX, l as InvalidCapabilityArgument, n as TANGLE_API_KEY_PREFIX, o as createTangleIdentityClient, p as ResourceContention, s as tangleIdentity, t as DEFAULT_TANGLE_PLATFORM_URL, u as ProviderConfigError } from "./tangle-id-D2kPF0rX.js";
3
3
  import { createOAuthBasicAuthorizationHeader, exchangeAuthorizationCode, oauthClientCredentialRedactionValues, redactOAuthSensitiveText, refreshAccessToken } from "./connectors/oauth.js";
4
4
  import { n as firstHeader, o as verifySlackSignature, s as verifyStripeSignature } from "./webhooks-FsjqRN_0.js";
5
5
  import { i as retryAfterMs$6, n as record$3, r as requestJson, t as ProviderProtocolError } from "./response-json-BnUINkTL.js";
@@ -1809,6 +1809,7 @@ function pickString(obj, keys) {
1809
1809
  //#region src/connectors/adapters/declarative-rest.ts
1810
1810
  function declarativeRestConnector(spec) {
1811
1811
  const capabilities = spec.capabilities.map(operationToCapability);
1812
+ const argumentRules = new Map(spec.capabilities.map((op) => [op.name, compileArgumentRules(spec.kind, op)]));
1812
1813
  return {
1813
1814
  manifest: {
1814
1815
  kind: spec.kind,
@@ -1821,6 +1822,7 @@ function declarativeRestConnector(spec) {
1821
1822
  },
1822
1823
  async executeRead(inv) {
1823
1824
  const op = readOperation(spec, inv.capabilityName, "read");
1825
+ checkArguments(spec.kind, op.name, argumentRules.get(op.name), inv.args);
1824
1826
  const response = await executeRestRequest(spec, op.request, inv, requiredArgsOf(op.parameters));
1825
1827
  if (response.outcome === "rate-limited") {
1826
1828
  const retryAfterMs = response.retryAfterMs ?? DEFAULT_RETRY_AFTER_MS;
@@ -1839,6 +1841,7 @@ function declarativeRestConnector(spec) {
1839
1841
  },
1840
1842
  async executeMutation(inv) {
1841
1843
  const op = readOperation(spec, inv.capabilityName, "mutation");
1844
+ checkArguments(spec.kind, op.name, argumentRules.get(op.name), inv.args);
1842
1845
  const response = await executeRestRequest(spec, op.request, inv, requiredArgsOf(op.parameters));
1843
1846
  return mutationResultFromTransport(spec.displayName, response);
1844
1847
  },
@@ -1904,6 +1907,55 @@ function readOperation(spec, name, expected) {
1904
1907
  if (!op || op.class !== expected) throw new Error(`${spec.kind}: unknown ${expected} capability ${name}`);
1905
1908
  return op;
1906
1909
  }
1910
+ function compileArgumentRules(kind, op) {
1911
+ const rules = [];
1912
+ const properties = objectField(op.parameters, "properties");
1913
+ for (const [field, schema] of Object.entries(properties)) {
1914
+ const property = schema;
1915
+ const items = objectField(property, "items");
1916
+ const pattern = typeof property.pattern === "string" ? property.pattern : void 0;
1917
+ const itemPattern = typeof items.pattern === "string" ? items.pattern : void 0;
1918
+ const source = pattern ?? itemPattern;
1919
+ if (source === void 0) continue;
1920
+ const description = typeof property.description === "string" ? ` ${property.description}` : "";
1921
+ rules.push({
1922
+ field,
1923
+ each: pattern === void 0,
1924
+ test: compilePattern(kind, op.name, field, source),
1925
+ refuse: false,
1926
+ message: `must match ${source}.${description}`
1927
+ });
1928
+ }
1929
+ for (const refusal of op.refuseArguments ?? []) rules.push({
1930
+ field: refusal.field,
1931
+ each: false,
1932
+ test: compilePattern(kind, op.name, refusal.field, refusal.pattern),
1933
+ refuse: true,
1934
+ message: refusal.message
1935
+ });
1936
+ return rules;
1937
+ }
1938
+ function compilePattern(kind, operation, field, source) {
1939
+ try {
1940
+ return new RegExp(source);
1941
+ } catch (error) {
1942
+ throw new Error(`${kind} ${operation}: argument "${field}" declares an invalid pattern: ${error.message}`);
1943
+ }
1944
+ }
1945
+ function checkArguments(kind, operation, rules, args) {
1946
+ for (const rule of rules) {
1947
+ const value = args[rule.field];
1948
+ (rule.each ? Array.isArray(value) ? value : [] : [value]).forEach((entry, index) => {
1949
+ if (typeof entry !== "string" || rule.test.test(entry) !== rule.refuse) return;
1950
+ const field = rule.each ? `${rule.field}[${index}]` : rule.field;
1951
+ throw new InvalidCapabilityArgument(`${kind} ${operation}: invalid argument "${field}" (${JSON.stringify(entry.slice(0, 80))}): ${rule.message}`, field);
1952
+ });
1953
+ }
1954
+ }
1955
+ function objectField(source, key) {
1956
+ const value = source[key];
1957
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : {};
1958
+ }
1907
1959
  function requiredArgsOf(parameters) {
1908
1960
  const required = parameters.required;
1909
1961
  return Array.isArray(required) ? required.filter((entry) => typeof entry === "string") : void 0;
@@ -12134,7 +12186,7 @@ async function request$2(source, url, body) {
12134
12186
  }),
12135
12187
  signal: AbortSignal.timeout(2e4)
12136
12188
  });
12137
- const responseBody = await readBody$2(response);
12189
+ const responseBody = await readBody$3(response);
12138
12190
  if (response.status === 401 || response.status === 403) throw new CredentialsExpired(`ModelsLab rejected credentials (${response.status})`, source.id);
12139
12191
  if (response.status === 429) throw new ProviderRateLimited("ModelsLab rate limit (429)", source.id, {
12140
12192
  status: 429,
@@ -12157,7 +12209,7 @@ function requiredString$7(args, key) {
12157
12209
  function pick$1(args, keys) {
12158
12210
  return Object.fromEntries(keys.filter((key) => args[key] !== void 0).map((key) => [key, args[key]]));
12159
12211
  }
12160
- async function readBody$2(response) {
12212
+ async function readBody$3(response) {
12161
12213
  const text = await response.text();
12162
12214
  if (!text) return null;
12163
12215
  try {
@@ -61472,6 +61524,12 @@ const helpscoutConnector = declarativeRestConnector({
61472
61524
  * POST /crm/v3/objects/contacts/search with an email-equality filter.
61473
61525
  * Cheap, idempotent, no CAS needed (read).
61474
61526
  *
61527
+ * list_new_contacts(createdAfter, limit?, after?)
61528
+ * → {contacts: [{id, email, name, company, ...}], after}
61529
+ * Read. The same search endpoint filtered on createdate and sorted
61530
+ * oldest first, so a poller can pick up every contact created since
61531
+ * its last cursor (inbound leads from forms, imports and integrations).
61532
+ *
61475
61533
  * upsert_contact(email, properties)
61476
61534
  * → {contactId, created}
61477
61535
  * Mutation. CAS strategy = native-idempotency, BUT: HubSpot's
@@ -61543,6 +61601,32 @@ function hubspot(opts) {
61543
61601
  required: ["email"]
61544
61602
  }
61545
61603
  },
61604
+ {
61605
+ name: "list_new_contacts",
61606
+ class: "read",
61607
+ description: "List contacts created at or after a time, oldest first: id, email, name, company, job title, lifecycle stage, original source and creation time. Page with the returned `after` cursor.",
61608
+ requiredScopes: [SCOPE_CONTACTS_READ],
61609
+ parameters: {
61610
+ type: "object",
61611
+ properties: {
61612
+ createdAfter: {
61613
+ type: "string",
61614
+ description: "ISO-8601 time; contacts created at or after it."
61615
+ },
61616
+ limit: {
61617
+ type: "integer",
61618
+ minimum: 1,
61619
+ maximum: 100,
61620
+ default: 50
61621
+ },
61622
+ after: {
61623
+ type: "string",
61624
+ description: "Paging cursor from a previous call."
61625
+ }
61626
+ },
61627
+ required: ["createdAfter"]
61628
+ }
61629
+ },
61546
61630
  {
61547
61631
  name: "upsert_contact",
61548
61632
  class: "mutation",
@@ -61692,6 +61776,7 @@ function hubspot(opts) {
61692
61776
  ]
61693
61777
  },
61694
61778
  async executeRead(inv) {
61779
+ if (inv.capabilityName === "list_new_contacts") return listNewContacts(inv, await ensureFreshAccessToken$7(inv.source.credentials, clientId, clientSecret));
61695
61780
  if (inv.capabilityName !== "find_contact") throw new Error(`hubspot: unknown read capability ${inv.capabilityName}`);
61696
61781
  const { email } = inv.args;
61697
61782
  const accessToken = await ensureFreshAccessToken$7(inv.source.credentials, clientId, clientSecret);
@@ -62031,6 +62116,68 @@ async function ensureFreshAccessToken$7(creds, clientId, clientSecret) {
62031
62116
  if (refreshed.refreshToken) creds.refreshToken = refreshed.refreshToken;
62032
62117
  return creds.accessToken;
62033
62118
  }
62119
+ const NEW_CONTACT_PROPERTIES = [
62120
+ "email",
62121
+ "firstname",
62122
+ "lastname",
62123
+ "company",
62124
+ "jobtitle",
62125
+ "lifecyclestage",
62126
+ "hs_analytics_source",
62127
+ "createdate"
62128
+ ];
62129
+ async function listNewContacts(inv, accessToken) {
62130
+ const { createdAfter, limit, after } = inv.args;
62131
+ const since = Date.parse(createdAfter);
62132
+ if (!Number.isFinite(since)) throw new Error("hubspot list_new_contacts: createdAfter must be an ISO-8601 time");
62133
+ const res = await fetch(`${API$9}/crm/v3/objects/contacts/search`, {
62134
+ method: "POST",
62135
+ headers: {
62136
+ authorization: `Bearer ${accessToken}`,
62137
+ "content-type": "application/json"
62138
+ },
62139
+ body: JSON.stringify({
62140
+ filterGroups: [{ filters: [{
62141
+ propertyName: "createdate",
62142
+ operator: "GTE",
62143
+ value: String(since)
62144
+ }] }],
62145
+ sorts: [{
62146
+ propertyName: "createdate",
62147
+ direction: "ASCENDING"
62148
+ }],
62149
+ properties: NEW_CONTACT_PROPERTIES,
62150
+ limit: Math.min(Math.max(limit ?? 50, 1), 100),
62151
+ ...after ? { after } : {}
62152
+ }),
62153
+ signal: AbortSignal.timeout(1e4)
62154
+ });
62155
+ if (res.status === 401) throw new CredentialsExpired(`HubSpot rejected token (401)`, inv.source.id);
62156
+ if (!res.ok) {
62157
+ const text = await res.text().catch(() => "");
62158
+ throw new Error(`hubspot list_new_contacts ${res.status}: ${text.slice(0, 200)}`);
62159
+ }
62160
+ const json = await res.json();
62161
+ return {
62162
+ data: {
62163
+ contacts: (json.results ?? []).map((row) => {
62164
+ const props = row.properties ?? {};
62165
+ return {
62166
+ id: row.id,
62167
+ email: props.email ?? null,
62168
+ name: [props.firstname, props.lastname].filter(Boolean).join(" ") || null,
62169
+ company: props.company ?? null,
62170
+ jobTitle: props.jobtitle ?? null,
62171
+ lifecycleStage: props.lifecyclestage ?? null,
62172
+ source: props.hs_analytics_source ?? null,
62173
+ createdAt: props.createdate ?? row.createdAt ?? null
62174
+ };
62175
+ }),
62176
+ after: json.paging?.next?.after ?? null
62177
+ },
62178
+ fetchedAt: Date.now()
62179
+ };
62180
+ }
62034
62181
  //#endregion
62035
62182
  //#region src/connectors/adapters/public-http-target.ts
62036
62183
  /** Reject literal local/private HTTP targets before a universal connector calls fetch. */
@@ -86804,7 +86951,9 @@ const squareConnector = declarativeRestConnector({
86804
86951
  * `stripe-checkout`, `stripe-invoices`, `stripe-subscriptions` n-tuples.
86805
86952
  *
86806
86953
  * find_customer(email) → read; CAS n/a
86954
+ * retrieve_customer(customerId) → read; CAS n/a
86807
86955
  * list_subscriptions(customerId, status?) → read; CAS n/a
86956
+ * list_signup_events(createdGte?, types?) → read; CAS n/a
86808
86957
  * create_invoice(customerId, items) → mutation; cas: 'native-idempotency'
86809
86958
  * create_checkout_session(...) → mutation; cas: 'native-idempotency'
86810
86959
  * cancel_subscription(subscriptionId, atPeriodEnd?) → mutation; cas: 'native-idempotency'
@@ -86828,6 +86977,12 @@ const squareConnector = declarativeRestConnector({
86828
86977
  * own dedup is the second line of defense.
86829
86978
  */
86830
86979
  const API$4 = "https://api.stripe.com/v1";
86980
+ /** Stripe events that mean a new customer: an account, a purchase, or a subscription or trial. */
86981
+ const SIGNUP_EVENT_TYPES = [
86982
+ "customer.created",
86983
+ "checkout.session.completed",
86984
+ "customer.subscription.created"
86985
+ ];
86831
86986
  const stripePackConnector = {
86832
86987
  manifest: {
86833
86988
  kind: "stripe-pack",
@@ -86835,7 +86990,7 @@ const stripePackConnector = {
86835
86990
  description: "Look up Stripe customers, draft invoices, spin up hosted Checkout sessions, manage subscriptions, and hand off to the customer billing portal — all from one Stripe restricted key. Idempotency-Key forwarded on every mutation.",
86836
86991
  auth: {
86837
86992
  kind: "api-key",
86838
- hint: "Paste a Stripe restricted key (rk_live_…) with read on customers + subscriptions and write on invoices + checkout + subscriptions + billing portal."
86993
+ hint: "Paste a Stripe restricted key (rk_live_…) with read on customers + subscriptions + events and write on invoices + checkout + subscriptions + billing portal."
86839
86994
  },
86840
86995
  category: "commerce",
86841
86996
  defaultConsistencyModel: "authoritative",
@@ -86850,6 +87005,52 @@ const stripePackConnector = {
86850
87005
  required: ["email"]
86851
87006
  }
86852
87007
  },
87008
+ {
87009
+ name: "retrieve_customer",
87010
+ class: "read",
87011
+ description: "Read one Stripe customer by id (cus_...): email, name and creation time.",
87012
+ parameters: {
87013
+ type: "object",
87014
+ properties: { customerId: {
87015
+ type: "string",
87016
+ pattern: "^cus_[A-Za-z0-9]+$"
87017
+ } },
87018
+ required: ["customerId"]
87019
+ }
87020
+ },
87021
+ {
87022
+ name: "list_signup_events",
87023
+ class: "read",
87024
+ description: "List the account's new-customer events since a time: customer.created, checkout.session.completed and customer.subscription.created (trials included), oldest first within the page. Each event carries only the customer id, email, name, checkout amount and subscription status.",
87025
+ parameters: {
87026
+ type: "object",
87027
+ properties: {
87028
+ createdGte: {
87029
+ type: "integer",
87030
+ minimum: 0,
87031
+ description: "Unix seconds; events created at or after this time."
87032
+ },
87033
+ types: {
87034
+ type: "array",
87035
+ items: {
87036
+ type: "string",
87037
+ enum: SIGNUP_EVENT_TYPES
87038
+ },
87039
+ description: "Default: all three types."
87040
+ },
87041
+ limit: {
87042
+ type: "integer",
87043
+ minimum: 1,
87044
+ maximum: 100,
87045
+ default: 50
87046
+ },
87047
+ startingAfter: {
87048
+ type: "string",
87049
+ description: "Event id cursor from a previous page."
87050
+ }
87051
+ }
87052
+ }
87053
+ },
86853
87054
  {
86854
87055
  name: "list_subscriptions",
86855
87056
  class: "read",
@@ -87093,6 +87294,8 @@ const stripePackConnector = {
87093
87294
  async executeRead(inv) {
87094
87295
  const apiKey = readApiKey(inv.source.credentials);
87095
87296
  if (inv.capabilityName === "list_subscriptions") return listSubscriptions(inv, apiKey);
87297
+ if (inv.capabilityName === "retrieve_customer") return retrieveCustomer(inv, apiKey);
87298
+ if (inv.capabilityName === "list_signup_events") return listSignupEvents(inv, apiKey);
87096
87299
  if (inv.capabilityName !== "find_customer") throw new Error(`stripe-pack: unknown read capability ${inv.capabilityName}`);
87097
87300
  const { email } = inv.args;
87098
87301
  const url = `${API$4}/customers/search?query=${encodeURIComponent(`email:'${email.toLowerCase()}'`)}&limit=1`;
@@ -87257,6 +87460,78 @@ async function createCheckoutSession(inv, apiKey) {
87257
87460
  idempotentReplay: false
87258
87461
  };
87259
87462
  }
87463
+ async function stripeGet(inv, apiKey, path, label) {
87464
+ const res = await fetch(`${API$4}${path}`, {
87465
+ headers: { authorization: `Bearer ${apiKey}` },
87466
+ signal: AbortSignal.timeout(1e4)
87467
+ });
87468
+ if (res.status === 401) throw new CredentialsExpired("Stripe rejected API key (401)", inv.source.id);
87469
+ if (!res.ok) {
87470
+ const text = await res.text().catch(() => "");
87471
+ throw new Error(`stripe-pack ${label} ${res.status}: ${text.slice(0, 200)}`);
87472
+ }
87473
+ return res.json();
87474
+ }
87475
+ async function retrieveCustomer(inv, apiKey) {
87476
+ const { customerId } = inv.args;
87477
+ if (!/^cus_[A-Za-z0-9]+$/.test(customerId ?? "")) throw new Error("stripe-pack retrieve_customer: customerId must be a cus_ id");
87478
+ const customer = await stripeGet(inv, apiKey, `/customers/${encodeURIComponent(customerId)}`, "retrieve_customer");
87479
+ return {
87480
+ data: customer.deleted ? { found: false } : {
87481
+ found: true,
87482
+ customer: {
87483
+ id: customer.id,
87484
+ email: customer.email ?? null,
87485
+ name: customer.name ?? null,
87486
+ created: customer.created ?? null
87487
+ }
87488
+ },
87489
+ fetchedAt: Date.now()
87490
+ };
87491
+ }
87492
+ async function listSignupEvents(inv, apiKey) {
87493
+ const args = inv.args;
87494
+ const types = args.types && args.types.length > 0 ? args.types : SIGNUP_EVENT_TYPES;
87495
+ const unknown = types.filter((type) => !SIGNUP_EVENT_TYPES.includes(type));
87496
+ if (unknown.length > 0) throw new Error(`stripe-pack list_signup_events: unsupported event types ${unknown.join(", ")}`);
87497
+ const params = new URLSearchParams({ limit: String(Math.min(Math.max(args.limit ?? 50, 1), 100)) });
87498
+ for (const type of types) params.append("types[]", type);
87499
+ if (typeof args.createdGte === "number") params.set("created[gte]", String(Math.floor(args.createdGte)));
87500
+ if (args.startingAfter) params.set("starting_after", args.startingAfter);
87501
+ const json = await stripeGet(inv, apiKey, `/events?${params.toString()}`, "list_signup_events");
87502
+ return {
87503
+ data: {
87504
+ events: (json.data ?? []).map((event) => {
87505
+ const object = event.data?.object ?? {};
87506
+ const isCustomer = object.object === "customer";
87507
+ return {
87508
+ id: event.id,
87509
+ type: event.type,
87510
+ created: event.created,
87511
+ livemode: event.livemode ?? null,
87512
+ customer: {
87513
+ id: isCustomer ? object.id ?? null : typeof object.customer === "string" ? object.customer : null,
87514
+ email: (isCustomer ? object.email : object.customer_details?.email ?? object.customer_email) ?? null,
87515
+ name: (isCustomer ? object.name : object.customer_details?.name) ?? null
87516
+ },
87517
+ ...object.object === "checkout.session" ? { checkout: {
87518
+ id: object.id ?? null,
87519
+ amountTotal: object.amount_total ?? null,
87520
+ currency: object.currency ?? null,
87521
+ mode: object.mode ?? null
87522
+ } } : {},
87523
+ ...object.object === "subscription" ? { subscription: {
87524
+ id: object.id ?? null,
87525
+ status: object.status ?? null,
87526
+ trialEnd: object.trial_end ?? null
87527
+ } } : {}
87528
+ };
87529
+ }).reverse(),
87530
+ hasMore: json.has_more ?? false
87531
+ },
87532
+ fetchedAt: Date.now()
87533
+ };
87534
+ }
87260
87535
  async function listSubscriptions(inv, apiKey) {
87261
87536
  const { customerId, status, limit } = inv.args;
87262
87537
  const params = new URLSearchParams({
@@ -96247,7 +96522,7 @@ async function request$1(source, path, options) {
96247
96522
  body: "body" in options ? options.body : void 0,
96248
96523
  signal: AbortSignal.timeout(15e3)
96249
96524
  });
96250
- const responseBody = await readBody$1(response);
96525
+ const responseBody = await readBody$2(response);
96251
96526
  if (response.status === 401) throw new CredentialsExpired("Zoho Bookings rejected OAuth credentials (401)", source.id, {
96252
96527
  status: 401,
96253
96528
  body: responseBody
@@ -96260,7 +96535,7 @@ async function request$1(source, path, options) {
96260
96535
  if (!response.ok) throw new Error(`zoho-bookings ${options.method} ${path} HTTP ${response.status}`);
96261
96536
  return responseBody;
96262
96537
  }
96263
- async function readBody$1(response) {
96538
+ async function readBody$2(response) {
96264
96539
  const text = await response.text();
96265
96540
  if (!text) return null;
96266
96541
  try {
@@ -96915,7 +97190,7 @@ const pricelabsConnector = {
96915
97190
  };
96916
97191
  //#endregion
96917
97192
  //#region src/connectors/adapters/zoho-desk.ts
96918
- const orgId = {
97193
+ const orgId$1 = {
96919
97194
  type: "string",
96920
97195
  description: "Zoho Desk organization id. Discover it with organizations.list."
96921
97196
  };
@@ -96992,7 +97267,7 @@ const zohoDeskConnector = declarativeRestConnector({
96992
97267
  parameters: {
96993
97268
  type: "object",
96994
97269
  properties: {
96995
- orgId,
97270
+ orgId: orgId$1,
96996
97271
  include: {
96997
97272
  type: "string",
96998
97273
  description: "Comma-separated related objects to include."
@@ -97032,7 +97307,7 @@ const zohoDeskConnector = declarativeRestConnector({
97032
97307
  parameters: {
97033
97308
  type: "object",
97034
97309
  properties: {
97035
- orgId,
97310
+ orgId: orgId$1,
97036
97311
  ticketId: { type: "string" }
97037
97312
  },
97038
97313
  required: ["orgId", "ticketId"]
@@ -97051,7 +97326,7 @@ const zohoDeskConnector = declarativeRestConnector({
97051
97326
  parameters: {
97052
97327
  type: "object",
97053
97328
  properties: {
97054
- orgId,
97329
+ orgId: orgId$1,
97055
97330
  data: data$2
97056
97331
  },
97057
97332
  required: ["orgId", "data"]
@@ -97073,7 +97348,7 @@ const zohoDeskConnector = declarativeRestConnector({
97073
97348
  parameters: {
97074
97349
  type: "object",
97075
97350
  properties: {
97076
- orgId,
97351
+ orgId: orgId$1,
97077
97352
  ticketId: { type: "string" },
97078
97353
  data: data$2
97079
97354
  },
@@ -97100,7 +97375,7 @@ const zohoDeskConnector = declarativeRestConnector({
97100
97375
  parameters: {
97101
97376
  type: "object",
97102
97377
  properties: {
97103
- orgId,
97378
+ orgId: orgId$1,
97104
97379
  ticketId: { type: "string" }
97105
97380
  },
97106
97381
  required: ["orgId", "ticketId"]
@@ -97122,7 +97397,7 @@ const zohoDeskConnector = declarativeRestConnector({
97122
97397
  parameters: {
97123
97398
  type: "object",
97124
97399
  properties: {
97125
- orgId,
97400
+ orgId: orgId$1,
97126
97401
  ticketId: { type: "string" },
97127
97402
  assigneeId: { type: "string" }
97128
97403
  },
@@ -97149,7 +97424,7 @@ const zohoDeskConnector = declarativeRestConnector({
97149
97424
  parameters: {
97150
97425
  type: "object",
97151
97426
  properties: {
97152
- orgId,
97427
+ orgId: orgId$1,
97153
97428
  ticketId: { type: "string" },
97154
97429
  content: { type: "string" },
97155
97430
  isPublic: { type: "boolean" },
@@ -97186,7 +97461,7 @@ const zohoDeskConnector = declarativeRestConnector({
97186
97461
  parameters: {
97187
97462
  type: "object",
97188
97463
  properties: {
97189
- orgId,
97464
+ orgId: orgId$1,
97190
97465
  ticketId: {
97191
97466
  type: "string",
97192
97467
  description: "Primary ticket id."
@@ -97220,7 +97495,7 @@ const zohoDeskConnector = declarativeRestConnector({
97220
97495
  parameters: {
97221
97496
  type: "object",
97222
97497
  properties: {
97223
- orgId,
97498
+ orgId: orgId$1,
97224
97499
  email: { type: "string" }
97225
97500
  },
97226
97501
  required: ["orgId", "email"]
@@ -98317,7 +98592,7 @@ async function request(source, path, options) {
98317
98592
  body: "body" in options ? options.body : void 0,
98318
98593
  signal: AbortSignal.timeout(15e3)
98319
98594
  });
98320
- const responseBody = await readBody(response);
98595
+ const responseBody = await readBody$1(response);
98321
98596
  if (response.status === 401) throw new CredentialsExpired("Zoho Campaigns rejected OAuth credentials (401)", source.id, {
98322
98597
  status: 401,
98323
98598
  body: responseBody
@@ -98333,7 +98608,7 @@ async function request(source, path, options) {
98333
98608
  if (!response.ok) throw new Error(`zoho-campaigns ${options.method} ${path} HTTP ${response.status}`);
98334
98609
  return responseBody;
98335
98610
  }
98336
- async function readBody(response) {
98611
+ async function readBody$1(response) {
98337
98612
  const text = await response.text();
98338
98613
  if (!text) return null;
98339
98614
  try {
@@ -109908,6 +110183,7 @@ const slackEventsConnector = {
109908
110183
  };
109909
110184
  //#endregion
109910
110185
  //#region src/connectors/adapters/github.ts
110186
+ const GIT_SHA = "(?:[0-9a-fA-F]{40}|[0-9a-fA-F]{64})";
109911
110187
  const repoParams = {
109912
110188
  type: "object",
109913
110189
  properties: {
@@ -109943,6 +110219,49 @@ const githubConnector = declarativeRestConnector({
109943
110219
  path: "/repos/{owner}/{repo}"
109944
110220
  }
109945
110221
  },
110222
+ {
110223
+ name: "repos.listForAuthenticatedUser",
110224
+ class: "read",
110225
+ description: "List repositories the connected account can read, including private and organization repositories the token is granted. Use it to suggest a repository before reading its files.",
110226
+ parameters: {
110227
+ type: "object",
110228
+ properties: {
110229
+ sort: {
110230
+ type: "string",
110231
+ enum: [
110232
+ "created",
110233
+ "updated",
110234
+ "pushed",
110235
+ "full_name"
110236
+ ]
110237
+ },
110238
+ affiliation: {
110239
+ type: "string",
110240
+ description: "Comma-separated owner, collaborator, organization_member."
110241
+ },
110242
+ per_page: {
110243
+ type: "integer",
110244
+ minimum: 1,
110245
+ maximum: 100
110246
+ },
110247
+ page: {
110248
+ type: "integer",
110249
+ minimum: 1
110250
+ }
110251
+ },
110252
+ required: []
110253
+ },
110254
+ request: {
110255
+ method: "GET",
110256
+ path: "/user/repos",
110257
+ query: {
110258
+ sort: "{sort}",
110259
+ affiliation: "{affiliation}",
110260
+ per_page: "{per_page}",
110261
+ page: "{page}"
110262
+ }
110263
+ }
110264
+ },
109946
110265
  {
109947
110266
  name: "issues.search",
109948
110267
  class: "read",
@@ -110526,7 +110845,7 @@ const githubConnector = declarativeRestConnector({
110526
110845
  {
110527
110846
  name: "repos.getBranch",
110528
110847
  class: "read",
110529
- description: "Read one branch: its head commit sha and that commit's tree sha. Use it to find the base a proposed change builds on.",
110848
+ description: "Read one branch BY NAME: `commit.sha` is its head commit and `commit.commit.tree.sha` that commit's tree. Step 1 of a draft pull request: read the base branch (e.g. `main`), then git.createTree on that tree, git.createCommit with that head as parent, git.createRef `refs/heads/<new-branch>`, and pulls.create with `draft: true`. A commit sha is not a branch name: read a commit with git.getCommit.",
110530
110849
  parameters: {
110531
110850
  type: "object",
110532
110851
  properties: {
@@ -110534,7 +110853,7 @@ const githubConnector = declarativeRestConnector({
110534
110853
  repo: { type: "string" },
110535
110854
  branch: {
110536
110855
  type: "string",
110537
- description: "Branch name, e.g. `main`."
110856
+ description: "Branch name such as `main` or `gtm-agent/hero-copy`; never a commit sha or a `refs/` path."
110538
110857
  }
110539
110858
  },
110540
110859
  required: [
@@ -110546,6 +110865,41 @@ const githubConnector = declarativeRestConnector({
110546
110865
  request: {
110547
110866
  method: "GET",
110548
110867
  path: "/repos/{owner}/{repo}/branches/{branch}"
110868
+ },
110869
+ refuseArguments: [{
110870
+ field: "branch",
110871
+ pattern: `^${GIT_SHA}$`,
110872
+ message: "that is a commit sha, not a branch name. Pass a branch name such as `main`; read a commit by sha with git.getCommit."
110873
+ }, {
110874
+ field: "branch",
110875
+ pattern: "^refs/",
110876
+ message: "pass the bare branch name (`main`), not a ref path (`refs/heads/main`)."
110877
+ }]
110878
+ },
110879
+ {
110880
+ name: "git.getCommit",
110881
+ class: "read",
110882
+ description: "Read one commit object by sha: its `tree.sha`, `parents[].sha`, message and author. Use it to verify the commit git.createCommit returned before git.createRef points a new branch at it.",
110883
+ parameters: {
110884
+ type: "object",
110885
+ properties: {
110886
+ owner: { type: "string" },
110887
+ repo: { type: "string" },
110888
+ commit_sha: {
110889
+ type: "string",
110890
+ pattern: `^${GIT_SHA}$`,
110891
+ description: "Full commit sha."
110892
+ }
110893
+ },
110894
+ required: [
110895
+ "owner",
110896
+ "repo",
110897
+ "commit_sha"
110898
+ ]
110899
+ },
110900
+ request: {
110901
+ method: "GET",
110902
+ path: "/repos/{owner}/{repo}/git/commits/{commit_sha}"
110549
110903
  }
110550
110904
  },
110551
110905
  {
@@ -110604,7 +110958,7 @@ const githubConnector = declarativeRestConnector({
110604
110958
  {
110605
110959
  name: "git.createTree",
110606
110960
  class: "mutation",
110607
- description: "Write a tree: `base_tree` plus the changed entries. Each entry is `{ path, mode: \"100644\", type: \"blob\", content }` (use `sha: null` to delete a file). Creates an unreferenced object; nothing is visible until a branch points at a commit using it.",
110961
+ description: "Step 2 of a draft pull request. Write a tree: `base_tree` plus the changed entries. Each entry is `{ path, mode: \"100644\", type: \"blob\", content }` (use `sha: null` to delete a file). Creates an unreferenced object; nothing is visible until a branch points at a commit using it.",
110608
110962
  parameters: {
110609
110963
  type: "object",
110610
110964
  properties: {
@@ -110612,7 +110966,8 @@ const githubConnector = declarativeRestConnector({
110612
110966
  repo: { type: "string" },
110613
110967
  base_tree: {
110614
110968
  type: "string",
110615
- description: "Tree sha of the base commit."
110969
+ pattern: `^${GIT_SHA}$`,
110970
+ description: "Tree sha of the base commit: `commit.commit.tree.sha` from repos.getBranch."
110616
110971
  },
110617
110972
  tree: {
110618
110973
  type: "array",
@@ -110669,7 +111024,7 @@ const githubConnector = declarativeRestConnector({
110669
111024
  {
110670
111025
  name: "git.createCommit",
110671
111026
  class: "mutation",
110672
- description: "Write a commit object for a tree with explicit parents (normally the base branch head). Creates an unreferenced object; it moves no branch.",
111027
+ description: "Step 3 of a draft pull request. Write a commit object for a tree with explicit parents (normally the base branch head). Creates an unreferenced object; it moves no branch. Its `sha` is what git.createRef needs.",
110673
111028
  parameters: {
110674
111029
  type: "object",
110675
111030
  properties: {
@@ -110678,12 +111033,16 @@ const githubConnector = declarativeRestConnector({
110678
111033
  message: { type: "string" },
110679
111034
  tree: {
110680
111035
  type: "string",
111036
+ pattern: `^${GIT_SHA}$`,
110681
111037
  description: "Tree sha from git.createTree."
110682
111038
  },
110683
111039
  parents: {
110684
111040
  type: "array",
110685
- items: { type: "string" },
110686
- description: "Parent commit shas."
111041
+ items: {
111042
+ type: "string",
111043
+ pattern: `^${GIT_SHA}$`
111044
+ },
111045
+ description: "Parent commit shas: the base branch head from repos.getBranch."
110687
111046
  }
110688
111047
  },
110689
111048
  required: [
@@ -110708,7 +111067,7 @@ const githubConnector = declarativeRestConnector({
110708
111067
  {
110709
111068
  name: "git.createRef",
110710
111069
  class: "mutation",
110711
- description: "Create a NEW branch at a commit: `ref` must be `refs/heads/<new-branch>`. Never moves an existing branch; GitHub returns 422 when the ref already exists.",
111070
+ description: "Step 4 of a draft pull request. Create a NEW branch at a commit: `ref` must be `refs/heads/<new-branch>` and `sha` the commit from git.createCommit. Never moves an existing branch; GitHub returns 422 when the ref already exists. Then pulls.create with `head: \"<new-branch>\"` (no `refs/heads/`) and `draft: true`.",
110712
111071
  parameters: {
110713
111072
  type: "object",
110714
111073
  properties: {
@@ -110721,6 +111080,7 @@ const githubConnector = declarativeRestConnector({
110721
111080
  },
110722
111081
  sha: {
110723
111082
  type: "string",
111083
+ pattern: `^${GIT_SHA}$`,
110724
111084
  description: "Commit sha from git.createCommit."
110725
111085
  }
110726
111086
  },
@@ -110804,7 +111164,7 @@ const githubConnector = declarativeRestConnector({
110804
111164
  {
110805
111165
  name: "pulls.create",
110806
111166
  class: "mutation",
110807
- description: "Open a pull request from `head` into `base` on the target repository.",
111167
+ description: "Open a pull request from `head` into `base` on the target repository. Step 5 of a draft pull request: `head` is the branch git.createRef created and `draft: true`.",
110808
111168
  parameters: {
110809
111169
  type: "object",
110810
111170
  properties: {
@@ -110813,7 +111173,7 @@ const githubConnector = declarativeRestConnector({
110813
111173
  title: { type: "string" },
110814
111174
  head: {
110815
111175
  type: "string",
110816
- description: "Branch (or cross-fork ref like `octocat:feature-x`) containing the changes."
111176
+ description: "Branch name (or cross-fork `octocat:feature-x`) containing the changes, without `refs/heads/`."
110817
111177
  },
110818
111178
  base: {
110819
111179
  type: "string",
@@ -174636,6 +174996,534 @@ const serpstatConnector = declarativeRestConnector({
174636
174996
  }]
174637
174997
  });
174638
174998
  //#endregion
174999
+ //#region src/connectors/adapters/treg.ts
175000
+ /**
175001
+ * treg (treg.to) — one prepaid team token for per-call SEO, backlink, keyword,
175002
+ * enrichment, social and scraping endpoints. treg holds the provider keys and
175003
+ * bills the team's prepaid balance at the provider's listed price, so the
175004
+ * connection owner funds every metered call.
175005
+ *
175006
+ * Spend control is enforced by treg itself, not by this stateless adapter:
175007
+ * - every metered read carries `X-Treg-Route-Max-Cost` (default $0.25, at
175008
+ * most $1), which treg refuses with 402 before spending;
175009
+ * - every metered read is tagged `hub_daily_cap=<connection>` and treg holds
175010
+ * a per-day budget on that tag. When the day's budget is spent treg answers
175011
+ * 429 `tag_spend_cap_reached`; the agent then needs `call.overCap`, a
175012
+ * mutation the Hub gates behind owner approval or a standing grant.
175013
+ * - the first metered read installs a $1/day budget when the connection has
175014
+ * none. `cap.set` changes it, also through owner approval.
175015
+ *
175016
+ * Catalog endpoints that act on the world (`kind` other than data, routed or
175017
+ * utility: posting, ads changes, media generation) are refused on the read
175018
+ * path and run only through `call.write`.
175019
+ */
175020
+ const TREG_BASE_URL = "https://treg.to";
175021
+ const REQUEST_TIMEOUT_MS = 12e4;
175022
+ const CONTROL_TIMEOUT_MS = 15e3;
175023
+ const TREG_CAP_DIMENSION = "hub_daily_cap";
175024
+ const TREG_OVER_CAP_DIMENSION = "hub_over_cap";
175025
+ const TREG_WRITE_DIMENSION = "hub_write";
175026
+ const TREG_DEFAULT_MAX_COST_USD = .25;
175027
+ const TREG_MAX_DAILY_CAP_USD = 100;
175028
+ const READ_KINDS = /* @__PURE__ */ new Set([
175029
+ "data",
175030
+ "routed",
175031
+ "utility"
175032
+ ]);
175033
+ const CAP_CHECK_TTL_MS = 6e5;
175034
+ const CATALOG_TTL_MS = 36e5;
175035
+ const MAX_BUDGET_DIMENSIONS = 3;
175036
+ const callParameters = {
175037
+ type: "object",
175038
+ properties: {
175039
+ endpointId: {
175040
+ type: "string",
175041
+ description: "Catalog endpoint id from catalog.search, e.g. \"dataforseo.google.keywords.volume\"."
175042
+ },
175043
+ method: {
175044
+ type: "string",
175045
+ enum: ["GET", "POST"],
175046
+ description: "HTTP method from catalog.get; defaults to the endpoint's method."
175047
+ },
175048
+ query: {
175049
+ type: "object",
175050
+ additionalProperties: { type: [
175051
+ "string",
175052
+ "number",
175053
+ "boolean"
175054
+ ] },
175055
+ description: "Query parameters the endpoint declares (catalog.get input.queryParams)."
175056
+ },
175057
+ body: {
175058
+ type: ["object", "array"],
175059
+ description: "JSON body the endpoint declares (catalog.get input.body)."
175060
+ },
175061
+ maxCostUsd: {
175062
+ type: "number",
175063
+ exclusiveMinimum: 0,
175064
+ maximum: 1,
175065
+ description: `Refuse before spending when treg's reserve for this call exceeds this many dollars. Default ${TREG_DEFAULT_MAX_COST_USD}, at most 1.`
175066
+ }
175067
+ },
175068
+ required: ["endpointId"]
175069
+ };
175070
+ const capabilities = [
175071
+ {
175072
+ name: "catalog.search",
175073
+ class: "read",
175074
+ description: "Find treg catalog endpoints by the job to do (\"keyword search volume\", \"backlinks for a domain\", \"company enrichment by domain\"). Returns ids, providers, listed price, observed success rate and median latency. Free.",
175075
+ parameters: {
175076
+ type: "object",
175077
+ properties: {
175078
+ query: {
175079
+ type: "string",
175080
+ minLength: 2,
175081
+ maxLength: 200,
175082
+ description: "What the call should do, in plain words."
175083
+ },
175084
+ limit: {
175085
+ type: "integer",
175086
+ minimum: 1,
175087
+ maximum: 25,
175088
+ description: "Results to return (default 10)."
175089
+ }
175090
+ },
175091
+ required: ["query"]
175092
+ }
175093
+ },
175094
+ {
175095
+ name: "catalog.get",
175096
+ class: "read",
175097
+ description: "Read one catalog endpoint in full before calling it: method, query and body parameters, price unit, example call and sibling providers. Free.",
175098
+ parameters: {
175099
+ type: "object",
175100
+ properties: { endpointId: {
175101
+ type: "string",
175102
+ description: "Catalog endpoint id."
175103
+ } },
175104
+ required: ["endpointId"]
175105
+ }
175106
+ },
175107
+ {
175108
+ name: "spend.status",
175109
+ class: "read",
175110
+ description: "Today's spend for this connection against its daily cap (UTC day), and the team's remaining prepaid balance. Free.",
175111
+ parameters: {
175112
+ type: "object",
175113
+ properties: {}
175114
+ }
175115
+ },
175116
+ {
175117
+ name: "call",
175118
+ class: "read",
175119
+ description: "Call one read-only catalog endpoint (keyword volume, backlinks, enrichment, SERP, scraping) on the connection owner's prepaid treg balance. Counts toward the connection's daily cap; when the cap is spent the call fails with daily_cap_reached and only call.overCap, which needs owner approval, can continue. Returns the provider's response with the charge, call id and a citation line.",
175120
+ parameters: callParameters,
175121
+ consistencyModel: "advisory"
175122
+ },
175123
+ {
175124
+ name: "call.overCap",
175125
+ class: "mutation",
175126
+ description: "Make one read-only catalog call after today's daily cap is spent. Runs only after the owner approves it or grants a standing permission. Same inputs and output as call.",
175127
+ parameters: callParameters,
175128
+ cas: "native-idempotency",
175129
+ externalEffect: true,
175130
+ consistencyModel: "advisory"
175131
+ },
175132
+ {
175133
+ name: "call.write",
175134
+ class: "mutation",
175135
+ description: "Call a catalog endpoint that acts on the world: posts, ad changes, media generation or another action endpoint. Every call needs owner approval unless the owner granted one. Same inputs and output as call.",
175136
+ parameters: callParameters,
175137
+ cas: "native-idempotency",
175138
+ externalEffect: true,
175139
+ consistencyModel: "advisory"
175140
+ },
175141
+ {
175142
+ name: "cap.set",
175143
+ class: "mutation",
175144
+ description: `Set this connection's daily spend cap in US dollars (UTC day, 1 by default). Needs owner approval and an owner or admin treg key.`,
175145
+ parameters: {
175146
+ type: "object",
175147
+ properties: { dailyCapUsd: {
175148
+ type: "number",
175149
+ exclusiveMinimum: 0,
175150
+ maximum: TREG_MAX_DAILY_CAP_USD,
175151
+ description: "Dollars per UTC day."
175152
+ } },
175153
+ required: ["dailyCapUsd"]
175154
+ },
175155
+ cas: "native-idempotency",
175156
+ externalEffect: false
175157
+ }
175158
+ ];
175159
+ const catalogCache = /* @__PURE__ */ new Map();
175160
+ const capCheckCache = /* @__PURE__ */ new Map();
175161
+ const orgCache = /* @__PURE__ */ new Map();
175162
+ function token(source) {
175163
+ if (source.credentials.kind === "api-key" && source.credentials.apiKey.trim()) return source.credentials.apiKey.trim();
175164
+ throw new CredentialsExpired("treg needs a team API key", source.id);
175165
+ }
175166
+ function tagValue(source) {
175167
+ const value = source.id.replace(/[^A-Za-z0-9_-]/g, "_").slice(0, 64);
175168
+ if (!value) throw new ProviderConfigError("treg connection id cannot be used as a spend tag", source.id, { status: 400 });
175169
+ return value;
175170
+ }
175171
+ async function treg(source, path, init = {}) {
175172
+ const headers = {
175173
+ accept: "application/json",
175174
+ "X-Treg-Token": token(source),
175175
+ ...init.headers
175176
+ };
175177
+ if (init.body !== void 0) headers["content-type"] = "application/json";
175178
+ return fetch(`${TREG_BASE_URL}${path}`, {
175179
+ method: init.method ?? "GET",
175180
+ headers,
175181
+ body: init.body === void 0 ? void 0 : JSON.stringify(init.body),
175182
+ redirect: "manual",
175183
+ signal: AbortSignal.timeout(init.timeoutMs ?? CONTROL_TIMEOUT_MS)
175184
+ });
175185
+ }
175186
+ async function readBody(response) {
175187
+ const text = await response.text().catch(() => "");
175188
+ if (!text) return null;
175189
+ try {
175190
+ return JSON.parse(text);
175191
+ } catch {
175192
+ return text;
175193
+ }
175194
+ }
175195
+ function detail(body) {
175196
+ if (body && typeof body === "object" && "detail" in body) {
175197
+ const value = body.detail;
175198
+ if (value && typeof value === "object") return value;
175199
+ return { message: String(value) };
175200
+ }
175201
+ return {};
175202
+ }
175203
+ async function controlJson(source, path, init = {}) {
175204
+ const response = await treg(source, path, init);
175205
+ const body = await readBody(response);
175206
+ if (response.status === 401) throw new CredentialsExpired("treg rejected the team API key", source.id, {
175207
+ status: 401,
175208
+ body
175209
+ });
175210
+ if (response.status === 403) throw new ProviderConfigError(`treg refused ${init.method ?? "GET"} ${path.split("?")[0]}: ${String(detail(body).message ?? "needs an owner or admin key")}`, source.id, {
175211
+ status: 403,
175212
+ reason: "treg_role",
175213
+ body
175214
+ });
175215
+ if (!response.ok) throw new ProviderRequestError(`treg ${init.method ?? "GET"} ${path.split("?")[0]} answered HTTP ${response.status}`, source.id, {
175216
+ status: response.status,
175217
+ body
175218
+ });
175219
+ return body;
175220
+ }
175221
+ async function orgId(source) {
175222
+ const cached = orgCache.get(source.id);
175223
+ if (cached !== void 0) return cached;
175224
+ const orgs = await controlJson(source, "/orgs");
175225
+ const active = Array.isArray(orgs) ? orgs.find((org) => org.active) ?? (orgs.length === 1 ? orgs[0] : void 0) : void 0;
175226
+ if (typeof active?.org_id !== "number") throw new ProviderConfigError("treg key does not name exactly one team; create a team API key in treg", source.id, {
175227
+ status: 400,
175228
+ reason: "treg_team"
175229
+ });
175230
+ orgCache.set(source.id, active.org_id);
175231
+ return active.org_id;
175232
+ }
175233
+ async function ensureBudgetDimension(source, org) {
175234
+ const settings = await controlJson(source, `/orgs/${org}/settings`);
175235
+ const dims = Array.isArray(settings.budget_dims) ? settings.budget_dims : [];
175236
+ if (dims.includes("hub_daily_cap")) return;
175237
+ if (dims.length >= MAX_BUDGET_DIMENSIONS) throw new ProviderConfigError(`treg team already budgets ${MAX_BUDGET_DIMENSIONS} tag keys (${dims.join(", ")}); free one for ${TREG_CAP_DIMENSION}`, source.id, {
175238
+ status: 409,
175239
+ reason: "treg_budget_dims"
175240
+ });
175241
+ await controlJson(source, `/orgs/${org}/settings`, {
175242
+ method: "PATCH",
175243
+ body: { budget_dims: [...dims, TREG_CAP_DIMENSION] }
175244
+ });
175245
+ }
175246
+ async function setDailyCap(source, usd) {
175247
+ const org = await orgId(source);
175248
+ await ensureBudgetDimension(source, org);
175249
+ const micro = Math.round(usd * 1e6);
175250
+ await controlJson(source, `/orgs/${org}/budgets/${TREG_CAP_DIMENSION}/${encodeURIComponent(tagValue(source))}`, {
175251
+ method: "PUT",
175252
+ body: {
175253
+ daily_cap_micro: micro,
175254
+ note: "Hub connection daily cap"
175255
+ }
175256
+ });
175257
+ capCheckCache.set(source.id, Date.now());
175258
+ return { dailyCapUsd: micro / 1e6 };
175259
+ }
175260
+ async function connectionBudget(source, org) {
175261
+ const budgets = await controlJson(source, `/orgs/${org}/budgets`);
175262
+ const value = tagValue(source);
175263
+ return Array.isArray(budgets) ? budgets.find((budget) => budget.dim === "hub_daily_cap" && budget.val === value && typeof budget.daily_cap_micro === "number") : void 0;
175264
+ }
175265
+ /** A metered read never runs without a daily budget on its tag. */
175266
+ async function ensureDailyCap(source) {
175267
+ const checked = capCheckCache.get(source.id);
175268
+ if (checked !== void 0 && Date.now() - checked < CAP_CHECK_TTL_MS) return;
175269
+ if (await connectionBudget(source, await orgId(source))) {
175270
+ capCheckCache.set(source.id, Date.now());
175271
+ return;
175272
+ }
175273
+ await setDailyCap(source, 1);
175274
+ }
175275
+ async function catalogEndpoint(source, endpointId) {
175276
+ const cached = catalogCache.get(endpointId);
175277
+ if (cached && Date.now() - cached.at < CATALOG_TTL_MS) return cached.endpoint;
175278
+ const response = await treg(source, `/catalog/endpoints/${encodeURIComponent(endpointId)}`);
175279
+ const body = await readBody(response);
175280
+ if (response.status === 404) throw new InvalidCapabilityArgument(`treg has no catalog endpoint "${endpointId}"; find one with catalog.search`, "endpointId");
175281
+ if (!response.ok) throw new ProviderRequestError(`treg catalog answered HTTP ${response.status}`, source.id, {
175282
+ status: response.status,
175283
+ body
175284
+ });
175285
+ const endpoint = body?.endpoint;
175286
+ if (!endpoint || endpoint.id !== endpointId) throw new ProviderRequestError("treg catalog entry is malformed", source.id, {
175287
+ status: 502,
175288
+ body
175289
+ });
175290
+ catalogCache.set(endpointId, {
175291
+ endpoint,
175292
+ at: Date.now()
175293
+ });
175294
+ return endpoint;
175295
+ }
175296
+ function stringArg(args, field) {
175297
+ const value = args[field];
175298
+ if (typeof value !== "string" || !value.trim()) throw new InvalidCapabilityArgument(`${field} is required`, field);
175299
+ return value.trim();
175300
+ }
175301
+ function endpointIdArg(args) {
175302
+ const id = stringArg(args, "endpointId");
175303
+ if (!/^[a-z0-9][a-z0-9._-]{1,200}$/i.test(id)) throw new InvalidCapabilityArgument("endpointId must be a catalog id such as \"moz.web.backlinks.summary\"", "endpointId");
175304
+ return id;
175305
+ }
175306
+ function maxCost(args) {
175307
+ const value = args.maxCostUsd ?? .25;
175308
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || value > 1) throw new InvalidCapabilityArgument(`maxCostUsd must be above 0 and at most 1`, "maxCostUsd");
175309
+ return value;
175310
+ }
175311
+ function queryString(args) {
175312
+ const query = args.query;
175313
+ if (query === void 0 || query === null) return "";
175314
+ if (typeof query !== "object" || Array.isArray(query)) throw new InvalidCapabilityArgument("query must be an object of scalar values", "query");
175315
+ const params = new URLSearchParams();
175316
+ for (const [key, value] of Object.entries(query)) {
175317
+ if (![
175318
+ "string",
175319
+ "number",
175320
+ "boolean"
175321
+ ].includes(typeof value)) throw new InvalidCapabilityArgument(`query.${key} must be a string, number or boolean`, "query");
175322
+ params.append(key, String(value));
175323
+ }
175324
+ const text = params.toString();
175325
+ return text ? `?${text}` : "";
175326
+ }
175327
+ const MODE_TAG = {
175328
+ capped: TREG_CAP_DIMENSION,
175329
+ "over-cap": TREG_OVER_CAP_DIMENSION,
175330
+ write: TREG_WRITE_DIMENSION
175331
+ };
175332
+ async function catalogCall(inv, mode) {
175333
+ const { source, args } = inv;
175334
+ const endpointId = endpointIdArg(args);
175335
+ const ceiling = maxCost(args);
175336
+ const endpoint = await catalogEndpoint(source, endpointId);
175337
+ const isRead = READ_KINDS.has(String(endpoint.kind ?? ""));
175338
+ if (mode !== "write" && !isRead) throw new InvalidCapabilityArgument(`${endpointId} is a catalog "${endpoint.kind ?? "unknown"}" endpoint that acts on the world; use call.write, which needs owner approval`, "endpointId");
175339
+ if (mode === "write" && isRead) throw new InvalidCapabilityArgument(`${endpointId} only reads data; use call`, "endpointId");
175340
+ if (mode === "capped") await ensureDailyCap(source);
175341
+ const method = typeof args.method === "string" ? args.method.toUpperCase() : (endpoint.method ?? "GET").toUpperCase();
175342
+ if (method !== "GET" && method !== "POST") throw new InvalidCapabilityArgument("method must be GET or POST", "method");
175343
+ if (method === "GET" && args.body !== void 0) throw new InvalidCapabilityArgument("a GET call takes no body", "body");
175344
+ const response = await treg(source, `/call/${encodeURIComponent(endpointId)}${queryString(args)}`, {
175345
+ method,
175346
+ body: method === "POST" ? args.body ?? {} : void 0,
175347
+ headers: {
175348
+ "X-Treg-Route-Max-Cost": String(ceiling),
175349
+ "X-Treg-Meta": `${MODE_TAG[mode]}=${tagValue(source)}`,
175350
+ "Idempotency-Key": inv.idempotencyKey.slice(0, 200)
175351
+ },
175352
+ timeoutMs: REQUEST_TIMEOUT_MS
175353
+ });
175354
+ const body = await readBody(response);
175355
+ const info = detail(body);
175356
+ if (response.status === 401) throw new CredentialsExpired("treg rejected the team API key", source.id, {
175357
+ status: 401,
175358
+ body
175359
+ });
175360
+ if (response.status === 429 && info.error === "tag_spend_cap_reached") throw new ProviderConfigError(`daily_cap_reached: this connection spent $${micro(info.spent_micro)} of its $${micro(info.cap_micro)} daily cap (resets 00:00 UTC). Use call.overCap for this call, which waits for owner approval, or ask the owner to raise the cap with cap.set.`, source.id, {
175361
+ status: 429,
175362
+ reason: "daily_cap_reached",
175363
+ body
175364
+ });
175365
+ if (response.status === 429 && info.error === "platform_daily_cap_reached") throw new ProviderConfigError(`team_daily_cap_reached: ${String(info.message ?? "the treg team spent its own daily limit")}`, source.id, {
175366
+ status: 429,
175367
+ reason: "team_daily_cap_reached",
175368
+ body
175369
+ });
175370
+ if (response.status === 402 && info.error === "route_max_cost") throw new InvalidCapabilityArgument(`max_cost_exceeded: ${endpointId} would reserve about $${micro(info.estimated_cost_micro)}, above maxCostUsd ${ceiling}. Nothing was charged; ask for fewer rows or targets, or raise maxCostUsd (at most 1).`, "maxCostUsd");
175371
+ if (response.status === 402) throw new ProviderConfigError(`balance_empty: the treg team balance cannot cover this call; the owner tops up at ${String(info.topup_url ?? "https://treg.to")}.`, source.id, {
175372
+ status: 402,
175373
+ reason: "balance_empty",
175374
+ body
175375
+ });
175376
+ if (!response.ok) throw new ProviderRequestError(`${endpointId} answered HTTP ${response.status}${info.message ? `: ${String(info.message).slice(0, 300)}` : ""}; nothing was charged.`, source.id, {
175377
+ status: response.status,
175378
+ reason: typeof info.error === "string" ? info.error : void 0,
175379
+ body
175380
+ });
175381
+ const costMicro = Number(response.headers.get("x-treg-cost-micro") ?? 0) || 0;
175382
+ const callId = response.headers.get("x-treg-call-id");
175383
+ const servedBy = response.headers.get("x-treg-served-by") ?? endpointId;
175384
+ const fetchedAt = /* @__PURE__ */ new Date();
175385
+ const provider = endpoint.provider_display ?? endpoint.provider ?? endpointId.split(".")[0];
175386
+ return {
175387
+ endpointId,
175388
+ provider,
175389
+ servedBy,
175390
+ costUsd: costMicro / 1e6,
175391
+ callId,
175392
+ cache: response.headers.get("x-treg-cache"),
175393
+ fetchedAt: fetchedAt.toISOString(),
175394
+ citation: `${provider} via treg.to (${servedBy}${callId ? `, call ${callId}` : ""}), ${fetchedAt.toISOString().slice(0, 10)}`,
175395
+ data: body
175396
+ };
175397
+ }
175398
+ function micro(value) {
175399
+ const number = typeof value === "number" ? value : Number(value);
175400
+ return Number.isFinite(number) ? (number / 1e6).toFixed(4).replace(/0+$/, "").replace(/\.$/, "") : "?";
175401
+ }
175402
+ function trimEndpoint(endpoint) {
175403
+ return {
175404
+ id: endpoint.id,
175405
+ provider: endpoint.provider_display ?? endpoint.provider,
175406
+ name: endpoint.name,
175407
+ summary: endpoint.summary,
175408
+ method: endpoint.method,
175409
+ kind: endpoint.kind,
175410
+ readOnly: READ_KINDS.has(String(endpoint.kind ?? "")),
175411
+ cost: endpoint.cost ?? null,
175412
+ observed: endpoint.observed ?? null
175413
+ };
175414
+ }
175415
+ async function spendStatus(source) {
175416
+ const org = await orgId(source);
175417
+ const value = tagValue(source);
175418
+ const [budget, usage, balance] = await Promise.all([
175419
+ connectionBudget(source, org),
175420
+ controlJson(source, `/orgs/${org}/usage/by-tag?key=${TREG_CAP_DIMENSION}&days=1`),
175421
+ controlJson(source, `/orgs/${org}/balance`)
175422
+ ]);
175423
+ const spent = usage.rows?.find((row) => row.value === value)?.charged_micro ?? 0;
175424
+ const cap = budget?.daily_cap_micro ?? null;
175425
+ return {
175426
+ dailyCapUsd: cap === null ? null : cap / 1e6,
175427
+ spentTodayUsd: spent / 1e6,
175428
+ remainingTodayUsd: cap === null ? null : Math.max(0, cap - spent) / 1e6,
175429
+ balanceUsd: typeof balance.balance_micro === "number" ? balance.balance_micro / 1e6 : null,
175430
+ day: (/* @__PURE__ */ new Date()).toISOString().slice(0, 10),
175431
+ resets: "00:00 UTC",
175432
+ note: cap === null ? `No cap yet; the first metered call installs $1/day.` : void 0
175433
+ };
175434
+ }
175435
+ const tregConnector = {
175436
+ manifest: {
175437
+ kind: "treg",
175438
+ displayName: "treg",
175439
+ description: "Per-call SEO, keyword, backlink, company-enrichment, SERP and scraping data from about 3,800 provider endpoints (DataForSEO, Moz, Serpstat, SE Ranking, Prospeo and more), billed to the connection owner's prepaid treg team balance. Each connection has a daily spend cap; spending past it, cap changes and write endpoints need owner approval.",
175440
+ auth: {
175441
+ kind: "api-key",
175442
+ hint: "Team API key from treg.to (Team → API keys). The team's prepaid balance pays for calls; use an owner or admin key so the connection can keep its daily cap."
175443
+ },
175444
+ category: "market-intelligence",
175445
+ defaultConsistencyModel: "advisory",
175446
+ capabilities
175447
+ },
175448
+ async executeRead(inv) {
175449
+ const { source, args } = inv;
175450
+ switch (inv.capabilityName) {
175451
+ case "catalog.search": {
175452
+ const query = stringArg(args, "query");
175453
+ const limit = typeof args.limit === "number" ? Math.min(25, Math.max(1, Math.trunc(args.limit))) : 10;
175454
+ const response = await treg(source, `/catalog/search?q=${encodeURIComponent(query)}&limit=${limit}`);
175455
+ const body = await readBody(response);
175456
+ if (!response.ok) throw new ProviderRequestError(`treg catalog search answered HTTP ${response.status}`, source.id, {
175457
+ status: response.status,
175458
+ body
175459
+ });
175460
+ return {
175461
+ data: {
175462
+ total: body?.total ?? null,
175463
+ results: (body?.results ?? []).slice(0, limit).map(trimEndpoint)
175464
+ },
175465
+ fetchedAt: Date.now()
175466
+ };
175467
+ }
175468
+ case "catalog.get": {
175469
+ const endpoint = await catalogEndpoint(source, endpointIdArg(args));
175470
+ return {
175471
+ data: {
175472
+ ...trimEndpoint(endpoint),
175473
+ input: endpoint.input ?? null,
175474
+ example: endpoint.call_template ?? null
175475
+ },
175476
+ fetchedAt: Date.now()
175477
+ };
175478
+ }
175479
+ case "spend.status": return {
175480
+ data: await spendStatus(source),
175481
+ fetchedAt: Date.now()
175482
+ };
175483
+ case "call": return {
175484
+ data: await catalogCall(inv, "capped"),
175485
+ fetchedAt: Date.now()
175486
+ };
175487
+ default: throw new InvalidCapabilityArgument(`unknown treg read ${inv.capabilityName}`, "capabilityName");
175488
+ }
175489
+ },
175490
+ async executeMutation(inv) {
175491
+ let data;
175492
+ switch (inv.capabilityName) {
175493
+ case "call.overCap":
175494
+ data = await catalogCall(inv, "over-cap");
175495
+ break;
175496
+ case "call.write":
175497
+ data = await catalogCall(inv, "write");
175498
+ break;
175499
+ case "cap.set": {
175500
+ const usd = inv.args.dailyCapUsd;
175501
+ if (typeof usd !== "number" || !Number.isFinite(usd) || usd <= 0 || usd > TREG_MAX_DAILY_CAP_USD) throw new InvalidCapabilityArgument(`dailyCapUsd must be above 0 and at most ${TREG_MAX_DAILY_CAP_USD}`, "dailyCapUsd");
175502
+ data = await setDailyCap(inv.source, usd);
175503
+ break;
175504
+ }
175505
+ default: throw new InvalidCapabilityArgument(`unknown treg mutation ${inv.capabilityName}`, "capabilityName");
175506
+ }
175507
+ return {
175508
+ status: "committed",
175509
+ data,
175510
+ committedAt: Date.now(),
175511
+ idempotentReplay: false
175512
+ };
175513
+ },
175514
+ async test(source) {
175515
+ try {
175516
+ await orgId(source);
175517
+ return { ok: true };
175518
+ } catch (error) {
175519
+ return {
175520
+ ok: false,
175521
+ reason: error instanceof Error ? error.message : String(error)
175522
+ };
175523
+ }
175524
+ }
175525
+ };
175526
+ //#endregion
174639
175527
  //#region src/connectors/adapters/service-now.ts
174640
175528
  const serviceNowConnector = declarativeRestConnector({
174641
175529
  kind: "service-now",
@@ -194368,6 +195256,7 @@ var adapters_exports = /* @__PURE__ */ __exportAll({
194368
195256
  todoistConnector: () => todoistConnector,
194369
195257
  togglTrackConnector: () => togglTrackConnector,
194370
195258
  totalcmsConnector: () => totalcmsConnector,
195259
+ tregConnector: () => tregConnector,
194371
195260
  trelloConnector: () => trelloConnector,
194372
195261
  twentyConnector: () => twentyConnector,
194373
195262
  twilioConnector: () => twilioConnector,
@@ -194435,6 +195324,6 @@ var adapters_exports = /* @__PURE__ */ __exportAll({
194435
195324
  zuoraConnector: () => zuoraConnector
194436
195325
  });
194437
195326
  //#endregion
194438
- export { uscreenConnector as $, openaiConnector as $a, harvestConnector as $c, clearoutphoneConnector as $d, campaignMonitorConnector as $i, checkoutConnector as $l, mailerooConnector as $n, zohoBooksConnector as $o, mailercheckConnector as $r, parquetFilesConnector as $s, postizConnector as $t, snowflakeConnector as $u, bettercontactConnector as A, altTextAiConnector as Aa, microsoftCalendar as Ac, giftbitConnector as Ad, copyAiConnector as Ai, classifyGoogleError as Al, instasentConnector as An, digitalOceanConnector as Ao, joggAiConnector as Ar, sageIntacctConnector as As, sendinblueConnector as At, avomaConnector as Au, woocommerceConnector as B, airOpsConnector as Ba, kafkaConnector as Bc, echowinConnector as Bd, clockifyConnector as Bi, filloutFormsConnector as Bl, gptzeroDetectAiConnector as Bn, smartleadConnector as Bo, hashiCorpVaultConnector as Br, rssConnector as Bs, retableConnector as Bt, amazonEventBridgeConnector as Bu, serperConnector as C, apitableConnector as Ca, microsoftPowerBiConnector as Cc, clicdataConnector as Cd, oktaConnector as Cf, descriptConnector as Ci, metaAdsConnector as Cl, nocodbConnector as Cn, createMySqlConnector as Co, koFiConnector as Cr, todoistConnector as Cs, simplybookmeConnector as Ct, backblazeConnector as Cu, snovIoConnector as D, amazonTextractConnector as Da, microsoftExcel365Connector as Dc, adpConnector as Dd, customgptConnector as Di, gorgiasConnector as Dl, loopsConnector as Dn, googleBigqueryConnector as Do, kimaiConnector as Dr, stripePackConnector as Ds, serviceNowConnector as Dt, azureBlobStorageConnector as Du, wizaConnector as E, apitemplateIoConnector as Ea, microsoftGraph as Ec, bexioConnector as Ed, phonyConnector as Ef, deepseekConnector as Ei, googleCalendar as El, mailchainConnector as En, hightouchConnector as Eo, kissflowConnector as Er, tallyConnector as Es, signrequestConnector as Et, azureEventGridConnector as Eu, zeplinConnector as F, aipriseConnector as Fa, linkedinConnector as Fc, fellowConnector as Fd, cometapiConnector as Fi, frontConnector as Fl, humeAiConnector as Fn, TELEGRAM_FILE_DOWNLOAD_ROOT as Fo, instantlyAiConnector as Fr, savvycalConnector as Fs, sardisConnector as Ft, amazonSqsConnector as Fu, webscrapingAiConnector as G, bamboohrConnector as Ga, ironcladConnector as Gc, detectingAiConnector as Gd, chatbaseConnector as Gi, fathomConnector as Gl, missiveConnector as Gn, lemlistConnector as Go, greenptConnector as Gr, postgresConnector as Gs, raiaAiConnector as Gt, zuoraConnector as Gu, wonderchatConnector as H, activecampaignConnector as Ha, justcallConnector as Hc, docsbotConnector as Hd, chatnodeConnector as Hi, figjamConnector as Hl, glideConnector as Hn, outreachConnector as Ho, hastewireConnector as Hr, rampConnector as Hs, reoonVerifierConnector as Ht, affinityConnector as Hu, youcanbookmeConnector as I, acumbamailConnector as Ia, linearConnector as Ic, featheryConnector as Id, cohereConnector as Ii, freshsalesConnector as Il, hedyConnector as In, telegramConnector as Io, huggingFaceConnector as Ir, saleorConnector as Is, saasticConnector as It, amazonSnsConnector as Iu, vtigerConnector as J, weaviateConnector as Ja, instagramBusinessConnector as Jc, couchbaseConnector as Jd, cannyConnector as Ji, dropboxConnector as Jl, mindeeConnector as Jn, brazeConnector as Jo, ghostcmsConnector as Jr, createRedisConnector as Js, pushoverConnector as Jt, wootricConnector as Ju, whatConvertsConnector as K, qdrantConnector as Ka, invoiceninjaConnector as Kc, deepgramConnector as Kd, chatlingConnector as Ki, etsyConnector as Kl, mixpanelConnector as Kn, klaviyoConnector as Ko, googleSearchConnector as Kr, createRedshiftConnector as Ks, quadernoConnector as Kt, zoominfoConnector as Ku, wufooConnector as L, aidbaseConnector as La, lemonSqueezyConnector as Lc, everhourConnector as Ld, cognitoFormsConnector as Li, freshdeskConnector as Ll, heartbeatConnector as Ln, mattermostConnector as Lo, influencersClubConnector as Lr, createSftpConnector as Ls, runwareConnector as Lt, amazonS3Connector as Lu, lagrowthmachineConnector as M, airtopConnector as Ma, microsoft365PeopleConnector as Mc, genderApiConnector as Md, convertkitConnector as Mi, googleApiError as Ml, imapConnector as Mn, datadogConnector as Mo, jiraDataCenterConnector as Mr, signNowConnector as Ms, seekTableConnector as Mt, auth0Connector as Mu, heyreachConnector as N, amazonSecretsManagerConnector as Na, makeConnector as Nc, gammaConnector as Nd, crispConnector as Ni, googleErrorReason as Nl, ibmCognoseConnector as Nn, baserowConnector as No, jinaAiConnector as Nr, shippoConnector as Ns, scrapelessConnector as Nt, attioConnector as Nu, findymailConnector as O, amazonSesConnector as Oa, microsoftDynamicsCrmConnector as Oc, adobeCreativeCloudConnector as Od, cryptolensConnector as Oi, gongConnector as Ol, knockConnector as On, firebaseConnector as Oo, kapsoConnector as Or, squareConnector as Os, serpstatConnector as Ot, azureAdConnector as Ou, amplemarketConnector as P, amazonBedrockConnector as Pa, createLinkedinConnector as Pc, flowParserConnector as Pd, comfyicuConnector as Pi, googleTestFailureReason as Pl, hystructConnector as Pn, airtableConnector as Po, imageRouterConnector as Pr, sharepoint as Ps, scrapegraphaiConnector as Pt, asanaConnector as Pu, vboutConnector as Q, anthropicConnector as Qa, helpscoutConnector as Qc, clickfunnelsConnector as Qd, braveSearchConnector as Qi, chessComConnector as Ql, messagebirdConnector as Qn, zohoCampaignsConnector as Qo, frameConnector as Qr, quickbooksConnector as Qs, posthogConnector as Qt, teableConnector as Qu, writesonicBulkConnector as R, afforaiConnector as Ra, leadConnectorConnector as Rc, excelFilesConnector as Rd, clearoutConnector as Ri, folkConnector as Rl, griptapeConnector as Rn, matrixConnector as Ro, housecallProConnector as Rr, sftpConnector as Rs, robollyConnector as Rt, amazonLambdaConnector as Ru, warmlyConnector as S, aminosConnector as Sa, microsoftTodoConnector as Sc, clioConnector as Sd, clientCredentialsRestConnector as Sf, datocmsConnector as Si, xAdsConnector as Sl, ntfyConnector as Sn, segmentConnector as So, kudosityConnector as Sr, trelloConnector as Ss, smartsheetConnector as St, biginByZohoConnector as Su, commonRoomConnector as T, ampecoConnector as Ta, microsoftTeams as Tc, bigcommerceConnector as Td, createPhonyConnector as Tf, denserAiConnector as Ti, googleAnalyticsConnector as Tl, medullarConnector as Tn, metabaseConnector as To, klentyConnector as Tr, ticktickConnector as Ts, shortIoConnector as Tt, azureServiceBusConnector as Tu, whatsscaleConnector as U, smooveConnector as Ua, jotformConnector as Uc, duckdbConnector as Ud, chatDataConnector as Ui, firefliesAiConnector as Ul, googleVertexaiConnector as Un, marketoConnector as Uo, guideliteConnector as Ur, recallAiConnector as Us, reachinboxConnector as Ut, aircallConnector as Uu, woodpeckerConnector as V, kustomerConnector as Va, publicKafkaSocketFactory as Vc, dripConnector as Vd, clockodoConnector as Vi, figmaConnector as Vl, gotifyConnector as Vn, salesloftConnector as Vo, heygenConnector as Vr, ringcentralConnector as Vs, replyIoConnector as Vt, amplitudeConnector as Vu, whatsappConnector as W, greenhouseConnector as Wa, jiraCloudConnector as Wc, digitalPilotConnector as Wd, chartlyConnector as Wi, fireberryConnector as Wl, exaConnector as Wn, mailchimpConnector as Wo, greipConnector as Wr, createPostgresConnector as Ws, rapidtextAiConnector as Wt, adobeSignConnector as Wu, vlmRunConnector as X, geminiConnector as Xa, httpConnector as Xc, contextualAiConnector as Xd, certopusConnector as Xi, docusignConnector as Xl, memConnector as Xn, zohoMailConnector as Xo, gameballConnector as Xr, createRabbitMqConnector as Xs, productboardConnector as Xt, vercelConnector as Xu, vtexConnector as Y, huggingfaceConnector as Ya, intercomConnector as Yc, contiguityConnector as Yd, chainalysisApiConnector as Yi, dialpadConnector as Yl, millionverifierConnector as Yn, apolloConnector as Yo, freshserviceConnector as Yr, redisConnector as Ys, proxycurlConnector as Yt, videoaskConnector as Yu, vidlab7Connector as Z, googleGeminiConnector as Za, hubspot as Zc, codyConnector as Zd, captainDataConnector as Zi, docuseal as Zl, mauticConnector as Zn, zohoInvoiceConnector as Zo, fragmentConnector as Zr, rabbitMqConnector as Zs, predictLeadsConnector as Zt, tenzoConnector as Zu, phantombusterConnector as _, ashbyConnector as _a, mondayConnector as _c, formstackConnector as _d, aianswerConnector as _f, dubConnector as _i, pinterestAdsConnector as _l, opportifyConnector as _n, neverbounceConnector as _o, linkupConnector as _r, tiktokConnector as _s, swarmnodeConnector as _t, billplzConnector as _u, linqConnector as a, bonjoroConnector as aa, outlookMail as ac, pushbulletConnector as ad, csvFilesConnector as af, facebookLeadsConnector as ai, googleSheets as al, perplexityAiConnector as an, quickzuConnector as ao, mailerLiteConnector as ar, zoomConnector as as, twinLabsConnector as at, copperConnector as au, crustdataConnector as b, semrushConnector as ba, meetgeekAiConnector as bc, constantContactConnector as bd, pingIdentityConnector as bf, documergeConnector as bi, linkedinAdsConnector as bl, omniCoConnector as bn, builtwithConnector as bo, kommoConnector as br, typeformConnector as bs, smsmodeConnector as bt, baremetricsConnector as bu, factorsAiConnector as c, bettermodeConnector as ca, openPhoneConnector as cc, opsgenieConnector as cd, buttondownConnector as cf, firecrawlConnector as ci, googleMeetConnector as cl, parseurConnector as cn, githubConnector as co, logsnagConnector as cr, youtubeDataConnector as cs, togglTrackConnector as ct, codaConnector as cu, signwellConnector as d, barcodeLookupConnector as da, n8nConnector as dc, lightfunnelsConnector as dd, base44Connector as df, emailoctopusConnector as di, googleDocs as dl, pastefyConnector as dn, gtmAgentConnector as do, magicalApiConnector as dr, webflowConnector as ds, textcortexAiConnector as dt, clickupConnector as du, brilliantDirectoriesConnector as ea, pipedriveConnector as ec, sendpulseConnector as ed, claudeConnector as ef, fountainConnector as ei, hellosign as el, pollybotAiConnector as en, sentryConnector as eo, mailgunConnector as er, zohoCrmConnector as es, umamiConnector as et, circleConnector as eu, polytomicConnector as f, autocallsConnector as fa, notion as fc, leverConnector as fd, bannerbearConnector as ff, dustConnector as fi, googleContactsConnector as fl, paperformConnector as fn, webhookConnector as fo, llmrailsConnector as fr, xeroConnector as fs, telnyxConnector as ft, closeConnector as fu, zenrowsConnector as g, assemblyaiConnector as ga, mongodbConnector as gc, freeAgentConnector as gd, airparserConnector as gf, documentproConnector as gi, createMicrosoftAdsConnector as gl, openmicAiConnector as gn, theirstackConnector as go, letsCalendarConnector as gr, tiktok as gs, stripeConnector as gt, calComConnector as gu, oceanIoConnector as h, avianConnector as ha, createMongoDbConnector as hc, giteaConnector as hd, anyhookWebsocketConnector as hf, elasticEmailConnector as hi, createAmazonAdsConnector as hl, opnformConnector as hn, zerobounceConnector as ho, linkaConnector as hr, twilioSmsConnector as hs, systemeIoConnector as ht, calCom as hu, linqWhatsappConnector as i, blueskyConnector as ia, pandadoc as ic, redditConnector as id, chainAwareConnector as if, flowiseConnector as ii, googleSlidesConnector as il, personalAiConnector as in, zagomailConnector as io, luxuryPresenceConnector as ir, zohoBookingsConnector as is, twilioConnector as it, chargebeeConnector as iu, saleshandyConnector as j, alaiConnector as ja, microsoft365PlannerConnector as jc, generatebannersConnector as jd, dashworksConnector as ji, classifyGoogleReason as jl, insightoAiConnector as jn, discourseConnector as jo, justInvoiceConnector as jr, slack as js, skyprepConnector as jt, acuitySchedulingConnector as ju, contactoutConnector as k, alttextifyConnector as ka, microsoftDynamics365BusinessCentralConnector as kc, modelslabConnector as kd, datafuelConnector as ki, gmail as kl, kallabotAiConnector as kn, clicksendConnector as ko, kizeoFormsConnector as kr, shopifyConnector as ks, senjaConnector as kt, avalaraConnector as ku, modjoConnector as l, beamerConnector as la, ninjapipeConnector as lc, niftyConnector as ld, bikaConnector as lf, esignaturesConnector as li, googleForms as ll, paywhirlConnector as ln, slackEventsConnector as lo, logrocketConnector as lr, wrikeConnector as ls, timelinesAiConnector as lt, cloudinaryConnector as lu, seamlessAiConnector as m, asknewsConnector as ma, mycaseConnector as mc, gustoConnector as md, apifyConnector as mf, edenAiConnector as mi, googleCloudStorageConnector as ml, orimonConnector as mn, resolveConnectorAdapterFactoryOptions as mo, localaiConnector as mr, voucheryIoConnector as ms, tableauConnector as mt, calendlyConnector as mu, sendblueConnector as n, bookedinConnector as na, plaidConnector as nc, ripplingConnector as nd, chatAidConnector as nf, formbricksConnector as ni, googlechatConnector as nl, plausibleConnector as nn, sendgridConnector as no, matomoConnector as nr, pricelabsConnector as ns, vapiConnector as nt, taxjarConnector as nu, inkboxConnector as o, bitlyConnector as oa, oneSpanSignConnector as oc, paychexConnector as od, cartloomConnector as of, enrichlayerConnector as oi, googleSearchConsoleConnector as ol, peekshotConnector as on, facebookPagesConnector as oo, lushaConnector as or, zendeskConnector as os, typefullyConnector as ot, contentfulConnector as ou, usergemsConnector as p, azureCommunicationServicesConnector as pa, notionConnector as pc, instaChartsConnector as pd, askHandleConnector as pf, easyPeasyAiConnector as pi, googlePubSubConnector as pl, oracleDatabaseConnector as pn, CONNECTOR_ADAPTER_FACTORIES as po, lobstermailConnector as pr, whatsappBusiness as ps, talkableConnector as pt, capsuleCrmConnector as pu, wafeqConnector as q, pineconeConnector as qa, insightlyConnector as qc, dappierConnector as qd, chargekeepConnector as qi, ebayConnector as ql, mixmaxConnector as qn, customerIoConnector as qo, gistlyConnector as qr, redshiftConnector as qs, qawafelConnector as qt, workdayConnector as qu, resendConnector as r, bolnaConnector as ra, paddleConnector as rc, reddit as rd, chaindeskConnector as rf, flipandoConnector as ri, googleTasksConnector as rl, placidConnector as rn, zendeskSellConnector as ro, lucidyaConnector as rr, cloudbedsConnector as rs, upgradechatConnector as rt, recurlyConnector as ru, getresponseConnector as s, blandAiConnector as sa, oneDrive as sc, pagerdutyConnector as sd, cambAiConnector as sf, fathomAnalyticsConnector as si, googleMyBusinessConnector as sl, pdfmonkeyConnector as sn, gitlabConnector as so, loftyConnector as sr, zapierConnector as ss, totalcmsConnector as st, confluenceConnector as su, adapters_exports as t, browseAiConnector as ta, pipedreamConnector as tc, sanityConnector as td, chatsistantConnector as tf, foreplayCoConnector as ti, granolaConnector as tl, pocketbaseConnector as tn, postmarkConnector as to, manychatConnector as tr, zohoDeskConnector as ts, validatedmailsConnector as tt, cashfreePaymentsConnector as tu, nooksConnector as u, azureOpenaiConnector as ua, netsuiteConnector as uc, netlifyConnector as ud, beehiivConnector as uf, emailitConnector as ui, googleDrive as ul, pinchPaymentsConnector as un, stripeWebhookReceiverConnector as uo, lokaliseConnector as ur, wordpressConnector as us, timeOpsConnector as ut, cloudflareConnector as uu, brightdataConnector as v, clayConnector as va, miroConnector as vc, discordConnector as vd, actualbudgetConnector as vf, dumplingAiConnector as vi, snapchatAdsConnector as vl, openRouterConnector as vn, hunterConnector as vo, lettaConnector as vr, twitter as vs, supadataConnector as vt, billComConnector as vu, leadfeederConnector as w, appfollowConnector as wa, microsoftOnenoteConnector as wc, canvaConnector as wd, declarativeRestConnector as wf, devinConnector as wi, googleAdsConnector as wl, mindStudioConnector as wn, mysqlConnector as wo, knackConnector as wr, tlDvConnector as ws, simplirouteConnector as wt, basecampConnector as wu, autoboundConnector as x, similarwebConnector as xa, mastodonConnector as xc, cloudconvertConnector as xd, oneloginConnector as xf, dittofeedConnector as xi, tiktokAdsConnector as xl, odooConnector as xn, supabaseConnector as xo, leapAiConnector as xr, twentyConnector as xs, smartsuiteConnector as xt, boxConnector as xu, leadmagicConnector as y, cognismConnector as ya, mollieConnector as yc, demandbaseConnector as yd, scimConnector as yf, doctlyConnector as yi, redditAdsConnector as yl, omnihrConnector as yn, fullenrichConnector as yo, leexiConnector as yr, twitterConnector as ys, socialkitConnector as yt, brexConnector as yu, workableConnector as z, agentxConnector as za, createKafkaConnector as zc, elevenlabsConnector as zd, cloutlyConnector as zi, flowluConnector as zl, gristConnector as zn, chatwootConnector as zo, heymarketSmsConnector as zr, salesforceConnector as zs, retellAiConnector as zt, amazonCloudWatchConnector as zu };
195327
+ export { uscreenConnector as $, anthropicConnector as $a, helpscoutConnector as $c, clickfunnelsConnector as $d, braveSearchConnector as $i, chessComConnector as $l, messagebirdConnector as $n, zohoCampaignsConnector as $o, frameConnector as $r, quickbooksConnector as $s, posthogConnector as $t, teableConnector as $u, bettercontactConnector as A, alttextifyConnector as Aa, microsoftDynamics365BusinessCentralConnector as Ac, modelslabConnector as Ad, datafuelConnector as Ai, gmail as Al, kallabotAiConnector as An, clicksendConnector as Ao, kizeoFormsConnector as Ar, shopifyConnector as As, senjaConnector as At, avalaraConnector as Au, woocommerceConnector as B, agentxConnector as Ba, createKafkaConnector as Bc, elevenlabsConnector as Bd, cloutlyConnector as Bi, flowluConnector as Bl, gristConnector as Bn, chatwootConnector as Bo, heymarketSmsConnector as Br, salesforceConnector as Bs, retellAiConnector as Bt, amazonCloudWatchConnector as Bu, serperConnector as C, aminosConnector as Ca, microsoftTodoConnector as Cc, clioConnector as Cd, clientCredentialsRestConnector as Cf, datocmsConnector as Ci, xAdsConnector as Cl, ntfyConnector as Cn, segmentConnector as Co, kudosityConnector as Cr, trelloConnector as Cs, simplybookmeConnector as Ct, biginByZohoConnector as Cu, snovIoConnector as D, apitemplateIoConnector as Da, microsoftGraph as Dc, bexioConnector as Dd, phonyConnector as Df, deepseekConnector as Di, googleCalendar as Dl, mailchainConnector as Dn, hightouchConnector as Do, kissflowConnector as Dr, tallyConnector as Ds, serviceNowConnector as Dt, azureEventGridConnector as Du, wizaConnector as E, ampecoConnector as Ea, microsoftTeams as Ec, bigcommerceConnector as Ed, createPhonyConnector as Ef, denserAiConnector as Ei, googleAnalyticsConnector as El, medullarConnector as En, metabaseConnector as Eo, klentyConnector as Er, ticktickConnector as Es, signrequestConnector as Et, azureServiceBusConnector as Eu, zeplinConnector as F, amazonBedrockConnector as Fa, createLinkedinConnector as Fc, flowParserConnector as Fd, comfyicuConnector as Fi, googleTestFailureReason as Fl, hystructConnector as Fn, airtableConnector as Fo, imageRouterConnector as Fr, sharepoint as Fs, scrapegraphaiConnector as Ft, asanaConnector as Fu, webscrapingAiConnector as G, greenhouseConnector as Ga, jiraCloudConnector as Gc, digitalPilotConnector as Gd, chartlyConnector as Gi, fireberryConnector as Gl, exaConnector as Gn, mailchimpConnector as Go, greipConnector as Gr, createPostgresConnector as Gs, rapidtextAiConnector as Gt, adobeSignConnector as Gu, wonderchatConnector as H, kustomerConnector as Ha, publicKafkaSocketFactory as Hc, dripConnector as Hd, clockodoConnector as Hi, figmaConnector as Hl, gotifyConnector as Hn, salesloftConnector as Ho, heygenConnector as Hr, ringcentralConnector as Hs, replyIoConnector as Ht, amplitudeConnector as Hu, youcanbookmeConnector as I, aipriseConnector as Ia, linkedinConnector as Ic, fellowConnector as Id, cometapiConnector as Ii, frontConnector as Il, humeAiConnector as In, TELEGRAM_FILE_DOWNLOAD_ROOT as Io, instantlyAiConnector as Ir, savvycalConnector as Is, sardisConnector as It, amazonSqsConnector as Iu, vtigerConnector as J, pineconeConnector as Ja, insightlyConnector as Jc, dappierConnector as Jd, chargekeepConnector as Ji, ebayConnector as Jl, mixmaxConnector as Jn, customerIoConnector as Jo, gistlyConnector as Jr, redshiftConnector as Js, qawafelConnector as Jt, workdayConnector as Ju, whatConvertsConnector as K, bamboohrConnector as Ka, ironcladConnector as Kc, detectingAiConnector as Kd, chatbaseConnector as Ki, fathomConnector as Kl, missiveConnector as Kn, lemlistConnector as Ko, greenptConnector as Kr, postgresConnector as Ks, raiaAiConnector as Kt, zuoraConnector as Ku, wufooConnector as L, acumbamailConnector as La, linearConnector as Lc, featheryConnector as Ld, cohereConnector as Li, freshsalesConnector as Ll, hedyConnector as Ln, telegramConnector as Lo, huggingFaceConnector as Lr, saleorConnector as Ls, saasticConnector as Lt, amazonSnsConnector as Lu, lagrowthmachineConnector as M, alaiConnector as Ma, microsoft365PlannerConnector as Mc, generatebannersConnector as Md, dashworksConnector as Mi, classifyGoogleReason as Ml, insightoAiConnector as Mn, discourseConnector as Mo, justInvoiceConnector as Mr, slack as Ms, skyprepConnector as Mt, acuitySchedulingConnector as Mu, heyreachConnector as N, airtopConnector as Na, microsoft365PeopleConnector as Nc, genderApiConnector as Nd, convertkitConnector as Ni, googleApiError as Nl, imapConnector as Nn, datadogConnector as No, jiraDataCenterConnector as Nr, signNowConnector as Ns, seekTableConnector as Nt, auth0Connector as Nu, findymailConnector as O, amazonTextractConnector as Oa, microsoftExcel365Connector as Oc, adpConnector as Od, customgptConnector as Oi, gorgiasConnector as Ol, loopsConnector as On, googleBigqueryConnector as Oo, kimaiConnector as Or, stripePackConnector as Os, tregConnector as Ot, azureBlobStorageConnector as Ou, amplemarketConnector as P, amazonSecretsManagerConnector as Pa, makeConnector as Pc, gammaConnector as Pd, crispConnector as Pi, googleErrorReason as Pl, ibmCognoseConnector as Pn, baserowConnector as Po, jinaAiConnector as Pr, shippoConnector as Ps, scrapelessConnector as Pt, attioConnector as Pu, vboutConnector as Q, googleGeminiConnector as Qa, hubspot as Qc, codyConnector as Qd, captainDataConnector as Qi, docuseal as Ql, mauticConnector as Qn, zohoInvoiceConnector as Qo, fragmentConnector as Qr, rabbitMqConnector as Qs, predictLeadsConnector as Qt, tenzoConnector as Qu, writesonicBulkConnector as R, aidbaseConnector as Ra, lemonSqueezyConnector as Rc, everhourConnector as Rd, cognitoFormsConnector as Ri, freshdeskConnector as Rl, heartbeatConnector as Rn, mattermostConnector as Ro, influencersClubConnector as Rr, createSftpConnector as Rs, runwareConnector as Rt, amazonS3Connector as Ru, warmlyConnector as S, similarwebConnector as Sa, mastodonConnector as Sc, cloudconvertConnector as Sd, oneloginConnector as Sf, dittofeedConnector as Si, tiktokAdsConnector as Sl, odooConnector as Sn, supabaseConnector as So, leapAiConnector as Sr, twentyConnector as Ss, smartsheetConnector as St, boxConnector as Su, commonRoomConnector as T, appfollowConnector as Ta, microsoftOnenoteConnector as Tc, canvaConnector as Td, declarativeRestConnector as Tf, devinConnector as Ti, googleAdsConnector as Tl, mindStudioConnector as Tn, mysqlConnector as To, knackConnector as Tr, tlDvConnector as Ts, shortIoConnector as Tt, basecampConnector as Tu, whatsscaleConnector as U, activecampaignConnector as Ua, justcallConnector as Uc, docsbotConnector as Ud, chatnodeConnector as Ui, figjamConnector as Ul, glideConnector as Un, outreachConnector as Uo, hastewireConnector as Ur, rampConnector as Us, reoonVerifierConnector as Ut, affinityConnector as Uu, woodpeckerConnector as V, airOpsConnector as Va, kafkaConnector as Vc, echowinConnector as Vd, clockifyConnector as Vi, filloutFormsConnector as Vl, gptzeroDetectAiConnector as Vn, smartleadConnector as Vo, hashiCorpVaultConnector as Vr, rssConnector as Vs, retableConnector as Vt, amazonEventBridgeConnector as Vu, whatsappConnector as W, smooveConnector as Wa, jotformConnector as Wc, duckdbConnector as Wd, chatDataConnector as Wi, firefliesAiConnector as Wl, googleVertexaiConnector as Wn, marketoConnector as Wo, guideliteConnector as Wr, recallAiConnector as Ws, reachinboxConnector as Wt, aircallConnector as Wu, vlmRunConnector as X, huggingfaceConnector as Xa, intercomConnector as Xc, contiguityConnector as Xd, chainalysisApiConnector as Xi, dialpadConnector as Xl, millionverifierConnector as Xn, apolloConnector as Xo, freshserviceConnector as Xr, redisConnector as Xs, proxycurlConnector as Xt, videoaskConnector as Xu, vtexConnector as Y, weaviateConnector as Ya, instagramBusinessConnector as Yc, couchbaseConnector as Yd, cannyConnector as Yi, dropboxConnector as Yl, mindeeConnector as Yn, brazeConnector as Yo, ghostcmsConnector as Yr, createRedisConnector as Ys, pushoverConnector as Yt, wootricConnector as Yu, vidlab7Connector as Z, geminiConnector as Za, httpConnector as Zc, contextualAiConnector as Zd, certopusConnector as Zi, docusignConnector as Zl, memConnector as Zn, zohoMailConnector as Zo, gameballConnector as Zr, createRabbitMqConnector as Zs, productboardConnector as Zt, vercelConnector as Zu, phantombusterConnector as _, assemblyaiConnector as _a, mongodbConnector as _c, freeAgentConnector as _d, airparserConnector as _f, documentproConnector as _i, createMicrosoftAdsConnector as _l, openmicAiConnector as _n, theirstackConnector as _o, letsCalendarConnector as _r, tiktok as _s, swarmnodeConnector as _t, calComConnector as _u, linqConnector as a, blueskyConnector as aa, pandadoc as ac, redditConnector as ad, chainAwareConnector as af, flowiseConnector as ai, googleSlidesConnector as al, personalAiConnector as an, zagomailConnector as ao, luxuryPresenceConnector as ar, zohoBookingsConnector as as, twinLabsConnector as at, chargebeeConnector as au, crustdataConnector as b, cognismConnector as ba, mollieConnector as bc, demandbaseConnector as bd, scimConnector as bf, doctlyConnector as bi, redditAdsConnector as bl, omnihrConnector as bn, fullenrichConnector as bo, leexiConnector as br, twitterConnector as bs, smsmodeConnector as bt, brexConnector as bu, factorsAiConnector as c, blandAiConnector as ca, oneDrive as cc, pagerdutyConnector as cd, cambAiConnector as cf, fathomAnalyticsConnector as ci, googleMyBusinessConnector as cl, pdfmonkeyConnector as cn, gitlabConnector as co, loftyConnector as cr, zapierConnector as cs, togglTrackConnector as ct, confluenceConnector as cu, signwellConnector as d, azureOpenaiConnector as da, netsuiteConnector as dc, netlifyConnector as dd, beehiivConnector as df, emailitConnector as di, googleDrive as dl, pinchPaymentsConnector as dn, stripeWebhookReceiverConnector as do, lokaliseConnector as dr, wordpressConnector as ds, textcortexAiConnector as dt, cloudflareConnector as du, campaignMonitorConnector as ea, parquetFilesConnector as ec, snowflakeConnector as ed, clearoutphoneConnector as ef, mailercheckConnector as ei, harvestConnector as el, postizConnector as en, openaiConnector as eo, mailerooConnector as er, zohoBooksConnector as es, umamiConnector as et, checkoutConnector as eu, polytomicConnector as f, barcodeLookupConnector as fa, n8nConnector as fc, lightfunnelsConnector as fd, base44Connector as ff, emailoctopusConnector as fi, googleDocs as fl, pastefyConnector as fn, gtmAgentConnector as fo, magicalApiConnector as fr, webflowConnector as fs, telnyxConnector as ft, clickupConnector as fu, zenrowsConnector as g, avianConnector as ga, createMongoDbConnector as gc, giteaConnector as gd, anyhookWebsocketConnector as gf, elasticEmailConnector as gi, createAmazonAdsConnector as gl, opnformConnector as gn, zerobounceConnector as go, linkaConnector as gr, twilioSmsConnector as gs, stripeConnector as gt, calCom as gu, oceanIoConnector as h, asknewsConnector as ha, mycaseConnector as hc, gustoConnector as hd, apifyConnector as hf, edenAiConnector as hi, googleCloudStorageConnector as hl, orimonConnector as hn, resolveConnectorAdapterFactoryOptions as ho, localaiConnector as hr, voucheryIoConnector as hs, systemeIoConnector as ht, calendlyConnector as hu, linqWhatsappConnector as i, bolnaConnector as ia, paddleConnector as ic, reddit as id, chaindeskConnector as if, flipandoConnector as ii, googleTasksConnector as il, placidConnector as in, zendeskSellConnector as io, lucidyaConnector as ir, cloudbedsConnector as is, twilioConnector as it, recurlyConnector as iu, saleshandyConnector as j, altTextAiConnector as ja, microsoftCalendar as jc, giftbitConnector as jd, copyAiConnector as ji, classifyGoogleError as jl, instasentConnector as jn, digitalOceanConnector as jo, joggAiConnector as jr, sageIntacctConnector as js, sendinblueConnector as jt, avomaConnector as ju, contactoutConnector as k, amazonSesConnector as ka, microsoftDynamicsCrmConnector as kc, adobeCreativeCloudConnector as kd, cryptolensConnector as ki, gongConnector as kl, knockConnector as kn, firebaseConnector as ko, kapsoConnector as kr, squareConnector as ks, serpstatConnector as kt, azureAdConnector as ku, modjoConnector as l, bettermodeConnector as la, openPhoneConnector as lc, opsgenieConnector as ld, buttondownConnector as lf, firecrawlConnector as li, googleMeetConnector as ll, parseurConnector as ln, githubConnector as lo, logsnagConnector as lr, youtubeDataConnector as ls, timelinesAiConnector as lt, codaConnector as lu, seamlessAiConnector as m, azureCommunicationServicesConnector as ma, notionConnector as mc, instaChartsConnector as md, askHandleConnector as mf, easyPeasyAiConnector as mi, googlePubSubConnector as ml, oracleDatabaseConnector as mn, CONNECTOR_ADAPTER_FACTORIES as mo, lobstermailConnector as mr, whatsappBusiness as ms, tableauConnector as mt, capsuleCrmConnector as mu, sendblueConnector as n, browseAiConnector as na, pipedreamConnector as nc, sanityConnector as nd, chatsistantConnector as nf, foreplayCoConnector as ni, granolaConnector as nl, pocketbaseConnector as nn, postmarkConnector as no, manychatConnector as nr, zohoDeskConnector as ns, vapiConnector as nt, cashfreePaymentsConnector as nu, inkboxConnector as o, bonjoroConnector as oa, outlookMail as oc, pushbulletConnector as od, csvFilesConnector as of, facebookLeadsConnector as oi, googleSheets as ol, perplexityAiConnector as on, quickzuConnector as oo, mailerLiteConnector as or, zoomConnector as os, typefullyConnector as ot, copperConnector as ou, usergemsConnector as p, autocallsConnector as pa, notion as pc, leverConnector as pd, bannerbearConnector as pf, dustConnector as pi, googleContactsConnector as pl, paperformConnector as pn, webhookConnector as po, llmrailsConnector as pr, xeroConnector as ps, talkableConnector as pt, closeConnector as pu, wafeqConnector as q, qdrantConnector as qa, invoiceninjaConnector as qc, deepgramConnector as qd, chatlingConnector as qi, etsyConnector as ql, mixpanelConnector as qn, klaviyoConnector as qo, googleSearchConnector as qr, createRedshiftConnector as qs, quadernoConnector as qt, zoominfoConnector as qu, resendConnector as r, bookedinConnector as ra, plaidConnector as rc, ripplingConnector as rd, chatAidConnector as rf, formbricksConnector as ri, googlechatConnector as rl, plausibleConnector as rn, sendgridConnector as ro, matomoConnector as rr, pricelabsConnector as rs, upgradechatConnector as rt, taxjarConnector as ru, getresponseConnector as s, bitlyConnector as sa, oneSpanSignConnector as sc, paychexConnector as sd, cartloomConnector as sf, enrichlayerConnector as si, googleSearchConsoleConnector as sl, peekshotConnector as sn, facebookPagesConnector as so, lushaConnector as sr, zendeskConnector as ss, totalcmsConnector as st, contentfulConnector as su, adapters_exports as t, brilliantDirectoriesConnector as ta, pipedriveConnector as tc, sendpulseConnector as td, claudeConnector as tf, fountainConnector as ti, hellosign as tl, pollybotAiConnector as tn, sentryConnector as to, mailgunConnector as tr, zohoCrmConnector as ts, validatedmailsConnector as tt, circleConnector as tu, nooksConnector as u, beamerConnector as ua, ninjapipeConnector as uc, niftyConnector as ud, bikaConnector as uf, esignaturesConnector as ui, googleForms as ul, paywhirlConnector as un, slackEventsConnector as uo, logrocketConnector as ur, wrikeConnector as us, timeOpsConnector as ut, cloudinaryConnector as uu, brightdataConnector as v, ashbyConnector as va, mondayConnector as vc, formstackConnector as vd, aianswerConnector as vf, dubConnector as vi, pinterestAdsConnector as vl, opportifyConnector as vn, neverbounceConnector as vo, linkupConnector as vr, tiktokConnector as vs, supadataConnector as vt, billplzConnector as vu, leadfeederConnector as w, apitableConnector as wa, microsoftPowerBiConnector as wc, clicdataConnector as wd, oktaConnector as wf, descriptConnector as wi, metaAdsConnector as wl, nocodbConnector as wn, createMySqlConnector as wo, koFiConnector as wr, todoistConnector as ws, simplirouteConnector as wt, backblazeConnector as wu, autoboundConnector as x, semrushConnector as xa, meetgeekAiConnector as xc, constantContactConnector as xd, pingIdentityConnector as xf, documergeConnector as xi, linkedinAdsConnector as xl, omniCoConnector as xn, builtwithConnector as xo, kommoConnector as xr, typeformConnector as xs, smartsuiteConnector as xt, baremetricsConnector as xu, leadmagicConnector as y, clayConnector as ya, miroConnector as yc, discordConnector as yd, actualbudgetConnector as yf, dumplingAiConnector as yi, snapchatAdsConnector as yl, openRouterConnector as yn, hunterConnector as yo, lettaConnector as yr, twitter as ys, socialkitConnector as yt, billComConnector as yu, workableConnector as z, afforaiConnector as za, leadConnectorConnector as zc, excelFilesConnector as zd, clearoutConnector as zi, folkConnector as zl, griptapeConnector as zn, matrixConnector as zo, housecallProConnector as zr, sftpConnector as zs, robollyConnector as zt, amazonLambdaConnector as zu };
194439
195328
 
194440
- //# sourceMappingURL=adapters-BM6A29Y6.js.map
195329
+ //# sourceMappingURL=adapters-Cyo2DsIw.js.map