/** * Copyright 2022 Google LLC. * Copyright (c) Microsoft Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @fileoverview Provides parsing and validator for WebDriver BiDi protocol. * Parser types should match the `../protocol` types. */ import { z } from 'zod'; import { InvalidArgumentException } from '../protocol/protocol.js'; import * as WebDriverBidiBluetooth from './generated/webdriver-bidi-bluetooth.js'; import * as WebDriverBidiPermissions from './generated/webdriver-bidi-permissions.js'; import * as WebDriverBidi from './generated/webdriver-bidi.js'; export function parseObject(obj, schema) { const parseResult = schema.safeParse(obj); if (parseResult.success) { return parseResult.data; } const errorMessage = parseResult.error.errors .map((e) => `${e.message} in ` + `${e.path.map((p) => JSON.stringify(p)).join('/')}.`) .join(' '); throw new InvalidArgumentException(errorMessage); } /** @see https://w3c.github.io/webdriver-bidi/#module-browser */ export var Browser; (function (Browser) { // keep-sorted start block=yes function parseCreateUserContextParameters(params) { // Work around of `cddlconv` https://github.com/google/cddlconv/issues/19. return parseObject(params, WebDriverBidi.Browser.CreateUserContextParametersSchema); } Browser.parseCreateUserContextParameters = parseCreateUserContextParameters; function parseRemoveUserContextParameters(params) { return parseObject(params, WebDriverBidi.Browser.RemoveUserContextParametersSchema); } Browser.parseRemoveUserContextParameters = parseRemoveUserContextParameters; function parseSetClientWindowStateParameters(params) { return parseObject(params, WebDriverBidi.Browser.SetClientWindowStateParametersSchema); } Browser.parseSetClientWindowStateParameters = parseSetClientWindowStateParameters; function parseSetDownloadBehaviorParameters(params) { return parseObject(params, WebDriverBidi.Browser.SetDownloadBehaviorParametersSchema); } Browser.parseSetDownloadBehaviorParameters = parseSetDownloadBehaviorParameters; // keep-sorted end })(Browser || (Browser = {})); /** @see https://w3c.github.io/webdriver-bidi/#module-network */ export var Network; (function (Network) { // keep-sorted start block=yes function parseAddDataCollectorParameters(params) { // Work around of `cddlconv` https://github.com/google/cddlconv/issues/19. return parseObject(params, WebDriverBidi.Network.AddDataCollectorParametersSchema); } Network.parseAddDataCollectorParameters = parseAddDataCollectorParameters; function parseAddInterceptParameters(params) { // Work around of `cddlconv` https://github.com/google/cddlconv/issues/19. return parseObject(params, WebDriverBidi.Network.AddInterceptParametersSchema); } Network.parseAddInterceptParameters = parseAddInterceptParameters; function parseContinueRequestParameters(params) { return parseObject(params, WebDriverBidi.Network.ContinueRequestParametersSchema); } Network.parseContinueRequestParameters = parseContinueRequestParameters; function parseContinueResponseParameters(params) { // TODO: remove cast after https://github.com/google/cddlconv/issues/19 is fixed. return parseObject(params, WebDriverBidi.Network.ContinueResponseParametersSchema); } Network.parseContinueResponseParameters = parseContinueResponseParameters; function parseContinueWithAuthParameters(params) { return parseObject(params, WebDriverBidi.Network.ContinueWithAuthParametersSchema); } Network.parseContinueWithAuthParameters = parseContinueWithAuthParameters; function parseDisownDataParameters(params) { return parseObject(params, WebDriverBidi.Network.DisownDataParametersSchema); } Network.parseDisownDataParameters = parseDisownDataParameters; function parseFailRequestParameters(params) { return parseObject(params, WebDriverBidi.Network.FailRequestParametersSchema); } Network.parseFailRequestParameters = parseFailRequestParameters; function parseGetDataParameters(params) { // Work around of `cddlconv` https://github.com/google/cddlconv/issues/19. return parseObject(params, WebDriverBidi.Network.GetDataParametersSchema); } Network.parseGetDataParameters = parseGetDataParameters; function parseProvideResponseParameters(params) { // Work around of `cddlconv` https://github.com/google/cddlconv/issues/19. return parseObject(params, WebDriverBidi.Network.ProvideResponseParametersSchema); } Network.parseProvideResponseParameters = parseProvideResponseParameters; function parseRemoveDataCollectorParameters(params) { // Work around of `cddlconv` https://github.com/google/cddlconv/issues/19. return parseObject(params, WebDriverBidi.Network.RemoveDataCollectorParametersSchema); } Network.parseRemoveDataCollectorParameters = parseRemoveDataCollectorParameters; function parseRemoveInterceptParameters(params) { return parseObject(params, WebDriverBidi.Network.RemoveInterceptParametersSchema); } Network.parseRemoveInterceptParameters = parseRemoveInterceptParameters; function parseSetCacheBehaviorParameters(params) { return parseObject(params, WebDriverBidi.Network.SetCacheBehaviorParametersSchema); } Network.parseSetCacheBehaviorParameters = parseSetCacheBehaviorParameters; function parseSetExtraHeadersParameters(params) { return parseObject(params, WebDriverBidi.Network.SetExtraHeadersParametersSchema); } Network.parseSetExtraHeadersParameters = parseSetExtraHeadersParameters; // keep-sorted end })(Network || (Network = {})); /** @see https://w3c.github.io/webdriver-bidi/#module-script */ export var Script; (function (Script) { // keep-sorted start block=yes function parseAddPreloadScriptParams(params) { return parseObject(params, WebDriverBidi.Script.AddPreloadScriptParametersSchema); } Script.parseAddPreloadScriptParams = parseAddPreloadScriptParams; function parseCallFunctionParams(params) { return parseObject(params, WebDriverBidi.Script.CallFunctionParametersSchema); } Script.parseCallFunctionParams = parseCallFunctionParams; function parseDisownParams(params) { return parseObject(params, WebDriverBidi.Script.DisownParametersSchema); } Script.parseDisownParams = parseDisownParams; function parseEvaluateParams(params) { return parseObject(params, WebDriverBidi.Script.EvaluateParametersSchema); } Script.parseEvaluateParams = parseEvaluateParams; function parseGetRealmsParams(params) { return parseObject(params, WebDriverBidi.Script.GetRealmsParametersSchema); } Script.parseGetRealmsParams = parseGetRealmsParams; function parseRemovePreloadScriptParams(params) { return parseObject(params, WebDriverBidi.Script.RemovePreloadScriptParametersSchema); } Script.parseRemovePreloadScriptParams = parseRemovePreloadScriptParams; // keep-sorted end })(Script || (Script = {})); /** @see https://w3c.github.io/webdriver-bidi/#module-browsingContext */ export var BrowsingContext; (function (BrowsingContext) { // keep-sorted start block=yes function parseActivateParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.ActivateParametersSchema); } BrowsingContext.parseActivateParams = parseActivateParams; function parseCaptureScreenshotParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.CaptureScreenshotParametersSchema); } BrowsingContext.parseCaptureScreenshotParams = parseCaptureScreenshotParams; function parseCloseParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.CloseParametersSchema); } BrowsingContext.parseCloseParams = parseCloseParams; function parseCreateParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.CreateParametersSchema); } BrowsingContext.parseCreateParams = parseCreateParams; function parseGetTreeParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.GetTreeParametersSchema); } BrowsingContext.parseGetTreeParams = parseGetTreeParams; function parseHandleUserPromptParameters(params) { return parseObject(params, WebDriverBidi.BrowsingContext.HandleUserPromptParametersSchema); } BrowsingContext.parseHandleUserPromptParameters = parseHandleUserPromptParameters; function parseLocateNodesParams(params) { // TODO: remove cast after https://github.com/google/cddlconv/issues/19 is fixed. return parseObject(params, WebDriverBidi.BrowsingContext.LocateNodesParametersSchema); } BrowsingContext.parseLocateNodesParams = parseLocateNodesParams; function parseNavigateParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.NavigateParametersSchema); } BrowsingContext.parseNavigateParams = parseNavigateParams; function parsePrintParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.PrintParametersSchema); } BrowsingContext.parsePrintParams = parsePrintParams; function parseReloadParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.ReloadParametersSchema); } BrowsingContext.parseReloadParams = parseReloadParams; function parseSetViewportParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.SetViewportParametersSchema); } BrowsingContext.parseSetViewportParams = parseSetViewportParams; function parseTraverseHistoryParams(params) { return parseObject(params, WebDriverBidi.BrowsingContext.TraverseHistoryParametersSchema); } BrowsingContext.parseTraverseHistoryParams = parseTraverseHistoryParams; // keep-sorted end })(BrowsingContext || (BrowsingContext = {})); /** @see https://w3c.github.io/webdriver-bidi/#module-session */ export var Session; (function (Session) { // keep-sorted start block=yes function parseSubscribeParams(params) { return parseObject(params, WebDriverBidi.Session.SubscriptionRequestSchema); } Session.parseSubscribeParams = parseSubscribeParams; function parseUnsubscribeParams(params) { if (params && typeof params === 'object' && 'subscriptions' in params) { return parseObject(params, WebDriverBidi.Session.UnsubscribeByIdRequestSchema); } return parseObject(params, WebDriverBidi.Session.UnsubscribeParametersSchema); } Session.parseUnsubscribeParams = parseUnsubscribeParams; // keep-sorted end })(Session || (Session = {})); export var Emulation; (function (Emulation) { // keep-sorted start block=yes function parseSetForcedColorsModeThemeOverrideParams(params) { return parseObject(params, WebDriverBidi.Emulation.SetForcedColorsModeThemeOverrideParametersSchema); } Emulation.parseSetForcedColorsModeThemeOverrideParams = parseSetForcedColorsModeThemeOverrideParams; function parseSetGeolocationOverrideParams(params) { if ('coordinates' in params && 'error' in params) { // Zod picks the first matching parameter omitting the other. In this case, the // `parseObject` will remove `error` from the params. However, specification // requires to throw an exception. throw new InvalidArgumentException('Coordinates and error cannot be set at the same time'); } return parseObject(params, WebDriverBidi.Emulation.SetGeolocationOverrideParametersSchema); } Emulation.parseSetGeolocationOverrideParams = parseSetGeolocationOverrideParams; function parseSetLocaleOverrideParams(params) { return parseObject(params, WebDriverBidi.Emulation.SetLocaleOverrideParametersSchema); } Emulation.parseSetLocaleOverrideParams = parseSetLocaleOverrideParams; function parseSetNetworkConditionsParams(params) { return parseObject(params, WebDriverBidi.Emulation.SetNetworkConditionsParametersSchema); } Emulation.parseSetNetworkConditionsParams = parseSetNetworkConditionsParams; function parseSetScreenOrientationOverrideParams(params) { return parseObject(params, WebDriverBidi.Emulation.SetScreenOrientationOverrideParametersSchema); } Emulation.parseSetScreenOrientationOverrideParams = parseSetScreenOrientationOverrideParams; function parseSetScriptingEnabledParams(params) { return parseObject(params, WebDriverBidi.Emulation.SetScriptingEnabledParametersSchema); } Emulation.parseSetScriptingEnabledParams = parseSetScriptingEnabledParams; function parseSetTimezoneOverrideParams(params) { return parseObject(params, WebDriverBidi.Emulation.SetTimezoneOverrideParametersSchema); } Emulation.parseSetTimezoneOverrideParams = parseSetTimezoneOverrideParams; function parseSetUserAgentOverrideParams(params) { return parseObject(params, WebDriverBidi.Emulation.SetUserAgentOverrideParametersSchema); } Emulation.parseSetUserAgentOverrideParams = parseSetUserAgentOverrideParams; // keep-sorted end })(Emulation || (Emulation = {})); export var Input; (function (Input) { // keep-sorted start block=yes function parsePerformActionsParams(params) { return parseObject(params, WebDriverBidi.Input.PerformActionsParametersSchema); } Input.parsePerformActionsParams = parsePerformActionsParams; function parseReleaseActionsParams(params) { return parseObject(params, WebDriverBidi.Input.ReleaseActionsParametersSchema); } Input.parseReleaseActionsParams = parseReleaseActionsParams; function parseSetFilesParams(params) { return parseObject(params, WebDriverBidi.Input.SetFilesParametersSchema); } Input.parseSetFilesParams = parseSetFilesParams; // keep-sorted end })(Input || (Input = {})); export var Storage; (function (Storage) { // keep-sorted start block=yes function parseDeleteCookiesParams(params) { // Work around of `cddlconv` https://github.com/google/cddlconv/issues/19. // The generated schema `SameSiteSchema` in `src/protocol-parser/webdriver-bidi.ts` is // of type `"none" | "strict" | "lax"` which is not assignable to generated enum // `SameSite` in `src/protocol/webdriver-bidi.ts`. // TODO: remove cast after https://github.com/google/cddlconv/issues/19 is fixed. return parseObject(params, WebDriverBidi.Storage.DeleteCookiesParametersSchema); } Storage.parseDeleteCookiesParams = parseDeleteCookiesParams; function parseGetCookiesParams(params) { // Work around of `cddlconv` https://github.com/google/cddlconv/issues/19. // The generated schema `SameSiteSchema` in `src/protocol-parser/webdriver-bidi.ts` is // of type `"none" | "strict" | "lax"` which is not assignable to generated enum // `SameSite` in `src/protocol/webdriver-bidi.ts`. // TODO: remove cast after https://github.com/google/cddlconv/issues/19 is fixed. return parseObject(params, WebDriverBidi.Storage.GetCookiesParametersSchema); } Storage.parseGetCookiesParams = parseGetCookiesParams; function parseSetCookieParams(params) { // Work around of `cddlconv` https://github.com/google/cddlconv/issues/19. // The generated schema `SameSiteSchema` in `src/protocol-parser/webdriver-bidi.ts` is // of type `"none" | "strict" | "lax"` which is not assignable to generated enum // `SameSite` in `src/protocol/webdriver-bidi.ts`. // TODO: remove cast after https://github.com/google/cddlconv/issues/19 is fixed. return parseObject(params, WebDriverBidi.Storage.SetCookieParametersSchema); } Storage.parseSetCookieParams = parseSetCookieParams; // keep-sorted end })(Storage || (Storage = {})); export var Cdp; (function (Cdp) { // keep-sorted start block=yes const GetSessionRequestSchema = z.object({ context: WebDriverBidi.BrowsingContext.BrowsingContextSchema, }); const ResolveRealmRequestSchema = z.object({ realm: WebDriverBidi.Script.RealmSchema, }); const SendCommandRequestSchema = z.object({ // Allowing any cdpMethod, and casting to proper type later on. method: z.string(), // `passthrough` allows object to have any fields. // https://github.com/colinhacks/zod#passthrough params: z.object({}).passthrough().optional(), session: z.string().optional(), }); function parseGetSessionRequest(params) { return parseObject(params, GetSessionRequestSchema); } Cdp.parseGetSessionRequest = parseGetSessionRequest; function parseResolveRealmRequest(params) { return parseObject(params, ResolveRealmRequestSchema); } Cdp.parseResolveRealmRequest = parseResolveRealmRequest; function parseSendCommandRequest(params) { return parseObject(params, SendCommandRequestSchema); } Cdp.parseSendCommandRequest = parseSendCommandRequest; // keep-sorted end })(Cdp || (Cdp = {})); export var Permissions; (function (Permissions) { // keep-sorted start block=yes function parseSetPermissionsParams(params) { return { // TODO: remove once "goog:" attributes are not needed. ...params, ...parseObject(params, WebDriverBidiPermissions.Permissions.SetPermissionParametersSchema), }; } Permissions.parseSetPermissionsParams = parseSetPermissionsParams; // keep-sorted end })(Permissions || (Permissions = {})); export var Bluetooth; (function (Bluetooth) { // keep-sorted start block=yes function parseDisableSimulationParameters(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth.DisableSimulationParametersSchema); } Bluetooth.parseDisableSimulationParameters = parseDisableSimulationParameters; function parseHandleRequestDevicePromptParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth .HandleRequestDevicePromptParametersSchema); } Bluetooth.parseHandleRequestDevicePromptParams = parseHandleRequestDevicePromptParams; function parseSimulateAdapterParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth.SimulateAdapterParametersSchema); } Bluetooth.parseSimulateAdapterParams = parseSimulateAdapterParams; function parseSimulateAdvertisementParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth.SimulateAdvertisementParametersSchema); } Bluetooth.parseSimulateAdvertisementParams = parseSimulateAdvertisementParams; function parseSimulateCharacteristicParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth.SimulateCharacteristicParametersSchema); } Bluetooth.parseSimulateCharacteristicParams = parseSimulateCharacteristicParams; function parseSimulateCharacteristicResponseParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth .SimulateCharacteristicResponseParametersSchema); } Bluetooth.parseSimulateCharacteristicResponseParams = parseSimulateCharacteristicResponseParams; function parseSimulateDescriptorParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth.SimulateDescriptorParametersSchema); } Bluetooth.parseSimulateDescriptorParams = parseSimulateDescriptorParams; function parseSimulateDescriptorResponseParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth .SimulateDescriptorResponseParametersSchema); } Bluetooth.parseSimulateDescriptorResponseParams = parseSimulateDescriptorResponseParams; function parseSimulateGattConnectionResponseParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth .SimulateGattConnectionResponseParametersSchema); } Bluetooth.parseSimulateGattConnectionResponseParams = parseSimulateGattConnectionResponseParams; function parseSimulateGattDisconnectionParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth .SimulateGattDisconnectionParametersSchema); } Bluetooth.parseSimulateGattDisconnectionParams = parseSimulateGattDisconnectionParams; function parseSimulatePreconnectedPeripheralParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth .SimulatePreconnectedPeripheralParametersSchema); } Bluetooth.parseSimulatePreconnectedPeripheralParams = parseSimulatePreconnectedPeripheralParams; function parseSimulateServiceParams(params) { return parseObject(params, WebDriverBidiBluetooth.Bluetooth.SimulateServiceParametersSchema); } Bluetooth.parseSimulateServiceParams = parseSimulateServiceParams; // keep-sorted end })(Bluetooth || (Bluetooth = {})); /** @see https://w3c.github.io/webdriver-bidi/#module-webExtension */ export var WebModule; (function (WebModule) { // keep-sorted start block=yes function parseInstallParams(params) { return parseObject(params, WebDriverBidi.WebExtension.InstallParametersSchema); } WebModule.parseInstallParams = parseInstallParams; function parseUninstallParams(params) { return parseObject(params, WebDriverBidi.WebExtension.UninstallParametersSchema); } WebModule.parseUninstallParams = parseUninstallParams; // keep-sorted end })(WebModule || (WebModule = {})); //# sourceMappingURL=protocol-parser.js.map