@pakoor/n8n-nodes-instagram 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.
- package/README.md +271 -0
- package/dist/__tests__/helpers/index.d.ts +2 -0
- package/dist/__tests__/helpers/index.d.ts.map +1 -0
- package/dist/__tests__/helpers/index.js +18 -0
- package/dist/__tests__/helpers/index.js.map +1 -0
- package/dist/__tests__/helpers/testUtils.d.ts +104 -0
- package/dist/__tests__/helpers/testUtils.d.ts.map +1 -0
- package/dist/__tests__/helpers/testUtils.js +175 -0
- package/dist/__tests__/helpers/testUtils.js.map +1 -0
- package/dist/credentials/InstagramAccessTokenApi.credentials.d.ts +19 -0
- package/dist/credentials/InstagramAccessTokenApi.credentials.d.ts.map +1 -0
- package/dist/credentials/InstagramAccessTokenApi.credentials.js +130 -0
- package/dist/credentials/InstagramAccessTokenApi.credentials.js.map +1 -0
- package/dist/credentials/InstagramOAuth2Api.credentials.d.ts +20 -0
- package/dist/credentials/InstagramOAuth2Api.credentials.d.ts.map +1 -0
- package/dist/credentials/InstagramOAuth2Api.credentials.js +177 -0
- package/dist/credentials/InstagramOAuth2Api.credentials.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/nodes/Instagram/Instagram.node.d.ts +10 -0
- package/dist/nodes/Instagram/Instagram.node.d.ts.map +1 -0
- package/dist/nodes/Instagram/Instagram.node.js +1152 -0
- package/dist/nodes/Instagram/Instagram.node.js.map +1 -0
- package/dist/nodes/Instagram/InstagramTrigger.node.d.ts +61 -0
- package/dist/nodes/Instagram/InstagramTrigger.node.d.ts.map +1 -0
- package/dist/nodes/Instagram/InstagramTrigger.node.js +315 -0
- package/dist/nodes/Instagram/InstagramTrigger.node.js.map +1 -0
- package/dist/nodes/Instagram/instagram.svg +15 -0
- package/dist/services/InstagramApiClient.d.ts +261 -0
- package/dist/services/InstagramApiClient.d.ts.map +1 -0
- package/dist/services/InstagramApiClient.js +548 -0
- package/dist/services/InstagramApiClient.js.map +1 -0
- package/dist/services/TokenManager.d.ts +73 -0
- package/dist/services/TokenManager.d.ts.map +1 -0
- package/dist/services/TokenManager.js +150 -0
- package/dist/services/TokenManager.js.map +1 -0
- package/dist/services/ValidationUtils.d.ts +44 -0
- package/dist/services/ValidationUtils.d.ts.map +1 -0
- package/dist/services/ValidationUtils.js +203 -0
- package/dist/services/ValidationUtils.js.map +1 -0
- package/dist/services/WebhookHandler.d.ts +206 -0
- package/dist/services/WebhookHandler.d.ts.map +1 -0
- package/dist/services/WebhookHandler.js +261 -0
- package/dist/services/WebhookHandler.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +21 -0
- package/dist/services/index.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* WebhookHandler Service
|
|
4
|
+
* Handles Instagram webhook verification, signature validation, and event processing
|
|
5
|
+
*
|
|
6
|
+
* Requirements covered:
|
|
7
|
+
* - 12.1: Webhook verification with hub.challenge response
|
|
8
|
+
* - 12.2: Incoming message event parsing (sender, text, attachments)
|
|
9
|
+
* - 12.3: Postback event parsing (title, payload)
|
|
10
|
+
* - 12.4: Opt-in event parsing (ref, user_ref)
|
|
11
|
+
* - 12.5: X-Hub-Signature-256 validation using HMAC SHA256
|
|
12
|
+
* - 12.6: Signature validation failure handling
|
|
13
|
+
* - 13.1: Comment event parsing (media_id, comment text, commenter info)
|
|
14
|
+
* - 13.2: Mention event parsing (media_id, mentioned by)
|
|
15
|
+
* - 13.3: Dual output system (Output 1: messaging, Output 2: content)
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.WebhookHandler = void 0;
|
|
52
|
+
const crypto = __importStar(require("crypto"));
|
|
53
|
+
class WebhookHandler {
|
|
54
|
+
/**
|
|
55
|
+
* Verify webhook subscription request (Requirement 12.1)
|
|
56
|
+
* Returns challenge if verify token matches, null otherwise
|
|
57
|
+
*
|
|
58
|
+
* @param query - The query parameters from the verification request
|
|
59
|
+
* @param expectedVerifyToken - The expected verify token configured in the app
|
|
60
|
+
* @returns The challenge string if verification succeeds, null otherwise
|
|
61
|
+
*/
|
|
62
|
+
verifyWebhook(query, expectedVerifyToken) {
|
|
63
|
+
if (query['hub.mode'] === 'subscribe' &&
|
|
64
|
+
query['hub.verify_token'] === expectedVerifyToken &&
|
|
65
|
+
query['hub.challenge']) {
|
|
66
|
+
return query['hub.challenge'];
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validate webhook signature using HMAC SHA256 (Requirements 12.5, 12.6)
|
|
72
|
+
* Uses timing-safe comparison to prevent timing attacks
|
|
73
|
+
*
|
|
74
|
+
* @param payload - The raw request body as a string
|
|
75
|
+
* @param signature - The X-Hub-Signature-256 header value
|
|
76
|
+
* @param appSecret - The app secret used for HMAC calculation
|
|
77
|
+
* @returns true if signature is valid, false otherwise
|
|
78
|
+
*/
|
|
79
|
+
validateSignature(payload, signature, appSecret) {
|
|
80
|
+
if (!signature || !signature.startsWith('sha256=')) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const expectedSignature = crypto
|
|
84
|
+
.createHmac('sha256', appSecret)
|
|
85
|
+
.update(payload)
|
|
86
|
+
.digest('hex');
|
|
87
|
+
const providedSignature = signature.replace('sha256=', '');
|
|
88
|
+
// Ensure both signatures have the same length before comparison
|
|
89
|
+
if (expectedSignature.length !== providedSignature.length) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
return crypto.timingSafeEqual(Buffer.from(expectedSignature, 'hex'), Buffer.from(providedSignature, 'hex'));
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Handle invalid hex strings
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Process webhook payload and route events to appropriate outputs (Requirement 13.3)
|
|
102
|
+
* Output 1: Messaging events (messages, postbacks, optins)
|
|
103
|
+
* Output 2: Content events (comments, mentions)
|
|
104
|
+
*
|
|
105
|
+
* @param body - The webhook body from Instagram
|
|
106
|
+
* @returns Separated messaging and content events
|
|
107
|
+
*/
|
|
108
|
+
processWebhook(body) {
|
|
109
|
+
const messagingEvents = [];
|
|
110
|
+
const contentEvents = [];
|
|
111
|
+
if (body.object !== 'instagram' || !body.entry) {
|
|
112
|
+
return { messagingEvents, contentEvents };
|
|
113
|
+
}
|
|
114
|
+
for (const entry of body.entry) {
|
|
115
|
+
// Collect messaging events (Output 1) - Requirements 12.2, 12.3, 12.4
|
|
116
|
+
if (entry.messaging && Array.isArray(entry.messaging)) {
|
|
117
|
+
messagingEvents.push(...entry.messaging);
|
|
118
|
+
}
|
|
119
|
+
// Collect content events (Output 2) - Requirements 13.1, 13.2
|
|
120
|
+
if (entry.changes && Array.isArray(entry.changes)) {
|
|
121
|
+
contentEvents.push(...entry.changes);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return { messagingEvents, contentEvents };
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Parse a messaging event into a more consumable format (Requirements 12.2, 12.3, 12.4)
|
|
128
|
+
* Extracts sender ID, message ID, text/attachments for messages
|
|
129
|
+
* Extracts sender ID, title, payload for postbacks
|
|
130
|
+
* Extracts ref, user_ref for optins
|
|
131
|
+
*
|
|
132
|
+
* @param event - The raw messaging event
|
|
133
|
+
* @returns Parsed event with extracted fields, or null if invalid
|
|
134
|
+
*/
|
|
135
|
+
parseMessagingEvent(event) {
|
|
136
|
+
const baseFields = {
|
|
137
|
+
senderId: event.sender?.id,
|
|
138
|
+
recipientId: event.recipient?.id,
|
|
139
|
+
timestamp: event.timestamp,
|
|
140
|
+
};
|
|
141
|
+
// Validate required base fields
|
|
142
|
+
if (!baseFields.senderId || !baseFields.recipientId) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
// Parse message event (Requirement 12.2)
|
|
146
|
+
if (event.message) {
|
|
147
|
+
return {
|
|
148
|
+
type: 'message',
|
|
149
|
+
...baseFields,
|
|
150
|
+
messageId: event.message.mid,
|
|
151
|
+
text: event.message.text,
|
|
152
|
+
attachments: event.message.attachments,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
// Parse postback event (Requirement 12.3)
|
|
156
|
+
if (event.postback) {
|
|
157
|
+
return {
|
|
158
|
+
type: 'postback',
|
|
159
|
+
...baseFields,
|
|
160
|
+
messageId: event.postback.mid,
|
|
161
|
+
title: event.postback.title,
|
|
162
|
+
payload: event.postback.payload,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// Parse opt-in event (Requirement 12.4)
|
|
166
|
+
if (event.optin) {
|
|
167
|
+
return {
|
|
168
|
+
type: 'optin',
|
|
169
|
+
...baseFields,
|
|
170
|
+
ref: event.optin.ref,
|
|
171
|
+
userRef: event.optin.user_ref,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Parse a content event into a more consumable format (Requirements 13.1, 13.2)
|
|
178
|
+
* Extracts media ID, comment ID, text, commenter info for comments
|
|
179
|
+
* Extracts media ID, mentioned by info for mentions
|
|
180
|
+
*
|
|
181
|
+
* @param event - The raw change event
|
|
182
|
+
* @returns Parsed event with extracted fields, or null if invalid
|
|
183
|
+
*/
|
|
184
|
+
parseContentEvent(event) {
|
|
185
|
+
if (!event.value || !event.value.media_id || !event.value.id || !event.value.from) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
// Parse comment event (Requirement 13.1)
|
|
189
|
+
if (event.field === 'comments') {
|
|
190
|
+
return {
|
|
191
|
+
type: 'comment',
|
|
192
|
+
mediaId: event.value.media_id,
|
|
193
|
+
commentId: event.value.id,
|
|
194
|
+
text: event.value.text,
|
|
195
|
+
from: event.value.from,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// Parse mention event (Requirement 13.2)
|
|
199
|
+
if (event.field === 'mentions') {
|
|
200
|
+
return {
|
|
201
|
+
type: 'mention',
|
|
202
|
+
mediaId: event.value.media_id,
|
|
203
|
+
mentionId: event.value.id,
|
|
204
|
+
from: event.value.from,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Process and parse all events from a webhook body
|
|
211
|
+
* Returns fully parsed events ready for n8n output
|
|
212
|
+
*
|
|
213
|
+
* @param body - The webhook body from Instagram
|
|
214
|
+
* @returns Parsed messaging and content events
|
|
215
|
+
*/
|
|
216
|
+
processAndParseWebhook(body) {
|
|
217
|
+
const { messagingEvents, contentEvents } = this.processWebhook(body);
|
|
218
|
+
const parsedMessaging = messagingEvents
|
|
219
|
+
.map((event) => this.parseMessagingEvent(event))
|
|
220
|
+
.filter((event) => event !== null);
|
|
221
|
+
const parsedContent = contentEvents
|
|
222
|
+
.map((event) => this.parseContentEvent(event))
|
|
223
|
+
.filter((event) => event !== null);
|
|
224
|
+
return {
|
|
225
|
+
messagingEvents: parsedMessaging,
|
|
226
|
+
contentEvents: parsedContent,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check if a messaging event is a message type
|
|
231
|
+
*/
|
|
232
|
+
isMessageEvent(event) {
|
|
233
|
+
return !!event.message;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Check if a messaging event is a postback type
|
|
237
|
+
*/
|
|
238
|
+
isPostbackEvent(event) {
|
|
239
|
+
return !!event.postback;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Check if a messaging event is an opt-in type
|
|
243
|
+
*/
|
|
244
|
+
isOptinEvent(event) {
|
|
245
|
+
return !!event.optin;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Check if a content event is a comment type
|
|
249
|
+
*/
|
|
250
|
+
isCommentEvent(event) {
|
|
251
|
+
return event.field === 'comments';
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Check if a content event is a mention type
|
|
255
|
+
*/
|
|
256
|
+
isMentionEvent(event) {
|
|
257
|
+
return event.field === 'mentions';
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
exports.WebhookHandler = WebhookHandler;
|
|
261
|
+
//# sourceMappingURL=WebhookHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebhookHandler.js","sourceRoot":"","sources":["../../src/services/WebhookHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./TokenManager"), exports);
|
|
18
|
+
__exportStar(require("./InstagramApiClient"), exports);
|
|
19
|
+
__exportStar(require("./WebhookHandler"), exports);
|
|
20
|
+
__exportStar(require("./ValidationUtils"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,uDAAqC;AACrC,mDAAiC;AACjC,oDAAkC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pakoor/n8n-nodes-instagram",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "n8n community node for Instagram Messaging API integration",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"n8n-community-node-package",
|
|
7
|
+
"n8n",
|
|
8
|
+
"instagram",
|
|
9
|
+
"messaging",
|
|
10
|
+
"social-media"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"homepage": "",
|
|
14
|
+
"author": {
|
|
15
|
+
"name": ""
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": ""
|
|
20
|
+
},
|
|
21
|
+
"main": "dist/index.js",
|
|
22
|
+
"types": "dist/index.d.ts",
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc && gulp build:icons",
|
|
25
|
+
"dev": "tsc --watch",
|
|
26
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
27
|
+
"lint": "eslint src --ext .ts",
|
|
28
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
29
|
+
"prepublishOnly": "npm run build",
|
|
30
|
+
"test": "jest",
|
|
31
|
+
"test:watch": "jest --watch",
|
|
32
|
+
"test:coverage": "jest --coverage"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist"
|
|
36
|
+
],
|
|
37
|
+
"n8n": {
|
|
38
|
+
"n8nNodesApiVersion": 1,
|
|
39
|
+
"credentials": [
|
|
40
|
+
"dist/credentials/InstagramOAuth2Api.credentials.js",
|
|
41
|
+
"dist/credentials/InstagramAccessTokenApi.credentials.js"
|
|
42
|
+
],
|
|
43
|
+
"nodes": [
|
|
44
|
+
"dist/nodes/Instagram/Instagram.node.js",
|
|
45
|
+
"dist/nodes/Instagram/InstagramTrigger.node.js"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/jest": "^29.5.12",
|
|
50
|
+
"@types/node": "^20.11.0",
|
|
51
|
+
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
52
|
+
"@typescript-eslint/parser": "^7.0.0",
|
|
53
|
+
"eslint": "^8.56.0",
|
|
54
|
+
"eslint-config-prettier": "^9.1.0",
|
|
55
|
+
"eslint-plugin-n8n-nodes-base": "^1.16.1",
|
|
56
|
+
"fast-check": "^3.15.0",
|
|
57
|
+
"gulp": "^4.0.2",
|
|
58
|
+
"jest": "^29.7.0",
|
|
59
|
+
"prettier": "^3.2.0",
|
|
60
|
+
"ts-jest": "^29.1.2",
|
|
61
|
+
"typescript": "^5.3.3"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"n8n-workflow": "*"
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"n8n-core": "^1.0.0"
|
|
68
|
+
}
|
|
69
|
+
}
|