@coldiq/mcp 0.1.15 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +26 -1
- package/dist/client.js.map +1 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +50 -13
- package/dist/executor.js.map +1 -1
- package/dist/registry.d.ts +4 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +162 -34
- package/dist/registry.js.map +1 -1
- package/dist/tools/enrich-company.js +4 -4
- package/dist/tools/enrich-company.js.map +1 -1
- package/dist/tools/enrich-person.js +3 -3
- package/dist/tools/enrich-person.js.map +1 -1
- package/dist/tools/fetch-page-content.js +3 -3
- package/dist/tools/fetch-page-content.js.map +1 -1
- package/dist/tools/find-email.js +4 -4
- package/dist/tools/find-email.js.map +1 -1
- package/dist/tools/find-emails.d.ts.map +1 -1
- package/dist/tools/find-emails.js +71 -5
- package/dist/tools/find-emails.js.map +1 -1
- package/dist/tools/find-influencers.js +3 -3
- package/dist/tools/find-influencers.js.map +1 -1
- package/dist/tools/find-people.js +5 -5
- package/dist/tools/find-people.js.map +1 -1
- package/dist/tools/find-phone.js +4 -4
- package/dist/tools/find-phone.js.map +1 -1
- package/dist/tools/find-signals.js +5 -5
- package/dist/tools/find-signals.js.map +1 -1
- package/dist/tools/search-ads.js +3 -3
- package/dist/tools/search-ads.js.map +1 -1
- package/dist/tools/search-companies.d.ts +1 -1
- package/dist/tools/search-companies.d.ts.map +1 -1
- package/dist/tools/search-companies.js +4 -4
- package/dist/tools/search-companies.js.map +1 -1
- package/dist/tools/search-jobs.js +4 -4
- package/dist/tools/search-jobs.js.map +1 -1
- package/dist/tools/search-places.js +3 -3
- package/dist/tools/search-places.js.map +1 -1
- package/dist/tools/search-reddit.js +3 -3
- package/dist/tools/search-reddit.js.map +1 -1
- package/dist/tools/search-seo.js +3 -3
- package/dist/tools/search-seo.js.map +1 -1
- package/dist/tools/search-web.js +3 -3
- package/dist/tools/search-web.js.map +1 -1
- package/dist/tools/verify-email.js +3 -3
- package/dist/tools/verify-email.js.map +1 -1
- package/package.json +2 -1
- package/src/registry.ts +7 -0
- package/src/tools/search-companies.ts +1 -1
- package/tests/registry-search-companies.test.ts +81 -0
- package/tests/registry.test.ts +6 -2
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAMD,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAqBjE;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,WAAW,CAAC,CAoDtB"}
|
package/dist/client.js
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
|
+
import { Agent, setGlobalDispatcher } from 'undici';
|
|
1
2
|
let _apiUrl;
|
|
2
3
|
let _apiKey;
|
|
4
|
+
let _httpTimeoutMs;
|
|
3
5
|
export function initClient(apiUrl, apiKey) {
|
|
4
6
|
_apiUrl = apiUrl ?? process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com';
|
|
5
7
|
_apiKey = apiKey ?? process.env.COLDIQ_API_KEY ?? '';
|
|
8
|
+
_httpTimeoutMs = parseInt(process.env.COLDIQ_HTTP_TIMEOUT_MS ?? '30000', 10);
|
|
6
9
|
if (!_apiKey) {
|
|
7
10
|
throw new Error('COLDIQ_API_KEY is required — set it in .mcp.json env or as an environment variable');
|
|
8
11
|
}
|
|
9
12
|
// Strip trailing slash
|
|
10
13
|
_apiUrl = _apiUrl.replace(/\/+$/, '');
|
|
14
|
+
// Tune the global undici dispatcher: keep-alive + connection pool.
|
|
15
|
+
// pipelining: 1 — Cloudflare front-door does not reliably support HTTP/1.1 pipelining.
|
|
16
|
+
// connections: 32 — covers worst-case find_emails fan-out (50 people × 2 providers).
|
|
17
|
+
setGlobalDispatcher(new Agent({
|
|
18
|
+
keepAliveTimeout: 30_000,
|
|
19
|
+
keepAliveMaxTimeout: 60_000,
|
|
20
|
+
connections: 32,
|
|
21
|
+
pipelining: 1,
|
|
22
|
+
}));
|
|
11
23
|
}
|
|
12
24
|
export async function callApi(method, path, body, queryParams) {
|
|
13
25
|
const url = new URL(`${_apiUrl}/v1${path}`);
|
|
@@ -20,7 +32,11 @@ export async function callApi(method, path, body, queryParams) {
|
|
|
20
32
|
const headers = {
|
|
21
33
|
Authorization: `Bearer ${_apiKey}`,
|
|
22
34
|
};
|
|
23
|
-
const init = {
|
|
35
|
+
const init = {
|
|
36
|
+
method,
|
|
37
|
+
headers,
|
|
38
|
+
signal: AbortSignal.timeout(_httpTimeoutMs),
|
|
39
|
+
};
|
|
24
40
|
if (method === 'POST' && body !== undefined) {
|
|
25
41
|
headers['Content-Type'] = 'application/json';
|
|
26
42
|
init.body = JSON.stringify(body);
|
|
@@ -37,6 +53,15 @@ export async function callApi(method, path, body, queryParams) {
|
|
|
37
53
|
return { ok: res.ok, status: res.status, data };
|
|
38
54
|
}
|
|
39
55
|
catch (err) {
|
|
56
|
+
const isTimeout = err instanceof Error &&
|
|
57
|
+
(err.name === 'AbortError' || err.name === 'TimeoutError');
|
|
58
|
+
if (isTimeout) {
|
|
59
|
+
return {
|
|
60
|
+
ok: false,
|
|
61
|
+
status: 0,
|
|
62
|
+
data: { error: 'Request timed out' },
|
|
63
|
+
};
|
|
64
|
+
}
|
|
40
65
|
if (process.env.COLDIQ_DEBUG) {
|
|
41
66
|
console.error(`[coldiq:debug] network error: ${err instanceof Error ? err.message : String(err)}`);
|
|
42
67
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,eAAe,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACrC,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3E,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iGAAiG;IACjG,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,MAAM,IAAI,cAAc,CAE5F;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,eAAe,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACrC,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3E,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iGAAiG;IACjG,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,MAAM,IAAI,cAAc,CAE5F;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAiK3B,MAAM,WAAW,cAAc;IAC7B,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,eAAe,GAAG,cAAc,CAAC,CAsH3C"}
|
package/dist/executor.js
CHANGED
|
@@ -22,6 +22,8 @@ function debug(msg) {
|
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
23
|
async function executeAsync(provider, payload) {
|
|
24
24
|
const asyncCfg = provider.async;
|
|
25
|
+
const firstPollMs = parseInt(process.env.COLDIQ_FIRST_POLL_MS ?? '750', 10);
|
|
26
|
+
const maxPollErrors = parseInt(process.env.COLDIQ_MAX_POLL_ERRORS ?? '3', 10);
|
|
25
27
|
// Step 1: create the job
|
|
26
28
|
debug(`${provider.id} async: creating job...`);
|
|
27
29
|
const createRes = await callApi(provider.method, provider.endpoint, payload.body, payload.queryParams);
|
|
@@ -40,25 +42,43 @@ async function executeAsync(provider, payload) {
|
|
|
40
42
|
if (!jobId)
|
|
41
43
|
return { ok: false, data: { error: 'Empty job ID from async response' } };
|
|
42
44
|
debug(`${provider.id} async: job created (${jobId}), polling...`);
|
|
43
|
-
// Step 3: poll until complete or timeout
|
|
45
|
+
// Step 3: poll until complete or timeout.
|
|
46
|
+
// First probe fires quickly — capped by both COLDIQ_FIRST_POLL_MS and the provider's
|
|
47
|
+
// configured first interval, so tests that set a short pollIntervalMs aren't blocked
|
|
48
|
+
// by the default 750ms.
|
|
44
49
|
const deadline = Date.now() + asyncCfg.timeoutMs;
|
|
45
50
|
let pollCount = 0;
|
|
51
|
+
let consecutivePollErrors = 0;
|
|
52
|
+
const configuredFirstInterval = typeof asyncCfg.pollIntervalMs === 'function'
|
|
53
|
+
? asyncCfg.pollIntervalMs(1)
|
|
54
|
+
: asyncCfg.pollIntervalMs;
|
|
55
|
+
await sleep(Math.min(firstPollMs, configuredFirstInterval));
|
|
46
56
|
while (Date.now() < deadline) {
|
|
57
|
+
const pollRes = await callApi('GET', asyncCfg.pollEndpoint(jobId));
|
|
58
|
+
pollCount++;
|
|
59
|
+
if (!pollRes.ok) {
|
|
60
|
+
consecutivePollErrors++;
|
|
61
|
+
if (consecutivePollErrors >= maxPollErrors) {
|
|
62
|
+
log(`${provider.id} async: poll failing (${consecutivePollErrors} consecutive errors), skipping`);
|
|
63
|
+
return { ok: false, data: { error: `Poll endpoint failed ${consecutivePollErrors} consecutive times` } };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
consecutivePollErrors = 0;
|
|
68
|
+
const status = pollRes.data.status ?? 'unknown';
|
|
69
|
+
const progress = pollRes.data.progress_percentage ?? '?';
|
|
70
|
+
debug(`${provider.id} async: poll #${pollCount} — status=${status}, progress=${progress}%`);
|
|
71
|
+
if (asyncCfg.isComplete(pollRes.data)) {
|
|
72
|
+
debug(`${provider.id} async: complete`);
|
|
73
|
+
return pollRes;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (Date.now() >= deadline)
|
|
77
|
+
break;
|
|
47
78
|
const interval = typeof asyncCfg.pollIntervalMs === 'function'
|
|
48
79
|
? asyncCfg.pollIntervalMs(pollCount + 1)
|
|
49
80
|
: asyncCfg.pollIntervalMs;
|
|
50
81
|
await sleep(interval);
|
|
51
|
-
pollCount++;
|
|
52
|
-
const pollRes = await callApi('GET', asyncCfg.pollEndpoint(jobId));
|
|
53
|
-
if (!pollRes.ok)
|
|
54
|
-
continue; // transient poll errors — retry
|
|
55
|
-
const status = pollRes.data.status ?? 'unknown';
|
|
56
|
-
const progress = pollRes.data.progress_percentage ?? '?';
|
|
57
|
-
debug(`${provider.id} async: poll #${pollCount} — status=${status}, progress=${progress}%`);
|
|
58
|
-
if (asyncCfg.isComplete(pollRes.data)) {
|
|
59
|
-
debug(`${provider.id} async: complete`);
|
|
60
|
-
return pollRes;
|
|
61
|
-
}
|
|
62
82
|
}
|
|
63
83
|
debug(`${provider.id} async: timed out after ${asyncCfg.timeoutMs / 1000}s`);
|
|
64
84
|
return { ok: false, data: { error: `Async operation timed out after ${asyncCfg.timeoutMs / 1000}s` } };
|
|
@@ -69,6 +89,16 @@ function sleep(ms) {
|
|
|
69
89
|
// ---------------------------------------------------------------------------
|
|
70
90
|
// Execute a single provider
|
|
71
91
|
// ---------------------------------------------------------------------------
|
|
92
|
+
// Per-provider sync wall-clock cap. Most providers return "no result" in <5s when
|
|
93
|
+
// they have no match; a slow provider returning empty late only delays the next
|
|
94
|
+
// fallback. Capping keeps a 9-provider waterfall walk bounded — at most ~90s end-
|
|
95
|
+
// to-end when every provider misses, vs. multi-minute stalls observed in production
|
|
96
|
+
// before this cap. Override via COLDIQ_SYNC_PROVIDER_TIMEOUT_MS for debugging/tests.
|
|
97
|
+
// Read each call so tests can adjust without module reloads. Does NOT apply to
|
|
98
|
+
// async providers — their own pollIntervalMs/timeoutMs govern.
|
|
99
|
+
function syncProviderTimeoutMs() {
|
|
100
|
+
return parseInt(process.env.COLDIQ_SYNC_PROVIDER_TIMEOUT_MS ?? '10000', 10);
|
|
101
|
+
}
|
|
72
102
|
async function executeSingle(provider, input) {
|
|
73
103
|
const start = Date.now();
|
|
74
104
|
let payload;
|
|
@@ -87,7 +117,14 @@ async function executeSingle(provider, input) {
|
|
|
87
117
|
result = { ...asyncResult, status: asyncResult.ok ? 200 : 500 };
|
|
88
118
|
}
|
|
89
119
|
else {
|
|
90
|
-
|
|
120
|
+
const cap = syncProviderTimeoutMs();
|
|
121
|
+
const call = callApi(provider.method, provider.endpoint, payload.body, payload.queryParams);
|
|
122
|
+
const timeout = new Promise((resolve) => setTimeout(() => resolve({
|
|
123
|
+
ok: false,
|
|
124
|
+
status: 0,
|
|
125
|
+
data: { error: `Provider exceeded ${cap}ms sync cap` },
|
|
126
|
+
}), cap));
|
|
127
|
+
result = await Promise.race([call, timeout]);
|
|
91
128
|
}
|
|
92
129
|
return { ...result, latencyMs: Date.now() - start };
|
|
93
130
|
}
|
package/dist/executor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAqBnE,SAAS,gBAAgB,CAAC,MAAwC;IAChE,OAAO,OAAO,IAAI,MAAM,IAAI,iBAAiB,IAAI,MAAM,CAAA;AACzD,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAE3B,8EAA8E;AAC9E,2CAA2C;AAC3C,8EAA8E;AAE9E,mEAAmE;AACnE,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;AAClC,CAAC;AAED,sFAAsF;AACtF,SAAS,KAAK,CAAC,GAAW;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAA;IACxC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,KAAK,UAAU,YAAY,CACzB,QAAuB,EACvB,OAAiE;IAEjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -41,6 +41,8 @@ export interface ProviderEntry {
|
|
|
41
41
|
}
|
|
42
42
|
export type Capability = 'search_companies' | 'find_people' | 'find_email' | 'verify_email' | 'find_phone' | 'enrich_company' | 'enrich_person' | 'search_web' | 'search_jobs' | 'search_ads' | 'search_places' | 'find_influencers' | 'search_reddit' | 'search_seo' | 'find_signals' | 'fetch_page_content';
|
|
43
43
|
export declare function isoCountryToName(code: string): string;
|
|
44
|
+
export declare function nameToIsoCountry(input: string): string | undefined;
|
|
45
|
+
export declare function coerceCountriesToIso(values: readonly string[] | undefined): string[];
|
|
44
46
|
/**
|
|
45
47
|
* Return the ordered provider IDs for a capability (for documentation / resolver).
|
|
46
48
|
*/
|
|
@@ -52,11 +54,12 @@ export declare function listCapabilityProviderIds(capability: Capability): strin
|
|
|
52
54
|
export declare function getProviderApplicabilityGuard(capability: Capability, providerId: string): ((input: Record<string, unknown>) => boolean) | undefined;
|
|
53
55
|
/**
|
|
54
56
|
* Get the ordered provider list for a capability.
|
|
55
|
-
* Returns a
|
|
57
|
+
* Returns a frozen sorted copy — cached after the first call (registry is static).
|
|
56
58
|
*/
|
|
57
59
|
export declare function getProviders(capability: Capability): ProviderEntry[];
|
|
58
60
|
/**
|
|
59
61
|
* Get providers for search_web, reordering for neural search preference.
|
|
62
|
+
* Result is cached per preferNeural value — registry is static.
|
|
60
63
|
*/
|
|
61
64
|
export declare function getSearchWebProviders(preferNeural: boolean): ProviderEntry[];
|
|
62
65
|
//# sourceMappingURL=registry.d.ts.map
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC;;;;OAIG;IACH,cAAc,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAA;IACtD,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;IACtC,kDAAkD;IAClD,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAA;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IACvG,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;IACrC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;IAC1D;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;CACxE;AAED,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,aAAa,GACb,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,YAAY,GACZ,cAAc,GACd,oBAAoB,CAAA;AA0CxB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC;;;;OAIG;IACH,cAAc,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAA;IACtD,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;IACtC,kDAAkD;IAClD,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAA;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IACvG,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;IACrC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;IAC1D;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;CACxE;AAED,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,aAAa,GACb,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,YAAY,GACZ,cAAc,GACd,oBAAoB,CAAA;AA0CxB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD;AAgCD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAclE;AAKD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAGpF;AA08FD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAE1E;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,GACjB,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,SAAS,CAI3D;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,EAAE,CASpE;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,OAAO,GAAG,aAAa,EAAE,CAkB5E"}
|
package/dist/registry.js
CHANGED
|
@@ -46,6 +46,65 @@ export function isoCountryToName(code) {
|
|
|
46
46
|
return code;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
+
// Reverse lookup: English country name → ISO 3166-1 alpha-2. Built lazily on first use.
|
|
50
|
+
// Agents routinely pass "Brazil" / "United States" instead of "BR" / "US" — without this
|
|
51
|
+
// coercion, downstream providers that require ISO codes (LeadsFactory, BlitzAPI) silently
|
|
52
|
+
// skip the filter.
|
|
53
|
+
let _nameToCode;
|
|
54
|
+
function buildNameToCode() {
|
|
55
|
+
const map = new Map();
|
|
56
|
+
// Iterate all ISO-2 codes A-Z × A-Z; keep those Intl.DisplayNames resolves.
|
|
57
|
+
for (let a = 65; a <= 90; a++) {
|
|
58
|
+
for (let b = 65; b <= 90; b++) {
|
|
59
|
+
const code = String.fromCharCode(a, b);
|
|
60
|
+
try {
|
|
61
|
+
const name = _displayNames.of(code);
|
|
62
|
+
if (name && name !== code)
|
|
63
|
+
map.set(name.toLowerCase(), code);
|
|
64
|
+
}
|
|
65
|
+
catch { /* skip */ }
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Common aliases not covered by Intl.DisplayNames defaults.
|
|
69
|
+
map.set('usa', 'US');
|
|
70
|
+
map.set('uk', 'GB');
|
|
71
|
+
map.set('south korea', 'KR');
|
|
72
|
+
map.set('north korea', 'KP');
|
|
73
|
+
map.set('russia', 'RU');
|
|
74
|
+
map.set('iran', 'IR');
|
|
75
|
+
map.set('syria', 'SY');
|
|
76
|
+
map.set('uae', 'AE');
|
|
77
|
+
map.set('emirates', 'AE');
|
|
78
|
+
return map;
|
|
79
|
+
}
|
|
80
|
+
export function nameToIsoCountry(input) {
|
|
81
|
+
if (typeof input !== 'string' || input.length === 0)
|
|
82
|
+
return undefined;
|
|
83
|
+
if (!_nameToCode)
|
|
84
|
+
_nameToCode = buildNameToCode();
|
|
85
|
+
// Check aliases first — "UK" matches the ISO-2 regex but is not a valid code (GB is).
|
|
86
|
+
const aliased = _nameToCode.get(input.trim().toLowerCase());
|
|
87
|
+
if (aliased)
|
|
88
|
+
return aliased;
|
|
89
|
+
if (_ALPHA2_RE.test(input)) {
|
|
90
|
+
const upper = input.toUpperCase();
|
|
91
|
+
// Only accept if Intl actually resolves it — rejects "ZZ" etc.
|
|
92
|
+
try {
|
|
93
|
+
if (_displayNames.of(upper))
|
|
94
|
+
return upper;
|
|
95
|
+
}
|
|
96
|
+
catch { /* fall through */ }
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
// Coerce a list of strings (mix of ISO-2 codes and country names) into ISO-2 codes.
|
|
101
|
+
// Unrecognized inputs are dropped (rather than passed through) so providers don't
|
|
102
|
+
// receive garbage like { code: "Brazil", name: "Brazil" }.
|
|
103
|
+
export function coerceCountriesToIso(values) {
|
|
104
|
+
if (!values?.length)
|
|
105
|
+
return [];
|
|
106
|
+
return values.map((v) => nameToIsoCountry(v)).filter((c) => typeof c === 'string');
|
|
107
|
+
}
|
|
49
108
|
function readNested(obj, path) {
|
|
50
109
|
return path.split('.').reduce((acc, key) => (acc && typeof acc === 'object' ? acc[key] : undefined), obj);
|
|
51
110
|
}
|
|
@@ -127,9 +186,12 @@ const searchCompaniesProviders = [
|
|
|
127
186
|
method: 'POST',
|
|
128
187
|
priority: 1,
|
|
129
188
|
mapParams: (input) => {
|
|
130
|
-
// CompanyEnrich
|
|
131
|
-
//
|
|
132
|
-
|
|
189
|
+
// CompanyEnrich's `keywords` body field is a tag filter that does not match
|
|
190
|
+
// brand names — sending "wework" returns global defaults instead of WeWork.
|
|
191
|
+
// Route free-text input through `query` (full-text on company name + domain).
|
|
192
|
+
// Industries are folded into the same string because CompanyEnrich's `industries`
|
|
193
|
+
// field requires exact taxonomy matches and rejects free-text like "SaaS".
|
|
194
|
+
const queryTerms = [
|
|
133
195
|
...(input.keywords ?? []),
|
|
134
196
|
...(input.industries ?? []),
|
|
135
197
|
];
|
|
@@ -143,7 +205,7 @@ const searchCompaniesProviders = [
|
|
|
143
205
|
return {
|
|
144
206
|
body: {
|
|
145
207
|
countries: input.countries,
|
|
146
|
-
|
|
208
|
+
query: queryTerms.length > 0 ? queryTerms.join(' ') : undefined,
|
|
147
209
|
technologies: isNonEmptyArray(input.technologies) ? input.technologies : undefined,
|
|
148
210
|
employees: input.min_employees || input.max_employees
|
|
149
211
|
? [{ from: input.min_employees, to: input.max_employees }]
|
|
@@ -556,13 +618,20 @@ const searchCompaniesProviders = [
|
|
|
556
618
|
endpoint: '/theirstack/companies/search',
|
|
557
619
|
method: 'POST',
|
|
558
620
|
priority: 4,
|
|
559
|
-
isApplicable: (input) => isNonEmptyArray(input.
|
|
621
|
+
isApplicable: (input) => isNonEmptyArray(input.keywords) ||
|
|
622
|
+
isNonEmptyArray(input.technologies) ||
|
|
560
623
|
isNonEmptyArray(input.industries) ||
|
|
561
624
|
isNonEmptyArray(input.funding_stages) ||
|
|
562
625
|
typeof input.min_funding_amount === 'number' ||
|
|
563
626
|
typeof input.max_funding_amount === 'number',
|
|
564
627
|
mapParams: (input) => ({
|
|
565
628
|
body: {
|
|
629
|
+
// TheirStack expects slug-form keywords on company_keyword_slug_or (e.g.
|
|
630
|
+
// "sales-automation"). Normalize free-text from agents so we still hit the
|
|
631
|
+
// intent index when keywords arrive as "Sales Automation".
|
|
632
|
+
company_keyword_slug_or: isNonEmptyArray(input.keywords)
|
|
633
|
+
? input.keywords.map((k) => k.trim().toLowerCase().replace(/\s+/g, '-'))
|
|
634
|
+
: undefined,
|
|
566
635
|
company_technology_slug_or: isNonEmptyArray(input.technologies) ? input.technologies : undefined,
|
|
567
636
|
industry_or: input.industries,
|
|
568
637
|
company_country_code_or: input.countries,
|
|
@@ -886,6 +955,14 @@ const findPeopleProviders = [
|
|
|
886
955
|
? [...groups.values()].map((titles) => ({ job_title: titles.join(', ') }))
|
|
887
956
|
: [{ job_title: 'Decision Maker' }];
|
|
888
957
|
const hasLinkedInUrls = isNonEmptyArray(input.company_linkedin_urls);
|
|
958
|
+
// LF natively scopes contacts by person location via country_codes. Coerce
|
|
959
|
+
// input.locations (which agents pass as a mix of ISO-2 codes "BR" and country
|
|
960
|
+
// names "Brazil") to ISO-2 first — LF rejects/ignores anything else and silently
|
|
961
|
+
// returns unfiltered global results.
|
|
962
|
+
const isoCodes = coerceCountriesToIso(input.locations);
|
|
963
|
+
const country_codes = isoCodes.length > 0
|
|
964
|
+
? isoCodes.map((code) => ({ code, name: isoCountryToName(code) }))
|
|
965
|
+
: undefined;
|
|
889
966
|
return {
|
|
890
967
|
body: {
|
|
891
968
|
...(hasLinkedInUrls && { company_linkedin_urls: input.company_linkedin_urls }),
|
|
@@ -896,6 +973,7 @@ const findPeopleProviders = [
|
|
|
896
973
|
search: {
|
|
897
974
|
max_persona_results: input.limit ?? 25,
|
|
898
975
|
personas,
|
|
976
|
+
...(country_codes && { country_codes }),
|
|
899
977
|
},
|
|
900
978
|
},
|
|
901
979
|
};
|
|
@@ -903,23 +981,24 @@ const findPeopleProviders = [
|
|
|
903
981
|
hasResult: (data) => {
|
|
904
982
|
const d = data;
|
|
905
983
|
return (isNonEmptyArray(d.companies_personas) ||
|
|
906
|
-
(d.status === 'SUCCESSFUL' &&
|
|
984
|
+
(d.status === 'SUCCESSFUL' && d.nb_jobs_complete != null && d.nb_jobs_complete > 0));
|
|
907
985
|
},
|
|
908
986
|
async: {
|
|
909
987
|
pollEndpoint: (id) => `/leadsfactory/contact-finder/searches/${id}`,
|
|
910
|
-
//
|
|
911
|
-
//
|
|
912
|
-
|
|
913
|
-
pollIntervalMs: (attempt) => attempt === 1 ? 3000 : attempt === 2 ? 7000 : 15000 + (attempt - 3) * 10000,
|
|
988
|
+
// Growing backoff: fast early probes, then steady growth bounded by timeoutMs.
|
|
989
|
+
// Schedule: 2s, 5s, 12s, 20s, 28s, 36s, +8s per attempt thereafter.
|
|
990
|
+
pollIntervalMs: (attempt) => attempt === 1 ? 2000 : attempt === 2 ? 5000 : 12000 + (attempt - 3) * 8000,
|
|
914
991
|
timeoutMs: 300_000, // 5 minutes
|
|
915
992
|
isComplete: (data) => {
|
|
916
993
|
const d = data;
|
|
917
994
|
const status = d.status;
|
|
918
|
-
return status === 'SUCCESSFUL' || status === 'FAILED';
|
|
995
|
+
return status === 'SUCCESSFUL' || status === 'FAILED' || status === 'INVALID_URL';
|
|
919
996
|
},
|
|
920
997
|
extractId: (response) => {
|
|
921
998
|
const d = response;
|
|
922
|
-
|
|
999
|
+
// LeadsFactory's upstream returns the ObjectId as `id`; the short `search_id`
|
|
1000
|
+
// cannot be used as the GET param (upstream rejects it as "not a valid ObjectId").
|
|
1001
|
+
return d.id ?? d.search_id;
|
|
923
1002
|
},
|
|
924
1003
|
},
|
|
925
1004
|
},
|
|
@@ -942,6 +1021,41 @@ const findPeopleProviders = [
|
|
|
942
1021
|
const d = data;
|
|
943
1022
|
return isNonEmptyArray(d.people) || isNonEmptyArray(d.contacts);
|
|
944
1023
|
},
|
|
1024
|
+
// Apollo's `q_organization_domains` is a soft hint — when titles match strongly,
|
|
1025
|
+
// Apollo returns people from other companies whose title fits (e.g. a CEO seller
|
|
1026
|
+
// on the Hotmart platform, or a random Brazilian CEO when filtering by WeWork).
|
|
1027
|
+
// Strict-filter post-hoc by the person's actual employer domain when the caller
|
|
1028
|
+
// supplied company identifiers.
|
|
1029
|
+
postFilter: (data, input) => {
|
|
1030
|
+
const wantDomains = (input.company_domains ?? [])
|
|
1031
|
+
.map((d) => d.toLowerCase().replace(/^https?:\/\//, '').replace(/^www\./, '').split('/')[0])
|
|
1032
|
+
.filter(Boolean);
|
|
1033
|
+
const wantLinkedIns = (input.company_linkedin_urls ?? [])
|
|
1034
|
+
.map((u) => u.toLowerCase().replace(/^https?:\/\//, '').replace(/^www\./, '').replace(/\/+$/, ''))
|
|
1035
|
+
.filter(Boolean);
|
|
1036
|
+
if (wantDomains.length === 0 && wantLinkedIns.length === 0)
|
|
1037
|
+
return data;
|
|
1038
|
+
const d = { ...data };
|
|
1039
|
+
const people = d.people ?? [];
|
|
1040
|
+
d.people = people.filter((p) => {
|
|
1041
|
+
const org = p.organization;
|
|
1042
|
+
const orgWebsite = org?.website_url?.toLowerCase()
|
|
1043
|
+
.replace(/^https?:\/\//, '').replace(/^www\./, '').split('/')[0];
|
|
1044
|
+
const orgLinkedIn = org?.linkedin_url?.toLowerCase()
|
|
1045
|
+
.replace(/^https?:\/\//, '').replace(/^www\./, '').replace(/\/+$/, '');
|
|
1046
|
+
// Keep only if the person's employer matches one of the requested companies.
|
|
1047
|
+
// Lenient when the field is missing — providers occasionally omit org details
|
|
1048
|
+
// but the person is still a match (e.g. found via name+title lookup).
|
|
1049
|
+
if (orgWebsite && wantDomains.length > 0 && wantDomains.includes(orgWebsite))
|
|
1050
|
+
return true;
|
|
1051
|
+
if (orgLinkedIn && wantLinkedIns.length > 0 && wantLinkedIns.some((u) => orgLinkedIn === u))
|
|
1052
|
+
return true;
|
|
1053
|
+
// If we have org info but neither matches, drop. If we have no org info at all, drop too —
|
|
1054
|
+
// safer to lose an unverified record than to include a false positive.
|
|
1055
|
+
return false;
|
|
1056
|
+
});
|
|
1057
|
+
return d;
|
|
1058
|
+
},
|
|
945
1059
|
},
|
|
946
1060
|
{
|
|
947
1061
|
id: 'pdl',
|
|
@@ -1299,7 +1413,7 @@ const findEmailProviders = [
|
|
|
1299
1413
|
return d.enrichment_id;
|
|
1300
1414
|
},
|
|
1301
1415
|
pollEndpoint: (id) => `/fullenrich/contact/enrich/bulk/${id}`,
|
|
1302
|
-
pollIntervalMs:
|
|
1416
|
+
pollIntervalMs: 2500,
|
|
1303
1417
|
timeoutMs: 60_000,
|
|
1304
1418
|
isComplete: (data) => {
|
|
1305
1419
|
const d = data;
|
|
@@ -1395,7 +1509,7 @@ const verifyEmailProviders = [
|
|
|
1395
1509
|
throw new Error('Instantly verification response has no email field');
|
|
1396
1510
|
},
|
|
1397
1511
|
pollEndpoint: (email) => `/instantly/email-verification/${encodeURIComponent(email)}`,
|
|
1398
|
-
pollIntervalMs:
|
|
1512
|
+
pollIntervalMs: 1500,
|
|
1399
1513
|
timeoutMs: 30_000,
|
|
1400
1514
|
isComplete: (data) => {
|
|
1401
1515
|
const d = data;
|
|
@@ -1808,7 +1922,7 @@ function _hasJobFilter(input, keys) {
|
|
|
1808
1922
|
});
|
|
1809
1923
|
}
|
|
1810
1924
|
const _jobsSharedAsync = {
|
|
1811
|
-
pollIntervalMs:
|
|
1925
|
+
pollIntervalMs: (attempt) => (attempt === 1 ? 1500 : attempt <= 3 ? 2500 : 4000),
|
|
1812
1926
|
timeoutMs: 300_000,
|
|
1813
1927
|
extractId: (data) => {
|
|
1814
1928
|
const jobId = data.jobId;
|
|
@@ -1938,7 +2052,7 @@ const searchJobsProviders = [
|
|
|
1938
2052
|
// search_ads
|
|
1939
2053
|
// ---------------------------------------------------------------------------
|
|
1940
2054
|
const _adsSharedAsync = {
|
|
1941
|
-
pollIntervalMs:
|
|
2055
|
+
pollIntervalMs: (attempt) => (attempt === 1 ? 1500 : attempt <= 3 ? 2500 : 4000),
|
|
1942
2056
|
timeoutMs: 300_000,
|
|
1943
2057
|
extractId: (data) => {
|
|
1944
2058
|
const jobId = data.jobId;
|
|
@@ -2114,7 +2228,7 @@ function _hasAny(input, keys) {
|
|
|
2114
2228
|
return false;
|
|
2115
2229
|
}
|
|
2116
2230
|
const _placesSharedAsync = {
|
|
2117
|
-
pollIntervalMs:
|
|
2231
|
+
pollIntervalMs: (attempt) => (attempt === 1 ? 1500 : attempt <= 3 ? 2500 : 4000),
|
|
2118
2232
|
timeoutMs: 300_000,
|
|
2119
2233
|
extractId: (data) => {
|
|
2120
2234
|
const jobId = data.jobId;
|
|
@@ -2283,7 +2397,7 @@ const findInfluencersProviders = [
|
|
|
2283
2397
|
// search_reddit
|
|
2284
2398
|
// ---------------------------------------------------------------------------
|
|
2285
2399
|
const _redditSharedAsync = {
|
|
2286
|
-
pollIntervalMs:
|
|
2400
|
+
pollIntervalMs: (attempt) => (attempt === 1 ? 1500 : attempt <= 3 ? 2500 : 4000),
|
|
2287
2401
|
timeoutMs: 300_000,
|
|
2288
2402
|
extractId: (data) => {
|
|
2289
2403
|
const jobId = data.jobId;
|
|
@@ -3015,31 +3129,45 @@ export function getProviderApplicabilityGuard(capability, providerId) {
|
|
|
3015
3129
|
return undefined;
|
|
3016
3130
|
return providers.find((p) => p.id === providerId)?.isApplicable;
|
|
3017
3131
|
}
|
|
3132
|
+
const _providersCache = new Map();
|
|
3018
3133
|
/**
|
|
3019
3134
|
* Get the ordered provider list for a capability.
|
|
3020
|
-
* Returns a
|
|
3135
|
+
* Returns a frozen sorted copy — cached after the first call (registry is static).
|
|
3021
3136
|
*/
|
|
3022
3137
|
export function getProviders(capability) {
|
|
3023
|
-
|
|
3024
|
-
if (!
|
|
3025
|
-
|
|
3026
|
-
|
|
3138
|
+
let cached = _providersCache.get(capability);
|
|
3139
|
+
if (!cached) {
|
|
3140
|
+
const providers = registry[capability];
|
|
3141
|
+
if (!providers)
|
|
3142
|
+
throw new Error(`Unknown capability: ${capability}`);
|
|
3143
|
+
cached = Object.freeze([...providers].sort((a, b) => a.priority - b.priority));
|
|
3144
|
+
_providersCache.set(capability, cached);
|
|
3145
|
+
}
|
|
3146
|
+
return cached;
|
|
3027
3147
|
}
|
|
3148
|
+
const _searchWebProvidersCache = new Map();
|
|
3028
3149
|
/**
|
|
3029
3150
|
* Get providers for search_web, reordering for neural search preference.
|
|
3151
|
+
* Result is cached per preferNeural value — registry is static.
|
|
3030
3152
|
*/
|
|
3031
3153
|
export function getSearchWebProviders(preferNeural) {
|
|
3032
|
-
|
|
3033
|
-
if (
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3154
|
+
let cached = _searchWebProvidersCache.get(preferNeural);
|
|
3155
|
+
if (!cached) {
|
|
3156
|
+
const base = getProviders('search_web');
|
|
3157
|
+
if (preferNeural) {
|
|
3158
|
+
cached = Object.freeze([...base].sort((a, b) => {
|
|
3159
|
+
if (a.id === 'exa')
|
|
3160
|
+
return -1;
|
|
3161
|
+
if (b.id === 'exa')
|
|
3162
|
+
return 1;
|
|
3163
|
+
return a.priority - b.priority;
|
|
3164
|
+
}));
|
|
3165
|
+
}
|
|
3166
|
+
else {
|
|
3167
|
+
cached = base;
|
|
3168
|
+
}
|
|
3169
|
+
_searchWebProvidersCache.set(preferNeural, cached);
|
|
3042
3170
|
}
|
|
3043
|
-
return
|
|
3171
|
+
return cached;
|
|
3044
3172
|
}
|
|
3045
3173
|
//# sourceMappingURL=registry.js.map
|