@pakoor/n8n-nodes-instagram 0.1.12 → 0.1.14
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/credentials/InstagramAccessTokenApi.credentials.js +3 -3
- package/dist/credentials/InstagramOAuth2Api.credentials.d.ts +6 -6
- package/dist/credentials/InstagramOAuth2Api.credentials.d.ts.map +1 -1
- package/dist/credentials/InstagramOAuth2Api.credentials.js +56 -53
- package/dist/credentials/InstagramOAuth2Api.credentials.js.map +1 -1
- package/dist/nodes/Instagram/InstagramTrigger.node.js +2 -2
- package/dist/nodes/Instagram/InstagramTrigger.node.js.map +1 -1
- package/dist/services/InstagramApiClient.d.ts +1 -1
- package/dist/services/InstagramApiClient.js +1 -1
- package/dist/services/InstagramHelpers.js +3 -3
- package/dist/services/TokenManager.js +1 -1
- package/package.json +1 -1
|
@@ -36,7 +36,7 @@ class InstagramAccessTokenApi {
|
|
|
36
36
|
};
|
|
37
37
|
this.test = {
|
|
38
38
|
request: {
|
|
39
|
-
baseURL: 'https://graph.facebook.com/
|
|
39
|
+
baseURL: 'https://graph.facebook.com/v23.0',
|
|
40
40
|
url: '/me',
|
|
41
41
|
qs: {
|
|
42
42
|
fields: 'id,name',
|
|
@@ -63,7 +63,7 @@ class InstagramAccessTokenApi {
|
|
|
63
63
|
// First, try a simple API call to validate the token
|
|
64
64
|
await this.helpers.httpRequest({
|
|
65
65
|
method: 'GET',
|
|
66
|
-
url: 'https://graph.facebook.com/
|
|
66
|
+
url: 'https://graph.facebook.com/v23.0/me',
|
|
67
67
|
qs: {
|
|
68
68
|
fields: 'id,name',
|
|
69
69
|
access_token: accessToken,
|
|
@@ -76,7 +76,7 @@ class InstagramAccessTokenApi {
|
|
|
76
76
|
// Get pages connected to the user
|
|
77
77
|
const pagesResponse = await this.helpers.httpRequest({
|
|
78
78
|
method: 'GET',
|
|
79
|
-
url: 'https://graph.facebook.com/
|
|
79
|
+
url: 'https://graph.facebook.com/v23.0/me/accounts',
|
|
80
80
|
qs: {
|
|
81
81
|
fields: 'instagram_business_account,id,name',
|
|
82
82
|
access_token: accessToken,
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ICredentialDataDecryptedObject, ICredentialTestRequest, ICredentialType, IDataObject, IHttpRequestHelper, INodeProperties } from 'n8n-workflow';
|
|
2
2
|
export declare class InstagramOAuth2Api implements ICredentialType {
|
|
3
3
|
name: string;
|
|
4
4
|
extends: string[];
|
|
5
5
|
displayName: string;
|
|
6
6
|
documentationUrl: string;
|
|
7
7
|
properties: INodeProperties[];
|
|
8
|
-
/**
|
|
9
|
-
* Authenticate requests by adding access token to query string
|
|
10
|
-
*/
|
|
11
|
-
authenticate: IAuthenticateGeneric;
|
|
12
8
|
/**
|
|
13
9
|
* Pre-authentication hook that exchanges short-lived OAuth token for a long-lived token
|
|
10
|
+
* and refreshes it when near expiration. n8n automatically persists the returned values.
|
|
11
|
+
*
|
|
12
|
+
* This is called by n8n before each API request when the credential has an expirable field.
|
|
13
|
+
* If this function returns new credential data, n8n will persist it to the database.
|
|
14
14
|
*/
|
|
15
15
|
preAuthentication(this: IHttpRequestHelper, credentials: ICredentialDataDecryptedObject): Promise<IDataObject>;
|
|
16
16
|
/**
|
|
17
|
-
* Test credentials
|
|
17
|
+
* Test the credentials to ensure they work
|
|
18
18
|
*/
|
|
19
19
|
test: ICredentialTestRequest;
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstagramOAuth2Api.credentials.d.ts","sourceRoot":"","sources":["../../src/credentials/InstagramOAuth2Api.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"InstagramOAuth2Api.credentials.d.ts","sourceRoot":"","sources":["../../src/credentials/InstagramOAuth2Api.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,8BAA8B,EAC9B,sBAAsB,EACtB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,MAAM,cAAc,CAAC;AAEtB,qBAAa,kBAAmB,YAAW,eAAe;IACzD,IAAI,SAAwB;IAC5B,OAAO,WAAiB;IACxB,WAAW,SAA0B;IACrC,gBAAgB,SAAwE;IACxF,UAAU,EAAE,eAAe,EAAE,CA4F3B;IAEF;;;;;;OAMG;IACG,iBAAiB,CACtB,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,8BAA8B,GACzC,OAAO,CAAC,WAAW,CAAC;IAwEvB;;OAEG;IACH,IAAI,EAAE,sBAAsB,CAS1B;CACF"}
|
|
@@ -6,7 +6,7 @@ class InstagramOAuth2Api {
|
|
|
6
6
|
this.name = 'instagramOAuth2Api';
|
|
7
7
|
this.extends = ['oAuth2Api'];
|
|
8
8
|
this.displayName = 'Instagram OAuth2 API';
|
|
9
|
-
this.documentationUrl = 'https://developers.facebook.com/docs/instagram-
|
|
9
|
+
this.documentationUrl = 'https://developers.facebook.com/docs/instagram-api/getting-started';
|
|
10
10
|
this.properties = [
|
|
11
11
|
{
|
|
12
12
|
displayName: 'Grant Type',
|
|
@@ -18,25 +18,25 @@ class InstagramOAuth2Api {
|
|
|
18
18
|
displayName: 'Authorization URL',
|
|
19
19
|
name: 'authUrl',
|
|
20
20
|
type: 'hidden',
|
|
21
|
-
default: 'https://
|
|
21
|
+
default: 'https://api.instagram.com/oauth/authorize',
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
displayName: 'Access Token URL',
|
|
25
25
|
name: 'accessTokenUrl',
|
|
26
26
|
type: 'hidden',
|
|
27
|
-
default: 'https://
|
|
27
|
+
default: 'https://api.instagram.com/oauth/access_token',
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
displayName: 'Scope',
|
|
31
31
|
name: 'scope',
|
|
32
32
|
type: 'hidden',
|
|
33
|
-
default: '
|
|
33
|
+
default: 'instagram_business_basic,instagram_business_manage_messages,instagram_business_manage_comments,instagram_business_content_publish',
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
displayName: 'Auth URI Query Parameters',
|
|
37
37
|
name: 'authQueryParameters',
|
|
38
38
|
type: 'hidden',
|
|
39
|
-
default: '
|
|
39
|
+
default: '',
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
displayName: 'Authentication',
|
|
@@ -45,28 +45,32 @@ class InstagramOAuth2Api {
|
|
|
45
45
|
default: 'body',
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
|
-
displayName: '
|
|
48
|
+
displayName: 'Account Information',
|
|
49
|
+
name: 'accountInfoNotice',
|
|
50
|
+
type: 'notice',
|
|
51
|
+
default: '',
|
|
52
|
+
description: 'After connecting your account, your Instagram Business Account details (username, ID, profile) will be automatically available. You can access this information in your workflow nodes. The system will automatically exchange your OAuth token for a long-lived token (60 days) and persist it, ensuring it survives n8n restarts.',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
displayName: 'Client ID',
|
|
49
56
|
name: 'clientId',
|
|
50
57
|
type: 'string',
|
|
51
58
|
default: '',
|
|
52
59
|
required: true,
|
|
53
|
-
description: 'The App ID from your Meta Developer Console.
|
|
60
|
+
description: 'The Instagram App ID from your Meta Developer Console. <a href="https://developers.facebook.com/apps/" target="_blank">Get it here</a>.',
|
|
61
|
+
placeholder: '1234567890123456',
|
|
54
62
|
},
|
|
55
63
|
{
|
|
56
|
-
displayName: 'Client Secret
|
|
64
|
+
displayName: 'Client Secret',
|
|
57
65
|
name: 'clientSecret',
|
|
58
66
|
type: 'string',
|
|
59
|
-
typeOptions: {
|
|
67
|
+
typeOptions: {
|
|
68
|
+
password: true,
|
|
69
|
+
},
|
|
60
70
|
default: '',
|
|
61
71
|
required: true,
|
|
62
|
-
description: 'The App Secret from your Meta Developer Console
|
|
63
|
-
|
|
64
|
-
{
|
|
65
|
-
displayName: 'Setup Instructions',
|
|
66
|
-
name: 'setupNotice',
|
|
67
|
-
type: 'notice',
|
|
68
|
-
default: '',
|
|
69
|
-
description: 'Before connecting: 1) In Meta Developer Console, add "Facebook Login for Business" product. 2) Go to Facebook Login > Settings and add your n8n OAuth callback URL to "Valid OAuth Redirect URIs". 3) Make sure your app has instagram_basic and pages_show_list permissions.',
|
|
72
|
+
description: 'The Instagram App Secret from your Meta Developer Console',
|
|
73
|
+
placeholder: 'abc123def456...',
|
|
70
74
|
},
|
|
71
75
|
{
|
|
72
76
|
displayName: 'Webhook Verify Token',
|
|
@@ -75,8 +79,11 @@ class InstagramOAuth2Api {
|
|
|
75
79
|
typeOptions: { password: true },
|
|
76
80
|
default: '',
|
|
77
81
|
required: false,
|
|
78
|
-
description: 'Optional: Custom verification token for webhook setup. Only needed if using Instagram Trigger node.',
|
|
82
|
+
description: 'Optional: Custom verification token for webhook setup (minimum 20 characters). Only needed if using Instagram Trigger node.',
|
|
83
|
+
placeholder: 'my_custom_verify_token_2024',
|
|
79
84
|
},
|
|
85
|
+
// Hidden field for long-lived token with expirable typeOption
|
|
86
|
+
// This enables n8n's preAuthentication system to persist the token
|
|
80
87
|
{
|
|
81
88
|
displayName: 'Long-Lived Token',
|
|
82
89
|
name: 'longLivedToken',
|
|
@@ -94,94 +101,90 @@ class InstagramOAuth2Api {
|
|
|
94
101
|
},
|
|
95
102
|
];
|
|
96
103
|
/**
|
|
97
|
-
*
|
|
98
|
-
*/
|
|
99
|
-
this.authenticate = {
|
|
100
|
-
type: 'generic',
|
|
101
|
-
properties: {
|
|
102
|
-
qs: {
|
|
103
|
-
access_token: '={{$credentials.longLivedToken || $credentials.oauthTokenData?.access_token}}',
|
|
104
|
-
},
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
/**
|
|
108
|
-
* Test credentials using Facebook Graph API
|
|
104
|
+
* Test the credentials to ensure they work
|
|
109
105
|
*/
|
|
110
106
|
this.test = {
|
|
111
107
|
request: {
|
|
112
|
-
baseURL: 'https://graph.
|
|
108
|
+
baseURL: 'https://graph.instagram.com/v23.0',
|
|
113
109
|
url: '/me',
|
|
114
110
|
method: 'GET',
|
|
115
111
|
qs: {
|
|
116
|
-
fields: 'id,
|
|
112
|
+
fields: 'id,username',
|
|
117
113
|
},
|
|
118
114
|
},
|
|
119
115
|
};
|
|
120
116
|
}
|
|
121
117
|
/**
|
|
122
118
|
* Pre-authentication hook that exchanges short-lived OAuth token for a long-lived token
|
|
119
|
+
* and refreshes it when near expiration. n8n automatically persists the returned values.
|
|
120
|
+
*
|
|
121
|
+
* This is called by n8n before each API request when the credential has an expirable field.
|
|
122
|
+
* If this function returns new credential data, n8n will persist it to the database.
|
|
123
123
|
*/
|
|
124
124
|
async preAuthentication(credentials) {
|
|
125
125
|
const now = Math.floor(Date.now() / 1000);
|
|
126
126
|
const longLivedToken = credentials.longLivedToken;
|
|
127
127
|
const tokenExpiresAt = credentials.tokenExpiresAt || 0;
|
|
128
|
-
const clientId = credentials.clientId;
|
|
129
128
|
const clientSecret = credentials.clientSecret;
|
|
130
129
|
const oauthTokenData = credentials.oauthTokenData;
|
|
131
130
|
const shortLivedToken = oauthTokenData?.access_token;
|
|
132
131
|
// If we have a valid long-lived token that's not near expiration, no action needed
|
|
133
132
|
if (longLivedToken && tokenExpiresAt > 0) {
|
|
133
|
+
// Token is still valid with more than 7 days remaining
|
|
134
134
|
const sevenDaysInSeconds = 7 * 24 * 60 * 60;
|
|
135
135
|
if (tokenExpiresAt > now + sevenDaysInSeconds) {
|
|
136
|
-
return {};
|
|
136
|
+
return {}; // No update needed
|
|
137
137
|
}
|
|
138
|
-
// Token near expiration, try to refresh
|
|
139
|
-
|
|
138
|
+
// Token is valid but near expiration (< 7 days), try to refresh it
|
|
139
|
+
// Instagram allows refresh only if token is at least 24 hours old
|
|
140
|
+
const totalLifetime = 60 * 24 * 60 * 60; // 60 days
|
|
140
141
|
const tokenAge = now - (tokenExpiresAt - totalLifetime);
|
|
141
142
|
if (tokenAge >= 24 * 60 * 60) {
|
|
142
143
|
try {
|
|
143
|
-
const refreshed =
|
|
144
|
+
const refreshed = await this.helpers.httpRequest({
|
|
144
145
|
method: 'GET',
|
|
145
|
-
url: 'https://graph.
|
|
146
|
+
url: 'https://graph.instagram.com/refresh_access_token',
|
|
146
147
|
qs: {
|
|
147
|
-
grant_type: '
|
|
148
|
-
|
|
149
|
-
client_secret: clientSecret,
|
|
150
|
-
fb_exchange_token: longLivedToken,
|
|
148
|
+
grant_type: 'ig_refresh_token',
|
|
149
|
+
access_token: longLivedToken,
|
|
151
150
|
},
|
|
152
|
-
})
|
|
151
|
+
});
|
|
153
152
|
return {
|
|
154
153
|
longLivedToken: refreshed.access_token,
|
|
155
154
|
tokenExpiresAt: now + refreshed.expires_in,
|
|
156
155
|
};
|
|
157
156
|
}
|
|
158
|
-
catch {
|
|
157
|
+
catch (error) {
|
|
158
|
+
// Refresh failed, but token is still valid - continue using it
|
|
159
|
+
console.warn('Instagram: Failed to refresh long-lived token, continuing with current token', error);
|
|
159
160
|
return {};
|
|
160
161
|
}
|
|
161
162
|
}
|
|
162
|
-
return {};
|
|
163
|
+
return {}; // Token too new to refresh
|
|
163
164
|
}
|
|
164
|
-
// No long-lived token - exchange short-lived for long-lived
|
|
165
|
+
// No long-lived token yet - exchange short-lived OAuth token for long-lived
|
|
165
166
|
if (!shortLivedToken) {
|
|
167
|
+
// No token available at all
|
|
166
168
|
return {};
|
|
167
169
|
}
|
|
168
170
|
try {
|
|
169
|
-
const exchanged =
|
|
171
|
+
const exchanged = await this.helpers.httpRequest({
|
|
170
172
|
method: 'GET',
|
|
171
|
-
url: 'https://graph.
|
|
173
|
+
url: 'https://graph.instagram.com/access_token',
|
|
172
174
|
qs: {
|
|
173
|
-
grant_type: '
|
|
174
|
-
client_id: clientId,
|
|
175
|
+
grant_type: 'ig_exchange_token',
|
|
175
176
|
client_secret: clientSecret,
|
|
176
|
-
|
|
177
|
+
access_token: shortLivedToken,
|
|
177
178
|
},
|
|
178
|
-
})
|
|
179
|
+
});
|
|
179
180
|
return {
|
|
180
181
|
longLivedToken: exchanged.access_token,
|
|
181
182
|
tokenExpiresAt: now + exchanged.expires_in,
|
|
182
183
|
};
|
|
183
184
|
}
|
|
184
|
-
catch {
|
|
185
|
+
catch (error) {
|
|
186
|
+
// Exchange failed - the short-lived token may be expired
|
|
187
|
+
console.error('Instagram: Failed to exchange OAuth token for long-lived token', error);
|
|
185
188
|
return {};
|
|
186
189
|
}
|
|
187
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstagramOAuth2Api.credentials.js","sourceRoot":"","sources":["../../src/credentials/InstagramOAuth2Api.credentials.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"InstagramOAuth2Api.credentials.js","sourceRoot":"","sources":["../../src/credentials/InstagramOAuth2Api.credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InstagramTrigger = void 0;
|
|
4
|
-
const
|
|
4
|
+
const services_1 = require("../../services");
|
|
5
5
|
/**
|
|
6
6
|
* Instagram Trigger Node
|
|
7
7
|
*
|
|
@@ -229,7 +229,7 @@ class InstagramTrigger {
|
|
|
229
229
|
*/
|
|
230
230
|
async webhook() {
|
|
231
231
|
const req = this.getRequestObject();
|
|
232
|
-
const webhookHandler = new
|
|
232
|
+
const webhookHandler = new services_1.WebhookHandler();
|
|
233
233
|
// Handle GET request for webhook verification (Requirement 12.1)
|
|
234
234
|
if (req.method === 'GET') {
|
|
235
235
|
const query = this.getQueryData();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstagramTrigger.node.js","sourceRoot":"","sources":["../../../src/nodes/Instagram/InstagramTrigger.node.ts"],"names":[],"mappings":";;;AAQA,
|
|
1
|
+
{"version":3,"file":"InstagramTrigger.node.js","sourceRoot":"","sources":["../../../src/nodes/Instagram/InstagramTrigger.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -129,7 +129,7 @@ export declare class InstagramApiError extends Error {
|
|
|
129
129
|
toJSON(): IInstagramError;
|
|
130
130
|
}
|
|
131
131
|
export declare class InstagramApiClient {
|
|
132
|
-
protected readonly baseUrl = "https://graph.facebook.com/
|
|
132
|
+
protected readonly baseUrl = "https://graph.facebook.com/v23.0";
|
|
133
133
|
protected readonly accessToken: string;
|
|
134
134
|
protected readonly accountId: string;
|
|
135
135
|
constructor(accessToken: string, accountId: string);
|
|
@@ -34,7 +34,7 @@ class InstagramApiError extends Error {
|
|
|
34
34
|
exports.InstagramApiError = InstagramApiError;
|
|
35
35
|
class InstagramApiClient {
|
|
36
36
|
constructor(accessToken, accountId) {
|
|
37
|
-
this.baseUrl = 'https://graph.facebook.com/
|
|
37
|
+
this.baseUrl = 'https://graph.facebook.com/v23.0';
|
|
38
38
|
this.accessToken = accessToken;
|
|
39
39
|
this.accountId = accountId;
|
|
40
40
|
}
|
|
@@ -100,7 +100,7 @@ async function getInstagramBusinessAccountId() {
|
|
|
100
100
|
try {
|
|
101
101
|
const directResponse = (await this.helpers.request({
|
|
102
102
|
method: 'GET',
|
|
103
|
-
url: 'https://graph.instagram.com/
|
|
103
|
+
url: 'https://graph.instagram.com/v23.0/me',
|
|
104
104
|
qs: {
|
|
105
105
|
fields: 'id,username',
|
|
106
106
|
access_token: accessToken,
|
|
@@ -117,7 +117,7 @@ async function getInstagramBusinessAccountId() {
|
|
|
117
117
|
// Get pages connected to the user via Facebook Graph API
|
|
118
118
|
const pagesResponse = (await this.helpers.request({
|
|
119
119
|
method: 'GET',
|
|
120
|
-
url: 'https://graph.facebook.com/
|
|
120
|
+
url: 'https://graph.facebook.com/v23.0/me/accounts',
|
|
121
121
|
qs: {
|
|
122
122
|
fields: 'instagram_business_account{id,username},id,name',
|
|
123
123
|
access_token: accessToken,
|
|
@@ -163,7 +163,7 @@ async function instagramApiRequest(method, endpoint, body = {}, qs = {}) {
|
|
|
163
163
|
access_token: accessToken,
|
|
164
164
|
},
|
|
165
165
|
// Use Facebook Graph API for Instagram Business accounts
|
|
166
|
-
url: `https://graph.facebook.com/
|
|
166
|
+
url: `https://graph.facebook.com/v23.0${endpoint}`,
|
|
167
167
|
json: true,
|
|
168
168
|
};
|
|
169
169
|
if (Object.keys(body).length === 0) {
|
|
@@ -146,5 +146,5 @@ class TokenManager {
|
|
|
146
146
|
exports.TokenManager = TokenManager;
|
|
147
147
|
TokenManager.REFRESH_THRESHOLD_DAYS = 7;
|
|
148
148
|
TokenManager.MIN_TOKEN_AGE_HOURS = 24;
|
|
149
|
-
TokenManager.GRAPH_API_VERSION = '
|
|
149
|
+
TokenManager.GRAPH_API_VERSION = 'v23.0';
|
|
150
150
|
//# sourceMappingURL=TokenManager.js.map
|