@poe-platform/safe-bash 0.1.679 → 0.1.681

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 (178) hide show
  1. package/README.md +1 -1
  2. package/dist/safe-bash/commands/playwright/index.d.ts.map +1 -1
  3. package/dist/safe-bash/commands/playwright/index.js +77 -4
  4. package/dist/safe-bash/commands/playwright/index.js.map +1 -1
  5. package/dist/safe-bash/commands/text-programs/awk-runtime.d.ts.map +1 -1
  6. package/dist/safe-bash/commands/text-programs/awk-runtime.js +1 -3
  7. package/dist/safe-bash/commands/text-programs/awk-runtime.js.map +1 -1
  8. package/dist/safe-bash/commands/text-programs/regex.d.ts +3 -1
  9. package/dist/safe-bash/commands/text-programs/regex.d.ts.map +1 -1
  10. package/dist/safe-bash/commands/text-programs/regex.js +13 -7
  11. package/dist/safe-bash/commands/text-programs/regex.js.map +1 -1
  12. package/dist/safe-bash/core.browser.js +12 -9
  13. package/dist/safe-bash/core.browser.js.map +2 -2
  14. package/dist/safe-bash/playwright/abilities.d.ts +24 -5
  15. package/dist/safe-bash/playwright/abilities.d.ts.map +1 -1
  16. package/dist/safe-bash/playwright/abilities.js +9 -4
  17. package/dist/safe-bash/playwright/abilities.js.map +1 -1
  18. package/dist/safe-bash/playwright/ability-execution.d.ts +6 -1
  19. package/dist/safe-bash/playwright/ability-execution.d.ts.map +1 -1
  20. package/dist/safe-bash/playwright/ability-execution.js +77 -5
  21. package/dist/safe-bash/playwright/ability-execution.js.map +1 -1
  22. package/dist/safe-bash/playwright/adapter.d.ts +467 -11
  23. package/dist/safe-bash/playwright/adapter.d.ts.map +1 -1
  24. package/dist/safe-bash/playwright/adapter.js +213 -4
  25. package/dist/safe-bash/playwright/adapter.js.map +1 -1
  26. package/dist/safe-bash/playwright/builtins.d.ts +44 -4
  27. package/dist/safe-bash/playwright/builtins.d.ts.map +1 -1
  28. package/dist/safe-bash/playwright/builtins.js +14 -9
  29. package/dist/safe-bash/playwright/builtins.js.map +1 -1
  30. package/dist/safe-bash/playwright/canonical-locator-parser.d.ts +5 -0
  31. package/dist/safe-bash/playwright/canonical-locator-parser.d.ts.map +1 -0
  32. package/dist/safe-bash/playwright/canonical-locator-parser.js +146 -0
  33. package/dist/safe-bash/playwright/canonical-locator-parser.js.map +1 -0
  34. package/dist/safe-bash/playwright/capability-events.d.ts +15 -0
  35. package/dist/safe-bash/playwright/capability-events.d.ts.map +1 -0
  36. package/dist/safe-bash/playwright/capability-events.js +265 -0
  37. package/dist/safe-bash/playwright/capability-events.js.map +1 -0
  38. package/dist/safe-bash/playwright/capability-result.d.ts +33 -0
  39. package/dist/safe-bash/playwright/capability-result.d.ts.map +1 -0
  40. package/dist/safe-bash/playwright/capability-result.js +72 -0
  41. package/dist/safe-bash/playwright/capability-result.js.map +1 -0
  42. package/dist/safe-bash/playwright/config-ini.d.ts +3 -0
  43. package/dist/safe-bash/playwright/config-ini.d.ts.map +1 -0
  44. package/dist/safe-bash/playwright/config-ini.js +161 -0
  45. package/dist/safe-bash/playwright/config-ini.js.map +1 -0
  46. package/dist/safe-bash/playwright/controller.d.ts +39 -1
  47. package/dist/safe-bash/playwright/controller.d.ts.map +1 -1
  48. package/dist/safe-bash/playwright/controller.js +913 -77
  49. package/dist/safe-bash/playwright/controller.js.map +1 -1
  50. package/dist/safe-bash/playwright/devices.d.ts +229 -0
  51. package/dist/safe-bash/playwright/devices.d.ts.map +1 -0
  52. package/dist/safe-bash/playwright/devices.js +2740 -0
  53. package/dist/safe-bash/playwright/devices.js.map +1 -0
  54. package/dist/safe-bash/playwright/download-capabilities.d.ts +15 -0
  55. package/dist/safe-bash/playwright/download-capabilities.d.ts.map +1 -0
  56. package/dist/safe-bash/playwright/download-capabilities.js +161 -0
  57. package/dist/safe-bash/playwright/download-capabilities.js.map +1 -0
  58. package/dist/safe-bash/playwright/drop-capability.d.ts +3 -0
  59. package/dist/safe-bash/playwright/drop-capability.d.ts.map +1 -0
  60. package/dist/safe-bash/playwright/drop-capability.js +50 -0
  61. package/dist/safe-bash/playwright/drop-capability.js.map +1 -0
  62. package/dist/safe-bash/playwright/find.d.ts +8 -0
  63. package/dist/safe-bash/playwright/find.d.ts.map +1 -0
  64. package/dist/safe-bash/playwright/find.js +68 -0
  65. package/dist/safe-bash/playwright/find.js.map +1 -0
  66. package/dist/safe-bash/playwright/generated-locator.d.ts +4 -0
  67. package/dist/safe-bash/playwright/generated-locator.d.ts.map +1 -0
  68. package/dist/safe-bash/playwright/generated-locator.js +22 -0
  69. package/dist/safe-bash/playwright/generated-locator.js.map +1 -0
  70. package/dist/safe-bash/playwright/help.d.ts +4 -3
  71. package/dist/safe-bash/playwright/help.d.ts.map +1 -1
  72. package/dist/safe-bash/playwright/help.js +7 -52
  73. package/dist/safe-bash/playwright/help.js.map +1 -1
  74. package/dist/safe-bash/playwright/highlight.d.ts +8 -0
  75. package/dist/safe-bash/playwright/highlight.d.ts.map +1 -0
  76. package/dist/safe-bash/playwright/highlight.js +82 -0
  77. package/dist/safe-bash/playwright/highlight.js.map +1 -0
  78. package/dist/safe-bash/playwright/index.d.ts +5 -0
  79. package/dist/safe-bash/playwright/index.d.ts.map +1 -1
  80. package/dist/safe-bash/playwright/index.js +4 -0
  81. package/dist/safe-bash/playwright/index.js.map +1 -1
  82. package/dist/safe-bash/playwright/invocation.d.ts +24 -0
  83. package/dist/safe-bash/playwright/invocation.d.ts.map +1 -1
  84. package/dist/safe-bash/playwright/invocation.js +42 -10
  85. package/dist/safe-bash/playwright/invocation.js.map +1 -1
  86. package/dist/safe-bash/playwright/locator-selector.d.ts +5 -0
  87. package/dist/safe-bash/playwright/locator-selector.d.ts.map +1 -0
  88. package/dist/safe-bash/playwright/locator-selector.js +70 -0
  89. package/dist/safe-bash/playwright/locator-selector.js.map +1 -0
  90. package/dist/safe-bash/playwright/modal-capabilities.d.ts +20 -0
  91. package/dist/safe-bash/playwright/modal-capabilities.d.ts.map +1 -0
  92. package/dist/safe-bash/playwright/modal-capabilities.js +137 -0
  93. package/dist/safe-bash/playwright/modal-capabilities.js.map +1 -0
  94. package/dist/safe-bash/playwright/native-json-snapshot.d.ts +17 -0
  95. package/dist/safe-bash/playwright/native-json-snapshot.d.ts.map +1 -0
  96. package/dist/safe-bash/playwright/native-json-snapshot.js +94 -0
  97. package/dist/safe-bash/playwright/native-json-snapshot.js.map +1 -0
  98. package/dist/safe-bash/playwright/native-snapshot.d.ts +17 -0
  99. package/dist/safe-bash/playwright/native-snapshot.d.ts.map +1 -0
  100. package/dist/safe-bash/playwright/native-snapshot.js +164 -0
  101. package/dist/safe-bash/playwright/native-snapshot.js.map +1 -0
  102. package/dist/safe-bash/playwright/network-policy.d.ts +2 -0
  103. package/dist/safe-bash/playwright/network-policy.d.ts.map +1 -1
  104. package/dist/safe-bash/playwright/network-policy.js +1 -1
  105. package/dist/safe-bash/playwright/network-policy.js.map +1 -1
  106. package/dist/safe-bash/playwright/open-options.d.ts +14 -0
  107. package/dist/safe-bash/playwright/open-options.d.ts.map +1 -0
  108. package/dist/safe-bash/playwright/open-options.js +279 -0
  109. package/dist/safe-bash/playwright/open-options.js.map +1 -0
  110. package/dist/safe-bash/playwright/recording-capabilities.d.ts +6 -0
  111. package/dist/safe-bash/playwright/recording-capabilities.d.ts.map +1 -0
  112. package/dist/safe-bash/playwright/recording-capabilities.js +83 -0
  113. package/dist/safe-bash/playwright/recording-capabilities.js.map +1 -0
  114. package/dist/safe-bash/playwright/resource-limit.d.ts +6 -0
  115. package/dist/safe-bash/playwright/resource-limit.d.ts.map +1 -0
  116. package/dist/safe-bash/playwright/resource-limit.js +8 -0
  117. package/dist/safe-bash/playwright/resource-limit.js.map +1 -0
  118. package/dist/safe-bash/playwright/response.d.ts +22 -0
  119. package/dist/safe-bash/playwright/response.d.ts.map +1 -0
  120. package/dist/safe-bash/playwright/response.js +43 -0
  121. package/dist/safe-bash/playwright/response.js.map +1 -0
  122. package/dist/safe-bash/playwright/route-capabilities.d.ts +25 -0
  123. package/dist/safe-bash/playwright/route-capabilities.d.ts.map +1 -0
  124. package/dist/safe-bash/playwright/route-capabilities.js +138 -0
  125. package/dist/safe-bash/playwright/route-capabilities.js.map +1 -0
  126. package/dist/safe-bash/playwright/screenshot.d.ts +3 -1
  127. package/dist/safe-bash/playwright/screenshot.d.ts.map +1 -1
  128. package/dist/safe-bash/playwright/screenshot.js +15 -12
  129. package/dist/safe-bash/playwright/screenshot.js.map +1 -1
  130. package/dist/safe-bash/playwright/session-configuration.d.ts +35 -0
  131. package/dist/safe-bash/playwright/session-configuration.d.ts.map +1 -0
  132. package/dist/safe-bash/playwright/session-configuration.js +50 -0
  133. package/dist/safe-bash/playwright/session-configuration.js.map +1 -0
  134. package/dist/safe-bash/playwright/session-runtime.d.ts +8 -0
  135. package/dist/safe-bash/playwright/session-runtime.d.ts.map +1 -0
  136. package/dist/safe-bash/playwright/session-runtime.js +96 -0
  137. package/dist/safe-bash/playwright/session-runtime.js.map +1 -0
  138. package/dist/safe-bash/playwright/snapshot.d.ts +15 -2
  139. package/dist/safe-bash/playwright/snapshot.d.ts.map +1 -1
  140. package/dist/safe-bash/playwright/snapshot.js +66 -7
  141. package/dist/safe-bash/playwright/snapshot.js.map +1 -1
  142. package/dist/safe-bash/playwright/standard-capabilities.d.ts +4 -0
  143. package/dist/safe-bash/playwright/standard-capabilities.d.ts.map +1 -0
  144. package/dist/safe-bash/playwright/standard-capabilities.js +248 -0
  145. package/dist/safe-bash/playwright/standard-capabilities.js.map +1 -0
  146. package/dist/safe-bash/playwright/storage-capabilities.d.ts +4 -0
  147. package/dist/safe-bash/playwright/storage-capabilities.d.ts.map +1 -0
  148. package/dist/safe-bash/playwright/storage-capabilities.js +120 -0
  149. package/dist/safe-bash/playwright/storage-capabilities.js.map +1 -0
  150. package/dist/safe-bash/playwright/storage-state.d.ts +8 -0
  151. package/dist/safe-bash/playwright/storage-state.d.ts.map +1 -0
  152. package/dist/safe-bash/playwright/storage-state.js +122 -0
  153. package/dist/safe-bash/playwright/storage-state.js.map +1 -0
  154. package/dist/safe-bash/playwright/target-screenshot.d.ts +9 -0
  155. package/dist/safe-bash/playwright/target-screenshot.d.ts.map +1 -0
  156. package/dist/safe-bash/playwright/target-screenshot.js +28 -0
  157. package/dist/safe-bash/playwright/target-screenshot.js.map +1 -0
  158. package/dist/safe-bash/playwright/targets.d.ts +12 -0
  159. package/dist/safe-bash/playwright/targets.d.ts.map +1 -0
  160. package/dist/safe-bash/playwright/targets.js +36 -0
  161. package/dist/safe-bash/playwright/targets.js.map +1 -0
  162. package/dist/safe-bash/playwright/tracing-capabilities.d.ts +12 -0
  163. package/dist/safe-bash/playwright/tracing-capabilities.d.ts.map +1 -0
  164. package/dist/safe-bash/playwright/tracing-capabilities.js +100 -0
  165. package/dist/safe-bash/playwright/tracing-capabilities.js.map +1 -0
  166. package/dist/safe-bash/playwright/webmcp-capabilities.d.ts +6 -0
  167. package/dist/safe-bash/playwright/webmcp-capabilities.d.ts.map +1 -0
  168. package/dist/safe-bash/playwright/webmcp-capabilities.js +122 -0
  169. package/dist/safe-bash/playwright/webmcp-capabilities.js.map +1 -0
  170. package/dist/safe-bash/playwright/workspace-assets.d.ts +5 -0
  171. package/dist/safe-bash/playwright/workspace-assets.d.ts.map +1 -0
  172. package/dist/safe-bash/playwright/workspace-assets.js +17 -0
  173. package/dist/safe-bash/playwright/workspace-assets.js.map +1 -0
  174. package/dist/safe-bash/playwright/workspace.d.ts +3 -0
  175. package/dist/safe-bash/playwright/workspace.d.ts.map +1 -0
  176. package/dist/safe-bash/playwright/workspace.js +48 -0
  177. package/dist/safe-bash/playwright/workspace.js.map +1 -0
  178. package/package.json +2 -2
@@ -0,0 +1,279 @@
1
+ import { PlaywrightResourceLimitError } from './resource-limit.js';
2
+ import { parsePlaywrightStorageState } from './storage-state.js';
3
+ import { parsePlaywrightSessionConfiguration } from './session-configuration.js';
4
+ import { parsePlaywrightIniConfig } from './config-ini.js';
5
+ const contextKeys = new Set(['storageState', 'userAgent', 'viewport', 'screen', 'deviceScaleFactor', 'isMobile', 'hasTouch', 'locale', 'timezoneId', 'colorScheme', 'reducedMotion', 'forcedColors', 'javaScriptEnabled', 'ignoreHTTPSErrors', 'acceptDownloads', 'permissions', 'geolocation', 'extraHTTPHeaders', 'baseURL', 'offline', 'strictSelectors', 'bypassCSP', 'httpCredentials', 'serviceWorkers']);
6
+ function object(value, name) {
7
+ if (!value || typeof value !== 'object' || Array.isArray(value))
8
+ throw new Error(`Invalid ${name}`);
9
+ return value;
10
+ }
11
+ function keys(value, allowed, name) {
12
+ for (const key of Object.keys(value))
13
+ if (!allowed.has(key))
14
+ throw new Error(`Unsupported ${name}: ${key}`);
15
+ }
16
+ /** Provider-safe context settings shared by config and persisted session restoration. */
17
+ export function parsePlaywrightContextOptions(value, maxBytes = 8 * 1024 * 1024) {
18
+ const context = { ...object(value, 'browser context options') };
19
+ keys(context, contextKeys, 'browser context option');
20
+ const encoded = JSON.stringify(context);
21
+ if (new TextEncoder().encode(encoded).byteLength > maxBytes)
22
+ throw new PlaywrightResourceLimitError('Browser context options byte limit exceeded');
23
+ for (const key of ['userAgent', 'locale', 'timezoneId', 'baseURL'])
24
+ if (context[key] !== undefined && typeof context[key] !== 'string')
25
+ throw new Error(`Invalid browser context option: ${key}`);
26
+ for (const key of ['isMobile', 'hasTouch', 'javaScriptEnabled', 'ignoreHTTPSErrors', 'acceptDownloads', 'offline', 'strictSelectors', 'bypassCSP'])
27
+ if (context[key] !== undefined && typeof context[key] !== 'boolean')
28
+ throw new Error(`Invalid browser context option: ${key}`);
29
+ for (const [key, values] of Object.entries({ colorScheme: ['light', 'dark', 'no-preference', null], reducedMotion: ['reduce', 'no-preference', null], forcedColors: ['active', 'none', null], serviceWorkers: ['block'] })) {
30
+ if (context[key] !== undefined && !values.includes(context[key]))
31
+ throw new Error(`Unsupported browser context option: ${key}=${String(context[key])}`);
32
+ }
33
+ for (const key of ['viewport', 'screen']) {
34
+ if (context[key] === undefined || key === 'viewport' && context[key] === null)
35
+ continue;
36
+ const size = object(context[key], key);
37
+ keys(size, new Set(['width', 'height']), key);
38
+ if (![size.width, size.height].every(value => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0))
39
+ throw new Error(`Invalid browser context option: ${key}`);
40
+ }
41
+ if (context.deviceScaleFactor !== undefined && (typeof context.deviceScaleFactor !== 'number' || !Number.isFinite(context.deviceScaleFactor) || context.deviceScaleFactor <= 0))
42
+ throw new Error('Invalid deviceScaleFactor');
43
+ if (context.permissions !== undefined && (!Array.isArray(context.permissions) || context.permissions.some(value => typeof value !== 'string')))
44
+ throw new Error('Invalid context permissions');
45
+ if (context.extraHTTPHeaders !== undefined && Object.values(object(context.extraHTTPHeaders, 'extraHTTPHeaders')).some(value => typeof value !== 'string'))
46
+ throw new Error('Invalid context headers');
47
+ if (context.httpCredentials !== undefined) {
48
+ const credentials = object(context.httpCredentials, 'httpCredentials');
49
+ keys(credentials, new Set(['username', 'password', 'origin', 'send']), 'httpCredentials');
50
+ if (typeof credentials.username !== 'string' || typeof credentials.password !== 'string' || credentials.origin !== undefined && typeof credentials.origin !== 'string' || credentials.send !== undefined && !['unauthorized', 'always'].includes(credentials.send))
51
+ throw new Error('Invalid httpCredentials');
52
+ }
53
+ if (context.geolocation !== undefined) {
54
+ const geo = object(context.geolocation, 'geolocation');
55
+ keys(geo, new Set(['longitude', 'latitude', 'accuracy']), 'geolocation');
56
+ if (typeof geo.longitude !== 'number' || !Number.isFinite(geo.longitude) || Math.abs(geo.longitude) > 180 || typeof geo.latitude !== 'number' || !Number.isFinite(geo.latitude) || Math.abs(geo.latitude) > 90 || geo.accuracy !== undefined && (typeof geo.accuracy !== 'number' || !Number.isFinite(geo.accuracy) || geo.accuracy < 0))
57
+ throw new Error('Invalid geolocation');
58
+ }
59
+ if (context.storageState !== undefined)
60
+ context.storageState = parsePlaywrightStorageState(context.storageState, { maxBytes });
61
+ return structuredClone(context);
62
+ }
63
+ /** Resolve standard CLI configuration using only the invocation's bounded VFS. */
64
+ export async function resolvePlaywrightOpenOptions(options, invocation, adapter, maxBytes) {
65
+ const env = invocation.env;
66
+ const stringEnv = (name) => env[name]?.trim() || undefined;
67
+ const boolEnv = (name) => env[name] === 'true' || env[name] === '1' ? true : env[name] === 'false' || env[name] === '0' ? false : undefined;
68
+ const relative = (path, file) => path.startsWith('/') ? path : file.slice(0, file.lastIndexOf('/') + 1) + path;
69
+ const read = async (filename, configuration = false) => {
70
+ if (!invocation.readArtifact)
71
+ throw new Error('Artifact byte source unsupported');
72
+ invocation.signal.throwIfAborted();
73
+ const bytes = await invocation.readArtifact(filename, maxBytes);
74
+ invocation.signal.throwIfAborted();
75
+ if (!(bytes instanceof Uint8Array) || bytes.byteLength > maxBytes)
76
+ throw new PlaywrightResourceLimitError('Playwright configuration byte limit exceeded');
77
+ const text = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
78
+ return configuration && filename.endsWith('.ini') ? parsePlaywrightIniConfig(text) : JSON.parse(text);
79
+ };
80
+ let selectedConfig = typeof options.config === 'string' ? options.config : stringEnv('PLAYWRIGHT_MCP_CONFIG');
81
+ let filename = selectedConfig ?? '.playwright/cli.config.json';
82
+ const load = async (file, optional) => {
83
+ if (!invocation.readArtifact && optional)
84
+ return undefined;
85
+ let loaded;
86
+ try {
87
+ loaded = object(await read(file, true), 'Playwright configuration');
88
+ }
89
+ catch (error) {
90
+ if (!optional || !error || typeof error !== 'object' || Reflect.get(error, 'code') !== 'ENOENT')
91
+ throw error;
92
+ return undefined;
93
+ }
94
+ if (loaded.browser !== undefined) {
95
+ const browser = { ...object(loaded.browser, 'browser configuration') };
96
+ if (browser.contextOptions !== undefined) {
97
+ const context = { ...object(browser.contextOptions, 'browser context options') };
98
+ if (typeof context.storageState === 'string')
99
+ context.storageState = relative(context.storageState, file);
100
+ browser.contextOptions = context;
101
+ }
102
+ if (Array.isArray(browser.initScript))
103
+ browser.initScript = browser.initScript.map(path => typeof path === 'string' ? relative(path, file) : path);
104
+ if (Array.isArray(browser.initPage))
105
+ browser.initPage = browser.initPage.map(path => typeof path === 'string' ? relative(path, file) : path);
106
+ loaded = { ...loaded, browser };
107
+ }
108
+ if (typeof loaded.outputDir === 'string')
109
+ loaded.outputDir = relative(loaded.outputDir, file);
110
+ return loaded;
111
+ };
112
+ let preloaded;
113
+ if (options.config === undefined && stringEnv('PLAYWRIGHT_MCP_CONFIG')) {
114
+ const defaultFile = '.playwright/cli.config.json';
115
+ const exists = invocation.workspace ? await invocation.workspace.exists(defaultFile) : (preloaded = await load(defaultFile, true)) !== undefined;
116
+ if (exists) {
117
+ selectedConfig = undefined;
118
+ filename = defaultFile;
119
+ }
120
+ }
121
+ const globalHome = stringEnv('PWTEST_CLI_GLOBAL_CONFIG') ?? invocation.workspace?.home ?? stringEnv('HOME');
122
+ const global = globalHome ? await load(globalHome.replace(/\/$/, '') + '/.playwright/cli.config.json', true) ?? {} : {};
123
+ const local = preloaded ?? await load(filename, selectedConfig === undefined) ?? {};
124
+ const globalBrowser = global.browser === undefined ? {} : object(global.browser, 'browser configuration');
125
+ const localBrowser = local.browser === undefined ? {} : object(local.browser, 'browser configuration');
126
+ const mergeObject = (base, override, name) => ({ ...(base === undefined ? {} : object(base, name)), ...(override === undefined ? {} : object(override, name)) });
127
+ const config = { ...global, ...local,
128
+ browser: { ...globalBrowser, ...localBrowser, launchOptions: mergeObject(globalBrowser.launchOptions, localBrowser.launchOptions, 'browser launch options'), contextOptions: mergeObject(globalBrowser.contextOptions, localBrowser.contextOptions, 'browser context options') },
129
+ timeouts: mergeObject(global.timeouts, local.timeouts, 'Playwright timeouts'),
130
+ network: mergeObject(global.network, local.network, 'network configuration'),
131
+ console: mergeObject(global.console, local.console, 'console configuration'),
132
+ snapshot: mergeObject(global.snapshot, local.snapshot, 'snapshot configuration'),
133
+ };
134
+ keys(config, new Set(['browser', 'timeouts', 'network', 'console', 'snapshot', 'outputDir', 'outputMaxSize', 'testIdAttribute', 'codegen']), 'Playwright configuration');
135
+ const browserConfig = config.browser === undefined ? {} : object(config.browser, 'browser configuration');
136
+ keys(browserConfig, new Set(['browserName', 'isolated', 'userDataDir', 'launchOptions', 'contextOptions', 'initScript', 'initPage']), 'browser configuration');
137
+ if (options.persistent || options.profile !== undefined || browserConfig.userDataDir !== undefined || browserConfig.isolated === false || stringEnv('PLAYWRIGHT_MCP_USER_DATA_DIR') || boolEnv('PLAYWRIGHT_MCP_ISOLATED') === false)
138
+ throw new Error('Persistent browser profiles are unsupported by this browser provider');
139
+ const launch = browserConfig.launchOptions === undefined ? {} : object(browserConfig.launchOptions, 'browser launch options');
140
+ keys(launch, new Set(['headless']), 'browser launch option');
141
+ if (launch.headless !== undefined && typeof launch.headless !== 'boolean')
142
+ throw new Error('Invalid browser headless option');
143
+ const selectedBrowser = options.browser ?? stringEnv('PLAYWRIGHT_MCP_BROWSER') ?? browserConfig.browserName ?? 'chromium';
144
+ const browser = selectedBrowser === 'chrome' ? 'chromium' : selectedBrowser;
145
+ if (browser !== 'chromium' && browser !== 'firefox' && browser !== 'webkit')
146
+ throw new Error(`Unsupported browser: ${String(browser)}`);
147
+ const headless = options.headed ? false : options.headless ? true : boolEnv('PLAYWRIGHT_MCP_HEADLESS') ?? launch.headless !== false;
148
+ const capability = adapter.browsers[browser];
149
+ if (!capability)
150
+ throw new Error(`Unsupported browser: ${browser}`);
151
+ if (!headless && !capability.headed)
152
+ throw new Error(`Headed mode is unsupported for ${browser}`);
153
+ let context = browserConfig.contextOptions === undefined ? {} : { ...object(browserConfig.contextOptions, 'browser context options') };
154
+ keys(context, contextKeys, 'browser context option');
155
+ if (context.serviceWorkers === 'allow')
156
+ throw new Error('Unsupported browser context option: serviceWorkers=allow');
157
+ const deviceContext = (deviceName, mobile, selected) => {
158
+ if (mobile && deviceName)
159
+ throw new Error('Cannot use --mobile together with --device, pick one.');
160
+ if (mobile && selected === 'firefox')
161
+ throw new Error('--mobile is not supported with the Firefox browser.');
162
+ if (mobile)
163
+ deviceName = selected === 'webkit' ? 'iPhone 17' : 'Pixel 10';
164
+ if (deviceName === undefined)
165
+ return {};
166
+ if (typeof deviceName !== 'string')
167
+ throw new Error('Invalid device name');
168
+ const device = adapter.devices?.[deviceName];
169
+ if (!device)
170
+ throw new Error(`Unknown device: ${deviceName}`);
171
+ const { defaultBrowserType: ignoredDefaultBrowserType, ...deviceOptions } = device;
172
+ return deviceOptions;
173
+ };
174
+ context = { ...context, ...deviceContext(stringEnv('PLAYWRIGHT_MCP_DEVICE'), boolEnv('PLAYWRIGHT_MCP_MOBILE') === true, stringEnv('PLAYWRIGHT_MCP_BROWSER')) };
175
+ for (const [name, key] of [['PLAYWRIGHT_MCP_USER_AGENT', 'userAgent'], ['PLAYWRIGHT_MCP_STORAGE_STATE', 'storageState']])
176
+ if (stringEnv(name) !== undefined)
177
+ context[key] = stringEnv(name);
178
+ if (boolEnv('PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS'))
179
+ context.ignoreHTTPSErrors = true;
180
+ if (boolEnv('PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS'))
181
+ context.serviceWorkers = 'block';
182
+ if (stringEnv('PLAYWRIGHT_MCP_GRANT_PERMISSIONS'))
183
+ context.permissions = stringEnv('PLAYWRIGHT_MCP_GRANT_PERMISSIONS').split(',').map(value => value.trim());
184
+ const viewport = stringEnv('PLAYWRIGHT_MCP_VIEWPORT_SIZE');
185
+ if (viewport) {
186
+ const dimensions = viewport.split(viewport.includes('x') ? 'x' : ',').map(Number);
187
+ if (dimensions.length !== 2 || dimensions.some(value => !Number.isSafeInteger(value) || value <= 0))
188
+ throw new Error('Invalid resolution format: use --viewport-size="800x600"');
189
+ context.viewport = { width: dimensions[0], height: dimensions[1] };
190
+ }
191
+ context = { ...context, ...deviceContext(options.device, options.mobile === true, options.browser) };
192
+ if (context.viewport === undefined)
193
+ context.viewport = headless ? { width: 1280, height: 720 } : null;
194
+ if (context.storageState !== undefined) {
195
+ const stateFile = context.storageState;
196
+ const value = typeof stateFile === 'string' ? await read(stateFile) : stateFile;
197
+ context.storageState = parsePlaywrightStorageState(value, { maxBytes });
198
+ }
199
+ const timeouts = config.timeouts === undefined ? {} : object(config.timeouts, 'Playwright timeouts');
200
+ keys(timeouts, new Set(['idle', 'action', 'navigation', 'settle', 'expect']), 'Playwright timeout');
201
+ for (const [name, key] of [['PLAYWRIGHT_MCP_TIMEOUT_ACTION', 'action'], ['PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION', 'navigation'], ['PLAYWRIGHT_MCP_TIMEOUT_SETTLE', 'settle']])
202
+ if (stringEnv(name) !== undefined)
203
+ timeouts[key] = Number(stringEnv(name));
204
+ const idle = options['idle-timeout'] ?? stringEnv('PLAYWRIGHT_MCP_IDLE_TIMEOUT') ?? timeouts.idle ?? (headless ? 3_600_000 : 0);
205
+ const idleTimeoutMs = typeof idle === 'string' && idle.trim() !== '' ? Number(idle) : idle;
206
+ if (typeof idleTimeoutMs !== 'number' || !Number.isSafeInteger(idleTimeoutMs) || idleTimeoutMs < 0)
207
+ throw new Error('Invalid idle timeout');
208
+ const effective = {};
209
+ if (selectedConfig !== undefined || Object.keys(local).length)
210
+ effective.configFile = filename;
211
+ for (const name of ['testIdAttribute', 'outputDir', 'outputMaxSize', 'codegen'])
212
+ if (config[name] !== undefined)
213
+ effective[name] = config[name];
214
+ for (const name of ['network', 'console', 'snapshot'])
215
+ if (Object.keys(config[name]).length)
216
+ effective[name] = config[name];
217
+ for (const [envName, key] of [['PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE', 'testIdAttribute'], ['PLAYWRIGHT_MCP_OUTPUT_DIR', 'outputDir'], ['PLAYWRIGHT_MCP_CODEGEN', 'codegen']])
218
+ if (stringEnv(envName))
219
+ effective[key] = stringEnv(envName);
220
+ if (stringEnv('PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE'))
221
+ effective.outputMaxSize = Number(stringEnv('PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE'));
222
+ const network = effective.network === undefined ? {} : object(effective.network, 'network configuration');
223
+ for (const [envName, key] of [['PLAYWRIGHT_MCP_ALLOWED_ORIGINS', 'allowedOrigins'], ['PLAYWRIGHT_MCP_BLOCKED_ORIGINS', 'blockedOrigins']])
224
+ if (stringEnv(envName))
225
+ network[key] = stringEnv(envName).split(';').map(value => value.trim());
226
+ if (Object.keys(network).length)
227
+ effective.network = network;
228
+ if (stringEnv('PLAYWRIGHT_MCP_CONSOLE_LEVEL'))
229
+ effective.console = { ...object(config.console, 'console configuration'), level: stringEnv('PLAYWRIGHT_MCP_CONSOLE_LEVEL') };
230
+ // The canonical CLI overrides snapshot mode to full after file/environment config.
231
+ if (effective.snapshot !== undefined)
232
+ effective.snapshot = { ...object(effective.snapshot, 'snapshot configuration'), mode: 'full' };
233
+ if (boolEnv('PLAYWRIGHT_MCP_SNAPSHOT_BOXES') !== undefined)
234
+ effective.snapshot = { ...effective.snapshot, mode: 'full', boxes: boolEnv('PLAYWRIGHT_MCP_SNAPSHOT_BOXES') };
235
+ const commandTimeouts = Object.fromEntries(Object.entries(timeouts).filter(([name]) => name !== 'idle'));
236
+ if (Object.keys(commandTimeouts).length)
237
+ effective.timeouts = commandTimeouts;
238
+ const initScript = stringEnv('PLAYWRIGHT_MCP_INIT_SCRIPT') ? [stringEnv('PLAYWRIGHT_MCP_INIT_SCRIPT')] : browserConfig.initScript;
239
+ if (initScript !== undefined) {
240
+ if (!Array.isArray(initScript) || initScript.some(path => typeof path !== 'string'))
241
+ throw new Error('Invalid browser initScript');
242
+ if (!invocation.readArtifact)
243
+ throw new Error('Artifact byte source unsupported');
244
+ const contents = [];
245
+ effective.initScripts = contents;
246
+ effective.initScriptFiles = initScript;
247
+ let bytesRead = 0;
248
+ for (const script of initScript) {
249
+ const bytes = await invocation.readArtifact(script, maxBytes - bytesRead);
250
+ invocation.signal.throwIfAborted();
251
+ bytesRead += bytes.byteLength;
252
+ if (bytesRead > maxBytes)
253
+ throw new PlaywrightResourceLimitError('Playwright init script byte limit exceeded');
254
+ contents.push(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
255
+ }
256
+ }
257
+ const initPage = stringEnv('PLAYWRIGHT_MCP_INIT_PAGE') ? [stringEnv('PLAYWRIGHT_MCP_INIT_PAGE')] : browserConfig.initPage;
258
+ if (initPage !== undefined) {
259
+ if (!Array.isArray(initPage) || initPage.some(path => typeof path !== 'string'))
260
+ throw new Error('Invalid browser initPage');
261
+ if (!invocation.readArtifact)
262
+ throw new Error('Artifact byte source unsupported');
263
+ const pages = [];
264
+ effective.initPages = pages;
265
+ let bytesRead = 0;
266
+ for (const filename of initPage) {
267
+ const bytes = await invocation.readArtifact(filename, maxBytes - bytesRead);
268
+ invocation.signal.throwIfAborted();
269
+ bytesRead += bytes.byteLength;
270
+ if (bytesRead > maxBytes)
271
+ throw new PlaywrightResourceLimitError('Playwright init page byte limit exceeded');
272
+ pages.push({ filename, source: new TextDecoder('utf-8', { fatal: true }).decode(bytes) });
273
+ }
274
+ }
275
+ return { browser, headless, contextOptions: parsePlaywrightContextOptions(context, maxBytes), idleTimeoutMs,
276
+ ...(Object.keys(effective).length ? { configuration: parsePlaywrightSessionConfiguration(effective, maxBytes) } : {}),
277
+ };
278
+ }
279
+ //# sourceMappingURL=open-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-options.js","sourceRoot":"","sources":["../../src/playwright/open-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { PlaywrightAbility } from './abilities.js';
2
+ export declare const playwrightRecordingAbilities: {
3
+ 'recording-start': PlaywrightAbility;
4
+ 'recording-stop': PlaywrightAbility;
5
+ };
6
+ //# sourceMappingURL=recording-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording-capabilities.d.ts","sourceRoot":"","sources":["../../src/playwright/recording-capabilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAiExD,eAAO,MAAM,4BAA4B;;;CAAuD,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { PlaywrightResourceLimitError } from './resource-limit.js';
2
+ import { capabilityResult, requireSession, unsupported } from './capability-result.js';
3
+ const recordings = new WeakMap();
4
+ const start = { scope: 'session', async execute(request) {
5
+ const session = requireSession(request), context = session.context;
6
+ if (recordings.has(context))
7
+ throw new Error('Recording is already in progress.');
8
+ const modern = Boolean(context._startRecording && context._stopRecording);
9
+ if (!modern && !(context._enableRecorder && context._disableRecorder))
10
+ unsupported('native action recording');
11
+ const maximum = request.limits?.maxCommandBytes ?? 1048576;
12
+ let bytes = 0, admitted = false;
13
+ let started = Promise.resolve(), stopping;
14
+ const recording = { actions: [], stop() {
15
+ stopping ??= (async () => {
16
+ await started.catch(() => { });
17
+ if (admitted) {
18
+ admitted = false;
19
+ if (modern)
20
+ await context._stopRecording();
21
+ else
22
+ await context._disableRecorder();
23
+ }
24
+ if (recordings.get(context) === recording)
25
+ recordings.delete(context);
26
+ })();
27
+ return stopping;
28
+ } };
29
+ const add = (code, update) => {
30
+ if (!admitted || stopping || recording.failure || code === undefined)
31
+ return;
32
+ if (typeof code !== 'string') {
33
+ recording.failure = new Error('Invalid native recorder code');
34
+ return;
35
+ }
36
+ const previous = update && recording.actions.length ? recording.actions.at(-1) : undefined;
37
+ const size = new TextEncoder().encode(code).byteLength;
38
+ const next = bytes + size - (previous === undefined ? 0 : new TextEncoder().encode(previous).byteLength);
39
+ if (next > maximum || previous === undefined && recording.actions.length >= 4096) {
40
+ recording.failure = new PlaywrightResourceLimitError('Playwright recording byte limit exceeded');
41
+ return;
42
+ }
43
+ bytes = next;
44
+ if (previous === undefined)
45
+ recording.actions.push(code);
46
+ else
47
+ recording.actions[recording.actions.length - 1] = code;
48
+ };
49
+ const sink = {
50
+ actionAdded: (_page, _action, code) => add(code, false),
51
+ actionUpdated: (_page, _action, code) => add(code, true),
52
+ signalAdded: (_page, _signal, code) => add(code, true),
53
+ };
54
+ recordings.set(context, recording);
55
+ session.registerCleanup(recording.stop);
56
+ admitted = true;
57
+ started = modern ? context._startRecording({ language: 'playwright-test' }, sink) : context._enableRecorder({ language: 'playwright-test', mode: 'recording', recorderMode: 'api' }, sink);
58
+ try {
59
+ await started;
60
+ }
61
+ catch (error) {
62
+ try {
63
+ await recording.stop();
64
+ }
65
+ catch (cleanupError) {
66
+ throw new AggregateError([error, cleanupError], 'Native recording startup and cleanup failed');
67
+ }
68
+ throw error;
69
+ }
70
+ return capabilityResult('', 'Recording started. Call browser_stop_recording to retrieve the recorded actions.');
71
+ } };
72
+ const stop = { scope: 'session', async execute(request) {
73
+ const recording = recordings.get(requireSession(request).context);
74
+ if (!recording)
75
+ throw new Error('No recording in progress, use browser_start_recording to start one.');
76
+ await recording.stop();
77
+ if (recording.failure)
78
+ throw recording.failure;
79
+ const code = recording.actions.filter(value => value.trim()).join('\n');
80
+ return capabilityResult('', code ? `Recording stopped. Recorded actions:\n\n\`\`\`js\n${code}\n\`\`\`` : 'Recording stopped. No actions were recorded.');
81
+ } };
82
+ export const playwrightRecordingAbilities = { 'recording-start': start, 'recording-stop': stop };
83
+ //# sourceMappingURL=recording-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording-capabilities.js","sourceRoot":"","sources":["../../src/playwright/recording-capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Budget failures retire a browser; ordinary command errors may leave it usable. */
2
+ export declare class PlaywrightResourceLimitError extends Error {
3
+ readonly name = "PlaywrightResourceLimitError";
4
+ }
5
+ export declare function isPlaywrightResourceLimitError(error: unknown): boolean;
6
+ //# sourceMappingURL=resource-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-limit.d.ts","sourceRoot":"","sources":["../../src/playwright/resource-limit.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,SAAkB,IAAI,kCAAkC;CACzD;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEtE"}
@@ -0,0 +1,8 @@
1
+ /** Budget failures retire a browser; ordinary command errors may leave it usable. */
2
+ export class PlaywrightResourceLimitError extends Error {
3
+ name = 'PlaywrightResourceLimitError';
4
+ }
5
+ export function isPlaywrightResourceLimitError(error) {
6
+ return error instanceof PlaywrightResourceLimitError || error instanceof AggregateError && error.errors.some(isPlaywrightResourceLimitError);
7
+ }
8
+ //# sourceMappingURL=resource-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-limit.js","sourceRoot":"","sources":["../../src/playwright/resource-limit.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACnC,IAAI,GAAG,8BAA8B,CAAC;CACzD;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAc;IAC3D,OAAO,KAAK,YAAY,4BAA4B,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAC/I,CAAC"}
@@ -0,0 +1,22 @@
1
+ export type PlaywrightJsonValue = null | boolean | number | string | readonly PlaywrightJsonValue[] | {
2
+ readonly [key: string]: PlaywrightJsonValue;
3
+ };
4
+ export interface PlaywrightResultSection {
5
+ readonly title: 'Result' | 'Ran Playwright code' | 'Page' | 'Snapshot' | 'Events' | 'Open tabs' | 'Modal state' | 'Error';
6
+ readonly content: string | {
7
+ readonly json: PlaywrightJsonValue;
8
+ };
9
+ readonly codeframe?: string;
10
+ }
11
+ export interface PlaywrightCommandResult {
12
+ readonly sections: readonly PlaywrightResultSection[];
13
+ }
14
+ export declare const playwrightCliCompatibilityVersion = "0.1.20";
15
+ export declare function serializePlaywrightResult(result: PlaywrightCommandResult, options: {
16
+ readonly json: boolean;
17
+ readonly raw: boolean;
18
+ }): string;
19
+ /** ISO timestamps keep names portable; a per-controller suffix avoids same-tick collisions. */
20
+ export declare function playwrightArtifactName(prefix: string, extension: string, sequence: number): string;
21
+ export declare function playwrightCodeString(value: string): string;
22
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/playwright/response.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,mBAAmB,EAAE,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAA;CAAE,CAAC;AAEtJ,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,qBAAqB,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,OAAO,CAAC;IAC1H,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;KAAE,CAAC;IAClE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACvD;AAED,eAAO,MAAM,iCAAiC,WAAW,CAAC;AAE1D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CA2B7I;AAED,+FAA+F;AAC/F,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGlG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,43 @@
1
+ export const playwrightCliCompatibilityVersion = '0.1.20';
2
+ export function serializePlaywrightResult(result, options) {
3
+ const sections = options.raw ? result.sections.filter(section => ['Error', 'Result', 'Snapshot'].includes(section.title)) : result.sections;
4
+ if (options.json) {
5
+ const payload = {};
6
+ if (sections.some(section => section.title === 'Error'))
7
+ payload.isError = true;
8
+ for (const section of sections) {
9
+ if (typeof section.content !== 'string')
10
+ payload[section.title.toLowerCase()] = section.content.json;
11
+ else if (section.content) {
12
+ const prefix = '- [Snapshot](';
13
+ payload[section.title.toLowerCase()] = section.title === 'Snapshot' && section.content.startsWith(prefix) && section.content.endsWith(')')
14
+ ? { file: section.content.slice(prefix.length, -1) } : section.content;
15
+ }
16
+ }
17
+ return JSON.stringify(payload, null, 2) + '\n';
18
+ }
19
+ const lines = [];
20
+ for (const section of sections) {
21
+ const text = typeof section.content === 'string' ? section.content : JSON.stringify(section.content.json, null, 2);
22
+ if (!text)
23
+ continue;
24
+ if (!options.raw) {
25
+ lines.push(`### ${section.title}`);
26
+ if (section.codeframe)
27
+ lines.push('```' + section.codeframe);
28
+ }
29
+ lines.push(text);
30
+ if (!options.raw && section.codeframe)
31
+ lines.push('```');
32
+ }
33
+ return lines.join('\n') + '\n';
34
+ }
35
+ /** ISO timestamps keep names portable; a per-controller suffix avoids same-tick collisions. */
36
+ export function playwrightArtifactName(prefix, extension, sequence) {
37
+ const timestamp = new Date().toISOString().split(':').join('-').split('.').join('-');
38
+ return `.playwright-cli/${prefix}-${timestamp}-${sequence}.${extension}`;
39
+ }
40
+ export function playwrightCodeString(value) {
41
+ return "'" + value.split('\\').join('\\\\').split("'").join("\\'").split('\n').join('\\n').split('\r').join('\\r').split('\u2028').join('\\u2028').split('\u2029').join('\\u2029') + "'";
42
+ }
43
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/playwright/response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { PlaywrightAbility } from './abilities.js';
2
+ import type { PlaywrightContext } from './adapter.js';
3
+ import type { PlaywrightCommand } from './catalog.js';
4
+ export interface PlaywrightRoute {
5
+ request(): {
6
+ headers(): Record<string, string>;
7
+ };
8
+ fulfill(options: {
9
+ status: number;
10
+ body?: string;
11
+ contentType?: string;
12
+ }): Promise<void>;
13
+ continue(options: {
14
+ headers: Record<string, string>;
15
+ }): Promise<void>;
16
+ }
17
+ export type PlaywrightRouteHandler = (route: PlaywrightRoute) => Promise<void>;
18
+ export interface PlaywrightRoutingContext {
19
+ route(pattern: string, handler: PlaywrightRouteHandler): Promise<unknown>;
20
+ unroute(pattern: string, handler: PlaywrightRouteHandler): Promise<void>;
21
+ }
22
+ /** Native state replacement must retain the routes of the logical CLI session. */
23
+ export declare function capturePlaywrightRoutes(context: PlaywrightContext): ((replacement: PlaywrightContext, registerCleanup: (cleanup: () => Promise<void>) => void) => Promise<void>) | undefined;
24
+ export declare const playwrightRouteAbilities: Partial<Record<PlaywrightCommand, PlaywrightAbility>>;
25
+ //# sourceMappingURL=route-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-capabilities.d.ts","sourceRoot":"","sources":["../../src/playwright/route-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAA4B,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI;QAAE,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IACjD,OAAO,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,QAAQ,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE;AACD,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/E,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AA0CD,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,kBAGrC,iBAAiB,mBAAmB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,gCAOtG;AA4CD,eAAO,MAAM,wBAAwB,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CA4B1F,CAAC"}