feat(integrations): hosted API keys for Findymail, Prospeo, and Wiza#4777
Conversation
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.
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryHigh Risk Overview On hosted Sim, API key fields are hidden for billable ops ( Wiza replaces Start + Get Individual Reveal with one Work email and phone number enrichments gain multi-provider waterfalls (Hunter/Findymail/Prospeo/Wiza/PDL), optional LinkedIn URL, and optional company domain for work email. Tests cover hosting pricing and cascade Reviewed by Cursor Bugbot for commit b378e88. Bugbot is set up for automated code reviews on this repo. Configure here. |
Greptile SummaryThis PR adds hosted API key support for Findymail (9 ops), Prospeo (6 ops), and Wiza, registers all three as BYOK providers, and consolidates Wiza's two-step individual reveal into a single polling op (
Confidence Score: 5/5Safe to merge; all changes are additive hosting wiring and the Wiza consolidation is well-tested with no regressions on existing tools. The PR is purely additive — new billing factories, BYOK registration, and the Wiza individual-reveal consolidation. The polling logic correctly handles the early-terminal and transient-error cases flagged in prior review. The two observations flagged are not reachable through the normal execution path and do not affect correctness in production. No files require special attention, though bulk_enrich_person.ts and bulk_enrich_company.ts carry a throw inside getCost that is inconsistent with the defensive return-0 pattern used by every other tool in this PR. Important Files Changed
Sequence DiagramsequenceDiagram
participant Executor
participant HostingFramework
participant WizaAPI
Executor->>WizaAPI: POST /individual_reveals (start)
WizaAPI-->>Executor: "{ id, status: queued }"
alt Already terminal (cache hit)
Executor-->>Executor: return immediately (no poll)
else Needs polling
loop Every 2s (up to 120s)
Executor->>WizaAPI: "GET /individual_reveals/{id}"
WizaAPI-->>Executor: "{ status }"
alt Transient error (up to 3 consecutive)
Executor-->>Executor: increment error counter, retry
else Terminal (finished / failed)
Executor-->>Executor: return result
else Timeout
Executor-->>Executor: return failure
end
end
end
Executor->>HostingFramework: getCost(params, output)
HostingFramework-->>Executor: credits x $0.025
Reviews (2): Last reviewed commit: "feat(enrichments): add Findymail, Prospe..." | Re-trigger Greptile |
…ost 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.
|
Addressed the Greptile + Cursor Bugbot review in
Added 3 regression tests in |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit ad96c6e. Configure here.
…ment # Conflicts: # apps/sim/blocks/blocks/wiza.ts # apps/sim/tools/wiza/get_individual_reveal.ts # apps/sim/tools/wiza/start_individual_reveal.ts
|
@greptile review |
…oss work-email & phone cascades

Summary
findymail/prospeo/wizaas BYOK providers (type union, contract enum, settings UI)wiza_individual_revealop that starts then polls to completion (removes the old two tools)$/creditrates;getCostbills only on success/matchType of Change
Testing
bunx tsc --noEmitclean;bun run check:api-validation:strictpassed; biome cleantools/enrichment-hosting.test.ts(16 tests, incl. Wiza poll-to-completion);blocks.test.ts(82) passingChecklist