@ejazullah/browser-mcp 0.0.56 → 0.0.57

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.
Files changed (62) hide show
  1. package/cli.js +1 -18
  2. package/index.js +1 -1060
  3. package/lib/auth.js +1 -82
  4. package/lib/browserContextFactory.js +1 -205
  5. package/lib/browserServerBackend.js +1 -125
  6. package/lib/config.js +1 -266
  7. package/lib/context.js +1 -232
  8. package/lib/databaseLogger.js +1 -264
  9. package/lib/extension/cdpRelay.js +1 -346
  10. package/lib/extension/extensionContextFactory.js +1 -56
  11. package/lib/extension/main.js +1 -26
  12. package/lib/fileUtils.js +1 -32
  13. package/lib/httpServer.js +1 -39
  14. package/lib/index.js +1 -39
  15. package/lib/javascript.js +1 -49
  16. package/lib/log.js +1 -21
  17. package/lib/loop/loop.js +1 -69
  18. package/lib/loop/loopClaude.js +1 -152
  19. package/lib/loop/loopOpenAI.js +1 -143
  20. package/lib/loop/main.js +1 -60
  21. package/lib/loopTools/context.js +1 -66
  22. package/lib/loopTools/main.js +1 -49
  23. package/lib/loopTools/perform.js +1 -32
  24. package/lib/loopTools/snapshot.js +1 -29
  25. package/lib/loopTools/tool.js +1 -18
  26. package/lib/manualPromise.js +1 -111
  27. package/lib/mcp/inProcessTransport.js +1 -72
  28. package/lib/mcp/server.js +1 -93
  29. package/lib/mcp/transport.js +1 -217
  30. package/lib/mongoDBLogger.js +1 -252
  31. package/lib/package.js +1 -20
  32. package/lib/program.js +1 -113
  33. package/lib/response.js +1 -172
  34. package/lib/sessionLog.js +1 -156
  35. package/lib/tab.js +1 -266
  36. package/lib/tools/cdp.js +1 -169
  37. package/lib/tools/common.js +1 -55
  38. package/lib/tools/console.js +1 -33
  39. package/lib/tools/dialogs.js +1 -47
  40. package/lib/tools/evaluate.js +1 -53
  41. package/lib/tools/extraction.js +1 -217
  42. package/lib/tools/files.js +1 -44
  43. package/lib/tools/forms.js +1 -180
  44. package/lib/tools/getext.js +1 -99
  45. package/lib/tools/install.js +1 -53
  46. package/lib/tools/interactions.js +1 -191
  47. package/lib/tools/keyboard.js +1 -86
  48. package/lib/tools/mouse.js +1 -99
  49. package/lib/tools/navigate.js +1 -70
  50. package/lib/tools/network.js +1 -41
  51. package/lib/tools/pdf.js +1 -40
  52. package/lib/tools/screenshot.js +1 -75
  53. package/lib/tools/selectors.js +1 -233
  54. package/lib/tools/snapshot.js +1 -169
  55. package/lib/tools/states.js +1 -147
  56. package/lib/tools/tabs.js +1 -87
  57. package/lib/tools/tool.js +1 -33
  58. package/lib/tools/utils.js +1 -74
  59. package/lib/tools/wait.js +1 -56
  60. package/lib/tools.js +1 -64
  61. package/lib/utils.js +1 -26
  62. package/package.json +5 -2
package/lib/config.js CHANGED
@@ -1,266 +1 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import fs from 'fs';
17
- import os from 'os';
18
- import path from 'path';
19
- import { devices } from 'playwright';
20
- import { sanitizeForFilePath } from './utils.js';
21
- const defaultConfig = {
22
- browser: {
23
- browserName: 'chromium',
24
- launchOptions: {
25
- channel: 'chrome',
26
- headless: os.platform() === 'linux' && !process.env.DISPLAY,
27
- chromiumSandbox: true,
28
- },
29
- contextOptions: {
30
- viewport: null,
31
- },
32
- },
33
- network: {
34
- allowedOrigins: undefined,
35
- blockedOrigins: undefined,
36
- },
37
- server: {},
38
- saveTrace: false,
39
- };
40
- export async function resolveConfig(config) {
41
- return mergeConfig(defaultConfig, config);
42
- }
43
- export async function resolveCLIConfig(cliOptions) {
44
- const configInFile = await loadConfig(cliOptions.config);
45
- const envOverrides = configFromEnv();
46
- const cliOverrides = configFromCLIOptions(cliOptions);
47
- let result = defaultConfig;
48
- result = mergeConfig(result, configInFile);
49
- result = mergeConfig(result, envOverrides);
50
- result = mergeConfig(result, cliOverrides);
51
- return result;
52
- }
53
- export function configFromCLIOptions(cliOptions) {
54
- let browserName;
55
- let channel;
56
- switch (cliOptions.browser) {
57
- case 'chrome':
58
- case 'chrome-beta':
59
- case 'chrome-canary':
60
- case 'chrome-dev':
61
- case 'chromium':
62
- case 'msedge':
63
- case 'msedge-beta':
64
- case 'msedge-canary':
65
- case 'msedge-dev':
66
- browserName = 'chromium';
67
- channel = cliOptions.browser;
68
- break;
69
- case 'firefox':
70
- browserName = 'firefox';
71
- break;
72
- case 'webkit':
73
- browserName = 'webkit';
74
- break;
75
- }
76
- // Launch options
77
- const launchOptions = {
78
- channel,
79
- executablePath: cliOptions.executablePath,
80
- headless: cliOptions.headless,
81
- };
82
- // --no-sandbox was passed, disable the sandbox
83
- if (cliOptions.sandbox === false)
84
- launchOptions.chromiumSandbox = false;
85
- if (cliOptions.proxyServer) {
86
- launchOptions.proxy = {
87
- server: cliOptions.proxyServer
88
- };
89
- if (cliOptions.proxyBypass)
90
- launchOptions.proxy.bypass = cliOptions.proxyBypass;
91
- }
92
- if (cliOptions.device && cliOptions.cdpEndpoint)
93
- throw new Error('Device emulation is not supported with cdpEndpoint.');
94
- // Context options
95
- const contextOptions = cliOptions.device ? devices[cliOptions.device] : {};
96
- if (cliOptions.storageState)
97
- contextOptions.storageState = cliOptions.storageState;
98
- if (cliOptions.userAgent)
99
- contextOptions.userAgent = cliOptions.userAgent;
100
- if (cliOptions.viewportSize) {
101
- try {
102
- const [width, height] = cliOptions.viewportSize.split(',').map(n => +n);
103
- if (isNaN(width) || isNaN(height))
104
- throw new Error('bad values');
105
- contextOptions.viewport = { width, height };
106
- }
107
- catch (e) {
108
- throw new Error('Invalid viewport size format: use "width,height", for example --viewport-size="800,600"');
109
- }
110
- }
111
- if (cliOptions.ignoreHttpsErrors)
112
- contextOptions.ignoreHTTPSErrors = true;
113
- if (cliOptions.blockServiceWorkers)
114
- contextOptions.serviceWorkers = 'block';
115
- const result = {
116
- browser: {
117
- browserName,
118
- isolated: cliOptions.isolated,
119
- userDataDir: cliOptions.userDataDir,
120
- launchOptions,
121
- contextOptions,
122
- cdpEndpoint: cliOptions.cdpEndpoint,
123
- },
124
- server: {
125
- port: cliOptions.port,
126
- host: cliOptions.host,
127
- },
128
- capabilities: cliOptions.caps,
129
- network: {
130
- allowedOrigins: cliOptions.allowedOrigins,
131
- blockedOrigins: cliOptions.blockedOrigins,
132
- },
133
- saveSession: cliOptions.saveSession,
134
- saveTrace: cliOptions.saveTrace,
135
- outputDir: cliOptions.outputDir,
136
- imageResponses: cliOptions.imageResponses,
137
- mongodb: {
138
- url: cliOptions.mongodbUrl,
139
- dbName: cliOptions.mongodbDb,
140
- collectionName: cliOptions.mongodbCollection,
141
- },
142
- auth: {
143
- enabled: cliOptions.auth,
144
- jwtSecret: cliOptions.jwtSecret,
145
- tokenExpiry: cliOptions.tokenExpiry,
146
- apiKeys: cliOptions.apiKeys,
147
- oauthClients: cliOptions.oauthClients,
148
- },
149
- };
150
- return result;
151
- }
152
- function configFromEnv() {
153
- const options = {};
154
- options.allowedOrigins = semicolonSeparatedList(process.env.PLAYWRIGHT_MCP_ALLOWED_ORIGINS);
155
- options.blockedOrigins = semicolonSeparatedList(process.env.PLAYWRIGHT_MCP_BLOCKED_ORIGINS);
156
- options.blockServiceWorkers = envToBoolean(process.env.PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS);
157
- options.browser = envToString(process.env.PLAYWRIGHT_MCP_BROWSER);
158
- options.caps = commaSeparatedList(process.env.PLAYWRIGHT_MCP_CAPS);
159
- options.cdpEndpoint = envToString(process.env.PLAYWRIGHT_MCP_CDP_ENDPOINT);
160
- options.config = envToString(process.env.PLAYWRIGHT_MCP_CONFIG);
161
- options.device = envToString(process.env.PLAYWRIGHT_MCP_DEVICE);
162
- options.executablePath = envToString(process.env.PLAYWRIGHT_MCP_EXECUTABLE_PATH);
163
- options.headless = envToBoolean(process.env.PLAYWRIGHT_MCP_HEADLESS);
164
- options.host = envToString(process.env.PLAYWRIGHT_MCP_HOST);
165
- options.ignoreHttpsErrors = envToBoolean(process.env.PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS);
166
- options.isolated = envToBoolean(process.env.PLAYWRIGHT_MCP_ISOLATED);
167
- if (process.env.PLAYWRIGHT_MCP_IMAGE_RESPONSES === 'omit')
168
- options.imageResponses = 'omit';
169
- options.sandbox = envToBoolean(process.env.PLAYWRIGHT_MCP_SANDBOX);
170
- options.outputDir = envToString(process.env.PLAYWRIGHT_MCP_OUTPUT_DIR);
171
- options.port = envToNumber(process.env.PLAYWRIGHT_MCP_PORT);
172
- options.proxyBypass = envToString(process.env.PLAYWRIGHT_MCP_PROXY_BYPASS);
173
- options.proxyServer = envToString(process.env.PLAYWRIGHT_MCP_PROXY_SERVER);
174
- options.saveTrace = envToBoolean(process.env.PLAYWRIGHT_MCP_SAVE_TRACE);
175
- options.storageState = envToString(process.env.PLAYWRIGHT_MCP_STORAGE_STATE);
176
- options.userAgent = envToString(process.env.PLAYWRIGHT_MCP_USER_AGENT);
177
- options.userDataDir = envToString(process.env.PLAYWRIGHT_MCP_USER_DATA_DIR);
178
- options.viewportSize = envToString(process.env.PLAYWRIGHT_MCP_VIEWPORT_SIZE);
179
- options.mongodbUrl = envToString(process.env.MONGODB_URL);
180
- options.mongodbDb = envToString(process.env.MONGODB_DB_NAME);
181
- options.mongodbCollection = envToString(process.env.MONGODB_COLLECTION);
182
- options.auth = envToBoolean(process.env.MCP_AUTH_ENABLED);
183
- options.jwtSecret = envToString(process.env.MCP_JWT_SECRET);
184
- options.tokenExpiry = envToString(process.env.MCP_TOKEN_EXPIRY);
185
- options.apiKeys = envToString(process.env.MCP_API_KEYS);
186
- options.oauthClients = envToString(process.env.MCP_OAUTH_CLIENTS);
187
- return configFromCLIOptions(options);
188
- }
189
- async function loadConfig(configFile) {
190
- if (!configFile)
191
- return {};
192
- try {
193
- return JSON.parse(await fs.promises.readFile(configFile, 'utf8'));
194
- }
195
- catch (error) {
196
- throw new Error(`Failed to load config file: ${configFile}, ${error}`);
197
- }
198
- }
199
- export async function outputFile(config, rootPath, name) {
200
- const outputDir = config.outputDir
201
- ?? (rootPath ? path.join(rootPath, '.playwright-mcp') : undefined)
202
- ?? path.join(os.tmpdir(), 'playwright-mcp-output', sanitizeForFilePath(new Date().toISOString()));
203
- await fs.promises.mkdir(outputDir, { recursive: true });
204
- const fileName = sanitizeForFilePath(name);
205
- return path.join(outputDir, fileName);
206
- }
207
- function pickDefined(obj) {
208
- return Object.fromEntries(Object.entries(obj ?? {}).filter(([_, v]) => v !== undefined));
209
- }
210
- function mergeConfig(base, overrides) {
211
- const browser = {
212
- ...pickDefined(base.browser),
213
- ...pickDefined(overrides.browser),
214
- browserName: overrides.browser?.browserName ?? base.browser?.browserName ?? 'chromium',
215
- isolated: overrides.browser?.isolated ?? base.browser?.isolated ?? false,
216
- launchOptions: {
217
- ...pickDefined(base.browser?.launchOptions),
218
- ...pickDefined(overrides.browser?.launchOptions),
219
- ...{ assistantMode: true },
220
- },
221
- contextOptions: {
222
- ...pickDefined(base.browser?.contextOptions),
223
- ...pickDefined(overrides.browser?.contextOptions),
224
- },
225
- };
226
- if (browser.browserName !== 'chromium' && browser.launchOptions)
227
- delete browser.launchOptions.channel;
228
- return {
229
- ...pickDefined(base),
230
- ...pickDefined(overrides),
231
- browser,
232
- network: {
233
- ...pickDefined(base.network),
234
- ...pickDefined(overrides.network),
235
- },
236
- server: {
237
- ...pickDefined(base.server),
238
- ...pickDefined(overrides.server),
239
- },
240
- };
241
- }
242
- export function semicolonSeparatedList(value) {
243
- if (!value)
244
- return undefined;
245
- return value.split(';').map(v => v.trim());
246
- }
247
- export function commaSeparatedList(value) {
248
- if (!value)
249
- return undefined;
250
- return value.split(',').map(v => v.trim());
251
- }
252
- function envToNumber(value) {
253
- if (!value)
254
- return undefined;
255
- return +value;
256
- }
257
- function envToBoolean(value) {
258
- if (value === 'true' || value === '1')
259
- return true;
260
- if (value === 'false' || value === '0')
261
- return false;
262
- return undefined;
263
- }
264
- function envToString(value) {
265
- return value ? value.trim() : undefined;
266
- }
1
+ const _0x11d8cb=_0x34be;function _0x1784(){const _0x42652c=['BwPwC1u','C2vYDMvY','Bw9Uz29KyLvYBa','sw52ywXPzcb2Awv3Cg9YDcbZAxPLigzVCM1HDdOGDxnLicj3Awr0AcXOzwLNAhqIlcbMB3iGzxHHBxbSzsaTlxzPzxDWB3j0lxnPEMu9iJGWmcW2mdaI','ChjVEhLtzxj2zxi','zg1JzNG','mtuXnZCZmgvOuMvjzq','Dhj1zq','y2HHBM5LBa','CgXHExDYAwDODc1Ty3aTB3v0Chv0','B2f1DgHdBgLLBNrZ','C2fUzgjVEa','yMXVy2TLze9YAwDPBNm','ywXSB3DLze9YAwDPBNm','rgv2AwnLigvTDwXHDgLVBIbPCYbUB3qGC3vWCg9YDgvKihDPDgGGy2rWrw5KCg9PBNqU','tvrfsNq','y2HYB21LlwnHBMfYEq','rfrXsvO','ELDpy3y','zfL6v3G','zgv2AwnL','CMvJDxjZAxzL','CgXHDgzVCM0','yMXVy2Ttzxj2AwnLv29YA2vYCW','ChjVEhLcExbHC3m','Dg9Rzw5fEhbPCNK','zxPnwuO','C2vHCMnO','Dg1WzgLY','mtiXyw5qCMrK','mJiWBLzst1fi','DMLLD3bVCNq','AgvPz2H0','rMfPBgvKihrVigXVywqGy29UzMLNigzPBgu6ia','vLLyrKm','v2TVv28','yMfKihzHBhvLCW','B3v0Chv0rgLY','CwnnAei','zgjoyw1L','yNjVD3nLCK5HBwu','y2HYB21LlwjLDge','zMLSDgvY','AuHnqw4','z0vQDeO','DxrMoa','t0rWtem','C2f2zvrYywnL','otq0D1zgyMDw','D0nTDLe','mJb1t2TKzfq','y2HYB21PDw1tyw5KyM94','Ag9ZDa','C3bSAxq','AhLkueS','A1DzwMG','Bw9Uz29KyG','tKrsCNq','BxnLzgDLlwrLDG','y2HYB21L','nZCYmdCYzKD5Bu13','BgvOthO','mZG1men4CwnmCq','zvjtt20','BxnLzgDLlwnHBMfYEq','ChjVBwLZzxm','C3rVCMfNzvn0yxrL','tfrMt04','wwf4Dei','ueLqwgq','kcGOlISPkYKRksSK','Bw9Uz29KyKnVBgXLy3rPB24','Dg9tDhjPBMC','mJa5mJK2mtjOy0XIr2m','zfvZv0q','DxjS','yMXVy2S','uwTYs2u','uuD3zha','tLDRzhq','B3vkvg4','DhjPBq','r0DZrvG','Aw1Hz2vszxnWB25Zzxm','mti1ntHqvuzHDKm','DMLLD3bVCNrtAxPL','AwDUB3jLshr0ChnfCNjVCNm','y29UC3rYDwn0B3i','yxv0Aa','y2fWCW','BxnLzgDL','y2rWrw5KCg9PBNq','ChjVEhK','AgvHzgXLC3m','zw50CMLLCW','y29UDgv4De9WDgLVBNm','Cg9YDa','BNHbr2e','C2vYDMLJzvDVCMTLCNm','rvPmwxm','Bejlqxa','yuryEwm','BxnLzgDLlwjLDge','ru5JCgG','DxnLCKfNzw50','y2HYB21PDw0','C2PQq3y','y29UzMLN','qwjSvu8','B21PDa','zw5HyMXLza','C2f2zvnLC3nPB24','D1vrzuO','Bg1Kt3q','BKrdwMW','Dg9ju09tDhjPBMC','BMv0D29YAW','AKjXBu8','AM9PBG','BwTKAxi','BgLUDxG','zMfSC2u','yxbWBhK','yNjVD3nLCG','CMvHzezPBgu','DM5WDfy','zxHLy3v0ywjSzvbHDgG','rvblqvC','CgfYC2u','yM1MqNe','mJKZndK3mMXPDgrQAW','s0Tiwvq','A05pr3G','mtu2oda0BhrUqwLI','zernyKe','D2vIA2L0','yxnZAxn0yw50tw9Kzq','AND0u2vJCMv0','EKToCMC','Bgf1BMnOt3b0Aw9UCW','yM1yCeK','yxbPs2v5CW','DxnLCKrHDgfeAxi','AxnVBgf0zwq','y2HYB21LlwrLDG','D2LKDgG','y2fWywjPBgL0AwvZ','Bw9Uz29KyKrI','zMLYzwzVEa','BwfW','yNLWyxnZ'];_0x1784=function(){return _0x42652c;};return _0x1784();}(function(_0x1db4c7,_0x80b1e4){const _0xd5ff8a=_0x34be,_0x40da98=_0x1db4c7();while(!![]){try{const _0x37ead9=-parseInt(_0xd5ff8a(0x13e))/0x1*(parseInt(_0xd5ff8a(0x175))/0x2)+-parseInt(_0xd5ff8a(0x127))/0x3+-parseInt(_0xd5ff8a(0x15d))/0x4+-parseInt(_0xd5ff8a(0x13f))/0x5*(parseInt(_0xd5ff8a(0x10f))/0x6)+-parseInt(_0xd5ff8a(0x15f))/0x7*(-parseInt(_0xd5ff8a(0x151))/0x8)+-parseInt(_0xd5ff8a(0x10c))/0x9+-parseInt(_0xd5ff8a(0x153))/0xa*(-parseInt(_0xd5ff8a(0x16a))/0xb);if(_0x37ead9===_0x80b1e4)break;else _0x40da98['push'](_0x40da98['shift']());}catch(_0x450e01){_0x40da98['push'](_0x40da98['shift']());}}}(_0x1784,0xe46a9));const _0xc4f520=(function(){let _0x457e89=!![];return function(_0x29a8cf,_0x2ba6ac){const _0x44d123=_0x457e89?function(){const _0x7eb7c1=_0x34be;if(_0x2ba6ac){const _0xcbf3b8=_0x2ba6ac[_0x7eb7c1(0x104)](_0x29a8cf,arguments);return _0x2ba6ac=null,_0xcbf3b8;}}:function(){};return _0x457e89=![],_0x44d123;};}()),_0x56ea0f=_0xc4f520(this,function(){const _0x43f38b=_0x34be,_0x2f6cc6={};_0x2f6cc6[_0x43f38b(0x116)]=_0x43f38b(0x167);const _0x2ed187=_0x2f6cc6;return _0x56ea0f[_0x43f38b(0x169)]()[_0x43f38b(0x13c)](_0x2ed187['bmXpI'])[_0x43f38b(0x169)]()[_0x43f38b(0x178)](_0x56ea0f)[_0x43f38b(0x13c)](_0x2ed187[_0x43f38b(0x116)]);});_0x56ea0f();import _0x1848fe from'fs';import _0x443c2a from'os';import _0x952782 from'path';import{devices}from'playwright';import{sanitizeForFilePath}from'./utils.js';const _0x18824b={};_0x18824b[_0x11d8cb(0x140)]=null;const _0x4e581a={};_0x4e581a[_0x11d8cb(0x12e)]=undefined,_0x4e581a[_0x11d8cb(0x12d)]=undefined;const defaultConfig={'browser':{'browserName':_0x11d8cb(0xf3),'launchOptions':{'channel':_0x11d8cb(0x15c),'headless':_0x443c2a[_0x11d8cb(0x137)]()===_0x11d8cb(0x102)&&!process.env.DISPLAY,'chromiumSandbox':!![]},'contextOptions':_0x18824b},'network':_0x4e581a,'server':{},'saveTrace':![]};export async function resolveConfig(_0x5c0dd7){const _0x4227f4=_0x11d8cb,_0x343c77={'wUQeJ':function(_0x23050a,_0x57cb38,_0x5af399){return _0x23050a(_0x57cb38,_0x5af399);}};return _0x343c77[_0x4227f4(0xfa)](mergeConfig,defaultConfig,_0x5c0dd7);}export async function resolveCLIConfig(_0x4f2399){const _0x333337=_0x11d8cb,_0x57ea4b={'VYXFC':function(_0x54d694){return _0x54d694();},'dUsWD':function(_0x5af7a2,_0x578e0d){return _0x5af7a2(_0x578e0d);},'EPKAW':function(_0x5da8de,_0xcea954,_0x5fd828){return _0x5da8de(_0xcea954,_0x5fd828);}},_0x8d24da=await loadConfig(_0x4f2399['config']),_0x25779b=_0x57ea4b[_0x333337(0x143)](configFromEnv),_0x4deb8d=_0x57ea4b[_0x333337(0x16b)](configFromCLIOptions,_0x4f2399);let _0x3fb2e3=defaultConfig;return _0x3fb2e3=_0x57ea4b['EPKAW'](mergeConfig,_0x3fb2e3,_0x8d24da),_0x3fb2e3=_0x57ea4b[_0x333337(0x109)](mergeConfig,_0x3fb2e3,_0x25779b),_0x3fb2e3=_0x57ea4b[_0x333337(0x109)](mergeConfig,_0x3fb2e3,_0x4deb8d),_0x3fb2e3;}export function configFromCLIOptions(_0x15d9b1){const _0x394b20=_0x11d8cb,_0x58150c={'NWkdt':_0x394b20(0x15c),'hyJPK':_0x394b20(0x14a),'WkoWo':_0x394b20(0x131),'mjVsU':_0x394b20(0x11a),'GGsEX':_0x394b20(0x187),'gEjtJ':_0x394b20(0x161),'MTEJt':_0x394b20(0x15b),'jBqmO':_0x394b20(0xf3),'ouJTn':_0x394b20(0x11e),'lehLz':_0x394b20(0x111),'akeij':function(_0x72baf4,_0x377a7){return _0x72baf4===_0x377a7;},'AblUO':_0x394b20(0x12f),'ODpLC':function(_0x317bb6,_0x5b7d0e){return _0x317bb6(_0x5b7d0e);},'YaxtB':_0x394b20(0x145),'zKNrg':_0x394b20(0x124),'aDXyc':_0x394b20(0x16d)};let _0x4dab13,_0x16e4a4;switch(_0x15d9b1[_0x394b20(0x105)]){case _0x58150c[_0x394b20(0x170)]:case _0x58150c[_0x394b20(0x157)]:case _0x58150c[_0x394b20(0x144)]:case _0x58150c[_0x394b20(0x121)]:case _0x394b20(0xf3):case _0x394b20(0x17b):case _0x58150c[_0x394b20(0x173)]:case _0x58150c[_0x394b20(0x14d)]:case _0x58150c[_0x394b20(0x130)]:_0x4dab13=_0x58150c[_0x394b20(0xff)],_0x16e4a4=_0x15d9b1[_0x394b20(0x105)];break;case _0x58150c[_0x394b20(0x171)]:_0x4dab13=_0x58150c[_0x394b20(0x171)];break;case _0x58150c['lehLz']:_0x4dab13=_0x58150c[_0x394b20(0x15e)];break;}const _0x1bd70c={};_0x1bd70c[_0x394b20(0x129)]=_0x16e4a4,_0x1bd70c[_0x394b20(0x108)]=_0x15d9b1[_0x394b20(0x108)],_0x1bd70c[_0x394b20(0x17e)]=_0x15d9b1[_0x394b20(0x17e)];const _0x285c81=_0x1bd70c;if(_0x58150c['akeij'](_0x15d9b1[_0x394b20(0x12c)],![]))_0x285c81[_0x394b20(0x154)]=![];if(_0x15d9b1[_0x394b20(0x125)]){const _0xbbf808={};_0xbbf808['server']=_0x15d9b1[_0x394b20(0x125)],_0x285c81[_0x394b20(0x17d)]=_0xbbf808;if(_0x15d9b1[_0x394b20(0x139)])_0x285c81[_0x394b20(0x17d)][_0x394b20(0x120)]=_0x15d9b1[_0x394b20(0x139)];}if(_0x15d9b1[_0x394b20(0x135)]&&_0x15d9b1['cdpEndpoint'])throw new Error(_0x58150c[_0x394b20(0xf6)]);const _0x5512fe=_0x15d9b1[_0x394b20(0x135)]?devices[_0x15d9b1[_0x394b20(0x135)]]:{};if(_0x15d9b1[_0x394b20(0x163)])_0x5512fe[_0x394b20(0x163)]=_0x15d9b1[_0x394b20(0x163)];if(_0x15d9b1[_0x394b20(0xf2)])_0x5512fe['userAgent']=_0x15d9b1[_0x394b20(0xf2)];if(_0x15d9b1[_0x394b20(0x176)])try{const [_0x3d3862,_0x211da5]=_0x15d9b1[_0x394b20(0x176)][_0x394b20(0x156)](',')[_0x394b20(0x11f)](_0x20f1ab=>+_0x20f1ab);if(_0x58150c[_0x394b20(0x14f)](isNaN,_0x3d3862)||isNaN(_0x211da5))throw new Error(_0x58150c[_0x394b20(0x165)]);const _0x5081ff={};_0x5081ff[_0x394b20(0x11b)]=_0x3d3862,_0x5081ff[_0x394b20(0x141)]=_0x211da5,_0x5512fe[_0x394b20(0x140)]=_0x5081ff;}catch(_0xd245e6){throw new Error(_0x58150c[_0x394b20(0x114)]);}if(_0x15d9b1[_0x394b20(0x177)])_0x5512fe['ignoreHTTPSErrors']=!![];if(_0x15d9b1[_0x394b20(0x138)])_0x5512fe[_0x394b20(0x183)]=_0x58150c[_0x394b20(0x186)];const _0x3b88ea={};_0x3b88ea[_0x394b20(0x149)]=_0x4dab13,_0x3b88ea[_0x394b20(0x119)]=_0x15d9b1[_0x394b20(0x119)],_0x3b88ea['userDataDir']=_0x15d9b1[_0x394b20(0x118)],_0x3b88ea[_0x394b20(0x115)]=_0x285c81,_0x3b88ea[_0x394b20(0x180)]=_0x5512fe,_0x3b88ea[_0x394b20(0x17c)]=_0x15d9b1[_0x394b20(0x17c)];const _0x15cfec={};_0x15cfec[_0x394b20(0x181)]=_0x15d9b1['port'],_0x15cfec[_0x394b20(0x155)]=_0x15d9b1[_0x394b20(0x155)];const _0x2d3a5d={};_0x2d3a5d[_0x394b20(0x105)]=_0x3b88ea,_0x2d3a5d[_0x394b20(0x122)]=_0x15cfec,_0x2d3a5d[_0x394b20(0x11c)]=_0x15d9b1[_0x394b20(0x17a)],_0x2d3a5d[_0x394b20(0xfe)]={},_0x2d3a5d[_0x394b20(0xf9)]=_0x15d9b1[_0x394b20(0xf9)],_0x2d3a5d[_0x394b20(0x150)]=_0x15d9b1[_0x394b20(0x150)],_0x2d3a5d[_0x394b20(0x146)]=_0x15d9b1[_0x394b20(0x146)],_0x2d3a5d[_0x394b20(0x174)]=_0x15d9b1[_0x394b20(0x174)],_0x2d3a5d[_0x394b20(0x159)]={},_0x2d3a5d[_0x394b20(0x179)]={},_0x2d3a5d[_0x394b20(0xfe)][_0x394b20(0x12e)]=_0x15d9b1[_0x394b20(0x12e)],_0x2d3a5d[_0x394b20(0xfe)][_0x394b20(0x12d)]=_0x15d9b1[_0x394b20(0x12d)],_0x2d3a5d[_0x394b20(0x159)][_0x394b20(0x16c)]=_0x15d9b1[_0x394b20(0x123)],_0x2d3a5d[_0x394b20(0x159)][_0x394b20(0x148)]=_0x15d9b1['mongodbDb'],_0x2d3a5d[_0x394b20(0x159)]['collectionName']=_0x15d9b1[_0x394b20(0x168)],_0x2d3a5d[_0x394b20(0x179)][_0x394b20(0xf8)]=_0x15d9b1[_0x394b20(0x179)],_0x2d3a5d[_0x394b20(0x179)][_0x394b20(0x113)]=_0x15d9b1[_0x394b20(0x113)],_0x2d3a5d[_0x394b20(0x179)][_0x394b20(0x13a)]=_0x15d9b1[_0x394b20(0x13a)],_0x2d3a5d[_0x394b20(0x179)][_0x394b20(0x117)]=_0x15d9b1[_0x394b20(0x117)],_0x2d3a5d[_0x394b20(0x179)][_0x394b20(0x12b)]=_0x15d9b1[_0x394b20(0x12b)];const _0x302877=_0x2d3a5d;return _0x302877;}function configFromEnv(){const _0x1d67d0=_0x11d8cb,_0x30b71b={'EZLYs':function(_0x35d7bf,_0x41ad3e){return _0x35d7bf(_0x41ad3e);},'bmfBq':function(_0x476a9a,_0x5ab62d){return _0x476a9a(_0x5ab62d);},'iHMAn':function(_0x58f170,_0x3e89f0){return _0x58f170(_0x3e89f0);},'DTqIZ':function(_0x259a6c,_0x36501c){return _0x259a6c(_0x36501c);},'sjjCv':function(_0x795e2a,_0x524190){return _0x795e2a(_0x524190);},'kWYZh':function(_0x3512c2,_0x29f154){return _0x3512c2===_0x29f154;},'kNOGx':function(_0x5008f7,_0x26aa74){return _0x5008f7(_0x26aa74);},'QkrKe':function(_0x10247e,_0x218412){return _0x10247e(_0x218412);},'zWOcv':function(_0x440d0a,_0x302a21){return _0x440d0a(_0x302a21);},'lBKAp':function(_0x57b9b8,_0x240cab){return _0x57b9b8(_0x240cab);},'ezMYJ':function(_0x3a6fb2,_0x210912){return _0x3a6fb2(_0x210912);},'dmcfx':function(_0x115dea,_0x427d03){return _0x115dea(_0x427d03);},'KKHYT':function(_0x466a6c,_0x191de4){return _0x466a6c(_0x191de4);}},_0x1c4db2={};_0x1c4db2[_0x1d67d0(0x12e)]=_0x30b71b[_0x1d67d0(0x184)](semicolonSeparatedList,process.env.PLAYWRIGHT_MCP_ALLOWED_ORIGINS),_0x1c4db2[_0x1d67d0(0x12d)]=_0x30b71b[_0x1d67d0(0x184)](semicolonSeparatedList,process.env.PLAYWRIGHT_MCP_BLOCKED_ORIGINS),_0x1c4db2[_0x1d67d0(0x138)]=_0x30b71b[_0x1d67d0(0x10b)](envToBoolean,process.env.PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS),_0x1c4db2[_0x1d67d0(0x105)]=_0x30b71b[_0x1d67d0(0x10b)](envToString,process.env.PLAYWRIGHT_MCP_BROWSER),_0x1c4db2[_0x1d67d0(0x17a)]=_0x30b71b[_0x1d67d0(0x184)](commaSeparatedList,process.env.PLAYWRIGHT_MCP_CAPS),_0x1c4db2[_0x1d67d0(0x17c)]=_0x30b71b[_0x1d67d0(0x14c)](envToString,process.env.PLAYWRIGHT_MCP_CDP_ENDPOINT),_0x1c4db2[_0x1d67d0(0xf5)]=_0x30b71b[_0x1d67d0(0x132)](envToString,process.env.PLAYWRIGHT_MCP_CONFIG),_0x1c4db2[_0x1d67d0(0x135)]=envToString(process.env.PLAYWRIGHT_MCP_DEVICE),_0x1c4db2[_0x1d67d0(0x108)]=_0x30b71b[_0x1d67d0(0x10b)](envToString,process.env.PLAYWRIGHT_MCP_EXECUTABLE_PATH),_0x1c4db2[_0x1d67d0(0x17e)]=_0x30b71b[_0x1d67d0(0x132)](envToBoolean,process.env.PLAYWRIGHT_MCP_HEADLESS),_0x1c4db2[_0x1d67d0(0x155)]=_0x30b71b[_0x1d67d0(0xf4)](envToString,process.env.PLAYWRIGHT_MCP_HOST),_0x1c4db2[_0x1d67d0(0x177)]=_0x30b71b[_0x1d67d0(0x14c)](envToBoolean,process.env.PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS),_0x1c4db2[_0x1d67d0(0x119)]=_0x30b71b[_0x1d67d0(0x132)](envToBoolean,process.env.PLAYWRIGHT_MCP_ISOLATED);if(_0x30b71b[_0x1d67d0(0x158)](process.env.PLAYWRIGHT_MCP_IMAGE_RESPONSES,'omit'))_0x1c4db2[_0x1d67d0(0x174)]=_0x1d67d0(0xf7);return _0x1c4db2[_0x1d67d0(0x12c)]=envToBoolean(process.env.PLAYWRIGHT_MCP_SANDBOX),_0x1c4db2[_0x1d67d0(0x146)]=_0x30b71b[_0x1d67d0(0x10b)](envToString,process.env.PLAYWRIGHT_MCP_OUTPUT_DIR),_0x1c4db2[_0x1d67d0(0x181)]=_0x30b71b[_0x1d67d0(0x184)](envToNumber,process.env.PLAYWRIGHT_MCP_PORT),_0x1c4db2[_0x1d67d0(0x139)]=_0x30b71b[_0x1d67d0(0x10e)](envToString,process.env.PLAYWRIGHT_MCP_PROXY_BYPASS),_0x1c4db2[_0x1d67d0(0x125)]=_0x30b71b[_0x1d67d0(0x16e)](envToString,process.env.PLAYWRIGHT_MCP_PROXY_SERVER),_0x1c4db2[_0x1d67d0(0x150)]=_0x30b71b['zWOcv'](envToBoolean,process.env.PLAYWRIGHT_MCP_SAVE_TRACE),_0x1c4db2[_0x1d67d0(0x163)]=envToString(process.env.PLAYWRIGHT_MCP_STORAGE_STATE),_0x1c4db2[_0x1d67d0(0xf2)]=_0x30b71b[_0x1d67d0(0x10e)](envToString,process.env.PLAYWRIGHT_MCP_USER_AGENT),_0x1c4db2[_0x1d67d0(0x118)]=_0x30b71b[_0x1d67d0(0x185)](envToString,process.env.PLAYWRIGHT_MCP_USER_DATA_DIR),_0x1c4db2[_0x1d67d0(0x176)]=envToString(process.env.PLAYWRIGHT_MCP_VIEWPORT_SIZE),_0x1c4db2[_0x1d67d0(0x123)]=_0x30b71b['ezMYJ'](envToString,process.env.MONGODB_URL),_0x1c4db2[_0x1d67d0(0x11d)]=_0x30b71b[_0x1d67d0(0x14c)](envToString,process.env.MONGODB_DB_NAME),_0x1c4db2[_0x1d67d0(0x168)]=_0x30b71b[_0x1d67d0(0x126)](envToString,process.env.MONGODB_COLLECTION),_0x1c4db2[_0x1d67d0(0x179)]=_0x30b71b[_0x1d67d0(0x10d)](envToBoolean,process.env.MCP_AUTH_ENABLED),_0x1c4db2[_0x1d67d0(0x113)]=envToString(process.env.MCP_JWT_SECRET),_0x1c4db2[_0x1d67d0(0x13a)]=_0x30b71b[_0x1d67d0(0x16e)](envToString,process.env.MCP_TOKEN_EXPIRY),_0x1c4db2[_0x1d67d0(0x117)]=_0x30b71b[_0x1d67d0(0x13b)](envToString,process.env.MCP_API_KEYS),_0x1c4db2[_0x1d67d0(0x12b)]=_0x30b71b[_0x1d67d0(0x133)](envToString,process.env.MCP_OAUTH_CLIENTS),_0x30b71b[_0x1d67d0(0xf4)](configFromCLIOptions,_0x1c4db2);}async function loadConfig(_0x5f26bc){const _0x179c9d=_0x11d8cb,_0x1238b0={};_0x1238b0[_0x179c9d(0xfb)]=_0x179c9d(0x14e);const _0x3877d5=_0x1238b0;if(!_0x5f26bc)return{};try{return JSON[_0x179c9d(0x10a)](await _0x1848fe[_0x179c9d(0x162)][_0x179c9d(0x106)](_0x5f26bc,_0x3877d5[_0x179c9d(0xfb)]));}catch(_0x485ea9){throw new Error(_0x179c9d(0x142)+_0x5f26bc+',\x20'+_0x485ea9);}}export async function outputFile(_0x427d49,_0x3db960,_0x447814){const _0x5e3989=_0x11d8cb,_0x42748b={'dYzWx':'.playwright-mcp','PIPXd':_0x5e3989(0x12a),'NDRrt':function(_0x29b320,_0x5b617f){return _0x29b320(_0x5b617f);}},_0x214975=_0x427d49[_0x5e3989(0x146)]??(_0x3db960?_0x952782[_0x5e3989(0x100)](_0x3db960,_0x42748b[_0x5e3989(0x134)]):undefined)??_0x952782[_0x5e3989(0x100)](_0x443c2a[_0x5e3989(0x13d)](),_0x42748b[_0x5e3989(0x166)],_0x42748b[_0x5e3989(0x15a)](sanitizeForFilePath,new Date()[_0x5e3989(0xfd)]())),_0x111920={};_0x111920[_0x5e3989(0x136)]=!![],await _0x1848fe[_0x5e3989(0x162)][_0x5e3989(0x101)](_0x214975,_0x111920);const _0x1f9ed2=_0x42748b[_0x5e3989(0x15a)](sanitizeForFilePath,_0x447814);return _0x952782[_0x5e3989(0x100)](_0x214975,_0x1f9ed2);}function pickDefined(_0x5da533){const _0x26756b=_0x11d8cb;return Object['fromEntries'](Object[_0x26756b(0x17f)](_0x5da533??{})[_0x26756b(0x14b)](([_0x364877,_0x50c6b9])=>_0x50c6b9!==undefined));}function _0x34be(_0x31177f,_0x3773bd){_0x31177f=_0x31177f-0xf2;const _0x5ad4b3=_0x1784();let _0x56ea0f=_0x5ad4b3[_0x31177f];if(_0x34be['Ruinpv']===undefined){var _0xc4f520=function(_0x3c1933){const _0x4eb010='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x291a88='',_0xca1697='',_0x56aa6a=_0x291a88+_0xc4f520;for(let _0x4c6811=0x0,_0x170437,_0x345d6a,_0x15645b=0x0;_0x345d6a=_0x3c1933['charAt'](_0x15645b++);~_0x345d6a&&(_0x170437=_0x4c6811%0x4?_0x170437*0x40+_0x345d6a:_0x345d6a,_0x4c6811++%0x4)?_0x291a88+=_0x56aa6a['charCodeAt'](_0x15645b+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x170437>>(-0x2*_0x4c6811&0x6)):_0x4c6811:0x0){_0x345d6a=_0x4eb010['indexOf'](_0x345d6a);}for(let _0x22aa72=0x0,_0x4edef6=_0x291a88['length'];_0x22aa72<_0x4edef6;_0x22aa72++){_0xca1697+='%'+('00'+_0x291a88['charCodeAt'](_0x22aa72)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xca1697);};_0x34be['igggQH']=_0xc4f520,_0x34be['TnPpUs']={},_0x34be['Ruinpv']=!![];}const _0x1784ad=_0x5ad4b3[0x0],_0x34beaa=_0x31177f+_0x1784ad,_0x1aeaf3=_0x34be['TnPpUs'][_0x34beaa];if(!_0x1aeaf3){const _0x483310=function(_0x2d062d){this['XvYaWG']=_0x2d062d,this['rKYSre']=[0x1,0x0,0x0],this['WKVVBw']=function(){return'newState';},this['feHzzY']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['aCDSBC']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x483310['prototype']['eMUCgf']=function(){const _0x535763=new RegExp(this['feHzzY']+this['aCDSBC']),_0x2e5ee7=_0x535763['test'](this['WKVVBw']['toString']())?--this['rKYSre'][0x1]:--this['rKYSre'][0x0];return this['jXezZD'](_0x2e5ee7);},_0x483310['prototype']['jXezZD']=function(_0x1d936a){if(!Boolean(~_0x1d936a))return _0x1d936a;return this['bvRGKt'](this['XvYaWG']);},_0x483310['prototype']['bvRGKt']=function(_0x2345ad){for(let _0x4cdb4a=0x0,_0x27aa25=this['rKYSre']['length'];_0x4cdb4a<_0x27aa25;_0x4cdb4a++){this['rKYSre']['push'](Math['round'](Math['random']())),_0x27aa25=this['rKYSre']['length'];}return _0x2345ad(this['rKYSre'][0x0]);},new _0x483310(_0x34be)['eMUCgf'](),_0x56ea0f=_0x34be['igggQH'](_0x56ea0f),_0x34be['TnPpUs'][_0x34beaa]=_0x56ea0f;}else _0x56ea0f=_0x1aeaf3;return _0x56ea0f;}function mergeConfig(_0x54bcc2,_0x3a9fa1){const _0xac093=_0x11d8cb,_0x2d7b87={'vnptV':function(_0x5e74b3,_0x392270){return _0x5e74b3(_0x392270);},'nDCZl':function(_0x44fcc4,_0x200162){return _0x44fcc4(_0x200162);},'wCmvQ':_0xac093(0xf3),'ENcph':function(_0x2918a7,_0x1eedb4){return _0x2918a7(_0x1eedb4);},'LTfON':function(_0x1f14e8,_0x4ccd25){return _0x1f14e8(_0x4ccd25);},'nxAGa':function(_0x2bf93d,_0xebd45c){return _0x2bf93d(_0xebd45c);},'dDMbA':function(_0x485f05,_0xef42b3){return _0x485f05(_0xef42b3);},'eRSOm':function(_0x2ec5e3,_0x2a7b2f){return _0x2ec5e3(_0x2a7b2f);}},_0x2b7e1a={};_0x2b7e1a[_0xac093(0x112)]=!![];const _0x3651bb={..._0x2d7b87[_0xac093(0x107)](pickDefined,_0x54bcc2[_0xac093(0x105)]),..._0x2d7b87[_0xac093(0xfc)](pickDefined,_0x3a9fa1[_0xac093(0x105)]),'browserName':_0x3a9fa1[_0xac093(0x105)]?.[_0xac093(0x149)]??_0x54bcc2[_0xac093(0x105)]?.[_0xac093(0x149)]??_0x2d7b87[_0xac093(0x152)],'isolated':_0x3a9fa1['browser']?.[_0xac093(0x119)]??_0x54bcc2[_0xac093(0x105)]?.[_0xac093(0x119)]??![],'launchOptions':{..._0x2d7b87[_0xac093(0x188)](pickDefined,_0x54bcc2[_0xac093(0x105)]?.[_0xac093(0x115)]),..._0x2d7b87[_0xac093(0x164)](pickDefined,_0x3a9fa1[_0xac093(0x105)]?.[_0xac093(0x115)]),..._0x2b7e1a},'contextOptions':{...pickDefined(_0x54bcc2[_0xac093(0x105)]?.[_0xac093(0x180)]),..._0x2d7b87[_0xac093(0x182)](pickDefined,_0x3a9fa1[_0xac093(0x105)]?.[_0xac093(0x180)])}};if(_0x3651bb[_0xac093(0x149)]!==_0xac093(0xf3)&&_0x3651bb[_0xac093(0x115)])delete _0x3651bb[_0xac093(0x115)][_0xac093(0x129)];return{..._0x2d7b87[_0xac093(0x107)](pickDefined,_0x54bcc2),..._0x2d7b87[_0xac093(0x182)](pickDefined,_0x3a9fa1),'browser':_0x3651bb,'network':{..._0x2d7b87[_0xac093(0x164)](pickDefined,_0x54bcc2[_0xac093(0xfe)]),..._0x2d7b87[_0xac093(0x110)](pickDefined,_0x3a9fa1[_0xac093(0xfe)])},'server':{..._0x2d7b87[_0xac093(0x160)](pickDefined,_0x54bcc2[_0xac093(0x122)]),..._0x2d7b87[_0xac093(0x164)](pickDefined,_0x3a9fa1[_0xac093(0x122)])}};}export function semicolonSeparatedList(_0x1198c9){const _0x5d5528=_0x11d8cb;if(!_0x1198c9)return undefined;return _0x1198c9[_0x5d5528(0x156)](';')[_0x5d5528(0x11f)](_0x131065=>_0x131065[_0x5d5528(0x172)]());}export function commaSeparatedList(_0x4fa64e){const _0x19c8c5=_0x11d8cb;if(!_0x4fa64e)return undefined;return _0x4fa64e[_0x19c8c5(0x156)](',')['map'](_0x55c4b0=>_0x55c4b0[_0x19c8c5(0x172)]());}function envToNumber(_0x233038){if(!_0x233038)return undefined;return+_0x233038;}function envToBoolean(_0x592422){const _0x318005=_0x11d8cb,_0x103857={};_0x103857[_0x318005(0x16f)]=_0x318005(0x128),_0x103857['qcMhB']=function(_0x46e5d3,_0x252270){return _0x46e5d3===_0x252270;};const _0x114325=_0x103857;if(_0x592422===_0x114325['QGwdp']||_0x592422==='1')return!![];if(_0x114325[_0x318005(0x147)](_0x592422,_0x318005(0x103))||_0x592422==='0')return![];return undefined;}function envToString(_0x5f4249){const _0x5c5a15=_0x11d8cb;return _0x5f4249?_0x5f4249[_0x5c5a15(0x172)]():undefined;}
package/lib/context.js CHANGED
@@ -1,232 +1 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import debug from 'debug';
17
- import { logUnhandledError } from './log.js';
18
- import { Tab } from './tab.js';
19
- import { outputFile } from './config.js';
20
- const testDebug = debug('pw:mcp:test');
21
- export class Context {
22
- tools;
23
- config;
24
- sessionLog;
25
- options;
26
- _browserContextPromise;
27
- _browserContextFactory;
28
- _tabs = [];
29
- _currentTab;
30
- _clientInfo;
31
- static _allContexts = new Set();
32
- _closeBrowserContextPromise;
33
- _isRunningTool = false;
34
- _abortController = new AbortController();
35
- constructor(options) {
36
- this.tools = options.tools;
37
- this.config = options.config;
38
- this.sessionLog = options.sessionLog;
39
- this.options = options;
40
- this._browserContextFactory = options.browserContextFactory;
41
- this._clientInfo = options.clientInfo;
42
- testDebug('create context');
43
- Context._allContexts.add(this);
44
- }
45
- static async disposeAll() {
46
- await Promise.all([...Context._allContexts].map(context => context.dispose()));
47
- }
48
- tabs() {
49
- return this._tabs;
50
- }
51
- currentTab() {
52
- return this._currentTab;
53
- }
54
- currentTabOrDie() {
55
- if (!this._currentTab)
56
- throw new Error('No open pages available. Use the "browser_navigate" tool to navigate to a page first.');
57
- return this._currentTab;
58
- }
59
- async newTab() {
60
- const { browserContext } = await this._ensureBrowserContext();
61
- const page = await browserContext.newPage();
62
- this._currentTab = this._tabs.find(t => t.page === page);
63
- return this._currentTab;
64
- }
65
- async selectTab(index) {
66
- const tab = this._tabs[index];
67
- if (!tab)
68
- throw new Error(`Tab ${index} not found`);
69
- await tab.page.bringToFront();
70
- this._currentTab = tab;
71
- return tab;
72
- }
73
- async updateBrowserContextFactory(newFactory) {
74
- // Close existing browser context first
75
- await this.closeBrowserContext();
76
- // Update to the new factory
77
- this._browserContextFactory = newFactory;
78
- }
79
- async ensureTab() {
80
- const { browserContext } = await this._ensureBrowserContext();
81
- if (!this._currentTab)
82
- await browserContext.newPage();
83
- return this._currentTab;
84
- }
85
- async closeTab(index) {
86
- const tab = index === undefined ? this._currentTab : this._tabs[index];
87
- if (!tab)
88
- throw new Error(`Tab ${index} not found`);
89
- const url = tab.page.url();
90
- await tab.page.close();
91
- return url;
92
- }
93
- async outputFile(name) {
94
- return outputFile(this.config, this._clientInfo.rootPath, name);
95
- }
96
- _onPageCreated(page) {
97
- const tab = new Tab(this, page, tab => this._onPageClosed(tab));
98
- this._tabs.push(tab);
99
- if (!this._currentTab)
100
- this._currentTab = tab;
101
- }
102
- _onPageClosed(tab) {
103
- const index = this._tabs.indexOf(tab);
104
- if (index === -1)
105
- return;
106
- this._tabs.splice(index, 1);
107
- if (this._currentTab === tab)
108
- this._currentTab = this._tabs[Math.min(index, this._tabs.length - 1)];
109
- if (!this._tabs.length)
110
- void this.closeBrowserContext();
111
- }
112
- async closeBrowserContext() {
113
- if (!this._closeBrowserContextPromise)
114
- this._closeBrowserContextPromise = this._closeBrowserContextImpl().catch(logUnhandledError);
115
- await this._closeBrowserContextPromise;
116
- this._closeBrowserContextPromise = undefined;
117
- }
118
- isRunningTool() {
119
- return this._isRunningTool;
120
- }
121
- setRunningTool(isRunningTool) {
122
- this._isRunningTool = isRunningTool;
123
- }
124
- async _closeBrowserContextImpl() {
125
- if (!this._browserContextPromise)
126
- return;
127
- testDebug('close context');
128
- const promise = this._browserContextPromise;
129
- this._browserContextPromise = undefined;
130
- await promise.then(async ({ browserContext, close }) => {
131
- if (this.config.saveTrace)
132
- await browserContext.tracing.stop();
133
- await close();
134
- });
135
- }
136
- async dispose() {
137
- this._abortController.abort('MCP context disposed');
138
- await this.closeBrowserContext();
139
- Context._allContexts.delete(this);
140
- }
141
- async _setupRequestInterception(context) {
142
- if (this.config.network?.allowedOrigins?.length) {
143
- await context.route('**', route => route.abort('blockedbyclient'));
144
- for (const origin of this.config.network.allowedOrigins)
145
- await context.route(`*://${origin}/**`, route => route.continue());
146
- }
147
- if (this.config.network?.blockedOrigins?.length) {
148
- for (const origin of this.config.network.blockedOrigins)
149
- await context.route(`*://${origin}/**`, route => route.abort('blockedbyclient'));
150
- }
151
- }
152
- _ensureBrowserContext() {
153
- if (!this._browserContextPromise) {
154
- this._browserContextPromise = this._setupBrowserContext();
155
- this._browserContextPromise.catch(() => {
156
- this._browserContextPromise = undefined;
157
- });
158
- }
159
- return this._browserContextPromise;
160
- }
161
- async _setupBrowserContext() {
162
- if (this._closeBrowserContextPromise)
163
- throw new Error('Another browser context is being closed.');
164
- // TODO: move to the browser context factory to make it based on isolation mode.
165
- const result = await this._browserContextFactory.createContext(this._clientInfo, this._abortController.signal);
166
- const { browserContext } = result;
167
- await this._setupRequestInterception(browserContext);
168
- if (this.sessionLog)
169
- await InputRecorder.create(this, browserContext);
170
- for (const page of browserContext.pages())
171
- this._onPageCreated(page);
172
- browserContext.on('page', page => this._onPageCreated(page));
173
- if (this.config.saveTrace) {
174
- await browserContext.tracing.start({
175
- name: 'trace',
176
- screenshots: false,
177
- snapshots: true,
178
- sources: false,
179
- });
180
- }
181
- return result;
182
- }
183
- }
184
- export class InputRecorder {
185
- _context;
186
- _browserContext;
187
- constructor(context, browserContext) {
188
- this._context = context;
189
- this._browserContext = browserContext;
190
- }
191
- static async create(context, browserContext) {
192
- const recorder = new InputRecorder(context, browserContext);
193
- await recorder._initialize();
194
- return recorder;
195
- }
196
- async _initialize() {
197
- const sessionLog = this._context.sessionLog;
198
- await this._browserContext._enableRecorder({
199
- mode: 'recording',
200
- recorderMode: 'api',
201
- }, {
202
- actionAdded: (page, data, code) => {
203
- if (this._context.isRunningTool())
204
- return;
205
- const tab = Tab.forPage(page);
206
- if (tab)
207
- sessionLog.logUserAction(data.action, tab, code, false);
208
- },
209
- actionUpdated: (page, data, code) => {
210
- if (this._context.isRunningTool())
211
- return;
212
- const tab = Tab.forPage(page);
213
- if (tab)
214
- sessionLog.logUserAction(data.action, tab, code, true);
215
- },
216
- signalAdded: (page, data) => {
217
- if (this._context.isRunningTool())
218
- return;
219
- if (data.signal.name !== 'navigation')
220
- return;
221
- const tab = Tab.forPage(page);
222
- const navigateAction = {
223
- name: 'navigate',
224
- url: data.signal.url,
225
- signals: [],
226
- };
227
- if (tab)
228
- sessionLog.logUserAction(navigateAction, tab, `await page.goto('${data.signal.url}');`, false);
229
- },
230
- });
231
- }
232
- }
1
+ const _0x4551ea=_0x2f1b;(function(_0x39e329,_0x42c3fe){const _0x15da2d=_0x2f1b,_0xb6d97b=_0x39e329();while(!![]){try{const _0x2cc583=-parseInt(_0x15da2d(0x200))/0x1+parseInt(_0x15da2d(0x229))/0x2+parseInt(_0x15da2d(0x20b))/0x3*(-parseInt(_0x15da2d(0x1f8))/0x4)+parseInt(_0x15da2d(0x1ba))/0x5*(-parseInt(_0x15da2d(0x211))/0x6)+-parseInt(_0x15da2d(0x1d0))/0x7+parseInt(_0x15da2d(0x1fe))/0x8+parseInt(_0x15da2d(0x207))/0x9;if(_0x2cc583===_0x42c3fe)break;else _0xb6d97b['push'](_0xb6d97b['shift']());}catch(_0x824d58){_0xb6d97b['push'](_0xb6d97b['shift']());}}}(_0x404a,0xe528c));function _0x2f1b(_0x4fa0b7,_0x321068){_0x4fa0b7=_0x4fa0b7-0x1b8;const _0x1705db=_0x404a();let _0x5aa1ad=_0x1705db[_0x4fa0b7];if(_0x2f1b['xDABvl']===undefined){var _0xb29631=function(_0x512c02){const _0x3a28f6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4777e0='',_0x490f2b='',_0x216d83=_0x4777e0+_0xb29631;for(let _0x24600b=0x0,_0x2ffc08,_0x44e75a,_0x15ac1a=0x0;_0x44e75a=_0x512c02['charAt'](_0x15ac1a++);~_0x44e75a&&(_0x2ffc08=_0x24600b%0x4?_0x2ffc08*0x40+_0x44e75a:_0x44e75a,_0x24600b++%0x4)?_0x4777e0+=_0x216d83['charCodeAt'](_0x15ac1a+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x2ffc08>>(-0x2*_0x24600b&0x6)):_0x24600b:0x0){_0x44e75a=_0x3a28f6['indexOf'](_0x44e75a);}for(let _0x3f32b6=0x0,_0x1d47c9=_0x4777e0['length'];_0x3f32b6<_0x1d47c9;_0x3f32b6++){_0x490f2b+='%'+('00'+_0x4777e0['charCodeAt'](_0x3f32b6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x490f2b);};_0x2f1b['CrYedO']=_0xb29631,_0x2f1b['rqqCSb']={},_0x2f1b['xDABvl']=!![];}const _0x404ab2=_0x1705db[0x0],_0x2f1baf=_0x4fa0b7+_0x404ab2,_0x25f550=_0x2f1b['rqqCSb'][_0x2f1baf];if(!_0x25f550){const _0x59ce89=function(_0x65aa52){this['FGasKI']=_0x65aa52,this['gkrHwS']=[0x1,0x0,0x0],this['RstlSJ']=function(){return'newState';},this['mgzTGt']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['xpVFvm']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x59ce89['prototype']['RPwuOL']=function(){const _0x227636=new RegExp(this['mgzTGt']+this['xpVFvm']),_0x4ae948=_0x227636['test'](this['RstlSJ']['toString']())?--this['gkrHwS'][0x1]:--this['gkrHwS'][0x0];return this['nPIjMd'](_0x4ae948);},_0x59ce89['prototype']['nPIjMd']=function(_0x1d8d15){if(!Boolean(~_0x1d8d15))return _0x1d8d15;return this['XgZMHp'](this['FGasKI']);},_0x59ce89['prototype']['XgZMHp']=function(_0x252b58){for(let _0x1dfa4a=0x0,_0x562bac=this['gkrHwS']['length'];_0x1dfa4a<_0x562bac;_0x1dfa4a++){this['gkrHwS']['push'](Math['round'](Math['random']())),_0x562bac=this['gkrHwS']['length'];}return _0x252b58(this['gkrHwS'][0x0]);},new _0x59ce89(_0x2f1b)['RPwuOL'](),_0x5aa1ad=_0x2f1b['CrYedO'](_0x5aa1ad),_0x2f1b['rqqCSb'][_0x2f1baf]=_0x5aa1ad;}else _0x5aa1ad=_0x25f550;return _0x5aa1ad;}const _0xb29631=(function(){let _0x7f0112=!![];return function(_0x429caa,_0x5d05b9){const _0x513ae7=_0x7f0112?function(){const _0x4d28f9=_0x2f1b;if(_0x5d05b9){const _0x38b01d=_0x5d05b9[_0x4d28f9(0x214)](_0x429caa,arguments);return _0x5d05b9=null,_0x38b01d;}}:function(){};return _0x7f0112=![],_0x513ae7;};}()),_0x5aa1ad=_0xb29631(this,function(){const _0x522bc5=_0x2f1b,_0x312a5e={};_0x312a5e[_0x522bc5(0x1ec)]=_0x522bc5(0x210);const _0x178dbf=_0x312a5e;return _0x5aa1ad[_0x522bc5(0x226)]()[_0x522bc5(0x1f9)]('(((.+)+)+)+$')[_0x522bc5(0x226)]()['constructor'](_0x5aa1ad)[_0x522bc5(0x1f9)](_0x178dbf[_0x522bc5(0x1ec)]);});_0x5aa1ad();import _0x2a414f from'debug';import{logUnhandledError}from'./log.js';import{Tab}from'./tab.js';import{outputFile}from'./config.js';const testDebug=_0x2a414f(_0x4551ea(0x1da));function _0x404a(){const _0x4e2a99=['swP1EMG','y3jLyxrL','C2v0uNvUBMLUz1rVB2W','mZu2mZi2ntzUuM1hrxe','x3rHyNm','C3bSAwnL','qvLvuNu','nta4ntG2n1nkq3H0Eq','vwzHAwK','ig5VDcbMB3vUza','BMf2AwDHDgu','CMvJB3jKAw5N','kcGOlISPkYKRksSK','mte0ANzZqMfs','t2zIuK4','x2LUAxrPywXPEMu','yxbWBhK','ENvVA2i','ywjVCNq','C291CMnLCW','yMXVy2TLze9YAwDPBNm','C3rVCa','y3jLyxrLignVBNrLEhq','BMv0D29YAW','y2f0y2G','ywn0Aw9U','CM91Dgu','qw5VDgHLCIbICM93C2vYignVBNrLEhqGAxmGyMvPBMCGy2XVC2vKlG','y2XVC2u','zgvSzxrL','ywXSB3DLze9YAwDPBNm','C2LNBMfSCW','BMfTzq','txfoqKq','Dg9tDhjPBMC','y3vYCMvUDfrHyG','ywXS','mZq0ndCXofHkqMjrrW','x3nLDhvWuMvXDwvZDeLUDgvYy2vWDgLVBG','y2XPzw50sw5MBW','ru5cwMm','x2jYB3DZzxjdB250zxH0','yMXVy2TLzgj5y2XPzw50','C2f2zvrYywnL','yxDHAxqGCgfNzs5NB3rVkcC','tM8GB3bLBIbWywDLCYbHDMfPBgfIBguUifvZzsb0AguGiMjYB3DZzxjFBMf2AwDHDguIihrVB2WGDg8GBMf2AwDHDguGDg8GysbWywDLigzPCNn0lG','sLPMq1O','C2vSzwn0vgfI','BgvUz3rO','ChvZAa','Aw5KzxHpzG','mZC3mJa1suDZrujX','y3jLyxrLq29UDgv4Da','CgfNzxm','tunqignVBNrLEhqGzgLZCg9Zzwq','x2nVBNrLEhq','lYOQ','y29UDgLUDwu','kJOVlW','x2nSB3nLqNjVD3nLCKnVBNrLEhrqCM9TAxnL','x2nSAwvUDeLUzM8','z0juyNe','x2jYB3DZzxjdB250zxH0rMfJDg9YEq','BMv3vgfI','C2vZC2LVBKXVzW','y3vYCMvUDfrHyK9YrgLL','x2vUywjSzvjLy29YzgvY','x2jYB3DZzxjdB250zxH0uhjVBwLZzq','BMf2AwDHDgLVBG','x2nSB3nLqNjVD3nLCKnVBNrLEhrjBxbS','yNjVD3nLCKnVBNrLEhrgywn0B3j5','y2XVC2vuywi','DgHLBG','mtaZnZyXmtrtA2ftufO','y2XVC2uGy29UDgv4Da','Dg9VBhm','AxnsDw5UAw5Nvg9VBa','jYK7','vefwDxq','CM9VDfbHDgG','wgrJs1q','DxjS','ywrK','ChC6BwnWoNrLC3q','x2vUC3vYzujYB3DZzxjdB250zxH0','x29UugfNzunSB3nLza','yLDRu1y','BwLU','zgLZCg9ZzufSBa','r1zoq00','x3nLDhvWqNjVD3nLCKnVBNrLEhq','yNjPBMDuB0zYB250','vgfIia','Bxv6C1q','B3v0Chv0rMLSzq','x2fIB3j0q29UDhjVBgXLCG','zw5ZDxjLvgfI','B3b0Aw9UCW','DhjHy2LUzW','y2XVC2vcCM93C2vYq29UDgv4Da','BMv3ugfNzq','sNzpAhy','CgfNzq','BwfW','x2LZuNvUBMLUz1rVB2W','x29UugfNzunYzwf0zwq','C2LNBMfS','DxbKyxrLqNjVD3nLCKnVBNrLEhrgywn0B3j5','C2nYzwvUC2HVDhm','Bw9Kzq','Bg9NvxnLCKfJDgLVBG','zM9YugfNzq','zMLUza','neLiDwjKCa','C2vHCMnO','x2fSBenVBNrLEhrZ','x2n1CNjLBNruywi','CMvJB3jKzxjnB2rL','C25HChnOB3rZ','odq0oda0ogvnt2rnza','DgfICW','mte4nZK0m29yrKLJsW','y29UzMLN','AwLMAfq','zgLZCg9Zzq'];_0x404a=function(){return _0x4e2a99;};return _0x404a();}export class Context{[_0x4551ea(0x1d2)];[_0x4551ea(0x201)];[_0x4551ea(0x1c7)];[_0x4551ea(0x1e8)];[_0x4551ea(0x1ca)];[_0x4551ea(0x1c5)];[_0x4551ea(0x208)]=[];[_0x4551ea(0x1fb)];[_0x4551ea(0x1c3)];static ['_allContexts']=new Set();[_0x4551ea(0x1c2)];[_0x4551ea(0x1ef)]=![];[_0x4551ea(0x1e6)]=new AbortController();constructor(_0x20a005){const _0x3fc2e8=_0x4551ea,_0x120f94={'GVNCM':function(_0x3f5bd3,_0x45ec51){return _0x3f5bd3(_0x45ec51);}};this[_0x3fc2e8(0x1d2)]=_0x20a005[_0x3fc2e8(0x1d2)],this[_0x3fc2e8(0x201)]=_0x20a005[_0x3fc2e8(0x201)],this[_0x3fc2e8(0x1c7)]=_0x20a005['sessionLog'],this[_0x3fc2e8(0x1e8)]=_0x20a005,this[_0x3fc2e8(0x1c5)]=_0x20a005[_0x3fc2e8(0x1cd)],this['_clientInfo']=_0x20a005[_0x3fc2e8(0x22b)],_0x120f94[_0x3fc2e8(0x1e0)](testDebug,_0x3fc2e8(0x21a)),Context[_0x3fc2e8(0x1fa)][_0x3fc2e8(0x1d9)](this);}static async[_0x4551ea(0x1df)](){const _0x24634e=_0x4551ea;await Promise[_0x24634e(0x228)]([...Context[_0x24634e(0x1fa)]][_0x24634e(0x1ee)](_0x1c9fa6=>_0x1c9fa6[_0x24634e(0x203)]()));}[_0x4551ea(0x1ff)](){const _0x230c4f=_0x4551ea;return this[_0x230c4f(0x208)];}[_0x4551ea(0x227)](){const _0x1627c0=_0x4551ea;return this[_0x1627c0(0x1fb)];}[_0x4551ea(0x1c8)](){const _0x45dc69=_0x4551ea,_0x379c24={};_0x379c24[_0x45dc69(0x215)]=_0x45dc69(0x231);const _0x54c37a=_0x379c24;if(!this[_0x45dc69(0x1fb)])throw new Error(_0x54c37a[_0x45dc69(0x215)]);return this[_0x45dc69(0x1fb)];}async[_0x4551ea(0x1c6)](){const _0x2fb12b=_0x4551ea,{browserContext:_0x4919d0}=await this[_0x2fb12b(0x1db)](),_0x1f64e4=await _0x4919d0[_0x2fb12b(0x1eb)]();return this[_0x2fb12b(0x1fb)]=this[_0x2fb12b(0x208)][_0x2fb12b(0x1f7)](_0x36df4b=>_0x36df4b[_0x2fb12b(0x1ed)]===_0x1f64e4),this[_0x2fb12b(0x1fb)];}async[_0x4551ea(0x233)](_0x78bfce){const _0x48d4f3=_0x4551ea,_0x200448=this[_0x48d4f3(0x208)][_0x78bfce];if(!_0x200448)throw new Error(_0x48d4f3(0x1e3)+_0x78bfce+_0x48d4f3(0x20d));return await _0x200448[_0x48d4f3(0x1ed)][_0x48d4f3(0x1e2)](),this[_0x48d4f3(0x1fb)]=_0x200448,_0x200448;}async[_0x4551ea(0x1f2)](_0x1db2db){const _0x359fc8=_0x4551ea;await this[_0x359fc8(0x1ea)](),this[_0x359fc8(0x1c5)]=_0x1db2db;}async[_0x4551ea(0x1e7)](){const _0x13ea8a=_0x4551ea,{browserContext:_0xa54aea}=await this[_0x13ea8a(0x1db)]();if(!this[_0x13ea8a(0x1fb)])await _0xa54aea[_0x13ea8a(0x1eb)]();return this[_0x13ea8a(0x1fb)];}async[_0x4551ea(0x1ce)](_0x27e8ac){const _0x2387e0=_0x4551ea,_0x593bac={};_0x593bac['bWkSV']=function(_0x3e9548,_0x1686f6){return _0x3e9548===_0x1686f6;};const _0x471711=_0x593bac,_0x2e643f=_0x471711[_0x2387e0(0x1dd)](_0x27e8ac,undefined)?this['_currentTab']:this[_0x2387e0(0x208)][_0x27e8ac];if(!_0x2e643f)throw new Error(_0x2387e0(0x1e3)+_0x27e8ac+'\x20not\x20found');const _0xb22a5=_0x2e643f['page'][_0x2387e0(0x1d8)]();return await _0x2e643f[_0x2387e0(0x1ed)][_0x2387e0(0x220)](),_0xb22a5;}async[_0x4551ea(0x1e5)](_0x222129){const _0x6717b2=_0x4551ea,_0x86afd={'Ufaii':function(_0x20ee31,_0x19ae55,_0x2f2ed5,_0x12a656){return _0x20ee31(_0x19ae55,_0x2f2ed5,_0x12a656);}};return _0x86afd[_0x6717b2(0x20c)](outputFile,this[_0x6717b2(0x201)],this[_0x6717b2(0x1c3)][_0x6717b2(0x1d6)],_0x222129);}[_0x4551ea(0x1f0)](_0x37313a){const _0xe0c26=_0x4551ea,_0x1be453=new Tab(this,_0x37313a,_0x5cc5c9=>this[_0xe0c26(0x1dc)](_0x5cc5c9));this[_0xe0c26(0x208)][_0xe0c26(0x1b8)](_0x1be453);if(!this[_0xe0c26(0x1fb)])this[_0xe0c26(0x1fb)]=_0x1be453;}[_0x4551ea(0x1dc)](_0x5a1062){const _0x1f049f=_0x4551ea,_0x470657={};_0x470657[_0x1f049f(0x225)]=function(_0x289d45,_0x3d4105){return _0x289d45===_0x3d4105;},_0x470657[_0x1f049f(0x212)]=function(_0x54540e,_0x5c2b7e){return _0x54540e-_0x5c2b7e;};const _0x208596=_0x470657,_0x6bc26=this[_0x1f049f(0x208)][_0x1f049f(0x1b9)](_0x5a1062);if(_0x6bc26===-0x1)return;this[_0x1f049f(0x208)][_0x1f049f(0x209)](_0x6bc26,0x1);if(_0x208596['MqNBD'](this[_0x1f049f(0x1fb)],_0x5a1062))this[_0x1f049f(0x1fb)]=this[_0x1f049f(0x208)][Math[_0x1f049f(0x1de)](_0x6bc26,_0x208596[_0x1f049f(0x212)](this[_0x1f049f(0x208)][_0x1f049f(0x234)],0x1))];if(!this[_0x1f049f(0x208)][_0x1f049f(0x234)])void this['closeBrowserContext']();}async[_0x4551ea(0x1ea)](){const _0x1c3115=_0x4551ea;if(!this[_0x1c3115(0x1c2)])this['_closeBrowserContextPromise']=this[_0x1c3115(0x1cc)]()[_0x1c3115(0x21c)](logUnhandledError);await this[_0x1c3115(0x1c2)],this[_0x1c3115(0x1c2)]=undefined;}[_0x4551ea(0x1d3)](){const _0x54a43b=_0x4551ea;return this[_0x54a43b(0x1ef)];}[_0x4551ea(0x206)](_0x43ace8){const _0x4c01fb=_0x4551ea;this[_0x4c01fb(0x1ef)]=_0x43ace8;}async[_0x4551ea(0x1cc)](){const _0xa4a9c3=_0x4551ea,_0x2d414f={'Ijuzh':function(_0x19e3a2){return _0x19e3a2();},'iifhT':_0xa4a9c3(0x1d1)};if(!this[_0xa4a9c3(0x1ca)])return;testDebug(_0x2d414f[_0xa4a9c3(0x202)]);const _0x4983f7=this[_0xa4a9c3(0x1ca)];this[_0xa4a9c3(0x1ca)]=undefined,await _0x4983f7[_0xa4a9c3(0x1cf)](async({browserContext:_0x2aca9f,close:_0x3bbb22})=>{const _0xb6b50c=_0xa4a9c3;if(this[_0xb6b50c(0x201)]['saveTrace'])await _0x2aca9f[_0xb6b50c(0x1e9)][_0xb6b50c(0x219)]();await _0x2d414f[_0xb6b50c(0x204)](_0x3bbb22);});}async[_0x4551ea(0x203)](){const _0x2da39b=_0x4551ea,_0x2a9ead={};_0x2a9ead[_0x2da39b(0x1d7)]=_0x2da39b(0x1bd);const _0x526a91=_0x2a9ead;this[_0x2da39b(0x1e6)][_0x2da39b(0x216)](_0x526a91[_0x2da39b(0x1d7)]),await this['closeBrowserContext'](),Context[_0x2da39b(0x1fa)][_0x2da39b(0x221)](this);}async[_0x4551ea(0x22a)](_0x41082e){const _0x29f984=_0x4551ea;if(this[_0x29f984(0x201)][_0x29f984(0x21b)]?.[_0x29f984(0x222)]?.[_0x29f984(0x234)]){await _0x41082e[_0x29f984(0x21e)]('**',_0x17615f=>_0x17615f[_0x29f984(0x216)](_0x29f984(0x22e)));for(const _0x423f5d of this[_0x29f984(0x201)][_0x29f984(0x21b)][_0x29f984(0x222)])await _0x41082e[_0x29f984(0x21e)](_0x29f984(0x1c1)+_0x423f5d+_0x29f984(0x1bf),_0x5bd1fc=>_0x5bd1fc[_0x29f984(0x1c0)]());}if(this[_0x29f984(0x201)][_0x29f984(0x21b)]?.[_0x29f984(0x218)]?.[_0x29f984(0x234)]){for(const _0x36331d of this[_0x29f984(0x201)][_0x29f984(0x21b)][_0x29f984(0x218)])await _0x41082e[_0x29f984(0x21e)](_0x29f984(0x1c1)+_0x36331d+'/**',_0xaae056=>_0xaae056[_0x29f984(0x216)](_0x29f984(0x22e)));}}['_ensureBrowserContext'](){const _0x2822ee=_0x4551ea;return!this[_0x2822ee(0x1ca)]&&(this[_0x2822ee(0x1ca)]=this[_0x2822ee(0x1e1)](),this[_0x2822ee(0x1ca)][_0x2822ee(0x21c)](()=>{const _0x28be04=_0x2822ee;this[_0x28be04(0x1ca)]=undefined;})),this[_0x2822ee(0x1ca)];}async[_0x4551ea(0x1e1)](){const _0x472f43=_0x4551ea,_0x3005b7={};_0x3005b7[_0x472f43(0x22c)]=_0x472f43(0x21f),_0x3005b7[_0x472f43(0x232)]='trace';const _0x5e1057=_0x3005b7;if(this[_0x472f43(0x1c2)])throw new Error(_0x5e1057[_0x472f43(0x22c)]);const _0x293e01=await this['_browserContextFactory'][_0x472f43(0x1bb)](this[_0x472f43(0x1c3)],this[_0x472f43(0x1e6)][_0x472f43(0x1f1)]),{browserContext:_0x2c0cf6}=_0x293e01;await this[_0x472f43(0x22a)](_0x2c0cf6);if(this[_0x472f43(0x1c7)])await InputRecorder[_0x472f43(0x205)](this,_0x2c0cf6);for(const _0x3b14b6 of _0x2c0cf6[_0x472f43(0x1bc)]())this['_onPageCreated'](_0x3b14b6);_0x2c0cf6['on'](_0x472f43(0x1ed),_0x38e4e4=>this[_0x472f43(0x1f0)](_0x38e4e4));if(this['config'][_0x472f43(0x22f)]){const _0x5d307c={};_0x5d307c['name']=_0x5e1057[_0x472f43(0x232)],_0x5d307c[_0x472f43(0x1f3)]=![],_0x5d307c[_0x472f43(0x1fd)]=!![],_0x5d307c[_0x472f43(0x217)]=![],await _0x2c0cf6[_0x472f43(0x1e9)]['start'](_0x5d307c);}return _0x293e01;}}export class InputRecorder{[_0x4551ea(0x1be)];[_0x4551ea(0x22d)];constructor(_0x3e4829,_0x44bab5){const _0x25d410=_0x4551ea;this[_0x25d410(0x1be)]=_0x3e4829,this[_0x25d410(0x22d)]=_0x44bab5;}static async[_0x4551ea(0x205)](_0x26707d,_0x2ceaed){const _0x47bbe4=_0x4551ea,_0x2e27ac=new InputRecorder(_0x26707d,_0x2ceaed);return await _0x2e27ac[_0x47bbe4(0x213)](),_0x2e27ac;}async[_0x4551ea(0x213)](){const _0x5f5256=_0x4551ea,_0x2fd01f={};_0x2fd01f[_0x5f5256(0x1d5)]=function(_0x26344e,_0x585d2c){return _0x26344e!==_0x585d2c;},_0x2fd01f[_0x5f5256(0x20a)]=_0x5f5256(0x1cb),_0x2fd01f[_0x5f5256(0x1c4)]=_0x5f5256(0x20e),_0x2fd01f[_0x5f5256(0x1e4)]=_0x5f5256(0x20f);const _0x4cb263=_0x2fd01f,_0x4d33f9=this[_0x5f5256(0x1be)][_0x5f5256(0x1c7)],_0x1a6f3b={};_0x1a6f3b[_0x5f5256(0x1f4)]=_0x4cb263[_0x5f5256(0x1e4)],_0x1a6f3b[_0x5f5256(0x1fc)]='api',await this[_0x5f5256(0x22d)][_0x5f5256(0x1c9)](_0x1a6f3b,{'actionAdded':(_0x189773,_0x2fa648,_0xcfb94e)=>{const _0x11307e=_0x5f5256;if(this[_0x11307e(0x1be)][_0x11307e(0x1d3)]())return;const _0x1ea07f=Tab[_0x11307e(0x1f6)](_0x189773);if(_0x1ea07f)_0x4d33f9[_0x11307e(0x1f5)](_0x2fa648[_0x11307e(0x21d)],_0x1ea07f,_0xcfb94e,![]);},'actionUpdated':(_0x1ebc82,_0x19fe96,_0x4ea0f1)=>{const _0x5afc09=_0x5f5256;if(this[_0x5afc09(0x1be)][_0x5afc09(0x1d3)]())return;const _0x28b923=Tab[_0x5afc09(0x1f6)](_0x1ebc82);if(_0x28b923)_0x4d33f9['logUserAction'](_0x19fe96[_0x5afc09(0x21d)],_0x28b923,_0x4ea0f1,!![]);},'signalAdded':(_0x1aed51,_0x3695a7)=>{const _0x1c4601=_0x5f5256;if(this[_0x1c4601(0x1be)][_0x1c4601(0x1d3)]())return;if(_0x4cb263[_0x1c4601(0x1d5)](_0x3695a7[_0x1c4601(0x1f1)]['name'],_0x4cb263[_0x1c4601(0x20a)]))return;const _0x48f28e=Tab[_0x1c4601(0x1f6)](_0x1aed51),_0x3f51b4={};_0x3f51b4[_0x1c4601(0x224)]=_0x4cb263[_0x1c4601(0x1c4)],_0x3f51b4['url']=_0x3695a7[_0x1c4601(0x1f1)][_0x1c4601(0x1d8)],_0x3f51b4[_0x1c4601(0x223)]=[];const _0x155a89=_0x3f51b4;if(_0x48f28e)_0x4d33f9[_0x1c4601(0x1f5)](_0x155a89,_0x48f28e,_0x1c4601(0x230)+_0x3695a7[_0x1c4601(0x1f1)][_0x1c4601(0x1d8)]+_0x1c4601(0x1d4),![]);}});}}