@tangle-network/agent-integrations 0.41.0 → 0.42.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,
@@ -167,11 +175,13 @@ __export(adapters_exports, {
167
175
  exaConnector: () => exaConnector,
168
176
  facebookLeadsConnector: () => facebookLeadsConnector,
169
177
  facebookPagesConnector: () => facebookPagesConnector,
178
+ factorsAiConnector: () => factorsAiConnector,
170
179
  fathomAnalyticsConnector: () => fathomAnalyticsConnector,
171
180
  fathomConnector: () => fathomConnector,
172
181
  figjamConnector: () => figjamConnector,
173
182
  figmaConnector: () => figmaConnector,
174
183
  filloutFormsConnector: () => filloutFormsConnector,
184
+ findymailConnector: () => findymailConnector,
175
185
  firebaseConnector: () => firebaseConnector,
176
186
  fireberryConnector: () => fireberryConnector,
177
187
  firecrawlConnector: () => firecrawlConnector,
@@ -190,8 +200,10 @@ __export(adapters_exports, {
190
200
  freshsalesConnector: () => freshsalesConnector,
191
201
  freshserviceConnector: () => freshserviceConnector,
192
202
  frontConnector: () => frontConnector,
203
+ fullenrichConnector: () => fullenrichConnector,
193
204
  gameballConnector: () => gameballConnector,
194
205
  geminiConnector: () => geminiConnector,
206
+ getresponseConnector: () => getresponseConnector,
195
207
  ghostcmsConnector: () => ghostcmsConnector,
196
208
  gistlyConnector: () => gistlyConnector,
197
209
  giteaConnector: () => giteaConnector,
@@ -237,6 +249,8 @@ __export(adapters_exports, {
237
249
  helpscoutConnector: () => helpscoutConnector,
238
250
  heygenConnector: () => heygenConnector,
239
251
  heymarketSmsConnector: () => heymarketSmsConnector,
252
+ heyreachConnector: () => heyreachConnector,
253
+ hightouchConnector: () => hightouchConnector,
240
254
  housecallProConnector: () => housecallProConnector,
241
255
  hubspot: () => hubspot,
242
256
  huggingFaceConnector: () => huggingFaceConnector,
@@ -261,6 +275,7 @@ __export(adapters_exports, {
261
275
  joggAiConnector: () => joggAiConnector,
262
276
  jotformConnector: () => jotformConnector,
263
277
  justInvoiceConnector: () => justInvoiceConnector,
278
+ justcallConnector: () => justcallConnector,
264
279
  kallabotAiConnector: () => kallabotAiConnector,
265
280
  kapsoConnector: () => kapsoConnector,
266
281
  kimaiConnector: () => kimaiConnector,
@@ -274,7 +289,10 @@ __export(adapters_exports, {
274
289
  kommoConnector: () => kommoConnector,
275
290
  kudosityConnector: () => kudosityConnector,
276
291
  kustomerConnector: () => kustomerConnector,
292
+ lagrowthmachineConnector: () => lagrowthmachineConnector,
277
293
  leadConnectorConnector: () => leadConnectorConnector,
294
+ leadfeederConnector: () => leadfeederConnector,
295
+ leadmagicConnector: () => leadmagicConnector,
278
296
  leapAiConnector: () => leapAiConnector,
279
297
  leexiConnector: () => leexiConnector,
280
298
  lemlistConnector: () => lemlistConnector,
@@ -335,6 +353,7 @@ __export(adapters_exports, {
335
353
  missiveConnector: () => missiveConnector,
336
354
  mixmaxConnector: () => mixmaxConnector,
337
355
  mixpanelConnector: () => mixpanelConnector,
356
+ modjoConnector: () => modjoConnector,
338
357
  mollieConnector: () => mollieConnector,
339
358
  mondayConnector: () => mondayConnector,
340
359
  mongodbConnector: () => mongodbConnector,
@@ -343,9 +362,11 @@ __export(adapters_exports, {
343
362
  niftyConnector: () => niftyConnector,
344
363
  ninjapipeConnector: () => ninjapipeConnector,
345
364
  nocodbConnector: () => nocodbConnector,
365
+ nooksConnector: () => nooksConnector,
346
366
  notion: () => notion,
347
367
  notionConnector: () => notionConnector,
348
368
  ntfyConnector: () => ntfyConnector,
369
+ oceanIoConnector: () => oceanIoConnector,
349
370
  odooConnector: () => odooConnector,
350
371
  omniCoConnector: () => omniCoConnector,
351
372
  omnihrConnector: () => omnihrConnector,
@@ -372,6 +393,7 @@ __export(adapters_exports, {
372
393
  peekshotConnector: () => peekshotConnector,
373
394
  perplexityAiConnector: () => perplexityAiConnector,
374
395
  personalAiConnector: () => personalAiConnector,
396
+ phantombusterConnector: () => phantombusterConnector,
375
397
  phonyConnector: () => phonyConnector,
376
398
  pinchPaymentsConnector: () => pinchPaymentsConnector,
377
399
  pineconeConnector: () => pineconeConnector,
@@ -381,6 +403,7 @@ __export(adapters_exports, {
381
403
  plausibleConnector: () => plausibleConnector,
382
404
  pocketbaseConnector: () => pocketbaseConnector,
383
405
  pollybotAiConnector: () => pollybotAiConnector,
406
+ polytomicConnector: () => polytomicConnector,
384
407
  postgresConnector: () => postgresConnector,
385
408
  posthogConnector: () => posthogConnector,
386
409
  postizConnector: () => postizConnector,
@@ -410,11 +433,13 @@ __export(adapters_exports, {
410
433
  saasticConnector: () => saasticConnector,
411
434
  saleorConnector: () => saleorConnector,
412
435
  salesforceConnector: () => salesforceConnector,
436
+ saleshandyConnector: () => saleshandyConnector,
413
437
  sanityConnector: () => sanityConnector,
414
438
  sardisConnector: () => sardisConnector,
415
439
  savvycalConnector: () => savvycalConnector,
416
440
  scrapegraphaiConnector: () => scrapegraphaiConnector,
417
441
  scrapelessConnector: () => scrapelessConnector,
442
+ seamlessAiConnector: () => seamlessAiConnector,
418
443
  seekTableConnector: () => seekTableConnector,
419
444
  semrushConnector: () => semrushConnector,
420
445
  sendgridConnector: () => sendgridConnector,
@@ -422,6 +447,7 @@ __export(adapters_exports, {
422
447
  sendpulseConnector: () => sendpulseConnector,
423
448
  senjaConnector: () => senjaConnector,
424
449
  sentryConnector: () => sentryConnector,
450
+ serperConnector: () => serperConnector,
425
451
  serpstatConnector: () => serpstatConnector,
426
452
  serviceNowConnector: () => serviceNowConnector,
427
453
  sharepoint: () => sharepoint,
@@ -430,6 +456,7 @@ __export(adapters_exports, {
430
456
  shortIoConnector: () => shortIoConnector,
431
457
  signNowConnector: () => signNowConnector,
432
458
  signrequestConnector: () => signrequestConnector,
459
+ signwellConnector: () => signwellConnector,
433
460
  similarwebConnector: () => similarwebConnector,
434
461
  simplirouteConnector: () => simplirouteConnector,
435
462
  simplybookmeConnector: () => simplybookmeConnector,
@@ -441,6 +468,7 @@ __export(adapters_exports, {
441
468
  smartsuiteConnector: () => smartsuiteConnector,
442
469
  smooveConnector: () => smooveConnector,
443
470
  smsmodeConnector: () => smsmodeConnector,
471
+ snovIoConnector: () => snovIoConnector,
444
472
  snowflakeConnector: () => snowflakeConnector,
445
473
  socialkitConnector: () => socialkitConnector,
446
474
  squareConnector: () => squareConnector,
@@ -460,6 +488,7 @@ __export(adapters_exports, {
460
488
  telnyxConnector: () => telnyxConnector,
461
489
  tenzoConnector: () => tenzoConnector,
462
490
  textcortexAiConnector: () => textcortexAiConnector,
491
+ theirstackConnector: () => theirstackConnector,
463
492
  ticktickConnector: () => ticktickConnector,
464
493
  timeOpsConnector: () => timeOpsConnector,
465
494
  timelinesAiConnector: () => timelinesAiConnector,
@@ -479,6 +508,7 @@ __export(adapters_exports, {
479
508
  umamiConnector: () => umamiConnector,
480
509
  upgradechatConnector: () => upgradechatConnector,
481
510
  uscreenConnector: () => uscreenConnector,
511
+ usergemsConnector: () => usergemsConnector,
482
512
  validatedmailsConnector: () => validatedmailsConnector,
483
513
  vapiConnector: () => vapiConnector,
484
514
  vboutConnector: () => vboutConnector,
@@ -490,6 +520,7 @@ __export(adapters_exports, {
490
520
  vtexConnector: () => vtexConnector,
491
521
  vtigerConnector: () => vtigerConnector,
492
522
  wafeqConnector: () => wafeqConnector,
523
+ warmlyConnector: () => warmlyConnector,
493
524
  weaviateConnector: () => weaviateConnector,
494
525
  webflowConnector: () => webflowConnector,
495
526
  webhookConnector: () => webhookConnector,
@@ -498,6 +529,7 @@ __export(adapters_exports, {
498
529
  whatsappBusiness: () => whatsappBusiness,
499
530
  whatsappConnector: () => whatsappConnector,
500
531
  whatsscaleConnector: () => whatsscaleConnector,
532
+ wizaConnector: () => wizaConnector,
501
533
  wonderchatConnector: () => wonderchatConnector,
502
534
  woocommerceConnector: () => woocommerceConnector,
503
535
  woodpeckerConnector: () => woodpeckerConnector,
@@ -515,6 +547,7 @@ __export(adapters_exports, {
515
547
  zapierConnector: () => zapierConnector,
516
548
  zendeskConnector: () => zendeskConnector,
517
549
  zendeskSellConnector: () => zendeskSellConnector,
550
+ zenrowsConnector: () => zenrowsConnector,
518
551
  zeplinConnector: () => zeplinConnector,
519
552
  zerobounceConnector: () => zerobounceConnector,
520
553
  zohoBookingsConnector: () => zohoBookingsConnector,
@@ -2281,7 +2314,7 @@ function declarativeRestConnector(spec) {
2281
2314
  },
2282
2315
  async executeRead(inv) {
2283
2316
  const op = readOperation(spec, inv.capabilityName, "read");
2284
- const response = await executeRestRequest(spec, op.request, inv);
2317
+ const response = await executeRestRequest(spec, op.request, inv, requiredArgsOf(op.parameters));
2285
2318
  return {
2286
2319
  data: response.data,
2287
2320
  etag: response.etag,
@@ -2290,7 +2323,7 @@ function declarativeRestConnector(spec) {
2290
2323
  },
2291
2324
  async executeMutation(inv) {
2292
2325
  const op = readOperation(spec, inv.capabilityName, "mutation");
2293
- const response = await executeRestRequest(spec, op.request, inv);
2326
+ const response = await executeRestRequest(spec, op.request, inv, requiredArgsOf(op.parameters));
2294
2327
  return {
2295
2328
  status: "committed",
2296
2329
  data: response.data,
@@ -2360,7 +2393,11 @@ function readOperation(spec, name, expected) {
2360
2393
  }
2361
2394
  return op;
2362
2395
  }
2363
- async function executeRestRequest(spec, request, inv) {
2396
+ function requiredArgsOf(parameters) {
2397
+ const required = parameters.required;
2398
+ return Array.isArray(required) ? required.filter((entry) => typeof entry === "string") : void 0;
2399
+ }
2400
+ async function executeRestRequest(spec, request, inv, requiredArgs) {
2364
2401
  const baseUrl = resolveBaseUrl(spec.baseUrl, inv.source.metadata);
2365
2402
  const renderedPath = interpolate(request.path, inv.args).replace(/^\/+/, "");
2366
2403
  const baseWithSlash = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
@@ -2376,13 +2413,14 @@ async function executeRestRequest(spec, request, inv) {
2376
2413
  };
2377
2414
  applyCredentials(headers, url, spec.credentialPlacement ?? { kind: "bearer" }, inv.source.credentials);
2378
2415
  if (inv.expectedEtag) headers["if-match"] = inv.expectedEtag;
2379
- if (request.method !== "GET" && request.method !== "DELETE") {
2416
+ const sendsBody = request.method !== "GET" && (request.method !== "DELETE" || request.body !== void 0);
2417
+ if (sendsBody) {
2380
2418
  headers["content-type"] = headers["content-type"] ?? "application/json";
2381
2419
  }
2382
2420
  const res = await fetch(url, {
2383
2421
  method: request.method,
2384
2422
  headers,
2385
- body: request.method === "GET" || request.method === "DELETE" ? void 0 : JSON.stringify(resolveBody(request.body, inv.args)),
2423
+ body: sendsBody ? JSON.stringify(resolveBody(request.body, inv.args, requiredArgs)) : void 0,
2386
2424
  signal: AbortSignal.timeout(2e4)
2387
2425
  });
2388
2426
  if (res.status === 401 || res.status === 403) {
@@ -2410,7 +2448,14 @@ async function executeRestRequest(spec, request, inv) {
2410
2448
  throw new Error(`${spec.kind} ${request.method} ${url.pathname} HTTP ${res.status}: ${(await safeErrorText(res)).slice(0, 300)}`);
2411
2449
  }
2412
2450
  const text = await res.text();
2413
- const data = text ? JSON.parse(text) : null;
2451
+ let data = null;
2452
+ if (text) {
2453
+ try {
2454
+ data = JSON.parse(text);
2455
+ } catch {
2456
+ data = { raw: text };
2457
+ }
2458
+ }
2414
2459
  return { data, etag: res.headers.get("etag") ?? void 0 };
2415
2460
  }
2416
2461
  function resolveBaseUrl(baseUrl, metadata) {
@@ -2431,28 +2476,47 @@ function credentialToken(credentials) {
2431
2476
  if (credentials.kind === "api-key") return credentials.apiKey;
2432
2477
  throw new Error(`declarative REST connectors require oauth2 or api-key credentials, got ${credentials.kind}`);
2433
2478
  }
2434
- function resolveBody(body, args) {
2479
+ function resolveBody(body, args, requiredArgs) {
2435
2480
  if (!body || body === "args") return args;
2436
- if (typeof body === "string") return renderValue(body, args);
2437
- return renderObject(body, args);
2481
+ if (typeof body === "string") return renderValue(body, args, requiredArgs);
2482
+ return renderObject(body, args, requiredArgs);
2438
2483
  }
2439
2484
  function renderHeaders(headers, args) {
2440
2485
  return Object.fromEntries(Object.entries(headers).map(([key, value]) => [key, interpolate(value, args)]));
2441
2486
  }
2442
- function renderObject(input, args) {
2443
- return Object.fromEntries(Object.entries(input).map(([key, value]) => [key, renderValue(value, args)]));
2487
+ function renderObject(input, args, requiredArgs) {
2488
+ const out = {};
2489
+ for (const [key, value] of Object.entries(input)) {
2490
+ if (typeof value === "string") {
2491
+ const exact = value.match(/^\{([a-zA-Z0-9_.-]+)\}$/);
2492
+ if (exact) {
2493
+ const name = exact[1];
2494
+ const resolved = readPath(args, name);
2495
+ if (resolved === void 0 || resolved === null) {
2496
+ if (requiredArgs?.includes(name)) {
2497
+ throw new Error(`missing required argument: ${name}`);
2498
+ }
2499
+ continue;
2500
+ }
2501
+ out[key] = resolved;
2502
+ continue;
2503
+ }
2504
+ }
2505
+ out[key] = renderValue(value, args, requiredArgs);
2506
+ }
2507
+ return out;
2444
2508
  }
2445
- function renderValue(value, args) {
2509
+ function renderValue(value, args, requiredArgs) {
2446
2510
  if (typeof value === "string") {
2447
2511
  const exact = value.match(/^\{([a-zA-Z0-9_.-]+)\}$/);
2448
2512
  if (exact) return readRequiredPath(args, exact[1]);
2449
2513
  return interpolate(value, args);
2450
2514
  }
2451
2515
  if (Array.isArray(value)) {
2452
- return value.map((entry) => renderValue(entry, args));
2516
+ return value.map((entry) => renderValue(entry, args, requiredArgs));
2453
2517
  }
2454
2518
  if (value && typeof value === "object") {
2455
- return renderObject(value, args);
2519
+ return renderObject(value, args, requiredArgs);
2456
2520
  }
2457
2521
  return value;
2458
2522
  }
@@ -120259,6 +120323,3440 @@ var pipedreamConnector = declarativeRestConnector({
120259
120323
  ]
120260
120324
  });
120261
120325
 
120326
+ // src/connectors/adapters/amplemarket.ts
120327
+ var amplemarketConnector = declarativeRestConnector({
120328
+ kind: "amplemarket",
120329
+ displayName: "Amplemarket",
120330
+ description: "Sales intelligence and outbound platform: search and enrich people and companies, validate emails, and add leads to sequences.",
120331
+ auth: {
120332
+ kind: "api-key",
120333
+ hint: "Generate an API key in the Amplemarket dashboard (Settings -> API). Sent as the Authorization: Bearer header."
120334
+ },
120335
+ category: "crm",
120336
+ defaultConsistencyModel: "authoritative",
120337
+ baseUrl: "https://api.amplemarket.com",
120338
+ credentialPlacement: { kind: "bearer" },
120339
+ defaultHeaders: { "content-type": "application/json" },
120340
+ test: { method: "GET", path: "/account-info" },
120341
+ capabilities: [
120342
+ {
120343
+ name: "people.search",
120344
+ class: "read",
120345
+ description: "Search for people by job function, company, industry and other filters.",
120346
+ parameters: {
120347
+ type: "object",
120348
+ properties: {
120349
+ page: { type: "integer", description: "Page number." },
120350
+ page_size: { type: "integer", description: "Results per page." },
120351
+ job_functions: {
120352
+ type: "array",
120353
+ items: { type: "string" },
120354
+ description: "Job functions to filter by."
120355
+ },
120356
+ industries: {
120357
+ type: "array",
120358
+ items: { type: "string" },
120359
+ description: "Industries to filter by."
120360
+ }
120361
+ },
120362
+ required: []
120363
+ },
120364
+ request: {
120365
+ method: "POST",
120366
+ path: "/people/search",
120367
+ body: {
120368
+ page: "{page}",
120369
+ page_size: "{page_size}",
120370
+ job_functions: "{job_functions}",
120371
+ industries: "{industries}"
120372
+ }
120373
+ }
120374
+ },
120375
+ {
120376
+ name: "people.find",
120377
+ class: "mutation",
120378
+ description: "Enrich a single person by LinkedIn URL, email, or full name plus company. Consumes credits when contact data is revealed.",
120379
+ parameters: {
120380
+ type: "object",
120381
+ properties: {
120382
+ linkedin_url: { type: "string", description: "LinkedIn profile URL." },
120383
+ email: { type: "string", description: "Known email address." },
120384
+ full_name: { type: "string", description: "Person's full name." },
120385
+ company_name: { type: "string", description: "Company name (use with full_name)." }
120386
+ },
120387
+ required: []
120388
+ },
120389
+ request: {
120390
+ method: "GET",
120391
+ path: "/people/find",
120392
+ query: {
120393
+ linkedin_url: "{linkedin_url}",
120394
+ email: "{email}",
120395
+ full_name: "{full_name}",
120396
+ company_name: "{company_name}"
120397
+ }
120398
+ },
120399
+ cas: "native-idempotency",
120400
+ externalEffect: false
120401
+ },
120402
+ {
120403
+ name: "companies.find",
120404
+ class: "read",
120405
+ description: "Enrich a single company by LinkedIn URL, domain, or name.",
120406
+ parameters: {
120407
+ type: "object",
120408
+ properties: {
120409
+ linkedin_url: { type: "string", description: "Company LinkedIn URL." },
120410
+ domain: { type: "string", description: "Company domain." },
120411
+ name: { type: "string", description: "Company name." }
120412
+ },
120413
+ required: []
120414
+ },
120415
+ request: {
120416
+ method: "GET",
120417
+ path: "/companies/find",
120418
+ query: { linkedin_url: "{linkedin_url}", domain: "{domain}", name: "{name}" }
120419
+ }
120420
+ },
120421
+ {
120422
+ name: "email.validate",
120423
+ class: "mutation",
120424
+ description: "Start a batch email validation job. Consumes one email credit per validated address.",
120425
+ parameters: {
120426
+ type: "object",
120427
+ properties: {
120428
+ emails: {
120429
+ type: "array",
120430
+ items: { type: "object", properties: { email: { type: "string" } } },
120431
+ description: "List of email objects to validate."
120432
+ }
120433
+ },
120434
+ required: ["emails"]
120435
+ },
120436
+ request: { method: "POST", path: "/email-validations", body: { emails: "{emails}" } },
120437
+ cas: "native-idempotency",
120438
+ externalEffect: false
120439
+ },
120440
+ {
120441
+ name: "sequence.add_leads",
120442
+ class: "mutation",
120443
+ description: "Add one or more leads to an existing Amplemarket sequence.",
120444
+ parameters: {
120445
+ type: "object",
120446
+ properties: {
120447
+ id: { type: "string", description: "Sequence ID." },
120448
+ leads: {
120449
+ type: "array",
120450
+ items: { type: "object" },
120451
+ description: "Array of lead objects to enroll."
120452
+ }
120453
+ },
120454
+ required: ["id", "leads"]
120455
+ },
120456
+ request: { method: "POST", path: "/sequences/{id}/leads", body: { leads: "{leads}" } },
120457
+ cas: "native-idempotency",
120458
+ externalEffect: true
120459
+ }
120460
+ ]
120461
+ });
120462
+
120463
+ // src/connectors/adapters/heyreach.ts
120464
+ var heyreachConnector = declarativeRestConnector({
120465
+ kind: "heyreach",
120466
+ displayName: "HeyReach",
120467
+ description: "LinkedIn outreach automation at agency scale. List campaigns and lists, add leads to campaigns, look up leads, and read inbox conversations.",
120468
+ auth: {
120469
+ kind: "api-key",
120470
+ hint: "Generate an API key in HeyReach (Settings -> Integrations -> Public API). Sent as the X-API-KEY header."
120471
+ },
120472
+ category: "crm",
120473
+ defaultConsistencyModel: "authoritative",
120474
+ baseUrl: "https://api.heyreach.io/api/public",
120475
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
120476
+ defaultHeaders: { "content-type": "application/json" },
120477
+ test: { method: "GET", path: "/auth/CheckApiKey" },
120478
+ capabilities: [
120479
+ {
120480
+ name: "campaign.list",
120481
+ class: "read",
120482
+ description: "List campaigns in the workspace with pagination.",
120483
+ parameters: {
120484
+ type: "object",
120485
+ properties: {
120486
+ offset: { type: "integer", description: "Number of records to skip." },
120487
+ limit: { type: "integer", description: "Maximum records to return." }
120488
+ },
120489
+ required: ["offset", "limit"]
120490
+ },
120491
+ request: {
120492
+ method: "POST",
120493
+ path: "/campaign/GetAll",
120494
+ body: { offset: "{offset}", limit: "{limit}" }
120495
+ }
120496
+ },
120497
+ {
120498
+ name: "list.list",
120499
+ class: "read",
120500
+ description: "List lead lists in the workspace with pagination.",
120501
+ parameters: {
120502
+ type: "object",
120503
+ properties: {
120504
+ offset: { type: "integer", description: "Number of records to skip." },
120505
+ limit: { type: "integer", description: "Maximum records to return." }
120506
+ },
120507
+ required: ["offset", "limit"]
120508
+ },
120509
+ request: {
120510
+ method: "POST",
120511
+ path: "/list/GetAll",
120512
+ body: { offset: "{offset}", limit: "{limit}" }
120513
+ }
120514
+ },
120515
+ {
120516
+ name: "lead.get",
120517
+ class: "read",
120518
+ description: "Get details for a lead by their LinkedIn profile URL.",
120519
+ parameters: {
120520
+ type: "object",
120521
+ properties: {
120522
+ profileUrl: { type: "string", description: "LinkedIn profile URL of the lead." }
120523
+ },
120524
+ required: ["profileUrl"]
120525
+ },
120526
+ request: {
120527
+ method: "POST",
120528
+ path: "/lead/GetLead",
120529
+ body: { profileUrl: "{profileUrl}" }
120530
+ }
120531
+ },
120532
+ {
120533
+ name: "campaign.add_leads",
120534
+ class: "mutation",
120535
+ description: "Add leads (LinkedIn profiles) to an active campaign, assigned to specific sender accounts.",
120536
+ parameters: {
120537
+ type: "object",
120538
+ properties: {
120539
+ campaignId: {
120540
+ type: "integer",
120541
+ description: "Target campaign ID (must be ACTIVE or IN_PROGRESS)."
120542
+ },
120543
+ accountLeadPairs: {
120544
+ type: "array",
120545
+ description: "Array of pairs, each with an optional linkedInAccountId (sender) and a lead object (profileUrl, firstName, lastName, companyName, position, location, emailAddress).",
120546
+ items: { type: "object" }
120547
+ }
120548
+ },
120549
+ required: ["campaignId", "accountLeadPairs"]
120550
+ },
120551
+ request: {
120552
+ method: "POST",
120553
+ path: "/campaign/AddLeadsToCampaignV2",
120554
+ body: { campaignId: "{campaignId}", accountLeadPairs: "{accountLeadPairs}" }
120555
+ },
120556
+ cas: "native-idempotency",
120557
+ externalEffect: true
120558
+ },
120559
+ {
120560
+ name: "inbox.get_conversations",
120561
+ class: "read",
120562
+ description: "Retrieve inbox conversations with filtering and pagination.",
120563
+ parameters: {
120564
+ type: "object",
120565
+ properties: {
120566
+ offset: { type: "integer", description: "Number of records to skip." },
120567
+ limit: { type: "integer", description: "Maximum records to return." },
120568
+ filters: { type: "object", description: "Optional conversation filters." }
120569
+ },
120570
+ required: ["offset", "limit"]
120571
+ },
120572
+ request: {
120573
+ method: "POST",
120574
+ path: "/inbox/GetConversationsV2",
120575
+ body: { offset: "{offset}", limit: "{limit}", filters: "{filters}" }
120576
+ }
120577
+ }
120578
+ ]
120579
+ });
120580
+
120581
+ // src/connectors/adapters/lagrowthmachine.ts
120582
+ var lagrowthmachineConnector = declarativeRestConnector({
120583
+ kind: "lagrowthmachine",
120584
+ displayName: "LaGrowthMachine",
120585
+ description: "Multichannel sales automation (LinkedIn, email, Twitter). Create or update leads in audiences, list campaigns and audiences, and read campaign stats.",
120586
+ auth: {
120587
+ kind: "api-key",
120588
+ hint: "Get your API key at app.lagrowthmachine.com/settings/api. Sent as the 'apikey' query parameter on every request."
120589
+ },
120590
+ category: "crm",
120591
+ defaultConsistencyModel: "authoritative",
120592
+ baseUrl: "https://apiv2.lagrowthmachine.com",
120593
+ credentialPlacement: { kind: "query", parameter: "apikey" },
120594
+ defaultHeaders: { "content-type": "application/json" },
120595
+ test: { method: "GET", path: "/flow/audiences" },
120596
+ capabilities: [
120597
+ {
120598
+ name: "campaigns.list",
120599
+ class: "read",
120600
+ description: "List campaigns with pagination.",
120601
+ parameters: {
120602
+ type: "object",
120603
+ properties: {
120604
+ skip: { type: "integer", description: "Pagination offset." },
120605
+ limit: { type: "integer", description: "Maximum results to return." }
120606
+ },
120607
+ required: []
120608
+ },
120609
+ request: {
120610
+ method: "GET",
120611
+ path: "/flow/campaigns",
120612
+ query: { skip: "{skip}", limit: "{limit}" }
120613
+ }
120614
+ },
120615
+ {
120616
+ name: "audiences.list",
120617
+ class: "read",
120618
+ description: "List the audiences in the workspace.",
120619
+ parameters: { type: "object", properties: {}, required: [] },
120620
+ request: { method: "GET", path: "/flow/audiences" }
120621
+ },
120622
+ {
120623
+ name: "campaign.get_stats",
120624
+ class: "read",
120625
+ description: "Get engagement statistics for a campaign.",
120626
+ parameters: {
120627
+ type: "object",
120628
+ properties: { campaignId: { type: "string", description: "Campaign ID." } },
120629
+ required: ["campaignId"]
120630
+ },
120631
+ request: { method: "GET", path: "/flow/campaigns/{campaignId}/stats" }
120632
+ },
120633
+ {
120634
+ name: "lead.create_or_update",
120635
+ class: "mutation",
120636
+ description: "Create or update a lead in an audience, which starts it through the audience's workflow.",
120637
+ parameters: {
120638
+ type: "object",
120639
+ properties: {
120640
+ audience: { type: "string", description: "Audience name or identifier." },
120641
+ proEmail: { type: "string", description: "Professional email." },
120642
+ persoEmail: { type: "string", description: "Personal email." },
120643
+ linkedinUrl: { type: "string", description: "LinkedIn profile URL." },
120644
+ firstname: { type: "string", description: "First name." },
120645
+ lastname: { type: "string", description: "Last name." },
120646
+ companyName: { type: "string", description: "Company name." },
120647
+ jobTitle: { type: "string", description: "Job title." }
120648
+ },
120649
+ required: ["audience"]
120650
+ },
120651
+ request: {
120652
+ method: "POST",
120653
+ path: "/flow/leads",
120654
+ body: {
120655
+ audience: "{audience}",
120656
+ proEmail: "{proEmail}",
120657
+ persoEmail: "{persoEmail}",
120658
+ linkedinUrl: "{linkedinUrl}",
120659
+ firstname: "{firstname}",
120660
+ lastname: "{lastname}",
120661
+ companyName: "{companyName}",
120662
+ jobTitle: "{jobTitle}"
120663
+ }
120664
+ },
120665
+ cas: "native-idempotency",
120666
+ externalEffect: true
120667
+ }
120668
+ ]
120669
+ });
120670
+
120671
+ // src/connectors/adapters/saleshandy.ts
120672
+ var saleshandyConnector = declarativeRestConnector({
120673
+ kind: "saleshandy",
120674
+ displayName: "Saleshandy",
120675
+ description: "Cold email outreach platform: manage prospects, build sequences, add prospects to sequence steps, and control sequence status.",
120676
+ auth: {
120677
+ kind: "api-key",
120678
+ hint: "Generate an API key in company Settings -> API Settings. Sent as the x-api-key header."
120679
+ },
120680
+ category: "crm",
120681
+ defaultConsistencyModel: "authoritative",
120682
+ baseUrl: "https://open-api.saleshandy.com",
120683
+ credentialPlacement: { kind: "header", header: "x-api-key" },
120684
+ defaultHeaders: { "content-type": "application/json" },
120685
+ test: { method: "GET", path: "/v1/user/team-member-list" },
120686
+ capabilities: [
120687
+ {
120688
+ name: "sequences.list",
120689
+ class: "read",
120690
+ description: "List sequences and their steps.",
120691
+ parameters: {
120692
+ type: "object",
120693
+ properties: {
120694
+ sequenceName: { type: "string", description: "Filter by sequence name." },
120695
+ page: { type: "integer", description: "Page number." },
120696
+ pageSize: { type: "integer", description: "Results per page." }
120697
+ },
120698
+ required: []
120699
+ },
120700
+ request: {
120701
+ method: "GET",
120702
+ path: "/v1/sequences",
120703
+ query: { sequenceName: "{sequenceName}", page: "{page}", pageSize: "{pageSize}" }
120704
+ }
120705
+ },
120706
+ {
120707
+ name: "prospects.list",
120708
+ class: "read",
120709
+ description: "List all prospects with pagination and search.",
120710
+ parameters: {
120711
+ type: "object",
120712
+ properties: {
120713
+ search: { type: "string", description: "Search term." },
120714
+ page: { type: "integer", description: "Page number." },
120715
+ pageSize: { type: "integer", description: "Results per page." }
120716
+ },
120717
+ required: []
120718
+ },
120719
+ request: {
120720
+ method: "GET",
120721
+ path: "/v1/prospects",
120722
+ query: { search: "{search}", page: "{page}", pageSize: "{pageSize}" }
120723
+ }
120724
+ },
120725
+ {
120726
+ name: "sequence.import_prospects",
120727
+ class: "mutation",
120728
+ description: "Import prospects (keyed by field name) into a sequence at a given step.",
120729
+ parameters: {
120730
+ type: "object",
120731
+ properties: {
120732
+ prospectList: {
120733
+ type: "array",
120734
+ description: "Array of prospect objects keyed by field name (e.g. Email, First Name).",
120735
+ items: { type: "object" }
120736
+ },
120737
+ stepId: { type: "integer", description: "Sequence step ID to add prospects to." },
120738
+ conflictAction: {
120739
+ type: "string",
120740
+ description: "How to handle duplicates (e.g. skip, update)."
120741
+ },
120742
+ verifyProspects: { type: "boolean", description: "Verify emails on import." },
120743
+ tags: { type: "array", items: { type: "string" }, description: "Tags to apply." }
120744
+ },
120745
+ required: ["prospectList", "stepId", "conflictAction"]
120746
+ },
120747
+ request: {
120748
+ method: "POST",
120749
+ path: "/v1/sequences/prospects/import-with-field-name",
120750
+ body: {
120751
+ prospectList: "{prospectList}",
120752
+ stepId: "{stepId}",
120753
+ conflictAction: "{conflictAction}",
120754
+ verifyProspects: "{verifyProspects}",
120755
+ tags: "{tags}"
120756
+ }
120757
+ },
120758
+ cas: "native-idempotency",
120759
+ externalEffect: true
120760
+ },
120761
+ {
120762
+ name: "sequence.set_status",
120763
+ class: "mutation",
120764
+ description: "Activate or pause one or more sequences.",
120765
+ parameters: {
120766
+ type: "object",
120767
+ properties: {
120768
+ sequenceIds: {
120769
+ type: "array",
120770
+ items: { type: "string" },
120771
+ description: "Sequence IDs to update."
120772
+ },
120773
+ status: { type: "string", description: "Target status (e.g. ACTIVE, PAUSED)." }
120774
+ },
120775
+ required: ["sequenceIds", "status"]
120776
+ },
120777
+ request: {
120778
+ method: "POST",
120779
+ path: "/v1/sequences/status",
120780
+ body: { sequenceIds: "{sequenceIds}", status: "{status}" }
120781
+ },
120782
+ cas: "native-idempotency",
120783
+ externalEffect: true
120784
+ }
120785
+ ]
120786
+ });
120787
+
120788
+ // src/connectors/adapters/bettercontact.ts
120789
+ var bettercontactConnector = declarativeRestConnector({
120790
+ kind: "bettercontact",
120791
+ displayName: "BetterContact",
120792
+ description: "Waterfall email and phone enrichment that queries 20+ data providers to find a contact's work email and direct phone number.",
120793
+ auth: {
120794
+ kind: "api-key",
120795
+ hint: "API key from the BetterContact dashboard (Settings -> API). Sent as the X-API-Key header."
120796
+ },
120797
+ category: "crm",
120798
+ defaultConsistencyModel: "authoritative",
120799
+ baseUrl: "https://app.bettercontact.rocks/api/v2",
120800
+ credentialPlacement: { kind: "header", header: "X-API-Key" },
120801
+ defaultHeaders: { "content-type": "application/json" },
120802
+ capabilities: [
120803
+ {
120804
+ name: "enrichment.create",
120805
+ class: "mutation",
120806
+ 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.",
120807
+ parameters: {
120808
+ type: "object",
120809
+ properties: {
120810
+ data: {
120811
+ type: "array",
120812
+ description: "Array of 1-100 lead objects to enrich; each supports first_name, last_name, company, company_domain, linkedin_url, and custom_fields.",
120813
+ items: { type: "object" }
120814
+ },
120815
+ enrich_email_address: { type: "boolean", description: "If true, enrich the work email address." },
120816
+ enrich_phone_number: { type: "boolean", description: "If true, enrich the direct phone number." },
120817
+ webhook: {
120818
+ type: "string",
120819
+ description: "Optional URL to which results are pushed when enrichment completes."
120820
+ }
120821
+ },
120822
+ required: ["data", "enrich_email_address", "enrich_phone_number"]
120823
+ },
120824
+ request: {
120825
+ method: "POST",
120826
+ path: "/async",
120827
+ body: {
120828
+ data: "{data}",
120829
+ enrich_email_address: "{enrich_email_address}",
120830
+ enrich_phone_number: "{enrich_phone_number}",
120831
+ webhook: "{webhook}"
120832
+ }
120833
+ },
120834
+ cas: "native-idempotency",
120835
+ externalEffect: false
120836
+ },
120837
+ {
120838
+ name: "enrichment.get",
120839
+ class: "read",
120840
+ description: "Retrieve the status and enriched results of a previously submitted enrichment request by its request id.",
120841
+ parameters: {
120842
+ type: "object",
120843
+ properties: {
120844
+ request_id: { type: "string", description: "The id returned by enrichment.create." }
120845
+ },
120846
+ required: ["request_id"]
120847
+ },
120848
+ request: { method: "GET", path: "/async/{request_id}" }
120849
+ }
120850
+ ]
120851
+ });
120852
+
120853
+ // src/connectors/adapters/contactout.ts
120854
+ var contactoutConnector = declarativeRestConnector({
120855
+ kind: "contactout",
120856
+ displayName: "ContactOut",
120857
+ description: "Find and enrich professional and personal emails, phone numbers, and LinkedIn data for prospects.",
120858
+ auth: {
120859
+ kind: "api-key",
120860
+ hint: "API token from your ContactOut account. Sent as the 'token' header."
120861
+ },
120862
+ category: "crm",
120863
+ defaultConsistencyModel: "authoritative",
120864
+ baseUrl: "https://api.contactout.com",
120865
+ credentialPlacement: { kind: "header", header: "token" },
120866
+ defaultHeaders: { "content-type": "application/json" },
120867
+ capabilities: [
120868
+ {
120869
+ name: "people.search",
120870
+ class: "read",
120871
+ description: "Search for people profiles matching criteria such as name, job title, company, and location.",
120872
+ parameters: {
120873
+ type: "object",
120874
+ properties: {
120875
+ name: { type: "string" },
120876
+ job_title: { type: "array", items: { type: "string" } },
120877
+ company: { type: "array", items: { type: "string" } },
120878
+ location: { type: "array", items: { type: "string" } },
120879
+ page: { type: "integer", description: "Result page number." },
120880
+ reveal_info: {
120881
+ type: "boolean",
120882
+ description: "Include contact data (consumes email/phone credits)."
120883
+ }
120884
+ },
120885
+ required: []
120886
+ },
120887
+ request: {
120888
+ method: "POST",
120889
+ path: "/v1/people/search",
120890
+ body: {
120891
+ name: "{name}",
120892
+ job_title: "{job_title}",
120893
+ company: "{company}",
120894
+ location: "{location}",
120895
+ page: "{page}",
120896
+ reveal_info: "{reveal_info}"
120897
+ }
120898
+ }
120899
+ },
120900
+ {
120901
+ name: "linkedin.enrich",
120902
+ class: "mutation",
120903
+ description: "Look up a LinkedIn profile URL and return contact data including emails and phones. Consumes credits when contact info is found.",
120904
+ parameters: {
120905
+ type: "object",
120906
+ properties: {
120907
+ profile: { type: "string", description: "URL-encoded LinkedIn profile URL." },
120908
+ profile_only: {
120909
+ type: "boolean",
120910
+ description: "If true, return profile data without contact info."
120911
+ }
120912
+ },
120913
+ required: ["profile"]
120914
+ },
120915
+ request: {
120916
+ method: "GET",
120917
+ path: "/v1/linkedin/enrich",
120918
+ query: { profile: "{profile}", profile_only: "{profile_only}" }
120919
+ },
120920
+ cas: "native-idempotency",
120921
+ externalEffect: false
120922
+ },
120923
+ {
120924
+ name: "people.enrich",
120925
+ class: "mutation",
120926
+ description: "Enrich a person from a LinkedIn URL, email, or name plus company. Returns work/personal emails and phones; consumes credits when found.",
120927
+ parameters: {
120928
+ type: "object",
120929
+ properties: {
120930
+ linkedin_url: { type: "string" },
120931
+ email: { type: "string" },
120932
+ full_name: { type: "string" },
120933
+ company: { type: "string" },
120934
+ company_domain: { type: "string" },
120935
+ include: {
120936
+ type: "array",
120937
+ description: "Data types to include, e.g. work_email, personal_email, phone.",
120938
+ items: { type: "string" }
120939
+ }
120940
+ },
120941
+ required: []
120942
+ },
120943
+ request: {
120944
+ method: "POST",
120945
+ path: "/v1/people/enrich",
120946
+ body: {
120947
+ linkedin_url: "{linkedin_url}",
120948
+ email: "{email}",
120949
+ full_name: "{full_name}",
120950
+ company: "{company}",
120951
+ company_domain: "{company_domain}",
120952
+ include: "{include}"
120953
+ }
120954
+ },
120955
+ cas: "native-idempotency",
120956
+ externalEffect: false
120957
+ },
120958
+ {
120959
+ name: "email.verify",
120960
+ class: "mutation",
120961
+ description: "Verify the deliverability of an email address. Consumes a verifier credit for definitive results.",
120962
+ parameters: {
120963
+ type: "object",
120964
+ properties: { email: { type: "string" } },
120965
+ required: ["email"]
120966
+ },
120967
+ request: { method: "GET", path: "/v1/email/verify", query: { email: "{email}" } },
120968
+ cas: "native-idempotency",
120969
+ externalEffect: false
120970
+ }
120971
+ ]
120972
+ });
120973
+
120974
+ // src/connectors/adapters/findymail.ts
120975
+ var findymailConnector = declarativeRestConnector({
120976
+ kind: "findymail",
120977
+ displayName: "Findymail",
120978
+ description: "Find verified work email addresses by name and company domain, verify deliverability, and discover emails across a domain.",
120979
+ auth: {
120980
+ kind: "api-key",
120981
+ hint: "API key from your Findymail dashboard. Sent as the Authorization: Bearer header."
120982
+ },
120983
+ category: "crm",
120984
+ defaultConsistencyModel: "authoritative",
120985
+ baseUrl: "https://app.findymail.com",
120986
+ credentialPlacement: { kind: "bearer" },
120987
+ defaultHeaders: { "content-type": "application/json", accept: "application/json" },
120988
+ test: { method: "GET", path: "/api/credits" },
120989
+ capabilities: [
120990
+ {
120991
+ name: "email.find",
120992
+ class: "mutation",
120993
+ description: "Find a person's verified work email from their full name and company domain. Consumes a credit when an email is found.",
120994
+ parameters: {
120995
+ type: "object",
120996
+ properties: {
120997
+ name: { type: "string", description: "Full name of the person." },
120998
+ domain: { type: "string", description: "Company domain." }
120999
+ },
121000
+ required: ["name", "domain"]
121001
+ },
121002
+ request: {
121003
+ method: "POST",
121004
+ path: "/api/search/name",
121005
+ body: { name: "{name}", domain: "{domain}" }
121006
+ },
121007
+ cas: "native-idempotency",
121008
+ externalEffect: false
121009
+ },
121010
+ {
121011
+ name: "email.verify",
121012
+ class: "mutation",
121013
+ description: "Verify the deliverability of an email address and return the email provider. Consumes a verification credit.",
121014
+ parameters: {
121015
+ type: "object",
121016
+ properties: { email: { type: "string" } },
121017
+ required: ["email"]
121018
+ },
121019
+ request: { method: "POST", path: "/api/verify", body: { email: "{email}" } },
121020
+ cas: "native-idempotency",
121021
+ externalEffect: false
121022
+ },
121023
+ {
121024
+ name: "email.find_by_domain",
121025
+ class: "mutation",
121026
+ description: "Find email addresses associated with a company domain. Consumes credits per email returned.",
121027
+ parameters: {
121028
+ type: "object",
121029
+ properties: { domain: { type: "string", description: "Company domain to search." } },
121030
+ required: ["domain"]
121031
+ },
121032
+ request: { method: "POST", path: "/api/search/domain", body: { domain: "{domain}" } },
121033
+ cas: "native-idempotency",
121034
+ externalEffect: false
121035
+ },
121036
+ {
121037
+ name: "credits.get",
121038
+ class: "read",
121039
+ description: "Retrieve the remaining credit balance for the account.",
121040
+ parameters: { type: "object", properties: {}, required: [] },
121041
+ request: { method: "GET", path: "/api/credits" }
121042
+ }
121043
+ ]
121044
+ });
121045
+
121046
+ // src/connectors/adapters/snov-io.ts
121047
+ var snovIoConnector = declarativeRestConnector({
121048
+ kind: "snov-io",
121049
+ displayName: "Snov.io",
121050
+ description: "Find and verify B2B email addresses by domain or by name, and enrich profiles from an email address.",
121051
+ auth: {
121052
+ kind: "api-key",
121053
+ 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."
121054
+ },
121055
+ category: "crm",
121056
+ defaultConsistencyModel: "authoritative",
121057
+ baseUrl: "https://api.snov.io",
121058
+ credentialPlacement: { kind: "bearer" },
121059
+ defaultHeaders: { "content-type": "application/json" },
121060
+ test: { method: "GET", path: "/v2/sender-accounts/emails" },
121061
+ capabilities: [
121062
+ {
121063
+ name: "domain_search.start",
121064
+ class: "mutation",
121065
+ description: "Start an asynchronous search for email addresses belonging to a company domain. Returns a task to poll for results.",
121066
+ parameters: {
121067
+ type: "object",
121068
+ properties: { domain: { type: "string", description: "Company domain to search." } },
121069
+ required: ["domain"]
121070
+ },
121071
+ request: {
121072
+ method: "POST",
121073
+ path: "/v2/domain-search/start",
121074
+ body: { domain: "{domain}" }
121075
+ },
121076
+ cas: "native-idempotency",
121077
+ externalEffect: false
121078
+ },
121079
+ {
121080
+ name: "email_finder.start",
121081
+ class: "mutation",
121082
+ 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.",
121083
+ parameters: {
121084
+ type: "object",
121085
+ properties: {
121086
+ rows: {
121087
+ type: "array",
121088
+ description: "Array of objects each with first_name, last_name, and domain.",
121089
+ items: { type: "object" }
121090
+ }
121091
+ },
121092
+ required: ["rows"]
121093
+ },
121094
+ request: {
121095
+ method: "POST",
121096
+ path: "/v2/emails-by-domain-by-name/start",
121097
+ body: { rows: "{rows}" }
121098
+ },
121099
+ cas: "native-idempotency",
121100
+ externalEffect: false
121101
+ },
121102
+ {
121103
+ name: "email_verification.start",
121104
+ class: "mutation",
121105
+ description: "Start verification of up to 10 email addresses. Returns a task to poll for deliverability results. Consumes credits.",
121106
+ parameters: {
121107
+ type: "object",
121108
+ properties: {
121109
+ emails: {
121110
+ type: "array",
121111
+ description: "Array of email addresses to verify (max 10).",
121112
+ items: { type: "string" }
121113
+ }
121114
+ },
121115
+ required: ["emails"]
121116
+ },
121117
+ request: {
121118
+ method: "POST",
121119
+ path: "/v2/email-verification/start",
121120
+ body: { emails: "{emails}" }
121121
+ },
121122
+ cas: "native-idempotency",
121123
+ externalEffect: false
121124
+ },
121125
+ {
121126
+ name: "profile.get_by_email",
121127
+ class: "mutation",
121128
+ description: "Enrich a social/professional profile from an email address. Consumes a credit.",
121129
+ parameters: {
121130
+ type: "object",
121131
+ properties: { email: { type: "string" } },
121132
+ required: ["email"]
121133
+ },
121134
+ request: {
121135
+ method: "POST",
121136
+ path: "/v1/get-profile-by-email",
121137
+ body: { email: "{email}" }
121138
+ },
121139
+ cas: "native-idempotency",
121140
+ externalEffect: false
121141
+ },
121142
+ {
121143
+ name: "domain_emails_count.get",
121144
+ class: "read",
121145
+ description: "Get the count of email addresses available for a domain (free, does not consume credits).",
121146
+ parameters: {
121147
+ type: "object",
121148
+ properties: { domain: { type: "string" } },
121149
+ required: ["domain"]
121150
+ },
121151
+ request: {
121152
+ method: "POST",
121153
+ path: "/v1/get-domain-emails-count",
121154
+ body: { domain: "{domain}" }
121155
+ }
121156
+ }
121157
+ ]
121158
+ });
121159
+
121160
+ // src/connectors/adapters/wiza.ts
121161
+ var wizaConnector = declarativeRestConnector({
121162
+ kind: "wiza",
121163
+ displayName: "Wiza",
121164
+ description: "Real-time contact enrichment that reveals a person's work/personal email and phone from a LinkedIn URL, email, or name plus company.",
121165
+ auth: {
121166
+ kind: "api-key",
121167
+ hint: "API key from Wiza account settings. Sent as the Authorization: Bearer header."
121168
+ },
121169
+ category: "crm",
121170
+ defaultConsistencyModel: "authoritative",
121171
+ baseUrl: "https://wiza.co/api",
121172
+ credentialPlacement: { kind: "bearer" },
121173
+ defaultHeaders: { "content-type": "application/json" },
121174
+ test: { method: "GET", path: "/meta/credits" },
121175
+ capabilities: [
121176
+ {
121177
+ name: "individual_reveal.create",
121178
+ class: "mutation",
121179
+ 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.",
121180
+ parameters: {
121181
+ type: "object",
121182
+ properties: {
121183
+ individual_reveal: {
121184
+ type: "object",
121185
+ description: "Contact identifiers: full_name + company or domain, OR email, OR linkedin (profile URL)."
121186
+ },
121187
+ enrichment_level: { type: "string", description: "One of none, partial, phone, or full." },
121188
+ email_options: {
121189
+ type: "object",
121190
+ description: "Object with accept_work and accept_personal booleans."
121191
+ },
121192
+ phone_options: { type: "object", description: "Phone enrichment options." }
121193
+ },
121194
+ required: ["individual_reveal", "enrichment_level"]
121195
+ },
121196
+ request: {
121197
+ method: "POST",
121198
+ path: "/individual_reveals",
121199
+ body: {
121200
+ individual_reveal: "{individual_reveal}",
121201
+ enrichment_level: "{enrichment_level}",
121202
+ email_options: "{email_options}",
121203
+ phone_options: "{phone_options}"
121204
+ }
121205
+ },
121206
+ cas: "native-idempotency",
121207
+ externalEffect: false
121208
+ },
121209
+ {
121210
+ name: "individual_reveal.get",
121211
+ class: "read",
121212
+ description: "Retrieve the status and revealed contact data of an individual reveal by its id.",
121213
+ parameters: {
121214
+ type: "object",
121215
+ properties: {
121216
+ id: {
121217
+ type: "string",
121218
+ description: "The individual reveal id returned by individual_reveal.create."
121219
+ }
121220
+ },
121221
+ required: ["id"]
121222
+ },
121223
+ request: { method: "GET", path: "/individual_reveals/{id}" }
121224
+ },
121225
+ {
121226
+ name: "list.create",
121227
+ class: "mutation",
121228
+ description: "Create a list to enrich up to 2500 profiles in bulk with email and phone data. Consumes credits.",
121229
+ parameters: {
121230
+ type: "object",
121231
+ properties: {
121232
+ list: {
121233
+ type: "object",
121234
+ description: "List config including name, enrichment_level, email_options, and items (array of up to 2500 profiles)."
121235
+ }
121236
+ },
121237
+ required: ["list"]
121238
+ },
121239
+ request: { method: "POST", path: "/lists", body: { list: "{list}" } },
121240
+ cas: "native-idempotency",
121241
+ externalEffect: true
121242
+ },
121243
+ {
121244
+ name: "credits.get",
121245
+ class: "read",
121246
+ description: "Get the account's remaining email, phone, export, and API credit balances.",
121247
+ parameters: { type: "object", properties: {}, required: [] },
121248
+ request: { method: "GET", path: "/meta/credits" }
121249
+ }
121250
+ ]
121251
+ });
121252
+
121253
+ // src/connectors/adapters/builtwith.ts
121254
+ var builtwithConnector = declarativeRestConnector({
121255
+ kind: "builtwith",
121256
+ displayName: "BuiltWith",
121257
+ description: "Look up the technology stack, analytics, hosting, and metadata detected on any website.",
121258
+ auth: {
121259
+ kind: "api-key",
121260
+ hint: "API key (a UUID) from your BuiltWith account dashboard under My Account -> API Access. Sent as the KEY query parameter."
121261
+ },
121262
+ category: "market-intelligence",
121263
+ defaultConsistencyModel: "authoritative",
121264
+ baseUrl: "https://api.builtwith.com/v22",
121265
+ credentialPlacement: { kind: "query", parameter: "KEY" },
121266
+ defaultHeaders: { "content-type": "application/json" },
121267
+ test: { method: "GET", path: "/free1/api.json", query: { LOOKUP: "builtwith.com" } },
121268
+ capabilities: [
121269
+ {
121270
+ name: "domain.lookup",
121271
+ class: "read",
121272
+ description: "Return the full set of detected technologies and metadata for one or more root domains.",
121273
+ parameters: {
121274
+ type: "object",
121275
+ properties: {
121276
+ lookup: {
121277
+ type: "string",
121278
+ description: "Root domain to analyze, e.g. stripe.com. Up to 16 domains may be passed as a comma-separated list."
121279
+ }
121280
+ },
121281
+ required: ["lookup"]
121282
+ },
121283
+ request: { method: "GET", path: "/api.json", query: { LOOKUP: "{lookup}" } }
121284
+ },
121285
+ {
121286
+ name: "domain.free",
121287
+ class: "read",
121288
+ description: "Free-tier lookup returning the most popular detected technology groups for a single domain.",
121289
+ parameters: {
121290
+ type: "object",
121291
+ properties: { lookup: { type: "string", description: "Root domain to analyze." } },
121292
+ required: ["lookup"]
121293
+ },
121294
+ request: { method: "GET", path: "/free1/api.json", query: { LOOKUP: "{lookup}" } }
121295
+ },
121296
+ {
121297
+ name: "domain.relationships",
121298
+ class: "read",
121299
+ description: "Return domains that share relationships (e.g. analytics IDs, ad networks) with the given domain.",
121300
+ parameters: {
121301
+ type: "object",
121302
+ properties: {
121303
+ lookup: { type: "string", description: "Root domain to find related domains for." }
121304
+ },
121305
+ required: ["lookup"]
121306
+ },
121307
+ request: { method: "GET", path: "/rv2/api.json", query: { LOOKUP: "{lookup}" } }
121308
+ },
121309
+ {
121310
+ name: "company.to_url",
121311
+ class: "read",
121312
+ description: "Resolve a company name to its most likely website domain.",
121313
+ parameters: {
121314
+ type: "object",
121315
+ properties: {
121316
+ company: { type: "string", description: "Company name to resolve to a domain." }
121317
+ },
121318
+ required: ["company"]
121319
+ },
121320
+ request: { method: "GET", path: "/ctu1/api.json", query: { COMPANY: "{company}" } }
121321
+ }
121322
+ ]
121323
+ });
121324
+
121325
+ // src/connectors/adapters/common-room.ts
121326
+ var commonRoomConnector = declarativeRestConnector({
121327
+ kind: "common-room",
121328
+ displayName: "Common Room",
121329
+ description: "Look up community and customer contacts, their activity, segments, and tags from your Common Room workspace.",
121330
+ auth: {
121331
+ kind: "api-key",
121332
+ hint: "Core API token from Common Room Settings -> API tokens (created by a workspace Admin). Sent as the Authorization: Bearer header."
121333
+ },
121334
+ category: "sales-intelligence",
121335
+ defaultConsistencyModel: "authoritative",
121336
+ baseUrl: "https://api.commonroom.io/community/v1",
121337
+ credentialPlacement: { kind: "bearer" },
121338
+ defaultHeaders: { "content-type": "application/json" },
121339
+ test: { method: "GET", path: "/api-token-status" },
121340
+ capabilities: [
121341
+ {
121342
+ name: "contact.get_by_email",
121343
+ class: "read",
121344
+ description: "Return a contact's full Common Room profile given their email address.",
121345
+ parameters: {
121346
+ type: "object",
121347
+ properties: {
121348
+ email: { type: "string", description: "Email address of the contact to look up." }
121349
+ },
121350
+ required: ["email"]
121351
+ },
121352
+ request: { method: "GET", path: "/user/{email}" }
121353
+ },
121354
+ {
121355
+ name: "contact.search",
121356
+ class: "read",
121357
+ description: "Find contacts by email or linked social handles (Twitter, GitHub, LinkedIn).",
121358
+ parameters: {
121359
+ type: "object",
121360
+ properties: {
121361
+ email: { type: "string", description: "Email address to search by." },
121362
+ github: { type: "string", description: "GitHub username to search by." },
121363
+ twitter: { type: "string", description: "Twitter/X handle to search by." },
121364
+ linkedin: {
121365
+ type: "string",
121366
+ description: "LinkedIn profile URL or handle to search by."
121367
+ }
121368
+ },
121369
+ required: []
121370
+ },
121371
+ request: {
121372
+ method: "GET",
121373
+ path: "/members",
121374
+ query: {
121375
+ email: "{email}",
121376
+ github: "{github}",
121377
+ twitter: "{twitter}",
121378
+ linkedin: "{linkedin}"
121379
+ }
121380
+ }
121381
+ },
121382
+ {
121383
+ name: "activity_types.list",
121384
+ class: "read",
121385
+ description: "List the activity types available in the workspace.",
121386
+ parameters: { type: "object", properties: {}, required: [] },
121387
+ request: { method: "GET", path: "/activityTypes" }
121388
+ },
121389
+ {
121390
+ name: "segments.list",
121391
+ class: "read",
121392
+ description: "List the segments defined in the workspace.",
121393
+ parameters: { type: "object", properties: {}, required: [] },
121394
+ request: { method: "GET", path: "/segments" }
121395
+ },
121396
+ {
121397
+ name: "contact.upsert",
121398
+ class: "mutation",
121399
+ description: "Create or update a contact in a destination source, optionally setting fields and custom fields.",
121400
+ parameters: {
121401
+ type: "object",
121402
+ properties: {
121403
+ destinationSourceId: {
121404
+ type: "string",
121405
+ description: "ID of the destination source to write the contact into."
121406
+ },
121407
+ fullName: { type: "string", description: "Full name of the contact." },
121408
+ email: { type: "string", description: "Email address of the contact." }
121409
+ },
121410
+ required: ["destinationSourceId"]
121411
+ },
121412
+ request: {
121413
+ method: "POST",
121414
+ path: "/source/{destinationSourceId}/user",
121415
+ body: { fullName: "{fullName}", email: "{email}" }
121416
+ },
121417
+ cas: "native-idempotency",
121418
+ externalEffect: true
121419
+ }
121420
+ ]
121421
+ });
121422
+
121423
+ // src/connectors/adapters/leadfeeder.ts
121424
+ var leadfeederConnector = declarativeRestConnector({
121425
+ kind: "leadfeeder",
121426
+ displayName: "Leadfeeder",
121427
+ description: "Identify the company behind a website-visitor IP address, returning firmographic details and a confidence score.",
121428
+ auth: {
121429
+ kind: "api-key",
121430
+ hint: "API key from Leadfeeder (Dealfront) Settings -> API keys. Sent in the X-API-KEY request header."
121431
+ },
121432
+ category: "sales-intelligence",
121433
+ defaultConsistencyModel: "authoritative",
121434
+ baseUrl: "https://api.lf-discover.com",
121435
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
121436
+ defaultHeaders: { "content-type": "application/json" },
121437
+ test: { method: "GET", path: "/companies", query: { ip: "185.70.216.139" } },
121438
+ capabilities: [
121439
+ {
121440
+ name: "ip.enrich",
121441
+ class: "read",
121442
+ description: "Resolve an IPv4 or IPv6 address to the company that owns it, including name, domain, industry, size, revenue, location, and confidence.",
121443
+ parameters: {
121444
+ type: "object",
121445
+ properties: {
121446
+ ip: {
121447
+ type: "string",
121448
+ description: "Valid IPv4 or shortened IPv6 address to enrich, e.g. 185.70.216.139."
121449
+ }
121450
+ },
121451
+ required: ["ip"]
121452
+ },
121453
+ request: { method: "GET", path: "/companies", query: { ip: "{ip}" } }
121454
+ }
121455
+ ]
121456
+ });
121457
+
121458
+ // src/connectors/adapters/serper.ts
121459
+ var serperConnector = declarativeRestConnector({
121460
+ kind: "serper",
121461
+ displayName: "Serper",
121462
+ description: "Run fast Google searches (web, news, images, places, and scholar) and get structured SERP results as JSON.",
121463
+ auth: {
121464
+ kind: "api-key",
121465
+ hint: "API key from your serper.dev dashboard. Sent in the X-API-KEY request header."
121466
+ },
121467
+ category: "market-intelligence",
121468
+ defaultConsistencyModel: "authoritative",
121469
+ baseUrl: "https://google.serper.dev",
121470
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
121471
+ defaultHeaders: { "content-type": "application/json" },
121472
+ test: { method: "POST", path: "/search", body: { q: "OpenAI" } },
121473
+ capabilities: [
121474
+ {
121475
+ name: "search.web",
121476
+ class: "read",
121477
+ description: "Run a Google web search and return organic results, knowledge graph, answer box, and related searches.",
121478
+ parameters: {
121479
+ type: "object",
121480
+ properties: {
121481
+ q: { type: "string", description: "The search query." },
121482
+ gl: {
121483
+ type: "string",
121484
+ description: "Two-letter country code for geo-targeting, e.g. us."
121485
+ },
121486
+ hl: { type: "string", description: "Two-letter language code, e.g. en." },
121487
+ num: { type: "integer", description: "Number of results to return." },
121488
+ page: { type: "integer", description: "Results page number." }
121489
+ },
121490
+ required: ["q"]
121491
+ },
121492
+ request: {
121493
+ method: "POST",
121494
+ path: "/search",
121495
+ body: { q: "{q}", gl: "{gl}", hl: "{hl}", num: "{num}", page: "{page}" }
121496
+ }
121497
+ },
121498
+ {
121499
+ name: "search.news",
121500
+ class: "read",
121501
+ description: "Run a Google News search and return structured news results.",
121502
+ parameters: {
121503
+ type: "object",
121504
+ properties: {
121505
+ q: { type: "string", description: "The news search query." },
121506
+ gl: { type: "string", description: "Two-letter country code." },
121507
+ hl: { type: "string", description: "Two-letter language code." }
121508
+ },
121509
+ required: ["q"]
121510
+ },
121511
+ request: { method: "POST", path: "/news", body: { q: "{q}", gl: "{gl}", hl: "{hl}" } }
121512
+ },
121513
+ {
121514
+ name: "search.places",
121515
+ class: "read",
121516
+ description: "Run a Google Maps/Places search and return structured place results.",
121517
+ parameters: {
121518
+ type: "object",
121519
+ properties: {
121520
+ q: { type: "string", description: "The places search query." },
121521
+ gl: { type: "string", description: "Two-letter country code." }
121522
+ },
121523
+ required: ["q"]
121524
+ },
121525
+ request: { method: "POST", path: "/places", body: { q: "{q}", gl: "{gl}" } }
121526
+ },
121527
+ {
121528
+ name: "search.scholar",
121529
+ class: "read",
121530
+ description: "Run a Google Scholar search and return structured academic results.",
121531
+ parameters: {
121532
+ type: "object",
121533
+ properties: { q: { type: "string", description: "The scholar search query." } },
121534
+ required: ["q"]
121535
+ },
121536
+ request: { method: "POST", path: "/scholar", body: { q: "{q}" } }
121537
+ },
121538
+ {
121539
+ name: "search.images",
121540
+ class: "read",
121541
+ description: "Run a Google Images search and return structured image results.",
121542
+ parameters: {
121543
+ type: "object",
121544
+ properties: {
121545
+ q: { type: "string", description: "The image search query." },
121546
+ gl: { type: "string", description: "Two-letter country code." }
121547
+ },
121548
+ required: ["q"]
121549
+ },
121550
+ request: { method: "POST", path: "/images", body: { q: "{q}", gl: "{gl}" } }
121551
+ }
121552
+ ]
121553
+ });
121554
+
121555
+ // src/connectors/adapters/warmly.ts
121556
+ var warmlyConnector = declarativeRestConnector({
121557
+ kind: "warmly",
121558
+ displayName: "Warmly",
121559
+ description: "List identified website visitors and visiting accounts from your Warmly workspace via its agent-tools API.",
121560
+ auth: {
121561
+ kind: "api-key",
121562
+ hint: "Per-organization API key from the Warmly admin UI. Sent as the Authorization: Bearer header; organizationId must be included in each request body."
121563
+ },
121564
+ category: "sales-intelligence",
121565
+ defaultConsistencyModel: "authoritative",
121566
+ baseUrl: "https://opps-api.getwarmly.com/api",
121567
+ credentialPlacement: { kind: "bearer" },
121568
+ defaultHeaders: { "content-type": "application/json" },
121569
+ test: { method: "GET", path: "/agent-tools/tools" },
121570
+ capabilities: [
121571
+ {
121572
+ name: "tools.list",
121573
+ class: "read",
121574
+ description: "Discover the available agent tools and their input JSON schemas for your workspace.",
121575
+ parameters: { type: "object", properties: {}, required: [] },
121576
+ request: { method: "GET", path: "/agent-tools/tools" }
121577
+ },
121578
+ {
121579
+ name: "visitors.list",
121580
+ class: "mutation",
121581
+ description: "List identified people who visited your website, with optional filters and pagination. This is a billed read executed via the tool-execution endpoint.",
121582
+ parameters: {
121583
+ type: "object",
121584
+ properties: {
121585
+ organizationId: { type: "string", description: "The organization the API key is issued for." },
121586
+ timeWindow: {
121587
+ type: "string",
121588
+ description: "Lookback window: past_day (default) or past_week."
121589
+ },
121590
+ take: {
121591
+ type: "integer",
121592
+ description: "Number of results to return, 1-500 (default 25)."
121593
+ },
121594
+ offset: { type: "integer", description: "Pagination offset." },
121595
+ searchTerm: { type: "string", description: "Substring match on name, email, or company." }
121596
+ },
121597
+ required: ["organizationId"]
121598
+ },
121599
+ request: {
121600
+ method: "POST",
121601
+ path: "/agent-tools/execute",
121602
+ body: {
121603
+ toolName: "list_warm_visitors",
121604
+ organizationId: "{organizationId}",
121605
+ input: {
121606
+ timeWindow: "{timeWindow}",
121607
+ take: "{take}",
121608
+ offset: "{offset}",
121609
+ searchTerm: "{searchTerm}"
121610
+ }
121611
+ }
121612
+ },
121613
+ cas: "native-idempotency",
121614
+ externalEffect: false
121615
+ },
121616
+ {
121617
+ name: "accounts.list",
121618
+ class: "mutation",
121619
+ description: "List company-level aggregations of accounts that visited your website. Billed read executed via the tool-execution endpoint.",
121620
+ parameters: {
121621
+ type: "object",
121622
+ properties: {
121623
+ organizationId: { type: "string", description: "The organization the API key is issued for." },
121624
+ timeWindow: {
121625
+ type: "string",
121626
+ description: "Lookback window: past_day (default) or past_week."
121627
+ },
121628
+ take: { type: "integer", description: "Number of results to return, 1-500." }
121629
+ },
121630
+ required: ["organizationId"]
121631
+ },
121632
+ request: {
121633
+ method: "POST",
121634
+ path: "/agent-tools/execute",
121635
+ body: {
121636
+ toolName: "list_warm_accounts",
121637
+ organizationId: "{organizationId}",
121638
+ input: { timeWindow: "{timeWindow}", take: "{take}" }
121639
+ }
121640
+ },
121641
+ cas: "native-idempotency",
121642
+ externalEffect: false
121643
+ }
121644
+ ]
121645
+ });
121646
+
121647
+ // src/connectors/adapters/autobound.ts
121648
+ var autoboundConnector = declarativeRestConnector({
121649
+ kind: "autobound",
121650
+ displayName: "Autobound",
121651
+ description: "AI sales-intelligence API that enriches companies and contacts with buyer-intent signals for personalized outreach.",
121652
+ auth: {
121653
+ kind: "api-key",
121654
+ 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."
121655
+ },
121656
+ category: "sales-intelligence",
121657
+ defaultConsistencyModel: "authoritative",
121658
+ baseUrl: "https://signals.autobound.ai/v1",
121659
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
121660
+ defaultHeaders: { "content-type": "application/json" },
121661
+ test: { method: "GET", path: "/account" },
121662
+ capabilities: [
121663
+ {
121664
+ name: "account.get",
121665
+ class: "read",
121666
+ description: "Return account details and rate limits. Consumes no credits.",
121667
+ parameters: { type: "object", properties: {}, required: [] },
121668
+ request: { method: "GET", path: "/account" }
121669
+ },
121670
+ {
121671
+ name: "company.enrich",
121672
+ class: "mutation",
121673
+ description: "Enrich a company with intent and news signals by domain (billed per returned signal).",
121674
+ parameters: {
121675
+ type: "object",
121676
+ properties: {
121677
+ domain: { type: "string" },
121678
+ signal_types: { type: "array", items: { type: "string" } },
121679
+ limit: { type: "integer" }
121680
+ },
121681
+ required: ["domain"]
121682
+ },
121683
+ request: {
121684
+ method: "POST",
121685
+ path: "/companies/enrich",
121686
+ body: { domain: "{domain}", signal_types: "{signal_types}", limit: "{limit}" }
121687
+ },
121688
+ cas: "native-idempotency",
121689
+ externalEffect: false
121690
+ },
121691
+ {
121692
+ name: "company.search",
121693
+ class: "read",
121694
+ description: "Search companies aggregated by entity, filtered by signal type and firmographics.",
121695
+ parameters: {
121696
+ type: "object",
121697
+ properties: {
121698
+ signal_types: { type: "array", items: { type: "string" } },
121699
+ company_domains: { type: "array", items: { type: "string" } },
121700
+ limit: { type: "integer" }
121701
+ },
121702
+ required: ["signal_types"]
121703
+ },
121704
+ request: {
121705
+ method: "POST",
121706
+ path: "/companies/search",
121707
+ body: {
121708
+ signal_types: "{signal_types}",
121709
+ company_domains: "{company_domains}",
121710
+ limit: "{limit}"
121711
+ }
121712
+ }
121713
+ },
121714
+ {
121715
+ name: "contact.enrich",
121716
+ class: "mutation",
121717
+ description: "Enrich a contact with personal signals by email or LinkedIn URL (billed per returned signal).",
121718
+ parameters: {
121719
+ type: "object",
121720
+ properties: {
121721
+ contact_email: { type: "string" },
121722
+ contact_linkedin_url: { type: "string" },
121723
+ signal_types: { type: "array", items: { type: "string" } },
121724
+ limit: { type: "integer" }
121725
+ },
121726
+ required: ["contact_email"]
121727
+ },
121728
+ request: {
121729
+ method: "POST",
121730
+ path: "/contacts/enrich",
121731
+ body: {
121732
+ contact_email: "{contact_email}",
121733
+ contact_linkedin_url: "{contact_linkedin_url}",
121734
+ signal_types: "{signal_types}",
121735
+ limit: "{limit}"
121736
+ }
121737
+ },
121738
+ cas: "native-idempotency",
121739
+ externalEffect: false
121740
+ },
121741
+ {
121742
+ name: "contact.search",
121743
+ class: "read",
121744
+ description: "Search contacts aggregated by entity, filtered by signal type.",
121745
+ parameters: {
121746
+ type: "object",
121747
+ properties: {
121748
+ signal_types: { type: "array", items: { type: "string" } },
121749
+ limit: { type: "integer" }
121750
+ },
121751
+ required: ["signal_types"]
121752
+ },
121753
+ request: {
121754
+ method: "POST",
121755
+ path: "/contacts/search",
121756
+ body: { signal_types: "{signal_types}", limit: "{limit}" }
121757
+ }
121758
+ }
121759
+ ]
121760
+ });
121761
+
121762
+ // src/connectors/adapters/crustdata.ts
121763
+ var crustdataConnector = declarativeRestConnector({
121764
+ kind: "crustdata",
121765
+ displayName: "Crustdata",
121766
+ description: "Real-time B2B company and people data API for enriching, identifying, and searching companies and professional profiles.",
121767
+ auth: {
121768
+ kind: "api-key",
121769
+ 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."
121770
+ },
121771
+ category: "sales-intelligence",
121772
+ defaultConsistencyModel: "authoritative",
121773
+ baseUrl: "https://api.crustdata.com",
121774
+ credentialPlacement: { kind: "bearer" },
121775
+ defaultHeaders: { "content-type": "application/json", "x-api-version": "2025-11-01" },
121776
+ capabilities: [
121777
+ {
121778
+ name: "company.identify",
121779
+ class: "read",
121780
+ description: "Resolve company domains to Crustdata company records.",
121781
+ parameters: {
121782
+ type: "object",
121783
+ properties: { domains: { type: "array", items: { type: "string" } } },
121784
+ required: ["domains"]
121785
+ },
121786
+ request: { method: "POST", path: "/company/identify", body: { domains: "{domains}" } }
121787
+ },
121788
+ {
121789
+ name: "company.enrich",
121790
+ class: "read",
121791
+ description: "Retrieve full company profiles for one or more domains.",
121792
+ parameters: {
121793
+ type: "object",
121794
+ properties: {
121795
+ domains: { type: "array", items: { type: "string" } },
121796
+ fields: { type: "array", items: { type: "string" } }
121797
+ },
121798
+ required: ["domains"]
121799
+ },
121800
+ request: {
121801
+ method: "POST",
121802
+ path: "/company/enrich",
121803
+ body: { domains: "{domains}", fields: "{fields}" }
121804
+ }
121805
+ },
121806
+ {
121807
+ name: "company.search",
121808
+ class: "read",
121809
+ description: "Search companies with filters and sorting.",
121810
+ parameters: {
121811
+ type: "object",
121812
+ properties: { filters: { type: "object" }, page: { type: "integer" } },
121813
+ required: ["filters"]
121814
+ },
121815
+ request: {
121816
+ method: "POST",
121817
+ path: "/company/search",
121818
+ body: { filters: "{filters}", page: "{page}" }
121819
+ }
121820
+ },
121821
+ {
121822
+ name: "person.enrich",
121823
+ class: "read",
121824
+ description: "Enrich people by LinkedIn profile URL or business email; optionally select returned fields.",
121825
+ parameters: {
121826
+ type: "object",
121827
+ properties: {
121828
+ professional_network_profile_urls: { type: "array", items: { type: "string" } },
121829
+ business_emails: { type: "array", items: { type: "string" } },
121830
+ fields: { type: "array", items: { type: "string" } }
121831
+ },
121832
+ required: ["professional_network_profile_urls"]
121833
+ },
121834
+ request: {
121835
+ method: "POST",
121836
+ path: "/person/enrich",
121837
+ body: {
121838
+ professional_network_profile_urls: "{professional_network_profile_urls}",
121839
+ business_emails: "{business_emails}",
121840
+ fields: "{fields}"
121841
+ }
121842
+ }
121843
+ },
121844
+ {
121845
+ name: "person.search",
121846
+ class: "read",
121847
+ description: "Search people with filters and sorting.",
121848
+ parameters: {
121849
+ type: "object",
121850
+ properties: { filters: { type: "object" }, page: { type: "integer" } },
121851
+ required: ["filters"]
121852
+ },
121853
+ request: {
121854
+ method: "POST",
121855
+ path: "/person/search",
121856
+ body: { filters: "{filters}", page: "{page}" }
121857
+ }
121858
+ }
121859
+ ]
121860
+ });
121861
+
121862
+ // src/connectors/adapters/fullenrich.ts
121863
+ var fullenrichConnector = declarativeRestConnector({
121864
+ kind: "fullenrich",
121865
+ displayName: "FullEnrich",
121866
+ description: "Waterfall B2B contact enrichment API that finds work emails and phone numbers for a contact from name, company, or LinkedIn URL.",
121867
+ auth: {
121868
+ kind: "api-key",
121869
+ hint: "API key from the FullEnrich dashboard (app.fullenrich.com/app/api). Sent as the Authorization: Bearer header."
121870
+ },
121871
+ category: "sales-intelligence",
121872
+ defaultConsistencyModel: "authoritative",
121873
+ baseUrl: "https://app.fullenrich.com/api/v2",
121874
+ credentialPlacement: { kind: "bearer" },
121875
+ defaultHeaders: { "content-type": "application/json" },
121876
+ test: { method: "GET", path: "/account/credits" },
121877
+ capabilities: [
121878
+ {
121879
+ name: "account.credits",
121880
+ class: "read",
121881
+ description: "Return the current credit balance for the account.",
121882
+ parameters: { type: "object", properties: {}, required: [] },
121883
+ request: { method: "GET", path: "/account/credits" }
121884
+ },
121885
+ {
121886
+ name: "contact.enrich.start",
121887
+ class: "mutation",
121888
+ description: "Start an async waterfall enrichment for up to 100 contacts; returns an enrichment id and bills per found data point.",
121889
+ parameters: {
121890
+ type: "object",
121891
+ properties: {
121892
+ name: { type: "string" },
121893
+ data: {
121894
+ type: "array",
121895
+ items: {
121896
+ type: "object",
121897
+ properties: {
121898
+ first_name: { type: "string" },
121899
+ last_name: { type: "string" },
121900
+ domain: { type: "string" },
121901
+ company_name: { type: "string" },
121902
+ linkedin_url: { type: "string" },
121903
+ enrich_fields: { type: "array", items: { type: "string" } }
121904
+ }
121905
+ }
121906
+ },
121907
+ webhook_url: { type: "string" }
121908
+ },
121909
+ required: ["name", "data"]
121910
+ },
121911
+ request: {
121912
+ method: "POST",
121913
+ path: "/contact/enrich/bulk",
121914
+ body: { name: "{name}", data: "{data}", webhook_url: "{webhook_url}" }
121915
+ },
121916
+ cas: "native-idempotency",
121917
+ externalEffect: false
121918
+ },
121919
+ {
121920
+ name: "contact.enrich.result",
121921
+ class: "read",
121922
+ description: "Retrieve the result of a previously started bulk enrichment by its id.",
121923
+ parameters: {
121924
+ type: "object",
121925
+ properties: { enrichment_id: { type: "string" } },
121926
+ required: ["enrichment_id"]
121927
+ },
121928
+ request: { method: "GET", path: "/contact/enrich/bulk/{enrichment_id}" }
121929
+ },
121930
+ {
121931
+ name: "contact.reverse_email.start",
121932
+ class: "mutation",
121933
+ description: "Start an async reverse-email lookup to find profiles/identities behind email addresses.",
121934
+ parameters: {
121935
+ type: "object",
121936
+ properties: {
121937
+ name: { type: "string" },
121938
+ data: {
121939
+ type: "array",
121940
+ items: { type: "object", properties: { email: { type: "string" } } }
121941
+ },
121942
+ webhook_url: { type: "string" }
121943
+ },
121944
+ required: ["name", "data"]
121945
+ },
121946
+ request: {
121947
+ method: "POST",
121948
+ path: "/contact/reverse/email/bulk",
121949
+ body: { name: "{name}", data: "{data}", webhook_url: "{webhook_url}" }
121950
+ },
121951
+ cas: "native-idempotency",
121952
+ externalEffect: false
121953
+ }
121954
+ ]
121955
+ });
121956
+
121957
+ // src/connectors/adapters/leadmagic.ts
121958
+ var leadmagicConnector = declarativeRestConnector({
121959
+ kind: "leadmagic",
121960
+ displayName: "LeadMagic",
121961
+ description: "B2B data enrichment API for finding and validating work emails, mobile numbers, and enriching people and company profiles.",
121962
+ auth: {
121963
+ kind: "api-key",
121964
+ hint: "API key from LeadMagic Settings -> API. Sent as the X-API-Key header."
121965
+ },
121966
+ category: "sales-intelligence",
121967
+ defaultConsistencyModel: "authoritative",
121968
+ baseUrl: "https://api.leadmagic.io",
121969
+ credentialPlacement: { kind: "header", header: "X-API-Key" },
121970
+ defaultHeaders: { "content-type": "application/json" },
121971
+ test: { method: "GET", path: "/v1/credits" },
121972
+ capabilities: [
121973
+ {
121974
+ name: "credits.get",
121975
+ class: "read",
121976
+ description: "Return the current API key credit balance. Free, no credits consumed.",
121977
+ parameters: { type: "object", properties: {}, required: [] },
121978
+ request: { method: "GET", path: "/v1/credits" }
121979
+ },
121980
+ {
121981
+ name: "email.find",
121982
+ class: "mutation",
121983
+ description: "Find a verified work email from a person's name and company (charged only when an email is found).",
121984
+ parameters: {
121985
+ type: "object",
121986
+ properties: {
121987
+ first_name: { type: "string" },
121988
+ last_name: { type: "string" },
121989
+ domain: { type: "string" },
121990
+ company_name: { type: "string" }
121991
+ },
121992
+ required: ["first_name", "last_name", "domain"]
121993
+ },
121994
+ request: {
121995
+ method: "POST",
121996
+ path: "/v1/people/email-finder",
121997
+ body: {
121998
+ first_name: "{first_name}",
121999
+ last_name: "{last_name}",
122000
+ domain: "{domain}",
122001
+ company_name: "{company_name}"
122002
+ }
122003
+ },
122004
+ cas: "native-idempotency",
122005
+ externalEffect: false
122006
+ },
122007
+ {
122008
+ name: "email.validate",
122009
+ class: "mutation",
122010
+ description: "Validate an email address and return valid/invalid/unknown (charged only for definitive results).",
122011
+ parameters: {
122012
+ type: "object",
122013
+ properties: { email: { type: "string" } },
122014
+ required: ["email"]
122015
+ },
122016
+ request: {
122017
+ method: "POST",
122018
+ path: "/v1/people/email-validation",
122019
+ body: { email: "{email}" }
122020
+ },
122021
+ cas: "native-idempotency",
122022
+ externalEffect: false
122023
+ },
122024
+ {
122025
+ name: "profile.search",
122026
+ class: "read",
122027
+ description: "Enrich a B2B profile from a profile URL or username.",
122028
+ parameters: {
122029
+ type: "object",
122030
+ properties: { profile_url: { type: "string" } },
122031
+ required: ["profile_url"]
122032
+ },
122033
+ request: {
122034
+ method: "POST",
122035
+ path: "/v1/people/profile-search",
122036
+ body: { profile_url: "{profile_url}" }
122037
+ }
122038
+ },
122039
+ {
122040
+ name: "mobile.find",
122041
+ class: "mutation",
122042
+ description: "Find a mobile phone number from a profile URL or email (charged only on a successful match).",
122043
+ parameters: {
122044
+ type: "object",
122045
+ properties: {
122046
+ profile_url: { type: "string" },
122047
+ work_email: { type: "string" },
122048
+ personal_email: { type: "string" }
122049
+ },
122050
+ required: ["profile_url"]
122051
+ },
122052
+ request: {
122053
+ method: "POST",
122054
+ path: "/v1/people/mobile-finder",
122055
+ body: {
122056
+ profile_url: "{profile_url}",
122057
+ work_email: "{work_email}",
122058
+ personal_email: "{personal_email}"
122059
+ }
122060
+ },
122061
+ cas: "native-idempotency",
122062
+ externalEffect: false
122063
+ },
122064
+ {
122065
+ name: "company.search",
122066
+ class: "mutation",
122067
+ description: "Enrich a company's firmographics from its domain, name, or profile URL (charged per company found).",
122068
+ parameters: {
122069
+ type: "object",
122070
+ properties: {
122071
+ company_domain: { type: "string" },
122072
+ company_name: { type: "string" },
122073
+ profile_url: { type: "string" }
122074
+ },
122075
+ required: ["company_domain"]
122076
+ },
122077
+ request: {
122078
+ method: "POST",
122079
+ path: "/v1/companies/company-search",
122080
+ body: {
122081
+ company_domain: "{company_domain}",
122082
+ company_name: "{company_name}",
122083
+ profile_url: "{profile_url}"
122084
+ }
122085
+ },
122086
+ cas: "native-idempotency",
122087
+ externalEffect: false
122088
+ }
122089
+ ]
122090
+ });
122091
+
122092
+ // src/connectors/adapters/brightdata.ts
122093
+ var brightdataConnector = declarativeRestConnector({
122094
+ kind: "brightdata",
122095
+ displayName: "Bright Data",
122096
+ description: "Scrape any website at scale using Bright Data's Web Unlocker (bypasses anti-bot protection) and Web Scraper API (structured dataset collection jobs).",
122097
+ auth: {
122098
+ kind: "api-key",
122099
+ hint: "API token from your Bright Data dashboard (Account settings -> API tokens). Sent as the Authorization: Bearer header."
122100
+ },
122101
+ category: "other",
122102
+ defaultConsistencyModel: "authoritative",
122103
+ baseUrl: "https://api.brightdata.com",
122104
+ credentialPlacement: { kind: "bearer" },
122105
+ defaultHeaders: { "content-type": "application/json" },
122106
+ capabilities: [
122107
+ {
122108
+ name: "unlocker.request",
122109
+ class: "read",
122110
+ description: "Fetch a target URL through the Web Unlocker, returning the page content with anti-bot bypass, CAPTCHA solving, and JS rendering handled.",
122111
+ parameters: {
122112
+ type: "object",
122113
+ properties: {
122114
+ zone: { type: "string", description: "Your Web Unlocker API zone name." },
122115
+ url: { type: "string", description: "Target URL to fetch." },
122116
+ format: {
122117
+ type: "string",
122118
+ description: "Response format, e.g. 'raw' for the unmodified site response or 'json'."
122119
+ },
122120
+ body: {
122121
+ type: "string",
122122
+ description: "Optional raw POST payload to send to the target URL."
122123
+ }
122124
+ },
122125
+ required: ["zone", "url"]
122126
+ },
122127
+ request: {
122128
+ method: "POST",
122129
+ path: "/request",
122130
+ body: { zone: "{zone}", url: "{url}", format: "{format}", body: "{body}" }
122131
+ }
122132
+ },
122133
+ {
122134
+ name: "scraper.trigger",
122135
+ class: "mutation",
122136
+ description: "Trigger an asynchronous Web Scraper data collection job for a given dataset, returning a snapshot_id used to poll progress and download results.",
122137
+ parameters: {
122138
+ type: "object",
122139
+ properties: {
122140
+ dataset_id: {
122141
+ type: "string",
122142
+ description: "Scraper dataset id, e.g. gd_xxxxxxxxxxxxxxxxx."
122143
+ },
122144
+ format: { type: "string", description: "Delivery format of results, e.g. json." },
122145
+ include_errors: { type: "boolean", description: "Include error records in the result set." },
122146
+ inputs: {
122147
+ type: "array",
122148
+ description: "Array of input objects, each typically containing a url to scrape.",
122149
+ items: { type: "object" }
122150
+ }
122151
+ },
122152
+ required: ["dataset_id", "inputs"]
122153
+ },
122154
+ request: {
122155
+ method: "POST",
122156
+ path: "/datasets/v3/trigger",
122157
+ query: {
122158
+ dataset_id: "{dataset_id}",
122159
+ format: "{format}",
122160
+ include_errors: "{include_errors}"
122161
+ },
122162
+ body: "{inputs}"
122163
+ },
122164
+ cas: "native-idempotency",
122165
+ externalEffect: true
122166
+ },
122167
+ {
122168
+ name: "scraper.progress",
122169
+ class: "read",
122170
+ description: "Check the status of a Web Scraper collection job (starting, running, ready, or failed) by its snapshot_id.",
122171
+ parameters: {
122172
+ type: "object",
122173
+ properties: {
122174
+ snapshot_id: { type: "string", description: "Snapshot id returned by scraper.trigger." }
122175
+ },
122176
+ required: ["snapshot_id"]
122177
+ },
122178
+ request: { method: "GET", path: "/datasets/v3/progress/{snapshot_id}" }
122179
+ },
122180
+ {
122181
+ name: "scraper.snapshot",
122182
+ class: "read",
122183
+ description: "Download the collected records for a completed Web Scraper snapshot in the requested format.",
122184
+ parameters: {
122185
+ type: "object",
122186
+ properties: {
122187
+ snapshot_id: { type: "string", description: "Snapshot id returned by scraper.trigger." },
122188
+ format: {
122189
+ type: "string",
122190
+ description: "Output format, e.g. json, ndjson, jsonl, or csv."
122191
+ }
122192
+ },
122193
+ required: ["snapshot_id"]
122194
+ },
122195
+ request: {
122196
+ method: "GET",
122197
+ path: "/datasets/v3/snapshot/{snapshot_id}",
122198
+ query: { format: "{format}" }
122199
+ }
122200
+ }
122201
+ ]
122202
+ });
122203
+
122204
+ // src/connectors/adapters/phantombuster.ts
122205
+ var phantombusterConnector = declarativeRestConnector({
122206
+ kind: "phantombuster",
122207
+ displayName: "PhantomBuster",
122208
+ description: "Launch PhantomBuster Phantoms (automation agents) that scrape and extract data from sites like LinkedIn, then retrieve their output and results.",
122209
+ auth: {
122210
+ kind: "api-key",
122211
+ hint: "API key from your PhantomBuster dashboard (Workspace settings -> API key). Sent in the X-Phantombuster-Key header."
122212
+ },
122213
+ category: "other",
122214
+ defaultConsistencyModel: "authoritative",
122215
+ baseUrl: "https://api.phantombuster.com/api/v2",
122216
+ credentialPlacement: { kind: "header", header: "X-Phantombuster-Key" },
122217
+ defaultHeaders: { "content-type": "application/json" },
122218
+ test: { method: "GET", path: "/agents/fetch-all" },
122219
+ capabilities: [
122220
+ {
122221
+ name: "agents.fetch_all",
122222
+ class: "read",
122223
+ description: "List all Phantoms (agents) in the current organization.",
122224
+ parameters: { type: "object", properties: {}, required: [] },
122225
+ request: { method: "GET", path: "/agents/fetch-all" }
122226
+ },
122227
+ {
122228
+ name: "agents.fetch",
122229
+ class: "read",
122230
+ description: "Fetch the configuration and metadata of a single Phantom by its agent id.",
122231
+ parameters: {
122232
+ type: "object",
122233
+ properties: { id: { type: "string", description: "Id of the agent (Phantom) to fetch." } },
122234
+ required: ["id"]
122235
+ },
122236
+ request: { method: "GET", path: "/agents/fetch", query: { id: "{id}" } }
122237
+ },
122238
+ {
122239
+ name: "agents.launch",
122240
+ class: "mutation",
122241
+ description: "Launch a Phantom (agent), optionally passing arguments, and start a new run (container).",
122242
+ parameters: {
122243
+ type: "object",
122244
+ properties: {
122245
+ id: { type: "string", description: "Id of the agent (Phantom) to launch." },
122246
+ argument: {
122247
+ type: "object",
122248
+ description: "JSON object of arguments overriding the Phantom's saved configuration for this run."
122249
+ },
122250
+ bonusArgument: {
122251
+ type: "object",
122252
+ description: "Additional one-off arguments merged for this launch only."
122253
+ },
122254
+ saveArgument: {
122255
+ type: "boolean",
122256
+ description: "Persist the provided argument as the Phantom's default configuration."
122257
+ },
122258
+ manualLaunch: { type: "boolean", description: "Mark the launch as manual." }
122259
+ },
122260
+ required: ["id"]
122261
+ },
122262
+ request: {
122263
+ method: "POST",
122264
+ path: "/agents/launch",
122265
+ body: {
122266
+ id: "{id}",
122267
+ argument: "{argument}",
122268
+ bonusArgument: "{bonusArgument}",
122269
+ saveArgument: "{saveArgument}",
122270
+ manualLaunch: "{manualLaunch}"
122271
+ }
122272
+ },
122273
+ cas: "native-idempotency",
122274
+ externalEffect: true
122275
+ },
122276
+ {
122277
+ name: "agents.fetch_output",
122278
+ class: "read",
122279
+ description: "Retrieve the console output and most recent container status of a Phantom's run by agent id.",
122280
+ parameters: {
122281
+ type: "object",
122282
+ properties: {
122283
+ id: { type: "string", description: "Id of the agent to fetch output from." },
122284
+ fromOutputPos: {
122285
+ type: "number",
122286
+ description: "Position from which to start returning output."
122287
+ }
122288
+ },
122289
+ required: ["id"]
122290
+ },
122291
+ request: {
122292
+ method: "GET",
122293
+ path: "/agents/fetch-output",
122294
+ query: { id: "{id}", fromOutputPos: "{fromOutputPos}" }
122295
+ }
122296
+ },
122297
+ {
122298
+ name: "containers.fetch_output",
122299
+ class: "read",
122300
+ description: "Retrieve the console output of a specific Phantom run (container) by its container id.",
122301
+ parameters: {
122302
+ type: "object",
122303
+ properties: {
122304
+ id: {
122305
+ type: "string",
122306
+ description: "Id of the container (run) to fetch output from."
122307
+ }
122308
+ },
122309
+ required: ["id"]
122310
+ },
122311
+ request: { method: "GET", path: "/containers/fetch-output", query: { id: "{id}" } }
122312
+ }
122313
+ ]
122314
+ });
122315
+
122316
+ // src/connectors/adapters/zenrows.ts
122317
+ var zenrowsConnector = declarativeRestConnector({
122318
+ kind: "zenrows",
122319
+ displayName: "ZenRows",
122320
+ description: "Render and scrape any web page through ZenRows' Universal Scraper API, handling proxy rotation, headless browsers, and anti-bot bypass.",
122321
+ auth: {
122322
+ kind: "api-key",
122323
+ hint: "API key from your ZenRows dashboard. Sent as the apikey query parameter."
122324
+ },
122325
+ category: "other",
122326
+ defaultConsistencyModel: "authoritative",
122327
+ baseUrl: "https://api.zenrows.com/v1/",
122328
+ credentialPlacement: { kind: "query", parameter: "apikey" },
122329
+ capabilities: [
122330
+ {
122331
+ name: "page.scrape",
122332
+ class: "read",
122333
+ description: "Fetch a URL and return its HTML, optionally rendering JavaScript and routing through premium residential proxies.",
122334
+ parameters: {
122335
+ type: "object",
122336
+ properties: {
122337
+ url: { type: "string", description: "Target URL to scrape." },
122338
+ js_render: { type: "boolean", description: "Render the page with a headless browser." },
122339
+ premium_proxy: {
122340
+ type: "boolean",
122341
+ description: "Route the request through residential proxies."
122342
+ },
122343
+ proxy_country: {
122344
+ type: "string",
122345
+ description: "Two-letter country code for proxy geolocation."
122346
+ },
122347
+ wait: {
122348
+ type: "integer",
122349
+ description: "Fixed delay in milliseconds after page load."
122350
+ },
122351
+ wait_for: {
122352
+ type: "string",
122353
+ description: "CSS selector to wait for in the DOM before returning."
122354
+ }
122355
+ },
122356
+ required: ["url"]
122357
+ },
122358
+ request: {
122359
+ method: "GET",
122360
+ path: "/",
122361
+ query: {
122362
+ url: "{url}",
122363
+ js_render: "{js_render}",
122364
+ premium_proxy: "{premium_proxy}",
122365
+ proxy_country: "{proxy_country}",
122366
+ wait: "{wait}",
122367
+ wait_for: "{wait_for}"
122368
+ }
122369
+ }
122370
+ },
122371
+ {
122372
+ name: "page.extract",
122373
+ class: "read",
122374
+ description: "Scrape a URL and return structured data extracted via CSS selectors or ZenRows' automatic parser.",
122375
+ parameters: {
122376
+ type: "object",
122377
+ properties: {
122378
+ url: { type: "string", description: "Target URL to scrape." },
122379
+ css_extractor: {
122380
+ type: "string",
122381
+ description: "JSON string mapping output keys to CSS selectors."
122382
+ },
122383
+ autoparse: {
122384
+ type: "boolean",
122385
+ description: "Automatically extract structured data from supported sites."
122386
+ },
122387
+ js_render: { type: "boolean", description: "Render the page with a headless browser." }
122388
+ },
122389
+ required: ["url"]
122390
+ },
122391
+ request: {
122392
+ method: "GET",
122393
+ path: "/",
122394
+ query: {
122395
+ url: "{url}",
122396
+ css_extractor: "{css_extractor}",
122397
+ autoparse: "{autoparse}",
122398
+ js_render: "{js_render}"
122399
+ }
122400
+ }
122401
+ },
122402
+ {
122403
+ name: "page.markdown",
122404
+ class: "read",
122405
+ description: "Fetch a URL and return its content converted to Markdown, plaintext, or PDF.",
122406
+ parameters: {
122407
+ type: "object",
122408
+ properties: {
122409
+ url: { type: "string", description: "Target URL to scrape." },
122410
+ response_type: {
122411
+ type: "string",
122412
+ description: "Output conversion type, e.g. markdown, plaintext, or pdf."
122413
+ },
122414
+ js_render: { type: "boolean", description: "Render the page with a headless browser." }
122415
+ },
122416
+ required: ["url"]
122417
+ },
122418
+ request: {
122419
+ method: "GET",
122420
+ path: "/",
122421
+ query: { url: "{url}", response_type: "{response_type}", js_render: "{js_render}" }
122422
+ }
122423
+ }
122424
+ ]
122425
+ });
122426
+
122427
+ // src/connectors/adapters/ocean-io.ts
122428
+ var oceanIoConnector = declarativeRestConnector({
122429
+ kind: "ocean-io",
122430
+ displayName: "Ocean.io",
122431
+ description: "Lookalike B2B company and people search plus firmographic and contact enrichment. Build target lists from an ideal customer profile and enrich records.",
122432
+ auth: {
122433
+ kind: "api-key",
122434
+ hint: "API token from Settings -> API tokens. Sent as the X-Api-Token header."
122435
+ },
122436
+ category: "sales-intelligence",
122437
+ defaultConsistencyModel: "authoritative",
122438
+ baseUrl: "https://api.ocean.io",
122439
+ credentialPlacement: { kind: "header", header: "X-Api-Token" },
122440
+ defaultHeaders: { "content-type": "application/json" },
122441
+ capabilities: [
122442
+ {
122443
+ name: "companies.search",
122444
+ class: "read",
122445
+ description: "Search/lookalike companies by filters (location, size, industry, technologies) and/or seed lookalike domains.",
122446
+ parameters: {
122447
+ type: "object",
122448
+ properties: {
122449
+ companiesFilters: { type: "object" },
122450
+ lookalikeDomains: { type: "array", items: { type: "string" } },
122451
+ size: { type: "integer" },
122452
+ searchAfter: { type: "string" }
122453
+ },
122454
+ required: ["size"]
122455
+ },
122456
+ request: {
122457
+ method: "POST",
122458
+ path: "/v3/search/companies",
122459
+ body: {
122460
+ companiesFilters: "{companiesFilters}",
122461
+ lookalikeDomains: "{lookalikeDomains}",
122462
+ size: "{size}",
122463
+ searchAfter: "{searchAfter}"
122464
+ }
122465
+ }
122466
+ },
122467
+ {
122468
+ name: "people.search",
122469
+ class: "read",
122470
+ description: "Search people by persona filters (seniority, department) optionally scoped by company filters.",
122471
+ parameters: {
122472
+ type: "object",
122473
+ properties: {
122474
+ peopleFilters: { type: "object" },
122475
+ companiesFilters: { type: "object" },
122476
+ size: { type: "integer" },
122477
+ searchAfter: { type: "string" }
122478
+ },
122479
+ required: ["size"]
122480
+ },
122481
+ request: {
122482
+ method: "POST",
122483
+ path: "/v3/search/people",
122484
+ body: {
122485
+ peopleFilters: "{peopleFilters}",
122486
+ companiesFilters: "{companiesFilters}",
122487
+ size: "{size}",
122488
+ searchAfter: "{searchAfter}"
122489
+ }
122490
+ }
122491
+ },
122492
+ {
122493
+ name: "companies.enrich",
122494
+ class: "mutation",
122495
+ description: "Match one company against Ocean's database and return firmographic, technographic, and funding data. Costs 0.1 credits per result.",
122496
+ parameters: {
122497
+ type: "object",
122498
+ properties: { company: { type: "object" } },
122499
+ required: ["company"]
122500
+ },
122501
+ request: { method: "POST", path: "/v2/enrich/company", body: { company: "{company}" } },
122502
+ cas: "native-idempotency",
122503
+ externalEffect: false
122504
+ },
122505
+ {
122506
+ name: "people.enrich",
122507
+ class: "mutation",
122508
+ 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.",
122509
+ parameters: {
122510
+ type: "object",
122511
+ properties: { person: { type: "object" }, revealEmails: { type: "object" } },
122512
+ required: ["person"]
122513
+ },
122514
+ request: {
122515
+ method: "POST",
122516
+ path: "/v2/enrich/person",
122517
+ body: { person: "{person}", revealEmails: "{revealEmails}" }
122518
+ },
122519
+ cas: "native-idempotency",
122520
+ externalEffect: false
122521
+ },
122522
+ {
122523
+ name: "companies.autocomplete",
122524
+ class: "read",
122525
+ description: "Type-ahead autocomplete for company name or domain, useful for picking seed companies for a lookalike search.",
122526
+ parameters: {
122527
+ type: "object",
122528
+ properties: { name: { type: "string" } },
122529
+ required: ["name"]
122530
+ },
122531
+ request: {
122532
+ method: "POST",
122533
+ path: "/v2/autocomplete/companies",
122534
+ body: { name: "{name}" }
122535
+ }
122536
+ }
122537
+ ]
122538
+ });
122539
+
122540
+ // src/connectors/adapters/seamless-ai.ts
122541
+ var seamlessAiConnector = declarativeRestConnector({
122542
+ kind: "seamless-ai",
122543
+ displayName: "Seamless.ai",
122544
+ description: "Search and enrich B2B contact and company data, including verified emails, phone numbers, and job-change signals, for go-to-market prospecting.",
122545
+ auth: {
122546
+ kind: "api-key",
122547
+ hint: "API key from Settings -> API Key (Create New Connection). Sent as the Token header."
122548
+ },
122549
+ category: "sales-intelligence",
122550
+ defaultConsistencyModel: "authoritative",
122551
+ baseUrl: "https://api.seamless.ai/api/client/v1",
122552
+ credentialPlacement: { kind: "header", header: "Token" },
122553
+ defaultHeaders: { "content-type": "application/json" },
122554
+ capabilities: [
122555
+ {
122556
+ name: "contacts.search",
122557
+ class: "read",
122558
+ description: "Search for contacts by company, location, department, job title, seniority, and technologies. Returns search result ids used for research/enrichment.",
122559
+ parameters: {
122560
+ type: "object",
122561
+ properties: {
122562
+ jobTitle: { type: "array", items: { type: "string" } },
122563
+ seniority: { type: "array", items: { type: "string" } },
122564
+ companyDomain: { type: "array", items: { type: "string" } },
122565
+ industry: { type: "array", items: { type: "string" } },
122566
+ limit: { type: "integer" },
122567
+ nextToken: { type: "string" }
122568
+ },
122569
+ required: []
122570
+ },
122571
+ request: {
122572
+ method: "POST",
122573
+ path: "/search/contacts",
122574
+ body: {
122575
+ jobTitle: "{jobTitle}",
122576
+ seniority: "{seniority}",
122577
+ companyDomain: "{companyDomain}",
122578
+ industry: "{industry}",
122579
+ limit: "{limit}",
122580
+ nextToken: "{nextToken}"
122581
+ }
122582
+ }
122583
+ },
122584
+ {
122585
+ name: "companies.search",
122586
+ class: "read",
122587
+ description: "Search for companies by name, domain, location, industry, size, revenue, and technologies. Returns search result ids used for research/enrichment.",
122588
+ parameters: {
122589
+ type: "object",
122590
+ properties: {
122591
+ companyName: { type: "array", items: { type: "string" } },
122592
+ companyDomain: { type: "array", items: { type: "string" } },
122593
+ industry: { type: "array", items: { type: "string" } },
122594
+ companySize: { type: "array", items: { type: "string" } },
122595
+ technologies: { type: "array", items: { type: "string" } },
122596
+ limit: { type: "integer" },
122597
+ nextToken: { type: "string" }
122598
+ },
122599
+ required: []
122600
+ },
122601
+ request: {
122602
+ method: "POST",
122603
+ path: "/search/companies",
122604
+ body: {
122605
+ companyName: "{companyName}",
122606
+ companyDomain: "{companyDomain}",
122607
+ industry: "{industry}",
122608
+ companySize: "{companySize}",
122609
+ technologies: "{technologies}",
122610
+ limit: "{limit}",
122611
+ nextToken: "{nextToken}"
122612
+ }
122613
+ }
122614
+ },
122615
+ {
122616
+ name: "contacts.research",
122617
+ class: "mutation",
122618
+ description: "Research (enrich) contacts asynchronously by searchResultIds from a contact search, or by explicit contact identifiers, to reveal full profile, email, and phone.",
122619
+ parameters: {
122620
+ type: "object",
122621
+ properties: {
122622
+ searchResultIds: { type: "array", items: { type: "string" } },
122623
+ contacts: { type: "array", items: { type: "object" } },
122624
+ isJobChange: { type: "boolean" },
122625
+ skipDeduplicationCheck: { type: "boolean" }
122626
+ },
122627
+ required: []
122628
+ },
122629
+ request: {
122630
+ method: "POST",
122631
+ path: "/contacts/research",
122632
+ body: {
122633
+ searchResultIds: "{searchResultIds}",
122634
+ contacts: "{contacts}",
122635
+ isJobChange: "{isJobChange}",
122636
+ skipDeduplicationCheck: "{skipDeduplicationCheck}"
122637
+ }
122638
+ },
122639
+ cas: "native-idempotency",
122640
+ externalEffect: false
122641
+ },
122642
+ {
122643
+ name: "companies.research",
122644
+ class: "mutation",
122645
+ description: "Research (enrich) companies asynchronously by searchResultIds from a company search, or by direct company identifiers.",
122646
+ parameters: {
122647
+ type: "object",
122648
+ properties: {
122649
+ searchResultIds: { type: "array", items: { type: "string" } },
122650
+ companies: { type: "array", items: { type: "object" } },
122651
+ skipDeduplicationCheck: { type: "boolean" }
122652
+ },
122653
+ required: []
122654
+ },
122655
+ request: {
122656
+ method: "POST",
122657
+ path: "/companies/research",
122658
+ body: {
122659
+ searchResultIds: "{searchResultIds}",
122660
+ companies: "{companies}",
122661
+ skipDeduplicationCheck: "{skipDeduplicationCheck}"
122662
+ }
122663
+ },
122664
+ cas: "native-idempotency",
122665
+ externalEffect: false
122666
+ },
122667
+ {
122668
+ name: "contacts.research.poll",
122669
+ class: "read",
122670
+ description: "Poll for the results of a previously submitted contact research (enrichment) request by request id.",
122671
+ parameters: {
122672
+ type: "object",
122673
+ properties: { requestIds: { type: "array", items: { type: "string" } } },
122674
+ required: ["requestIds"]
122675
+ },
122676
+ request: {
122677
+ method: "GET",
122678
+ path: "/contacts/research/poll",
122679
+ query: { requestIds: "{requestIds}" }
122680
+ }
122681
+ }
122682
+ ]
122683
+ });
122684
+
122685
+ // src/connectors/adapters/theirstack.ts
122686
+ var theirstackConnector = declarativeRestConnector({
122687
+ kind: "theirstack",
122688
+ displayName: "TheirStack",
122689
+ 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.",
122690
+ auth: {
122691
+ kind: "api-key",
122692
+ hint: "API key from app.theirstack.com/settings/api. Sent as the Authorization: Bearer header."
122693
+ },
122694
+ category: "sales-intelligence",
122695
+ defaultConsistencyModel: "authoritative",
122696
+ baseUrl: "https://api.theirstack.com",
122697
+ credentialPlacement: { kind: "bearer" },
122698
+ defaultHeaders: { "content-type": "application/json" },
122699
+ test: { method: "GET", path: "/v0/billing/credit-balance" },
122700
+ capabilities: [
122701
+ {
122702
+ name: "jobs.search",
122703
+ class: "read",
122704
+ 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.",
122705
+ parameters: {
122706
+ type: "object",
122707
+ properties: {
122708
+ posted_at_max_age_days: { type: "integer" },
122709
+ job_title_or: { type: "array", items: { type: "string" } },
122710
+ job_country_code_or: { type: "array", items: { type: "string" } },
122711
+ company_technology_slug_or: { type: "array", items: { type: "string" } },
122712
+ company_name_or: { type: "array", items: { type: "string" } },
122713
+ limit: { type: "integer" },
122714
+ page: { type: "integer" }
122715
+ },
122716
+ required: ["posted_at_max_age_days", "limit", "page"]
122717
+ },
122718
+ request: {
122719
+ method: "POST",
122720
+ path: "/v1/jobs/search",
122721
+ body: {
122722
+ posted_at_max_age_days: "{posted_at_max_age_days}",
122723
+ job_title_or: "{job_title_or}",
122724
+ job_country_code_or: "{job_country_code_or}",
122725
+ company_technology_slug_or: "{company_technology_slug_or}",
122726
+ company_name_or: "{company_name_or}",
122727
+ limit: "{limit}",
122728
+ page: "{page}"
122729
+ }
122730
+ }
122731
+ },
122732
+ {
122733
+ name: "companies.search",
122734
+ class: "read",
122735
+ description: "Search companies by country, technologies used, industry, funding, and nested job filters. Costs 3 credits per company returned.",
122736
+ parameters: {
122737
+ type: "object",
122738
+ properties: {
122739
+ company_country_code_or: { type: "array", items: { type: "string" } },
122740
+ company_technology_slug_or: { type: "array", items: { type: "string" } },
122741
+ industry_id_or: { type: "array", items: { type: "integer" } },
122742
+ min_funding_usd: { type: "integer" },
122743
+ max_funding_usd: { type: "integer" },
122744
+ limit: { type: "integer" },
122745
+ page: { type: "integer" }
122746
+ },
122747
+ required: ["limit", "page"]
122748
+ },
122749
+ request: {
122750
+ method: "POST",
122751
+ path: "/v1/companies/search",
122752
+ body: {
122753
+ company_country_code_or: "{company_country_code_or}",
122754
+ company_technology_slug_or: "{company_technology_slug_or}",
122755
+ industry_id_or: "{industry_id_or}",
122756
+ min_funding_usd: "{min_funding_usd}",
122757
+ max_funding_usd: "{max_funding_usd}",
122758
+ limit: "{limit}",
122759
+ page: "{page}"
122760
+ }
122761
+ }
122762
+ },
122763
+ {
122764
+ name: "companies.technologies",
122765
+ class: "read",
122766
+ description: "Look up the technologies (tech stack) detected for a company identified by domain, name, or LinkedIn URL. Costs 3 credits per company lookup.",
122767
+ parameters: {
122768
+ type: "object",
122769
+ properties: {
122770
+ company_domain: { type: "string" },
122771
+ company_name: { type: "string" },
122772
+ company_linkedin_url: { type: "string" },
122773
+ technology_slug_or: { type: "array", items: { type: "string" } }
122774
+ },
122775
+ required: ["company_domain"]
122776
+ },
122777
+ request: {
122778
+ method: "POST",
122779
+ path: "/v1/companies/technologies",
122780
+ body: {
122781
+ company_domain: "{company_domain}",
122782
+ company_name: "{company_name}",
122783
+ company_linkedin_url: "{company_linkedin_url}",
122784
+ technology_slug_or: "{technology_slug_or}"
122785
+ }
122786
+ }
122787
+ },
122788
+ {
122789
+ name: "companies.buying_intents",
122790
+ class: "read",
122791
+ description: "Retrieve buying-intent signals for a company identified by domain, name, or LinkedIn URL. Costs 3 credits per company lookup.",
122792
+ parameters: {
122793
+ type: "object",
122794
+ properties: {
122795
+ company_domain: { type: "string" },
122796
+ company_name: { type: "string" },
122797
+ company_linkedin_url: { type: "string" }
122798
+ },
122799
+ required: ["company_domain"]
122800
+ },
122801
+ request: {
122802
+ method: "POST",
122803
+ path: "/v1/companies/buying_intents",
122804
+ body: {
122805
+ company_domain: "{company_domain}",
122806
+ company_name: "{company_name}",
122807
+ company_linkedin_url: "{company_linkedin_url}"
122808
+ }
122809
+ }
122810
+ }
122811
+ ]
122812
+ });
122813
+
122814
+ // src/connectors/adapters/usergems.ts
122815
+ var usergemsConnector = declarativeRestConnector({
122816
+ kind: "usergems",
122817
+ displayName: "UserGems",
122818
+ 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.",
122819
+ auth: {
122820
+ kind: "api-key",
122821
+ hint: "API key requested via support@usergems.com. Sent as the X-Api-Key header."
122822
+ },
122823
+ category: "sales-intelligence",
122824
+ defaultConsistencyModel: "authoritative",
122825
+ baseUrl: "https://api.usergems.com/v1",
122826
+ credentialPlacement: { kind: "header", header: "X-Api-Key" },
122827
+ defaultHeaders: { "content-type": "application/json" },
122828
+ capabilities: [
122829
+ {
122830
+ name: "contacts.add",
122831
+ class: "mutation",
122832
+ 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.",
122833
+ parameters: {
122834
+ type: "object",
122835
+ properties: {
122836
+ email: { type: "string" },
122837
+ firstName: { type: "string" },
122838
+ lastName: { type: "string" },
122839
+ fullName: { type: "string" },
122840
+ company: { type: "string" },
122841
+ relationshipType: { type: "string" },
122842
+ linkedinUrl: { type: "string" },
122843
+ signal: { type: "string" },
122844
+ custom: { type: "object" }
122845
+ },
122846
+ required: ["email"]
122847
+ },
122848
+ request: {
122849
+ method: "POST",
122850
+ path: "/contact",
122851
+ body: {
122852
+ email: "{email}",
122853
+ firstName: "{firstName}",
122854
+ lastName: "{lastName}",
122855
+ fullName: "{fullName}",
122856
+ company: "{company}",
122857
+ relationshipType: "{relationshipType}",
122858
+ linkedinUrl: "{linkedinUrl}",
122859
+ signal: "{signal}",
122860
+ custom: "{custom}"
122861
+ }
122862
+ },
122863
+ cas: "native-idempotency",
122864
+ externalEffect: true
122865
+ },
122866
+ {
122867
+ name: "contacts.delete",
122868
+ class: "mutation",
122869
+ description: "Remove a contact from your UserGems tracking list by email.",
122870
+ parameters: {
122871
+ type: "object",
122872
+ properties: {
122873
+ email: { type: "string" },
122874
+ relationshipType: { type: "string" },
122875
+ signal: { type: "string" }
122876
+ },
122877
+ required: ["email"]
122878
+ },
122879
+ request: {
122880
+ method: "DELETE",
122881
+ path: "/contact",
122882
+ body: {
122883
+ email: "{email}",
122884
+ relationshipType: "{relationshipType}",
122885
+ signal: "{signal}"
122886
+ }
122887
+ },
122888
+ cas: "native-idempotency",
122889
+ externalEffect: true
122890
+ },
122891
+ {
122892
+ name: "accounts.add",
122893
+ class: "mutation",
122894
+ description: "Add an account (company) for which you want to receive new-prospect and signal reports. Name and domain are required.",
122895
+ parameters: {
122896
+ type: "object",
122897
+ properties: {
122898
+ name: { type: "string" },
122899
+ domain: { type: "string" },
122900
+ reportName: { type: "string" },
122901
+ signal: { type: "string" },
122902
+ salesforceId: { type: "string" },
122903
+ customId: { type: "string" },
122904
+ custom: { type: "object" }
122905
+ },
122906
+ required: ["name", "domain"]
122907
+ },
122908
+ request: {
122909
+ method: "POST",
122910
+ path: "/account",
122911
+ body: {
122912
+ name: "{name}",
122913
+ domain: "{domain}",
122914
+ reportName: "{reportName}",
122915
+ signal: "{signal}",
122916
+ salesforceId: "{salesforceId}",
122917
+ customId: "{customId}",
122918
+ custom: "{custom}"
122919
+ }
122920
+ },
122921
+ cas: "native-idempotency",
122922
+ externalEffect: true
122923
+ },
122924
+ {
122925
+ name: "accounts.delete",
122926
+ class: "mutation",
122927
+ description: "Remove a previously added account by name and domain.",
122928
+ parameters: {
122929
+ type: "object",
122930
+ properties: {
122931
+ name: { type: "string" },
122932
+ domain: { type: "string" },
122933
+ reportName: { type: "string" },
122934
+ signal: { type: "string" },
122935
+ salesforceId: { type: "string" },
122936
+ customId: { type: "string" }
122937
+ },
122938
+ required: ["name", "domain"]
122939
+ },
122940
+ request: {
122941
+ method: "DELETE",
122942
+ path: "/account",
122943
+ body: {
122944
+ name: "{name}",
122945
+ domain: "{domain}",
122946
+ reportName: "{reportName}",
122947
+ signal: "{signal}",
122948
+ salesforceId: "{salesforceId}",
122949
+ customId: "{customId}"
122950
+ }
122951
+ },
122952
+ cas: "native-idempotency",
122953
+ externalEffect: true
122954
+ }
122955
+ ]
122956
+ });
122957
+
122958
+ // src/connectors/adapters/hightouch.ts
122959
+ var hightouchConnector = declarativeRestConnector({
122960
+ kind: "hightouch",
122961
+ displayName: "Hightouch",
122962
+ description: "List and inspect Reverse ETL syncs, sources, destinations, and runs, and trigger sync runs.",
122963
+ auth: {
122964
+ kind: "api-key",
122965
+ hint: "API key from Settings -> API keys (Add API key). Sent as the Authorization: Bearer header."
122966
+ },
122967
+ category: "database",
122968
+ defaultConsistencyModel: "authoritative",
122969
+ baseUrl: "https://api.hightouch.com/api/v1",
122970
+ credentialPlacement: { kind: "bearer" },
122971
+ defaultHeaders: { "content-type": "application/json" },
122972
+ test: { method: "GET", path: "/syncs" },
122973
+ capabilities: [
122974
+ {
122975
+ name: "syncs.list",
122976
+ class: "read",
122977
+ description: "List configured syncs in the workspace.",
122978
+ parameters: {
122979
+ type: "object",
122980
+ properties: {
122981
+ limit: { type: "integer" },
122982
+ offset: { type: "integer" },
122983
+ modelId: { type: "number" },
122984
+ slug: { type: "string" },
122985
+ orderBy: { type: "string" }
122986
+ },
122987
+ required: []
122988
+ },
122989
+ request: {
122990
+ method: "GET",
122991
+ path: "/syncs",
122992
+ query: {
122993
+ limit: "{limit}",
122994
+ offset: "{offset}",
122995
+ modelId: "{modelId}",
122996
+ slug: "{slug}",
122997
+ orderBy: "{orderBy}"
122998
+ }
122999
+ }
123000
+ },
123001
+ {
123002
+ name: "syncs.get",
123003
+ class: "read",
123004
+ description: "Retrieve a single sync by its id.",
123005
+ parameters: {
123006
+ type: "object",
123007
+ properties: { syncId: { type: "number" } },
123008
+ required: ["syncId"]
123009
+ },
123010
+ request: { method: "GET", path: "/syncs/{syncId}" }
123011
+ },
123012
+ {
123013
+ name: "syncs.list_runs",
123014
+ class: "read",
123015
+ description: "List the runs (execution history and status) for a sync.",
123016
+ parameters: {
123017
+ type: "object",
123018
+ properties: {
123019
+ syncId: { type: "number" },
123020
+ limit: { type: "integer" },
123021
+ offset: { type: "integer" },
123022
+ runId: { type: "number" },
123023
+ orderBy: { type: "string" }
123024
+ },
123025
+ required: ["syncId"]
123026
+ },
123027
+ request: {
123028
+ method: "GET",
123029
+ path: "/syncs/{syncId}/runs",
123030
+ query: {
123031
+ limit: "{limit}",
123032
+ offset: "{offset}",
123033
+ runId: "{runId}",
123034
+ orderBy: "{orderBy}"
123035
+ }
123036
+ }
123037
+ },
123038
+ {
123039
+ name: "sources.list",
123040
+ class: "read",
123041
+ description: "List configured data sources.",
123042
+ parameters: {
123043
+ type: "object",
123044
+ properties: {
123045
+ limit: { type: "integer" },
123046
+ offset: { type: "integer" },
123047
+ name: { type: "string" },
123048
+ slug: { type: "string" }
123049
+ },
123050
+ required: []
123051
+ },
123052
+ request: {
123053
+ method: "GET",
123054
+ path: "/sources",
123055
+ query: { limit: "{limit}", offset: "{offset}", name: "{name}", slug: "{slug}" }
123056
+ }
123057
+ },
123058
+ {
123059
+ name: "destinations.list",
123060
+ class: "read",
123061
+ description: "List configured destinations.",
123062
+ parameters: {
123063
+ type: "object",
123064
+ properties: {
123065
+ limit: { type: "integer" },
123066
+ offset: { type: "integer" },
123067
+ name: { type: "string" },
123068
+ slug: { type: "string" }
123069
+ },
123070
+ required: []
123071
+ },
123072
+ request: {
123073
+ method: "GET",
123074
+ path: "/destinations",
123075
+ query: { limit: "{limit}", offset: "{offset}", name: "{name}", slug: "{slug}" }
123076
+ }
123077
+ },
123078
+ {
123079
+ name: "syncs.trigger",
123080
+ class: "mutation",
123081
+ description: "Trigger a run of the given sync, optionally forcing a full resync.",
123082
+ parameters: {
123083
+ type: "object",
123084
+ properties: {
123085
+ syncId: { type: "string" },
123086
+ fullResync: { type: "boolean" },
123087
+ resetCDC: { type: "boolean" }
123088
+ },
123089
+ required: ["syncId"]
123090
+ },
123091
+ request: {
123092
+ method: "POST",
123093
+ path: "/syncs/{syncId}/trigger",
123094
+ body: { fullResync: "{fullResync}", resetCDC: "{resetCDC}" }
123095
+ },
123096
+ cas: "native-idempotency",
123097
+ externalEffect: true
123098
+ }
123099
+ ]
123100
+ });
123101
+
123102
+ // src/connectors/adapters/polytomic.ts
123103
+ var polytomicConnector = declarativeRestConnector({
123104
+ kind: "polytomic",
123105
+ displayName: "Polytomic",
123106
+ description: "List and create ETL/reverse-ETL syncs, inspect sync status, and list available connection types.",
123107
+ auth: {
123108
+ kind: "api-key",
123109
+ hint: "API key generated in the Polytomic Settings panel. Sent as the Authorization: Bearer header."
123110
+ },
123111
+ category: "database",
123112
+ defaultConsistencyModel: "authoritative",
123113
+ baseUrl: "https://app.polytomic.com/api",
123114
+ credentialPlacement: { kind: "bearer" },
123115
+ defaultHeaders: { "content-type": "application/json" },
123116
+ test: { method: "GET", path: "/me" },
123117
+ capabilities: [
123118
+ {
123119
+ name: "syncs.list",
123120
+ class: "read",
123121
+ description: "List configured syncs.",
123122
+ parameters: {
123123
+ type: "object",
123124
+ properties: {
123125
+ active: { type: "boolean" },
123126
+ mode: { type: "string" },
123127
+ target_connection_id: { type: "string" },
123128
+ limit: { type: "integer" },
123129
+ page_token: { type: "string" }
123130
+ },
123131
+ required: []
123132
+ },
123133
+ request: {
123134
+ method: "GET",
123135
+ path: "/syncs",
123136
+ query: {
123137
+ active: "{active}",
123138
+ mode: "{mode}",
123139
+ target_connection_id: "{target_connection_id}",
123140
+ limit: "{limit}",
123141
+ page_token: "{page_token}"
123142
+ }
123143
+ }
123144
+ },
123145
+ {
123146
+ name: "syncs.status",
123147
+ class: "read",
123148
+ description: "Get the current status of a sync by its id.",
123149
+ parameters: { type: "object", properties: { id: { type: "string" } }, required: ["id"] },
123150
+ request: { method: "GET", path: "/syncs/{id}/status" }
123151
+ },
123152
+ {
123153
+ name: "connection_types.list",
123154
+ class: "read",
123155
+ description: "List all connection types (source/destination connectors) supported by this deployment.",
123156
+ parameters: { type: "object", properties: {}, required: [] },
123157
+ request: { method: "GET", path: "/connection_types" }
123158
+ },
123159
+ {
123160
+ name: "syncs.create",
123161
+ class: "mutation",
123162
+ description: "Create a new sync from one or more models to a destination.",
123163
+ parameters: {
123164
+ type: "object",
123165
+ properties: {
123166
+ name: { type: "string" },
123167
+ target: { type: "object" },
123168
+ mode: { type: "string" },
123169
+ fields: { type: "array", items: { type: "object" } },
123170
+ schedule: { type: "object" }
123171
+ },
123172
+ required: ["name", "target", "mode", "fields"]
123173
+ },
123174
+ request: {
123175
+ method: "POST",
123176
+ path: "/syncs",
123177
+ body: {
123178
+ name: "{name}",
123179
+ target: "{target}",
123180
+ mode: "{mode}",
123181
+ fields: "{fields}",
123182
+ schedule: "{schedule}"
123183
+ }
123184
+ },
123185
+ cas: "native-idempotency",
123186
+ externalEffect: true
123187
+ }
123188
+ ]
123189
+ });
123190
+
123191
+ // src/connectors/adapters/signwell.ts
123192
+ var signwellConnector = declarativeRestConnector({
123193
+ kind: "signwell",
123194
+ displayName: "SignWell",
123195
+ description: "Create and send documents for electronic signature, and list or retrieve documents.",
123196
+ auth: {
123197
+ kind: "api-key",
123198
+ hint: "API key from Settings -> API (Create API Key). Sent in the X-Api-Key header."
123199
+ },
123200
+ category: "other",
123201
+ defaultConsistencyModel: "authoritative",
123202
+ baseUrl: "https://www.signwell.com/api/v1",
123203
+ credentialPlacement: { kind: "header", header: "X-Api-Key" },
123204
+ defaultHeaders: { "content-type": "application/json" },
123205
+ test: { method: "GET", path: "/me" },
123206
+ capabilities: [
123207
+ {
123208
+ name: "documents.list",
123209
+ class: "read",
123210
+ description: "List documents in the account.",
123211
+ parameters: {
123212
+ type: "object",
123213
+ properties: { page: { type: "integer" }, limit: { type: "integer" } },
123214
+ required: []
123215
+ },
123216
+ request: {
123217
+ method: "GET",
123218
+ path: "/documents",
123219
+ query: { page: "{page}", limit: "{limit}" }
123220
+ }
123221
+ },
123222
+ {
123223
+ name: "documents.get",
123224
+ class: "read",
123225
+ description: "Retrieve a single document by its id.",
123226
+ parameters: { type: "object", properties: { id: { type: "string" } }, required: ["id"] },
123227
+ request: { method: "GET", path: "/documents/{id}" }
123228
+ },
123229
+ {
123230
+ name: "account.get",
123231
+ class: "read",
123232
+ description: "Retrieve the account information associated with the API key.",
123233
+ parameters: { type: "object", properties: {}, required: [] },
123234
+ request: { method: "GET", path: "/me" }
123235
+ },
123236
+ {
123237
+ name: "documents.create",
123238
+ class: "mutation",
123239
+ description: "Create and optionally send a new document for signing. Set draft to true to create without sending.",
123240
+ parameters: {
123241
+ type: "object",
123242
+ properties: {
123243
+ files: { type: "array", items: { type: "object" } },
123244
+ recipients: { type: "array", items: { type: "object" } },
123245
+ name: { type: "string" },
123246
+ subject: { type: "string" },
123247
+ message: { type: "string" },
123248
+ draft: { type: "boolean" },
123249
+ test_mode: { type: "boolean" },
123250
+ embedded_signing: { type: "boolean" }
123251
+ },
123252
+ required: ["files", "recipients"]
123253
+ },
123254
+ request: {
123255
+ method: "POST",
123256
+ path: "/documents",
123257
+ body: {
123258
+ files: "{files}",
123259
+ recipients: "{recipients}",
123260
+ name: "{name}",
123261
+ subject: "{subject}",
123262
+ message: "{message}",
123263
+ draft: "{draft}",
123264
+ test_mode: "{test_mode}",
123265
+ embedded_signing: "{embedded_signing}"
123266
+ }
123267
+ },
123268
+ cas: "native-idempotency",
123269
+ externalEffect: true
123270
+ }
123271
+ ]
123272
+ });
123273
+
123274
+ // src/connectors/adapters/justcall.ts
123275
+ var justcallConnector = declarativeRestConnector({
123276
+ kind: "justcall",
123277
+ displayName: "JustCall",
123278
+ description: "Cloud phone system and SMS platform. Place and list calls, manage contacts, and send SMS/MMS programmatically.",
123279
+ auth: {
123280
+ kind: "api-key",
123281
+ 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.'
123282
+ },
123283
+ category: "comms",
123284
+ defaultConsistencyModel: "authoritative",
123285
+ baseUrl: "https://api.justcall.io/v2.1",
123286
+ credentialPlacement: { kind: "header", header: "Authorization" },
123287
+ defaultHeaders: { "content-type": "application/json", accept: "application/json" },
123288
+ test: { method: "GET", path: "/calls", query: { per_page: "1" } },
123289
+ capabilities: [
123290
+ {
123291
+ name: "calls.list",
123292
+ class: "read",
123293
+ description: "List call records linked to the account, with optional filters for number, direction, type, and date range.",
123294
+ parameters: {
123295
+ type: "object",
123296
+ properties: {
123297
+ page: { type: "integer" },
123298
+ per_page: { type: "integer" },
123299
+ contact_number: { type: "string" },
123300
+ from_datetime: { type: "string" },
123301
+ to_datetime: { type: "string" },
123302
+ call_direction: { type: "string" }
123303
+ },
123304
+ required: []
123305
+ },
123306
+ request: {
123307
+ method: "GET",
123308
+ path: "/calls",
123309
+ query: {
123310
+ page: "{page}",
123311
+ per_page: "{per_page}",
123312
+ contact_number: "{contact_number}",
123313
+ from_datetime: "{from_datetime}",
123314
+ to_datetime: "{to_datetime}",
123315
+ call_direction: "{call_direction}"
123316
+ }
123317
+ }
123318
+ },
123319
+ {
123320
+ name: "calls.get",
123321
+ class: "read",
123322
+ description: "Get a single Sales Dialer call by its unique call id.",
123323
+ parameters: { type: "object", properties: { id: { type: "integer" } }, required: ["id"] },
123324
+ request: { method: "GET", path: "/sales_dialer/calls/{id}" }
123325
+ },
123326
+ {
123327
+ name: "contacts.list",
123328
+ class: "read",
123329
+ description: "List contacts in the account, optionally filtered by name or number.",
123330
+ parameters: {
123331
+ type: "object",
123332
+ properties: {
123333
+ page: { type: "integer" },
123334
+ per_page: { type: "integer" },
123335
+ contact_number: { type: "string" },
123336
+ first_name: { type: "string" },
123337
+ last_name: { type: "string" },
123338
+ across_team: { type: "boolean" }
123339
+ },
123340
+ required: []
123341
+ },
123342
+ request: {
123343
+ method: "GET",
123344
+ path: "/contacts",
123345
+ query: {
123346
+ page: "{page}",
123347
+ per_page: "{per_page}",
123348
+ contact_number: "{contact_number}",
123349
+ first_name: "{first_name}",
123350
+ last_name: "{last_name}",
123351
+ across_team: "{across_team}"
123352
+ }
123353
+ }
123354
+ },
123355
+ {
123356
+ name: "contacts.create",
123357
+ class: "mutation",
123358
+ description: "Create a new contact in Sales Dialer.",
123359
+ parameters: {
123360
+ type: "object",
123361
+ properties: {
123362
+ name: { type: "string" },
123363
+ phone_number: { type: "string" },
123364
+ email: { type: "string" }
123365
+ },
123366
+ required: ["name", "phone_number"]
123367
+ },
123368
+ request: {
123369
+ method: "POST",
123370
+ path: "/sales_dialer/contacts",
123371
+ body: { name: "{name}", phone_number: "{phone_number}", email: "{email}" }
123372
+ },
123373
+ cas: "native-idempotency",
123374
+ externalEffect: true
123375
+ },
123376
+ {
123377
+ name: "sms.send",
123378
+ class: "mutation",
123379
+ description: "Send an SMS or MMS from a JustCall number to a contact number.",
123380
+ parameters: {
123381
+ type: "object",
123382
+ properties: {
123383
+ justcall_number: { type: "string" },
123384
+ contact_number: { type: "string" },
123385
+ body: { type: "string" },
123386
+ media_url: { type: "string" }
123387
+ },
123388
+ required: ["justcall_number", "contact_number", "body"]
123389
+ },
123390
+ request: {
123391
+ method: "POST",
123392
+ path: "/texts/new",
123393
+ body: {
123394
+ justcall_number: "{justcall_number}",
123395
+ contact_number: "{contact_number}",
123396
+ body: "{body}",
123397
+ media_url: "{media_url}"
123398
+ }
123399
+ },
123400
+ cas: "native-idempotency",
123401
+ externalEffect: true
123402
+ }
123403
+ ]
123404
+ });
123405
+
123406
+ // src/connectors/adapters/nooks.ts
123407
+ var nooksConnector = declarativeRestConnector({
123408
+ kind: "nooks",
123409
+ displayName: "Nooks",
123410
+ description: "AI sales engagement and dialer platform. Read call records, prospects, and accounts from the Nooks Sequencing API.",
123411
+ auth: {
123412
+ kind: "api-key",
123413
+ hint: "Create a long-lived API key (nooks-api-...) in Nooks Developer Settings -> API Keys. Sent as the Authorization: Bearer header."
123414
+ },
123415
+ category: "comms",
123416
+ defaultConsistencyModel: "authoritative",
123417
+ baseUrl: "https://partner-api.nooks.in/v1",
123418
+ credentialPlacement: { kind: "bearer" },
123419
+ defaultHeaders: { "content-type": "application/json", accept: "application/json" },
123420
+ test: { method: "GET", path: "/me" },
123421
+ capabilities: [
123422
+ {
123423
+ name: "calls.list",
123424
+ class: "read",
123425
+ description: "List call records, with optional filters by prospect, account, or owner.",
123426
+ parameters: {
123427
+ type: "object",
123428
+ properties: {
123429
+ filter_prospect_id: { type: "string" },
123430
+ filter_account_id: { type: "string" },
123431
+ filter_owner_id: { type: "string" },
123432
+ include: { type: "string" }
123433
+ },
123434
+ required: []
123435
+ },
123436
+ request: {
123437
+ method: "GET",
123438
+ path: "/calls",
123439
+ query: {
123440
+ "filter[prospect][id]": "{filter_prospect_id}",
123441
+ "filter[account][id]": "{filter_account_id}",
123442
+ "filter[owner][id]": "{filter_owner_id}",
123443
+ include: "{include}"
123444
+ }
123445
+ }
123446
+ },
123447
+ {
123448
+ name: "calls.get",
123449
+ class: "read",
123450
+ description: "Get a single call record by its id.",
123451
+ parameters: {
123452
+ type: "object",
123453
+ properties: { id: { type: "string" }, include: { type: "string" } },
123454
+ required: ["id"]
123455
+ },
123456
+ request: { method: "GET", path: "/calls/{id}", query: { include: "{include}" } }
123457
+ },
123458
+ {
123459
+ name: "prospects.list",
123460
+ class: "read",
123461
+ description: "List prospects (contacts), with optional filters by name, email, or account.",
123462
+ parameters: {
123463
+ type: "object",
123464
+ properties: {
123465
+ filter_name: { type: "string" },
123466
+ filter_primaryEmail: { type: "string" },
123467
+ filter_account_id: { type: "string" },
123468
+ include: { type: "string" }
123469
+ },
123470
+ required: []
123471
+ },
123472
+ request: {
123473
+ method: "GET",
123474
+ path: "/prospects",
123475
+ query: {
123476
+ "filter[name]": "{filter_name}",
123477
+ "filter[primaryEmail]": "{filter_primaryEmail}",
123478
+ "filter[account][id]": "{filter_account_id}",
123479
+ include: "{include}"
123480
+ }
123481
+ }
123482
+ },
123483
+ {
123484
+ name: "accounts.list",
123485
+ class: "read",
123486
+ description: "List accounts, with optional filters by name, domain, or CRM id.",
123487
+ parameters: {
123488
+ type: "object",
123489
+ properties: {
123490
+ filter_name: { type: "string" },
123491
+ filter_domain: { type: "string" },
123492
+ filter_crmId: { type: "string" }
123493
+ },
123494
+ required: []
123495
+ },
123496
+ request: {
123497
+ method: "GET",
123498
+ path: "/accounts",
123499
+ query: {
123500
+ "filter[name]": "{filter_name}",
123501
+ "filter[domain]": "{filter_domain}",
123502
+ "filter[crmId]": "{filter_crmId}"
123503
+ }
123504
+ }
123505
+ },
123506
+ {
123507
+ name: "prospects.sync",
123508
+ class: "mutation",
123509
+ description: "Sync prospects from the connected CRM into Nooks.",
123510
+ parameters: { type: "object", properties: {}, required: [] },
123511
+ request: { method: "POST", path: "/integrations/prospects/sync", body: {} },
123512
+ cas: "native-idempotency",
123513
+ externalEffect: true
123514
+ }
123515
+ ]
123516
+ });
123517
+
123518
+ // src/connectors/adapters/modjo.ts
123519
+ var modjoConnector = declarativeRestConnector({
123520
+ kind: "modjo",
123521
+ displayName: "Modjo",
123522
+ description: "Conversation intelligence platform. Export call records with transcripts and AI summaries, and list users and teams.",
123523
+ auth: {
123524
+ kind: "api-key",
123525
+ 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."
123526
+ },
123527
+ category: "doc",
123528
+ defaultConsistencyModel: "authoritative",
123529
+ baseUrl: "https://api.modjo.ai",
123530
+ credentialPlacement: { kind: "header", header: "X-API-KEY" },
123531
+ defaultHeaders: { "content-type": "application/json", accept: "application/json" },
123532
+ test: { method: "GET", path: "/v1/users", query: { page: "1", perPage: "1" } },
123533
+ capabilities: [
123534
+ {
123535
+ name: "calls.export",
123536
+ class: "read",
123537
+ description: "Retrieve a paginated list of calls with optional relations such as transcripts, AI summaries, and contacts.",
123538
+ parameters: {
123539
+ type: "object",
123540
+ properties: {
123541
+ page: { type: "integer" },
123542
+ perPage: { type: "integer" },
123543
+ transcript: { type: "boolean" },
123544
+ aiSummary: { type: "boolean" },
123545
+ contacts: { type: "boolean" }
123546
+ },
123547
+ required: ["page", "perPage"]
123548
+ },
123549
+ request: {
123550
+ method: "POST",
123551
+ path: "/v1/calls/exports",
123552
+ body: {
123553
+ pagination: { page: "{page}", perPage: "{perPage}" },
123554
+ relations: {
123555
+ transcript: "{transcript}",
123556
+ aiSummary: "{aiSummary}",
123557
+ contacts: "{contacts}"
123558
+ }
123559
+ }
123560
+ }
123561
+ },
123562
+ {
123563
+ name: "users.list",
123564
+ class: "read",
123565
+ description: "Retrieve a paginated list of users in the Modjo workspace.",
123566
+ parameters: {
123567
+ type: "object",
123568
+ properties: { page: { type: "integer" }, perPage: { type: "integer" } },
123569
+ required: ["page", "perPage"]
123570
+ },
123571
+ request: {
123572
+ method: "GET",
123573
+ path: "/v1/users",
123574
+ query: { page: "{page}", perPage: "{perPage}" }
123575
+ }
123576
+ },
123577
+ {
123578
+ name: "teams.list",
123579
+ class: "read",
123580
+ description: "Retrieve a paginated list of teams in the Modjo workspace.",
123581
+ parameters: {
123582
+ type: "object",
123583
+ properties: { page: { type: "integer" }, perPage: { type: "integer" } },
123584
+ required: ["page", "perPage"]
123585
+ },
123586
+ request: {
123587
+ method: "GET",
123588
+ path: "/v1/teams",
123589
+ query: { page: "{page}", perPage: "{perPage}" }
123590
+ }
123591
+ }
123592
+ ]
123593
+ });
123594
+
123595
+ // src/connectors/adapters/factors-ai.ts
123596
+ var factorsAiConnector = declarativeRestConnector({
123597
+ kind: "factors-ai",
123598
+ displayName: "Factors.ai",
123599
+ description: "B2B account intelligence and ABM platform. Retrieve the engagement journey (activity timeline) for a target account by domain.",
123600
+ auth: {
123601
+ kind: "api-key",
123602
+ hint: "Generate a private API token for the target project in Factors.ai. Sent as the Authorization: Bearer header."
123603
+ },
123604
+ category: "sales-intelligence",
123605
+ defaultConsistencyModel: "authoritative",
123606
+ baseUrl: "https://api.factors.ai/open/v1",
123607
+ credentialPlacement: { kind: "bearer" },
123608
+ defaultHeaders: { accept: "application/json" },
123609
+ test: { method: "GET", path: "/account/factors.ai/journey" },
123610
+ capabilities: [
123611
+ {
123612
+ name: "account.journey",
123613
+ class: "read",
123614
+ description: "Get the account journey (chronological engagement events) for a given account domain, optionally filtered by date range, event name, or user.",
123615
+ parameters: {
123616
+ type: "object",
123617
+ properties: {
123618
+ account_domain: { type: "string" },
123619
+ from: { type: "string" },
123620
+ to: { type: "string" },
123621
+ event_name: { type: "string" },
123622
+ user_name: { type: "string" }
123623
+ },
123624
+ required: ["account_domain"]
123625
+ },
123626
+ request: {
123627
+ method: "GET",
123628
+ path: "/account/{account_domain}/journey",
123629
+ query: {
123630
+ from: "{from}",
123631
+ to: "{to}",
123632
+ event_name: "{event_name}",
123633
+ user_name: "{user_name}"
123634
+ }
123635
+ }
123636
+ }
123637
+ ]
123638
+ });
123639
+
123640
+ // src/connectors/adapters/getresponse.ts
123641
+ var getresponseConnector = declarativeRestConnector({
123642
+ kind: "getresponse",
123643
+ displayName: "GetResponse",
123644
+ description: "Email marketing platform for managing contacts, lists (campaigns), and sending newsletters.",
123645
+ auth: {
123646
+ kind: "api-key",
123647
+ 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>)."
123648
+ },
123649
+ category: "crm",
123650
+ defaultConsistencyModel: "authoritative",
123651
+ baseUrl: "https://api.getresponse.com/v3",
123652
+ credentialPlacement: { kind: "header", header: "X-Auth-Token", prefix: "api-key " },
123653
+ defaultHeaders: { "content-type": "application/json" },
123654
+ test: { method: "GET", path: "/accounts" },
123655
+ capabilities: [
123656
+ {
123657
+ name: "contacts.list",
123658
+ class: "read",
123659
+ description: "List or search contacts, optionally filtered by email or campaign (list).",
123660
+ parameters: {
123661
+ type: "object",
123662
+ properties: {
123663
+ email: { type: "string" },
123664
+ campaignId: { type: "string" },
123665
+ page: { type: "integer" },
123666
+ perPage: { type: "integer" }
123667
+ },
123668
+ required: []
123669
+ },
123670
+ request: {
123671
+ method: "GET",
123672
+ path: "/contacts",
123673
+ query: {
123674
+ "query[email]": "{email}",
123675
+ "query[campaignId]": "{campaignId}",
123676
+ page: "{page}",
123677
+ perPage: "{perPage}"
123678
+ }
123679
+ }
123680
+ },
123681
+ {
123682
+ name: "campaigns.list",
123683
+ class: "read",
123684
+ description: "List campaigns (contact lists). The campaignId returned here is used when adding contacts or sending newsletters.",
123685
+ parameters: {
123686
+ type: "object",
123687
+ properties: {
123688
+ name: { type: "string" },
123689
+ page: { type: "integer" },
123690
+ perPage: { type: "integer" }
123691
+ },
123692
+ required: []
123693
+ },
123694
+ request: {
123695
+ method: "GET",
123696
+ path: "/campaigns",
123697
+ query: { "query[name]": "{name}", page: "{page}", perPage: "{perPage}" }
123698
+ }
123699
+ },
123700
+ {
123701
+ name: "contacts.create",
123702
+ class: "mutation",
123703
+ description: "Add (import) a contact to a campaign (list). Only email and campaign id are required.",
123704
+ parameters: {
123705
+ type: "object",
123706
+ properties: {
123707
+ email: { type: "string" },
123708
+ campaign_id: { type: "string" },
123709
+ name: { type: "string" },
123710
+ dayOfCycle: { type: "integer" }
123711
+ },
123712
+ required: ["email", "campaign_id"]
123713
+ },
123714
+ request: {
123715
+ method: "POST",
123716
+ path: "/contacts",
123717
+ body: {
123718
+ email: "{email}",
123719
+ name: "{name}",
123720
+ dayOfCycle: "{dayOfCycle}",
123721
+ campaign: { campaignId: "{campaign_id}" }
123722
+ }
123723
+ },
123724
+ cas: "native-idempotency",
123725
+ externalEffect: true
123726
+ },
123727
+ {
123728
+ name: "newsletters.create",
123729
+ class: "mutation",
123730
+ description: "Create and send a newsletter (broadcast email) to a campaign. Requires subject, fromFieldId, HTML content, and a target campaign.",
123731
+ parameters: {
123732
+ type: "object",
123733
+ properties: {
123734
+ subject: { type: "string" },
123735
+ fromFieldId: { type: "string" },
123736
+ html: { type: "string" },
123737
+ campaign_id: { type: "string" },
123738
+ name: { type: "string" }
123739
+ },
123740
+ required: ["subject", "fromFieldId", "html", "campaign_id"]
123741
+ },
123742
+ request: {
123743
+ method: "POST",
123744
+ path: "/newsletters",
123745
+ body: {
123746
+ name: "{name}",
123747
+ subject: "{subject}",
123748
+ fromField: { fromFieldId: "{fromFieldId}" },
123749
+ content: { html: "{html}" },
123750
+ campaign: { campaignId: "{campaign_id}" },
123751
+ sendSettings: { selectedCampaigns: ["{campaign_id}"] }
123752
+ }
123753
+ },
123754
+ cas: "native-idempotency",
123755
+ externalEffect: true
123756
+ }
123757
+ ]
123758
+ });
123759
+
120262
123760
  export {
120263
123761
  InMemoryOAuthFlowStore,
120264
123762
  startOAuthFlow,
@@ -120762,6 +124260,39 @@ export {
120762
124260
  n8nConnector,
120763
124261
  makeConnector,
120764
124262
  pipedreamConnector,
124263
+ amplemarketConnector,
124264
+ heyreachConnector,
124265
+ lagrowthmachineConnector,
124266
+ saleshandyConnector,
124267
+ bettercontactConnector,
124268
+ contactoutConnector,
124269
+ findymailConnector,
124270
+ snovIoConnector,
124271
+ wizaConnector,
124272
+ builtwithConnector,
124273
+ commonRoomConnector,
124274
+ leadfeederConnector,
124275
+ serperConnector,
124276
+ warmlyConnector,
124277
+ autoboundConnector,
124278
+ crustdataConnector,
124279
+ fullenrichConnector,
124280
+ leadmagicConnector,
124281
+ brightdataConnector,
124282
+ phantombusterConnector,
124283
+ zenrowsConnector,
124284
+ oceanIoConnector,
124285
+ seamlessAiConnector,
124286
+ theirstackConnector,
124287
+ usergemsConnector,
124288
+ hightouchConnector,
124289
+ polytomicConnector,
124290
+ signwellConnector,
124291
+ justcallConnector,
124292
+ nooksConnector,
124293
+ modjoConnector,
124294
+ factorsAiConnector,
124295
+ getresponseConnector,
120765
124296
  adapters_exports
120766
124297
  };
120767
- //# sourceMappingURL=chunk-COKK7BOH.js.map
124298
+ //# sourceMappingURL=chunk-JKYPEVMS.js.map