selenium-webdriver 4.43.0 → 4.45.0

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 (48) hide show
  1. package/CHANGES.md +21 -0
  2. package/README.md +57 -185
  3. package/bidi/browsingContextInspector.js +1 -1
  4. package/bidi/generated/bluetooth.d.ts +223 -0
  5. package/bidi/generated/bluetooth.js +154 -0
  6. package/bidi/generated/browser.d.ts +104 -0
  7. package/bidi/generated/browser.js +107 -0
  8. package/bidi/generated/browsing_context.d.ts +394 -0
  9. package/bidi/generated/browsing_context.js +260 -0
  10. package/bidi/generated/common.d.ts +38 -0
  11. package/bidi/generated/common.js +30 -0
  12. package/bidi/generated/emulation.d.ts +176 -0
  13. package/bidi/generated/emulation.js +133 -0
  14. package/bidi/generated/input.d.ts +151 -0
  15. package/bidi/generated/input.js +81 -0
  16. package/bidi/generated/log.d.ts +39 -0
  17. package/bidi/generated/log.js +67 -0
  18. package/bidi/generated/network.d.ts +359 -0
  19. package/bidi/generated/network.js +230 -0
  20. package/bidi/generated/permissions.d.ts +22 -0
  21. package/bidi/generated/permissions.js +43 -0
  22. package/bidi/generated/script.d.ts +410 -0
  23. package/bidi/generated/script.js +146 -0
  24. package/bidi/generated/session.d.ts +119 -0
  25. package/bidi/generated/session.js +82 -0
  26. package/bidi/generated/speculation.d.ts +17 -0
  27. package/bidi/generated/speculation.js +40 -0
  28. package/bidi/generated/storage.d.ts +84 -0
  29. package/bidi/generated/storage.js +70 -0
  30. package/bidi/generated/user_agent_client_hints.d.ts +33 -0
  31. package/bidi/generated/user_agent_client_hints.js +43 -0
  32. package/bidi/generated/webextension.d.ts +42 -0
  33. package/bidi/generated/webextension.js +53 -0
  34. package/bidi/index.js +133 -21
  35. package/bin/linux/selenium-manager +0 -0
  36. package/bin/macos/selenium-manager +0 -0
  37. package/bin/windows/selenium-manager.exe +0 -0
  38. package/common/driverFinder.js +2 -1
  39. package/common/seleniumManager.js +1 -1
  40. package/eslint.config.js +5 -5
  41. package/io/zip.js +1 -1
  42. package/lib/atoms/find-elements.js +272 -68
  43. package/lib/atoms/get-attribute.js +152 -17
  44. package/lib/atoms/is-displayed.js +385 -39
  45. package/lib/http.js +2 -1
  46. package/lib/pinnedScript.js +0 -1
  47. package/lib/webdriver.js +2 -2
  48. package/package.json +18 -16
@@ -0,0 +1,359 @@
1
+ import type { BrowserUserContext } from './browser.js';
2
+ import type { BrowsingContextBrowsingContext, BrowsingContextNavigation } from './browsing_context.js';
3
+ import type { EmptyResult, Extensible, JsInt, JsUint } from './common.js';
4
+ import type { ScriptStackTrace } from './script.js';
5
+ export type NetworkCommand = NetworkAddDataCollector | NetworkAddIntercept | NetworkContinueRequest | NetworkContinueResponse | NetworkContinueWithAuth | NetworkDisownData | NetworkFailRequest | NetworkGetData | NetworkProvideResponse | NetworkRemoveDataCollector | NetworkRemoveIntercept | NetworkSetCacheBehavior | NetworkSetExtraHeaders;
6
+ export type NetworkResult = NetworkAddDataCollectorResult | NetworkAddInterceptResult | NetworkContinueRequestResult | NetworkContinueResponseResult | NetworkContinueWithAuthResult | NetworkDisownDataResult | NetworkFailRequestResult | NetworkGetDataResult | NetworkProvideResponseResult | NetworkRemoveDataCollectorResult | NetworkRemoveInterceptResult | NetworkSetCacheBehaviorResult | NetworkSetExtraHeadersResult;
7
+ export type NetworkEvent = NetworkAuthRequired | NetworkBeforeRequestSent | NetworkFetchError | NetworkResponseCompleted | NetworkResponseStarted;
8
+ export interface NetworkAuthChallenge {
9
+ scheme: string;
10
+ realm: string;
11
+ }
12
+ export interface NetworkAuthCredentials {
13
+ type: "password";
14
+ username: string;
15
+ password: string;
16
+ }
17
+ export interface NetworkBaseParameters {
18
+ context: BrowsingContextBrowsingContext | null;
19
+ isBlocked: boolean;
20
+ navigation: BrowsingContextNavigation | null;
21
+ redirectCount: JsUint;
22
+ request: NetworkRequestData;
23
+ timestamp: JsUint;
24
+ userContext?: BrowserUserContext | null;
25
+ intercepts?: NetworkIntercept[];
26
+ }
27
+ export type NetworkBytesValue = NetworkStringValue | NetworkBase64Value;
28
+ export interface NetworkStringValue {
29
+ type: "string";
30
+ value: string;
31
+ }
32
+ export interface NetworkBase64Value {
33
+ type: "base64";
34
+ value: string;
35
+ }
36
+ export type NetworkCollector = string;
37
+ export type NetworkCollectorType = "blob";
38
+ export type NetworkSameSite = "strict" | "lax" | "none" | "default";
39
+ export type NetworkCookie = Extensible & {
40
+ name: string;
41
+ value: NetworkBytesValue;
42
+ domain: string;
43
+ path: string;
44
+ size: JsUint;
45
+ httpOnly: boolean;
46
+ secure: boolean;
47
+ sameSite: NetworkSameSite;
48
+ expiry?: JsUint;
49
+ };
50
+ export interface NetworkCookieHeader {
51
+ name: string;
52
+ value: NetworkBytesValue;
53
+ }
54
+ export type NetworkDataType = "request" | "response";
55
+ export interface NetworkFetchTimingInfo {
56
+ timeOrigin: number;
57
+ requestTime: number;
58
+ redirectStart: number;
59
+ redirectEnd: number;
60
+ fetchStart: number;
61
+ dnsStart: number;
62
+ dnsEnd: number;
63
+ connectStart: number;
64
+ connectEnd: number;
65
+ tlsStart: number;
66
+ requestStart: number;
67
+ responseStart: number;
68
+ responseEnd: number;
69
+ }
70
+ export interface NetworkHeader {
71
+ name: string;
72
+ value: NetworkBytesValue;
73
+ }
74
+ export interface NetworkInitiator {
75
+ columnNumber?: JsUint;
76
+ lineNumber?: JsUint;
77
+ request?: NetworkRequest;
78
+ stackTrace?: ScriptStackTrace;
79
+ type?: "parser" | "script" | "preflight" | "other";
80
+ }
81
+ export type NetworkIntercept = string;
82
+ export type NetworkRequest = string;
83
+ export interface NetworkRequestData {
84
+ request: NetworkRequest;
85
+ url: string;
86
+ method: string;
87
+ headers: NetworkHeader[];
88
+ cookies: NetworkCookie[];
89
+ headersSize: JsUint;
90
+ bodySize: JsUint | null;
91
+ destination: string;
92
+ initiatorType: string | null;
93
+ timings: NetworkFetchTimingInfo;
94
+ }
95
+ export interface NetworkResponseContent {
96
+ size: JsUint;
97
+ }
98
+ export interface NetworkResponseData {
99
+ url: string;
100
+ protocol: string;
101
+ status: JsUint;
102
+ statusText: string;
103
+ fromCache: boolean;
104
+ headers: NetworkHeader[];
105
+ mimeType: string;
106
+ bytesReceived: JsUint;
107
+ headersSize: JsUint | null;
108
+ bodySize: JsUint | null;
109
+ content: NetworkResponseContent;
110
+ authChallenges?: NetworkAuthChallenge[];
111
+ }
112
+ export interface NetworkSetCookieHeader {
113
+ name: string;
114
+ value: NetworkBytesValue;
115
+ domain?: string;
116
+ httpOnly?: boolean;
117
+ expiry?: string;
118
+ maxAge?: JsInt;
119
+ path?: string;
120
+ sameSite?: NetworkSameSite;
121
+ secure?: boolean;
122
+ }
123
+ export type NetworkUrlPattern = NetworkUrlPatternPattern | NetworkUrlPatternString;
124
+ export interface NetworkUrlPatternPattern {
125
+ type: "pattern";
126
+ protocol?: string;
127
+ hostname?: string;
128
+ port?: string;
129
+ pathname?: string;
130
+ search?: string;
131
+ }
132
+ export interface NetworkUrlPatternString {
133
+ type: "string";
134
+ pattern: string;
135
+ }
136
+ export interface NetworkAddDataCollector {
137
+ method: "network.addDataCollector";
138
+ params: NetworkAddDataCollectorParameters;
139
+ }
140
+ export interface NetworkAddDataCollectorParameters {
141
+ dataTypes: NetworkDataType[];
142
+ maxEncodedDataSize: JsUint;
143
+ /**
144
+ * @default 'blob'
145
+ */
146
+ collectorType?: NetworkCollectorType;
147
+ contexts?: BrowsingContextBrowsingContext[];
148
+ userContexts?: BrowserUserContext[];
149
+ }
150
+ export interface NetworkAddDataCollectorResult {
151
+ collector: NetworkCollector;
152
+ }
153
+ export interface NetworkAddIntercept {
154
+ method: "network.addIntercept";
155
+ params: NetworkAddInterceptParameters;
156
+ }
157
+ export interface NetworkAddInterceptParameters {
158
+ phases: NetworkInterceptPhase[];
159
+ contexts?: BrowsingContextBrowsingContext[];
160
+ urlPatterns?: NetworkUrlPattern[];
161
+ }
162
+ export type NetworkInterceptPhase = "beforeRequestSent" | "responseStarted" | "authRequired";
163
+ export interface NetworkAddInterceptResult {
164
+ intercept: NetworkIntercept;
165
+ }
166
+ export interface NetworkContinueRequest {
167
+ method: "network.continueRequest";
168
+ params: NetworkContinueRequestParameters;
169
+ }
170
+ export interface NetworkContinueRequestParameters {
171
+ request: NetworkRequest;
172
+ body?: NetworkBytesValue;
173
+ cookies?: NetworkCookieHeader[];
174
+ headers?: NetworkHeader[];
175
+ method?: string;
176
+ url?: string;
177
+ }
178
+ export type NetworkContinueRequestResult = EmptyResult;
179
+ export interface NetworkContinueResponse {
180
+ method: "network.continueResponse";
181
+ params: NetworkContinueResponseParameters;
182
+ }
183
+ export interface NetworkContinueResponseParameters {
184
+ request: NetworkRequest;
185
+ cookies?: NetworkSetCookieHeader[];
186
+ credentials?: NetworkAuthCredentials;
187
+ headers?: NetworkHeader[];
188
+ reasonPhrase?: string;
189
+ statusCode?: JsUint;
190
+ }
191
+ export type NetworkContinueResponseResult = EmptyResult;
192
+ export interface NetworkContinueWithAuth {
193
+ method: "network.continueWithAuth";
194
+ params: NetworkContinueWithAuthParameters;
195
+ }
196
+ export type NetworkContinueWithAuthParameters = (NetworkContinueWithAuthCredentials | NetworkContinueWithAuthNoCredentials) & {
197
+ request: NetworkRequest;
198
+ };
199
+ export interface NetworkContinueWithAuthCredentials {
200
+ action: "provideCredentials";
201
+ credentials: NetworkAuthCredentials;
202
+ }
203
+ export interface NetworkContinueWithAuthNoCredentials {
204
+ action: "default" | "cancel";
205
+ }
206
+ export type NetworkContinueWithAuthResult = EmptyResult;
207
+ export interface NetworkDisownData {
208
+ method: "network.disownData";
209
+ params: NetworkDisownDataParameters;
210
+ }
211
+ export interface NetworkDisownDataParameters {
212
+ dataType: NetworkDataType;
213
+ collector: NetworkCollector;
214
+ request: NetworkRequest;
215
+ }
216
+ export type NetworkDisownDataResult = EmptyResult;
217
+ export interface NetworkFailRequest {
218
+ method: "network.failRequest";
219
+ params: NetworkFailRequestParameters;
220
+ }
221
+ export interface NetworkFailRequestParameters {
222
+ request: NetworkRequest;
223
+ }
224
+ export type NetworkFailRequestResult = EmptyResult;
225
+ export interface NetworkGetData {
226
+ method: "network.getData";
227
+ params: NetworkGetDataParameters;
228
+ }
229
+ export interface NetworkGetDataParameters {
230
+ dataType: NetworkDataType;
231
+ collector?: NetworkCollector;
232
+ disown?: boolean;
233
+ request: NetworkRequest;
234
+ }
235
+ export interface NetworkGetDataResult {
236
+ bytes: NetworkBytesValue;
237
+ }
238
+ export interface NetworkProvideResponse {
239
+ method: "network.provideResponse";
240
+ params: NetworkProvideResponseParameters;
241
+ }
242
+ export interface NetworkProvideResponseParameters {
243
+ request: NetworkRequest;
244
+ body?: NetworkBytesValue;
245
+ cookies?: NetworkSetCookieHeader[];
246
+ headers?: NetworkHeader[];
247
+ reasonPhrase?: string;
248
+ statusCode?: JsUint;
249
+ }
250
+ export type NetworkProvideResponseResult = EmptyResult;
251
+ export interface NetworkRemoveDataCollector {
252
+ method: "network.removeDataCollector";
253
+ params: NetworkRemoveDataCollectorParameters;
254
+ }
255
+ export interface NetworkRemoveDataCollectorParameters {
256
+ collector: NetworkCollector;
257
+ }
258
+ export type NetworkRemoveDataCollectorResult = EmptyResult;
259
+ export interface NetworkRemoveIntercept {
260
+ method: "network.removeIntercept";
261
+ params: NetworkRemoveInterceptParameters;
262
+ }
263
+ export interface NetworkRemoveInterceptParameters {
264
+ intercept: NetworkIntercept;
265
+ }
266
+ export type NetworkRemoveInterceptResult = EmptyResult;
267
+ export interface NetworkSetCacheBehavior {
268
+ method: "network.setCacheBehavior";
269
+ params: NetworkSetCacheBehaviorParameters;
270
+ }
271
+ export interface NetworkSetCacheBehaviorParameters {
272
+ cacheBehavior: "default" | "bypass";
273
+ contexts?: BrowsingContextBrowsingContext[];
274
+ }
275
+ export type NetworkSetCacheBehaviorResult = EmptyResult;
276
+ export interface NetworkSetExtraHeaders {
277
+ method: "network.setExtraHeaders";
278
+ params: NetworkSetExtraHeadersParameters;
279
+ }
280
+ export interface NetworkSetExtraHeadersParameters {
281
+ headers: NetworkHeader[];
282
+ contexts?: BrowsingContextBrowsingContext[];
283
+ userContexts?: BrowserUserContext[];
284
+ }
285
+ export type NetworkSetExtraHeadersResult = EmptyResult;
286
+ export interface NetworkAuthRequired {
287
+ method: "network.authRequired";
288
+ params: NetworkAuthRequiredParameters;
289
+ }
290
+ export type NetworkAuthRequiredParameters = NetworkBaseParameters & {
291
+ response: NetworkResponseData;
292
+ };
293
+ export interface NetworkBeforeRequestSent {
294
+ method: "network.beforeRequestSent";
295
+ params: NetworkBeforeRequestSentParameters;
296
+ }
297
+ export type NetworkBeforeRequestSentParameters = NetworkBaseParameters & {
298
+ initiator?: NetworkInitiator;
299
+ };
300
+ export interface NetworkFetchError {
301
+ method: "network.fetchError";
302
+ params: NetworkFetchErrorParameters;
303
+ }
304
+ export type NetworkFetchErrorParameters = NetworkBaseParameters & {
305
+ errorText: string;
306
+ };
307
+ export interface NetworkResponseCompleted {
308
+ method: "network.responseCompleted";
309
+ params: NetworkResponseCompletedParameters;
310
+ }
311
+ export type NetworkResponseCompletedParameters = NetworkBaseParameters & {
312
+ response: NetworkResponseData;
313
+ };
314
+ export interface NetworkResponseStarted {
315
+ method: "network.responseStarted";
316
+ params: NetworkResponseStartedParameters;
317
+ }
318
+ export type NetworkResponseStartedParameters = NetworkBaseParameters & {
319
+ response: NetworkResponseData;
320
+ };
321
+ /** @deprecated Use {@link Network.create} instead — will be removed in a future major version. */
322
+ export declare function getNetworkInstance(driver: unknown): Promise<Network>;
323
+ export declare class Network {
324
+ private readonly bidi;
325
+ private constructor();
326
+ static create(driver: unknown): Promise<Network>;
327
+ addDataCollector(params: NetworkAddDataCollectorParameters): Promise<NetworkAddDataCollectorResult>;
328
+ addIntercept(params: NetworkAddInterceptParameters): Promise<NetworkAddInterceptResult>;
329
+ continueRequest(params: NetworkContinueRequestParameters): Promise<void>;
330
+ continueResponse(params: NetworkContinueResponseParameters): Promise<void>;
331
+ continueWithAuth(params: NetworkContinueWithAuthParameters): Promise<void>;
332
+ /** @deprecated Pass a NetworkContinueWithAuthParameters object instead — will be removed in a future major version. */
333
+ continueWithAuth(requestId: NetworkRequest, username: string, password: string): Promise<void>;
334
+ disownData(params: NetworkDisownDataParameters): Promise<void>;
335
+ failRequest(params: NetworkFailRequestParameters): Promise<void>;
336
+ getData(params: NetworkGetDataParameters): Promise<NetworkGetDataResult>;
337
+ provideResponse(params: NetworkProvideResponseParameters): Promise<void>;
338
+ removeDataCollector(params: NetworkRemoveDataCollectorParameters): Promise<void>;
339
+ removeIntercept(params: NetworkRemoveInterceptParameters): Promise<void>;
340
+ setCacheBehavior(params: NetworkSetCacheBehaviorParameters): Promise<void>;
341
+ setExtraHeaders(params: NetworkSetExtraHeadersParameters): Promise<void>;
342
+ onAuthRequired(callback: (params: NetworkAuthRequiredParameters) => void): Promise<void>;
343
+ onBeforeRequestSent(callback: (params: NetworkBeforeRequestSentParameters) => void): Promise<void>;
344
+ onFetchError(callback: (params: NetworkFetchErrorParameters) => void): Promise<void>;
345
+ onResponseCompleted(callback: (params: NetworkResponseCompletedParameters) => void): Promise<void>;
346
+ onResponseStarted(callback: (params: NetworkResponseStartedParameters) => void): Promise<void>;
347
+ cancelAuth(requestId: NetworkRequest): Promise<void>;
348
+ continueWithAuthNoCredentials(requestId: NetworkRequest): Promise<void>;
349
+ /** @deprecated Use {@link onBeforeRequestSent} instead — will be removed in a future major version. */
350
+ beforeRequestSent(callback: (params: NetworkBeforeRequestSentParameters) => void): Promise<void>;
351
+ /** @deprecated Use {@link onAuthRequired} instead — will be removed in a future major version. */
352
+ authRequired(callback: (params: NetworkAuthRequiredParameters) => void): Promise<void>;
353
+ /** @deprecated Use {@link onFetchError} instead — will be removed in a future major version. */
354
+ fetchError(callback: (params: NetworkFetchErrorParameters) => void): Promise<void>;
355
+ /** @deprecated Use {@link onResponseCompleted} instead — will be removed in a future major version. */
356
+ responseCompleted(callback: (params: NetworkResponseCompletedParameters) => void): Promise<void>;
357
+ /** @deprecated Use {@link onResponseStarted} instead — will be removed in a future major version. */
358
+ responseStarted(callback: (params: NetworkResponseStartedParameters) => void): Promise<void>;
359
+ }
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ // Licensed to the Software Freedom Conservancy (SFC) under one
3
+ // or more contributor license agreements. See the NOTICE file
4
+ // distributed with this work for additional information
5
+ // regarding copyright ownership. The SFC licenses this file
6
+ // to you under the Apache License, Version 2.0 (the
7
+ // "License"); you may not use this file except in compliance
8
+ // with the License. You may obtain a copy of the License at
9
+ //
10
+ // http://www.apache.org/licenses/LICENSE-2.0
11
+ //
12
+ // Unless required by applicable law or agreed to in writing,
13
+ // software distributed under the License is distributed on an
14
+ // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ // KIND, either express or implied. See the License for the
16
+ // specific language governing permissions and limitations
17
+ // under the License.
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.Network = exports.getNetworkInstance = void 0;
20
+ // --- Additional Types ---
21
+ /** @deprecated Use {@link Network.create} instead — will be removed in a future major version. */
22
+ async function getNetworkInstance(driver) {
23
+ return Network.create(driver);
24
+ }
25
+ exports.getNetworkInstance = getNetworkInstance;
26
+ // --- Implementation ---
27
+ class Network {
28
+ constructor(bidi) {
29
+ this.bidi = bidi;
30
+ }
31
+ static async create(driver) {
32
+ const caps = await driver.getCapabilities();
33
+ if (!caps.get('webSocketUrl')) {
34
+ throw new Error('WebDriver instance must support BiDi protocol');
35
+ }
36
+ const bidi = await driver.getBidi();
37
+ return new Network(bidi);
38
+ }
39
+ async addDataCollector(params) {
40
+ const response = await this.bidi.send({
41
+ method: 'network.addDataCollector',
42
+ params: params,
43
+ });
44
+ if (response['type'] === 'error') {
45
+ throw new Error(`${response['error']}: ${response['message']}`);
46
+ }
47
+ return response.result;
48
+ }
49
+ async addIntercept(params) {
50
+ const response = await this.bidi.send({
51
+ method: 'network.addIntercept',
52
+ params: params,
53
+ });
54
+ if (response['type'] === 'error') {
55
+ throw new Error(`${response['error']}: ${response['message']}`);
56
+ }
57
+ return response.result;
58
+ }
59
+ async continueRequest(params) {
60
+ const response = await this.bidi.send({
61
+ method: 'network.continueRequest',
62
+ params: params,
63
+ });
64
+ if (response['type'] === 'error') {
65
+ throw new Error(`${response['error']}: ${response['message']}`);
66
+ }
67
+ }
68
+ async continueResponse(params) {
69
+ const response = await this.bidi.send({
70
+ method: 'network.continueResponse',
71
+ params: params,
72
+ });
73
+ if (response['type'] === 'error') {
74
+ throw new Error(`${response['error']}: ${response['message']}`);
75
+ }
76
+ }
77
+ async continueWithAuth(paramsOrRequestId, username, password) {
78
+ let params;
79
+ if (typeof paramsOrRequestId === 'string') {
80
+ if (username === undefined || password === undefined) {
81
+ throw new Error('username and password are required when calling continueWithAuth with a request id');
82
+ }
83
+ params = {
84
+ request: paramsOrRequestId,
85
+ action: 'provideCredentials',
86
+ credentials: { type: 'password', username, password },
87
+ };
88
+ }
89
+ else {
90
+ params = paramsOrRequestId;
91
+ }
92
+ const response = await this.bidi.send({
93
+ method: 'network.continueWithAuth',
94
+ params: params,
95
+ });
96
+ if (response['type'] === 'error') {
97
+ throw new Error(`${response['error']}: ${response['message']}`);
98
+ }
99
+ }
100
+ async disownData(params) {
101
+ const response = await this.bidi.send({
102
+ method: 'network.disownData',
103
+ params: params,
104
+ });
105
+ if (response['type'] === 'error') {
106
+ throw new Error(`${response['error']}: ${response['message']}`);
107
+ }
108
+ }
109
+ async failRequest(params) {
110
+ const response = await this.bidi.send({
111
+ method: 'network.failRequest',
112
+ params: params,
113
+ });
114
+ if (response['type'] === 'error') {
115
+ throw new Error(`${response['error']}: ${response['message']}`);
116
+ }
117
+ }
118
+ async getData(params) {
119
+ const response = await this.bidi.send({
120
+ method: 'network.getData',
121
+ params: params,
122
+ });
123
+ if (response['type'] === 'error') {
124
+ throw new Error(`${response['error']}: ${response['message']}`);
125
+ }
126
+ return response.result;
127
+ }
128
+ async provideResponse(params) {
129
+ const response = await this.bidi.send({
130
+ method: 'network.provideResponse',
131
+ params: params,
132
+ });
133
+ if (response['type'] === 'error') {
134
+ throw new Error(`${response['error']}: ${response['message']}`);
135
+ }
136
+ }
137
+ async removeDataCollector(params) {
138
+ const response = await this.bidi.send({
139
+ method: 'network.removeDataCollector',
140
+ params: params,
141
+ });
142
+ if (response['type'] === 'error') {
143
+ throw new Error(`${response['error']}: ${response['message']}`);
144
+ }
145
+ }
146
+ async removeIntercept(params) {
147
+ const response = await this.bidi.send({
148
+ method: 'network.removeIntercept',
149
+ params: params,
150
+ });
151
+ if (response['type'] === 'error') {
152
+ throw new Error(`${response['error']}: ${response['message']}`);
153
+ }
154
+ }
155
+ async setCacheBehavior(params) {
156
+ const response = await this.bidi.send({
157
+ method: 'network.setCacheBehavior',
158
+ params: params,
159
+ });
160
+ if (response['type'] === 'error') {
161
+ throw new Error(`${response['error']}: ${response['message']}`);
162
+ }
163
+ }
164
+ async setExtraHeaders(params) {
165
+ const response = await this.bidi.send({
166
+ method: 'network.setExtraHeaders',
167
+ params: params,
168
+ });
169
+ if (response['type'] === 'error') {
170
+ throw new Error(`${response['error']}: ${response['message']}`);
171
+ }
172
+ }
173
+ async onAuthRequired(callback) {
174
+ await this.bidi.subscribe('network.authRequired');
175
+ this.bidi.on('network.authRequired', (params) => {
176
+ callback(params);
177
+ });
178
+ }
179
+ async onBeforeRequestSent(callback) {
180
+ await this.bidi.subscribe('network.beforeRequestSent');
181
+ this.bidi.on('network.beforeRequestSent', (params) => {
182
+ callback(params);
183
+ });
184
+ }
185
+ async onFetchError(callback) {
186
+ await this.bidi.subscribe('network.fetchError');
187
+ this.bidi.on('network.fetchError', (params) => {
188
+ callback(params);
189
+ });
190
+ }
191
+ async onResponseCompleted(callback) {
192
+ await this.bidi.subscribe('network.responseCompleted');
193
+ this.bidi.on('network.responseCompleted', (params) => {
194
+ callback(params);
195
+ });
196
+ }
197
+ async onResponseStarted(callback) {
198
+ await this.bidi.subscribe('network.responseStarted');
199
+ this.bidi.on('network.responseStarted', (params) => {
200
+ callback(params);
201
+ });
202
+ }
203
+ async cancelAuth(requestId) {
204
+ await this.continueWithAuth({ request: requestId, action: 'cancel' });
205
+ }
206
+ async continueWithAuthNoCredentials(requestId) {
207
+ await this.continueWithAuth({ request: requestId, action: 'default' });
208
+ }
209
+ /** @deprecated Use {@link onBeforeRequestSent} instead — will be removed in a future major version. */
210
+ async beforeRequestSent(callback) {
211
+ await this.onBeforeRequestSent(callback);
212
+ }
213
+ /** @deprecated Use {@link onAuthRequired} instead — will be removed in a future major version. */
214
+ async authRequired(callback) {
215
+ await this.onAuthRequired(callback);
216
+ }
217
+ /** @deprecated Use {@link onFetchError} instead — will be removed in a future major version. */
218
+ async fetchError(callback) {
219
+ await this.onFetchError(callback);
220
+ }
221
+ /** @deprecated Use {@link onResponseCompleted} instead — will be removed in a future major version. */
222
+ async responseCompleted(callback) {
223
+ await this.onResponseCompleted(callback);
224
+ }
225
+ /** @deprecated Use {@link onResponseStarted} instead — will be removed in a future major version. */
226
+ async responseStarted(callback) {
227
+ await this.onResponseStarted(callback);
228
+ }
229
+ }
230
+ exports.Network = Network;
@@ -0,0 +1,22 @@
1
+ export type PermissionsCommand = PermissionsSetPermission;
2
+ export interface PermissionsPermissionDescriptor {
3
+ name: string;
4
+ }
5
+ export type PermissionsPermissionState = "granted" | "denied" | "prompt";
6
+ export interface PermissionsSetPermission {
7
+ method: "permissions.setPermission";
8
+ params: PermissionsSetPermissionParameters;
9
+ }
10
+ export interface PermissionsSetPermissionParameters {
11
+ descriptor: PermissionsPermissionDescriptor;
12
+ state: PermissionsPermissionState;
13
+ origin: string;
14
+ embeddedOrigin?: string;
15
+ userContext?: string;
16
+ }
17
+ export declare class Permissions {
18
+ private readonly bidi;
19
+ private constructor();
20
+ static create(driver: unknown): Promise<Permissions>;
21
+ setPermission(params: PermissionsSetPermissionParameters): Promise<void>;
22
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ // Licensed to the Software Freedom Conservancy (SFC) under one
3
+ // or more contributor license agreements. See the NOTICE file
4
+ // distributed with this work for additional information
5
+ // regarding copyright ownership. The SFC licenses this file
6
+ // to you under the Apache License, Version 2.0 (the
7
+ // "License"); you may not use this file except in compliance
8
+ // with the License. You may obtain a copy of the License at
9
+ //
10
+ // http://www.apache.org/licenses/LICENSE-2.0
11
+ //
12
+ // Unless required by applicable law or agreed to in writing,
13
+ // software distributed under the License is distributed on an
14
+ // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ // KIND, either express or implied. See the License for the
16
+ // specific language governing permissions and limitations
17
+ // under the License.
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.Permissions = void 0;
20
+ // --- Implementation ---
21
+ class Permissions {
22
+ constructor(bidi) {
23
+ this.bidi = bidi;
24
+ }
25
+ static async create(driver) {
26
+ const caps = await driver.getCapabilities();
27
+ if (!caps.get('webSocketUrl')) {
28
+ throw new Error('WebDriver instance must support BiDi protocol');
29
+ }
30
+ const bidi = await driver.getBidi();
31
+ return new Permissions(bidi);
32
+ }
33
+ async setPermission(params) {
34
+ const response = await this.bidi.send({
35
+ method: 'permissions.setPermission',
36
+ params: params,
37
+ });
38
+ if (response['type'] === 'error') {
39
+ throw new Error(`${response['error']}: ${response['message']}`);
40
+ }
41
+ }
42
+ }
43
+ exports.Permissions = Permissions;