Skip to content

Commit 704362d

Browse files
feat(integrations): hosted API keys for Findymail, Prospeo, and Wiza (#4777)
* feat(integrations): hosted API keys for Findymail, Prospeo, and Wiza Add hosted-key support across all credit-consuming Findymail, Prospeo, and Wiza operations so Sim provides the key when a workspace has not brought its own. Register the three BYOK providers, consolidate Wiza's two-step reveal into a single polling wiza_individual_reveal op, and hide the API key field on hosted Sim for hosted operations. * fix(integrations): harden Wiza reveal polling, soften enrichment getCost guards Address Greptile + Cursor Bugbot review on #4777: return explicit failures from the Wiza individual_reveal poller instead of throwing (thrown errors were swallowed into a false queued success), short-circuit when the initial reveal is already terminal, tolerate transient 5xx/429 during polling, and return 0 (not throw) from Findymail getCost when the contacts/employees array is absent. * chore(integrations): biome formatting after wiza merge resolution * fix(wiza): type isTerminalReveal param structurally for next build typecheck * feat(enrichments): add Findymail, Prospeo, Wiza to work-email waterfall * feat(enrichments): add Wiza + Prospeo phone reveal to phone-number waterfall * feat(enrichments): opportunistic identifiers + LinkedIn URL input across work-email & phone cascades
1 parent 4b0dab4 commit 704362d

38 files changed

Lines changed: 1322 additions & 439 deletions

apps/sim/app/workspace/[workspaceId]/settings/components/byok/byok.tsx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
AnthropicIcon,
2020
BrandfetchIcon,
2121
ExaAIIcon,
22+
FindymailIcon,
2223
FirecrawlIcon,
2324
FireworksIcon,
2425
GeminiIcon,
@@ -32,7 +33,9 @@ import {
3233
ParallelIcon,
3334
PeopleDataLabsIcon,
3435
PerplexityIcon,
36+
ProspeoIcon,
3537
SerperIcon,
38+
WizaIcon,
3639
} from '@/components/icons'
3740
import { Input } from '@/components/ui'
3841
import { BYOKKeySkeleton } from '@/app/workspace/[workspaceId]/settings/components/byok/byok-skeleton'
@@ -172,6 +175,27 @@ const PROVIDERS: {
172175
description: 'Person and company enrichment, search, and identity',
173176
placeholder: 'Enter your People Data Labs API key',
174177
},
178+
{
179+
id: 'findymail',
180+
name: 'Findymail',
181+
icon: FindymailIcon,
182+
description: 'Email finder, verification, and phone lookup',
183+
placeholder: 'Enter your Findymail API key',
184+
},
185+
{
186+
id: 'prospeo',
187+
name: 'Prospeo',
188+
icon: ProspeoIcon,
189+
description: 'Person and company enrichment and search',
190+
placeholder: 'Enter your Prospeo API key',
191+
},
192+
{
193+
id: 'wiza',
194+
name: 'Wiza',
195+
icon: WizaIcon,
196+
description: 'Prospect search, individual reveal, and company enrichment',
197+
placeholder: 'Enter your Wiza API key',
198+
},
175199
]
176200

177201
export function BYOK() {

apps/sim/blocks/blocks/findymail.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,14 +214,26 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
214214
placeholder: 'e.g. React, TypeScript, Node.js',
215215
},
216216
},
217-
// API Key
217+
// API Key — hidden on hosted Sim for operations with hosted-key support
218218
{
219219
id: 'apiKey',
220220
title: 'API Key',
221221
type: 'short-input',
222222
required: true,
223223
placeholder: 'Enter your Findymail API key',
224224
password: true,
225+
hideWhenHosted: true,
226+
condition: { field: 'operation', value: 'findymail_get_credits', not: true },
227+
},
228+
// API Key — always required for the credit-balance lookup (no hosted key)
229+
{
230+
id: 'apiKey',
231+
title: 'API Key',
232+
type: 'short-input',
233+
required: true,
234+
placeholder: 'Enter your Findymail API key',
235+
password: true,
236+
condition: { field: 'operation', value: 'findymail_get_credits' },
225237
},
226238
],
227239
tools: {

apps/sim/blocks/blocks/prospeo.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,14 +302,33 @@ export const ProspeoBlock: BlockConfig<ProspeoResponse> = {
302302
condition: { field: 'operation', value: 'prospeo_search_suggestions' },
303303
},
304304

305-
// API Key (always last)
305+
// API Key — hidden on hosted Sim for operations with hosted-key support
306306
{
307307
id: 'apiKey',
308308
title: 'API Key',
309309
type: 'short-input',
310310
required: true,
311311
placeholder: 'Enter your Prospeo API key',
312312
password: true,
313+
hideWhenHosted: true,
314+
condition: {
315+
field: 'operation',
316+
value: ['prospeo_search_suggestions', 'prospeo_account_information'],
317+
not: true,
318+
},
319+
},
320+
// API Key — always required for the free account/suggestion lookups (no hosted key)
321+
{
322+
id: 'apiKey',
323+
title: 'API Key',
324+
type: 'short-input',
325+
required: true,
326+
placeholder: 'Enter your Prospeo API key',
327+
password: true,
328+
condition: {
329+
field: 'operation',
330+
value: ['prospeo_search_suggestions', 'prospeo_account_information'],
331+
},
313332
},
314333
],
315334
tools: {

0 commit comments

Comments
 (0)