linkedin-secret-sauce 0.12.3 → 0.12.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.
Files changed (154) hide show
  1. package/README.md +6 -49
  2. package/dist/enrichment/index.d.ts +3 -5
  3. package/dist/enrichment/index.js +4 -20
  4. package/dist/enrichment/matching.d.ts +4 -8
  5. package/dist/enrichment/matching.js +6 -5
  6. package/dist/enrichment/orchestrator.d.ts +1 -1
  7. package/dist/enrichment/orchestrator.js +51 -44
  8. package/dist/enrichment/providers/index.d.ts +0 -2
  9. package/dist/enrichment/providers/index.js +1 -8
  10. package/dist/enrichment/providers/snovio.d.ts +4 -4
  11. package/dist/enrichment/providers/snovio.js +14 -14
  12. package/dist/enrichment/types.d.ts +8 -71
  13. package/dist/enrichment/types.js +3 -8
  14. package/dist/enrichment/utils/rate-limiter.js +0 -2
  15. package/dist/index.d.ts +2 -4
  16. package/dist/index.js +2 -2
  17. package/docs/ENRICHMENT.md +3 -45
  18. package/docs/INTEGRATION.md +1 -3
  19. package/docs/PLAYGROUND.md +4 -9
  20. package/docs/api/assets/hierarchy.js +1 -1
  21. package/docs/api/assets/navigation.js +1 -1
  22. package/docs/api/assets/search.js +1 -1
  23. package/docs/api/classes/LinkedInClientError.html +4 -4
  24. package/docs/api/functions/_testGetAccountCookies.html +2 -2
  25. package/docs/api/functions/_testGetAccountEntry.html +2 -2
  26. package/docs/api/functions/_testGetAllAccountIds.html +2 -2
  27. package/docs/api/functions/_testGetPoolState.html +2 -2
  28. package/docs/api/functions/adminResetAccount.html +1 -1
  29. package/docs/api/functions/adminSetCooldown.html +1 -1
  30. package/docs/api/functions/buildCookieHeader.html +1 -1
  31. package/docs/api/functions/clearAllSmartLeadTokens.html +2 -2
  32. package/docs/api/functions/clearRequestHistory.html +1 -1
  33. package/docs/api/functions/clearSessionAccount.html +1 -1
  34. package/docs/api/functions/clearSmartLeadToken.html +2 -2
  35. package/docs/api/functions/createEnrichmentClient.html +3 -3
  36. package/docs/api/functions/extractCsrfToken.html +1 -1
  37. package/docs/api/functions/extractLinkedInHandle.html +2 -2
  38. package/docs/api/functions/fetchCookiesFromCosiall.html +2 -2
  39. package/docs/api/functions/fetchProfileEmailsFromCosiall.html +2 -2
  40. package/docs/api/functions/forceRefreshCookies.html +1 -1
  41. package/docs/api/functions/getAccountForSession.html +1 -1
  42. package/docs/api/functions/getAccountsSummary.html +1 -1
  43. package/docs/api/functions/getCompaniesBatch.html +2 -2
  44. package/docs/api/functions/getCompanyById.html +2 -2
  45. package/docs/api/functions/getCompanyByUrl.html +1 -1
  46. package/docs/api/functions/getConfig.html +1 -1
  47. package/docs/api/functions/getCookiePoolHealth.html +1 -1
  48. package/docs/api/functions/getProfileByUrn.html +2 -2
  49. package/docs/api/functions/getProfileByVanity.html +2 -2
  50. package/docs/api/functions/getProfilesBatch.html +1 -1
  51. package/docs/api/functions/getRequestHistory.html +1 -1
  52. package/docs/api/functions/getSalesNavigatorProfileDetails.html +1 -1
  53. package/docs/api/functions/getSalesNavigatorProfileFull.html +2 -2
  54. package/docs/api/functions/getSmartLeadToken.html +1 -1
  55. package/docs/api/functions/getSmartLeadTokenCacheStats.html +2 -2
  56. package/docs/api/functions/getSmartLeadUser.html +2 -2
  57. package/docs/api/functions/getSnapshot.html +1 -1
  58. package/docs/api/functions/getYearsAtCompanyOptions.html +2 -2
  59. package/docs/api/functions/getYearsInPositionOptions.html +2 -2
  60. package/docs/api/functions/getYearsOfExperienceOptions.html +2 -2
  61. package/docs/api/functions/incrementMetric.html +1 -1
  62. package/docs/api/functions/initializeCookiePool.html +1 -1
  63. package/docs/api/functions/initializeLinkedInClient.html +1 -1
  64. package/docs/api/functions/isBusinessEmail.html +2 -2
  65. package/docs/api/functions/isDisposableDomain.html +2 -2
  66. package/docs/api/functions/isDisposableEmail.html +2 -2
  67. package/docs/api/functions/isPersonalDomain.html +2 -2
  68. package/docs/api/functions/isPersonalEmail.html +2 -2
  69. package/docs/api/functions/isRoleAccount.html +2 -2
  70. package/docs/api/functions/isValidEmailSyntax.html +2 -2
  71. package/docs/api/functions/parseFullProfile.html +2 -2
  72. package/docs/api/functions/parseSalesSearchResults.html +1 -1
  73. package/docs/api/functions/reportAccountFailure.html +1 -1
  74. package/docs/api/functions/reportAccountSuccess.html +1 -1
  75. package/docs/api/functions/resolveCompanyUniversalName.html +1 -1
  76. package/docs/api/functions/searchSalesLeads.html +2 -2
  77. package/docs/api/functions/selectAccountForRequest.html +1 -1
  78. package/docs/api/functions/setAccountForSession.html +1 -1
  79. package/docs/api/functions/typeahead.html +1 -1
  80. package/docs/api/functions/verifyEmailMx.html +1 -1
  81. package/docs/api/hierarchy.html +1 -1
  82. package/docs/api/index.html +3 -3
  83. package/docs/api/interfaces/AccountCookies.html +2 -2
  84. package/docs/api/interfaces/BatchEnrichmentOptions.html +8 -8
  85. package/docs/api/interfaces/CacheAdapter.html +4 -4
  86. package/docs/api/interfaces/CanonicalEmail.html +8 -8
  87. package/docs/api/interfaces/Company.html +2 -2
  88. package/docs/api/interfaces/ConstructConfig.html +5 -5
  89. package/docs/api/interfaces/CosiallProfileEmailsResponse.html +6 -6
  90. package/docs/api/interfaces/EnrichmentCandidate.html +4 -4
  91. package/docs/api/interfaces/EnrichmentClient.html +6 -6
  92. package/docs/api/interfaces/EnrichmentClientConfig.html +7 -7
  93. package/docs/api/interfaces/EnrichmentLogger.html +3 -3
  94. package/docs/api/interfaces/EnrichmentOptions.html +6 -6
  95. package/docs/api/interfaces/HunterConfig.html +3 -3
  96. package/docs/api/interfaces/LddConfig.html +3 -3
  97. package/docs/api/interfaces/LddProfileData.html +2 -2
  98. package/docs/api/interfaces/LinkedInClientConfig.html +2 -2
  99. package/docs/api/interfaces/LinkedInCookie.html +2 -2
  100. package/docs/api/interfaces/LinkedInPosition.html +2 -2
  101. package/docs/api/interfaces/LinkedInProfile.html +2 -2
  102. package/docs/api/interfaces/LinkedInSpotlightBadge.html +2 -2
  103. package/docs/api/interfaces/LinkedInTenure.html +2 -2
  104. package/docs/api/interfaces/Metrics.html +2 -2
  105. package/docs/api/interfaces/MetricsSnapshot.html +2 -2
  106. package/docs/api/interfaces/ProfileEducation.html +2 -2
  107. package/docs/api/interfaces/ProfileEmailsLookupOptions.html +5 -5
  108. package/docs/api/interfaces/ProfilePosition.html +2 -2
  109. package/docs/api/interfaces/ProfileSkill.html +2 -2
  110. package/docs/api/interfaces/ProviderResult.html +6 -6
  111. package/docs/api/interfaces/ProvidersConfig.html +6 -9
  112. package/docs/api/interfaces/RequestHistoryEntry.html +2 -2
  113. package/docs/api/interfaces/SalesLeadSearchResult.html +2 -2
  114. package/docs/api/interfaces/SalesNavigatorContactInfo.html +2 -2
  115. package/docs/api/interfaces/SalesNavigatorPosition.html +2 -2
  116. package/docs/api/interfaces/SalesNavigatorProfile.html +2 -2
  117. package/docs/api/interfaces/SalesNavigatorProfileFull.html +4 -4
  118. package/docs/api/interfaces/SearchSalesResult.html +2 -2
  119. package/docs/api/interfaces/SmartLeadAuthConfig.html +4 -4
  120. package/docs/api/interfaces/SmartLeadCredentials.html +2 -2
  121. package/docs/api/interfaces/SmartLeadLoginResponse.html +2 -2
  122. package/docs/api/interfaces/SmartLeadUser.html +2 -2
  123. package/docs/api/interfaces/SmartProspectConfig.html +8 -8
  124. package/docs/api/interfaces/SmartProspectContact.html +2 -2
  125. package/docs/api/interfaces/SmartProspectSearchFilters.html +21 -21
  126. package/docs/api/interfaces/TypeaheadItem.html +2 -2
  127. package/docs/api/interfaces/TypeaheadResult.html +2 -2
  128. package/docs/api/interfaces/VerificationResult.html +9 -9
  129. package/docs/api/types/CostCallback.html +2 -2
  130. package/docs/api/types/Geo.html +2 -2
  131. package/docs/api/types/LddApiResponse.html +1 -1
  132. package/docs/api/types/ProviderFunc.html +2 -2
  133. package/docs/api/types/ProviderName.html +2 -2
  134. package/docs/api/types/SalesSearchFilters.html +2 -2
  135. package/docs/api/types/TypeaheadType.html +1 -1
  136. package/docs/api/variables/COMPANY_SIZE_OPTIONS.html +1 -1
  137. package/docs/api/variables/DEFAULT_PROVIDER_ORDER.html +3 -4
  138. package/docs/api/variables/DISPOSABLE_DOMAINS.html +2 -2
  139. package/docs/api/variables/FUNCTION_OPTIONS.html +1 -1
  140. package/docs/api/variables/INDUSTRY_OPTIONS.html +1 -1
  141. package/docs/api/variables/LANGUAGE_OPTIONS.html +1 -1
  142. package/docs/api/variables/PERSONAL_DOMAINS.html +2 -2
  143. package/docs/api/variables/PROVIDER_COSTS.html +3 -5
  144. package/docs/api/variables/REGION_OPTIONS.html +1 -1
  145. package/docs/api/variables/SENIORITY_OPTIONS.html +2 -2
  146. package/docs/api/variables/YEARS_OPTIONS.html +1 -1
  147. package/package.json +1 -1
  148. package/dist/enrichment/providers/apollo.d.ts +0 -11
  149. package/dist/enrichment/providers/apollo.js +0 -181
  150. package/dist/enrichment/providers/bouncer.d.ts +0 -67
  151. package/dist/enrichment/providers/bouncer.js +0 -231
  152. package/dist/enrichment/providers/dropcontact.d.ts +0 -22
  153. package/dist/enrichment/providers/dropcontact.js +0 -206
  154. package/docs/api/interfaces/DropcontactConfig.html +0 -3
@@ -3,7 +3,7 @@
3
3
  * Email Enrichment Providers
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.clearSnovioTokenCache = exports.verifyEmailWithSnovio = exports.findEmailsWithSnovio = exports.createSnovioProvider = exports.checkCatchAllWithBounceBan = exports.verifyEmailsBatchWithBounceBan = exports.verifyEmailWithBounceBan = exports.createBounceBanProvider = exports.verifyEmailsBatch = exports.checkCatchAllDomain = exports.verifyEmailWithBouncer = exports.createBouncerProvider = exports.createDropcontactProvider = exports.createHunterProvider = exports.verifyEmailWithTryKitt = exports.findEmailWithTryKitt = exports.createTryKittProvider = exports.createCosiallProvider = exports.createSmartProspectProvider = exports.createLddProvider = exports.createConstructProvider = void 0;
6
+ exports.clearSnovioTokenCache = exports.verifyEmailWithSnovio = exports.findEmailsWithSnovio = exports.createSnovioProvider = exports.checkCatchAllWithBounceBan = exports.verifyEmailsBatchWithBounceBan = exports.verifyEmailWithBounceBan = exports.createBounceBanProvider = exports.createHunterProvider = exports.verifyEmailWithTryKitt = exports.findEmailWithTryKitt = exports.createTryKittProvider = exports.createCosiallProvider = exports.createSmartProspectProvider = exports.createLddProvider = exports.createConstructProvider = void 0;
7
7
  var construct_1 = require("./construct");
8
8
  Object.defineProperty(exports, "createConstructProvider", { enumerable: true, get: function () { return construct_1.createConstructProvider; } });
9
9
  var ldd_1 = require("./ldd");
@@ -18,13 +18,6 @@ Object.defineProperty(exports, "findEmailWithTryKitt", { enumerable: true, get:
18
18
  Object.defineProperty(exports, "verifyEmailWithTryKitt", { enumerable: true, get: function () { return trykitt_1.verifyEmailWithTryKitt; } });
19
19
  var hunter_1 = require("./hunter");
20
20
  Object.defineProperty(exports, "createHunterProvider", { enumerable: true, get: function () { return hunter_1.createHunterProvider; } });
21
- var dropcontact_1 = require("./dropcontact");
22
- Object.defineProperty(exports, "createDropcontactProvider", { enumerable: true, get: function () { return dropcontact_1.createDropcontactProvider; } });
23
- var bouncer_1 = require("./bouncer");
24
- Object.defineProperty(exports, "createBouncerProvider", { enumerable: true, get: function () { return bouncer_1.createBouncerProvider; } });
25
- Object.defineProperty(exports, "verifyEmailWithBouncer", { enumerable: true, get: function () { return bouncer_1.verifyEmailWithBouncer; } });
26
- Object.defineProperty(exports, "checkCatchAllDomain", { enumerable: true, get: function () { return bouncer_1.checkCatchAllDomain; } });
27
- Object.defineProperty(exports, "verifyEmailsBatch", { enumerable: true, get: function () { return bouncer_1.verifyEmailsBatch; } });
28
21
  var bounceban_1 = require("./bounceban");
29
22
  Object.defineProperty(exports, "createBounceBanProvider", { enumerable: true, get: function () { return bounceban_1.createBounceBanProvider; } });
30
23
  Object.defineProperty(exports, "verifyEmailWithBounceBan", { enumerable: true, get: function () { return bounceban_1.verifyEmailWithBounceBan; } });
@@ -30,8 +30,8 @@ export declare function createSnovioProvider(config: SnovioConfig): (candidate:
30
30
  * 'Doe',
31
31
  * 'example.com',
32
32
  * {
33
- * userId: process.env.SNOVIO_USER_ID,
34
- * apiSecret: process.env.SNOVIO_API_SECRET,
33
+ * clientId: process.env.SNOVIO_CLIENT_ID,
34
+ * clientSecret: process.env.SNOVIO_CLIENT_SECRET,
35
35
  * }
36
36
  * );
37
37
  * ```
@@ -43,8 +43,8 @@ export declare function findEmailsWithSnovio(firstName: string, lastName: string
43
43
  * @example
44
44
  * ```typescript
45
45
  * const result = await verifyEmailWithSnovio('test@example.com', {
46
- * userId: process.env.SNOVIO_USER_ID,
47
- * apiSecret: process.env.SNOVIO_API_SECRET,
46
+ * clientId: process.env.SNOVIO_CLIENT_ID,
47
+ * clientSecret: process.env.SNOVIO_CLIENT_SECRET,
48
48
  * });
49
49
  * ```
50
50
  */
@@ -68,7 +68,7 @@ function extractNameAndDomain(candidate) {
68
68
  /**
69
69
  * Get OAuth access token from Snov.io
70
70
  */
71
- async function getAccessToken(userId, apiSecret, apiUrl, timeoutMs) {
71
+ async function getAccessToken(clientId, clientSecret, apiUrl, timeoutMs) {
72
72
  // Return cached token if valid
73
73
  if (cachedAccessToken && Date.now() < tokenExpiresAt) {
74
74
  return cachedAccessToken;
@@ -83,8 +83,8 @@ async function getAccessToken(userId, apiSecret, apiUrl, timeoutMs) {
83
83
  },
84
84
  body: JSON.stringify({
85
85
  grant_type: "client_credentials",
86
- client_id: userId,
87
- client_secret: apiSecret,
86
+ client_id: clientId,
87
+ client_secret: clientSecret,
88
88
  }),
89
89
  signal: controller.signal,
90
90
  });
@@ -151,8 +151,8 @@ async function findEmailsByName(firstName, lastName, domain, accessToken, apiUrl
151
151
  * when pattern guessing fails or for catch-all domains.
152
152
  */
153
153
  function createSnovioProvider(config) {
154
- const { userId, apiSecret, apiUrl = DEFAULT_API_URL, timeoutMs = DEFAULT_TIMEOUT_MS, } = config;
155
- if (!userId || !apiSecret) {
154
+ const { clientId, clientSecret, apiUrl = DEFAULT_API_URL, timeoutMs = DEFAULT_TIMEOUT_MS, } = config;
155
+ if (!clientId || !clientSecret) {
156
156
  return (0, noop_provider_1.createNoOpProvider)("snovio");
157
157
  }
158
158
  async function findEmails(candidate) {
@@ -162,7 +162,7 @@ function createSnovioProvider(config) {
162
162
  }
163
163
  const { firstName, lastName, domain } = nameAndDomain;
164
164
  // Get access token
165
- const accessToken = await getAccessToken(userId, apiSecret, apiUrl, timeoutMs);
165
+ const accessToken = await getAccessToken(clientId, clientSecret, apiUrl, timeoutMs);
166
166
  if (!accessToken) {
167
167
  return null;
168
168
  }
@@ -210,15 +210,15 @@ function createSnovioProvider(config) {
210
210
  * 'Doe',
211
211
  * 'example.com',
212
212
  * {
213
- * userId: process.env.SNOVIO_USER_ID,
214
- * apiSecret: process.env.SNOVIO_API_SECRET,
213
+ * clientId: process.env.SNOVIO_CLIENT_ID,
214
+ * clientSecret: process.env.SNOVIO_CLIENT_SECRET,
215
215
  * }
216
216
  * );
217
217
  * ```
218
218
  */
219
219
  async function findEmailsWithSnovio(firstName, lastName, domain, config) {
220
- const { userId, apiSecret, apiUrl = DEFAULT_API_URL, timeoutMs = DEFAULT_TIMEOUT_MS, } = config;
221
- const accessToken = await getAccessToken(userId, apiSecret, apiUrl, timeoutMs);
220
+ const { clientId, clientSecret, apiUrl = DEFAULT_API_URL, timeoutMs = DEFAULT_TIMEOUT_MS, } = config;
221
+ const accessToken = await getAccessToken(clientId, clientSecret, apiUrl, timeoutMs);
222
222
  if (!accessToken) {
223
223
  return null;
224
224
  }
@@ -230,14 +230,14 @@ async function findEmailsWithSnovio(firstName, lastName, domain, config) {
230
230
  * @example
231
231
  * ```typescript
232
232
  * const result = await verifyEmailWithSnovio('test@example.com', {
233
- * userId: process.env.SNOVIO_USER_ID,
234
- * apiSecret: process.env.SNOVIO_API_SECRET,
233
+ * clientId: process.env.SNOVIO_CLIENT_ID,
234
+ * clientSecret: process.env.SNOVIO_CLIENT_SECRET,
235
235
  * });
236
236
  * ```
237
237
  */
238
238
  async function verifyEmailWithSnovio(email, config) {
239
- const { userId, apiSecret, apiUrl = DEFAULT_API_URL, timeoutMs = DEFAULT_TIMEOUT_MS, } = config;
240
- const accessToken = await getAccessToken(userId, apiSecret, apiUrl, timeoutMs);
239
+ const { clientId, clientSecret, apiUrl = DEFAULT_API_URL, timeoutMs = DEFAULT_TIMEOUT_MS, } = config;
240
+ const accessToken = await getAccessToken(clientId, clientSecret, apiUrl, timeoutMs);
241
241
  if (!accessToken) {
242
242
  return null;
243
243
  }
@@ -167,12 +167,6 @@ export interface LddConfig {
167
167
  apiUrl: string;
168
168
  apiToken: string;
169
169
  }
170
- /**
171
- * Dropcontact provider configuration
172
- */
173
- export interface DropcontactConfig {
174
- apiKey: string;
175
- }
176
170
  /**
177
171
  * TryKitt.ai provider configuration
178
172
  *
@@ -364,57 +358,6 @@ export interface BounceBanVerifyResponse {
364
358
  /** Remaining credits */
365
359
  credits_remaining?: number;
366
360
  }
367
- /**
368
- * Bouncer.io provider configuration
369
- *
370
- * Bouncer provides SMTP email verification with 99%+ accuracy.
371
- * Best for verifying pattern-guessed emails on non-catch-all domains.
372
- *
373
- * @see https://docs.usebouncer.com
374
- */
375
- export interface BouncerConfig {
376
- /** Bouncer API key */
377
- apiKey: string;
378
- /** API URL override (default: https://api.usebouncer.com/v1.1) */
379
- apiUrl?: string;
380
- /** Timeout in ms (default: 30000) */
381
- timeoutMs?: number;
382
- }
383
- /**
384
- * Bouncer verification result status
385
- */
386
- export type BouncerStatus = "deliverable" | "undeliverable" | "risky" | "unknown";
387
- /**
388
- * Bouncer verification result reason
389
- */
390
- export type BouncerReason = "accepted_email" | "rejected_email" | "invalid_domain" | "invalid_email" | "unavailable_smtp" | "dns_error" | "low_deliverability" | "low_quality" | "catch_all" | "full_mailbox" | "role_account" | "disposable" | "timeout" | "unknown";
391
- /**
392
- * Bouncer API response for single email verification
393
- */
394
- export interface BouncerVerifyResponse {
395
- status: BouncerStatus;
396
- reason: BouncerReason;
397
- email: string;
398
- domain: string;
399
- account: string;
400
- /** Whether this is a free email provider (Gmail, Yahoo, etc.) */
401
- free: boolean;
402
- /** Whether this is a disposable email */
403
- disposable: boolean;
404
- /** Whether this is a role-based email */
405
- role: boolean;
406
- /** Whether domain is catch-all (accepts all emails) */
407
- acceptAll: boolean;
408
- /** Did you mean suggestion for typos */
409
- didYouMean?: string;
410
- /** DNS information */
411
- dns?: {
412
- type: string;
413
- record: string;
414
- };
415
- /** Toxicity score (0-5, higher = more risky) */
416
- toxicity?: number;
417
- }
418
361
  /**
419
362
  * Snov.io provider configuration
420
363
  *
@@ -424,10 +367,10 @@ export interface BouncerVerifyResponse {
424
367
  * @see https://snov.io/api
425
368
  */
426
369
  export interface SnovioConfig {
427
- /** Snov.io API user ID */
428
- userId: string;
429
- /** Snov.io API secret */
430
- apiSecret: string;
370
+ /** Snov.io OAuth client ID (get from https://app.snov.io/api) */
371
+ clientId: string;
372
+ /** Snov.io OAuth client secret */
373
+ clientSecret: string;
431
374
  /** API URL override (default: https://api.snov.io) */
432
375
  apiUrl?: string;
433
376
  /** Timeout in ms (default: 30000) */
@@ -500,9 +443,6 @@ export interface ProvidersConfig {
500
443
  /** TryKitt.ai AI email finder (FREE for individuals, unlimited) */
501
444
  trykitt?: TryKittConfig;
502
445
  hunter?: HunterConfig;
503
- dropcontact?: DropcontactConfig;
504
- /** Bouncer.io for SMTP email verification (99%+ accuracy) */
505
- bouncer?: BouncerConfig;
506
446
  /** BounceBan catch-all verification (FREE single, 85-95% accuracy) */
507
447
  bounceban?: BounceBanConfig;
508
448
  /** Snov.io for email finding (98% delivery rate) */
@@ -516,7 +456,7 @@ export interface EnrichmentOptions {
516
456
  maxCostPerEmail?: number;
517
457
  /** Minimum confidence threshold 0-100 (default: 0) */
518
458
  confidenceThreshold?: number;
519
- /** Provider order (default: ['ldd', 'smartprospect', 'construct', 'bouncer', 'snovio', 'hunter']) */
459
+ /** Provider order (default: ['ldd', 'smartprospect', 'cosiall', 'trykitt', 'construct', 'bounceban', 'hunter', 'snovio']) */
520
460
  providerOrder?: ProviderName[];
521
461
  /** Retry delay in ms on transient errors (default: 200) */
522
462
  retryMs?: number;
@@ -585,7 +525,7 @@ export interface EnrichmentClient {
585
525
  /**
586
526
  * Available provider names
587
527
  */
588
- export type ProviderName = "construct" | "ldd" | "smartprospect" | "cosiall" | "trykitt" | "hunter" | "dropcontact" | "bouncer" | "bounceban" | "snovio";
528
+ export type ProviderName = "construct" | "ldd" | "smartprospect" | "cosiall" | "trykitt" | "hunter" | "bounceban" | "snovio";
589
529
  /**
590
530
  * Default provider order - 3-Phase Strategy
591
531
  *
@@ -600,10 +540,9 @@ export type ProviderName = "construct" | "ldd" | "smartprospect" | "cosiall" | "
600
540
  * - bounceban: BounceBan catch-all verification (FREE single, $0.003/bulk)
601
541
  *
602
542
  * PHASE 3 - Paid finders (only if Phase 2 inconclusive):
603
- * - hunter: Hunter.io email finder ($0.005/email)
543
+ * - hunter: Hunter.io email finder ($0.015/email)
604
544
  * - snovio: Snov.io email finder ($0.02/email)
605
545
  *
606
- * Note: bouncer, dropcontact available but not in default order
607
546
  */
608
547
  export declare const DEFAULT_PROVIDER_ORDER: ProviderName[];
609
548
  /**
@@ -616,10 +555,8 @@ export declare const DEFAULT_PROVIDER_ORDER: ProviderName[];
616
555
  * - trykitt: FREE (unlimited for individuals, $0.005/email high volume)
617
556
  * - construct: FREE (pattern guessing + MX check)
618
557
  * - bounceban: FREE single / $0.003/email bulk (catch-all specialist)
619
- * - bouncer: $0.006/email (SMTP verification, 99%+ accuracy)
558
+ * - hunter: $0.015/email (Growth tier)
620
559
  * - snovio: $0.02/email (email finding + verification)
621
- * - hunter: $0.005/email
622
- * - dropcontact: $0.01/email (not in default order)
623
560
  */
624
561
  export declare const PROVIDER_COSTS: Record<ProviderName, number>;
625
562
  /**
@@ -21,10 +21,9 @@ exports.SMARTPROSPECT_SUB_INDUSTRIES = exports.PROVIDER_COSTS = exports.DEFAULT_
21
21
  * - bounceban: BounceBan catch-all verification (FREE single, $0.003/bulk)
22
22
  *
23
23
  * PHASE 3 - Paid finders (only if Phase 2 inconclusive):
24
- * - hunter: Hunter.io email finder ($0.005/email)
24
+ * - hunter: Hunter.io email finder ($0.015/email)
25
25
  * - snovio: Snov.io email finder ($0.02/email)
26
26
  *
27
- * Note: bouncer, dropcontact available but not in default order
28
27
  */
29
28
  exports.DEFAULT_PROVIDER_ORDER = [
30
29
  "ldd",
@@ -46,10 +45,8 @@ exports.DEFAULT_PROVIDER_ORDER = [
46
45
  * - trykitt: FREE (unlimited for individuals, $0.005/email high volume)
47
46
  * - construct: FREE (pattern guessing + MX check)
48
47
  * - bounceban: FREE single / $0.003/email bulk (catch-all specialist)
49
- * - bouncer: $0.006/email (SMTP verification, 99%+ accuracy)
48
+ * - hunter: $0.015/email (Growth tier)
50
49
  * - snovio: $0.02/email (email finding + verification)
51
- * - hunter: $0.005/email
52
- * - dropcontact: $0.01/email (not in default order)
53
50
  */
54
51
  exports.PROVIDER_COSTS = {
55
52
  construct: 0,
@@ -58,9 +55,7 @@ exports.PROVIDER_COSTS = {
58
55
  cosiall: 0,
59
56
  trykitt: 0, // FREE for individuals
60
57
  bounceban: 0.003, // FREE single, $0.003 bulk
61
- hunter: 0.005,
62
- dropcontact: 0.01,
63
- bouncer: 0.006,
58
+ hunter: 0.015,
64
59
  snovio: 0.02,
65
60
  };
66
61
  /**
@@ -26,8 +26,6 @@ exports.DEFAULT_RATE_LIMITS = {
26
26
  hunter: { maxRequests: 10, windowMs: 1000, minDelayMs: 100 },
27
27
  snovio: { maxRequests: 60, windowMs: 60000, minDelayMs: 1000 },
28
28
  bounceban: { maxRequests: 10, windowMs: 1000, minDelayMs: 100 },
29
- bouncer: { maxRequests: 10, windowMs: 1000, minDelayMs: 100 },
30
- dropcontact: { maxRequests: 5, windowMs: 1000, minDelayMs: 200 },
31
29
  smartprospect: { maxRequests: 2, windowMs: 1000, minDelayMs: 500 },
32
30
  // Free providers have no external limits
33
31
  construct: { maxRequests: 100, windowMs: 1000, minDelayMs: 0 },
package/dist/index.d.ts CHANGED
@@ -30,7 +30,7 @@
30
30
  * const enrichment = createEnrichmentClient({
31
31
  * providers: {
32
32
  * hunter: { apiKey: process.env.HUNTER_API_KEY },
33
- * bouncer: { apiKey: process.env.BOUNCER_API_KEY },
33
+ * bounceban: { apiKey: process.env.BOUNCEBAN_API_KEY },
34
34
  * },
35
35
  * });
36
36
  *
@@ -68,7 +68,7 @@ export * from "./constants";
68
68
  * providers: {
69
69
  * construct: {}, // FREE pattern matching
70
70
  * hunter: { apiKey: 'xxx' },
71
- * bouncer: { apiKey: 'xxx' },
71
+ * bounceban: { apiKey: 'xxx' },
72
72
  * },
73
73
  * onCost: (provider, cost) => console.log(`${provider}: $${cost}`),
74
74
  * });
@@ -108,8 +108,6 @@ HunterConfig,
108
108
  SmartProspectConfig,
109
109
  /** LinkedIn Data Dump configuration */
110
110
  LddConfig,
111
- /** Dropcontact configuration */
112
- DropcontactConfig,
113
111
  /** Construct provider configuration */
114
112
  ConstructConfig,
115
113
  /** Cache adapter interface */
package/dist/index.js CHANGED
@@ -31,7 +31,7 @@
31
31
  * const enrichment = createEnrichmentClient({
32
32
  * providers: {
33
33
  * hunter: { apiKey: process.env.HUNTER_API_KEY },
34
- * bouncer: { apiKey: process.env.BOUNCER_API_KEY },
34
+ * bounceban: { apiKey: process.env.BOUNCEBAN_API_KEY },
35
35
  * },
36
36
  * });
37
37
  *
@@ -115,7 +115,7 @@ __exportStar(require("./constants"), exports);
115
115
  * providers: {
116
116
  * construct: {}, // FREE pattern matching
117
117
  * hunter: { apiKey: 'xxx' },
118
- * bouncer: { apiKey: 'xxx' },
118
+ * bounceban: { apiKey: 'xxx' },
119
119
  * },
120
120
  * onCost: (provider, cost) => console.log(`${provider}: $${cost}`),
121
121
  * });
@@ -96,9 +96,7 @@ PHASE 3 - Paid Finders (Only if needed)
96
96
  | Provider | Cost | Description | Required Config |
97
97
  |----------|------|-------------|-----------------|
98
98
  | **BounceBan** | FREE single / $0.003 bulk | Catch-all specialist (85-95% accuracy) | `apiKey` |
99
- | **Hunter** | $0.005/email | Domain search + email finder | `apiKey` |
100
- | **Bouncer** | $0.006/email | SMTP verification (99%+ accuracy) | `apiKey` |
101
- | **Dropcontact** | $0.01/email | Email finder API | `apiKey` |
99
+ | **Hunter** | $0.015/email | Domain search + email finder | `apiKey` |
102
100
  | **Snov.io** | $0.02/email | Email finding + verification | `clientId`, `clientSecret` |
103
101
 
104
102
  ---
@@ -167,18 +165,6 @@ hunter: {
167
165
 
168
166
  Get your API key at: https://hunter.io
169
167
 
170
- ### Bouncer
171
-
172
- SMTP verification with 99%+ accuracy.
173
-
174
- ```typescript
175
- bouncer: {
176
- apiKey: process.env.BOUNCER_API_KEY, // Required
177
- }
178
- ```
179
-
180
- Get your API key at: https://bouncer.io
181
-
182
168
  ### Snov.io
183
169
 
184
170
  ```typescript
@@ -190,16 +176,6 @@ snovio: {
190
176
 
191
177
  Get your credentials at: https://snov.io
192
178
 
193
- ### Dropcontact
194
-
195
- ```typescript
196
- dropcontact: {
197
- apiKey: process.env.DROPCONTACT_API_KEY, // Required
198
- }
199
- ```
200
-
201
- Get your API key at: https://dropcontact.com
202
-
203
179
  ### Cosiall
204
180
 
205
181
  Enabled by default using global Cosiall configuration. To disable:
@@ -249,18 +225,12 @@ TRYKITT_API_KEY=...
249
225
  # BounceBan (FREE single verification)
250
226
  BOUNCEBAN_API_KEY=...
251
227
 
252
- # Hunter ($0.005/email)
228
+ # Hunter ($0.015/email)
253
229
  HUNTER_API_KEY=...
254
230
 
255
- # Bouncer ($0.006/email)
256
- BOUNCER_API_KEY=...
257
-
258
231
  # Snov.io ($0.02/email)
259
232
  SNOVIO_CLIENT_ID=...
260
233
  SNOVIO_CLIENT_SECRET=...
261
-
262
- # Dropcontact ($0.01/email)
263
- DROPCONTACT_API_KEY=...
264
234
  ```
265
235
 
266
236
  ---
@@ -404,16 +374,6 @@ const isCatchAll = await checkCatchAllWithBounceBan('acme.com', config);
404
374
  const results = await verifyEmailsBatchWithBounceBan(emails, config);
405
375
  ```
406
376
 
407
- ### Bouncer
408
-
409
- ```typescript
410
- import { verifyEmailWithBouncer, checkCatchAllDomain, verifyEmailsBatch } from 'linkedin-secret-sauce';
411
-
412
- const result = await verifyEmailWithBouncer('john@acme.com', {
413
- apiKey: process.env.BOUNCER_API_KEY,
414
- });
415
- ```
416
-
417
377
  ### Snov.io
418
378
 
419
379
  ```typescript
@@ -492,9 +452,7 @@ console.log(PROVIDER_COSTS);
492
452
  // cosiall: 0,
493
453
  // trykitt: 0,
494
454
  // bounceban: 0.003,
495
- // hunter: 0.005,
496
- // dropcontact: 0.01,
497
- // bouncer: 0.006,
455
+ // hunter: 0.015,
498
456
  // snovio: 0.02,
499
457
  // }
500
458
  ```
@@ -208,9 +208,7 @@ console.log(result.business_email_confidence); // 95
208
208
 
209
209
  **PAID Providers:**
210
210
  - `bounceban` - FREE single / $0.003 bulk - Catch-all specialist
211
- - `hunter` - $0.005/email - Domain search + email finder
212
- - `bouncer` - $0.006/email - SMTP verification (99%+ accuracy)
213
- - `dropcontact` - $0.01/email - Email finder API
211
+ - `hunter` - $0.015/email - Domain search + email finder
214
212
  - `snovio` - $0.02/email - Email finding + verification
215
213
 
216
214
  For complete enrichment documentation, provider configuration, cost tracking, and advanced features, see **[ENRICHMENT.md](./ENRICHMENT.md)**.
@@ -89,9 +89,6 @@ HUNTER_API_KEY=your-hunter-key
89
89
  SNOVIO_CLIENT_ID=your-snovio-client-id
90
90
  SNOVIO_CLIENT_SECRET=your-snovio-secret
91
91
 
92
- # === Apollo.io ===
93
- APOLLO_API_KEY=your-apollo-key
94
-
95
92
  # === Port Configuration (Optional) ===
96
93
  # Auto-increments if ports are busy
97
94
  PLAYGROUND_SERVER_PORT=5175
@@ -227,11 +224,9 @@ Comprehensive email validation and verification utilities.
227
224
  - **Compare Multiple Providers**:
228
225
  - LDD, SmartProspect, TryKitt.ai (FREE)
229
226
  - Pattern Guessing + MX validation (FREE)
230
- - BounceBan (catch-all verification, $0.008/lookup)
231
- - Hunter.io ($0.005/lookup)
232
- - Bouncer ($0.006/lookup)
227
+ - BounceBan (catch-all verification, $0.003/lookup)
228
+ - Hunter.io ($0.015/lookup)
233
229
  - Snov.io ($0.02/lookup)
234
- - Dropcontact ($0.01/lookup)
235
230
  - **Side-by-Side Results**: See speed, accuracy, and cost for each provider
236
231
  - **Configuration Status**: Know which providers are configured
237
232
  - **Cost Tracking**: See estimated cost per test run
@@ -262,7 +257,7 @@ Comprehensive email validation and verification utilities.
262
257
  - **Intelligent Waterfall**: Queries providers in order until a verified email is found
263
258
  1. **Phase 1 (FREE)**: LDD → SmartProspect → Cosiall → TryKitt.ai → Pattern Guessing (parallel)
264
259
  2. **Phase 2 (Verification)**: BounceBan for catch-all domains
265
- 3. **Phase 3 (Paid)**: Hunter.io → Snov.io → Apollo (only if free providers fail)
260
+ 3. **Phase 3 (Paid)**: Hunter.io → Snov.io (only if free providers fail)
266
261
  - **Step-by-Step Visualization**: Watch each provider execute in real-time
267
262
  - **LinkedIn Company Lookup**: Auto-discovers company domain from LinkedIn Company URN
268
263
  - **Pattern Guessing**: Generates common email patterns (firstname.lastname@, etc.) + MX validation
@@ -419,7 +414,7 @@ This enables "Find Email" buttons from search results.
419
414
 
420
415
  ### Pattern guessing finds too many emails
421
416
  - **Cause**: Domain is catch-all (accepts all addresses)
422
- - **Solution**: Enable BounceBan verification or use Hunter.io/Apollo for confirmation
417
+ - **Solution**: Enable BounceBan verification or use Hunter.io for confirmation
423
418
 
424
419
  ### SmartProspect matches are inaccurate
425
420
  - **Causes**:
@@ -1 +1 @@
1
- window.hierarchyData = "eJyVkD0LwjAURf/LnVMltlqaUXAUB8fSIaQpCaZpSZ5T6X+X+kVBkTq94d3LOe8NCF1HEaLMecbSglcMQTdOK7KdjxAD0oJPw8tWQ+CoKVgVwXCxvobYbHcM1+AgYD3p0Eil4/qZWhlqHRiUkzFCgGKdTLXkHZ2Wxro6aA9RZjytRoaMp5/Es5d9NB0tI7/SCwxGhpxnM+DBB6tMqz2d+scXfiM/8v+enfOiulsUM4u9JGX+VfleWvKEcbwBuI2wKA=="
1
+ window.hierarchyData = "eJyVkD0LwjAURf/LnaOSthqaUXAUB0fpENKUBNO0JM+p9L9L/UJQpE5vePdyznsDYtdRgjwJnrG85BVDNI03mlwXEuSAvOTTCKo1kNgbik4nMJxdqCGz9YbhEj0kXCATG6VNWj1SS0utB4P2KiVIUKoXU23xik5L63wdTYA8FTyvRoaC55/EY1B9sh3NIz/TMwxGBsGzN+AuRKdtawId+vsXfiM/8v+eLbiobhbizWKrSNt/Vb6X5jxhHK+wh7Ag"
@@ -1 +1 @@
1
- window.navigationData = "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"
1
+ window.navigationData = "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"