sentienceapi 0.90.1
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/LICENSE.md +43 -0
- package/README.md +946 -0
- package/dist/actions.d.ts +54 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +349 -0
- package/dist/actions.js.map +1 -0
- package/dist/agent.d.ts +157 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +437 -0
- package/dist/agent.js.map +1 -0
- package/dist/browser.d.ts +46 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +622 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -0
- package/dist/cli.js.map +1 -0
- package/dist/conversational-agent.d.ts +123 -0
- package/dist/conversational-agent.d.ts.map +1 -0
- package/dist/conversational-agent.js +327 -0
- package/dist/conversational-agent.js.map +1 -0
- package/dist/expect.d.ts +16 -0
- package/dist/expect.d.ts.map +1 -0
- package/dist/expect.js +66 -0
- package/dist/expect.js.map +1 -0
- package/dist/generator.d.ts +16 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +205 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/inspector.d.ts +13 -0
- package/dist/inspector.d.ts.map +1 -0
- package/dist/inspector.js +147 -0
- package/dist/inspector.js.map +1 -0
- package/dist/llm-provider.d.ts +60 -0
- package/dist/llm-provider.d.ts.map +1 -0
- package/dist/llm-provider.js +106 -0
- package/dist/llm-provider.js.map +1 -0
- package/dist/query.d.ts +8 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +337 -0
- package/dist/query.js.map +1 -0
- package/dist/read.d.ts +40 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +86 -0
- package/dist/read.js.map +1 -0
- package/dist/recorder.d.ts +44 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +256 -0
- package/dist/recorder.js.map +1 -0
- package/dist/screenshot.d.ts +17 -0
- package/dist/screenshot.d.ts.map +1 -0
- package/dist/screenshot.js +37 -0
- package/dist/screenshot.js.map +1 -0
- package/dist/snapshot.d.ts +23 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +187 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/tracing/cloud-sink.d.ts +74 -0
- package/dist/tracing/cloud-sink.d.ts.map +1 -0
- package/dist/tracing/cloud-sink.js +262 -0
- package/dist/tracing/cloud-sink.js.map +1 -0
- package/dist/tracing/index.d.ts +12 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +28 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/jsonl-sink.d.ts +41 -0
- package/dist/tracing/jsonl-sink.d.ts.map +1 -0
- package/dist/tracing/jsonl-sink.js +168 -0
- package/dist/tracing/jsonl-sink.js.map +1 -0
- package/dist/tracing/sink.d.ts +24 -0
- package/dist/tracing/sink.d.ts.map +1 -0
- package/dist/tracing/sink.js +15 -0
- package/dist/tracing/sink.js.map +1 -0
- package/dist/tracing/tracer-factory.d.ts +57 -0
- package/dist/tracing/tracer-factory.d.ts.map +1 -0
- package/dist/tracing/tracer-factory.js +274 -0
- package/dist/tracing/tracer-factory.js.map +1 -0
- package/dist/tracing/tracer.d.ts +74 -0
- package/dist/tracing/tracer.d.ts.map +1 -0
- package/dist/tracing/tracer.js +131 -0
- package/dist/tracing/tracer.js.map +1 -0
- package/dist/tracing/types.d.ts +63 -0
- package/dist/tracing/types.d.ts.map +1 -0
- package/dist/tracing/types.js +8 -0
- package/dist/tracing/types.js.map +1 -0
- package/dist/types.d.ts +110 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +29 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +74 -0
- package/dist/utils.js.map +1 -0
- package/dist/wait.d.ts +20 -0
- package/dist/wait.d.ts.map +1 -0
- package/dist/wait.js +63 -0
- package/dist/wait.js.map +1 -0
- package/package.json +72 -0
- package/spec/README.md +72 -0
- package/spec/SNAPSHOT_V1.md +208 -0
- package/spec/sdk-types.md +259 -0
- package/spec/snapshot.schema.json +148 -0
package/dist/browser.js
ADDED
|
@@ -0,0 +1,622 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Playwright browser harness with extension loading
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.SentienceBrowser = void 0;
|
|
40
|
+
const playwright_1 = require("playwright");
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const url_1 = require("url");
|
|
45
|
+
class SentienceBrowser {
|
|
46
|
+
constructor(apiKey, apiUrl, headless, proxy, userDataDir, storageState) {
|
|
47
|
+
this.context = null;
|
|
48
|
+
this.browser = null;
|
|
49
|
+
this.page = null;
|
|
50
|
+
this.extensionPath = null;
|
|
51
|
+
this.userDataDir = null;
|
|
52
|
+
this._apiKey = apiKey;
|
|
53
|
+
// Determine headless mode
|
|
54
|
+
if (headless === undefined) {
|
|
55
|
+
// Default to true in CI, false locally
|
|
56
|
+
const ci = process.env.CI?.toLowerCase();
|
|
57
|
+
this.headless = ci === 'true' || ci === '1' || ci === 'yes';
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this.headless = headless;
|
|
61
|
+
}
|
|
62
|
+
// Configure API URL
|
|
63
|
+
if (apiKey) {
|
|
64
|
+
this._apiUrl = apiUrl || 'https://api.sentienceapi.com';
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this._apiUrl = undefined;
|
|
68
|
+
}
|
|
69
|
+
// Support proxy from parameter or environment variable
|
|
70
|
+
this._proxy = proxy || process.env.SENTIENCE_PROXY;
|
|
71
|
+
// Auth injection support
|
|
72
|
+
this._userDataDir = userDataDir;
|
|
73
|
+
this._storageState = storageState;
|
|
74
|
+
}
|
|
75
|
+
async start() {
|
|
76
|
+
// 1. Resolve Extension Path
|
|
77
|
+
// Handle: src/extension (local dev), dist/extension (prod), or ../sentience-chrome (monorepo)
|
|
78
|
+
let extensionSource = '';
|
|
79
|
+
const candidates = [
|
|
80
|
+
// Production / Installed Package
|
|
81
|
+
path.resolve(__dirname, '../extension'),
|
|
82
|
+
path.resolve(__dirname, 'extension'),
|
|
83
|
+
// Local Monorepo Dev
|
|
84
|
+
path.resolve(__dirname, '../../sentience-chrome'),
|
|
85
|
+
path.resolve(__dirname, '../../../sentience-chrome'),
|
|
86
|
+
// CI Artifact
|
|
87
|
+
path.resolve(process.cwd(), 'extension')
|
|
88
|
+
];
|
|
89
|
+
for (const loc of candidates) {
|
|
90
|
+
if (fs.existsSync(path.join(loc, 'manifest.json'))) {
|
|
91
|
+
extensionSource = loc;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!extensionSource) {
|
|
96
|
+
throw new Error(`Sentience extension not found. Checked:\n${candidates.map(c => `- ${c}`).join('\n')}\n` +
|
|
97
|
+
'Ensure the extension is built/downloaded.');
|
|
98
|
+
}
|
|
99
|
+
// 2. Setup User Data Directory
|
|
100
|
+
if (this._userDataDir) {
|
|
101
|
+
// Use provided directory for persistent sessions
|
|
102
|
+
this.userDataDir = this._userDataDir;
|
|
103
|
+
if (!fs.existsSync(this.userDataDir)) {
|
|
104
|
+
fs.mkdirSync(this.userDataDir, { recursive: true });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Create temp directory (ephemeral, existing behavior)
|
|
109
|
+
this.userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sentience-ts-'));
|
|
110
|
+
}
|
|
111
|
+
this.extensionPath = path.join(this.userDataDir, 'extension');
|
|
112
|
+
// Copy extension to temp dir
|
|
113
|
+
this._copyRecursive(extensionSource, this.extensionPath);
|
|
114
|
+
// 3. Build Args
|
|
115
|
+
const args = [
|
|
116
|
+
`--disable-extensions-except=${this.extensionPath}`,
|
|
117
|
+
`--load-extension=${this.extensionPath}`,
|
|
118
|
+
'--disable-blink-features=AutomationControlled',
|
|
119
|
+
'--no-sandbox',
|
|
120
|
+
'--disable-infobars',
|
|
121
|
+
];
|
|
122
|
+
// CRITICAL: Headless Extensions Support
|
|
123
|
+
// headless: true -> NO extensions.
|
|
124
|
+
// headless: false + args: '--headless=new' -> YES extensions.
|
|
125
|
+
if (this.headless) {
|
|
126
|
+
args.push('--headless=new');
|
|
127
|
+
}
|
|
128
|
+
// CRITICAL: WebRTC leak protection for datacenter usage with proxies
|
|
129
|
+
// Prevents WebRTC from leaking the real IP address even when using proxies
|
|
130
|
+
if (this._proxy) {
|
|
131
|
+
args.push('--disable-features=WebRtcHideLocalIpsWithMdns');
|
|
132
|
+
args.push('--force-webrtc-ip-handling-policy=disable_non_proxied_udp');
|
|
133
|
+
}
|
|
134
|
+
// 4. Parse proxy configuration
|
|
135
|
+
const proxyConfig = this.parseProxy(this._proxy);
|
|
136
|
+
// 5. Launch Browser
|
|
137
|
+
this.context = await playwright_1.chromium.launchPersistentContext(this.userDataDir, {
|
|
138
|
+
headless: false, // Must be false here, handled via args above
|
|
139
|
+
args: args,
|
|
140
|
+
viewport: { width: 1920, height: 1080 },
|
|
141
|
+
// Clean User-Agent to avoid "HeadlessChrome" detection
|
|
142
|
+
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
|
|
143
|
+
proxy: proxyConfig, // Pass proxy configuration
|
|
144
|
+
// CRITICAL: Ignore HTTPS errors when using proxy (proxies often use self-signed certs)
|
|
145
|
+
ignoreHTTPSErrors: proxyConfig !== undefined
|
|
146
|
+
});
|
|
147
|
+
this.page = this.context.pages()[0] || await this.context.newPage();
|
|
148
|
+
// Inject storage state if provided (must be after context creation)
|
|
149
|
+
if (this._storageState) {
|
|
150
|
+
await this.injectStorageState(this._storageState);
|
|
151
|
+
}
|
|
152
|
+
// Apply context-level stealth patches (runs on every new page)
|
|
153
|
+
await this.context.addInitScript(() => {
|
|
154
|
+
// Early webdriver hiding - runs before any page script
|
|
155
|
+
// Use multiple strategies to completely hide webdriver
|
|
156
|
+
// Strategy 1: Try to delete it first
|
|
157
|
+
try {
|
|
158
|
+
delete navigator.webdriver;
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
// Property might not be deletable
|
|
162
|
+
}
|
|
163
|
+
// Strategy 2: Redefine to return undefined and hide from enumeration
|
|
164
|
+
Object.defineProperty(navigator, 'webdriver', {
|
|
165
|
+
get: () => undefined,
|
|
166
|
+
configurable: true,
|
|
167
|
+
enumerable: false,
|
|
168
|
+
writable: false
|
|
169
|
+
});
|
|
170
|
+
// Strategy 3: Override 'in' operator check
|
|
171
|
+
const originalHasOwnProperty = Object.prototype.hasOwnProperty;
|
|
172
|
+
Object.prototype.hasOwnProperty = function (prop) {
|
|
173
|
+
if (this === navigator && (prop === 'webdriver' || prop === 'Webdriver')) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
return originalHasOwnProperty.call(this, prop);
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
// 5. Apply Comprehensive Stealth Patches
|
|
180
|
+
// Use both CDP (earlier) and addInitScript (backup) for maximum coverage
|
|
181
|
+
// Strategy A: Use CDP to inject at the earliest possible moment
|
|
182
|
+
const client = await this.page.context().newCDPSession(this.page);
|
|
183
|
+
await client.send('Page.addScriptToEvaluateOnNewDocument', {
|
|
184
|
+
source: `
|
|
185
|
+
// Aggressive webdriver hiding - must run before ANY page script
|
|
186
|
+
Object.defineProperty(navigator, 'webdriver', {
|
|
187
|
+
get: () => undefined,
|
|
188
|
+
configurable: true,
|
|
189
|
+
enumerable: false
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
// Override Object.getOwnPropertyDescriptor
|
|
193
|
+
const originalGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
194
|
+
Object.getOwnPropertyDescriptor = function(obj, prop) {
|
|
195
|
+
if (obj === navigator && (prop === 'webdriver' || prop === 'Webdriver')) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
return originalGetOwnPropertyDescriptor(obj, prop);
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
// Override Object.keys
|
|
202
|
+
const originalKeys = Object.keys;
|
|
203
|
+
Object.keys = function(obj) {
|
|
204
|
+
const keys = originalKeys(obj);
|
|
205
|
+
if (obj === navigator) {
|
|
206
|
+
return keys.filter(k => k !== 'webdriver' && k !== 'Webdriver');
|
|
207
|
+
}
|
|
208
|
+
return keys;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
// Override Object.getOwnPropertyNames
|
|
212
|
+
const originalGetOwnPropertyNames = Object.getOwnPropertyNames;
|
|
213
|
+
Object.getOwnPropertyNames = function(obj) {
|
|
214
|
+
const names = originalGetOwnPropertyNames(obj);
|
|
215
|
+
if (obj === navigator) {
|
|
216
|
+
return names.filter(n => n !== 'webdriver' && n !== 'Webdriver');
|
|
217
|
+
}
|
|
218
|
+
return names;
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// Override 'in' operator check
|
|
222
|
+
const originalHasOwnProperty = Object.prototype.hasOwnProperty;
|
|
223
|
+
Object.prototype.hasOwnProperty = function(prop) {
|
|
224
|
+
if (this === navigator && (prop === 'webdriver' || prop === 'Webdriver')) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
return originalHasOwnProperty.call(this, prop);
|
|
228
|
+
};
|
|
229
|
+
`
|
|
230
|
+
});
|
|
231
|
+
// Strategy B: Also use addInitScript as backup (runs after CDP but before page scripts)
|
|
232
|
+
await this.page.addInitScript(() => {
|
|
233
|
+
// 1. Hide navigator.webdriver (comprehensive approach for advanced detection)
|
|
234
|
+
// Advanced detection checks for property descriptor, so we need multiple strategies
|
|
235
|
+
try {
|
|
236
|
+
// Strategy 1: Try to delete the property
|
|
237
|
+
delete navigator.webdriver;
|
|
238
|
+
}
|
|
239
|
+
catch (e) {
|
|
240
|
+
// Property might not be deletable, continue with redefine
|
|
241
|
+
}
|
|
242
|
+
// Strategy 2: Redefine to return undefined (better than false)
|
|
243
|
+
// Also set enumerable: false to hide from Object.keys() checks
|
|
244
|
+
Object.defineProperty(navigator, 'webdriver', {
|
|
245
|
+
get: () => undefined,
|
|
246
|
+
configurable: true,
|
|
247
|
+
enumerable: false
|
|
248
|
+
});
|
|
249
|
+
// Strategy 3: Override Object.getOwnPropertyDescriptor only for navigator.webdriver
|
|
250
|
+
// This prevents advanced detection that checks the property descriptor
|
|
251
|
+
const originalGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
252
|
+
Object.getOwnPropertyDescriptor = function (obj, prop) {
|
|
253
|
+
if (obj === navigator && (prop === 'webdriver' || prop === 'Webdriver')) {
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
return originalGetOwnPropertyDescriptor(obj, prop);
|
|
257
|
+
};
|
|
258
|
+
// Strategy 4: Hide from Object.keys() and Object.getOwnPropertyNames()
|
|
259
|
+
const originalKeys = Object.keys;
|
|
260
|
+
Object.keys = function (obj) {
|
|
261
|
+
const keys = originalKeys(obj);
|
|
262
|
+
if (obj === navigator) {
|
|
263
|
+
return keys.filter(k => k !== 'webdriver' && k !== 'Webdriver');
|
|
264
|
+
}
|
|
265
|
+
return keys;
|
|
266
|
+
};
|
|
267
|
+
// Strategy 5: Hide from Object.getOwnPropertyNames()
|
|
268
|
+
const originalGetOwnPropertyNames = Object.getOwnPropertyNames;
|
|
269
|
+
Object.getOwnPropertyNames = function (obj) {
|
|
270
|
+
const names = originalGetOwnPropertyNames(obj);
|
|
271
|
+
if (obj === navigator) {
|
|
272
|
+
return names.filter(n => n !== 'webdriver' && n !== 'Webdriver');
|
|
273
|
+
}
|
|
274
|
+
return names;
|
|
275
|
+
};
|
|
276
|
+
// Strategy 6: Override hasOwnProperty to hide from 'in' operator checks
|
|
277
|
+
const originalHasOwnProperty = Object.prototype.hasOwnProperty;
|
|
278
|
+
Object.prototype.hasOwnProperty = function (prop) {
|
|
279
|
+
if (this === navigator && (prop === 'webdriver' || prop === 'Webdriver')) {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
return originalHasOwnProperty.call(this, prop);
|
|
283
|
+
};
|
|
284
|
+
// 2. Inject window.chrome object (required for Chrome detection)
|
|
285
|
+
if (typeof window.chrome === 'undefined') {
|
|
286
|
+
window.chrome = {
|
|
287
|
+
runtime: {},
|
|
288
|
+
loadTimes: function () { },
|
|
289
|
+
csi: function () { },
|
|
290
|
+
app: {}
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
// 3. Patch navigator.plugins (should have length > 0)
|
|
294
|
+
// Only patch if plugins array is empty (headless mode issue)
|
|
295
|
+
const originalPlugins = navigator.plugins;
|
|
296
|
+
if (originalPlugins.length === 0) {
|
|
297
|
+
// Create a PluginArray-like object with minimal plugins
|
|
298
|
+
const fakePlugins = [
|
|
299
|
+
{
|
|
300
|
+
name: 'Chrome PDF Plugin',
|
|
301
|
+
filename: 'internal-pdf-viewer',
|
|
302
|
+
description: 'Portable Document Format',
|
|
303
|
+
length: 1,
|
|
304
|
+
item: function () { return null; },
|
|
305
|
+
namedItem: function () { return null; }
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
name: 'Chrome PDF Viewer',
|
|
309
|
+
filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai',
|
|
310
|
+
description: '',
|
|
311
|
+
length: 0,
|
|
312
|
+
item: function () { return null; },
|
|
313
|
+
namedItem: function () { return null; }
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: 'Native Client',
|
|
317
|
+
filename: 'internal-nacl-plugin',
|
|
318
|
+
description: '',
|
|
319
|
+
length: 0,
|
|
320
|
+
item: function () { return null; },
|
|
321
|
+
namedItem: function () { return null; }
|
|
322
|
+
}
|
|
323
|
+
];
|
|
324
|
+
// Create PluginArray-like object (array-like but not a real array)
|
|
325
|
+
// This needs to behave like the real PluginArray for detection to pass
|
|
326
|
+
const pluginArray = {};
|
|
327
|
+
fakePlugins.forEach((plugin, index) => {
|
|
328
|
+
Object.defineProperty(pluginArray, index.toString(), {
|
|
329
|
+
value: plugin,
|
|
330
|
+
enumerable: true,
|
|
331
|
+
configurable: true
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
Object.defineProperty(pluginArray, 'length', {
|
|
335
|
+
value: fakePlugins.length,
|
|
336
|
+
enumerable: false,
|
|
337
|
+
configurable: false
|
|
338
|
+
});
|
|
339
|
+
pluginArray.item = function (index) {
|
|
340
|
+
return this[index] || null;
|
|
341
|
+
};
|
|
342
|
+
pluginArray.namedItem = function (name) {
|
|
343
|
+
for (let i = 0; i < this.length; i++) {
|
|
344
|
+
if (this[i] && this[i].name === name)
|
|
345
|
+
return this[i];
|
|
346
|
+
}
|
|
347
|
+
return null;
|
|
348
|
+
};
|
|
349
|
+
// Make it iterable (for for...of loops)
|
|
350
|
+
pluginArray[Symbol.iterator] = function* () {
|
|
351
|
+
for (let i = 0; i < this.length; i++) {
|
|
352
|
+
yield this[i];
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
// Make it array-like for Array.from() and spread
|
|
356
|
+
Object.setPrototypeOf(pluginArray, Object.create(null));
|
|
357
|
+
Object.defineProperty(navigator, 'plugins', {
|
|
358
|
+
get: () => pluginArray,
|
|
359
|
+
configurable: true,
|
|
360
|
+
enumerable: true
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
// 4. Ensure navigator.languages exists and has values
|
|
364
|
+
if (!navigator.languages || navigator.languages.length === 0) {
|
|
365
|
+
Object.defineProperty(navigator, 'languages', {
|
|
366
|
+
get: () => ['en-US', 'en'],
|
|
367
|
+
configurable: true
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
// 5. Patch permissions API (should exist)
|
|
371
|
+
if (!navigator.permissions) {
|
|
372
|
+
navigator.permissions = {
|
|
373
|
+
query: async (parameters) => {
|
|
374
|
+
return { state: 'granted', onchange: null };
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
// Inject API Key if present
|
|
380
|
+
if (this._apiKey) {
|
|
381
|
+
await this.page.addInitScript((key) => {
|
|
382
|
+
window.__SENTIENCE_API_KEY__ = key;
|
|
383
|
+
}, this._apiKey);
|
|
384
|
+
}
|
|
385
|
+
// Wait for extension background pages to spin up
|
|
386
|
+
await new Promise(r => setTimeout(r, 500));
|
|
387
|
+
}
|
|
388
|
+
async goto(url) {
|
|
389
|
+
const page = this.getPage();
|
|
390
|
+
await page.goto(url, { waitUntil: 'domcontentloaded' });
|
|
391
|
+
if (!(await this.waitForExtension(15000))) {
|
|
392
|
+
// Gather Debug Info
|
|
393
|
+
const diag = await page.evaluate(() => ({
|
|
394
|
+
sentience_global: typeof window.sentience !== 'undefined',
|
|
395
|
+
wasm_ready: window.sentience && window.sentience._wasmModule !== null,
|
|
396
|
+
ext_id: document.documentElement.dataset.sentienceExtensionId || 'not set',
|
|
397
|
+
url: window.location.href
|
|
398
|
+
})).catch(e => ({ error: String(e) }));
|
|
399
|
+
throw new Error('Extension failed to load after navigation.\n' +
|
|
400
|
+
`Path: ${this.extensionPath}\n` +
|
|
401
|
+
`Diagnostics: ${JSON.stringify(diag, null, 2)}`);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
async waitForExtension(timeoutMs) {
|
|
405
|
+
const start = Date.now();
|
|
406
|
+
while (Date.now() - start < timeoutMs) {
|
|
407
|
+
try {
|
|
408
|
+
const ready = await this.page.evaluate(() => {
|
|
409
|
+
// Check for API AND Wasm Module (set by injected_api.js)
|
|
410
|
+
const s = window.sentience;
|
|
411
|
+
return s && s._wasmModule !== null; // Strict check for null (it's initialized as null)
|
|
412
|
+
});
|
|
413
|
+
if (ready)
|
|
414
|
+
return true;
|
|
415
|
+
}
|
|
416
|
+
catch (e) {
|
|
417
|
+
// Context invalid errors expected during navigation
|
|
418
|
+
}
|
|
419
|
+
await new Promise(r => setTimeout(r, 100));
|
|
420
|
+
}
|
|
421
|
+
return false;
|
|
422
|
+
}
|
|
423
|
+
getPage() {
|
|
424
|
+
if (!this.page) {
|
|
425
|
+
throw new Error('Browser not started. Call start() first.');
|
|
426
|
+
}
|
|
427
|
+
return this.page;
|
|
428
|
+
}
|
|
429
|
+
// Helper for recursive copy (fs.cp is Node 16.7+)
|
|
430
|
+
_copyRecursive(src, dest) {
|
|
431
|
+
if (fs.statSync(src).isDirectory()) {
|
|
432
|
+
if (!fs.existsSync(dest))
|
|
433
|
+
fs.mkdirSync(dest);
|
|
434
|
+
fs.readdirSync(src).forEach(child => {
|
|
435
|
+
this._copyRecursive(path.join(src, child), path.join(dest, child));
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
fs.copyFileSync(src, dest);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
// Expose API configuration (read-only)
|
|
443
|
+
getApiKey() {
|
|
444
|
+
return this._apiKey;
|
|
445
|
+
}
|
|
446
|
+
getApiUrl() {
|
|
447
|
+
return this._apiUrl;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Parse proxy connection string into Playwright format.
|
|
451
|
+
*
|
|
452
|
+
* @param proxyString - Standard format "http://username:password@host:port"
|
|
453
|
+
* or "socks5://user:pass@host:port"
|
|
454
|
+
* @returns Playwright proxy object or undefined if invalid
|
|
455
|
+
*/
|
|
456
|
+
parseProxy(proxyString) {
|
|
457
|
+
if (!proxyString) {
|
|
458
|
+
return undefined;
|
|
459
|
+
}
|
|
460
|
+
try {
|
|
461
|
+
const parsed = new url_1.URL(proxyString);
|
|
462
|
+
// Validate scheme
|
|
463
|
+
const validSchemes = ['http:', 'https:', 'socks5:'];
|
|
464
|
+
if (!validSchemes.includes(parsed.protocol)) {
|
|
465
|
+
throw new Error(`Unsupported proxy scheme: ${parsed.protocol}`);
|
|
466
|
+
}
|
|
467
|
+
// Validate host and port
|
|
468
|
+
if (!parsed.hostname || !parsed.port) {
|
|
469
|
+
throw new Error('Proxy URL must include hostname and port');
|
|
470
|
+
}
|
|
471
|
+
// Build Playwright proxy object
|
|
472
|
+
const proxyConfig = {
|
|
473
|
+
server: `${parsed.protocol}//${parsed.hostname}:${parsed.port}`
|
|
474
|
+
};
|
|
475
|
+
// Add credentials if present
|
|
476
|
+
if (parsed.username && parsed.password) {
|
|
477
|
+
proxyConfig.username = parsed.username;
|
|
478
|
+
proxyConfig.password = parsed.password;
|
|
479
|
+
}
|
|
480
|
+
return proxyConfig;
|
|
481
|
+
}
|
|
482
|
+
catch (e) {
|
|
483
|
+
console.warn(`⚠️ [Sentience] Invalid proxy configuration: ${e.message}`);
|
|
484
|
+
console.warn(' Expected format: http://username:password@host:port');
|
|
485
|
+
return undefined;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Inject storage state (cookies + localStorage) into browser context.
|
|
490
|
+
*
|
|
491
|
+
* @param storageState - Path to JSON file, StorageState object, or plain object
|
|
492
|
+
*/
|
|
493
|
+
async injectStorageState(storageState) {
|
|
494
|
+
// Load storage state
|
|
495
|
+
let state;
|
|
496
|
+
if (typeof storageState === 'string') {
|
|
497
|
+
// Load from file
|
|
498
|
+
const content = fs.readFileSync(storageState, 'utf-8');
|
|
499
|
+
state = JSON.parse(content);
|
|
500
|
+
}
|
|
501
|
+
else if (typeof storageState === 'object' && storageState !== null) {
|
|
502
|
+
// Already an object (StorageState or plain object)
|
|
503
|
+
state = storageState;
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
throw new Error(`Invalid storageState type: ${typeof storageState}. ` +
|
|
507
|
+
'Expected string (file path), StorageState, or object.');
|
|
508
|
+
}
|
|
509
|
+
// Inject cookies (works globally)
|
|
510
|
+
if (state.cookies && Array.isArray(state.cookies) && state.cookies.length > 0) {
|
|
511
|
+
// Convert to Playwright cookie format
|
|
512
|
+
const playwrightCookies = state.cookies.map(cookie => {
|
|
513
|
+
const playwrightCookie = {
|
|
514
|
+
name: cookie.name,
|
|
515
|
+
value: cookie.value,
|
|
516
|
+
domain: cookie.domain,
|
|
517
|
+
path: cookie.path || '/',
|
|
518
|
+
};
|
|
519
|
+
if (cookie.expires !== undefined) {
|
|
520
|
+
playwrightCookie.expires = cookie.expires;
|
|
521
|
+
}
|
|
522
|
+
if (cookie.httpOnly !== undefined) {
|
|
523
|
+
playwrightCookie.httpOnly = cookie.httpOnly;
|
|
524
|
+
}
|
|
525
|
+
if (cookie.secure !== undefined) {
|
|
526
|
+
playwrightCookie.secure = cookie.secure;
|
|
527
|
+
}
|
|
528
|
+
if (cookie.sameSite !== undefined) {
|
|
529
|
+
playwrightCookie.sameSite = cookie.sameSite;
|
|
530
|
+
}
|
|
531
|
+
return playwrightCookie;
|
|
532
|
+
});
|
|
533
|
+
await this.context.addCookies(playwrightCookies);
|
|
534
|
+
console.log(`✅ [Sentience] Injected ${state.cookies.length} cookie(s)`);
|
|
535
|
+
}
|
|
536
|
+
// Inject LocalStorage (requires navigation to each domain)
|
|
537
|
+
if (state.origins && Array.isArray(state.origins)) {
|
|
538
|
+
for (const originData of state.origins) {
|
|
539
|
+
const origin = originData.origin;
|
|
540
|
+
if (!origin) {
|
|
541
|
+
continue;
|
|
542
|
+
}
|
|
543
|
+
try {
|
|
544
|
+
// Navigate to origin
|
|
545
|
+
await this.page.goto(origin, { waitUntil: 'domcontentloaded', timeout: 10000 });
|
|
546
|
+
// Inject localStorage
|
|
547
|
+
if (originData.localStorage && Array.isArray(originData.localStorage)) {
|
|
548
|
+
// Convert to dict format for JavaScript
|
|
549
|
+
const localStorageDict = {};
|
|
550
|
+
for (const item of originData.localStorage) {
|
|
551
|
+
localStorageDict[item.name] = item.value;
|
|
552
|
+
}
|
|
553
|
+
await this.page.evaluate((localStorageData) => {
|
|
554
|
+
for (const [key, value] of Object.entries(localStorageData)) {
|
|
555
|
+
localStorage.setItem(key, value);
|
|
556
|
+
}
|
|
557
|
+
}, localStorageDict);
|
|
558
|
+
console.log(`✅ [Sentience] Injected ${originData.localStorage.length} localStorage item(s) for ${origin}`);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
catch (error) {
|
|
562
|
+
console.warn(`⚠️ [Sentience] Failed to inject localStorage for ${origin}: ${error.message}`);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Get the browser context (for utilities like saveStorageState)
|
|
569
|
+
*/
|
|
570
|
+
getContext() {
|
|
571
|
+
if (!this.context) {
|
|
572
|
+
throw new Error('Browser not started. Call start() first.');
|
|
573
|
+
}
|
|
574
|
+
return this.context;
|
|
575
|
+
}
|
|
576
|
+
async close() {
|
|
577
|
+
const cleanup = [];
|
|
578
|
+
// Close context first (this also closes the browser for persistent contexts)
|
|
579
|
+
if (this.context) {
|
|
580
|
+
cleanup.push(this.context.close().catch(() => {
|
|
581
|
+
// Ignore errors during cleanup
|
|
582
|
+
}));
|
|
583
|
+
this.context = null;
|
|
584
|
+
}
|
|
585
|
+
// Close browser if it exists (for non-persistent contexts)
|
|
586
|
+
if (this.browser) {
|
|
587
|
+
cleanup.push(this.browser.close().catch(() => {
|
|
588
|
+
// Ignore errors during cleanup
|
|
589
|
+
}));
|
|
590
|
+
this.browser = null;
|
|
591
|
+
}
|
|
592
|
+
// Wait for all cleanup to complete
|
|
593
|
+
await Promise.all(cleanup);
|
|
594
|
+
// Clean up extension directory
|
|
595
|
+
if (this.extensionPath && fs.existsSync(this.extensionPath)) {
|
|
596
|
+
try {
|
|
597
|
+
fs.rmSync(this.extensionPath, { recursive: true, force: true });
|
|
598
|
+
}
|
|
599
|
+
catch (e) {
|
|
600
|
+
// Ignore cleanup errors
|
|
601
|
+
}
|
|
602
|
+
this.extensionPath = null;
|
|
603
|
+
}
|
|
604
|
+
// Clean up user data directory (only if it's a temp directory)
|
|
605
|
+
// If user provided a custom userDataDir, we don't delete it (persistent sessions)
|
|
606
|
+
if (this.userDataDir && fs.existsSync(this.userDataDir)) {
|
|
607
|
+
// Only delete if it's a temp directory (starts with os.tmpdir())
|
|
608
|
+
const isTempDir = this.userDataDir.startsWith(os.tmpdir());
|
|
609
|
+
if (isTempDir) {
|
|
610
|
+
try {
|
|
611
|
+
fs.rmSync(this.userDataDir, { recursive: true, force: true });
|
|
612
|
+
}
|
|
613
|
+
catch (e) {
|
|
614
|
+
// Ignore cleanup errors
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
this.userDataDir = null;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
exports.SentienceBrowser = SentienceBrowser;
|
|
622
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|