@chilfish/gallery-dl-instagram 0.2.0 → 0.2.2
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/dl-ins.mjs +843 -958
- package/dist/index.cjs +154 -2
- package/dist/index.d.cts +74 -63
- package/dist/index.d.mts +74 -63
- package/dist/index.mjs +153 -1
- package/dist/node.cjs +7 -9
- package/dist/node.d.cts +3 -3
- package/dist/node.d.mts +3 -3
- package/dist/node.mjs +7 -9
- package/dist/{sdk-nzhAxf1O.cjs → sdk-BClg0Kv2.cjs} +541 -519
- package/dist/{sdk-Bn0VCUIT.mjs → sdk-CovBsEps.mjs} +491 -517
- package/dist/{sdk-CK9x5wFL.d.mts → sdk-DyZz22bT.d.cts} +7 -4
- package/dist/{sdk-CK9x5wFL.d.cts → sdk-DyZz22bT.d.mts} +7 -4
- package/package.json +3 -10
- package/dist/adapter-CFsiiEpM.cjs +0 -83
- package/dist/adapter-tSleX8Cr.mjs +0 -59
|
@@ -197,8 +197,11 @@ declare abstract class Extractor {
|
|
|
197
197
|
//#endregion
|
|
198
198
|
//#region src/sdk.d.ts
|
|
199
199
|
interface SDKOptions {
|
|
200
|
-
/**
|
|
201
|
-
|
|
200
|
+
/**
|
|
201
|
+
* Custom HttpClient implementation.
|
|
202
|
+
* Defaults to a platform-agnostic fetch-based client when omitted.
|
|
203
|
+
*/
|
|
204
|
+
http?: HttpClient;
|
|
202
205
|
/**
|
|
203
206
|
* Custom Storage implementation for file output.
|
|
204
207
|
* Only needed if you plan to call ``download()``.
|
|
@@ -223,8 +226,8 @@ declare class InstagramSDK {
|
|
|
223
226
|
readonly log: Logger;
|
|
224
227
|
readonly config: ConfigManager;
|
|
225
228
|
private readonly _csrfToken;
|
|
226
|
-
constructor(opts
|
|
227
|
-
http
|
|
229
|
+
constructor(opts?: {
|
|
230
|
+
http?: HttpClient;
|
|
228
231
|
storage?: Storage;
|
|
229
232
|
log?: Logger;
|
|
230
233
|
csrfToken?: string;
|
|
@@ -197,8 +197,11 @@ declare abstract class Extractor {
|
|
|
197
197
|
//#endregion
|
|
198
198
|
//#region src/sdk.d.ts
|
|
199
199
|
interface SDKOptions {
|
|
200
|
-
/**
|
|
201
|
-
|
|
200
|
+
/**
|
|
201
|
+
* Custom HttpClient implementation.
|
|
202
|
+
* Defaults to a platform-agnostic fetch-based client when omitted.
|
|
203
|
+
*/
|
|
204
|
+
http?: HttpClient;
|
|
202
205
|
/**
|
|
203
206
|
* Custom Storage implementation for file output.
|
|
204
207
|
* Only needed if you plan to call ``download()``.
|
|
@@ -223,8 +226,8 @@ declare class InstagramSDK {
|
|
|
223
226
|
readonly log: Logger;
|
|
224
227
|
readonly config: ConfigManager;
|
|
225
228
|
private readonly _csrfToken;
|
|
226
|
-
constructor(opts
|
|
227
|
-
http
|
|
229
|
+
constructor(opts?: {
|
|
230
|
+
http?: HttpClient;
|
|
228
231
|
storage?: Storage;
|
|
229
232
|
log?: Logger;
|
|
230
233
|
csrfToken?: string;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chilfish/gallery-dl-instagram",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.2",
|
|
5
5
|
"description": "Instagram extraction pipeline — platform-agnostic SDK + CLI",
|
|
6
6
|
"license": "GPL-2.0-only",
|
|
7
7
|
"keywords": [
|
|
@@ -48,19 +48,12 @@
|
|
|
48
48
|
"test:unit": "vitest run tests/unit",
|
|
49
49
|
"test:integration": "vitest run tests/integration"
|
|
50
50
|
},
|
|
51
|
-
"peerDependencies": {
|
|
52
|
-
|
|
53
|
-
},
|
|
54
|
-
"peerDependenciesMeta": {
|
|
55
|
-
"axios": {
|
|
56
|
-
"optional": true
|
|
57
|
-
}
|
|
58
|
-
},
|
|
51
|
+
"peerDependencies": {},
|
|
52
|
+
"peerDependenciesMeta": {},
|
|
59
53
|
"dependencies": {},
|
|
60
54
|
"devDependencies": {
|
|
61
55
|
"@antfu/eslint-config": "^9.0.0",
|
|
62
56
|
"@types/node": "^25.9.1",
|
|
63
|
-
"axios": "^1.16.1",
|
|
64
57
|
"commander": "^15.0.0",
|
|
65
58
|
"dotenv": "^17.4.2",
|
|
66
59
|
"eslint": "^10.4.1",
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
//#region \0rolldown/runtime.js
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
-
key = keys[i];
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
-
get: ((k) => from[k]).bind(null, key),
|
|
13
|
-
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
-
value: mod,
|
|
20
|
-
enumerable: true
|
|
21
|
-
}) : target, mod));
|
|
22
|
-
//#endregion
|
|
23
|
-
let axios = require("axios");
|
|
24
|
-
axios = __toESM(axios, 1);
|
|
25
|
-
//#region src/cli/adapter.ts
|
|
26
|
-
/** NodeHttpClient — axios wrapper */
|
|
27
|
-
/**
|
|
28
|
-
* Extract csrftoken value from a Cookie header string.
|
|
29
|
-
*/
|
|
30
|
-
function extractCsrfFromCookies(cookies) {
|
|
31
|
-
return cookies.match(/(?:^|;\s*)csrftoken=([^;]+)/)?.[1] ?? "";
|
|
32
|
-
}
|
|
33
|
-
function createHttpClient(sessionId, fullCookies, logger) {
|
|
34
|
-
const instance = axios.default.create({
|
|
35
|
-
timeout: 3e4,
|
|
36
|
-
maxRedirects: 20,
|
|
37
|
-
validateStatus: () => true,
|
|
38
|
-
headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" }
|
|
39
|
-
});
|
|
40
|
-
const baseCookie = fullCookies || (sessionId ? `sessionid=${sessionId}` : null);
|
|
41
|
-
return { async request(config) {
|
|
42
|
-
const method = config.method ?? "GET";
|
|
43
|
-
logger?.debug(`${method} ${config.url}`);
|
|
44
|
-
const mergedHeaders = {};
|
|
45
|
-
if (baseCookie) mergedHeaders.Cookie = baseCookie;
|
|
46
|
-
if (config.headers) for (const [k, v] of Object.entries(config.headers)) if (k.toLowerCase() === "cookie" && mergedHeaders.Cookie) mergedHeaders.Cookie = `${mergedHeaders.Cookie}; ${v}`;
|
|
47
|
-
else mergedHeaders[k] = v;
|
|
48
|
-
if (mergedHeaders.Cookie) logger?.debug(` Cookie: ${mergedHeaders.Cookie.slice(0, 200)}`);
|
|
49
|
-
try {
|
|
50
|
-
const resp = await instance.request({
|
|
51
|
-
url: config.url,
|
|
52
|
-
method,
|
|
53
|
-
headers: mergedHeaders,
|
|
54
|
-
params: cleanupParams(config.params),
|
|
55
|
-
data: config.data,
|
|
56
|
-
signal: config.signal,
|
|
57
|
-
timeout: config.timeout,
|
|
58
|
-
responseType: config.responseType ?? "json"
|
|
59
|
-
});
|
|
60
|
-
const finalUrl = resp.request?.res?.responseUrl ?? config.url;
|
|
61
|
-
logger?.debug(` ← ${resp.status} ${resp.status >= 400 ? "⚠️" : ""} (${finalUrl.slice(0, 100)})`);
|
|
62
|
-
return {
|
|
63
|
-
status: resp.status,
|
|
64
|
-
data: resp.data,
|
|
65
|
-
headers: resp.headers,
|
|
66
|
-
url: finalUrl
|
|
67
|
-
};
|
|
68
|
-
} catch (err) {
|
|
69
|
-
const msg = String(err);
|
|
70
|
-
if (msg.includes("TOO_MANY_REDIRECTS") || msg.includes("too many redirects")) throw new Error("Too many redirects — sessionid may be expired or invalid. Export a fresh sessionid from your browser.");
|
|
71
|
-
throw err;
|
|
72
|
-
}
|
|
73
|
-
} };
|
|
74
|
-
}
|
|
75
|
-
function cleanupParams(params) {
|
|
76
|
-
if (!params) return void 0;
|
|
77
|
-
const cleaned = {};
|
|
78
|
-
for (const [k, v] of Object.entries(params)) if (v != null) cleaned[k] = String(v);
|
|
79
|
-
return cleaned;
|
|
80
|
-
}
|
|
81
|
-
//#endregion
|
|
82
|
-
exports.createHttpClient = createHttpClient;
|
|
83
|
-
exports.extractCsrfFromCookies = extractCsrfFromCookies;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
//#region src/cli/adapter.ts
|
|
3
|
-
/** NodeHttpClient — axios wrapper */
|
|
4
|
-
/**
|
|
5
|
-
* Extract csrftoken value from a Cookie header string.
|
|
6
|
-
*/
|
|
7
|
-
function extractCsrfFromCookies(cookies) {
|
|
8
|
-
return cookies.match(/(?:^|;\s*)csrftoken=([^;]+)/)?.[1] ?? "";
|
|
9
|
-
}
|
|
10
|
-
function createHttpClient(sessionId, fullCookies, logger) {
|
|
11
|
-
const instance = axios.create({
|
|
12
|
-
timeout: 3e4,
|
|
13
|
-
maxRedirects: 20,
|
|
14
|
-
validateStatus: () => true,
|
|
15
|
-
headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" }
|
|
16
|
-
});
|
|
17
|
-
const baseCookie = fullCookies || (sessionId ? `sessionid=${sessionId}` : null);
|
|
18
|
-
return { async request(config) {
|
|
19
|
-
const method = config.method ?? "GET";
|
|
20
|
-
logger?.debug(`${method} ${config.url}`);
|
|
21
|
-
const mergedHeaders = {};
|
|
22
|
-
if (baseCookie) mergedHeaders.Cookie = baseCookie;
|
|
23
|
-
if (config.headers) for (const [k, v] of Object.entries(config.headers)) if (k.toLowerCase() === "cookie" && mergedHeaders.Cookie) mergedHeaders.Cookie = `${mergedHeaders.Cookie}; ${v}`;
|
|
24
|
-
else mergedHeaders[k] = v;
|
|
25
|
-
if (mergedHeaders.Cookie) logger?.debug(` Cookie: ${mergedHeaders.Cookie.slice(0, 200)}`);
|
|
26
|
-
try {
|
|
27
|
-
const resp = await instance.request({
|
|
28
|
-
url: config.url,
|
|
29
|
-
method,
|
|
30
|
-
headers: mergedHeaders,
|
|
31
|
-
params: cleanupParams(config.params),
|
|
32
|
-
data: config.data,
|
|
33
|
-
signal: config.signal,
|
|
34
|
-
timeout: config.timeout,
|
|
35
|
-
responseType: config.responseType ?? "json"
|
|
36
|
-
});
|
|
37
|
-
const finalUrl = resp.request?.res?.responseUrl ?? config.url;
|
|
38
|
-
logger?.debug(` ← ${resp.status} ${resp.status >= 400 ? "⚠️" : ""} (${finalUrl.slice(0, 100)})`);
|
|
39
|
-
return {
|
|
40
|
-
status: resp.status,
|
|
41
|
-
data: resp.data,
|
|
42
|
-
headers: resp.headers,
|
|
43
|
-
url: finalUrl
|
|
44
|
-
};
|
|
45
|
-
} catch (err) {
|
|
46
|
-
const msg = String(err);
|
|
47
|
-
if (msg.includes("TOO_MANY_REDIRECTS") || msg.includes("too many redirects")) throw new Error("Too many redirects — sessionid may be expired or invalid. Export a fresh sessionid from your browser.");
|
|
48
|
-
throw err;
|
|
49
|
-
}
|
|
50
|
-
} };
|
|
51
|
-
}
|
|
52
|
-
function cleanupParams(params) {
|
|
53
|
-
if (!params) return void 0;
|
|
54
|
-
const cleaned = {};
|
|
55
|
-
for (const [k, v] of Object.entries(params)) if (v != null) cleaned[k] = String(v);
|
|
56
|
-
return cleaned;
|
|
57
|
-
}
|
|
58
|
-
//#endregion
|
|
59
|
-
export { createHttpClient, extractCsrfFromCookies };
|