jumpy-lion 0.1.6-beta.21 → 0.1.6-beta.22

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 @@
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/session/save.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { SessionBundleUserDataDir } from './types.js';
2
+ /**
3
+ * Pack a Chrome user-data-dir into a base64-encoded gzipped tar suitable for
4
+ * inclusion inside a JSON session bundle. Returns null when the directory does
5
+ * not exist (caller's choice whether to treat that as fatal).
6
+ */
7
+ export declare function tarUserDataDir(dirPath: string): Promise<SessionBundleUserDataDir | null>;
8
+ /**
9
+ * Extract a previously captured user-data-dir blob into destPath. Caller is
10
+ * responsible for ensuring destPath is empty (or will be merged into).
11
+ */
12
+ export declare function untarUserDataDir(payload: SessionBundleUserDataDir, destPath: string): Promise<void>;
13
+ //# sourceMappingURL=tar-data-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tar-data-dir.d.ts","sourceRoot":"","sources":["../../src/session/tar-data-dir.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAmD3D;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAkC9F;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzG"}
@@ -0,0 +1,107 @@
1
+ import { Buffer } from 'buffer';
2
+ import { promises as fs } from 'fs';
3
+ import path from 'path';
4
+ import * as tar from 'tar';
5
+ /**
6
+ * Files / subpaths we never include in the bundled tar. These are either
7
+ * process-bound singletons (which break restore on a new Chrome instance) or
8
+ * regenerable caches whose absence costs nothing on restore.
9
+ */
10
+ const ALWAYS_SKIP_PATTERNS = [
11
+ /(^|\/)SingletonCookie$/,
12
+ /(^|\/)SingletonLock$/,
13
+ /(^|\/)SingletonSocket$/,
14
+ /(^|\/)LOCK$/,
15
+ /(^|\/)CrashpadMetrics-.*$/,
16
+ /(^|\/)Crashpad(\/|$)/,
17
+ /(^|\/)BrowserMetrics(\/|$)/,
18
+ /(^|\/)GrShaderCache(\/|$)/,
19
+ /(^|\/)ShaderCache(\/|$)/,
20
+ /(^|\/)GraphiteDawnCache(\/|$)/,
21
+ /(^|\/)GPUCache(\/|$)/,
22
+ /(^|\/)Code Cache(\/|$)/,
23
+ /(^|\/)component_crx_cache(\/|$)/,
24
+ /\.tmp$/,
25
+ ];
26
+ function shouldSkip(relPath) {
27
+ return ALWAYS_SKIP_PATTERNS.some((p) => (typeof p === 'string' ? relPath === p : p.test(relPath)));
28
+ }
29
+ async function countFiles(root) {
30
+ let count = 0;
31
+ async function walk(dir, rel) {
32
+ let entries;
33
+ try {
34
+ entries = await fs.readdir(dir, { withFileTypes: true });
35
+ }
36
+ catch {
37
+ return;
38
+ }
39
+ for (const e of entries) {
40
+ const childRel = rel ? `${rel}/${e.name}` : e.name;
41
+ if (shouldSkip(childRel))
42
+ continue;
43
+ if (e.isDirectory()) {
44
+ await walk(path.join(dir, e.name), childRel);
45
+ }
46
+ else if (e.isFile()) {
47
+ count++;
48
+ }
49
+ }
50
+ }
51
+ await walk(root, '');
52
+ return count;
53
+ }
54
+ /**
55
+ * Pack a Chrome user-data-dir into a base64-encoded gzipped tar suitable for
56
+ * inclusion inside a JSON session bundle. Returns null when the directory does
57
+ * not exist (caller's choice whether to treat that as fatal).
58
+ */
59
+ export async function tarUserDataDir(dirPath) {
60
+ try {
61
+ const st = await fs.stat(dirPath);
62
+ if (!st.isDirectory())
63
+ return null;
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ const capturedFiles = await countFiles(dirPath);
69
+ const chunks = [];
70
+ await new Promise((resolve, reject) => {
71
+ const stream = tar.create({
72
+ gzip: true,
73
+ cwd: dirPath,
74
+ portable: true,
75
+ follow: false,
76
+ filter: (p) => !shouldSkip(p.replace(/^\.?\//, '')),
77
+ }, ['.']);
78
+ stream.on('data', (chunk) => chunks.push(chunk));
79
+ stream.on('end', () => resolve());
80
+ stream.on('error', reject);
81
+ });
82
+ const buf = Buffer.concat(chunks);
83
+ return {
84
+ encoding: 'base64+gzip+tar',
85
+ bytes: buf.toString('base64'),
86
+ sizeBytes: buf.length,
87
+ capturedFiles,
88
+ };
89
+ }
90
+ /**
91
+ * Extract a previously captured user-data-dir blob into destPath. Caller is
92
+ * responsible for ensuring destPath is empty (or will be merged into).
93
+ */
94
+ export async function untarUserDataDir(payload, destPath) {
95
+ if (payload.encoding !== 'base64+gzip+tar') {
96
+ throw new Error(`Unsupported userDataDir encoding: ${payload.encoding}`);
97
+ }
98
+ await fs.mkdir(destPath, { recursive: true });
99
+ const buf = Buffer.from(payload.bytes, 'base64');
100
+ await new Promise((resolve, reject) => {
101
+ const extractor = tar.extract({ cwd: destPath, strip: 0 });
102
+ extractor.on('finish', () => resolve());
103
+ extractor.on('error', reject);
104
+ extractor.end(buf);
105
+ });
106
+ }
107
+ //# sourceMappingURL=tar-data-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tar-data-dir.js","sourceRoot":"","sources":["../../src/session/tar-data-dir.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { BrowserFingerprintWithHeaders } from 'fingerprint-generator';
2
+ import type { FingerprintConfigJson } from '../browser-process/anti-detect-config.js';
3
+ import type { ResolvedLocale } from '../fingerprinting/locale-resolver.js';
4
+ import type { Cookie } from '../page.js';
5
+ export declare const SCHEMA_VERSION: 1;
6
+ /**
7
+ * Snapshot of launch-time inputs that saveSession() needs to read off a CdpPage
8
+ * to assemble a bundle. Populated by CDPBrowserController before handing the
9
+ * page to user code, so saveSession is a pure call against the page surface.
10
+ */
11
+ export interface LaunchSnapshot {
12
+ fingerprintConfig?: FingerprintConfigJson;
13
+ fingerprintOptions?: Record<string, unknown>;
14
+ resolvedLocale?: ResolvedLocale;
15
+ fingerprint?: BrowserFingerprintWithHeaders;
16
+ userDataDir?: string;
17
+ proxyUrl?: string;
18
+ /** Set when the page was launched from a previously-saved bundle. */
19
+ sessionBundle?: SessionBundle;
20
+ }
21
+ /**
22
+ * Cookie shape as accepted by CDP `Network.setCookie`. Aliased to the Cookie
23
+ * already used across CdpPage so save/restore round-trips byte-for-byte.
24
+ */
25
+ export type SerializedCookie = Cookie;
26
+ /** Origin → key-value map for localStorage / sessionStorage. */
27
+ export type StorageMap = Record<string, Record<string, string>>;
28
+ export interface SessionBundleUserDataDir {
29
+ encoding: 'base64+gzip+tar';
30
+ bytes: string;
31
+ sizeBytes: number;
32
+ capturedFiles: number;
33
+ }
34
+ export interface SessionBundleBrowserProfile {
35
+ userAgent: string;
36
+ platform: string;
37
+ language: string;
38
+ screenWidth: number;
39
+ screenHeight: number;
40
+ devicePixelRatio: number;
41
+ webglRenderer: string;
42
+ webglVendor: string;
43
+ }
44
+ export interface SessionBundleFingerprintInput {
45
+ locale?: string;
46
+ languages?: string;
47
+ timezone?: string;
48
+ platform?: string;
49
+ seedKey?: string;
50
+ /** Pinned on restore so the captured fingerprintConfig is not regenerated. */
51
+ useNonApifyFingerprints: false;
52
+ /** Any other fingerprintOptions keys carried through verbatim. */
53
+ [key: string]: unknown;
54
+ }
55
+ export interface SessionBundleProxyMeta {
56
+ proxyUrl?: string;
57
+ sessionId?: string;
58
+ countryCode?: string;
59
+ }
60
+ export interface SessionBundle {
61
+ schemaVersion: typeof SCHEMA_VERSION;
62
+ createdAt: string;
63
+ createdBy?: {
64
+ package: 'cdp-crawler';
65
+ version: string;
66
+ };
67
+ cookies: SerializedCookie[];
68
+ localStorage: StorageMap;
69
+ sessionStorage: StorageMap;
70
+ userDataDir: SessionBundleUserDataDir | null;
71
+ fingerprintConfig: FingerprintConfigJson;
72
+ fingerprint: BrowserFingerprintWithHeaders;
73
+ fingerprintInput: SessionBundleFingerprintInput;
74
+ resolvedLocale: ResolvedLocale;
75
+ browserProfile: SessionBundleBrowserProfile;
76
+ proxyMeta?: SessionBundleProxyMeta;
77
+ }
78
+ /** Runtime guard so a hand-edited / partial bundle fails fast with a clear message. */
79
+ export declare function assertValidBundle(value: unknown): asserts value is SessionBundle;
80
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export const SCHEMA_VERSION = 1;
2
+ /** Runtime guard so a hand-edited / partial bundle fails fast with a clear message. */
3
+ export function assertValidBundle(value) {
4
+ if (!value || typeof value !== 'object') {
5
+ throw new Error('Invalid session bundle: expected an object');
6
+ }
7
+ const b = value;
8
+ if (b.schemaVersion !== SCHEMA_VERSION) {
9
+ throw new Error(`Unsupported session bundle schemaVersion: ${String(b.schemaVersion)} (expected ${SCHEMA_VERSION})`);
10
+ }
11
+ for (const key of ['cookies', 'localStorage', 'sessionStorage', 'fingerprintConfig', 'fingerprint', 'fingerprintInput', 'resolvedLocale', 'browserProfile']) {
12
+ if (b[key] === undefined || b[key] === null) {
13
+ throw new Error(`Invalid session bundle: missing required key "${key}"`);
14
+ }
15
+ }
16
+ if (!Array.isArray(b.cookies)) {
17
+ throw new Error('Invalid session bundle: "cookies" must be an array');
18
+ }
19
+ if (b.userDataDir !== null && typeof b.userDataDir !== 'object') {
20
+ throw new Error('Invalid session bundle: "userDataDir" must be an object or null');
21
+ }
22
+ if (b.userDataDir) {
23
+ const u = b.userDataDir;
24
+ if (u.encoding !== 'base64+gzip+tar' || typeof u.bytes !== 'string') {
25
+ throw new Error('Invalid session bundle: malformed userDataDir payload');
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAU,CAAC;AAoFzC,uFAAuF;AACvF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC5C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,aAAa,KAAK,cAAc,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACX,6CAA6C,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,cAAc,GAAG,CACtG,CAAC;IACN,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,CAAU,EAAE,CAAC;QACnK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,iDAAiD,GAAG,GAAG,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,CAAC,WAAsC,CAAC;QACnD,IAAI,CAAC,CAAC,QAAQ,KAAK,iBAAiB,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;AACL,CAAC"}