@coldiq/mcp 5.4.3 → 5.4.4
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/ai-ark-mapping.d.ts +97 -0
- package/dist/ai-ark-mapping.d.ts.map +1 -0
- package/dist/ai-ark-mapping.js +162 -0
- package/dist/ai-ark-mapping.js.map +1 -0
- package/dist/provider-availability.d.ts.map +1 -1
- package/dist/provider-availability.js +4 -0
- package/dist/provider-availability.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +5 -52
- package/dist/registry.js.map +1 -1
- package/dist/utils/provider-resolver.js +2 -2
- package/dist/utils/provider-resolver.js.map +1 -1
- package/package.json +1 -1
- package/src/ai-ark-mapping.ts +175 -0
- package/src/provider-availability.ts +4 -0
- package/src/registry.ts +10 -54
- package/src/utils/provider-resolver.ts +2 -2
- package/tests/provider-availability.test.ts +21 -0
- package/tests/registry-find-people.test.ts +33 -7
- package/tests/registry-search-companies.test.ts +36 -9
- package/tests/registry.test.ts +8 -9
- package/tests/version.test.ts +14 -1
|
@@ -130,14 +130,14 @@ const GATED_DESCRIPTIONS = {
|
|
|
130
130
|
'linkupapi-fundraising': { kind: 'requires', fields: 'funding filters and keywords or industries' },
|
|
131
131
|
'linkupapi-hiring': { kind: 'requires', fields: 'is_hiring: true' },
|
|
132
132
|
'prospeo-search-company': { kind: 'requires', fields: 'keywords, industries, or countries' },
|
|
133
|
-
'ai-ark-companies': { kind: 'requires', fields: 'keywords, industries, or
|
|
133
|
+
'ai-ark-companies': { kind: 'requires', fields: 'keywords, industries, countries, similar_to_domains, funding_stages, or employee range' },
|
|
134
134
|
},
|
|
135
135
|
// -------------------------------------------------------------------------
|
|
136
136
|
find_people: {
|
|
137
137
|
'linkupapi-search-profiles': { kind: 'incompatible_with', fields: 'company_linkedin_urls or company_domains (this provider only works without company filters)' },
|
|
138
138
|
'sumble-people-find': { kind: 'requires', fields: 'company_domains or company_linkedin_urls, and job_titles or seniorities' },
|
|
139
139
|
'prospeo-search-person': { kind: 'requires', fields: 'job_titles or company_domains' },
|
|
140
|
-
'ai-ark-people': { kind: 'requires', fields: 'job_titles, seniorities, or
|
|
140
|
+
'ai-ark-people': { kind: 'requires', fields: 'job_titles, seniorities, keywords, locations, or company identifiers' },
|
|
141
141
|
'findymail-search-employees': { kind: 'requires', fields: 'company_domains and job_titles' },
|
|
142
142
|
'fullenrich-people-search': { kind: 'requires', fields: 'company_domains (upstream does not accept LinkedIn URL filters)' },
|
|
143
143
|
pdl: { kind: 'requires', fields: 'company_domains, company_linkedin_urls, job_titles, or seniorities' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-resolver.js","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provider-resolver.js","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// Standalone-package mirror of src/router/ai-ark-mapping.ts.
|
|
2
|
+
import { z } from 'zod'
|
|
3
|
+
|
|
4
|
+
const AI_ARK_FUNDING_STAGES = new Set([
|
|
5
|
+
'PRE_SEED', 'SEED', 'SERIES_A', 'SERIES_B', 'SERIES_C', 'SERIES_D', 'SERIES_E',
|
|
6
|
+
'SERIES_F', 'SERIES_G', 'SERIES_H', 'SERIES_I', 'SERIES_J', 'VENTURE_ROUND',
|
|
7
|
+
'ANGEL', 'PRIVATE_EQUITY', 'DEBT_FINANCING', 'CONVERTIBLE_NOTE', 'GRANT',
|
|
8
|
+
'CORPORATE_ROUND', 'EQUITY_CROWDFUNDING', 'PRODUCT_CROWDFUNDING',
|
|
9
|
+
'SECONDARY_MARKET', 'POST_IPO_EQUITY', 'POST_IPO_DEBT', 'POST_IPO_SECONDARY',
|
|
10
|
+
'NON_EQUITY_ASSISTANCE', 'INITIAL_COIN_OFFERING', 'UNDISCLOSED',
|
|
11
|
+
'SERIES_UNKNOWN', 'FUNDING_ROUND',
|
|
12
|
+
])
|
|
13
|
+
|
|
14
|
+
const AI_ARK_SENIORITY_ALIASES = new Map(Object.entries({
|
|
15
|
+
founder: 'founder', owner: 'owner', partner: 'partner',
|
|
16
|
+
c_suite: 'c_suite', c_level: 'c_suite', executive: 'c_suite',
|
|
17
|
+
vp: 'vp', vice_president: 'vp', director: 'director', head: 'head',
|
|
18
|
+
manager: 'manager', senior: 'senior', mid_level: 'mid-level',
|
|
19
|
+
individual_contributor: 'mid-level', entry: 'entry', entry_level: 'entry', intern: 'intern',
|
|
20
|
+
} as const))
|
|
21
|
+
|
|
22
|
+
const StringListSchema = z.array(z.string()).default([])
|
|
23
|
+
const AiArkLookalikeDomainsSchema = z.array(z.string()).max(5).default([])
|
|
24
|
+
|
|
25
|
+
const CompanySearchInputSchema = z.object({
|
|
26
|
+
keywords: StringListSchema,
|
|
27
|
+
industries: StringListSchema,
|
|
28
|
+
countries: StringListSchema,
|
|
29
|
+
similar_to_domains: AiArkLookalikeDomainsSchema,
|
|
30
|
+
funding_stages: StringListSchema,
|
|
31
|
+
min_employees: z.number().optional(),
|
|
32
|
+
max_employees: z.number().optional(),
|
|
33
|
+
limit: z.number().int().positive().default(10),
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
const PeopleSearchInputSchema = z.object({
|
|
37
|
+
job_titles: StringListSchema,
|
|
38
|
+
seniorities: StringListSchema,
|
|
39
|
+
keywords: StringListSchema,
|
|
40
|
+
locations: StringListSchema,
|
|
41
|
+
company_domains: StringListSchema,
|
|
42
|
+
company_linkedin_urls: StringListSchema,
|
|
43
|
+
limit: z.number().int().positive().default(10),
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
function toAiArkFundingStage(stage: string): string | undefined {
|
|
47
|
+
const normalized = stage.trim().toUpperCase().replace(/[^A-Z0-9]+/g, '_').replace(/^_|_$/g, '')
|
|
48
|
+
return AI_ARK_FUNDING_STAGES.has(normalized) ? normalized : undefined
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function toAiArkSeniority(value: string): string | undefined {
|
|
52
|
+
const normalized = value.trim().toLowerCase().replace(/[\s-]+/g, '_')
|
|
53
|
+
return AI_ARK_SENIORITY_ALIASES.get(normalized)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function isAiArkCompanySearchApplicable<Input extends object>(input: Input): boolean {
|
|
57
|
+
const parsed = CompanySearchInputSchema.safeParse(input)
|
|
58
|
+
if (!parsed.success) return false
|
|
59
|
+
const value = parsed.data
|
|
60
|
+
return value.keywords.length > 0
|
|
61
|
+
|| value.industries.length > 0
|
|
62
|
+
|| value.countries.length > 0
|
|
63
|
+
|| value.similar_to_domains.length > 0
|
|
64
|
+
|| value.funding_stages.some((stage) => toAiArkFundingStage(stage) !== undefined)
|
|
65
|
+
|| value.min_employees !== undefined
|
|
66
|
+
|| value.max_employees !== undefined
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function mapAiArkCompanySearchParams<Input extends object>(
|
|
70
|
+
input: Input,
|
|
71
|
+
countryNameOf: (countryCode: string) => string,
|
|
72
|
+
) {
|
|
73
|
+
const value = CompanySearchInputSchema.parse(input)
|
|
74
|
+
const fundingStages = value.funding_stages
|
|
75
|
+
.map(toAiArkFundingStage)
|
|
76
|
+
.filter((stage): stage is string => stage !== undefined)
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
body: {
|
|
80
|
+
...(value.similar_to_domains.length > 0 && { lookalikeDomains: value.similar_to_domains }),
|
|
81
|
+
account: {
|
|
82
|
+
...(value.industries.length > 0 && {
|
|
83
|
+
industries: { any: { include: { mode: 'WORD', content: value.industries } } },
|
|
84
|
+
}),
|
|
85
|
+
...(value.keywords.length > 0 && {
|
|
86
|
+
keyword: {
|
|
87
|
+
any: {
|
|
88
|
+
include: {
|
|
89
|
+
sources: [
|
|
90
|
+
{ mode: 'SMART', source: 'NAME' },
|
|
91
|
+
{ mode: 'SMART', source: 'KEYWORD' },
|
|
92
|
+
{ mode: 'SMART', source: 'DESCRIPTION' },
|
|
93
|
+
{ mode: 'SMART', source: 'SEO' },
|
|
94
|
+
],
|
|
95
|
+
content: value.keywords,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
}),
|
|
100
|
+
...(value.countries.length > 0 && {
|
|
101
|
+
location: { any: { include: value.countries.map(countryNameOf) } },
|
|
102
|
+
}),
|
|
103
|
+
...((value.min_employees !== undefined || value.max_employees !== undefined) && {
|
|
104
|
+
employeeSize: {
|
|
105
|
+
type: 'RANGE',
|
|
106
|
+
range: [{ start: value.min_employees, end: value.max_employees }],
|
|
107
|
+
},
|
|
108
|
+
}),
|
|
109
|
+
...(fundingStages.length > 0 && { funding: { type: fundingStages } }),
|
|
110
|
+
},
|
|
111
|
+
size: Math.min(value.limit, 100),
|
|
112
|
+
},
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function isAiArkPeopleSearchApplicable<Input extends object>(input: Input): boolean {
|
|
117
|
+
const parsed = PeopleSearchInputSchema.safeParse(input)
|
|
118
|
+
if (!parsed.success) return false
|
|
119
|
+
const value = parsed.data
|
|
120
|
+
return value.job_titles.length > 0
|
|
121
|
+
|| value.seniorities.some((seniority) => toAiArkSeniority(seniority) !== undefined)
|
|
122
|
+
|| value.keywords.length > 0
|
|
123
|
+
|| value.locations.length > 0
|
|
124
|
+
|| value.company_domains.length > 0
|
|
125
|
+
|| value.company_linkedin_urls.length > 0
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function mapAiArkPeopleSearchParams<Input extends object>(input: Input) {
|
|
129
|
+
const value = PeopleSearchInputSchema.parse(input)
|
|
130
|
+
const seniorities = value.seniorities
|
|
131
|
+
.map(toAiArkSeniority)
|
|
132
|
+
.filter((seniority): seniority is string => seniority !== undefined)
|
|
133
|
+
|
|
134
|
+
return {
|
|
135
|
+
body: {
|
|
136
|
+
...((value.company_domains.length > 0 || value.company_linkedin_urls.length > 0) && {
|
|
137
|
+
account: {
|
|
138
|
+
...(value.company_domains.length > 0 && {
|
|
139
|
+
domain: { any: { include: value.company_domains } },
|
|
140
|
+
}),
|
|
141
|
+
...(value.company_linkedin_urls.length > 0 && {
|
|
142
|
+
linkedin: { any: { include: value.company_linkedin_urls } },
|
|
143
|
+
}),
|
|
144
|
+
},
|
|
145
|
+
}),
|
|
146
|
+
contact: {
|
|
147
|
+
...(value.job_titles.length > 0 && {
|
|
148
|
+
experience: {
|
|
149
|
+
latest: {
|
|
150
|
+
title: { any: { include: { mode: 'SMART', content: value.job_titles } } },
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
}),
|
|
154
|
+
...(seniorities.length > 0 && { seniority: { any: { include: seniorities } } }),
|
|
155
|
+
...(value.locations.length > 0 && {
|
|
156
|
+
location: { any: { include: value.locations } },
|
|
157
|
+
}),
|
|
158
|
+
...(value.keywords.length > 0 && {
|
|
159
|
+
keyword: {
|
|
160
|
+
any: {
|
|
161
|
+
include: {
|
|
162
|
+
sources: [
|
|
163
|
+
{ mode: 'SMART', source: 'HEADLINE' },
|
|
164
|
+
{ mode: 'SMART', source: 'SUMMARY' },
|
|
165
|
+
],
|
|
166
|
+
content: value.keywords,
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
}),
|
|
171
|
+
},
|
|
172
|
+
size: Math.min(value.limit, 100),
|
|
173
|
+
},
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -6,11 +6,15 @@
|
|
|
6
6
|
* configured and testable while public routing and tool schemas omit them.
|
|
7
7
|
*/
|
|
8
8
|
const DISABLED_PROVIDERS = new Set([
|
|
9
|
+
'blitzapi',
|
|
9
10
|
'companyenrich',
|
|
10
11
|
'people-data-labs',
|
|
11
12
|
])
|
|
12
13
|
|
|
13
14
|
const PROVIDER_ALIASES: Record<string, string> = {
|
|
15
|
+
blitz: 'blitzapi',
|
|
16
|
+
'blitz-api': 'blitzapi',
|
|
17
|
+
'blitzapi-reverse-email': 'blitzapi',
|
|
14
18
|
'company-enrich': 'companyenrich',
|
|
15
19
|
'companyenrich-props': 'companyenrich',
|
|
16
20
|
pdl: 'people-data-labs',
|
package/src/registry.ts
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
|
|
5
5
|
import { isProviderEnabled } from './provider-availability.js'
|
|
6
|
+
import {
|
|
7
|
+
isAiArkCompanySearchApplicable,
|
|
8
|
+
isAiArkPeopleSearchApplicable,
|
|
9
|
+
mapAiArkCompanySearchParams,
|
|
10
|
+
mapAiArkPeopleSearchParams,
|
|
11
|
+
} from './ai-ark-mapping.js'
|
|
6
12
|
|
|
7
13
|
export interface AsyncConfig {
|
|
8
14
|
/** Build the poll endpoint path from the ID returned by the create call */
|
|
@@ -1069,37 +1075,8 @@ const searchCompaniesProviders: ProviderEntry[] = [
|
|
|
1069
1075
|
endpoint: '/ai-ark/companies',
|
|
1070
1076
|
method: 'POST',
|
|
1071
1077
|
priority: 18,
|
|
1072
|
-
isApplicable:
|
|
1073
|
-
|
|
1074
|
-
isNonEmptyArray(input.industries) ||
|
|
1075
|
-
isNonEmptyArray(input.countries),
|
|
1076
|
-
mapParams: (input) => ({
|
|
1077
|
-
body: {
|
|
1078
|
-
account: {
|
|
1079
|
-
...(isNonEmptyArray(input.industries) && {
|
|
1080
|
-
industries: { any: { include: input.industries } },
|
|
1081
|
-
}),
|
|
1082
|
-
...(isNonEmptyArray(input.countries) && {
|
|
1083
|
-
location: { any: { include: (input.countries as string[]).map(isoCountryToName) } },
|
|
1084
|
-
}),
|
|
1085
|
-
...((input.min_employees !== undefined || input.max_employees !== undefined) && {
|
|
1086
|
-
employeeSize: {
|
|
1087
|
-
type: 'RANGE',
|
|
1088
|
-
range: [{ start: input.min_employees, end: input.max_employees }],
|
|
1089
|
-
},
|
|
1090
|
-
}),
|
|
1091
|
-
...(isNonEmptyArray(input.funding_stages) && {
|
|
1092
|
-
funding: { stage: { include: input.funding_stages } },
|
|
1093
|
-
}),
|
|
1094
|
-
},
|
|
1095
|
-
...(isNonEmptyArray(input.keywords) && {
|
|
1096
|
-
contact: {
|
|
1097
|
-
keywordsInProfile: { any: { include: input.keywords } },
|
|
1098
|
-
},
|
|
1099
|
-
}),
|
|
1100
|
-
size: Math.min((input.limit as number | undefined) ?? 10, 100),
|
|
1101
|
-
},
|
|
1102
|
-
}),
|
|
1078
|
+
isApplicable: isAiArkCompanySearchApplicable,
|
|
1079
|
+
mapParams: (input) => mapAiArkCompanySearchParams(input, isoCountryToName),
|
|
1103
1080
|
hasResult: (data) => {
|
|
1104
1081
|
const d = data as Record<string, unknown>
|
|
1105
1082
|
return isNonEmptyArray(d.content)
|
|
@@ -1518,29 +1495,8 @@ const findPeopleProviders: ProviderEntry[] = [
|
|
|
1518
1495
|
endpoint: '/ai-ark/people',
|
|
1519
1496
|
method: 'POST',
|
|
1520
1497
|
priority: 8,
|
|
1521
|
-
isApplicable:
|
|
1522
|
-
|
|
1523
|
-
isNonEmptyArray(input.seniorities) ||
|
|
1524
|
-
isNonEmptyArray(input.keywords),
|
|
1525
|
-
mapParams: (input) => ({
|
|
1526
|
-
body: {
|
|
1527
|
-
contact: {
|
|
1528
|
-
...(isNonEmptyArray(input.job_titles) && {
|
|
1529
|
-
departmentAndFunction: { any: { include: input.job_titles } },
|
|
1530
|
-
}),
|
|
1531
|
-
...(isNonEmptyArray(input.seniorities) && {
|
|
1532
|
-
seniority: { any: { include: input.seniorities } },
|
|
1533
|
-
}),
|
|
1534
|
-
...(isNonEmptyArray(input.locations) && {
|
|
1535
|
-
location: { any: { include: input.locations } },
|
|
1536
|
-
}),
|
|
1537
|
-
...(isNonEmptyArray(input.keywords) && {
|
|
1538
|
-
keywordsInProfile: { any: { include: input.keywords } },
|
|
1539
|
-
}),
|
|
1540
|
-
},
|
|
1541
|
-
size: Math.min((input.limit as number | undefined) ?? 10, 100),
|
|
1542
|
-
},
|
|
1543
|
-
}),
|
|
1498
|
+
isApplicable: isAiArkPeopleSearchApplicable,
|
|
1499
|
+
mapParams: mapAiArkPeopleSearchParams,
|
|
1544
1500
|
hasResult: (data) => {
|
|
1545
1501
|
const d = data as Record<string, unknown>
|
|
1546
1502
|
return isNonEmptyArray(d.content)
|
|
@@ -202,14 +202,14 @@ const GATED_DESCRIPTIONS: Partial<Record<Capability, Partial<Record<string, Gate
|
|
|
202
202
|
'linkupapi-fundraising': { kind: 'requires', fields: 'funding filters and keywords or industries' },
|
|
203
203
|
'linkupapi-hiring': { kind: 'requires', fields: 'is_hiring: true' },
|
|
204
204
|
'prospeo-search-company': { kind: 'requires', fields: 'keywords, industries, or countries' },
|
|
205
|
-
'ai-ark-companies': { kind: 'requires', fields: 'keywords, industries, or
|
|
205
|
+
'ai-ark-companies': { kind: 'requires', fields: 'keywords, industries, countries, similar_to_domains, funding_stages, or employee range' },
|
|
206
206
|
},
|
|
207
207
|
// -------------------------------------------------------------------------
|
|
208
208
|
find_people: {
|
|
209
209
|
'linkupapi-search-profiles': { kind: 'incompatible_with', fields: 'company_linkedin_urls or company_domains (this provider only works without company filters)' },
|
|
210
210
|
'sumble-people-find': { kind: 'requires', fields: 'company_domains or company_linkedin_urls, and job_titles or seniorities' },
|
|
211
211
|
'prospeo-search-person': { kind: 'requires', fields: 'job_titles or company_domains' },
|
|
212
|
-
'ai-ark-people': { kind: 'requires', fields: 'job_titles, seniorities, or
|
|
212
|
+
'ai-ark-people': { kind: 'requires', fields: 'job_titles, seniorities, keywords, locations, or company identifiers' },
|
|
213
213
|
'findymail-search-employees': { kind: 'requires', fields: 'company_domains and job_titles' },
|
|
214
214
|
'fullenrich-people-search': { kind: 'requires', fields: 'company_domains (upstream does not accept LinkedIn URL filters)' },
|
|
215
215
|
pdl: { kind: 'requires', fields: 'company_domains, company_linkedin_urls, job_titles, or seniorities' },
|
|
@@ -2,10 +2,13 @@ import { describe, expect, it } from 'vitest'
|
|
|
2
2
|
import { isProviderEnabled as isWorkerProviderEnabled } from '../../src/lib/provider-availability.js'
|
|
3
3
|
import { isProviderEnabled } from '../src/provider-availability.js'
|
|
4
4
|
import { getConfiguredProviders, getProviders, type Capability } from '../src/registry.js'
|
|
5
|
+
import { enrichCompanySchema } from '../src/tools/enrich-company.js'
|
|
6
|
+
import { enrichPersonSchema } from '../src/tools/enrich-person.js'
|
|
5
7
|
import { findEmailSchema } from '../src/tools/find-email.js'
|
|
6
8
|
import { findEmailsSchema } from '../src/tools/find-emails.js'
|
|
7
9
|
import { findEmailsBulkSchema } from '../src/tools/find-emails-bulk.js'
|
|
8
10
|
import { getEndpointDetailsSchema } from '../src/tools/get-endpoint-details.js'
|
|
11
|
+
import { searchCompaniesSchema } from '../src/tools/search-companies.js'
|
|
9
12
|
import { listDataSourcesHandler } from '../src/tools/list-data-sources.js'
|
|
10
13
|
import {
|
|
11
14
|
FIND_EMAILS_PROVIDERS,
|
|
@@ -36,6 +39,12 @@ const CAPABILITIES: Capability[] = [
|
|
|
36
39
|
describe('standalone MCP provider availability', () => {
|
|
37
40
|
it('mirrors every disabled-provider alias from the Worker policy', () => {
|
|
38
41
|
for (const alias of [
|
|
42
|
+
'blitzapi',
|
|
43
|
+
'BlitzAPI',
|
|
44
|
+
'Blitz API',
|
|
45
|
+
'Blitz',
|
|
46
|
+
'blitzapi-reverse-email',
|
|
47
|
+
'blitzapi_reverse_email',
|
|
39
48
|
'companyenrich',
|
|
40
49
|
'CompanyEnrich',
|
|
41
50
|
'Company Enrich',
|
|
@@ -58,12 +67,17 @@ describe('standalone MCP provider availability', () => {
|
|
|
58
67
|
expect(getConfiguredProviders('find_people').some((provider) => provider.id === 'pdl')).toBe(true)
|
|
59
68
|
expect(getConfiguredProviders('search_companies').some((provider) => provider.id === 'companyenrich')).toBe(true)
|
|
60
69
|
expect(getConfiguredProviders('enrich_company').some((provider) => provider.id === 'companyenrich_props')).toBe(true)
|
|
70
|
+
expect(getConfiguredProviders('search_companies').some((provider) => provider.id === 'blitzapi')).toBe(true)
|
|
71
|
+
expect(getConfiguredProviders('enrich_company').some((provider) => provider.id === 'blitzapi')).toBe(true)
|
|
72
|
+
expect(getConfiguredProviders('enrich_person').some((provider) => provider.id === 'blitzapi-reverse-email')).toBe(true)
|
|
61
73
|
|
|
62
74
|
for (const capability of CAPABILITIES) {
|
|
63
75
|
expect(getProviders(capability).every((provider) => isProviderEnabled(provider.id))).toBe(true)
|
|
64
76
|
}
|
|
65
77
|
expect(FIND_EMAILS_PROVIDERS.every(isProviderEnabled)).toBe(true)
|
|
66
78
|
expect(getProvidersForCapability('find_people')).not.toContain('pdl')
|
|
79
|
+
expect(getProvidersForCapability('search_companies')).not.toContain('blitzapi')
|
|
80
|
+
expect(getProvidersForCapability('enrich_person')).not.toContain('blitzapi-reverse-email')
|
|
67
81
|
})
|
|
68
82
|
|
|
69
83
|
it('rejects an explicit disabled-provider pin without advertising it as available', () => {
|
|
@@ -72,6 +86,9 @@ describe('standalone MCP provider availability', () => {
|
|
|
72
86
|
['find_emails', 'pdl-person-enrich'],
|
|
73
87
|
['search_companies', 'companyenrich'],
|
|
74
88
|
['enrich_company', 'companyenrich_props'],
|
|
89
|
+
['search_companies', 'blitzapi'],
|
|
90
|
+
['enrich_company', 'blitzapi'],
|
|
91
|
+
['enrich_person', 'blitzapi-reverse-email'],
|
|
75
92
|
] as const) {
|
|
76
93
|
const result = resolvePreferredProviders(capability, {}, [provider])
|
|
77
94
|
expect(result.ok).toBe(false)
|
|
@@ -92,11 +109,15 @@ describe('standalone MCP provider availability', () => {
|
|
|
92
109
|
findEmailsSchema.max_credits.description,
|
|
93
110
|
findEmailsBulkSchema.max_credits.description,
|
|
94
111
|
getEndpointDetailsSchema.api.description,
|
|
112
|
+
searchCompaniesSchema.use_providers.description,
|
|
113
|
+
enrichCompanySchema.use_providers.description,
|
|
114
|
+
enrichPersonSchema.use_providers.description,
|
|
95
115
|
].join('\n').toLowerCase()
|
|
96
116
|
|
|
97
117
|
expect(publicMetadata).not.toContain('people data labs')
|
|
98
118
|
expect(publicMetadata).not.toMatch(/\bpdl\b/)
|
|
99
119
|
expect(publicMetadata).not.toContain('companyenrich')
|
|
100
120
|
expect(publicMetadata).not.toContain('/companyenrich')
|
|
121
|
+
expect(publicMetadata).not.toMatch(/\bblitz(api)?\b/)
|
|
101
122
|
})
|
|
102
123
|
})
|
|
@@ -172,24 +172,50 @@ describe('ai-ark-people', () => {
|
|
|
172
172
|
expect(p().isApplicable!({ keywords: ['cold email'] })).toBe(true)
|
|
173
173
|
})
|
|
174
174
|
|
|
175
|
-
it('isApplicable:
|
|
176
|
-
expect(p().isApplicable!({ company_domains: ['coldiq.com'] })).toBe(
|
|
175
|
+
it('isApplicable: true with company identifiers or locations', () => {
|
|
176
|
+
expect(p().isApplicable!({ company_domains: ['coldiq.com'] })).toBe(true)
|
|
177
|
+
expect(p().isApplicable!({ company_linkedin_urls: ['https://www.linkedin.com/company/coldiq'] })).toBe(true)
|
|
178
|
+
expect(p().isApplicable!({ locations: ['Belgium'] })).toBe(true)
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
it('isApplicable: false for an unsupported seniority by itself', () => {
|
|
182
|
+
expect(p().isApplicable!({ seniorities: ['Supreme Leader'] })).toBe(false)
|
|
177
183
|
})
|
|
178
184
|
|
|
179
|
-
it('mapParams builds AI
|
|
185
|
+
it('mapParams builds the documented AI Ark account and contact shape', () => {
|
|
180
186
|
expect(p().mapParams({
|
|
181
187
|
job_titles: ['VP Sales'],
|
|
182
188
|
seniorities: ['Director'],
|
|
183
189
|
locations: ['Belgium'],
|
|
184
190
|
keywords: ['outbound'],
|
|
191
|
+
company_domains: ['coldiq.com'],
|
|
192
|
+
company_linkedin_urls: ['https://www.linkedin.com/company/coldiq'],
|
|
185
193
|
limit: 20,
|
|
186
194
|
})).toEqual({
|
|
187
195
|
body: {
|
|
196
|
+
account: {
|
|
197
|
+
domain: { any: { include: ['coldiq.com'] } },
|
|
198
|
+
linkedin: { any: { include: ['https://www.linkedin.com/company/coldiq'] } },
|
|
199
|
+
},
|
|
188
200
|
contact: {
|
|
189
|
-
|
|
190
|
-
|
|
201
|
+
experience: {
|
|
202
|
+
latest: {
|
|
203
|
+
title: { any: { include: { mode: 'SMART', content: ['VP Sales'] } } },
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
seniority: { any: { include: ['director'] } },
|
|
191
207
|
location: { any: { include: ['Belgium'] } },
|
|
192
|
-
|
|
208
|
+
keyword: {
|
|
209
|
+
any: {
|
|
210
|
+
include: {
|
|
211
|
+
sources: [
|
|
212
|
+
{ mode: 'SMART', source: 'HEADLINE' },
|
|
213
|
+
{ mode: 'SMART', source: 'SUMMARY' },
|
|
214
|
+
],
|
|
215
|
+
content: ['outbound'],
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
},
|
|
193
219
|
},
|
|
194
220
|
size: 20,
|
|
195
221
|
},
|
|
@@ -201,7 +227,7 @@ describe('ai-ark-people', () => {
|
|
|
201
227
|
const contact = (result.body as Record<string, unknown>).contact as Record<string, unknown>
|
|
202
228
|
expect(contact.seniority).toBeUndefined()
|
|
203
229
|
expect(contact.location).toBeUndefined()
|
|
204
|
-
expect(contact.
|
|
230
|
+
expect(contact.keyword).toBeUndefined()
|
|
205
231
|
})
|
|
206
232
|
|
|
207
233
|
it('mapParams caps size at 100', () => {
|
|
@@ -103,15 +103,31 @@ describe('ai-ark-companies', () => {
|
|
|
103
103
|
expect(p().isApplicable!({ countries: ['BE'] })).toBe(true)
|
|
104
104
|
})
|
|
105
105
|
|
|
106
|
-
it('isApplicable:
|
|
107
|
-
expect(p().isApplicable!({ min_employees: 50 })).toBe(
|
|
106
|
+
it('isApplicable: true with employee range, valid funding, or lookalike domains', () => {
|
|
107
|
+
expect(p().isApplicable!({ min_employees: 50 })).toBe(true)
|
|
108
|
+
expect(p().isApplicable!({ funding_stages: ['Series A'] })).toBe(true)
|
|
109
|
+
expect(p().isApplicable!({ similar_to_domains: ['coldiq.com'] })).toBe(true)
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
it('isApplicable: false for an unsupported funding stage by itself', () => {
|
|
113
|
+
expect(p().isApplicable!({ funding_stages: ['not-a-real-stage'] })).toBe(false)
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
it('isApplicable: false when lookalike input exceeds AI Ark\'s five-domain limit', () => {
|
|
117
|
+
const similarToDomains = ['a.com', 'b.com', 'c.com', 'd.com', 'e.com', 'f.com']
|
|
118
|
+
expect(p().isApplicable!({
|
|
119
|
+
keywords: ['outbound sales'],
|
|
120
|
+
similar_to_domains: similarToDomains,
|
|
121
|
+
})).toBe(false)
|
|
122
|
+
expect(() => p().mapParams({ similar_to_domains: similarToDomains })).toThrow()
|
|
108
123
|
})
|
|
109
124
|
|
|
110
|
-
it('mapParams builds AI
|
|
125
|
+
it('mapParams builds the documented AI Ark company filter shape', () => {
|
|
111
126
|
const result = p().mapParams({
|
|
112
127
|
keywords: ['outbound sales'],
|
|
113
128
|
industries: ['SaaS'],
|
|
114
129
|
countries: ['BE'],
|
|
130
|
+
similar_to_domains: ['coldiq.com'],
|
|
115
131
|
min_employees: 10,
|
|
116
132
|
max_employees: 500,
|
|
117
133
|
funding_stages: ['Series A'],
|
|
@@ -119,17 +135,28 @@ describe('ai-ark-companies', () => {
|
|
|
119
135
|
})
|
|
120
136
|
expect(result).toEqual({
|
|
121
137
|
body: {
|
|
138
|
+
lookalikeDomains: ['coldiq.com'],
|
|
122
139
|
account: {
|
|
123
|
-
industries: { any: { include: ['SaaS'] } },
|
|
140
|
+
industries: { any: { include: { mode: 'WORD', content: ['SaaS'] } } },
|
|
141
|
+
keyword: {
|
|
142
|
+
any: {
|
|
143
|
+
include: {
|
|
144
|
+
sources: [
|
|
145
|
+
{ mode: 'SMART', source: 'NAME' },
|
|
146
|
+
{ mode: 'SMART', source: 'KEYWORD' },
|
|
147
|
+
{ mode: 'SMART', source: 'DESCRIPTION' },
|
|
148
|
+
{ mode: 'SMART', source: 'SEO' },
|
|
149
|
+
],
|
|
150
|
+
content: ['outbound sales'],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
},
|
|
124
154
|
location: { any: { include: ['Belgium'] } },
|
|
125
155
|
employeeSize: {
|
|
126
156
|
type: 'RANGE',
|
|
127
157
|
range: [{ start: 10, end: 500 }],
|
|
128
158
|
},
|
|
129
|
-
funding: {
|
|
130
|
-
},
|
|
131
|
-
contact: {
|
|
132
|
-
keywordsInProfile: { any: { include: ['outbound sales'] } },
|
|
159
|
+
funding: { type: ['SERIES_A'] },
|
|
133
160
|
},
|
|
134
161
|
size: 20,
|
|
135
162
|
},
|
|
@@ -145,7 +172,7 @@ describe('ai-ark-companies', () => {
|
|
|
145
172
|
expect(account.funding).toBeUndefined()
|
|
146
173
|
})
|
|
147
174
|
|
|
148
|
-
it('mapParams
|
|
175
|
+
it('mapParams never creates a contact filter for company keywords', () => {
|
|
149
176
|
const result = p().mapParams({ industries: ['SaaS'] })
|
|
150
177
|
expect((result.body as Record<string, unknown>).contact).toBeUndefined()
|
|
151
178
|
})
|