n8n-nodes-fullenrich 0.1.2 → 0.2.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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  This is an n8n community node that lets you use FullEnrich in your n8n workflows.
4
4
 
5
- **FullEnrich** is a contact enrichment service that takes minimal input (such as first name, last name, company domain, or LinkedIn URL) and returns enriched contact data like emails, phone numbers, and company information.
5
+ **FullEnrich** is a contact enrichment service that takes minimal input (such as first name, last name, company domain, or Professional Network URL) and returns enriched contact data like emails, phone numbers, and company information.
6
6
  This node enables you to **start asynchronous enrichment requests** and **receive enriched results via webhook**, all within n8n.
7
7
 
8
8
 
@@ -1,8 +1,9 @@
1
- import { IAuthenticateGeneric, ICredentialType, INodeProperties, ICredentialTestRequest } from 'n8n-workflow';
1
+ import { IAuthenticateGeneric, ICredentialType, INodeProperties, ICredentialTestRequest, Icon } from 'n8n-workflow';
2
2
  export declare class FullEnrichApi implements ICredentialType {
3
3
  name: string;
4
4
  displayName: string;
5
5
  documentationUrl: string;
6
+ icon: Icon;
6
7
  properties: INodeProperties[];
7
8
  authenticate: IAuthenticateGeneric;
8
9
  test: ICredentialTestRequest;
@@ -7,6 +7,10 @@ class FullEnrichApi {
7
7
  this.name = 'fullEnrichApi';
8
8
  this.displayName = 'FullEnrich API';
9
9
  this.documentationUrl = 'https://docs.fullenrich.com/authentication';
10
+ this.icon = {
11
+ light: 'file:../nodes/fe-logo-light.svg',
12
+ dark: 'file:../nodes/fe-logo-dark.svg',
13
+ };
10
14
  this.properties = [
11
15
  {
12
16
  displayName: 'API Key',
@@ -1 +1 @@
1
- {"version":3,"file":"FullEnrichApi.credentials.js","sourceRoot":"","sources":["../../credentials/FullEnrichApi.credentials.ts"],"names":[],"mappings":";;;AAMA,uDAAmD;AAEnD,MAAa,aAAa;IAA1B;QACC,SAAI,GAAG,eAAe,CAAC;QACvB,gBAAW,GAAG,gBAAgB,CAAC;QAC/B,qBAAgB,GAAG,4CAA4C,CAAC;QAChE,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;aACX;SACD,CAAC;QACF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QACF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,kBAAO;gBAChB,GAAG,EAAE,sBAAsB;gBAC3B,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA9BD,sCA8BC"}
1
+ {"version":3,"file":"FullEnrichApi.credentials.js","sourceRoot":"","sources":["../../credentials/FullEnrichApi.credentials.ts"],"names":[],"mappings":";;;AAOA,uDAAmD;AAEnD,MAAa,aAAa;IAA1B;QACC,SAAI,GAAG,eAAe,CAAC;QACvB,gBAAW,GAAG,gBAAgB,CAAC;QAC/B,qBAAgB,GAAG,4CAA4C,CAAC;QAChE,SAAI,GAAS;YACZ,KAAK,EAAE,iCAAiC;YACxC,IAAI,EAAE,gCAAgC;SACtC,CAAC;QACF,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;aACX;SACD,CAAC;QACF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QACF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,kBAAO;gBAChB,GAAG,EAAE,sBAAsB;gBAC3B,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AAlCD,sCAkCC"}
@@ -7,12 +7,7 @@ exports.fullEnrichFields = [
7
7
  name: 'resource',
8
8
  type: 'options',
9
9
  noDataExpression: true,
10
- options: [
11
- {
12
- name: 'Enrichment',
13
- value: 'enrichment',
14
- }
15
- ],
10
+ options: [{ name: 'Enrichment', value: 'enrichment' }],
16
11
  default: 'enrichment',
17
12
  },
18
13
  {
@@ -26,14 +21,10 @@ exports.fullEnrichFields = [
26
21
  value: 'startEnrichment',
27
22
  description: 'Start an enrichment task',
28
23
  action: 'Start enrichment',
29
- }
24
+ },
30
25
  ],
31
26
  default: 'startEnrichment',
32
- displayOptions: {
33
- show: {
34
- resource: ['enrichment'],
35
- },
36
- },
27
+ displayOptions: { show: { resource: ['enrichment'] } },
37
28
  },
38
29
  {
39
30
  displayName: 'Enrichment Name',
@@ -50,6 +41,14 @@ exports.fullEnrichFields = [
50
41
  default: '',
51
42
  description: 'The webhook URL to receive results. Must be publicly accessible (e.g. n8n webhook trigger URL).',
52
43
  },
44
+ {
45
+ displayName: 'Per-Contact Webhook URL',
46
+ name: 'webhookContactFinishedUrl',
47
+ type: 'string',
48
+ default: '',
49
+ description: 'URL called when each individual contact finishes enrichment (webhook_events.contact_finished)',
50
+ displayOptions: { show: { '@version': [2] } },
51
+ },
53
52
  {
54
53
  displayName: 'Company Domain',
55
54
  name: 'companyDomain',
@@ -75,7 +74,7 @@ exports.fullEnrichFields = [
75
74
  default: '',
76
75
  },
77
76
  {
78
- displayName: 'LinkedIn URL',
77
+ displayName: 'Professional Network URL',
79
78
  name: 'linkedinUrl',
80
79
  type: 'string',
81
80
  default: '',
@@ -84,9 +83,7 @@ exports.fullEnrichFields = [
84
83
  displayName: 'Custom Fields',
85
84
  name: 'customFields',
86
85
  type: 'fixedCollection',
87
- typeOptions: {
88
- multipleValues: true,
89
- },
86
+ typeOptions: { multipleValues: true },
90
87
  default: {},
91
88
  placeholder: 'Add Custom Field',
92
89
  options: [
@@ -94,18 +91,8 @@ exports.fullEnrichFields = [
94
91
  displayName: 'Custom Field',
95
92
  name: 'customField',
96
93
  values: [
97
- {
98
- displayName: 'Key',
99
- name: 'key',
100
- type: 'string',
101
- default: '',
102
- },
103
- {
104
- displayName: 'Value',
105
- name: 'value',
106
- type: 'string',
107
- default: '',
108
- },
94
+ { displayName: 'Key', name: 'key', type: 'string', default: '' },
95
+ { displayName: 'Value', name: 'value', type: 'string', default: '' },
109
96
  ],
110
97
  },
111
98
  ],
@@ -121,6 +108,21 @@ exports.fullEnrichFields = [
121
108
  { name: 'Contact Emails', value: 'contact.emails' },
122
109
  { name: 'Contact Phones', value: 'contact.phones' },
123
110
  ],
111
+ displayOptions: { show: { '@version': [1] } },
112
+ },
113
+ {
114
+ displayName: 'Fields to Enrich',
115
+ name: 'enrichFields',
116
+ type: 'multiOptions',
117
+ required: true,
118
+ default: ['contact.work_emails', 'contact.phones', 'contact.personal_emails'],
119
+ description: 'Which fields should be enriched',
120
+ options: [
121
+ { name: 'Work Emails', value: 'contact.work_emails' },
122
+ { name: 'Personal Emails', value: 'contact.personal_emails' },
123
+ { name: 'Contact Phones', value: 'contact.phones' },
124
+ ],
125
+ displayOptions: { show: { '@version': [2] } },
124
126
  },
125
127
  ];
126
128
  //# sourceMappingURL=FullEnrich.description.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FullEnrich.description.js","sourceRoot":"","sources":["../../../nodes/FullEnrich/FullEnrich.description.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FullEnrich.description.js","sourceRoot":"","sources":["../../../nodes/FullEnrich/FullEnrich.description.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { IExecuteFunctions, INodeExecutionData } from 'n8n-workflow';
2
+ export declare function execute(context: IExecuteFunctions, version: number): Promise<INodeExecutionData[][]>;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.execute = execute;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const constant_1 = require("../shared/constant");
6
+ const FullEnrich_shared_1 = require("./FullEnrich.shared");
7
+ const package_json_1 = require("../../package.json");
8
+ function buildContact(context, index, enrichFields, version) {
9
+ let mappedEnrichFields = enrichFields;
10
+ if (version === 1) {
11
+ mappedEnrichFields = (0, FullEnrich_shared_1.mapEnrichFields)(enrichFields);
12
+ }
13
+ const contact = {
14
+ first_name: context.getNodeParameter('firstName', index),
15
+ last_name: context.getNodeParameter('lastName', index),
16
+ company_name: context.getNodeParameter('companyName', index),
17
+ domain: context.getNodeParameter('companyDomain', index),
18
+ linkedin_url: context.getNodeParameter('linkedinUrl', index),
19
+ enrich_fields: mappedEnrichFields,
20
+ };
21
+ const custom = (0, FullEnrich_shared_1.parseCustomFields)(context, index);
22
+ if (custom) {
23
+ contact.custom = custom;
24
+ }
25
+ return contact;
26
+ }
27
+ function buildV1Echo(contact, originalEnrichFields) {
28
+ const echo = {
29
+ firstname: contact.first_name,
30
+ lastname: contact.last_name,
31
+ company_name: contact.company_name,
32
+ domain: contact.domain,
33
+ linkedin_url: contact.linkedin_url,
34
+ enrich_fields: originalEnrichFields,
35
+ };
36
+ if (contact.custom) {
37
+ echo.custom = contact.custom;
38
+ }
39
+ return echo;
40
+ }
41
+ async function execute(context, version) {
42
+ const items = context.getInputData();
43
+ const returnData = [];
44
+ const rawEnrichmentName = context.getNodeParameter('enrichmentName', 0);
45
+ const enrichmentName = (rawEnrichmentName === null || rawEnrichmentName === void 0 ? void 0 : rawEnrichmentName.trim()) || 'Enrichment by n8n';
46
+ const webhookUrl = context.getNodeParameter('webhookUrl', 0);
47
+ const enrichFields = context.getNodeParameter('enrichFields', 0);
48
+ let webhookEvents;
49
+ if (version === 2) {
50
+ const contactFinishedUrl = context.getNodeParameter('webhookContactFinishedUrl', 0, '');
51
+ if (contactFinishedUrl) {
52
+ webhookEvents = { contact_finished: contactFinishedUrl };
53
+ }
54
+ }
55
+ for (let i = 0; i < items.length; i++) {
56
+ const contact = buildContact(context, i, enrichFields, version);
57
+ const requestBody = {
58
+ name: enrichmentName,
59
+ webhook_url: webhookUrl,
60
+ data: [contact],
61
+ };
62
+ if (webhookEvents) {
63
+ requestBody.webhook_events = webhookEvents;
64
+ }
65
+ try {
66
+ const response = await context.helpers.httpRequestWithAuthentication.call(context, 'fullEnrichApi', {
67
+ method: 'POST',
68
+ url: `${constant_1.baseUrl}/contact/enrich/bulk`,
69
+ body: requestBody,
70
+ json: true,
71
+ headers: {
72
+ 'User-Agent': `n8n-nodes-fullenrich/${package_json_1.version}`,
73
+ 'X-Client-Source': 'n8n',
74
+ 'X-Client-Node-Version': String(version),
75
+ 'X-Client-Package-Version': package_json_1.version,
76
+ },
77
+ });
78
+ const sentEcho = version === 1 ? buildV1Echo(contact, enrichFields) : contact;
79
+ returnData.push({
80
+ json: { success: true, enrichment_id: response.enrichment_id, sent: sentEcho, webhook_url: webhookUrl },
81
+ pairedItem: { item: i },
82
+ });
83
+ }
84
+ catch (error) {
85
+ if (context.continueOnFail()) {
86
+ returnData.push({ json: { success: false, error: error.message }, pairedItem: { item: i } });
87
+ continue;
88
+ }
89
+ const { message, description } = (0, FullEnrich_shared_1.buildErrorResponse)(error, FullEnrich_shared_1.knownErrors);
90
+ throw new n8n_workflow_1.NodeApiError(context.getNode(), error, {
91
+ message,
92
+ description,
93
+ itemIndex: i,
94
+ });
95
+ }
96
+ }
97
+ return [returnData];
98
+ }
99
+ //# sourceMappingURL=FullEnrich.execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FullEnrich.execute.js","sourceRoot":"","sources":["../../../nodes/FullEnrich/FullEnrich.execute.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FullEnrich = void 0;
4
4
  const n8n_workflow_1 = require("n8n-workflow");
5
5
  const FullEnrich_description_1 = require("./FullEnrich.description");
6
- const constant_1 = require("../shared/constant");
6
+ const FullEnrich_execute_1 = require("./FullEnrich.execute");
7
7
  class FullEnrich {
8
8
  constructor() {
9
9
  this.description = {
@@ -13,9 +13,11 @@ class FullEnrich {
13
13
  light: 'file:../fe-logo-light.svg',
14
14
  dark: 'file:../fe-logo-dark.svg',
15
15
  },
16
- group: ['action'],
17
- version: 1,
16
+ group: ['transform'],
17
+ version: [1, 2],
18
+ defaultVersion: 2,
18
19
  description: 'Start a FullEnrich bulk enrichment request',
20
+ subtitle: '={{$parameter["enrichmentName"] || "Enrichment by n8n"}}',
19
21
  defaults: {
20
22
  name: 'FullEnrich',
21
23
  },
@@ -25,82 +27,15 @@ class FullEnrich {
25
27
  required: true,
26
28
  },
27
29
  ],
28
- inputs: ["main"],
29
- outputs: ["main"],
30
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
31
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
30
32
  properties: FullEnrich_description_1.fullEnrichFields,
33
+ usableAsTool: true,
31
34
  };
32
35
  }
33
36
  async execute() {
34
- var _a, _b, _c, _d, _e, _f;
35
- const items = this.getInputData();
36
- const returnData = [];
37
- const enrichmentName = this.getNodeParameter('enrichmentName', 0);
38
- const webhookUrl = this.getNodeParameter('webhookUrl', 0);
39
- const enrichFieldsDefault = this.getNodeParameter('enrichFields', 0);
40
- for (let i = 0; i < items.length; i++) {
41
- const firstname = this.getNodeParameter('firstName', i);
42
- const lastname = this.getNodeParameter('lastName', i);
43
- const companyName = this.getNodeParameter('companyName', i);
44
- const companyDomain = this.getNodeParameter('companyDomain', i);
45
- const linkedinUrl = this.getNodeParameter('linkedinUrl', i);
46
- const rawCustomFields = this.getNodeParameter('customFields', i);
47
- const custom = {};
48
- if ((_a = rawCustomFields === null || rawCustomFields === void 0 ? void 0 : rawCustomFields.customField) === null || _a === void 0 ? void 0 : _a.length) {
49
- for (const { key, value } of rawCustomFields.customField) {
50
- if (key && value !== undefined && value !== null) {
51
- custom[key] = String(value);
52
- }
53
- }
54
- }
55
- const contact = {
56
- firstname,
57
- lastname,
58
- company_name: companyName,
59
- domain: companyDomain,
60
- linkedin_url: linkedinUrl,
61
- enrich_fields: enrichFieldsDefault,
62
- };
63
- if (Object.keys(custom).length > 0) {
64
- contact.custom = custom;
65
- }
66
- const requestBody = {
67
- name: enrichmentName,
68
- webhook_url: webhookUrl,
69
- datas: [contact],
70
- };
71
- try {
72
- await ((_b = this.helpers.httpRequestWithAuthentication) === null || _b === void 0 ? void 0 : _b.call(this, 'fullEnrichApi', {
73
- method: 'POST',
74
- url: `${constant_1.baseUrl}/contact/enrich/bulk`,
75
- body: requestBody,
76
- json: true,
77
- }));
78
- returnData.push({ json: { success: true, sent: contact, webhook_url: webhookUrl } });
79
- }
80
- catch (error) {
81
- const err = error;
82
- const errorCode = (_d = (_c = err === null || err === void 0 ? void 0 : err.context) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.code;
83
- const errorMessage = ((_f = (_e = err === null || err === void 0 ? void 0 : err.context) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.message) || err.message;
84
- const knownErrors = {
85
- 'error.linkedin.malformated': 'Invalid LinkedIn URL provided',
86
- 'error.enrichment.webhook_url': 'Invalid or missing webhook URL',
87
- 'error.enrichment.custom.key.exceeded': 'Custom key character limit exceeded',
88
- 'error.enrichment.custom.value.exceeded': 'Custom value character limit exceeded',
89
- 'error.enrichment.firstname.empty': 'First name is required',
90
- 'error.enrichment.lastname.empty': 'Last name is required',
91
- 'error.enrichment.domain.empty': 'Company domain is required',
92
- 'error.enrichment.domain.invalid': 'Invalid company domain',
93
- 'error.enrichment.linkedin_url.invalid': 'Invalid LinkedIn URL provided',
94
- };
95
- const message = knownErrors[errorCode] || errorMessage || 'Unknown error occurred';
96
- const description = `API error: ${errorCode || 'unknown'}`;
97
- throw new n8n_workflow_1.NodeApiError(this.getNode(), error, {
98
- message,
99
- description,
100
- });
101
- }
102
- }
103
- return [returnData];
37
+ const version = this.getNode().typeVersion;
38
+ return (0, FullEnrich_execute_1.execute)(this, version);
104
39
  }
105
40
  }
106
41
  exports.FullEnrich = FullEnrich;
@@ -1 +1 @@
1
- {"version":3,"file":"FullEnrich.node.js","sourceRoot":"","sources":["../../../nodes/FullEnrich/FullEnrich.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FullEnrich.node.js","sourceRoot":"","sources":["../../../nodes/FullEnrich/FullEnrich.node.ts"],"names":[],"mappings":";;;AAAA,+CAMsB;AAEtB,qEAA4D;AAC5D,6DAA+C;AAE/C,MAAa,UAAU;IAAvB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE;gBACL,KAAK,EAAE,2BAA2B;gBAClC,IAAI,EAAE,0BAA0B;aAChC;YACD,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,0DAA0D;YACpE,QAAQ,EAAE;gBACT,IAAI,EAAE,YAAY;aAClB;YACD,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,UAAU,EAAE,yCAAgB;YAC5B,YAAY,EAAE,IAAI;SAClB,CAAC;IAQH,CAAC;IAJA,KAAK,CAAC,OAAO;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC;QAC3C,OAAO,IAAA,4BAAO,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;CACD;AAlCD,gCAkCC"}
@@ -0,0 +1,13 @@
1
+ import { IExecuteFunctions } from 'n8n-workflow';
2
+ export declare const MAX_CUSTOM_FIELDS = 10;
3
+ export declare const knownErrors: Record<string, string>;
4
+ export declare function mapEnrichFields(fields: string[]): string[];
5
+ export declare const statusMessages: Record<string, {
6
+ message?: string;
7
+ description: string;
8
+ }>;
9
+ export declare function buildErrorResponse(error: unknown, knownErrors: Record<string, string>): {
10
+ message: string;
11
+ description: string;
12
+ };
13
+ export declare function parseCustomFields(context: IExecuteFunctions, index: number): Record<string, string> | undefined;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.statusMessages = exports.knownErrors = exports.MAX_CUSTOM_FIELDS = void 0;
4
+ exports.mapEnrichFields = mapEnrichFields;
5
+ exports.buildErrorResponse = buildErrorResponse;
6
+ exports.parseCustomFields = parseCustomFields;
7
+ const n8n_workflow_1 = require("n8n-workflow");
8
+ exports.MAX_CUSTOM_FIELDS = 10;
9
+ exports.knownErrors = {
10
+ 'error.linkedin.malformated': 'Invalid professional network URL provided',
11
+ 'error.enrichment.webhook_url': 'Invalid or missing webhook URL',
12
+ 'error.enrichment.custom.key.exceeded': 'Custom key character limit exceeded',
13
+ 'error.enrichment.custom.value.exceeded': 'Custom value character limit exceeded',
14
+ 'error.enrichment.first_name.empty': 'First name is required',
15
+ 'error.enrichment.last_name.empty': 'Last name is required',
16
+ 'error.enrichment.domain.empty': 'Company domain is required',
17
+ 'error.enrichment.domain.invalid': 'Invalid company domain',
18
+ 'error.enrichment.linkedin_url.invalid': 'Invalid professional network URL provided',
19
+ };
20
+ const enrichFieldsV1toV2 = {
21
+ 'contact.emails': 'contact.work_emails',
22
+ 'contact.phones': 'contact.phones',
23
+ };
24
+ function mapEnrichFields(fields) {
25
+ return fields.map((f) => enrichFieldsV1toV2[f] || f);
26
+ }
27
+ exports.statusMessages = {
28
+ '400': { description: 'Bad Request - The input data might be invalid or incomplete.' },
29
+ '401': {
30
+ message: 'Unauthorized - Please check your API credentials.',
31
+ description: 'Authentication failed. Verify your API key or token.',
32
+ },
33
+ '500': {
34
+ message: 'Server Error - The external service failed.',
35
+ description: 'The API encountered an internal error. Try again later.',
36
+ },
37
+ };
38
+ function buildErrorResponse(error, knownErrors) {
39
+ var _a;
40
+ const apiError = error;
41
+ const response = (_a = apiError.cause) === null || _a === void 0 ? void 0 : _a.response;
42
+ const status = apiError.httpCode;
43
+ const responseData = response === null || response === void 0 ? void 0 : response.data;
44
+ const errorCode = responseData === null || responseData === void 0 ? void 0 : responseData.code;
45
+ const errorMessage = (responseData === null || responseData === void 0 ? void 0 : responseData.message) || apiError.message;
46
+ let message = (errorCode && knownErrors[errorCode]) || errorMessage || 'Unknown error occurred';
47
+ let description = `API error: ${errorCode || 'unknown'} (HTTP ${status || 'n/a'})`;
48
+ const statusOverride = status ? exports.statusMessages[status] : undefined;
49
+ if (statusOverride) {
50
+ if (statusOverride.message)
51
+ message = statusOverride.message;
52
+ description = statusOverride.description;
53
+ }
54
+ return { message, description };
55
+ }
56
+ function parseCustomFields(context, index) {
57
+ var _a;
58
+ const rawCustomFields = context.getNodeParameter('customFields', index);
59
+ if (!((_a = rawCustomFields === null || rawCustomFields === void 0 ? void 0 : rawCustomFields.customField) === null || _a === void 0 ? void 0 : _a.length))
60
+ return undefined;
61
+ const custom = {};
62
+ for (const { key, value } of rawCustomFields.customField) {
63
+ if (key && value !== undefined && value !== null) {
64
+ custom[key] = String(value);
65
+ }
66
+ }
67
+ const count = Object.keys(custom).length;
68
+ if (count > exports.MAX_CUSTOM_FIELDS) {
69
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Custom data is limited to ${exports.MAX_CUSTOM_FIELDS} keys (you provided ${count}). Please reduce the number of custom fields.`, { itemIndex: index });
70
+ }
71
+ return count > 0 ? custom : undefined;
72
+ }
73
+ //# sourceMappingURL=FullEnrich.shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FullEnrich.shared.js","sourceRoot":"","sources":["../../../nodes/FullEnrich/FullEnrich.shared.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,87 @@
1
- import { IWebhookFunctions, IWebhookResponseData, INodeType, INodeTypeDescription } from 'n8n-workflow';
1
+ import { IDataObject, IWebhookFunctions, IWebhookResponseData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ interface V2SocialNetwork {
3
+ id?: number;
4
+ url?: string;
5
+ handle?: string;
6
+ }
7
+ interface V2Location {
8
+ region?: string;
9
+ city?: string;
10
+ country?: string;
11
+ country_code?: string;
12
+ line1?: string;
13
+ line2?: string;
14
+ }
15
+ interface V2Company {
16
+ name?: string;
17
+ description?: string;
18
+ domain?: string;
19
+ industry?: {
20
+ main_industry?: string;
21
+ };
22
+ company_type?: string;
23
+ year_founded?: number;
24
+ headcount?: number;
25
+ headcount_range?: string;
26
+ social_profiles?: {
27
+ professional_network?: V2SocialNetwork;
28
+ };
29
+ locations?: {
30
+ headquarters?: V2Location;
31
+ };
32
+ }
33
+ interface V2Employment {
34
+ title?: string;
35
+ description?: string;
36
+ start_at?: string;
37
+ end_at?: string;
38
+ company?: V2Company;
39
+ }
40
+ interface V2Profile {
41
+ first_name?: string;
42
+ last_name?: string;
43
+ location?: {
44
+ city?: string;
45
+ region?: string;
46
+ country?: string;
47
+ };
48
+ employment?: {
49
+ current?: V2Employment;
50
+ all?: V2Employment[];
51
+ };
52
+ social_profiles?: {
53
+ professional_network?: V2SocialNetwork;
54
+ };
55
+ }
56
+ interface V2ContactInfo {
57
+ most_probable_work_email?: {
58
+ email?: string;
59
+ status?: string;
60
+ };
61
+ most_probable_personal_email?: {
62
+ email?: string;
63
+ status?: string;
64
+ };
65
+ most_probable_phone?: {
66
+ number?: string;
67
+ };
68
+ work_emails?: unknown[];
69
+ personal_emails?: unknown[];
70
+ phones?: unknown[];
71
+ }
72
+ export interface V2Row {
73
+ input?: {
74
+ first_name?: string;
75
+ last_name?: string;
76
+ company_domain?: string;
77
+ };
78
+ profile?: V2Profile;
79
+ contact_info?: V2ContactInfo;
80
+ custom?: IDataObject;
81
+ }
82
+ export declare function mapV2ToV1(row: V2Row): Record<string, unknown>;
2
83
  export declare class FullEnrichTrigger implements INodeType {
3
84
  description: INodeTypeDescription;
4
85
  webhook(this: IWebhookFunctions): Promise<IWebhookResponseData>;
5
86
  }
87
+ export {};