@dealdesk/server 2026.602.0 → 2026.603.0

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 (140) hide show
  1. package/dist/deal-desk/enrichment/__tests__/hunter-client.test.d.ts +2 -0
  2. package/dist/deal-desk/enrichment/__tests__/hunter-client.test.d.ts.map +1 -0
  3. package/dist/deal-desk/enrichment/__tests__/hunter-client.test.js +106 -0
  4. package/dist/deal-desk/enrichment/__tests__/hunter-client.test.js.map +1 -0
  5. package/dist/deal-desk/enrichment/__tests__/hunter-config.test.d.ts +2 -0
  6. package/dist/deal-desk/enrichment/__tests__/hunter-config.test.d.ts.map +1 -0
  7. package/dist/deal-desk/enrichment/__tests__/hunter-config.test.js +73 -0
  8. package/dist/deal-desk/enrichment/__tests__/hunter-config.test.js.map +1 -0
  9. package/dist/deal-desk/enrichment/__tests__/provider.test.d.ts +2 -0
  10. package/dist/deal-desk/enrichment/__tests__/provider.test.d.ts.map +1 -0
  11. package/dist/deal-desk/enrichment/__tests__/provider.test.js +77 -0
  12. package/dist/deal-desk/enrichment/__tests__/provider.test.js.map +1 -0
  13. package/dist/deal-desk/enrichment/__tests__/resolve-contact-email.test.js +33 -0
  14. package/dist/deal-desk/enrichment/__tests__/resolve-contact-email.test.js.map +1 -1
  15. package/dist/deal-desk/enrichment/enrichment-types.d.ts +38 -0
  16. package/dist/deal-desk/enrichment/enrichment-types.d.ts.map +1 -0
  17. package/dist/deal-desk/enrichment/enrichment-types.js +3 -0
  18. package/dist/deal-desk/enrichment/enrichment-types.js.map +1 -0
  19. package/dist/deal-desk/enrichment/hunter-client.d.ts +44 -0
  20. package/dist/deal-desk/enrichment/hunter-client.d.ts.map +1 -0
  21. package/dist/deal-desk/enrichment/hunter-client.js +112 -0
  22. package/dist/deal-desk/enrichment/hunter-client.js.map +1 -0
  23. package/dist/deal-desk/enrichment/hunter-config.d.ts +41 -0
  24. package/dist/deal-desk/enrichment/hunter-config.d.ts.map +1 -0
  25. package/dist/deal-desk/enrichment/hunter-config.js +58 -0
  26. package/dist/deal-desk/enrichment/hunter-config.js.map +1 -0
  27. package/dist/deal-desk/enrichment/provider.d.ts +25 -0
  28. package/dist/deal-desk/enrichment/provider.d.ts.map +1 -0
  29. package/dist/deal-desk/enrichment/provider.js +43 -0
  30. package/dist/deal-desk/enrichment/provider.js.map +1 -0
  31. package/dist/deal-desk/enrichment/resolve-contact-email.d.ts +42 -7
  32. package/dist/deal-desk/enrichment/resolve-contact-email.d.ts.map +1 -1
  33. package/dist/deal-desk/enrichment/resolve-contact-email.js +120 -51
  34. package/dist/deal-desk/enrichment/resolve-contact-email.js.map +1 -1
  35. package/dist/deal-desk/tools/__tests__/enrichment-preference.test.d.ts +2 -0
  36. package/dist/deal-desk/tools/__tests__/enrichment-preference.test.d.ts.map +1 -0
  37. package/dist/deal-desk/tools/__tests__/enrichment-preference.test.js +90 -0
  38. package/dist/deal-desk/tools/__tests__/enrichment-preference.test.js.map +1 -0
  39. package/dist/deal-desk/tools/__tests__/hunter-api-key.test.d.ts +2 -0
  40. package/dist/deal-desk/tools/__tests__/hunter-api-key.test.d.ts.map +1 -0
  41. package/dist/deal-desk/tools/__tests__/hunter-api-key.test.js +101 -0
  42. package/dist/deal-desk/tools/__tests__/hunter-api-key.test.js.map +1 -0
  43. package/dist/deal-desk/tools/enrich-contact.d.ts +5 -2
  44. package/dist/deal-desk/tools/enrich-contact.d.ts.map +1 -1
  45. package/dist/deal-desk/tools/enrich-contact.js +26 -24
  46. package/dist/deal-desk/tools/enrich-contact.js.map +1 -1
  47. package/dist/deal-desk/tools/enrichment-preference.d.ts +8 -0
  48. package/dist/deal-desk/tools/enrichment-preference.d.ts.map +1 -0
  49. package/dist/deal-desk/tools/enrichment-preference.js +41 -0
  50. package/dist/deal-desk/tools/enrichment-preference.js.map +1 -0
  51. package/dist/deal-desk/tools/hunter-api-key.d.ts +11 -0
  52. package/dist/deal-desk/tools/hunter-api-key.d.ts.map +1 -0
  53. package/dist/deal-desk/tools/hunter-api-key.js +67 -0
  54. package/dist/deal-desk/tools/hunter-api-key.js.map +1 -0
  55. package/dist/deal-desk/tools/index.d.ts.map +1 -1
  56. package/dist/deal-desk/tools/index.js +42 -11
  57. package/dist/deal-desk/tools/index.js.map +1 -1
  58. package/dist/deal-desk/tools/outreach-approve.d.ts +4 -0
  59. package/dist/deal-desk/tools/outreach-approve.d.ts.map +1 -1
  60. package/dist/deal-desk/tools/outreach-approve.js +7 -8
  61. package/dist/deal-desk/tools/outreach-approve.js.map +1 -1
  62. package/dist/deal-desk/tools/outreach-draft.d.ts +4 -0
  63. package/dist/deal-desk/tools/outreach-draft.d.ts.map +1 -1
  64. package/dist/deal-desk/tools/outreach-draft.js +8 -6
  65. package/dist/deal-desk/tools/outreach-draft.js.map +1 -1
  66. package/package.json +15 -15
  67. package/ui-dist/assets/{_basePickBy-DwWOr88_.js → _basePickBy-CBVIeEkV.js} +1 -1
  68. package/ui-dist/assets/{_baseUniq-CpZRwg6K.js → _baseUniq-BcwaQnkH.js} +1 -1
  69. package/ui-dist/assets/{arc-BJjnUC8F.js → arc-DqmTiJ9l.js} +1 -1
  70. package/ui-dist/assets/{architectureDiagram-VXUJARFQ-CdT0Osky.js → architectureDiagram-VXUJARFQ-C2PZuz_4.js} +1 -1
  71. package/ui-dist/assets/{blockDiagram-VD42YOAC-CWs_Lkvd.js → blockDiagram-VD42YOAC-CHzu2Ctw.js} +1 -1
  72. package/ui-dist/assets/{c4Diagram-YG6GDRKO-HzpQcNSc.js → c4Diagram-YG6GDRKO-DLvbjDP5.js} +1 -1
  73. package/ui-dist/assets/channel-HcwSzs_N.js +1 -0
  74. package/ui-dist/assets/{chunk-4BX2VUAB-5Ech8UIH.js → chunk-4BX2VUAB-D4IgQx7K.js} +1 -1
  75. package/ui-dist/assets/{chunk-55IACEB6-JlgBQqUF.js → chunk-55IACEB6-BH1i5XQo.js} +1 -1
  76. package/ui-dist/assets/{chunk-B4BG7PRW-aPW1zlxp.js → chunk-B4BG7PRW-CuPShkE9.js} +1 -1
  77. package/ui-dist/assets/{chunk-DI55MBZ5-B2WCWvF3.js → chunk-DI55MBZ5-Bi_J3Z0D.js} +1 -1
  78. package/ui-dist/assets/{chunk-FMBD7UC4-D10yrE4W.js → chunk-FMBD7UC4-BwRwTbFX.js} +1 -1
  79. package/ui-dist/assets/{chunk-QN33PNHL-CwJQOqGm.js → chunk-QN33PNHL-BN35apwc.js} +1 -1
  80. package/ui-dist/assets/{chunk-QZHKN3VN-vnse-gij.js → chunk-QZHKN3VN-COm56_LM.js} +1 -1
  81. package/ui-dist/assets/{chunk-TZMSLE5B-C-92VuUn.js → chunk-TZMSLE5B-Xj2KL_0Y.js} +1 -1
  82. package/ui-dist/assets/classDiagram-2ON5EDUG-B07Ltkzj.js +1 -0
  83. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-B07Ltkzj.js +1 -0
  84. package/ui-dist/assets/clone-B7h-gniq.js +1 -0
  85. package/ui-dist/assets/{cose-bilkent-S5V4N54A-BiAQPmY0.js → cose-bilkent-S5V4N54A-FLFC6_gO.js} +1 -1
  86. package/ui-dist/assets/{dagre-6UL2VRFP-47548L5D.js → dagre-6UL2VRFP-0d32lGTp.js} +1 -1
  87. package/ui-dist/assets/{diagram-PSM6KHXK-Br3s-bMp.js → diagram-PSM6KHXK-CDNGXG5P.js} +1 -1
  88. package/ui-dist/assets/{diagram-QEK2KX5R-Cm0-q6VP.js → diagram-QEK2KX5R-C0vaPlrd.js} +1 -1
  89. package/ui-dist/assets/{diagram-S2PKOQOG-CnPr3tDl.js → diagram-S2PKOQOG-UxrlUeu-.js} +1 -1
  90. package/ui-dist/assets/{erDiagram-Q2GNP2WA-DDPEFyDr.js → erDiagram-Q2GNP2WA-FL0kguuL.js} +1 -1
  91. package/ui-dist/assets/{flowDiagram-NV44I4VS-CAce7tYM.js → flowDiagram-NV44I4VS-DnEzeK5O.js} +1 -1
  92. package/ui-dist/assets/{ganttDiagram-JELNMOA3-B2x1k-vZ.js → ganttDiagram-JELNMOA3-f03KncDX.js} +1 -1
  93. package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-Bg7GDwgW.js → gitGraphDiagram-V2S2FVAM-y4Oi65_k.js} +1 -1
  94. package/ui-dist/assets/{graph-Cu8Q2HKH.js → graph-CFWov-m4.js} +1 -1
  95. package/ui-dist/assets/{index-BxIq29RG.js → index-B-BAVU8b.js} +1 -1
  96. package/ui-dist/assets/{index-Cb-ht810.js → index-Bd7zw6ip.js} +1 -1
  97. package/ui-dist/assets/{index-CEDEKLj9.js → index-BmqFzV8-.js} +1 -1
  98. package/ui-dist/assets/{index-DTZ27V1D.js → index-Btdsi4zo.js} +1 -1
  99. package/ui-dist/assets/{index-Curmq75X.js → index-By5eCrIU.js} +1 -1
  100. package/ui-dist/assets/{index-WAMTaBNf.js → index-C5zqtXrw.js} +1 -1
  101. package/ui-dist/assets/{index-DEIO_uQm.js → index-CFI3SAZE.js} +1 -1
  102. package/ui-dist/assets/{index-DVEcTyb3.js → index-CTJ29Xh5.js} +1 -1
  103. package/ui-dist/assets/{index-Y3rUJZNI.js → index-CU0mrwVT.js} +145 -145
  104. package/ui-dist/assets/{index-B7ZPKu4m.js → index-CV_d1E37.js} +1 -1
  105. package/ui-dist/assets/{index-7Z5DdZnx.js → index-CddqJ4G5.js} +1 -1
  106. package/ui-dist/assets/{index-DgNhCzjb.js → index-CgGLDqng.js} +1 -1
  107. package/ui-dist/assets/{index-DgFnrn9g.js → index-CyvVv96c.js} +1 -1
  108. package/ui-dist/assets/{index-C8pSfj4H.js → index-D4ouuOrO.js} +1 -1
  109. package/ui-dist/assets/{index-UodULlDv.js → index-DCn3d1Sw.js} +1 -1
  110. package/ui-dist/assets/{index-BKxmKohc.js → index-DWAFlBdn.js} +1 -1
  111. package/ui-dist/assets/{index-D2Wwuzko.js → index-DqYJhcon.js} +1 -1
  112. package/ui-dist/assets/{index-U5bRXfqa.js → index-Dwv7AqVT.js} +1 -1
  113. package/ui-dist/assets/{index-objXXDnI.js → index-DydmEOe-.js} +1 -1
  114. package/ui-dist/assets/{index-BPj0MrWd.js → index-FhdjGuIa.js} +1 -1
  115. package/ui-dist/assets/{index-CdDzCK75.js → index-RDsxbDSf.js} +1 -1
  116. package/ui-dist/assets/{index-HNbl2bYf.js → index-ScEFFiXG.js} +1 -1
  117. package/ui-dist/assets/{index-d75ohwb-.js → index-swVBgd_3.js} +1 -1
  118. package/ui-dist/assets/{infoDiagram-HS3SLOUP-Cs_VRWO2.js → infoDiagram-HS3SLOUP-BT8yT7sJ.js} +1 -1
  119. package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-DBuD4Cs4.js → journeyDiagram-XKPGCS4Q-C8DG43aT.js} +1 -1
  120. package/ui-dist/assets/{kanban-definition-3W4ZIXB7-XQewDHuN.js → kanban-definition-3W4ZIXB7-BbShlSAl.js} +1 -1
  121. package/ui-dist/assets/{layout-BQBi-06x.js → layout-CCS2XC8t.js} +1 -1
  122. package/ui-dist/assets/{linear-CV-3IwCQ.js → linear-2TvgGQfb.js} +1 -1
  123. package/ui-dist/assets/{mermaid.core-BjtjTDjW.js → mermaid.core-BAFI4dXm.js} +4 -4
  124. package/ui-dist/assets/{mindmap-definition-VGOIOE7T-BSwrgGR0.js → mindmap-definition-VGOIOE7T-BcHv1Ud7.js} +1 -1
  125. package/ui-dist/assets/{pieDiagram-ADFJNKIX-D2Ld6W2K.js → pieDiagram-ADFJNKIX-CNO1-Z0g.js} +1 -1
  126. package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-CC-3W4Ew.js → quadrantDiagram-AYHSOK5B-DfE50a-U.js} +1 -1
  127. package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-LecHxaoD.js → requirementDiagram-UZGBJVZJ-CgcgBiHz.js} +1 -1
  128. package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-G0nc_HwC.js → sankeyDiagram-TZEHDZUN-BqpKVSYn.js} +1 -1
  129. package/ui-dist/assets/{sequenceDiagram-WL72ISMW-DyRtxnJ1.js → sequenceDiagram-WL72ISMW-Vbv-XA05.js} +1 -1
  130. package/ui-dist/assets/{stateDiagram-FKZM4ZOC-DCjr80Q9.js → stateDiagram-FKZM4ZOC-C1GZ_hr8.js} +1 -1
  131. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-D4JPxYX0.js +1 -0
  132. package/ui-dist/assets/{timeline-definition-IT6M3QCI-B320sNWa.js → timeline-definition-IT6M3QCI-Gcr-dBCd.js} +1 -1
  133. package/ui-dist/assets/{treemap-GDKQZRPO-CKSC63wo.js → treemap-GDKQZRPO-B_zJkapD.js} +1 -1
  134. package/ui-dist/assets/{xychartDiagram-PRI3JC2R-C2bwBKPy.js → xychartDiagram-PRI3JC2R-jk1Yj15T.js} +1 -1
  135. package/ui-dist/index.html +1 -1
  136. package/ui-dist/assets/channel-Bx1cQOlG.js +0 -1
  137. package/ui-dist/assets/classDiagram-2ON5EDUG-DN55gDiF.js +0 -1
  138. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-DN55gDiF.js +0 -1
  139. package/ui-dist/assets/clone-p0FlLxQR.js +0 -1
  140. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-oHM0fBdq.js +0 -1
@@ -0,0 +1,41 @@
1
+ import type { SecretConfigStore } from "./enrichment-types.js";
2
+ export declare const HUNTER_API_KEY_SECRET_KEY: "hunter.api_key";
3
+ export declare const HUNTER_CAPABILITIES_SECRET_KEY: "hunter.capabilities";
4
+ export interface HunterCapabilities {
5
+ /** Key authenticated against GET /v2/account. */
6
+ valid: boolean;
7
+ planName: string | null;
8
+ searchesUsed: number | null;
9
+ searchesAvailable: number | null;
10
+ lastValidatedAt: string;
11
+ }
12
+ /** Re-exported for callers that prefer the provider-specific name. */
13
+ export type HunterConfigStore = SecretConfigStore;
14
+ export declare function saveHunterApiKey(args: {
15
+ companyId: string;
16
+ apiKey: string;
17
+ }, ctx: {
18
+ store: SecretConfigStore;
19
+ }): Promise<void>;
20
+ export declare function loadHunterApiKey(args: {
21
+ companyId: string;
22
+ }, ctx: {
23
+ store: SecretConfigStore;
24
+ }): Promise<string | null>;
25
+ export declare function deleteHunterApiKey(args: {
26
+ companyId: string;
27
+ }, ctx: {
28
+ store: SecretConfigStore;
29
+ }): Promise<void>;
30
+ export declare function saveHunterCapabilities(args: {
31
+ companyId: string;
32
+ capabilities: HunterCapabilities;
33
+ }, ctx: {
34
+ store: SecretConfigStore;
35
+ }): Promise<void>;
36
+ export declare function loadHunterCapabilities(args: {
37
+ companyId: string;
38
+ }, ctx: {
39
+ store: SecretConfigStore;
40
+ }): Promise<HunterCapabilities | null>;
41
+ //# sourceMappingURL=hunter-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hunter-config.d.ts","sourceRoot":"","sources":["../../../src/deal-desk/enrichment/hunter-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,eAAO,MAAM,yBAAyB,EAAG,gBAAyB,CAAC;AACnE,eAAO,MAAM,8BAA8B,EAAG,qBAA8B,CAAC;AAE7E,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAElD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC3C,GAAG,EAAE;IAAE,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3B,GAAG,EAAE;IAAE,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3B,GAAG,EAAE;IAAE,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,kBAAkB,CAAA;CAAE,EAC7D,GAAG,EAAE;IAAE,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3B,GAAG,EAAE;IAAE,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAChC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAUpC"}
@@ -0,0 +1,58 @@
1
+ export const HUNTER_API_KEY_SECRET_KEY = "hunter.api_key";
2
+ export const HUNTER_CAPABILITIES_SECRET_KEY = "hunter.capabilities";
3
+ export async function saveHunterApiKey(args, ctx) {
4
+ const existing = await ctx.store.getByKey(args.companyId, HUNTER_API_KEY_SECRET_KEY);
5
+ if (existing) {
6
+ await ctx.store.replace(existing.id, { value: args.apiKey });
7
+ return;
8
+ }
9
+ await ctx.store.create(args.companyId, {
10
+ name: "Hunter.io API Key",
11
+ key: HUNTER_API_KEY_SECRET_KEY,
12
+ value: args.apiKey,
13
+ description: "Hunter.io API key for contact enrichment",
14
+ });
15
+ }
16
+ export async function loadHunterApiKey(args, ctx) {
17
+ const existing = await ctx.store.getByKey(args.companyId, HUNTER_API_KEY_SECRET_KEY);
18
+ if (!existing)
19
+ return null;
20
+ return ctx.store.load(args.companyId, existing.id);
21
+ }
22
+ export async function deleteHunterApiKey(args, ctx) {
23
+ const existing = await ctx.store.getByKey(args.companyId, HUNTER_API_KEY_SECRET_KEY);
24
+ if (existing)
25
+ await ctx.store.remove(existing.id);
26
+ const caps = await ctx.store.getByKey(args.companyId, HUNTER_CAPABILITIES_SECRET_KEY);
27
+ if (caps)
28
+ await ctx.store.remove(caps.id);
29
+ }
30
+ export async function saveHunterCapabilities(args, ctx) {
31
+ const payload = JSON.stringify(args.capabilities);
32
+ const existing = await ctx.store.getByKey(args.companyId, HUNTER_CAPABILITIES_SECRET_KEY);
33
+ if (existing) {
34
+ await ctx.store.replace(existing.id, { value: payload });
35
+ return;
36
+ }
37
+ await ctx.store.create(args.companyId, {
38
+ name: "Hunter.io Capabilities",
39
+ key: HUNTER_CAPABILITIES_SECRET_KEY,
40
+ value: payload,
41
+ description: "Validated Hunter.io API capabilities for contact enrichment",
42
+ });
43
+ }
44
+ export async function loadHunterCapabilities(args, ctx) {
45
+ const existing = await ctx.store.getByKey(args.companyId, HUNTER_CAPABILITIES_SECRET_KEY);
46
+ if (!existing)
47
+ return null;
48
+ const raw = await ctx.store.load(args.companyId, existing.id);
49
+ if (!raw)
50
+ return null;
51
+ try {
52
+ return JSON.parse(raw);
53
+ }
54
+ catch {
55
+ return null;
56
+ }
57
+ }
58
+ //# sourceMappingURL=hunter-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hunter-config.js","sourceRoot":"","sources":["../../../src/deal-desk/enrichment/hunter-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { EnrichmentProvider, SecretConfigStore } from "./enrichment-types.js";
2
+ export declare const PREFERRED_PROVIDER_SECRET_KEY: "enrichment.preferred_provider";
3
+ /**
4
+ * Decide which provider DealDesk should use for a company.
5
+ * - both configured -> the preferred provider (default "apollo")
6
+ * - one configured -> that provider
7
+ * - neither -> null
8
+ */
9
+ export declare function resolveEffectiveProvider(args: {
10
+ apolloConfigured: boolean;
11
+ hunterConfigured: boolean;
12
+ preferred: EnrichmentProvider | null;
13
+ }): EnrichmentProvider | null;
14
+ export declare function savePreferredProvider(args: {
15
+ companyId: string;
16
+ provider: EnrichmentProvider;
17
+ }, ctx: {
18
+ store: SecretConfigStore;
19
+ }): Promise<void>;
20
+ export declare function loadPreferredProvider(args: {
21
+ companyId: string;
22
+ }, ctx: {
23
+ store: SecretConfigStore;
24
+ }): Promise<EnrichmentProvider | null>;
25
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/deal-desk/enrichment/provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEnF,eAAO,MAAM,6BAA6B,EAAG,+BAAwC,CAAC;AAQtF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACtC,GAAG,kBAAkB,GAAG,IAAI,CAQ5B;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,EACzD,GAAG,EAAE;IAAE,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3B,GAAG,EAAE;IAAE,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAChC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAKpC"}
@@ -0,0 +1,43 @@
1
+ export const PREFERRED_PROVIDER_SECRET_KEY = "enrichment.preferred_provider";
2
+ const PROVIDERS = ["apollo", "hunter"];
3
+ function isEnrichmentProvider(value) {
4
+ return typeof value === "string" && PROVIDERS.includes(value);
5
+ }
6
+ /**
7
+ * Decide which provider DealDesk should use for a company.
8
+ * - both configured -> the preferred provider (default "apollo")
9
+ * - one configured -> that provider
10
+ * - neither -> null
11
+ */
12
+ export function resolveEffectiveProvider(args) {
13
+ const { apolloConfigured, hunterConfigured, preferred } = args;
14
+ if (apolloConfigured && hunterConfigured) {
15
+ return preferred ?? "apollo";
16
+ }
17
+ if (apolloConfigured)
18
+ return "apollo";
19
+ if (hunterConfigured)
20
+ return "hunter";
21
+ return null;
22
+ }
23
+ export async function savePreferredProvider(args, ctx) {
24
+ const existing = await ctx.store.getByKey(args.companyId, PREFERRED_PROVIDER_SECRET_KEY);
25
+ if (existing) {
26
+ await ctx.store.replace(existing.id, { value: args.provider });
27
+ return;
28
+ }
29
+ await ctx.store.create(args.companyId, {
30
+ name: "Preferred enrichment provider",
31
+ key: PREFERRED_PROVIDER_SECRET_KEY,
32
+ value: args.provider,
33
+ description: "Which contact-enrichment provider DealDesk uses when more than one is configured",
34
+ });
35
+ }
36
+ export async function loadPreferredProvider(args, ctx) {
37
+ const existing = await ctx.store.getByKey(args.companyId, PREFERRED_PROVIDER_SECRET_KEY);
38
+ if (!existing)
39
+ return null;
40
+ const raw = await ctx.store.load(args.companyId, existing.id);
41
+ return isEnrichmentProvider(raw) ? raw : null;
42
+ }
43
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/deal-desk/enrichment/provider.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,6BAA6B,GAAG,+BAAwC,CAAC;AAEtF,MAAM,SAAS,GAAkC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAEtE,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,SAA+B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAIxC;IACC,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC/D,IAAI,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;QACzC,OAAO,SAAS,IAAI,QAAQ,CAAC;IAC/B,CAAC;IACD,IAAI,gBAAgB;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,gBAAgB;QAAE,OAAO,QAAQ,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAyD,EACzD,GAAiC;IAEjC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;IACzF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;QACrC,IAAI,EAAE,+BAA+B;QACrC,GAAG,EAAE,6BAA6B;QAClC,KAAK,EAAE,IAAI,CAAC,QAAQ;QACpB,WAAW,EAAE,kFAAkF;KAChG,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAA2B,EAC3B,GAAiC;IAEjC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;IACzF,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC"}
@@ -1,11 +1,13 @@
1
1
  import type { Db } from "@dealdesk/db";
2
- import { resolvePersonEmail, type ApolloEmailStatus } from "./apollo-client.js";
3
- export type ResolveContactEmailErrorCode = "apollo_not_configured" | "contact_not_found" | "company_mismatch" | "missing_contact_fields" | "apollo_master_key_required" | "apollo_plan_blocked" | "apollo_credits_exhausted" | "apollo_lookup_failed" | "no_email_found";
2
+ import { resolvePersonEmail } from "./apollo-client.js";
3
+ import { resolveHunterEmail } from "./hunter-client.js";
4
+ import type { EmailStatus, EnrichmentProvider, EnrichmentSelection } from "./enrichment-types.js";
5
+ export type ResolveContactEmailErrorCode = "apollo_not_configured" | "contact_not_found" | "company_mismatch" | "missing_contact_fields" | "apollo_master_key_required" | "apollo_plan_blocked" | "apollo_credits_exhausted" | "apollo_lookup_failed" | "hunter_auth_failed" | "hunter_rate_limited" | "hunter_pii_restricted" | "hunter_lookup_failed" | "no_email_found";
4
6
  export type ResolveContactEmailSuccess = {
5
7
  ok: true;
6
8
  email: string;
7
- emailStatus: ApolloEmailStatus;
8
- source: "apollo";
9
+ emailStatus: EmailStatus;
10
+ source: EnrichmentProvider;
9
11
  apolloPersonId?: string | null;
10
12
  contactId: string;
11
13
  firstName: string;
@@ -18,13 +20,28 @@ export type ResolveContactEmailFailure = {
18
20
  code: ResolveContactEmailErrorCode;
19
21
  };
20
22
  export type ResolveContactEmailResult = ResolveContactEmailSuccess | ResolveContactEmailFailure;
23
+ /** Resolve the effective provider + key for a company. */
24
+ export type LoadEnrichment = (companyId: string) => Promise<EnrichmentSelection | null>;
21
25
  export interface ResolveContactEmailDeps {
22
26
  db: Db;
23
27
  companyId: string;
24
28
  contactId: string;
25
- loadApolloKey: (companyId: string) => Promise<string | null>;
29
+ /** Provider-aware loader (preferred). */
30
+ loadEnrichment?: LoadEnrichment;
31
+ /** Legacy Apollo-only loader; wrapped as the apollo provider when present. */
32
+ loadApolloKey?: (companyId: string) => Promise<string | null>;
26
33
  resolvePersonEmailFn?: typeof resolvePersonEmail;
34
+ resolveHunterEmailFn?: typeof resolveHunterEmail;
27
35
  }
36
+ /**
37
+ * Build a provider-aware selection loader from handler deps. Prefers an explicit
38
+ * `loadEnrichment`; otherwise wraps a legacy Apollo-only `loadApolloKey` as the
39
+ * apollo provider. Returns a loader that yields null when nothing is configured.
40
+ */
41
+ export declare function enrichmentLoaderFrom(deps: {
42
+ loadEnrichment?: LoadEnrichment;
43
+ loadApolloKey?: (companyId: string) => Promise<string | null>;
44
+ }): LoadEnrichment;
28
45
  export declare function loadContactForEnrichment(db: Db, args: {
29
46
  companyId: string;
30
47
  contactId: string;
@@ -39,24 +56,42 @@ export declare function loadContactForEnrichment(db: Db, args: {
39
56
  emailStatus: string;
40
57
  companyDomain: string | null;
41
58
  } | null>;
59
+ /**
60
+ * Whether a contact needs (re)enrichment. An email is trusted as-is only when it
61
+ * came from a known enrichment provider and is already verified; everything else
62
+ * gets resolved/verified again.
63
+ *
64
+ * Name retained for backwards compatibility; covers all providers.
65
+ */
42
66
  export declare function contactNeedsApolloEnrichment(contact: {
43
67
  email: string | null;
44
68
  source: string | null;
45
69
  emailStatus: string;
46
70
  }): boolean;
71
+ /** Provider-agnostic alias. */
72
+ export declare const contactNeedsEnrichment: typeof contactNeedsApolloEnrichment;
47
73
  export declare function resolveContactEmail(deps: ResolveContactEmailDeps): Promise<ResolveContactEmailResult>;
48
74
  export declare function persistResolvedContactEmail(db: Db, args: {
49
75
  contactId: string;
50
76
  email: string;
51
- emailStatus: ApolloEmailStatus;
77
+ emailStatus: EmailStatus;
78
+ source: EnrichmentProvider;
52
79
  enrichedByAgentId?: string | null;
53
80
  }): Promise<void>;
81
+ /**
82
+ * Ensure a contact has a usable email, enriching via the company's configured
83
+ * provider when needed. Name retained for backwards compatibility; works for
84
+ * any provider.
85
+ */
54
86
  export declare function ensureContactEmailFromApollo(deps: ResolveContactEmailDeps & {
55
87
  enrichedByAgentId?: string | null;
56
88
  }): Promise<{
57
89
  ok: true;
58
90
  email: string;
59
- emailStatus: ApolloEmailStatus;
91
+ emailStatus: EmailStatus;
92
+ source: EnrichmentProvider;
60
93
  enriched: boolean;
61
94
  } | ResolveContactEmailFailure>;
95
+ /** Provider-agnostic alias. */
96
+ export declare const ensureContactEmail: typeof ensureContactEmailFromApollo;
62
97
  //# sourceMappingURL=resolve-contact-email.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-contact-email.d.ts","sourceRoot":"","sources":["../../../src/deal-desk/enrichment/resolve-contact-email.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-contact-email.d.ts","sourceRoot":"","sources":["../../../src/deal-desk/enrichment/resolve-contact-email.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,21 @@
1
1
  import { and, eq } from "drizzle-orm";
2
2
  import { ddContacts, ddTargets } from "@dealdesk/db";
3
- import { ApolloApiError, resolvePersonEmail, } from "./apollo-client.js";
3
+ import { ApolloApiError, resolvePersonEmail } from "./apollo-client.js";
4
+ import { HunterApiError, resolveHunterEmail } from "./hunter-client.js";
5
+ /**
6
+ * Build a provider-aware selection loader from handler deps. Prefers an explicit
7
+ * `loadEnrichment`; otherwise wraps a legacy Apollo-only `loadApolloKey` as the
8
+ * apollo provider. Returns a loader that yields null when nothing is configured.
9
+ */
10
+ export function enrichmentLoaderFrom(deps) {
11
+ if (deps.loadEnrichment)
12
+ return deps.loadEnrichment;
13
+ const legacy = deps.loadApolloKey;
14
+ return async (companyId) => {
15
+ const apiKey = legacy ? await legacy(companyId) : null;
16
+ return apiKey ? { provider: "apollo", apiKey } : null;
17
+ };
18
+ }
4
19
  function extractCompanyDomain(website) {
5
20
  if (!website)
6
21
  return null;
@@ -43,22 +58,75 @@ export async function loadContactForEnrichment(db, args) {
43
58
  companyDomain: extractCompanyDomain(row.website),
44
59
  };
45
60
  }
61
+ const TRUSTED_ENRICHMENT_SOURCES = new Set(["apollo", "hunter"]);
62
+ /**
63
+ * Whether a contact needs (re)enrichment. An email is trusted as-is only when it
64
+ * came from a known enrichment provider and is already verified; everything else
65
+ * gets resolved/verified again.
66
+ *
67
+ * Name retained for backwards compatibility; covers all providers.
68
+ */
46
69
  export function contactNeedsApolloEnrichment(contact) {
47
70
  if (!contact.email)
48
71
  return true;
49
- // Only Apollo-sourced emails are trusted as-is; anything else gets Apollo-verified.
50
- if (contact.source !== "apollo")
72
+ if (!contact.source || !TRUSTED_ENRICHMENT_SOURCES.has(contact.source))
51
73
  return true;
52
74
  return contact.emailStatus === "unverified";
53
75
  }
76
+ /** Provider-agnostic alias. */
77
+ export const contactNeedsEnrichment = contactNeedsApolloEnrichment;
78
+ function mapApolloError(err) {
79
+ if (!(err instanceof ApolloApiError))
80
+ return null;
81
+ if (err.code === "apollo_plan_blocked") {
82
+ return {
83
+ ok: false,
84
+ code: "apollo_plan_blocked",
85
+ reason: "Apollo cannot reveal emails on this plan. Upgrade at https://app.apollo.io/ or add a verified email manually.",
86
+ };
87
+ }
88
+ if (err.code === "apollo_master_key_required") {
89
+ return {
90
+ ok: false,
91
+ code: "apollo_master_key_required",
92
+ reason: "Apollo requires a Master API key for enrichment. Create one at https://app.apollo.io/#/settings/integrations/api",
93
+ };
94
+ }
95
+ if (err.code === "apollo_credits_exhausted") {
96
+ return {
97
+ ok: false,
98
+ code: "apollo_credits_exhausted",
99
+ reason: "Apollo enrichment credits exhausted. Add credits at https://app.apollo.io/ or add a verified email manually.",
100
+ };
101
+ }
102
+ return {
103
+ ok: false,
104
+ code: "apollo_lookup_failed",
105
+ reason: err.message,
106
+ };
107
+ }
108
+ function mapHunterError(err) {
109
+ if (!(err instanceof HunterApiError))
110
+ return null;
111
+ if (err.code === "hunter_auth_failed") {
112
+ return { ok: false, code: "hunter_auth_failed", reason: err.message };
113
+ }
114
+ if (err.code === "hunter_rate_limited") {
115
+ return { ok: false, code: "hunter_rate_limited", reason: err.message };
116
+ }
117
+ if (err.code === "hunter_pii_restricted") {
118
+ return { ok: false, code: "hunter_pii_restricted", reason: err.message };
119
+ }
120
+ return { ok: false, code: "hunter_lookup_failed", reason: err.message };
121
+ }
54
122
  export async function resolveContactEmail(deps) {
55
- const resolveFn = deps.resolvePersonEmailFn ?? resolvePersonEmail;
56
- const apiKey = await deps.loadApolloKey(deps.companyId);
57
- if (!apiKey) {
123
+ const loadSelection = enrichmentLoaderFrom(deps);
124
+ const selection = await loadSelection(deps.companyId);
125
+ if (!selection) {
58
126
  return {
59
127
  ok: false,
60
128
  code: "apollo_not_configured",
61
- reason: "Apollo.io API key not configured for this company. Visit /deal-desk/email-accounts to set it up.",
129
+ reason: "No contact-enrichment provider configured for this company. Visit /deal-desk/email-accounts to add an Apollo.io or Hunter.io API key.",
62
130
  };
63
131
  }
64
132
  const contact = await loadContactForEnrichment(deps.db, {
@@ -66,11 +134,7 @@ export async function resolveContactEmail(deps) {
66
134
  contactId: deps.contactId,
67
135
  });
68
136
  if (!contact) {
69
- return {
70
- ok: false,
71
- code: "contact_not_found",
72
- reason: "contact not found",
73
- };
137
+ return { ok: false, code: "contact_not_found", reason: "contact not found" };
74
138
  }
75
139
  if (contact.dealDeskCompanyId !== deps.companyId) {
76
140
  return {
@@ -88,42 +152,41 @@ export async function resolveContactEmail(deps) {
88
152
  }
89
153
  let match;
90
154
  try {
91
- match = await resolveFn({
92
- firstName: contact.firstName,
93
- lastName: contact.lastName,
94
- companyDomain: contact.companyDomain,
95
- title: contact.title ?? undefined,
96
- apiKey,
97
- });
155
+ if (selection.provider === "hunter") {
156
+ const resolveHunterFn = deps.resolveHunterEmailFn ?? resolveHunterEmail;
157
+ const result = await resolveHunterFn({
158
+ firstName: contact.firstName,
159
+ lastName: contact.lastName,
160
+ companyDomain: contact.companyDomain,
161
+ title: contact.title ?? undefined,
162
+ apiKey: selection.apiKey,
163
+ });
164
+ match = { email: result.email, emailStatus: result.emailStatus };
165
+ }
166
+ else {
167
+ const resolveApolloFn = deps.resolvePersonEmailFn ?? resolvePersonEmail;
168
+ const result = await resolveApolloFn({
169
+ firstName: contact.firstName,
170
+ lastName: contact.lastName,
171
+ companyDomain: contact.companyDomain,
172
+ title: contact.title ?? undefined,
173
+ apiKey: selection.apiKey,
174
+ });
175
+ match = {
176
+ email: result.email,
177
+ emailStatus: result.emailStatus,
178
+ apolloPersonId: result.apolloPersonId ?? null,
179
+ };
180
+ }
98
181
  }
99
182
  catch (err) {
100
- if (err instanceof ApolloApiError) {
101
- if (err.code === "apollo_plan_blocked") {
102
- return {
103
- ok: false,
104
- code: "apollo_plan_blocked",
105
- reason: "Apollo cannot reveal emails on this plan. Upgrade at https://app.apollo.io/ or add a verified email manually.",
106
- };
107
- }
108
- if (err.code === "apollo_master_key_required") {
109
- return {
110
- ok: false,
111
- code: "apollo_master_key_required",
112
- reason: "Apollo requires a Master API key for enrichment. Create one at https://app.apollo.io/#/settings/integrations/api",
113
- };
114
- }
115
- if (err.code === "apollo_credits_exhausted") {
116
- return {
117
- ok: false,
118
- code: "apollo_credits_exhausted",
119
- reason: "Apollo enrichment credits exhausted. Add credits at https://app.apollo.io/ or add a verified email manually.",
120
- };
121
- }
122
- }
123
- const message = err instanceof Error ? err.message : "Apollo lookup failed";
183
+ const mapped = selection.provider === "hunter" ? mapHunterError(err) : mapApolloError(err);
184
+ if (mapped)
185
+ return mapped;
186
+ const message = err instanceof Error ? err.message : "Enrichment lookup failed";
124
187
  return {
125
188
  ok: false,
126
- code: "apollo_lookup_failed",
189
+ code: selection.provider === "hunter" ? "hunter_lookup_failed" : "apollo_lookup_failed",
127
190
  reason: message,
128
191
  };
129
192
  }
@@ -138,7 +201,7 @@ export async function resolveContactEmail(deps) {
138
201
  ok: true,
139
202
  email: match.email,
140
203
  emailStatus: match.emailStatus ?? "unverified",
141
- source: "apollo",
204
+ source: selection.provider,
142
205
  apolloPersonId: match.apolloPersonId ?? null,
143
206
  contactId: contact.id,
144
207
  firstName: contact.firstName,
@@ -152,30 +215,32 @@ export async function persistResolvedContactEmail(db, args) {
152
215
  .set({
153
216
  email: args.email,
154
217
  emailStatus: args.emailStatus,
155
- source: "apollo",
218
+ source: args.source,
156
219
  enrichedAt: new Date(),
157
220
  enrichedByAgentId: args.enrichedByAgentId ?? null,
158
221
  updatedAt: new Date(),
159
222
  })
160
223
  .where(eq(ddContacts.id, args.contactId));
161
224
  }
225
+ /**
226
+ * Ensure a contact has a usable email, enriching via the company's configured
227
+ * provider when needed. Name retained for backwards compatibility; works for
228
+ * any provider.
229
+ */
162
230
  export async function ensureContactEmailFromApollo(deps) {
163
231
  const contact = await loadContactForEnrichment(deps.db, {
164
232
  companyId: deps.companyId,
165
233
  contactId: deps.contactId,
166
234
  });
167
235
  if (!contact) {
168
- return {
169
- ok: false,
170
- code: "contact_not_found",
171
- reason: "contact not found",
172
- };
236
+ return { ok: false, code: "contact_not_found", reason: "contact not found" };
173
237
  }
174
238
  if (!contactNeedsApolloEnrichment(contact)) {
175
239
  return {
176
240
  ok: true,
177
241
  email: contact.email,
178
242
  emailStatus: contact.emailStatus,
243
+ source: contact.source ?? "apollo",
179
244
  enriched: false,
180
245
  };
181
246
  }
@@ -187,13 +252,17 @@ export async function ensureContactEmailFromApollo(deps) {
187
252
  contactId: resolved.contactId,
188
253
  email: resolved.email,
189
254
  emailStatus: resolved.emailStatus,
255
+ source: resolved.source,
190
256
  enrichedByAgentId: deps.enrichedByAgentId ?? null,
191
257
  });
192
258
  return {
193
259
  ok: true,
194
260
  email: resolved.email,
195
261
  emailStatus: resolved.emailStatus,
262
+ source: resolved.source,
196
263
  enriched: true,
197
264
  };
198
265
  }
266
+ /** Provider-agnostic alias. */
267
+ export const ensureContactEmail = ensureContactEmailFromApollo;
199
268
  //# sourceMappingURL=resolve-contact-email.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-contact-email.js","sourceRoot":"","sources":["../../../src/deal-desk/enrichment/resolve-contact-email.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-contact-email.js","sourceRoot":"","sources":["../../../src/deal-desk/enrichment/resolve-contact-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAgExE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAGpC;IACC,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC,cAAc,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;IAClC,OAAO,KAAK,EAAE,SAAiB,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAsB;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,EAAM,EACN,IAA8C;IAe9C,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,CAAC;QACN,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;QAC/C,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,OAAO,EAAE,SAAS,CAAC,OAAO;KAC3B,CAAC;SACD,IAAI,CAAC,UAAU,CAAC;SAChB,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;SAC3D,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EACjC,EAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,CACjD,CACF;SACA,KAAK,CAAC,CAAC,CAAC,CAAC;IAEZ,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;QACxC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,aAAa,EAAE,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEzE;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAI5C;IACC,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACpF,OAAO,OAAO,CAAC,WAAW,KAAK,YAAY,CAAC;AAC9C,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AAEnE,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,CAAC,CAAC,GAAG,YAAY,cAAc,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACvC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EACJ,+GAA+G;SAClH,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,4BAA4B,EAAE,CAAC;QAC9C,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,4BAA4B;YAClC,MAAM,EACJ,kHAAkH;SACrH,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;QAC5C,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,0BAA0B;YAChC,MAAM,EACJ,8GAA8G;SACjH,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,GAAG,CAAC,OAAO;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,CAAC,CAAC,GAAG,YAAY,cAAc,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACtC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACvC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IACzE,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;QACzC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAA6B;IAE7B,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,uBAAuB;YAC7B,MAAM,EACJ,uIAAuI;SAC1I,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE;QACtD,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC/E,CAAC;IAED,IAAI,OAAO,CAAC,iBAAiB,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QACjD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,yCAAyC;SAClD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACtE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,wBAAwB;YAC9B,MAAM,EAAE,uEAAuE;SAChF,CAAC;IACJ,CAAC;IAED,IAAI,KAAoB,CAAC;IACzB,IAAI,CAAC;QACH,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,IAAI,kBAAkB,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;gBACjC,MAAM,EAAE,SAAS,CAAC,MAAM;aACzB,CAAC,CAAC;YACH,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,IAAI,kBAAkB,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;gBACjC,MAAM,EAAE,SAAS,CAAC,MAAM;aACzB,CAAC,CAAC;YACH,KAAK,GAAG;gBACN,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;aAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GACV,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC9E,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAChF,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,sBAAsB;YACvF,MAAM,EAAE,OAAO;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,sBAAsB,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,OAAO,OAAO,CAAC,aAAa,EAAE;SAClG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,YAAY;QAC9C,MAAM,EAAE,SAAS,CAAC,QAAQ;QAC1B,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI;QAC5C,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,EAAM,EACN,IAMC;IAED,MAAM,EAAE;SACL,MAAM,CAAC,UAAU,CAAC;SAClB,GAAG,CAAC;QACH,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,IAAI,EAAE;QACtB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI;QACjD,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;SACD,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,IAAqE;IAKrE,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE;QACtD,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,OAAO,CAAC,KAAM;YACrB,WAAW,EAAE,OAAO,CAAC,WAA0B;YAC/C,MAAM,EAAG,OAAO,CAAC,MAA6B,IAAI,QAAQ;YAC1D,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,2BAA2B,CAAC,IAAI,CAAC,EAAE,EAAE;QACzC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI;KAClD,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,4BAA4B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=enrichment-preference.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrichment-preference.test.d.ts","sourceRoot":"","sources":["../../../../src/deal-desk/tools/__tests__/enrichment-preference.test.ts"],"names":[],"mappings":""}