@mattxcz/n8n-nodes-instagram-scraper 0.1.0 → 0.4.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 +26 -24
- package/dist/lib/client.d.ts +3 -3
- package/dist/lib/client.js +60 -42
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/types.d.ts +10 -1
- package/dist/nodes/Instagram.node.js +28 -2
- package/dist/nodes/Instagram.node.js.map +1 -1
- package/dist/nodes/InstagramCredentials.js +43 -4
- package/dist/nodes/InstagramCredentials.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,13 +7,31 @@ This is a fork of [n8n-nodes-instagram-private-api-wrapped](https://github.com/t
|
|
|
7
7
|
- Added **Post -> Get Info by URL**: paste any `instagram.com/p|reel|reels|tv/<shortcode>` URL and get back a flat, ready-to-use object (`title`, `description`, `thumbnail`, `likeCount`, `commentCount`, `viewCount`, `author`, `authorFullName`, `takenAt`, `mediaType`, `isVideo`).
|
|
8
8
|
- Shortcode -> media ID conversion is done locally (same algorithm Instagram itself uses), so unlike GraphQL-based scrapers this doesn't depend on Instagram's `doc_id`, which rotates every few weeks and breaks those scrapers.
|
|
9
9
|
- Removed operations unrelated to metadata scraping (posting, liking, follow/unfollow, direct messages) to keep the node small and the maintenance surface minimal.
|
|
10
|
-
-
|
|
10
|
+
- Automatic login + session caching: fill in Username/Password once in the credential and the node handles everything else — it logs in on first use, caches the resulting session in the workflow's static data, and reuses it on every later execution, only logging in again if that cached session ever expires or gets rejected.
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Authentication
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
### Recommended: Username + Password
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
1. Open the **Instagram API** credential and fill in **Username** and **Password**. Use a dedicated automation account if possible, not your main one.
|
|
17
|
+
2. That's it — the first time any operation runs, the node performs a real login (with the same pre/post-login flow simulation the official app does) and caches the resulting session automatically. Every later execution reuses that cached session; the node only logs in again if it ever gets rejected.
|
|
18
|
+
|
|
19
|
+
This is more trusted by Instagram than a browser cookie, because the device fingerprint behind the session was created by the same login that produced it, so there's no mismatch between "device" and session for Instagram's fraud detection to flag. It also means repeated real logins aren't happening on every single execution, which is itself a pattern Instagram watches for.
|
|
20
|
+
|
|
21
|
+
### Advanced fallback: browser cookies
|
|
22
|
+
|
|
23
|
+
If you'd rather not store a password, leave Username/Password empty and instead:
|
|
24
|
+
|
|
25
|
+
1. Log into instagram.com in your browser with the account you want to use.
|
|
26
|
+
2. Open DevTools -> Application/Storage -> Cookies -> `https://www.instagram.com`.
|
|
27
|
+
3. Copy the raw values of the `sessionid` and `csrftoken` cookies (keep the `%3A` parts in `sessionid` as-is, don't decode them).
|
|
28
|
+
4. Paste them into **Session ID (Advanced)** and **CSRF Token (Advanced)**.
|
|
29
|
+
|
|
30
|
+
This grafts a web-origin session cookie onto a freshly generated "device", which is exactly the kind of mismatch Instagram's fraud detection is tuned to catch — expect occasional `checkpoint_required` errors. If that happens, either complete the verification in the Instagram app, or switch to Username + Password instead.
|
|
31
|
+
|
|
32
|
+
There's also a **Session Data (Advanced)** field for pasting a manually generated session; if set, it takes priority over everything else.
|
|
33
|
+
|
|
34
|
+
**Security note:** treat all of these values (password, session cookies, session data) like they are the account's password — because they effectively are. Store credentials only in n8n's encrypted credential store, never commit them to git, and don't paste them anywhere else.
|
|
17
35
|
|
|
18
36
|
## Installation
|
|
19
37
|
|
|
@@ -30,24 +48,6 @@ npm run build
|
|
|
30
48
|
|
|
31
49
|
Copy the whole folder (or just `dist/`, `package.json`, `README.md`, `LICENSE`) into your n8n custom extensions directory (commonly `~/.n8n/custom/n8n-nodes-instagram-scraper`), then restart n8n.
|
|
32
50
|
|
|
33
|
-
## Getting session data
|
|
34
|
-
|
|
35
|
-
1. Log into instagram.com in your browser with the account you want to use for scraping.
|
|
36
|
-
2. Open DevTools -> Application/Storage -> Cookies -> `https://www.instagram.com`.
|
|
37
|
-
3. Copy the values of `sessionid` and `csrftoken`.
|
|
38
|
-
4. In the n8n credential, paste JSON in this shape:
|
|
39
|
-
|
|
40
|
-
```json
|
|
41
|
-
{
|
|
42
|
-
"cookies": [
|
|
43
|
-
{ "key": "sessionid", "value": "PASTE_HERE", "domain": ".instagram.com", "path": "/" },
|
|
44
|
-
{ "key": "csrftoken", "value": "PASTE_HERE", "domain": ".instagram.com", "path": "/" }
|
|
45
|
-
]
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
(Exact serialized shape depends on `instagram-private-api`'s `state.serialize()` format — if the node's built-in "Test" button on the credential fails, check the error message, the library is picky about the exact cookie object keys.)
|
|
50
|
-
|
|
51
51
|
## Usage
|
|
52
52
|
|
|
53
53
|
1. Add the **Instagram Scraper** node to your workflow.
|
|
@@ -60,8 +60,10 @@ Copy the whole folder (or just `dist/`, `package.json`, `README.md`, `LICENSE`)
|
|
|
60
60
|
Instagram can change its private API at any time without notice; this is an unofficial, reverse-engineered integration, not the official Graph API. If it stops working, check:
|
|
61
61
|
|
|
62
62
|
1. Whether `instagram-private-api` has a newer version that fixes it (`npm update instagram-private-api`).
|
|
63
|
-
2. Whether
|
|
64
|
-
3. Whether Instagram flagged the account (wait 24-48h, or use a different account).
|
|
63
|
+
2. Whether the cached session expired — with Username/Password set, the node re-logs in automatically; with the cookie fallback, copy fresh values from the browser.
|
|
64
|
+
3. Whether Instagram flagged the account with a `checkpoint_required` (wait 24-48h, complete any prompt in the app, or use a different account).
|
|
65
|
+
|
|
66
|
+
If you ever need to force a fresh login (e.g. after switching accounts), clear the workflow's static data by deactivating/reactivating the workflow, or simply change the Username in the credential.
|
|
65
67
|
|
|
66
68
|
## License
|
|
67
69
|
|
package/dist/lib/client.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { IInstagramCredentials, IInstagramUser, IInstagramTimelineFeed, IInstagramMediaInfo, IInstagramPostSummary } from './types';
|
|
1
|
+
import { IInstagramCredentials, IInstagramUser, IInstagramTimelineFeed, IInstagramMediaInfo, IInstagramPostSummary, IInstagramLoginResult } from './types';
|
|
2
2
|
export declare class InstagramClient {
|
|
3
3
|
private client;
|
|
4
4
|
private isAuthenticated;
|
|
5
5
|
constructor(credentials?: IInstagramCredentials);
|
|
6
|
-
|
|
7
|
-
authenticateWithRetry(credentials: IInstagramCredentials, maxRetries?: number): Promise<void>;
|
|
6
|
+
login(credentials: IInstagramCredentials): Promise<void>;
|
|
8
7
|
private ensureAuthenticated;
|
|
8
|
+
loginWithPassword(username: string, password: string): Promise<IInstagramLoginResult>;
|
|
9
9
|
getUserInfo(username: string): Promise<IInstagramUser>;
|
|
10
10
|
getTimelineFeed(maxId?: string): Promise<IInstagramTimelineFeed>;
|
|
11
11
|
getMediaInfo(mediaId: string): Promise<IInstagramMediaInfo>;
|
package/dist/lib/client.js
CHANGED
|
@@ -7,33 +7,44 @@ class InstagramClient {
|
|
|
7
7
|
constructor(credentials) {
|
|
8
8
|
this.isAuthenticated = false;
|
|
9
9
|
this.client = new instagram_private_api_1.IgApiClient();
|
|
10
|
-
if (credentials) {
|
|
11
|
-
this.client.state.
|
|
12
|
-
if (credentials.proxyUrl) {
|
|
13
|
-
this.client.state.proxyUrl = credentials.proxyUrl;
|
|
14
|
-
}
|
|
10
|
+
if (credentials === null || credentials === void 0 ? void 0 : credentials.proxyUrl) {
|
|
11
|
+
this.client.state.proxyUrl = credentials.proxyUrl;
|
|
15
12
|
}
|
|
16
13
|
}
|
|
17
|
-
async
|
|
14
|
+
async login(credentials) {
|
|
18
15
|
try {
|
|
19
16
|
if (credentials.proxyUrl) {
|
|
20
17
|
this.client.state.proxyUrl = credentials.proxyUrl;
|
|
21
18
|
}
|
|
22
|
-
if (
|
|
23
|
-
|
|
19
|
+
if (credentials.sessionData && credentials.sessionData.trim()) {
|
|
20
|
+
await this.loadSession(credentials.sessionData);
|
|
21
|
+
try {
|
|
22
|
+
await this.client.user.info(this.client.state.cookieUserId);
|
|
23
|
+
}
|
|
24
|
+
catch (verifyError) {
|
|
25
|
+
this.isAuthenticated = false;
|
|
26
|
+
throw new Error(`Session Data was rejected by Instagram: ${utils_1.Utils.formatError(verifyError)}`);
|
|
27
|
+
}
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (!credentials.sessionId || !credentials.csrfToken) {
|
|
31
|
+
throw new Error('Provide either Username + Password (recommended), Session Data, or both Session ID and CSRF Token.');
|
|
32
|
+
}
|
|
33
|
+
const userId = credentials.sessionId.split('%3A')[0];
|
|
34
|
+
if (!userId || !/^\d+$/.test(userId)) {
|
|
35
|
+
throw new Error('Could not read a numeric user ID from the start of the Session ID. Make sure you copied the full "sessionid" cookie value, including the %3A parts.');
|
|
24
36
|
}
|
|
37
|
+
this.client.state.generateDevice(userId);
|
|
38
|
+
const cookieUrl = 'https://i.instagram.com';
|
|
39
|
+
await this.client.state.cookieJar.setCookie(`sessionid=${credentials.sessionId}; Domain=.instagram.com; Path=/; Secure; HttpOnly`, cookieUrl);
|
|
40
|
+
await this.client.state.cookieJar.setCookie(`csrftoken=${credentials.csrfToken}; Domain=.instagram.com; Path=/; Secure`, cookieUrl);
|
|
41
|
+
await this.client.state.cookieJar.setCookie(`ds_user_id=${userId}; Domain=.instagram.com; Path=/; Secure`, cookieUrl);
|
|
25
42
|
try {
|
|
26
|
-
|
|
27
|
-
? JSON.parse(credentials.sessionData)
|
|
28
|
-
: credentials.sessionData;
|
|
29
|
-
await this.client.state.deserialize(sessionData);
|
|
30
|
-
const userInfo = await this.client.user.info(this.client.state.cookieUserId);
|
|
31
|
-
void userInfo;
|
|
43
|
+
await this.client.user.info(userId);
|
|
32
44
|
this.isAuthenticated = true;
|
|
33
|
-
return;
|
|
34
45
|
}
|
|
35
|
-
catch (
|
|
36
|
-
throw new Error(`
|
|
46
|
+
catch (verifyError) {
|
|
47
|
+
throw new Error(`Session ID / CSRF Token were rejected by Instagram: ${utils_1.Utils.formatError(verifyError)}`);
|
|
37
48
|
}
|
|
38
49
|
}
|
|
39
50
|
catch (error) {
|
|
@@ -41,13 +52,13 @@ class InstagramClient {
|
|
|
41
52
|
if (error instanceof Error) {
|
|
42
53
|
const errorMessage = error.message.toLowerCase();
|
|
43
54
|
if (errorMessage.includes('login_required') || errorMessage.includes('unauthorized')) {
|
|
44
|
-
throw new Error('Session expired or invalid.
|
|
55
|
+
throw new Error('Session expired or invalid. Copy fresh sessionid/csrftoken cookie values and update your credentials.');
|
|
45
56
|
}
|
|
46
57
|
else if (errorMessage.includes('challenge_required')) {
|
|
47
|
-
throw new Error('Instagram session requires verification. Log in through the app, complete any challenge, then
|
|
58
|
+
throw new Error('Instagram session requires verification. Log in through the app, complete any challenge, then copy fresh cookie values.');
|
|
48
59
|
}
|
|
49
60
|
else if (errorMessage.includes('checkpoint_required')) {
|
|
50
|
-
throw new Error('Instagram account requires verification. Complete it in the app, wait 24-48h, then
|
|
61
|
+
throw new Error('Instagram account requires verification. Complete it in the app, wait 24-48h, then copy fresh cookie values.');
|
|
51
62
|
}
|
|
52
63
|
else if (errorMessage.includes('429') || errorMessage.includes('too many requests')) {
|
|
53
64
|
throw new Error('Rate limited by Instagram. Wait a few hours and try again.');
|
|
@@ -57,33 +68,40 @@ class InstagramClient {
|
|
|
57
68
|
throw new Error('Authentication failed: Unknown error occurred.');
|
|
58
69
|
}
|
|
59
70
|
}
|
|
60
|
-
async authenticateWithRetry(credentials, maxRetries = 3) {
|
|
61
|
-
var _a;
|
|
62
|
-
let lastError = null;
|
|
63
|
-
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
64
|
-
try {
|
|
65
|
-
if (attempt > 1) {
|
|
66
|
-
const delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);
|
|
67
|
-
await utils_1.Utils.delay(delay);
|
|
68
|
-
}
|
|
69
|
-
await this.authenticate(credentials);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
lastError = error instanceof Error ? error : new Error('Unknown error');
|
|
74
|
-
if (lastError.message.includes('challenge_required') ||
|
|
75
|
-
lastError.message.includes('checkpoint_required')) {
|
|
76
|
-
throw lastError;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
throw new Error(`Authentication failed after ${maxRetries} attempts. Last error: ${(_a = lastError === null || lastError === void 0 ? void 0 : lastError.message) !== null && _a !== void 0 ? _a : 'Unknown error'}`);
|
|
81
|
-
}
|
|
82
71
|
ensureAuthenticated() {
|
|
83
72
|
if (!this.isAuthenticated) {
|
|
84
73
|
throw new Error('Client is not authenticated. Please call authenticate() first.');
|
|
85
74
|
}
|
|
86
75
|
}
|
|
76
|
+
async loginWithPassword(username, password) {
|
|
77
|
+
try {
|
|
78
|
+
this.client.state.generateDevice(username);
|
|
79
|
+
await this.client.simulate.preLoginFlow();
|
|
80
|
+
const loggedInUser = await this.client.account.login(username, password);
|
|
81
|
+
await this.client.simulate.postLoginFlow();
|
|
82
|
+
const sessionData = JSON.stringify(await this.client.state.serialize());
|
|
83
|
+
this.isAuthenticated = true;
|
|
84
|
+
return {
|
|
85
|
+
sessionData,
|
|
86
|
+
userId: loggedInUser.pk.toString(),
|
|
87
|
+
username: loggedInUser.username,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
this.isAuthenticated = false;
|
|
92
|
+
const message = utils_1.Utils.formatError(error).toLowerCase();
|
|
93
|
+
if (message.includes('two_factor') || message.includes('two-factor') || message.includes('checkpoint_challenge_required')) {
|
|
94
|
+
throw new Error('This account needs an extra verification step (2FA or a challenge) that this one-time login cannot complete automatically. Log in once through the Instagram app/browser to clear it, then either retry this operation or use the Session ID + CSRF Token fields instead.');
|
|
95
|
+
}
|
|
96
|
+
if (message.includes('challenge_required')) {
|
|
97
|
+
throw new Error('Instagram requires a verification challenge for this login. Open the Instagram app with this account, complete the challenge, then try again.');
|
|
98
|
+
}
|
|
99
|
+
if (message.includes('bad_password') || message.includes('incorrect')) {
|
|
100
|
+
throw new Error('Instagram rejected the username/password combination.');
|
|
101
|
+
}
|
|
102
|
+
throw new Error(`Login failed: ${utils_1.Utils.formatError(error)}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
87
105
|
async getUserInfo(username) {
|
|
88
106
|
this.ensureAuthenticated();
|
|
89
107
|
try {
|
package/dist/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
export interface IInstagramCredentials {
|
|
2
|
-
|
|
2
|
+
username?: string;
|
|
3
|
+
password?: string;
|
|
4
|
+
sessionId?: string;
|
|
5
|
+
csrfToken?: string;
|
|
6
|
+
sessionData?: string;
|
|
3
7
|
proxyUrl?: string;
|
|
4
8
|
}
|
|
9
|
+
export interface IInstagramLoginResult {
|
|
10
|
+
sessionData: string;
|
|
11
|
+
userId: string;
|
|
12
|
+
username: string;
|
|
13
|
+
}
|
|
5
14
|
export interface IInstagramUserInfo {
|
|
6
15
|
id: string;
|
|
7
16
|
username: string;
|
|
@@ -184,11 +184,37 @@ class Instagram {
|
|
|
184
184
|
const operation = this.getNodeParameter('operation', 0);
|
|
185
185
|
const credentials = (await this.getCredentials('instagramApi'));
|
|
186
186
|
const client = new client_1.InstagramClient(credentials);
|
|
187
|
+
const staticData = this.getWorkflowStaticData('global');
|
|
187
188
|
try {
|
|
188
|
-
|
|
189
|
+
if (credentials.sessionData && credentials.sessionData.trim()) {
|
|
190
|
+
await client.login(credentials);
|
|
191
|
+
}
|
|
192
|
+
else if (credentials.sessionId && credentials.csrfToken) {
|
|
193
|
+
await client.login(credentials);
|
|
194
|
+
}
|
|
195
|
+
else if (credentials.username && credentials.password) {
|
|
196
|
+
let usedCache = false;
|
|
197
|
+
if (staticData.instagramSessionData &&
|
|
198
|
+
staticData.instagramSessionUsername === credentials.username) {
|
|
199
|
+
try {
|
|
200
|
+
await client.login({ ...credentials, sessionData: staticData.instagramSessionData });
|
|
201
|
+
usedCache = true;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (!usedCache) {
|
|
207
|
+
const loginResult = await client.loginWithPassword(credentials.username, credentials.password);
|
|
208
|
+
staticData.instagramSessionData = loginResult.sessionData;
|
|
209
|
+
staticData.instagramSessionUsername = credentials.username;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
throw new Error('Provide Username + Password (recommended), or Session ID + CSRF Token, or Session Data in the Instagram API credential.');
|
|
214
|
+
}
|
|
189
215
|
}
|
|
190
216
|
catch (error) {
|
|
191
|
-
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Instagram authentication failed: ${error instanceof Error ? error.message : 'Unknown error'}
|
|
217
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Instagram authentication failed: ${error instanceof Error ? error.message : 'Unknown error'}`, { itemIndex: 0 });
|
|
192
218
|
}
|
|
193
219
|
for (let i = 0; i < items.length; i++) {
|
|
194
220
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instagram.node.js","sourceRoot":"","sources":["../../src/nodes/Instagram.node.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Instagram.node.js","sourceRoot":"","sources":["../../src/nodes/Instagram.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,16 +8,55 @@ class InstagramCredentials {
|
|
|
8
8
|
this.documentationUrl = 'https://github.com/MattXcz/n8n-nodes-instagram-scraper';
|
|
9
9
|
this.properties = [
|
|
10
10
|
{
|
|
11
|
-
displayName: '
|
|
11
|
+
displayName: 'Username',
|
|
12
|
+
name: 'username',
|
|
13
|
+
type: 'string',
|
|
14
|
+
default: '',
|
|
15
|
+
description: 'Instagram username (without @). Fill this in together with Password and everything else is automatic: the node logs in once, caches the resulting session, and only logs in again if that cached session ever expires or gets rejected. Use a dedicated automation account if possible, not your main one.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
displayName: 'Password',
|
|
19
|
+
name: 'password',
|
|
20
|
+
type: 'string',
|
|
21
|
+
typeOptions: {
|
|
22
|
+
password: true,
|
|
23
|
+
},
|
|
24
|
+
default: '',
|
|
25
|
+
description: 'Instagram password, used only to log in (and re-login if the cached session expires). Leave Username/Password empty if you prefer one of the advanced options below instead.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
displayName: 'Session ID (Advanced)',
|
|
29
|
+
name: 'sessionId',
|
|
30
|
+
type: 'string',
|
|
31
|
+
typeOptions: {
|
|
32
|
+
password: true,
|
|
33
|
+
},
|
|
34
|
+
default: '',
|
|
35
|
+
description: 'Alternative to Username/Password: value of the "sessionid" cookie from a browser logged into Instagram (DevTools -> Application -> Cookies -> instagram.com). Paste it exactly as shown, including any %3A characters. More prone to triggering Instagram security checkpoints than a real login.',
|
|
36
|
+
placeholder: '9704031%3ANJkCFvYd4AQyia%3A21%3A...',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
displayName: 'CSRF Token (Advanced)',
|
|
40
|
+
name: 'csrfToken',
|
|
41
|
+
type: 'string',
|
|
42
|
+
typeOptions: {
|
|
43
|
+
password: true,
|
|
44
|
+
},
|
|
45
|
+
default: '',
|
|
46
|
+
description: 'Used together with Session ID above. Value of the "csrftoken" cookie from the same browser session.',
|
|
47
|
+
placeholder: 'a1b2c3d4e5f6...',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
displayName: 'Session Data (Advanced)',
|
|
12
51
|
name: 'sessionData',
|
|
13
52
|
type: 'string',
|
|
14
53
|
typeOptions: {
|
|
15
54
|
password: true,
|
|
55
|
+
rows: 3,
|
|
16
56
|
},
|
|
17
57
|
default: '',
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
placeholder: '{"cookies":[...],"sessionId":"..."}',
|
|
58
|
+
description: 'Manually paste a previously generated session (only needed if you want to bypass automatic login/caching entirely). Takes priority over all fields above if set.',
|
|
59
|
+
placeholder: '{"cookies":"...","deviceString":"...", ...}',
|
|
21
60
|
},
|
|
22
61
|
{
|
|
23
62
|
displayName: 'Proxy URL',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstagramCredentials.js","sourceRoot":"","sources":["../../src/nodes/InstagramCredentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,oBAAoB;IAAjC;QACC,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GAAG,eAAe,CAAC;QAC9B,qBAAgB,GAAG,wDAAwD,CAAC;QAC5E,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"InstagramCredentials.js","sourceRoot":"","sources":["../../src/nodes/InstagramCredentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,oBAAoB;IAAjC;QACC,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GAAG,eAAe,CAAC;QAC9B,qBAAgB,GAAG,wDAAwD,CAAC;QAC5E,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EACV,4SAA4S;aAC7S;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,8KAA8K;aAC3L;YACD;gBACC,WAAW,EAAE,uBAAuB;gBACpC,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,WAAW,EACV,mSAAmS;gBACpS,WAAW,EAAE,qCAAqC;aAClD;YACD;gBACC,WAAW,EAAE,uBAAuB;gBACpC,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,qGAAqG;gBAClH,WAAW,EAAE,iBAAiB;aAC9B;YACD;gBACC,WAAW,EAAE,yBAAyB;gBACtC,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;oBACd,IAAI,EAAE,CAAC;iBACP;gBACD,OAAO,EAAE,EAAE;gBACX,WAAW,EACV,kKAAkK;gBACnK,WAAW,EAAE,6CAA6C;aAC1D;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,sCAAsC;gBACnD,WAAW,EAAE,+BAA+B;aAC5C;SACD,CAAC;QASF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;IAdA,KAAK,CAAC,YAAY,CACjB,WAA2C,EAC3C,cAAmC;QAEnC,OAAO,cAAc,CAAC;IACvB,CAAC;CASD;AAnFD,oDAmFC"}
|