@tangle-network/agent-integrations 0.69.0 → 0.71.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.
- package/data/bundled-adapter-manifests.json +1 -1
- package/dist/{adapters-JMJ8fU1b.js → adapters-CURjrtYm.js} +1033 -19
- package/dist/{adapters-JMJ8fU1b.js.map → adapters-CURjrtYm.js.map} +1 -1
- package/dist/{bundled-manifest-data-Bv0ejHMQ.js → bundled-manifest-data-DUxxlN37.js} +447 -2
- package/dist/{bundled-manifest-data-Bv0ejHMQ.js.map → bundled-manifest-data-DUxxlN37.js.map} +1 -1
- package/dist/connectors/adapters/index.d.ts +2 -2
- package/dist/connectors/adapters/index.js +2 -2
- package/dist/connectors/index.d.ts +3 -3
- package/dist/connectors/index.js +3 -3
- package/dist/{consumer-BvaFhBN_.d.ts → consumer-DaKqPDG-.d.ts} +2 -2
- package/dist/{consumer-BvaFhBN_.d.ts.map → consumer-DaKqPDG-.d.ts.map} +1 -1
- package/dist/consumer.d.ts +1 -1
- package/dist/{index-D0uvn67q.d.ts → index-b05PzTtX.d.ts} +2 -2
- package/dist/{index-D0uvn67q.d.ts.map → index-b05PzTtX.d.ts.map} +1 -1
- package/dist/{index-DkNU5tcV.d.ts → index-udV3gGjx.d.ts} +14 -2
- package/dist/index-udV3gGjx.d.ts.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +5 -5
- package/dist/internal/bundled-manifest-runtime.js +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.js +1 -1
- package/dist/registry.js +1 -1
- package/dist/runtime.d.ts +1 -1
- package/dist/sandbox.d.ts +1 -1
- package/dist/{specs-BqZdi7Jk.js → specs-61KwR2bK.js} +2 -2
- package/dist/{specs-BqZdi7Jk.js.map → specs-61KwR2bK.js.map} +1 -1
- package/dist/specs.js +1 -1
- package/dist/{src-BFIGHp-s.js → src-iUK2d9AZ.js} +3 -3
- package/dist/{src-BFIGHp-s.js.map → src-iUK2d9AZ.js.map} +1 -1
- package/dist/triggers/index.d.ts +78 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +730 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/webhooks/index.d.ts +1 -1
- package/dist/webhooks/index.d.ts.map +1 -1
- package/dist/webhooks/index.js +76 -1
- package/dist/webhooks/index.js.map +1 -1
- package/docs/integration-execution-audit.md +17 -8
- package/docs/integration-execution-matrix.json +537 -28
- package/package.json +6 -1
- package/dist/index-DkNU5tcV.d.ts.map +0 -1
|
@@ -12186,7 +12186,7 @@ async function request$2(source, url, body) {
|
|
|
12186
12186
|
}),
|
|
12187
12187
|
signal: AbortSignal.timeout(2e4)
|
|
12188
12188
|
});
|
|
12189
|
-
const responseBody = await readBody$
|
|
12189
|
+
const responseBody = await readBody$3(response);
|
|
12190
12190
|
if (response.status === 401 || response.status === 403) throw new CredentialsExpired(`ModelsLab rejected credentials (${response.status})`, source.id);
|
|
12191
12191
|
if (response.status === 429) throw new ProviderRateLimited("ModelsLab rate limit (429)", source.id, {
|
|
12192
12192
|
status: 429,
|
|
@@ -12209,7 +12209,7 @@ function requiredString$7(args, key) {
|
|
|
12209
12209
|
function pick$1(args, keys) {
|
|
12210
12210
|
return Object.fromEntries(keys.filter((key) => args[key] !== void 0).map((key) => [key, args[key]]));
|
|
12211
12211
|
}
|
|
12212
|
-
async function readBody$
|
|
12212
|
+
async function readBody$3(response) {
|
|
12213
12213
|
const text = await response.text();
|
|
12214
12214
|
if (!text) return null;
|
|
12215
12215
|
try {
|
|
@@ -61524,6 +61524,12 @@ const helpscoutConnector = declarativeRestConnector({
|
|
|
61524
61524
|
* POST /crm/v3/objects/contacts/search with an email-equality filter.
|
|
61525
61525
|
* Cheap, idempotent, no CAS needed (read).
|
|
61526
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
|
+
*
|
|
61527
61533
|
* upsert_contact(email, properties)
|
|
61528
61534
|
* → {contactId, created}
|
|
61529
61535
|
* Mutation. CAS strategy = native-idempotency, BUT: HubSpot's
|
|
@@ -61595,6 +61601,58 @@ function hubspot(opts) {
|
|
|
61595
61601
|
required: ["email"]
|
|
61596
61602
|
}
|
|
61597
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
|
+
},
|
|
61630
|
+
{
|
|
61631
|
+
name: "list_new_deals",
|
|
61632
|
+
class: "read",
|
|
61633
|
+
description: "List deals created at or after a time, oldest first: id, name, stage, pipeline, amount and creation time. Page with the returned `after` cursor.",
|
|
61634
|
+
requiredScopes: ["crm.objects.deals.read"],
|
|
61635
|
+
parameters: {
|
|
61636
|
+
type: "object",
|
|
61637
|
+
properties: {
|
|
61638
|
+
createdAfter: {
|
|
61639
|
+
type: "string",
|
|
61640
|
+
description: "ISO-8601 time; deals created at or after it."
|
|
61641
|
+
},
|
|
61642
|
+
limit: {
|
|
61643
|
+
type: "integer",
|
|
61644
|
+
minimum: 1,
|
|
61645
|
+
maximum: 100,
|
|
61646
|
+
default: 50
|
|
61647
|
+
},
|
|
61648
|
+
after: {
|
|
61649
|
+
type: "string",
|
|
61650
|
+
description: "Paging cursor from a previous call."
|
|
61651
|
+
}
|
|
61652
|
+
},
|
|
61653
|
+
required: ["createdAfter"]
|
|
61654
|
+
}
|
|
61655
|
+
},
|
|
61598
61656
|
{
|
|
61599
61657
|
name: "upsert_contact",
|
|
61600
61658
|
class: "mutation",
|
|
@@ -61744,6 +61802,8 @@ function hubspot(opts) {
|
|
|
61744
61802
|
]
|
|
61745
61803
|
},
|
|
61746
61804
|
async executeRead(inv) {
|
|
61805
|
+
if (inv.capabilityName === "list_new_contacts") return listNewContacts(inv, await ensureFreshAccessToken$7(inv.source.credentials, clientId, clientSecret));
|
|
61806
|
+
if (inv.capabilityName === "list_new_deals") return listNewDeals(inv, await ensureFreshAccessToken$7(inv.source.credentials, clientId, clientSecret));
|
|
61747
61807
|
if (inv.capabilityName !== "find_contact") throw new Error(`hubspot: unknown read capability ${inv.capabilityName}`);
|
|
61748
61808
|
const { email } = inv.args;
|
|
61749
61809
|
const accessToken = await ensureFreshAccessToken$7(inv.source.credentials, clientId, clientSecret);
|
|
@@ -62083,6 +62143,105 @@ async function ensureFreshAccessToken$7(creds, clientId, clientSecret) {
|
|
|
62083
62143
|
if (refreshed.refreshToken) creds.refreshToken = refreshed.refreshToken;
|
|
62084
62144
|
return creds.accessToken;
|
|
62085
62145
|
}
|
|
62146
|
+
const NEW_DEAL_PROPERTIES = [
|
|
62147
|
+
"dealname",
|
|
62148
|
+
"dealstage",
|
|
62149
|
+
"pipeline",
|
|
62150
|
+
"amount",
|
|
62151
|
+
"createdate",
|
|
62152
|
+
"hubspot_owner_id"
|
|
62153
|
+
];
|
|
62154
|
+
/** Objects created since a time, oldest first, through the CRM search endpoint. */
|
|
62155
|
+
async function searchCreatedSince(inv, accessToken, object, properties, label) {
|
|
62156
|
+
const { createdAfter, limit, after } = inv.args;
|
|
62157
|
+
const since = Date.parse(createdAfter);
|
|
62158
|
+
if (!Number.isFinite(since)) throw new Error(`hubspot ${label}: createdAfter must be an ISO-8601 time`);
|
|
62159
|
+
const res = await fetch(`${API$9}/crm/v3/objects/${object}/search`, {
|
|
62160
|
+
method: "POST",
|
|
62161
|
+
headers: {
|
|
62162
|
+
authorization: `Bearer ${accessToken}`,
|
|
62163
|
+
"content-type": "application/json"
|
|
62164
|
+
},
|
|
62165
|
+
body: JSON.stringify({
|
|
62166
|
+
filterGroups: [{ filters: [{
|
|
62167
|
+
propertyName: "createdate",
|
|
62168
|
+
operator: "GTE",
|
|
62169
|
+
value: String(since)
|
|
62170
|
+
}] }],
|
|
62171
|
+
sorts: [{
|
|
62172
|
+
propertyName: "createdate",
|
|
62173
|
+
direction: "ASCENDING"
|
|
62174
|
+
}],
|
|
62175
|
+
properties,
|
|
62176
|
+
limit: Math.min(Math.max(limit ?? 50, 1), 100),
|
|
62177
|
+
...after ? { after } : {}
|
|
62178
|
+
}),
|
|
62179
|
+
signal: AbortSignal.timeout(1e4)
|
|
62180
|
+
});
|
|
62181
|
+
if (res.status === 401) throw new CredentialsExpired(`HubSpot rejected token (401)`, inv.source.id);
|
|
62182
|
+
if (!res.ok) {
|
|
62183
|
+
const text = await res.text().catch(() => "");
|
|
62184
|
+
throw new Error(`hubspot ${label} ${res.status}: ${text.slice(0, 200)}`);
|
|
62185
|
+
}
|
|
62186
|
+
const json = await res.json();
|
|
62187
|
+
return {
|
|
62188
|
+
results: json.results ?? [],
|
|
62189
|
+
after: json.paging?.next?.after ?? null
|
|
62190
|
+
};
|
|
62191
|
+
}
|
|
62192
|
+
async function listNewDeals(inv, accessToken) {
|
|
62193
|
+
const { results, after } = await searchCreatedSince(inv, accessToken, "deals", NEW_DEAL_PROPERTIES, "list_new_deals");
|
|
62194
|
+
return {
|
|
62195
|
+
data: {
|
|
62196
|
+
deals: results.map((row) => {
|
|
62197
|
+
const props = row.properties ?? {};
|
|
62198
|
+
return {
|
|
62199
|
+
id: row.id,
|
|
62200
|
+
name: props.dealname ?? null,
|
|
62201
|
+
stage: props.dealstage ?? null,
|
|
62202
|
+
pipeline: props.pipeline ?? null,
|
|
62203
|
+
amount: props.amount ?? null,
|
|
62204
|
+
ownerId: props.hubspot_owner_id ?? null,
|
|
62205
|
+
createdAt: props.createdate ?? row.createdAt ?? null
|
|
62206
|
+
};
|
|
62207
|
+
}),
|
|
62208
|
+
after
|
|
62209
|
+
},
|
|
62210
|
+
fetchedAt: Date.now()
|
|
62211
|
+
};
|
|
62212
|
+
}
|
|
62213
|
+
const NEW_CONTACT_PROPERTIES = [
|
|
62214
|
+
"email",
|
|
62215
|
+
"firstname",
|
|
62216
|
+
"lastname",
|
|
62217
|
+
"company",
|
|
62218
|
+
"jobtitle",
|
|
62219
|
+
"lifecyclestage",
|
|
62220
|
+
"hs_analytics_source",
|
|
62221
|
+
"createdate"
|
|
62222
|
+
];
|
|
62223
|
+
async function listNewContacts(inv, accessToken) {
|
|
62224
|
+
const { results, after } = await searchCreatedSince(inv, accessToken, "contacts", NEW_CONTACT_PROPERTIES, "list_new_contacts");
|
|
62225
|
+
return {
|
|
62226
|
+
data: {
|
|
62227
|
+
contacts: results.map((row) => {
|
|
62228
|
+
const props = row.properties ?? {};
|
|
62229
|
+
return {
|
|
62230
|
+
id: row.id,
|
|
62231
|
+
email: props.email ?? null,
|
|
62232
|
+
name: [props.firstname, props.lastname].filter(Boolean).join(" ") || null,
|
|
62233
|
+
company: props.company ?? null,
|
|
62234
|
+
jobTitle: props.jobtitle ?? null,
|
|
62235
|
+
lifecycleStage: props.lifecyclestage ?? null,
|
|
62236
|
+
source: props.hs_analytics_source ?? null,
|
|
62237
|
+
createdAt: props.createdate ?? row.createdAt ?? null
|
|
62238
|
+
};
|
|
62239
|
+
}),
|
|
62240
|
+
after
|
|
62241
|
+
},
|
|
62242
|
+
fetchedAt: Date.now()
|
|
62243
|
+
};
|
|
62244
|
+
}
|
|
62086
62245
|
//#endregion
|
|
62087
62246
|
//#region src/connectors/adapters/public-http-target.ts
|
|
62088
62247
|
/** Reject literal local/private HTTP targets before a universal connector calls fetch. */
|
|
@@ -78973,6 +79132,83 @@ const pipedriveConnector = declarativeRestConnector({
|
|
|
78973
79132
|
path: "/v1/users/me"
|
|
78974
79133
|
},
|
|
78975
79134
|
capabilities: [
|
|
79135
|
+
{
|
|
79136
|
+
name: "deals.list",
|
|
79137
|
+
class: "read",
|
|
79138
|
+
description: "List deals, newest first by default (`sort: \"add_time DESC\"`), with offset paging via `start`.",
|
|
79139
|
+
parameters: {
|
|
79140
|
+
type: "object",
|
|
79141
|
+
properties: {
|
|
79142
|
+
sort: {
|
|
79143
|
+
type: "string",
|
|
79144
|
+
description: "Pipedrive sort expression, e.g. \"add_time DESC\"."
|
|
79145
|
+
},
|
|
79146
|
+
status: {
|
|
79147
|
+
type: "string",
|
|
79148
|
+
enum: [
|
|
79149
|
+
"open",
|
|
79150
|
+
"won",
|
|
79151
|
+
"lost",
|
|
79152
|
+
"deleted",
|
|
79153
|
+
"all_not_deleted"
|
|
79154
|
+
]
|
|
79155
|
+
},
|
|
79156
|
+
start: {
|
|
79157
|
+
type: "integer",
|
|
79158
|
+
minimum: 0
|
|
79159
|
+
},
|
|
79160
|
+
limit: {
|
|
79161
|
+
type: "integer",
|
|
79162
|
+
minimum: 1,
|
|
79163
|
+
maximum: 500
|
|
79164
|
+
}
|
|
79165
|
+
}
|
|
79166
|
+
},
|
|
79167
|
+
request: {
|
|
79168
|
+
method: "GET",
|
|
79169
|
+
path: "/v1/deals",
|
|
79170
|
+
query: {
|
|
79171
|
+
sort: "{sort}",
|
|
79172
|
+
status: "{status}",
|
|
79173
|
+
start: "{start}",
|
|
79174
|
+
limit: "{limit}"
|
|
79175
|
+
}
|
|
79176
|
+
},
|
|
79177
|
+
requiredScopes: ["deals:full"]
|
|
79178
|
+
},
|
|
79179
|
+
{
|
|
79180
|
+
name: "persons.list",
|
|
79181
|
+
class: "read",
|
|
79182
|
+
description: "List persons, newest first by default (`sort: \"add_time DESC\"`), with offset paging via `start`.",
|
|
79183
|
+
parameters: {
|
|
79184
|
+
type: "object",
|
|
79185
|
+
properties: {
|
|
79186
|
+
sort: {
|
|
79187
|
+
type: "string",
|
|
79188
|
+
description: "Pipedrive sort expression, e.g. \"add_time DESC\"."
|
|
79189
|
+
},
|
|
79190
|
+
start: {
|
|
79191
|
+
type: "integer",
|
|
79192
|
+
minimum: 0
|
|
79193
|
+
},
|
|
79194
|
+
limit: {
|
|
79195
|
+
type: "integer",
|
|
79196
|
+
minimum: 1,
|
|
79197
|
+
maximum: 500
|
|
79198
|
+
}
|
|
79199
|
+
}
|
|
79200
|
+
},
|
|
79201
|
+
request: {
|
|
79202
|
+
method: "GET",
|
|
79203
|
+
path: "/v1/persons",
|
|
79204
|
+
query: {
|
|
79205
|
+
sort: "{sort}",
|
|
79206
|
+
start: "{start}",
|
|
79207
|
+
limit: "{limit}"
|
|
79208
|
+
}
|
|
79209
|
+
},
|
|
79210
|
+
requiredScopes: ["contacts:full"]
|
|
79211
|
+
},
|
|
78976
79212
|
{
|
|
78977
79213
|
name: "deals.search",
|
|
78978
79214
|
class: "read",
|
|
@@ -86856,7 +87092,9 @@ const squareConnector = declarativeRestConnector({
|
|
|
86856
87092
|
* `stripe-checkout`, `stripe-invoices`, `stripe-subscriptions` n-tuples.
|
|
86857
87093
|
*
|
|
86858
87094
|
* find_customer(email) → read; CAS n/a
|
|
87095
|
+
* retrieve_customer(customerId) → read; CAS n/a
|
|
86859
87096
|
* list_subscriptions(customerId, status?) → read; CAS n/a
|
|
87097
|
+
* list_signup_events(createdGte?, types?) → read; CAS n/a
|
|
86860
87098
|
* create_invoice(customerId, items) → mutation; cas: 'native-idempotency'
|
|
86861
87099
|
* create_checkout_session(...) → mutation; cas: 'native-idempotency'
|
|
86862
87100
|
* cancel_subscription(subscriptionId, atPeriodEnd?) → mutation; cas: 'native-idempotency'
|
|
@@ -86880,6 +87118,12 @@ const squareConnector = declarativeRestConnector({
|
|
|
86880
87118
|
* own dedup is the second line of defense.
|
|
86881
87119
|
*/
|
|
86882
87120
|
const API$4 = "https://api.stripe.com/v1";
|
|
87121
|
+
/** Stripe events that mean a new customer: an account, a purchase, or a subscription or trial. */
|
|
87122
|
+
const SIGNUP_EVENT_TYPES = [
|
|
87123
|
+
"customer.created",
|
|
87124
|
+
"checkout.session.completed",
|
|
87125
|
+
"customer.subscription.created"
|
|
87126
|
+
];
|
|
86883
87127
|
const stripePackConnector = {
|
|
86884
87128
|
manifest: {
|
|
86885
87129
|
kind: "stripe-pack",
|
|
@@ -86887,7 +87131,7 @@ const stripePackConnector = {
|
|
|
86887
87131
|
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.",
|
|
86888
87132
|
auth: {
|
|
86889
87133
|
kind: "api-key",
|
|
86890
|
-
hint: "Paste a Stripe restricted key (rk_live_…) with read on customers + subscriptions and write on invoices + checkout + subscriptions + billing portal."
|
|
87134
|
+
hint: "Paste a Stripe restricted key (rk_live_…) with read on customers + subscriptions + events and write on invoices + checkout + subscriptions + billing portal."
|
|
86891
87135
|
},
|
|
86892
87136
|
category: "commerce",
|
|
86893
87137
|
defaultConsistencyModel: "authoritative",
|
|
@@ -86902,6 +87146,52 @@ const stripePackConnector = {
|
|
|
86902
87146
|
required: ["email"]
|
|
86903
87147
|
}
|
|
86904
87148
|
},
|
|
87149
|
+
{
|
|
87150
|
+
name: "retrieve_customer",
|
|
87151
|
+
class: "read",
|
|
87152
|
+
description: "Read one Stripe customer by id (cus_...): email, name and creation time.",
|
|
87153
|
+
parameters: {
|
|
87154
|
+
type: "object",
|
|
87155
|
+
properties: { customerId: {
|
|
87156
|
+
type: "string",
|
|
87157
|
+
pattern: "^cus_[A-Za-z0-9]+$"
|
|
87158
|
+
} },
|
|
87159
|
+
required: ["customerId"]
|
|
87160
|
+
}
|
|
87161
|
+
},
|
|
87162
|
+
{
|
|
87163
|
+
name: "list_signup_events",
|
|
87164
|
+
class: "read",
|
|
87165
|
+
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.",
|
|
87166
|
+
parameters: {
|
|
87167
|
+
type: "object",
|
|
87168
|
+
properties: {
|
|
87169
|
+
createdGte: {
|
|
87170
|
+
type: "integer",
|
|
87171
|
+
minimum: 0,
|
|
87172
|
+
description: "Unix seconds; events created at or after this time."
|
|
87173
|
+
},
|
|
87174
|
+
types: {
|
|
87175
|
+
type: "array",
|
|
87176
|
+
items: {
|
|
87177
|
+
type: "string",
|
|
87178
|
+
enum: SIGNUP_EVENT_TYPES
|
|
87179
|
+
},
|
|
87180
|
+
description: "Default: all three types."
|
|
87181
|
+
},
|
|
87182
|
+
limit: {
|
|
87183
|
+
type: "integer",
|
|
87184
|
+
minimum: 1,
|
|
87185
|
+
maximum: 100,
|
|
87186
|
+
default: 50
|
|
87187
|
+
},
|
|
87188
|
+
startingAfter: {
|
|
87189
|
+
type: "string",
|
|
87190
|
+
description: "Event id cursor from a previous page."
|
|
87191
|
+
}
|
|
87192
|
+
}
|
|
87193
|
+
}
|
|
87194
|
+
},
|
|
86905
87195
|
{
|
|
86906
87196
|
name: "list_subscriptions",
|
|
86907
87197
|
class: "read",
|
|
@@ -87145,6 +87435,8 @@ const stripePackConnector = {
|
|
|
87145
87435
|
async executeRead(inv) {
|
|
87146
87436
|
const apiKey = readApiKey(inv.source.credentials);
|
|
87147
87437
|
if (inv.capabilityName === "list_subscriptions") return listSubscriptions(inv, apiKey);
|
|
87438
|
+
if (inv.capabilityName === "retrieve_customer") return retrieveCustomer(inv, apiKey);
|
|
87439
|
+
if (inv.capabilityName === "list_signup_events") return listSignupEvents(inv, apiKey);
|
|
87148
87440
|
if (inv.capabilityName !== "find_customer") throw new Error(`stripe-pack: unknown read capability ${inv.capabilityName}`);
|
|
87149
87441
|
const { email } = inv.args;
|
|
87150
87442
|
const url = `${API$4}/customers/search?query=${encodeURIComponent(`email:'${email.toLowerCase()}'`)}&limit=1`;
|
|
@@ -87309,6 +87601,78 @@ async function createCheckoutSession(inv, apiKey) {
|
|
|
87309
87601
|
idempotentReplay: false
|
|
87310
87602
|
};
|
|
87311
87603
|
}
|
|
87604
|
+
async function stripeGet(inv, apiKey, path, label) {
|
|
87605
|
+
const res = await fetch(`${API$4}${path}`, {
|
|
87606
|
+
headers: { authorization: `Bearer ${apiKey}` },
|
|
87607
|
+
signal: AbortSignal.timeout(1e4)
|
|
87608
|
+
});
|
|
87609
|
+
if (res.status === 401) throw new CredentialsExpired("Stripe rejected API key (401)", inv.source.id);
|
|
87610
|
+
if (!res.ok) {
|
|
87611
|
+
const text = await res.text().catch(() => "");
|
|
87612
|
+
throw new Error(`stripe-pack ${label} ${res.status}: ${text.slice(0, 200)}`);
|
|
87613
|
+
}
|
|
87614
|
+
return res.json();
|
|
87615
|
+
}
|
|
87616
|
+
async function retrieveCustomer(inv, apiKey) {
|
|
87617
|
+
const { customerId } = inv.args;
|
|
87618
|
+
if (!/^cus_[A-Za-z0-9]+$/.test(customerId ?? "")) throw new Error("stripe-pack retrieve_customer: customerId must be a cus_ id");
|
|
87619
|
+
const customer = await stripeGet(inv, apiKey, `/customers/${encodeURIComponent(customerId)}`, "retrieve_customer");
|
|
87620
|
+
return {
|
|
87621
|
+
data: customer.deleted ? { found: false } : {
|
|
87622
|
+
found: true,
|
|
87623
|
+
customer: {
|
|
87624
|
+
id: customer.id,
|
|
87625
|
+
email: customer.email ?? null,
|
|
87626
|
+
name: customer.name ?? null,
|
|
87627
|
+
created: customer.created ?? null
|
|
87628
|
+
}
|
|
87629
|
+
},
|
|
87630
|
+
fetchedAt: Date.now()
|
|
87631
|
+
};
|
|
87632
|
+
}
|
|
87633
|
+
async function listSignupEvents(inv, apiKey) {
|
|
87634
|
+
const args = inv.args;
|
|
87635
|
+
const types = args.types && args.types.length > 0 ? args.types : SIGNUP_EVENT_TYPES;
|
|
87636
|
+
const unknown = types.filter((type) => !SIGNUP_EVENT_TYPES.includes(type));
|
|
87637
|
+
if (unknown.length > 0) throw new Error(`stripe-pack list_signup_events: unsupported event types ${unknown.join(", ")}`);
|
|
87638
|
+
const params = new URLSearchParams({ limit: String(Math.min(Math.max(args.limit ?? 50, 1), 100)) });
|
|
87639
|
+
for (const type of types) params.append("types[]", type);
|
|
87640
|
+
if (typeof args.createdGte === "number") params.set("created[gte]", String(Math.floor(args.createdGte)));
|
|
87641
|
+
if (args.startingAfter) params.set("starting_after", args.startingAfter);
|
|
87642
|
+
const json = await stripeGet(inv, apiKey, `/events?${params.toString()}`, "list_signup_events");
|
|
87643
|
+
return {
|
|
87644
|
+
data: {
|
|
87645
|
+
events: (json.data ?? []).map((event) => {
|
|
87646
|
+
const object = event.data?.object ?? {};
|
|
87647
|
+
const isCustomer = object.object === "customer";
|
|
87648
|
+
return {
|
|
87649
|
+
id: event.id,
|
|
87650
|
+
type: event.type,
|
|
87651
|
+
created: event.created,
|
|
87652
|
+
livemode: event.livemode ?? null,
|
|
87653
|
+
customer: {
|
|
87654
|
+
id: isCustomer ? object.id ?? null : typeof object.customer === "string" ? object.customer : null,
|
|
87655
|
+
email: (isCustomer ? object.email : object.customer_details?.email ?? object.customer_email) ?? null,
|
|
87656
|
+
name: (isCustomer ? object.name : object.customer_details?.name) ?? null
|
|
87657
|
+
},
|
|
87658
|
+
...object.object === "checkout.session" ? { checkout: {
|
|
87659
|
+
id: object.id ?? null,
|
|
87660
|
+
amountTotal: object.amount_total ?? null,
|
|
87661
|
+
currency: object.currency ?? null,
|
|
87662
|
+
mode: object.mode ?? null
|
|
87663
|
+
} } : {},
|
|
87664
|
+
...object.object === "subscription" ? { subscription: {
|
|
87665
|
+
id: object.id ?? null,
|
|
87666
|
+
status: object.status ?? null,
|
|
87667
|
+
trialEnd: object.trial_end ?? null
|
|
87668
|
+
} } : {}
|
|
87669
|
+
};
|
|
87670
|
+
}).reverse(),
|
|
87671
|
+
hasMore: json.has_more ?? false
|
|
87672
|
+
},
|
|
87673
|
+
fetchedAt: Date.now()
|
|
87674
|
+
};
|
|
87675
|
+
}
|
|
87312
87676
|
async function listSubscriptions(inv, apiKey) {
|
|
87313
87677
|
const { customerId, status, limit } = inv.args;
|
|
87314
87678
|
const params = new URLSearchParams({
|
|
@@ -96299,7 +96663,7 @@ async function request$1(source, path, options) {
|
|
|
96299
96663
|
body: "body" in options ? options.body : void 0,
|
|
96300
96664
|
signal: AbortSignal.timeout(15e3)
|
|
96301
96665
|
});
|
|
96302
|
-
const responseBody = await readBody$
|
|
96666
|
+
const responseBody = await readBody$2(response);
|
|
96303
96667
|
if (response.status === 401) throw new CredentialsExpired("Zoho Bookings rejected OAuth credentials (401)", source.id, {
|
|
96304
96668
|
status: 401,
|
|
96305
96669
|
body: responseBody
|
|
@@ -96312,7 +96676,7 @@ async function request$1(source, path, options) {
|
|
|
96312
96676
|
if (!response.ok) throw new Error(`zoho-bookings ${options.method} ${path} HTTP ${response.status}`);
|
|
96313
96677
|
return responseBody;
|
|
96314
96678
|
}
|
|
96315
|
-
async function readBody$
|
|
96679
|
+
async function readBody$2(response) {
|
|
96316
96680
|
const text = await response.text();
|
|
96317
96681
|
if (!text) return null;
|
|
96318
96682
|
try {
|
|
@@ -96967,7 +97331,7 @@ const pricelabsConnector = {
|
|
|
96967
97331
|
};
|
|
96968
97332
|
//#endregion
|
|
96969
97333
|
//#region src/connectors/adapters/zoho-desk.ts
|
|
96970
|
-
const orgId = {
|
|
97334
|
+
const orgId$1 = {
|
|
96971
97335
|
type: "string",
|
|
96972
97336
|
description: "Zoho Desk organization id. Discover it with organizations.list."
|
|
96973
97337
|
};
|
|
@@ -97044,7 +97408,7 @@ const zohoDeskConnector = declarativeRestConnector({
|
|
|
97044
97408
|
parameters: {
|
|
97045
97409
|
type: "object",
|
|
97046
97410
|
properties: {
|
|
97047
|
-
orgId,
|
|
97411
|
+
orgId: orgId$1,
|
|
97048
97412
|
include: {
|
|
97049
97413
|
type: "string",
|
|
97050
97414
|
description: "Comma-separated related objects to include."
|
|
@@ -97084,7 +97448,7 @@ const zohoDeskConnector = declarativeRestConnector({
|
|
|
97084
97448
|
parameters: {
|
|
97085
97449
|
type: "object",
|
|
97086
97450
|
properties: {
|
|
97087
|
-
orgId,
|
|
97451
|
+
orgId: orgId$1,
|
|
97088
97452
|
ticketId: { type: "string" }
|
|
97089
97453
|
},
|
|
97090
97454
|
required: ["orgId", "ticketId"]
|
|
@@ -97103,7 +97467,7 @@ const zohoDeskConnector = declarativeRestConnector({
|
|
|
97103
97467
|
parameters: {
|
|
97104
97468
|
type: "object",
|
|
97105
97469
|
properties: {
|
|
97106
|
-
orgId,
|
|
97470
|
+
orgId: orgId$1,
|
|
97107
97471
|
data: data$2
|
|
97108
97472
|
},
|
|
97109
97473
|
required: ["orgId", "data"]
|
|
@@ -97125,7 +97489,7 @@ const zohoDeskConnector = declarativeRestConnector({
|
|
|
97125
97489
|
parameters: {
|
|
97126
97490
|
type: "object",
|
|
97127
97491
|
properties: {
|
|
97128
|
-
orgId,
|
|
97492
|
+
orgId: orgId$1,
|
|
97129
97493
|
ticketId: { type: "string" },
|
|
97130
97494
|
data: data$2
|
|
97131
97495
|
},
|
|
@@ -97152,7 +97516,7 @@ const zohoDeskConnector = declarativeRestConnector({
|
|
|
97152
97516
|
parameters: {
|
|
97153
97517
|
type: "object",
|
|
97154
97518
|
properties: {
|
|
97155
|
-
orgId,
|
|
97519
|
+
orgId: orgId$1,
|
|
97156
97520
|
ticketId: { type: "string" }
|
|
97157
97521
|
},
|
|
97158
97522
|
required: ["orgId", "ticketId"]
|
|
@@ -97174,7 +97538,7 @@ const zohoDeskConnector = declarativeRestConnector({
|
|
|
97174
97538
|
parameters: {
|
|
97175
97539
|
type: "object",
|
|
97176
97540
|
properties: {
|
|
97177
|
-
orgId,
|
|
97541
|
+
orgId: orgId$1,
|
|
97178
97542
|
ticketId: { type: "string" },
|
|
97179
97543
|
assigneeId: { type: "string" }
|
|
97180
97544
|
},
|
|
@@ -97201,7 +97565,7 @@ const zohoDeskConnector = declarativeRestConnector({
|
|
|
97201
97565
|
parameters: {
|
|
97202
97566
|
type: "object",
|
|
97203
97567
|
properties: {
|
|
97204
|
-
orgId,
|
|
97568
|
+
orgId: orgId$1,
|
|
97205
97569
|
ticketId: { type: "string" },
|
|
97206
97570
|
content: { type: "string" },
|
|
97207
97571
|
isPublic: { type: "boolean" },
|
|
@@ -97238,7 +97602,7 @@ const zohoDeskConnector = declarativeRestConnector({
|
|
|
97238
97602
|
parameters: {
|
|
97239
97603
|
type: "object",
|
|
97240
97604
|
properties: {
|
|
97241
|
-
orgId,
|
|
97605
|
+
orgId: orgId$1,
|
|
97242
97606
|
ticketId: {
|
|
97243
97607
|
type: "string",
|
|
97244
97608
|
description: "Primary ticket id."
|
|
@@ -97272,7 +97636,7 @@ const zohoDeskConnector = declarativeRestConnector({
|
|
|
97272
97636
|
parameters: {
|
|
97273
97637
|
type: "object",
|
|
97274
97638
|
properties: {
|
|
97275
|
-
orgId,
|
|
97639
|
+
orgId: orgId$1,
|
|
97276
97640
|
email: { type: "string" }
|
|
97277
97641
|
},
|
|
97278
97642
|
required: ["orgId", "email"]
|
|
@@ -98369,7 +98733,7 @@ async function request(source, path, options) {
|
|
|
98369
98733
|
body: "body" in options ? options.body : void 0,
|
|
98370
98734
|
signal: AbortSignal.timeout(15e3)
|
|
98371
98735
|
});
|
|
98372
|
-
const responseBody = await readBody(response);
|
|
98736
|
+
const responseBody = await readBody$1(response);
|
|
98373
98737
|
if (response.status === 401) throw new CredentialsExpired("Zoho Campaigns rejected OAuth credentials (401)", source.id, {
|
|
98374
98738
|
status: 401,
|
|
98375
98739
|
body: responseBody
|
|
@@ -98385,7 +98749,7 @@ async function request(source, path, options) {
|
|
|
98385
98749
|
if (!response.ok) throw new Error(`zoho-campaigns ${options.method} ${path} HTTP ${response.status}`);
|
|
98386
98750
|
return responseBody;
|
|
98387
98751
|
}
|
|
98388
|
-
async function readBody(response) {
|
|
98752
|
+
async function readBody$1(response) {
|
|
98389
98753
|
const text = await response.text();
|
|
98390
98754
|
if (!text) return null;
|
|
98391
98755
|
try {
|
|
@@ -109996,6 +110360,49 @@ const githubConnector = declarativeRestConnector({
|
|
|
109996
110360
|
path: "/repos/{owner}/{repo}"
|
|
109997
110361
|
}
|
|
109998
110362
|
},
|
|
110363
|
+
{
|
|
110364
|
+
name: "repos.listForAuthenticatedUser",
|
|
110365
|
+
class: "read",
|
|
110366
|
+
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.",
|
|
110367
|
+
parameters: {
|
|
110368
|
+
type: "object",
|
|
110369
|
+
properties: {
|
|
110370
|
+
sort: {
|
|
110371
|
+
type: "string",
|
|
110372
|
+
enum: [
|
|
110373
|
+
"created",
|
|
110374
|
+
"updated",
|
|
110375
|
+
"pushed",
|
|
110376
|
+
"full_name"
|
|
110377
|
+
]
|
|
110378
|
+
},
|
|
110379
|
+
affiliation: {
|
|
110380
|
+
type: "string",
|
|
110381
|
+
description: "Comma-separated owner, collaborator, organization_member."
|
|
110382
|
+
},
|
|
110383
|
+
per_page: {
|
|
110384
|
+
type: "integer",
|
|
110385
|
+
minimum: 1,
|
|
110386
|
+
maximum: 100
|
|
110387
|
+
},
|
|
110388
|
+
page: {
|
|
110389
|
+
type: "integer",
|
|
110390
|
+
minimum: 1
|
|
110391
|
+
}
|
|
110392
|
+
},
|
|
110393
|
+
required: []
|
|
110394
|
+
},
|
|
110395
|
+
request: {
|
|
110396
|
+
method: "GET",
|
|
110397
|
+
path: "/user/repos",
|
|
110398
|
+
query: {
|
|
110399
|
+
sort: "{sort}",
|
|
110400
|
+
affiliation: "{affiliation}",
|
|
110401
|
+
per_page: "{per_page}",
|
|
110402
|
+
page: "{page}"
|
|
110403
|
+
}
|
|
110404
|
+
}
|
|
110405
|
+
},
|
|
109999
110406
|
{
|
|
110000
110407
|
name: "issues.search",
|
|
110001
110408
|
class: "read",
|
|
@@ -174730,6 +175137,534 @@ const serpstatConnector = declarativeRestConnector({
|
|
|
174730
175137
|
}]
|
|
174731
175138
|
});
|
|
174732
175139
|
//#endregion
|
|
175140
|
+
//#region src/connectors/adapters/treg.ts
|
|
175141
|
+
/**
|
|
175142
|
+
* treg (treg.to) — one prepaid team token for per-call SEO, backlink, keyword,
|
|
175143
|
+
* enrichment, social and scraping endpoints. treg holds the provider keys and
|
|
175144
|
+
* bills the team's prepaid balance at the provider's listed price, so the
|
|
175145
|
+
* connection owner funds every metered call.
|
|
175146
|
+
*
|
|
175147
|
+
* Spend control is enforced by treg itself, not by this stateless adapter:
|
|
175148
|
+
* - every metered read carries `X-Treg-Route-Max-Cost` (default $0.25, at
|
|
175149
|
+
* most $1), which treg refuses with 402 before spending;
|
|
175150
|
+
* - every metered read is tagged `hub_daily_cap=<connection>` and treg holds
|
|
175151
|
+
* a per-day budget on that tag. When the day's budget is spent treg answers
|
|
175152
|
+
* 429 `tag_spend_cap_reached`; the agent then needs `call.overCap`, a
|
|
175153
|
+
* mutation the Hub gates behind owner approval or a standing grant.
|
|
175154
|
+
* - the first metered read installs a $1/day budget when the connection has
|
|
175155
|
+
* none. `cap.set` changes it, also through owner approval.
|
|
175156
|
+
*
|
|
175157
|
+
* Catalog endpoints that act on the world (`kind` other than data, routed or
|
|
175158
|
+
* utility: posting, ads changes, media generation) are refused on the read
|
|
175159
|
+
* path and run only through `call.write`.
|
|
175160
|
+
*/
|
|
175161
|
+
const TREG_BASE_URL = "https://treg.to";
|
|
175162
|
+
const REQUEST_TIMEOUT_MS = 12e4;
|
|
175163
|
+
const CONTROL_TIMEOUT_MS = 15e3;
|
|
175164
|
+
const TREG_CAP_DIMENSION = "hub_daily_cap";
|
|
175165
|
+
const TREG_OVER_CAP_DIMENSION = "hub_over_cap";
|
|
175166
|
+
const TREG_WRITE_DIMENSION = "hub_write";
|
|
175167
|
+
const TREG_DEFAULT_MAX_COST_USD = .25;
|
|
175168
|
+
const TREG_MAX_DAILY_CAP_USD = 100;
|
|
175169
|
+
const READ_KINDS = /* @__PURE__ */ new Set([
|
|
175170
|
+
"data",
|
|
175171
|
+
"routed",
|
|
175172
|
+
"utility"
|
|
175173
|
+
]);
|
|
175174
|
+
const CAP_CHECK_TTL_MS = 6e5;
|
|
175175
|
+
const CATALOG_TTL_MS = 36e5;
|
|
175176
|
+
const MAX_BUDGET_DIMENSIONS = 3;
|
|
175177
|
+
const callParameters = {
|
|
175178
|
+
type: "object",
|
|
175179
|
+
properties: {
|
|
175180
|
+
endpointId: {
|
|
175181
|
+
type: "string",
|
|
175182
|
+
description: "Catalog endpoint id from catalog.search, e.g. \"dataforseo.google.keywords.volume\"."
|
|
175183
|
+
},
|
|
175184
|
+
method: {
|
|
175185
|
+
type: "string",
|
|
175186
|
+
enum: ["GET", "POST"],
|
|
175187
|
+
description: "HTTP method from catalog.get; defaults to the endpoint's method."
|
|
175188
|
+
},
|
|
175189
|
+
query: {
|
|
175190
|
+
type: "object",
|
|
175191
|
+
additionalProperties: { type: [
|
|
175192
|
+
"string",
|
|
175193
|
+
"number",
|
|
175194
|
+
"boolean"
|
|
175195
|
+
] },
|
|
175196
|
+
description: "Query parameters the endpoint declares (catalog.get input.queryParams)."
|
|
175197
|
+
},
|
|
175198
|
+
body: {
|
|
175199
|
+
type: ["object", "array"],
|
|
175200
|
+
description: "JSON body the endpoint declares (catalog.get input.body)."
|
|
175201
|
+
},
|
|
175202
|
+
maxCostUsd: {
|
|
175203
|
+
type: "number",
|
|
175204
|
+
exclusiveMinimum: 0,
|
|
175205
|
+
maximum: 1,
|
|
175206
|
+
description: `Refuse before spending when treg's reserve for this call exceeds this many dollars. Default ${TREG_DEFAULT_MAX_COST_USD}, at most 1.`
|
|
175207
|
+
}
|
|
175208
|
+
},
|
|
175209
|
+
required: ["endpointId"]
|
|
175210
|
+
};
|
|
175211
|
+
const capabilities = [
|
|
175212
|
+
{
|
|
175213
|
+
name: "catalog.search",
|
|
175214
|
+
class: "read",
|
|
175215
|
+
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.",
|
|
175216
|
+
parameters: {
|
|
175217
|
+
type: "object",
|
|
175218
|
+
properties: {
|
|
175219
|
+
query: {
|
|
175220
|
+
type: "string",
|
|
175221
|
+
minLength: 2,
|
|
175222
|
+
maxLength: 200,
|
|
175223
|
+
description: "What the call should do, in plain words."
|
|
175224
|
+
},
|
|
175225
|
+
limit: {
|
|
175226
|
+
type: "integer",
|
|
175227
|
+
minimum: 1,
|
|
175228
|
+
maximum: 25,
|
|
175229
|
+
description: "Results to return (default 10)."
|
|
175230
|
+
}
|
|
175231
|
+
},
|
|
175232
|
+
required: ["query"]
|
|
175233
|
+
}
|
|
175234
|
+
},
|
|
175235
|
+
{
|
|
175236
|
+
name: "catalog.get",
|
|
175237
|
+
class: "read",
|
|
175238
|
+
description: "Read one catalog endpoint in full before calling it: method, query and body parameters, price unit, example call and sibling providers. Free.",
|
|
175239
|
+
parameters: {
|
|
175240
|
+
type: "object",
|
|
175241
|
+
properties: { endpointId: {
|
|
175242
|
+
type: "string",
|
|
175243
|
+
description: "Catalog endpoint id."
|
|
175244
|
+
} },
|
|
175245
|
+
required: ["endpointId"]
|
|
175246
|
+
}
|
|
175247
|
+
},
|
|
175248
|
+
{
|
|
175249
|
+
name: "spend.status",
|
|
175250
|
+
class: "read",
|
|
175251
|
+
description: "Today's spend for this connection against its daily cap (UTC day), and the team's remaining prepaid balance. Free.",
|
|
175252
|
+
parameters: {
|
|
175253
|
+
type: "object",
|
|
175254
|
+
properties: {}
|
|
175255
|
+
}
|
|
175256
|
+
},
|
|
175257
|
+
{
|
|
175258
|
+
name: "call",
|
|
175259
|
+
class: "read",
|
|
175260
|
+
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.",
|
|
175261
|
+
parameters: callParameters,
|
|
175262
|
+
consistencyModel: "advisory"
|
|
175263
|
+
},
|
|
175264
|
+
{
|
|
175265
|
+
name: "call.overCap",
|
|
175266
|
+
class: "mutation",
|
|
175267
|
+
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.",
|
|
175268
|
+
parameters: callParameters,
|
|
175269
|
+
cas: "native-idempotency",
|
|
175270
|
+
externalEffect: true,
|
|
175271
|
+
consistencyModel: "advisory"
|
|
175272
|
+
},
|
|
175273
|
+
{
|
|
175274
|
+
name: "call.write",
|
|
175275
|
+
class: "mutation",
|
|
175276
|
+
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.",
|
|
175277
|
+
parameters: callParameters,
|
|
175278
|
+
cas: "native-idempotency",
|
|
175279
|
+
externalEffect: true,
|
|
175280
|
+
consistencyModel: "advisory"
|
|
175281
|
+
},
|
|
175282
|
+
{
|
|
175283
|
+
name: "cap.set",
|
|
175284
|
+
class: "mutation",
|
|
175285
|
+
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.`,
|
|
175286
|
+
parameters: {
|
|
175287
|
+
type: "object",
|
|
175288
|
+
properties: { dailyCapUsd: {
|
|
175289
|
+
type: "number",
|
|
175290
|
+
exclusiveMinimum: 0,
|
|
175291
|
+
maximum: TREG_MAX_DAILY_CAP_USD,
|
|
175292
|
+
description: "Dollars per UTC day."
|
|
175293
|
+
} },
|
|
175294
|
+
required: ["dailyCapUsd"]
|
|
175295
|
+
},
|
|
175296
|
+
cas: "native-idempotency",
|
|
175297
|
+
externalEffect: false
|
|
175298
|
+
}
|
|
175299
|
+
];
|
|
175300
|
+
const catalogCache = /* @__PURE__ */ new Map();
|
|
175301
|
+
const capCheckCache = /* @__PURE__ */ new Map();
|
|
175302
|
+
const orgCache = /* @__PURE__ */ new Map();
|
|
175303
|
+
function token(source) {
|
|
175304
|
+
if (source.credentials.kind === "api-key" && source.credentials.apiKey.trim()) return source.credentials.apiKey.trim();
|
|
175305
|
+
throw new CredentialsExpired("treg needs a team API key", source.id);
|
|
175306
|
+
}
|
|
175307
|
+
function tagValue(source) {
|
|
175308
|
+
const value = source.id.replace(/[^A-Za-z0-9_-]/g, "_").slice(0, 64);
|
|
175309
|
+
if (!value) throw new ProviderConfigError("treg connection id cannot be used as a spend tag", source.id, { status: 400 });
|
|
175310
|
+
return value;
|
|
175311
|
+
}
|
|
175312
|
+
async function treg(source, path, init = {}) {
|
|
175313
|
+
const headers = {
|
|
175314
|
+
accept: "application/json",
|
|
175315
|
+
"X-Treg-Token": token(source),
|
|
175316
|
+
...init.headers
|
|
175317
|
+
};
|
|
175318
|
+
if (init.body !== void 0) headers["content-type"] = "application/json";
|
|
175319
|
+
return fetch(`${TREG_BASE_URL}${path}`, {
|
|
175320
|
+
method: init.method ?? "GET",
|
|
175321
|
+
headers,
|
|
175322
|
+
body: init.body === void 0 ? void 0 : JSON.stringify(init.body),
|
|
175323
|
+
redirect: "manual",
|
|
175324
|
+
signal: AbortSignal.timeout(init.timeoutMs ?? CONTROL_TIMEOUT_MS)
|
|
175325
|
+
});
|
|
175326
|
+
}
|
|
175327
|
+
async function readBody(response) {
|
|
175328
|
+
const text = await response.text().catch(() => "");
|
|
175329
|
+
if (!text) return null;
|
|
175330
|
+
try {
|
|
175331
|
+
return JSON.parse(text);
|
|
175332
|
+
} catch {
|
|
175333
|
+
return text;
|
|
175334
|
+
}
|
|
175335
|
+
}
|
|
175336
|
+
function detail(body) {
|
|
175337
|
+
if (body && typeof body === "object" && "detail" in body) {
|
|
175338
|
+
const value = body.detail;
|
|
175339
|
+
if (value && typeof value === "object") return value;
|
|
175340
|
+
return { message: String(value) };
|
|
175341
|
+
}
|
|
175342
|
+
return {};
|
|
175343
|
+
}
|
|
175344
|
+
async function controlJson(source, path, init = {}) {
|
|
175345
|
+
const response = await treg(source, path, init);
|
|
175346
|
+
const body = await readBody(response);
|
|
175347
|
+
if (response.status === 401) throw new CredentialsExpired("treg rejected the team API key", source.id, {
|
|
175348
|
+
status: 401,
|
|
175349
|
+
body
|
|
175350
|
+
});
|
|
175351
|
+
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, {
|
|
175352
|
+
status: 403,
|
|
175353
|
+
reason: "treg_role",
|
|
175354
|
+
body
|
|
175355
|
+
});
|
|
175356
|
+
if (!response.ok) throw new ProviderRequestError(`treg ${init.method ?? "GET"} ${path.split("?")[0]} answered HTTP ${response.status}`, source.id, {
|
|
175357
|
+
status: response.status,
|
|
175358
|
+
body
|
|
175359
|
+
});
|
|
175360
|
+
return body;
|
|
175361
|
+
}
|
|
175362
|
+
async function orgId(source) {
|
|
175363
|
+
const cached = orgCache.get(source.id);
|
|
175364
|
+
if (cached !== void 0) return cached;
|
|
175365
|
+
const orgs = await controlJson(source, "/orgs");
|
|
175366
|
+
const active = Array.isArray(orgs) ? orgs.find((org) => org.active) ?? (orgs.length === 1 ? orgs[0] : void 0) : void 0;
|
|
175367
|
+
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, {
|
|
175368
|
+
status: 400,
|
|
175369
|
+
reason: "treg_team"
|
|
175370
|
+
});
|
|
175371
|
+
orgCache.set(source.id, active.org_id);
|
|
175372
|
+
return active.org_id;
|
|
175373
|
+
}
|
|
175374
|
+
async function ensureBudgetDimension(source, org) {
|
|
175375
|
+
const settings = await controlJson(source, `/orgs/${org}/settings`);
|
|
175376
|
+
const dims = Array.isArray(settings.budget_dims) ? settings.budget_dims : [];
|
|
175377
|
+
if (dims.includes("hub_daily_cap")) return;
|
|
175378
|
+
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, {
|
|
175379
|
+
status: 409,
|
|
175380
|
+
reason: "treg_budget_dims"
|
|
175381
|
+
});
|
|
175382
|
+
await controlJson(source, `/orgs/${org}/settings`, {
|
|
175383
|
+
method: "PATCH",
|
|
175384
|
+
body: { budget_dims: [...dims, TREG_CAP_DIMENSION] }
|
|
175385
|
+
});
|
|
175386
|
+
}
|
|
175387
|
+
async function setDailyCap(source, usd) {
|
|
175388
|
+
const org = await orgId(source);
|
|
175389
|
+
await ensureBudgetDimension(source, org);
|
|
175390
|
+
const micro = Math.round(usd * 1e6);
|
|
175391
|
+
await controlJson(source, `/orgs/${org}/budgets/${TREG_CAP_DIMENSION}/${encodeURIComponent(tagValue(source))}`, {
|
|
175392
|
+
method: "PUT",
|
|
175393
|
+
body: {
|
|
175394
|
+
daily_cap_micro: micro,
|
|
175395
|
+
note: "Hub connection daily cap"
|
|
175396
|
+
}
|
|
175397
|
+
});
|
|
175398
|
+
capCheckCache.set(source.id, Date.now());
|
|
175399
|
+
return { dailyCapUsd: micro / 1e6 };
|
|
175400
|
+
}
|
|
175401
|
+
async function connectionBudget(source, org) {
|
|
175402
|
+
const budgets = await controlJson(source, `/orgs/${org}/budgets`);
|
|
175403
|
+
const value = tagValue(source);
|
|
175404
|
+
return Array.isArray(budgets) ? budgets.find((budget) => budget.dim === "hub_daily_cap" && budget.val === value && typeof budget.daily_cap_micro === "number") : void 0;
|
|
175405
|
+
}
|
|
175406
|
+
/** A metered read never runs without a daily budget on its tag. */
|
|
175407
|
+
async function ensureDailyCap(source) {
|
|
175408
|
+
const checked = capCheckCache.get(source.id);
|
|
175409
|
+
if (checked !== void 0 && Date.now() - checked < CAP_CHECK_TTL_MS) return;
|
|
175410
|
+
if (await connectionBudget(source, await orgId(source))) {
|
|
175411
|
+
capCheckCache.set(source.id, Date.now());
|
|
175412
|
+
return;
|
|
175413
|
+
}
|
|
175414
|
+
await setDailyCap(source, 1);
|
|
175415
|
+
}
|
|
175416
|
+
async function catalogEndpoint(source, endpointId) {
|
|
175417
|
+
const cached = catalogCache.get(endpointId);
|
|
175418
|
+
if (cached && Date.now() - cached.at < CATALOG_TTL_MS) return cached.endpoint;
|
|
175419
|
+
const response = await treg(source, `/catalog/endpoints/${encodeURIComponent(endpointId)}`);
|
|
175420
|
+
const body = await readBody(response);
|
|
175421
|
+
if (response.status === 404) throw new InvalidCapabilityArgument(`treg has no catalog endpoint "${endpointId}"; find one with catalog.search`, "endpointId");
|
|
175422
|
+
if (!response.ok) throw new ProviderRequestError(`treg catalog answered HTTP ${response.status}`, source.id, {
|
|
175423
|
+
status: response.status,
|
|
175424
|
+
body
|
|
175425
|
+
});
|
|
175426
|
+
const endpoint = body?.endpoint;
|
|
175427
|
+
if (!endpoint || endpoint.id !== endpointId) throw new ProviderRequestError("treg catalog entry is malformed", source.id, {
|
|
175428
|
+
status: 502,
|
|
175429
|
+
body
|
|
175430
|
+
});
|
|
175431
|
+
catalogCache.set(endpointId, {
|
|
175432
|
+
endpoint,
|
|
175433
|
+
at: Date.now()
|
|
175434
|
+
});
|
|
175435
|
+
return endpoint;
|
|
175436
|
+
}
|
|
175437
|
+
function stringArg(args, field) {
|
|
175438
|
+
const value = args[field];
|
|
175439
|
+
if (typeof value !== "string" || !value.trim()) throw new InvalidCapabilityArgument(`${field} is required`, field);
|
|
175440
|
+
return value.trim();
|
|
175441
|
+
}
|
|
175442
|
+
function endpointIdArg(args) {
|
|
175443
|
+
const id = stringArg(args, "endpointId");
|
|
175444
|
+
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");
|
|
175445
|
+
return id;
|
|
175446
|
+
}
|
|
175447
|
+
function maxCost(args) {
|
|
175448
|
+
const value = args.maxCostUsd ?? .25;
|
|
175449
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || value > 1) throw new InvalidCapabilityArgument(`maxCostUsd must be above 0 and at most 1`, "maxCostUsd");
|
|
175450
|
+
return value;
|
|
175451
|
+
}
|
|
175452
|
+
function queryString(args) {
|
|
175453
|
+
const query = args.query;
|
|
175454
|
+
if (query === void 0 || query === null) return "";
|
|
175455
|
+
if (typeof query !== "object" || Array.isArray(query)) throw new InvalidCapabilityArgument("query must be an object of scalar values", "query");
|
|
175456
|
+
const params = new URLSearchParams();
|
|
175457
|
+
for (const [key, value] of Object.entries(query)) {
|
|
175458
|
+
if (![
|
|
175459
|
+
"string",
|
|
175460
|
+
"number",
|
|
175461
|
+
"boolean"
|
|
175462
|
+
].includes(typeof value)) throw new InvalidCapabilityArgument(`query.${key} must be a string, number or boolean`, "query");
|
|
175463
|
+
params.append(key, String(value));
|
|
175464
|
+
}
|
|
175465
|
+
const text = params.toString();
|
|
175466
|
+
return text ? `?${text}` : "";
|
|
175467
|
+
}
|
|
175468
|
+
const MODE_TAG = {
|
|
175469
|
+
capped: TREG_CAP_DIMENSION,
|
|
175470
|
+
"over-cap": TREG_OVER_CAP_DIMENSION,
|
|
175471
|
+
write: TREG_WRITE_DIMENSION
|
|
175472
|
+
};
|
|
175473
|
+
async function catalogCall(inv, mode) {
|
|
175474
|
+
const { source, args } = inv;
|
|
175475
|
+
const endpointId = endpointIdArg(args);
|
|
175476
|
+
const ceiling = maxCost(args);
|
|
175477
|
+
const endpoint = await catalogEndpoint(source, endpointId);
|
|
175478
|
+
const isRead = READ_KINDS.has(String(endpoint.kind ?? ""));
|
|
175479
|
+
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");
|
|
175480
|
+
if (mode === "write" && isRead) throw new InvalidCapabilityArgument(`${endpointId} only reads data; use call`, "endpointId");
|
|
175481
|
+
if (mode === "capped") await ensureDailyCap(source);
|
|
175482
|
+
const method = typeof args.method === "string" ? args.method.toUpperCase() : (endpoint.method ?? "GET").toUpperCase();
|
|
175483
|
+
if (method !== "GET" && method !== "POST") throw new InvalidCapabilityArgument("method must be GET or POST", "method");
|
|
175484
|
+
if (method === "GET" && args.body !== void 0) throw new InvalidCapabilityArgument("a GET call takes no body", "body");
|
|
175485
|
+
const response = await treg(source, `/call/${encodeURIComponent(endpointId)}${queryString(args)}`, {
|
|
175486
|
+
method,
|
|
175487
|
+
body: method === "POST" ? args.body ?? {} : void 0,
|
|
175488
|
+
headers: {
|
|
175489
|
+
"X-Treg-Route-Max-Cost": String(ceiling),
|
|
175490
|
+
"X-Treg-Meta": `${MODE_TAG[mode]}=${tagValue(source)}`,
|
|
175491
|
+
"Idempotency-Key": inv.idempotencyKey.slice(0, 200)
|
|
175492
|
+
},
|
|
175493
|
+
timeoutMs: REQUEST_TIMEOUT_MS
|
|
175494
|
+
});
|
|
175495
|
+
const body = await readBody(response);
|
|
175496
|
+
const info = detail(body);
|
|
175497
|
+
if (response.status === 401) throw new CredentialsExpired("treg rejected the team API key", source.id, {
|
|
175498
|
+
status: 401,
|
|
175499
|
+
body
|
|
175500
|
+
});
|
|
175501
|
+
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, {
|
|
175502
|
+
status: 429,
|
|
175503
|
+
reason: "daily_cap_reached",
|
|
175504
|
+
body
|
|
175505
|
+
});
|
|
175506
|
+
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, {
|
|
175507
|
+
status: 429,
|
|
175508
|
+
reason: "team_daily_cap_reached",
|
|
175509
|
+
body
|
|
175510
|
+
});
|
|
175511
|
+
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");
|
|
175512
|
+
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, {
|
|
175513
|
+
status: 402,
|
|
175514
|
+
reason: "balance_empty",
|
|
175515
|
+
body
|
|
175516
|
+
});
|
|
175517
|
+
if (!response.ok) throw new ProviderRequestError(`${endpointId} answered HTTP ${response.status}${info.message ? `: ${String(info.message).slice(0, 300)}` : ""}; nothing was charged.`, source.id, {
|
|
175518
|
+
status: response.status,
|
|
175519
|
+
reason: typeof info.error === "string" ? info.error : void 0,
|
|
175520
|
+
body
|
|
175521
|
+
});
|
|
175522
|
+
const costMicro = Number(response.headers.get("x-treg-cost-micro") ?? 0) || 0;
|
|
175523
|
+
const callId = response.headers.get("x-treg-call-id");
|
|
175524
|
+
const servedBy = response.headers.get("x-treg-served-by") ?? endpointId;
|
|
175525
|
+
const fetchedAt = /* @__PURE__ */ new Date();
|
|
175526
|
+
const provider = endpoint.provider_display ?? endpoint.provider ?? endpointId.split(".")[0];
|
|
175527
|
+
return {
|
|
175528
|
+
endpointId,
|
|
175529
|
+
provider,
|
|
175530
|
+
servedBy,
|
|
175531
|
+
costUsd: costMicro / 1e6,
|
|
175532
|
+
callId,
|
|
175533
|
+
cache: response.headers.get("x-treg-cache"),
|
|
175534
|
+
fetchedAt: fetchedAt.toISOString(),
|
|
175535
|
+
citation: `${provider} via treg.to (${servedBy}${callId ? `, call ${callId}` : ""}), ${fetchedAt.toISOString().slice(0, 10)}`,
|
|
175536
|
+
data: body
|
|
175537
|
+
};
|
|
175538
|
+
}
|
|
175539
|
+
function micro(value) {
|
|
175540
|
+
const number = typeof value === "number" ? value : Number(value);
|
|
175541
|
+
return Number.isFinite(number) ? (number / 1e6).toFixed(4).replace(/0+$/, "").replace(/\.$/, "") : "?";
|
|
175542
|
+
}
|
|
175543
|
+
function trimEndpoint(endpoint) {
|
|
175544
|
+
return {
|
|
175545
|
+
id: endpoint.id,
|
|
175546
|
+
provider: endpoint.provider_display ?? endpoint.provider,
|
|
175547
|
+
name: endpoint.name,
|
|
175548
|
+
summary: endpoint.summary,
|
|
175549
|
+
method: endpoint.method,
|
|
175550
|
+
kind: endpoint.kind,
|
|
175551
|
+
readOnly: READ_KINDS.has(String(endpoint.kind ?? "")),
|
|
175552
|
+
cost: endpoint.cost ?? null,
|
|
175553
|
+
observed: endpoint.observed ?? null
|
|
175554
|
+
};
|
|
175555
|
+
}
|
|
175556
|
+
async function spendStatus(source) {
|
|
175557
|
+
const org = await orgId(source);
|
|
175558
|
+
const value = tagValue(source);
|
|
175559
|
+
const [budget, usage, balance] = await Promise.all([
|
|
175560
|
+
connectionBudget(source, org),
|
|
175561
|
+
controlJson(source, `/orgs/${org}/usage/by-tag?key=${TREG_CAP_DIMENSION}&days=1`),
|
|
175562
|
+
controlJson(source, `/orgs/${org}/balance`)
|
|
175563
|
+
]);
|
|
175564
|
+
const spent = usage.rows?.find((row) => row.value === value)?.charged_micro ?? 0;
|
|
175565
|
+
const cap = budget?.daily_cap_micro ?? null;
|
|
175566
|
+
return {
|
|
175567
|
+
dailyCapUsd: cap === null ? null : cap / 1e6,
|
|
175568
|
+
spentTodayUsd: spent / 1e6,
|
|
175569
|
+
remainingTodayUsd: cap === null ? null : Math.max(0, cap - spent) / 1e6,
|
|
175570
|
+
balanceUsd: typeof balance.balance_micro === "number" ? balance.balance_micro / 1e6 : null,
|
|
175571
|
+
day: (/* @__PURE__ */ new Date()).toISOString().slice(0, 10),
|
|
175572
|
+
resets: "00:00 UTC",
|
|
175573
|
+
note: cap === null ? `No cap yet; the first metered call installs $1/day.` : void 0
|
|
175574
|
+
};
|
|
175575
|
+
}
|
|
175576
|
+
const tregConnector = {
|
|
175577
|
+
manifest: {
|
|
175578
|
+
kind: "treg",
|
|
175579
|
+
displayName: "treg",
|
|
175580
|
+
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.",
|
|
175581
|
+
auth: {
|
|
175582
|
+
kind: "api-key",
|
|
175583
|
+
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."
|
|
175584
|
+
},
|
|
175585
|
+
category: "market-intelligence",
|
|
175586
|
+
defaultConsistencyModel: "advisory",
|
|
175587
|
+
capabilities
|
|
175588
|
+
},
|
|
175589
|
+
async executeRead(inv) {
|
|
175590
|
+
const { source, args } = inv;
|
|
175591
|
+
switch (inv.capabilityName) {
|
|
175592
|
+
case "catalog.search": {
|
|
175593
|
+
const query = stringArg(args, "query");
|
|
175594
|
+
const limit = typeof args.limit === "number" ? Math.min(25, Math.max(1, Math.trunc(args.limit))) : 10;
|
|
175595
|
+
const response = await treg(source, `/catalog/search?q=${encodeURIComponent(query)}&limit=${limit}`);
|
|
175596
|
+
const body = await readBody(response);
|
|
175597
|
+
if (!response.ok) throw new ProviderRequestError(`treg catalog search answered HTTP ${response.status}`, source.id, {
|
|
175598
|
+
status: response.status,
|
|
175599
|
+
body
|
|
175600
|
+
});
|
|
175601
|
+
return {
|
|
175602
|
+
data: {
|
|
175603
|
+
total: body?.total ?? null,
|
|
175604
|
+
results: (body?.results ?? []).slice(0, limit).map(trimEndpoint)
|
|
175605
|
+
},
|
|
175606
|
+
fetchedAt: Date.now()
|
|
175607
|
+
};
|
|
175608
|
+
}
|
|
175609
|
+
case "catalog.get": {
|
|
175610
|
+
const endpoint = await catalogEndpoint(source, endpointIdArg(args));
|
|
175611
|
+
return {
|
|
175612
|
+
data: {
|
|
175613
|
+
...trimEndpoint(endpoint),
|
|
175614
|
+
input: endpoint.input ?? null,
|
|
175615
|
+
example: endpoint.call_template ?? null
|
|
175616
|
+
},
|
|
175617
|
+
fetchedAt: Date.now()
|
|
175618
|
+
};
|
|
175619
|
+
}
|
|
175620
|
+
case "spend.status": return {
|
|
175621
|
+
data: await spendStatus(source),
|
|
175622
|
+
fetchedAt: Date.now()
|
|
175623
|
+
};
|
|
175624
|
+
case "call": return {
|
|
175625
|
+
data: await catalogCall(inv, "capped"),
|
|
175626
|
+
fetchedAt: Date.now()
|
|
175627
|
+
};
|
|
175628
|
+
default: throw new InvalidCapabilityArgument(`unknown treg read ${inv.capabilityName}`, "capabilityName");
|
|
175629
|
+
}
|
|
175630
|
+
},
|
|
175631
|
+
async executeMutation(inv) {
|
|
175632
|
+
let data;
|
|
175633
|
+
switch (inv.capabilityName) {
|
|
175634
|
+
case "call.overCap":
|
|
175635
|
+
data = await catalogCall(inv, "over-cap");
|
|
175636
|
+
break;
|
|
175637
|
+
case "call.write":
|
|
175638
|
+
data = await catalogCall(inv, "write");
|
|
175639
|
+
break;
|
|
175640
|
+
case "cap.set": {
|
|
175641
|
+
const usd = inv.args.dailyCapUsd;
|
|
175642
|
+
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");
|
|
175643
|
+
data = await setDailyCap(inv.source, usd);
|
|
175644
|
+
break;
|
|
175645
|
+
}
|
|
175646
|
+
default: throw new InvalidCapabilityArgument(`unknown treg mutation ${inv.capabilityName}`, "capabilityName");
|
|
175647
|
+
}
|
|
175648
|
+
return {
|
|
175649
|
+
status: "committed",
|
|
175650
|
+
data,
|
|
175651
|
+
committedAt: Date.now(),
|
|
175652
|
+
idempotentReplay: false
|
|
175653
|
+
};
|
|
175654
|
+
},
|
|
175655
|
+
async test(source) {
|
|
175656
|
+
try {
|
|
175657
|
+
await orgId(source);
|
|
175658
|
+
return { ok: true };
|
|
175659
|
+
} catch (error) {
|
|
175660
|
+
return {
|
|
175661
|
+
ok: false,
|
|
175662
|
+
reason: error instanceof Error ? error.message : String(error)
|
|
175663
|
+
};
|
|
175664
|
+
}
|
|
175665
|
+
}
|
|
175666
|
+
};
|
|
175667
|
+
//#endregion
|
|
174733
175668
|
//#region src/connectors/adapters/service-now.ts
|
|
174734
175669
|
const serviceNowConnector = declarativeRestConnector({
|
|
174735
175670
|
kind: "service-now",
|
|
@@ -193482,6 +194417,83 @@ const resendConnector = declarativeRestConnector({
|
|
|
193482
194417
|
]
|
|
193483
194418
|
});
|
|
193484
194419
|
//#endregion
|
|
194420
|
+
//#region src/connectors/adapters/clerk.ts
|
|
194421
|
+
/**
|
|
194422
|
+
* Clerk users through the Backend API with a secret key (`sk_live_…`). New
|
|
194423
|
+
* signups arrive as `clerk.user.created` webhooks from Svix
|
|
194424
|
+
* (`clerkWebhookProvider` in `../../webhooks`); these reads look a user up or
|
|
194425
|
+
* list recent signups.
|
|
194426
|
+
*/
|
|
194427
|
+
const clerkConnector = declarativeRestConnector({
|
|
194428
|
+
kind: "clerk",
|
|
194429
|
+
displayName: "Clerk",
|
|
194430
|
+
description: "Read Clerk users and receive signup webhooks.",
|
|
194431
|
+
category: "other",
|
|
194432
|
+
auth: {
|
|
194433
|
+
kind: "api-key",
|
|
194434
|
+
hint: "Clerk secret key (sk_live_… or sk_test_…) from API keys in the Clerk dashboard."
|
|
194435
|
+
},
|
|
194436
|
+
baseUrl: "https://api.clerk.com/v1",
|
|
194437
|
+
defaultConsistencyModel: "authoritative",
|
|
194438
|
+
test: {
|
|
194439
|
+
method: "GET",
|
|
194440
|
+
path: "/users?limit=1"
|
|
194441
|
+
},
|
|
194442
|
+
capabilities: [{
|
|
194443
|
+
name: "users.list",
|
|
194444
|
+
class: "read",
|
|
194445
|
+
description: "List users, newest first by default (`order_by: \"-created_at\"`).",
|
|
194446
|
+
parameters: {
|
|
194447
|
+
type: "object",
|
|
194448
|
+
properties: {
|
|
194449
|
+
order_by: {
|
|
194450
|
+
type: "string",
|
|
194451
|
+
description: "e.g. \"-created_at\" (newest first) or \"created_at\"."
|
|
194452
|
+
},
|
|
194453
|
+
limit: {
|
|
194454
|
+
type: "integer",
|
|
194455
|
+
minimum: 1,
|
|
194456
|
+
maximum: 500
|
|
194457
|
+
},
|
|
194458
|
+
offset: {
|
|
194459
|
+
type: "integer",
|
|
194460
|
+
minimum: 0
|
|
194461
|
+
},
|
|
194462
|
+
email_address: {
|
|
194463
|
+
type: "string",
|
|
194464
|
+
description: "Only users with this email address."
|
|
194465
|
+
}
|
|
194466
|
+
}
|
|
194467
|
+
},
|
|
194468
|
+
request: {
|
|
194469
|
+
method: "GET",
|
|
194470
|
+
path: "/users",
|
|
194471
|
+
query: {
|
|
194472
|
+
order_by: "{order_by}",
|
|
194473
|
+
limit: "{limit}",
|
|
194474
|
+
offset: "{offset}",
|
|
194475
|
+
email_address: "{email_address}"
|
|
194476
|
+
}
|
|
194477
|
+
}
|
|
194478
|
+
}, {
|
|
194479
|
+
name: "users.get",
|
|
194480
|
+
class: "read",
|
|
194481
|
+
description: "Read one user by id (user_…).",
|
|
194482
|
+
parameters: {
|
|
194483
|
+
type: "object",
|
|
194484
|
+
properties: { userId: {
|
|
194485
|
+
type: "string",
|
|
194486
|
+
pattern: "^user_[A-Za-z0-9]+$"
|
|
194487
|
+
} },
|
|
194488
|
+
required: ["userId"]
|
|
194489
|
+
},
|
|
194490
|
+
request: {
|
|
194491
|
+
method: "GET",
|
|
194492
|
+
path: "/users/{userId}"
|
|
194493
|
+
}
|
|
194494
|
+
}]
|
|
194495
|
+
});
|
|
194496
|
+
//#endregion
|
|
193485
194497
|
//#region src/connectors/adapters/sendblue.ts
|
|
193486
194498
|
const e164 = {
|
|
193487
194499
|
type: "string",
|
|
@@ -193981,6 +194993,7 @@ var adapters_exports = /* @__PURE__ */ __exportAll({
|
|
|
193981
194993
|
clayConnector: () => clayConnector,
|
|
193982
194994
|
clearoutConnector: () => clearoutConnector,
|
|
193983
194995
|
clearoutphoneConnector: () => clearoutphoneConnector,
|
|
194996
|
+
clerkConnector: () => clerkConnector,
|
|
193984
194997
|
clicdataConnector: () => clicdataConnector,
|
|
193985
194998
|
clickfunnelsConnector: () => clickfunnelsConnector,
|
|
193986
194999
|
clicksendConnector: () => clicksendConnector,
|
|
@@ -194462,6 +195475,7 @@ var adapters_exports = /* @__PURE__ */ __exportAll({
|
|
|
194462
195475
|
todoistConnector: () => todoistConnector,
|
|
194463
195476
|
togglTrackConnector: () => togglTrackConnector,
|
|
194464
195477
|
totalcmsConnector: () => totalcmsConnector,
|
|
195478
|
+
tregConnector: () => tregConnector,
|
|
194465
195479
|
trelloConnector: () => trelloConnector,
|
|
194466
195480
|
twentyConnector: () => twentyConnector,
|
|
194467
195481
|
twilioConnector: () => twilioConnector,
|
|
@@ -194529,6 +195543,6 @@ var adapters_exports = /* @__PURE__ */ __exportAll({
|
|
|
194529
195543
|
zuoraConnector: () => zuoraConnector
|
|
194530
195544
|
});
|
|
194531
195545
|
//#endregion
|
|
194532
|
-
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 };
|
|
195546
|
+
export { vboutConnector as $, googleGeminiConnector as $a, hubspot as $c, codyConnector as $d, captainDataConnector as $i, docuseal as $l, mauticConnector as $n, zohoInvoiceConnector as $o, fragmentConnector as $r, rabbitMqConnector as $s, predictLeadsConnector as $t, tenzoConnector as $u, contactoutConnector as A, amazonSesConnector as Aa, microsoftDynamicsCrmConnector as Ac, adobeCreativeCloudConnector as Ad, cryptolensConnector as Ai, gongConnector as Al, knockConnector as An, firebaseConnector as Ao, kapsoConnector as Ar, squareConnector as As, serpstatConnector as At, azureAdConnector as Au, workableConnector as B, afforaiConnector as Ba, leadConnectorConnector as Bc, excelFilesConnector as Bd, clearoutConnector as Bi, folkConnector as Bl, griptapeConnector as Bn, matrixConnector as Bo, housecallProConnector as Br, sftpConnector as Bs, robollyConnector as Bt, amazonLambdaConnector as Bu, warmlyConnector as C, similarwebConnector as Ca, mastodonConnector as Cc, cloudconvertConnector as Cd, oneloginConnector as Cf, dittofeedConnector as Ci, tiktokAdsConnector as Cl, odooConnector as Cn, supabaseConnector as Co, leapAiConnector as Cr, twentyConnector as Cs, smartsheetConnector as Ct, boxConnector as Cu, wizaConnector as D, ampecoConnector as Da, microsoftTeams as Dc, bigcommerceConnector as Dd, createPhonyConnector as Df, denserAiConnector as Di, googleAnalyticsConnector as Dl, medullarConnector as Dn, metabaseConnector as Do, klentyConnector as Dr, ticktickConnector as Ds, signrequestConnector as Dt, azureServiceBusConnector as Du, commonRoomConnector as E, appfollowConnector as Ea, microsoftOnenoteConnector as Ec, canvaConnector as Ed, declarativeRestConnector as Ef, devinConnector as Ei, googleAdsConnector as El, mindStudioConnector as En, mysqlConnector as Eo, knackConnector as Er, tlDvConnector as Es, shortIoConnector as Et, basecampConnector as Eu, amplemarketConnector as F, amazonSecretsManagerConnector as Fa, makeConnector as Fc, gammaConnector as Fd, crispConnector as Fi, googleErrorReason as Fl, ibmCognoseConnector as Fn, baserowConnector as Fo, jinaAiConnector as Fr, shippoConnector as Fs, scrapelessConnector as Ft, attioConnector as Fu, whatsappConnector as G, smooveConnector as Ga, jotformConnector as Gc, duckdbConnector as Gd, chatDataConnector as Gi, firefliesAiConnector as Gl, googleVertexaiConnector as Gn, marketoConnector as Go, guideliteConnector as Gr, recallAiConnector as Gs, reachinboxConnector as Gt, aircallConnector as Gu, woodpeckerConnector as H, airOpsConnector as Ha, kafkaConnector as Hc, echowinConnector as Hd, clockifyConnector as Hi, filloutFormsConnector as Hl, gptzeroDetectAiConnector as Hn, smartleadConnector as Ho, hashiCorpVaultConnector as Hr, rssConnector as Hs, retableConnector as Ht, amazonEventBridgeConnector as Hu, zeplinConnector as I, amazonBedrockConnector as Ia, createLinkedinConnector as Ic, flowParserConnector as Id, comfyicuConnector as Ii, googleTestFailureReason as Il, hystructConnector as In, airtableConnector as Io, imageRouterConnector as Ir, sharepoint as Is, scrapegraphaiConnector as It, asanaConnector as Iu, wafeqConnector as J, qdrantConnector as Ja, invoiceninjaConnector as Jc, deepgramConnector as Jd, chatlingConnector as Ji, etsyConnector as Jl, mixpanelConnector as Jn, klaviyoConnector as Jo, googleSearchConnector as Jr, createRedshiftConnector as Js, quadernoConnector as Jt, zoominfoConnector as Ju, webscrapingAiConnector as K, greenhouseConnector as Ka, jiraCloudConnector as Kc, digitalPilotConnector as Kd, chartlyConnector as Ki, fireberryConnector as Kl, exaConnector as Kn, mailchimpConnector as Ko, greipConnector as Kr, createPostgresConnector as Ks, rapidtextAiConnector as Kt, adobeSignConnector as Ku, youcanbookmeConnector as L, aipriseConnector as La, linkedinConnector as Lc, fellowConnector as Ld, cometapiConnector as Li, frontConnector as Ll, humeAiConnector as Ln, TELEGRAM_FILE_DOWNLOAD_ROOT as Lo, instantlyAiConnector as Lr, savvycalConnector as Ls, sardisConnector as Lt, amazonSqsConnector as Lu, saleshandyConnector as M, altTextAiConnector as Ma, microsoftCalendar as Mc, giftbitConnector as Md, copyAiConnector as Mi, classifyGoogleError as Ml, instasentConnector as Mn, digitalOceanConnector as Mo, joggAiConnector as Mr, sageIntacctConnector as Ms, sendinblueConnector as Mt, avomaConnector as Mu, lagrowthmachineConnector as N, alaiConnector as Na, microsoft365PlannerConnector as Nc, generatebannersConnector as Nd, dashworksConnector as Ni, classifyGoogleReason as Nl, insightoAiConnector as Nn, discourseConnector as No, justInvoiceConnector as Nr, slack as Ns, skyprepConnector as Nt, acuitySchedulingConnector as Nu, snovIoConnector as O, apitemplateIoConnector as Oa, microsoftGraph as Oc, bexioConnector as Od, phonyConnector as Of, deepseekConnector as Oi, googleCalendar as Ol, mailchainConnector as On, hightouchConnector as Oo, kissflowConnector as Or, tallyConnector as Os, serviceNowConnector as Ot, azureEventGridConnector as Ou, heyreachConnector as P, airtopConnector as Pa, microsoft365PeopleConnector as Pc, genderApiConnector as Pd, convertkitConnector as Pi, googleApiError as Pl, imapConnector as Pn, datadogConnector as Po, jiraDataCenterConnector as Pr, signNowConnector as Ps, seekTableConnector as Pt, auth0Connector as Pu, vidlab7Connector as Q, geminiConnector as Qa, httpConnector as Qc, contextualAiConnector as Qd, certopusConnector as Qi, docusignConnector as Ql, memConnector as Qn, zohoMailConnector as Qo, gameballConnector as Qr, createRabbitMqConnector as Qs, productboardConnector as Qt, vercelConnector as Qu, wufooConnector as R, acumbamailConnector as Ra, linearConnector as Rc, featheryConnector as Rd, cohereConnector as Ri, freshsalesConnector as Rl, hedyConnector as Rn, telegramConnector as Ro, huggingFaceConnector as Rr, saleorConnector as Rs, saasticConnector as Rt, amazonSnsConnector as Ru, autoboundConnector as S, semrushConnector as Sa, meetgeekAiConnector as Sc, constantContactConnector as Sd, pingIdentityConnector as Sf, documergeConnector as Si, linkedinAdsConnector as Sl, omniCoConnector as Sn, builtwithConnector as So, kommoConnector as Sr, typeformConnector as Ss, smartsuiteConnector as St, baremetricsConnector as Su, leadfeederConnector as T, apitableConnector as Ta, microsoftPowerBiConnector as Tc, clicdataConnector as Td, oktaConnector as Tf, descriptConnector as Ti, metaAdsConnector as Tl, nocodbConnector as Tn, createMySqlConnector as To, koFiConnector as Tr, todoistConnector as Ts, simplirouteConnector as Tt, backblazeConnector as Tu, wonderchatConnector as U, kustomerConnector as Ua, publicKafkaSocketFactory as Uc, dripConnector as Ud, clockodoConnector as Ui, figmaConnector as Ul, gotifyConnector as Un, salesloftConnector as Uo, heygenConnector as Ur, ringcentralConnector as Us, replyIoConnector as Ut, amplitudeConnector as Uu, woocommerceConnector as V, agentxConnector as Va, createKafkaConnector as Vc, elevenlabsConnector as Vd, cloutlyConnector as Vi, flowluConnector as Vl, gristConnector as Vn, chatwootConnector as Vo, heymarketSmsConnector as Vr, salesforceConnector as Vs, retellAiConnector as Vt, amazonCloudWatchConnector as Vu, whatsscaleConnector as W, activecampaignConnector as Wa, justcallConnector as Wc, docsbotConnector as Wd, chatnodeConnector as Wi, figjamConnector as Wl, glideConnector as Wn, outreachConnector as Wo, hastewireConnector as Wr, rampConnector as Ws, reoonVerifierConnector as Wt, affinityConnector as Wu, vtexConnector as X, weaviateConnector as Xa, instagramBusinessConnector as Xc, couchbaseConnector as Xd, cannyConnector as Xi, dropboxConnector as Xl, mindeeConnector as Xn, brazeConnector as Xo, ghostcmsConnector as Xr, createRedisConnector as Xs, pushoverConnector as Xt, wootricConnector as Xu, vtigerConnector as Y, pineconeConnector as Ya, insightlyConnector as Yc, dappierConnector as Yd, chargekeepConnector as Yi, ebayConnector as Yl, mixmaxConnector as Yn, customerIoConnector as Yo, gistlyConnector as Yr, redshiftConnector as Ys, qawafelConnector as Yt, workdayConnector as Yu, vlmRunConnector as Z, huggingfaceConnector as Za, intercomConnector as Zc, contiguityConnector as Zd, chainalysisApiConnector as Zi, dialpadConnector as Zl, millionverifierConnector as Zn, apolloConnector as Zo, freshserviceConnector as Zr, redisConnector as Zs, proxycurlConnector as Zt, videoaskConnector as Zu, zenrowsConnector as _, avianConnector as _a, createMongoDbConnector as _c, giteaConnector as _d, anyhookWebsocketConnector as _f, elasticEmailConnector as _i, createAmazonAdsConnector as _l, opnformConnector as _n, zerobounceConnector as _o, linkaConnector as _r, twilioSmsConnector as _s, stripeConnector as _t, calCom as _u, linqWhatsappConnector as a, bolnaConnector as aa, paddleConnector as ac, reddit as ad, chaindeskConnector as af, flipandoConnector as ai, googleTasksConnector as al, placidConnector as an, zendeskSellConnector as ao, lucidyaConnector as ar, cloudbedsConnector as as, twilioConnector as at, recurlyConnector as au, leadmagicConnector as b, clayConnector as ba, miroConnector as bc, discordConnector as bd, actualbudgetConnector as bf, dumplingAiConnector as bi, snapchatAdsConnector as bl, openRouterConnector as bn, hunterConnector as bo, lettaConnector as br, twitter as bs, socialkitConnector as bt, billComConnector as bu, getresponseConnector as c, bitlyConnector as ca, oneSpanSignConnector as cc, paychexConnector as cd, cartloomConnector as cf, enrichlayerConnector as ci, googleSearchConsoleConnector as cl, peekshotConnector as cn, facebookPagesConnector as co, lushaConnector as cr, zendeskConnector as cs, totalcmsConnector as ct, contentfulConnector as cu, nooksConnector as d, beamerConnector as da, ninjapipeConnector as dc, niftyConnector as dd, bikaConnector as df, esignaturesConnector as di, googleForms as dl, paywhirlConnector as dn, slackEventsConnector as do, logrocketConnector as dr, wrikeConnector as ds, timeOpsConnector as dt, cloudinaryConnector as du, braveSearchConnector as ea, quickbooksConnector as ec, teableConnector as ed, clickfunnelsConnector as ef, frameConnector as ei, helpscoutConnector as el, posthogConnector as en, anthropicConnector as eo, messagebirdConnector as er, zohoCampaignsConnector as es, uscreenConnector as et, chessComConnector as eu, signwellConnector as f, azureOpenaiConnector as fa, netsuiteConnector as fc, netlifyConnector as fd, beehiivConnector as ff, emailitConnector as fi, googleDrive as fl, pinchPaymentsConnector as fn, stripeWebhookReceiverConnector as fo, lokaliseConnector as fr, wordpressConnector as fs, textcortexAiConnector as ft, cloudflareConnector as fu, oceanIoConnector as g, asknewsConnector as ga, mycaseConnector as gc, gustoConnector as gd, apifyConnector as gf, edenAiConnector as gi, googleCloudStorageConnector as gl, orimonConnector as gn, resolveConnectorAdapterFactoryOptions as go, localaiConnector as gr, voucheryIoConnector as gs, systemeIoConnector as gt, calendlyConnector as gu, seamlessAiConnector as h, azureCommunicationServicesConnector as ha, notionConnector as hc, instaChartsConnector as hd, askHandleConnector as hf, easyPeasyAiConnector as hi, googlePubSubConnector as hl, oracleDatabaseConnector as hn, CONNECTOR_ADAPTER_FACTORIES as ho, lobstermailConnector as hr, whatsappBusiness as hs, tableauConnector as ht, capsuleCrmConnector as hu, resendConnector as i, bookedinConnector as ia, plaidConnector as ic, ripplingConnector as id, chatAidConnector as if, formbricksConnector as ii, googlechatConnector as il, plausibleConnector as in, sendgridConnector as io, matomoConnector as ir, pricelabsConnector as is, upgradechatConnector as it, taxjarConnector as iu, bettercontactConnector as j, alttextifyConnector as ja, microsoftDynamics365BusinessCentralConnector as jc, modelslabConnector as jd, datafuelConnector as ji, gmail as jl, kallabotAiConnector as jn, clicksendConnector as jo, kizeoFormsConnector as jr, shopifyConnector as js, senjaConnector as jt, avalaraConnector as ju, findymailConnector as k, amazonTextractConnector as ka, microsoftExcel365Connector as kc, adpConnector as kd, customgptConnector as ki, gorgiasConnector as kl, loopsConnector as kn, googleBigqueryConnector as ko, kimaiConnector as kr, stripePackConnector as ks, tregConnector as kt, azureBlobStorageConnector as ku, factorsAiConnector as l, blandAiConnector as la, oneDrive as lc, pagerdutyConnector as ld, cambAiConnector as lf, fathomAnalyticsConnector as li, googleMyBusinessConnector as ll, pdfmonkeyConnector as ln, gitlabConnector as lo, loftyConnector as lr, zapierConnector as ls, togglTrackConnector as lt, confluenceConnector as lu, usergemsConnector as m, autocallsConnector as ma, notion as mc, leverConnector as md, bannerbearConnector as mf, dustConnector as mi, googleContactsConnector as ml, paperformConnector as mn, webhookConnector as mo, llmrailsConnector as mr, xeroConnector as ms, talkableConnector as mt, closeConnector as mu, sendblueConnector as n, brilliantDirectoriesConnector as na, pipedriveConnector as nc, sendpulseConnector as nd, claudeConnector as nf, fountainConnector as ni, hellosign as nl, pollybotAiConnector as nn, sentryConnector as no, mailgunConnector as nr, zohoCrmConnector as ns, validatedmailsConnector as nt, circleConnector as nu, linqConnector as o, blueskyConnector as oa, pandadoc as oc, redditConnector as od, chainAwareConnector as of, flowiseConnector as oi, googleSlidesConnector as ol, personalAiConnector as on, zagomailConnector as oo, luxuryPresenceConnector as or, zohoBookingsConnector as os, twinLabsConnector as ot, chargebeeConnector as ou, polytomicConnector as p, barcodeLookupConnector as pa, n8nConnector as pc, lightfunnelsConnector as pd, base44Connector as pf, emailoctopusConnector as pi, googleDocs as pl, pastefyConnector as pn, gtmAgentConnector as po, magicalApiConnector as pr, webflowConnector as ps, telnyxConnector as pt, clickupConnector as pu, whatConvertsConnector as q, bamboohrConnector as qa, ironcladConnector as qc, detectingAiConnector as qd, chatbaseConnector as qi, fathomConnector as ql, missiveConnector as qn, lemlistConnector as qo, greenptConnector as qr, postgresConnector as qs, raiaAiConnector as qt, zuoraConnector as qu, clerkConnector as r, browseAiConnector as ra, pipedreamConnector as rc, sanityConnector as rd, chatsistantConnector as rf, foreplayCoConnector as ri, granolaConnector as rl, pocketbaseConnector as rn, postmarkConnector as ro, manychatConnector as rr, zohoDeskConnector as rs, vapiConnector as rt, cashfreePaymentsConnector as ru, inkboxConnector as s, bonjoroConnector as sa, outlookMail as sc, pushbulletConnector as sd, csvFilesConnector as sf, facebookLeadsConnector as si, googleSheets as sl, perplexityAiConnector as sn, quickzuConnector as so, mailerLiteConnector as sr, zoomConnector as ss, typefullyConnector as st, copperConnector as su, adapters_exports as t, campaignMonitorConnector as ta, parquetFilesConnector as tc, snowflakeConnector as td, clearoutphoneConnector as tf, mailercheckConnector as ti, harvestConnector as tl, postizConnector as tn, openaiConnector as to, mailerooConnector as tr, zohoBooksConnector as ts, umamiConnector as tt, checkoutConnector as tu, modjoConnector as u, bettermodeConnector as ua, openPhoneConnector as uc, opsgenieConnector as ud, buttondownConnector as uf, firecrawlConnector as ui, googleMeetConnector as ul, parseurConnector as un, githubConnector as uo, logsnagConnector as ur, youtubeDataConnector as us, timelinesAiConnector as ut, codaConnector as uu, phantombusterConnector as v, assemblyaiConnector as va, mongodbConnector as vc, freeAgentConnector as vd, airparserConnector as vf, documentproConnector as vi, createMicrosoftAdsConnector as vl, openmicAiConnector as vn, theirstackConnector as vo, letsCalendarConnector as vr, tiktok as vs, swarmnodeConnector as vt, calComConnector as vu, serperConnector as w, aminosConnector as wa, microsoftTodoConnector as wc, clioConnector as wd, clientCredentialsRestConnector as wf, datocmsConnector as wi, xAdsConnector as wl, ntfyConnector as wn, segmentConnector as wo, kudosityConnector as wr, trelloConnector as ws, simplybookmeConnector as wt, biginByZohoConnector as wu, crustdataConnector as x, cognismConnector as xa, mollieConnector as xc, demandbaseConnector as xd, scimConnector as xf, doctlyConnector as xi, redditAdsConnector as xl, omnihrConnector as xn, fullenrichConnector as xo, leexiConnector as xr, twitterConnector as xs, smsmodeConnector as xt, brexConnector as xu, brightdataConnector as y, ashbyConnector as ya, mondayConnector as yc, formstackConnector as yd, aianswerConnector as yf, dubConnector as yi, pinterestAdsConnector as yl, opportifyConnector as yn, neverbounceConnector as yo, linkupConnector as yr, tiktokConnector as ys, supadataConnector as yt, billplzConnector as yu, writesonicBulkConnector as z, aidbaseConnector as za, lemonSqueezyConnector as zc, everhourConnector as zd, cognitoFormsConnector as zi, freshdeskConnector as zl, heartbeatConnector as zn, mattermostConnector as zo, influencersClubConnector as zr, createSftpConnector as zs, runwareConnector as zt, amazonS3Connector as zu };
|
|
194533
195547
|
|
|
194534
|
-
//# sourceMappingURL=adapters-
|
|
195548
|
+
//# sourceMappingURL=adapters-CURjrtYm.js.map
|