n8n-nodes-delightloop 0.1.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.
@@ -0,0 +1,7 @@
1
+ import { ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class DelightloopApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DelightloopApi = void 0;
4
+ class DelightloopApi {
5
+ constructor() {
6
+ this.name = 'delightloopApi';
7
+ this.displayName = 'Delightloop API';
8
+ this.documentationUrl = 'https://delightloop.ai/docs/api';
9
+ this.properties = [
10
+ {
11
+ displayName: 'API Key',
12
+ name: 'apiKey',
13
+ type: 'string',
14
+ typeOptions: { password: true },
15
+ default: '',
16
+ required: true,
17
+ description: 'Your Delightloop API key. Get it from Settings → API Keys in the Delightloop dashboard.',
18
+ },
19
+ {
20
+ displayName: 'Organization ID',
21
+ name: 'orgId',
22
+ type: 'string',
23
+ default: '',
24
+ required: true,
25
+ description: 'Your Delightloop Organization ID (x-org-id). Found in Settings → Organization in the Delightloop dashboard.',
26
+ },
27
+ {
28
+ displayName: 'Base URL',
29
+ name: 'baseUrl',
30
+ type: 'string',
31
+ default: 'https://apiv1.delightloop.ai',
32
+ description: 'Delightloop API base URL. Leave default unless using a self-hosted instance.',
33
+ },
34
+ ];
35
+ }
36
+ }
37
+ exports.DelightloopApi = DelightloopApi;
38
+ //# sourceMappingURL=DelightloopApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DelightloopApi.credentials.js","sourceRoot":"","sources":["../../credentials/DelightloopApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,cAAc;IAA3B;QACE,SAAI,GAAG,gBAAgB,CAAC;QACxB,gBAAW,GAAG,iBAAiB,CAAC;QAChC,qBAAgB,GAAG,iCAAiC,CAAC;QACrD,eAAU,GAAsB;YAC9B;gBACE,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EACT,yFAAyF;aAC5F;YACD;gBACE,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EACT,6GAA6G;aAChH;YACD;gBACE,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,8BAA8B;gBACvC,WAAW,EAAE,8EAA8E;aAC5F;SACF,CAAC;IACJ,CAAC;CAAA;AAhCD,wCAgCC"}
@@ -0,0 +1,5 @@
1
+ import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class Delightloop implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Delightloop = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const ContactDescription_1 = require("./descriptions/ContactDescription");
6
+ const CampaignDescription_1 = require("./descriptions/CampaignDescription");
7
+ class Delightloop {
8
+ constructor() {
9
+ this.description = {
10
+ displayName: 'Delightloop',
11
+ name: 'delightloop',
12
+ icon: 'file:delightloop.png',
13
+ group: ['transform'],
14
+ version: 1,
15
+ subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
16
+ description: 'Interact with Delightloop — manage contacts and campaigns',
17
+ defaults: {
18
+ name: 'Delightloop',
19
+ },
20
+ inputs: ['main'],
21
+ outputs: ['main'],
22
+ credentials: [
23
+ {
24
+ name: 'delightloopApi',
25
+ required: true,
26
+ },
27
+ ],
28
+ properties: [
29
+ // ── Resource selector ──
30
+ {
31
+ displayName: 'Resource',
32
+ name: 'resource',
33
+ type: 'options',
34
+ noDataExpression: true,
35
+ options: [
36
+ {
37
+ name: 'Contact',
38
+ value: 'contact',
39
+ },
40
+ {
41
+ name: 'Campaign',
42
+ value: 'campaign',
43
+ },
44
+ ],
45
+ default: 'contact',
46
+ },
47
+ // ── Contact ──
48
+ ...ContactDescription_1.contactOperations,
49
+ ...ContactDescription_1.contactFields,
50
+ // ── Campaign ──
51
+ ...CampaignDescription_1.campaignOperations,
52
+ ...CampaignDescription_1.campaignFields,
53
+ ],
54
+ };
55
+ }
56
+ async execute() {
57
+ var _a;
58
+ const items = this.getInputData();
59
+ const returnData = [];
60
+ const credentials = await this.getCredentials('delightloopApi');
61
+ const baseUrl = credentials.baseUrl.replace(/\/$/, '');
62
+ const apiKey = credentials.apiKey;
63
+ const orgId = credentials.orgId;
64
+ const resource = this.getNodeParameter('resource', 0);
65
+ const operation = this.getNodeParameter('operation', 0);
66
+ for (let i = 0; i < items.length; i++) {
67
+ try {
68
+ let responseData;
69
+ const commonHeaders = {
70
+ 'x-api-key': apiKey,
71
+ 'x-org-id': orgId,
72
+ 'Content-Type': 'application/json',
73
+ };
74
+ // ═══════════════════════════════════════
75
+ // CONTACT
76
+ // ═══════════════════════════════════════
77
+ if (resource === 'contact') {
78
+ // ── Create ──
79
+ if (operation === 'create') {
80
+ const firstName = this.getNodeParameter('firstName', i);
81
+ const lastName = this.getNodeParameter('lastName', i);
82
+ const email = this.getNodeParameter('email', i);
83
+ const additionalFields = this.getNodeParameter('additionalFields', i);
84
+ const body = { firstName, lastName, email };
85
+ if (additionalFields.company)
86
+ body.company = additionalFields.company;
87
+ if (additionalFields.jobTitle)
88
+ body.jobTitle = additionalFields.jobTitle;
89
+ if (additionalFields.phone)
90
+ body.phone = additionalFields.phone;
91
+ if (additionalFields.linkedInUrl)
92
+ body.linkedInUrl = additionalFields.linkedInUrl;
93
+ if (additionalFields.tags) {
94
+ body.tags = additionalFields.tags.split(',').map((t) => t.trim());
95
+ }
96
+ responseData = await this.helpers.httpRequest({
97
+ method: 'POST',
98
+ url: `${baseUrl}/api/contacts`,
99
+ headers: commonHeaders,
100
+ body,
101
+ json: true,
102
+ });
103
+ }
104
+ // ── Get ──
105
+ else if (operation === 'get') {
106
+ const contactId = this.getNodeParameter('contactId', i);
107
+ responseData = await this.helpers.httpRequest({
108
+ method: 'GET',
109
+ url: `${baseUrl}/api/contacts/${contactId}`,
110
+ headers: commonHeaders,
111
+ json: true,
112
+ });
113
+ }
114
+ // ── Get All ──
115
+ else if (operation === 'getAll') {
116
+ const returnAll = this.getNodeParameter('returnAll', i);
117
+ const limit = returnAll ? 500 : this.getNodeParameter('limit', i);
118
+ const filters = this.getNodeParameter('filters', i);
119
+ const qs = { limit, page: 1 };
120
+ if (filters.search)
121
+ qs.search = filters.search;
122
+ responseData = await this.helpers.httpRequest({
123
+ method: 'GET',
124
+ url: `${baseUrl}/api/contacts`,
125
+ headers: commonHeaders,
126
+ qs,
127
+ json: true,
128
+ });
129
+ // Unwrap array from paginated response
130
+ if (responseData && typeof responseData === 'object' && 'contacts' in responseData) {
131
+ responseData = responseData.contacts;
132
+ }
133
+ }
134
+ // ── Update ──
135
+ else if (operation === 'update') {
136
+ const contactId = this.getNodeParameter('contactId', i);
137
+ const updateFields = this.getNodeParameter('updateFields', i);
138
+ const body = {};
139
+ for (const [key, val] of Object.entries(updateFields)) {
140
+ if (val !== '' && val !== undefined)
141
+ body[key] = val;
142
+ }
143
+ responseData = await this.helpers.httpRequest({
144
+ method: 'PUT',
145
+ url: `${baseUrl}/api/contacts/${contactId}`,
146
+ headers: commonHeaders,
147
+ body,
148
+ json: true,
149
+ });
150
+ }
151
+ // ── Bulk Create ──
152
+ else if (operation === 'bulkCreate') {
153
+ const contactsJson = this.getNodeParameter('contactsJson', i);
154
+ let contacts;
155
+ try {
156
+ contacts = typeof contactsJson === 'string' ? JSON.parse(contactsJson) : contactsJson;
157
+ }
158
+ catch {
159
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Contacts JSON is not valid JSON', { itemIndex: i });
160
+ }
161
+ if (!Array.isArray(contacts)) {
162
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Contacts JSON must be an array', { itemIndex: i });
163
+ }
164
+ responseData = await this.helpers.httpRequest({
165
+ method: 'POST',
166
+ url: `${baseUrl}/api/contacts/bulk`,
167
+ headers: commonHeaders,
168
+ body: { contacts },
169
+ json: true,
170
+ });
171
+ }
172
+ }
173
+ // ═══════════════════════════════════════
174
+ // CAMPAIGN
175
+ // ═══════════════════════════════════════
176
+ else if (resource === 'campaign') {
177
+ // ── Get ──
178
+ if (operation === 'get') {
179
+ const campaignId = this.getNodeParameter('campaignId', i);
180
+ responseData = await this.helpers.httpRequest({
181
+ method: 'GET',
182
+ url: `${baseUrl}/api/campaigns/${campaignId}`,
183
+ headers: commonHeaders,
184
+ json: true,
185
+ });
186
+ }
187
+ // ── Get All ──
188
+ else if (operation === 'getAll') {
189
+ const returnAll = this.getNodeParameter('returnAll', i);
190
+ const limit = returnAll ? 500 : this.getNodeParameter('limit', i);
191
+ const filters = this.getNodeParameter('filters', i);
192
+ const qs = { limit, page: 1 };
193
+ if (filters.status)
194
+ qs.status = filters.status;
195
+ if (filters.search)
196
+ qs.search = filters.search;
197
+ responseData = await this.helpers.httpRequest({
198
+ method: 'GET',
199
+ url: `${baseUrl}/api/campaigns`,
200
+ headers: commonHeaders,
201
+ qs,
202
+ json: true,
203
+ });
204
+ // Unwrap array from paginated response
205
+ if (responseData && typeof responseData === 'object' && 'campaigns' in responseData) {
206
+ responseData = responseData.campaigns;
207
+ }
208
+ }
209
+ // ── Get Metrics ──
210
+ else if (operation === 'getMetrics') {
211
+ const campaignId = this.getNodeParameter('campaignId', i);
212
+ responseData = await this.helpers.httpRequest({
213
+ method: 'GET',
214
+ url: `${baseUrl}/api/campaigns/${campaignId}/metrics`,
215
+ headers: commonHeaders,
216
+ json: true,
217
+ });
218
+ }
219
+ // ── Add Contact ──
220
+ else if (operation === 'addContact') {
221
+ const campaignId = this.getNodeParameter('campaignId', i);
222
+ const contactId = this.getNodeParameter('contactId', i);
223
+ const additionalOptions = this.getNodeParameter('additionalOptions', i);
224
+ const body = { contactId };
225
+ if (additionalOptions.personalizationMessage) {
226
+ body.personalizationMessage = additionalOptions.personalizationMessage;
227
+ }
228
+ responseData = await this.helpers.httpRequest({
229
+ method: 'POST',
230
+ url: `${baseUrl}/api/campaigns/${campaignId}/contacts`,
231
+ headers: commonHeaders,
232
+ body,
233
+ json: true,
234
+ });
235
+ }
236
+ }
237
+ // Normalise output: wrap objects/primitives into array
238
+ const outputItems = Array.isArray(responseData)
239
+ ? responseData.map((item) => ({ json: item }))
240
+ : [{ json: responseData }];
241
+ returnData.push(...outputItems);
242
+ }
243
+ catch (error) {
244
+ if (this.continueOnFail()) {
245
+ returnData.push({ json: { error: error.message }, pairedItem: i });
246
+ continue;
247
+ }
248
+ if (error instanceof n8n_workflow_1.NodeOperationError)
249
+ throw error;
250
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), (_a = error.message) !== null && _a !== void 0 ? _a : String(error), { itemIndex: i });
251
+ }
252
+ }
253
+ return [returnData];
254
+ }
255
+ }
256
+ exports.Delightloop = Delightloop;
257
+ //# sourceMappingURL=Delightloop.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Delightloop.node.js","sourceRoot":"","sources":["../../../nodes/Delightloop/Delightloop.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { INodeProperties } from 'n8n-workflow';
2
+ export declare const campaignOperations: INodeProperties[];
3
+ export declare const campaignFields: INodeProperties[];
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.campaignFields = exports.campaignOperations = void 0;
4
+ exports.campaignOperations = [
5
+ {
6
+ displayName: 'Operation',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: {
11
+ show: { resource: ['campaign'] },
12
+ },
13
+ options: [
14
+ {
15
+ name: 'Get',
16
+ value: 'get',
17
+ description: 'Get a campaign by ID',
18
+ action: 'Get a campaign',
19
+ },
20
+ {
21
+ name: 'Get All',
22
+ value: 'getAll',
23
+ description: 'Get all campaigns in the organization',
24
+ action: 'Get all campaigns',
25
+ },
26
+ {
27
+ name: 'Get Metrics',
28
+ value: 'getMetrics',
29
+ description: 'Get performance metrics for a campaign',
30
+ action: 'Get campaign metrics',
31
+ },
32
+ {
33
+ name: 'Add Contact',
34
+ value: 'addContact',
35
+ description: 'Add a contact to a live campaign',
36
+ action: 'Add contact to campaign',
37
+ },
38
+ ],
39
+ default: 'getAll',
40
+ },
41
+ ];
42
+ exports.campaignFields = [
43
+ // ──────────────── GET / GET METRICS ────────────────
44
+ {
45
+ displayName: 'Campaign ID',
46
+ name: 'campaignId',
47
+ type: 'string',
48
+ required: true,
49
+ default: '',
50
+ displayOptions: {
51
+ show: { resource: ['campaign'], operation: ['get', 'getMetrics', 'addContact'] },
52
+ },
53
+ description: 'The ID of the campaign',
54
+ },
55
+ // ──────────────── GET ALL ────────────────
56
+ {
57
+ displayName: 'Return All',
58
+ name: 'returnAll',
59
+ type: 'boolean',
60
+ default: false,
61
+ displayOptions: { show: { resource: ['campaign'], operation: ['getAll'] } },
62
+ description: 'Whether to return all results or only up to a given limit',
63
+ },
64
+ {
65
+ displayName: 'Limit',
66
+ name: 'limit',
67
+ type: 'number',
68
+ default: 50,
69
+ typeOptions: { minValue: 1, maxValue: 500 },
70
+ displayOptions: {
71
+ show: { resource: ['campaign'], operation: ['getAll'], returnAll: [false] },
72
+ },
73
+ description: 'Max number of campaigns to return',
74
+ },
75
+ {
76
+ displayName: 'Filters',
77
+ name: 'filters',
78
+ type: 'collection',
79
+ placeholder: 'Add Filter',
80
+ default: {},
81
+ displayOptions: { show: { resource: ['campaign'], operation: ['getAll'] } },
82
+ options: [
83
+ {
84
+ displayName: 'Status',
85
+ name: 'status',
86
+ type: 'options',
87
+ default: '',
88
+ options: [
89
+ { name: 'All', value: '' },
90
+ { name: 'Draft', value: 'draft' },
91
+ { name: 'Active', value: 'active' },
92
+ { name: 'Completed', value: 'completed' },
93
+ { name: 'Paused', value: 'paused' },
94
+ ],
95
+ description: 'Filter campaigns by status',
96
+ },
97
+ {
98
+ displayName: 'Search',
99
+ name: 'search',
100
+ type: 'string',
101
+ default: '',
102
+ description: 'Search campaigns by name',
103
+ },
104
+ ],
105
+ },
106
+ // ──────────────── ADD CONTACT ────────────────
107
+ {
108
+ displayName: 'Contact ID',
109
+ name: 'contactId',
110
+ type: 'string',
111
+ required: true,
112
+ default: '',
113
+ displayOptions: { show: { resource: ['campaign'], operation: ['addContact'] } },
114
+ description: 'The ID of the contact to add to the campaign',
115
+ },
116
+ {
117
+ displayName: 'Additional Options',
118
+ name: 'additionalOptions',
119
+ type: 'collection',
120
+ placeholder: 'Add Option',
121
+ default: {},
122
+ displayOptions: { show: { resource: ['campaign'], operation: ['addContact'] } },
123
+ options: [
124
+ {
125
+ displayName: 'Personalization Message',
126
+ name: 'personalizationMessage',
127
+ type: 'string',
128
+ typeOptions: { rows: 3 },
129
+ default: '',
130
+ description: 'Custom personalization message for this contact',
131
+ },
132
+ ],
133
+ },
134
+ ];
135
+ //# sourceMappingURL=CampaignDescription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CampaignDescription.js","sourceRoot":"","sources":["../../../../nodes/Delightloop/descriptions/CampaignDescription.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { INodeProperties } from 'n8n-workflow';
2
+ export declare const contactOperations: INodeProperties[];
3
+ export declare const contactFields: INodeProperties[];
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contactFields = exports.contactOperations = void 0;
4
+ exports.contactOperations = [
5
+ {
6
+ displayName: 'Operation',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: {
11
+ show: { resource: ['contact'] },
12
+ },
13
+ options: [
14
+ {
15
+ name: 'Create',
16
+ value: 'create',
17
+ description: 'Create a new contact',
18
+ action: 'Create a contact',
19
+ },
20
+ {
21
+ name: 'Get',
22
+ value: 'get',
23
+ description: 'Get a contact by ID',
24
+ action: 'Get a contact',
25
+ },
26
+ {
27
+ name: 'Get All',
28
+ value: 'getAll',
29
+ description: 'Get all contacts in the organization',
30
+ action: 'Get all contacts',
31
+ },
32
+ {
33
+ name: 'Update',
34
+ value: 'update',
35
+ description: 'Update a contact',
36
+ action: 'Update a contact',
37
+ },
38
+ {
39
+ name: 'Bulk Create',
40
+ value: 'bulkCreate',
41
+ description: 'Create multiple contacts at once',
42
+ action: 'Bulk create contacts',
43
+ },
44
+ ],
45
+ default: 'create',
46
+ },
47
+ ];
48
+ exports.contactFields = [
49
+ // ──────────────── CREATE ────────────────
50
+ {
51
+ displayName: 'First Name',
52
+ name: 'firstName',
53
+ type: 'string',
54
+ default: '',
55
+ displayOptions: { show: { resource: ['contact'], operation: ['create'] } },
56
+ description: 'First name of the contact',
57
+ },
58
+ {
59
+ displayName: 'Last Name',
60
+ name: 'lastName',
61
+ type: 'string',
62
+ default: '',
63
+ displayOptions: { show: { resource: ['contact'], operation: ['create'] } },
64
+ description: 'Last name of the contact',
65
+ },
66
+ {
67
+ displayName: 'Email',
68
+ name: 'email',
69
+ type: 'string',
70
+ placeholder: 'name@email.com',
71
+ default: '',
72
+ displayOptions: { show: { resource: ['contact'], operation: ['create'] } },
73
+ description: 'Email address of the contact',
74
+ },
75
+ {
76
+ displayName: 'Additional Fields',
77
+ name: 'additionalFields',
78
+ type: 'collection',
79
+ placeholder: 'Add Field',
80
+ default: {},
81
+ displayOptions: { show: { resource: ['contact'], operation: ['create'] } },
82
+ options: [
83
+ {
84
+ displayName: 'Company',
85
+ name: 'company',
86
+ type: 'string',
87
+ default: '',
88
+ },
89
+ {
90
+ displayName: 'Job Title',
91
+ name: 'jobTitle',
92
+ type: 'string',
93
+ default: '',
94
+ },
95
+ {
96
+ displayName: 'Phone',
97
+ name: 'phone',
98
+ type: 'string',
99
+ default: '',
100
+ },
101
+ {
102
+ displayName: 'LinkedIn URL',
103
+ name: 'linkedInUrl',
104
+ type: 'string',
105
+ default: '',
106
+ },
107
+ {
108
+ displayName: 'Tags',
109
+ name: 'tags',
110
+ type: 'string',
111
+ default: '',
112
+ description: 'Comma-separated list of tags',
113
+ },
114
+ ],
115
+ },
116
+ // ──────────────── GET ────────────────
117
+ {
118
+ displayName: 'Contact ID',
119
+ name: 'contactId',
120
+ type: 'string',
121
+ required: true,
122
+ default: '',
123
+ displayOptions: { show: { resource: ['contact'], operation: ['get', 'update'] } },
124
+ description: 'The ID of the contact',
125
+ },
126
+ // ──────────────── GET ALL ────────────────
127
+ {
128
+ displayName: 'Return All',
129
+ name: 'returnAll',
130
+ type: 'boolean',
131
+ default: false,
132
+ displayOptions: { show: { resource: ['contact'], operation: ['getAll'] } },
133
+ description: 'Whether to return all results or only up to a given limit',
134
+ },
135
+ {
136
+ displayName: 'Limit',
137
+ name: 'limit',
138
+ type: 'number',
139
+ default: 50,
140
+ typeOptions: { minValue: 1, maxValue: 500 },
141
+ displayOptions: {
142
+ show: { resource: ['contact'], operation: ['getAll'], returnAll: [false] },
143
+ },
144
+ description: 'Max number of contacts to return',
145
+ },
146
+ {
147
+ displayName: 'Filters',
148
+ name: 'filters',
149
+ type: 'collection',
150
+ placeholder: 'Add Filter',
151
+ default: {},
152
+ displayOptions: { show: { resource: ['contact'], operation: ['getAll'] } },
153
+ options: [
154
+ {
155
+ displayName: 'Search',
156
+ name: 'search',
157
+ type: 'string',
158
+ default: '',
159
+ description: 'Search contacts by name, email, company, or job title',
160
+ },
161
+ ],
162
+ },
163
+ // ──────────────── UPDATE ────────────────
164
+ {
165
+ displayName: 'Update Fields',
166
+ name: 'updateFields',
167
+ type: 'collection',
168
+ placeholder: 'Add Field',
169
+ default: {},
170
+ displayOptions: { show: { resource: ['contact'], operation: ['update'] } },
171
+ options: [
172
+ { displayName: 'First Name', name: 'firstName', type: 'string', default: '' },
173
+ { displayName: 'Last Name', name: 'lastName', type: 'string', default: '' },
174
+ { displayName: 'Email', name: 'email', type: 'string', default: '' },
175
+ { displayName: 'Company', name: 'company', type: 'string', default: '' },
176
+ { displayName: 'Job Title', name: 'jobTitle', type: 'string', default: '' },
177
+ { displayName: 'Phone', name: 'phone', type: 'string', default: '' },
178
+ { displayName: 'LinkedIn URL', name: 'linkedInUrl', type: 'string', default: '' },
179
+ ],
180
+ },
181
+ // ──────────────── BULK CREATE ────────────────
182
+ {
183
+ displayName: 'Contacts (JSON)',
184
+ name: 'contactsJson',
185
+ type: 'json',
186
+ required: true,
187
+ default: '[]',
188
+ displayOptions: { show: { resource: ['contact'], operation: ['bulkCreate'] } },
189
+ description: 'Array of contact objects. Each object can have: firstName, lastName, email, company, jobTitle, phone.',
190
+ },
191
+ ];
192
+ //# sourceMappingURL=ContactDescription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactDescription.js","sourceRoot":"","sources":["../../../../nodes/Delightloop/descriptions/ContactDescription.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { IHookFunctions, INodeType, INodeTypeDescription, IWebhookFunctions, IWebhookResponseData } from 'n8n-workflow';
2
+ export declare class DelightloopTrigger implements INodeType {
3
+ description: INodeTypeDescription;
4
+ webhookMethods: {
5
+ default: {
6
+ checkExists(this: IHookFunctions): Promise<boolean>;
7
+ create(this: IHookFunctions): Promise<boolean>;
8
+ delete(this: IHookFunctions): Promise<boolean>;
9
+ };
10
+ };
11
+ webhook(this: IWebhookFunctions): Promise<IWebhookResponseData>;
12
+ }
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DelightloopTrigger = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ // All events the user can subscribe to
6
+ const EVENT_OPTIONS = [
7
+ {
8
+ name: 'Campaign Created',
9
+ value: 'campaign.created',
10
+ description: 'Triggered when a new campaign is created',
11
+ },
12
+ {
13
+ name: 'Campaign Updated',
14
+ value: 'campaign.updated',
15
+ description: 'Triggered when campaign details are updated',
16
+ },
17
+ {
18
+ name: 'Campaign Status Changed',
19
+ value: 'campaign.status_changed',
20
+ description: 'Triggered when campaign status changes (draft → live → completed)',
21
+ },
22
+ {
23
+ name: 'Campaign Deleted',
24
+ value: 'campaign.deleted',
25
+ description: 'Triggered when a campaign is deleted',
26
+ },
27
+ {
28
+ name: 'Campaign Recipients Added',
29
+ value: 'campaign.recipients_added',
30
+ description: 'Triggered when recipients are added to a campaign',
31
+ },
32
+ {
33
+ name: 'Recipient Created',
34
+ value: 'recipient.created',
35
+ description: 'Triggered when a recipient is added to a campaign',
36
+ },
37
+ {
38
+ name: 'Recipient Status Changed',
39
+ value: 'recipient.status_changed',
40
+ description: 'Triggered when a recipient status changes',
41
+ },
42
+ {
43
+ name: 'Recipient Email Sent',
44
+ value: 'recipient.email_sent',
45
+ description: 'Triggered when an email is sent to a recipient',
46
+ },
47
+ {
48
+ name: 'Recipient Feedback Submitted',
49
+ value: 'recipient.feedback_submitted',
50
+ description: 'Triggered when a recipient submits gift feedback',
51
+ },
52
+ ];
53
+ // Resolve eventType string (e.g. "campaign.status_changed") → { module, action }
54
+ function parseEventType(eventType) {
55
+ const [module, ...rest] = eventType.split('.');
56
+ return { module, action: rest.join('_') };
57
+ }
58
+ class DelightloopTrigger {
59
+ constructor() {
60
+ this.description = {
61
+ displayName: 'Delightloop Trigger',
62
+ name: 'delightloopTrigger',
63
+ icon: 'file:delightloop.png',
64
+ group: ['trigger'],
65
+ version: 1,
66
+ subtitle: '={{$parameter["events"].join(", ")}}',
67
+ description: 'Start a workflow when Delightloop fires a campaign or recipient event',
68
+ defaults: {
69
+ name: 'Delightloop Trigger',
70
+ },
71
+ inputs: [],
72
+ outputs: ['main'],
73
+ credentials: [
74
+ {
75
+ name: 'delightloopApi',
76
+ required: true,
77
+ },
78
+ ],
79
+ webhooks: [
80
+ {
81
+ name: 'default',
82
+ httpMethod: 'POST',
83
+ responseMode: 'onReceived',
84
+ path: 'webhook',
85
+ },
86
+ ],
87
+ properties: [
88
+ {
89
+ displayName: 'Events',
90
+ name: 'events',
91
+ type: 'multiOptions',
92
+ required: true,
93
+ default: [],
94
+ options: EVENT_OPTIONS,
95
+ description: 'Select one or more events to listen for',
96
+ },
97
+ {
98
+ displayName: 'Subscription Name',
99
+ name: 'subscriptionName',
100
+ type: 'string',
101
+ default: 'n8n Delightloop Trigger',
102
+ description: 'A label for this subscription visible in the Delightloop dashboard',
103
+ },
104
+ ],
105
+ };
106
+ // ─── Lifecycle hooks: register / unregister with Delightloop ───────────────
107
+ this.webhookMethods = {
108
+ default: {
109
+ // Check if a subscription for this workflow already exists
110
+ async checkExists() {
111
+ const webhookData = this.getWorkflowStaticData('node');
112
+ if (webhookData.subscriptionId) {
113
+ // Verify it still exists on Delightloop side
114
+ try {
115
+ const credentials = await this.getCredentials('delightloopApi');
116
+ const baseUrl = credentials.baseUrl.replace(/\/$/, '');
117
+ await this.helpers.httpRequest({
118
+ method: 'GET',
119
+ url: `${baseUrl}/api/webhooks/subscriptions/${webhookData.subscriptionId}`,
120
+ headers: {
121
+ 'x-api-key': credentials.apiKey,
122
+ 'x-org-id': credentials.orgId,
123
+ },
124
+ json: true,
125
+ });
126
+ return true;
127
+ }
128
+ catch {
129
+ // Subscription gone — will re-create
130
+ delete webhookData.subscriptionId;
131
+ }
132
+ }
133
+ return false;
134
+ },
135
+ // Register a new subscription with Delightloop pointing to our n8n URL
136
+ async create() {
137
+ var _a;
138
+ const credentials = await this.getCredentials('delightloopApi');
139
+ const baseUrl = credentials.baseUrl.replace(/\/$/, '');
140
+ const webhookUrl = this.getNodeWebhookUrl('default');
141
+ const events = this.getNodeParameter('events');
142
+ const subscriptionName = this.getNodeParameter('subscriptionName');
143
+ if (!events || events.length === 0) {
144
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Please select at least one event to listen for.');
145
+ }
146
+ const eventPatterns = events.map((e) => parseEventType(e));
147
+ const body = {
148
+ name: subscriptionName,
149
+ url: webhookUrl,
150
+ eventPatterns,
151
+ };
152
+ const response = await this.helpers.httpRequest({
153
+ method: 'POST',
154
+ url: `${baseUrl}/api/webhooks/subscriptions`,
155
+ headers: {
156
+ 'x-api-key': credentials.apiKey,
157
+ 'x-org-id': credentials.orgId,
158
+ 'Content-Type': 'application/json',
159
+ },
160
+ body,
161
+ json: true,
162
+ });
163
+ const res = response;
164
+ if (!res.subscriptionId && !res.id) {
165
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to create Delightloop webhook subscription: ${JSON.stringify(response)}`);
166
+ }
167
+ // Persist subscription ID so we can delete it on deactivate
168
+ const webhookData = this.getWorkflowStaticData('node');
169
+ webhookData.subscriptionId = ((_a = res.subscriptionId) !== null && _a !== void 0 ? _a : res.id);
170
+ return true;
171
+ },
172
+ // Delete the subscription from Delightloop when workflow is deactivated
173
+ async delete() {
174
+ const webhookData = this.getWorkflowStaticData('node');
175
+ if (!webhookData.subscriptionId)
176
+ return true;
177
+ try {
178
+ const credentials = await this.getCredentials('delightloopApi');
179
+ const baseUrl = credentials.baseUrl.replace(/\/$/, '');
180
+ await this.helpers.httpRequest({
181
+ method: 'DELETE',
182
+ url: `${baseUrl}/api/webhooks/subscriptions/${webhookData.subscriptionId}`,
183
+ headers: {
184
+ 'x-api-key': credentials.apiKey,
185
+ 'x-org-id': credentials.orgId,
186
+ },
187
+ json: true,
188
+ });
189
+ }
190
+ catch {
191
+ // Best effort — not a blocking error
192
+ }
193
+ delete webhookData.subscriptionId;
194
+ return true;
195
+ },
196
+ },
197
+ };
198
+ }
199
+ // ─── Receive and forward the webhook payload ────────────────────────────────
200
+ async webhook() {
201
+ const req = this.getRequestObject();
202
+ const body = req.body;
203
+ return {
204
+ workflowData: [[{ json: body }]],
205
+ };
206
+ }
207
+ }
208
+ exports.DelightloopTrigger = DelightloopTrigger;
209
+ //# sourceMappingURL=DelightloopTrigger.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DelightloopTrigger.node.js","sourceRoot":"","sources":["../../../nodes/DelightloopTrigger/DelightloopTrigger.node.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "n8n-nodes-delightloop",
3
+ "version": "0.1.0",
4
+ "description": "n8n community nodes for Delightloop — manage contacts and campaigns",
5
+ "keywords": [
6
+ "n8n-community-node-package",
7
+ "delightloop",
8
+ "gifting",
9
+ "contacts",
10
+ "campaigns"
11
+ ],
12
+ "license": "MIT",
13
+ "homepage": "https://delightloop.ai",
14
+ "author": {
15
+ "name": "Delightloop",
16
+ "email": "dev@delightloop.ai"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/delightloop/n8n-nodes-delightloop.git"
21
+ },
22
+ "main": "index.js",
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "n8n": {
27
+ "n8nNodesApiVersion": 1,
28
+ "credentials": [
29
+ "dist/credentials/DelightloopApi.credentials.js"
30
+ ],
31
+ "nodes": [
32
+ "dist/nodes/Delightloop/Delightloop.node.js",
33
+ "dist/nodes/DelightloopTrigger/DelightloopTrigger.node.js"
34
+ ]
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^20.0.0",
38
+ "eslint-plugin-n8n-nodes-base": "^1.16.2",
39
+ "gulp": "^4.0.2",
40
+ "n8n-workflow": "^1.0.0",
41
+ "prettier": "^3.0.0",
42
+ "typescript": "^5.3.0"
43
+ },
44
+ "peerDependencies": {
45
+ "n8n-workflow": "*"
46
+ },
47
+ "scripts": {
48
+ "build": "tsc && gulp build:icons",
49
+ "dev": "tsc --watch",
50
+ "format": "prettier nodes credentials --write",
51
+ "lint": "eslint nodes credentials package.json",
52
+ "lintfix": "eslint nodes credentials package.json --fix"
53
+ }
54
+ }