@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 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({ ..., extraArgs: ["--no-sandbox", "--disable-dev-shm-usage"] });
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 when none specified
78
+ ### Random profile
75
79
 
76
80
  ```ts
77
- const { browser, close } = await sdk.session({
78
- platform: "Windows",
79
- randomize: true, // re-rolls hw_concurrency / RAM / platform_version
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({ fingerprint: "win-rtx4060", screenMode: "profile" });
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({ fingerprint: profile, proxy: "socks5://..." });
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({ fingerprint: profile });
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 { browser, close } = await sdk.session({ fingerprint: "win-rtx4060" });
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 sess = await sdk.launch("win-rtx4060", { proxy: "socks5://...", cdp: true });
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 profiles
243
- └── profiles/<profile-id>/ ← per-launch user-data-dir
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 fingerprint Profile id, `Profile` instance, plain dict, or `null`/omitted to pick random.
46
- * @param opts.platform When picking random, filter by `navigator.platform` substring.
47
- * @param opts.randomize When true, freshly randomise hw_concurrency / device_memory / platform_version.
48
- * (Same logic the desktop launcher applies when re-picking a GPU.)
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(fingerprint?: LaunchInput | null, opts?: ShardXLaunchOptions): Promise<BrowserSession>;
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 { browser, close } = await sdk.session({ fingerprint: "win-rtx4060", proxy: "socks5://…" });
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>;
@@ -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;AAEzE,OAAO,EAAE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAW,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAGhF,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B;iDAC6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB;uEACmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErE,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gGAAgG;IAChG,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC;IACb,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,UAAU,CAAC;CACrC;AAED,qBAAa,MAAM;IACjB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,IAAI,GAAE,aAAkB;IAMpC;+DAC2D;IACrD,YAAY,CAAC,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKvE,4EAA4E;IACtE,aAAa,CAAC,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQvE;;;;;;;;OAQG;IACG,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC;IAsBvG;;;;;;;;;;;;;;;;OAgBG;IACG,OAAO,CAAC,IAAI,GAAE,mBAAmB,GAAG;QAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;KAAO,GAAG,OAAO,CAAC;QAC5F,OAAO,EAAE,iBAAiB,CAAC;QAC3B,OAAO,EAAE,cAAc,CAAC;QACxB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5B,CAAC;IAkBF;;;OAGG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAY9D;AAED,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9F,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,iBAAiB,EAAE,wBAAwB,EAC3C,cAAc,EAAE,SAAS,EACzB,uBAAuB,EAAE,yBAAyB,EAAE,uBAAuB,GAC5E,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,GAC7D,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,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 fingerprint Profile id, `Profile` instance, plain dict, or `null`/omitted to pick random.
37
- * @param opts.platform When picking random, filter by `navigator.platform` substring.
38
- * @param opts.randomize When true, freshly randomise hw_concurrency / device_memory / platform_version.
39
- * (Same logic the desktop launcher applies when re-picking a GPU.)
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(fingerprint, opts = {}) {
43
- await this.runtime.install();
44
- let profile;
45
- if (fingerprint == null) {
46
- profile = await this.randomProfile({ platform: opts.platform });
47
- }
48
- else if (typeof fingerprint === "string") {
49
- profile = this.library.load(fingerprint);
50
- }
51
- else if (fingerprint instanceof Profile) {
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 { platform: _p, randomize: _r, ...launchOpts } = opts;
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 { browser, close } = await sdk.session({ fingerprint: "win-rtx4060", proxy: "socks5://…" });
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 { fingerprint, ...launchOpts } = opts;
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":"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"}
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
@@ -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"] ?? "";
@@ -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.10",
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",