@poe-platform/safe-bash 0.1.680 → 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 (169) 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/playwright/abilities.d.ts +24 -5
  6. package/dist/safe-bash/playwright/abilities.d.ts.map +1 -1
  7. package/dist/safe-bash/playwright/abilities.js +9 -4
  8. package/dist/safe-bash/playwright/abilities.js.map +1 -1
  9. package/dist/safe-bash/playwright/ability-execution.d.ts +6 -1
  10. package/dist/safe-bash/playwright/ability-execution.d.ts.map +1 -1
  11. package/dist/safe-bash/playwright/ability-execution.js +77 -5
  12. package/dist/safe-bash/playwright/ability-execution.js.map +1 -1
  13. package/dist/safe-bash/playwright/adapter.d.ts +467 -11
  14. package/dist/safe-bash/playwright/adapter.d.ts.map +1 -1
  15. package/dist/safe-bash/playwright/adapter.js +213 -4
  16. package/dist/safe-bash/playwright/adapter.js.map +1 -1
  17. package/dist/safe-bash/playwright/builtins.d.ts +44 -4
  18. package/dist/safe-bash/playwright/builtins.d.ts.map +1 -1
  19. package/dist/safe-bash/playwright/builtins.js +14 -9
  20. package/dist/safe-bash/playwright/builtins.js.map +1 -1
  21. package/dist/safe-bash/playwright/canonical-locator-parser.d.ts +5 -0
  22. package/dist/safe-bash/playwright/canonical-locator-parser.d.ts.map +1 -0
  23. package/dist/safe-bash/playwright/canonical-locator-parser.js +146 -0
  24. package/dist/safe-bash/playwright/canonical-locator-parser.js.map +1 -0
  25. package/dist/safe-bash/playwright/capability-events.d.ts +15 -0
  26. package/dist/safe-bash/playwright/capability-events.d.ts.map +1 -0
  27. package/dist/safe-bash/playwright/capability-events.js +265 -0
  28. package/dist/safe-bash/playwright/capability-events.js.map +1 -0
  29. package/dist/safe-bash/playwright/capability-result.d.ts +33 -0
  30. package/dist/safe-bash/playwright/capability-result.d.ts.map +1 -0
  31. package/dist/safe-bash/playwright/capability-result.js +72 -0
  32. package/dist/safe-bash/playwright/capability-result.js.map +1 -0
  33. package/dist/safe-bash/playwright/config-ini.d.ts +3 -0
  34. package/dist/safe-bash/playwright/config-ini.d.ts.map +1 -0
  35. package/dist/safe-bash/playwright/config-ini.js +161 -0
  36. package/dist/safe-bash/playwright/config-ini.js.map +1 -0
  37. package/dist/safe-bash/playwright/controller.d.ts +39 -1
  38. package/dist/safe-bash/playwright/controller.d.ts.map +1 -1
  39. package/dist/safe-bash/playwright/controller.js +913 -77
  40. package/dist/safe-bash/playwright/controller.js.map +1 -1
  41. package/dist/safe-bash/playwright/devices.d.ts +229 -0
  42. package/dist/safe-bash/playwright/devices.d.ts.map +1 -0
  43. package/dist/safe-bash/playwright/devices.js +2740 -0
  44. package/dist/safe-bash/playwright/devices.js.map +1 -0
  45. package/dist/safe-bash/playwright/download-capabilities.d.ts +15 -0
  46. package/dist/safe-bash/playwright/download-capabilities.d.ts.map +1 -0
  47. package/dist/safe-bash/playwright/download-capabilities.js +161 -0
  48. package/dist/safe-bash/playwright/download-capabilities.js.map +1 -0
  49. package/dist/safe-bash/playwright/drop-capability.d.ts +3 -0
  50. package/dist/safe-bash/playwright/drop-capability.d.ts.map +1 -0
  51. package/dist/safe-bash/playwright/drop-capability.js +50 -0
  52. package/dist/safe-bash/playwright/drop-capability.js.map +1 -0
  53. package/dist/safe-bash/playwright/find.d.ts +8 -0
  54. package/dist/safe-bash/playwright/find.d.ts.map +1 -0
  55. package/dist/safe-bash/playwright/find.js +68 -0
  56. package/dist/safe-bash/playwright/find.js.map +1 -0
  57. package/dist/safe-bash/playwright/generated-locator.d.ts +4 -0
  58. package/dist/safe-bash/playwright/generated-locator.d.ts.map +1 -0
  59. package/dist/safe-bash/playwright/generated-locator.js +22 -0
  60. package/dist/safe-bash/playwright/generated-locator.js.map +1 -0
  61. package/dist/safe-bash/playwright/help.d.ts +4 -3
  62. package/dist/safe-bash/playwright/help.d.ts.map +1 -1
  63. package/dist/safe-bash/playwright/help.js +7 -52
  64. package/dist/safe-bash/playwright/help.js.map +1 -1
  65. package/dist/safe-bash/playwright/highlight.d.ts +8 -0
  66. package/dist/safe-bash/playwright/highlight.d.ts.map +1 -0
  67. package/dist/safe-bash/playwright/highlight.js +82 -0
  68. package/dist/safe-bash/playwright/highlight.js.map +1 -0
  69. package/dist/safe-bash/playwright/index.d.ts +5 -0
  70. package/dist/safe-bash/playwright/index.d.ts.map +1 -1
  71. package/dist/safe-bash/playwright/index.js +4 -0
  72. package/dist/safe-bash/playwright/index.js.map +1 -1
  73. package/dist/safe-bash/playwright/invocation.d.ts +24 -0
  74. package/dist/safe-bash/playwright/invocation.d.ts.map +1 -1
  75. package/dist/safe-bash/playwright/invocation.js +42 -10
  76. package/dist/safe-bash/playwright/invocation.js.map +1 -1
  77. package/dist/safe-bash/playwright/locator-selector.d.ts +5 -0
  78. package/dist/safe-bash/playwright/locator-selector.d.ts.map +1 -0
  79. package/dist/safe-bash/playwright/locator-selector.js +70 -0
  80. package/dist/safe-bash/playwright/locator-selector.js.map +1 -0
  81. package/dist/safe-bash/playwright/modal-capabilities.d.ts +20 -0
  82. package/dist/safe-bash/playwright/modal-capabilities.d.ts.map +1 -0
  83. package/dist/safe-bash/playwright/modal-capabilities.js +137 -0
  84. package/dist/safe-bash/playwright/modal-capabilities.js.map +1 -0
  85. package/dist/safe-bash/playwright/native-json-snapshot.d.ts +17 -0
  86. package/dist/safe-bash/playwright/native-json-snapshot.d.ts.map +1 -0
  87. package/dist/safe-bash/playwright/native-json-snapshot.js +94 -0
  88. package/dist/safe-bash/playwright/native-json-snapshot.js.map +1 -0
  89. package/dist/safe-bash/playwright/native-snapshot.d.ts +17 -0
  90. package/dist/safe-bash/playwright/native-snapshot.d.ts.map +1 -0
  91. package/dist/safe-bash/playwright/native-snapshot.js +164 -0
  92. package/dist/safe-bash/playwright/native-snapshot.js.map +1 -0
  93. package/dist/safe-bash/playwright/network-policy.d.ts +2 -0
  94. package/dist/safe-bash/playwright/network-policy.d.ts.map +1 -1
  95. package/dist/safe-bash/playwright/network-policy.js +1 -1
  96. package/dist/safe-bash/playwright/network-policy.js.map +1 -1
  97. package/dist/safe-bash/playwright/open-options.d.ts +14 -0
  98. package/dist/safe-bash/playwright/open-options.d.ts.map +1 -0
  99. package/dist/safe-bash/playwright/open-options.js +279 -0
  100. package/dist/safe-bash/playwright/open-options.js.map +1 -0
  101. package/dist/safe-bash/playwright/recording-capabilities.d.ts +6 -0
  102. package/dist/safe-bash/playwright/recording-capabilities.d.ts.map +1 -0
  103. package/dist/safe-bash/playwright/recording-capabilities.js +83 -0
  104. package/dist/safe-bash/playwright/recording-capabilities.js.map +1 -0
  105. package/dist/safe-bash/playwright/resource-limit.d.ts +6 -0
  106. package/dist/safe-bash/playwright/resource-limit.d.ts.map +1 -0
  107. package/dist/safe-bash/playwright/resource-limit.js +8 -0
  108. package/dist/safe-bash/playwright/resource-limit.js.map +1 -0
  109. package/dist/safe-bash/playwright/response.d.ts +22 -0
  110. package/dist/safe-bash/playwright/response.d.ts.map +1 -0
  111. package/dist/safe-bash/playwright/response.js +43 -0
  112. package/dist/safe-bash/playwright/response.js.map +1 -0
  113. package/dist/safe-bash/playwright/route-capabilities.d.ts +25 -0
  114. package/dist/safe-bash/playwright/route-capabilities.d.ts.map +1 -0
  115. package/dist/safe-bash/playwright/route-capabilities.js +138 -0
  116. package/dist/safe-bash/playwright/route-capabilities.js.map +1 -0
  117. package/dist/safe-bash/playwright/screenshot.d.ts +3 -1
  118. package/dist/safe-bash/playwright/screenshot.d.ts.map +1 -1
  119. package/dist/safe-bash/playwright/screenshot.js +15 -12
  120. package/dist/safe-bash/playwright/screenshot.js.map +1 -1
  121. package/dist/safe-bash/playwright/session-configuration.d.ts +35 -0
  122. package/dist/safe-bash/playwright/session-configuration.d.ts.map +1 -0
  123. package/dist/safe-bash/playwright/session-configuration.js +50 -0
  124. package/dist/safe-bash/playwright/session-configuration.js.map +1 -0
  125. package/dist/safe-bash/playwright/session-runtime.d.ts +8 -0
  126. package/dist/safe-bash/playwright/session-runtime.d.ts.map +1 -0
  127. package/dist/safe-bash/playwright/session-runtime.js +96 -0
  128. package/dist/safe-bash/playwright/session-runtime.js.map +1 -0
  129. package/dist/safe-bash/playwright/snapshot.d.ts +15 -2
  130. package/dist/safe-bash/playwright/snapshot.d.ts.map +1 -1
  131. package/dist/safe-bash/playwright/snapshot.js +66 -7
  132. package/dist/safe-bash/playwright/snapshot.js.map +1 -1
  133. package/dist/safe-bash/playwright/standard-capabilities.d.ts +4 -0
  134. package/dist/safe-bash/playwright/standard-capabilities.d.ts.map +1 -0
  135. package/dist/safe-bash/playwright/standard-capabilities.js +248 -0
  136. package/dist/safe-bash/playwright/standard-capabilities.js.map +1 -0
  137. package/dist/safe-bash/playwright/storage-capabilities.d.ts +4 -0
  138. package/dist/safe-bash/playwright/storage-capabilities.d.ts.map +1 -0
  139. package/dist/safe-bash/playwright/storage-capabilities.js +120 -0
  140. package/dist/safe-bash/playwright/storage-capabilities.js.map +1 -0
  141. package/dist/safe-bash/playwright/storage-state.d.ts +8 -0
  142. package/dist/safe-bash/playwright/storage-state.d.ts.map +1 -0
  143. package/dist/safe-bash/playwright/storage-state.js +122 -0
  144. package/dist/safe-bash/playwright/storage-state.js.map +1 -0
  145. package/dist/safe-bash/playwright/target-screenshot.d.ts +9 -0
  146. package/dist/safe-bash/playwright/target-screenshot.d.ts.map +1 -0
  147. package/dist/safe-bash/playwright/target-screenshot.js +28 -0
  148. package/dist/safe-bash/playwright/target-screenshot.js.map +1 -0
  149. package/dist/safe-bash/playwright/targets.d.ts +12 -0
  150. package/dist/safe-bash/playwright/targets.d.ts.map +1 -0
  151. package/dist/safe-bash/playwright/targets.js +36 -0
  152. package/dist/safe-bash/playwright/targets.js.map +1 -0
  153. package/dist/safe-bash/playwright/tracing-capabilities.d.ts +12 -0
  154. package/dist/safe-bash/playwright/tracing-capabilities.d.ts.map +1 -0
  155. package/dist/safe-bash/playwright/tracing-capabilities.js +100 -0
  156. package/dist/safe-bash/playwright/tracing-capabilities.js.map +1 -0
  157. package/dist/safe-bash/playwright/webmcp-capabilities.d.ts +6 -0
  158. package/dist/safe-bash/playwright/webmcp-capabilities.d.ts.map +1 -0
  159. package/dist/safe-bash/playwright/webmcp-capabilities.js +122 -0
  160. package/dist/safe-bash/playwright/webmcp-capabilities.js.map +1 -0
  161. package/dist/safe-bash/playwright/workspace-assets.d.ts +5 -0
  162. package/dist/safe-bash/playwright/workspace-assets.d.ts.map +1 -0
  163. package/dist/safe-bash/playwright/workspace-assets.js +17 -0
  164. package/dist/safe-bash/playwright/workspace-assets.js.map +1 -0
  165. package/dist/safe-bash/playwright/workspace.d.ts +3 -0
  166. package/dist/safe-bash/playwright/workspace.d.ts.map +1 -0
  167. package/dist/safe-bash/playwright/workspace.js +48 -0
  168. package/dist/safe-bash/playwright/workspace.js.map +1 -0
  169. package/package.json +2 -2
@@ -0,0 +1,138 @@
1
+ import { capabilityResult, requireSession, unsupported } from './capability-result.js';
2
+ import { PlaywrightResourceLimitError } from './resource-limit.js';
3
+ const registries = new WeakMap();
4
+ const MAX_ROUTES = 64;
5
+ function routingFor(input, registerCleanup) {
6
+ const context = input;
7
+ if (!context.route || !context.unroute)
8
+ unsupported('network routes');
9
+ let registry = registries.get(context);
10
+ if (!registry) {
11
+ registry = { entries: [], closed: false };
12
+ registries.set(context, registry);
13
+ const owned = registry;
14
+ const onClose = () => { owned.closed = true; owned.entries.length = 0; registries.delete(context); };
15
+ context.on?.('close', onClose);
16
+ registerCleanup(async () => {
17
+ try {
18
+ for (const entry of [...owned.entries]) {
19
+ try {
20
+ await context.unroute(entry.pattern, entry.handler);
21
+ }
22
+ catch (error) {
23
+ if (!owned.closed)
24
+ throw error;
25
+ }
26
+ }
27
+ }
28
+ finally {
29
+ context.off?.('close', onClose);
30
+ onClose();
31
+ }
32
+ });
33
+ }
34
+ if (registry.closed)
35
+ throw new Error('Browser context is closed');
36
+ return { context: context, registry };
37
+ }
38
+ function routing(request) {
39
+ const session = requireSession(request);
40
+ return routingFor(session.context, session.registerCleanup);
41
+ }
42
+ /** Native state replacement must retain the routes of the logical CLI session. */
43
+ export function capturePlaywrightRoutes(context) {
44
+ const entries = [...registries.get(context)?.entries ?? []];
45
+ if (!entries.length)
46
+ return;
47
+ return async (replacement, registerCleanup) => {
48
+ const { context, registry } = routingFor(replacement, registerCleanup);
49
+ for (const entry of entries) {
50
+ await context.route(entry.pattern, entry.handler);
51
+ registry.entries.push(entry);
52
+ }
53
+ };
54
+ }
55
+ const route = { scope: 'session', options: 'all', async execute(request) {
56
+ const { context, registry } = routing(request);
57
+ const pattern = request.args[0];
58
+ const body = request.options.body;
59
+ const contentType = request.options['content-type'];
60
+ const status = request.options.status === undefined ? undefined : Number(request.options.status);
61
+ if (status !== undefined && (!Number.isInteger(status) || status < 100 || status > 599))
62
+ throw new Error('Invalid route status');
63
+ if (!pattern || pattern.length > 4096)
64
+ throw new Error('Invalid route pattern');
65
+ const headers = request.options.header;
66
+ let addHeaders;
67
+ if (headers !== undefined) {
68
+ addHeaders = Object.create(null);
69
+ for (const header of Array.isArray(headers) ? headers : [headers]) {
70
+ if (typeof header !== 'string')
71
+ throw new Error('Invalid route header');
72
+ const colon = header.indexOf(':');
73
+ if (colon <= 0)
74
+ throw new Error('Invalid route header');
75
+ const name = header.slice(0, colon).trim().toLowerCase(), value = header.slice(colon + 1).trim();
76
+ // Native Fetch validates header names and rejects CR/LF injection.
77
+ new Headers([[name, value]]);
78
+ addHeaders[name] = value;
79
+ }
80
+ }
81
+ const removeHeaders = typeof request.options['remove-header'] === 'string' ? request.options['remove-header'].split(',').map(name => name.trim().toLowerCase()) : undefined;
82
+ const data = { pattern, status, body, contentType, addHeaders, removeHeaders };
83
+ const bytes = new TextEncoder().encode(JSON.stringify(data)).byteLength;
84
+ if (registry.entries.length >= MAX_ROUTES)
85
+ throw new PlaywrightResourceLimitError('Playwright route count limit exceeded');
86
+ if (bytes + registry.entries.reduce((sum, entry) => sum + entry.bytes, 0) > (request.limits?.maxCommandBytes ?? 1048576))
87
+ throw new PlaywrightResourceLimitError('Playwright route byte limit exceeded');
88
+ const handler = async (native) => {
89
+ if (body !== undefined || status !== undefined) {
90
+ await native.fulfill({ status: status ?? 200, ...(body === undefined ? {} : { body }), ...(contentType === undefined ? {} : { contentType }) });
91
+ return;
92
+ }
93
+ const updated = { ...native.request().headers(), ...addHeaders };
94
+ for (const name of removeHeaders ?? [])
95
+ delete updated[name];
96
+ await native.continue({ headers: updated });
97
+ };
98
+ request.signal.throwIfAborted();
99
+ await context.route(pattern, handler);
100
+ registry.entries.push({ ...data, handler, bytes });
101
+ return capabilityResult(`await page.context().route(${JSON.stringify(pattern)}, async route => { /* route handler */ });`, `Route added for pattern: ${pattern}`);
102
+ } };
103
+ export const playwrightRouteAbilities = {
104
+ route,
105
+ 'route-list': { scope: 'session', async execute(request) {
106
+ const { registry } = routing(request);
107
+ const lines = registry.entries.map((entry, index) => {
108
+ const details = [];
109
+ if (entry.status !== undefined)
110
+ details.push(`status=${entry.status}`);
111
+ if (entry.body !== undefined)
112
+ details.push(`body=${entry.body.length > 50 ? entry.body.slice(0, 50) + '...' : entry.body}`);
113
+ if (entry.contentType)
114
+ details.push(`contentType=${entry.contentType}`);
115
+ if (entry.addHeaders)
116
+ details.push(`addHeaders=${JSON.stringify(entry.addHeaders)}`);
117
+ if (entry.removeHeaders)
118
+ details.push(`removeHeaders=${entry.removeHeaders.join(',')}`);
119
+ return `${index + 1}. ${entry.pattern}${details.length ? ` (${details.join(', ')})` : ''}`;
120
+ });
121
+ return capabilityResult('', lines.join('\n') || 'No active routes');
122
+ } },
123
+ unroute: { scope: 'session', async execute(request) {
124
+ const { context, registry } = routing(request);
125
+ const pattern = request.args[0];
126
+ let removed = 0;
127
+ for (const entry of [...registry.entries]) {
128
+ if (pattern !== undefined && entry.pattern !== pattern)
129
+ continue;
130
+ request.signal.throwIfAborted();
131
+ await context.unroute(entry.pattern, entry.handler);
132
+ registry.entries.splice(registry.entries.indexOf(entry), 1);
133
+ removed++;
134
+ }
135
+ return capabilityResult('', pattern === undefined ? `Removed all ${removed} route(s)` : `Removed ${removed} route(s) for pattern: ${pattern}`);
136
+ } },
137
+ };
138
+ //# sourceMappingURL=route-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-capabilities.js","sourceRoot":"","sources":["../../src/playwright/route-capabilities.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAsBnE,MAAM,UAAU,GAAG,IAAI,OAAO,EAA4D,CAAC;AAC3F,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,SAAS,UAAU,CAAC,KAAwB,EAAE,eAAuD;IACnG,MAAM,OAAO,GAAG,KAA8D,CAAC;IAC/E,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACtE,IAAI,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC1C,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/B,eAAe,CAAC,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC;gBACH,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACvC,IAAI,CAAC;wBAAC,MAAM,OAAO,CAAC,OAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;oBAAC,CAAC;oBAC7D,OAAO,KAAK,EAAE,CAAC;wBAAC,IAAI,CAAC,KAAK,CAAC,MAAM;4BAAE,MAAM,KAAK,CAAC;oBAAC,CAAC;gBACnD,CAAC;YACH,CAAC;oBAAS,CAAC;gBAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAAC,OAAO,EAAE,CAAC;YAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAClE,OAAO,EAAE,OAAO,EAAE,OAAuD,EAAE,QAAQ,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,OAAO,CAAC,OAAiC;IAChD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;AAC9D,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,uBAAuB,CAAC,OAA0B;IAChE,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO;IAC5B,OAAO,KAAK,EAAE,WAA8B,EAAE,eAAuD,EAAE,EAAE;QACvG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACvE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAClD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,GAAsB,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;QACxF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAA0B,CAAC;QACxD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAuB,CAAC;QAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjG,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACjI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QACvC,IAAI,UAA8C,CAAC;QACnD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAA2B,CAAC;YAC3D,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClE,IAAI,OAAO,MAAM,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACxE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,KAAK,IAAI,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjG,mEAAmE;gBACnE,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7B,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5K,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QACxE,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU;YAAE,MAAM,IAAI,4BAA4B,CAAC,uCAAuC,CAAC,CAAC;QAC3H,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,IAAI,OAAO,CAAC;YAAE,MAAM,IAAI,4BAA4B,CAAC,sCAAsC,CAAC,CAAC;QACzM,MAAM,OAAO,GAA2B,KAAK,EAAC,MAAM,EAAC,EAAE;YACrD,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/C,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;gBAChJ,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC;YACjE,KAAK,MAAM,IAAI,IAAI,aAAa,IAAI,EAAE;gBAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAChC,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,OAAO,gBAAgB,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4CAA4C,EAAE,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACpK,CAAC,EAAE,CAAC;AAEJ,MAAM,CAAC,MAAM,wBAAwB,GAA0D;IAC7F,KAAK;IACL,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;YACrD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAClD,MAAM,OAAO,GAAa,EAAE,CAAC;gBAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5H,IAAI,KAAK,CAAC,WAAW;oBAAE,OAAO,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxE,IAAI,KAAK,CAAC,UAAU;oBAAE,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACrF,IAAI,KAAK,CAAC,aAAa;oBAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxF,OAAO,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7F,CAAC,CAAC,CAAC;YACH,OAAO,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACtE,CAAC,EAAE;IACH,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;YAChD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1C,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;oBAAE,SAAS;gBACjE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACpD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,gBAAgB,CAAC,EAAE,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,OAAO,0BAA0B,OAAO,EAAE,CAAC,CAAC;QACjJ,CAAC,EAAE;CACJ,CAAC"}
@@ -4,12 +4,14 @@ export interface PlaywrightScreenshotOptions {
4
4
  readonly timeout: number;
5
5
  readonly maxArtifactBytes: number;
6
6
  readonly signal?: AbortSignal;
7
+ readonly scale?: 'css' | 'device';
7
8
  }
8
9
  export interface PlaywrightScreenshotCaptureOptions {
9
10
  readonly type: 'png' | 'jpeg';
11
+ readonly quality?: number;
10
12
  readonly fullPage: boolean;
11
13
  readonly timeout: number;
12
- readonly scale: 'css';
14
+ readonly scale: 'css' | 'device';
13
15
  readonly clip: {
14
16
  readonly x: number;
15
17
  readonly y: number;
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/playwright/screenshot.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5G;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3G,UAAU,CAAC,OAAO,EAAE,kCAAkC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC9E;AAED,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,CAAC,CAmD3I"}
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/playwright/screenshot.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACnC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5G;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3G,UAAU,CAAC,OAAO,EAAE,kCAAkC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC9E;AAED,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,CAAC,CAqD3I"}
@@ -1,21 +1,21 @@
1
1
  export async function capturePlaywrightScreenshot(page, options) {
2
2
  if (!options)
3
3
  throw new TypeError('Invalid screenshot options');
4
- const { type, fullPage, timeout, maxArtifactBytes } = options;
4
+ const { type, fullPage, timeout, maxArtifactBytes, scale = 'css' } = options;
5
5
  options.signal?.throwIfAborted();
6
- if (!['png', 'jpeg'].includes(type) || typeof fullPage !== 'boolean'
7
- || !Number.isSafeInteger(timeout) || timeout < 1
6
+ if (!['png', 'jpeg'].includes(type) || !['css', 'device'].includes(scale) || typeof fullPage !== 'boolean'
7
+ || !Number.isSafeInteger(timeout) || timeout < 0
8
8
  || !Number.isSafeInteger(maxArtifactBytes) || maxArtifactBytes < 1)
9
9
  throw new TypeError('Invalid screenshot options');
10
10
  if (!page || typeof page.screenshot !== 'function')
11
11
  throw new Error('Screenshot engine unsupported');
12
12
  if (typeof page.evaluate !== 'function')
13
13
  throw new Error('Screenshot geometry evaluation unsupported');
14
- const geometry = await page.evaluate(fullPage => {
14
+ const geometry = await page.evaluate(input => {
15
15
  try {
16
16
  const view = globalThis;
17
17
  let dimensions;
18
- if (fullPage) {
18
+ if (input.fullPage) {
19
19
  const body = view.document?.body;
20
20
  const root = view.document?.documentElement;
21
21
  if (!body || !root)
@@ -39,12 +39,13 @@ export async function capturePlaywrightScreenshot(page, options) {
39
39
  if (measuredHeight > height)
40
40
  height = measuredHeight;
41
41
  }
42
- return width > 0 && height > 0 ? { width, height } : null;
42
+ const ratio = input.scale === 'device' ? view.devicePixelRatio ?? 1 : 1;
43
+ return width > 0 && height > 0 && Number.isFinite(ratio) && ratio > 0 ? input.scale === 'device' ? { width, height, ratio } : { width, height } : null;
43
44
  }
44
45
  catch {
45
46
  return null;
46
47
  }
47
- }, fullPage);
48
+ }, { fullPage, scale });
48
49
  options.signal?.throwIfAborted();
49
50
  if (!geometry || typeof geometry !== 'object' || typeof geometry.width !== 'number' || typeof geometry.height !== 'number'
50
51
  || geometry.width <= 0 || geometry.height <= 0
@@ -53,17 +54,19 @@ export async function capturePlaywrightScreenshot(page, options) {
53
54
  const width = Math.ceil(geometry.width);
54
55
  const height = Math.ceil(geometry.height);
55
56
  const blockSize = type === 'jpeg' ? 8 : 1;
56
- const rasterWidth = Math.ceil(width / blockSize) * blockSize;
57
- const rasterHeight = Math.ceil(height / blockSize) * blockSize;
57
+ const ratio = geometry.ratio ?? 1;
58
+ const rasterWidth = Math.ceil(width * ratio / blockSize) * blockSize;
59
+ const rasterHeight = Math.ceil(height * ratio / blockSize) * blockSize;
58
60
  const maxPixels = Math.min(Math.floor(maxArtifactBytes / 4), type === 'jpeg' ? 1_000_000 : 4_000_000);
59
61
  if (rasterWidth > Math.floor(maxPixels / rasterHeight))
60
- throw new Error('Screenshot pixel limit exceeded');
61
- const bytes = await page.screenshot({ type, fullPage, timeout, scale: 'css', clip: { x: 0, y: 0, width, height } });
62
+ throw new PlaywrightResourceLimitError('Screenshot pixel limit exceeded');
63
+ const bytes = await page.screenshot({ type, ...(type === 'jpeg' ? { quality: 90 } : {}), fullPage, timeout, scale, clip: { x: 0, y: 0, width, height } });
62
64
  options.signal?.throwIfAborted();
63
65
  if (!(bytes instanceof Uint8Array))
64
66
  throw new TypeError('Screenshot must return bytes');
65
67
  if (bytes.byteLength > maxArtifactBytes)
66
- throw new Error('Artifact byte limit exceeded');
68
+ throw new PlaywrightResourceLimitError('Artifact byte limit exceeded');
67
69
  return bytes;
68
70
  }
71
+ import { PlaywrightResourceLimitError } from './resource-limit.js';
69
72
  //# sourceMappingURL=screenshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/playwright/screenshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/playwright/screenshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export interface PlaywrightSessionConfiguration {
2
+ readonly browserName?: 'chromium' | 'firefox' | 'webkit';
3
+ readonly headless?: boolean;
4
+ readonly timeouts?: {
5
+ readonly action?: number;
6
+ readonly navigation?: number;
7
+ readonly settle?: number;
8
+ readonly expect?: number;
9
+ };
10
+ readonly initScripts?: readonly string[];
11
+ readonly initScriptFiles?: readonly string[];
12
+ readonly initPages?: readonly {
13
+ readonly filename: string;
14
+ readonly source: string;
15
+ }[];
16
+ readonly testIdAttribute?: string;
17
+ readonly network?: {
18
+ readonly allowedOrigins?: readonly string[];
19
+ readonly blockedOrigins?: readonly string[];
20
+ };
21
+ readonly console?: {
22
+ readonly level?: 'error' | 'warning' | 'info' | 'debug';
23
+ };
24
+ readonly snapshot?: {
25
+ readonly mode?: 'full' | 'incremental' | 'none';
26
+ readonly boxes?: boolean;
27
+ };
28
+ readonly outputDir?: string;
29
+ readonly outputMaxSize?: number;
30
+ readonly configFile?: string;
31
+ readonly codegen?: 'typescript' | 'python' | 'java' | 'csharp' | 'none';
32
+ }
33
+ /** Shared validation for user configuration and owner-persisted restore data. */
34
+ export declare function parsePlaywrightSessionConfiguration(value: unknown, maxBytes?: number): PlaywrightSessionConfiguration;
35
+ //# sourceMappingURL=session-configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-configuration.d.ts","sourceRoot":"","sources":["../../src/playwright/session-configuration.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnI,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IAChH,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAClG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CACzE;AAED,iFAAiF;AACjF,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAkB,GAAG,8BAA8B,CA2B9H"}
@@ -0,0 +1,50 @@
1
+ import { PlaywrightResourceLimitError } from './resource-limit.js';
2
+ /** Shared validation for user configuration and owner-persisted restore data. */
3
+ export function parsePlaywrightSessionConfiguration(value, maxBytes = 8 * 1024 * 1024) {
4
+ if (!value || typeof value !== 'object' || Array.isArray(value) || Object.keys(value).some(key => !['browserName', 'headless', 'timeouts', 'initScripts', 'initScriptFiles', 'initPages', 'testIdAttribute', 'network', 'console', 'snapshot', 'outputDir', 'outputMaxSize', 'configFile', 'codegen'].includes(key)))
5
+ throw new Error('Invalid Playwright session configuration');
6
+ const candidate = value;
7
+ if (candidate.browserName !== undefined && !['chromium', 'firefox', 'webkit'].includes(candidate.browserName))
8
+ throw new Error('Invalid configured browser');
9
+ if (candidate.headless !== undefined && typeof candidate.headless !== 'boolean')
10
+ throw new Error('Invalid configured headless mode');
11
+ if (candidate.timeouts !== undefined) {
12
+ if (!candidate.timeouts || typeof candidate.timeouts !== 'object' || Array.isArray(candidate.timeouts))
13
+ throw new Error('Invalid Playwright timeouts');
14
+ for (const [key, timeout] of Object.entries(candidate.timeouts))
15
+ if (!['action', 'navigation', 'settle', 'expect'].includes(key) || typeof timeout !== 'number' || !Number.isSafeInteger(timeout) || timeout < 0)
16
+ throw new Error(`Invalid Playwright timeout: ${key}`);
17
+ }
18
+ if (candidate.initScripts !== undefined && (!Array.isArray(candidate.initScripts) || candidate.initScripts.some(script => typeof script !== 'string')))
19
+ throw new Error('Invalid Playwright init scripts');
20
+ if (candidate.initScriptFiles !== undefined && (!Array.isArray(candidate.initScriptFiles) || candidate.initScriptFiles.some(path => typeof path !== 'string' || path.includes('\0'))))
21
+ throw new Error('Invalid Playwright init script files');
22
+ if (candidate.initPages !== undefined && (!Array.isArray(candidate.initPages) || candidate.initPages.some(page => !page || typeof page !== 'object' || Object.keys(page).some(key => !['filename', 'source'].includes(key)) || typeof page.filename !== 'string' || typeof page.source !== 'string')))
23
+ throw new Error('Invalid Playwright init page modules');
24
+ for (const name of ['testIdAttribute', 'outputDir', 'configFile'])
25
+ if (candidate[name] !== undefined && (typeof candidate[name] !== 'string' || !candidate[name] || candidate[name].includes('\0')))
26
+ throw new Error(`Invalid Playwright ${name}`);
27
+ if (candidate.codegen !== undefined && !['typescript', 'python', 'java', 'csharp', 'none'].includes(candidate.codegen))
28
+ throw new Error('Invalid Playwright codegen language');
29
+ if (candidate.outputMaxSize !== undefined && (typeof candidate.outputMaxSize !== 'number' || !Number.isSafeInteger(candidate.outputMaxSize) || candidate.outputMaxSize < 0))
30
+ throw new Error('Invalid Playwright outputMaxSize');
31
+ for (const [name, fields] of [['network', ['allowedOrigins', 'blockedOrigins']], ['console', ['level']], ['snapshot', ['mode', 'boxes']]]) {
32
+ const setting = candidate[name];
33
+ if (setting === undefined)
34
+ continue;
35
+ if (!setting || typeof setting !== 'object' || Array.isArray(setting) || Object.keys(setting).some(key => !fields.includes(key)))
36
+ throw new Error(`Invalid Playwright ${name}`);
37
+ for (const [key, entry] of Object.entries(setting)) {
38
+ if (name === 'network' && (!Array.isArray(entry) || entry.some(origin => typeof origin !== 'string' || !origin || origin.includes('\0'))))
39
+ throw new Error('Invalid Playwright network origins');
40
+ if (name === 'console' && !['error', 'warning', 'info', 'debug'].includes(entry))
41
+ throw new Error('Invalid Playwright console level');
42
+ if (name === 'snapshot' && (key === 'mode' ? !['full', 'incremental', 'none'].includes(entry) : typeof entry !== 'boolean'))
43
+ throw new Error('Invalid Playwright snapshot configuration');
44
+ }
45
+ }
46
+ if (new TextEncoder().encode(JSON.stringify(candidate)).byteLength > maxBytes)
47
+ throw new PlaywrightResourceLimitError('Playwright session configuration byte limit exceeded');
48
+ return structuredClone(candidate);
49
+ }
50
+ //# sourceMappingURL=session-configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-configuration.js","sourceRoot":"","sources":["../../src/playwright/session-configuration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { PlaywrightContext } from './adapter.js';
2
+ import type { PlaywrightSessionConfiguration } from './session-configuration.js';
3
+ /** CLI origin patterns only add restrictions; allowed requests retain host routes. */
4
+ export declare function installPlaywrightConfiguredNetwork(context: PlaywrightContext, configuration: PlaywrightSessionConfiguration | undefined): Promise<void>;
5
+ /** Convert a default-export page initializer to a function for the isolated host.
6
+ * Agent source is never evaluated by the controller's own JavaScript runtime. */
7
+ export declare function playwrightInitPageSource(source: string): string;
8
+ //# sourceMappingURL=session-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-runtime.d.ts","sourceRoot":"","sources":["../../src/playwright/session-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAEjF,sFAAsF;AACtF,wBAAsB,kCAAkC,CAAC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,8BAA8B,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B7J;AAED;iFACiF;AACjF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAsB/D"}
@@ -0,0 +1,96 @@
1
+ /** CLI origin patterns only add restrictions; allowed requests retain host routes. */
2
+ export async function installPlaywrightConfiguredNetwork(context, configuration) {
3
+ const allowed = configuration?.network?.allowedOrigins ?? [];
4
+ const blocked = configuration?.network?.blockedOrigins ?? [];
5
+ if (!allowed.length && !blocked.length)
6
+ return;
7
+ const native = context;
8
+ if (!native.route)
9
+ throw new Error('Browser network configuration unsupported');
10
+ const patterns = (origins) => origins.map(origin => {
11
+ if (origin.startsWith('http') && origin.endsWith(':*'))
12
+ return origin;
13
+ try {
14
+ const parsed = new URL(origin);
15
+ if (parsed.origin !== 'null')
16
+ return parsed.origin;
17
+ }
18
+ catch { /* Host glob. */ }
19
+ return '*://' + origin;
20
+ });
21
+ const allow = patterns(allowed), deny = patterns(blocked);
22
+ const matches = (pattern, origin) => {
23
+ let p = 0, cursor = 0, star = -1, retry = 0;
24
+ while (cursor < origin.length) {
25
+ if (pattern[p] === origin[cursor] || pattern[p] === '?') {
26
+ p++;
27
+ cursor++;
28
+ }
29
+ else if (pattern[p] === '*') {
30
+ star = p++;
31
+ retry = cursor;
32
+ }
33
+ else if (star >= 0) {
34
+ p = star + 1;
35
+ cursor = ++retry;
36
+ }
37
+ else
38
+ return false;
39
+ }
40
+ while (pattern[p] === '*')
41
+ p++;
42
+ return p === pattern.length;
43
+ };
44
+ await native.route('**', async (route) => {
45
+ const origin = new URL(route.request().url()).origin;
46
+ if (deny.some(pattern => matches(pattern, origin)) || allow.length && !allow.some(pattern => matches(pattern, origin)))
47
+ await route.abort('blockedbyclient');
48
+ else
49
+ await route.fallback();
50
+ });
51
+ }
52
+ /** Convert a default-export page initializer to a function for the isolated host.
53
+ * Agent source is never evaluated by the controller's own JavaScript runtime. */
54
+ export function playwrightInitPageSource(source) {
55
+ let depth = 0, quote = '', escaped = false;
56
+ for (let index = 0; index < source.length; index++) {
57
+ const char = source[index];
58
+ if (quote) {
59
+ if (escaped)
60
+ escaped = false;
61
+ else if (char === '\\')
62
+ escaped = true;
63
+ else if (char === quote)
64
+ quote = '';
65
+ continue;
66
+ }
67
+ if (char === '/' && source[index + 1] === '/') {
68
+ const end = source.indexOf('\n', index + 2);
69
+ index = end < 0 ? source.length : end;
70
+ continue;
71
+ }
72
+ if (char === '/' && source[index + 1] === '*') {
73
+ const end = source.indexOf('*/', index + 2);
74
+ if (end < 0)
75
+ throw new Error('Unterminated init page comment');
76
+ index = end + 1;
77
+ continue;
78
+ }
79
+ if ('\'"`'.includes(char)) {
80
+ quote = char;
81
+ continue;
82
+ }
83
+ if ('{[('.includes(char))
84
+ depth++;
85
+ else if ('}])'.includes(char))
86
+ depth--;
87
+ else if (depth === 0 && source.startsWith('export', index) && /\s/.test(source[index + 6] ?? '') && (index === 0 || /\s/.test(source[index - 1]))) {
88
+ const match = source.slice(index).match(/^export\s+default\s+/);
89
+ if (!match)
90
+ throw new Error('Init page supports a default export; additional module exports require module loading support');
91
+ return `async (page) => { let __playwrightInit;\n${source.slice(0, index)}__playwrightInit = ${source.slice(index + match[0].length)}\nif (typeof __playwrightInit !== 'function') throw new Error('Init page default export must be a function');\nawait __playwrightInit({ page });\n}`;
92
+ }
93
+ }
94
+ return `async (page) => { const module = { exports: {} }; const exports = module.exports;\n${source}\nconst __playwrightInit = module.exports.default ?? module.exports;\nif (typeof __playwrightInit !== 'function') throw new Error('Init page default export must be a function');\nawait __playwrightInit({ page });\n}`;
95
+ }
96
+ //# sourceMappingURL=session-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-runtime.js","sourceRoot":"","sources":["../../src/playwright/session-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,25 @@
1
- import type { PlaywrightPage, PlaywrightElementHandle } from './adapter.js';
1
+ import type { PlaywrightPage, PlaywrightElementHandle, PlaywrightSnapshotJSONCapture } from './adapter.js';
2
2
  export interface SnapshotLimits {
3
3
  readonly maxSnapshotBytes: number;
4
4
  readonly maxSnapshotRefs: number;
5
5
  }
6
6
  export declare function createSnapshotEngine(limits: SnapshotLimits, nextRef?: () => string): {
7
- capture: (page: PlaywrightPage, signal?: AbortSignal) => Promise<string>;
7
+ capture: (page: PlaywrightPage, signal?: AbortSignal, options?: {
8
+ depth?: number;
9
+ boxes?: boolean;
10
+ root?: PlaywrightElementHandle;
11
+ timeout?: number;
12
+ }) => Promise<string>;
13
+ captureJSON: (page: PlaywrightPage, signal?: AbortSignal, options?: {
14
+ depth?: number;
15
+ boxes?: boolean;
16
+ root?: PlaywrightElementHandle;
17
+ timeout?: number;
18
+ captureJSON?: PlaywrightSnapshotJSONCapture;
19
+ }) => Promise<readonly import("./adapter.js").PlaywrightSnapshotJSONNode[]>;
8
20
  resolve: (ref: string) => Promise<PlaywrightElementHandle>;
9
21
  invalidate: (drainActions?: boolean) => Promise<void>;
10
22
  withReferences: <Result>(action: () => Promise<Result>) => Promise<Result>;
23
+ nativeSelector(ref: string): string | undefined;
11
24
  };
12
25
  //# sourceMappingURL=snapshot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/playwright/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAA4B,MAAM,cAAc,CAAC;AAGtG,MAAM,WAAW,cAAc;IAAG,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CAAE;AASvG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM;oBAwDpD,cAAc,WAAW,WAAW,KAAG,OAAO,CAAC,MAAM,CAAC;mBAmDvD,MAAM,KAAG,OAAO,CAAC,uBAAuB,CAAC;;qBAhG7C,MAAM,UAAU,MAAM,OAAO,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;EAyHhF"}
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/playwright/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAA4B,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAKrI,MAAM,WAAW,cAAc;IAAG,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CAAE;AAUvG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM;oBAwDpD,cAAc,WAAW,WAAW,YAAW;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAQ,OAAO,CAAC,MAAM,CAAC;wBAyGvJ,cAAc,WAAW,WAAW,YAAW;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,6BAA6B,CAAA;KAAE;mBAzCtL,MAAM,KAAG,OAAO,CAAC,uBAAuB,CAAC;;qBA7G7C,MAAM,UAAU,MAAM,OAAO,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;wBAgKS,MAAM,GAAG,MAAM,GAAG,SAAS;EAIpH"}