@proxyshard/shardx 0.1.10 → 0.1.11
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 +78 -17
- package/dist/index.d.ts +30 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -27
- package/dist/index.js.map +1 -1
- package/dist/profile.d.ts +11 -0
- package/dist/profile.d.ts.map +1 -1
- package/dist/profile.js +40 -0
- package/dist/profile.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ When launching as **root** or inside **Docker**, pass `--no-sandbox` and
|
|
|
37
37
|
`--disable-dev-shm-usage` via `extraArgs`:
|
|
38
38
|
|
|
39
39
|
```ts
|
|
40
|
-
await sdk.session({
|
|
40
|
+
await sdk.session(profile, { extraArgs: ["--no-sandbox", "--disable-dev-shm-usage"] });
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
## Quick start
|
|
@@ -50,9 +50,13 @@ const sdk = new ShardX();
|
|
|
50
50
|
// the first session/launch/listProfiles call (~170 MB once, etag-cached
|
|
51
51
|
// afterward). No separate install step.
|
|
52
52
|
|
|
53
|
+
// Create a persistent profile from a library template (or createProfile() for
|
|
54
|
+
// a random one). Library templates aren't launched directly — this freezes an
|
|
55
|
+
// enriched copy under a unique id you can return to. Do it once.
|
|
56
|
+
const profile = await sdk.createProfile("win-rtx4060");
|
|
57
|
+
|
|
53
58
|
// Launch + drive in one call. Returns the patchright Browser.
|
|
54
|
-
const { browser, session, close } = await sdk.session({
|
|
55
|
-
fingerprint: "win-rtx4060",
|
|
59
|
+
const { browser, session, close } = await sdk.session(profile, {
|
|
56
60
|
proxy: "socks5://user:pass@host:port",
|
|
57
61
|
});
|
|
58
62
|
try {
|
|
@@ -71,13 +75,14 @@ try {
|
|
|
71
75
|
}
|
|
72
76
|
```
|
|
73
77
|
|
|
74
|
-
### Random profile
|
|
78
|
+
### Random profile
|
|
75
79
|
|
|
76
80
|
```ts
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
});
|
|
81
|
+
// createProfile() with no id freezes a random library template (filter the
|
|
82
|
+
// pool with { platform: "Windows" }). It already randomises hw_concurrency /
|
|
83
|
+
// RAM / platform_version once, at creation.
|
|
84
|
+
const profile = await sdk.createProfile(undefined, { platform: "Windows" });
|
|
85
|
+
const { browser, close } = await sdk.session(profile);
|
|
81
86
|
try {
|
|
82
87
|
const page = await browser.contexts()[0].newPage();
|
|
83
88
|
// ...
|
|
@@ -110,6 +115,59 @@ console.log(await sdk.checkProxy("socks5://user:pass@host:port"));
|
|
|
110
115
|
// }
|
|
111
116
|
```
|
|
112
117
|
|
|
118
|
+
## Persistent profiles
|
|
119
|
+
|
|
120
|
+
`listProfiles()` / `randomProfile()` hand back **library templates** — launch
|
|
121
|
+
one and it re-reads the same template every time. For a profile you can
|
|
122
|
+
**return to** (same fingerprint *and* cookies/cache) or **delete**, create a
|
|
123
|
+
*saved profile*: it freezes a template (or a random one) with randomized
|
|
124
|
+
hardware/platform_version under a fresh unique id in its own folder
|
|
125
|
+
`<cache>/profiles/<id>/`, exactly like the desktop launcher's "create profile".
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
const sdk = new ShardX();
|
|
129
|
+
|
|
130
|
+
// Create once (random template, or pass a library id like "win-rtx4060").
|
|
131
|
+
const profile = await sdk.createProfile();
|
|
132
|
+
console.log(profile.id);
|
|
133
|
+
|
|
134
|
+
console.log(sdk.listSavedProfiles()); // ['<id>', ...]
|
|
135
|
+
|
|
136
|
+
// Launch it. randomize stays false → the frozen fingerprint is stable;
|
|
137
|
+
// cookies/cache persist in the profile's folder across runs.
|
|
138
|
+
const { browser, close } = await sdk.session(profile);
|
|
139
|
+
// ...
|
|
140
|
+
await close();
|
|
141
|
+
|
|
142
|
+
// Later — even a different process — reopen by id: same fingerprint + state.
|
|
143
|
+
const reopened = sdk.openProfile("<id>");
|
|
144
|
+
|
|
145
|
+
// Remove the profile and all its state when you're done.
|
|
146
|
+
sdk.deleteProfile("<id>");
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Saved profiles never touch the bundled S3 library: templates stay read-only in
|
|
150
|
+
`<cache>/fingerprints/*.json`, saved profiles live in `<cache>/profiles/<id>/`
|
|
151
|
+
(holding `profile.json` + the browser's user-data-dir).
|
|
152
|
+
|
|
153
|
+
## Anti-fingerprint noise
|
|
154
|
+
|
|
155
|
+
Per-vector noise (canvas / WebGL / audio / DOMRect / sensors / fonts) is **off
|
|
156
|
+
by default**. `setNoise(...)` is **declarative** — exactly the vectors you list
|
|
157
|
+
are enabled (with soft defaults), every other one is turned off:
|
|
158
|
+
|
|
159
|
+
```ts
|
|
160
|
+
profile.setNoise("canvas", "audio", "webgl"); // only these three on
|
|
161
|
+
profile.setNoise("canvas"); // audio + webgl now off again
|
|
162
|
+
profile.setNoise(); // all off
|
|
163
|
+
sdk.saveProfile(profile); // persist the choice
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Seeds are derived **per-profile** at launch — stable across runs, unique per
|
|
167
|
+
profile — so two profiles with the same vectors enabled still produce different
|
|
168
|
+
canvas/audio/WebGL fingerprints. Soft defaults: WebGL `intensity 0.0005`,
|
|
169
|
+
DOMRect `maxOffset 1`.
|
|
170
|
+
|
|
113
171
|
## Pre-launch checks
|
|
114
172
|
|
|
115
173
|
Every call to `sdk.session()` / `sdk.launch()` runs the same pre-spawn
|
|
@@ -144,7 +202,7 @@ pipeline the desktop launcher uses:
|
|
|
144
202
|
Default mode is picked from `navigator.platform`. Override per launch:
|
|
145
203
|
|
|
146
204
|
```ts
|
|
147
|
-
await sdk.session({
|
|
205
|
+
await sdk.session(profile, { screenMode: "profile" });
|
|
148
206
|
```
|
|
149
207
|
|
|
150
208
|
### Host-aware hardware randomisation
|
|
@@ -175,7 +233,7 @@ const profile = sdk.library
|
|
|
175
233
|
navigator: { language: "de-DE" },
|
|
176
234
|
});
|
|
177
235
|
|
|
178
|
-
const { browser, close } = await sdk.session(
|
|
236
|
+
const { browser, close } = await sdk.session(profile, { proxy: "socks5://..." });
|
|
179
237
|
```
|
|
180
238
|
|
|
181
239
|
### Use your own fingerprint JSON
|
|
@@ -184,14 +242,13 @@ const { browser, close } = await sdk.session({ fingerprint: profile, proxy: "soc
|
|
|
184
242
|
import { Profile } from "@proxyshard/shardx";
|
|
185
243
|
|
|
186
244
|
const profile = Profile.fromFile("/path/to/my-custom.json");
|
|
187
|
-
const { browser, close } = await sdk.session(
|
|
245
|
+
const { browser, close } = await sdk.session(profile);
|
|
188
246
|
```
|
|
189
247
|
|
|
190
248
|
### WebRTC policy
|
|
191
249
|
|
|
192
250
|
```ts
|
|
193
|
-
await sdk.session({
|
|
194
|
-
fingerprint: "win-rtx4060",
|
|
251
|
+
await sdk.session(profile, {
|
|
195
252
|
proxy: "socks5://...",
|
|
196
253
|
webrtc: "tcp_only", // "auto" (default) | "block" | "tcp_only"
|
|
197
254
|
webrtcPublicIp: "203.0.113.42", // advertised in ICE candidates
|
|
@@ -210,7 +267,8 @@ const sdk = new ShardX({
|
|
|
210
267
|
console.log(`${label}: ${pct}%`);
|
|
211
268
|
},
|
|
212
269
|
});
|
|
213
|
-
const
|
|
270
|
+
const profile = await sdk.createProfile("win-rtx4060");
|
|
271
|
+
const { browser, close } = await sdk.session(profile);
|
|
214
272
|
```
|
|
215
273
|
|
|
216
274
|
## Advanced: raw launch without patchright
|
|
@@ -220,7 +278,8 @@ If you'd rather drive the browser with a different CDP client (raw
|
|
|
220
278
|
WebSocket), skip `session()` and use `launch()` directly:
|
|
221
279
|
|
|
222
280
|
```ts
|
|
223
|
-
const
|
|
281
|
+
const profile = await sdk.createProfile("win-rtx4060");
|
|
282
|
+
const sess = await sdk.launch(profile, { proxy: "socks5://...", cdp: true });
|
|
224
283
|
console.log(sess.cdpUrl); // ws://127.0.0.1:54113/devtools/browser/...
|
|
225
284
|
// ... drive it yourself ...
|
|
226
285
|
await sess.stop();
|
|
@@ -239,8 +298,10 @@ with `cdpUrl`, `geo`, `proxyUdpMs`, `quicEnabled`, `webrtcMode`,
|
|
|
239
298
|
~/.cache/shardx-sdk/ (linux)
|
|
240
299
|
├── manifest.json ← etag cache
|
|
241
300
|
├── ShardX-Mac-arm64/ ← extracted engine
|
|
242
|
-
├── fingerprints/ ← 170 bundled .json
|
|
243
|
-
└── profiles/<
|
|
301
|
+
├── fingerprints/ ← 170 bundled .json templates (read-only)
|
|
302
|
+
└── profiles/<id>/ ← saved profile (createProfile) + its state
|
|
303
|
+
├── profile.json ← the frozen fingerprint config
|
|
304
|
+
└── … ← user-data-dir: cookies, IndexedDB, cache
|
|
244
305
|
```
|
|
245
306
|
|
|
246
307
|
Override:
|
package/dist/index.d.ts
CHANGED
|
@@ -12,10 +12,7 @@ export interface ShardXOptions {
|
|
|
12
12
|
* Defaults to `./shardx-profiles/` next to the running script. */
|
|
13
13
|
profilesDir?: string;
|
|
14
14
|
}
|
|
15
|
-
export type LaunchInput = string | Profile | Record<string, unknown>;
|
|
16
15
|
export interface ShardXLaunchOptions extends LaunchOptions {
|
|
17
|
-
/** When `fingerprint` is omitted, pick a random profile filtered by this platform substring. */
|
|
18
|
-
platform?: string;
|
|
19
16
|
/** When true, re-pick hardware_concurrency / device_memory / platform_version before launch. */
|
|
20
17
|
randomize?: boolean;
|
|
21
18
|
}
|
|
@@ -39,16 +36,37 @@ export declare class ShardX {
|
|
|
39
36
|
randomProfile(opts?: {
|
|
40
37
|
platform?: string;
|
|
41
38
|
}): Promise<Profile>;
|
|
39
|
+
/** Create a new persistent profile from a library template (or a random one
|
|
40
|
+
* when `template` is omitted), enriched with randomized hardware +
|
|
41
|
+
* platform_version under a fresh unique id, and frozen to disk. Launch it
|
|
42
|
+
* with `launch(profile, { randomize: false })`. */
|
|
43
|
+
createProfile(template?: string, opts?: {
|
|
44
|
+
platform?: string;
|
|
45
|
+
}): Promise<Profile>;
|
|
46
|
+
/** Persist a profile's current config to its on-disk folder. Call after
|
|
47
|
+
* mutating a reopened profile (e.g. `setNoise`) to keep changes. */
|
|
48
|
+
saveProfile(profile: Profile): void;
|
|
49
|
+
/** Reopen a previously created profile by id (same fingerprint + state). */
|
|
50
|
+
openProfile(id: string): Profile;
|
|
51
|
+
/** Ids of every saved profile, sorted. */
|
|
52
|
+
listSavedProfiles(): string[];
|
|
53
|
+
/** Delete a saved profile and all its state (cookies, cache, …). */
|
|
54
|
+
deleteProfile(id: string): void;
|
|
55
|
+
private profileJsonPath;
|
|
42
56
|
/**
|
|
43
|
-
* Launch a profile.
|
|
57
|
+
* Launch a profile. Get one from `createProfile()` (recommended — a
|
|
58
|
+
* persistent profile), `Profile.fromFile()`, or pass your own config object.
|
|
59
|
+
* Library templates aren't launched directly: go through `createProfile` so
|
|
60
|
+
* each run has a stable identity and the bundled fingerprint library stays
|
|
61
|
+
* untouched.
|
|
44
62
|
*
|
|
45
|
-
* @param
|
|
46
|
-
* @param opts.
|
|
47
|
-
*
|
|
48
|
-
*
|
|
63
|
+
* @param profile A `Profile` (or a raw config object).
|
|
64
|
+
* @param opts.randomize When true, re-roll hw_concurrency / device_memory /
|
|
65
|
+
* platform_version first. Leave it off for a saved profile or its frozen
|
|
66
|
+
* fingerprint will drift.
|
|
49
67
|
* All other options forwarded to `Browser.launch` (proxy, cdp, headless, webrtc, screenMode, …).
|
|
50
68
|
*/
|
|
51
|
-
launch(
|
|
69
|
+
launch(profile: Profile | Record<string, unknown>, opts?: ShardXLaunchOptions): Promise<BrowserSession>;
|
|
52
70
|
/**
|
|
53
71
|
* Launch a profile AND connect patchright in one call. Returns an
|
|
54
72
|
* object with the patchright `Browser`, the raw `BrowserSession`, and
|
|
@@ -58,7 +76,8 @@ export declare class ShardX {
|
|
|
58
76
|
* peer-dependency.
|
|
59
77
|
*
|
|
60
78
|
* @example
|
|
61
|
-
* const
|
|
79
|
+
* const profile = await sdk.createProfile("win-rtx4060");
|
|
80
|
+
* const { browser, close } = await sdk.session(profile, { proxy: "socks5://…" });
|
|
62
81
|
* try {
|
|
63
82
|
* const page = await browser.contexts()[0].newPage();
|
|
64
83
|
* await page.goto("https://example.com");
|
|
@@ -66,9 +85,7 @@ export declare class ShardX {
|
|
|
66
85
|
* await close();
|
|
67
86
|
* }
|
|
68
87
|
*/
|
|
69
|
-
session(opts?: ShardXLaunchOptions
|
|
70
|
-
fingerprint?: LaunchInput | null;
|
|
71
|
-
}): Promise<{
|
|
88
|
+
session(profile: Profile | Record<string, unknown>, opts?: ShardXLaunchOptions): Promise<{
|
|
72
89
|
browser: PatchrightBrowser;
|
|
73
90
|
session: BrowserSession;
|
|
74
91
|
close: () => Promise<void>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,OAAO,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// Top-level façade — bundles the runtime, fingerprint library, and
|
|
2
2
|
// browser launcher. Mirrors the Python `ShardX` class.
|
|
3
3
|
import { chromium } from "patchright";
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { randomUUID } from "node:crypto";
|
|
4
7
|
import { Runtime } from "./runtime.js";
|
|
5
8
|
import { FingerprintLibrary, Profile } from "./profile.js";
|
|
6
9
|
import { Browser } from "./browser.js";
|
|
@@ -30,38 +33,92 @@ export class ShardX {
|
|
|
30
33
|
}
|
|
31
34
|
return this.library.load(ids[Math.floor(Math.random() * ids.length)]);
|
|
32
35
|
}
|
|
36
|
+
// ---- persistent profiles ----
|
|
37
|
+
//
|
|
38
|
+
// A *saved profile* is a frozen, uniquely-id'd copy of a library template
|
|
39
|
+
// (or a random one) enriched with randomized hardware/platform_version — the
|
|
40
|
+
// same thing the desktop launcher does on "create profile". It lives in its
|
|
41
|
+
// own folder `<profilesRoot>/<id>/` together with its browser state, so you
|
|
42
|
+
// can reopen the exact same profile later or delete it.
|
|
43
|
+
/** Create a new persistent profile from a library template (or a random one
|
|
44
|
+
* when `template` is omitted), enriched with randomized hardware +
|
|
45
|
+
* platform_version under a fresh unique id, and frozen to disk. Launch it
|
|
46
|
+
* with `launch(profile, { randomize: false })`. */
|
|
47
|
+
async createProfile(template, opts = {}) {
|
|
48
|
+
await this.runtime.install();
|
|
49
|
+
const src = template == null
|
|
50
|
+
? await this.randomProfile({ platform: opts.platform })
|
|
51
|
+
: this.library.load(template);
|
|
52
|
+
const id = randomUUID().replace(/-/g, "");
|
|
53
|
+
const profile = new Profile(src.config, id); // ctor deep-clones
|
|
54
|
+
// Seed hardware by the new id so the pick is stable across reopens.
|
|
55
|
+
randomizeHardware(profile.config, id);
|
|
56
|
+
randomizePlatformVersion(profile.config);
|
|
57
|
+
this.saveProfile(profile);
|
|
58
|
+
return profile;
|
|
59
|
+
}
|
|
60
|
+
/** Persist a profile's current config to its on-disk folder. Call after
|
|
61
|
+
* mutating a reopened profile (e.g. `setNoise`) to keep changes. */
|
|
62
|
+
saveProfile(profile) {
|
|
63
|
+
mkdirSync(join(this.runtime.profilesRoot, profile.id), { recursive: true });
|
|
64
|
+
writeFileSync(this.profileJsonPath(profile.id), JSON.stringify(profile.config, null, 2));
|
|
65
|
+
}
|
|
66
|
+
/** Reopen a previously created profile by id (same fingerprint + state). */
|
|
67
|
+
openProfile(id) {
|
|
68
|
+
const path = this.profileJsonPath(id);
|
|
69
|
+
if (!existsSync(path))
|
|
70
|
+
throw new Error(`saved profile '${id}' not found`);
|
|
71
|
+
return new Profile(JSON.parse(readFileSync(path, "utf8")), id);
|
|
72
|
+
}
|
|
73
|
+
/** Ids of every saved profile, sorted. */
|
|
74
|
+
listSavedProfiles() {
|
|
75
|
+
const root = this.runtime.profilesRoot;
|
|
76
|
+
if (!existsSync(root))
|
|
77
|
+
return [];
|
|
78
|
+
return readdirSync(root, { withFileTypes: true })
|
|
79
|
+
.filter((e) => e.isDirectory() && existsSync(join(root, e.name, "profile.json")))
|
|
80
|
+
.map((e) => e.name)
|
|
81
|
+
.sort();
|
|
82
|
+
}
|
|
83
|
+
/** Delete a saved profile and all its state (cookies, cache, …). */
|
|
84
|
+
deleteProfile(id) {
|
|
85
|
+
const d = join(this.runtime.profilesRoot, id);
|
|
86
|
+
if (existsSync(d))
|
|
87
|
+
rmSync(d, { recursive: true, force: true });
|
|
88
|
+
}
|
|
89
|
+
profileJsonPath(id) {
|
|
90
|
+
return join(this.runtime.profilesRoot, id, "profile.json");
|
|
91
|
+
}
|
|
33
92
|
/**
|
|
34
|
-
* Launch a profile.
|
|
93
|
+
* Launch a profile. Get one from `createProfile()` (recommended — a
|
|
94
|
+
* persistent profile), `Profile.fromFile()`, or pass your own config object.
|
|
95
|
+
* Library templates aren't launched directly: go through `createProfile` so
|
|
96
|
+
* each run has a stable identity and the bundled fingerprint library stays
|
|
97
|
+
* untouched.
|
|
35
98
|
*
|
|
36
|
-
* @param
|
|
37
|
-
* @param opts.
|
|
38
|
-
*
|
|
39
|
-
*
|
|
99
|
+
* @param profile A `Profile` (or a raw config object).
|
|
100
|
+
* @param opts.randomize When true, re-roll hw_concurrency / device_memory /
|
|
101
|
+
* platform_version first. Leave it off for a saved profile or its frozen
|
|
102
|
+
* fingerprint will drift.
|
|
40
103
|
* All other options forwarded to `Browser.launch` (proxy, cdp, headless, webrtc, screenMode, …).
|
|
41
104
|
*/
|
|
42
|
-
async launch(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
profile = fingerprint;
|
|
53
|
-
}
|
|
54
|
-
else if (typeof fingerprint === "object") {
|
|
55
|
-
profile = new Profile(fingerprint);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
throw new TypeError(`fingerprint must be string | Profile | object | null; got ${typeof fingerprint}`);
|
|
105
|
+
async launch(profile, opts = {}) {
|
|
106
|
+
if (!(profile instanceof Profile)) {
|
|
107
|
+
if (profile && typeof profile === "object") {
|
|
108
|
+
profile = new Profile(profile);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
throw new TypeError("launch() takes a Profile (or config object). To launch a library " +
|
|
112
|
+
"template or a random one, call createProfile(...) first, then launch " +
|
|
113
|
+
"the returned profile.");
|
|
114
|
+
}
|
|
59
115
|
}
|
|
116
|
+
await this.runtime.install();
|
|
60
117
|
if (opts.randomize) {
|
|
61
118
|
randomizeHardware(profile.config, profile.id);
|
|
62
119
|
randomizePlatformVersion(profile.config);
|
|
63
120
|
}
|
|
64
|
-
const {
|
|
121
|
+
const { randomize: _r, ...launchOpts } = opts;
|
|
65
122
|
return this.browser.launch(profile, launchOpts);
|
|
66
123
|
}
|
|
67
124
|
/**
|
|
@@ -73,7 +130,8 @@ export class ShardX {
|
|
|
73
130
|
* peer-dependency.
|
|
74
131
|
*
|
|
75
132
|
* @example
|
|
76
|
-
* const
|
|
133
|
+
* const profile = await sdk.createProfile("win-rtx4060");
|
|
134
|
+
* const { browser, close } = await sdk.session(profile, { proxy: "socks5://…" });
|
|
77
135
|
* try {
|
|
78
136
|
* const page = await browser.contexts()[0].newPage();
|
|
79
137
|
* await page.goto("https://example.com");
|
|
@@ -81,9 +139,8 @@ export class ShardX {
|
|
|
81
139
|
* await close();
|
|
82
140
|
* }
|
|
83
141
|
*/
|
|
84
|
-
async session(opts = {}) {
|
|
85
|
-
const
|
|
86
|
-
const sess = await this.launch(fingerprint ?? null, { ...launchOpts, cdp: true });
|
|
142
|
+
async session(profile, opts = {}) {
|
|
143
|
+
const sess = await this.launch(profile, { ...opts, cdp: true });
|
|
87
144
|
if (!sess.cdpUrl) {
|
|
88
145
|
await sess.stop();
|
|
89
146
|
throw new Error("CDP endpoint unavailable — engine failed to expose remote-debugging port");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAqC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/profile.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Runtime } from "./runtime.js";
|
|
2
|
+
declare const NOISE_VECTORS: readonly ["canvas", "webgl", "audio", "client_rects", "sensors", "fonts"];
|
|
3
|
+
export type NoiseVector = (typeof NOISE_VECTORS)[number];
|
|
2
4
|
export declare class Profile {
|
|
3
5
|
readonly id: string;
|
|
4
6
|
config: Record<string, unknown>;
|
|
@@ -6,6 +8,14 @@ export declare class Profile {
|
|
|
6
8
|
static fromFile(path: string): Profile;
|
|
7
9
|
/** Shallow merge: object values are merged one level deep, scalars replaced. */
|
|
8
10
|
withOverride(overrides: Record<string, unknown>): Profile;
|
|
11
|
+
/** Enable exactly the named noise vectors (soft defaults) and disable the
|
|
12
|
+
* rest. Declarative — re-calling replaces the selection, so a dropped
|
|
13
|
+
* vector is turned off. Seeds are derived per-profile at launch.
|
|
14
|
+
*
|
|
15
|
+
* @example p.setNoise("canvas", "audio") // only these two on
|
|
16
|
+
* @example p.setNoise("canvas") // audio now off again
|
|
17
|
+
*/
|
|
18
|
+
setNoise(...vectors: NoiseVector[]): this;
|
|
9
19
|
get platform(): string;
|
|
10
20
|
get hasWebGPU(): boolean;
|
|
11
21
|
}
|
|
@@ -35,4 +45,5 @@ export declare function applyEngineVersion(config: Record<string, unknown>, chro
|
|
|
35
45
|
* script. Override per launch with `userDataDir` or per SDK with
|
|
36
46
|
* `new ShardX({ profilesDir })`. */
|
|
37
47
|
export declare function userDataDir(runtime: Runtime, profileId: string, base?: string): string;
|
|
48
|
+
export {};
|
|
38
49
|
//# sourceMappingURL=profile.d.ts.map
|
package/dist/profile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,qBAAa,OAAO;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM;IAKxD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMtC,gFAAgF;IAChF,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAazD,IAAI,QAAQ,IAAI,MAAM,CAGrB;IAED,IAAI,SAAS,IAAI,OAAO,CAKvB;CACF;AAED,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAE7C,GAAG,IAAI,MAAM,EAAE;IAOd,MAAM,CAAC,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,SAAS,CAAC,MAAM,CAAC;IAY5D,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;CAQrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,eAAe,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI,CA+BN;AAED;;;qCAGqC;AACrC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKtF"}
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,QAAA,MAAM,aAAa,2EAA4E,CAAC;AAChG,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAOzD,qBAAa,OAAO;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM;IAKxD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMtC,gFAAgF;IAChF,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAazD;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IA0BzC,IAAI,QAAQ,IAAI,MAAM,CAGrB;IAED,IAAI,SAAS,IAAI,OAAO,CAKvB;CACF;AAED,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAE7C,GAAG,IAAI,MAAM,EAAE;IAOd,MAAM,CAAC,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,SAAS,CAAC,MAAM,CAAC;IAY5D,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;CAQrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,eAAe,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI,CA+BN;AAED;;;qCAGqC;AACrC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKtF"}
|
package/dist/profile.js
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
// launch.
|
|
4
4
|
import { existsSync, mkdirSync, readdirSync, readFileSync } from "node:fs";
|
|
5
5
|
import { join } from "node:path";
|
|
6
|
+
const NOISE_VECTORS = ["canvas", "webgl", "audio", "client_rects", "sensors", "fonts"];
|
|
7
|
+
// vector -> [soft knob, value applied when the vector is enabled]
|
|
8
|
+
const NOISE_KNOB = {
|
|
9
|
+
webgl: ["intensity", 0.0005],
|
|
10
|
+
client_rects: ["max_offset", 1],
|
|
11
|
+
};
|
|
6
12
|
export class Profile {
|
|
7
13
|
id;
|
|
8
14
|
config;
|
|
@@ -29,6 +35,40 @@ export class Profile {
|
|
|
29
35
|
}
|
|
30
36
|
return new Profile(out, overrides["name"] ?? this.id);
|
|
31
37
|
}
|
|
38
|
+
/** Enable exactly the named noise vectors (soft defaults) and disable the
|
|
39
|
+
* rest. Declarative — re-calling replaces the selection, so a dropped
|
|
40
|
+
* vector is turned off. Seeds are derived per-profile at launch.
|
|
41
|
+
*
|
|
42
|
+
* @example p.setNoise("canvas", "audio") // only these two on
|
|
43
|
+
* @example p.setNoise("canvas") // audio now off again
|
|
44
|
+
*/
|
|
45
|
+
setNoise(...vectors) {
|
|
46
|
+
for (const v of vectors) {
|
|
47
|
+
if (!NOISE_VECTORS.includes(v)) {
|
|
48
|
+
throw new Error(`unknown noise vector: ${v} (valid: ${NOISE_VECTORS.join(", ")})`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const on = new Set(vectors);
|
|
52
|
+
let noise = this.config["noise"];
|
|
53
|
+
if (!noise || typeof noise !== "object") {
|
|
54
|
+
noise = {};
|
|
55
|
+
this.config["noise"] = noise;
|
|
56
|
+
}
|
|
57
|
+
for (const v of NOISE_VECTORS) {
|
|
58
|
+
let block = noise[v];
|
|
59
|
+
if (!block || typeof block !== "object") {
|
|
60
|
+
block = {};
|
|
61
|
+
noise[v] = block;
|
|
62
|
+
}
|
|
63
|
+
block["enabled"] = on.has(v);
|
|
64
|
+
if (block["seed"] === undefined)
|
|
65
|
+
block["seed"] = 0;
|
|
66
|
+
const knob = NOISE_KNOB[v];
|
|
67
|
+
if (on.has(v) && knob && block[knob[0]] === undefined)
|
|
68
|
+
block[knob[0]] = knob[1];
|
|
69
|
+
}
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
32
72
|
get platform() {
|
|
33
73
|
const nav = this.config["navigator"];
|
|
34
74
|
return nav?.["platform"] ?? "";
|
package/dist/profile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proxyshard/shardx",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "Self-contained Node SDK for the ShardX anti-detect browser — downloads the engine + Widevine + fingerprint library on first use, launches isolated profiles.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|