@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.
- package/dist/deal-desk/enrichment/__tests__/hunter-client.test.d.ts +2 -0
- package/dist/deal-desk/enrichment/__tests__/hunter-client.test.d.ts.map +1 -0
- package/dist/deal-desk/enrichment/__tests__/hunter-client.test.js +106 -0
- package/dist/deal-desk/enrichment/__tests__/hunter-client.test.js.map +1 -0
- package/dist/deal-desk/enrichment/__tests__/hunter-config.test.d.ts +2 -0
- package/dist/deal-desk/enrichment/__tests__/hunter-config.test.d.ts.map +1 -0
- package/dist/deal-desk/enrichment/__tests__/hunter-config.test.js +73 -0
- package/dist/deal-desk/enrichment/__tests__/hunter-config.test.js.map +1 -0
- package/dist/deal-desk/enrichment/__tests__/provider.test.d.ts +2 -0
- package/dist/deal-desk/enrichment/__tests__/provider.test.d.ts.map +1 -0
- package/dist/deal-desk/enrichment/__tests__/provider.test.js +77 -0
- package/dist/deal-desk/enrichment/__tests__/provider.test.js.map +1 -0
- package/dist/deal-desk/enrichment/__tests__/resolve-contact-email.test.js +33 -0
- package/dist/deal-desk/enrichment/__tests__/resolve-contact-email.test.js.map +1 -1
- package/dist/deal-desk/enrichment/enrichment-types.d.ts +38 -0
- package/dist/deal-desk/enrichment/enrichment-types.d.ts.map +1 -0
- package/dist/deal-desk/enrichment/enrichment-types.js +3 -0
- package/dist/deal-desk/enrichment/enrichment-types.js.map +1 -0
- package/dist/deal-desk/enrichment/hunter-client.d.ts +44 -0
- package/dist/deal-desk/enrichment/hunter-client.d.ts.map +1 -0
- package/dist/deal-desk/enrichment/hunter-client.js +112 -0
- package/dist/deal-desk/enrichment/hunter-client.js.map +1 -0
- package/dist/deal-desk/enrichment/hunter-config.d.ts +41 -0
- package/dist/deal-desk/enrichment/hunter-config.d.ts.map +1 -0
- package/dist/deal-desk/enrichment/hunter-config.js +58 -0
- package/dist/deal-desk/enrichment/hunter-config.js.map +1 -0
- package/dist/deal-desk/enrichment/provider.d.ts +25 -0
- package/dist/deal-desk/enrichment/provider.d.ts.map +1 -0
- package/dist/deal-desk/enrichment/provider.js +43 -0
- package/dist/deal-desk/enrichment/provider.js.map +1 -0
- package/dist/deal-desk/enrichment/resolve-contact-email.d.ts +42 -7
- package/dist/deal-desk/enrichment/resolve-contact-email.d.ts.map +1 -1
- package/dist/deal-desk/enrichment/resolve-contact-email.js +120 -51
- package/dist/deal-desk/enrichment/resolve-contact-email.js.map +1 -1
- package/dist/deal-desk/tools/__tests__/enrichment-preference.test.d.ts +2 -0
- package/dist/deal-desk/tools/__tests__/enrichment-preference.test.d.ts.map +1 -0
- package/dist/deal-desk/tools/__tests__/enrichment-preference.test.js +90 -0
- package/dist/deal-desk/tools/__tests__/enrichment-preference.test.js.map +1 -0
- package/dist/deal-desk/tools/__tests__/hunter-api-key.test.d.ts +2 -0
- package/dist/deal-desk/tools/__tests__/hunter-api-key.test.d.ts.map +1 -0
- package/dist/deal-desk/tools/__tests__/hunter-api-key.test.js +101 -0
- package/dist/deal-desk/tools/__tests__/hunter-api-key.test.js.map +1 -0
- package/dist/deal-desk/tools/enrich-contact.d.ts +5 -2
- package/dist/deal-desk/tools/enrich-contact.d.ts.map +1 -1
- package/dist/deal-desk/tools/enrich-contact.js +26 -24
- package/dist/deal-desk/tools/enrich-contact.js.map +1 -1
- package/dist/deal-desk/tools/enrichment-preference.d.ts +8 -0
- package/dist/deal-desk/tools/enrichment-preference.d.ts.map +1 -0
- package/dist/deal-desk/tools/enrichment-preference.js +41 -0
- package/dist/deal-desk/tools/enrichment-preference.js.map +1 -0
- package/dist/deal-desk/tools/hunter-api-key.d.ts +11 -0
- package/dist/deal-desk/tools/hunter-api-key.d.ts.map +1 -0
- package/dist/deal-desk/tools/hunter-api-key.js +67 -0
- package/dist/deal-desk/tools/hunter-api-key.js.map +1 -0
- package/dist/deal-desk/tools/index.d.ts.map +1 -1
- package/dist/deal-desk/tools/index.js +42 -11
- package/dist/deal-desk/tools/index.js.map +1 -1
- package/dist/deal-desk/tools/outreach-approve.d.ts +4 -0
- package/dist/deal-desk/tools/outreach-approve.d.ts.map +1 -1
- package/dist/deal-desk/tools/outreach-approve.js +7 -8
- package/dist/deal-desk/tools/outreach-approve.js.map +1 -1
- package/dist/deal-desk/tools/outreach-draft.d.ts +4 -0
- package/dist/deal-desk/tools/outreach-draft.d.ts.map +1 -1
- package/dist/deal-desk/tools/outreach-draft.js +8 -6
- package/dist/deal-desk/tools/outreach-draft.js.map +1 -1
- package/package.json +15 -15
- package/ui-dist/assets/{_basePickBy-DwWOr88_.js → _basePickBy-CBVIeEkV.js} +1 -1
- package/ui-dist/assets/{_baseUniq-CpZRwg6K.js → _baseUniq-BcwaQnkH.js} +1 -1
- package/ui-dist/assets/{arc-BJjnUC8F.js → arc-DqmTiJ9l.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-VXUJARFQ-CdT0Osky.js → architectureDiagram-VXUJARFQ-C2PZuz_4.js} +1 -1
- package/ui-dist/assets/{blockDiagram-VD42YOAC-CWs_Lkvd.js → blockDiagram-VD42YOAC-CHzu2Ctw.js} +1 -1
- package/ui-dist/assets/{c4Diagram-YG6GDRKO-HzpQcNSc.js → c4Diagram-YG6GDRKO-DLvbjDP5.js} +1 -1
- package/ui-dist/assets/channel-HcwSzs_N.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-5Ech8UIH.js → chunk-4BX2VUAB-D4IgQx7K.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-JlgBQqUF.js → chunk-55IACEB6-BH1i5XQo.js} +1 -1
- package/ui-dist/assets/{chunk-B4BG7PRW-aPW1zlxp.js → chunk-B4BG7PRW-CuPShkE9.js} +1 -1
- package/ui-dist/assets/{chunk-DI55MBZ5-B2WCWvF3.js → chunk-DI55MBZ5-Bi_J3Z0D.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-D10yrE4W.js → chunk-FMBD7UC4-BwRwTbFX.js} +1 -1
- package/ui-dist/assets/{chunk-QN33PNHL-CwJQOqGm.js → chunk-QN33PNHL-BN35apwc.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-vnse-gij.js → chunk-QZHKN3VN-COm56_LM.js} +1 -1
- package/ui-dist/assets/{chunk-TZMSLE5B-C-92VuUn.js → chunk-TZMSLE5B-Xj2KL_0Y.js} +1 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-B07Ltkzj.js +1 -0
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-B07Ltkzj.js +1 -0
- package/ui-dist/assets/clone-B7h-gniq.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-BiAQPmY0.js → cose-bilkent-S5V4N54A-FLFC6_gO.js} +1 -1
- package/ui-dist/assets/{dagre-6UL2VRFP-47548L5D.js → dagre-6UL2VRFP-0d32lGTp.js} +1 -1
- package/ui-dist/assets/{diagram-PSM6KHXK-Br3s-bMp.js → diagram-PSM6KHXK-CDNGXG5P.js} +1 -1
- package/ui-dist/assets/{diagram-QEK2KX5R-Cm0-q6VP.js → diagram-QEK2KX5R-C0vaPlrd.js} +1 -1
- package/ui-dist/assets/{diagram-S2PKOQOG-CnPr3tDl.js → diagram-S2PKOQOG-UxrlUeu-.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q2GNP2WA-DDPEFyDr.js → erDiagram-Q2GNP2WA-FL0kguuL.js} +1 -1
- package/ui-dist/assets/{flowDiagram-NV44I4VS-CAce7tYM.js → flowDiagram-NV44I4VS-DnEzeK5O.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-JELNMOA3-B2x1k-vZ.js → ganttDiagram-JELNMOA3-f03KncDX.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-Bg7GDwgW.js → gitGraphDiagram-V2S2FVAM-y4Oi65_k.js} +1 -1
- package/ui-dist/assets/{graph-Cu8Q2HKH.js → graph-CFWov-m4.js} +1 -1
- package/ui-dist/assets/{index-BxIq29RG.js → index-B-BAVU8b.js} +1 -1
- package/ui-dist/assets/{index-Cb-ht810.js → index-Bd7zw6ip.js} +1 -1
- package/ui-dist/assets/{index-CEDEKLj9.js → index-BmqFzV8-.js} +1 -1
- package/ui-dist/assets/{index-DTZ27V1D.js → index-Btdsi4zo.js} +1 -1
- package/ui-dist/assets/{index-Curmq75X.js → index-By5eCrIU.js} +1 -1
- package/ui-dist/assets/{index-WAMTaBNf.js → index-C5zqtXrw.js} +1 -1
- package/ui-dist/assets/{index-DEIO_uQm.js → index-CFI3SAZE.js} +1 -1
- package/ui-dist/assets/{index-DVEcTyb3.js → index-CTJ29Xh5.js} +1 -1
- package/ui-dist/assets/{index-Y3rUJZNI.js → index-CU0mrwVT.js} +145 -145
- package/ui-dist/assets/{index-B7ZPKu4m.js → index-CV_d1E37.js} +1 -1
- package/ui-dist/assets/{index-7Z5DdZnx.js → index-CddqJ4G5.js} +1 -1
- package/ui-dist/assets/{index-DgNhCzjb.js → index-CgGLDqng.js} +1 -1
- package/ui-dist/assets/{index-DgFnrn9g.js → index-CyvVv96c.js} +1 -1
- package/ui-dist/assets/{index-C8pSfj4H.js → index-D4ouuOrO.js} +1 -1
- package/ui-dist/assets/{index-UodULlDv.js → index-DCn3d1Sw.js} +1 -1
- package/ui-dist/assets/{index-BKxmKohc.js → index-DWAFlBdn.js} +1 -1
- package/ui-dist/assets/{index-D2Wwuzko.js → index-DqYJhcon.js} +1 -1
- package/ui-dist/assets/{index-U5bRXfqa.js → index-Dwv7AqVT.js} +1 -1
- package/ui-dist/assets/{index-objXXDnI.js → index-DydmEOe-.js} +1 -1
- package/ui-dist/assets/{index-BPj0MrWd.js → index-FhdjGuIa.js} +1 -1
- package/ui-dist/assets/{index-CdDzCK75.js → index-RDsxbDSf.js} +1 -1
- package/ui-dist/assets/{index-HNbl2bYf.js → index-ScEFFiXG.js} +1 -1
- package/ui-dist/assets/{index-d75ohwb-.js → index-swVBgd_3.js} +1 -1
- package/ui-dist/assets/{infoDiagram-HS3SLOUP-Cs_VRWO2.js → infoDiagram-HS3SLOUP-BT8yT7sJ.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-DBuD4Cs4.js → journeyDiagram-XKPGCS4Q-C8DG43aT.js} +1 -1
- package/ui-dist/assets/{kanban-definition-3W4ZIXB7-XQewDHuN.js → kanban-definition-3W4ZIXB7-BbShlSAl.js} +1 -1
- package/ui-dist/assets/{layout-BQBi-06x.js → layout-CCS2XC8t.js} +1 -1
- package/ui-dist/assets/{linear-CV-3IwCQ.js → linear-2TvgGQfb.js} +1 -1
- package/ui-dist/assets/{mermaid.core-BjtjTDjW.js → mermaid.core-BAFI4dXm.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-VGOIOE7T-BSwrgGR0.js → mindmap-definition-VGOIOE7T-BcHv1Ud7.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ADFJNKIX-D2Ld6W2K.js → pieDiagram-ADFJNKIX-CNO1-Z0g.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-CC-3W4Ew.js → quadrantDiagram-AYHSOK5B-DfE50a-U.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-LecHxaoD.js → requirementDiagram-UZGBJVZJ-CgcgBiHz.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-G0nc_HwC.js → sankeyDiagram-TZEHDZUN-BqpKVSYn.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-WL72ISMW-DyRtxnJ1.js → sequenceDiagram-WL72ISMW-Vbv-XA05.js} +1 -1
- package/ui-dist/assets/{stateDiagram-FKZM4ZOC-DCjr80Q9.js → stateDiagram-FKZM4ZOC-C1GZ_hr8.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-D4JPxYX0.js +1 -0
- package/ui-dist/assets/{timeline-definition-IT6M3QCI-B320sNWa.js → timeline-definition-IT6M3QCI-Gcr-dBCd.js} +1 -1
- package/ui-dist/assets/{treemap-GDKQZRPO-CKSC63wo.js → treemap-GDKQZRPO-B_zJkapD.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-PRI3JC2R-C2bwBKPy.js → xychartDiagram-PRI3JC2R-jk1Yj15T.js} +1 -1
- package/ui-dist/index.html +1 -1
- package/ui-dist/assets/channel-Bx1cQOlG.js +0 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-DN55gDiF.js +0 -1
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-DN55gDiF.js +0 -1
- package/ui-dist/assets/clone-p0FlLxQR.js +0 -1
- 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
|
|
3
|
-
|
|
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:
|
|
8
|
-
source:
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,
|
|
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
|
|
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
|
-
|
|
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
|
|
56
|
-
const
|
|
57
|
-
if (!
|
|
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: "
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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:
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"resolve-contact-email.js","sourceRoot":"","sources":["../../../src/deal-desk/enrichment/resolve-contact-email.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":""}
|