@trusty-squire/mcp 0.8.13 → 0.8.14-rc.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/bot/agent.d.ts +1 -0
- package/dist/bot/agent.d.ts.map +1 -1
- package/dist/bot/agent.js +1 -0
- package/dist/bot/agent.js.map +1 -1
- package/dist/bot/browser.d.ts +2 -0
- package/dist/bot/browser.d.ts.map +1 -1
- package/dist/bot/browser.js +75 -5
- package/dist/bot/browser.js.map +1 -1
- package/dist/skill-registry-client.d.ts +12 -3
- package/dist/skill-registry-client.d.ts.map +1 -1
- package/dist/skill-registry-client.js +12 -3
- package/dist/skill-registry-client.js.map +1 -1
- package/dist/tools/provision-any.d.ts +5 -0
- package/dist/tools/provision-any.d.ts.map +1 -1
- package/dist/tools/provision-any.js +54 -60
- package/dist/tools/provision-any.js.map +1 -1
- package/dist/tools/signup-telemetry.d.ts +33 -0
- package/dist/tools/signup-telemetry.d.ts.map +1 -0
- package/dist/tools/signup-telemetry.js +100 -0
- package/dist/tools/signup-telemetry.js.map +1 -0
- package/package.json +2 -1
package/dist/bot/browser.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AsnClass } from "./asn.js";
|
|
2
2
|
import type { OAuthProviderId } from "./oauth-providers.js";
|
|
3
|
+
export type StealthProfile = "baseline" | "cdp_hardened";
|
|
3
4
|
export interface BrowserAction {
|
|
4
5
|
type: "goto" | "click" | "type" | "screenshot" | "extract" | "wait";
|
|
5
6
|
selector?: string;
|
|
@@ -45,6 +46,7 @@ export declare class BrowserController {
|
|
|
45
46
|
constructor(opts?: BrowserControllerOptions);
|
|
46
47
|
get channel(): string | null;
|
|
47
48
|
get proxied(): string | null;
|
|
49
|
+
get stealthProfile(): StealthProfile;
|
|
48
50
|
start(): Promise<void>;
|
|
49
51
|
private probeEgressGeo;
|
|
50
52
|
private resolveProxy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/bot/browser.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/bot/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/browser.js
CHANGED
|
@@ -31,21 +31,64 @@ import { startXvfb, xvfbAvailable } from "./xvfb.js";
|
|
|
31
31
|
// the CJS modules lazily (the stealth toolchain only ships CJS) and treat
|
|
32
32
|
// stealth as best-effort — a missing dep should never crash the bot.
|
|
33
33
|
const require = createRequire(import.meta.url);
|
|
34
|
+
// Whether the operator asked for the CDP-hardened launcher
|
|
35
|
+
// (rebrowser-playwright-core, which closes the Runtime.enable leak that
|
|
36
|
+
// Turnstile / reCAPTCHA-v3 score on). Flag-gated so it can be A/B'd
|
|
37
|
+
// against the baseline launcher — see docs/DESIGN-antibot-hardening.md.
|
|
38
|
+
function cdpHardeningRequested() {
|
|
39
|
+
const v = process.env.BOT_CDP_HARDENED;
|
|
40
|
+
return v === "1" || v === "true" || v === "on";
|
|
41
|
+
}
|
|
34
42
|
let cachedChromium = null;
|
|
43
|
+
// The stealth profile the cached launcher actually represents. Set the
|
|
44
|
+
// first time getChromium() resolves a launcher and read back via
|
|
45
|
+
// BrowserController.stealthProfile for the CaptchaEvent A/B tag. A
|
|
46
|
+
// rebrowser load failure degrades it to "baseline" truthfully rather
|
|
47
|
+
// than over-claiming "cdp_hardened" on a run that never got the patch.
|
|
48
|
+
let activeStealthProfile = "baseline";
|
|
49
|
+
function activeStealthProfileValue() {
|
|
50
|
+
return activeStealthProfile;
|
|
51
|
+
}
|
|
35
52
|
function getChromium() {
|
|
36
53
|
if (cachedChromium !== null)
|
|
37
54
|
return cachedChromium;
|
|
55
|
+
const hardened = cdpHardeningRequested();
|
|
38
56
|
try {
|
|
39
|
-
const {
|
|
57
|
+
const { addExtra } = require("playwright-extra");
|
|
40
58
|
const stealth = require("puppeteer-extra-plugin-stealth");
|
|
59
|
+
let baseLauncher = baseChromium;
|
|
60
|
+
if (hardened) {
|
|
61
|
+
// rebrowser-playwright-core defers/isolates the Runtime.enable CDP
|
|
62
|
+
// call. alwaysIsolated runs every page.evaluate in an isolated
|
|
63
|
+
// world — the only mode that closes the mainWorldExecution tell
|
|
64
|
+
// (DESIGN-antibot-hardening.md D3). Set the fix mode BEFORE the
|
|
65
|
+
// require so the patch reads it; default it but honor an operator pin.
|
|
66
|
+
if (process.env.REBROWSER_PATCHES_RUNTIME_FIX_MODE === undefined) {
|
|
67
|
+
process.env.REBROWSER_PATCHES_RUNTIME_FIX_MODE = "alwaysIsolated";
|
|
68
|
+
}
|
|
69
|
+
const rebrowser = require("rebrowser-playwright-core");
|
|
70
|
+
baseLauncher = rebrowser.chromium;
|
|
71
|
+
activeStealthProfile = "cdp_hardened";
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
activeStealthProfile = "baseline";
|
|
75
|
+
}
|
|
76
|
+
// addExtra(baseChromium) is exactly what playwright-extra's default
|
|
77
|
+
// `chromium` export already is, so the baseline path is unchanged;
|
|
78
|
+
// the hardened path swaps in the rebrowser launcher underneath the
|
|
79
|
+
// same stealth wrap (Codex review: a bare import swap would NOT
|
|
80
|
+
// repoint the stealth-wrapped launcher — it must go through addExtra).
|
|
81
|
+
const extra = addExtra(baseLauncher);
|
|
41
82
|
extra.use(stealth());
|
|
42
83
|
cachedChromium = extra;
|
|
43
84
|
}
|
|
44
85
|
catch (err) {
|
|
45
|
-
// Fall back to vanilla playwright if stealth
|
|
46
|
-
// still works, it's just easier to
|
|
47
|
-
|
|
86
|
+
// Fall back to vanilla playwright if stealth (or the rebrowser fork)
|
|
87
|
+
// isn't installed. The bot still works, it's just easier to
|
|
88
|
+
// fingerprint as a bot — and the A/B tag stays truthfully "baseline".
|
|
89
|
+
console.warn(`[universal-bot] hardened launcher unavailable, falling back to vanilla chromium: ${err instanceof Error ? err.message : String(err)}`);
|
|
48
90
|
cachedChromium = baseChromium;
|
|
91
|
+
activeStealthProfile = "baseline";
|
|
49
92
|
}
|
|
50
93
|
return cachedChromium;
|
|
51
94
|
}
|
|
@@ -207,6 +250,17 @@ export class BrowserController {
|
|
|
207
250
|
}
|
|
208
251
|
return this.proxyServer;
|
|
209
252
|
}
|
|
253
|
+
// The stealth profile the most recent .start() launched under:
|
|
254
|
+
// "cdp_hardened" when the rebrowser launcher actually loaded
|
|
255
|
+
// (BOT_CDP_HARDENED set + fork present), else "baseline". Surfaced
|
|
256
|
+
// for the CaptchaEvent A/B tag. Throws before .start() — same reason
|
|
257
|
+
// as channel/proxied.
|
|
258
|
+
get stealthProfile() {
|
|
259
|
+
if (this.context === null) {
|
|
260
|
+
throw new Error("BrowserController.stealthProfile read before .start()");
|
|
261
|
+
}
|
|
262
|
+
return activeStealthProfileValue();
|
|
263
|
+
}
|
|
210
264
|
async start() {
|
|
211
265
|
const channel = await detectChromiumChannel();
|
|
212
266
|
this.launchedChannel = channel;
|
|
@@ -301,12 +355,28 @@ export class BrowserController {
|
|
|
301
355
|
// so the OAuth-first signup path reuses it instead of starting
|
|
302
356
|
// logged-out. launchPersistentContext takes launch + context
|
|
303
357
|
// options in one call.
|
|
304
|
-
|
|
358
|
+
// Resolve the launcher first so activeStealthProfile is set before we
|
|
359
|
+
// decide on executablePath below.
|
|
360
|
+
const launcher = getChromium();
|
|
361
|
+
// In hardened mode the rebrowser-core launcher expects its own
|
|
362
|
+
// bundled chromium revision, which we deliberately don't install (we
|
|
363
|
+
// keep playwright's). When no real channel was detected, point it at
|
|
364
|
+
// the installed playwright chromium — the spike proved the 1.52
|
|
365
|
+
// launcher drives a 1.59 chromium fine. With a channel detected, let
|
|
366
|
+
// it launch that real browser (channel + executablePath are mutually
|
|
367
|
+
// exclusive in Playwright).
|
|
368
|
+
const hardenedExecutablePath = activeStealthProfileValue() === "cdp_hardened" && channel === null
|
|
369
|
+
? baseChromium.executablePath()
|
|
370
|
+
: null;
|
|
371
|
+
const context = await launchWithProfileGate(this.profileDir, () => launcher.launchPersistentContext(this.profileDir, {
|
|
305
372
|
headless: chromeHeadless,
|
|
306
373
|
...(chromeEnv !== undefined ? { env: chromeEnv } : {}),
|
|
307
374
|
// `channel:` selects a real installed browser over the bundled
|
|
308
375
|
// binary; omitted entirely when null.
|
|
309
376
|
...(channel !== null ? { channel } : {}),
|
|
377
|
+
...(hardenedExecutablePath !== null
|
|
378
|
+
? { executablePath: hardenedExecutablePath }
|
|
379
|
+
: {}),
|
|
310
380
|
// `proxy:` routes egress through a residential proxy — only for
|
|
311
381
|
// datacenter-class egress (see resolveProxy()).
|
|
312
382
|
...(proxy !== null ? { proxy } : {}),
|