@tangle-network/agent-integrations 0.41.0 → 0.43.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.
@@ -48,6 +48,7 @@ __export(adapters_exports, {
48
48
  amazonTextractConnector: () => amazonTextractConnector,
49
49
  aminosConnector: () => aminosConnector,
50
50
  ampecoConnector: () => ampecoConnector,
51
+ amplemarketConnector: () => amplemarketConnector,
51
52
  anthropicConnector: () => anthropicConnector,
52
53
  apitableConnector: () => apitableConnector,
53
54
  apitemplateIoConnector: () => apitemplateIoConnector,
@@ -59,6 +60,7 @@ __export(adapters_exports, {
59
60
  assemblyaiConnector: () => assemblyaiConnector,
60
61
  attioConnector: () => attioConnector,
61
62
  auth0Connector: () => auth0Connector,
63
+ autoboundConnector: () => autoboundConnector,
62
64
  autocallsConnector: () => autocallsConnector,
63
65
  avianConnector: () => avianConnector,
64
66
  avomaConnector: () => avomaConnector,
@@ -71,6 +73,7 @@ __export(adapters_exports, {
71
73
  baremetricsConnector: () => baremetricsConnector,
72
74
  basecampConnector: () => basecampConnector,
73
75
  beamerConnector: () => beamerConnector,
76
+ bettercontactConnector: () => bettercontactConnector,
74
77
  bettermodeConnector: () => bettermodeConnector,
75
78
  bexioConnector: () => bexioConnector,
76
79
  bigcommerceConnector: () => bigcommerceConnector,
@@ -85,8 +88,10 @@ __export(adapters_exports, {
85
88
  boxConnector: () => boxConnector,
86
89
  braveSearchConnector: () => braveSearchConnector,
87
90
  brazeConnector: () => brazeConnector,
91
+ brightdataConnector: () => brightdataConnector,
88
92
  brilliantDirectoriesConnector: () => brilliantDirectoriesConnector,
89
93
  browseAiConnector: () => browseAiConnector,
94
+ builtwithConnector: () => builtwithConnector,
90
95
  calComConnector: () => calComConnector,
91
96
  calendlyConnector: () => calendlyConnector,
92
97
  campaignMonitorConnector: () => campaignMonitorConnector,
@@ -124,14 +129,17 @@ __export(adapters_exports, {
124
129
  cohereConnector: () => cohereConnector,
125
130
  cometapiConnector: () => cometapiConnector,
126
131
  comfyicuConnector: () => comfyicuConnector,
132
+ commonRoomConnector: () => commonRoomConnector,
127
133
  confluenceConnector: () => confluenceConnector,
128
134
  constantContactConnector: () => constantContactConnector,
135
+ contactoutConnector: () => contactoutConnector,
129
136
  contentfulConnector: () => contentfulConnector,
130
137
  convertkitConnector: () => convertkitConnector,
131
138
  copperConnector: () => copperConnector,
132
139
  copyAiConnector: () => copyAiConnector,
133
140
  createTangleIdentityClient: () => createTangleIdentityClient,
134
141
  crispConnector: () => crispConnector,
142
+ crustdataConnector: () => crustdataConnector,
135
143
  cryptolensConnector: () => cryptolensConnector,
136
144
  customerIoConnector: () => customerIoConnector,
137
145
  customgptConnector: () => customgptConnector,
@@ -141,9 +149,11 @@ __export(adapters_exports, {
141
149
  datocmsConnector: () => datocmsConnector,
142
150
  declarativeRestConnector: () => declarativeRestConnector,
143
151
  deepseekConnector: () => deepseekConnector,
152
+ demandbaseConnector: () => demandbaseConnector,
144
153
  denserAiConnector: () => denserAiConnector,
145
154
  descriptConnector: () => descriptConnector,
146
155
  devinConnector: () => devinConnector,
156
+ dialpadConnector: () => dialpadConnector,
147
157
  discordConnector: () => discordConnector,
148
158
  dittofeedConnector: () => dittofeedConnector,
149
159
  doctlyConnector: () => doctlyConnector,
@@ -167,11 +177,13 @@ __export(adapters_exports, {
167
177
  exaConnector: () => exaConnector,
168
178
  facebookLeadsConnector: () => facebookLeadsConnector,
169
179
  facebookPagesConnector: () => facebookPagesConnector,
180
+ factorsAiConnector: () => factorsAiConnector,
170
181
  fathomAnalyticsConnector: () => fathomAnalyticsConnector,
171
182
  fathomConnector: () => fathomConnector,
172
183
  figjamConnector: () => figjamConnector,
173
184
  figmaConnector: () => figmaConnector,
174
185
  filloutFormsConnector: () => filloutFormsConnector,
186
+ findymailConnector: () => findymailConnector,
175
187
  firebaseConnector: () => firebaseConnector,
176
188
  fireberryConnector: () => fireberryConnector,
177
189
  firecrawlConnector: () => firecrawlConnector,
@@ -190,8 +202,10 @@ __export(adapters_exports, {
190
202
  freshsalesConnector: () => freshsalesConnector,
191
203
  freshserviceConnector: () => freshserviceConnector,
192
204
  frontConnector: () => frontConnector,
205
+ fullenrichConnector: () => fullenrichConnector,
193
206
  gameballConnector: () => gameballConnector,
194
207
  geminiConnector: () => geminiConnector,
208
+ getresponseConnector: () => getresponseConnector,
195
209
  ghostcmsConnector: () => ghostcmsConnector,
196
210
  gistlyConnector: () => gistlyConnector,
197
211
  giteaConnector: () => giteaConnector,
@@ -199,6 +213,7 @@ __export(adapters_exports, {
199
213
  gitlabConnector: () => gitlabConnector,
200
214
  glideConnector: () => glideConnector,
201
215
  gmail: () => gmail,
216
+ gongConnector: () => gongConnector,
202
217
  googleAnalyticsConnector: () => googleAnalyticsConnector,
203
218
  googleBigqueryConnector: () => googleBigqueryConnector,
204
219
  googleCalendar: () => googleCalendar,
@@ -237,6 +252,8 @@ __export(adapters_exports, {
237
252
  helpscoutConnector: () => helpscoutConnector,
238
253
  heygenConnector: () => heygenConnector,
239
254
  heymarketSmsConnector: () => heymarketSmsConnector,
255
+ heyreachConnector: () => heyreachConnector,
256
+ hightouchConnector: () => hightouchConnector,
240
257
  housecallProConnector: () => housecallProConnector,
241
258
  hubspot: () => hubspot,
242
259
  huggingFaceConnector: () => huggingFaceConnector,
@@ -261,6 +278,7 @@ __export(adapters_exports, {
261
278
  joggAiConnector: () => joggAiConnector,
262
279
  jotformConnector: () => jotformConnector,
263
280
  justInvoiceConnector: () => justInvoiceConnector,
281
+ justcallConnector: () => justcallConnector,
264
282
  kallabotAiConnector: () => kallabotAiConnector,
265
283
  kapsoConnector: () => kapsoConnector,
266
284
  kimaiConnector: () => kimaiConnector,
@@ -274,7 +292,10 @@ __export(adapters_exports, {
274
292
  kommoConnector: () => kommoConnector,
275
293
  kudosityConnector: () => kudosityConnector,
276
294
  kustomerConnector: () => kustomerConnector,
295
+ lagrowthmachineConnector: () => lagrowthmachineConnector,
277
296
  leadConnectorConnector: () => leadConnectorConnector,
297
+ leadfeederConnector: () => leadfeederConnector,
298
+ leadmagicConnector: () => leadmagicConnector,
278
299
  leapAiConnector: () => leapAiConnector,
279
300
  leexiConnector: () => leexiConnector,
280
301
  lemlistConnector: () => lemlistConnector,
@@ -335,6 +356,7 @@ __export(adapters_exports, {
335
356
  missiveConnector: () => missiveConnector,
336
357
  mixmaxConnector: () => mixmaxConnector,
337
358
  mixpanelConnector: () => mixpanelConnector,
359
+ modjoConnector: () => modjoConnector,
338
360
  mollieConnector: () => mollieConnector,
339
361
  mondayConnector: () => mondayConnector,
340
362
  mongodbConnector: () => mongodbConnector,
@@ -343,9 +365,11 @@ __export(adapters_exports, {
343
365
  niftyConnector: () => niftyConnector,
344
366
  ninjapipeConnector: () => ninjapipeConnector,
345
367
  nocodbConnector: () => nocodbConnector,
368
+ nooksConnector: () => nooksConnector,
346
369
  notion: () => notion,
347
370
  notionConnector: () => notionConnector,
348
371
  ntfyConnector: () => ntfyConnector,
372
+ oceanIoConnector: () => oceanIoConnector,
349
373
  odooConnector: () => odooConnector,
350
374
  omniCoConnector: () => omniCoConnector,
351
375
  omnihrConnector: () => omnihrConnector,
@@ -360,6 +384,7 @@ __export(adapters_exports, {
360
384
  oracleDatabaseConnector: () => oracleDatabaseConnector,
361
385
  orimonConnector: () => orimonConnector,
362
386
  outlookMail: () => outlookMail,
387
+ outreachConnector: () => outreachConnector,
363
388
  paddleConnector: () => paddleConnector,
364
389
  pagerdutyConnector: () => pagerdutyConnector,
365
390
  pandadoc: () => pandadoc,
@@ -372,6 +397,7 @@ __export(adapters_exports, {
372
397
  peekshotConnector: () => peekshotConnector,
373
398
  perplexityAiConnector: () => perplexityAiConnector,
374
399
  personalAiConnector: () => personalAiConnector,
400
+ phantombusterConnector: () => phantombusterConnector,
375
401
  phonyConnector: () => phonyConnector,
376
402
  pinchPaymentsConnector: () => pinchPaymentsConnector,
377
403
  pineconeConnector: () => pineconeConnector,
@@ -381,6 +407,7 @@ __export(adapters_exports, {
381
407
  plausibleConnector: () => plausibleConnector,
382
408
  pocketbaseConnector: () => pocketbaseConnector,
383
409
  pollybotAiConnector: () => pollybotAiConnector,
410
+ polytomicConnector: () => polytomicConnector,
384
411
  postgresConnector: () => postgresConnector,
385
412
  posthogConnector: () => posthogConnector,
386
413
  postizConnector: () => postizConnector,
@@ -404,17 +431,21 @@ __export(adapters_exports, {
404
431
  replyIoConnector: () => replyIoConnector,
405
432
  retableConnector: () => retableConnector,
406
433
  retellAiConnector: () => retellAiConnector,
434
+ ringcentralConnector: () => ringcentralConnector,
407
435
  ripplingConnector: () => ripplingConnector,
408
436
  robollyConnector: () => robollyConnector,
409
437
  runwareConnector: () => runwareConnector,
410
438
  saasticConnector: () => saasticConnector,
411
439
  saleorConnector: () => saleorConnector,
412
440
  salesforceConnector: () => salesforceConnector,
441
+ saleshandyConnector: () => saleshandyConnector,
442
+ salesloftConnector: () => salesloftConnector,
413
443
  sanityConnector: () => sanityConnector,
414
444
  sardisConnector: () => sardisConnector,
415
445
  savvycalConnector: () => savvycalConnector,
416
446
  scrapegraphaiConnector: () => scrapegraphaiConnector,
417
447
  scrapelessConnector: () => scrapelessConnector,
448
+ seamlessAiConnector: () => seamlessAiConnector,
418
449
  seekTableConnector: () => seekTableConnector,
419
450
  semrushConnector: () => semrushConnector,
420
451
  sendgridConnector: () => sendgridConnector,
@@ -422,6 +453,7 @@ __export(adapters_exports, {
422
453
  sendpulseConnector: () => sendpulseConnector,
423
454
  senjaConnector: () => senjaConnector,
424
455
  sentryConnector: () => sentryConnector,
456
+ serperConnector: () => serperConnector,
425
457
  serpstatConnector: () => serpstatConnector,
426
458
  serviceNowConnector: () => serviceNowConnector,
427
459
  sharepoint: () => sharepoint,
@@ -430,6 +462,7 @@ __export(adapters_exports, {
430
462
  shortIoConnector: () => shortIoConnector,
431
463
  signNowConnector: () => signNowConnector,
432
464
  signrequestConnector: () => signrequestConnector,
465
+ signwellConnector: () => signwellConnector,
433
466
  similarwebConnector: () => similarwebConnector,
434
467
  simplirouteConnector: () => simplirouteConnector,
435
468
  simplybookmeConnector: () => simplybookmeConnector,
@@ -441,6 +474,7 @@ __export(adapters_exports, {
441
474
  smartsuiteConnector: () => smartsuiteConnector,
442
475
  smooveConnector: () => smooveConnector,
443
476
  smsmodeConnector: () => smsmodeConnector,
477
+ snovIoConnector: () => snovIoConnector,
444
478
  snowflakeConnector: () => snowflakeConnector,
445
479
  socialkitConnector: () => socialkitConnector,
446
480
  squareConnector: () => squareConnector,
@@ -460,6 +494,7 @@ __export(adapters_exports, {
460
494
  telnyxConnector: () => telnyxConnector,
461
495
  tenzoConnector: () => tenzoConnector,
462
496
  textcortexAiConnector: () => textcortexAiConnector,
497
+ theirstackConnector: () => theirstackConnector,
463
498
  ticktickConnector: () => ticktickConnector,
464
499
  timeOpsConnector: () => timeOpsConnector,
465
500
  timelinesAiConnector: () => timelinesAiConnector,
@@ -479,6 +514,7 @@ __export(adapters_exports, {
479
514
  umamiConnector: () => umamiConnector,
480
515
  upgradechatConnector: () => upgradechatConnector,
481
516
  uscreenConnector: () => uscreenConnector,
517
+ usergemsConnector: () => usergemsConnector,
482
518
  validatedmailsConnector: () => validatedmailsConnector,
483
519
  vapiConnector: () => vapiConnector,
484
520
  vboutConnector: () => vboutConnector,
@@ -490,6 +526,7 @@ __export(adapters_exports, {
490
526
  vtexConnector: () => vtexConnector,
491
527
  vtigerConnector: () => vtigerConnector,
492
528
  wafeqConnector: () => wafeqConnector,
529
+ warmlyConnector: () => warmlyConnector,
493
530
  weaviateConnector: () => weaviateConnector,
494
531
  webflowConnector: () => webflowConnector,
495
532
  webhookConnector: () => webhookConnector,
@@ -498,6 +535,7 @@ __export(adapters_exports, {
498
535
  whatsappBusiness: () => whatsappBusiness,
499
536
  whatsappConnector: () => whatsappConnector,
500
537
  whatsscaleConnector: () => whatsscaleConnector,
538
+ wizaConnector: () => wizaConnector,
501
539
  wonderchatConnector: () => wonderchatConnector,
502
540
  woocommerceConnector: () => woocommerceConnector,
503
541
  woodpeckerConnector: () => woodpeckerConnector,
@@ -515,6 +553,7 @@ __export(adapters_exports, {
515
553
  zapierConnector: () => zapierConnector,
516
554
  zendeskConnector: () => zendeskConnector,
517
555
  zendeskSellConnector: () => zendeskSellConnector,
556
+ zenrowsConnector: () => zenrowsConnector,
518
557
  zeplinConnector: () => zeplinConnector,
519
558
  zerobounceConnector: () => zerobounceConnector,
520
559
  zohoBookingsConnector: () => zohoBookingsConnector,
@@ -2281,7 +2320,7 @@ function declarativeRestConnector(spec) {
2281
2320
  },
2282
2321
  async executeRead(inv) {
2283
2322
  const op = readOperation(spec, inv.capabilityName, "read");
2284
- const response = await executeRestRequest(spec, op.request, inv);
2323
+ const response = await executeRestRequest(spec, op.request, inv, requiredArgsOf(op.parameters));
2285
2324
  return {
2286
2325
  data: response.data,
2287
2326
  etag: response.etag,
@@ -2290,7 +2329,7 @@ function declarativeRestConnector(spec) {
2290
2329
  },
2291
2330
  async executeMutation(inv) {
2292
2331
  const op = readOperation(spec, inv.capabilityName, "mutation");
2293
- const response = await executeRestRequest(spec, op.request, inv);
2332
+ const response = await executeRestRequest(spec, op.request, inv, requiredArgsOf(op.parameters));
2294
2333
  return {
2295
2334
  status: "committed",
2296
2335
  data: response.data,
@@ -2360,7 +2399,11 @@ function readOperation(spec, name, expected) {
2360
2399
  }
2361
2400
  return op;
2362
2401
  }
2363
- async function executeRestRequest(spec, request, inv) {
2402
+ function requiredArgsOf(parameters) {
2403
+ const required = parameters.required;
2404
+ return Array.isArray(required) ? required.filter((entry) => typeof entry === "string") : void 0;
2405
+ }
2406
+ async function executeRestRequest(spec, request, inv, requiredArgs) {
2364
2407
  const baseUrl = resolveBaseUrl(spec.baseUrl, inv.source.metadata);
2365
2408
  const renderedPath = interpolate(request.path, inv.args).replace(/^\/+/, "");
2366
2409
  const baseWithSlash = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
@@ -2376,13 +2419,14 @@ async function executeRestRequest(spec, request, inv) {
2376
2419
  };
2377
2420
  applyCredentials(headers, url, spec.credentialPlacement ?? { kind: "bearer" }, inv.source.credentials);
2378
2421
  if (inv.expectedEtag) headers["if-match"] = inv.expectedEtag;
2379
- if (request.method !== "GET" && request.method !== "DELETE") {
2422
+ const sendsBody = request.method !== "GET" && (request.method !== "DELETE" || request.body !== void 0);
2423
+ if (sendsBody) {
2380
2424
  headers["content-type"] = headers["content-type"] ?? "application/json";
2381
2425
  }
2382
2426
  const res = await fetch(url, {
2383
2427
  method: request.method,
2384
2428
  headers,
2385
- body: request.method === "GET" || request.method === "DELETE" ? void 0 : JSON.stringify(resolveBody(request.body, inv.args)),
2429
+ body: sendsBody ? JSON.stringify(resolveBody(request.body, inv.args, requiredArgs)) : void 0,
2386
2430
  signal: AbortSignal.timeout(2e4)
2387
2431
  });
2388
2432
  if (res.status === 401 || res.status === 403) {
@@ -2410,7 +2454,14 @@ async function executeRestRequest(spec, request, inv) {
2410
2454
  throw new Error(`${spec.kind} ${request.method} ${url.pathname} HTTP ${res.status}: ${(await safeErrorText(res)).slice(0, 300)}`);
2411
2455
  }
2412
2456
  const text = await res.text();
2413
- const data = text ? JSON.parse(text) : null;
2457
+ let data = null;
2458
+ if (text) {
2459
+ try {
2460
+ data = JSON.parse(text);
2461
+ } catch {
2462
+ data = { raw: text };
2463
+ }
2464
+ }
2414
2465
  return { data, etag: res.headers.get("etag") ?? void 0 };
2415
2466
  }
2416
2467
  function resolveBaseUrl(baseUrl, metadata) {
@@ -2431,28 +2482,47 @@ function credentialToken(credentials) {
2431
2482
  if (credentials.kind === "api-key") return credentials.apiKey;
2432
2483
  throw new Error(`declarative REST connectors require oauth2 or api-key credentials, got ${credentials.kind}`);
2433
2484
  }
2434
- function resolveBody(body, args) {
2485
+ function resolveBody(body, args, requiredArgs) {
2435
2486
  if (!body || body === "args") return args;
2436
- if (typeof body === "string") return renderValue(body, args);
2437
- return renderObject(body, args);
2487
+ if (typeof body === "string") return renderValue(body, args, requiredArgs);
2488
+ return renderObject(body, args, requiredArgs);
2438
2489
  }
2439
2490
  function renderHeaders(headers, args) {
2440
2491
  return Object.fromEntries(Object.entries(headers).map(([key, value]) => [key, interpolate(value, args)]));
2441
2492
  }
2442
- function renderObject(input, args) {
2443
- return Object.fromEntries(Object.entries(input).map(([key, value]) => [key, renderValue(value, args)]));
2493
+ function renderObject(input, args, requiredArgs) {
2494
+ const out = {};
2495
+ for (const [key, value] of Object.entries(input)) {
2496
+ if (typeof value === "string") {
2497
+ const exact = value.match(/^\{([a-zA-Z0-9_.-]+)\}$/);
2498
+ if (exact) {
2499
+ const name = exact[1];
2500
+ const resolved = readPath(args, name);
2501
+ if (resolved === void 0 || resolved === null) {
2502
+ if (requiredArgs?.includes(name)) {
2503
+ throw new Error(`missing required argument: ${name}`);
2504
+ }
2505
+ continue;
2506
+ }
2507
+ out[key] = resolved;
2508
+ continue;
2509
+ }
2510
+ }
2511
+ out[key] = renderValue(value, args, requiredArgs);
2512
+ }
2513
+ return out;
2444
2514
  }
2445
- function renderValue(value, args) {
2515
+ function renderValue(value, args, requiredArgs) {
2446
2516
  if (typeof value === "string") {
2447
2517
  const exact = value.match(/^\{([a-zA-Z0-9_.-]+)\}$/);
2448
2518
  if (exact) return readRequiredPath(args, exact[1]);
2449
2519
  return interpolate(value, args);
2450
2520
  }
2451
2521
  if (Array.isArray(value)) {
2452
- return value.map((entry) => renderValue(entry, args));
2522
+ return value.map((entry) => renderValue(entry, args, requiredArgs));
2453
2523
  }
2454
2524
  if (value && typeof value === "object") {
2455
- return renderObject(value, args);
2525
+ return renderObject(value, args, requiredArgs);
2456
2526
  }
2457
2527
  return value;
2458
2528
  }
@@ -120259,6 +120329,4262 @@ var pipedreamConnector = declarativeRestConnector({
120259
120329
  ]
120260
120330
  });
120261
120331
 
120332
+ // src/connectors/adapters/amplemarket.ts
120333
+ var amplemarketConnector = declarativeRestConnector({
120334
+ kind: "amplemarket",
120335
+ displayName: "Amplemarket",
120336
+ description: "Sales intelligence and outbound platform: search and enrich people and companies, validate emails, and add leads to sequences.",
120337
+ auth: {
120338
+ kind: "api-key",
120339
+ hint: "Generate an API key in the Amplemarket dashboard (Settings -> API). Sent as the Authorization: Bearer header."
120340
+ },
120341
+ category: "crm",
120342
+ defaultConsistencyModel: "authoritative",
120343
+ baseUrl: "https://api.amplemarket.com",
120344
+ credentialPlacement: { kind: "bearer" },
120345
+ defaultHeaders: { "content-type": "application/json" },
120346
+ test: { method: "GET", path: "/account-info" },
120347
+ capabilities: [
120348
+ {
120349
+ name: "people.search",
120350
+ class: "read",
120351
+ description: "Search for people by job function, company, industry and other filters.",
120352
+ parameters: {
120353
+ type: "object",
120354
+ properties: {
120355
+ page: { type: "integer", description: "Page number." },
120356
+ page_size: { type: "integer", description: "Results per page." },
120357
+ job_functions: {
120358
+ type: "array",
120359
+ items: { type: "string" },
120360
+ description: "Job functions to filter by."
120361
+ },
120362
+ industries: {
120363
+ type: "array",
120364
+ items: { type: "string" },
120365
+ description: "Industries to filter by."
120366
+ }
120367
+ },
120368
+ required: []
120369
+ },
120370
+ request: {
120371
+ method: "POST",
120372
+ path: "/people/search",
120373
+ body: {
120374
+ page: "{page}",
120375
+ page_size: "{page_size}",
120376
+ job_functions: "{job_functions}",
120377
+ industries: "{industries}"
120378
+ }
120379
+ }
120380
+ },
120381
+ {
120382
+ name: "people.find",
120383
+ class: "mutation",
120384
+ description: "Enrich a single person by LinkedIn URL, email, or full name plus company. Consumes credits when contact data is revealed.",
120385
+ parameters: {
120386
+ type: "object",
120387
+ properties: {
120388
+ linkedin_url: { type: "string", description: "LinkedIn profile URL." },
120389
+ email: { type: "string", description: "Known email address." },
120390
+ full_name: { type: "string", description: "Person's full name." },
120391
+ company_name: { type: "string", description: "Company name (use with full_name)." }
120392
+ },
120393
+ required: []
120394
+ },
120395
+ request: {
120396
+ method: "GET",
120397
+ path: "/people/find",
120398
+ query: {
120399
+ linkedin_url: "{linkedin_url}",
120400
+ email: "{email}",
120401
+ full_name: "{full_name}",
120402
+ company_name: "{company_name}"
120403
+ }
120404
+ },
120405
+ cas: "native-idempotency",
120406
+ externalEffect: false
120407
+ },
120408
+ {
120409
+ name: "companies.find",
120410
+ class: "read",
120411
+ description: "Enrich a single company by LinkedIn URL, domain, or name.",
120412
+ parameters: {
120413
+ type: "object",
120414
+ properties: {
120415
+ linkedin_url: { type: "string", description: "Company LinkedIn URL." },
120416
+ domain: { type: "string", description: "Company domain." },
120417
+ name: { type: "string", description: "Company name." }
120418
+ },
120419
+ required: []
120420
+ },
120421
+ request: {
120422
+ method: "GET",
120423
+ path: "/companies/find",
120424
+ query: { linkedin_url: "{linkedin_url}", domain: "{domain}", name: "{name}" }
120425
+ }
120426
+ },
120427
+ {
120428
+ name: "email.validate",
120429
+ class: "mutation",
120430
+ description: "Start a batch email validation job. Consumes one email credit per validated address.",
120431
+ parameters: {
120432
+ type: "object",
120433
+ properties: {
120434
+ emails: {
120435
+ type: "array",
120436
+ items: { type: "object", properties: { email: { type: "string" } } },
120437
+ description: "List of email objects to validate."
120438
+ }
120439
+ },
120440
+ required: ["emails"]
120441
+ },
120442
+ request: { method: "POST", path: "/email-validations", body: { emails: "{emails}" } },
120443
+ cas: "native-idempotency",
120444
+ externalEffect: false
120445
+ },
120446
+ {
120447
+ name: "sequence.add_leads",
120448
+ class: "mutation",
120449
+ description: "Add one or more leads to an existing Amplemarket sequence.",
120450
+ parameters: {
120451
+ type: "object",
120452
+ properties: {
120453
+ id: { type: "string", description: "Sequence ID." },
120454
+ leads: {
120455
+ type: "array",
120456
+ items: { type: "object" },
120457
+ description: "Array of lead objects to enroll."
120458
+ }
120459
+ },
120460
+ required: ["id", "leads"]
120461
+ },
120462
+ request: { method: "POST", path: "/sequences/{id}/leads", body: { leads: "{leads}" } },
120463
+ cas: "native-idempotency",
120464
+ externalEffect: true
120465
+ }
120466
+ ]
120467
+ });
120468
+
120469
+ // src/connectors/adapters/heyreach.ts
120470
+ var heyreachConnector = declarativeRestConnector({
120471
+ kind: "heyreach",
120472
+ displayName: "HeyReach",
120473
+ description: "LinkedIn outreach automation at agency scale. List campaigns and lists, add leads to campaigns, look up leads, and read inbox conversations.",
120474
+ auth: {
120475
+ kind: "api-key",
120476
+ hint: "Generate an API key in HeyReach (Settings -> Integrations -> Public API). Sent as the X-API-KEY header."
120477
+ },
120478
+ category: "crm",
120479
+ defaultConsistencyModel: "authoritative",
120480
+ baseUrl: "https://api.heyreach.io/api/public",
120481
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
120482
+ defaultHeaders: { "content-type": "application/json" },
120483
+ test: { method: "GET", path: "/auth/CheckApiKey" },
120484
+ capabilities: [
120485
+ {
120486
+ name: "campaign.list",
120487
+ class: "read",
120488
+ description: "List campaigns in the workspace with pagination.",
120489
+ parameters: {
120490
+ type: "object",
120491
+ properties: {
120492
+ offset: { type: "integer", description: "Number of records to skip." },
120493
+ limit: { type: "integer", description: "Maximum records to return." }
120494
+ },
120495
+ required: ["offset", "limit"]
120496
+ },
120497
+ request: {
120498
+ method: "POST",
120499
+ path: "/campaign/GetAll",
120500
+ body: { offset: "{offset}", limit: "{limit}" }
120501
+ }
120502
+ },
120503
+ {
120504
+ name: "list.list",
120505
+ class: "read",
120506
+ description: "List lead lists in the workspace with pagination.",
120507
+ parameters: {
120508
+ type: "object",
120509
+ properties: {
120510
+ offset: { type: "integer", description: "Number of records to skip." },
120511
+ limit: { type: "integer", description: "Maximum records to return." }
120512
+ },
120513
+ required: ["offset", "limit"]
120514
+ },
120515
+ request: {
120516
+ method: "POST",
120517
+ path: "/list/GetAll",
120518
+ body: { offset: "{offset}", limit: "{limit}" }
120519
+ }
120520
+ },
120521
+ {
120522
+ name: "lead.get",
120523
+ class: "read",
120524
+ description: "Get details for a lead by their LinkedIn profile URL.",
120525
+ parameters: {
120526
+ type: "object",
120527
+ properties: {
120528
+ profileUrl: { type: "string", description: "LinkedIn profile URL of the lead." }
120529
+ },
120530
+ required: ["profileUrl"]
120531
+ },
120532
+ request: {
120533
+ method: "POST",
120534
+ path: "/lead/GetLead",
120535
+ body: { profileUrl: "{profileUrl}" }
120536
+ }
120537
+ },
120538
+ {
120539
+ name: "campaign.add_leads",
120540
+ class: "mutation",
120541
+ description: "Add leads (LinkedIn profiles) to an active campaign, assigned to specific sender accounts.",
120542
+ parameters: {
120543
+ type: "object",
120544
+ properties: {
120545
+ campaignId: {
120546
+ type: "integer",
120547
+ description: "Target campaign ID (must be ACTIVE or IN_PROGRESS)."
120548
+ },
120549
+ accountLeadPairs: {
120550
+ type: "array",
120551
+ description: "Array of pairs, each with an optional linkedInAccountId (sender) and a lead object (profileUrl, firstName, lastName, companyName, position, location, emailAddress).",
120552
+ items: { type: "object" }
120553
+ }
120554
+ },
120555
+ required: ["campaignId", "accountLeadPairs"]
120556
+ },
120557
+ request: {
120558
+ method: "POST",
120559
+ path: "/campaign/AddLeadsToCampaignV2",
120560
+ body: { campaignId: "{campaignId}", accountLeadPairs: "{accountLeadPairs}" }
120561
+ },
120562
+ cas: "native-idempotency",
120563
+ externalEffect: true
120564
+ },
120565
+ {
120566
+ name: "inbox.get_conversations",
120567
+ class: "read",
120568
+ description: "Retrieve inbox conversations with filtering and pagination.",
120569
+ parameters: {
120570
+ type: "object",
120571
+ properties: {
120572
+ offset: { type: "integer", description: "Number of records to skip." },
120573
+ limit: { type: "integer", description: "Maximum records to return." },
120574
+ filters: { type: "object", description: "Optional conversation filters." }
120575
+ },
120576
+ required: ["offset", "limit"]
120577
+ },
120578
+ request: {
120579
+ method: "POST",
120580
+ path: "/inbox/GetConversationsV2",
120581
+ body: { offset: "{offset}", limit: "{limit}", filters: "{filters}" }
120582
+ }
120583
+ }
120584
+ ]
120585
+ });
120586
+
120587
+ // src/connectors/adapters/lagrowthmachine.ts
120588
+ var lagrowthmachineConnector = declarativeRestConnector({
120589
+ kind: "lagrowthmachine",
120590
+ displayName: "LaGrowthMachine",
120591
+ description: "Multichannel sales automation (LinkedIn, email, Twitter). Create or update leads in audiences, list campaigns and audiences, and read campaign stats.",
120592
+ auth: {
120593
+ kind: "api-key",
120594
+ hint: "Get your API key at app.lagrowthmachine.com/settings/api. Sent as the 'apikey' query parameter on every request."
120595
+ },
120596
+ category: "crm",
120597
+ defaultConsistencyModel: "authoritative",
120598
+ baseUrl: "https://apiv2.lagrowthmachine.com",
120599
+ credentialPlacement: { kind: "query", parameter: "apikey" },
120600
+ defaultHeaders: { "content-type": "application/json" },
120601
+ test: { method: "GET", path: "/flow/audiences" },
120602
+ capabilities: [
120603
+ {
120604
+ name: "campaigns.list",
120605
+ class: "read",
120606
+ description: "List campaigns with pagination.",
120607
+ parameters: {
120608
+ type: "object",
120609
+ properties: {
120610
+ skip: { type: "integer", description: "Pagination offset." },
120611
+ limit: { type: "integer", description: "Maximum results to return." }
120612
+ },
120613
+ required: []
120614
+ },
120615
+ request: {
120616
+ method: "GET",
120617
+ path: "/flow/campaigns",
120618
+ query: { skip: "{skip}", limit: "{limit}" }
120619
+ }
120620
+ },
120621
+ {
120622
+ name: "audiences.list",
120623
+ class: "read",
120624
+ description: "List the audiences in the workspace.",
120625
+ parameters: { type: "object", properties: {}, required: [] },
120626
+ request: { method: "GET", path: "/flow/audiences" }
120627
+ },
120628
+ {
120629
+ name: "campaign.get_stats",
120630
+ class: "read",
120631
+ description: "Get engagement statistics for a campaign.",
120632
+ parameters: {
120633
+ type: "object",
120634
+ properties: { campaignId: { type: "string", description: "Campaign ID." } },
120635
+ required: ["campaignId"]
120636
+ },
120637
+ request: { method: "GET", path: "/flow/campaigns/{campaignId}/stats" }
120638
+ },
120639
+ {
120640
+ name: "lead.create_or_update",
120641
+ class: "mutation",
120642
+ description: "Create or update a lead in an audience, which starts it through the audience's workflow.",
120643
+ parameters: {
120644
+ type: "object",
120645
+ properties: {
120646
+ audience: { type: "string", description: "Audience name or identifier." },
120647
+ proEmail: { type: "string", description: "Professional email." },
120648
+ persoEmail: { type: "string", description: "Personal email." },
120649
+ linkedinUrl: { type: "string", description: "LinkedIn profile URL." },
120650
+ firstname: { type: "string", description: "First name." },
120651
+ lastname: { type: "string", description: "Last name." },
120652
+ companyName: { type: "string", description: "Company name." },
120653
+ jobTitle: { type: "string", description: "Job title." }
120654
+ },
120655
+ required: ["audience"]
120656
+ },
120657
+ request: {
120658
+ method: "POST",
120659
+ path: "/flow/leads",
120660
+ body: {
120661
+ audience: "{audience}",
120662
+ proEmail: "{proEmail}",
120663
+ persoEmail: "{persoEmail}",
120664
+ linkedinUrl: "{linkedinUrl}",
120665
+ firstname: "{firstname}",
120666
+ lastname: "{lastname}",
120667
+ companyName: "{companyName}",
120668
+ jobTitle: "{jobTitle}"
120669
+ }
120670
+ },
120671
+ cas: "native-idempotency",
120672
+ externalEffect: true
120673
+ }
120674
+ ]
120675
+ });
120676
+
120677
+ // src/connectors/adapters/saleshandy.ts
120678
+ var saleshandyConnector = declarativeRestConnector({
120679
+ kind: "saleshandy",
120680
+ displayName: "Saleshandy",
120681
+ description: "Cold email outreach platform: manage prospects, build sequences, add prospects to sequence steps, and control sequence status.",
120682
+ auth: {
120683
+ kind: "api-key",
120684
+ hint: "Generate an API key in company Settings -> API Settings. Sent as the x-api-key header."
120685
+ },
120686
+ category: "crm",
120687
+ defaultConsistencyModel: "authoritative",
120688
+ baseUrl: "https://open-api.saleshandy.com",
120689
+ credentialPlacement: { kind: "header", header: "x-api-key" },
120690
+ defaultHeaders: { "content-type": "application/json" },
120691
+ test: { method: "GET", path: "/v1/user/team-member-list" },
120692
+ capabilities: [
120693
+ {
120694
+ name: "sequences.list",
120695
+ class: "read",
120696
+ description: "List sequences and their steps.",
120697
+ parameters: {
120698
+ type: "object",
120699
+ properties: {
120700
+ sequenceName: { type: "string", description: "Filter by sequence name." },
120701
+ page: { type: "integer", description: "Page number." },
120702
+ pageSize: { type: "integer", description: "Results per page." }
120703
+ },
120704
+ required: []
120705
+ },
120706
+ request: {
120707
+ method: "GET",
120708
+ path: "/v1/sequences",
120709
+ query: { sequenceName: "{sequenceName}", page: "{page}", pageSize: "{pageSize}" }
120710
+ }
120711
+ },
120712
+ {
120713
+ name: "prospects.list",
120714
+ class: "read",
120715
+ description: "List all prospects with pagination and search.",
120716
+ parameters: {
120717
+ type: "object",
120718
+ properties: {
120719
+ search: { type: "string", description: "Search term." },
120720
+ page: { type: "integer", description: "Page number." },
120721
+ pageSize: { type: "integer", description: "Results per page." }
120722
+ },
120723
+ required: []
120724
+ },
120725
+ request: {
120726
+ method: "GET",
120727
+ path: "/v1/prospects",
120728
+ query: { search: "{search}", page: "{page}", pageSize: "{pageSize}" }
120729
+ }
120730
+ },
120731
+ {
120732
+ name: "sequence.import_prospects",
120733
+ class: "mutation",
120734
+ description: "Import prospects (keyed by field name) into a sequence at a given step.",
120735
+ parameters: {
120736
+ type: "object",
120737
+ properties: {
120738
+ prospectList: {
120739
+ type: "array",
120740
+ description: "Array of prospect objects keyed by field name (e.g. Email, First Name).",
120741
+ items: { type: "object" }
120742
+ },
120743
+ stepId: { type: "integer", description: "Sequence step ID to add prospects to." },
120744
+ conflictAction: {
120745
+ type: "string",
120746
+ description: "How to handle duplicates (e.g. skip, update)."
120747
+ },
120748
+ verifyProspects: { type: "boolean", description: "Verify emails on import." },
120749
+ tags: { type: "array", items: { type: "string" }, description: "Tags to apply." }
120750
+ },
120751
+ required: ["prospectList", "stepId", "conflictAction"]
120752
+ },
120753
+ request: {
120754
+ method: "POST",
120755
+ path: "/v1/sequences/prospects/import-with-field-name",
120756
+ body: {
120757
+ prospectList: "{prospectList}",
120758
+ stepId: "{stepId}",
120759
+ conflictAction: "{conflictAction}",
120760
+ verifyProspects: "{verifyProspects}",
120761
+ tags: "{tags}"
120762
+ }
120763
+ },
120764
+ cas: "native-idempotency",
120765
+ externalEffect: true
120766
+ },
120767
+ {
120768
+ name: "sequence.set_status",
120769
+ class: "mutation",
120770
+ description: "Activate or pause one or more sequences.",
120771
+ parameters: {
120772
+ type: "object",
120773
+ properties: {
120774
+ sequenceIds: {
120775
+ type: "array",
120776
+ items: { type: "string" },
120777
+ description: "Sequence IDs to update."
120778
+ },
120779
+ status: { type: "string", description: "Target status (e.g. ACTIVE, PAUSED)." }
120780
+ },
120781
+ required: ["sequenceIds", "status"]
120782
+ },
120783
+ request: {
120784
+ method: "POST",
120785
+ path: "/v1/sequences/status",
120786
+ body: { sequenceIds: "{sequenceIds}", status: "{status}" }
120787
+ },
120788
+ cas: "native-idempotency",
120789
+ externalEffect: true
120790
+ }
120791
+ ]
120792
+ });
120793
+
120794
+ // src/connectors/adapters/bettercontact.ts
120795
+ var bettercontactConnector = declarativeRestConnector({
120796
+ kind: "bettercontact",
120797
+ displayName: "BetterContact",
120798
+ description: "Waterfall email and phone enrichment that queries 20+ data providers to find a contact's work email and direct phone number.",
120799
+ auth: {
120800
+ kind: "api-key",
120801
+ hint: "API key from the BetterContact dashboard (Settings -> API). Sent as the X-API-Key header."
120802
+ },
120803
+ category: "crm",
120804
+ defaultConsistencyModel: "authoritative",
120805
+ baseUrl: "https://app.bettercontact.rocks/api/v2",
120806
+ credentialPlacement: { kind: "header", header: "X-API-Key" },
120807
+ defaultHeaders: { "content-type": "application/json" },
120808
+ capabilities: [
120809
+ {
120810
+ name: "enrichment.create",
120811
+ class: "mutation",
120812
+ description: "Start an asynchronous waterfall enrichment for 1-100 contacts to find work emails and/or direct phone numbers. Consumes credits per found data point.",
120813
+ parameters: {
120814
+ type: "object",
120815
+ properties: {
120816
+ data: {
120817
+ type: "array",
120818
+ description: "Array of 1-100 lead objects to enrich; each supports first_name, last_name, company, company_domain, linkedin_url, and custom_fields.",
120819
+ items: { type: "object" }
120820
+ },
120821
+ enrich_email_address: { type: "boolean", description: "If true, enrich the work email address." },
120822
+ enrich_phone_number: { type: "boolean", description: "If true, enrich the direct phone number." },
120823
+ webhook: {
120824
+ type: "string",
120825
+ description: "Optional URL to which results are pushed when enrichment completes."
120826
+ }
120827
+ },
120828
+ required: ["data", "enrich_email_address", "enrich_phone_number"]
120829
+ },
120830
+ request: {
120831
+ method: "POST",
120832
+ path: "/async",
120833
+ body: {
120834
+ data: "{data}",
120835
+ enrich_email_address: "{enrich_email_address}",
120836
+ enrich_phone_number: "{enrich_phone_number}",
120837
+ webhook: "{webhook}"
120838
+ }
120839
+ },
120840
+ cas: "native-idempotency",
120841
+ externalEffect: false
120842
+ },
120843
+ {
120844
+ name: "enrichment.get",
120845
+ class: "read",
120846
+ description: "Retrieve the status and enriched results of a previously submitted enrichment request by its request id.",
120847
+ parameters: {
120848
+ type: "object",
120849
+ properties: {
120850
+ request_id: { type: "string", description: "The id returned by enrichment.create." }
120851
+ },
120852
+ required: ["request_id"]
120853
+ },
120854
+ request: { method: "GET", path: "/async/{request_id}" }
120855
+ }
120856
+ ]
120857
+ });
120858
+
120859
+ // src/connectors/adapters/contactout.ts
120860
+ var contactoutConnector = declarativeRestConnector({
120861
+ kind: "contactout",
120862
+ displayName: "ContactOut",
120863
+ description: "Find and enrich professional and personal emails, phone numbers, and LinkedIn data for prospects.",
120864
+ auth: {
120865
+ kind: "api-key",
120866
+ hint: "API token from your ContactOut account. Sent as the 'token' header."
120867
+ },
120868
+ category: "crm",
120869
+ defaultConsistencyModel: "authoritative",
120870
+ baseUrl: "https://api.contactout.com",
120871
+ credentialPlacement: { kind: "header", header: "token" },
120872
+ defaultHeaders: { "content-type": "application/json" },
120873
+ capabilities: [
120874
+ {
120875
+ name: "people.search",
120876
+ class: "read",
120877
+ description: "Search for people profiles matching criteria such as name, job title, company, and location.",
120878
+ parameters: {
120879
+ type: "object",
120880
+ properties: {
120881
+ name: { type: "string" },
120882
+ job_title: { type: "array", items: { type: "string" } },
120883
+ company: { type: "array", items: { type: "string" } },
120884
+ location: { type: "array", items: { type: "string" } },
120885
+ page: { type: "integer", description: "Result page number." },
120886
+ reveal_info: {
120887
+ type: "boolean",
120888
+ description: "Include contact data (consumes email/phone credits)."
120889
+ }
120890
+ },
120891
+ required: []
120892
+ },
120893
+ request: {
120894
+ method: "POST",
120895
+ path: "/v1/people/search",
120896
+ body: {
120897
+ name: "{name}",
120898
+ job_title: "{job_title}",
120899
+ company: "{company}",
120900
+ location: "{location}",
120901
+ page: "{page}",
120902
+ reveal_info: "{reveal_info}"
120903
+ }
120904
+ }
120905
+ },
120906
+ {
120907
+ name: "linkedin.enrich",
120908
+ class: "mutation",
120909
+ description: "Look up a LinkedIn profile URL and return contact data including emails and phones. Consumes credits when contact info is found.",
120910
+ parameters: {
120911
+ type: "object",
120912
+ properties: {
120913
+ profile: { type: "string", description: "URL-encoded LinkedIn profile URL." },
120914
+ profile_only: {
120915
+ type: "boolean",
120916
+ description: "If true, return profile data without contact info."
120917
+ }
120918
+ },
120919
+ required: ["profile"]
120920
+ },
120921
+ request: {
120922
+ method: "GET",
120923
+ path: "/v1/linkedin/enrich",
120924
+ query: { profile: "{profile}", profile_only: "{profile_only}" }
120925
+ },
120926
+ cas: "native-idempotency",
120927
+ externalEffect: false
120928
+ },
120929
+ {
120930
+ name: "people.enrich",
120931
+ class: "mutation",
120932
+ description: "Enrich a person from a LinkedIn URL, email, or name plus company. Returns work/personal emails and phones; consumes credits when found.",
120933
+ parameters: {
120934
+ type: "object",
120935
+ properties: {
120936
+ linkedin_url: { type: "string" },
120937
+ email: { type: "string" },
120938
+ full_name: { type: "string" },
120939
+ company: { type: "string" },
120940
+ company_domain: { type: "string" },
120941
+ include: {
120942
+ type: "array",
120943
+ description: "Data types to include, e.g. work_email, personal_email, phone.",
120944
+ items: { type: "string" }
120945
+ }
120946
+ },
120947
+ required: []
120948
+ },
120949
+ request: {
120950
+ method: "POST",
120951
+ path: "/v1/people/enrich",
120952
+ body: {
120953
+ linkedin_url: "{linkedin_url}",
120954
+ email: "{email}",
120955
+ full_name: "{full_name}",
120956
+ company: "{company}",
120957
+ company_domain: "{company_domain}",
120958
+ include: "{include}"
120959
+ }
120960
+ },
120961
+ cas: "native-idempotency",
120962
+ externalEffect: false
120963
+ },
120964
+ {
120965
+ name: "email.verify",
120966
+ class: "mutation",
120967
+ description: "Verify the deliverability of an email address. Consumes a verifier credit for definitive results.",
120968
+ parameters: {
120969
+ type: "object",
120970
+ properties: { email: { type: "string" } },
120971
+ required: ["email"]
120972
+ },
120973
+ request: { method: "GET", path: "/v1/email/verify", query: { email: "{email}" } },
120974
+ cas: "native-idempotency",
120975
+ externalEffect: false
120976
+ }
120977
+ ]
120978
+ });
120979
+
120980
+ // src/connectors/adapters/findymail.ts
120981
+ var findymailConnector = declarativeRestConnector({
120982
+ kind: "findymail",
120983
+ displayName: "Findymail",
120984
+ description: "Find verified work email addresses by name and company domain, verify deliverability, and discover emails across a domain.",
120985
+ auth: {
120986
+ kind: "api-key",
120987
+ hint: "API key from your Findymail dashboard. Sent as the Authorization: Bearer header."
120988
+ },
120989
+ category: "crm",
120990
+ defaultConsistencyModel: "authoritative",
120991
+ baseUrl: "https://app.findymail.com",
120992
+ credentialPlacement: { kind: "bearer" },
120993
+ defaultHeaders: { "content-type": "application/json", accept: "application/json" },
120994
+ test: { method: "GET", path: "/api/credits" },
120995
+ capabilities: [
120996
+ {
120997
+ name: "email.find",
120998
+ class: "mutation",
120999
+ description: "Find a person's verified work email from their full name and company domain. Consumes a credit when an email is found.",
121000
+ parameters: {
121001
+ type: "object",
121002
+ properties: {
121003
+ name: { type: "string", description: "Full name of the person." },
121004
+ domain: { type: "string", description: "Company domain." }
121005
+ },
121006
+ required: ["name", "domain"]
121007
+ },
121008
+ request: {
121009
+ method: "POST",
121010
+ path: "/api/search/name",
121011
+ body: { name: "{name}", domain: "{domain}" }
121012
+ },
121013
+ cas: "native-idempotency",
121014
+ externalEffect: false
121015
+ },
121016
+ {
121017
+ name: "email.verify",
121018
+ class: "mutation",
121019
+ description: "Verify the deliverability of an email address and return the email provider. Consumes a verification credit.",
121020
+ parameters: {
121021
+ type: "object",
121022
+ properties: { email: { type: "string" } },
121023
+ required: ["email"]
121024
+ },
121025
+ request: { method: "POST", path: "/api/verify", body: { email: "{email}" } },
121026
+ cas: "native-idempotency",
121027
+ externalEffect: false
121028
+ },
121029
+ {
121030
+ name: "email.find_by_domain",
121031
+ class: "mutation",
121032
+ description: "Find email addresses associated with a company domain. Consumes credits per email returned.",
121033
+ parameters: {
121034
+ type: "object",
121035
+ properties: { domain: { type: "string", description: "Company domain to search." } },
121036
+ required: ["domain"]
121037
+ },
121038
+ request: { method: "POST", path: "/api/search/domain", body: { domain: "{domain}" } },
121039
+ cas: "native-idempotency",
121040
+ externalEffect: false
121041
+ },
121042
+ {
121043
+ name: "credits.get",
121044
+ class: "read",
121045
+ description: "Retrieve the remaining credit balance for the account.",
121046
+ parameters: { type: "object", properties: {}, required: [] },
121047
+ request: { method: "GET", path: "/api/credits" }
121048
+ }
121049
+ ]
121050
+ });
121051
+
121052
+ // src/connectors/adapters/snov-io.ts
121053
+ var snovIoConnector = declarativeRestConnector({
121054
+ kind: "snov-io",
121055
+ displayName: "Snov.io",
121056
+ description: "Find and verify B2B email addresses by domain or by name, and enrich profiles from an email address.",
121057
+ auth: {
121058
+ kind: "api-key",
121059
+ hint: "Exchange your API User ID and Secret (account Settings -> API) for an access token via POST /v1/oauth/access_token, then paste the access token here. Sent as the Authorization: Bearer header."
121060
+ },
121061
+ category: "crm",
121062
+ defaultConsistencyModel: "authoritative",
121063
+ baseUrl: "https://api.snov.io",
121064
+ credentialPlacement: { kind: "bearer" },
121065
+ defaultHeaders: { "content-type": "application/json" },
121066
+ test: { method: "GET", path: "/v2/sender-accounts/emails" },
121067
+ capabilities: [
121068
+ {
121069
+ name: "domain_search.start",
121070
+ class: "mutation",
121071
+ description: "Start an asynchronous search for email addresses belonging to a company domain. Returns a task to poll for results.",
121072
+ parameters: {
121073
+ type: "object",
121074
+ properties: { domain: { type: "string", description: "Company domain to search." } },
121075
+ required: ["domain"]
121076
+ },
121077
+ request: {
121078
+ method: "POST",
121079
+ path: "/v2/domain-search/start",
121080
+ body: { domain: "{domain}" }
121081
+ },
121082
+ cas: "native-idempotency",
121083
+ externalEffect: false
121084
+ },
121085
+ {
121086
+ name: "email_finder.start",
121087
+ class: "mutation",
121088
+ description: "Start finding email addresses for one or more people by first name, last name, and company domain. Returns a task to poll; consumes credits when emails are found.",
121089
+ parameters: {
121090
+ type: "object",
121091
+ properties: {
121092
+ rows: {
121093
+ type: "array",
121094
+ description: "Array of objects each with first_name, last_name, and domain.",
121095
+ items: { type: "object" }
121096
+ }
121097
+ },
121098
+ required: ["rows"]
121099
+ },
121100
+ request: {
121101
+ method: "POST",
121102
+ path: "/v2/emails-by-domain-by-name/start",
121103
+ body: { rows: "{rows}" }
121104
+ },
121105
+ cas: "native-idempotency",
121106
+ externalEffect: false
121107
+ },
121108
+ {
121109
+ name: "email_verification.start",
121110
+ class: "mutation",
121111
+ description: "Start verification of up to 10 email addresses. Returns a task to poll for deliverability results. Consumes credits.",
121112
+ parameters: {
121113
+ type: "object",
121114
+ properties: {
121115
+ emails: {
121116
+ type: "array",
121117
+ description: "Array of email addresses to verify (max 10).",
121118
+ items: { type: "string" }
121119
+ }
121120
+ },
121121
+ required: ["emails"]
121122
+ },
121123
+ request: {
121124
+ method: "POST",
121125
+ path: "/v2/email-verification/start",
121126
+ body: { emails: "{emails}" }
121127
+ },
121128
+ cas: "native-idempotency",
121129
+ externalEffect: false
121130
+ },
121131
+ {
121132
+ name: "profile.get_by_email",
121133
+ class: "mutation",
121134
+ description: "Enrich a social/professional profile from an email address. Consumes a credit.",
121135
+ parameters: {
121136
+ type: "object",
121137
+ properties: { email: { type: "string" } },
121138
+ required: ["email"]
121139
+ },
121140
+ request: {
121141
+ method: "POST",
121142
+ path: "/v1/get-profile-by-email",
121143
+ body: { email: "{email}" }
121144
+ },
121145
+ cas: "native-idempotency",
121146
+ externalEffect: false
121147
+ },
121148
+ {
121149
+ name: "domain_emails_count.get",
121150
+ class: "read",
121151
+ description: "Get the count of email addresses available for a domain (free, does not consume credits).",
121152
+ parameters: {
121153
+ type: "object",
121154
+ properties: { domain: { type: "string" } },
121155
+ required: ["domain"]
121156
+ },
121157
+ request: {
121158
+ method: "POST",
121159
+ path: "/v1/get-domain-emails-count",
121160
+ body: { domain: "{domain}" }
121161
+ }
121162
+ }
121163
+ ]
121164
+ });
121165
+
121166
+ // src/connectors/adapters/wiza.ts
121167
+ var wizaConnector = declarativeRestConnector({
121168
+ kind: "wiza",
121169
+ displayName: "Wiza",
121170
+ description: "Real-time contact enrichment that reveals a person's work/personal email and phone from a LinkedIn URL, email, or name plus company.",
121171
+ auth: {
121172
+ kind: "api-key",
121173
+ hint: "API key from Wiza account settings. Sent as the Authorization: Bearer header."
121174
+ },
121175
+ category: "crm",
121176
+ defaultConsistencyModel: "authoritative",
121177
+ baseUrl: "https://wiza.co/api",
121178
+ credentialPlacement: { kind: "bearer" },
121179
+ defaultHeaders: { "content-type": "application/json" },
121180
+ test: { method: "GET", path: "/meta/credits" },
121181
+ capabilities: [
121182
+ {
121183
+ name: "individual_reveal.create",
121184
+ class: "mutation",
121185
+ description: "Start a real-time individual reveal to enrich one contact's email and phone from a LinkedIn URL, email, or name plus company/domain. Consumes credits.",
121186
+ parameters: {
121187
+ type: "object",
121188
+ properties: {
121189
+ individual_reveal: {
121190
+ type: "object",
121191
+ description: "Contact identifiers: full_name + company or domain, OR email, OR linkedin (profile URL)."
121192
+ },
121193
+ enrichment_level: { type: "string", description: "One of none, partial, phone, or full." },
121194
+ email_options: {
121195
+ type: "object",
121196
+ description: "Object with accept_work and accept_personal booleans."
121197
+ },
121198
+ phone_options: { type: "object", description: "Phone enrichment options." }
121199
+ },
121200
+ required: ["individual_reveal", "enrichment_level"]
121201
+ },
121202
+ request: {
121203
+ method: "POST",
121204
+ path: "/individual_reveals",
121205
+ body: {
121206
+ individual_reveal: "{individual_reveal}",
121207
+ enrichment_level: "{enrichment_level}",
121208
+ email_options: "{email_options}",
121209
+ phone_options: "{phone_options}"
121210
+ }
121211
+ },
121212
+ cas: "native-idempotency",
121213
+ externalEffect: false
121214
+ },
121215
+ {
121216
+ name: "individual_reveal.get",
121217
+ class: "read",
121218
+ description: "Retrieve the status and revealed contact data of an individual reveal by its id.",
121219
+ parameters: {
121220
+ type: "object",
121221
+ properties: {
121222
+ id: {
121223
+ type: "string",
121224
+ description: "The individual reveal id returned by individual_reveal.create."
121225
+ }
121226
+ },
121227
+ required: ["id"]
121228
+ },
121229
+ request: { method: "GET", path: "/individual_reveals/{id}" }
121230
+ },
121231
+ {
121232
+ name: "list.create",
121233
+ class: "mutation",
121234
+ description: "Create a list to enrich up to 2500 profiles in bulk with email and phone data. Consumes credits.",
121235
+ parameters: {
121236
+ type: "object",
121237
+ properties: {
121238
+ list: {
121239
+ type: "object",
121240
+ description: "List config including name, enrichment_level, email_options, and items (array of up to 2500 profiles)."
121241
+ }
121242
+ },
121243
+ required: ["list"]
121244
+ },
121245
+ request: { method: "POST", path: "/lists", body: { list: "{list}" } },
121246
+ cas: "native-idempotency",
121247
+ externalEffect: true
121248
+ },
121249
+ {
121250
+ name: "credits.get",
121251
+ class: "read",
121252
+ description: "Get the account's remaining email, phone, export, and API credit balances.",
121253
+ parameters: { type: "object", properties: {}, required: [] },
121254
+ request: { method: "GET", path: "/meta/credits" }
121255
+ }
121256
+ ]
121257
+ });
121258
+
121259
+ // src/connectors/adapters/builtwith.ts
121260
+ var builtwithConnector = declarativeRestConnector({
121261
+ kind: "builtwith",
121262
+ displayName: "BuiltWith",
121263
+ description: "Look up the technology stack, analytics, hosting, and metadata detected on any website.",
121264
+ auth: {
121265
+ kind: "api-key",
121266
+ hint: "API key (a UUID) from your BuiltWith account dashboard under My Account -> API Access. Sent as the KEY query parameter."
121267
+ },
121268
+ category: "market-intelligence",
121269
+ defaultConsistencyModel: "authoritative",
121270
+ baseUrl: "https://api.builtwith.com/v22",
121271
+ credentialPlacement: { kind: "query", parameter: "KEY" },
121272
+ defaultHeaders: { "content-type": "application/json" },
121273
+ test: { method: "GET", path: "/free1/api.json", query: { LOOKUP: "builtwith.com" } },
121274
+ capabilities: [
121275
+ {
121276
+ name: "domain.lookup",
121277
+ class: "read",
121278
+ description: "Return the full set of detected technologies and metadata for one or more root domains.",
121279
+ parameters: {
121280
+ type: "object",
121281
+ properties: {
121282
+ lookup: {
121283
+ type: "string",
121284
+ description: "Root domain to analyze, e.g. stripe.com. Up to 16 domains may be passed as a comma-separated list."
121285
+ }
121286
+ },
121287
+ required: ["lookup"]
121288
+ },
121289
+ request: { method: "GET", path: "/api.json", query: { LOOKUP: "{lookup}" } }
121290
+ },
121291
+ {
121292
+ name: "domain.free",
121293
+ class: "read",
121294
+ description: "Free-tier lookup returning the most popular detected technology groups for a single domain.",
121295
+ parameters: {
121296
+ type: "object",
121297
+ properties: { lookup: { type: "string", description: "Root domain to analyze." } },
121298
+ required: ["lookup"]
121299
+ },
121300
+ request: { method: "GET", path: "/free1/api.json", query: { LOOKUP: "{lookup}" } }
121301
+ },
121302
+ {
121303
+ name: "domain.relationships",
121304
+ class: "read",
121305
+ description: "Return domains that share relationships (e.g. analytics IDs, ad networks) with the given domain.",
121306
+ parameters: {
121307
+ type: "object",
121308
+ properties: {
121309
+ lookup: { type: "string", description: "Root domain to find related domains for." }
121310
+ },
121311
+ required: ["lookup"]
121312
+ },
121313
+ request: { method: "GET", path: "/rv2/api.json", query: { LOOKUP: "{lookup}" } }
121314
+ },
121315
+ {
121316
+ name: "company.to_url",
121317
+ class: "read",
121318
+ description: "Resolve a company name to its most likely website domain.",
121319
+ parameters: {
121320
+ type: "object",
121321
+ properties: {
121322
+ company: { type: "string", description: "Company name to resolve to a domain." }
121323
+ },
121324
+ required: ["company"]
121325
+ },
121326
+ request: { method: "GET", path: "/ctu1/api.json", query: { COMPANY: "{company}" } }
121327
+ }
121328
+ ]
121329
+ });
121330
+
121331
+ // src/connectors/adapters/common-room.ts
121332
+ var commonRoomConnector = declarativeRestConnector({
121333
+ kind: "common-room",
121334
+ displayName: "Common Room",
121335
+ description: "Look up community and customer contacts, their activity, segments, and tags from your Common Room workspace.",
121336
+ auth: {
121337
+ kind: "api-key",
121338
+ hint: "Core API token from Common Room Settings -> API tokens (created by a workspace Admin). Sent as the Authorization: Bearer header."
121339
+ },
121340
+ category: "sales-intelligence",
121341
+ defaultConsistencyModel: "authoritative",
121342
+ baseUrl: "https://api.commonroom.io/community/v1",
121343
+ credentialPlacement: { kind: "bearer" },
121344
+ defaultHeaders: { "content-type": "application/json" },
121345
+ test: { method: "GET", path: "/api-token-status" },
121346
+ capabilities: [
121347
+ {
121348
+ name: "contact.get_by_email",
121349
+ class: "read",
121350
+ description: "Return a contact's full Common Room profile given their email address.",
121351
+ parameters: {
121352
+ type: "object",
121353
+ properties: {
121354
+ email: { type: "string", description: "Email address of the contact to look up." }
121355
+ },
121356
+ required: ["email"]
121357
+ },
121358
+ request: { method: "GET", path: "/user/{email}" }
121359
+ },
121360
+ {
121361
+ name: "contact.search",
121362
+ class: "read",
121363
+ description: "Find contacts by email or linked social handles (Twitter, GitHub, LinkedIn).",
121364
+ parameters: {
121365
+ type: "object",
121366
+ properties: {
121367
+ email: { type: "string", description: "Email address to search by." },
121368
+ github: { type: "string", description: "GitHub username to search by." },
121369
+ twitter: { type: "string", description: "Twitter/X handle to search by." },
121370
+ linkedin: {
121371
+ type: "string",
121372
+ description: "LinkedIn profile URL or handle to search by."
121373
+ }
121374
+ },
121375
+ required: []
121376
+ },
121377
+ request: {
121378
+ method: "GET",
121379
+ path: "/members",
121380
+ query: {
121381
+ email: "{email}",
121382
+ github: "{github}",
121383
+ twitter: "{twitter}",
121384
+ linkedin: "{linkedin}"
121385
+ }
121386
+ }
121387
+ },
121388
+ {
121389
+ name: "activity_types.list",
121390
+ class: "read",
121391
+ description: "List the activity types available in the workspace.",
121392
+ parameters: { type: "object", properties: {}, required: [] },
121393
+ request: { method: "GET", path: "/activityTypes" }
121394
+ },
121395
+ {
121396
+ name: "segments.list",
121397
+ class: "read",
121398
+ description: "List the segments defined in the workspace.",
121399
+ parameters: { type: "object", properties: {}, required: [] },
121400
+ request: { method: "GET", path: "/segments" }
121401
+ },
121402
+ {
121403
+ name: "contact.upsert",
121404
+ class: "mutation",
121405
+ description: "Create or update a contact in a destination source, optionally setting fields and custom fields.",
121406
+ parameters: {
121407
+ type: "object",
121408
+ properties: {
121409
+ destinationSourceId: {
121410
+ type: "string",
121411
+ description: "ID of the destination source to write the contact into."
121412
+ },
121413
+ fullName: { type: "string", description: "Full name of the contact." },
121414
+ email: { type: "string", description: "Email address of the contact." }
121415
+ },
121416
+ required: ["destinationSourceId"]
121417
+ },
121418
+ request: {
121419
+ method: "POST",
121420
+ path: "/source/{destinationSourceId}/user",
121421
+ body: { fullName: "{fullName}", email: "{email}" }
121422
+ },
121423
+ cas: "native-idempotency",
121424
+ externalEffect: true
121425
+ }
121426
+ ]
121427
+ });
121428
+
121429
+ // src/connectors/adapters/leadfeeder.ts
121430
+ var leadfeederConnector = declarativeRestConnector({
121431
+ kind: "leadfeeder",
121432
+ displayName: "Leadfeeder",
121433
+ description: "Identify the company behind a website-visitor IP address, returning firmographic details and a confidence score.",
121434
+ auth: {
121435
+ kind: "api-key",
121436
+ hint: "API key from Leadfeeder (Dealfront) Settings -> API keys. Sent in the X-API-KEY request header."
121437
+ },
121438
+ category: "sales-intelligence",
121439
+ defaultConsistencyModel: "authoritative",
121440
+ baseUrl: "https://api.lf-discover.com",
121441
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
121442
+ defaultHeaders: { "content-type": "application/json" },
121443
+ test: { method: "GET", path: "/companies", query: { ip: "185.70.216.139" } },
121444
+ capabilities: [
121445
+ {
121446
+ name: "ip.enrich",
121447
+ class: "read",
121448
+ description: "Resolve an IPv4 or IPv6 address to the company that owns it, including name, domain, industry, size, revenue, location, and confidence.",
121449
+ parameters: {
121450
+ type: "object",
121451
+ properties: {
121452
+ ip: {
121453
+ type: "string",
121454
+ description: "Valid IPv4 or shortened IPv6 address to enrich, e.g. 185.70.216.139."
121455
+ }
121456
+ },
121457
+ required: ["ip"]
121458
+ },
121459
+ request: { method: "GET", path: "/companies", query: { ip: "{ip}" } }
121460
+ }
121461
+ ]
121462
+ });
121463
+
121464
+ // src/connectors/adapters/serper.ts
121465
+ var serperConnector = declarativeRestConnector({
121466
+ kind: "serper",
121467
+ displayName: "Serper",
121468
+ description: "Run fast Google searches (web, news, images, places, and scholar) and get structured SERP results as JSON.",
121469
+ auth: {
121470
+ kind: "api-key",
121471
+ hint: "API key from your serper.dev dashboard. Sent in the X-API-KEY request header."
121472
+ },
121473
+ category: "market-intelligence",
121474
+ defaultConsistencyModel: "authoritative",
121475
+ baseUrl: "https://google.serper.dev",
121476
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
121477
+ defaultHeaders: { "content-type": "application/json" },
121478
+ test: { method: "POST", path: "/search", body: { q: "OpenAI" } },
121479
+ capabilities: [
121480
+ {
121481
+ name: "search.web",
121482
+ class: "read",
121483
+ description: "Run a Google web search and return organic results, knowledge graph, answer box, and related searches.",
121484
+ parameters: {
121485
+ type: "object",
121486
+ properties: {
121487
+ q: { type: "string", description: "The search query." },
121488
+ gl: {
121489
+ type: "string",
121490
+ description: "Two-letter country code for geo-targeting, e.g. us."
121491
+ },
121492
+ hl: { type: "string", description: "Two-letter language code, e.g. en." },
121493
+ num: { type: "integer", description: "Number of results to return." },
121494
+ page: { type: "integer", description: "Results page number." }
121495
+ },
121496
+ required: ["q"]
121497
+ },
121498
+ request: {
121499
+ method: "POST",
121500
+ path: "/search",
121501
+ body: { q: "{q}", gl: "{gl}", hl: "{hl}", num: "{num}", page: "{page}" }
121502
+ }
121503
+ },
121504
+ {
121505
+ name: "search.news",
121506
+ class: "read",
121507
+ description: "Run a Google News search and return structured news results.",
121508
+ parameters: {
121509
+ type: "object",
121510
+ properties: {
121511
+ q: { type: "string", description: "The news search query." },
121512
+ gl: { type: "string", description: "Two-letter country code." },
121513
+ hl: { type: "string", description: "Two-letter language code." }
121514
+ },
121515
+ required: ["q"]
121516
+ },
121517
+ request: { method: "POST", path: "/news", body: { q: "{q}", gl: "{gl}", hl: "{hl}" } }
121518
+ },
121519
+ {
121520
+ name: "search.places",
121521
+ class: "read",
121522
+ description: "Run a Google Maps/Places search and return structured place results.",
121523
+ parameters: {
121524
+ type: "object",
121525
+ properties: {
121526
+ q: { type: "string", description: "The places search query." },
121527
+ gl: { type: "string", description: "Two-letter country code." }
121528
+ },
121529
+ required: ["q"]
121530
+ },
121531
+ request: { method: "POST", path: "/places", body: { q: "{q}", gl: "{gl}" } }
121532
+ },
121533
+ {
121534
+ name: "search.scholar",
121535
+ class: "read",
121536
+ description: "Run a Google Scholar search and return structured academic results.",
121537
+ parameters: {
121538
+ type: "object",
121539
+ properties: { q: { type: "string", description: "The scholar search query." } },
121540
+ required: ["q"]
121541
+ },
121542
+ request: { method: "POST", path: "/scholar", body: { q: "{q}" } }
121543
+ },
121544
+ {
121545
+ name: "search.images",
121546
+ class: "read",
121547
+ description: "Run a Google Images search and return structured image results.",
121548
+ parameters: {
121549
+ type: "object",
121550
+ properties: {
121551
+ q: { type: "string", description: "The image search query." },
121552
+ gl: { type: "string", description: "Two-letter country code." }
121553
+ },
121554
+ required: ["q"]
121555
+ },
121556
+ request: { method: "POST", path: "/images", body: { q: "{q}", gl: "{gl}" } }
121557
+ }
121558
+ ]
121559
+ });
121560
+
121561
+ // src/connectors/adapters/warmly.ts
121562
+ var warmlyConnector = declarativeRestConnector({
121563
+ kind: "warmly",
121564
+ displayName: "Warmly",
121565
+ description: "List identified website visitors and visiting accounts from your Warmly workspace via its agent-tools API.",
121566
+ auth: {
121567
+ kind: "api-key",
121568
+ hint: "Per-organization API key from the Warmly admin UI. Sent as the Authorization: Bearer header; organizationId must be included in each request body."
121569
+ },
121570
+ category: "sales-intelligence",
121571
+ defaultConsistencyModel: "authoritative",
121572
+ baseUrl: "https://opps-api.getwarmly.com/api",
121573
+ credentialPlacement: { kind: "bearer" },
121574
+ defaultHeaders: { "content-type": "application/json" },
121575
+ test: { method: "GET", path: "/agent-tools/tools" },
121576
+ capabilities: [
121577
+ {
121578
+ name: "tools.list",
121579
+ class: "read",
121580
+ description: "Discover the available agent tools and their input JSON schemas for your workspace.",
121581
+ parameters: { type: "object", properties: {}, required: [] },
121582
+ request: { method: "GET", path: "/agent-tools/tools" }
121583
+ },
121584
+ {
121585
+ name: "visitors.list",
121586
+ class: "mutation",
121587
+ description: "List identified people who visited your website, with optional filters and pagination. This is a billed read executed via the tool-execution endpoint.",
121588
+ parameters: {
121589
+ type: "object",
121590
+ properties: {
121591
+ organizationId: { type: "string", description: "The organization the API key is issued for." },
121592
+ timeWindow: {
121593
+ type: "string",
121594
+ description: "Lookback window: past_day (default) or past_week."
121595
+ },
121596
+ take: {
121597
+ type: "integer",
121598
+ description: "Number of results to return, 1-500 (default 25)."
121599
+ },
121600
+ offset: { type: "integer", description: "Pagination offset." },
121601
+ searchTerm: { type: "string", description: "Substring match on name, email, or company." }
121602
+ },
121603
+ required: ["organizationId"]
121604
+ },
121605
+ request: {
121606
+ method: "POST",
121607
+ path: "/agent-tools/execute",
121608
+ body: {
121609
+ toolName: "list_warm_visitors",
121610
+ organizationId: "{organizationId}",
121611
+ input: {
121612
+ timeWindow: "{timeWindow}",
121613
+ take: "{take}",
121614
+ offset: "{offset}",
121615
+ searchTerm: "{searchTerm}"
121616
+ }
121617
+ }
121618
+ },
121619
+ cas: "native-idempotency",
121620
+ externalEffect: false
121621
+ },
121622
+ {
121623
+ name: "accounts.list",
121624
+ class: "mutation",
121625
+ description: "List company-level aggregations of accounts that visited your website. Billed read executed via the tool-execution endpoint.",
121626
+ parameters: {
121627
+ type: "object",
121628
+ properties: {
121629
+ organizationId: { type: "string", description: "The organization the API key is issued for." },
121630
+ timeWindow: {
121631
+ type: "string",
121632
+ description: "Lookback window: past_day (default) or past_week."
121633
+ },
121634
+ take: { type: "integer", description: "Number of results to return, 1-500." }
121635
+ },
121636
+ required: ["organizationId"]
121637
+ },
121638
+ request: {
121639
+ method: "POST",
121640
+ path: "/agent-tools/execute",
121641
+ body: {
121642
+ toolName: "list_warm_accounts",
121643
+ organizationId: "{organizationId}",
121644
+ input: { timeWindow: "{timeWindow}", take: "{take}" }
121645
+ }
121646
+ },
121647
+ cas: "native-idempotency",
121648
+ externalEffect: false
121649
+ }
121650
+ ]
121651
+ });
121652
+
121653
+ // src/connectors/adapters/autobound.ts
121654
+ var autoboundConnector = declarativeRestConnector({
121655
+ kind: "autobound",
121656
+ displayName: "Autobound",
121657
+ description: "AI sales-intelligence API that enriches companies and contacts with buyer-intent signals for personalized outreach.",
121658
+ auth: {
121659
+ kind: "api-key",
121660
+ hint: "API key from your Autobound account (Developer Hub). Sent as the X-API-KEY header. Base host is the Signals API at signals.autobound.ai."
121661
+ },
121662
+ category: "sales-intelligence",
121663
+ defaultConsistencyModel: "authoritative",
121664
+ baseUrl: "https://signals.autobound.ai/v1",
121665
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
121666
+ defaultHeaders: { "content-type": "application/json" },
121667
+ test: { method: "GET", path: "/account" },
121668
+ capabilities: [
121669
+ {
121670
+ name: "account.get",
121671
+ class: "read",
121672
+ description: "Return account details and rate limits. Consumes no credits.",
121673
+ parameters: { type: "object", properties: {}, required: [] },
121674
+ request: { method: "GET", path: "/account" }
121675
+ },
121676
+ {
121677
+ name: "company.enrich",
121678
+ class: "mutation",
121679
+ description: "Enrich a company with intent and news signals by domain (billed per returned signal).",
121680
+ parameters: {
121681
+ type: "object",
121682
+ properties: {
121683
+ domain: { type: "string" },
121684
+ signal_types: { type: "array", items: { type: "string" } },
121685
+ limit: { type: "integer" }
121686
+ },
121687
+ required: ["domain"]
121688
+ },
121689
+ request: {
121690
+ method: "POST",
121691
+ path: "/companies/enrich",
121692
+ body: { domain: "{domain}", signal_types: "{signal_types}", limit: "{limit}" }
121693
+ },
121694
+ cas: "native-idempotency",
121695
+ externalEffect: false
121696
+ },
121697
+ {
121698
+ name: "company.search",
121699
+ class: "read",
121700
+ description: "Search companies aggregated by entity, filtered by signal type and firmographics.",
121701
+ parameters: {
121702
+ type: "object",
121703
+ properties: {
121704
+ signal_types: { type: "array", items: { type: "string" } },
121705
+ company_domains: { type: "array", items: { type: "string" } },
121706
+ limit: { type: "integer" }
121707
+ },
121708
+ required: ["signal_types"]
121709
+ },
121710
+ request: {
121711
+ method: "POST",
121712
+ path: "/companies/search",
121713
+ body: {
121714
+ signal_types: "{signal_types}",
121715
+ company_domains: "{company_domains}",
121716
+ limit: "{limit}"
121717
+ }
121718
+ }
121719
+ },
121720
+ {
121721
+ name: "contact.enrich",
121722
+ class: "mutation",
121723
+ description: "Enrich a contact with personal signals by email or LinkedIn URL (billed per returned signal).",
121724
+ parameters: {
121725
+ type: "object",
121726
+ properties: {
121727
+ contact_email: { type: "string" },
121728
+ contact_linkedin_url: { type: "string" },
121729
+ signal_types: { type: "array", items: { type: "string" } },
121730
+ limit: { type: "integer" }
121731
+ },
121732
+ required: ["contact_email"]
121733
+ },
121734
+ request: {
121735
+ method: "POST",
121736
+ path: "/contacts/enrich",
121737
+ body: {
121738
+ contact_email: "{contact_email}",
121739
+ contact_linkedin_url: "{contact_linkedin_url}",
121740
+ signal_types: "{signal_types}",
121741
+ limit: "{limit}"
121742
+ }
121743
+ },
121744
+ cas: "native-idempotency",
121745
+ externalEffect: false
121746
+ },
121747
+ {
121748
+ name: "contact.search",
121749
+ class: "read",
121750
+ description: "Search contacts aggregated by entity, filtered by signal type.",
121751
+ parameters: {
121752
+ type: "object",
121753
+ properties: {
121754
+ signal_types: { type: "array", items: { type: "string" } },
121755
+ limit: { type: "integer" }
121756
+ },
121757
+ required: ["signal_types"]
121758
+ },
121759
+ request: {
121760
+ method: "POST",
121761
+ path: "/contacts/search",
121762
+ body: { signal_types: "{signal_types}", limit: "{limit}" }
121763
+ }
121764
+ }
121765
+ ]
121766
+ });
121767
+
121768
+ // src/connectors/adapters/crustdata.ts
121769
+ var crustdataConnector = declarativeRestConnector({
121770
+ kind: "crustdata",
121771
+ displayName: "Crustdata",
121772
+ description: "Real-time B2B company and people data API for enriching, identifying, and searching companies and professional profiles.",
121773
+ auth: {
121774
+ kind: "api-key",
121775
+ hint: "API key (token) from the Crustdata dashboard. Sent as the Authorization: Bearer header. Requests also send the x-api-version: 2025-11-01 header."
121776
+ },
121777
+ category: "sales-intelligence",
121778
+ defaultConsistencyModel: "authoritative",
121779
+ baseUrl: "https://api.crustdata.com",
121780
+ credentialPlacement: { kind: "bearer" },
121781
+ defaultHeaders: { "content-type": "application/json", "x-api-version": "2025-11-01" },
121782
+ capabilities: [
121783
+ {
121784
+ name: "company.identify",
121785
+ class: "read",
121786
+ description: "Resolve company domains to Crustdata company records.",
121787
+ parameters: {
121788
+ type: "object",
121789
+ properties: { domains: { type: "array", items: { type: "string" } } },
121790
+ required: ["domains"]
121791
+ },
121792
+ request: { method: "POST", path: "/company/identify", body: { domains: "{domains}" } }
121793
+ },
121794
+ {
121795
+ name: "company.enrich",
121796
+ class: "read",
121797
+ description: "Retrieve full company profiles for one or more domains.",
121798
+ parameters: {
121799
+ type: "object",
121800
+ properties: {
121801
+ domains: { type: "array", items: { type: "string" } },
121802
+ fields: { type: "array", items: { type: "string" } }
121803
+ },
121804
+ required: ["domains"]
121805
+ },
121806
+ request: {
121807
+ method: "POST",
121808
+ path: "/company/enrich",
121809
+ body: { domains: "{domains}", fields: "{fields}" }
121810
+ }
121811
+ },
121812
+ {
121813
+ name: "company.search",
121814
+ class: "read",
121815
+ description: "Search companies with filters and sorting.",
121816
+ parameters: {
121817
+ type: "object",
121818
+ properties: { filters: { type: "object" }, page: { type: "integer" } },
121819
+ required: ["filters"]
121820
+ },
121821
+ request: {
121822
+ method: "POST",
121823
+ path: "/company/search",
121824
+ body: { filters: "{filters}", page: "{page}" }
121825
+ }
121826
+ },
121827
+ {
121828
+ name: "person.enrich",
121829
+ class: "read",
121830
+ description: "Enrich people by LinkedIn profile URL or business email; optionally select returned fields.",
121831
+ parameters: {
121832
+ type: "object",
121833
+ properties: {
121834
+ professional_network_profile_urls: { type: "array", items: { type: "string" } },
121835
+ business_emails: { type: "array", items: { type: "string" } },
121836
+ fields: { type: "array", items: { type: "string" } }
121837
+ },
121838
+ required: ["professional_network_profile_urls"]
121839
+ },
121840
+ request: {
121841
+ method: "POST",
121842
+ path: "/person/enrich",
121843
+ body: {
121844
+ professional_network_profile_urls: "{professional_network_profile_urls}",
121845
+ business_emails: "{business_emails}",
121846
+ fields: "{fields}"
121847
+ }
121848
+ }
121849
+ },
121850
+ {
121851
+ name: "person.search",
121852
+ class: "read",
121853
+ description: "Search people with filters and sorting.",
121854
+ parameters: {
121855
+ type: "object",
121856
+ properties: { filters: { type: "object" }, page: { type: "integer" } },
121857
+ required: ["filters"]
121858
+ },
121859
+ request: {
121860
+ method: "POST",
121861
+ path: "/person/search",
121862
+ body: { filters: "{filters}", page: "{page}" }
121863
+ }
121864
+ }
121865
+ ]
121866
+ });
121867
+
121868
+ // src/connectors/adapters/fullenrich.ts
121869
+ var fullenrichConnector = declarativeRestConnector({
121870
+ kind: "fullenrich",
121871
+ displayName: "FullEnrich",
121872
+ description: "Waterfall B2B contact enrichment API that finds work emails and phone numbers for a contact from name, company, or LinkedIn URL.",
121873
+ auth: {
121874
+ kind: "api-key",
121875
+ hint: "API key from the FullEnrich dashboard (app.fullenrich.com/app/api). Sent as the Authorization: Bearer header."
121876
+ },
121877
+ category: "sales-intelligence",
121878
+ defaultConsistencyModel: "authoritative",
121879
+ baseUrl: "https://app.fullenrich.com/api/v2",
121880
+ credentialPlacement: { kind: "bearer" },
121881
+ defaultHeaders: { "content-type": "application/json" },
121882
+ test: { method: "GET", path: "/account/credits" },
121883
+ capabilities: [
121884
+ {
121885
+ name: "account.credits",
121886
+ class: "read",
121887
+ description: "Return the current credit balance for the account.",
121888
+ parameters: { type: "object", properties: {}, required: [] },
121889
+ request: { method: "GET", path: "/account/credits" }
121890
+ },
121891
+ {
121892
+ name: "contact.enrich.start",
121893
+ class: "mutation",
121894
+ description: "Start an async waterfall enrichment for up to 100 contacts; returns an enrichment id and bills per found data point.",
121895
+ parameters: {
121896
+ type: "object",
121897
+ properties: {
121898
+ name: { type: "string" },
121899
+ data: {
121900
+ type: "array",
121901
+ items: {
121902
+ type: "object",
121903
+ properties: {
121904
+ first_name: { type: "string" },
121905
+ last_name: { type: "string" },
121906
+ domain: { type: "string" },
121907
+ company_name: { type: "string" },
121908
+ linkedin_url: { type: "string" },
121909
+ enrich_fields: { type: "array", items: { type: "string" } }
121910
+ }
121911
+ }
121912
+ },
121913
+ webhook_url: { type: "string" }
121914
+ },
121915
+ required: ["name", "data"]
121916
+ },
121917
+ request: {
121918
+ method: "POST",
121919
+ path: "/contact/enrich/bulk",
121920
+ body: { name: "{name}", data: "{data}", webhook_url: "{webhook_url}" }
121921
+ },
121922
+ cas: "native-idempotency",
121923
+ externalEffect: false
121924
+ },
121925
+ {
121926
+ name: "contact.enrich.result",
121927
+ class: "read",
121928
+ description: "Retrieve the result of a previously started bulk enrichment by its id.",
121929
+ parameters: {
121930
+ type: "object",
121931
+ properties: { enrichment_id: { type: "string" } },
121932
+ required: ["enrichment_id"]
121933
+ },
121934
+ request: { method: "GET", path: "/contact/enrich/bulk/{enrichment_id}" }
121935
+ },
121936
+ {
121937
+ name: "contact.reverse_email.start",
121938
+ class: "mutation",
121939
+ description: "Start an async reverse-email lookup to find profiles/identities behind email addresses.",
121940
+ parameters: {
121941
+ type: "object",
121942
+ properties: {
121943
+ name: { type: "string" },
121944
+ data: {
121945
+ type: "array",
121946
+ items: { type: "object", properties: { email: { type: "string" } } }
121947
+ },
121948
+ webhook_url: { type: "string" }
121949
+ },
121950
+ required: ["name", "data"]
121951
+ },
121952
+ request: {
121953
+ method: "POST",
121954
+ path: "/contact/reverse/email/bulk",
121955
+ body: { name: "{name}", data: "{data}", webhook_url: "{webhook_url}" }
121956
+ },
121957
+ cas: "native-idempotency",
121958
+ externalEffect: false
121959
+ }
121960
+ ]
121961
+ });
121962
+
121963
+ // src/connectors/adapters/leadmagic.ts
121964
+ var leadmagicConnector = declarativeRestConnector({
121965
+ kind: "leadmagic",
121966
+ displayName: "LeadMagic",
121967
+ description: "B2B data enrichment API for finding and validating work emails, mobile numbers, and enriching people and company profiles.",
121968
+ auth: {
121969
+ kind: "api-key",
121970
+ hint: "API key from LeadMagic Settings -> API. Sent as the X-API-Key header."
121971
+ },
121972
+ category: "sales-intelligence",
121973
+ defaultConsistencyModel: "authoritative",
121974
+ baseUrl: "https://api.leadmagic.io",
121975
+ credentialPlacement: { kind: "header", header: "X-API-Key" },
121976
+ defaultHeaders: { "content-type": "application/json" },
121977
+ test: { method: "GET", path: "/v1/credits" },
121978
+ capabilities: [
121979
+ {
121980
+ name: "credits.get",
121981
+ class: "read",
121982
+ description: "Return the current API key credit balance. Free, no credits consumed.",
121983
+ parameters: { type: "object", properties: {}, required: [] },
121984
+ request: { method: "GET", path: "/v1/credits" }
121985
+ },
121986
+ {
121987
+ name: "email.find",
121988
+ class: "mutation",
121989
+ description: "Find a verified work email from a person's name and company (charged only when an email is found).",
121990
+ parameters: {
121991
+ type: "object",
121992
+ properties: {
121993
+ first_name: { type: "string" },
121994
+ last_name: { type: "string" },
121995
+ domain: { type: "string" },
121996
+ company_name: { type: "string" }
121997
+ },
121998
+ required: ["first_name", "last_name", "domain"]
121999
+ },
122000
+ request: {
122001
+ method: "POST",
122002
+ path: "/v1/people/email-finder",
122003
+ body: {
122004
+ first_name: "{first_name}",
122005
+ last_name: "{last_name}",
122006
+ domain: "{domain}",
122007
+ company_name: "{company_name}"
122008
+ }
122009
+ },
122010
+ cas: "native-idempotency",
122011
+ externalEffect: false
122012
+ },
122013
+ {
122014
+ name: "email.validate",
122015
+ class: "mutation",
122016
+ description: "Validate an email address and return valid/invalid/unknown (charged only for definitive results).",
122017
+ parameters: {
122018
+ type: "object",
122019
+ properties: { email: { type: "string" } },
122020
+ required: ["email"]
122021
+ },
122022
+ request: {
122023
+ method: "POST",
122024
+ path: "/v1/people/email-validation",
122025
+ body: { email: "{email}" }
122026
+ },
122027
+ cas: "native-idempotency",
122028
+ externalEffect: false
122029
+ },
122030
+ {
122031
+ name: "profile.search",
122032
+ class: "read",
122033
+ description: "Enrich a B2B profile from a profile URL or username.",
122034
+ parameters: {
122035
+ type: "object",
122036
+ properties: { profile_url: { type: "string" } },
122037
+ required: ["profile_url"]
122038
+ },
122039
+ request: {
122040
+ method: "POST",
122041
+ path: "/v1/people/profile-search",
122042
+ body: { profile_url: "{profile_url}" }
122043
+ }
122044
+ },
122045
+ {
122046
+ name: "mobile.find",
122047
+ class: "mutation",
122048
+ description: "Find a mobile phone number from a profile URL or email (charged only on a successful match).",
122049
+ parameters: {
122050
+ type: "object",
122051
+ properties: {
122052
+ profile_url: { type: "string" },
122053
+ work_email: { type: "string" },
122054
+ personal_email: { type: "string" }
122055
+ },
122056
+ required: ["profile_url"]
122057
+ },
122058
+ request: {
122059
+ method: "POST",
122060
+ path: "/v1/people/mobile-finder",
122061
+ body: {
122062
+ profile_url: "{profile_url}",
122063
+ work_email: "{work_email}",
122064
+ personal_email: "{personal_email}"
122065
+ }
122066
+ },
122067
+ cas: "native-idempotency",
122068
+ externalEffect: false
122069
+ },
122070
+ {
122071
+ name: "company.search",
122072
+ class: "mutation",
122073
+ description: "Enrich a company's firmographics from its domain, name, or profile URL (charged per company found).",
122074
+ parameters: {
122075
+ type: "object",
122076
+ properties: {
122077
+ company_domain: { type: "string" },
122078
+ company_name: { type: "string" },
122079
+ profile_url: { type: "string" }
122080
+ },
122081
+ required: ["company_domain"]
122082
+ },
122083
+ request: {
122084
+ method: "POST",
122085
+ path: "/v1/companies/company-search",
122086
+ body: {
122087
+ company_domain: "{company_domain}",
122088
+ company_name: "{company_name}",
122089
+ profile_url: "{profile_url}"
122090
+ }
122091
+ },
122092
+ cas: "native-idempotency",
122093
+ externalEffect: false
122094
+ }
122095
+ ]
122096
+ });
122097
+
122098
+ // src/connectors/adapters/brightdata.ts
122099
+ var brightdataConnector = declarativeRestConnector({
122100
+ kind: "brightdata",
122101
+ displayName: "Bright Data",
122102
+ description: "Scrape any website at scale using Bright Data's Web Unlocker (bypasses anti-bot protection) and Web Scraper API (structured dataset collection jobs).",
122103
+ auth: {
122104
+ kind: "api-key",
122105
+ hint: "API token from your Bright Data dashboard (Account settings -> API tokens). Sent as the Authorization: Bearer header."
122106
+ },
122107
+ category: "other",
122108
+ defaultConsistencyModel: "authoritative",
122109
+ baseUrl: "https://api.brightdata.com",
122110
+ credentialPlacement: { kind: "bearer" },
122111
+ defaultHeaders: { "content-type": "application/json" },
122112
+ capabilities: [
122113
+ {
122114
+ name: "unlocker.request",
122115
+ class: "read",
122116
+ description: "Fetch a target URL through the Web Unlocker, returning the page content with anti-bot bypass, CAPTCHA solving, and JS rendering handled.",
122117
+ parameters: {
122118
+ type: "object",
122119
+ properties: {
122120
+ zone: { type: "string", description: "Your Web Unlocker API zone name." },
122121
+ url: { type: "string", description: "Target URL to fetch." },
122122
+ format: {
122123
+ type: "string",
122124
+ description: "Response format, e.g. 'raw' for the unmodified site response or 'json'."
122125
+ },
122126
+ body: {
122127
+ type: "string",
122128
+ description: "Optional raw POST payload to send to the target URL."
122129
+ }
122130
+ },
122131
+ required: ["zone", "url"]
122132
+ },
122133
+ request: {
122134
+ method: "POST",
122135
+ path: "/request",
122136
+ body: { zone: "{zone}", url: "{url}", format: "{format}", body: "{body}" }
122137
+ }
122138
+ },
122139
+ {
122140
+ name: "scraper.trigger",
122141
+ class: "mutation",
122142
+ description: "Trigger an asynchronous Web Scraper data collection job for a given dataset, returning a snapshot_id used to poll progress and download results.",
122143
+ parameters: {
122144
+ type: "object",
122145
+ properties: {
122146
+ dataset_id: {
122147
+ type: "string",
122148
+ description: "Scraper dataset id, e.g. gd_xxxxxxxxxxxxxxxxx."
122149
+ },
122150
+ format: { type: "string", description: "Delivery format of results, e.g. json." },
122151
+ include_errors: { type: "boolean", description: "Include error records in the result set." },
122152
+ inputs: {
122153
+ type: "array",
122154
+ description: "Array of input objects, each typically containing a url to scrape.",
122155
+ items: { type: "object" }
122156
+ }
122157
+ },
122158
+ required: ["dataset_id", "inputs"]
122159
+ },
122160
+ request: {
122161
+ method: "POST",
122162
+ path: "/datasets/v3/trigger",
122163
+ query: {
122164
+ dataset_id: "{dataset_id}",
122165
+ format: "{format}",
122166
+ include_errors: "{include_errors}"
122167
+ },
122168
+ body: "{inputs}"
122169
+ },
122170
+ cas: "native-idempotency",
122171
+ externalEffect: true
122172
+ },
122173
+ {
122174
+ name: "scraper.progress",
122175
+ class: "read",
122176
+ description: "Check the status of a Web Scraper collection job (starting, running, ready, or failed) by its snapshot_id.",
122177
+ parameters: {
122178
+ type: "object",
122179
+ properties: {
122180
+ snapshot_id: { type: "string", description: "Snapshot id returned by scraper.trigger." }
122181
+ },
122182
+ required: ["snapshot_id"]
122183
+ },
122184
+ request: { method: "GET", path: "/datasets/v3/progress/{snapshot_id}" }
122185
+ },
122186
+ {
122187
+ name: "scraper.snapshot",
122188
+ class: "read",
122189
+ description: "Download the collected records for a completed Web Scraper snapshot in the requested format.",
122190
+ parameters: {
122191
+ type: "object",
122192
+ properties: {
122193
+ snapshot_id: { type: "string", description: "Snapshot id returned by scraper.trigger." },
122194
+ format: {
122195
+ type: "string",
122196
+ description: "Output format, e.g. json, ndjson, jsonl, or csv."
122197
+ }
122198
+ },
122199
+ required: ["snapshot_id"]
122200
+ },
122201
+ request: {
122202
+ method: "GET",
122203
+ path: "/datasets/v3/snapshot/{snapshot_id}",
122204
+ query: { format: "{format}" }
122205
+ }
122206
+ }
122207
+ ]
122208
+ });
122209
+
122210
+ // src/connectors/adapters/phantombuster.ts
122211
+ var phantombusterConnector = declarativeRestConnector({
122212
+ kind: "phantombuster",
122213
+ displayName: "PhantomBuster",
122214
+ description: "Launch PhantomBuster Phantoms (automation agents) that scrape and extract data from sites like LinkedIn, then retrieve their output and results.",
122215
+ auth: {
122216
+ kind: "api-key",
122217
+ hint: "API key from your PhantomBuster dashboard (Workspace settings -> API key). Sent in the X-Phantombuster-Key header."
122218
+ },
122219
+ category: "other",
122220
+ defaultConsistencyModel: "authoritative",
122221
+ baseUrl: "https://api.phantombuster.com/api/v2",
122222
+ credentialPlacement: { kind: "header", header: "X-Phantombuster-Key" },
122223
+ defaultHeaders: { "content-type": "application/json" },
122224
+ test: { method: "GET", path: "/agents/fetch-all" },
122225
+ capabilities: [
122226
+ {
122227
+ name: "agents.fetch_all",
122228
+ class: "read",
122229
+ description: "List all Phantoms (agents) in the current organization.",
122230
+ parameters: { type: "object", properties: {}, required: [] },
122231
+ request: { method: "GET", path: "/agents/fetch-all" }
122232
+ },
122233
+ {
122234
+ name: "agents.fetch",
122235
+ class: "read",
122236
+ description: "Fetch the configuration and metadata of a single Phantom by its agent id.",
122237
+ parameters: {
122238
+ type: "object",
122239
+ properties: { id: { type: "string", description: "Id of the agent (Phantom) to fetch." } },
122240
+ required: ["id"]
122241
+ },
122242
+ request: { method: "GET", path: "/agents/fetch", query: { id: "{id}" } }
122243
+ },
122244
+ {
122245
+ name: "agents.launch",
122246
+ class: "mutation",
122247
+ description: "Launch a Phantom (agent), optionally passing arguments, and start a new run (container).",
122248
+ parameters: {
122249
+ type: "object",
122250
+ properties: {
122251
+ id: { type: "string", description: "Id of the agent (Phantom) to launch." },
122252
+ argument: {
122253
+ type: "object",
122254
+ description: "JSON object of arguments overriding the Phantom's saved configuration for this run."
122255
+ },
122256
+ bonusArgument: {
122257
+ type: "object",
122258
+ description: "Additional one-off arguments merged for this launch only."
122259
+ },
122260
+ saveArgument: {
122261
+ type: "boolean",
122262
+ description: "Persist the provided argument as the Phantom's default configuration."
122263
+ },
122264
+ manualLaunch: { type: "boolean", description: "Mark the launch as manual." }
122265
+ },
122266
+ required: ["id"]
122267
+ },
122268
+ request: {
122269
+ method: "POST",
122270
+ path: "/agents/launch",
122271
+ body: {
122272
+ id: "{id}",
122273
+ argument: "{argument}",
122274
+ bonusArgument: "{bonusArgument}",
122275
+ saveArgument: "{saveArgument}",
122276
+ manualLaunch: "{manualLaunch}"
122277
+ }
122278
+ },
122279
+ cas: "native-idempotency",
122280
+ externalEffect: true
122281
+ },
122282
+ {
122283
+ name: "agents.fetch_output",
122284
+ class: "read",
122285
+ description: "Retrieve the console output and most recent container status of a Phantom's run by agent id.",
122286
+ parameters: {
122287
+ type: "object",
122288
+ properties: {
122289
+ id: { type: "string", description: "Id of the agent to fetch output from." },
122290
+ fromOutputPos: {
122291
+ type: "number",
122292
+ description: "Position from which to start returning output."
122293
+ }
122294
+ },
122295
+ required: ["id"]
122296
+ },
122297
+ request: {
122298
+ method: "GET",
122299
+ path: "/agents/fetch-output",
122300
+ query: { id: "{id}", fromOutputPos: "{fromOutputPos}" }
122301
+ }
122302
+ },
122303
+ {
122304
+ name: "containers.fetch_output",
122305
+ class: "read",
122306
+ description: "Retrieve the console output of a specific Phantom run (container) by its container id.",
122307
+ parameters: {
122308
+ type: "object",
122309
+ properties: {
122310
+ id: {
122311
+ type: "string",
122312
+ description: "Id of the container (run) to fetch output from."
122313
+ }
122314
+ },
122315
+ required: ["id"]
122316
+ },
122317
+ request: { method: "GET", path: "/containers/fetch-output", query: { id: "{id}" } }
122318
+ }
122319
+ ]
122320
+ });
122321
+
122322
+ // src/connectors/adapters/zenrows.ts
122323
+ var zenrowsConnector = declarativeRestConnector({
122324
+ kind: "zenrows",
122325
+ displayName: "ZenRows",
122326
+ description: "Render and scrape any web page through ZenRows' Universal Scraper API, handling proxy rotation, headless browsers, and anti-bot bypass.",
122327
+ auth: {
122328
+ kind: "api-key",
122329
+ hint: "API key from your ZenRows dashboard. Sent as the apikey query parameter."
122330
+ },
122331
+ category: "other",
122332
+ defaultConsistencyModel: "authoritative",
122333
+ baseUrl: "https://api.zenrows.com/v1/",
122334
+ credentialPlacement: { kind: "query", parameter: "apikey" },
122335
+ capabilities: [
122336
+ {
122337
+ name: "page.scrape",
122338
+ class: "read",
122339
+ description: "Fetch a URL and return its HTML, optionally rendering JavaScript and routing through premium residential proxies.",
122340
+ parameters: {
122341
+ type: "object",
122342
+ properties: {
122343
+ url: { type: "string", description: "Target URL to scrape." },
122344
+ js_render: { type: "boolean", description: "Render the page with a headless browser." },
122345
+ premium_proxy: {
122346
+ type: "boolean",
122347
+ description: "Route the request through residential proxies."
122348
+ },
122349
+ proxy_country: {
122350
+ type: "string",
122351
+ description: "Two-letter country code for proxy geolocation."
122352
+ },
122353
+ wait: {
122354
+ type: "integer",
122355
+ description: "Fixed delay in milliseconds after page load."
122356
+ },
122357
+ wait_for: {
122358
+ type: "string",
122359
+ description: "CSS selector to wait for in the DOM before returning."
122360
+ }
122361
+ },
122362
+ required: ["url"]
122363
+ },
122364
+ request: {
122365
+ method: "GET",
122366
+ path: "/",
122367
+ query: {
122368
+ url: "{url}",
122369
+ js_render: "{js_render}",
122370
+ premium_proxy: "{premium_proxy}",
122371
+ proxy_country: "{proxy_country}",
122372
+ wait: "{wait}",
122373
+ wait_for: "{wait_for}"
122374
+ }
122375
+ }
122376
+ },
122377
+ {
122378
+ name: "page.extract",
122379
+ class: "read",
122380
+ description: "Scrape a URL and return structured data extracted via CSS selectors or ZenRows' automatic parser.",
122381
+ parameters: {
122382
+ type: "object",
122383
+ properties: {
122384
+ url: { type: "string", description: "Target URL to scrape." },
122385
+ css_extractor: {
122386
+ type: "string",
122387
+ description: "JSON string mapping output keys to CSS selectors."
122388
+ },
122389
+ autoparse: {
122390
+ type: "boolean",
122391
+ description: "Automatically extract structured data from supported sites."
122392
+ },
122393
+ js_render: { type: "boolean", description: "Render the page with a headless browser." }
122394
+ },
122395
+ required: ["url"]
122396
+ },
122397
+ request: {
122398
+ method: "GET",
122399
+ path: "/",
122400
+ query: {
122401
+ url: "{url}",
122402
+ css_extractor: "{css_extractor}",
122403
+ autoparse: "{autoparse}",
122404
+ js_render: "{js_render}"
122405
+ }
122406
+ }
122407
+ },
122408
+ {
122409
+ name: "page.markdown",
122410
+ class: "read",
122411
+ description: "Fetch a URL and return its content converted to Markdown, plaintext, or PDF.",
122412
+ parameters: {
122413
+ type: "object",
122414
+ properties: {
122415
+ url: { type: "string", description: "Target URL to scrape." },
122416
+ response_type: {
122417
+ type: "string",
122418
+ description: "Output conversion type, e.g. markdown, plaintext, or pdf."
122419
+ },
122420
+ js_render: { type: "boolean", description: "Render the page with a headless browser." }
122421
+ },
122422
+ required: ["url"]
122423
+ },
122424
+ request: {
122425
+ method: "GET",
122426
+ path: "/",
122427
+ query: { url: "{url}", response_type: "{response_type}", js_render: "{js_render}" }
122428
+ }
122429
+ }
122430
+ ]
122431
+ });
122432
+
122433
+ // src/connectors/adapters/ocean-io.ts
122434
+ var oceanIoConnector = declarativeRestConnector({
122435
+ kind: "ocean-io",
122436
+ displayName: "Ocean.io",
122437
+ description: "Lookalike B2B company and people search plus firmographic and contact enrichment. Build target lists from an ideal customer profile and enrich records.",
122438
+ auth: {
122439
+ kind: "api-key",
122440
+ hint: "API token from Settings -> API tokens. Sent as the X-Api-Token header."
122441
+ },
122442
+ category: "sales-intelligence",
122443
+ defaultConsistencyModel: "authoritative",
122444
+ baseUrl: "https://api.ocean.io",
122445
+ credentialPlacement: { kind: "header", header: "X-Api-Token" },
122446
+ defaultHeaders: { "content-type": "application/json" },
122447
+ capabilities: [
122448
+ {
122449
+ name: "companies.search",
122450
+ class: "read",
122451
+ description: "Search/lookalike companies by filters (location, size, industry, technologies) and/or seed lookalike domains.",
122452
+ parameters: {
122453
+ type: "object",
122454
+ properties: {
122455
+ companiesFilters: { type: "object" },
122456
+ lookalikeDomains: { type: "array", items: { type: "string" } },
122457
+ size: { type: "integer" },
122458
+ searchAfter: { type: "string" }
122459
+ },
122460
+ required: ["size"]
122461
+ },
122462
+ request: {
122463
+ method: "POST",
122464
+ path: "/v3/search/companies",
122465
+ body: {
122466
+ companiesFilters: "{companiesFilters}",
122467
+ lookalikeDomains: "{lookalikeDomains}",
122468
+ size: "{size}",
122469
+ searchAfter: "{searchAfter}"
122470
+ }
122471
+ }
122472
+ },
122473
+ {
122474
+ name: "people.search",
122475
+ class: "read",
122476
+ description: "Search people by persona filters (seniority, department) optionally scoped by company filters.",
122477
+ parameters: {
122478
+ type: "object",
122479
+ properties: {
122480
+ peopleFilters: { type: "object" },
122481
+ companiesFilters: { type: "object" },
122482
+ size: { type: "integer" },
122483
+ searchAfter: { type: "string" }
122484
+ },
122485
+ required: ["size"]
122486
+ },
122487
+ request: {
122488
+ method: "POST",
122489
+ path: "/v3/search/people",
122490
+ body: {
122491
+ peopleFilters: "{peopleFilters}",
122492
+ companiesFilters: "{companiesFilters}",
122493
+ size: "{size}",
122494
+ searchAfter: "{searchAfter}"
122495
+ }
122496
+ }
122497
+ },
122498
+ {
122499
+ name: "companies.enrich",
122500
+ class: "mutation",
122501
+ description: "Match one company against Ocean's database and return firmographic, technographic, and funding data. Costs 0.1 credits per result.",
122502
+ parameters: {
122503
+ type: "object",
122504
+ properties: { company: { type: "object" } },
122505
+ required: ["company"]
122506
+ },
122507
+ request: { method: "POST", path: "/v2/enrich/company", body: { company: "{company}" } },
122508
+ cas: "native-idempotency",
122509
+ externalEffect: false
122510
+ },
122511
+ {
122512
+ name: "people.enrich",
122513
+ class: "mutation",
122514
+ description: "Match one person against Ocean's database and return profile data; optionally trigger asynchronous email/phone reveal via webhook. Costs 0.1 credits per result.",
122515
+ parameters: {
122516
+ type: "object",
122517
+ properties: { person: { type: "object" }, revealEmails: { type: "object" } },
122518
+ required: ["person"]
122519
+ },
122520
+ request: {
122521
+ method: "POST",
122522
+ path: "/v2/enrich/person",
122523
+ body: { person: "{person}", revealEmails: "{revealEmails}" }
122524
+ },
122525
+ cas: "native-idempotency",
122526
+ externalEffect: false
122527
+ },
122528
+ {
122529
+ name: "companies.autocomplete",
122530
+ class: "read",
122531
+ description: "Type-ahead autocomplete for company name or domain, useful for picking seed companies for a lookalike search.",
122532
+ parameters: {
122533
+ type: "object",
122534
+ properties: { name: { type: "string" } },
122535
+ required: ["name"]
122536
+ },
122537
+ request: {
122538
+ method: "POST",
122539
+ path: "/v2/autocomplete/companies",
122540
+ body: { name: "{name}" }
122541
+ }
122542
+ }
122543
+ ]
122544
+ });
122545
+
122546
+ // src/connectors/adapters/seamless-ai.ts
122547
+ var seamlessAiConnector = declarativeRestConnector({
122548
+ kind: "seamless-ai",
122549
+ displayName: "Seamless.ai",
122550
+ description: "Search and enrich B2B contact and company data, including verified emails, phone numbers, and job-change signals, for go-to-market prospecting.",
122551
+ auth: {
122552
+ kind: "api-key",
122553
+ hint: "API key from Settings -> API Key (Create New Connection). Sent as the Token header."
122554
+ },
122555
+ category: "sales-intelligence",
122556
+ defaultConsistencyModel: "authoritative",
122557
+ baseUrl: "https://api.seamless.ai/api/client/v1",
122558
+ credentialPlacement: { kind: "header", header: "Token" },
122559
+ defaultHeaders: { "content-type": "application/json" },
122560
+ capabilities: [
122561
+ {
122562
+ name: "contacts.search",
122563
+ class: "read",
122564
+ description: "Search for contacts by company, location, department, job title, seniority, and technologies. Returns search result ids used for research/enrichment.",
122565
+ parameters: {
122566
+ type: "object",
122567
+ properties: {
122568
+ jobTitle: { type: "array", items: { type: "string" } },
122569
+ seniority: { type: "array", items: { type: "string" } },
122570
+ companyDomain: { type: "array", items: { type: "string" } },
122571
+ industry: { type: "array", items: { type: "string" } },
122572
+ limit: { type: "integer" },
122573
+ nextToken: { type: "string" }
122574
+ },
122575
+ required: []
122576
+ },
122577
+ request: {
122578
+ method: "POST",
122579
+ path: "/search/contacts",
122580
+ body: {
122581
+ jobTitle: "{jobTitle}",
122582
+ seniority: "{seniority}",
122583
+ companyDomain: "{companyDomain}",
122584
+ industry: "{industry}",
122585
+ limit: "{limit}",
122586
+ nextToken: "{nextToken}"
122587
+ }
122588
+ }
122589
+ },
122590
+ {
122591
+ name: "companies.search",
122592
+ class: "read",
122593
+ description: "Search for companies by name, domain, location, industry, size, revenue, and technologies. Returns search result ids used for research/enrichment.",
122594
+ parameters: {
122595
+ type: "object",
122596
+ properties: {
122597
+ companyName: { type: "array", items: { type: "string" } },
122598
+ companyDomain: { type: "array", items: { type: "string" } },
122599
+ industry: { type: "array", items: { type: "string" } },
122600
+ companySize: { type: "array", items: { type: "string" } },
122601
+ technologies: { type: "array", items: { type: "string" } },
122602
+ limit: { type: "integer" },
122603
+ nextToken: { type: "string" }
122604
+ },
122605
+ required: []
122606
+ },
122607
+ request: {
122608
+ method: "POST",
122609
+ path: "/search/companies",
122610
+ body: {
122611
+ companyName: "{companyName}",
122612
+ companyDomain: "{companyDomain}",
122613
+ industry: "{industry}",
122614
+ companySize: "{companySize}",
122615
+ technologies: "{technologies}",
122616
+ limit: "{limit}",
122617
+ nextToken: "{nextToken}"
122618
+ }
122619
+ }
122620
+ },
122621
+ {
122622
+ name: "contacts.research",
122623
+ class: "mutation",
122624
+ description: "Research (enrich) contacts asynchronously by searchResultIds from a contact search, or by explicit contact identifiers, to reveal full profile, email, and phone.",
122625
+ parameters: {
122626
+ type: "object",
122627
+ properties: {
122628
+ searchResultIds: { type: "array", items: { type: "string" } },
122629
+ contacts: { type: "array", items: { type: "object" } },
122630
+ isJobChange: { type: "boolean" },
122631
+ skipDeduplicationCheck: { type: "boolean" }
122632
+ },
122633
+ required: []
122634
+ },
122635
+ request: {
122636
+ method: "POST",
122637
+ path: "/contacts/research",
122638
+ body: {
122639
+ searchResultIds: "{searchResultIds}",
122640
+ contacts: "{contacts}",
122641
+ isJobChange: "{isJobChange}",
122642
+ skipDeduplicationCheck: "{skipDeduplicationCheck}"
122643
+ }
122644
+ },
122645
+ cas: "native-idempotency",
122646
+ externalEffect: false
122647
+ },
122648
+ {
122649
+ name: "companies.research",
122650
+ class: "mutation",
122651
+ description: "Research (enrich) companies asynchronously by searchResultIds from a company search, or by direct company identifiers.",
122652
+ parameters: {
122653
+ type: "object",
122654
+ properties: {
122655
+ searchResultIds: { type: "array", items: { type: "string" } },
122656
+ companies: { type: "array", items: { type: "object" } },
122657
+ skipDeduplicationCheck: { type: "boolean" }
122658
+ },
122659
+ required: []
122660
+ },
122661
+ request: {
122662
+ method: "POST",
122663
+ path: "/companies/research",
122664
+ body: {
122665
+ searchResultIds: "{searchResultIds}",
122666
+ companies: "{companies}",
122667
+ skipDeduplicationCheck: "{skipDeduplicationCheck}"
122668
+ }
122669
+ },
122670
+ cas: "native-idempotency",
122671
+ externalEffect: false
122672
+ },
122673
+ {
122674
+ name: "contacts.research.poll",
122675
+ class: "read",
122676
+ description: "Poll for the results of a previously submitted contact research (enrichment) request by request id.",
122677
+ parameters: {
122678
+ type: "object",
122679
+ properties: { requestIds: { type: "array", items: { type: "string" } } },
122680
+ required: ["requestIds"]
122681
+ },
122682
+ request: {
122683
+ method: "GET",
122684
+ path: "/contacts/research/poll",
122685
+ query: { requestIds: "{requestIds}" }
122686
+ }
122687
+ }
122688
+ ]
122689
+ });
122690
+
122691
+ // src/connectors/adapters/theirstack.ts
122692
+ var theirstackConnector = declarativeRestConnector({
122693
+ kind: "theirstack",
122694
+ displayName: "TheirStack",
122695
+ description: "Jobs and technographics data API. Search job postings and companies across 100+ countries, look up a company's tech stack, and detect buying intent.",
122696
+ auth: {
122697
+ kind: "api-key",
122698
+ hint: "API key from app.theirstack.com/settings/api. Sent as the Authorization: Bearer header."
122699
+ },
122700
+ category: "sales-intelligence",
122701
+ defaultConsistencyModel: "authoritative",
122702
+ baseUrl: "https://api.theirstack.com",
122703
+ credentialPlacement: { kind: "bearer" },
122704
+ defaultHeaders: { "content-type": "application/json" },
122705
+ test: { method: "GET", path: "/v0/billing/credit-balance" },
122706
+ capabilities: [
122707
+ {
122708
+ name: "jobs.search",
122709
+ class: "read",
122710
+ description: "Search job postings with filters (title, country, technology, posting recency, company). Requires at least one filter such as posted_at_max_age_days. Costs 1 credit per job returned.",
122711
+ parameters: {
122712
+ type: "object",
122713
+ properties: {
122714
+ posted_at_max_age_days: { type: "integer" },
122715
+ job_title_or: { type: "array", items: { type: "string" } },
122716
+ job_country_code_or: { type: "array", items: { type: "string" } },
122717
+ company_technology_slug_or: { type: "array", items: { type: "string" } },
122718
+ company_name_or: { type: "array", items: { type: "string" } },
122719
+ limit: { type: "integer" },
122720
+ page: { type: "integer" }
122721
+ },
122722
+ required: ["posted_at_max_age_days", "limit", "page"]
122723
+ },
122724
+ request: {
122725
+ method: "POST",
122726
+ path: "/v1/jobs/search",
122727
+ body: {
122728
+ posted_at_max_age_days: "{posted_at_max_age_days}",
122729
+ job_title_or: "{job_title_or}",
122730
+ job_country_code_or: "{job_country_code_or}",
122731
+ company_technology_slug_or: "{company_technology_slug_or}",
122732
+ company_name_or: "{company_name_or}",
122733
+ limit: "{limit}",
122734
+ page: "{page}"
122735
+ }
122736
+ }
122737
+ },
122738
+ {
122739
+ name: "companies.search",
122740
+ class: "read",
122741
+ description: "Search companies by country, technologies used, industry, funding, and nested job filters. Costs 3 credits per company returned.",
122742
+ parameters: {
122743
+ type: "object",
122744
+ properties: {
122745
+ company_country_code_or: { type: "array", items: { type: "string" } },
122746
+ company_technology_slug_or: { type: "array", items: { type: "string" } },
122747
+ industry_id_or: { type: "array", items: { type: "integer" } },
122748
+ min_funding_usd: { type: "integer" },
122749
+ max_funding_usd: { type: "integer" },
122750
+ limit: { type: "integer" },
122751
+ page: { type: "integer" }
122752
+ },
122753
+ required: ["limit", "page"]
122754
+ },
122755
+ request: {
122756
+ method: "POST",
122757
+ path: "/v1/companies/search",
122758
+ body: {
122759
+ company_country_code_or: "{company_country_code_or}",
122760
+ company_technology_slug_or: "{company_technology_slug_or}",
122761
+ industry_id_or: "{industry_id_or}",
122762
+ min_funding_usd: "{min_funding_usd}",
122763
+ max_funding_usd: "{max_funding_usd}",
122764
+ limit: "{limit}",
122765
+ page: "{page}"
122766
+ }
122767
+ }
122768
+ },
122769
+ {
122770
+ name: "companies.technologies",
122771
+ class: "read",
122772
+ description: "Look up the technologies (tech stack) detected for a company identified by domain, name, or LinkedIn URL. Costs 3 credits per company lookup.",
122773
+ parameters: {
122774
+ type: "object",
122775
+ properties: {
122776
+ company_domain: { type: "string" },
122777
+ company_name: { type: "string" },
122778
+ company_linkedin_url: { type: "string" },
122779
+ technology_slug_or: { type: "array", items: { type: "string" } }
122780
+ },
122781
+ required: ["company_domain"]
122782
+ },
122783
+ request: {
122784
+ method: "POST",
122785
+ path: "/v1/companies/technologies",
122786
+ body: {
122787
+ company_domain: "{company_domain}",
122788
+ company_name: "{company_name}",
122789
+ company_linkedin_url: "{company_linkedin_url}",
122790
+ technology_slug_or: "{technology_slug_or}"
122791
+ }
122792
+ }
122793
+ },
122794
+ {
122795
+ name: "companies.buying_intents",
122796
+ class: "read",
122797
+ description: "Retrieve buying-intent signals for a company identified by domain, name, or LinkedIn URL. Costs 3 credits per company lookup.",
122798
+ parameters: {
122799
+ type: "object",
122800
+ properties: {
122801
+ company_domain: { type: "string" },
122802
+ company_name: { type: "string" },
122803
+ company_linkedin_url: { type: "string" }
122804
+ },
122805
+ required: ["company_domain"]
122806
+ },
122807
+ request: {
122808
+ method: "POST",
122809
+ path: "/v1/companies/buying_intents",
122810
+ body: {
122811
+ company_domain: "{company_domain}",
122812
+ company_name: "{company_name}",
122813
+ company_linkedin_url: "{company_linkedin_url}"
122814
+ }
122815
+ }
122816
+ }
122817
+ ]
122818
+ });
122819
+
122820
+ // src/connectors/adapters/usergems.ts
122821
+ var usergemsConnector = declarativeRestConnector({
122822
+ kind: "usergems",
122823
+ displayName: "UserGems",
122824
+ description: "Job-change and relationship tracking ingestion API. Add or remove contacts and accounts on watchlists so UserGems surfaces job-change and buying signals for them.",
122825
+ auth: {
122826
+ kind: "api-key",
122827
+ hint: "API key requested via support@usergems.com. Sent as the X-Api-Key header."
122828
+ },
122829
+ category: "sales-intelligence",
122830
+ defaultConsistencyModel: "authoritative",
122831
+ baseUrl: "https://api.usergems.com/v1",
122832
+ credentialPlacement: { kind: "header", header: "X-Api-Key" },
122833
+ defaultHeaders: { "content-type": "application/json" },
122834
+ capabilities: [
122835
+ {
122836
+ name: "contacts.add",
122837
+ class: "mutation",
122838
+ description: "Add a contact to your UserGems tracking list so job changes and signals are monitored. Email is required; many profile and custom signal fields are optional.",
122839
+ parameters: {
122840
+ type: "object",
122841
+ properties: {
122842
+ email: { type: "string" },
122843
+ firstName: { type: "string" },
122844
+ lastName: { type: "string" },
122845
+ fullName: { type: "string" },
122846
+ company: { type: "string" },
122847
+ relationshipType: { type: "string" },
122848
+ linkedinUrl: { type: "string" },
122849
+ signal: { type: "string" },
122850
+ custom: { type: "object" }
122851
+ },
122852
+ required: ["email"]
122853
+ },
122854
+ request: {
122855
+ method: "POST",
122856
+ path: "/contact",
122857
+ body: {
122858
+ email: "{email}",
122859
+ firstName: "{firstName}",
122860
+ lastName: "{lastName}",
122861
+ fullName: "{fullName}",
122862
+ company: "{company}",
122863
+ relationshipType: "{relationshipType}",
122864
+ linkedinUrl: "{linkedinUrl}",
122865
+ signal: "{signal}",
122866
+ custom: "{custom}"
122867
+ }
122868
+ },
122869
+ cas: "native-idempotency",
122870
+ externalEffect: true
122871
+ },
122872
+ {
122873
+ name: "contacts.delete",
122874
+ class: "mutation",
122875
+ description: "Remove a contact from your UserGems tracking list by email.",
122876
+ parameters: {
122877
+ type: "object",
122878
+ properties: {
122879
+ email: { type: "string" },
122880
+ relationshipType: { type: "string" },
122881
+ signal: { type: "string" }
122882
+ },
122883
+ required: ["email"]
122884
+ },
122885
+ request: {
122886
+ method: "DELETE",
122887
+ path: "/contact",
122888
+ body: {
122889
+ email: "{email}",
122890
+ relationshipType: "{relationshipType}",
122891
+ signal: "{signal}"
122892
+ }
122893
+ },
122894
+ cas: "native-idempotency",
122895
+ externalEffect: true
122896
+ },
122897
+ {
122898
+ name: "accounts.add",
122899
+ class: "mutation",
122900
+ description: "Add an account (company) for which you want to receive new-prospect and signal reports. Name and domain are required.",
122901
+ parameters: {
122902
+ type: "object",
122903
+ properties: {
122904
+ name: { type: "string" },
122905
+ domain: { type: "string" },
122906
+ reportName: { type: "string" },
122907
+ signal: { type: "string" },
122908
+ salesforceId: { type: "string" },
122909
+ customId: { type: "string" },
122910
+ custom: { type: "object" }
122911
+ },
122912
+ required: ["name", "domain"]
122913
+ },
122914
+ request: {
122915
+ method: "POST",
122916
+ path: "/account",
122917
+ body: {
122918
+ name: "{name}",
122919
+ domain: "{domain}",
122920
+ reportName: "{reportName}",
122921
+ signal: "{signal}",
122922
+ salesforceId: "{salesforceId}",
122923
+ customId: "{customId}",
122924
+ custom: "{custom}"
122925
+ }
122926
+ },
122927
+ cas: "native-idempotency",
122928
+ externalEffect: true
122929
+ },
122930
+ {
122931
+ name: "accounts.delete",
122932
+ class: "mutation",
122933
+ description: "Remove a previously added account by name and domain.",
122934
+ parameters: {
122935
+ type: "object",
122936
+ properties: {
122937
+ name: { type: "string" },
122938
+ domain: { type: "string" },
122939
+ reportName: { type: "string" },
122940
+ signal: { type: "string" },
122941
+ salesforceId: { type: "string" },
122942
+ customId: { type: "string" }
122943
+ },
122944
+ required: ["name", "domain"]
122945
+ },
122946
+ request: {
122947
+ method: "DELETE",
122948
+ path: "/account",
122949
+ body: {
122950
+ name: "{name}",
122951
+ domain: "{domain}",
122952
+ reportName: "{reportName}",
122953
+ signal: "{signal}",
122954
+ salesforceId: "{salesforceId}",
122955
+ customId: "{customId}"
122956
+ }
122957
+ },
122958
+ cas: "native-idempotency",
122959
+ externalEffect: true
122960
+ }
122961
+ ]
122962
+ });
122963
+
122964
+ // src/connectors/adapters/hightouch.ts
122965
+ var hightouchConnector = declarativeRestConnector({
122966
+ kind: "hightouch",
122967
+ displayName: "Hightouch",
122968
+ description: "List and inspect Reverse ETL syncs, sources, destinations, and runs, and trigger sync runs.",
122969
+ auth: {
122970
+ kind: "api-key",
122971
+ hint: "API key from Settings -> API keys (Add API key). Sent as the Authorization: Bearer header."
122972
+ },
122973
+ category: "database",
122974
+ defaultConsistencyModel: "authoritative",
122975
+ baseUrl: "https://api.hightouch.com/api/v1",
122976
+ credentialPlacement: { kind: "bearer" },
122977
+ defaultHeaders: { "content-type": "application/json" },
122978
+ test: { method: "GET", path: "/syncs" },
122979
+ capabilities: [
122980
+ {
122981
+ name: "syncs.list",
122982
+ class: "read",
122983
+ description: "List configured syncs in the workspace.",
122984
+ parameters: {
122985
+ type: "object",
122986
+ properties: {
122987
+ limit: { type: "integer" },
122988
+ offset: { type: "integer" },
122989
+ modelId: { type: "number" },
122990
+ slug: { type: "string" },
122991
+ orderBy: { type: "string" }
122992
+ },
122993
+ required: []
122994
+ },
122995
+ request: {
122996
+ method: "GET",
122997
+ path: "/syncs",
122998
+ query: {
122999
+ limit: "{limit}",
123000
+ offset: "{offset}",
123001
+ modelId: "{modelId}",
123002
+ slug: "{slug}",
123003
+ orderBy: "{orderBy}"
123004
+ }
123005
+ }
123006
+ },
123007
+ {
123008
+ name: "syncs.get",
123009
+ class: "read",
123010
+ description: "Retrieve a single sync by its id.",
123011
+ parameters: {
123012
+ type: "object",
123013
+ properties: { syncId: { type: "number" } },
123014
+ required: ["syncId"]
123015
+ },
123016
+ request: { method: "GET", path: "/syncs/{syncId}" }
123017
+ },
123018
+ {
123019
+ name: "syncs.list_runs",
123020
+ class: "read",
123021
+ description: "List the runs (execution history and status) for a sync.",
123022
+ parameters: {
123023
+ type: "object",
123024
+ properties: {
123025
+ syncId: { type: "number" },
123026
+ limit: { type: "integer" },
123027
+ offset: { type: "integer" },
123028
+ runId: { type: "number" },
123029
+ orderBy: { type: "string" }
123030
+ },
123031
+ required: ["syncId"]
123032
+ },
123033
+ request: {
123034
+ method: "GET",
123035
+ path: "/syncs/{syncId}/runs",
123036
+ query: {
123037
+ limit: "{limit}",
123038
+ offset: "{offset}",
123039
+ runId: "{runId}",
123040
+ orderBy: "{orderBy}"
123041
+ }
123042
+ }
123043
+ },
123044
+ {
123045
+ name: "sources.list",
123046
+ class: "read",
123047
+ description: "List configured data sources.",
123048
+ parameters: {
123049
+ type: "object",
123050
+ properties: {
123051
+ limit: { type: "integer" },
123052
+ offset: { type: "integer" },
123053
+ name: { type: "string" },
123054
+ slug: { type: "string" }
123055
+ },
123056
+ required: []
123057
+ },
123058
+ request: {
123059
+ method: "GET",
123060
+ path: "/sources",
123061
+ query: { limit: "{limit}", offset: "{offset}", name: "{name}", slug: "{slug}" }
123062
+ }
123063
+ },
123064
+ {
123065
+ name: "destinations.list",
123066
+ class: "read",
123067
+ description: "List configured destinations.",
123068
+ parameters: {
123069
+ type: "object",
123070
+ properties: {
123071
+ limit: { type: "integer" },
123072
+ offset: { type: "integer" },
123073
+ name: { type: "string" },
123074
+ slug: { type: "string" }
123075
+ },
123076
+ required: []
123077
+ },
123078
+ request: {
123079
+ method: "GET",
123080
+ path: "/destinations",
123081
+ query: { limit: "{limit}", offset: "{offset}", name: "{name}", slug: "{slug}" }
123082
+ }
123083
+ },
123084
+ {
123085
+ name: "syncs.trigger",
123086
+ class: "mutation",
123087
+ description: "Trigger a run of the given sync, optionally forcing a full resync.",
123088
+ parameters: {
123089
+ type: "object",
123090
+ properties: {
123091
+ syncId: { type: "string" },
123092
+ fullResync: { type: "boolean" },
123093
+ resetCDC: { type: "boolean" }
123094
+ },
123095
+ required: ["syncId"]
123096
+ },
123097
+ request: {
123098
+ method: "POST",
123099
+ path: "/syncs/{syncId}/trigger",
123100
+ body: { fullResync: "{fullResync}", resetCDC: "{resetCDC}" }
123101
+ },
123102
+ cas: "native-idempotency",
123103
+ externalEffect: true
123104
+ }
123105
+ ]
123106
+ });
123107
+
123108
+ // src/connectors/adapters/polytomic.ts
123109
+ var polytomicConnector = declarativeRestConnector({
123110
+ kind: "polytomic",
123111
+ displayName: "Polytomic",
123112
+ description: "List and create ETL/reverse-ETL syncs, inspect sync status, and list available connection types.",
123113
+ auth: {
123114
+ kind: "api-key",
123115
+ hint: "API key generated in the Polytomic Settings panel. Sent as the Authorization: Bearer header."
123116
+ },
123117
+ category: "database",
123118
+ defaultConsistencyModel: "authoritative",
123119
+ baseUrl: "https://app.polytomic.com/api",
123120
+ credentialPlacement: { kind: "bearer" },
123121
+ defaultHeaders: { "content-type": "application/json" },
123122
+ test: { method: "GET", path: "/me" },
123123
+ capabilities: [
123124
+ {
123125
+ name: "syncs.list",
123126
+ class: "read",
123127
+ description: "List configured syncs.",
123128
+ parameters: {
123129
+ type: "object",
123130
+ properties: {
123131
+ active: { type: "boolean" },
123132
+ mode: { type: "string" },
123133
+ target_connection_id: { type: "string" },
123134
+ limit: { type: "integer" },
123135
+ page_token: { type: "string" }
123136
+ },
123137
+ required: []
123138
+ },
123139
+ request: {
123140
+ method: "GET",
123141
+ path: "/syncs",
123142
+ query: {
123143
+ active: "{active}",
123144
+ mode: "{mode}",
123145
+ target_connection_id: "{target_connection_id}",
123146
+ limit: "{limit}",
123147
+ page_token: "{page_token}"
123148
+ }
123149
+ }
123150
+ },
123151
+ {
123152
+ name: "syncs.status",
123153
+ class: "read",
123154
+ description: "Get the current status of a sync by its id.",
123155
+ parameters: { type: "object", properties: { id: { type: "string" } }, required: ["id"] },
123156
+ request: { method: "GET", path: "/syncs/{id}/status" }
123157
+ },
123158
+ {
123159
+ name: "connection_types.list",
123160
+ class: "read",
123161
+ description: "List all connection types (source/destination connectors) supported by this deployment.",
123162
+ parameters: { type: "object", properties: {}, required: [] },
123163
+ request: { method: "GET", path: "/connection_types" }
123164
+ },
123165
+ {
123166
+ name: "syncs.create",
123167
+ class: "mutation",
123168
+ description: "Create a new sync from one or more models to a destination.",
123169
+ parameters: {
123170
+ type: "object",
123171
+ properties: {
123172
+ name: { type: "string" },
123173
+ target: { type: "object" },
123174
+ mode: { type: "string" },
123175
+ fields: { type: "array", items: { type: "object" } },
123176
+ schedule: { type: "object" }
123177
+ },
123178
+ required: ["name", "target", "mode", "fields"]
123179
+ },
123180
+ request: {
123181
+ method: "POST",
123182
+ path: "/syncs",
123183
+ body: {
123184
+ name: "{name}",
123185
+ target: "{target}",
123186
+ mode: "{mode}",
123187
+ fields: "{fields}",
123188
+ schedule: "{schedule}"
123189
+ }
123190
+ },
123191
+ cas: "native-idempotency",
123192
+ externalEffect: true
123193
+ }
123194
+ ]
123195
+ });
123196
+
123197
+ // src/connectors/adapters/signwell.ts
123198
+ var signwellConnector = declarativeRestConnector({
123199
+ kind: "signwell",
123200
+ displayName: "SignWell",
123201
+ description: "Create and send documents for electronic signature, and list or retrieve documents.",
123202
+ auth: {
123203
+ kind: "api-key",
123204
+ hint: "API key from Settings -> API (Create API Key). Sent in the X-Api-Key header."
123205
+ },
123206
+ category: "other",
123207
+ defaultConsistencyModel: "authoritative",
123208
+ baseUrl: "https://www.signwell.com/api/v1",
123209
+ credentialPlacement: { kind: "header", header: "X-Api-Key" },
123210
+ defaultHeaders: { "content-type": "application/json" },
123211
+ test: { method: "GET", path: "/me" },
123212
+ capabilities: [
123213
+ {
123214
+ name: "documents.list",
123215
+ class: "read",
123216
+ description: "List documents in the account.",
123217
+ parameters: {
123218
+ type: "object",
123219
+ properties: { page: { type: "integer" }, limit: { type: "integer" } },
123220
+ required: []
123221
+ },
123222
+ request: {
123223
+ method: "GET",
123224
+ path: "/documents",
123225
+ query: { page: "{page}", limit: "{limit}" }
123226
+ }
123227
+ },
123228
+ {
123229
+ name: "documents.get",
123230
+ class: "read",
123231
+ description: "Retrieve a single document by its id.",
123232
+ parameters: { type: "object", properties: { id: { type: "string" } }, required: ["id"] },
123233
+ request: { method: "GET", path: "/documents/{id}" }
123234
+ },
123235
+ {
123236
+ name: "account.get",
123237
+ class: "read",
123238
+ description: "Retrieve the account information associated with the API key.",
123239
+ parameters: { type: "object", properties: {}, required: [] },
123240
+ request: { method: "GET", path: "/me" }
123241
+ },
123242
+ {
123243
+ name: "documents.create",
123244
+ class: "mutation",
123245
+ description: "Create and optionally send a new document for signing. Set draft to true to create without sending.",
123246
+ parameters: {
123247
+ type: "object",
123248
+ properties: {
123249
+ files: { type: "array", items: { type: "object" } },
123250
+ recipients: { type: "array", items: { type: "object" } },
123251
+ name: { type: "string" },
123252
+ subject: { type: "string" },
123253
+ message: { type: "string" },
123254
+ draft: { type: "boolean" },
123255
+ test_mode: { type: "boolean" },
123256
+ embedded_signing: { type: "boolean" }
123257
+ },
123258
+ required: ["files", "recipients"]
123259
+ },
123260
+ request: {
123261
+ method: "POST",
123262
+ path: "/documents",
123263
+ body: {
123264
+ files: "{files}",
123265
+ recipients: "{recipients}",
123266
+ name: "{name}",
123267
+ subject: "{subject}",
123268
+ message: "{message}",
123269
+ draft: "{draft}",
123270
+ test_mode: "{test_mode}",
123271
+ embedded_signing: "{embedded_signing}"
123272
+ }
123273
+ },
123274
+ cas: "native-idempotency",
123275
+ externalEffect: true
123276
+ }
123277
+ ]
123278
+ });
123279
+
123280
+ // src/connectors/adapters/justcall.ts
123281
+ var justcallConnector = declarativeRestConnector({
123282
+ kind: "justcall",
123283
+ displayName: "JustCall",
123284
+ description: "Cloud phone system and SMS platform. Place and list calls, manage contacts, and send SMS/MMS programmatically.",
123285
+ auth: {
123286
+ kind: "api-key",
123287
+ hint: 'Get your API Key and API Secret from JustCall Settings -> Developers. Paste them joined by a colon as "api_key:api_secret"; sent as the Authorization header.'
123288
+ },
123289
+ category: "comms",
123290
+ defaultConsistencyModel: "authoritative",
123291
+ baseUrl: "https://api.justcall.io/v2.1",
123292
+ credentialPlacement: { kind: "header", header: "Authorization" },
123293
+ defaultHeaders: { "content-type": "application/json", accept: "application/json" },
123294
+ test: { method: "GET", path: "/calls", query: { per_page: "1" } },
123295
+ capabilities: [
123296
+ {
123297
+ name: "calls.list",
123298
+ class: "read",
123299
+ description: "List call records linked to the account, with optional filters for number, direction, type, and date range.",
123300
+ parameters: {
123301
+ type: "object",
123302
+ properties: {
123303
+ page: { type: "integer" },
123304
+ per_page: { type: "integer" },
123305
+ contact_number: { type: "string" },
123306
+ from_datetime: { type: "string" },
123307
+ to_datetime: { type: "string" },
123308
+ call_direction: { type: "string" }
123309
+ },
123310
+ required: []
123311
+ },
123312
+ request: {
123313
+ method: "GET",
123314
+ path: "/calls",
123315
+ query: {
123316
+ page: "{page}",
123317
+ per_page: "{per_page}",
123318
+ contact_number: "{contact_number}",
123319
+ from_datetime: "{from_datetime}",
123320
+ to_datetime: "{to_datetime}",
123321
+ call_direction: "{call_direction}"
123322
+ }
123323
+ }
123324
+ },
123325
+ {
123326
+ name: "calls.get",
123327
+ class: "read",
123328
+ description: "Get a single Sales Dialer call by its unique call id.",
123329
+ parameters: { type: "object", properties: { id: { type: "integer" } }, required: ["id"] },
123330
+ request: { method: "GET", path: "/sales_dialer/calls/{id}" }
123331
+ },
123332
+ {
123333
+ name: "contacts.list",
123334
+ class: "read",
123335
+ description: "List contacts in the account, optionally filtered by name or number.",
123336
+ parameters: {
123337
+ type: "object",
123338
+ properties: {
123339
+ page: { type: "integer" },
123340
+ per_page: { type: "integer" },
123341
+ contact_number: { type: "string" },
123342
+ first_name: { type: "string" },
123343
+ last_name: { type: "string" },
123344
+ across_team: { type: "boolean" }
123345
+ },
123346
+ required: []
123347
+ },
123348
+ request: {
123349
+ method: "GET",
123350
+ path: "/contacts",
123351
+ query: {
123352
+ page: "{page}",
123353
+ per_page: "{per_page}",
123354
+ contact_number: "{contact_number}",
123355
+ first_name: "{first_name}",
123356
+ last_name: "{last_name}",
123357
+ across_team: "{across_team}"
123358
+ }
123359
+ }
123360
+ },
123361
+ {
123362
+ name: "contacts.create",
123363
+ class: "mutation",
123364
+ description: "Create a new contact in Sales Dialer.",
123365
+ parameters: {
123366
+ type: "object",
123367
+ properties: {
123368
+ name: { type: "string" },
123369
+ phone_number: { type: "string" },
123370
+ email: { type: "string" }
123371
+ },
123372
+ required: ["name", "phone_number"]
123373
+ },
123374
+ request: {
123375
+ method: "POST",
123376
+ path: "/sales_dialer/contacts",
123377
+ body: { name: "{name}", phone_number: "{phone_number}", email: "{email}" }
123378
+ },
123379
+ cas: "native-idempotency",
123380
+ externalEffect: true
123381
+ },
123382
+ {
123383
+ name: "sms.send",
123384
+ class: "mutation",
123385
+ description: "Send an SMS or MMS from a JustCall number to a contact number.",
123386
+ parameters: {
123387
+ type: "object",
123388
+ properties: {
123389
+ justcall_number: { type: "string" },
123390
+ contact_number: { type: "string" },
123391
+ body: { type: "string" },
123392
+ media_url: { type: "string" }
123393
+ },
123394
+ required: ["justcall_number", "contact_number", "body"]
123395
+ },
123396
+ request: {
123397
+ method: "POST",
123398
+ path: "/texts/new",
123399
+ body: {
123400
+ justcall_number: "{justcall_number}",
123401
+ contact_number: "{contact_number}",
123402
+ body: "{body}",
123403
+ media_url: "{media_url}"
123404
+ }
123405
+ },
123406
+ cas: "native-idempotency",
123407
+ externalEffect: true
123408
+ }
123409
+ ]
123410
+ });
123411
+
123412
+ // src/connectors/adapters/nooks.ts
123413
+ var nooksConnector = declarativeRestConnector({
123414
+ kind: "nooks",
123415
+ displayName: "Nooks",
123416
+ description: "AI sales engagement and dialer platform. Read call records, prospects, and accounts from the Nooks Sequencing API.",
123417
+ auth: {
123418
+ kind: "api-key",
123419
+ hint: "Create a long-lived API key (nooks-api-...) in Nooks Developer Settings -> API Keys. Sent as the Authorization: Bearer header."
123420
+ },
123421
+ category: "comms",
123422
+ defaultConsistencyModel: "authoritative",
123423
+ baseUrl: "https://partner-api.nooks.in/v1",
123424
+ credentialPlacement: { kind: "bearer" },
123425
+ defaultHeaders: { "content-type": "application/json", accept: "application/json" },
123426
+ test: { method: "GET", path: "/me" },
123427
+ capabilities: [
123428
+ {
123429
+ name: "calls.list",
123430
+ class: "read",
123431
+ description: "List call records, with optional filters by prospect, account, or owner.",
123432
+ parameters: {
123433
+ type: "object",
123434
+ properties: {
123435
+ filter_prospect_id: { type: "string" },
123436
+ filter_account_id: { type: "string" },
123437
+ filter_owner_id: { type: "string" },
123438
+ include: { type: "string" }
123439
+ },
123440
+ required: []
123441
+ },
123442
+ request: {
123443
+ method: "GET",
123444
+ path: "/calls",
123445
+ query: {
123446
+ "filter[prospect][id]": "{filter_prospect_id}",
123447
+ "filter[account][id]": "{filter_account_id}",
123448
+ "filter[owner][id]": "{filter_owner_id}",
123449
+ include: "{include}"
123450
+ }
123451
+ }
123452
+ },
123453
+ {
123454
+ name: "calls.get",
123455
+ class: "read",
123456
+ description: "Get a single call record by its id.",
123457
+ parameters: {
123458
+ type: "object",
123459
+ properties: { id: { type: "string" }, include: { type: "string" } },
123460
+ required: ["id"]
123461
+ },
123462
+ request: { method: "GET", path: "/calls/{id}", query: { include: "{include}" } }
123463
+ },
123464
+ {
123465
+ name: "prospects.list",
123466
+ class: "read",
123467
+ description: "List prospects (contacts), with optional filters by name, email, or account.",
123468
+ parameters: {
123469
+ type: "object",
123470
+ properties: {
123471
+ filter_name: { type: "string" },
123472
+ filter_primaryEmail: { type: "string" },
123473
+ filter_account_id: { type: "string" },
123474
+ include: { type: "string" }
123475
+ },
123476
+ required: []
123477
+ },
123478
+ request: {
123479
+ method: "GET",
123480
+ path: "/prospects",
123481
+ query: {
123482
+ "filter[name]": "{filter_name}",
123483
+ "filter[primaryEmail]": "{filter_primaryEmail}",
123484
+ "filter[account][id]": "{filter_account_id}",
123485
+ include: "{include}"
123486
+ }
123487
+ }
123488
+ },
123489
+ {
123490
+ name: "accounts.list",
123491
+ class: "read",
123492
+ description: "List accounts, with optional filters by name, domain, or CRM id.",
123493
+ parameters: {
123494
+ type: "object",
123495
+ properties: {
123496
+ filter_name: { type: "string" },
123497
+ filter_domain: { type: "string" },
123498
+ filter_crmId: { type: "string" }
123499
+ },
123500
+ required: []
123501
+ },
123502
+ request: {
123503
+ method: "GET",
123504
+ path: "/accounts",
123505
+ query: {
123506
+ "filter[name]": "{filter_name}",
123507
+ "filter[domain]": "{filter_domain}",
123508
+ "filter[crmId]": "{filter_crmId}"
123509
+ }
123510
+ }
123511
+ },
123512
+ {
123513
+ name: "prospects.sync",
123514
+ class: "mutation",
123515
+ description: "Sync prospects from the connected CRM into Nooks.",
123516
+ parameters: { type: "object", properties: {}, required: [] },
123517
+ request: { method: "POST", path: "/integrations/prospects/sync", body: {} },
123518
+ cas: "native-idempotency",
123519
+ externalEffect: true
123520
+ }
123521
+ ]
123522
+ });
123523
+
123524
+ // src/connectors/adapters/modjo.ts
123525
+ var modjoConnector = declarativeRestConnector({
123526
+ kind: "modjo",
123527
+ displayName: "Modjo",
123528
+ description: "Conversation intelligence platform. Export call records with transcripts and AI summaries, and list users and teams.",
123529
+ auth: {
123530
+ kind: "api-key",
123531
+ hint: "Create an API key in Modjo (Administrator or Manager role required); copy it immediately as it is shown only once. Sent as the X-API-KEY header."
123532
+ },
123533
+ category: "doc",
123534
+ defaultConsistencyModel: "authoritative",
123535
+ baseUrl: "https://api.modjo.ai",
123536
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
123537
+ defaultHeaders: { "content-type": "application/json", accept: "application/json" },
123538
+ test: { method: "GET", path: "/v1/users", query: { page: "1", perPage: "1" } },
123539
+ capabilities: [
123540
+ {
123541
+ name: "calls.export",
123542
+ class: "read",
123543
+ description: "Retrieve a paginated list of calls with optional relations such as transcripts, AI summaries, and contacts.",
123544
+ parameters: {
123545
+ type: "object",
123546
+ properties: {
123547
+ page: { type: "integer" },
123548
+ perPage: { type: "integer" },
123549
+ transcript: { type: "boolean" },
123550
+ aiSummary: { type: "boolean" },
123551
+ contacts: { type: "boolean" }
123552
+ },
123553
+ required: ["page", "perPage"]
123554
+ },
123555
+ request: {
123556
+ method: "POST",
123557
+ path: "/v1/calls/exports",
123558
+ body: {
123559
+ pagination: { page: "{page}", perPage: "{perPage}" },
123560
+ relations: {
123561
+ transcript: "{transcript}",
123562
+ aiSummary: "{aiSummary}",
123563
+ contacts: "{contacts}"
123564
+ }
123565
+ }
123566
+ }
123567
+ },
123568
+ {
123569
+ name: "users.list",
123570
+ class: "read",
123571
+ description: "Retrieve a paginated list of users in the Modjo workspace.",
123572
+ parameters: {
123573
+ type: "object",
123574
+ properties: { page: { type: "integer" }, perPage: { type: "integer" } },
123575
+ required: ["page", "perPage"]
123576
+ },
123577
+ request: {
123578
+ method: "GET",
123579
+ path: "/v1/users",
123580
+ query: { page: "{page}", perPage: "{perPage}" }
123581
+ }
123582
+ },
123583
+ {
123584
+ name: "teams.list",
123585
+ class: "read",
123586
+ description: "Retrieve a paginated list of teams in the Modjo workspace.",
123587
+ parameters: {
123588
+ type: "object",
123589
+ properties: { page: { type: "integer" }, perPage: { type: "integer" } },
123590
+ required: ["page", "perPage"]
123591
+ },
123592
+ request: {
123593
+ method: "GET",
123594
+ path: "/v1/teams",
123595
+ query: { page: "{page}", perPage: "{perPage}" }
123596
+ }
123597
+ }
123598
+ ]
123599
+ });
123600
+
123601
+ // src/connectors/adapters/factors-ai.ts
123602
+ var factorsAiConnector = declarativeRestConnector({
123603
+ kind: "factors-ai",
123604
+ displayName: "Factors.ai",
123605
+ description: "B2B account intelligence and ABM platform. Retrieve the engagement journey (activity timeline) for a target account by domain.",
123606
+ auth: {
123607
+ kind: "api-key",
123608
+ hint: "Generate a private API token for the target project in Factors.ai. Sent as the Authorization: Bearer header."
123609
+ },
123610
+ category: "sales-intelligence",
123611
+ defaultConsistencyModel: "authoritative",
123612
+ baseUrl: "https://api.factors.ai/open/v1",
123613
+ credentialPlacement: { kind: "bearer" },
123614
+ defaultHeaders: { accept: "application/json" },
123615
+ test: { method: "GET", path: "/account/factors.ai/journey" },
123616
+ capabilities: [
123617
+ {
123618
+ name: "account.journey",
123619
+ class: "read",
123620
+ description: "Get the account journey (chronological engagement events) for a given account domain, optionally filtered by date range, event name, or user.",
123621
+ parameters: {
123622
+ type: "object",
123623
+ properties: {
123624
+ account_domain: { type: "string" },
123625
+ from: { type: "string" },
123626
+ to: { type: "string" },
123627
+ event_name: { type: "string" },
123628
+ user_name: { type: "string" }
123629
+ },
123630
+ required: ["account_domain"]
123631
+ },
123632
+ request: {
123633
+ method: "GET",
123634
+ path: "/account/{account_domain}/journey",
123635
+ query: {
123636
+ from: "{from}",
123637
+ to: "{to}",
123638
+ event_name: "{event_name}",
123639
+ user_name: "{user_name}"
123640
+ }
123641
+ }
123642
+ }
123643
+ ]
123644
+ });
123645
+
123646
+ // src/connectors/adapters/getresponse.ts
123647
+ var getresponseConnector = declarativeRestConnector({
123648
+ kind: "getresponse",
123649
+ displayName: "GetResponse",
123650
+ description: "Email marketing platform for managing contacts, lists (campaigns), and sending newsletters.",
123651
+ auth: {
123652
+ kind: "api-key",
123653
+ hint: "Generate an API key at app.getresponse.com/api. Sent as the X-Auth-Token header with the 'api-key ' prefix (X-Auth-Token: api-key <KEY>)."
123654
+ },
123655
+ category: "crm",
123656
+ defaultConsistencyModel: "authoritative",
123657
+ baseUrl: "https://api.getresponse.com/v3",
123658
+ credentialPlacement: { kind: "header", header: "X-Auth-Token", prefix: "api-key " },
123659
+ defaultHeaders: { "content-type": "application/json" },
123660
+ test: { method: "GET", path: "/accounts" },
123661
+ capabilities: [
123662
+ {
123663
+ name: "contacts.list",
123664
+ class: "read",
123665
+ description: "List or search contacts, optionally filtered by email or campaign (list).",
123666
+ parameters: {
123667
+ type: "object",
123668
+ properties: {
123669
+ email: { type: "string" },
123670
+ campaignId: { type: "string" },
123671
+ page: { type: "integer" },
123672
+ perPage: { type: "integer" }
123673
+ },
123674
+ required: []
123675
+ },
123676
+ request: {
123677
+ method: "GET",
123678
+ path: "/contacts",
123679
+ query: {
123680
+ "query[email]": "{email}",
123681
+ "query[campaignId]": "{campaignId}",
123682
+ page: "{page}",
123683
+ perPage: "{perPage}"
123684
+ }
123685
+ }
123686
+ },
123687
+ {
123688
+ name: "campaigns.list",
123689
+ class: "read",
123690
+ description: "List campaigns (contact lists). The campaignId returned here is used when adding contacts or sending newsletters.",
123691
+ parameters: {
123692
+ type: "object",
123693
+ properties: {
123694
+ name: { type: "string" },
123695
+ page: { type: "integer" },
123696
+ perPage: { type: "integer" }
123697
+ },
123698
+ required: []
123699
+ },
123700
+ request: {
123701
+ method: "GET",
123702
+ path: "/campaigns",
123703
+ query: { "query[name]": "{name}", page: "{page}", perPage: "{perPage}" }
123704
+ }
123705
+ },
123706
+ {
123707
+ name: "contacts.create",
123708
+ class: "mutation",
123709
+ description: "Add (import) a contact to a campaign (list). Only email and campaign id are required.",
123710
+ parameters: {
123711
+ type: "object",
123712
+ properties: {
123713
+ email: { type: "string" },
123714
+ campaign_id: { type: "string" },
123715
+ name: { type: "string" },
123716
+ dayOfCycle: { type: "integer" }
123717
+ },
123718
+ required: ["email", "campaign_id"]
123719
+ },
123720
+ request: {
123721
+ method: "POST",
123722
+ path: "/contacts",
123723
+ body: {
123724
+ email: "{email}",
123725
+ name: "{name}",
123726
+ dayOfCycle: "{dayOfCycle}",
123727
+ campaign: { campaignId: "{campaign_id}" }
123728
+ }
123729
+ },
123730
+ cas: "native-idempotency",
123731
+ externalEffect: true
123732
+ },
123733
+ {
123734
+ name: "newsletters.create",
123735
+ class: "mutation",
123736
+ description: "Create and send a newsletter (broadcast email) to a campaign. Requires subject, fromFieldId, HTML content, and a target campaign.",
123737
+ parameters: {
123738
+ type: "object",
123739
+ properties: {
123740
+ subject: { type: "string" },
123741
+ fromFieldId: { type: "string" },
123742
+ html: { type: "string" },
123743
+ campaign_id: { type: "string" },
123744
+ name: { type: "string" }
123745
+ },
123746
+ required: ["subject", "fromFieldId", "html", "campaign_id"]
123747
+ },
123748
+ request: {
123749
+ method: "POST",
123750
+ path: "/newsletters",
123751
+ body: {
123752
+ name: "{name}",
123753
+ subject: "{subject}",
123754
+ fromField: { fromFieldId: "{fromFieldId}" },
123755
+ content: { html: "{html}" },
123756
+ campaign: { campaignId: "{campaign_id}" },
123757
+ sendSettings: { selectedCampaigns: ["{campaign_id}"] }
123758
+ }
123759
+ },
123760
+ cas: "native-idempotency",
123761
+ externalEffect: true
123762
+ }
123763
+ ]
123764
+ });
123765
+
123766
+ // src/connectors/adapters/outreach.ts
123767
+ var outreachConnector = declarativeRestConnector({
123768
+ kind: "outreach",
123769
+ displayName: "Outreach",
123770
+ description: "Manage Outreach prospects, accounts, and opportunities, and enroll prospects into sequences, through the JSON:API v2 REST API.",
123771
+ auth: {
123772
+ kind: "oauth2",
123773
+ authorizationUrl: "https://api.outreach.io/oauth/authorize",
123774
+ tokenUrl: "https://api.outreach.io/oauth/token",
123775
+ scopes: [
123776
+ "prospects.read",
123777
+ "prospects.write",
123778
+ "accounts.read",
123779
+ "accounts.write",
123780
+ "opportunities.read",
123781
+ "sequences.read",
123782
+ "sequenceStates.read",
123783
+ "sequenceStates.write",
123784
+ "users.read"
123785
+ ],
123786
+ clientIdEnv: "OUTREACH_OAUTH_CLIENT_ID",
123787
+ clientSecretEnv: "OUTREACH_OAUTH_CLIENT_SECRET"
123788
+ },
123789
+ category: "crm",
123790
+ defaultConsistencyModel: "authoritative",
123791
+ baseUrl: "https://api.outreach.io/api/v2",
123792
+ // Outreach is JSON:API — both the request and response media type is
123793
+ // application/vnd.api+json. The declarative runtime only forces a body
123794
+ // content-type when one isn't already present, so pinning it here makes
123795
+ // every write carry the JSON:API media type.
123796
+ defaultHeaders: {
123797
+ accept: "application/vnd.api+json",
123798
+ "content-type": "application/vnd.api+json"
123799
+ },
123800
+ test: { method: "GET", path: "/users", query: { "page[size]": "1" } },
123801
+ capabilities: [
123802
+ {
123803
+ name: "prospects.list",
123804
+ class: "read",
123805
+ description: "List or search prospects (contacts). Filter by email, paginate with pageSize/pageAfter, sort, and sideload related resources via include.",
123806
+ parameters: {
123807
+ type: "object",
123808
+ properties: {
123809
+ email: { type: "string", description: "Filter prospects by email address (filter[emails][email])." },
123810
+ pageSize: { type: "number", description: "Results per page (default 50, max 1000)." },
123811
+ pageAfter: { type: "string", description: "Cursor for the next page (cursor-based pagination)." },
123812
+ sort: { type: "string", description: "Attribute to sort by; prefix with - for descending (e.g. -createdAt)." },
123813
+ include: { type: "string", description: "Comma-separated related resources to sideload (e.g. account,owner)." }
123814
+ }
123815
+ },
123816
+ request: {
123817
+ method: "GET",
123818
+ path: "/prospects",
123819
+ query: {
123820
+ "filter[emails][email]": "{email}",
123821
+ "page[size]": "{pageSize}",
123822
+ "page[after]": "{pageAfter}",
123823
+ sort: "{sort}",
123824
+ include: "{include}"
123825
+ }
123826
+ },
123827
+ requiredScopes: ["prospects.read"]
123828
+ },
123829
+ {
123830
+ name: "prospects.create",
123831
+ class: "mutation",
123832
+ description: 'Create a prospect. Pass JSON:API `attributes` (e.g. { firstName, lastName, emails: [{ email, emailType: "work" }], title }) and an optional `relationships` object (e.g. { account: { data: { type: "account", id: 123 } } }).',
123833
+ parameters: {
123834
+ type: "object",
123835
+ properties: {
123836
+ attributes: {
123837
+ type: "object",
123838
+ description: "JSON:API attributes for the prospect resource.",
123839
+ additionalProperties: true
123840
+ },
123841
+ relationships: {
123842
+ type: "object",
123843
+ description: "Optional JSON:API relationships object linking the prospect to an account, owner, etc.",
123844
+ additionalProperties: true
123845
+ }
123846
+ },
123847
+ required: ["attributes"]
123848
+ },
123849
+ request: {
123850
+ method: "POST",
123851
+ path: "/prospects",
123852
+ body: { data: { type: "prospect", attributes: "{attributes}", relationships: "{relationships}" } }
123853
+ },
123854
+ cas: "native-idempotency",
123855
+ externalEffect: true,
123856
+ requiredScopes: ["prospects.write"]
123857
+ },
123858
+ {
123859
+ name: "prospects.update",
123860
+ class: "mutation",
123861
+ description: "Update a prospect by id. Pass the numeric id and a JSON:API `attributes` object; only provided fields change.",
123862
+ parameters: {
123863
+ type: "object",
123864
+ properties: {
123865
+ id: { type: "number", description: "Numeric prospect id." },
123866
+ attributes: { type: "object", description: "JSON:API attributes to update.", additionalProperties: true },
123867
+ relationships: { type: "object", description: "Optional JSON:API relationships to update.", additionalProperties: true }
123868
+ },
123869
+ required: ["id", "attributes"]
123870
+ },
123871
+ request: {
123872
+ method: "PATCH",
123873
+ path: "/prospects/{id}",
123874
+ body: { data: { type: "prospect", id: "{id}", attributes: "{attributes}", relationships: "{relationships}" } }
123875
+ },
123876
+ cas: "native-idempotency",
123877
+ externalEffect: true,
123878
+ requiredScopes: ["prospects.write"]
123879
+ },
123880
+ {
123881
+ name: "sequenceStates.create",
123882
+ class: "mutation",
123883
+ description: "Enroll a prospect into a sequence (start a sequence state). Provide the numeric prospectId and sequenceId.",
123884
+ parameters: {
123885
+ type: "object",
123886
+ properties: {
123887
+ prospectId: { type: "number", description: "Numeric prospect id to enroll." },
123888
+ sequenceId: { type: "number", description: "Numeric sequence id to enroll the prospect into." }
123889
+ },
123890
+ required: ["prospectId", "sequenceId"]
123891
+ },
123892
+ request: {
123893
+ method: "POST",
123894
+ path: "/sequenceStates",
123895
+ body: {
123896
+ data: {
123897
+ type: "sequenceState",
123898
+ relationships: {
123899
+ prospect: { data: { type: "prospect", id: "{prospectId}" } },
123900
+ sequence: { data: { type: "sequence", id: "{sequenceId}" } }
123901
+ }
123902
+ }
123903
+ }
123904
+ },
123905
+ cas: "native-idempotency",
123906
+ externalEffect: true,
123907
+ requiredScopes: ["sequenceStates.write"]
123908
+ },
123909
+ {
123910
+ name: "opportunities.list",
123911
+ class: "read",
123912
+ description: "List opportunities, optionally filtered by account id; paginate and sideload via include.",
123913
+ parameters: {
123914
+ type: "object",
123915
+ properties: {
123916
+ accountId: { type: "number", description: "Filter opportunities by associated account id (filter[account][id])." },
123917
+ pageSize: { type: "number", description: "Results per page." },
123918
+ pageAfter: { type: "string", description: "Cursor for the next page." },
123919
+ include: { type: "string", description: "Comma-separated related resources to sideload (e.g. account,prospects)." }
123920
+ }
123921
+ },
123922
+ request: {
123923
+ method: "GET",
123924
+ path: "/opportunities",
123925
+ query: {
123926
+ "filter[account][id]": "{accountId}",
123927
+ "page[size]": "{pageSize}",
123928
+ "page[after]": "{pageAfter}",
123929
+ include: "{include}"
123930
+ }
123931
+ },
123932
+ requiredScopes: ["opportunities.read"]
123933
+ },
123934
+ {
123935
+ name: "accounts.create",
123936
+ class: "mutation",
123937
+ description: "Create an account (company). Pass JSON:API `attributes` (name is required; domain and industry optional).",
123938
+ parameters: {
123939
+ type: "object",
123940
+ properties: {
123941
+ attributes: {
123942
+ type: "object",
123943
+ description: "JSON:API attributes for the account resource, e.g. { name, domain, industry }.",
123944
+ additionalProperties: true
123945
+ }
123946
+ },
123947
+ required: ["attributes"]
123948
+ },
123949
+ request: {
123950
+ method: "POST",
123951
+ path: "/accounts",
123952
+ body: { data: { type: "account", attributes: "{attributes}" } }
123953
+ },
123954
+ cas: "native-idempotency",
123955
+ externalEffect: true,
123956
+ requiredScopes: ["accounts.write"]
123957
+ }
123958
+ ]
123959
+ });
123960
+
123961
+ // src/connectors/adapters/salesloft.ts
123962
+ var salesloftConnector = declarativeRestConnector({
123963
+ kind: "salesloft",
123964
+ displayName: "Salesloft",
123965
+ description: "Manage Salesloft people and accounts and enroll people into cadences through the REST API v2.",
123966
+ auth: {
123967
+ kind: "oauth2",
123968
+ authorizationUrl: "https://accounts.salesloft.com/oauth/authorize",
123969
+ tokenUrl: "https://accounts.salesloft.com/oauth/token",
123970
+ scopes: [],
123971
+ clientIdEnv: "SALESLOFT_OAUTH_CLIENT_ID",
123972
+ clientSecretEnv: "SALESLOFT_OAUTH_CLIENT_SECRET"
123973
+ },
123974
+ category: "crm",
123975
+ defaultConsistencyModel: "authoritative",
123976
+ baseUrl: "https://api.salesloft.com/v2",
123977
+ test: { method: "GET", path: "/me" },
123978
+ capabilities: [
123979
+ {
123980
+ name: "me.get",
123981
+ class: "read",
123982
+ description: "Return the authenticated user and team \u2014 the cheapest grant-validity probe.",
123983
+ parameters: { type: "object", properties: {} },
123984
+ request: { method: "GET", path: "/me" }
123985
+ },
123986
+ {
123987
+ name: "people.list",
123988
+ class: "read",
123989
+ description: "List people (contacts). Paginate with page/per_page.",
123990
+ parameters: {
123991
+ type: "object",
123992
+ properties: {
123993
+ page: { type: "number", description: "Page number (1-based)." },
123994
+ per_page: { type: "number", description: "Records per page (max 100)." }
123995
+ }
123996
+ },
123997
+ request: { method: "GET", path: "/people", query: { page: "{page}", per_page: "{per_page}" } }
123998
+ },
123999
+ {
124000
+ name: "people.create",
124001
+ class: "mutation",
124002
+ description: "Create a person. Provide email_address, OR phone paired with last_name. first_name/last_name optional otherwise.",
124003
+ parameters: {
124004
+ type: "object",
124005
+ properties: {
124006
+ email_address: { type: "string", description: "Email address; required unless phone+last_name are provided." },
124007
+ first_name: { type: "string", description: "Person's first name." },
124008
+ last_name: { type: "string", description: "Person's last name; required when phone is provided instead of email_address." },
124009
+ phone: { type: "string", description: "Phone number; required (with last_name) when email_address is absent." }
124010
+ }
124011
+ },
124012
+ request: { method: "POST", path: "/people", body: "args" },
124013
+ cas: "native-idempotency",
124014
+ externalEffect: true
124015
+ },
124016
+ {
124017
+ name: "accounts.create",
124018
+ class: "mutation",
124019
+ description: "Create an account (company). name is required; domain must be unique on the team.",
124020
+ parameters: {
124021
+ type: "object",
124022
+ properties: {
124023
+ name: { type: "string", description: "Account/company name." },
124024
+ domain: { type: "string", description: "Website domain; must be unique on the team." }
124025
+ },
124026
+ required: ["name"]
124027
+ },
124028
+ request: { method: "POST", path: "/accounts", body: "args" },
124029
+ cas: "native-idempotency",
124030
+ externalEffect: true
124031
+ },
124032
+ {
124033
+ name: "cadences.list",
124034
+ class: "read",
124035
+ description: "List cadences. Paginate with page/per_page.",
124036
+ parameters: {
124037
+ type: "object",
124038
+ properties: {
124039
+ page: { type: "number", description: "Page number (1-based)." },
124040
+ per_page: { type: "number", description: "Records per page (max 100)." }
124041
+ }
124042
+ },
124043
+ request: { method: "GET", path: "/cadences", query: { page: "{page}", per_page: "{per_page}" } }
124044
+ },
124045
+ {
124046
+ name: "cadence_memberships.create",
124047
+ class: "mutation",
124048
+ description: "Add a person to a cadence. Provide person_id and cadence_id; user_id defaults to the authenticated user.",
124049
+ parameters: {
124050
+ type: "object",
124051
+ properties: {
124052
+ person_id: { type: "number", description: "Id of the person to enroll (must be visible to the authenticated user)." },
124053
+ cadence_id: { type: "number", description: "Id of the cadence to enroll the person into." },
124054
+ user_id: { type: "number", description: "Owner of the membership; defaults to the authenticated user." }
124055
+ },
124056
+ required: ["person_id", "cadence_id"]
124057
+ },
124058
+ request: { method: "POST", path: "/cadence_memberships", body: "args" },
124059
+ cas: "native-idempotency",
124060
+ externalEffect: true
124061
+ }
124062
+ ]
124063
+ });
124064
+
124065
+ // src/connectors/adapters/gong.ts
124066
+ var gongConnector = declarativeRestConnector({
124067
+ kind: "gong",
124068
+ displayName: "Gong",
124069
+ description: "Read Gong calls, transcripts, and users, ingest external calls, and assign prospects to Engage flows through the v2 API.",
124070
+ auth: {
124071
+ kind: "oauth2",
124072
+ authorizationUrl: "https://app.gong.io/oauth2/authorize",
124073
+ tokenUrl: "https://app.gong.io/oauth2/generate-customer-token",
124074
+ scopes: [
124075
+ "api:calls:read:basic",
124076
+ "api:calls:read:extensive",
124077
+ "api:calls:read:transcript",
124078
+ "api:calls:create",
124079
+ "api:users:read",
124080
+ "api:flows:write"
124081
+ ],
124082
+ clientIdEnv: "GONG_OAUTH_CLIENT_ID",
124083
+ clientSecretEnv: "GONG_OAUTH_CLIENT_SECRET"
124084
+ },
124085
+ category: "comms",
124086
+ defaultConsistencyModel: "authoritative",
124087
+ baseUrl: { metadataKey: "apiBaseUrlForCustomer" },
124088
+ test: { method: "GET", path: "/v2/users" },
124089
+ capabilities: [
124090
+ {
124091
+ name: "calls.list",
124092
+ class: "read",
124093
+ description: "List calls in a time window. fromDateTime is required (ISO-8601); paginate with cursor.",
124094
+ parameters: {
124095
+ type: "object",
124096
+ properties: {
124097
+ fromDateTime: { type: "string", description: "ISO-8601 start datetime for calls to retrieve." },
124098
+ toDateTime: { type: "string", description: "ISO-8601 end datetime for calls to retrieve." },
124099
+ workspaceId: { type: "string", description: "Filter calls by a specific workspace id." },
124100
+ cursor: { type: "string", description: "Pagination cursor from a previous response." }
124101
+ },
124102
+ required: ["fromDateTime"]
124103
+ },
124104
+ request: {
124105
+ method: "GET",
124106
+ path: "/v2/calls",
124107
+ query: { fromDateTime: "{fromDateTime}", toDateTime: "{toDateTime}", workspaceId: "{workspaceId}", cursor: "{cursor}" }
124108
+ },
124109
+ requiredScopes: ["api:calls:read:basic"]
124110
+ },
124111
+ {
124112
+ name: "calls.getTranscripts",
124113
+ class: "read",
124114
+ description: "Retrieve call transcripts. Pass a `filter` object (fromDateTime/toDateTime and/or callIds); paginate with cursor.",
124115
+ parameters: {
124116
+ type: "object",
124117
+ properties: {
124118
+ filter: {
124119
+ type: "object",
124120
+ description: 'Filter object, e.g. { fromDateTime, toDateTime, callIds: ["..."] }.',
124121
+ additionalProperties: true
124122
+ },
124123
+ cursor: { type: "string", description: "Pagination cursor for the next page." }
124124
+ },
124125
+ required: ["filter"]
124126
+ },
124127
+ request: { method: "POST", path: "/v2/calls/transcript", body: { filter: "{filter}", cursor: "{cursor}" } },
124128
+ requiredScopes: ["api:calls:read:transcript"]
124129
+ },
124130
+ {
124131
+ name: "calls.getExtensive",
124132
+ class: "read",
124133
+ description: "Retrieve extensive call data. Pass a `filter` object and an optional `contentSelector` controlling which enrichment fields/context to include.",
124134
+ parameters: {
124135
+ type: "object",
124136
+ properties: {
124137
+ filter: {
124138
+ type: "object",
124139
+ description: "Filter object: fromDateTime, toDateTime, callIds, primaryUserIds, or workspaceId.",
124140
+ additionalProperties: true
124141
+ },
124142
+ contentSelector: {
124143
+ type: "object",
124144
+ description: "Controls included enrichment data (exposedFields, context objects).",
124145
+ additionalProperties: true
124146
+ },
124147
+ cursor: { type: "string", description: "Pagination cursor from a prior response." }
124148
+ },
124149
+ required: ["filter"]
124150
+ },
124151
+ request: {
124152
+ method: "POST",
124153
+ path: "/v2/calls/extensive",
124154
+ body: { filter: "{filter}", contentSelector: "{contentSelector}", cursor: "{cursor}" }
124155
+ },
124156
+ requiredScopes: ["api:calls:read:extensive"]
124157
+ },
124158
+ {
124159
+ name: "users.list",
124160
+ class: "read",
124161
+ description: "List Gong users (max 100 per page). Paginate with cursor.",
124162
+ parameters: {
124163
+ type: "object",
124164
+ properties: {
124165
+ cursor: { type: "string", description: "Pagination cursor; omit for the first page." },
124166
+ includeAvatars: { type: "boolean", description: "Include avatar image URLs in the response (default false)." }
124167
+ }
124168
+ },
124169
+ request: { method: "GET", path: "/v2/users", query: { cursor: "{cursor}", includeAvatars: "{includeAvatars}" } },
124170
+ requiredScopes: ["api:users:read"]
124171
+ },
124172
+ {
124173
+ name: "calls.create",
124174
+ class: "mutation",
124175
+ description: "Ingest an external call into Gong. Required: clientUniqueId, actualStart (ISO-8601), direction (Inbound/Outbound/Conference/Unknown), parties (array of participant objects).",
124176
+ parameters: {
124177
+ type: "object",
124178
+ properties: {
124179
+ clientUniqueId: { type: "string", description: "Unique identifier for the call in the source system." },
124180
+ actualStart: { type: "string", description: "ISO-8601 datetime when the call started." },
124181
+ direction: { type: "string", enum: ["Inbound", "Outbound", "Conference", "Unknown"], description: "Call direction." },
124182
+ title: { type: "string", description: "Title or subject of the call." },
124183
+ parties: {
124184
+ type: "array",
124185
+ description: "Participant objects with emailAddress, name, phoneNumber, speakerId.",
124186
+ items: { type: "object", additionalProperties: true }
124187
+ },
124188
+ mediaChannels: { type: "object", description: "Media channel configuration.", additionalProperties: true },
124189
+ workspaceId: { type: "string", description: "Workspace to associate the call with." }
124190
+ },
124191
+ required: ["clientUniqueId", "actualStart", "direction", "parties"]
124192
+ },
124193
+ request: { method: "POST", path: "/v2/calls", body: "args" },
124194
+ cas: "native-idempotency",
124195
+ externalEffect: true,
124196
+ requiredScopes: ["api:calls:create"]
124197
+ },
124198
+ {
124199
+ name: "flows.assignProspects",
124200
+ class: "mutation",
124201
+ description: "Assign prospects to a Gong Engage flow. Provide flowId and a prospects array (up to 100).",
124202
+ parameters: {
124203
+ type: "object",
124204
+ properties: {
124205
+ flowId: { type: "string", description: "Id of the Engage flow to assign prospects to." },
124206
+ prospects: {
124207
+ type: "array",
124208
+ description: "Prospect objects (up to 100); each with crmProspectId and optional fields.",
124209
+ items: { type: "object", additionalProperties: true }
124210
+ },
124211
+ actionSource: { type: "string", description: "Identifier of the integration making the assignment." }
124212
+ },
124213
+ required: ["flowId", "prospects"]
124214
+ },
124215
+ request: {
124216
+ method: "POST",
124217
+ path: "/v2/flows/prospects/assign",
124218
+ body: { flowId: "{flowId}", prospects: "{prospects}", actionSource: "{actionSource}" }
124219
+ },
124220
+ cas: "native-idempotency",
124221
+ externalEffect: true,
124222
+ requiredScopes: ["api:flows:write"]
124223
+ }
124224
+ ]
124225
+ });
124226
+
124227
+ // src/connectors/adapters/ringcentral.ts
124228
+ var ringcentralConnector = declarativeRestConnector({
124229
+ kind: "ringcentral",
124230
+ displayName: "RingCentral",
124231
+ description: "Read RingCentral extensions, call logs, and messages, send SMS, and create webhook subscriptions through the REST v1.0 API.",
124232
+ auth: {
124233
+ kind: "oauth2",
124234
+ authorizationUrl: "https://platform.ringcentral.com/restapi/oauth/authorize",
124235
+ tokenUrl: "https://platform.ringcentral.com/restapi/oauth/token",
124236
+ scopes: ["ReadAccounts", "ReadCallLog", "ReadMessages", "SMS", "ReadContacts", "SubscriptionWebhook"],
124237
+ clientIdEnv: "RINGCENTRAL_OAUTH_CLIENT_ID",
124238
+ clientSecretEnv: "RINGCENTRAL_OAUTH_CLIENT_SECRET"
124239
+ },
124240
+ category: "comms",
124241
+ defaultConsistencyModel: "authoritative",
124242
+ baseUrl: "https://platform.ringcentral.com/restapi/v1.0",
124243
+ test: { method: "GET", path: "/account/~/extension/~" },
124244
+ capabilities: [
124245
+ {
124246
+ name: "extension.get",
124247
+ class: "read",
124248
+ description: "Get the authenticated user's extension record.",
124249
+ parameters: { type: "object", properties: {} },
124250
+ request: { method: "GET", path: "/account/~/extension/~" }
124251
+ },
124252
+ {
124253
+ name: "extensions.list",
124254
+ class: "read",
124255
+ description: "List extensions on an account. Pass accountId or ~ for the authenticated account.",
124256
+ parameters: {
124257
+ type: "object",
124258
+ properties: {
124259
+ accountId: { type: "string", description: "Internal account id, or ~ for the authenticated account." },
124260
+ page: { type: "number", description: "Page number for pagination." },
124261
+ perPage: { type: "number", description: "Records per page." },
124262
+ status: { type: "string", description: "Filter by extension status (e.g. Enabled, Disabled)." }
124263
+ },
124264
+ required: ["accountId"]
124265
+ },
124266
+ request: {
124267
+ method: "GET",
124268
+ path: "/account/{accountId}/extension",
124269
+ query: { page: "{page}", perPage: "{perPage}", status: "{status}" }
124270
+ }
124271
+ },
124272
+ {
124273
+ name: "callLog.list",
124274
+ class: "read",
124275
+ description: "List the authenticated extension's call log. Use view=Detailed for full records.",
124276
+ parameters: {
124277
+ type: "object",
124278
+ properties: {
124279
+ dateFrom: { type: "string", description: "Start of range, ISO-8601 UTC." },
124280
+ dateTo: { type: "string", description: "End of range, ISO-8601 UTC." },
124281
+ view: { type: "string", description: "Set to 'Detailed' to fetch detailed call records." },
124282
+ perPage: { type: "number", description: "Records per page." }
124283
+ }
124284
+ },
124285
+ request: {
124286
+ method: "GET",
124287
+ path: "/account/~/extension/~/call-log",
124288
+ query: { dateFrom: "{dateFrom}", dateTo: "{dateTo}", view: "{view}", perPage: "{perPage}" }
124289
+ }
124290
+ },
124291
+ {
124292
+ name: "messages.list",
124293
+ class: "read",
124294
+ description: "List the authenticated extension's message store (SMS, Fax, VoiceMail).",
124295
+ parameters: {
124296
+ type: "object",
124297
+ properties: {
124298
+ messageType: { type: "string", description: "Filter by message type: SMS, Fax, or VoiceMail." },
124299
+ dateFrom: { type: "string", description: "Start of range, ISO-8601." },
124300
+ dateTo: { type: "string", description: "End of range, ISO-8601." },
124301
+ perPage: { type: "number", description: "Records per page (up to 1000)." },
124302
+ readStatus: { type: "string", description: "Filter by read status: Read or Unread." }
124303
+ }
124304
+ },
124305
+ request: {
124306
+ method: "GET",
124307
+ path: "/account/~/extension/~/message-store",
124308
+ query: {
124309
+ messageType: "{messageType}",
124310
+ dateFrom: "{dateFrom}",
124311
+ dateTo: "{dateTo}",
124312
+ perPage: "{perPage}",
124313
+ readStatus: "{readStatus}"
124314
+ }
124315
+ }
124316
+ },
124317
+ {
124318
+ name: "sms.send",
124319
+ class: "mutation",
124320
+ description: "Send an SMS from the authenticated extension. from = { phoneNumber }, to = [{ phoneNumber }] (up to 10), text = body.",
124321
+ parameters: {
124322
+ type: "object",
124323
+ properties: {
124324
+ from: { type: "object", description: "Sender: { phoneNumber } \u2014 must be a number assigned to the user.", additionalProperties: true },
124325
+ to: {
124326
+ type: "array",
124327
+ description: "Recipients: [{ phoneNumber }] \u2014 up to 10.",
124328
+ items: { type: "object", additionalProperties: true }
124329
+ },
124330
+ text: { type: "string", description: "SMS message text." }
124331
+ },
124332
+ required: ["from", "to", "text"]
124333
+ },
124334
+ request: { method: "POST", path: "/account/~/extension/~/sms", body: { from: "{from}", to: "{to}", text: "{text}" } },
124335
+ cas: "native-idempotency",
124336
+ externalEffect: true
124337
+ },
124338
+ {
124339
+ name: "subscriptions.create",
124340
+ class: "mutation",
124341
+ description: 'Create a webhook subscription. eventFilters = array of event URIs, deliveryMode = { transportType: "WebHook", address }.',
124342
+ parameters: {
124343
+ type: "object",
124344
+ properties: {
124345
+ eventFilters: {
124346
+ type: "array",
124347
+ description: "Event filter URI strings, e.g. /restapi/v1.0/account/~/extension/~/message-store.",
124348
+ items: { type: "string" }
124349
+ },
124350
+ deliveryMode: {
124351
+ type: "object",
124352
+ description: 'Delivery config: { transportType: "WebHook", address }.',
124353
+ additionalProperties: true
124354
+ },
124355
+ expiresIn: { type: "number", description: "Subscription lifetime in seconds." }
124356
+ },
124357
+ required: ["eventFilters", "deliveryMode"]
124358
+ },
124359
+ request: {
124360
+ method: "POST",
124361
+ path: "/subscription",
124362
+ body: { eventFilters: "{eventFilters}", deliveryMode: "{deliveryMode}", expiresIn: "{expiresIn}" }
124363
+ },
124364
+ cas: "native-idempotency",
124365
+ externalEffect: true
124366
+ }
124367
+ ]
124368
+ });
124369
+
124370
+ // src/connectors/adapters/dialpad.ts
124371
+ var dialpadConnector = declarativeRestConnector({
124372
+ kind: "dialpad",
124373
+ displayName: "Dialpad",
124374
+ description: "Read Dialpad contacts, calls, and users, create contacts, and send SMS through the v2 API.",
124375
+ auth: {
124376
+ kind: "oauth2",
124377
+ authorizationUrl: "https://dialpad.com/oauth2/authorize",
124378
+ tokenUrl: "https://dialpad.com/oauth2/token",
124379
+ scopes: ["calls:list", "offline_access"],
124380
+ clientIdEnv: "DIALPAD_OAUTH_CLIENT_ID",
124381
+ clientSecretEnv: "DIALPAD_OAUTH_CLIENT_SECRET"
124382
+ },
124383
+ category: "comms",
124384
+ defaultConsistencyModel: "authoritative",
124385
+ baseUrl: "https://dialpad.com/api/v2",
124386
+ test: { method: "GET", path: "/users" },
124387
+ capabilities: [
124388
+ {
124389
+ name: "contacts.list",
124390
+ class: "read",
124391
+ description: "List contacts. Set include_local + owner_id to include a user's local contacts; paginate with cursor.",
124392
+ parameters: {
124393
+ type: "object",
124394
+ properties: {
124395
+ cursor: { type: "string", description: "Pagination token from a previous response." },
124396
+ include_local: { type: "boolean", description: "Include company local contacts (default false)." },
124397
+ owner_id: { type: "string", description: "User id whose local contacts should be retrieved." }
124398
+ }
124399
+ },
124400
+ request: {
124401
+ method: "GET",
124402
+ path: "/contacts",
124403
+ query: { cursor: "{cursor}", include_local: "{include_local}", owner_id: "{owner_id}" }
124404
+ }
124405
+ },
124406
+ {
124407
+ name: "contacts.create",
124408
+ class: "mutation",
124409
+ description: "Create a contact. first_name and last_name are required. Omit owner_id for a shared company contact.",
124410
+ parameters: {
124411
+ type: "object",
124412
+ properties: {
124413
+ first_name: { type: "string", description: "Contact's first name." },
124414
+ last_name: { type: "string", description: "Contact's last name." },
124415
+ company_name: { type: "string", description: "Contact's company name." },
124416
+ job_title: { type: "string", description: "Contact's job title." },
124417
+ emails: { type: "array", description: "Email strings; primary first.", items: { type: "string" } },
124418
+ phones: { type: "array", description: "E.164-formatted phone strings; primary first.", items: { type: "string" } },
124419
+ owner_id: { type: "string", description: "User id to create a local contact for; omit for a shared company contact." }
124420
+ },
124421
+ required: ["first_name", "last_name"]
124422
+ },
124423
+ request: { method: "POST", path: "/contacts", body: "args" },
124424
+ cas: "native-idempotency",
124425
+ externalEffect: true
124426
+ },
124427
+ {
124428
+ name: "calls.list",
124429
+ class: "read",
124430
+ description: "List calls. Filter by started_after/started_before (UTC ms) and target; paginate with cursor.",
124431
+ parameters: {
124432
+ type: "object",
124433
+ properties: {
124434
+ cursor: { type: "string", description: "Pagination token from a previous response." },
124435
+ started_after: { type: "number", description: "UTC millisecond timestamp; calls started after this time." },
124436
+ started_before: { type: "number", description: "UTC millisecond timestamp; calls started before this time." },
124437
+ target_id: { type: "number", description: "Filter calls by target entity id." },
124438
+ target_type: { type: "string", description: "Target type: callcenter, callrouter, channel, coaching, team, department, office, user, etc." },
124439
+ include_anonymized: { type: "boolean", description: "Include anonymized call records (default false)." }
124440
+ }
124441
+ },
124442
+ request: {
124443
+ method: "GET",
124444
+ path: "/call",
124445
+ query: {
124446
+ cursor: "{cursor}",
124447
+ started_after: "{started_after}",
124448
+ started_before: "{started_before}",
124449
+ target_id: "{target_id}",
124450
+ target_type: "{target_type}",
124451
+ include_anonymized: "{include_anonymized}"
124452
+ }
124453
+ }
124454
+ },
124455
+ {
124456
+ name: "calls.get",
124457
+ class: "read",
124458
+ description: "Get a single call by id.",
124459
+ parameters: {
124460
+ type: "object",
124461
+ properties: { id: { type: "number", description: "The call's unique identifier (int64)." } },
124462
+ required: ["id"]
124463
+ },
124464
+ request: { method: "GET", path: "/call/{id}" }
124465
+ },
124466
+ {
124467
+ name: "sms.send",
124468
+ class: "mutation",
124469
+ description: "Send an SMS/MMS. to_numbers = up to 10 E.164 destinations, text = body. Provide one sender: user_id, from_number, or sender_group_id(+type).",
124470
+ parameters: {
124471
+ type: "object",
124472
+ properties: {
124473
+ to_numbers: { type: "array", description: "Up to 10 E.164-formatted destination numbers.", items: { type: "string" } },
124474
+ text: { type: "string", description: "Message body text." },
124475
+ user_id: { type: "number", description: "Sender's Dialpad user id." },
124476
+ from_number: { type: "string", description: "Sender's phone number; overrides user_id/sender_group_id." },
124477
+ sender_group_id: { type: "number", description: "Office, department, or call-center id to send from." },
124478
+ sender_group_type: { type: "string", enum: ["callcenter", "department", "office"], description: "Sender group type." },
124479
+ media: { type: "string", description: "Base64-encoded media attachment (max 500 KiB); triggers MMS." },
124480
+ infer_country_code: { type: "boolean", description: "Relax strict E.164 requirement (default false)." }
124481
+ },
124482
+ required: ["to_numbers", "text"]
124483
+ },
124484
+ request: { method: "POST", path: "/sms", body: "args" },
124485
+ cas: "native-idempotency",
124486
+ externalEffect: true
124487
+ },
124488
+ {
124489
+ name: "users.list",
124490
+ class: "read",
124491
+ description: "List users. Filter by email/name/state; paginate with cursor.",
124492
+ parameters: {
124493
+ type: "object",
124494
+ properties: {
124495
+ cursor: { type: "string", description: "Pagination token from a previous response." },
124496
+ email: { type: "string", description: "Filter by user's email address." },
124497
+ first_name: { type: "string", description: "Filter by first-name prefix." },
124498
+ last_name: { type: "string", description: "Filter by last-name prefix." },
124499
+ state: { type: "string", description: "Filter by state: active, all, cancelled, deleted, pending, suspended." },
124500
+ company_admin: { type: "boolean", description: "Return only company admins (true) or non-admins (false)." }
124501
+ }
124502
+ },
124503
+ request: {
124504
+ method: "GET",
124505
+ path: "/users",
124506
+ query: {
124507
+ cursor: "{cursor}",
124508
+ email: "{email}",
124509
+ first_name: "{first_name}",
124510
+ last_name: "{last_name}",
124511
+ state: "{state}",
124512
+ company_admin: "{company_admin}"
124513
+ }
124514
+ }
124515
+ }
124516
+ ]
124517
+ });
124518
+
124519
+ // src/connectors/adapters/demandbase.ts
124520
+ var demandbaseConnector = declarativeRestConnector({
124521
+ kind: "demandbase",
124522
+ displayName: "Demandbase",
124523
+ description: "Manage Demandbase platform users (list, get, create) through the Admin API using client-credentials auth.",
124524
+ auth: {
124525
+ kind: "oauth2",
124526
+ grantType: "client_credentials",
124527
+ tokenUrl: "https://uapi.demandbase.com/auth/v1/token",
124528
+ scopes: [],
124529
+ clientIdEnv: "DEMANDBASE_OAUTH_CLIENT_ID",
124530
+ clientSecretEnv: "DEMANDBASE_OAUTH_CLIENT_SECRET"
124531
+ },
124532
+ category: "sales-intelligence",
124533
+ defaultConsistencyModel: "authoritative",
124534
+ baseUrl: "https://uapi.demandbase.com",
124535
+ test: { method: "GET", path: "/admin/v1/users", query: { limit: "1" } },
124536
+ capabilities: [
124537
+ {
124538
+ name: "users.list",
124539
+ class: "read",
124540
+ description: "List platform users. Paginate with limit/offset; filter by status/role.",
124541
+ parameters: {
124542
+ type: "object",
124543
+ properties: {
124544
+ limit: { type: "number", description: "Max records to return (max 100)." },
124545
+ offset: { type: "number", description: "Pagination offset." },
124546
+ status: { type: "string", description: "Filter by user status." },
124547
+ role: { type: "string", description: "Filter by user role." }
124548
+ }
124549
+ },
124550
+ request: {
124551
+ method: "GET",
124552
+ path: "/admin/v1/users",
124553
+ query: { limit: "{limit}", offset: "{offset}", status: "{status}", role: "{role}" }
124554
+ }
124555
+ },
124556
+ {
124557
+ name: "users.get",
124558
+ class: "read",
124559
+ description: "Get a single platform user by id.",
124560
+ parameters: {
124561
+ type: "object",
124562
+ properties: { userId: { type: "string", description: "The user's unique identifier." } },
124563
+ required: ["userId"]
124564
+ },
124565
+ request: { method: "GET", path: "/admin/v1/user/{userId}" }
124566
+ },
124567
+ {
124568
+ name: "users.create",
124569
+ class: "mutation",
124570
+ description: "Create a platform user. email, first_name, last_name, and role are required.",
124571
+ parameters: {
124572
+ type: "object",
124573
+ properties: {
124574
+ email: { type: "string", description: "User email address." },
124575
+ first_name: { type: "string", description: "User first name." },
124576
+ last_name: { type: "string", description: "User last name." },
124577
+ role: { type: "string", description: "User role within the platform." }
124578
+ },
124579
+ required: ["email", "first_name", "last_name", "role"]
124580
+ },
124581
+ request: { method: "POST", path: "/admin/v1/user", body: "args" },
124582
+ cas: "native-idempotency",
124583
+ externalEffect: true
124584
+ }
124585
+ ]
124586
+ });
124587
+
120262
124588
  export {
120263
124589
  InMemoryOAuthFlowStore,
120264
124590
  startOAuthFlow,
@@ -120762,6 +125088,45 @@ export {
120762
125088
  n8nConnector,
120763
125089
  makeConnector,
120764
125090
  pipedreamConnector,
125091
+ amplemarketConnector,
125092
+ heyreachConnector,
125093
+ lagrowthmachineConnector,
125094
+ saleshandyConnector,
125095
+ bettercontactConnector,
125096
+ contactoutConnector,
125097
+ findymailConnector,
125098
+ snovIoConnector,
125099
+ wizaConnector,
125100
+ builtwithConnector,
125101
+ commonRoomConnector,
125102
+ leadfeederConnector,
125103
+ serperConnector,
125104
+ warmlyConnector,
125105
+ autoboundConnector,
125106
+ crustdataConnector,
125107
+ fullenrichConnector,
125108
+ leadmagicConnector,
125109
+ brightdataConnector,
125110
+ phantombusterConnector,
125111
+ zenrowsConnector,
125112
+ oceanIoConnector,
125113
+ seamlessAiConnector,
125114
+ theirstackConnector,
125115
+ usergemsConnector,
125116
+ hightouchConnector,
125117
+ polytomicConnector,
125118
+ signwellConnector,
125119
+ justcallConnector,
125120
+ nooksConnector,
125121
+ modjoConnector,
125122
+ factorsAiConnector,
125123
+ getresponseConnector,
125124
+ outreachConnector,
125125
+ salesloftConnector,
125126
+ gongConnector,
125127
+ ringcentralConnector,
125128
+ dialpadConnector,
125129
+ demandbaseConnector,
120765
125130
  adapters_exports
120766
125131
  };
120767
- //# sourceMappingURL=chunk-COKK7BOH.js.map
125132
+ //# sourceMappingURL=chunk-HRPCFEGL.js.map