@poe-platform/safe-bash 0.1.667 → 0.1.668

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -85,6 +85,7 @@ These plugins are separate from `agentCommands()`; pass them to `shell.use(...)`
85
85
  | `curl` | `networkCommands({ authorize, transport?, limits?, replace? })`: required authorization on every request, redirect, and retry. Node uses the native HTTP transport; Workers can inject `createFetchTransport()`. `createOriginAuthorizer([...])` provides exact origin/hostname policy; its omitted allowlist is deliberately `*` (allow all). [Options and limits](src/commands/network/types.ts). |
86
86
  | `node` | `nodeCommands({ runtime, limits?, replace? })`: runs JavaScript with an injected SafeJS runtime, virtual files, and shell streams. [Usage and supported subset](src/commands/node/README.md). |
87
87
  | `llm` | `llmCommands({ providers, defaultModel?, replace? })`: opt-in model routing, sandbox attachments and streamed text/binary output. Includes injected-transport OpenAI and ElevenLabs reference providers. [Configuration and provider contract](src/commands/llm/README.md). |
88
+ | `playwright-cli` | Standard browser commands through a host-owned adapter. `installPlaywrightNetworkPolicy` from `/playwright` supports browser-native redirects with per-hop bounded host fetch and independent direct-egress denial. [Network policy and lifecycle](src/contracts/playwright-network-policy.md). |
88
89
 
89
90
  Storage can be in memory, a rooted host directory, S3-compatible storage, or WebDAV,
90
91
  with read-only wrappers, mounts, and overlays. Choose and configure it explicitly;
@@ -2,6 +2,7 @@ export * from './adapter.js';
2
2
  export * from './billing.js';
3
3
  export * from './controller.js';
4
4
  export * from './catalog.js';
5
+ export * from './network-policy.js';
5
6
  export type { PlaywrightAbilities, PlaywrightAbility, PlaywrightAbilityRequest } from './abilities.js';
6
7
  export type { PlaywrightInvocation } from './invocation.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACvG,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACvG,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -2,4 +2,5 @@ export * from './adapter.js';
2
2
  export * from './billing.js';
3
3
  export * from './controller.js';
4
4
  export * from './catalog.js';
5
+ export * from './network-policy.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,69 @@
1
+ /** Public, exclusively owned JSON CDP WebSocket; accept/open it before installation. */
2
+ export interface PlaywrightPolicySocket {
3
+ send(message: string): void;
4
+ close(): void;
5
+ addEventListener(event: 'message', listener: (event: {
6
+ data: unknown;
7
+ }) => void): void;
8
+ addEventListener(event: 'close' | 'error', listener: () => void): void;
9
+ removeEventListener(event: 'message', listener: (event: {
10
+ data: unknown;
11
+ }) => void): void;
12
+ removeEventListener(event: 'close' | 'error', listener: () => void): void;
13
+ }
14
+ export interface PlaywrightPolicyRequest {
15
+ readonly targetId: string;
16
+ readonly frameId: string;
17
+ /** CDP Network request ID when available; otherwise the Fetch request ID. */
18
+ readonly requestId: string;
19
+ readonly resourceType: string;
20
+ readonly url: string;
21
+ readonly method: string;
22
+ readonly headers: readonly {
23
+ name: string;
24
+ value: string;
25
+ }[];
26
+ readonly body?: Uint8Array;
27
+ readonly signal: AbortSignal;
28
+ }
29
+ export interface PlaywrightPolicyResponse {
30
+ readonly status: number;
31
+ /** Preserve separate Set-Cookie entries. Supply headers for the decoded body. */
32
+ readonly headers: readonly {
33
+ name: string;
34
+ value: string;
35
+ }[];
36
+ readonly body: Uint8Array;
37
+ }
38
+ export interface PlaywrightPolicyFailure {
39
+ readonly targetId: string;
40
+ readonly frameId: string;
41
+ readonly requestId: string;
42
+ readonly resourceType: string;
43
+ readonly message: string;
44
+ }
45
+ export interface PlaywrightNetworkPolicyOptions {
46
+ readonly socket: PlaywrightPolicySocket;
47
+ /** Required host guarantee: browser egress is denied independently of CDP,
48
+ * including UDP/WebRTC, unsupported protocols, and transport disconnection.
49
+ * This declaration does not configure or verify that external boundary. */
50
+ readonly directNetwork: 'blocked-by-host';
51
+ /** Admit every URL and use manual redirects with bounded, cancellable reads. */
52
+ readonly fetch: (request: PlaywrightPolicyRequest) => Promise<PlaywrightPolicyResponse>;
53
+ /** Destroy the exclusively owned remote browser, including on transport loss. */
54
+ readonly retire: () => Promise<void>;
55
+ readonly onRequestFailure?: (failure: PlaywrightPolicyFailure) => void;
56
+ readonly requestTimeoutMs?: number;
57
+ readonly maxResponseBytes?: number;
58
+ readonly maxRequestBytes?: number;
59
+ /** Incoming UTF-8 CDP JSON cap, default 8 MiB; at most 32 MiB. */
60
+ readonly maxProtocolMessageBytes?: number;
61
+ readonly maxConcurrentRequests?: number;
62
+ readonly maxTargets?: number;
63
+ }
64
+ /** Installs before exposing any page. No page/context routing may be installed.
65
+ * Disposal retires the browser before detaching; reconnect is not supported. */
66
+ export declare function installPlaywrightNetworkPolicy(options: PlaywrightNetworkPolicyOptions): Promise<{
67
+ dispose(): Promise<void>;
68
+ }>;
69
+ //# sourceMappingURL=network-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-policy.d.ts","sourceRoot":"","sources":["../../src/playwright/network-policy.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,IAAI,IAAI,CAAC;IACd,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACvF,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACvE,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1F,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAC3E;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AACD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AACD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC;;+EAE2E;IAC3E,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxF,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACvE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,kEAAkE;IAClE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAkBD;gFACgF;AAChF,wBAAsB,8BAA8B,CAAC,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC;IAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAwMnI"}
@@ -0,0 +1,293 @@
1
+ function boundedHeaders(entries) {
2
+ if (!Array.isArray(entries) || entries.length > 1024)
3
+ throw new Error('Host header limit exceeded');
4
+ const encoder = new TextEncoder();
5
+ let bytes = 0;
6
+ return entries.map(({ name, value }) => {
7
+ if (typeof name !== 'string' || typeof value !== 'string' || name.length + value.length > 65536)
8
+ throw new Error('Invalid or oversized host header');
9
+ bytes += encoder.encode(name).length + encoder.encode(value).length;
10
+ if (bytes > 65536)
11
+ throw new Error('Host header limit exceeded');
12
+ return { name, value };
13
+ });
14
+ }
15
+ /** Installs before exposing any page. No page/context routing may be installed.
16
+ * Disposal retires the browser before detaching; reconnect is not supported. */
17
+ export async function installPlaywrightNetworkPolicy(options) {
18
+ if (options.directNetwork !== 'blocked-by-host' || typeof options.fetch !== 'function' || typeof options.retire !== 'function') {
19
+ throw new TypeError('A host fetch policy, browser retirement, and independent direct-network denial are required');
20
+ }
21
+ const positive = (value, fallback) => {
22
+ const selected = value ?? fallback;
23
+ if (!Number.isSafeInteger(selected) || selected < 1)
24
+ throw new TypeError('Invalid network policy limit');
25
+ return selected;
26
+ };
27
+ const timeout = positive(options.requestTimeoutMs, 30000);
28
+ const maxResponse = positive(options.maxResponseBytes, 8 * 1024 * 1024);
29
+ const maxRequest = positive(options.maxRequestBytes, 1024 * 1024);
30
+ const maxMessage = options.maxProtocolMessageBytes ?? 8 * 1024 * 1024;
31
+ if (!Number.isSafeInteger(maxMessage) || maxMessage < 1 || maxMessage > 32 * 1024 * 1024) {
32
+ throw new TypeError('Invalid protocol message limit (maximum 32 MiB)');
33
+ }
34
+ const maxConcurrent = positive(options.maxConcurrentRequests, 64);
35
+ const maxTargets = positive(options.maxTargets, 64);
36
+ const { socket } = options;
37
+ const pending = new Map();
38
+ const targets = new Map();
39
+ const operations = new Set();
40
+ const work = new Set();
41
+ let nextId = 0;
42
+ let closed = false;
43
+ let disconnected = false;
44
+ let disposal;
45
+ const failure = new Error('Browser network policy closed');
46
+ const rejectPending = () => {
47
+ for (const entry of pending.values()) {
48
+ clearTimeout(entry.timer);
49
+ entry.reject(failure);
50
+ }
51
+ pending.clear();
52
+ };
53
+ const dispose = () => {
54
+ if (disposal)
55
+ return disposal;
56
+ closed = true;
57
+ for (const operation of operations)
58
+ operation.controller.abort(failure);
59
+ rejectPending();
60
+ disposal = Promise.resolve().then(async () => {
61
+ // Never release interception on a live browser, including when retirement
62
+ // fails. The independent host boundary remains responsible on socket loss.
63
+ try {
64
+ await options.retire();
65
+ }
66
+ finally {
67
+ await Promise.allSettled([...work]);
68
+ }
69
+ socket.removeEventListener('message', receive);
70
+ socket.removeEventListener('close', lost);
71
+ socket.removeEventListener('error', lost);
72
+ socket.close();
73
+ targets.clear();
74
+ });
75
+ return disposal;
76
+ };
77
+ const lost = () => { disconnected = true; void dispose().catch(() => { }); };
78
+ const send = (method, params = {}, sessionId) => {
79
+ if (closed || disconnected)
80
+ return Promise.reject(failure);
81
+ if (pending.size >= maxConcurrent + maxTargets + 1) {
82
+ void dispose().catch(() => { });
83
+ return Promise.reject(new Error('CDP command capacity exceeded'));
84
+ }
85
+ const id = ++nextId;
86
+ return new Promise((resolve, reject) => {
87
+ const timer = setTimeout(() => {
88
+ pending.delete(id);
89
+ reject(new Error(`CDP ${method} timed out`));
90
+ void dispose().catch(() => { });
91
+ }, Math.min(timeout, 10000));
92
+ pending.set(id, { resolve, reject, timer });
93
+ try {
94
+ socket.send(JSON.stringify({ id, method, params, ...(sessionId ? { sessionId } : {}) }));
95
+ }
96
+ catch (error) {
97
+ clearTimeout(timer);
98
+ pending.delete(id);
99
+ reject(error);
100
+ lost();
101
+ }
102
+ });
103
+ };
104
+ const track = (promise) => {
105
+ work.add(promise);
106
+ void promise.catch(() => { void dispose().catch(() => { }); }).finally(() => work.delete(promise));
107
+ };
108
+ const autoAttach = { autoAttach: true, waitForDebuggerOnStart: true, flatten: true, filter: [{ type: 'tab', exclude: true }, {}] };
109
+ const attach = async (params) => {
110
+ const { sessionId, targetInfo } = params;
111
+ if (targets.has(sessionId))
112
+ return;
113
+ if (targets.size >= maxTargets) {
114
+ void dispose().catch(() => { });
115
+ throw new Error('Browser target capacity exceeded');
116
+ }
117
+ targets.set(sessionId, targetInfo);
118
+ if (targetInfo.type !== 'page' && targetInfo.type !== 'iframe') {
119
+ // Chromium cannot close every worker through Target.closeTarget. Keep
120
+ // unsupported targets paused, bounded by maxTargets, until their owner
121
+ // terminates them or the session retires. Never resume their execution.
122
+ if (!params.waitingForDebugger)
123
+ throw new Error('Unsupported target was already running');
124
+ return;
125
+ }
126
+ if (!params.waitingForDebugger && targetInfo.url && targetInfo.url !== 'about:blank') {
127
+ throw new Error('Network policy must be installed before browser targets navigate');
128
+ }
129
+ await send('Fetch.enable', { patterns: [{ urlPattern: '*', requestStage: 'Request' }] }, sessionId);
130
+ await send('Network.enable', {}, sessionId);
131
+ await send('Network.setCacheDisabled', { cacheDisabled: true }, sessionId);
132
+ await send('Network.setBypassServiceWorker', { bypass: true }, sessionId);
133
+ // Blocking all URLs here prevents Chromium from issuing subresource Fetch
134
+ // events. The independent host boundary denies any direct HTTP fallback.
135
+ await send('Network.setBlockedURLs', { urls: ['ws://*', 'wss://*'] }, sessionId);
136
+ await send('Target.setAutoAttach', autoAttach, sessionId);
137
+ await send('Runtime.runIfWaitingForDebugger', {}, sessionId);
138
+ };
139
+ const request = async (params, sessionId) => {
140
+ if (operations.size >= maxConcurrent) {
141
+ void dispose().catch(() => { });
142
+ throw new Error('Concurrent host request limit exceeded');
143
+ }
144
+ const target = targets.get(sessionId);
145
+ if (!target)
146
+ throw new Error('Request from an unowned browser target');
147
+ const controller = new AbortController();
148
+ const operation = { controller, networkId: params.networkId ?? params.requestId, sessionId, nativeCanceled: false };
149
+ const identity = { targetId: target.targetId, frameId: params.frameId ?? '', requestId: operation.networkId, resourceType: params.resourceType ?? '' };
150
+ const timer = setTimeout(() => controller.abort(new Error('Host request deadline exceeded')), timeout);
151
+ operations.add(operation);
152
+ try {
153
+ const native = params.request;
154
+ const url = new URL(native.url);
155
+ if (url.protocol !== 'https:' && url.protocol !== 'http:')
156
+ throw new Error('Unsupported browser network protocol');
157
+ let body;
158
+ if (native.hasPostData || native.postData !== undefined || native.postDataEntries !== undefined) {
159
+ if (!Array.isArray(native.postDataEntries) || native.postDataEntries.some((entry) => typeof entry.bytes !== 'string')) {
160
+ throw new Error('Browser did not supply complete binary request body');
161
+ }
162
+ let size = 0;
163
+ const pieces = [];
164
+ for (const entry of native.postDataEntries) {
165
+ if (entry.bytes.length > Math.ceil(maxRequest / 3) * 4)
166
+ throw new Error('Host request body limit exceeded');
167
+ const decoded = atob(entry.bytes);
168
+ size += decoded.length;
169
+ if (size > maxRequest)
170
+ throw new Error('Host request body limit exceeded');
171
+ pieces.push(decoded);
172
+ }
173
+ body = new Uint8Array(size);
174
+ let offset = 0;
175
+ for (const piece of pieces)
176
+ for (let index = 0; index < piece.length; index++)
177
+ body[offset++] = piece.charCodeAt(index);
178
+ }
179
+ const response = await options.fetch({ ...identity, url: native.url, method: native.method,
180
+ headers: boundedHeaders(Object.entries(native.headers).map(([name, value]) => ({ name, value }))),
181
+ ...(body ? { body } : {}), signal: controller.signal });
182
+ controller.signal.throwIfAborted();
183
+ if (closed)
184
+ throw failure;
185
+ if (!Number.isInteger(response.status) || response.status < 200 || response.status > 599
186
+ || !(response.body instanceof Uint8Array) || response.body.byteLength > maxResponse)
187
+ throw new Error('Invalid or oversized host response');
188
+ let binary = '';
189
+ for (let offset = 0; offset < response.body.length; offset += 8192)
190
+ binary += String.fromCharCode(...response.body.subarray(offset, offset + 8192));
191
+ await send('Fetch.fulfillRequest', { requestId: params.requestId, responseCode: response.status, responseHeaders: boundedHeaders(response.headers), body: btoa(binary) }, sessionId);
192
+ }
193
+ catch (error) {
194
+ controller.abort(error);
195
+ const message = (error instanceof Error ? error.message : 'Host network request failed').slice(0, 1024);
196
+ try {
197
+ options.onRequestFailure?.({ ...identity, message });
198
+ }
199
+ catch { /* Diagnostics cannot release a paused request. */ }
200
+ if (!closed && targets.has(sessionId)) {
201
+ // Canceled requests may already be gone. A protocol failure retires the
202
+ // owned browser instead of falling back to native network continuation.
203
+ try {
204
+ await send('Fetch.failRequest', { requestId: params.requestId, errorReason: 'BlockedByClient' }, sessionId);
205
+ }
206
+ catch (protocolError) {
207
+ if (!operation.nativeCanceled)
208
+ throw protocolError;
209
+ }
210
+ }
211
+ }
212
+ finally {
213
+ clearTimeout(timer);
214
+ operations.delete(operation);
215
+ }
216
+ };
217
+ function receive(event) {
218
+ if (closed)
219
+ return;
220
+ try {
221
+ if (typeof event.data !== 'string' || event.data.length > maxMessage)
222
+ throw new Error('Expected bounded JSON CDP transport');
223
+ // Count UTF-8 without allocating another copy of an oversized message.
224
+ let messageBytes = event.data.length;
225
+ for (let index = 0; index < event.data.length; index++) {
226
+ const code = event.data.charCodeAt(index);
227
+ if (code < 0x80)
228
+ continue;
229
+ if (code < 0x800)
230
+ messageBytes++;
231
+ else {
232
+ messageBytes += 2;
233
+ if (code >= 0xd800 && code <= 0xdbff) {
234
+ const next = event.data.charCodeAt(index + 1);
235
+ if (next >= 0xdc00 && next <= 0xdfff)
236
+ index++;
237
+ }
238
+ }
239
+ if (messageBytes > maxMessage)
240
+ throw new Error('Expected bounded JSON CDP transport');
241
+ }
242
+ const message = JSON.parse(event.data);
243
+ if (message.id !== undefined) {
244
+ const entry = pending.get(message.id);
245
+ if (!entry)
246
+ return;
247
+ pending.delete(message.id);
248
+ clearTimeout(entry.timer);
249
+ if (message.error)
250
+ entry.reject(new Error(message.error.message ?? 'CDP command failed'));
251
+ else
252
+ entry.resolve(message.result);
253
+ }
254
+ else if (message.method === 'Target.attachedToTarget')
255
+ track(attach(message.params));
256
+ else if (message.method === 'Fetch.requestPaused')
257
+ track(request(message.params, message.sessionId));
258
+ else if (message.method === 'Network.loadingFailed') {
259
+ for (const operation of operations)
260
+ if (operation.sessionId === message.sessionId && operation.networkId === message.params.requestId) {
261
+ operation.nativeCanceled = true;
262
+ operation.controller.abort(new Error('Browser request canceled'));
263
+ }
264
+ }
265
+ else if (message.method === 'Target.detachedFromTarget') {
266
+ targets.delete(message.params.sessionId);
267
+ for (const operation of operations)
268
+ if (operation.sessionId === message.params.sessionId) {
269
+ operation.nativeCanceled = true;
270
+ operation.controller.abort(new Error('Browser target closed'));
271
+ }
272
+ }
273
+ }
274
+ catch {
275
+ lost();
276
+ }
277
+ }
278
+ socket.addEventListener('message', receive);
279
+ socket.addEventListener('close', lost);
280
+ socket.addEventListener('error', lost);
281
+ try {
282
+ await send('Target.setAutoAttach', autoAttach);
283
+ await Promise.all([...work]);
284
+ if (closed)
285
+ throw failure;
286
+ return { dispose };
287
+ }
288
+ catch (error) {
289
+ await dispose();
290
+ throw error;
291
+ }
292
+ }
293
+ //# sourceMappingURL=network-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-policy.js","sourceRoot":"","sources":["../../src/playwright/network-policy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poe-platform/safe-bash",
3
- "version": "0.1.667",
3
+ "version": "0.1.668",
4
4
  "description": "Extensible virtual shell with pluggable filesystems and streaming commands",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -365,7 +365,7 @@
365
365
  "access": "public"
366
366
  },
367
367
  "dependencies": {
368
- "@poe-platform/safe-fs": "0.1.667",
368
+ "@poe-platform/safe-fs": "0.1.668",
369
369
  "pako": "3.0.1",
370
370
  "@types/node": "^25.2.2",
371
371
  "@noble/hashes": "2.4.0",