From 6d500a0568b79420113bfea38acfd616d51a4d94 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Mon, 20 Jan 2025 18:20:27 +0000 Subject: [PATCH 01/20] feat: update locators and toggle fixtures to use with simulator --- e2e/README.md | 39 +++++++------------ e2e/package.json | 1 + e2e/src/Selectors.ts | 8 +++- e2e/src/Utils.ts | 5 +++ .../screens/Android/ChromeBrowserScreen.ts | 33 +++++++++------- .../screens/Dapps/CreateReactAppDappScreen.ts | 14 +++---- .../Dapps/ReactMetamaskButtonDappScreen.ts | 4 +- e2e/src/screens/Dapps/TestDappScreen.ts | 4 +- e2e/src/screens/Dapps/VueJSDappScreen.ts | 16 ++++---- .../screens/Dapps/Web3OnBoardDappScreen.ts | 2 +- e2e/src/screens/MetaMask/SettingsScreen.ts | 2 +- .../components/ConnectModalComponent.ts | 1 + e2e/src/screens/iOS/SafariBrowserScreen.ts | 15 ++++--- .../iOS/components/IOSOpenInComponent.ts | 4 +- e2e/src/screens/interfaces/MobileBrowser.ts | 1 + e2e/test/configs/wdio.conf.ts | 2 +- e2e/test/mocha.hooks.ts | 10 ++--- e2e/test/specs/fixture_reference.ts | 27 ++++++++++--- e2e/test/specs/js_sdk.spec.ts | 21 +++++----- e2e/test/specs/web_dapp.spec.ts | 15 +++---- 20 files changed, 123 insertions(+), 101 deletions(-) diff --git a/e2e/README.md b/e2e/README.md index 8235e62a5..7008588ac 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -2,7 +2,7 @@ ### Node version -`nvm use 18` +`nvm use 20` ### Setup: @@ -12,38 +12,29 @@ `export SRP=TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST` -### Env files needed: +## Create an iOS simulator and Android emulator -.ios.env: -- BUNDLE_ID= -- DEVICE_NAME= -- PLATFORM_VERSION= -- APP_PATH= -- AUTOMATION_NAME= -- DEVICE_UDID= +### Complete your platform related env files: +`cp .ios.env.example .ios.env` -.android.env: - -- BUNDLE_ID= -- DEVICE_NAME= -- PLATFORM_VERSION= -- APP_PATH= -- AUTOMATION_NAME= -- APP_ACTIVITY= +`cp .android.env.example .android.env` .dapps.env: +``` +DEVNEXT_DAPP_URL= +WAGMI_TEST_DAPP_URL= +``` -- REACT_DAPP_URL= -- TEST_DAPP_URL= +# iOS +### Create an iOS simulator -.env: +### Run tests on iOS: -- BROWSERSTACK_USERNAME= -- BROWSERSTACK_ACCESS_KEY= +`yarn test:ios:jssdk:e2e:local` -### Run tests: +### Run tests on Android: -`yarn test:ios` +`yarn test:android:jssdk:e2e:local` #### Currently setup to run locally diff --git a/e2e/package.json b/e2e/package.json index ad03be694..8e404cb2f 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -20,6 +20,7 @@ "test:ios:jssdk:e2e:browserstack": "wdio run test/configs/browserstack/wdio.ios.app.browserstack.conf.ts --suite web_dapp", "test:ios:jssdk:e2e:local": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite web_dapp", "test:android:jssdk:e2e:local": "wdio run test/configs/local/wdio.android.app.local.conf.ts --suite web_dapp", + "test:ios:jssdk:e2e:local:fixture": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite fixture_reference", "setup": "yarn install", "build": "tsc --build", "clean": "yarn clean:reports && rm -rf node_modules", diff --git a/e2e/src/Selectors.ts b/e2e/src/Selectors.ts index b2b15d252..aab8c2835 100644 --- a/e2e/src/Selectors.ts +++ b/e2e/src/Selectors.ts @@ -1,6 +1,7 @@ import { WDIO_ACCESSIBILITY_ID, WDIO_ANDROID_UI_AUTOMATOR, + WDIO_IOS_CLASS_CHAIN, WDIO_IOS_PREDICATE_STRING, WDIO_RESOURCE_ID, WDIO_XPATH, @@ -63,17 +64,20 @@ export class AndroidSelector extends WDIOSelector { export class IOSSelector extends WDIOSelector { private predicateStringSelector = ''; + private classChainSelector = ''; + constructor() { super(); this.predicateStringSelector = `${WDIO_IOS_PREDICATE_STRING}`; + this.classChainSelector = `${WDIO_IOS_CLASS_CHAIN}`; } predicateString(predicateString: string): string { return this.predicateStringSelector.concat(predicateString); } - iosClassChain(classChain: string): string { - return this.predicateStringSelector.concat(classChain); + classChain(classChain: string): string { + return this.classChainSelector.concat(classChain); } static by() { diff --git a/e2e/src/Utils.ts b/e2e/src/Utils.ts index 7a6344668..4dd1d7d1e 100644 --- a/e2e/src/Utils.ts +++ b/e2e/src/Utils.ts @@ -1,3 +1,4 @@ +import path from 'path'; import ADB from 'appium-adb'; import { driver } from '@wdio/globals'; import { FixtureBuilder } from '../test/fixtures/FixtureBuilder'; @@ -179,6 +180,10 @@ export const launchMetaMaskWithFixture = async ( fixtureServer: FixtureServer, bundleId: string, ) => { + const appPath = path.join(process.env.APP_PATH || ''); + await driver.removeApp(bundleId); + await driver.installApp(appPath); + // NOT NEEDED FOR BrowserStack if (PLATFORM === Platforms.ANDROID) { console.log('Android test detected. Reversing TCP ports...'); diff --git a/e2e/src/screens/Android/ChromeBrowserScreen.ts b/e2e/src/screens/Android/ChromeBrowserScreen.ts index 11eac8f50..fc34ebe0c 100644 --- a/e2e/src/screens/Android/ChromeBrowserScreen.ts +++ b/e2e/src/screens/Android/ChromeBrowserScreen.ts @@ -4,8 +4,7 @@ import { getSelectorForPlatform } from '../../Utils'; import { MobileBrowser } from '../interfaces/MobileBrowser'; import { AndroidSelector } from '../../Selectors'; import { Dapp } from '../interfaces/Dapp'; -import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '../../../src/Constants'; -import { waitUntil } from 'webdriverio/build/commands/browser'; +import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '../../Constants'; class ChromeBrowserScreen implements MobileBrowser { get urlAddressBar(): ChainablePromiseElement { @@ -105,7 +104,7 @@ class ChromeBrowserScreen implements MobileBrowser { await this.urlAddressBar.clearValue(); await this.urlAddressBar.setValue(address); await driver.pressKeyCode(66); - } + } await this.refreshPage(); @@ -115,13 +114,17 @@ class ChromeBrowserScreen implements MobileBrowser { const isWebDappLoaded = async () => { let retries = 20; // TODO: refactor this to use the page object - let isConnectButtonDisplayed = await ((await pageObject.connectButton) as ChainablePromiseElement).isDisplayed(); + let isConnectButtonDisplayed = await ( + (await pageObject.connectButton) as ChainablePromiseElement + ).isDisplayed(); while (!isConnectButtonDisplayed && retries > 0) { // Waits for 2 seconds before checking again await driver.pause(2000); - isConnectButtonDisplayed = await ((await pageObject.connectButton) as ChainablePromiseElement).isDisplayed(); - retries--; + isConnectButtonDisplayed = await ( + (await pageObject.connectButton) as ChainablePromiseElement + ).isDisplayed(); + retries -= 1; } }; @@ -129,32 +132,32 @@ class ChromeBrowserScreen implements MobileBrowser { while (!isWebDappLoaded() && attempts < WEB_DAPP_LOAD_ATTEMPTS) { await this.refreshPage(); - attempts++; + attempts += 1; } } async tapSwitchTabsButton(): Promise { - await (this.switchTabsButton).click(); + await this.switchTabsButton.click(); } async tapBrowserMoreOptionsButton(): Promise { - await (this.browserMoreOptions).click(); + await this.browserMoreOptions.click(); } async tapCloseAllTabsButton(): Promise { - await (this.closeAllTabsButton).click(); + await this.closeAllTabsButton.click(); } async tapConfirmCloseAllTabsButton(): Promise { - await (this.confirmCloseAllTabsButton).click(); + await this.confirmCloseAllTabsButton.click(); } async tapNewTabButton(): Promise { - await (this.newTabButton).click(); + await this.newTabButton.click(); } async refreshPage(): Promise { - await (this.browserMoreOptions).click(); + await this.browserMoreOptions.click(); if (await this.stopRefreshingButton.isDisplayed()) { await this.stopRefreshingButton.click(); await this.browserMoreOptions.click(); @@ -162,6 +165,10 @@ class ChromeBrowserScreen implements MobileBrowser { await this.refreshButton.click(); await driver.pause(6000); // Wait for the page to refresh } + + async launchBrowser(): Promise { + // TODO + } } const chromeBrowserScreen = new ChromeBrowserScreen(); diff --git a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts b/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts index ae8c1f879..a7bc52e7a 100644 --- a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts +++ b/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts @@ -11,8 +11,8 @@ class CreateReactAppDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Connect"]', ), - iosSelector: IOSSelector.by().iosClassChain( - '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', + iosSelector: IOSSelector.by().classChain( + '**/XCUIElementTypeButton[`name == "Connect"`]', ), }), ); @@ -24,7 +24,7 @@ class CreateReactAppDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Connect w/ Sign"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', ), }), @@ -37,7 +37,7 @@ class CreateReactAppDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Terminate"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "Terminate"`]', ), }), @@ -50,7 +50,7 @@ class CreateReactAppDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="personal_sign"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "personal_sign"`]', ), }), @@ -63,7 +63,7 @@ class CreateReactAppDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="eth_signTypedData_v4"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "eth_signTypedData_v4"`]', ), }), @@ -76,7 +76,7 @@ class CreateReactAppDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Send transaction"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "Send transaction"`]', ), }), diff --git a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts b/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts index 8698d8fc0..56ae5dfa9 100644 --- a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts +++ b/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts @@ -10,7 +10,7 @@ class ReactMetamaskButtonDappScreen { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Connect wallet"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', ), }), @@ -23,7 +23,7 @@ class ReactMetamaskButtonDappScreen { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Terminate"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "Terminate"`]', ), }), diff --git a/e2e/src/screens/Dapps/TestDappScreen.ts b/e2e/src/screens/Dapps/TestDappScreen.ts index f5e73075a..49ec575a1 100644 --- a/e2e/src/screens/Dapps/TestDappScreen.ts +++ b/e2e/src/screens/Dapps/TestDappScreen.ts @@ -24,7 +24,7 @@ class TestDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@resource-id="personalSign"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "SIGN"`][2]', ), }), @@ -37,7 +37,7 @@ class TestDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@resource-id="signTypedDataV3"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "SIGN"`][4]', ), }), diff --git a/e2e/src/screens/Dapps/VueJSDappScreen.ts b/e2e/src/screens/Dapps/VueJSDappScreen.ts index 933cde827..09e3ec2b8 100644 --- a/e2e/src/screens/Dapps/VueJSDappScreen.ts +++ b/e2e/src/screens/Dapps/VueJSDappScreen.ts @@ -11,7 +11,7 @@ class VueJSDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Connect"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', ), }), @@ -24,7 +24,7 @@ class VueJSDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Connect w/ sign"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', ), }), @@ -37,7 +37,7 @@ class VueJSDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="TERMINATE"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "Terminate"`]', ), }), @@ -50,7 +50,7 @@ class VueJSDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="personal_sign"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "personal_sign"`]', ), }), @@ -63,7 +63,7 @@ class VueJSDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="eth_signTypedData_v4"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "eth_signTypedData_v4"`]', ), }), @@ -76,7 +76,7 @@ class VueJSDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Send transaction"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "Send transaction"`]', ), }), @@ -89,7 +89,7 @@ class VueJSDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Switch to Polygon"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "Send transaction"`]', ), }), @@ -102,7 +102,7 @@ class VueJSDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Switch to Mainnet"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "Send transaction"`]', ), }), diff --git a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts b/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts index c0757ae05..259e94805 100644 --- a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts +++ b/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts @@ -33,7 +33,7 @@ class Web3OnBoardDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="disconnect"]', ), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeButton[`name == "Terminate"`]', ), }), diff --git a/e2e/src/screens/MetaMask/SettingsScreen.ts b/e2e/src/screens/MetaMask/SettingsScreen.ts index 531186b8c..1fd9264bc 100644 --- a/e2e/src/screens/MetaMask/SettingsScreen.ts +++ b/e2e/src/screens/MetaMask/SettingsScreen.ts @@ -77,7 +77,7 @@ class SettingsScreen { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().uiAutomatorAndText(''), - iosSelector: IOSSelector.by().iosClassChain( + iosSelector: IOSSelector.by().classChain( '**/XCUIElementTypeStaticText[`label == "No connections found"`]', ), }), diff --git a/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts b/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts index fac07301f..f0f1f427f 100644 --- a/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts @@ -43,6 +43,7 @@ class ConnectModalComponent { await this.connectApprovalButton.waitForEnabled({ timeout: 10000, }); + await driver.pause(2000); await this.connectApprovalButton.click(); } } diff --git a/e2e/src/screens/iOS/SafariBrowserScreen.ts b/e2e/src/screens/iOS/SafariBrowserScreen.ts index efda8b9f7..8ad8a3192 100644 --- a/e2e/src/screens/iOS/SafariBrowserScreen.ts +++ b/e2e/src/screens/iOS/SafariBrowserScreen.ts @@ -4,7 +4,6 @@ import { driver } from '@wdio/globals'; import { getSelectorForPlatform } from '../../Utils'; import { MobileBrowser } from '../interfaces/MobileBrowser'; import { IOSSelector } from '../../Selectors'; -import { Dapp } from '../interfaces/Dapp'; import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '../../Constants'; class SafariBrowserScreen implements MobileBrowser { @@ -46,11 +45,7 @@ class SafariBrowserScreen implements MobileBrowser { } async goToAddress(address: string): Promise { - const currentAppState = await driver.queryAppState(Browsers.SAFARI); - // 4 is the state for the app being running in the foreground - if (currentAppState !== 4) { - await driver.activateApp(Browsers.SAFARI); - } + await this.launchBrowser(); const addressPrefix = address.substring(8, 16); if (!(await this.urlAddressBar.getText()).includes(addressPrefix)) { @@ -90,6 +85,14 @@ class SafariBrowserScreen implements MobileBrowser { attempts += 1; } } + + async launchBrowser(): Promise { + const currentAppState = await driver.queryAppState(Browsers.SAFARI); + // 4 is the state for the app being running in the foreground + if (currentAppState !== 4) { + await driver.activateApp(Browsers.SAFARI); + } + } } const safariBrowserScreen = new SafariBrowserScreen(); diff --git a/e2e/src/screens/iOS/components/IOSOpenInComponent.ts b/e2e/src/screens/iOS/components/IOSOpenInComponent.ts index 6019e3926..a96346f9f 100644 --- a/e2e/src/screens/iOS/components/IOSOpenInComponent.ts +++ b/e2e/src/screens/iOS/components/IOSOpenInComponent.ts @@ -7,8 +7,8 @@ class IOSOpenInComponent { get open(): ChainablePromiseElement { return $( getSelectorForPlatform({ - iosSelector: IOSSelector.by().predicateString( - 'name == "Open" AND label == "Open" AND value == "Open"', + iosSelector: IOSSelector.by().xpath( + '//XCUIElementTypeStaticText[@name="Open"]', ), }), ); diff --git a/e2e/src/screens/interfaces/MobileBrowser.ts b/e2e/src/screens/interfaces/MobileBrowser.ts index a1486bd8b..f75cf4c85 100644 --- a/e2e/src/screens/interfaces/MobileBrowser.ts +++ b/e2e/src/screens/interfaces/MobileBrowser.ts @@ -3,4 +3,5 @@ import { Dapp } from './Dapp'; export type MobileBrowser = { goToAddress(address: string, pageObject: Dapp): Promise; refreshPage(): Promise; + launchBrowser(): Promise; }; diff --git a/e2e/test/configs/wdio.conf.ts b/e2e/test/configs/wdio.conf.ts index bd63abd87..17bffdbc9 100644 --- a/e2e/test/configs/wdio.conf.ts +++ b/e2e/test/configs/wdio.conf.ts @@ -17,7 +17,7 @@ export const config: WebdriverIO.Config = { // js_sdk: ['../../specs/js_sdk.spec.ts'], // android_sdk: ['../../specs/android_sdk.spec.ts'], // Development suite that uses fixtures - // fixture_reference: ['../../specs/fixture_reference.ts'], + fixture_reference: ['../../specs/fixture_reference.ts'], }, mochaOpts: { timeout: 360000, diff --git a/e2e/test/mocha.hooks.ts b/e2e/test/mocha.hooks.ts index 232298ab8..7cbca8742 100644 --- a/e2e/test/mocha.hooks.ts +++ b/e2e/test/mocha.hooks.ts @@ -1,3 +1,4 @@ +import { driver } from '@wdio/globals'; import { killApp, launchApp, launchMetaMask } from '../src/Utils'; import LockScreen from '../src/screens/MetaMask/LockScreen'; import { NATIVE_OS_APPS, WALLET_PASSWORD, SRP } from '../src/Constants'; @@ -16,7 +17,6 @@ import AndroidSettingsScreen from '../src/screens/Android/AndroidSettingsScreen' import AndroidSettingsOpeningLinksScreen from '../src/screens/Android/AndroidSettingsOpeningLinksScreen'; import WalletReadyScreen from '../src/screens/MetaMask/WalletReadyScreen'; import EnableSmartTransactionsComponent from '../src/screens/MetaMask/components/EnableSmartTransactionsComponent'; -import { driver } from '@wdio/globals'; const goToSettingsAndClearAllConnections = async () => { try { @@ -57,10 +57,6 @@ const setAndroidDefaultLinks = async () => { } }; -export const onboardMM = async () => { - await beforeHook(); -}; - export const beforeHook = async () => { if (driver.isAndroid) { await setAndroidDefaultLinks(); @@ -94,6 +90,10 @@ export const beforeHook = async () => { // await WhatsNewComponent.closeModal(); }; +export const onboardMM = async () => { + await beforeHook(); +}; + export const beforeEachHook = async () => { await launchMetaMask(); await LockScreen.unlockMMifLocked(WALLET_PASSWORD); diff --git a/e2e/test/specs/fixture_reference.ts b/e2e/test/specs/fixture_reference.ts index bfc5173e6..90d55b793 100644 --- a/e2e/test/specs/fixture_reference.ts +++ b/e2e/test/specs/fixture_reference.ts @@ -1,18 +1,22 @@ import { driver } from '@wdio/globals'; +import connectModalComponent from '../../src/screens/MetaMask/components/ConnectModalComponent'; +import ChromeBrowserScreen from '../../src/screens/Android/ChromeBrowserScreen'; import FixtureServer from '../fixtures/FixtureServer'; import LockScreen from '../../src/screens/MetaMask/LockScreen'; -import { launchMetaMaskWithFixture } from '../../src/Utils'; +import { goBack, launchMetaMaskWithFixture } from '../../src/Utils'; import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '../../src/Constants'; import { stopFixtureServer } from '../fixtures/FixtureHelper'; +import CreateReactAppDappScreen from '../../src/screens/Dapps/CreateReactAppDappScreen'; +import IOSOpenInComponent from '../../src/screens/iOS/components/IOSOpenInComponent'; +import SafariBrowserScreen from '../../src/screens/iOS/SafariBrowserScreen'; const fixtureServer = new FixtureServer(); // This test reference will be kept for the work in progress of integrating the // fixtureServer -describe.skip('Fixture test', () => { +describe('Fixture test', () => { before(async () => { await launchMetaMaskWithFixture(fixtureServer, METAMASK_BUNDLE_ID); - await LockScreen.unlockMM(WALLET_PASSWORD); }); @@ -22,8 +26,19 @@ describe.skip('Fixture test', () => { it('should wait', async () => { console.log('Dummy waiting for 50 seconds'); - await driver.pause(10000); - await driver.pause(10000); - await driver.pause(10000); + const browserScreen = driver.isIOS + ? SafariBrowserScreen + : ChromeBrowserScreen; + + await browserScreen.goToAddress( + 'https://react.cursedlab.xyz', + CreateReactAppDappScreen, + ); + + await CreateReactAppDappScreen.connectButton.click(); + await IOSOpenInComponent.tapOpen(); + await connectModalComponent.tapConnectApproval(); + await driver.pause(2000); + await goBack(); }); }); diff --git a/e2e/test/specs/js_sdk.spec.ts b/e2e/test/specs/js_sdk.spec.ts index 96121c74f..5cb707a81 100644 --- a/e2e/test/specs/js_sdk.spec.ts +++ b/e2e/test/specs/js_sdk.spec.ts @@ -19,18 +19,17 @@ import IOSOpenInComponent from '../../src/screens/iOS/components/IOSOpenInCompon import { beforeEachHook, beforeHook } from '../mocha.hooks'; import DevnextJSDappScreen from '../../src/screens/Dapps/DevnextJSDappScreen'; - /* -* @deprecated -* -* This test suite is deprecated and will be removed in the future. -* It is currently being kept for reference purposes. -* -* The tests within this suite were originally designed to test the MetaMask -* JavaScript SDK. However, the current implementation of the SDK has changed, -* and the tests are no longer applicable. -* -*/ + * @deprecated + * + * This test suite is deprecated and will be removed in the future. + * It is currently being kept for reference purposes. + * + * The tests within this suite were originally designed to test the MetaMask + * JavaScript SDK. However, the current implementation of the SDK has changed, + * and the tests are no longer applicable. + * + */ describe.skip('JS SDK E2E', () => { before(async () => { await beforeHook(); diff --git a/e2e/test/specs/web_dapp.spec.ts b/e2e/test/specs/web_dapp.spec.ts index c74c9079d..e3e250c77 100644 --- a/e2e/test/specs/web_dapp.spec.ts +++ b/e2e/test/specs/web_dapp.spec.ts @@ -3,7 +3,7 @@ import { deviceOpenDeeplinkWithMetaMask, goBack, killApp, - launchMetaMask, + launchMetaMaskWithFixture, navigateToWebMobileDapp, } from '../../src/Utils'; import DevnextJSDappScreen from '../../src/screens/Dapps/DevnextJSDappScreen'; @@ -11,25 +11,20 @@ import LockScreen from '../../src/screens/MetaMask/LockScreen'; import ConnectModalComponent from '../../src/screens/MetaMask/components/ConnectModalComponent'; import PersonalSignConfirmationComponent from '../../src/screens/MetaMask/components/PersonalSignConfirmationComponent'; import AndroidOpenWithComponent from '../../src/screens/Android/components/AndroidOpenWithComponent'; -import { onboardMM } from '../mocha.hooks'; +import FixtureServer from '../fixtures/FixtureServer'; let devNextDappUrl: string; +const fixtureServer = new FixtureServer(); describe('Devnext E2E', () => { before(async () => { devNextDappUrl = process.env.DEVNEXT_DAPP_URL ?? ''; expect(devNextDappUrl).toBeDefined(); - await launchMetaMask(); - const isMMOnboarded = await LockScreen.isMMOnboarded(); - if (!isMMOnboarded) { - await onboardMM(); - } - + await launchMetaMaskWithFixture(fixtureServer, METAMASK_BUNDLE_ID); + await LockScreen.unlockMM(WALLET_PASSWORD); }); - beforeEach(async () => {}); - it('should connect with a cold start state', async () => { await navigateToWebMobileDapp(devNextDappUrl, DevnextJSDappScreen); // Start with a cold start From 204229b91820f5d0848da20daeec6b7f98d464b3 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Tue, 21 Jan 2025 14:36:26 +0000 Subject: [PATCH 02/20] feat: use path aliases for readable imports, prepare MWC e2e tests --- e2e/.ios.env.example | 8 +- e2e/{test => src}/fixtures/FixtureBuilder.ts | 0 e2e/{test => src}/fixtures/FixtureHelper.ts | 6 +- e2e/{test => src}/fixtures/FixtureServer.ts | 2 +- .../AndroidSettingsOpeningLinksScreen.ts | 8 +- .../screens/Android/AndroidSettingsScreen.ts | 8 +- .../screens/Android/ChromeBrowserScreen.ts | 10 +-- .../components/AndroidOpenWithComponent.ts | 4 +- e2e/src/screens/Dapps/AndroidSDKDappScreen.ts | 6 +- .../screens/Dapps/CreateReactAppDappScreen.ts | 6 +- e2e/src/screens/Dapps/DevnextJSDappScreen.ts | 10 +-- e2e/src/screens/Dapps/NextJSDappScreen.ts | 6 +- .../Dapps/ReactMetamaskButtonDappScreen.ts | 4 +- .../screens/Dapps/ReactNativeDappScreen.ts | 6 +- .../screens/Dapps/SdkPlaygroundDappScreen.ts | 8 +- e2e/src/screens/Dapps/TestDappScreen.ts | 8 +- e2e/src/screens/Dapps/UnityDappScreen.ts | 6 +- e2e/src/screens/Dapps/VueJSDappScreen.ts | 6 +- .../screens/Dapps/Web3OnBoardDappScreen.ts | 6 +- e2e/src/screens/Dapps/iOSNativeDappScreen.ts | 6 +- e2e/src/screens/MetaMask/GetStartedScreen.ts | 4 +- .../screens/MetaMask/ImportFromSeedScreen.ts | 4 +- e2e/src/screens/MetaMask/LockScreen.ts | 11 +-- e2e/src/screens/MetaMask/MainScreen.ts | 4 +- .../screens/MetaMask/OptinMetricsScreen.ts | 6 +- e2e/src/screens/MetaMask/SecurityUpdates.ts | 4 +- e2e/src/screens/MetaMask/SettingsScreen.ts | 6 +- e2e/src/screens/MetaMask/TermsOfUseScreen.ts | 4 +- e2e/src/screens/MetaMask/WalletReadyScreen.ts | 4 +- e2e/src/screens/MetaMask/WalletSetupScreen.ts | 4 +- .../components/BottomNavigationComponent.ts | 4 +- .../components/ConnectModalComponent.ts | 4 +- .../EnableSmartTransactionsComponent.ts | 4 +- .../components/MetaMetricsComponent.ts | 4 +- .../NetworkSwitchedModalComponent.ts | 4 +- .../PersonalSignConfirmationComponent.ts | 9 ++- .../components/SendTxModalComponent.ts | 4 +- .../MetaMask/components/SignModalComponent.ts | 4 +- .../components/SwitchNetworkModalComponent.ts | 4 +- .../MetaMask/components/WelcomeComponent.ts | 5 +- .../MetaMask/components/WhatsNewComponent.ts | 4 +- e2e/src/screens/iOS/SafariBrowserScreen.ts | 8 +- .../iOS/components/IOSOpenInComponent.ts | 4 +- e2e/src/screens/interfaces/Dapp.ts | 2 +- e2e/src/screens/interfaces/MobileBrowser.ts | 2 +- e2e/src/{ => util}/Constants.ts | 0 e2e/src/{ => util}/Gestures.ts | 5 +- e2e/src/{ => util}/Selectors.ts | 0 e2e/src/{ => util}/Utils.ts | 35 ++++----- e2e/src/{ => util}/helpers.ts | 0 e2e/src/{ => util}/types.ts | 0 .../wdio.android.app.browserstack.conf.ts | 2 +- e2e/test/mocha.hooks.ts | 36 ++++----- e2e/test/specs/{ => core}/web_dapp.spec.ts | 18 ++--- e2e/test/specs/fixture_reference.ts | 20 ++--- e2e/test/specs/js_sdk.spec.ts | 78 +++++++++---------- .../fixture_reference.ts | 44 +++++++++++ .../specs/{ => native}/android_sdk.spec.ts | 22 +++--- e2e/tsconfig.json | 3 +- 59 files changed, 274 insertions(+), 230 deletions(-) rename e2e/{test => src}/fixtures/FixtureBuilder.ts (100%) rename e2e/{test => src}/fixtures/FixtureHelper.ts (90%) rename e2e/{test => src}/fixtures/FixtureServer.ts (96%) rename e2e/src/{ => util}/Constants.ts (100%) rename e2e/src/{ => util}/Gestures.ts (96%) rename e2e/src/{ => util}/Selectors.ts (100%) rename e2e/src/{ => util}/Utils.ts (91%) rename e2e/src/{ => util}/helpers.ts (100%) rename e2e/src/{ => util}/types.ts (100%) rename e2e/test/specs/{ => core}/web_dapp.spec.ts (75%) create mode 100644 e2e/test/specs/multi-wallet-connector/fixture_reference.ts rename e2e/test/specs/{ => native}/android_sdk.spec.ts (64%) diff --git a/e2e/.ios.env.example b/e2e/.ios.env.example index 02c420fc9..0e201e628 100644 --- a/e2e/.ios.env.example +++ b/e2e/.ios.env.example @@ -1,7 +1,7 @@ BUNDLE_ID= -DEVICE_NAME= -PLATFORM_VERSION= -APP_PATH= -AUTOMATION_NAME= +DEVICE_NAME=iPhone 16 Pro +PLATFORM_VERSION=18.2 +APP_PATH=METAMASK_APP_PATH +AUTOMATION_NAME=XCUITest DEVICE_UDID= diff --git a/e2e/test/fixtures/FixtureBuilder.ts b/e2e/src/fixtures/FixtureBuilder.ts similarity index 100% rename from e2e/test/fixtures/FixtureBuilder.ts rename to e2e/src/fixtures/FixtureBuilder.ts diff --git a/e2e/test/fixtures/FixtureHelper.ts b/e2e/src/fixtures/FixtureHelper.ts similarity index 90% rename from e2e/test/fixtures/FixtureHelper.ts rename to e2e/src/fixtures/FixtureHelper.ts index 76420e6f4..83ac1f38d 100644 --- a/e2e/test/fixtures/FixtureHelper.ts +++ b/e2e/src/fixtures/FixtureHelper.ts @@ -1,7 +1,7 @@ import axios from 'axios'; -import { FIXTURE_SERVER_URL } from '../../src/Constants'; -import FixtureServer from './FixtureServer'; -import { FixtureBuilder } from './FixtureBuilder'; +import FixtureServer from '@/fixtures/FixtureServer'; +import { FixtureBuilder } from '@/fixtures/FixtureBuilder'; +import { FIXTURE_SERVER_URL } from '@/util/Constants'; // checks if server has already been started const isFixtureServerStarted = async () => { diff --git a/e2e/test/fixtures/FixtureServer.ts b/e2e/src/fixtures/FixtureServer.ts similarity index 96% rename from e2e/test/fixtures/FixtureServer.ts rename to e2e/src/fixtures/FixtureServer.ts index 28ac3066b..be9a0f5fb 100644 --- a/e2e/test/fixtures/FixtureServer.ts +++ b/e2e/src/fixtures/FixtureServer.ts @@ -1,6 +1,6 @@ import Koa from 'koa'; import * as http from "http"; -import { FIXTURE_SERVER_HOST, FIXTURE_SERVER_PORT } from '../../src/Constants'; +import { FIXTURE_SERVER_HOST, FIXTURE_SERVER_PORT } from '@/util/Constants'; const CURRENT_STATE_KEY = '__CURRENT__'; const DEFAULT_STATE_KEY = '__DEFAULT__'; diff --git a/e2e/src/screens/Android/AndroidSettingsOpeningLinksScreen.ts b/e2e/src/screens/Android/AndroidSettingsOpeningLinksScreen.ts index 229d16ff0..d6ab88c3a 100644 --- a/e2e/src/screens/Android/AndroidSettingsOpeningLinksScreen.ts +++ b/e2e/src/screens/Android/AndroidSettingsOpeningLinksScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { METAMASK_APP_NAME_ANDROID } from '../../Constants'; -import Gestures from '../../Gestures'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector } from '../../Selectors'; +import { METAMASK_APP_NAME_ANDROID } from '@/util/Constants'; +import Gestures from '@/util/Gestures'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector } from '@/util/Selectors'; class AndroidSettingsOpeningLinksScreen { get openingLinksMetaMaskAppOption(): ChainablePromiseElement { diff --git a/e2e/src/screens/Android/AndroidSettingsScreen.ts b/e2e/src/screens/Android/AndroidSettingsScreen.ts index 116a9417c..1f74b3c88 100644 --- a/e2e/src/screens/Android/AndroidSettingsScreen.ts +++ b/e2e/src/screens/Android/AndroidSettingsScreen.ts @@ -1,13 +1,13 @@ import { ChainablePromiseArray, ChainablePromiseElement } from 'webdriverio'; import { $$ } from '@wdio/globals'; -import Gestures from '../../Gestures'; -import { getSelectorForPlatform } from '../../Utils'; +import Gestures from '@/util/Gestures'; +import { getSelectorForPlatform } from '@/util/Utils'; import { IS_RUNNING_IN_BROWSER_STACK, METAMASK_APP_NAME_ANDROID, -} from '../../Constants'; -import { AndroidSelector } from '../../Selectors'; +} from '@/util/Constants'; +import { AndroidSelector } from '@/util/Selectors'; class AndroidSettingsScreen { get metaMaskQALinksButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Android/ChromeBrowserScreen.ts b/e2e/src/screens/Android/ChromeBrowserScreen.ts index fc34ebe0c..b405e7188 100644 --- a/e2e/src/screens/Android/ChromeBrowserScreen.ts +++ b/e2e/src/screens/Android/ChromeBrowserScreen.ts @@ -1,10 +1,10 @@ import { ChainablePromiseElement } from 'webdriverio'; import { driver } from '@wdio/globals'; -import { getSelectorForPlatform } from '../../Utils'; -import { MobileBrowser } from '../interfaces/MobileBrowser'; -import { AndroidSelector } from '../../Selectors'; -import { Dapp } from '../interfaces/Dapp'; -import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '../../Constants'; +import { MobileBrowser } from '@/screens/interfaces/MobileBrowser'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector } from '@/util/Selectors'; +import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '@/util/Constants'; class ChromeBrowserScreen implements MobileBrowser { get urlAddressBar(): ChainablePromiseElement { diff --git a/e2e/src/screens/Android/components/AndroidOpenWithComponent.ts b/e2e/src/screens/Android/components/AndroidOpenWithComponent.ts index 9970a9112..c7dabba4e 100644 --- a/e2e/src/screens/Android/components/AndroidOpenWithComponent.ts +++ b/e2e/src/screens/Android/components/AndroidOpenWithComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector } from '@/util/Selectors'; class AndroidOpenWithComponent { get openWithMetaMaskQA(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts b/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts index 8fcc28590..4f6779d5c 100644 --- a/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts +++ b/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { AndroidSelector } from '../../Selectors'; -import { getSelectorForPlatform } from '../../Utils'; -import { Dapp } from '../interfaces/Dapp'; +import { AndroidSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; class AndroidSDKDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts b/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts index a7bc52e7a..c93e58558 100644 --- a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts +++ b/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { Dapp } from '../interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class CreateReactAppDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/DevnextJSDappScreen.ts b/e2e/src/screens/Dapps/DevnextJSDappScreen.ts index 0d9a30bf5..29e20251c 100644 --- a/e2e/src/screens/Dapps/DevnextJSDappScreen.ts +++ b/e2e/src/screens/Dapps/DevnextJSDappScreen.ts @@ -1,9 +1,9 @@ import { ChainablePromiseElement } from 'webdriverio'; import { visibilityOf } from 'wdio-wait-for'; -import { getSelectorForPlatform, scrollToElement } from '../../Utils'; -import { Dapp } from '../interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform, scrollToElement } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class DevnextDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -62,9 +62,7 @@ class DevnextDappScreen implements Dapp { androidSelector: AndroidSelector.by().xpath( '//android.widget.TextView[@text="YES"]', ), - iosSelector: IOSSelector.by().predicateString( - 'name == "YES"', - ), + iosSelector: IOSSelector.by().predicateString('name == "YES"'), }), ); } diff --git a/e2e/src/screens/Dapps/NextJSDappScreen.ts b/e2e/src/screens/Dapps/NextJSDappScreen.ts index 116c37dba..86882ae45 100644 --- a/e2e/src/screens/Dapps/NextJSDappScreen.ts +++ b/e2e/src/screens/Dapps/NextJSDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { Dapp } from '../interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class NextJSDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts b/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts index 56ae5dfa9..c2d94ffd7 100644 --- a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts +++ b/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; -import { getSelectorForPlatform } from '../../Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; class ReactMetamaskButtonDappScreen { get connectButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/ReactNativeDappScreen.ts b/e2e/src/screens/Dapps/ReactNativeDappScreen.ts index 64dd5ec0e..32ae68fa5 100644 --- a/e2e/src/screens/Dapps/ReactNativeDappScreen.ts +++ b/e2e/src/screens/Dapps/ReactNativeDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { Dapp } from '../interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class ReactNativeDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts b/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts index 58cd9e4c7..03cd92029 100644 --- a/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts +++ b/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts @@ -1,9 +1,9 @@ import { ChainablePromiseElement } from 'webdriverio'; -import Gestures from '../../Gestures'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; -import { getSelectorForPlatform } from '../../Utils'; -import { Dapp } from '../interfaces/Dapp'; +import Gestures from '@/util/Gestures'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; class SdkPlaygroundDappScreen implements Dapp { get demoProviderButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/TestDappScreen.ts b/e2e/src/screens/Dapps/TestDappScreen.ts index 49ec575a1..16dd6d44a 100644 --- a/e2e/src/screens/Dapps/TestDappScreen.ts +++ b/e2e/src/screens/Dapps/TestDappScreen.ts @@ -1,10 +1,10 @@ import { ChainablePromiseElement } from 'webdriverio'; import { driver } from '@wdio/globals'; -import { Dapp } from '../interfaces/Dapp'; -import Gestures from '../../Gestures'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import Gestures from '@/util/Gestures'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class TestDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/UnityDappScreen.ts b/e2e/src/screens/Dapps/UnityDappScreen.ts index f7dd3f325..79b952ea1 100644 --- a/e2e/src/screens/Dapps/UnityDappScreen.ts +++ b/e2e/src/screens/Dapps/UnityDappScreen.ts @@ -1,6 +1,6 @@ -import { UnityDappElement } from '../../types'; -import Gestures from '../../Gestures'; -import { Dapp } from '../interfaces/Dapp'; +import { UnityDappElement } from '@/util/types'; +import Gestures from '@/util/Gestures'; +import { Dapp } from '@/screens/interfaces/Dapp'; class UnityDappScreen implements Dapp { get connectButton(): UnityDappElement { diff --git a/e2e/src/screens/Dapps/VueJSDappScreen.ts b/e2e/src/screens/Dapps/VueJSDappScreen.ts index 09e3ec2b8..0519396ce 100644 --- a/e2e/src/screens/Dapps/VueJSDappScreen.ts +++ b/e2e/src/screens/Dapps/VueJSDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { Dapp } from '../interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class VueJSDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts b/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts index 259e94805..962450c0b 100644 --- a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts +++ b/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { Dapp } from '../interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class Web3OnBoardDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/iOSNativeDappScreen.ts b/e2e/src/screens/Dapps/iOSNativeDappScreen.ts index c0adb51ab..22958ded2 100644 --- a/e2e/src/screens/Dapps/iOSNativeDappScreen.ts +++ b/e2e/src/screens/Dapps/iOSNativeDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { Dapp } from '../interfaces/Dapp'; -import { IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import { IOSSelector } from '@/util/Selectors'; class IOSNNativeDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/GetStartedScreen.ts b/e2e/src/screens/MetaMask/GetStartedScreen.ts index 799aaad4a..73d06bda1 100644 --- a/e2e/src/screens/MetaMask/GetStartedScreen.ts +++ b/e2e/src/screens/MetaMask/GetStartedScreen.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class GetStartedScreen { get getStartedButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/ImportFromSeedScreen.ts b/e2e/src/screens/MetaMask/ImportFromSeedScreen.ts index 63dff1a8d..356f12861 100644 --- a/e2e/src/screens/MetaMask/ImportFromSeedScreen.ts +++ b/e2e/src/screens/MetaMask/ImportFromSeedScreen.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class ImportFromSeedScreen { get srpInput(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/LockScreen.ts b/e2e/src/screens/MetaMask/LockScreen.ts index d6b98d3ff..6463f5af2 100644 --- a/e2e/src/screens/MetaMask/LockScreen.ts +++ b/e2e/src/screens/MetaMask/LockScreen.ts @@ -1,9 +1,9 @@ import { ChainablePromiseElement } from 'webdriverio'; import { driver } from '@wdio/globals'; import { visibilityOf } from 'wdio-wait-for'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; import MainScreen from './MainScreen'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class LockScreen { get passwordInput(): ChainablePromiseElement { @@ -50,7 +50,8 @@ class LockScreen { .waitUntil(visibilityOf(this.loginTitle), { timeout: 10000, interval: 5000, - timeoutMsg: 'Welcome Back! is not visible. Assuming Wallet is not onboarded', + timeoutMsg: + 'Welcome Back! is not visible. Assuming Wallet is not onboarded', }) .catch((e) => { console.error('Error unlocking MM: ', e); @@ -83,8 +84,8 @@ class LockScreen { }) .then(async () => { // await driver.pause(5000); - await (this.passwordInput).setValue(password); - await (this.unlockButton).click(); + await this.passwordInput.setValue(password); + await this.unlockButton.click(); // Wait for the wallet to be unlocked await driver.pause(3500); }) diff --git a/e2e/src/screens/MetaMask/MainScreen.ts b/e2e/src/screens/MetaMask/MainScreen.ts index 7cc0458d7..d43c76a18 100644 --- a/e2e/src/screens/MetaMask/MainScreen.ts +++ b/e2e/src/screens/MetaMask/MainScreen.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class MainScreen { get networkSwitcher(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/OptinMetricsScreen.ts b/e2e/src/screens/MetaMask/OptinMetricsScreen.ts index 66c6c164f..5ac71cd55 100644 --- a/e2e/src/screens/MetaMask/OptinMetricsScreen.ts +++ b/e2e/src/screens/MetaMask/OptinMetricsScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import Gestures from '../../Gestures'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import Gestures from '../../util/Gestures'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class OptinMetricsScreen { get acceptOptinMetrics(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/SecurityUpdates.ts b/e2e/src/screens/MetaMask/SecurityUpdates.ts index 5c66dc7f0..c1cf15186 100644 --- a/e2e/src/screens/MetaMask/SecurityUpdates.ts +++ b/e2e/src/screens/MetaMask/SecurityUpdates.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class SecurityUpdatesScreen { get noThanksSecurityUpdates(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/SettingsScreen.ts b/e2e/src/screens/MetaMask/SettingsScreen.ts index 1fd9264bc..3949f8310 100644 --- a/e2e/src/screens/MetaMask/SettingsScreen.ts +++ b/e2e/src/screens/MetaMask/SettingsScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import Gestures from '../../Gestures'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import Gestures from '../../util/Gestures'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class SettingsScreen { get securityAndPrivacyButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/TermsOfUseScreen.ts b/e2e/src/screens/MetaMask/TermsOfUseScreen.ts index ce9e54bbe..398dcc9cb 100644 --- a/e2e/src/screens/MetaMask/TermsOfUseScreen.ts +++ b/e2e/src/screens/MetaMask/TermsOfUseScreen.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class TermsOfUseScreen { get acceptTermsOfUseCheckbox(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/WalletReadyScreen.ts b/e2e/src/screens/MetaMask/WalletReadyScreen.ts index 393d665e2..8af25d599 100644 --- a/e2e/src/screens/MetaMask/WalletReadyScreen.ts +++ b/e2e/src/screens/MetaMask/WalletReadyScreen.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class WalletReadyScreen { get doneButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/WalletSetupScreen.ts b/e2e/src/screens/MetaMask/WalletSetupScreen.ts index 0724d3053..afb8b438c 100644 --- a/e2e/src/screens/MetaMask/WalletSetupScreen.ts +++ b/e2e/src/screens/MetaMask/WalletSetupScreen.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../Utils'; -import { AndroidSelector, IOSSelector } from '../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class WalletSetupScreen { get importWithSRP(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/BottomNavigationComponent.ts b/e2e/src/screens/MetaMask/components/BottomNavigationComponent.ts index e2e93bede..56748e523 100644 --- a/e2e/src/screens/MetaMask/components/BottomNavigationComponent.ts +++ b/e2e/src/screens/MetaMask/components/BottomNavigationComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class BottomNavigationComponent { get settingsButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts b/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts index f0f1f427f..fe454869a 100644 --- a/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class ConnectModalComponent { get accountApprovalModalContainer(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/EnableSmartTransactionsComponent.ts b/e2e/src/screens/MetaMask/components/EnableSmartTransactionsComponent.ts index 16e01806a..831e24d56 100644 --- a/e2e/src/screens/MetaMask/components/EnableSmartTransactionsComponent.ts +++ b/e2e/src/screens/MetaMask/components/EnableSmartTransactionsComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class EnableSmartTransactionsComponent { private get enableSmartTransactions(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/MetaMetricsComponent.ts b/e2e/src/screens/MetaMask/components/MetaMetricsComponent.ts index 962f318ee..603e6a4d8 100644 --- a/e2e/src/screens/MetaMask/components/MetaMetricsComponent.ts +++ b/e2e/src/screens/MetaMask/components/MetaMetricsComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class MetaMetricsComponent { get agreeToMetaMetrics(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/NetworkSwitchedModalComponent.ts b/e2e/src/screens/MetaMask/components/NetworkSwitchedModalComponent.ts index 2014d044e..ffba6322c 100644 --- a/e2e/src/screens/MetaMask/components/NetworkSwitchedModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/NetworkSwitchedModalComponent.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class NetworkSwitchedModalComponent { get gotItButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts b/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts index 2417c44a7..deb6ec780 100644 --- a/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts +++ b/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class PersonalSignConfirmationComponent { get signButton(): ChainablePromiseElement { @@ -26,7 +26,7 @@ class PersonalSignConfirmationComponent { }), ); } - + // TODO: add iOS locator get messageText(): ChainablePromiseElement { return $( @@ -58,5 +58,6 @@ class PersonalSignConfirmationComponent { } } -const personalSignConfirmationComponent = new PersonalSignConfirmationComponent(); +const personalSignConfirmationComponent = + new PersonalSignConfirmationComponent(); export default personalSignConfirmationComponent; diff --git a/e2e/src/screens/MetaMask/components/SendTxModalComponent.ts b/e2e/src/screens/MetaMask/components/SendTxModalComponent.ts index 48a70d309..8288e8211 100644 --- a/e2e/src/screens/MetaMask/components/SendTxModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/SendTxModalComponent.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class SendTxModalComponent { get confirmButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/SignModalComponent.ts b/e2e/src/screens/MetaMask/components/SignModalComponent.ts index bd32f82ed..d10737624 100644 --- a/e2e/src/screens/MetaMask/components/SignModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/SignModalComponent.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class SignModalComponent { get signApprovalButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/SwitchNetworkModalComponent.ts b/e2e/src/screens/MetaMask/components/SwitchNetworkModalComponent.ts index ccd81456e..f57595d79 100644 --- a/e2e/src/screens/MetaMask/components/SwitchNetworkModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/SwitchNetworkModalComponent.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class SwitchNetworkModalComponent { get switchNetworkButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/WelcomeComponent.ts b/e2e/src/screens/MetaMask/components/WelcomeComponent.ts index a3f630888..777d14a4d 100644 --- a/e2e/src/screens/MetaMask/components/WelcomeComponent.ts +++ b/e2e/src/screens/MetaMask/components/WelcomeComponent.ts @@ -1,7 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; - -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class WelcomeComponent { get noThanksButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/WhatsNewComponent.ts b/e2e/src/screens/MetaMask/components/WhatsNewComponent.ts index 0bb74d9cf..3119b78bd 100644 --- a/e2e/src/screens/MetaMask/components/WhatsNewComponent.ts +++ b/e2e/src/screens/MetaMask/components/WhatsNewComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '../../../Utils'; -import { AndroidSelector, IOSSelector } from '../../../Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; class WhatsNewComponent { get closeModalButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/iOS/SafariBrowserScreen.ts b/e2e/src/screens/iOS/SafariBrowserScreen.ts index 8ad8a3192..95a6ca6c7 100644 --- a/e2e/src/screens/iOS/SafariBrowserScreen.ts +++ b/e2e/src/screens/iOS/SafariBrowserScreen.ts @@ -1,10 +1,10 @@ import { ChainablePromiseElement } from 'webdriverio'; import { driver } from '@wdio/globals'; -import { getSelectorForPlatform } from '../../Utils'; -import { MobileBrowser } from '../interfaces/MobileBrowser'; -import { IOSSelector } from '../../Selectors'; -import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '../../Constants'; +import { getSelectorForPlatform } from '@/util/Utils'; +import { MobileBrowser } from '@/screens/interfaces/MobileBrowser'; +import { IOSSelector } from '@/util/Selectors'; +import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '@/util/Constants'; class SafariBrowserScreen implements MobileBrowser { get urlAddressBar(): ChainablePromiseElement { diff --git a/e2e/src/screens/iOS/components/IOSOpenInComponent.ts b/e2e/src/screens/iOS/components/IOSOpenInComponent.ts index a96346f9f..bfa9e9efc 100644 --- a/e2e/src/screens/iOS/components/IOSOpenInComponent.ts +++ b/e2e/src/screens/iOS/components/IOSOpenInComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { IOSSelector } from '../../../Selectors'; -import { getSelectorForPlatform } from '../../../Utils'; +import { IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@/util/Utils'; class IOSOpenInComponent { get open(): ChainablePromiseElement { diff --git a/e2e/src/screens/interfaces/Dapp.ts b/e2e/src/screens/interfaces/Dapp.ts index 830c71b3e..f9e16d2f9 100644 --- a/e2e/src/screens/interfaces/Dapp.ts +++ b/e2e/src/screens/interfaces/Dapp.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { UnityDappElement } from '../../types'; +import { UnityDappElement } from '@/util/types'; export type Dapp = { connectButton: ChainablePromiseElement | UnityDappElement; diff --git a/e2e/src/screens/interfaces/MobileBrowser.ts b/e2e/src/screens/interfaces/MobileBrowser.ts index f75cf4c85..8592259bf 100644 --- a/e2e/src/screens/interfaces/MobileBrowser.ts +++ b/e2e/src/screens/interfaces/MobileBrowser.ts @@ -1,4 +1,4 @@ -import { Dapp } from './Dapp'; +import { Dapp } from '@/screens/interfaces/Dapp'; export type MobileBrowser = { goToAddress(address: string, pageObject: Dapp): Promise; diff --git a/e2e/src/Constants.ts b/e2e/src/util/Constants.ts similarity index 100% rename from e2e/src/Constants.ts rename to e2e/src/util/Constants.ts diff --git a/e2e/src/Gestures.ts b/e2e/src/util/Gestures.ts similarity index 96% rename from e2e/src/Gestures.ts rename to e2e/src/util/Gestures.ts index bbd478dd3..a70924ffe 100644 --- a/e2e/src/Gestures.ts +++ b/e2e/src/util/Gestures.ts @@ -1,4 +1,7 @@ -import { getCoordinatesAsPercentage, getCoordinatesForDeviceFromPercentage } from './Utils'; +import { + getCoordinatesAsPercentage, + getCoordinatesForDeviceFromPercentage, +} from './Utils'; import { ScreenPercentage } from './types'; const Actions = { diff --git a/e2e/src/Selectors.ts b/e2e/src/util/Selectors.ts similarity index 100% rename from e2e/src/Selectors.ts rename to e2e/src/util/Selectors.ts diff --git a/e2e/src/Utils.ts b/e2e/src/util/Utils.ts similarity index 91% rename from e2e/src/Utils.ts rename to e2e/src/util/Utils.ts index 4dd1d7d1e..e756f80c9 100644 --- a/e2e/src/Utils.ts +++ b/e2e/src/util/Utils.ts @@ -1,18 +1,7 @@ import path from 'path'; import ADB from 'appium-adb'; import { driver } from '@wdio/globals'; -import { FixtureBuilder } from '../test/fixtures/FixtureBuilder'; -import { - loadFixture, - startFixtureServer, -} from '../test/fixtures/FixtureHelper'; -import FixtureServer from '../test/fixtures/FixtureServer'; -import { - BrowserSize, - Coordinates, - MetaMaskElementSelector, - ScreenPercentage, -} from './types'; +import Gestures from './Gestures'; import { FIXTURE_SERVER_PORT, METAMASK_BUNDLE_ID, @@ -23,13 +12,21 @@ import { Browsers, BrowsersActivity, } from './Constants'; -import LockScreen from './screens/MetaMask/LockScreen'; -import { Dapp } from './screens/interfaces/Dapp'; -import SafariBrowserScreen from './screens/iOS/SafariBrowserScreen'; -import ChromeBrowserScreen from './screens/Android/ChromeBrowserScreen'; -import Gestures from './Gestures'; -import AndroidOpenWithComponent from './screens/Android/components/AndroidOpenWithComponent'; -import iOSOpenInComponent from './screens/iOS/components/IOSOpenInComponent'; +import { + BrowserSize, + Coordinates, + MetaMaskElementSelector, + ScreenPercentage, +} from './types'; +import LockScreen from '@/screens/MetaMask/LockScreen'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import SafariBrowserScreen from '@/screens/iOS/SafariBrowserScreen'; +import ChromeBrowserScreen from '@/screens/Android/ChromeBrowserScreen'; +import AndroidOpenWithComponent from '@/screens/Android/components/AndroidOpenWithComponent'; +import iOSOpenInComponent from '@/screens/iOS/components/IOSOpenInComponent'; +import { loadFixture, startFixtureServer } from '@/fixtures/FixtureHelper'; +import { FixtureBuilder } from '@/fixtures/FixtureBuilder'; +import FixtureServer from '@/fixtures/FixtureServer'; export const deviceOpenDeeplinkWithMetaMask = async () => { if (PLATFORM === Platforms.IOS) { diff --git a/e2e/src/helpers.ts b/e2e/src/util/helpers.ts similarity index 100% rename from e2e/src/helpers.ts rename to e2e/src/util/helpers.ts diff --git a/e2e/src/types.ts b/e2e/src/util/types.ts similarity index 100% rename from e2e/src/types.ts rename to e2e/src/util/types.ts diff --git a/e2e/test/configs/browserstack/wdio.android.app.browserstack.conf.ts b/e2e/test/configs/browserstack/wdio.android.app.browserstack.conf.ts index b71fdb153..48f2c3c09 100644 --- a/e2e/test/configs/browserstack/wdio.android.app.browserstack.conf.ts +++ b/e2e/test/configs/browserstack/wdio.android.app.browserstack.conf.ts @@ -1,7 +1,7 @@ /* eslint-disable node/no-process-env */ import path from 'path'; import dotenv from 'dotenv'; -import { getOtherAppsPath } from '../../../src/helpers'; +import { getOtherAppsPath } from '../../../src/util/helpers'; import config from './wdio.shared.browserstack.conf'; dotenv.config({ path: path.join(process.cwd(), '.android.env') }); diff --git a/e2e/test/mocha.hooks.ts b/e2e/test/mocha.hooks.ts index 7cbca8742..4fb825f00 100644 --- a/e2e/test/mocha.hooks.ts +++ b/e2e/test/mocha.hooks.ts @@ -1,22 +1,22 @@ import { driver } from '@wdio/globals'; -import { killApp, launchApp, launchMetaMask } from '../src/Utils'; -import LockScreen from '../src/screens/MetaMask/LockScreen'; -import { NATIVE_OS_APPS, WALLET_PASSWORD, SRP } from '../src/Constants'; -import BottomNavigationComponent from '../src/screens/MetaMask/components/BottomNavigationComponent'; -import SettingsScreen from '../src/screens/MetaMask/SettingsScreen'; -import GetStartedScreen from '../src/screens/MetaMask/GetStartedScreen'; -import WalletSetupScreen from '../src/screens/MetaMask/WalletSetupScreen'; -import OptinMetricsScreen from '../src/screens/MetaMask/OptinMetricsScreen'; -import TermsOfUseScreen from '../src/screens/MetaMask/TermsOfUseScreen'; -import ImportFromSeedScreen from '../src/screens/MetaMask/ImportFromSeedScreen'; -import Gestures from '../src/Gestures'; -import SecurityUpdatesScreen from '../src/screens/MetaMask/SecurityUpdates'; -import WelcomeComponent from '../src/screens/MetaMask/components/WelcomeComponent'; -import MetaMetricsComponent from '../src/screens/MetaMask/components/MetaMetricsComponent'; -import AndroidSettingsScreen from '../src/screens/Android/AndroidSettingsScreen'; -import AndroidSettingsOpeningLinksScreen from '../src/screens/Android/AndroidSettingsOpeningLinksScreen'; -import WalletReadyScreen from '../src/screens/MetaMask/WalletReadyScreen'; -import EnableSmartTransactionsComponent from '../src/screens/MetaMask/components/EnableSmartTransactionsComponent'; +import { killApp, launchApp, launchMetaMask } from '@/util/Utils'; +import LockScreen from '@/screens/MetaMask/LockScreen'; +import { NATIVE_OS_APPS, WALLET_PASSWORD, SRP } from '@/util/Constants'; +import BottomNavigationComponent from '@/screens/MetaMask/components/BottomNavigationComponent'; +import SettingsScreen from '@/screens/MetaMask/SettingsScreen'; +import GetStartedScreen from '@/screens/MetaMask/GetStartedScreen'; +import WalletSetupScreen from '@/screens/MetaMask/WalletSetupScreen'; +import OptinMetricsScreen from '@/screens/MetaMask/OptinMetricsScreen'; +import TermsOfUseScreen from '@/screens/MetaMask/TermsOfUseScreen'; +import ImportFromSeedScreen from '@/screens/MetaMask/ImportFromSeedScreen'; +import Gestures from '@/util/Gestures'; +import SecurityUpdatesScreen from '@/screens/MetaMask/SecurityUpdates'; +import WelcomeComponent from '@/screens/MetaMask/components/WelcomeComponent'; +import MetaMetricsComponent from '@/screens/MetaMask/components/MetaMetricsComponent'; +import AndroidSettingsScreen from '@/screens/Android/AndroidSettingsScreen'; +import AndroidSettingsOpeningLinksScreen from '@/screens/Android/AndroidSettingsOpeningLinksScreen'; +import WalletReadyScreen from '@/screens/MetaMask/WalletReadyScreen'; +import EnableSmartTransactionsComponent from '@/screens/MetaMask/components/EnableSmartTransactionsComponent'; const goToSettingsAndClearAllConnections = async () => { try { diff --git a/e2e/test/specs/web_dapp.spec.ts b/e2e/test/specs/core/web_dapp.spec.ts similarity index 75% rename from e2e/test/specs/web_dapp.spec.ts rename to e2e/test/specs/core/web_dapp.spec.ts index e3e250c77..1fb84e071 100644 --- a/e2e/test/specs/web_dapp.spec.ts +++ b/e2e/test/specs/core/web_dapp.spec.ts @@ -1,22 +1,22 @@ -import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '../../src/Constants'; +import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '@/util/Constants'; +import FixtureServer from '@/fixtures/FixtureServer'; import { deviceOpenDeeplinkWithMetaMask, goBack, killApp, launchMetaMaskWithFixture, navigateToWebMobileDapp, -} from '../../src/Utils'; -import DevnextJSDappScreen from '../../src/screens/Dapps/DevnextJSDappScreen'; -import LockScreen from '../../src/screens/MetaMask/LockScreen'; -import ConnectModalComponent from '../../src/screens/MetaMask/components/ConnectModalComponent'; -import PersonalSignConfirmationComponent from '../../src/screens/MetaMask/components/PersonalSignConfirmationComponent'; -import AndroidOpenWithComponent from '../../src/screens/Android/components/AndroidOpenWithComponent'; -import FixtureServer from '../fixtures/FixtureServer'; +} from '@/util/Utils'; +import ConnectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; +import PersonalSignConfirmationComponent from '@/screens/MetaMask/components/PersonalSignConfirmationComponent'; +import AndroidOpenWithComponent from '@/screens/Android/components/AndroidOpenWithComponent'; +import LockScreen from '@/screens/MetaMask/LockScreen'; +import DevnextJSDappScreen from '@/screens/Dapps/DevnextJSDappScreen'; let devNextDappUrl: string; const fixtureServer = new FixtureServer(); -describe('Devnext E2E', () => { +describe('MetaMask SDK E2E', () => { before(async () => { devNextDappUrl = process.env.DEVNEXT_DAPP_URL ?? ''; expect(devNextDappUrl).toBeDefined(); diff --git a/e2e/test/specs/fixture_reference.ts b/e2e/test/specs/fixture_reference.ts index 90d55b793..a4254a6b8 100644 --- a/e2e/test/specs/fixture_reference.ts +++ b/e2e/test/specs/fixture_reference.ts @@ -1,14 +1,14 @@ import { driver } from '@wdio/globals'; -import connectModalComponent from '../../src/screens/MetaMask/components/ConnectModalComponent'; -import ChromeBrowserScreen from '../../src/screens/Android/ChromeBrowserScreen'; -import FixtureServer from '../fixtures/FixtureServer'; -import LockScreen from '../../src/screens/MetaMask/LockScreen'; -import { goBack, launchMetaMaskWithFixture } from '../../src/Utils'; -import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '../../src/Constants'; -import { stopFixtureServer } from '../fixtures/FixtureHelper'; -import CreateReactAppDappScreen from '../../src/screens/Dapps/CreateReactAppDappScreen'; -import IOSOpenInComponent from '../../src/screens/iOS/components/IOSOpenInComponent'; -import SafariBrowserScreen from '../../src/screens/iOS/SafariBrowserScreen'; +import connectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; +import ChromeBrowserScreen from '@/screens/Android/ChromeBrowserScreen'; +import LockScreen from '@/screens/MetaMask/LockScreen'; +import { goBack, launchMetaMaskWithFixture } from '@/util/Utils'; +import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '@/util/Constants'; +import CreateReactAppDappScreen from '@/screens/Dapps/CreateReactAppDappScreen'; +import IOSOpenInComponent from '@/screens/iOS/components/IOSOpenInComponent'; +import SafariBrowserScreen from '@/screens/iOS/SafariBrowserScreen'; +import { stopFixtureServer } from '@/fixtures/FixtureHelper'; +import FixtureServer from '@/fixtures/FixtureServer'; const fixtureServer = new FixtureServer(); diff --git a/e2e/test/specs/js_sdk.spec.ts b/e2e/test/specs/js_sdk.spec.ts index 5cb707a81..c996a8c88 100644 --- a/e2e/test/specs/js_sdk.spec.ts +++ b/e2e/test/specs/js_sdk.spec.ts @@ -1,23 +1,23 @@ -import { BROWSER_BUNDLE_ID, WALLET_PASSWORD } from '../../src/Constants'; -import Utils from '../../src/Utils'; -import ChromeBrowserScreen from '../../src/screens/Android/ChromeBrowserScreen'; -import AndroidOpenWithComponent from '../../src/screens/Android/components/AndroidOpenWithComponent'; -import ReactNativeDappScreen from '../../src/screens/Dapps/ReactNativeDappScreen'; -import SdkPlaygroundDappScreen from '../../src/screens/Dapps/SdkPlaygroundDappScreen'; -import TestDappScreen from '../../src/screens/Dapps/TestDappScreen'; -import Web3OnBoardDappScreen from '../../src/screens/Dapps/Web3OnBoardDappScreen'; -import LockScreen from '../../src/screens/MetaMask/LockScreen'; -import SettingsScreen from '../../src/screens/MetaMask/SettingsScreen'; -import BottomNavigationComponent from '../../src/screens/MetaMask/components/BottomNavigationComponent'; -import ConnectModalComponent from '../../src/screens/MetaMask/components/ConnectModalComponent'; -import NetworkSwitchedModalComponent from '../../src/screens/MetaMask/components/NetworkSwitchedModalComponent'; -import SendTxModalComponent from '../../src/screens/MetaMask/components/SendTxModalComponent'; -import SignModalComponent from '../../src/screens/MetaMask/components/SignModalComponent'; -import SwitchNetworkModalComponent from '../../src/screens/MetaMask/components/SwitchNetworkModalComponent'; -import SafariBrowserScreen from '../../src/screens/iOS/SafariBrowserScreen'; -import IOSOpenInComponent from '../../src/screens/iOS/components/IOSOpenInComponent'; import { beforeEachHook, beforeHook } from '../mocha.hooks'; -import DevnextJSDappScreen from '../../src/screens/Dapps/DevnextJSDappScreen'; +import { BROWSER_BUNDLE_ID, WALLET_PASSWORD } from '@/util/Constants'; +import { killApp, launchApp, launchMetaMask } from '@/util/Utils'; +import ChromeBrowserScreen from '@/screens/Android/ChromeBrowserScreen'; +import AndroidOpenWithComponent from '@/screens/Android/components/AndroidOpenWithComponent'; +import ReactNativeDappScreen from '@/screens/Dapps/ReactNativeDappScreen'; +import SdkPlaygroundDappScreen from '@/screens/Dapps/SdkPlaygroundDappScreen'; +import TestDappScreen from '@/screens/Dapps/TestDappScreen'; +import Web3OnBoardDappScreen from '@/screens/Dapps/Web3OnBoardDappScreen'; +import LockScreen from '@/screens/MetaMask/LockScreen'; +import SettingsScreen from '@/screens/MetaMask/SettingsScreen'; +import BottomNavigationComponent from '@/screens/MetaMask/components/BottomNavigationComponent'; +import ConnectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; +import NetworkSwitchedModalComponent from '@/screens/MetaMask/components/NetworkSwitchedModalComponent'; +import SendTxModalComponent from '@/screens/MetaMask/components/SendTxModalComponent'; +import SignModalComponent from '@/screens/MetaMask/components/SignModalComponent'; +import SwitchNetworkModalComponent from '@/screens/MetaMask/components/SwitchNetworkModalComponent'; +import SafariBrowserScreen from '@/screens/iOS/SafariBrowserScreen'; +import IOSOpenInComponent from '@/screens/iOS/components/IOSOpenInComponent'; +import DevnextJSDappScreen from '@/screens/Dapps/DevnextJSDappScreen'; /* * @deprecated @@ -43,8 +43,8 @@ describe.skip('JS SDK E2E', () => { await driver.pause(5000); // Kill and launch the mobile browser - await Utils.killApp(BROWSER_BUNDLE_ID); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await killApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); const browserScreen = driver.isIOS ? SafariBrowserScreen @@ -63,8 +63,8 @@ describe.skip('JS SDK E2E', () => { await driver.pause(5000); // Kill and launch the mobile browser - await Utils.killApp(BROWSER_BUNDLE_ID); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await killApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); const browserScreen = driver.isIOS ? SafariBrowserScreen @@ -96,7 +96,7 @@ describe.skip('JS SDK E2E', () => { if (driver.isIOS) { await driver.pause(1000); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); } await driver.pause(5000); @@ -115,8 +115,8 @@ describe.skip('JS SDK E2E', () => { await driver.pause(5000); // Kill and launch the mobile browser - await Utils.killApp(BROWSER_BUNDLE_ID); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await killApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); const browserScreen = driver.isIOS ? SafariBrowserScreen @@ -149,7 +149,7 @@ describe.skip('JS SDK E2E', () => { if (driver.isIOS) { await driver.pause(1000); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); } await SdkPlaygroundDappScreen.signTypedDataV4(); @@ -164,7 +164,7 @@ describe.skip('JS SDK E2E', () => { if (driver.isIOS) { await driver.pause(1000); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); } await SdkPlaygroundDappScreen.switchToGoerliNetwork(); @@ -181,13 +181,13 @@ describe.skip('JS SDK E2E', () => { await NetworkSwitchedModalComponent.tapGotItButton(); await driver.pause(1000); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); } if (driver.isAndroid) { await driver.pause(2000); - await Utils.launchMetaMask(); + await launchMetaMask(); await LockScreen.unlockMMifLocked(WALLET_PASSWORD); @@ -197,7 +197,7 @@ describe.skip('JS SDK E2E', () => { await driver.pause(1000); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); } await SdkPlaygroundDappScreen.sendBatchRpcCalls(); @@ -216,7 +216,7 @@ describe.skip('JS SDK E2E', () => { if (driver.isIOS) { await driver.pause(1000); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); } await SdkPlaygroundDappScreen.sendTransaction(); @@ -232,14 +232,14 @@ describe.skip('JS SDK E2E', () => { await driver.pause(1000); if (driver.isIOS) { - await Utils.launchApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); } }); it.skip('Connect to the ReactNativeDemo Dapp', async () => { await driver.pause(5000); - await Utils.launchApp(process.env.RN_TEST_APP_BUNDLE_ID ?? ''); + await launchApp(process.env.RN_TEST_APP_BUNDLE_ID ?? ''); await driver.pause(15000); @@ -257,7 +257,7 @@ describe.skip('JS SDK E2E', () => { if (driver.isIOS) { await driver.pause(1000); - await Utils.launchApp(process.env.RN_TEST_APP_BUNDLE_ID ?? ''); + await launchApp(process.env.RN_TEST_APP_BUNDLE_ID ?? ''); } await driver.pause(5000); @@ -272,9 +272,9 @@ describe.skip('JS SDK E2E', () => { await driver.pause(5000); const metamaskBundleId = process.env.BUNDLE_ID as string; - await Utils.killApp(metamaskBundleId); + await killApp(metamaskBundleId); - await Utils.launchMetaMask(); + await launchMetaMask(); await driver.pause(5000); await LockScreen.unlockMMifLocked(WALLET_PASSWORD); @@ -293,8 +293,8 @@ describe.skip('JS SDK E2E', () => { await driver.pause(10000); // Kill and launch the mobile browser - await Utils.killApp(BROWSER_BUNDLE_ID); - await Utils.launchApp(BROWSER_BUNDLE_ID); + await killApp(BROWSER_BUNDLE_ID); + await launchApp(BROWSER_BUNDLE_ID); const browserScreen = driver.isIOS ? SafariBrowserScreen diff --git a/e2e/test/specs/multi-wallet-connector/fixture_reference.ts b/e2e/test/specs/multi-wallet-connector/fixture_reference.ts new file mode 100644 index 000000000..fc99829c9 --- /dev/null +++ b/e2e/test/specs/multi-wallet-connector/fixture_reference.ts @@ -0,0 +1,44 @@ +import { driver } from '@wdio/globals'; +import FixtureServer from '@/fixtures/FixtureServer'; +import { stopFixtureServer } from '@/fixtures/FixtureHelper'; +import connectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; +import ChromeBrowserScreen from '@/screens/Android/ChromeBrowserScreen'; +import LockScreen from '@/screens/MetaMask/LockScreen'; +import { goBack, launchMetaMaskWithFixture } from '@/util/Utils'; +import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '@/util/Constants'; +import CreateReactAppDappScreen from '@/screens/Dapps/CreateReactAppDappScreen'; +import IOSOpenInComponent from '@/screens/iOS/components/IOSOpenInComponent'; +import SafariBrowserScreen from '@/screens/iOS/SafariBrowserScreen'; + +const fixtureServer = new FixtureServer(); + +// This test reference will be kept for the work in progress of integrating the +// fixtureServer +describe('Fixture test', () => { + before(async () => { + await launchMetaMaskWithFixture(fixtureServer, METAMASK_BUNDLE_ID); + await LockScreen.unlockMM(WALLET_PASSWORD); + }); + + after(async () => { + await stopFixtureServer(fixtureServer); + }); + + it('should wait', async () => { + console.log('Dummy waiting for 50 seconds'); + const browserScreen = driver.isIOS + ? SafariBrowserScreen + : ChromeBrowserScreen; + + await browserScreen.goToAddress( + 'https://react.cursedlab.xyz', + CreateReactAppDappScreen, + ); + + await CreateReactAppDappScreen.connectButton.click(); + await IOSOpenInComponent.tapOpen(); + await connectModalComponent.tapConnectApproval(); + await driver.pause(2000); + await goBack(); + }); +}); diff --git a/e2e/test/specs/android_sdk.spec.ts b/e2e/test/specs/native/android_sdk.spec.ts similarity index 64% rename from e2e/test/specs/android_sdk.spec.ts rename to e2e/test/specs/native/android_sdk.spec.ts index 7865af18d..b7d414370 100644 --- a/e2e/test/specs/android_sdk.spec.ts +++ b/e2e/test/specs/native/android_sdk.spec.ts @@ -1,12 +1,12 @@ -import { WALLET_PASSWORD } from '../../src/Constants'; -import Utils from '../../src/Utils'; -import AndroidSDKDappScreen from '../../src/screens/Dapps/AndroidSDKDappScreen'; -import LockScreen from '../../src/screens/MetaMask/LockScreen'; -import ConnectModalComponent from '../../src/screens/MetaMask/components/ConnectModalComponent'; -import SendTxModalComponent from '../../src/screens/MetaMask/components/SendTxModalComponent'; -import SignModalComponent from '../../src/screens/MetaMask/components/SignModalComponent'; -import SwitchNetworkModalComponent from '../../src/screens/MetaMask/components/SwitchNetworkModalComponent'; -import { beforeEachHook, beforeHook } from '../mocha.hooks'; +import { beforeEachHook, beforeHook } from '../../mocha.hooks'; +import { WALLET_PASSWORD } from '@/util/Constants'; +import { launchApp } from '@/util/Utils'; +import AndroidSDKDappScreen from '@/screens/Dapps/AndroidSDKDappScreen'; +import LockScreen from '@/screens/MetaMask/LockScreen'; +import ConnectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; +import SendTxModalComponent from '@/screens/MetaMask/components/SendTxModalComponent'; +import SignModalComponent from '@/screens/MetaMask/components/SignModalComponent'; +import SwitchNetworkModalComponent from '@/screens/MetaMask/components/SwitchNetworkModalComponent'; describe.skip('Android SDK (native) E2E', () => { before(async () => { @@ -20,7 +20,7 @@ describe.skip('Android SDK (native) E2E', () => { it('Smoke Testing on the AndroidSDK Test Dapp', async () => { await driver.pause(5000); - await Utils.launchApp(process.env.ANDROID_SDK_TEST_BUNDLE_ID ?? ''); + await launchApp(process.env.ANDROID_SDK_TEST_BUNDLE_ID ?? ''); await driver.pause(5000); @@ -38,7 +38,7 @@ describe.skip('Android SDK (native) E2E', () => { if (driver.isIOS) { await driver.pause(1000); - await Utils.launchApp(process.env.ANDROID_SDK_TEST_BUNDLE_ID ?? ''); + await launchApp(process.env.ANDROID_SDK_TEST_BUNDLE_ID ?? ''); } await driver.pause(5000); diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json index 4984216f4..418058e6d 100644 --- a/e2e/tsconfig.json +++ b/e2e/tsconfig.json @@ -23,7 +23,8 @@ "outDir": "dist", "baseUrl": ".", "paths": { - "*": ["node_modules/*"] + "*": ["node_modules/*"], + "@/*": ["src/*"] } }, "include": ["test", "src", "node_modules/@types/mocha/index.d.ts"], From d535a1628333987711e2dc5ed285920e4e295ad7 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Wed, 22 Jan 2025 16:41:19 +0000 Subject: [PATCH 03/20] feat: update run script and work in progress for the new test structure --- e2e/.dapps.env.example | 1 + e2e/package.json | 1 + e2e/src/screens/Dapps/AndroidSDKDappScreen.ts | 4 + .../screens/Dapps/CreateReactAppDappScreen.ts | 4 + e2e/src/screens/Dapps/DevnextJSDappScreen.ts | 4 + e2e/src/screens/Dapps/NextJSDappScreen.ts | 4 + e2e/src/screens/Dapps/PlaygroundDappScreen.ts | 112 ++++++++++++++++++ .../Dapps/ReactMetamaskButtonDappScreen.ts | 4 + .../screens/Dapps/ReactNativeDappScreen.ts | 4 + .../screens/Dapps/SdkPlaygroundDappScreen.ts | 4 + e2e/src/screens/Dapps/TestDappScreen.ts | 4 + e2e/src/screens/Dapps/UnityDappScreen.ts | 4 + e2e/src/screens/Dapps/VueJSDappScreen.ts | 4 + .../screens/Dapps/Web3OnBoardDappScreen.ts | 4 + e2e/src/screens/Dapps/iOSNativeDappScreen.ts | 4 + e2e/src/screens/iOS/SafariBrowserScreen.ts | 88 ++++++++------ e2e/src/screens/interfaces/Dapp.ts | 7 +- e2e/src/util/Utils.ts | 2 +- e2e/test/configs/wdio.conf.ts | 2 +- .../web_dapp.spec.ts | 6 +- 20 files changed, 222 insertions(+), 45 deletions(-) create mode 100644 e2e/src/screens/Dapps/PlaygroundDappScreen.ts rename e2e/test/specs/{core => metamask-connector}/web_dapp.spec.ts (93%) diff --git a/e2e/.dapps.env.example b/e2e/.dapps.env.example index 80a5e1470..103a9c1d3 100644 --- a/e2e/.dapps.env.example +++ b/e2e/.dapps.env.example @@ -1 +1,2 @@ DEVNEXT_DAPP_URL=http://192.111.111.111:3333/demo +PLAYGROUND_DAPP_URL=http://192.111.111.111:3333/demo diff --git a/e2e/package.json b/e2e/package.json index 8e404cb2f..7f2414a4f 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -21,6 +21,7 @@ "test:ios:jssdk:e2e:local": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite web_dapp", "test:android:jssdk:e2e:local": "wdio run test/configs/local/wdio.android.app.local.conf.ts --suite web_dapp", "test:ios:jssdk:e2e:local:fixture": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite fixture_reference", + "test:ios:metamask-connector:e2e:local": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite metamask_connector", "setup": "yarn install", "build": "tsc --build", "clean": "yarn clean:reports && rm -rf node_modules", diff --git a/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts b/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts index 4f6779d5c..e088f5308 100644 --- a/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts +++ b/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts @@ -242,6 +242,10 @@ class AndroidSDKDappScreen implements Dapp { }); await this.terminateButton.click(); } + + async isDappTerminated(): Promise { + throw new Error('Not implemented'); + } } const androidSDKDappScreen = new AndroidSDKDappScreen(); diff --git a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts b/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts index c93e58558..5a101c28b 100644 --- a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts +++ b/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts @@ -102,6 +102,10 @@ class CreateReactAppDappScreen implements Dapp { async terminate(): Promise { await this.terminateButton.click(); } + + async isDappTerminated(): Promise { + return !(await this.terminateButton.isDisplayed()); + } } const createReactAppDappScreen = new CreateReactAppDappScreen(); diff --git a/e2e/src/screens/Dapps/DevnextJSDappScreen.ts b/e2e/src/screens/Dapps/DevnextJSDappScreen.ts index 29e20251c..23d974089 100644 --- a/e2e/src/screens/Dapps/DevnextJSDappScreen.ts +++ b/e2e/src/screens/Dapps/DevnextJSDappScreen.ts @@ -100,6 +100,10 @@ class DevnextDappScreen implements Dapp { ); return Boolean(isConnected); } + + async isDappTerminated(): Promise { + return !(await this.terminateButton.isDisplayed()); + } } const devnextJSDappScreen = new DevnextDappScreen(); diff --git a/e2e/src/screens/Dapps/NextJSDappScreen.ts b/e2e/src/screens/Dapps/NextJSDappScreen.ts index 86882ae45..589e1a0e3 100644 --- a/e2e/src/screens/Dapps/NextJSDappScreen.ts +++ b/e2e/src/screens/Dapps/NextJSDappScreen.ts @@ -53,6 +53,10 @@ class NextJSDappScreen implements Dapp { async scrollToSignButton(): Promise { await this.signButton.scrollIntoView(); } + + async isDappTerminated(): Promise { + return !(await this.terminateButton.isDisplayed()); + } } const nextJSDappScreen = new NextJSDappScreen(); diff --git a/e2e/src/screens/Dapps/PlaygroundDappScreen.ts b/e2e/src/screens/Dapps/PlaygroundDappScreen.ts new file mode 100644 index 000000000..09dab9e42 --- /dev/null +++ b/e2e/src/screens/Dapps/PlaygroundDappScreen.ts @@ -0,0 +1,112 @@ +import { ChainablePromiseElement } from 'webdriverio'; + +import { getSelectorForPlatform } from '@/util/Utils'; +import { Dapp } from '@/screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@/util/Selectors'; + +class PlaygroundDappScreen implements Dapp { + get connectButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//android.widget.Button[@text="Connect"]', + ), + iosSelector: IOSSelector.by().classChain( + '**/XCUIElementTypeButton[`name == "Connect"`]', + ), + }), + ); + } + + get connectAndSignButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//android.widget.Button[@text="Connect w/ Sign"]', + ), + iosSelector: IOSSelector.by().classChain( + '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', + ), + }), + ); + } + + get terminateButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//android.widget.Button[@text="Terminate"]', + ), + iosSelector: IOSSelector.by().predicateString( + 'name == "Terminate Connection"', + ), + }), + ); + } + + get personalSignButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//android.widget.Button[@text="personal_sign"]', + ), + iosSelector: IOSSelector.by().classChain( + '**/XCUIElementTypeButton[`name == "personal_sign"`]', + ), + }), + ); + } + + get signTypedDataV4Button(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//android.widget.Button[@text="eth_signTypedData_v4"]', + ), + iosSelector: IOSSelector.by().classChain( + '**/XCUIElementTypeButton[`name == "eth_signTypedData_v4"`]', + ), + }), + ); + } + + get sendTransactionButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//android.widget.Button[@text="Send transaction"]', + ), + iosSelector: IOSSelector.by().classChain( + '**/XCUIElementTypeButton[`name == "Send transaction"`]', + ), + }), + ); + } + + async connect(): Promise { + await this.connectButton.click(); + } + + async signTypedDataV4(): Promise { + await this.signTypedDataV4Button.click(); + } + + async personalSign(): Promise { + await this.personalSignButton.click(); + } + + async sendTransaction(): Promise { + await this.sendTransactionButton.click(); + } + + async terminate(): Promise { + await this.terminateButton.click(); + } + + async isDappTerminated(): Promise { + return !(await this.terminateButton.isDisplayed()); + } +} + +const playgroundDappScreen = new PlaygroundDappScreen(); +export default playgroundDappScreen; diff --git a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts b/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts index c2d94ffd7..180b4d37c 100644 --- a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts +++ b/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts @@ -37,6 +37,10 @@ class ReactMetamaskButtonDappScreen { async terminate(): Promise { await this.terminateButton.click(); } + + async isDappTerminated(): Promise { + throw new Error('Not implemented'); + } } const createReactDappScreen = new ReactMetamaskButtonDappScreen(); diff --git a/e2e/src/screens/Dapps/ReactNativeDappScreen.ts b/e2e/src/screens/Dapps/ReactNativeDappScreen.ts index 32ae68fa5..a6e3feef0 100644 --- a/e2e/src/screens/Dapps/ReactNativeDappScreen.ts +++ b/e2e/src/screens/Dapps/ReactNativeDappScreen.ts @@ -49,6 +49,10 @@ class ReactNativeDappScreen implements Dapp { async terminate(): Promise { await this.terminateButton.click(); } + + async isDappTerminated(): Promise { + throw new Error('Not implemented'); + } } const reactNativeDappScreen = new ReactNativeDappScreen(); diff --git a/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts b/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts index 03cd92029..0b1fc4534 100644 --- a/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts +++ b/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts @@ -283,6 +283,10 @@ class SdkPlaygroundDappScreen implements Dapp { } } } + + async isDappTerminated(): Promise { + throw new Error('Not implemented'); + } } const sdkPlaygroundDappScreen = new SdkPlaygroundDappScreen(); diff --git a/e2e/src/screens/Dapps/TestDappScreen.ts b/e2e/src/screens/Dapps/TestDappScreen.ts index 16dd6d44a..2fdc5e78a 100644 --- a/e2e/src/screens/Dapps/TestDappScreen.ts +++ b/e2e/src/screens/Dapps/TestDappScreen.ts @@ -100,6 +100,10 @@ class TestDappScreen implements Dapp { isButtonDisplayed = await this.personalSignButton.isDisplayed(); } } + + async isDappTerminated(): Promise { + throw new Error('Not implemented'); + } } const testDappScreen = new TestDappScreen(); diff --git a/e2e/src/screens/Dapps/UnityDappScreen.ts b/e2e/src/screens/Dapps/UnityDappScreen.ts index 79b952ea1..43a0df216 100644 --- a/e2e/src/screens/Dapps/UnityDappScreen.ts +++ b/e2e/src/screens/Dapps/UnityDappScreen.ts @@ -35,6 +35,10 @@ class UnityDappScreen implements Dapp { y: this.terminateButton.yPercentage, }); } + + async isDappTerminated(): Promise { + throw new Error('Not implemented'); + } } const unityDappScreen = new UnityDappScreen(); diff --git a/e2e/src/screens/Dapps/VueJSDappScreen.ts b/e2e/src/screens/Dapps/VueJSDappScreen.ts index 0519396ce..c72933e25 100644 --- a/e2e/src/screens/Dapps/VueJSDappScreen.ts +++ b/e2e/src/screens/Dapps/VueJSDappScreen.ts @@ -140,6 +140,10 @@ class VueJSDappScreen implements Dapp { async switchToMainnetNetwork(): Promise { await this.switchToMainnetButton.click(); } + + async isDappTerminated(): Promise { + throw new Error('Not implemented'); + } } const vueJSDappScreen = new VueJSDappScreen(); diff --git a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts b/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts index 962450c0b..4fb124402 100644 --- a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts +++ b/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts @@ -78,6 +78,10 @@ class Web3OnBoardDappScreen implements Dapp { }); await this.signButton.click(); } + + async isDappTerminated(): Promise { + throw new Error('Not implemented'); + } } const web3OnBoardDappScreen = new Web3OnBoardDappScreen(); diff --git a/e2e/src/screens/Dapps/iOSNativeDappScreen.ts b/e2e/src/screens/Dapps/iOSNativeDappScreen.ts index 22958ded2..af1fc6888 100644 --- a/e2e/src/screens/Dapps/iOSNativeDappScreen.ts +++ b/e2e/src/screens/Dapps/iOSNativeDappScreen.ts @@ -55,6 +55,10 @@ class IOSNNativeDappScreen implements Dapp { async terminate(): Promise { await this.terminateButton.click(); } + + async isDappTerminated(): Promise { + throw new Error('Not implemented'); + } } const iosNativeDappScreen = new IOSNNativeDappScreen(); diff --git a/e2e/src/screens/iOS/SafariBrowserScreen.ts b/e2e/src/screens/iOS/SafariBrowserScreen.ts index 95a6ca6c7..b5da82615 100644 --- a/e2e/src/screens/iOS/SafariBrowserScreen.ts +++ b/e2e/src/screens/iOS/SafariBrowserScreen.ts @@ -1,10 +1,14 @@ import { ChainablePromiseElement } from 'webdriverio'; import { driver } from '@wdio/globals'; +import { Dapp } from '../interfaces/Dapp'; import { getSelectorForPlatform } from '@/util/Utils'; import { MobileBrowser } from '@/screens/interfaces/MobileBrowser'; import { IOSSelector } from '@/util/Selectors'; -import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '@/util/Constants'; +import { + Browsers, + // WEB_DAPP_LOAD_ATTEMPTS +} from '@/util/Constants'; class SafariBrowserScreen implements MobileBrowser { get urlAddressBar(): ChainablePromiseElement { @@ -44,46 +48,58 @@ class SafariBrowserScreen implements MobileBrowser { await driver.pause(500); // Wait for the page to refresh } - async goToAddress(address: string): Promise { + async goToAddress(address: string, dappScreen: Dapp): Promise { await this.launchBrowser(); - const addressPrefix = address.substring(8, 16); - if (!(await this.urlAddressBar.getText()).includes(addressPrefix)) { - await this.urlAddressBar.click(); - await this.urlAddressBar.clearValue(); - await this.urlAddressBar.setValue(address); - await this.goButton.click(); + // const addressPrefix = address.substring(8, 16); + // if (!(await this.urlAddressBar.getText()).includes(addressPrefix)) { + // await this.urlAddressBar.click(); + // await this.urlAddressBar.clearValue(); + // await this.urlAddressBar.setValue(address); + // await this.goButton.click(); + // } + + // Trying to navigate directly to the address + await driver.navigateTo(address); + + // waits for the refresh button to be displayed meaning that the page is loaded + await this.refreshButton.waitForDisplayed({ + timeout: 10000, + }); + + if (!(await dappScreen.isDappTerminated())) { + await dappScreen.terminate(); } // Figures out if a dapp is loaded on the mobile browser - const checkIfDappIsLoaded = async () => { - let retries = 20; - let isStopPageLoadButtonDisplayed = - await this.stopPageLoadingButton.isDisplayed(); - - if (!isStopPageLoadButtonDisplayed) { - return true; - } - - while (isStopPageLoadButtonDisplayed && retries > 0) { - // Waits for 2 seconds before checking again - await driver.pause(2000); - isStopPageLoadButtonDisplayed = - await this.stopPageLoadingButton.isDisplayed(); - retries -= 1; - } - return false; - }; - - let attempts = 0; - - let isWebDappLoaded = await checkIfDappIsLoaded(); - - while (!isWebDappLoaded && attempts < WEB_DAPP_LOAD_ATTEMPTS) { - await this.refreshPage(); - isWebDappLoaded = await checkIfDappIsLoaded(); - attempts += 1; - } + // const checkIfDappIsLoaded = async () => { + // let retries = 20; + // let isStopPageLoadButtonDisplayed = + // await this.stopPageLoadingButton.isDisplayed(); + + // if (!isStopPageLoadButtonDisplayed) { + // return true; + // } + + // while (isStopPageLoadButtonDisplayed && retries > 0) { + // // Waits for 2 seconds before checking again + // await driver.pause(2000); + // isStopPageLoadButtonDisplayed = + // await this.stopPageLoadingButton.isDisplayed(); + // retries -= 1; + // } + // return false; + // }; + + // let attempts = 0; + + // let isWebDappLoaded = await checkIfDappIsLoaded(); + + // while (!isWebDappLoaded && attempts < WEB_DAPP_LOAD_ATTEMPTS) { + // await this.refreshPage(); + // isWebDappLoaded = await checkIfDappIsLoaded(); + // attempts += 1; + // } } async launchBrowser(): Promise { diff --git a/e2e/src/screens/interfaces/Dapp.ts b/e2e/src/screens/interfaces/Dapp.ts index f9e16d2f9..f2e672213 100644 --- a/e2e/src/screens/interfaces/Dapp.ts +++ b/e2e/src/screens/interfaces/Dapp.ts @@ -5,7 +5,7 @@ import { UnityDappElement } from '@/util/types'; export type Dapp = { connectButton: ChainablePromiseElement | UnityDappElement; - connect(): Promise; + terminateButton: ChainablePromiseElement | UnityDappElement; signTypedDataV3Button?: ChainablePromiseElement | UnityDappElement; @@ -15,12 +15,11 @@ export type Dapp = { personalSignButton?: ChainablePromiseElement | UnityDappElement; + connect(): Promise; signTypedDataV3?(): Promise; signTypedDataV4?(): Promise; personalSign?(): Promise; sendTransaction?(): Promise; - - terminateButton: ChainablePromiseElement | UnityDappElement; - + isDappTerminated(): Promise; terminate(): Promise; }; diff --git a/e2e/src/util/Utils.ts b/e2e/src/util/Utils.ts index e756f80c9..b3cfddc32 100644 --- a/e2e/src/util/Utils.ts +++ b/e2e/src/util/Utils.ts @@ -68,7 +68,7 @@ export const navigateToWebMobileDapp = async ( ? SafariBrowserScreen : ChromeBrowserScreen; - await launchMobileBrowser(); + // await launchMobileBrowser(); await browserScreen.goToAddress(dappUrl, dappScreen); }; diff --git a/e2e/test/configs/wdio.conf.ts b/e2e/test/configs/wdio.conf.ts index 17bffdbc9..1a451d479 100644 --- a/e2e/test/configs/wdio.conf.ts +++ b/e2e/test/configs/wdio.conf.ts @@ -12,7 +12,7 @@ export const config: WebdriverIO.Config = { services: [], // specs: ['../../specs/*.spec.ts'], suites: { - web_dapp: ['../../specs/web_dapp.spec.ts'], + metamask_connector: ['../../specs/metamask-connector/*.spec.ts'], // Deprecated test suites // js_sdk: ['../../specs/js_sdk.spec.ts'], // android_sdk: ['../../specs/android_sdk.spec.ts'], diff --git a/e2e/test/specs/core/web_dapp.spec.ts b/e2e/test/specs/metamask-connector/web_dapp.spec.ts similarity index 93% rename from e2e/test/specs/core/web_dapp.spec.ts rename to e2e/test/specs/metamask-connector/web_dapp.spec.ts index 1fb84e071..b07456bba 100644 --- a/e2e/test/specs/core/web_dapp.spec.ts +++ b/e2e/test/specs/metamask-connector/web_dapp.spec.ts @@ -16,10 +16,10 @@ import DevnextJSDappScreen from '@/screens/Dapps/DevnextJSDappScreen'; let devNextDappUrl: string; const fixtureServer = new FixtureServer(); -describe('MetaMask SDK E2E', () => { +describe('MetaMask Connector Playground dapp', () => { before(async () => { - devNextDappUrl = process.env.DEVNEXT_DAPP_URL ?? ''; - expect(devNextDappUrl).toBeDefined(); + devNextDappUrl = process.env.PLAYGROUND_DAPP_URL ?? ''; + expect(devNextDappUrl.length).toBeGreaterThan(0); await launchMetaMaskWithFixture(fixtureServer, METAMASK_BUNDLE_ID); await LockScreen.unlockMM(WALLET_PASSWORD); From 2ee0d43de807990377134ebf305ae3cefec11e1c Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Wed, 22 Jan 2025 19:16:31 +0000 Subject: [PATCH 04/20] feat: extends path usage, creates the first tests for playground-next --- e2e/babel.config.js | 28 + e2e/package.json | 7 +- e2e/src/fixtures/FixtureHelper.ts | 6 +- e2e/src/fixtures/FixtureServer.ts | 2 +- .../AndroidSettingsOpeningLinksScreen.ts | 8 +- .../screens/Android/AndroidSettingsScreen.ts | 8 +- .../screens/Android/ChromeBrowserScreen.ts | 10 +- .../components/AndroidOpenWithComponent.ts | 4 +- e2e/src/screens/Dapps/AndroidSDKDappScreen.ts | 8 +- .../screens/Dapps/CreateReactAppDappScreen.ts | 8 +- e2e/src/screens/Dapps/DevnextJSDappScreen.ts | 10 +- e2e/src/screens/Dapps/NextJSDappScreen.ts | 8 +- ...pScreen.ts => PlaygroundNextDappScreen.ts} | 58 +- .../Dapps/ReactMetamaskButtonDappScreen.ts | 6 +- .../screens/Dapps/ReactNativeDappScreen.ts | 8 +- .../screens/Dapps/SdkPlaygroundDappScreen.ts | 10 +- e2e/src/screens/Dapps/TestDappScreen.ts | 10 +- e2e/src/screens/Dapps/UnityDappScreen.ts | 8 +- e2e/src/screens/Dapps/VueJSDappScreen.ts | 8 +- .../screens/Dapps/Web3OnBoardDappScreen.ts | 8 +- e2e/src/screens/Dapps/iOSNativeDappScreen.ts | 8 +- e2e/src/screens/MetaMask/GetStartedScreen.ts | 4 +- .../screens/MetaMask/ImportFromSeedScreen.ts | 4 +- e2e/src/screens/MetaMask/LockScreen.ts | 6 +- e2e/src/screens/MetaMask/MainScreen.ts | 4 +- .../screens/MetaMask/OptinMetricsScreen.ts | 6 +- e2e/src/screens/MetaMask/SecurityUpdates.ts | 4 +- e2e/src/screens/MetaMask/SettingsScreen.ts | 6 +- e2e/src/screens/MetaMask/TermsOfUseScreen.ts | 4 +- e2e/src/screens/MetaMask/WalletReadyScreen.ts | 4 +- e2e/src/screens/MetaMask/WalletSetupScreen.ts | 4 +- .../components/BottomNavigationComponent.ts | 4 +- .../components/ConnectModalComponent.ts | 4 +- .../EnableSmartTransactionsComponent.ts | 4 +- .../components/MetaMetricsComponent.ts | 4 +- .../NetworkSwitchedModalComponent.ts | 5 +- .../PersonalSignConfirmationComponent.ts | 30 +- .../components/SendTxModalComponent.ts | 4 +- .../MetaMask/components/SignModalComponent.ts | 4 +- .../components/SwitchNetworkModalComponent.ts | 4 +- .../MetaMask/components/WelcomeComponent.ts | 4 +- .../MetaMask/components/WhatsNewComponent.ts | 5 +- e2e/src/screens/iOS/SafariBrowserScreen.ts | 55 +- .../iOS/components/IOSOpenInComponent.ts | 4 +- e2e/src/screens/interfaces/Dapp.ts | 4 +- e2e/src/screens/interfaces/MobileBrowser.ts | 2 +- e2e/src/util/Utils.ts | 71 +- e2e/test/configs/wdio.conf.ts | 30 +- e2e/test/mocha.hooks.ts | 36 +- e2e/test/specs/fixture_reference.ts | 20 +- e2e/test/specs/js_sdk.spec.ts | 38 +- .../specs/metamask-connector/web_dapp.spec.ts | 68 +- .../fixture_reference.ts | 20 +- e2e/test/specs/native/android_sdk.spec.ts | 16 +- e2e/tsconfig.json | 12 +- e2e/yarn.lock | 1620 ++++++++++++++++- 56 files changed, 1981 insertions(+), 364 deletions(-) create mode 100644 e2e/babel.config.js rename e2e/src/screens/Dapps/{PlaygroundDappScreen.ts => PlaygroundNextDappScreen.ts} (62%) diff --git a/e2e/babel.config.js b/e2e/babel.config.js new file mode 100644 index 000000000..31ced8053 --- /dev/null +++ b/e2e/babel.config.js @@ -0,0 +1,28 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: 'current', + }, + }, + ], + '@babel/preset-typescript', + ], + plugins: [ + [ + 'module-resolver', + { + root: ['.'], + alias: { + '@': './test', + '@util': './util', + '@specs': './test/specs', + '@screens': './src/screens', + '@fixtures': './src/fixtures', + }, + }, + ], + ], +}; diff --git a/e2e/package.json b/e2e/package.json index 7f2414a4f..e98addc37 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -3,7 +3,10 @@ "private": true, "type": "commonjs", "devDependencies": { + "@babel/preset-env": "^7.26.0", + "@babel/preset-typescript": "^7.26.0", "@types/koa": "^2.13.12", + "@types/module-alias": "^2.0.4", "@wdio/allure-reporter": "^8.11.0", "@wdio/appium-service": "^9.2.1", "@wdio/browserstack-service": "^9.1.2", @@ -11,7 +14,9 @@ "@wdio/local-runner": "latest", "@wdio/mocha-framework": "latest", "@wdio/spec-reporter": "latest", - "ts-node": "^10.9.1", + "babel-plugin-module-resolver": "^5.0.2", + "module-alias": "^2.2.3", + "ts-node": "^10.9.2", "typescript": "^4.9.5", "wdio-wait-for": "^3.0.9" }, diff --git a/e2e/src/fixtures/FixtureHelper.ts b/e2e/src/fixtures/FixtureHelper.ts index 83ac1f38d..1302c7e26 100644 --- a/e2e/src/fixtures/FixtureHelper.ts +++ b/e2e/src/fixtures/FixtureHelper.ts @@ -1,7 +1,7 @@ import axios from 'axios'; -import FixtureServer from '@/fixtures/FixtureServer'; -import { FixtureBuilder } from '@/fixtures/FixtureBuilder'; -import { FIXTURE_SERVER_URL } from '@/util/Constants'; +import FixtureServer from '@fixtures/FixtureServer'; +import { FixtureBuilder } from '@fixtures/FixtureBuilder'; +import { FIXTURE_SERVER_URL } from '@util/Constants'; // checks if server has already been started const isFixtureServerStarted = async () => { diff --git a/e2e/src/fixtures/FixtureServer.ts b/e2e/src/fixtures/FixtureServer.ts index be9a0f5fb..bd42a95ea 100644 --- a/e2e/src/fixtures/FixtureServer.ts +++ b/e2e/src/fixtures/FixtureServer.ts @@ -1,6 +1,6 @@ import Koa from 'koa'; import * as http from "http"; -import { FIXTURE_SERVER_HOST, FIXTURE_SERVER_PORT } from '@/util/Constants'; +import { FIXTURE_SERVER_HOST, FIXTURE_SERVER_PORT } from '@util/Constants'; const CURRENT_STATE_KEY = '__CURRENT__'; const DEFAULT_STATE_KEY = '__DEFAULT__'; diff --git a/e2e/src/screens/Android/AndroidSettingsOpeningLinksScreen.ts b/e2e/src/screens/Android/AndroidSettingsOpeningLinksScreen.ts index d6ab88c3a..92db02795 100644 --- a/e2e/src/screens/Android/AndroidSettingsOpeningLinksScreen.ts +++ b/e2e/src/screens/Android/AndroidSettingsOpeningLinksScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { METAMASK_APP_NAME_ANDROID } from '@/util/Constants'; -import Gestures from '@/util/Gestures'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector } from '@/util/Selectors'; +import { METAMASK_APP_NAME_ANDROID } from '@util/Constants'; +import Gestures from '@util/Gestures'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector } from '@util/Selectors'; class AndroidSettingsOpeningLinksScreen { get openingLinksMetaMaskAppOption(): ChainablePromiseElement { diff --git a/e2e/src/screens/Android/AndroidSettingsScreen.ts b/e2e/src/screens/Android/AndroidSettingsScreen.ts index 1f74b3c88..969a71ba3 100644 --- a/e2e/src/screens/Android/AndroidSettingsScreen.ts +++ b/e2e/src/screens/Android/AndroidSettingsScreen.ts @@ -1,13 +1,13 @@ import { ChainablePromiseArray, ChainablePromiseElement } from 'webdriverio'; import { $$ } from '@wdio/globals'; -import Gestures from '@/util/Gestures'; -import { getSelectorForPlatform } from '@/util/Utils'; +import Gestures from '@util/Gestures'; +import { getSelectorForPlatform } from '@util/Utils'; import { IS_RUNNING_IN_BROWSER_STACK, METAMASK_APP_NAME_ANDROID, -} from '@/util/Constants'; -import { AndroidSelector } from '@/util/Selectors'; +} from '@util/Constants'; +import { AndroidSelector } from '@util/Selectors'; class AndroidSettingsScreen { get metaMaskQALinksButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/Android/ChromeBrowserScreen.ts b/e2e/src/screens/Android/ChromeBrowserScreen.ts index b405e7188..a95a8eb91 100644 --- a/e2e/src/screens/Android/ChromeBrowserScreen.ts +++ b/e2e/src/screens/Android/ChromeBrowserScreen.ts @@ -1,10 +1,10 @@ import { ChainablePromiseElement } from 'webdriverio'; import { driver } from '@wdio/globals'; -import { MobileBrowser } from '@/screens/interfaces/MobileBrowser'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector } from '@/util/Selectors'; -import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '@/util/Constants'; +import { MobileBrowser } from '@screens/interfaces/MobileBrowser'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector } from '@util/Selectors'; +import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '@util/Constants'; class ChromeBrowserScreen implements MobileBrowser { get urlAddressBar(): ChainablePromiseElement { diff --git a/e2e/src/screens/Android/components/AndroidOpenWithComponent.ts b/e2e/src/screens/Android/components/AndroidOpenWithComponent.ts index c7dabba4e..6bb898ef8 100644 --- a/e2e/src/screens/Android/components/AndroidOpenWithComponent.ts +++ b/e2e/src/screens/Android/components/AndroidOpenWithComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector } from '@util/Selectors'; class AndroidOpenWithComponent { get openWithMetaMaskQA(): ChainablePromiseElement { diff --git a/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts b/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts index e088f5308..09b7556d4 100644 --- a/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts +++ b/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { AndroidSelector } from '@/util/Selectors'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; +import { AndroidSelector } from '@util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; class AndroidSDKDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -243,7 +243,7 @@ class AndroidSDKDappScreen implements Dapp { await this.terminateButton.click(); } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { throw new Error('Not implemented'); } } diff --git a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts b/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts index 5a101c28b..a9976a03e 100644 --- a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts +++ b/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class CreateReactAppDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -103,7 +103,7 @@ class CreateReactAppDappScreen implements Dapp { await this.terminateButton.click(); } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { return !(await this.terminateButton.isDisplayed()); } } diff --git a/e2e/src/screens/Dapps/DevnextJSDappScreen.ts b/e2e/src/screens/Dapps/DevnextJSDappScreen.ts index 23d974089..7398e668a 100644 --- a/e2e/src/screens/Dapps/DevnextJSDappScreen.ts +++ b/e2e/src/screens/Dapps/DevnextJSDappScreen.ts @@ -1,9 +1,9 @@ import { ChainablePromiseElement } from 'webdriverio'; import { visibilityOf } from 'wdio-wait-for'; -import { getSelectorForPlatform, scrollToElement } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform, scrollToElement } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class DevnextDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -100,10 +100,6 @@ class DevnextDappScreen implements Dapp { ); return Boolean(isConnected); } - - async isDappTerminated(): Promise { - return !(await this.terminateButton.isDisplayed()); - } } const devnextJSDappScreen = new DevnextDappScreen(); diff --git a/e2e/src/screens/Dapps/NextJSDappScreen.ts b/e2e/src/screens/Dapps/NextJSDappScreen.ts index 589e1a0e3..2db1f4bf5 100644 --- a/e2e/src/screens/Dapps/NextJSDappScreen.ts +++ b/e2e/src/screens/Dapps/NextJSDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class NextJSDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -54,7 +54,7 @@ class NextJSDappScreen implements Dapp { await this.signButton.scrollIntoView(); } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { return !(await this.terminateButton.isDisplayed()); } } diff --git a/e2e/src/screens/Dapps/PlaygroundDappScreen.ts b/e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts similarity index 62% rename from e2e/src/screens/Dapps/PlaygroundDappScreen.ts rename to e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts index 09dab9e42..ebc3f5ed2 100644 --- a/e2e/src/screens/Dapps/PlaygroundDappScreen.ts +++ b/e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts @@ -1,36 +1,41 @@ import { ChainablePromiseElement } from 'webdriverio'; +import { visibilityOf } from 'wdio-wait-for'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; -class PlaygroundDappScreen implements Dapp { +class PlaygroundNextDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@text="Connect"]', ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Connect"`]', + iosSelector: IOSSelector.by().predicateString( + 'name == "Connect MetaMask"', ), }), ); } - get connectAndSignButton(): ChainablePromiseElement { + get addressContainer(): ChainablePromiseElement { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Connect w/ Sign"]', + '//android.view.View', // TODO ), iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', + '**/XCUIElementTypeStaticText[`name == "Address:"`]', ), }), ); } + get connectAndSignButton(): ChainablePromiseElement { + throw new Error('Not implemented'); + } + get terminateButton(): ChainablePromiseElement { return $( getSelectorForPlatform({ @@ -48,10 +53,10 @@ class PlaygroundDappScreen implements Dapp { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="personal_sign"]', + '//android.widget.Button[@text="Personal Sign"]', ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "personal_sign"`]', + iosSelector: IOSSelector.by().predicateString( + 'name == "Personal Sign"', ), }), ); @@ -71,16 +76,7 @@ class PlaygroundDappScreen implements Dapp { } get sendTransactionButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Send transaction"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Send transaction"`]', - ), - }), - ); + throw new Error('Not implemented'); } async connect(): Promise { @@ -103,10 +99,20 @@ class PlaygroundDappScreen implements Dapp { await this.terminateButton.click(); } - async isDappTerminated(): Promise { - return !(await this.terminateButton.isDisplayed()); + async isDappConnected(): Promise { + const isAddressContainerDisplayed = await driver.waitUntil( + visibilityOf(this.addressContainer), + { + timeout: 10000, + }, + ); + return isAddressContainerDisplayed; + } + + async tapPersonalSignButton(): Promise { + await this.personalSignButton.click(); } } -const playgroundDappScreen = new PlaygroundDappScreen(); -export default playgroundDappScreen; +const playgroundNextDappScreen = new PlaygroundNextDappScreen(); +export default playgroundNextDappScreen; diff --git a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts b/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts index 180b4d37c..5301ba249 100644 --- a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts +++ b/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; -import { getSelectorForPlatform } from '@/util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; class ReactMetamaskButtonDappScreen { get connectButton(): ChainablePromiseElement { @@ -38,7 +38,7 @@ class ReactMetamaskButtonDappScreen { await this.terminateButton.click(); } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { throw new Error('Not implemented'); } } diff --git a/e2e/src/screens/Dapps/ReactNativeDappScreen.ts b/e2e/src/screens/Dapps/ReactNativeDappScreen.ts index a6e3feef0..eb43de74c 100644 --- a/e2e/src/screens/Dapps/ReactNativeDappScreen.ts +++ b/e2e/src/screens/Dapps/ReactNativeDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class ReactNativeDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -50,7 +50,7 @@ class ReactNativeDappScreen implements Dapp { await this.terminateButton.click(); } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { throw new Error('Not implemented'); } } diff --git a/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts b/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts index 0b1fc4534..67d0cf76a 100644 --- a/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts +++ b/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts @@ -1,9 +1,9 @@ import { ChainablePromiseElement } from 'webdriverio'; -import Gestures from '@/util/Gestures'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; +import Gestures from '@util/Gestures'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; class SdkPlaygroundDappScreen implements Dapp { get demoProviderButton(): ChainablePromiseElement { @@ -284,7 +284,7 @@ class SdkPlaygroundDappScreen implements Dapp { } } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { throw new Error('Not implemented'); } } diff --git a/e2e/src/screens/Dapps/TestDappScreen.ts b/e2e/src/screens/Dapps/TestDappScreen.ts index 2fdc5e78a..6c619e1cc 100644 --- a/e2e/src/screens/Dapps/TestDappScreen.ts +++ b/e2e/src/screens/Dapps/TestDappScreen.ts @@ -1,10 +1,10 @@ import { ChainablePromiseElement } from 'webdriverio'; import { driver } from '@wdio/globals'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import Gestures from '@/util/Gestures'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { Dapp } from '@screens/interfaces/Dapp'; +import Gestures from '@util/Gestures'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class TestDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -101,7 +101,7 @@ class TestDappScreen implements Dapp { } } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { throw new Error('Not implemented'); } } diff --git a/e2e/src/screens/Dapps/UnityDappScreen.ts b/e2e/src/screens/Dapps/UnityDappScreen.ts index 43a0df216..08d9f01b8 100644 --- a/e2e/src/screens/Dapps/UnityDappScreen.ts +++ b/e2e/src/screens/Dapps/UnityDappScreen.ts @@ -1,6 +1,6 @@ -import { UnityDappElement } from '@/util/types'; -import Gestures from '@/util/Gestures'; -import { Dapp } from '@/screens/interfaces/Dapp'; +import { UnityDappElement } from '@util/types'; +import Gestures from '@util/Gestures'; +import { Dapp } from '@screens/interfaces/Dapp'; class UnityDappScreen implements Dapp { get connectButton(): UnityDappElement { @@ -36,7 +36,7 @@ class UnityDappScreen implements Dapp { }); } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { throw new Error('Not implemented'); } } diff --git a/e2e/src/screens/Dapps/VueJSDappScreen.ts b/e2e/src/screens/Dapps/VueJSDappScreen.ts index c72933e25..cbb6a832f 100644 --- a/e2e/src/screens/Dapps/VueJSDappScreen.ts +++ b/e2e/src/screens/Dapps/VueJSDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class VueJSDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -141,7 +141,7 @@ class VueJSDappScreen implements Dapp { await this.switchToMainnetButton.click(); } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { throw new Error('Not implemented'); } } diff --git a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts b/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts index 4fb124402..231687e90 100644 --- a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts +++ b/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class Web3OnBoardDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -79,7 +79,7 @@ class Web3OnBoardDappScreen implements Dapp { await this.signButton.click(); } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { throw new Error('Not implemented'); } } diff --git a/e2e/src/screens/Dapps/iOSNativeDappScreen.ts b/e2e/src/screens/Dapps/iOSNativeDappScreen.ts index af1fc6888..8091c6ad4 100644 --- a/e2e/src/screens/Dapps/iOSNativeDappScreen.ts +++ b/e2e/src/screens/Dapps/iOSNativeDappScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import { IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { IOSSelector } from '@util/Selectors'; class IOSNNativeDappScreen implements Dapp { get connectButton(): ChainablePromiseElement { @@ -56,7 +56,7 @@ class IOSNNativeDappScreen implements Dapp { await this.terminateButton.click(); } - async isDappTerminated(): Promise { + async isDappConnected(): Promise { throw new Error('Not implemented'); } } diff --git a/e2e/src/screens/MetaMask/GetStartedScreen.ts b/e2e/src/screens/MetaMask/GetStartedScreen.ts index 73d06bda1..5285dcd45 100644 --- a/e2e/src/screens/MetaMask/GetStartedScreen.ts +++ b/e2e/src/screens/MetaMask/GetStartedScreen.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class GetStartedScreen { get getStartedButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/ImportFromSeedScreen.ts b/e2e/src/screens/MetaMask/ImportFromSeedScreen.ts index 356f12861..94bcf1fea 100644 --- a/e2e/src/screens/MetaMask/ImportFromSeedScreen.ts +++ b/e2e/src/screens/MetaMask/ImportFromSeedScreen.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class ImportFromSeedScreen { get srpInput(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/LockScreen.ts b/e2e/src/screens/MetaMask/LockScreen.ts index 6463f5af2..cb64d7bc7 100644 --- a/e2e/src/screens/MetaMask/LockScreen.ts +++ b/e2e/src/screens/MetaMask/LockScreen.ts @@ -1,9 +1,9 @@ import { ChainablePromiseElement } from 'webdriverio'; import { driver } from '@wdio/globals'; import { visibilityOf } from 'wdio-wait-for'; -import MainScreen from './MainScreen'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; +import MainScreen from '@screens/MetaMask/MainScreen'; class LockScreen { get passwordInput(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/MainScreen.ts b/e2e/src/screens/MetaMask/MainScreen.ts index d43c76a18..a3d9e8d67 100644 --- a/e2e/src/screens/MetaMask/MainScreen.ts +++ b/e2e/src/screens/MetaMask/MainScreen.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class MainScreen { get networkSwitcher(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/OptinMetricsScreen.ts b/e2e/src/screens/MetaMask/OptinMetricsScreen.ts index 5ac71cd55..f8ea854e4 100644 --- a/e2e/src/screens/MetaMask/OptinMetricsScreen.ts +++ b/e2e/src/screens/MetaMask/OptinMetricsScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import Gestures from '../../util/Gestures'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import Gestures from '@util/Gestures'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class OptinMetricsScreen { get acceptOptinMetrics(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/SecurityUpdates.ts b/e2e/src/screens/MetaMask/SecurityUpdates.ts index c1cf15186..82f4e8c49 100644 --- a/e2e/src/screens/MetaMask/SecurityUpdates.ts +++ b/e2e/src/screens/MetaMask/SecurityUpdates.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class SecurityUpdatesScreen { get noThanksSecurityUpdates(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/SettingsScreen.ts b/e2e/src/screens/MetaMask/SettingsScreen.ts index 3949f8310..67e0d1a9d 100644 --- a/e2e/src/screens/MetaMask/SettingsScreen.ts +++ b/e2e/src/screens/MetaMask/SettingsScreen.ts @@ -1,8 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import Gestures from '../../util/Gestures'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import Gestures from '@util/Gestures'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class SettingsScreen { get securityAndPrivacyButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/TermsOfUseScreen.ts b/e2e/src/screens/MetaMask/TermsOfUseScreen.ts index 398dcc9cb..88c4430cd 100644 --- a/e2e/src/screens/MetaMask/TermsOfUseScreen.ts +++ b/e2e/src/screens/MetaMask/TermsOfUseScreen.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class TermsOfUseScreen { get acceptTermsOfUseCheckbox(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/WalletReadyScreen.ts b/e2e/src/screens/MetaMask/WalletReadyScreen.ts index 8af25d599..5b28f3d53 100644 --- a/e2e/src/screens/MetaMask/WalletReadyScreen.ts +++ b/e2e/src/screens/MetaMask/WalletReadyScreen.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class WalletReadyScreen { get doneButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/WalletSetupScreen.ts b/e2e/src/screens/MetaMask/WalletSetupScreen.ts index afb8b438c..9570b4ae4 100644 --- a/e2e/src/screens/MetaMask/WalletSetupScreen.ts +++ b/e2e/src/screens/MetaMask/WalletSetupScreen.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class WalletSetupScreen { get importWithSRP(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/BottomNavigationComponent.ts b/e2e/src/screens/MetaMask/components/BottomNavigationComponent.ts index 56748e523..0e108c295 100644 --- a/e2e/src/screens/MetaMask/components/BottomNavigationComponent.ts +++ b/e2e/src/screens/MetaMask/components/BottomNavigationComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class BottomNavigationComponent { get settingsButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts b/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts index fe454869a..d216a6f71 100644 --- a/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class ConnectModalComponent { get accountApprovalModalContainer(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/EnableSmartTransactionsComponent.ts b/e2e/src/screens/MetaMask/components/EnableSmartTransactionsComponent.ts index 831e24d56..e2b2dbdfb 100644 --- a/e2e/src/screens/MetaMask/components/EnableSmartTransactionsComponent.ts +++ b/e2e/src/screens/MetaMask/components/EnableSmartTransactionsComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class EnableSmartTransactionsComponent { private get enableSmartTransactions(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/MetaMetricsComponent.ts b/e2e/src/screens/MetaMask/components/MetaMetricsComponent.ts index 603e6a4d8..42a4579b8 100644 --- a/e2e/src/screens/MetaMask/components/MetaMetricsComponent.ts +++ b/e2e/src/screens/MetaMask/components/MetaMetricsComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class MetaMetricsComponent { get agreeToMetaMetrics(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/NetworkSwitchedModalComponent.ts b/e2e/src/screens/MetaMask/components/NetworkSwitchedModalComponent.ts index ffba6322c..103ef23d3 100644 --- a/e2e/src/screens/MetaMask/components/NetworkSwitchedModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/NetworkSwitchedModalComponent.ts @@ -1,6 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; + +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class NetworkSwitchedModalComponent { get gotItButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts b/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts index deb6ec780..f5943af4e 100644 --- a/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts +++ b/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts @@ -1,7 +1,8 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; +import { visibilityOf } from 'wdio-wait-for'; class PersonalSignConfirmationComponent { get signButton(): ChainablePromiseElement { @@ -10,9 +11,7 @@ class PersonalSignConfirmationComponent { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@content-desc="request-signature-confirm-button"]', ), - iosSelector: IOSSelector.by().predicateString( - 'name == "tab-bar-item-Setting"', - ), + iosSelector: IOSSelector.by().predicateString('name == "Confirm"'), }), ); } @@ -23,32 +22,47 @@ class PersonalSignConfirmationComponent { androidSelector: AndroidSelector.by().xpath( '//android.widget.Button[@content-desc="request-signature-cancel-button"]', ), + iosSelector: IOSSelector.by().predicateString('name == "Reject"'), }), ); } - // TODO: add iOS locator get messageText(): ChainablePromiseElement { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( '//android.widget.TextView[@text="Personal Sign"]', ), + iosSelector: IOSSelector.by().xpath( + '//*[starts-with(@label, "Message ")]', + ), }), ); } - // TODO: add iOS locator - get personalSignContainer(): ChainablePromiseElement { + get personalSignContainerTitle(): ChainablePromiseElement { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( '//android.view.ViewGroup[@resource-id="personal-signature-request"]', ), + iosSelector: IOSSelector.by().predicateString( + 'name == "Signature request"', + ), }), ); } + async isPersonalSignComponentDisplayed(): Promise { + const isPersonalSignComponentDisplayed = await driver.waitUntil( + visibilityOf(this.personalSignContainerTitle), + { + timeout: 10000, + }, + ); + return isPersonalSignComponentDisplayed; + } + async tapSignButton(): Promise { await this.signButton.click(); } diff --git a/e2e/src/screens/MetaMask/components/SendTxModalComponent.ts b/e2e/src/screens/MetaMask/components/SendTxModalComponent.ts index 8288e8211..628cb330d 100644 --- a/e2e/src/screens/MetaMask/components/SendTxModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/SendTxModalComponent.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class SendTxModalComponent { get confirmButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/SignModalComponent.ts b/e2e/src/screens/MetaMask/components/SignModalComponent.ts index d10737624..7a1e84ae5 100644 --- a/e2e/src/screens/MetaMask/components/SignModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/SignModalComponent.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class SignModalComponent { get signApprovalButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/SwitchNetworkModalComponent.ts b/e2e/src/screens/MetaMask/components/SwitchNetworkModalComponent.ts index f57595d79..72f10ce61 100644 --- a/e2e/src/screens/MetaMask/components/SwitchNetworkModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/SwitchNetworkModalComponent.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class SwitchNetworkModalComponent { get switchNetworkButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/WelcomeComponent.ts b/e2e/src/screens/MetaMask/components/WelcomeComponent.ts index 777d14a4d..7f64db911 100644 --- a/e2e/src/screens/MetaMask/components/WelcomeComponent.ts +++ b/e2e/src/screens/MetaMask/components/WelcomeComponent.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class WelcomeComponent { get noThanksButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/MetaMask/components/WhatsNewComponent.ts b/e2e/src/screens/MetaMask/components/WhatsNewComponent.ts index 3119b78bd..1ebc56bd7 100644 --- a/e2e/src/screens/MetaMask/components/WhatsNewComponent.ts +++ b/e2e/src/screens/MetaMask/components/WhatsNewComponent.ts @@ -1,7 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; - -import { getSelectorForPlatform } from '@/util/Utils'; -import { AndroidSelector, IOSSelector } from '@/util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; class WhatsNewComponent { get closeModalButton(): ChainablePromiseElement { diff --git a/e2e/src/screens/iOS/SafariBrowserScreen.ts b/e2e/src/screens/iOS/SafariBrowserScreen.ts index b5da82615..80897fe4c 100644 --- a/e2e/src/screens/iOS/SafariBrowserScreen.ts +++ b/e2e/src/screens/iOS/SafariBrowserScreen.ts @@ -1,14 +1,11 @@ import { ChainablePromiseElement } from 'webdriverio'; import { driver } from '@wdio/globals'; -import { Dapp } from '../interfaces/Dapp'; -import { getSelectorForPlatform } from '@/util/Utils'; -import { MobileBrowser } from '@/screens/interfaces/MobileBrowser'; -import { IOSSelector } from '@/util/Selectors'; -import { - Browsers, - // WEB_DAPP_LOAD_ATTEMPTS -} from '@/util/Constants'; +import { getSelectorForPlatform } from '@util/Utils'; +import { MobileBrowser } from '@screens/interfaces/MobileBrowser'; +import { IOSSelector } from '@util/Selectors'; +import { Browsers } from '@util/Constants'; +import { Dapp } from '@screens/interfaces/Dapp'; class SafariBrowserScreen implements MobileBrowser { get urlAddressBar(): ChainablePromiseElement { @@ -51,14 +48,6 @@ class SafariBrowserScreen implements MobileBrowser { async goToAddress(address: string, dappScreen: Dapp): Promise { await this.launchBrowser(); - // const addressPrefix = address.substring(8, 16); - // if (!(await this.urlAddressBar.getText()).includes(addressPrefix)) { - // await this.urlAddressBar.click(); - // await this.urlAddressBar.clearValue(); - // await this.urlAddressBar.setValue(address); - // await this.goButton.click(); - // } - // Trying to navigate directly to the address await driver.navigateTo(address); @@ -67,39 +56,7 @@ class SafariBrowserScreen implements MobileBrowser { timeout: 10000, }); - if (!(await dappScreen.isDappTerminated())) { - await dappScreen.terminate(); - } - - // Figures out if a dapp is loaded on the mobile browser - // const checkIfDappIsLoaded = async () => { - // let retries = 20; - // let isStopPageLoadButtonDisplayed = - // await this.stopPageLoadingButton.isDisplayed(); - - // if (!isStopPageLoadButtonDisplayed) { - // return true; - // } - - // while (isStopPageLoadButtonDisplayed && retries > 0) { - // // Waits for 2 seconds before checking again - // await driver.pause(2000); - // isStopPageLoadButtonDisplayed = - // await this.stopPageLoadingButton.isDisplayed(); - // retries -= 1; - // } - // return false; - // }; - - // let attempts = 0; - - // let isWebDappLoaded = await checkIfDappIsLoaded(); - - // while (!isWebDappLoaded && attempts < WEB_DAPP_LOAD_ATTEMPTS) { - // await this.refreshPage(); - // isWebDappLoaded = await checkIfDappIsLoaded(); - // attempts += 1; - // } + await dappScreen.terminate(); } async launchBrowser(): Promise { diff --git a/e2e/src/screens/iOS/components/IOSOpenInComponent.ts b/e2e/src/screens/iOS/components/IOSOpenInComponent.ts index bfa9e9efc..e1be80df1 100644 --- a/e2e/src/screens/iOS/components/IOSOpenInComponent.ts +++ b/e2e/src/screens/iOS/components/IOSOpenInComponent.ts @@ -1,7 +1,7 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { IOSSelector } from '@/util/Selectors'; -import { getSelectorForPlatform } from '@/util/Utils'; +import { IOSSelector } from '@util/Selectors'; +import { getSelectorForPlatform } from '@util/Utils'; class IOSOpenInComponent { get open(): ChainablePromiseElement { diff --git a/e2e/src/screens/interfaces/Dapp.ts b/e2e/src/screens/interfaces/Dapp.ts index f2e672213..92842aed4 100644 --- a/e2e/src/screens/interfaces/Dapp.ts +++ b/e2e/src/screens/interfaces/Dapp.ts @@ -1,6 +1,6 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { UnityDappElement } from '@/util/types'; +import { UnityDappElement } from '@util/types'; export type Dapp = { connectButton: ChainablePromiseElement | UnityDappElement; @@ -20,6 +20,6 @@ export type Dapp = { signTypedDataV4?(): Promise; personalSign?(): Promise; sendTransaction?(): Promise; - isDappTerminated(): Promise; + isDappConnected(): Promise; terminate(): Promise; }; diff --git a/e2e/src/screens/interfaces/MobileBrowser.ts b/e2e/src/screens/interfaces/MobileBrowser.ts index 8592259bf..bf22e53da 100644 --- a/e2e/src/screens/interfaces/MobileBrowser.ts +++ b/e2e/src/screens/interfaces/MobileBrowser.ts @@ -1,4 +1,4 @@ -import { Dapp } from '@/screens/interfaces/Dapp'; +import { Dapp } from '@screens/interfaces/Dapp'; export type MobileBrowser = { goToAddress(address: string, pageObject: Dapp): Promise; diff --git a/e2e/src/util/Utils.ts b/e2e/src/util/Utils.ts index b3cfddc32..a69f0cb34 100644 --- a/e2e/src/util/Utils.ts +++ b/e2e/src/util/Utils.ts @@ -1,7 +1,21 @@ import path from 'path'; import ADB from 'appium-adb'; import { driver } from '@wdio/globals'; -import Gestures from './Gestures'; +import LockScreen from '@screens/MetaMask/LockScreen'; +import { Dapp } from '@screens/interfaces/Dapp'; +import SafariBrowserScreen from '@screens/iOS/SafariBrowserScreen'; +import ChromeBrowserScreen from '@screens/Android/ChromeBrowserScreen'; +import AndroidOpenWithComponent from '@screens/Android/components/AndroidOpenWithComponent'; +import iOSOpenInComponent from '@screens/iOS/components/IOSOpenInComponent'; +import { loadFixture, startFixtureServer } from '@fixtures/FixtureHelper'; +import { FixtureBuilder } from '@fixtures/FixtureBuilder'; +import FixtureServer from '@fixtures/FixtureServer'; +import { + BrowserSize, + Coordinates, + MetaMaskElementSelector, + ScreenPercentage, +} from './types'; import { FIXTURE_SERVER_PORT, METAMASK_BUNDLE_ID, @@ -12,21 +26,7 @@ import { Browsers, BrowsersActivity, } from './Constants'; -import { - BrowserSize, - Coordinates, - MetaMaskElementSelector, - ScreenPercentage, -} from './types'; -import LockScreen from '@/screens/MetaMask/LockScreen'; -import { Dapp } from '@/screens/interfaces/Dapp'; -import SafariBrowserScreen from '@/screens/iOS/SafariBrowserScreen'; -import ChromeBrowserScreen from '@/screens/Android/ChromeBrowserScreen'; -import AndroidOpenWithComponent from '@/screens/Android/components/AndroidOpenWithComponent'; -import iOSOpenInComponent from '@/screens/iOS/components/IOSOpenInComponent'; -import { loadFixture, startFixtureServer } from '@/fixtures/FixtureHelper'; -import { FixtureBuilder } from '@/fixtures/FixtureBuilder'; -import FixtureServer from '@/fixtures/FixtureServer'; +import Gestures from './Gestures'; export const deviceOpenDeeplinkWithMetaMask = async () => { if (PLATFORM === Platforms.IOS) { @@ -181,6 +181,10 @@ export const launchMetaMaskWithFixture = async ( await driver.removeApp(bundleId); await driver.installApp(appPath); + const fixture = new FixtureBuilder().withDefaultFixture().build(); + await startFixtureServer(fixtureServer); + await loadFixture(fixtureServer, { fixture }); + // NOT NEEDED FOR BrowserStack if (PLATFORM === Platforms.ANDROID) { console.log('Android test detected. Reversing TCP ports...'); @@ -188,32 +192,23 @@ export const launchMetaMaskWithFixture = async ( adbHost: LOCALHOST, adbPort: 5037, }); - await driver.pause(5000); await adb.reversePort(FIXTURE_SERVER_PORT, FIXTURE_SERVER_PORT); - await driver.pause(5000); - } - - const fixture = new FixtureBuilder().withDefaultFixture().build(); - await startFixtureServer(fixtureServer); - await loadFixture(fixtureServer, { fixture }); - console.log(`Re-launching MetaMask on ${PLATFORM}...`); - if (PLATFORM === Platforms.IOS) { - console.log('Pausing for 10 seconds...'); - await driver.pause(20000); - - await driver.executeScript('mobile:launchApp', [ - { - bundleId, - arguments: ['fixtureServerPort', '12345'], - environment: { - fixtureServerPort: `${FIXTURE_SERVER_PORT}`, - }, - }, - ]); - } else { + console.log('Launching MetaMask with fixture on Android...'); await launchApp(METAMASK_BUNDLE_ID); + return; } + console.log(`Re-launching MetaMask on iOS...`); + await driver.executeScript('mobile:launchApp', [ + { + bundleId, + arguments: ['fixtureServerPort', '12345'], + environment: { + fixtureServerPort: `${FIXTURE_SERVER_PORT}`, + }, + }, + ]); + console.log('MetaMask was loaded with fixtures!'); }; diff --git a/e2e/test/configs/wdio.conf.ts b/e2e/test/configs/wdio.conf.ts index 1a451d479..2967d3139 100644 --- a/e2e/test/configs/wdio.conf.ts +++ b/e2e/test/configs/wdio.conf.ts @@ -1,11 +1,33 @@ -import path from 'path'; +import { resolve } from 'path'; +import type { Options } from '@wdio/types'; +import { register } from 'ts-node'; +import moduleAlias from 'module-alias'; import * as dotenv from 'dotenv'; + // const allure = require('allure-commandline'); -dotenv.config({ path: path.join(process.cwd(), '.dapps.env') }); -dotenv.config({ path: path.join(process.cwd(), '.env') }); +dotenv.config({ path: resolve(process.cwd(), '.dapps.env') }); +dotenv.config({ path: resolve(process.cwd(), '.env') }); + +// Register ts-node +register({ + project: 'tsconfig.json', + transpileOnly: true, + compilerOptions: { + module: 'commonjs', + }, +}); + +console.log('AAA', resolve(__dirname, '../../src/')); + +moduleAlias.addAliases({ + '@fixtures': resolve(__dirname, '../../src/fixtures'), + '@util': resolve(__dirname, '../../src/util'), + '@screens': resolve(__dirname, '../../src/screens'), + '@specs': resolve(__dirname, '../../test/specs'), +}); -export const config: WebdriverIO.Config = { +export const config: Options.Testrunner = { runner: 'local', capabilities: [], diff --git a/e2e/test/mocha.hooks.ts b/e2e/test/mocha.hooks.ts index 4fb825f00..12366491b 100644 --- a/e2e/test/mocha.hooks.ts +++ b/e2e/test/mocha.hooks.ts @@ -1,22 +1,22 @@ import { driver } from '@wdio/globals'; -import { killApp, launchApp, launchMetaMask } from '@/util/Utils'; -import LockScreen from '@/screens/MetaMask/LockScreen'; -import { NATIVE_OS_APPS, WALLET_PASSWORD, SRP } from '@/util/Constants'; -import BottomNavigationComponent from '@/screens/MetaMask/components/BottomNavigationComponent'; -import SettingsScreen from '@/screens/MetaMask/SettingsScreen'; -import GetStartedScreen from '@/screens/MetaMask/GetStartedScreen'; -import WalletSetupScreen from '@/screens/MetaMask/WalletSetupScreen'; -import OptinMetricsScreen from '@/screens/MetaMask/OptinMetricsScreen'; -import TermsOfUseScreen from '@/screens/MetaMask/TermsOfUseScreen'; -import ImportFromSeedScreen from '@/screens/MetaMask/ImportFromSeedScreen'; -import Gestures from '@/util/Gestures'; -import SecurityUpdatesScreen from '@/screens/MetaMask/SecurityUpdates'; -import WelcomeComponent from '@/screens/MetaMask/components/WelcomeComponent'; -import MetaMetricsComponent from '@/screens/MetaMask/components/MetaMetricsComponent'; -import AndroidSettingsScreen from '@/screens/Android/AndroidSettingsScreen'; -import AndroidSettingsOpeningLinksScreen from '@/screens/Android/AndroidSettingsOpeningLinksScreen'; -import WalletReadyScreen from '@/screens/MetaMask/WalletReadyScreen'; -import EnableSmartTransactionsComponent from '@/screens/MetaMask/components/EnableSmartTransactionsComponent'; +import { killApp, launchApp, launchMetaMask } from '@util/Utils'; +import LockScreen from '@screens/MetaMask/LockScreen'; +import { NATIVE_OS_APPS, WALLET_PASSWORD, SRP } from '@util/Constants'; +import BottomNavigationComponent from '@screens/MetaMask/components/BottomNavigationComponent'; +import SettingsScreen from '@screens/MetaMask/SettingsScreen'; +import GetStartedScreen from '@screens/MetaMask/GetStartedScreen'; +import WalletSetupScreen from '@screens/MetaMask/WalletSetupScreen'; +import OptinMetricsScreen from '@screens/MetaMask/OptinMetricsScreen'; +import TermsOfUseScreen from '@screens/MetaMask/TermsOfUseScreen'; +import ImportFromSeedScreen from '@screens/MetaMask/ImportFromSeedScreen'; +import Gestures from '@util/Gestures'; +import SecurityUpdatesScreen from '@screens/MetaMask/SecurityUpdates'; +import WelcomeComponent from '@screens/MetaMask/components/WelcomeComponent'; +import MetaMetricsComponent from '@screens/MetaMask/components/MetaMetricsComponent'; +import AndroidSettingsScreen from '@screens/Android/AndroidSettingsScreen'; +import AndroidSettingsOpeningLinksScreen from '@screens/Android/AndroidSettingsOpeningLinksScreen'; +import WalletReadyScreen from '@screens/MetaMask/WalletReadyScreen'; +import EnableSmartTransactionsComponent from '@screens/MetaMask/components/EnableSmartTransactionsComponent'; const goToSettingsAndClearAllConnections = async () => { try { diff --git a/e2e/test/specs/fixture_reference.ts b/e2e/test/specs/fixture_reference.ts index a4254a6b8..5f0818d37 100644 --- a/e2e/test/specs/fixture_reference.ts +++ b/e2e/test/specs/fixture_reference.ts @@ -1,14 +1,14 @@ import { driver } from '@wdio/globals'; -import connectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; -import ChromeBrowserScreen from '@/screens/Android/ChromeBrowserScreen'; -import LockScreen from '@/screens/MetaMask/LockScreen'; -import { goBack, launchMetaMaskWithFixture } from '@/util/Utils'; -import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '@/util/Constants'; -import CreateReactAppDappScreen from '@/screens/Dapps/CreateReactAppDappScreen'; -import IOSOpenInComponent from '@/screens/iOS/components/IOSOpenInComponent'; -import SafariBrowserScreen from '@/screens/iOS/SafariBrowserScreen'; -import { stopFixtureServer } from '@/fixtures/FixtureHelper'; -import FixtureServer from '@/fixtures/FixtureServer'; +import connectModalComponent from '@screens/MetaMask/components/ConnectModalComponent'; +import ChromeBrowserScreen from '@screens/Android/ChromeBrowserScreen'; +import LockScreen from '@screens/MetaMask/LockScreen'; +import { goBack, launchMetaMaskWithFixture } from '@util/Utils'; +import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '@util/Constants'; +import CreateReactAppDappScreen from '@screens/Dapps/CreateReactAppDappScreen'; +import IOSOpenInComponent from '@screens/iOS/components/IOSOpenInComponent'; +import SafariBrowserScreen from '@screens/iOS/SafariBrowserScreen'; +import { stopFixtureServer } from '@fixtures/FixtureHelper'; +import FixtureServer from '@fixtures/FixtureServer'; const fixtureServer = new FixtureServer(); diff --git a/e2e/test/specs/js_sdk.spec.ts b/e2e/test/specs/js_sdk.spec.ts index c996a8c88..0e7614b9c 100644 --- a/e2e/test/specs/js_sdk.spec.ts +++ b/e2e/test/specs/js_sdk.spec.ts @@ -1,23 +1,23 @@ import { beforeEachHook, beforeHook } from '../mocha.hooks'; -import { BROWSER_BUNDLE_ID, WALLET_PASSWORD } from '@/util/Constants'; -import { killApp, launchApp, launchMetaMask } from '@/util/Utils'; -import ChromeBrowserScreen from '@/screens/Android/ChromeBrowserScreen'; -import AndroidOpenWithComponent from '@/screens/Android/components/AndroidOpenWithComponent'; -import ReactNativeDappScreen from '@/screens/Dapps/ReactNativeDappScreen'; -import SdkPlaygroundDappScreen from '@/screens/Dapps/SdkPlaygroundDappScreen'; -import TestDappScreen from '@/screens/Dapps/TestDappScreen'; -import Web3OnBoardDappScreen from '@/screens/Dapps/Web3OnBoardDappScreen'; -import LockScreen from '@/screens/MetaMask/LockScreen'; -import SettingsScreen from '@/screens/MetaMask/SettingsScreen'; -import BottomNavigationComponent from '@/screens/MetaMask/components/BottomNavigationComponent'; -import ConnectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; -import NetworkSwitchedModalComponent from '@/screens/MetaMask/components/NetworkSwitchedModalComponent'; -import SendTxModalComponent from '@/screens/MetaMask/components/SendTxModalComponent'; -import SignModalComponent from '@/screens/MetaMask/components/SignModalComponent'; -import SwitchNetworkModalComponent from '@/screens/MetaMask/components/SwitchNetworkModalComponent'; -import SafariBrowserScreen from '@/screens/iOS/SafariBrowserScreen'; -import IOSOpenInComponent from '@/screens/iOS/components/IOSOpenInComponent'; -import DevnextJSDappScreen from '@/screens/Dapps/DevnextJSDappScreen'; +import { BROWSER_BUNDLE_ID, WALLET_PASSWORD } from '@util/Constants'; +import { killApp, launchApp, launchMetaMask } from '@util/Utils'; +import ChromeBrowserScreen from '@screens/Android/ChromeBrowserScreen'; +import AndroidOpenWithComponent from '@screens/Android/components/AndroidOpenWithComponent'; +import ReactNativeDappScreen from '@screens/Dapps/ReactNativeDappScreen'; +import SdkPlaygroundDappScreen from '@screens/Dapps/SdkPlaygroundDappScreen'; +import TestDappScreen from '@screens/Dapps/TestDappScreen'; +import Web3OnBoardDappScreen from '@screens/Dapps/Web3OnBoardDappScreen'; +import LockScreen from '@screens/MetaMask/LockScreen'; +import SettingsScreen from '@screens/MetaMask/SettingsScreen'; +import BottomNavigationComponent from '@screens/MetaMask/components/BottomNavigationComponent'; +import ConnectModalComponent from '@screens/MetaMask/components/ConnectModalComponent'; +import NetworkSwitchedModalComponent from '@screens/MetaMask/components/NetworkSwitchedModalComponent'; +import SendTxModalComponent from '@screens/MetaMask/components/SendTxModalComponent'; +import SignModalComponent from '@screens/MetaMask/components/SignModalComponent'; +import SwitchNetworkModalComponent from '@screens/MetaMask/components/SwitchNetworkModalComponent'; +import SafariBrowserScreen from '@screens/iOS/SafariBrowserScreen'; +import IOSOpenInComponent from '@screens/iOS/components/IOSOpenInComponent'; +import DevnextJSDappScreen from '@screens/Dapps/DevnextJSDappScreen'; /* * @deprecated diff --git a/e2e/test/specs/metamask-connector/web_dapp.spec.ts b/e2e/test/specs/metamask-connector/web_dapp.spec.ts index b07456bba..40c52104a 100644 --- a/e2e/test/specs/metamask-connector/web_dapp.spec.ts +++ b/e2e/test/specs/metamask-connector/web_dapp.spec.ts @@ -1,37 +1,43 @@ -import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '@/util/Constants'; -import FixtureServer from '@/fixtures/FixtureServer'; +import FixtureServer from '@fixtures/FixtureServer'; import { deviceOpenDeeplinkWithMetaMask, goBack, killApp, launchMetaMaskWithFixture, navigateToWebMobileDapp, -} from '@/util/Utils'; -import ConnectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; -import PersonalSignConfirmationComponent from '@/screens/MetaMask/components/PersonalSignConfirmationComponent'; -import AndroidOpenWithComponent from '@/screens/Android/components/AndroidOpenWithComponent'; -import LockScreen from '@/screens/MetaMask/LockScreen'; -import DevnextJSDappScreen from '@/screens/Dapps/DevnextJSDappScreen'; +} from '@util/Utils'; +import ConnectModalComponent from '@screens/MetaMask/components/ConnectModalComponent'; +import PersonalSignConfirmationComponent from '@screens/MetaMask/components/PersonalSignConfirmationComponent'; +import LockScreen from '@screens/MetaMask/LockScreen'; +import PlaygroundNextDappScreen from '@screens/Dapps/PlaygroundNextDappScreen'; +import { + METAMASK_BUNDLE_ID, + WALLET_PASSWORD, +} from '../../../src/util/Constants'; -let devNextDappUrl: string; +let playgroundNextDappUrl: string; const fixtureServer = new FixtureServer(); describe('MetaMask Connector Playground dapp', () => { before(async () => { - devNextDappUrl = process.env.PLAYGROUND_DAPP_URL ?? ''; - expect(devNextDappUrl.length).toBeGreaterThan(0); + playgroundNextDappUrl = process.env.PLAYGROUND_NEXT_DAPP_URL ?? ''; + console.log('playgroundNextDappUrl', playgroundNextDappUrl); + expect(playgroundNextDappUrl.length).toBeGreaterThan(0); await launchMetaMaskWithFixture(fixtureServer, METAMASK_BUNDLE_ID); await LockScreen.unlockMM(WALLET_PASSWORD); }); - it('should connect with a cold start state', async () => { - await navigateToWebMobileDapp(devNextDappUrl, DevnextJSDappScreen); + it('connect with a cold start state', async () => { + await navigateToWebMobileDapp( + playgroundNextDappUrl, + PlaygroundNextDappScreen, + ); // Start with a cold start await killApp(METAMASK_BUNDLE_ID); - await DevnextJSDappScreen.terminate(); - await DevnextJSDappScreen.connect(); + await PlaygroundNextDappScreen.terminate(); + await PlaygroundNextDappScreen.connect(); await deviceOpenDeeplinkWithMetaMask(); await LockScreen.unlockMM(WALLET_PASSWORD); @@ -40,37 +46,29 @@ describe('MetaMask Connector Playground dapp', () => { await goBack(); - expect(await DevnextJSDappScreen.isDappConnected()).toBe(true); + expect(await PlaygroundNextDappScreen.isDappConnected()).toBe(true); }); // Boilerplate for the next test - it.skip('should call personal_sign', async () => { + it('call personal_sign with a cold start state', async () => { + const personalSignMessage = 'Hello, world!'; + // Start with a cold start await killApp(METAMASK_BUNDLE_ID); - await navigateToWebMobileDapp(devNextDappUrl, DevnextJSDappScreen); - - await DevnextJSDappScreen.connect(); - await AndroidOpenWithComponent.tapOpenWithMetaMask(); - - await LockScreen.unlockMMifLocked(WALLET_PASSWORD); - - await ConnectModalComponent.tapConnectApproval(); - - await goBack(); + await PlaygroundNextDappScreen.tapPersonalSignButton(); + await deviceOpenDeeplinkWithMetaMask(); + await LockScreen.unlockMM(WALLET_PASSWORD); - await DevnextJSDappScreen.tapPersonalSignButton(); - await AndroidOpenWithComponent.tapOpenWithMetaMask(); expect( - await PersonalSignConfirmationComponent.personalSignContainer.isDisplayed(), + await PersonalSignConfirmationComponent.isPersonalSignComponentDisplayed(), ).toBe(true); - // the next expect is not working since MetaMask stopped using plaintext for personalSign - // expect(await PersonalSignConfirmationComponent.messageText.getText()).toBe('Personal Sign'); - await PersonalSignConfirmationComponent.tapSignButton(); + expect( + await PersonalSignConfirmationComponent.messageText.getText(), + ).toContain(personalSignMessage); + await PersonalSignConfirmationComponent.tapSignButton(); await goBack(); - - // expect the result of the personal sign request }); }); diff --git a/e2e/test/specs/multi-wallet-connector/fixture_reference.ts b/e2e/test/specs/multi-wallet-connector/fixture_reference.ts index fc99829c9..13f6ceb9f 100644 --- a/e2e/test/specs/multi-wallet-connector/fixture_reference.ts +++ b/e2e/test/specs/multi-wallet-connector/fixture_reference.ts @@ -1,14 +1,14 @@ import { driver } from '@wdio/globals'; -import FixtureServer from '@/fixtures/FixtureServer'; -import { stopFixtureServer } from '@/fixtures/FixtureHelper'; -import connectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; -import ChromeBrowserScreen from '@/screens/Android/ChromeBrowserScreen'; -import LockScreen from '@/screens/MetaMask/LockScreen'; -import { goBack, launchMetaMaskWithFixture } from '@/util/Utils'; -import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '@/util/Constants'; -import CreateReactAppDappScreen from '@/screens/Dapps/CreateReactAppDappScreen'; -import IOSOpenInComponent from '@/screens/iOS/components/IOSOpenInComponent'; -import SafariBrowserScreen from '@/screens/iOS/SafariBrowserScreen'; +import FixtureServer from '@fixtures/FixtureServer'; +import { stopFixtureServer } from '@fixtures/FixtureHelper'; +import connectModalComponent from '@screens/MetaMask/components/ConnectModalComponent'; +import ChromeBrowserScreen from '@screens/Android/ChromeBrowserScreen'; +import LockScreen from '@screens/MetaMask/LockScreen'; +import { goBack, launchMetaMaskWithFixture } from '@util/Utils'; +import { METAMASK_BUNDLE_ID, WALLET_PASSWORD } from '@util/Constants'; +import CreateReactAppDappScreen from '@screens/Dapps/CreateReactAppDappScreen'; +import IOSOpenInComponent from '@screens/iOS/components/IOSOpenInComponent'; +import SafariBrowserScreen from '@screens/iOS/SafariBrowserScreen'; const fixtureServer = new FixtureServer(); diff --git a/e2e/test/specs/native/android_sdk.spec.ts b/e2e/test/specs/native/android_sdk.spec.ts index b7d414370..5ace9a053 100644 --- a/e2e/test/specs/native/android_sdk.spec.ts +++ b/e2e/test/specs/native/android_sdk.spec.ts @@ -1,12 +1,12 @@ import { beforeEachHook, beforeHook } from '../../mocha.hooks'; -import { WALLET_PASSWORD } from '@/util/Constants'; -import { launchApp } from '@/util/Utils'; -import AndroidSDKDappScreen from '@/screens/Dapps/AndroidSDKDappScreen'; -import LockScreen from '@/screens/MetaMask/LockScreen'; -import ConnectModalComponent from '@/screens/MetaMask/components/ConnectModalComponent'; -import SendTxModalComponent from '@/screens/MetaMask/components/SendTxModalComponent'; -import SignModalComponent from '@/screens/MetaMask/components/SignModalComponent'; -import SwitchNetworkModalComponent from '@/screens/MetaMask/components/SwitchNetworkModalComponent'; +import { WALLET_PASSWORD } from '@util/Constants'; +import { launchApp } from '@util/Utils'; +import AndroidSDKDappScreen from '@screens/Dapps/AndroidSDKDappScreen'; +import LockScreen from '@screens/MetaMask/LockScreen'; +import ConnectModalComponent from '@screens/MetaMask/components/ConnectModalComponent'; +import SendTxModalComponent from '@screens/MetaMask/components/SendTxModalComponent'; +import SignModalComponent from '@screens/MetaMask/components/SignModalComponent'; +import SwitchNetworkModalComponent from '@screens/MetaMask/components/SwitchNetworkModalComponent'; describe.skip('Android SDK (native) E2E', () => { before(async () => { diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json index 418058e6d..3099a0d85 100644 --- a/e2e/tsconfig.json +++ b/e2e/tsconfig.json @@ -24,14 +24,12 @@ "baseUrl": ".", "paths": { "*": ["node_modules/*"], - "@/*": ["src/*"] + "@util/*": ["src/util/*"], + "@specs/*": ["test/specs/*"], + "@screens/*": ["src/screens/*"], + "@fixtures/*": ["src/fixtures/*"] } }, "include": ["test", "src", "node_modules/@types/mocha/index.d.ts"], - "exclude": [ - "test/fixtures/fixture-helper.js", - "test/fixtures/fixture-server.js.js", - "test/fixtures/fixture-builder.js", - "test/fixtures/utils.js" - ] + "exclude": [] } diff --git a/e2e/yarn.lock b/e2e/yarn.lock index 05f6c5d23..af6aab23d 100644 --- a/e2e/yarn.lock +++ b/e2e/yarn.lock @@ -130,6 +130,196 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": ^7.25.9 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: db13f5c42d54b76c1480916485e6900748bbcb0014a8aca87f50a091f70ff4e0d0a6db63cade75eb41fcc3d2b6ba0a7f89e343def4f96f00269b41b8ab8dd7b8 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.26.0, @babel/compat-data@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/compat-data@npm:7.26.5" + checksum: 7aaac0e79cf6f38478b877b1185413390bfe8ce9f2a19f906cfdf898df82f5a932579bee49c5d0d0a6fd838c715ff59d4958bfd161ef0e857e5eb083efb707b4 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/generator@npm:7.26.5" + dependencies: + "@babel/parser": ^7.26.5 + "@babel/types": ^7.26.5 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + jsesc: ^3.0.2 + checksum: baa42a98cd01efa3ae3634a6caa81d0738e5e0bdba4efbf1ac735216c8d7cf6bdffeab69c468e6ab2063b07db402346113def4962719746756518432f83c53ba + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" + dependencies: + "@babel/types": ^7.25.9 + checksum: 41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/helper-compilation-targets@npm:7.26.5" + dependencies: + "@babel/compat-data": ^7.26.5 + "@babel/helper-validator-option": ^7.25.9 + browserslist: ^4.24.0 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: 6bc0107613bf1d4d21913606e8e517194e5099a24db2a8374568e56ef4626e8140f9b8f8a4aabc35479f5904459a0aead2a91ee0dc63aae110ccbc2bc4b4fda1 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/traverse": ^7.25.9 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 91dd5f203ed04568c70b052e2f26dfaac7c146447196c00b8ecbb6d3d2f3b517abadb985d3321a19d143adaed6fe17f7f79f8f50e0c20e9d8ad83e1027b42424 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.9": + version: 7.26.3 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.26.3" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + regexpu-core: ^6.2.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 50a27d8ce6da5c2fa0c62c132c4d27cfeb36e3233ff1e5220d643de3dafe49423b507382f0b72a696fce7486014b134c1e742f55438590f9405d26765b009af0 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.2, @babel/helper-define-polyfill-provider@npm:^0.6.3": + version: 0.6.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.3" + dependencies: + "@babel/helper-compilation-targets": ^7.22.6 + "@babel/helper-plugin-utils": ^7.22.5 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 710e6d8a5391736b9f53f09d0494575c2e03de199ad8d1349bc8e514cb85251ea1f1842c2ff44830849d482052ddb42ae931101002a87a263b12f649c2e57c01 + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 8e2f1979b6d596ac2a8cbf17f2cf709180fefc274ac3331408b48203fe19134ed87800774ef18838d0275c3965130bae22980d90caed756b7493631d4b2cf961 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 1b411ce4ca825422ef7065dffae7d8acef52023e51ad096351e3e2c05837e9bf9fca2af9ca7f28dc26d596a588863d0fedd40711a88e350b736c619a80e704e6 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 942eee3adf2b387443c247a2c190c17c4fd45ba92a23087abab4c804f40541790d51ad5277e4b5b1ed8d5ba5b62de73857446b7742f835c18ebd350384e63917 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" + dependencies: + "@babel/types": ^7.25.9 + checksum: f09d0ad60c0715b9a60c31841b3246b47d67650c512ce85bbe24a3124f1a4d66377df793af393273bc6e1015b0a9c799626c48e53747581c1582b99167cc65dc + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/helper-plugin-utils@npm:7.26.5" + checksum: 4771fbb1711c624c62d12deabc2ed7435a6e6994b6ce09d5ede1bc1bf19be59c3775461a1e693bdd596af865685e87bb2abc778f62ceadc1b2095a8e2aa74180 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-wrap-function": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: ea37ad9f8f7bcc27c109963b8ebb9d22bac7a5db2a51de199cb560e251d5593fe721e46aab2ca7d3e7a24b0aa4aff0eaf9c7307af9c2fd3a1d84268579073052 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/helper-replace-supers@npm:7.26.5" + dependencies: + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/traverse": ^7.26.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c5ab31b29c7cc09e30278f8860ecdb873ce6c84b5c08bc5239c369c7c4fe9f0a63cda61b55b7bbd20edb4e5dc32e73087cc3c57d85264834bd191551d1499185 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: fdbb5248932198bc26daa6abf0d2ac42cab9c2dbb75b7e9f40d425c8f28f09620b886d40e7f9e4e08ffc7aaa2cefe6fc2c44be7c20e81f7526634702fb615bdc + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 6435ee0849e101681c1849868278b5aee82686ba2c1e27280e5e8aca6233af6810d39f8e4e693d2f2a44a3728a6ccfd66f72d71826a94105b86b731697cdfa99 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-validator-identifier@npm:7.22.20" @@ -144,6 +334,31 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 5b85918cb1a92a7f3f508ea02699e8d2422fe17ea8e82acd445006c0ef7520fbf48e3dbcdaf7b0a1d571fc3a2715a29719e5226636cb6042e15fe6ed2a590944 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 9491b2755948ebbdd68f87da907283698e663b5af2d2b1b02a2765761974b1120d5d8d49e9175b167f16f72748ffceec8c9cf62acfbee73f4904507b246e2b3d + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-wrap-function@npm:7.25.9" + dependencies: + "@babel/template": ^7.25.9 + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 8ec1701e60ae004415800c4a7a188f5564c73b4e4f3fdf58dd3f34a3feaa9753173f39bbd6d02e7ecc974f48155efc7940e62584435b3092c07728ee46a604ea + languageName: node + linkType: hard + "@babel/highlight@npm:^7.22.5": version: 7.22.5 resolution: "@babel/highlight@npm:7.22.5" @@ -159,10 +374,899 @@ __metadata: version: 7.23.4 resolution: "@babel/highlight@npm:7.23.4" dependencies: - "@babel/helper-validator-identifier": ^7.22.20 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89 + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/parser@npm:7.26.5" + dependencies: + "@babel/types": ^7.26.5 + bin: + parser: ./bin/babel-parser.js + checksum: 663aebf27c1dc04813e6c1d6e8e8fcb2954163ec297a95bdb3f1d0c2a0f04b504bddc09588fe4b176b43fad28c8a4b2914838a1edffdd426537a42f3ac644f1e + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: b33d37dacf98a9c74f53959999adc37a258057668b62dba557e6865689433c53764673109eaba9102bf73b2ac4db162f0d9b89a6cca6f1b71d12f5908ec11da9 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d3e14ab1cb9cb50246d20cab9539f2fbd1e7ef1ded73980c8ad7c0561b4d5e0b144d362225f0976d47898e04cbd40f2000e208b0913bd788346cf7791b96af91 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a9d1ee3fd100d3eb6799a2f2bbd785296f356c531d75c9369f71541811fa324270258a374db103ce159156d006da2f33370330558d0133e6f7584152c34997ca + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/plugin-transform-optional-chaining": ^7.25.9 + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 5b298b28e156f64de51cdb03a2c5b80c7f978815ef1026f3ae8b9fc48d28bf0a83817d8fbecb61ef8fb94a7201f62cca5103cc6e7b9e8f28e38f766d7905b378 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c684593952ab1b40dfa4e64e98a07e7227c6db175c21bd0e6d71d2ad5d240fef4e4a984d56f05a494876542a022244fe1c1098f4116109fd90d06615e8a269b1 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b58f2306df4a690ca90b763d832ec05202c50af787158ff8b50cdf3354359710bce2e1eb2b5135fcabf284756ac8eadf09ca74764aa7e76d12a5cac5f6b21e67 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c122aa577166c80ee67f75aebebeef4150a132c4d3109d25d7fc058bf802946f883e330f20b78c1d3e3a5ada631c8780c263d2d01b5dbaecc69efefeedd42916 + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb609d1ffb50b58f0c1bac8810d0e46a4f6c922aa171c458f3a19d66ee545d36e782d3bffbbc1fed0dc65a558bdce1caf5279316583c0fff5a2c1658982a8563 + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0e9821e8ba7d660c36c919654e4144a70546942ae184e85b8102f2322451eae102cbfadbcadd52ce077a2b44b400ee52394c616feab7b5b9f791b910e933fd33 + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c29f081224859483accf55fb4d091db2aac0dcd0d7954bac5ca889030cc498d3f771aa20eb2e9cd8310084ec394d85fa084b97faf09298b6bc9541182b3eb5bb + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-remap-async-to-generator": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 41e02c18c2a57de9f274fa2c5a1bf81a20ab5f321db29cc3051512b9c5bdf3f1a8c42f1fc282cb62343c6d50849f992eede954d5f7fb5e7df48ae0c59ea7e054 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-remap-async-to-generator": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b3ad50fb93c171644d501864620ed23952a46648c4df10dc9c62cc9ad08031b66bd272cfdd708faeee07c23b6251b16f29ce0350473e4c79f0c32178d38ce3a6 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.26.5" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f2046c09bf8e588bfb1a6342d0eee733189102cf663ade27adb0130f3865123af5816b40a55ec8d8fa09271b54dfdaf977cd2f8e0b3dc97f18e690188d5a2174 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e869500cfb1995e06e64c9608543b56468639809febfcdd6fcf683bc0bf1be2431cacf2981a168a1a14f4766393e37bc9f7c96d25bc5b5f39a64a8a8ad0bf8e0 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8d69e2c285486b63f49193cbcf7a15e1d3a5f632c1c07d7a97f65306df7f554b30270b7378dde143f8b557d1f8f6336c643377943dec8ec405e4cd11e90b9ea + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-class-static-block@npm:7.26.0" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: d779d4d3a6f8d363f67fcbd928c15baa72be8d3b86c6d05e0300b50e66e2c4be9e99398b803d13064bc79d90ae36e37a505e3dc8af11904459804dec07660246 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-classes@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + "@babel/traverse": ^7.25.9 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d12584f72125314cc0fa8c77586ece2888d677788ac75f7393f5da574dfe4e45a556f7e3488fab29c8777ab3e5856d7a2d79f6df02834083aaa9d766440e3c68 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/template": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f77fa4bc0c1e0031068172df28852388db6b0f91c268d037905f459607cf1e8ebab00015f9f179f4ad96e11c5f381b635cd5dc4e147a48c7ac79d195ae7542de + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 965f63077a904828f4adee91393f83644098533442b8217d5a135c23a759a4c252c714074c965676a60d2c33f610f579a4eeb59ffd783724393af61c0ca45fef + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8bdf1bb9e6e3a2cc8154ae88a3872faa6dc346d6901994505fb43ac85f858728781f1219f40b67f7bb0687c507450236cb7838ac68d457e65637f98500aa161b + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b553eebc328797ead6be5ba5bdaf2f1222cea8a5bd33fb4ed625975d4f9b510bfb0d688d97e314cd4b4a48b279bea7b3634ad68c1b41ee143c3082db0ae74037 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: f7233cf596be8c6843d31951afaf2464a62a610cb89c72c818c044765827fab78403ab8a7d3a6386f838c8df574668e2a48f6c206b1d7da965aff9c6886cb8e6 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aaca1ccda819be9b2b85af47ba08ddd2210ff2dbea222f26e4cd33f97ab020884bf81a66197e50872721e9daf36ceb5659502c82199884ea74d5d75ecda5c58b + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.25.9": + version: 7.26.3 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.26.3" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b369ffad07e02e259c43a09d309a5ca86cb9da6b43b1df6256463a810b172cedc4254742605eec0fc2418371c3f7430430f5abd36f21717281e79142308c13ba + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4dfe8df86c5b1d085d591290874bb2d78a9063090d71567ed657a418010ad333c3f48af2c974b865f53bbb718987a065f89828d43279a7751db1a56c9229078d + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-for-of@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 41b56e70256a29fc26ed7fb95ece062d7ec2f3b6ea8f0686349ffd004cd4816132085ee21165b89c502ee7161cb7cfb12510961638851357945dc7bc546475b7 + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-function-name@npm:7.25.9" + dependencies: + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8d7c8d019a6eb57eab5ca1be3e3236f175557d55b1f3b11f8ad7999e3fbb1cf37905fd8cb3a349bffb4163a558e9f33b63f631597fdc97c858757deac1b2fd7 + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e2498d84761cfd05aaea53799933d55af309c9d6204e66b38778792d171e4d1311ad34f334259a3aa3407dd0446f6bd3e390a1fcb8ce2e42fe5aabed0e41bee1 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3cca75823a38aab599bc151b0fa4d816b5e1b62d6e49c156aa90436deb6e13649f5505973151a10418b64f3f9d1c3da53e38a186402e0ed7ad98e482e70c0c14 + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8c6febb4ac53852314d28b5e2c23d5dbbff7bf1e57d61f9672e0d97531ef7778b3f0ad698dcf1179f5486e626c77127508916a65eb846a89e98a92f70ed3537b + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: db92041ae87b8f59f98b50359e0bb172480f6ba22e5e76b13bdfe07122cbf0daa9cd8ad2e78dcb47939938fed88ad57ab5989346f64b3a16953fc73dea3a9b1f + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-amd@npm:7.25.9" + dependencies: + "@babel/helper-module-transforms": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: baad1f6fd0e0d38e9a9c1086a06abdc014c4c653fd452337cadfe23fb5bd8bf4368d1bc433a5ac8e6421bc0732ebb7c044cf3fb39c1b7ebe967d66e26c4e5cec + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.25.9": + version: 7.26.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.26.3" + dependencies: + "@babel/helper-module-transforms": ^7.26.0 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0ac9aa4e5fe9fe34b58ee174881631e5e1c89eee5b1ebfd1147934686be92fc5fbfdc11119f0b607b3743d36a1cbcb7c36f18e0dd4424d6d7b749b1b9a18808a + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.9" + dependencies: + "@babel/helper-module-transforms": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf446202f372ba92dc0db32b24b56225b6e3ad3b227e31074de8b86fdec01c273ae2536873e38dbe3ceb1cd0894209343adeaa37df208e3fa88c0c7dffec7924 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-umd@npm:7.25.9" + dependencies: + "@babel/helper-module-transforms": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 946db66be5f04ab9ee56c424b00257276ec094aa2f148508927e6085239f76b00304fa1e33026d29eccdbe312efea15ca3d92e74a12689d7f0cdd9a7ba1a6c54 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 434346ba05cf74e3f4704b3bdd439287b95cd2a8676afcdc607810b8c38b6f4798cd69c1419726b2e4c7204e62e4a04d31b0360e91ca57a930521c9211e07789 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-new-target@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f8113539919aafce52f07b2bd182c771a476fe1d5d96d813460b33a16f173f038929369c595572cadc1f7bd8cb816ce89439d056e007770ddd7b7a0878e7895f + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.9": + version: 7.26.6 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.26.6" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 752837d532b85c41f6bb868e83809605f513bc9a3b8e88ac3d43757c9bf839af4f246874c1c6d6902bb2844d355efccae602c3856098911f8abdd603672f8379 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0528ef041ed88e8c3f51624ee87b8182a7f246fe4013f0572788e0727d20795b558f2b82e3989b5dd416cbd339500f0d88857de41b6d3b6fdacb1d5344bcc5b1 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9" + dependencies: + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/plugin-transform-parameters": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8ff73e1c46a03056b3a2236bafd6b3a4b83da93afe7ee24a50d0a8088150bf85bc5e5977daa04e66ff5fb7613d02d63ad49b91ebb64cf3f3022598d722e3a7a + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-super@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1817b5d8b80e451ae1ad9080cca884f4f16df75880a158947df76a2ed8ab404d567a7dce71dd8051ef95f90fbe3513154086a32aba55cc76027f6cbabfbd7f98 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b46a8d1e91829f3db5c252583eb00d05a779b4660abeea5500fda0f8ffa3584fd18299443c22f7fddf0ed9dfdb73c782c43b445dc468d4f89803f2356963b406 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f1642a7094456067e82b176e1e9fd426fda7ed9df54cb6d10109fc512b622bf4b3c83acc5875125732b8622565107fdbe2d60fe3ec8685e1d1c22c38c1b57782 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-parameters@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d7ba2a7d05edbc85aed741289b0ff3d6289a1c25d82ac4be32c565f88a66391f46631aad59ceeed40824037f7eeaa7a0de1998db491f50e65a565cd964f78786 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6e3671b352c267847c53a170a1937210fa8151764d70d25005e711ef9b21969aaf422acc14f9f7fb86bc0e4ec43e7aefcc0ad9196ae02d262ec10f509f126a58 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9ce3e983fea9b9ba677c192aa065c0b42ebdc7774be4c02135df09029ad92a55c35b004650c75952cb64d650872ed18f13ab64422c6fc891d06333762caa8a0a + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-property-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 436046ab07d54a9b44a384eeffec701d4e959a37a7547dda72e069e751ca7ff753d1782a8339e354b97c78a868b49ea97bf41bf5a44c6d7a3c0a05ad40eeb49c + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-regenerator@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + regenerator-transform: ^0.15.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1c09e8087b476c5967282c9790fb8710e065eda77c60f6cb5da541edd59ded9d003d96f8ef640928faab4a0b35bf997673499a194973da4f0c97f0935807a482 + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.26.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 726deca486bbd4b176f8a966eb0f4aabc19d9def3b8dabb8b3a656778eca0df1fda3f3c92b213aa5a184232fdafd5b7bd73b4e24ca4345c498ef6baff2bda4e1 + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-reserved-words@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8beda04481b25767acbd1f6b9ef7b3a9c12fbd9dcb24df45a6ad120e1dc4b247c073db60ac742f9093657d6d8c050501fc0606af042f81a3bb6a3ff862cddc47 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f774995d58d4e3a992b732cf3a9b8823552d471040e280264dd15e0735433d51b468fef04d75853d061309389c66bda10ce1b298297ce83999220eb0ad62741d + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-spread@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2403a5d49171b7714d5e5ecb1f598c61575a4dbe5e33e5a5f08c0ea990b75e693ca1ea983b6a96b2e3e5e7da48c8238333f525e47498c53b577c5d094d964c06 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7454b00844dbe924030dd15e2b3615b36e196500c4c47e98dabc6b37a054c5b1038ecd437e910aabf0e43bf56b973cb148d3437d50f6e2332d8309568e3e979b + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-template-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 92eb1d6e2d95bd24abbb74fa7640d02b66ff6214e0bb616d7fda298a7821ce15132a4265d576a3502a347a3c9e94b6c69ed265bb0784664592fa076785a3d16a + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3f9458840d96f61502f0e9dfaae3efe8325fa0b2151e24ea0d41307f28cdd166905419f5a43447ce0f1ae4bfd001f3906b658839a60269c254168164090b4c73 + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/plugin-transform-typescript@npm:7.26.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/plugin-syntax-typescript": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d022c1ca9ee5a420c374efb209eaca4f94c06851edeea2b3577dad52ea6692b6b33d00217b33a74d91bd62381ace471e26cc6153bbc681b3af1b1436431ff9c0 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: be067e07488d804e3e82d7771f23666539d2ae5af03bf6eb8480406adf3dabd776e60c1fd5c6078dc5714b73cd80bbaca70e71d4f5d154c5c57200581602ca2f + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 201f6f46c1beb399e79aa208b94c5d54412047511795ce1e790edcd189cef73752e6a099fdfc01b3ad12205f139ae344143b62f21f44bbe02338a95e8506a911 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e8baae867526e179467c6ef5280d70390fa7388f8763a19a27c21302dd59b121032568be080749514b097097ceb9af716bf4b90638f1b3cf689aa837ba20150f + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 4445ef20de687cb4dcc95169742a8d9013d680aa5eee9186d8e25875bbfa7ee5e2de26a91177ccf70b1db518e36886abcd44750d28db5d7a9539f0efa6839f4b + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/preset-env@npm:7.26.0" + dependencies: + "@babel/compat-data": ^7.26.0 + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-validator-option": ^7.25.9 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.25.9 + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.25.9 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.25.9 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.25.9 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.25.9 + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 + "@babel/plugin-syntax-import-assertions": ^7.26.0 + "@babel/plugin-syntax-import-attributes": ^7.26.0 + "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.25.9 + "@babel/plugin-transform-async-generator-functions": ^7.25.9 + "@babel/plugin-transform-async-to-generator": ^7.25.9 + "@babel/plugin-transform-block-scoped-functions": ^7.25.9 + "@babel/plugin-transform-block-scoping": ^7.25.9 + "@babel/plugin-transform-class-properties": ^7.25.9 + "@babel/plugin-transform-class-static-block": ^7.26.0 + "@babel/plugin-transform-classes": ^7.25.9 + "@babel/plugin-transform-computed-properties": ^7.25.9 + "@babel/plugin-transform-destructuring": ^7.25.9 + "@babel/plugin-transform-dotall-regex": ^7.25.9 + "@babel/plugin-transform-duplicate-keys": ^7.25.9 + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.25.9 + "@babel/plugin-transform-dynamic-import": ^7.25.9 + "@babel/plugin-transform-exponentiation-operator": ^7.25.9 + "@babel/plugin-transform-export-namespace-from": ^7.25.9 + "@babel/plugin-transform-for-of": ^7.25.9 + "@babel/plugin-transform-function-name": ^7.25.9 + "@babel/plugin-transform-json-strings": ^7.25.9 + "@babel/plugin-transform-literals": ^7.25.9 + "@babel/plugin-transform-logical-assignment-operators": ^7.25.9 + "@babel/plugin-transform-member-expression-literals": ^7.25.9 + "@babel/plugin-transform-modules-amd": ^7.25.9 + "@babel/plugin-transform-modules-commonjs": ^7.25.9 + "@babel/plugin-transform-modules-systemjs": ^7.25.9 + "@babel/plugin-transform-modules-umd": ^7.25.9 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.25.9 + "@babel/plugin-transform-new-target": ^7.25.9 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.25.9 + "@babel/plugin-transform-numeric-separator": ^7.25.9 + "@babel/plugin-transform-object-rest-spread": ^7.25.9 + "@babel/plugin-transform-object-super": ^7.25.9 + "@babel/plugin-transform-optional-catch-binding": ^7.25.9 + "@babel/plugin-transform-optional-chaining": ^7.25.9 + "@babel/plugin-transform-parameters": ^7.25.9 + "@babel/plugin-transform-private-methods": ^7.25.9 + "@babel/plugin-transform-private-property-in-object": ^7.25.9 + "@babel/plugin-transform-property-literals": ^7.25.9 + "@babel/plugin-transform-regenerator": ^7.25.9 + "@babel/plugin-transform-regexp-modifiers": ^7.26.0 + "@babel/plugin-transform-reserved-words": ^7.25.9 + "@babel/plugin-transform-shorthand-properties": ^7.25.9 + "@babel/plugin-transform-spread": ^7.25.9 + "@babel/plugin-transform-sticky-regex": ^7.25.9 + "@babel/plugin-transform-template-literals": ^7.25.9 + "@babel/plugin-transform-typeof-symbol": ^7.25.9 + "@babel/plugin-transform-unicode-escapes": ^7.25.9 + "@babel/plugin-transform-unicode-property-regex": ^7.25.9 + "@babel/plugin-transform-unicode-regex": ^7.25.9 + "@babel/plugin-transform-unicode-sets-regex": ^7.25.9 + "@babel/preset-modules": 0.1.6-no-external-plugins + babel-plugin-polyfill-corejs2: ^0.4.10 + babel-plugin-polyfill-corejs3: ^0.10.6 + babel-plugin-polyfill-regenerator: ^0.6.1 + core-js-compat: ^3.38.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0c3e2b3758cc0347dcf5551b5209db702764183dce66ff20bffceff6486c090bef9175f5f7d1e68cfe5584f0d817b2aab25ab5992058a7998f061f244c8caf5f + languageName: node + linkType: hard + +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@babel/types": ^7.4.4 + esutils: ^2.0.2 + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + checksum: 4855e799bc50f2449fb5210f78ea9e8fd46cf4f242243f1e2ed838e2bd702e25e73e822e7f8447722a5f4baa5e67a8f7a0e403f3e7ce04540ff743a9c411c375 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/preset-typescript@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-validator-option": ^7.25.9 + "@babel/plugin-syntax-jsx": ^7.25.9 + "@babel/plugin-transform-modules-commonjs": ^7.25.9 + "@babel/plugin-transform-typescript": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d8641fa6efd0e10eec5e8f92cd164b916a06d57131cfa5216c281404289c87d2b4995140a1c1d9c3bad171ff6ef2226be5f0585e09577ffff349706e991ec71 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.8.4": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: c8e2c0504ab271b3467a261a8f119bf2603eb857a0d71e37791f4e3fae00f681365073cc79f141ddaa90c6077c60ba56448004ad5429d07ac73532be9f7cf28a + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": ^7.25.9 + "@babel/parser": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 103641fea19c7f4e82dc913aa6b6ac157112a96d7c724d513288f538b84bae04fb87b1f1e495ac1736367b1bc30e10f058b30208fb25f66038e1f1eb4e426472 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/traverse@npm:7.26.5" + dependencies: + "@babel/code-frame": ^7.26.2 + "@babel/generator": ^7.26.5 + "@babel/parser": ^7.26.5 + "@babel/template": ^7.25.9 + "@babel/types": ^7.26.5 + debug: ^4.3.1 + globals: ^11.1.0 + checksum: 28f28037ec6bb72ded695b2bd79c373f13dc993a408c6037c3d46a1234360342a688c031f9ed4fc8528183892a63b54edce0b516e723fb3dffd606da75496cdc + languageName: node + linkType: hard + +"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.5, @babel/types@npm:^7.4.4": + version: 7.26.5 + resolution: "@babel/types@npm:7.26.5" + dependencies: + "@babel/helper-string-parser": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + checksum: 65dc14aa32ace22655c5edadeb99df80776c09cd93c105feaf49cc0583f3116aff0581b7eab630888c39ba61151f251c1399ec982b93585b0d1d1bf4a45b54f9 languageName: node linkType: hard @@ -327,6 +1431,17 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": ^1.2.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: c0687b5227461717aa537fe71a42e356bcd1c43293b3353796a148bf3b0d6f59109def46c22f05b60e29a46f19b2e4676d027959a7c53a6c92b9d5b0d87d0420 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3": version: 3.1.1 resolution: "@jridgewell/resolve-uri@npm:3.1.1" @@ -334,6 +1449,20 @@ __metadata: languageName: node linkType: hard +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:^1.4.10": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" @@ -341,6 +1470,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:0.3.9": version: 0.3.9 resolution: "@jridgewell/trace-mapping@npm:0.3.9" @@ -351,6 +1487,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 + languageName: node + linkType: hard + "@ljharb/through@npm:^2.3.11": version: 2.3.11 resolution: "@ljharb/through@npm:2.3.11" @@ -877,6 +2023,13 @@ __metadata: languageName: node linkType: hard +"@types/module-alias@npm:^2.0.4": + version: 2.0.4 + resolution: "@types/module-alias@npm:2.0.4" + checksum: f324ec96e07955270b8729cbc03e56405780f7a87f1f8e75009b40ba47c07a08f22ac5fe27e8e9a8c08b7951565618357429f4cec1cfffb2b777e569a0ffb966 + languageName: node + linkType: hard + "@types/mv@npm:2.1.4": version: 2.1.4 resolution: "@types/mv@npm:2.1.4" @@ -2194,6 +3347,55 @@ __metadata: languageName: node linkType: hard +"babel-plugin-module-resolver@npm:^5.0.2": + version: 5.0.2 + resolution: "babel-plugin-module-resolver@npm:5.0.2" + dependencies: + find-babel-config: ^2.1.1 + glob: ^9.3.3 + pkg-up: ^3.1.0 + reselect: ^4.1.7 + resolve: ^1.22.8 + checksum: f1d198acbbbd0b76c9c0c4aacbf9f1ef90f8d36b3d5209d9e7a75cadee2113a73711550ebddeb9464d143b71df19adc75e165dff99ada2614d7ea333affe3b5a + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.10": + version: 0.4.12 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.12" + dependencies: + "@babel/compat-data": ^7.22.6 + "@babel/helper-define-polyfill-provider": ^0.6.3 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 6e6e6a8b85fec80a310ded2f5c151385e4ac59118909dd6a952e1025e4a478eb79dda45a5a6322cc2e598fd696eb07d4e2fa52418b4101f3dc370bdf8c8939ba + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.10.6": + version: 0.10.6 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.2 + core-js-compat: ^3.38.0 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: f762f29f7acca576897c63149c850f0a72babd3fb9ea436a2e36f0c339161c4b912a77828541d8188ce8a91e50965c6687120cf36071eabb1b7aa92f279e2164 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.1": + version: 0.6.3 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.3" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.3 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: d12696e6b3f280eb78fac551619ca4389262db62c7352cd54bf679d830df8b35596eef2de77cf00db6648eada1c99d49c4f40636dbc9c335a1e5420cfef96750 + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -2375,6 +3577,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.24.0, browserslist@npm:^4.24.3": + version: 4.24.4 + resolution: "browserslist@npm:4.24.4" + dependencies: + caniuse-lite: ^1.0.30001688 + electron-to-chromium: ^1.5.73 + node-releases: ^2.0.19 + update-browserslist-db: ^1.1.1 + bin: + browserslist: cli.js + checksum: 64074bf6cf0a9ae3094d753270e3eae9cf925149db45d646f0bc67bacc2e46d7ded64a4e835b95f5fdcf0350f63a83c3755b32f80831f643a47f0886deb8a065 + languageName: node + linkType: hard + "browserstack-local@npm:^1.5.1": version: 1.5.3 resolution: "browserstack-local@npm:1.5.3" @@ -2526,6 +3742,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001688": + version: 1.0.30001695 + resolution: "caniuse-lite@npm:1.0.30001695" + checksum: 97729756cc19e9a93d46061ff11690d9a7d2facdb9c275111b19548adcba29d29638339bd6e659b7ddcb3649f17926a66a4cfb407605232f21918b70650a40be + languageName: node + linkType: hard + "chainsaw@npm:~0.1.0": version: 0.1.0 resolution: "chainsaw@npm:0.1.0" @@ -2876,6 +4099,15 @@ __metadata: languageName: node linkType: hard +"core-js-compat@npm:^3.38.0, core-js-compat@npm:^3.38.1": + version: 3.40.0 + resolution: "core-js-compat@npm:3.40.0" + dependencies: + browserslist: ^4.24.3 + checksum: 7ad00607c481ab2ded13d72be9ca5db5bbf42e221a175e905fb425e1ef520864aea28736c7283f57e9552d570eb6204bed87fbc8b9eab0fcfd9a7830dacccd43 + languageName: node + linkType: hard + "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -3034,6 +4266,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.1": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479 + languageName: node + linkType: hard + "decamelize@npm:^4.0.0": version: 4.0.0 resolution: "decamelize@npm:4.0.0" @@ -3405,6 +4649,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.73": + version: 1.5.84 + resolution: "electron-to-chromium@npm:1.5.84" + checksum: 4bdf445aa4fd970cef45cbeec2d20ce609f746b78a0e2e0a053ac01126b3901827877e770b2a841333458a2967017796a67a28e1c9dafc4d35002e32178e4d39 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -3569,6 +4820,13 @@ __metadata: languageName: node linkType: hard +"escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e + languageName: node + linkType: hard + "escape-html@npm:^1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" @@ -4126,6 +5384,15 @@ __metadata: languageName: node linkType: hard +"find-babel-config@npm:^2.1.1": + version: 2.1.2 + resolution: "find-babel-config@npm:2.1.2" + dependencies: + json5: ^2.2.3 + checksum: 268f29cb38ee086b0f953c89f762dcea30b5b0e14abee2b39516410c00b49baa6821f598bd50346c93584e5625c5740f5c8b7e34993f568787a068f84dacc8c2 + languageName: node + linkType: hard + "find-up@npm:5.0.0, find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -4136,6 +5403,15 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: ^3.0.0 + checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 + languageName: node + linkType: hard + "find-up@npm:^6.3.0": version: 6.3.0 resolution: "find-up@npm:6.3.0" @@ -4667,6 +5943,18 @@ __metadata: languageName: node linkType: hard +"glob@npm:^9.3.3": + version: 9.3.5 + resolution: "glob@npm:9.3.5" + dependencies: + fs.realpath: ^1.0.0 + minimatch: ^8.0.2 + minipass: ^4.2.4 + path-scurry: ^1.6.1 + checksum: 94b093adbc591bc36b582f77927d1fb0dbf3ccc231828512b017601408be98d1fe798fc8c0b19c6f2d1a7660339c3502ce698de475e9d938ccbb69b47b647c84 + languageName: node + linkType: hard + "glob@npm:~7.1.1": version: 7.1.7 resolution: "glob@npm:7.1.7" @@ -4681,6 +5969,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + "globals@npm:^13.19.0": version: 13.20.0 resolution: "globals@npm:13.20.0" @@ -4870,6 +6165,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + "he@npm:1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" @@ -5295,6 +6599,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: ^2.0.2 + checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 + languageName: node + linkType: hard + "is-date-object@npm:^1.0.1": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" @@ -5659,6 +6972,24 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 19c94095ea026725540c0d29da33ab03144f6bcf2d4159e4833d534976e99e0c09c38cefa9a575279a51fc36b31166f8d6d05c9fe2645d5f15851d690b41f17f + languageName: node + linkType: hard + +"jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c + languageName: node + linkType: hard + "jsftp@npm:2.1.3": version: 2.1.3 resolution: "jsftp@npm:2.1.3" @@ -5726,6 +7057,15 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + "jsonfile@npm:^4.0.0": version: 4.0.0 resolution: "jsonfile@npm:4.0.0" @@ -5901,6 +7241,16 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: ^3.0.0 + path-exists: ^3.0.0 + checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 + languageName: node + linkType: hard + "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -5935,6 +7285,13 @@ __metadata: languageName: node linkType: hard +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + "lodash.flattendeep@npm:^4.4.0": version: 4.4.0 resolution: "lodash.flattendeep@npm:4.4.0" @@ -6043,6 +7400,15 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -6128,11 +7494,14 @@ __metadata: version: 0.0.0-use.local resolution: "metamask-sdk-e2e@workspace:." dependencies: + "@babel/preset-env": ^7.26.0 + "@babel/preset-typescript": ^7.26.0 "@metamask/eslint-config": ^11.1.0 "@metamask/eslint-config-nodejs": ^11.1.0 "@metamask/eslint-config-typescript": ^11.1.0 "@types/koa": ^2.13.12 "@types/lodash.merge": ^4.6.9 + "@types/module-alias": ^2.0.4 "@typescript-eslint/eslint-plugin": ^5.61.0 "@typescript-eslint/parser": ^5.61.0 "@wdio/allure-reporter": ^8.11.0 @@ -6146,6 +7515,7 @@ __metadata: allure-commandline: ^2.23.0 appium-adb: ^11.0.8 axios: ^1.6.2 + babel-plugin-module-resolver: ^5.0.2 dotenv: ^16.0.3 eslint: ^8.44.0 eslint-config-prettier: ^8.8.0 @@ -6153,8 +7523,9 @@ __metadata: eslint-plugin-jsdoc: ^46.4.3 eslint-plugin-prettier: ^4.2.1 koa: ^2.14.2 + module-alias: ^2.2.3 prettier: ^2.8.8 - ts-node: ^10.9.1 + ts-node: ^10.9.2 typescript: ^4.9.5 wdio-wait-for: ^3.0.9 webdriverio: ^9.2.1 @@ -6242,6 +7613,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^8.0.2": + version: 8.0.4 + resolution: "minimatch@npm:8.0.4" + dependencies: + brace-expansion: ^2.0.1 + checksum: 2e46cffb86bacbc524ad45a6426f338920c529dd13f3a732cc2cf7618988ee1aae88df4ca28983285aca9e0f45222019ac2d14ebd17c1edadd2ee12221ab801a + languageName: node + linkType: hard + "minimatch@npm:^9.0.0, minimatch@npm:^9.0.1": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -6336,6 +7716,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^4.2.4": + version: 4.2.8 + resolution: "minipass@npm:4.2.8" + checksum: 7f4914d5295a9a30807cae5227a37a926e6d910c03f315930fde52332cf0575dfbc20295318f91f0baf0e6bb11a6f668e30cde8027dea7a11b9d159867a3c830 + languageName: node + linkType: hard + "minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" @@ -6433,6 +7820,13 @@ __metadata: languageName: node linkType: hard +"module-alias@npm:^2.2.3": + version: 2.2.3 + resolution: "module-alias@npm:2.2.3" + checksum: 6169187f69de8dcf8af8fab4d9e53ada6338a43f7670d38d0b27a089c28f9eb18d85a6fd46f11b54c63079a68449b85d071d7db0ac067f9f7faedbcd6231456d + languageName: node + linkType: hard + "moment@npm:2.29.4": version: 2.29.4 resolution: "moment@npm:2.29.4" @@ -6603,6 +7997,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 917dbced519f48c6289a44830a0ca6dc944c3ee9243c468ebd8515a41c97c8b2c256edb7f3f750416bc37952cc9608684e6483c7b6c6f39f6bd8d86c52cfe658 + languageName: node + linkType: hard + "node-request-interceptor@npm:^0.6.3": version: 0.6.3 resolution: "node-request-interceptor@npm:0.6.3" @@ -6847,6 +8248,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^2.0.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + "p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -6865,6 +8275,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: ^2.0.0 + checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae + languageName: node + linkType: hard + "p-locate@npm:^5.0.0": version: 5.0.0 resolution: "p-locate@npm:5.0.0" @@ -6892,6 +8311,13 @@ __metadata: languageName: node linkType: hard +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + "pac-proxy-agent@npm:^7.0.0, pac-proxy-agent@npm:^7.0.1": version: 7.0.1 resolution: "pac-proxy-agent@npm:7.0.1" @@ -7016,6 +8442,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -7068,7 +8501,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.11.1": +"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" dependencies: @@ -7101,6 +8534,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -7117,6 +8557,15 @@ __metadata: languageName: node linkType: hard +"pkg-up@npm:^3.1.0": + version: 3.1.0 + resolution: "pkg-up@npm:3.1.0" + dependencies: + find-up: ^3.0.0 + checksum: 5bac346b7c7c903613c057ae3ab722f320716199d753f4a7d053d38f2b5955460f3e6ab73b4762c62fd3e947f58e04f1343e92089e7bb6091c90877406fcd8c8 + languageName: node + linkType: hard + "plist@npm:3.1.0": version: 3.1.0 resolution: "plist@npm:3.1.0" @@ -7526,6 +8975,38 @@ __metadata: languageName: node linkType: hard +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" + dependencies: + regenerate: ^1.4.2 + checksum: d5c5fc13f8b8d7e16e791637a4bfef741f8d70e267d51845ee7d5404a32fa14c75b181c4efba33e4bff8b0000a2f13e9773593713dfe5b66597df4259275ce63 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.15.2": + version: 0.15.2 + resolution: "regenerator-transform@npm:0.15.2" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.0": version: 1.5.0 resolution: "regexp.prototype.flags@npm:1.5.0" @@ -7537,6 +9018,38 @@ __metadata: languageName: node linkType: hard +"regexpu-core@npm:^6.2.0": + version: 6.2.0 + resolution: "regexpu-core@npm:6.2.0" + dependencies: + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.2.0 + regjsgen: ^0.8.0 + regjsparser: ^0.12.0 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.1.0 + checksum: 67d3c4a3f6c99bc80b5d690074a27e6f675be1c1739f8a9acf028fbc36f1a468472574ea65e331e217995198ba4404d7878f3cb3739a73552dd3c70d3fb7f8e6 + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: a1d925ff14a4b2be774e45775ee6b33b256f89c42d480e6d85152d2133f18bd3d6af662161b226fa57466f7efec367eaf7ccd2a58c0ec2a1306667ba2ad07b0d + languageName: node + linkType: hard + +"regjsparser@npm:^0.12.0": + version: 0.12.0 + resolution: "regjsparser@npm:0.12.0" + dependencies: + jsesc: ~3.0.2 + bin: + regjsparser: bin/parser + checksum: 094b55b0ab3e1fd58f8ce5132a1d44dab08d91f7b0eea4132b0157b303ebb8ded20a9cbd893d25402d2aeddb23fac1f428ab4947b295d6fa51dd1c334a9e76f0 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -7544,6 +9057,13 @@ __metadata: languageName: node linkType: hard +"reselect@npm:^4.1.7": + version: 4.1.8 + resolution: "reselect@npm:4.1.8" + checksum: a4ac87cedab198769a29be92bc221c32da76cfdad6911eda67b4d3e7136dca86208c3b210e31632eae31ebd2cded18596f0dd230d3ccc9e978df22f233b5583e + languageName: node + linkType: hard + "resolve-alpn@npm:^1.2.0": version: 1.2.1 resolution: "resolve-alpn@npm:1.2.1" @@ -7578,6 +9098,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.14.2, resolve@npm:^1.22.8": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: ^2.16.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: ab7a32ff4046fcd7c6fdd525b24a7527847d03c3650c733b909b01b757f92eb23510afa9cc3e9bf3f26a3e073b48c88c706dfd4c1d2fb4a16a96b73b6328ddcf + languageName: node + linkType: hard + "resolve@npm:^1.22.1": version: 1.22.3 resolution: "resolve@npm:1.22.3" @@ -7604,6 +9137,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.22.8#~builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: ^2.16.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 8aac1e4e4628bd00bf4b94b23de137dd3fe44097a8d528fd66db74484be929936e20c696e1a3edf4488f37e14180b73df6f600992baea3e089e8674291f16c9d + languageName: node + linkType: hard + "resolve@patch:resolve@^1.22.1#~builtin": version: 1.22.3 resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin::version=1.22.3&hash=c3c19d" @@ -7829,7 +9375,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.3.0": +"semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -8581,9 +10127,9 @@ __metadata: languageName: node linkType: hard -"ts-node@npm:^10.9.1": - version: 10.9.1 - resolution: "ts-node@npm:10.9.1" +"ts-node@npm:^10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" dependencies: "@cspotcode/source-map-support": ^0.8.0 "@tsconfig/node10": ^1.0.7 @@ -8615,7 +10161,7 @@ __metadata: ts-node-script: dist/bin-script.js ts-node-transpile-only: dist/bin-transpile.js ts-script: dist/bin-script-deprecated.js - checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac languageName: node linkType: hard @@ -8850,6 +10396,37 @@ __metadata: languageName: node linkType: hard +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 3c3dabdb1d22aef4904399f9e810d0b71c0b12b3815169d96fac97e56d5642840c6071cf709adcace2252bc6bb80242396c2ec74b37224eb015c5f7aca40bad7 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: ^2.0.0 + unicode-property-aliases-ecmascript: ^2.0.0 + checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 9e3151e1d0bc6be35c4cef105e317c04090364173e8462005b5cde08a1e7c858b6586486cfebac39dc2c6c8c9ee24afb245de6d527604866edfa454fe2a35fae + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + languageName: node + linkType: hard + "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" @@ -8900,6 +10477,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.1.1": + version: 1.1.2 + resolution: "update-browserslist-db@npm:1.1.2" + dependencies: + escalade: ^3.2.0 + picocolors: ^1.1.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 088d2bad8ddeaeccd82d87d3f6d736d5256d697b725ffaa2b601dfd0ec16ba5fad20db8dcdccf55396e1a36194236feb69e3f5cce772e5be15a5e4261ff2815d + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -9378,6 +10969,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" From 805d8000b4c053253267f1babd3aca1f86ab0df8 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Wed, 22 Jan 2025 19:50:30 +0000 Subject: [PATCH 05/20] feat: implements personalSign on the playground-next for e2e usage --- packages/playground-next/.env.example | 1 + packages/playground-next/.gitignore | 2 +- packages/playground-next/src/app/layout.tsx | 3 +- packages/playground-next/src/app/page.tsx | 34 ++++++++++++++++++++- 4 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 packages/playground-next/.env.example diff --git a/packages/playground-next/.env.example b/packages/playground-next/.env.example new file mode 100644 index 000000000..f3d83d030 --- /dev/null +++ b/packages/playground-next/.env.example @@ -0,0 +1 @@ +NEXT_PUBLIC_INFURA_API_KEY=your_key_here \ No newline at end of file diff --git a/packages/playground-next/.gitignore b/packages/playground-next/.gitignore index 5ef6a5207..e72b4d6a4 100644 --- a/packages/playground-next/.gitignore +++ b/packages/playground-next/.gitignore @@ -31,7 +31,7 @@ yarn-error.log* .pnpm-debug.log* # env files (can opt-in for committing if needed) -.env* +.env # vercel .vercel diff --git a/packages/playground-next/src/app/layout.tsx b/packages/playground-next/src/app/layout.tsx index 2be6aef14..2706d55e7 100644 --- a/packages/playground-next/src/app/layout.tsx +++ b/packages/playground-next/src/app/layout.tsx @@ -30,7 +30,8 @@ export default function RootLayout({ dappMetadata: { name: "Simple Web3 Dapp", url: dappUrl, - } + }, + infuraAPIKey: process.env.NEXT_PUBLIC_INFURA_API_KEY || '', }} > <>{children} diff --git a/packages/playground-next/src/app/page.tsx b/packages/playground-next/src/app/page.tsx index 7e1b5d714..90b997d4e 100644 --- a/packages/playground-next/src/app/page.tsx +++ b/packages/playground-next/src/app/page.tsx @@ -13,6 +13,8 @@ export default function Home() { const { sdk, connected, connecting, provider, account } = useSDK(); const [accountInfo, setAccountInfo] = useState(null); const [isLoading, setIsLoading] = useState(false); + const [rpcResponse, setRpcResponse] = useState(); + const [rpcError, setRpcError] = useState(); const getBalance = useCallback(async (address: string): Promise => { const balance = await provider?.request({ @@ -45,6 +47,24 @@ export default function Home() { } }; + const personalSign = async (): Promise => { + if (!provider) { + setRpcError('Provider not found'); + return; + } + + try { + const response = await provider?.request({ + method: 'personal_sign', + params: ['Hello, world!', account] + }); + setRpcResponse(response); + } catch (error) { + console.log('CAUGHT THIS ERROR: ', error); + setRpcError(error); + } + }; + useEffect(() => { const updateAccountInfo = async () => { if (connected && account) { @@ -63,7 +83,12 @@ export default function Home() { return (
-

Simple Web3 Dapp

+

Playground-Next Dapp

+ +

RPC Response

+

{JSON.stringify(rpcResponse)}

+

RPC Error

+

{JSON.stringify(rpcError)}

{!connected ? (
+ + + ) : ( <>
From 62b0fac5a95648e796ed06099b493aabfef1fa6a Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Wed, 22 Jan 2025 19:58:26 +0000 Subject: [PATCH 07/20] feat: removes unecessary logs --- e2e/test/configs/wdio.conf.ts | 2 -- e2e/test/specs/metamask-connector/web_dapp.spec.ts | 1 - 2 files changed, 3 deletions(-) diff --git a/e2e/test/configs/wdio.conf.ts b/e2e/test/configs/wdio.conf.ts index 2967d3139..e60ddab26 100644 --- a/e2e/test/configs/wdio.conf.ts +++ b/e2e/test/configs/wdio.conf.ts @@ -18,8 +18,6 @@ register({ }, }); -console.log('AAA', resolve(__dirname, '../../src/')); - moduleAlias.addAliases({ '@fixtures': resolve(__dirname, '../../src/fixtures'), '@util': resolve(__dirname, '../../src/util'), diff --git a/e2e/test/specs/metamask-connector/web_dapp.spec.ts b/e2e/test/specs/metamask-connector/web_dapp.spec.ts index 40c52104a..4aec2bbdc 100644 --- a/e2e/test/specs/metamask-connector/web_dapp.spec.ts +++ b/e2e/test/specs/metamask-connector/web_dapp.spec.ts @@ -21,7 +21,6 @@ const fixtureServer = new FixtureServer(); describe('MetaMask Connector Playground dapp', () => { before(async () => { playgroundNextDappUrl = process.env.PLAYGROUND_NEXT_DAPP_URL ?? ''; - console.log('playgroundNextDappUrl', playgroundNextDappUrl); expect(playgroundNextDappUrl.length).toBeGreaterThan(0); await launchMetaMaskWithFixture(fixtureServer, METAMASK_BUNDLE_ID); From 0eb4d00b75736b9c8b78db774ddcfbfff6af2feb Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Tue, 28 Jan 2025 10:59:39 +0000 Subject: [PATCH 08/20] feat: work in progress --- e2e/package.json | 1 + .../screens/Android/ChromeBrowserScreen.ts | 57 ++++++++++--------- e2e/src/screens/interfaces/Dapp.ts | 14 ++--- e2e/src/util/Utils.ts | 21 +++++-- 4 files changed, 53 insertions(+), 40 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index e98addc37..96d5f1d46 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -27,6 +27,7 @@ "test:android:jssdk:e2e:local": "wdio run test/configs/local/wdio.android.app.local.conf.ts --suite web_dapp", "test:ios:jssdk:e2e:local:fixture": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite fixture_reference", "test:ios:metamask-connector:e2e:local": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite metamask_connector", + "test:android:metamask-connector:e2e:local": "wdio run test/configs/local/wdio.android.app.local.conf.ts --suite metamask_connector", "setup": "yarn install", "build": "tsc --build", "clean": "yarn clean:reports && rm -rf node_modules", diff --git a/e2e/src/screens/Android/ChromeBrowserScreen.ts b/e2e/src/screens/Android/ChromeBrowserScreen.ts index a95a8eb91..0313349cc 100644 --- a/e2e/src/screens/Android/ChromeBrowserScreen.ts +++ b/e2e/src/screens/Android/ChromeBrowserScreen.ts @@ -106,34 +106,39 @@ class ChromeBrowserScreen implements MobileBrowser { await driver.pressKeyCode(66); } - await this.refreshPage(); + await this.refreshButton.waitForDisplayed({ + timeout: 10000, + }); + await pageObject.terminate(); + + // await this.refreshPage(); // Wait for the page to start loading - await driver.pause(3000); - - const isWebDappLoaded = async () => { - let retries = 20; - // TODO: refactor this to use the page object - let isConnectButtonDisplayed = await ( - (await pageObject.connectButton) as ChainablePromiseElement - ).isDisplayed(); - - while (!isConnectButtonDisplayed && retries > 0) { - // Waits for 2 seconds before checking again - await driver.pause(2000); - isConnectButtonDisplayed = await ( - (await pageObject.connectButton) as ChainablePromiseElement - ).isDisplayed(); - retries -= 1; - } - }; - - let attempts = 0; - - while (!isWebDappLoaded() && attempts < WEB_DAPP_LOAD_ATTEMPTS) { - await this.refreshPage(); - attempts += 1; - } + // await driver.pause(3000); + + // const isWebDappLoaded = async () => { + // let retries = 20; + // // TODO: refactor this to use the page object + // let isConnectButtonDisplayed = await ( + // (await pageObject.connectButton) as ChainablePromiseElement + // ).isDisplayed(); + + // while (!isConnectButtonDisplayed && retries > 0) { + // // Waits for 2 seconds before checking again + // await driver.pause(2000); + // isConnectButtonDisplayed = await ( + // (await pageObject.connectButton) as ChainablePromiseElement + // ).isDisplayed(); + // retries -= 1; + // } + // }; + + // let attempts = 0; + + // while (!isWebDappLoaded() && attempts < WEB_DAPP_LOAD_ATTEMPTS) { + // await this.refreshPage(); + // attempts += 1; + // } } async tapSwitchTabsButton(): Promise { diff --git a/e2e/src/screens/interfaces/Dapp.ts b/e2e/src/screens/interfaces/Dapp.ts index 92842aed4..1f17a9281 100644 --- a/e2e/src/screens/interfaces/Dapp.ts +++ b/e2e/src/screens/interfaces/Dapp.ts @@ -1,19 +1,17 @@ import { ChainablePromiseElement } from 'webdriverio'; -import { UnityDappElement } from '@util/types'; - export type Dapp = { - connectButton: ChainablePromiseElement | UnityDappElement; + connectButton: ChainablePromiseElement; - terminateButton: ChainablePromiseElement | UnityDappElement; + terminateButton: ChainablePromiseElement; - signTypedDataV3Button?: ChainablePromiseElement | UnityDappElement; + signTypedDataV3Button?: ChainablePromiseElement; - signTypedDataV4Button?: ChainablePromiseElement | UnityDappElement; + signTypedDataV4Button?: ChainablePromiseElement; - sendTransactionButton?: ChainablePromiseElement | UnityDappElement; + sendTransactionButton?: ChainablePromiseElement; - personalSignButton?: ChainablePromiseElement | UnityDappElement; + personalSignButton?: ChainablePromiseElement; connect(): Promise; signTypedDataV3?(): Promise; diff --git a/e2e/src/util/Utils.ts b/e2e/src/util/Utils.ts index a69f0cb34..73ff15fb7 100644 --- a/e2e/src/util/Utils.ts +++ b/e2e/src/util/Utils.ts @@ -179,23 +179,32 @@ export const launchMetaMaskWithFixture = async ( ) => { const appPath = path.join(process.env.APP_PATH || ''); await driver.removeApp(bundleId); - await driver.installApp(appPath); const fixture = new FixtureBuilder().withDefaultFixture().build(); await startFixtureServer(fixtureServer); await loadFixture(fixtureServer, { fixture }); + await driver.pause(10000); // NOT NEEDED FOR BrowserStack if (PLATFORM === Platforms.ANDROID) { console.log('Android test detected. Reversing TCP ports...'); - const adb = new ADB({ - adbHost: LOCALHOST, - adbPort: 5037, - }); + const adb = await ADB.createADB({}); + await adb.reversePort(FIXTURE_SERVER_PORT, FIXTURE_SERVER_PORT); + await driver.installApp(appPath); + + await driver.pause(20000); + console.log('Launching MetaMask with fixture on Android...'); - await launchApp(METAMASK_BUNDLE_ID); + // await launchApp(METAMASK_BUNDLE_ID); + await driver.terminateApp(bundleId); + await driver.executeScript('mobile:activateApp', [ + { + appId: bundleId, + fixtureServerPort: `${FIXTURE_SERVER_PORT}`, + }, + ]); return; } From f2301f360a4059192ea8c1f9b29d79c735d54915 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Wed, 5 Feb 2025 11:26:57 +0000 Subject: [PATCH 09/20] feat: updates the Utils package to allow to start the app with fixtures --- e2e/src/util/Utils.ts | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/e2e/src/util/Utils.ts b/e2e/src/util/Utils.ts index 73ff15fb7..2fe7633ba 100644 --- a/e2e/src/util/Utils.ts +++ b/e2e/src/util/Utils.ts @@ -1,4 +1,3 @@ -import path from 'path'; import ADB from 'appium-adb'; import { driver } from '@wdio/globals'; import LockScreen from '@screens/MetaMask/LockScreen'; @@ -177,38 +176,25 @@ export const launchMetaMaskWithFixture = async ( fixtureServer: FixtureServer, bundleId: string, ) => { - const appPath = path.join(process.env.APP_PATH || ''); - await driver.removeApp(bundleId); - const fixture = new FixtureBuilder().withDefaultFixture().build(); await startFixtureServer(fixtureServer); await loadFixture(fixtureServer, { fixture }); - await driver.pause(10000); - // NOT NEEDED FOR BrowserStack if (PLATFORM === Platforms.ANDROID) { console.log('Android test detected. Reversing TCP ports...'); - const adb = await ADB.createADB({}); + const adb = new ADB({ + adbHost: LOCALHOST, + adbPort: 5037, + }); await adb.reversePort(FIXTURE_SERVER_PORT, FIXTURE_SERVER_PORT); - await driver.installApp(appPath); - - await driver.pause(20000); - - console.log('Launching MetaMask with fixture on Android...'); - // await launchApp(METAMASK_BUNDLE_ID); - await driver.terminateApp(bundleId); - await driver.executeScript('mobile:activateApp', [ - { - appId: bundleId, - fixtureServerPort: `${FIXTURE_SERVER_PORT}`, - }, - ]); + await launchApp(METAMASK_BUNDLE_ID); return; } - console.log(`Re-launching MetaMask on iOS...`); + // Specific executeScript to launch MetaMask on iOS + console.log('Re-launching MetaMask on iOS...'); await driver.executeScript('mobile:launchApp', [ { bundleId, @@ -219,5 +205,7 @@ export const launchMetaMaskWithFixture = async ( }, ]); + // {"bundleId": "io.metamask.MetaMask-QA", "arguments": ["fixtureServerPort", "12345"], "environment": {"fixtureServerPort": "12345"}} + console.log('MetaMask was loaded with fixtures!'); }; From f1d47f1a68b29b0498563917c7eaf22619236533 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Thu, 13 Mar 2025 15:50:05 +0000 Subject: [PATCH 10/20] chore: updates koa to solve vulnerability --- e2e/package.json | 9 +++------ e2e/yarn.lock | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index 96d5f1d46..fbb9293b8 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -21,13 +21,10 @@ "wdio-wait-for": "^3.0.9" }, "scripts": { - "test:android:jssdk:e2e:browserstack": "wdio run test/configs/browserstack/wdio.android.app.browserstack.conf.ts --suite web_dapp", - "test:ios:jssdk:e2e:browserstack": "wdio run test/configs/browserstack/wdio.ios.app.browserstack.conf.ts --suite web_dapp", - "test:ios:jssdk:e2e:local": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite web_dapp", - "test:android:jssdk:e2e:local": "wdio run test/configs/local/wdio.android.app.local.conf.ts --suite web_dapp", - "test:ios:jssdk:e2e:local:fixture": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite fixture_reference", "test:ios:metamask-connector:e2e:local": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite metamask_connector", + "test:ios:metamask-connector:e2e:browserstack": "wdio run test/configs/browserstack/wdio.ios.app.browserstack.conf.ts --suite metamask_connector", "test:android:metamask-connector:e2e:local": "wdio run test/configs/local/wdio.android.app.local.conf.ts --suite metamask_connector", + "test:android:metamask-connector:e2e:browserstack": "wdio run test/configs/browserstack/wdio.android.app.browserstack.conf.ts --suite metamask_connector", "setup": "yarn install", "build": "tsc --build", "clean": "yarn clean:reports && rm -rf node_modules", @@ -52,7 +49,7 @@ "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsdoc": "^46.4.3", "eslint-plugin-prettier": "^4.2.1", - "koa": "^2.14.2", + "koa": "^2.16.0", "prettier": "^2.8.8", "webdriverio": "^9.2.1" } diff --git a/e2e/yarn.lock b/e2e/yarn.lock index af6aab23d..6fa22678c 100644 --- a/e2e/yarn.lock +++ b/e2e/yarn.lock @@ -4089,13 +4089,13 @@ __metadata: languageName: node linkType: hard -"cookies@npm:~0.8.0": - version: 0.8.0 - resolution: "cookies@npm:0.8.0" +"cookies@npm:~0.9.0": + version: 0.9.1 + resolution: "cookies@npm:0.9.1" dependencies: depd: ~2.0.0 keygrip: ~1.1.0 - checksum: 806055a44f128705265b1bc6a853058da18bf80dea3654ad99be20985b1fa1b14f86c1eef73644aab8071241f8a78acd57202b54c4c5c70769fc694fbb9c4edc + checksum: 213e4d14847b582fbd8a003203d3621a4b9fa792a315c37954e89332d38fac5bcc34ba92ef316ad6d5fe28f0187aaa115927fbbe2080744ad1707a93b4313247 languageName: node linkType: hard @@ -7132,15 +7132,15 @@ __metadata: languageName: node linkType: hard -"koa@npm:^2.14.2": - version: 2.14.2 - resolution: "koa@npm:2.14.2" +"koa@npm:^2.16.0": + version: 2.16.0 + resolution: "koa@npm:2.16.0" dependencies: accepts: ^1.3.5 cache-content-type: ^1.0.0 content-disposition: ~0.5.2 content-type: ^1.0.4 - cookies: ~0.8.0 + cookies: ~0.9.0 debug: ^4.3.2 delegates: ^1.0.0 depd: ^2.0.0 @@ -7159,7 +7159,7 @@ __metadata: statuses: ^1.5.0 type-is: ^1.6.16 vary: ^1.1.2 - checksum: 17fe3b8f5e0b4759004a942cc6ba2a9507299943a697dff9766b85f41f45caed4077ca2645ac9ad254d3359fffedfc4c9ebdd7a70493e5df8cdfac159a8ee835 + checksum: 01be3231d41115a6fd0a4706a8d9e15ffc05404151dd813d07ddf05d36f17db54c3d0afa1811e8b72d13e205753a0b62ef0aa43337b6d531ef1b522bcf856c8e languageName: node linkType: hard @@ -7522,7 +7522,7 @@ __metadata: eslint-plugin-import: ^2.27.5 eslint-plugin-jsdoc: ^46.4.3 eslint-plugin-prettier: ^4.2.1 - koa: ^2.14.2 + koa: ^2.16.0 module-alias: ^2.2.3 prettier: ^2.8.8 ts-node: ^10.9.2 From 38850ac4e632946fa7879c26bd736331aca9a8f9 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Fri, 14 Mar 2025 11:26:58 +0000 Subject: [PATCH 11/20] chore: updates configs and adds a logger --- e2e/package.json | 3 +- .../screens/Android/ChromeBrowserScreen.ts | 34 +---- .../screens/Dapps/PlaygroundNextDappScreen.ts | 4 +- .../PersonalSignConfirmationComponent.ts | 19 ++- e2e/src/util/Gestures.ts | 41 +++++- e2e/src/util/Utils.ts | 32 ++--- .../wdio.android.app.browserstack.conf.ts | 1 - .../specs/metamask-connector/web_dapp.spec.ts | 5 +- e2e/yarn.lock | 128 +++++++++++++++++- 9 files changed, 194 insertions(+), 73 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index fbb9293b8..ec91d8877 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -51,6 +51,7 @@ "eslint-plugin-prettier": "^4.2.1", "koa": "^2.16.0", "prettier": "^2.8.8", - "webdriverio": "^9.2.1" + "webdriverio": "^9.2.1", + "winston": "^3.17.0" } } diff --git a/e2e/src/screens/Android/ChromeBrowserScreen.ts b/e2e/src/screens/Android/ChromeBrowserScreen.ts index 0313349cc..8aa1b97f4 100644 --- a/e2e/src/screens/Android/ChromeBrowserScreen.ts +++ b/e2e/src/screens/Android/ChromeBrowserScreen.ts @@ -94,6 +94,8 @@ class ChromeBrowserScreen implements MobileBrowser { await driver.activateApp(Browsers.CHROME); } + await driver.setOrientation('PORTRAIT'); + await this.urlAddressBar.waitForDisplayed({ timeout: 10000, }); @@ -106,39 +108,7 @@ class ChromeBrowserScreen implements MobileBrowser { await driver.pressKeyCode(66); } - await this.refreshButton.waitForDisplayed({ - timeout: 10000, - }); await pageObject.terminate(); - - // await this.refreshPage(); - - // Wait for the page to start loading - // await driver.pause(3000); - - // const isWebDappLoaded = async () => { - // let retries = 20; - // // TODO: refactor this to use the page object - // let isConnectButtonDisplayed = await ( - // (await pageObject.connectButton) as ChainablePromiseElement - // ).isDisplayed(); - - // while (!isConnectButtonDisplayed && retries > 0) { - // // Waits for 2 seconds before checking again - // await driver.pause(2000); - // isConnectButtonDisplayed = await ( - // (await pageObject.connectButton) as ChainablePromiseElement - // ).isDisplayed(); - // retries -= 1; - // } - // }; - - // let attempts = 0; - - // while (!isWebDappLoaded() && attempts < WEB_DAPP_LOAD_ATTEMPTS) { - // await this.refreshPage(); - // attempts += 1; - // } } async tapSwitchTabsButton(): Promise { diff --git a/e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts b/e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts index ebc3f5ed2..c00fc53c4 100644 --- a/e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts +++ b/e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts @@ -10,7 +10,7 @@ class PlaygroundNextDappScreen implements Dapp { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Connect"]', + '//android.widget.Button[@text="Connect MetaMask"]', ), iosSelector: IOSSelector.by().predicateString( 'name == "Connect MetaMask"', @@ -40,7 +40,7 @@ class PlaygroundNextDappScreen implements Dapp { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Terminate"]', + '//android.widget.Button[@text="Terminate Connection"]', ), iosSelector: IOSSelector.by().predicateString( 'name == "Terminate Connection"', diff --git a/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts b/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts index f5943af4e..41c1bfbb2 100644 --- a/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts +++ b/e2e/src/screens/MetaMask/components/PersonalSignConfirmationComponent.ts @@ -9,9 +9,11 @@ class PersonalSignConfirmationComponent { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@content-desc="request-signature-confirm-button"]', + '//android.widget.Button[@content-desc="Confirm"]', + ), + iosSelector: IOSSelector.by().predicateString( + 'name == "confirm-button"', ), - iosSelector: IOSSelector.by().predicateString('name == "Confirm"'), }), ); } @@ -20,18 +22,21 @@ class PersonalSignConfirmationComponent { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@content-desc="request-signature-cancel-button"]', + '//android.widget.Button[@content-desc="Reject"]', + ), + iosSelector: IOSSelector.by().predicateString( + 'name == "cancel-button"', ), - iosSelector: IOSSelector.by().predicateString('name == "Reject"'), }), ); } + // TODO: adapt this to get any type of message based on the dapp get messageText(): ChainablePromiseElement { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Personal Sign"]', + '//android.widget.TextView[@text="Hello, world!"]', ), iosSelector: IOSSelector.by().xpath( '//*[starts-with(@label, "Message ")]', @@ -44,10 +49,10 @@ class PersonalSignConfirmationComponent { return $( getSelectorForPlatform({ androidSelector: AndroidSelector.by().xpath( - '//android.view.ViewGroup[@resource-id="personal-signature-request"]', + '//android.view.ViewGroup[@resource-id="personal_sign"]', ), iosSelector: IOSSelector.by().predicateString( - 'name == "Signature request"', + 'name == "personal_sign"', ), }), ); diff --git a/e2e/src/util/Gestures.ts b/e2e/src/util/Gestures.ts index a70924ffe..f7af6b18a 100644 --- a/e2e/src/util/Gestures.ts +++ b/e2e/src/util/Gestures.ts @@ -1,9 +1,22 @@ +import winston from 'winston'; import { getCoordinatesAsPercentage, getCoordinatesForDeviceFromPercentage, } from './Utils'; import { ScreenPercentage } from './types'; +// Create a Winston logger +const log = winston.createLogger({ + level: 'debug', + format: winston.format.combine( + winston.format.timestamp(), + winston.format.printf(({ timestamp, level, message }) => { + return `${timestamp} [Gestures] ${level}: ${message}`; + }), + ), + transports: [new winston.transports.Console()], +}); + const Actions = { LONG_PRESS: 'longPress', MOVE_TO: 'moveTo', @@ -112,16 +125,32 @@ export default class Gestures { static async tapOnCoordinatesByPercentage( location: ScreenPercentage, ): Promise { + log.debug(`Tapping on coordinates: ${location.x}, ${location.y}`); const tapLocation = await getCoordinatesForDeviceFromPercentage({ x: location.x, y: location.y, }); - await driver - .action('pointer', { parameters: { pointerType: 'touch' } }) - .move({ x: tapLocation.x, y: tapLocation.y }) - .down() - .up() - .perform(); + // TODO: use this for BrowserStack + await driver.touchAction([ + { + action: 'tap', + x: tapLocation.x, + y: tapLocation.y, + }, + ]); + + // try { + // await driver + // .action('pointer', { parameters: { pointerType: 'touch' } }) + // .move({ x: tapLocation.x, y: tapLocation.y }) + // .down() + // .pause(100) + // .up() + // .perform(); + // } catch (error) { + // log.error(`Error tapping on coordinates: ${location.x}, ${location.y}`); + // log.error(error); + // } } } diff --git a/e2e/src/util/Utils.ts b/e2e/src/util/Utils.ts index 2fe7633ba..674822418 100644 --- a/e2e/src/util/Utils.ts +++ b/e2e/src/util/Utils.ts @@ -23,7 +23,6 @@ import { LOCALHOST, WALLET_PASSWORD, Browsers, - BrowsersActivity, } from './Constants'; import Gestures from './Gestures'; @@ -71,6 +70,14 @@ export const navigateToWebMobileDapp = async ( await browserScreen.goToAddress(dappUrl, dappScreen); }; +export const refreshBrowser = async () => { + const browserScreen = driver.isIOS + ? SafariBrowserScreen + : ChromeBrowserScreen; + + await browserScreen.refreshPage(); +}; + export const scrollToElement = async (element: ChainablePromiseElement) => { let isElementDisplayed = await element.isDisplayed(); @@ -96,25 +103,12 @@ export const launchMetaMask = async () => { }; export const goBack = async () => { - if (driver.isIOS) { - // Letting the loader appear - await driver.pause(2500); - await Gestures.tapOnCoordinatesByPercentage({ x: 50, y: 80 }); - await driver.pause(500); - await launchApp(Browsers.SAFARI); - return; - } - - // Android wait to go back since it takes a while for it to happen in the - // current version of the app - let currentActivity = await driver.getCurrentActivity(); - while (currentActivity !== BrowsersActivity.CHROME) { - await driver.pause(2000); - currentActivity = await driver.getCurrentActivity(); - } + const browserToOpen = driver.isIOS ? Browsers.SAFARI : Browsers.CHROME; - // Waiting for the dapp to fetch updates before trying to assert them - await driver.pause(3000); + await driver.pause(2500); + await Gestures.tapOnCoordinatesByPercentage({ x: 50, y: 80 }); + await driver.pause(500); + await launchApp(browserToOpen); }; /* diff --git a/e2e/test/configs/browserstack/wdio.android.app.browserstack.conf.ts b/e2e/test/configs/browserstack/wdio.android.app.browserstack.conf.ts index 48f2c3c09..9c808e1a6 100644 --- a/e2e/test/configs/browserstack/wdio.android.app.browserstack.conf.ts +++ b/e2e/test/configs/browserstack/wdio.android.app.browserstack.conf.ts @@ -1,7 +1,6 @@ /* eslint-disable node/no-process-env */ import path from 'path'; import dotenv from 'dotenv'; -import { getOtherAppsPath } from '../../../src/util/helpers'; import config from './wdio.shared.browserstack.conf'; dotenv.config({ path: path.join(process.cwd(), '.android.env') }); diff --git a/e2e/test/specs/metamask-connector/web_dapp.spec.ts b/e2e/test/specs/metamask-connector/web_dapp.spec.ts index 4aec2bbdc..fcb41ef18 100644 --- a/e2e/test/specs/metamask-connector/web_dapp.spec.ts +++ b/e2e/test/specs/metamask-connector/web_dapp.spec.ts @@ -5,6 +5,7 @@ import { killApp, launchMetaMaskWithFixture, navigateToWebMobileDapp, + refreshBrowser, } from '@util/Utils'; import ConnectModalComponent from '@screens/MetaMask/components/ConnectModalComponent'; import PersonalSignConfirmationComponent from '@screens/MetaMask/components/PersonalSignConfirmationComponent'; @@ -34,8 +35,8 @@ describe('MetaMask Connector Playground dapp', () => { ); // Start with a cold start await killApp(METAMASK_BUNDLE_ID); + await refreshBrowser(); - await PlaygroundNextDappScreen.terminate(); await PlaygroundNextDappScreen.connect(); await deviceOpenDeeplinkWithMetaMask(); @@ -69,5 +70,7 @@ describe('MetaMask Connector Playground dapp', () => { await PersonalSignConfirmationComponent.tapSignButton(); await goBack(); + + // TODO: Assert personalSign contents }); }); diff --git a/e2e/yarn.lock b/e2e/yarn.lock index 6fa22678c..0c7a27fdd 100644 --- a/e2e/yarn.lock +++ b/e2e/yarn.lock @@ -1280,7 +1280,7 @@ __metadata: languageName: node linkType: hard -"@colors/colors@npm:1.6.0": +"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": version: 1.6.0 resolution: "@colors/colors@npm:1.6.0" checksum: aa209963e0c3218e80a4a20553ba8c0fbb6fa13140540b4e5f97923790be06801fc90172c1114fc8b7e888b3d012b67298cde6b9e81521361becfaee400c662f @@ -1296,6 +1296,17 @@ __metadata: languageName: node linkType: hard +"@dabh/diagnostics@npm:^2.0.2": + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" + dependencies: + colorspace: 1.1.x + enabled: 2.0.x + kuler: ^2.0.0 + checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 + languageName: node + linkType: hard + "@devicefarmer/adbkit-apkreader@npm:^3.2.4": version: 3.2.4 resolution: "@devicefarmer/adbkit-apkreader@npm:3.2.4" @@ -3950,7 +3961,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0": +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -3982,7 +3993,7 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.9.0": +"color-string@npm:^1.6.0, color-string@npm:^1.9.0": version: 1.9.1 resolution: "color-string@npm:1.9.1" dependencies: @@ -4001,6 +4012,16 @@ __metadata: languageName: node linkType: hard +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: ^1.9.3 + color-string: ^1.6.0 + checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 + languageName: node + linkType: hard + "color@npm:^4.2.3": version: 4.2.3 resolution: "color@npm:4.2.3" @@ -4011,6 +4032,16 @@ __metadata: languageName: node linkType: hard +"colorspace@npm:1.1.x": + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" + dependencies: + color: ^3.1.3 + text-hex: 1.0.x + checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 + languageName: node + linkType: hard + "combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -4670,6 +4701,13 @@ __metadata: languageName: node linkType: hard +"enabled@npm:2.0.x": + version: 2.0.0 + resolution: "enabled@npm:2.0.0" + checksum: 9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 + languageName: node + linkType: hard + "encodeurl@npm:^1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -5448,6 +5486,13 @@ __metadata: languageName: node linkType: hard +"fn.name@npm:1.x.x": + version: 1.1.0 + resolution: "fn.name@npm:1.1.0" + checksum: e357144f48cfc9a7f52a82bbc6c23df7c8de639fce049cac41d41d62cabb740cdb9f14eddc6485e29c933104455bdd7a69bb14a9012cef9cd4fa252a4d0cf293 + languageName: node + linkType: hard + "follow-redirects@npm:^1.15.0": version: 1.15.3 resolution: "follow-redirects@npm:1.15.3" @@ -7163,6 +7208,13 @@ __metadata: languageName: node linkType: hard +"kuler@npm:^2.0.0": + version: 2.0.0 + resolution: "kuler@npm:2.0.0" + checksum: 9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 + languageName: node + linkType: hard + "ky@npm:^0.33.0": version: 0.33.3 resolution: "ky@npm:0.33.3" @@ -7365,6 +7417,20 @@ __metadata: languageName: node linkType: hard +"logform@npm:^2.7.0": + version: 2.7.0 + resolution: "logform@npm:2.7.0" + dependencies: + "@colors/colors": 1.6.0 + "@types/triple-beam": ^1.3.2 + fecha: ^4.2.0 + ms: ^2.1.1 + safe-stable-stringify: ^2.3.1 + triple-beam: ^1.3.0 + checksum: a202d10897254735ead75a640f889998f9b91a0c36be9cac3f5471fa740d36bc2fbbcf9d113dcdadec4ddf09e257393ff800e6aab80019bdc7456363d6ea21f6 + languageName: node + linkType: hard + "loglevel-plugin-prefix@npm:^0.8.4": version: 0.8.4 resolution: "loglevel-plugin-prefix@npm:0.8.4" @@ -7529,6 +7595,7 @@ __metadata: typescript: ^4.9.5 wdio-wait-for: ^3.0.9 webdriverio: ^9.2.1 + winston: ^3.17.0 languageName: unknown linkType: soft @@ -8171,6 +8238,15 @@ __metadata: languageName: node linkType: hard +"one-time@npm:^1.0.0": + version: 1.0.0 + resolution: "one-time@npm:1.0.0" + dependencies: + fn.name: 1.x.x + checksum: fd008d7e992bdec1c67f53a2f9b46381ee12a9b8c309f88b21f0223546003fb47e8ad7c1fd5843751920a8d276c63bd4b45670ef80c61fb3e07dbccc962b5c7d + languageName: node + linkType: hard + "onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -8911,7 +8987,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -9660,6 +9736,13 @@ __metadata: languageName: node linkType: hard +"stack-trace@npm:0.0.x": + version: 0.0.10 + resolution: "stack-trace@npm:0.0.10" + checksum: 473036ad32f8c00e889613153d6454f9be0536d430eb2358ca51cad6b95cea08a3cc33cc0e34de66b0dad221582b08ed2e61ef8e13f4087ab690f388362d6610 + languageName: node + linkType: hard + "stack-utils@npm:^2.0.3": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" @@ -10042,6 +10125,13 @@ __metadata: languageName: node linkType: hard +"text-hex@npm:1.0.x": + version: 1.0.0 + resolution: "text-hex@npm:1.0.0" + checksum: 1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a + languageName: node + linkType: hard + "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -10893,6 +10983,36 @@ __metadata: languageName: node linkType: hard +"winston-transport@npm:^4.9.0": + version: 4.9.0 + resolution: "winston-transport@npm:4.9.0" + dependencies: + logform: ^2.7.0 + readable-stream: ^3.6.2 + triple-beam: ^1.3.0 + checksum: f5fd06a27def7597229925ba2b8b9ffa61b5b8748f994c8325064744e4e36dfea19868a16c16b3806f9b98bb7da67c25f08ae6fba3bdc6db4a9555673474a972 + languageName: node + linkType: hard + +"winston@npm:^3.17.0": + version: 3.17.0 + resolution: "winston@npm:3.17.0" + dependencies: + "@colors/colors": ^1.6.0 + "@dabh/diagnostics": ^2.0.2 + async: ^3.2.3 + is-stream: ^2.0.0 + logform: ^2.7.0 + one-time: ^1.0.0 + readable-stream: ^3.4.0 + safe-stable-stringify: ^2.3.1 + stack-trace: 0.0.x + triple-beam: ^1.3.0 + winston-transport: ^4.9.0 + checksum: ba772c25937007cea6cdeddc931de18a1ea336ae7b3aff2c15de762de5c559b2d310ca2e7a911c209711d325e47d653485e33271ddfb27cd73179e35c7d52267 + languageName: node + linkType: hard + "workerpool@npm:6.2.1": version: 6.2.1 resolution: "workerpool@npm:6.2.1" From 6d5d9b92510a56ecfc19c8fcc0d7b96da8ac289c Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Thu, 24 Apr 2025 13:01:48 +0100 Subject: [PATCH 12/20] chore: removes non needed references in the code --- e2e/src/fixtures/FixtureHelper.ts | 9 ++++----- e2e/src/util/Gestures.ts | 14 -------------- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/e2e/src/fixtures/FixtureHelper.ts b/e2e/src/fixtures/FixtureHelper.ts index 1302c7e26..4aab06663 100644 --- a/e2e/src/fixtures/FixtureHelper.ts +++ b/e2e/src/fixtures/FixtureHelper.ts @@ -1,4 +1,3 @@ -import axios from 'axios'; import FixtureServer from '@fixtures/FixtureServer'; import { FixtureBuilder } from '@fixtures/FixtureBuilder'; import { FIXTURE_SERVER_URL } from '@util/Constants'; @@ -6,8 +5,8 @@ import { FIXTURE_SERVER_URL } from '@util/Constants'; // checks if server has already been started const isFixtureServerStarted = async () => { try { - const response = await axios.get(FIXTURE_SERVER_URL); - return response.status === 200; + const response = await fetch(FIXTURE_SERVER_URL); + return response.ok; } catch (error) { return false; } @@ -22,10 +21,10 @@ export const loadFixture = async ( const state = fixture || new FixtureBuilder().build(); fixtureServer.loadJsonState(state); // Checks if state is loaded - const response = await axios.get(FIXTURE_SERVER_URL); + const response = await fetch(FIXTURE_SERVER_URL); // Throws if state is not properly loaded - if (response.status !== 200) { + if (!response.ok) { throw new Error('Not able to load fixtures'); } }; diff --git a/e2e/src/util/Gestures.ts b/e2e/src/util/Gestures.ts index f7af6b18a..82f21b831 100644 --- a/e2e/src/util/Gestures.ts +++ b/e2e/src/util/Gestures.ts @@ -1,22 +1,9 @@ -import winston from 'winston'; import { getCoordinatesAsPercentage, getCoordinatesForDeviceFromPercentage, } from './Utils'; import { ScreenPercentage } from './types'; -// Create a Winston logger -const log = winston.createLogger({ - level: 'debug', - format: winston.format.combine( - winston.format.timestamp(), - winston.format.printf(({ timestamp, level, message }) => { - return `${timestamp} [Gestures] ${level}: ${message}`; - }), - ), - transports: [new winston.transports.Console()], -}); - const Actions = { LONG_PRESS: 'longPress', MOVE_TO: 'moveTo', @@ -125,7 +112,6 @@ export default class Gestures { static async tapOnCoordinatesByPercentage( location: ScreenPercentage, ): Promise { - log.debug(`Tapping on coordinates: ${location.x}, ${location.y}`); const tapLocation = await getCoordinatesForDeviceFromPercentage({ x: location.x, y: location.y, From aa3d1978ccef7098beda6d1c859be5e44cc258da Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Thu, 24 Apr 2025 13:02:08 +0100 Subject: [PATCH 13/20] chore: fixes dependency list --- e2e/package.json | 66 +- e2e/yarn.lock | 2588 ++++++++++++++++++++++++++-------------------- 2 files changed, 1494 insertions(+), 1160 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index ec91d8877..8ce40fe6a 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -2,56 +2,52 @@ "name": "metamask-sdk-e2e", "private": true, "type": "commonjs", + "scripts": { + "test:ios:metamask-connector:e2e:local": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite metamask_connector", + "test:ios:metamask-connector:e2e:browserstack": "wdio run test/configs/browserstack/wdio.ios.app.browserstack.conf.ts --suite metamask_connector", + "test:android:metamask-connector:e2e:local": "wdio run test/configs/local/wdio.android.app.local.conf.ts --suite metamask_connector", + "test:android:metamask-connector:e2e:browserstack": "wdio run test/configs/browserstack/wdio.android.app.browserstack.conf.ts --suite metamask_connector", + "setup": "yarn install", + "build": "tsc --build", + "clean": "yarn clean:reports && rm -rf node_modules", + "clean:reports": "rm -rf allure-results", + "clean:build": "tsc --build --clean", + "allow-scripts": "" + }, "devDependencies": { "@babel/preset-env": "^7.26.0", "@babel/preset-typescript": "^7.26.0", + "@metamask/eslint-config": "11.1.0", + "@metamask/eslint-config-nodejs": "11.1.0", + "@metamask/eslint-config-typescript": "11.1.0", "@types/koa": "^2.13.12", + "@types/lodash.merge": "4.6.9", "@types/module-alias": "^2.0.4", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "@wdio/allure-reporter": "^8.11.0", "@wdio/appium-service": "^9.2.1", "@wdio/browserstack-service": "^9.1.2", "@wdio/cli": "latest", + "@wdio/globals": "8.24.6", "@wdio/local-runner": "latest", "@wdio/mocha-framework": "latest", "@wdio/spec-reporter": "latest", + "allure-commandline": "2.23.0", + "appium-adb": "11.0.8", "babel-plugin-module-resolver": "^5.0.2", + "dotenv": "16.0.3", + "eslint": "8.44.0", + "eslint-config-prettier": "8.8.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-jsdoc": "46.4.3", + "eslint-plugin-prettier": "4.2.1", + "koa": "2.14.2", "module-alias": "^2.2.3", + "prettier": "2.8.8", "ts-node": "^10.9.2", "typescript": "^4.9.5", - "wdio-wait-for": "^3.0.9" - }, - "scripts": { - "test:ios:metamask-connector:e2e:local": "wdio run test/configs/local/wdio.ios.app.local.conf.ts --suite metamask_connector", - "test:ios:metamask-connector:e2e:browserstack": "wdio run test/configs/browserstack/wdio.ios.app.browserstack.conf.ts --suite metamask_connector", - "test:android:metamask-connector:e2e:local": "wdio run test/configs/local/wdio.android.app.local.conf.ts --suite metamask_connector", - "test:android:metamask-connector:e2e:browserstack": "wdio run test/configs/browserstack/wdio.android.app.browserstack.conf.ts --suite metamask_connector", - "setup": "yarn install", - "build": "tsc --build", - "clean": "yarn clean:reports && rm -rf node_modules", - "clean:reports": "rm -rf allure-results", - "clean:build": "tsc --build --clean", - "allow-scripts": "" - }, - "dependencies": { - "@metamask/eslint-config": "^11.1.0", - "@metamask/eslint-config-nodejs": "^11.1.0", - "@metamask/eslint-config-typescript": "^11.1.0", - "@types/lodash.merge": "^4.6.9", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", - "@wdio/globals": "^8.24.6", - "allure-commandline": "^2.23.0", - "appium-adb": "^11.0.8", - "axios": "^1.6.2", - "dotenv": "^16.0.3", - "eslint": "^8.44.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jsdoc": "^46.4.3", - "eslint-plugin-prettier": "^4.2.1", - "koa": "^2.16.0", - "prettier": "^2.8.8", - "webdriverio": "^9.2.1", - "winston": "^3.17.0" + "wdio-wait-for": "^3.0.9", + "webdriverio": "9.2.1" } } diff --git a/e2e/yarn.lock b/e2e/yarn.lock index 1771c6b85..e17569de4 100644 --- a/e2e/yarn.lock +++ b/e2e/yarn.lock @@ -5,30 +5,36 @@ __metadata: version: 6 cacheKey: 8 -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd +"@appium/logger@npm:^1.3.0": + version: 1.6.1 + resolution: "@appium/logger@npm:1.6.1" + dependencies: + console-control-strings: 1.1.0 + lodash: 4.17.21 + lru-cache: 10.4.3 + set-blocking: 2.0.0 + checksum: 8f069d9a22d7943f9042ea384e0c6db349acf849fe3f3266ad1155d7405c243221e6d05f49d3bf9054cf7984ff91aacba4700e1cfb78c894516fd1c4bbae46b4 languageName: node linkType: hard -"@appium/schema@npm:^0.4.2": - version: 0.4.2 - resolution: "@appium/schema@npm:0.4.2" +"@appium/schema@npm:^0.5.0": + version: 0.5.0 + resolution: "@appium/schema@npm:0.5.0" dependencies: "@types/json-schema": 7.0.15 json-schema: 0.4.0 source-map-support: 0.5.21 - checksum: accdfd5b8a176d330489fbf5c41888aba47ca55760a5ef0e0e3d1ca0835099543e29be4fa5ac1b92a62aee408ad784e3984c75652012408d23c857f14e81a552 + checksum: c343b56168556ff8a8ef1648aef4978d8030c9c6b05154b0ccd840bb1e77d8377470df980e53f100deff26825aafcd13d8bd1b873c5520c3cdddb66e8902bb97 languageName: node linkType: hard "@appium/support@npm:^4.0.0": - version: 4.1.10 - resolution: "@appium/support@npm:4.1.10" + version: 4.5.0 + resolution: "@appium/support@npm:4.5.0" dependencies: - "@appium/tsconfig": ^0.x - "@appium/types": ^0.14.3 + "@appium/logger": ^1.3.0 + "@appium/tsconfig": ^0.3.3 + "@appium/types": ^0.19.2 "@colors/colors": 1.6.0 "@types/archiver": 6.0.2 "@types/base64-stream": 1.0.5 @@ -38,32 +44,30 @@ __metadata: "@types/lockfile": 1.0.4 "@types/mv": 2.1.4 "@types/ncp": 2.0.8 - "@types/npmlog": 4.1.6 "@types/pluralize": 0.0.33 - "@types/semver": 7.5.6 + "@types/semver": 7.5.8 "@types/shell-quote": 1.7.5 "@types/supports-color": 8.1.3 "@types/teen_process": 2.0.4 - "@types/uuid": 9.0.7 - "@types/which": 3.0.1 - archiver: 6.0.1 - axios: 1.6.2 + "@types/uuid": 9.0.8 + "@types/which": 3.0.4 + archiver: 7.0.1 + axios: 1.7.2 base64-stream: 1.0.0 bluebird: 3.7.2 bplist-creator: 0.1.1 bplist-parser: 0.3.2 form-data: 4.0.0 get-stream: 6.0.1 - glob: 10.3.10 + glob: 10.4.1 jsftp: 2.1.3 klaw: 4.1.0 lockfile: 1.0.4 lodash: 4.17.21 log-symbols: 4.1.0 - moment: 2.29.4 + moment: 2.30.1 mv: 2.1.1 ncp: 2.0.0 - npmlog: 7.0.1 opencv-bindings: 4.5.5 pkg-dir: 5.0.0 plist: 3.1.0 @@ -71,53 +75,54 @@ __metadata: read-pkg: 5.2.0 resolve-from: 5.0.0 sanitize-filename: 1.6.3 - semver: 7.5.4 - sharp: 0.32.6 + semver: 7.6.2 + sharp: 0.33.4 shell-quote: 1.8.1 source-map-support: 0.5.21 supports-color: 8.1.1 - teen_process: 2.0.101 - type-fest: 3.13.1 + teen_process: 2.1.4 + type-fest: 4.19.0 uuid: 9.0.1 which: 4.0.0 - yauzl: 2.10.0 + yauzl: 3.1.3 dependenciesMeta: sharp: optional: true - checksum: 8cd8b53c0385b3dcf9653e1341d502f801744d012bd8aaae58220825196ac3b8b5b9efd076f43f390391c2610832ce6cdead286b2ec528c98207581c09fb303b + checksum: c9846b481bae58f9045c0544bcbd7a692f66f30c271c89df719cb2fa7f82527c156b60d8315097b74d48ce26031bd8b18038b1616e59b5094beafad5c19d7744 languageName: node linkType: hard -"@appium/tsconfig@npm:^0.x": - version: 0.3.2 - resolution: "@appium/tsconfig@npm:0.3.2" +"@appium/tsconfig@npm:^0.3.3": + version: 0.3.5 + resolution: "@appium/tsconfig@npm:0.3.5" dependencies: - "@tsconfig/node14": 14.1.0 - checksum: f8261a02e4c8202e88f517ebdb9223d4a118ff4bf5244852487ef5d9608132f123c7488579834f424aa95ada36d07636b357dcbc5160c657e12daff5cd023aea + "@tsconfig/node14": 14.1.3 + checksum: 219258733020a9dc3fcd34e30e3278fd6ee1c173878dfdc125296d79672a056af42c0842f44a730d1b527de99353b8d7f6a5b5f92feff678ed69d997a4acc80e languageName: node linkType: hard -"@appium/types@npm:^0.14.3": - version: 0.14.3 - resolution: "@appium/types@npm:0.14.3" +"@appium/types@npm:^0.19.2": + version: 0.19.2 + resolution: "@appium/types@npm:0.19.2" dependencies: - "@appium/schema": ^0.4.2 - "@appium/tsconfig": ^0.x + "@appium/logger": ^1.3.0 + "@appium/schema": ^0.5.0 + "@appium/tsconfig": ^0.3.3 "@types/express": 4.17.21 - "@types/npmlog": 4.1.6 "@types/ws": 8.5.10 - type-fest: 3.13.1 - checksum: 9b72f5232bb030c9d70fdb36857536c11f9ef566f9a22e34bd06be38dd3bb7de05b0b8af3a7e80e6c9873b0ef99dc2a4584a526a2c6ab084033125b3d140ac38 + type-fest: 4.19.0 + checksum: 2ef72bec5d22dacb5d13bd3a2e8d79e94b4392b56854367b8221fbdb72df3d29065ef8523a108110988a82c3ecea5d70b2f245e75c6b5bfee3bf7191cad07d32 languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.21.4": - version: 7.23.5 - resolution: "@babel/code-frame@npm:7.23.5" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" dependencies: - "@babel/highlight": ^7.23.4 - chalk: ^2.4.2 - checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a + "@babel/helper-validator-identifier": ^7.25.9 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: db13f5c42d54b76c1480916485e6900748bbcb0014a8aca87f50a091f70ff4e0d0a6db63cade75eb41fcc3d2b6ba0a7f89e343def4f96f00269b41b8ab8dd7b8 languageName: node linkType: hard @@ -130,14 +135,13 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": - version: 7.26.2 - resolution: "@babel/code-frame@npm:7.26.2" +"@babel/code-frame@npm:^7.21.4": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" dependencies: - "@babel/helper-validator-identifier": ^7.25.9 - js-tokens: ^4.0.0 - picocolors: ^1.0.0 - checksum: db13f5c42d54b76c1480916485e6900748bbcb0014a8aca87f50a091f70ff4e0d0a6db63cade75eb41fcc3d2b6ba0a7f89e343def4f96f00269b41b8ab8dd7b8 + "@babel/highlight": ^7.23.4 + chalk: ^2.4.2 + checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a languageName: node linkType: hard @@ -1280,7 +1284,7 @@ __metadata: languageName: node linkType: hard -"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": +"@colors/colors@npm:1.6.0": version: 1.6.0 resolution: "@colors/colors@npm:1.6.0" checksum: aa209963e0c3218e80a4a20553ba8c0fbb6fa13140540b4e5f97923790be06801fc90172c1114fc8b7e888b3d012b67298cde6b9e81521361becfaee400c662f @@ -1296,17 +1300,6 @@ __metadata: languageName: node linkType: hard -"@dabh/diagnostics@npm:^2.0.2": - version: 2.0.3 - resolution: "@dabh/diagnostics@npm:2.0.3" - dependencies: - colorspace: 1.1.x - enabled: 2.0.x - kuler: ^2.0.0 - checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 - languageName: node - linkType: hard - "@devicefarmer/adbkit-apkreader@npm:^3.2.4": version: 3.2.4 resolution: "@devicefarmer/adbkit-apkreader@npm:3.2.4" @@ -1318,6 +1311,15 @@ __metadata: languageName: node linkType: hard +"@emnapi/runtime@npm:^1.1.1": + version: 1.4.3 + resolution: "@emnapi/runtime@npm:1.4.3" + dependencies: + tslib: ^2.4.0 + checksum: ff2074809638ed878e476ece370c6eae7e6257bf029a581bb7a290488d8f2a08c420a65988c7f03bfc6bb689218f0cd995d2f935bd182150b357fc2341142f4f + languageName: node + linkType: hard + "@es-joy/jsdoccomment@npm:~0.39.4": version: 0.39.4 resolution: "@es-joy/jsdoccomment@npm:0.39.4" @@ -1348,8 +1350,8 @@ __metadata: linkType: hard "@eslint/eslintrc@npm:^2.1.0": - version: 2.1.0 - resolution: "@eslint/eslintrc@npm:2.1.0" + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" dependencies: ajv: ^6.12.4 debug: ^4.3.2 @@ -1360,7 +1362,7 @@ __metadata: js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: d5ed0adbe23f6571d8c9bb0ca6edf7618dc6aed4046aa56df7139f65ae7b578874e0d9c796df784c25bda648ceb754b6320277d828c8b004876d7443b8dc018c + checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 languageName: node linkType: hard @@ -1372,13 +1374,13 @@ __metadata: linkType: hard "@humanwhocodes/config-array@npm:^0.11.10": - version: 0.11.10 - resolution: "@humanwhocodes/config-array@npm:0.11.10" + version: 0.11.14 + resolution: "@humanwhocodes/config-array@npm:0.11.14" dependencies: - "@humanwhocodes/object-schema": ^1.2.1 - debug: ^4.1.1 + "@humanwhocodes/object-schema": ^2.0.2 + debug: ^4.3.1 minimatch: ^3.0.5 - checksum: 1b1302e2403d0e35bc43e66d67a2b36b0ad1119efc704b5faff68c41f791a052355b010fb2d27ef022670f550de24cd6d08d5ecf0821c16326b7dcd0ee5d5d8a + checksum: 861ccce9eaea5de19546653bccf75bf09fe878bc39c3aab00aeee2d2a0e654516adad38dd1098aab5e3af0145bbcbf3f309bdf4d964f8dab9dcd5834ae4c02f2 languageName: node linkType: hard @@ -1389,10 +1391,185 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^1.2.1": - version: 1.2.1 - resolution: "@humanwhocodes/object-schema@npm:1.2.1" - checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 +"@humanwhocodes/object-schema@npm:^2.0.2": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 + languageName: node + linkType: hard + +"@img/sharp-darwin-arm64@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-darwin-arm64@npm:0.33.4" + dependencies: + "@img/sharp-libvips-darwin-arm64": 1.0.2 + dependenciesMeta: + "@img/sharp-libvips-darwin-arm64": + optional: true + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@img/sharp-darwin-x64@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-darwin-x64@npm:0.33.4" + dependencies: + "@img/sharp-libvips-darwin-x64": 1.0.2 + dependenciesMeta: + "@img/sharp-libvips-darwin-x64": + optional: true + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@img/sharp-libvips-darwin-arm64@npm:1.0.2": + version: 1.0.2 + resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@img/sharp-libvips-darwin-x64@npm:1.0.2": + version: 1.0.2 + resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-arm64@npm:1.0.2": + version: 1.0.2 + resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-arm@npm:1.0.2": + version: 1.0.2 + resolution: "@img/sharp-libvips-linux-arm@npm:1.0.2" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-s390x@npm:1.0.2": + version: 1.0.2 + resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.2" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-x64@npm:1.0.2": + version: 1.0.2 + resolution: "@img/sharp-libvips-linux-x64@npm:1.0.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2": + version: 1.0.2 + resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@img/sharp-libvips-linuxmusl-x64@npm:1.0.2": + version: 1.0.2 + resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@img/sharp-linux-arm64@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-linux-arm64@npm:0.33.4" + dependencies: + "@img/sharp-libvips-linux-arm64": 1.0.2 + dependenciesMeta: + "@img/sharp-libvips-linux-arm64": + optional: true + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linux-arm@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-linux-arm@npm:0.33.4" + dependencies: + "@img/sharp-libvips-linux-arm": 1.0.2 + dependenciesMeta: + "@img/sharp-libvips-linux-arm": + optional: true + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linux-s390x@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-linux-s390x@npm:0.33.4" + dependencies: + "@img/sharp-libvips-linux-s390x": 1.0.2 + dependenciesMeta: + "@img/sharp-libvips-linux-s390x": + optional: true + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linux-x64@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-linux-x64@npm:0.33.4" + dependencies: + "@img/sharp-libvips-linux-x64": 1.0.2 + dependenciesMeta: + "@img/sharp-libvips-linux-x64": + optional: true + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linuxmusl-arm64@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.4" + dependencies: + "@img/sharp-libvips-linuxmusl-arm64": 1.0.2 + dependenciesMeta: + "@img/sharp-libvips-linuxmusl-arm64": + optional: true + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@img/sharp-linuxmusl-x64@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-linuxmusl-x64@npm:0.33.4" + dependencies: + "@img/sharp-libvips-linuxmusl-x64": 1.0.2 + dependenciesMeta: + "@img/sharp-libvips-linuxmusl-x64": + optional: true + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@img/sharp-wasm32@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-wasm32@npm:0.33.4" + dependencies: + "@emnapi/runtime": ^1.1.1 + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@img/sharp-win32-ia32@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-win32-ia32@npm:0.33.4" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@img/sharp-win32-x64@npm:0.33.4": + version: 0.33.4 + resolution: "@img/sharp-win32-x64@npm:0.33.4" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1517,7 +1694,7 @@ __metadata: languageName: node linkType: hard -"@metamask/eslint-config-nodejs@npm:^11.1.0": +"@metamask/eslint-config-nodejs@npm:11.1.0": version: 11.1.0 resolution: "@metamask/eslint-config-nodejs@npm:11.1.0" peerDependencies: @@ -1528,7 +1705,7 @@ __metadata: languageName: node linkType: hard -"@metamask/eslint-config-typescript@npm:^11.1.0": +"@metamask/eslint-config-typescript@npm:11.1.0": version: 11.1.0 resolution: "@metamask/eslint-config-typescript@npm:11.1.0" peerDependencies: @@ -1541,7 +1718,7 @@ __metadata: languageName: node linkType: hard -"@metamask/eslint-config@npm:^11.1.0": +"@metamask/eslint-config@npm:11.1.0": version: 11.1.0 resolution: "@metamask/eslint-config@npm:11.1.0" peerDependencies: @@ -1749,10 +1926,10 @@ __metadata: languageName: node linkType: hard -"@tsconfig/node14@npm:14.1.0": - version: 14.1.0 - resolution: "@tsconfig/node14@npm:14.1.0" - checksum: 8342dc30edbfaed11d1659b1a9819779bb69df210974a9e8a337b0624b1d9f5026f37e2dcc1d555adb3e4246a0ec35896b3ae5fe3fc69f3382d3bc11069cecc1 +"@tsconfig/node14@npm:14.1.3": + version: 14.1.3 + resolution: "@tsconfig/node14@npm:14.1.3" + checksum: 60a754ca3b708bf7b897cb40babb8b2a4422cb848d2b727ef35d8e2976945c406e0c651d1236912012b9ba06d4b02f8654e538a4e6b0a0a8012748327d98d335 languageName: node linkType: hard @@ -1928,20 +2105,13 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:7.0.15": +"@types/json-schema@npm:7.0.15, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 languageName: node linkType: hard -"@types/json-schema@npm:^7.0.9": - version: 7.0.12 - resolution: "@types/json-schema@npm:7.0.12" - checksum: 00239e97234eeb5ceefb0c1875d98ade6e922bfec39dd365ec6bd360b5c2f825e612ac4f6e5f1d13601b8b30f378f15e6faa805a3a732f4a1bbe61915163d293 - languageName: node - linkType: hard - "@types/json5@npm:^0.0.29": version: 0.0.29 resolution: "@types/json5@npm:0.0.29" @@ -1997,7 +2167,7 @@ __metadata: languageName: node linkType: hard -"@types/lodash.merge@npm:^4.6.9": +"@types/lodash.merge@npm:4.6.9": version: 4.6.9 resolution: "@types/lodash.merge@npm:4.6.9" dependencies: @@ -2007,9 +2177,9 @@ __metadata: linkType: hard "@types/lodash@npm:*": - version: 4.14.202 - resolution: "@types/lodash@npm:4.14.202" - checksum: a91acf3564a568c6f199912f3eb2c76c99c5a0d7e219394294213b3f2d54f672619f0fde4da22b29dc5d4c31457cd799acc2e5cb6bd90f9af04a1578483b6ff7 + version: 4.17.16 + resolution: "@types/lodash@npm:4.17.16" + checksum: 915618c5735b10007e0ed7d06fdce6b344f88fc721d492b189a69064bfd046d2382e1ba61d683eeb61cad60ca0286cd110e6fe0fa4ab2e99066a40478376831d languageName: node linkType: hard @@ -2087,15 +2257,6 @@ __metadata: languageName: node linkType: hard -"@types/npmlog@npm:4.1.6": - version: 4.1.6 - resolution: "@types/npmlog@npm:4.1.6" - dependencies: - "@types/node": "*" - checksum: 0151a01f8c12a8b2713207894f55262d334a6475ea8b741d2443bbb4524757bbdd2e1d27c2c642f4962b380d6b0bdd7293d0c54d434f15e3c9e8adbf619a8111 - languageName: node - linkType: hard - "@types/pluralize@npm:0.0.33": version: 0.0.33 resolution: "@types/pluralize@npm:0.0.33" @@ -2126,17 +2287,17 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:7.5.6": - version: 7.5.6 - resolution: "@types/semver@npm:7.5.6" - checksum: 563a0120ec0efcc326567db2ed920d5d98346f3638b6324ea6b50222b96f02a8add3c51a916b6897b51523aad8ac227d21d3dcf8913559f1bfc6c15b14d23037 +"@types/semver@npm:7.5.8": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 languageName: node linkType: hard "@types/semver@npm:^7.3.12": - version: 7.5.0 - resolution: "@types/semver@npm:7.5.0" - checksum: 0a64b9b9c7424d9a467658b18dd70d1d781c2d6f033096a6e05762d20ebbad23c1b69b0083b0484722aabf35640b78ccc3de26368bcae1129c87e9df028a22e2 + version: 7.7.0 + resolution: "@types/semver@npm:7.7.0" + checksum: d488eaeddb23879a0a8a759bed667e1a76cb0dd4d23e3255538e24c189db387357953ca9e7a3bda2bb7f95e84cac8fe0db4fbe6b3456e893043337732d1d23cc languageName: node linkType: hard @@ -2205,17 +2366,17 @@ __metadata: languageName: node linkType: hard -"@types/uuid@npm:9.0.7": - version: 9.0.7 - resolution: "@types/uuid@npm:9.0.7" - checksum: c7321194aeba9ea173efd1e721403bdf4e7ae6945f8f8cdbc87c791f4b505ccf3dbc4a8883d90b394ef13b7c2dc778045792b05dbb23b3c746f8ea347804d448 +"@types/uuid@npm:9.0.8": + version: 9.0.8 + resolution: "@types/uuid@npm:9.0.8" + checksum: b8c60b7ba8250356b5088302583d1704a4e1a13558d143c549c408bf8920535602ffc12394ede77f8a8083511b023704bc66d1345792714002bfa261b17c5275 languageName: node linkType: hard -"@types/which@npm:3.0.1": - version: 3.0.1 - resolution: "@types/which@npm:3.0.1" - checksum: 77f040178a3332bad08e201195abc96274a3133d90174928b04f52d4edd55a34c1d2022d55998249994f499ef345ad0e5913767b6be8a967bd958e3a81bb1449 +"@types/which@npm:3.0.4": + version: 3.0.4 + resolution: "@types/which@npm:3.0.4" + checksum: 2eed998c2471862d95c150e2a8bc806e395215ea963db6e3e5df389884decccb6d448b6a5a352de5263866179835651fd145110b3b79f5e568a90bc8662acd50 languageName: node linkType: hard @@ -2269,14 +2430,14 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.61.0": - version: 5.62.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" +"@typescript-eslint/eslint-plugin@npm:5.61.0": + version: 5.61.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.61.0" dependencies: "@eslint-community/regexpp": ^4.4.0 - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/type-utils": 5.62.0 - "@typescript-eslint/utils": 5.62.0 + "@typescript-eslint/scope-manager": 5.61.0 + "@typescript-eslint/type-utils": 5.61.0 + "@typescript-eslint/utils": 5.61.0 debug: ^4.3.4 graphemer: ^1.4.0 ignore: ^5.2.0 @@ -2289,43 +2450,43 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1 + checksum: d9e891fb43ccb75322fc40d58d02479f98bd3c962db71075438868b13f579643d714a24b5477a827be7ca2e7e9f6058c406241b6696a6395c6fcbd6de76e015c languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.61.0": - version: 5.62.0 - resolution: "@typescript-eslint/parser@npm:5.62.0" +"@typescript-eslint/parser@npm:5.61.0": + version: 5.61.0 + resolution: "@typescript-eslint/parser@npm:5.61.0" dependencies: - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0 + "@typescript-eslint/scope-manager": 5.61.0 + "@typescript-eslint/types": 5.61.0 + "@typescript-eslint/typescript-estree": 5.61.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 + checksum: 2422bca03ecc6830700aaa739ec46b8e9ab6c0a47a67f140dc6b62a42a8b98997e73bce52c6a010b8a9b461211c46ba865d5b7f680a7823cf5c245d3b61f7fd5 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" +"@typescript-eslint/scope-manager@npm:5.61.0": + version: 5.61.0 + resolution: "@typescript-eslint/scope-manager@npm:5.61.0" dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 - checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 + "@typescript-eslint/types": 5.61.0 + "@typescript-eslint/visitor-keys": 5.61.0 + checksum: 6dfbb42c4b7d796ae3c395398bdfd2e5a4ae8aaf1448381278ecc39a1d1045af2cb452da5a00519d265bc1a5997523de22d5021acb4dbe1648502fe61512d3c6 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/type-utils@npm:5.62.0" +"@typescript-eslint/type-utils@npm:5.61.0": + version: 5.61.0 + resolution: "@typescript-eslint/type-utils@npm:5.61.0" dependencies: - "@typescript-eslint/typescript-estree": 5.62.0 - "@typescript-eslint/utils": 5.62.0 + "@typescript-eslint/typescript-estree": 5.61.0 + "@typescript-eslint/utils": 5.61.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -2333,23 +2494,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739 + checksum: f0203fd48c6218f004dd73a9a71ba4cf97f015d0f13a7b3c821a3ba7ec814839bae270a1db589184ca7091fe54815a3171d1993e8a25200bf33e131bd6e855d4 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 +"@typescript-eslint/types@npm:5.61.0": + version: 5.61.0 + resolution: "@typescript-eslint/types@npm:5.61.0" + checksum: d311ca2141f6bcb5f0f8f97ddbc218c9911e0735aaa30f0f2e64d518fb33568410754e1b04bf157175f8783504f8ec62a7ab53a66a18507f43edb1e21fe69e90 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" +"@typescript-eslint/typescript-estree@npm:5.61.0": + version: 5.61.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.61.0" dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 + "@typescript-eslint/types": 5.61.0 + "@typescript-eslint/visitor-keys": 5.61.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -2358,35 +2519,35 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 + checksum: efe25a1b2774939c02cb9b388cf72efa672811f1c39a87ddd617937f63c2320551ce459ba69c6d022e33322594d40b9f2d2c6bc9937387718adc40dc5e57ea8e languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" +"@typescript-eslint/utils@npm:5.61.0": + version: 5.61.0 + resolution: "@typescript-eslint/utils@npm:5.61.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@types/json-schema": ^7.0.9 "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0 + "@typescript-eslint/scope-manager": 5.61.0 + "@typescript-eslint/types": 5.61.0 + "@typescript-eslint/typescript-estree": 5.61.0 eslint-scope: ^5.1.1 semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931 + checksum: 24efc1964e6c92db96fe0d9a390550e4f27e8f353e51a9b46bda03e6692ea5d40f398d539235a4ff0894e9e45dfcfb51df953ade2ae9d17a1421449625ce6f5a languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" +"@typescript-eslint/visitor-keys@npm:5.61.0": + version: 5.61.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.61.0" dependencies: - "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/types": 5.61.0 eslint-visitor-keys: ^3.3.0 - checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 + checksum: a8d589f61ddfc380787218da4d347e8f9aef0f82f4a93f1daee46786bda889a90961c7ec1b470db5e3261438a728fdfd956f5bda6ee2de22c4be2d2152d6e270 languageName: node linkType: hard @@ -2527,7 +2688,7 @@ __metadata: languageName: node linkType: hard -"@wdio/globals@npm:8.24.6, @wdio/globals@npm:^8.23.1, @wdio/globals@npm:^8.24.6": +"@wdio/globals@npm:8.24.6, @wdio/globals@npm:^8.23.1": version: 8.24.6 resolution: "@wdio/globals@npm:8.24.6" dependencies: @@ -2899,7 +3060,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.4.1, acorn@npm:^8.9.0": +"acorn@npm:^8.4.1": version: 8.10.0 resolution: "acorn@npm:8.10.0" bin: @@ -2908,6 +3069,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.9.0": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" + bin: + acorn: bin/acorn + checksum: 260d9bb6017a1b6e42d31364687f0258f78eb20210b36ef2baad38fd619d78d4e95ff7dde9b3dbe0d81f137f79a8d651a845363a26e6985997f7b71145dc5e94 + languageName: node + linkType: hard + "agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -2959,7 +3129,7 @@ __metadata: languageName: node linkType: hard -"allure-commandline@npm:^2.23.0": +"allure-commandline@npm:2.23.0": version: 2.23.0 resolution: "allure-commandline@npm:2.23.0" bin: @@ -3050,7 +3220,7 @@ __metadata: languageName: node linkType: hard -"appium-adb@npm:^11.0.8": +"appium-adb@npm:11.0.8": version: 11.0.8 resolution: "appium-adb@npm:11.0.8" dependencies: @@ -3105,22 +3275,7 @@ __metadata: languageName: node linkType: hard -"archiver@npm:6.0.1, archiver@npm:^6.0.0": - version: 6.0.1 - resolution: "archiver@npm:6.0.1" - dependencies: - archiver-utils: ^4.0.1 - async: ^3.2.4 - buffer-crc32: ^0.2.1 - readable-stream: ^3.6.0 - readdir-glob: ^1.1.2 - tar-stream: ^3.0.0 - zip-stream: ^5.0.1 - checksum: 20549eef7366173440a86873387412226568744a410626f826998b0dda85fe84e739c542d9db9aca3923b772436eb795eafdff29c2983e683355fdd9faaa0fdb - languageName: node - linkType: hard - -"archiver@npm:^7.0.1": +"archiver@npm:7.0.1, archiver@npm:^7.0.1": version: 7.0.1 resolution: "archiver@npm:7.0.1" dependencies: @@ -3135,6 +3290,21 @@ __metadata: languageName: node linkType: hard +"archiver@npm:^6.0.0": + version: 6.0.1 + resolution: "archiver@npm:6.0.1" + dependencies: + archiver-utils: ^4.0.1 + async: ^3.2.4 + buffer-crc32: ^0.2.1 + readable-stream: ^3.6.0 + readdir-glob: ^1.1.2 + tar-stream: ^3.0.0 + zip-stream: ^5.0.1 + checksum: 20549eef7366173440a86873387412226568744a410626f826998b0dda85fe84e739c542d9db9aca3923b772436eb795eafdff29c2983e683355fdd9faaa0fdb + languageName: node + linkType: hard + "are-docs-informative@npm:^0.0.2": version: 0.0.2 resolution: "are-docs-informative@npm:0.0.2" @@ -3152,16 +3322,6 @@ __metadata: languageName: node linkType: hard -"are-we-there-yet@npm:^4.0.0": - version: 4.0.1 - resolution: "are-we-there-yet@npm:4.0.1" - dependencies: - delegates: ^1.0.0 - readable-stream: ^4.1.0 - checksum: 16871ee259e138bfab60800ae5b53406fb1b72b5d356f98b13c1b222bb2a13d9bc4292d79f4521fb0eca10874eb3838ae0d9f721f3bb34ddd37ee8f949831800 - languageName: node - linkType: hard - "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -3192,26 +3352,27 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "array-buffer-byte-length@npm:1.0.0" +"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "array-buffer-byte-length@npm:1.0.2" dependencies: - call-bind: ^1.0.2 - is-array-buffer: ^3.0.1 - checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + call-bound: ^1.0.3 + is-array-buffer: ^3.0.5 + checksum: 0ae3786195c3211b423e5be8dd93357870e6fb66357d81da968c2c39ef43583ef6eece1f9cb1caccdae4806739c65dea832b44b8593414313cd76a89795fca63 languageName: node linkType: hard "array-includes@npm:^3.1.6": - version: 3.1.6 - resolution: "array-includes@npm:3.1.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.4 is-string: ^1.0.7 - checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91 languageName: node linkType: hard @@ -3223,40 +3384,41 @@ __metadata: linkType: hard "array.prototype.flat@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flat@npm:1.3.1" + version: 1.3.3 + resolution: "array.prototype.flat@npm:1.3.3" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - checksum: 5a8415949df79bf6e01afd7e8839bbde5a3581300e8ad5d8449dea52639e9e59b26a467665622783697917b43bf39940a6e621877c7dd9b3d1c1f97484b9b88b + call-bind: ^1.0.8 + define-properties: ^1.2.1 + es-abstract: ^1.23.5 + es-shim-unscopables: ^1.0.2 + checksum: 5d5a7829ab2bb271a8d30a1c91e6271cef0ec534593c0fe6d2fb9ebf8bb62c1e5326e2fddcbbcbbe5872ca04f5e6b54a1ecf092e0af704fb538da9b2bfd95b40 languageName: node linkType: hard "array.prototype.flatmap@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flatmap@npm:1.3.1" + version: 1.3.3 + resolution: "array.prototype.flatmap@npm:1.3.3" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + call-bind: ^1.0.8 + define-properties: ^1.2.1 + es-abstract: ^1.23.5 + es-shim-unscopables: ^1.0.2 + checksum: 11b4de09b1cf008be6031bb507d997ad6f1892e57dc9153583de6ebca0f74ea403fffe0f203461d359de05048d609f3f480d9b46fed4099652d8b62cc972f284 languageName: node linkType: hard -"arraybuffer.prototype.slice@npm:^1.0.1": - version: 1.0.1 - resolution: "arraybuffer.prototype.slice@npm:1.0.1" +"arraybuffer.prototype.slice@npm:^1.0.4": + version: 1.0.4 + resolution: "arraybuffer.prototype.slice@npm:1.0.4" dependencies: - array-buffer-byte-length: ^1.0.0 - call-bind: ^1.0.2 - define-properties: ^1.2.0 - get-intrinsic: ^1.2.1 - is-array-buffer: ^3.0.2 - is-shared-array-buffer: ^1.0.2 - checksum: e3e9b2a3e988ebfeddce4c7e8f69df730c9e48cb04b0d40ff0874ce3d86b3d1339dd520ffde5e39c02610bc172ecfbd4bc93324b1cabd9554c44a56b131ce0ce + array-buffer-byte-length: ^1.0.1 + call-bind: ^1.0.8 + define-properties: ^1.2.1 + es-abstract: ^1.23.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.6 + is-array-buffer: ^3.0.4 + checksum: b1d1fd20be4e972a3779b1569226f6740170dca10f07aa4421d42cefeec61391e79c557cda8e771f5baefe47d878178cd4438f60916ce831813c08132bced765 languageName: node linkType: hard @@ -3276,10 +3438,17 @@ __metadata: languageName: node linkType: hard +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 9102e246d1ed9b37ac36f57f0a6ca55226876553251a31fc80677e71471f463a54c872dc78d5d7f80740c8ba624395cccbe8b60f7b690c4418f487d8e9fd1106 + languageName: node + linkType: hard + "async-lock@npm:^1.0.0": - version: 1.4.0 - resolution: "async-lock@npm:1.4.0" - checksum: a71ef9e50dc448a8e8dd6482494210d7b6f556d4815612b1fed5662216cd756c2c8fb9c2153a9a66ea90b36ba7fb18aa568d11813aadc23feb4c5b0b188df614 + version: 1.4.1 + resolution: "async-lock@npm:1.4.1" + checksum: 29e70cd892932b7c202437786cedc39ff62123cb6941014739bd3cabd6106326416e9e7c21285a5d1dc042cad239a0f7ec9c44658491ee4a615fd36a21c1d10a languageName: node linkType: hard @@ -3315,21 +3484,23 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 languageName: node linkType: hard -"axios@npm:1.6.2, axios@npm:^1.6.2": - version: 1.6.2 - resolution: "axios@npm:1.6.2" +"axios@npm:1.7.2": + version: 1.7.2 + resolution: "axios@npm:1.7.2" dependencies: - follow-redirects: ^1.15.0 + follow-redirects: ^1.15.6 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 4a7429e2b784be0f2902ca2680964391eae7236faa3967715f30ea45464b98ae3f1c6f631303b13dfe721b17126b01f486c7644b9ef276bfc63112db9fd379f8 + checksum: e457e2b0ab748504621f6fa6609074ac08c824bf0881592209dfa15098ece7e88495300e02cd22ba50b3468fd712fe687e629dcb03d6a3f6a51989727405aedf languageName: node linkType: hard @@ -3503,7 +3674,7 @@ __metadata: languageName: node linkType: hard -"bl@npm:^4.0.3, bl@npm:^4.1.0": +"bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" dependencies: @@ -3738,7 +3909,17 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b + languageName: node + linkType: hard + +"call-bind@npm:^1.0.2": version: 1.0.2 resolution: "call-bind@npm:1.0.2" dependencies: @@ -3748,6 +3929,28 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: ^1.0.0 + es-define-property: ^1.0.0 + get-intrinsic: ^1.2.4 + set-function-length: ^1.2.2 + checksum: aa2899bce917a5392fd73bd32e71799c37c0b7ab454e0ed13af7f6727549091182aade8bbb7b55f304a5bc436d543241c14090fb8a3137e9875e23f444f4f5a9 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3, call-bound@npm:^1.0.4": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: ^1.0.2 + get-intrinsic: ^1.3.0 + checksum: 2f6399488d1c272f56306ca60ff696575e2b7f31daf23bc11574798c84d9f2759dceb0cb1f471a85b77f28962a7ac6411f51d283ea2e45319009a19b6ccab3b2 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -3872,13 +4075,6 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^1.1.1": - version: 1.1.4 - resolution: "chownr@npm:1.1.4" - checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d - languageName: node - linkType: hard - "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -3970,7 +4166,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": +"color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -4002,7 +4198,7 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.6.0, color-string@npm:^1.9.0": +"color-string@npm:^1.9.0": version: 1.9.1 resolution: "color-string@npm:1.9.1" dependencies: @@ -4021,16 +4217,6 @@ __metadata: languageName: node linkType: hard -"color@npm:^3.1.3": - version: 3.2.1 - resolution: "color@npm:3.2.1" - dependencies: - color-convert: ^1.9.3 - color-string: ^1.6.0 - checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 - languageName: node - linkType: hard - "color@npm:^4.2.3": version: 4.2.3 resolution: "color@npm:4.2.3" @@ -4041,16 +4227,6 @@ __metadata: languageName: node linkType: hard -"colorspace@npm:1.1.x": - version: 1.1.4 - resolution: "colorspace@npm:1.1.4" - dependencies: - color: ^3.1.3 - text-hex: 1.0.x - checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 - languageName: node - linkType: hard - "combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -4106,7 +4282,7 @@ __metadata: languageName: node linkType: hard -"console-control-strings@npm:^1.1.0": +"console-control-strings@npm:1.1.0, console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed @@ -4129,13 +4305,13 @@ __metadata: languageName: node linkType: hard -"cookies@npm:~0.9.0": - version: 0.9.1 - resolution: "cookies@npm:0.9.1" +"cookies@npm:~0.8.0": + version: 0.8.0 + resolution: "cookies@npm:0.8.0" dependencies: depd: ~2.0.0 keygrip: ~1.1.0 - checksum: 213e4d14847b582fbd8a003203d3621a4b9fa792a315c37954e89332d38fac5bcc34ba92ef316ad6d5fe28f0187aaa115927fbbe2080744ad1707a93b4313247 + checksum: 806055a44f128705265b1bc6a853058da18bf80dea3654ad99be20985b1fa1b14f86c1eef73644aab8071241f8a78acd57202b54c4c5c70769fc694fbb9c4edc languageName: node linkType: hard @@ -4200,7 +4376,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -4211,6 +4387,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.2": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b + languageName: node + linkType: hard + "css-select@npm:^5.1.0": version: 5.1.0 resolution: "css-select@npm:5.1.0" @@ -4273,20 +4460,53 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1": - version: 4.3.4 - resolution: "debug@npm:4.3.4" +"data-view-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-buffer@npm:1.0.2" dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + call-bound: ^1.0.3 + es-errors: ^1.3.0 + is-data-view: ^1.0.2 + checksum: 1e1cd509c3037ac0f8ba320da3d1f8bf1a9f09b0be09394b5e40781b8cc15ff9834967ba7c9f843a425b34f9fe14ce44cf055af6662c44263424c1eb8d65659b languageName: node linkType: hard -"debug@npm:^3.1.0, debug@npm:^3.2.7": - version: 3.2.7 +"data-view-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-byte-length@npm:1.0.2" + dependencies: + call-bound: ^1.0.3 + es-errors: ^1.3.0 + is-data-view: ^1.0.2 + checksum: 3600c91ced1cfa935f19ef2abae11029e01738de8d229354d3b2a172bf0d7e4ed08ff8f53294b715569fdf72dfeaa96aa7652f479c0f60570878d88e7e8bddf6 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-offset@npm:1.0.1" + dependencies: + call-bound: ^1.0.2 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: 8dd492cd51d19970876626b5b5169fbb67ca31ec1d1d3238ee6a71820ca8b80cafb141c485999db1ee1ef02f2cc3b99424c5eda8d59e852d9ebb79ab290eb5ee + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^3.1.0, debug@npm:^3.2.7": + version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: ms: ^2.1.1 @@ -4294,7 +4514,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.0, debug@npm:^4.3.6": +"debug@npm:^4.3.0, debug@npm:^4.3.6, debug@npm:~4.3.1": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -4348,13 +4568,6 @@ __metadata: languageName: node linkType: hard -"deep-extend@npm:^0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 - languageName: node - linkType: hard - "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -4392,13 +4605,25 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": - version: 1.2.0 - resolution: "define-properties@npm:1.2.0" +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + +"define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" dependencies: + define-data-property: ^1.0.1 has-property-descriptors: ^1.0.0 object-keys: ^1.1.1 - checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 languageName: node linkType: hard @@ -4455,10 +4680,10 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.2": - version: 2.0.2 - resolution: "detect-libc@npm:2.0.2" - checksum: 2b2cd3649b83d576f4be7cc37eb3b1815c79969c8b1a03a40a4d55d83bc74d010753485753448eacb98784abf22f7dbd3911fd3b60e29fda28fed2d1a997944d +"detect-libc@npm:^2.0.3": + version: 2.0.4 + resolution: "detect-libc@npm:2.0.4" + checksum: 3d186b7d4e16965e10e21db596c78a4e131f9eee69c0081d13b85e6a61d7448d3ba23fe7997648022bdfa3b0eb4cc3c289a44c8188df949445a20852689abef6 languageName: node linkType: hard @@ -4585,13 +4810,31 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:^16.0.3, dotenv@npm:^16.3.1": +"dotenv@npm:16.0.3": + version: 16.0.3 + resolution: "dotenv@npm:16.0.3" + checksum: afcf03f373d7a6d62c7e9afea6328e62851d627a4e73f2e12d0a8deae1cd375892004f3021883f8aec85932cd2834b091f568ced92b4774625b321db83b827f8 + languageName: node + linkType: hard + +"dotenv@npm:^16.3.1": version: 16.3.1 resolution: "dotenv@npm:16.3.1" checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd languageName: node linkType: hard +"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: ^1.0.1 + es-errors: ^1.3.0 + gopd: ^1.2.0 + checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90 + languageName: node + linkType: hard + "duplexer2@npm:~0.1.4": version: 0.1.4 resolution: "duplexer2@npm:0.1.4" @@ -4710,13 +4953,6 @@ __metadata: languageName: node linkType: hard -"enabled@npm:2.0.x": - version: 2.0.0 - resolution: "enabled@npm:2.0.0" - checksum: 9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 - languageName: node - linkType: hard - "encodeurl@npm:^1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -4743,7 +4979,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": +"end-of-stream@npm:^1.1.0": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -4782,81 +5018,117 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4": - version: 1.22.1 - resolution: "es-abstract@npm:1.22.1" - dependencies: - array-buffer-byte-length: ^1.0.0 - arraybuffer.prototype.slice: ^1.0.1 - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - es-set-tostringtag: ^2.0.1 - es-to-primitive: ^1.2.1 - function.prototype.name: ^1.1.5 - get-intrinsic: ^1.2.1 - get-symbol-description: ^1.0.0 - globalthis: ^1.0.3 - gopd: ^1.0.1 - has: ^1.0.3 - has-property-descriptors: ^1.0.0 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.5 - is-array-buffer: ^3.0.2 +"es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9": + version: 1.23.9 + resolution: "es-abstract@npm:1.23.9" + dependencies: + array-buffer-byte-length: ^1.0.2 + arraybuffer.prototype.slice: ^1.0.4 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.8 + call-bound: ^1.0.3 + data-view-buffer: ^1.0.2 + data-view-byte-length: ^1.0.2 + data-view-byte-offset: ^1.0.1 + es-define-property: ^1.0.1 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-set-tostringtag: ^2.1.0 + es-to-primitive: ^1.3.0 + function.prototype.name: ^1.1.8 + get-intrinsic: ^1.2.7 + get-proto: ^1.0.0 + get-symbol-description: ^1.1.0 + globalthis: ^1.0.4 + gopd: ^1.2.0 + has-property-descriptors: ^1.0.2 + has-proto: ^1.2.0 + has-symbols: ^1.1.0 + hasown: ^2.0.2 + internal-slot: ^1.1.0 + is-array-buffer: ^3.0.5 is-callable: ^1.2.7 - is-negative-zero: ^2.0.2 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 - is-string: ^1.0.7 - is-typed-array: ^1.1.10 - is-weakref: ^1.0.2 - object-inspect: ^1.12.3 + is-data-view: ^1.0.2 + is-regex: ^1.2.1 + is-shared-array-buffer: ^1.0.4 + is-string: ^1.1.1 + is-typed-array: ^1.1.15 + is-weakref: ^1.1.0 + math-intrinsics: ^1.1.0 + object-inspect: ^1.13.3 object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.5.0 - safe-array-concat: ^1.0.0 - safe-regex-test: ^1.0.0 - string.prototype.trim: ^1.2.7 - string.prototype.trimend: ^1.0.6 - string.prototype.trimstart: ^1.0.6 - typed-array-buffer: ^1.0.0 - typed-array-byte-length: ^1.0.0 - typed-array-byte-offset: ^1.0.0 - typed-array-length: ^1.0.4 - unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.10 - checksum: 614e2c1c3717cb8d30b6128ef12ea110e06fd7d75ad77091ca1c5dbfb00da130e62e4bbbbbdda190eada098a22b27fe0f99ae5a1171dac2c8663b1e8be8a3a9b - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" + object.assign: ^4.1.7 + own-keys: ^1.0.1 + regexp.prototype.flags: ^1.5.3 + safe-array-concat: ^1.1.3 + safe-push-apply: ^1.0.0 + safe-regex-test: ^1.1.0 + set-proto: ^1.0.0 + string.prototype.trim: ^1.2.10 + string.prototype.trimend: ^1.0.9 + string.prototype.trimstart: ^1.0.8 + typed-array-buffer: ^1.0.3 + typed-array-byte-length: ^1.0.3 + typed-array-byte-offset: ^1.0.4 + typed-array-length: ^1.0.7 + unbox-primitive: ^1.1.0 + which-typed-array: ^1.1.18 + checksum: f3ee2614159ca197f97414ab36e3f406ee748ce2f97ffbf09e420726db5a442ce13f1e574601468bff6e6eb81588e6c9ce1ac6c03868a37c7cd48ac679f8485a + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" dependencies: - get-intrinsic: ^1.1.3 - has: ^1.0.3 - has-tostringtag: ^1.0.0 - checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + es-errors: ^1.3.0 + checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97 languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.0": - version: 1.0.0 - resolution: "es-shim-unscopables@npm:1.0.0" +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" dependencies: - has: ^1.0.3 - checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.6 + has-tostringtag: ^1.0.2 + hasown: ^2.0.2 + checksum: 789f35de4be3dc8d11fdcb91bc26af4ae3e6d602caa93299a8c45cf05d36cc5081454ae2a6d3afa09cceca214b76c046e4f8151e092e6fc7feeb5efb9e794fc6 languageName: node linkType: hard -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" +"es-shim-unscopables@npm:^1.0.2": + version: 1.1.0 + resolution: "es-shim-unscopables@npm:1.1.0" + dependencies: + hasown: ^2.0.2 + checksum: 33cfb1ebcb2f869f0bf528be1a8660b4fe8b6cec8fc641f330e508db2284b58ee2980fad6d0828882d22858c759c0806076427a3673b6daa60f753e3b558ee15 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.3.0": + version: 1.3.0 + resolution: "es-to-primitive@npm:1.3.0" dependencies: - is-callable: ^1.1.4 - is-date-object: ^1.0.1 - is-symbol: ^1.0.2 - checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + is-callable: ^1.2.7 + is-date-object: ^1.0.5 + is-symbol: ^1.0.4 + checksum: 966965880356486cd4d1fe9a523deda2084c81b3702d951212c098f5f2ee93605d1b7c1840062efb48a07d892641c7ed1bc194db563645c0dd2b919cb6d65b93 languageName: node linkType: hard @@ -4927,7 +5199,7 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^8.8.0": +"eslint-config-prettier@npm:8.8.0": version: 8.8.0 resolution: "eslint-config-prettier@npm:8.8.0" peerDependencies: @@ -4939,29 +5211,29 @@ __metadata: linkType: hard "eslint-import-resolver-node@npm:^0.3.7": - version: 0.3.7 - resolution: "eslint-import-resolver-node@npm:0.3.7" + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" dependencies: debug: ^3.2.7 - is-core-module: ^2.11.0 - resolve: ^1.22.1 - checksum: 3379aacf1d2c6952c1b9666c6fa5982c3023df695430b0d391c0029f6403a7775414873d90f397e98ba6245372b6c8960e16e74d9e4a3b0c0a4582f3bdbe3d6e + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 languageName: node linkType: hard "eslint-module-utils@npm:^2.7.4": - version: 2.8.0 - resolution: "eslint-module-utils@npm:2.8.0" + version: 2.12.0 + resolution: "eslint-module-utils@npm:2.12.0" dependencies: debug: ^3.2.7 peerDependenciesMeta: eslint: optional: true - checksum: 74c6dfea7641ebcfe174be61168541a11a14aa8d72e515f5f09af55cd0d0862686104b0524aa4b8e0ce66418a44aa38a94d2588743db5fd07a6b49ffd16921d2 + checksum: be3ac52e0971c6f46daeb1a7e760e45c7c45f820c8cc211799f85f10f04ccbf7afc17039165d56cb2da7f7ca9cec2b3a777013cddf0b976784b37eb9efa24180 languageName: node linkType: hard -"eslint-plugin-import@npm:^2.27.5": +"eslint-plugin-import@npm:2.27.5": version: 2.27.5 resolution: "eslint-plugin-import@npm:2.27.5" dependencies: @@ -4986,9 +5258,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jsdoc@npm:^46.4.3": - version: 46.4.4 - resolution: "eslint-plugin-jsdoc@npm:46.4.4" +"eslint-plugin-jsdoc@npm:46.4.3": + version: 46.4.3 + resolution: "eslint-plugin-jsdoc@npm:46.4.3" dependencies: "@es-joy/jsdoccomment": ~0.39.4 are-docs-informative: ^0.0.2 @@ -5001,11 +5273,11 @@ __metadata: spdx-expression-parse: ^3.0.1 peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: bc97f2f146aedcf43b1610a80eb9623deb365a30ba54eb37e6f82c6f205136aa51f67a65b0625729cb33ec941710bfa08d9d18b59296e2d84c2fd6a57d63c2be + checksum: 9cec116649f7bcd8abea165975ce5d5ae8fd095b3f7c53e00a93c0bd3aeeeb913c8ed3d5c9f67f04fe84d71d20c342b44cf41fc0f7dfd93bdafadeae8c235a81 languageName: node linkType: hard -"eslint-plugin-prettier@npm:^4.2.1": +"eslint-plugin-prettier@npm:4.2.1": version: 4.2.1 resolution: "eslint-plugin-prettier@npm:4.2.1" dependencies: @@ -5031,25 +5303,32 @@ __metadata: linkType: hard "eslint-scope@npm:^7.2.0": - version: 7.2.1 - resolution: "eslint-scope@npm:7.2.1" + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" dependencies: esrecurse: ^4.3.0 estraverse: ^5.2.0 - checksum: dccda5c8909216f6261969b72c77b95e385f9086bed4bc09d8a6276df8439d8f986810fd9ac3bd02c94c0572cefc7fdbeae392c69df2e60712ab8263986522c5 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": +"eslint-visitor-keys@npm:^3.3.0": version: 3.4.1 resolution: "eslint-visitor-keys@npm:3.4.1" checksum: f05121d868202736b97de7d750847a328fcfa8593b031c95ea89425333db59676ac087fa905eba438d0a3c5769632f828187e0c1a0d271832a2153c1d3661c2c languageName: node linkType: hard -"eslint@npm:^8.44.0": - version: 8.45.0 - resolution: "eslint@npm:8.45.0" +"eslint-visitor-keys@npm:^3.4.1": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint@npm:8.44.0": + version: 8.44.0 + resolution: "eslint@npm:8.44.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.4.0 @@ -5076,6 +5355,7 @@ __metadata: globals: ^13.19.0 graphemer: ^1.4.0 ignore: ^5.2.0 + import-fresh: ^3.0.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 is-path-inside: ^3.0.3 @@ -5087,10 +5367,11 @@ __metadata: natural-compare: ^1.4.0 optionator: ^0.9.3 strip-ansi: ^6.0.1 + strip-json-comments: ^3.1.0 text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 3e6dcce5cc43c5e301662db88ee26d1d188b22c177b9f104d7eefd1191236980bd953b3670fe2fac287114b26d7c5420ab48407d7ea1c3a446d6313c000009da + checksum: d06309ce4aafb9d27d558c8e5e5aa5cba3bbec3ce8ceccbc7d4b7a35f2b67fd40189159155553270e2e6febeb69bd8a3b60d6241c8f5ddc2ef1702ccbd328501 languageName: node linkType: hard @@ -5116,11 +5397,11 @@ __metadata: linkType: hard "esquery@npm:^1.4.2, esquery@npm:^1.5.0": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 languageName: node linkType: hard @@ -5217,13 +5498,6 @@ __metadata: languageName: node linkType: hard -"expand-template@npm:^2.0.3": - version: 2.0.3 - resolution: "expand-template@npm:2.0.3" - checksum: 588c19847216421ed92befb521767b7018dc88f88b0576df98cb242f20961425e96a92cbece525ef28cc5becceae5d544ae0f5b9b5e2aa05acb13716ca5b3099 - languageName: node - linkType: hard - "expect-webdriverio@npm:^4.6.1": version: 4.6.1 resolution: "expect-webdriverio@npm:4.6.1" @@ -5479,12 +5753,13 @@ __metadata: linkType: hard "flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" dependencies: - flatted: ^3.1.0 + flatted: ^3.2.9 + keyv: ^4.5.3 rimraf: ^3.0.2 - checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 + checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec languageName: node linkType: hard @@ -5497,27 +5772,10 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.1.0": - version: 3.2.7 - resolution: "flatted@npm:3.2.7" - checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 - languageName: node - linkType: hard - -"fn.name@npm:1.x.x": - version: 1.1.0 - resolution: "fn.name@npm:1.1.0" - checksum: e357144f48cfc9a7f52a82bbc6c23df7c8de639fce049cac41d41d62cabb740cdb9f14eddc6485e29c933104455bdd7a69bb14a9012cef9cd4fa252a4d0cf293 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.0": - version: 1.15.3 - resolution: "follow-redirects@npm:1.15.3" - peerDependenciesMeta: - debug: - optional: true - checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 +"flatted@npm:^3.2.9": + version: 3.3.3 + resolution: "flatted@npm:3.3.3" + checksum: 8c96c02fbeadcf4e8ffd0fa24983241e27698b0781295622591fc13585e2f226609d95e422bcf2ef044146ffacb6b68b1f20871454eddf75ab3caa6ee5f4a1fe languageName: node linkType: hard @@ -5531,12 +5789,12 @@ __metadata: languageName: node linkType: hard -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" +"for-each@npm:^0.3.3, for-each@npm:^0.3.5": + version: 0.3.5 + resolution: "for-each@npm:0.3.5" dependencies: - is-callable: ^1.1.3 - checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + is-callable: ^1.2.7 + checksum: 3c986d7e11f4381237cc98baa0a2f87eabe74719eee65ed7bed275163082b940ede19268c61d04c6260e0215983b12f8d885e3c8f9aa8c2113bf07c37051745c languageName: node linkType: hard @@ -5601,13 +5859,6 @@ __metadata: languageName: node linkType: hard -"fs-constants@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-constants@npm:1.0.0" - checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d - languageName: node - linkType: hard - "fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" @@ -5698,19 +5949,21 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.5": - version: 1.1.5 - resolution: "function.prototype.name@npm:1.1.5" +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": + version: 1.1.8 + resolution: "function.prototype.name@npm:1.1.8" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - functions-have-names: ^1.2.2 - checksum: acd21d733a9b649c2c442f067567743214af5fa248dbeee69d8278ce7df3329ea5abac572be9f7470b4ec1cd4d8f1040e3c5caccf98ebf2bf861a0deab735c27 + call-bind: ^1.0.8 + call-bound: ^1.0.3 + define-properties: ^1.2.1 + functions-have-names: ^1.2.3 + hasown: ^2.0.2 + is-callable: ^1.2.7 + checksum: 3a366535dc08b25f40a322efefa83b2da3cd0f6da41db7775f2339679120ef63b6c7e967266182609e655b8f0a8f65596ed21c7fd72ad8bd5621c2340edd4010 languageName: node linkType: hard -"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": +"functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 @@ -5733,22 +5986,6 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^5.0.0": - version: 5.0.1 - resolution: "gauge@npm:5.0.1" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 - has-unicode: ^2.0.1 - signal-exit: ^4.0.1 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 09b1eb8d8c850df7e4e2822feef27427afc845d4839fa13a08ddad74f882caf668dd1e77ac5e059d3e9a7b0cef59b706d28be40e1dc5fd326da32965e1f206a6 - languageName: node - linkType: hard - "gaze@npm:^1.1.2": version: 1.1.3 resolution: "gaze@npm:1.1.3" @@ -5801,7 +6038,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1": +"get-intrinsic@npm:^1.0.2": version: 1.2.1 resolution: "get-intrinsic@npm:1.2.1" dependencies: @@ -5813,6 +6050,24 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: ^1.0.2 + es-define-property: ^1.0.1 + es-errors: ^1.3.0 + es-object-atoms: ^1.1.1 + function-bind: ^1.1.2 + get-proto: ^1.0.1 + gopd: ^1.2.0 + has-symbols: ^1.1.0 + hasown: ^2.0.2 + math-intrinsics: ^1.1.0 + checksum: 301008e4482bb9a9cb49e132b88fee093bff373b4e6def8ba219b1e96b60158a6084f273ef5cafe832e42cd93462f4accb46a618d35fe59a2b507f2388c5b79d + languageName: node + linkType: hard + "get-port@npm:^7.0.0": version: 7.0.0 resolution: "get-port@npm:7.0.0" @@ -5820,6 +6075,16 @@ __metadata: languageName: node linkType: hard +"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: ^1.0.1 + es-object-atoms: ^1.0.0 + checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b + languageName: node + linkType: hard + "get-stream@npm:6.0.1, get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -5843,13 +6108,14 @@ __metadata: languageName: node linkType: hard -"get-symbol-description@npm:^1.0.0": - version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" +"get-symbol-description@npm:^1.1.0": + version: 1.1.0 + resolution: "get-symbol-description@npm:1.1.0" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.1 - checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 + call-bound: ^1.0.3 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.6 + checksum: 655ed04db48ee65ef2ddbe096540d4405e79ba0a7f54225775fef43a7e2afcb93a77d141c5f05fdef0afce2eb93bcbfb3597142189d562ac167ff183582683cd languageName: node linkType: hard @@ -5881,13 +6147,6 @@ __metadata: languageName: node linkType: hard -"github-from-package@npm:0.0.0": - version: 0.0.0 - resolution: "github-from-package@npm:0.0.0" - checksum: 14e448192a35c1e42efee94c9d01a10f42fe790375891a24b25261246ce9336ab9df5d274585aedd4568f7922246c2a78b8a8cd2571bfe99c693a9718e7dd0e3 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -5906,18 +6165,18 @@ __metadata: languageName: node linkType: hard -"glob@npm:10.3.10": - version: 10.3.10 - resolution: "glob@npm:10.3.10" +"glob@npm:10.4.1": + version: 10.4.1 + resolution: "glob@npm:10.4.1" dependencies: foreground-child: ^3.1.0 - jackspeak: ^2.3.5 - minimatch: ^9.0.1 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - path-scurry: ^1.10.1 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + path-scurry: ^1.11.1 bin: glob: dist/esm/bin.mjs - checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + checksum: 5d33c686c80bf6877f4284adf99a8c3cbb2a6eccbc92342943fe5d4b42c01d78c1881f2223d950c92a938d0f857e12e37b86a8e5483ab2141822e053b67d0dde languageName: node linkType: hard @@ -6040,20 +6299,21 @@ __metadata: linkType: hard "globals@npm:^13.19.0": - version: 13.20.0 - resolution: "globals@npm:13.20.0" + version: 13.24.0 + resolution: "globals@npm:13.24.0" dependencies: type-fest: ^0.20.2 - checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c languageName: node linkType: hard -"globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" +"globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" dependencies: - define-properties: ^1.1.3 - checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + define-properties: ^1.2.1 + gopd: ^1.0.1 + checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a languageName: node linkType: hard @@ -6082,12 +6342,10 @@ __metadata: languageName: node linkType: hard -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: ^1.1.3 - checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3 languageName: node linkType: hard @@ -6150,10 +6408,10 @@ __metadata: languageName: node linkType: hard -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 79730518ae02c77e4af6a1d1a0b6a2c3e1509785532771f9baf0241e83e36329542c3d7a0e723df8cbc85f74eff4f177828a2265a01ba576adbdc2d40d86538b languageName: node linkType: hard @@ -6171,12 +6429,12 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0": - version: 1.0.0 - resolution: "has-property-descriptors@npm:1.0.0" +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" dependencies: - get-intrinsic: ^1.1.1 - checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 languageName: node linkType: hard @@ -6187,19 +6445,35 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-proto@npm:^1.2.0": + version: 1.2.0 + resolution: "has-proto@npm:1.2.0" + dependencies: + dunder-proto: ^1.0.0 + checksum: f55010cb94caa56308041d77967c72a02ffd71386b23f9afa8447e58bc92d49d15c19bf75173713468e92fe3fb1680b03b115da39c21c32c74886d1d50d3e7ff + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" +"has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" dependencies: - has-symbols: ^1.0.2 - checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d languageName: node linkType: hard @@ -6458,13 +6732,13 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" dependencies: parent-module: ^1.0.0 resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + checksum: a06b19461b4879cc654d46f8a6244eb55eb053437afd4cbb6613cad6be203811849ed3e4ea038783092879487299fda24af932b86bdfff67c9055ba3612b8c87 languageName: node linkType: hard @@ -6513,7 +6787,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.2, ini@npm:~1.3.0": +"ini@npm:^1.3.2": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 @@ -6521,9 +6795,9 @@ __metadata: linkType: hard "ini@npm:^4.1.1": - version: 4.1.1 - resolution: "ini@npm:4.1.1" - checksum: 0e5909554074fbc31824fa5415b0f604de4a665514c96a897a77bf77353a7ad4743927321270e9d0610a9d510ccd1f3cd77422f7cc80d8f4542dbce75476fb6d + version: 4.1.3 + resolution: "ini@npm:4.1.3" + checksum: 004b2be42388877c58add606149f1a0c7985c90a0ba5dbf45a4738fdc70b0798d922caecaa54617029626505898ac451ff0537a08b949836b49d3267f66542c9 languageName: node linkType: hard @@ -6550,14 +6824,14 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.5": - version: 1.0.5 - resolution: "internal-slot@npm:1.0.5" +"internal-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "internal-slot@npm:1.1.0" dependencies: - get-intrinsic: ^1.2.0 - has: ^1.0.3 - side-channel: ^1.0.4 - checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + es-errors: ^1.3.0 + hasown: ^2.0.2 + side-channel: ^1.1.0 + checksum: 8e0991c2d048cc08dab0a91f573c99f6a4215075887517ea4fa32203ce8aea60fa03f95b177977fa27eb502e5168366d0f3e02c762b799691411d49900611861 languageName: node linkType: hard @@ -6575,14 +6849,14 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": - version: 3.0.2 - resolution: "is-array-buffer@npm:3.0.2" +"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": + version: 3.0.5 + resolution: "is-array-buffer@npm:3.0.5" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.0 - is-typed-array: ^1.1.10 - checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + call-bind: ^1.0.8 + call-bound: ^1.0.3 + get-intrinsic: ^1.2.6 + checksum: f137a2a6e77af682cdbffef1e633c140cf596f72321baf8bba0f4ef22685eb4339dde23dfe9e9ca430b5f961dee4d46577dcf12b792b68518c8449b134fb9156 languageName: node linkType: hard @@ -6600,12 +6874,25 @@ __metadata: languageName: node linkType: hard -"is-bigint@npm:^1.0.1": - version: 1.0.4 - resolution: "is-bigint@npm:1.0.4" +"is-async-function@npm:^2.0.0": + version: 2.1.1 + resolution: "is-async-function@npm:2.1.1" + dependencies: + async-function: ^1.0.0 + call-bound: ^1.0.3 + get-proto: ^1.0.1 + has-tostringtag: ^1.0.2 + safe-regex-test: ^1.1.0 + checksum: 9bece45133da26636488ca127d7686b85ad3ca18927e2850cff1937a650059e90be1c71a48623f8791646bb7a241b0cabf602a0b9252dcfa5ab273f2399000e6 + languageName: node + linkType: hard + +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" dependencies: - has-bigints: ^1.0.1 - checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + has-bigints: ^1.0.2 + checksum: ee1544f0e664f253306786ed1dce494b8cf242ef415d6375d8545b4d8816b0f054bd9f948a8988ae2c6325d1c28260dd02978236b2f7b8fb70dfc4838a6c9fa7 languageName: node linkType: hard @@ -6618,13 +6905,13 @@ __metadata: languageName: node linkType: hard -"is-boolean-object@npm:^1.1.0": - version: 1.1.2 - resolution: "is-boolean-object@npm:1.1.2" +"is-boolean-object@npm:^1.2.1": + version: 1.2.2 + resolution: "is-boolean-object@npm:1.2.2" dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + call-bound: ^1.0.3 + has-tostringtag: ^1.0.2 + checksum: 0415b181e8f1bfd5d3f8a20f8108e64d372a72131674eea9c2923f39d065b6ad08d654765553bdbffbd92c3746f1007986c34087db1bd89a31f71be8359ccdaa languageName: node linkType: hard @@ -6637,23 +6924,23 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": +"is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.12.0": - version: 2.12.1 - resolution: "is-core-module@npm:2.12.1" +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" dependencies: - has: ^1.0.3 - checksum: f04ea30533b5e62764e7b2e049d3157dc0abd95ef44275b32489ea2081176ac9746ffb1cdb107445cf1ff0e0dfcad522726ca27c27ece64dadf3795428b8e468 + hasown: ^2.0.2 + checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.8.1": +"is-core-module@npm:^2.8.1": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -6662,21 +6949,24 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.16.0": - version: 2.16.1 - resolution: "is-core-module@npm:2.16.1" +"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" dependencies: - hasown: ^2.0.2 - checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 + call-bound: ^1.0.2 + get-intrinsic: ^1.2.6 + is-typed-array: ^1.1.13 + checksum: 31600dd19932eae7fd304567e465709ffbfa17fa236427c9c864148e1b54eb2146357fcf3aed9b686dee13c217e1bb5a649cb3b9c479e1004c0648e9febde1b2 languageName: node linkType: hard -"is-date-object@npm:^1.0.1": - version: 1.0.5 - resolution: "is-date-object@npm:1.0.5" +"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" dependencies: - has-tostringtag: ^1.0.0 - checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + call-bound: ^1.0.2 + has-tostringtag: ^1.0.2 + checksum: d6c36ab9d20971d65f3fc64cef940d57a4900a2ac85fb488a46d164c2072a33da1cb51eefcc039e3e5c208acbce343d3480b84ab5ff0983f617512da2742562a languageName: node linkType: hard @@ -6687,6 +6977,15 @@ __metadata: languageName: node linkType: hard +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.1 + resolution: "is-finalizationregistry@npm:1.1.1" + dependencies: + call-bound: ^1.0.3 + checksum: 38c646c506e64ead41a36c182d91639833311970b6b6c6268634f109eef0a1a9d2f1f2e499ef4cb43c744a13443c4cdd2f0812d5afdcee5e9b65b72b28c48557 + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -6694,12 +6993,15 @@ __metadata: languageName: node linkType: hard -"is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" +"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": + version: 1.1.0 + resolution: "is-generator-function@npm:1.1.0" dependencies: - has-tostringtag: ^1.0.0 - checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + call-bound: ^1.0.3 + get-proto: ^1.0.0 + has-tostringtag: ^1.0.2 + safe-regex-test: ^1.1.0 + checksum: f7f7276131bdf7e28169b86ac55a5b080012a597f9d85a0cbef6fe202a7133fa450a3b453e394870e3cb3685c5a764c64a9f12f614684b46969b1e6f297bed6b languageName: node linkType: hard @@ -6726,19 +7028,20 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a +"is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: e6ce5f6380f32b141b3153e6ba9074892bbbbd655e92e7ba5ff195239777e767a976dcd4e22f864accaf30e53ebf961ab1995424aef91af68788f0591b7396cc languageName: node linkType: hard -"is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" +"is-number-object@npm:^1.1.1": + version: 1.1.1 + resolution: "is-number-object@npm:1.1.1" dependencies: - has-tostringtag: ^1.0.0 - checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + call-bound: ^1.0.3 + has-tostringtag: ^1.0.2 + checksum: 6517f0a0e8c4b197a21afb45cd3053dc711e79d45d8878aa3565de38d0102b130ca8732485122c7b336e98c27dacd5236854e3e6526e0eb30cae64956535662f languageName: node linkType: hard @@ -6770,13 +7073,15 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.1.4": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" +"is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + call-bound: ^1.0.2 + gopd: ^1.2.0 + has-tostringtag: ^1.0.2 + hasown: ^2.0.2 + checksum: 99ee0b6d30ef1bb61fa4b22fae7056c6c9b3c693803c0c284ff7a8570f83075a7d38cda53b06b7996d441215c27895ea5d1af62124562e13d91b3dbec41a5e13 languageName: node linkType: hard @@ -6787,12 +7092,19 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "is-shared-array-buffer@npm:1.0.2" +"is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 36e3f8c44bdbe9496c9689762cc4110f6a6a12b767c5d74c0398176aa2678d4467e3bf07595556f2dba897751bde1422480212b97d973c7b08a343100b0c0dfe + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.4": + version: 1.0.4 + resolution: "is-shared-array-buffer@npm:1.0.4" dependencies: - call-bind: ^1.0.2 - checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + call-bound: ^1.0.3 + checksum: 1611fedc175796eebb88f4dfc393dd969a4a8e6c69cadaff424ee9d4464f9f026399a5f84a90f7c62d6d7ee04e3626a912149726de102b0bd6c1ee6a9868fa5a languageName: node linkType: hard @@ -6810,30 +7122,33 @@ __metadata: languageName: node linkType: hard -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": - version: 1.0.7 - resolution: "is-string@npm:1.0.7" +"is-string@npm:^1.0.7, is-string@npm:^1.1.1": + version: 1.1.1 + resolution: "is-string@npm:1.1.1" dependencies: - has-tostringtag: ^1.0.0 - checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + call-bound: ^1.0.3 + has-tostringtag: ^1.0.2 + checksum: 2eeaaff605250f5e836ea3500d33d1a5d3aa98d008641d9d42fb941e929ffd25972326c2ef912987e54c95b6f10416281aaf1b35cdf81992cfb7524c5de8e193 languageName: node linkType: hard -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" +"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" dependencies: - has-symbols: ^1.0.2 - checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + call-bound: ^1.0.2 + has-symbols: ^1.1.0 + safe-regex-test: ^1.1.0 + checksum: bfafacf037af6f3c9d68820b74be4ae8a736a658a3344072df9642a090016e281797ba8edbeb1c83425879aae55d1cb1f30b38bf132d703692b2570367358032 languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.9": - version: 1.1.12 - resolution: "is-typed-array@npm:1.1.12" +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" dependencies: - which-typed-array: ^1.1.11 - checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 + which-typed-array: ^1.1.16 + checksum: ea7cfc46c282f805d19a9ab2084fd4542fed99219ee9dbfbc26284728bd713a51eac66daa74eca00ae0a43b61322920ba334793607dc39907465913e921e0892 languageName: node linkType: hard @@ -6851,12 +7166,29 @@ __metadata: languageName: node linkType: hard -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: f36aef758b46990e0d3c37269619c0a08c5b29428c0bb11ecba7f75203442d6c7801239c2f31314bc79199217ef08263787f3837d9e22610ad1da62970d6616d + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": + version: 1.1.1 + resolution: "is-weakref@npm:1.1.1" dependencies: - call-bind: ^1.0.2 - checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + call-bound: ^1.0.3 + checksum: 1769b9aed5d435a3a989ffc18fc4ad1947d2acdaf530eb2bd6af844861b545047ea51102f75901f89043bed0267ed61d914ee21e6e8b9aa734ec201cdfc0726f + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.3": + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" + dependencies: + call-bound: ^1.0.3 + get-intrinsic: ^1.2.6 + checksum: 5c6c8415a06065d78bdd5e3a771483aa1cd928df19138aa73c4c51333226f203f22117b4325df55cc8b3085a6716870a320c2d757efee92d7a7091a039082041 languageName: node linkType: hard @@ -6908,19 +7240,6 @@ __metadata: languageName: node linkType: hard -"jackspeak@npm:^2.3.5": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" - dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 - languageName: node - linkType: hard - "jackspeak@npm:^3.1.2": version: 3.4.3 resolution: "jackspeak@npm:3.4.3" @@ -7171,6 +7490,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + "klaw@npm:4.1.0": version: 4.1.0 resolution: "klaw@npm:4.1.0" @@ -7195,15 +7523,15 @@ __metadata: languageName: node linkType: hard -"koa@npm:^2.16.0": - version: 2.16.0 - resolution: "koa@npm:2.16.0" +"koa@npm:2.14.2": + version: 2.14.2 + resolution: "koa@npm:2.14.2" dependencies: accepts: ^1.3.5 cache-content-type: ^1.0.0 content-disposition: ~0.5.2 content-type: ^1.0.4 - cookies: ~0.9.0 + cookies: ~0.8.0 debug: ^4.3.2 delegates: ^1.0.0 depd: ^2.0.0 @@ -7222,14 +7550,7 @@ __metadata: statuses: ^1.5.0 type-is: ^1.6.16 vary: ^1.1.2 - checksum: 01be3231d41115a6fd0a4706a8d9e15ffc05404151dd813d07ddf05d36f17db54c3d0afa1811e8b72d13e205753a0b62ef0aa43337b6d531ef1b522bcf856c8e - languageName: node - linkType: hard - -"kuler@npm:^2.0.0": - version: 2.0.0 - resolution: "kuler@npm:2.0.0" - checksum: 9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 + checksum: 17fe3b8f5e0b4759004a942cc6ba2a9507299943a697dff9766b85f41f45caed4077ca2645ac9ad254d3359fffedfc4c9ebdd7a70493e5df8cdfac159a8ee835 languageName: node linkType: hard @@ -7435,20 +7756,6 @@ __metadata: languageName: node linkType: hard -"logform@npm:^2.7.0": - version: 2.7.0 - resolution: "logform@npm:2.7.0" - dependencies: - "@colors/colors": 1.6.0 - "@types/triple-beam": ^1.3.2 - fecha: ^4.2.0 - ms: ^2.1.1 - safe-stable-stringify: ^2.3.1 - triple-beam: ^1.3.0 - checksum: a202d10897254735ead75a640f889998f9b91a0c36be9cac3f5471fa740d36bc2fbbcf9d113dcdadec4ddf09e257393ff800e6aab80019bdc7456363d6ea21f6 - languageName: node - linkType: hard - "loglevel-plugin-prefix@npm:^0.8.4": version: 0.8.4 resolution: "loglevel-plugin-prefix@npm:0.8.4" @@ -7470,20 +7777,20 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.0, lru-cache@npm:^10.0.1": - version: 10.1.0 - resolution: "lru-cache@npm:10.1.0" - checksum: 58056d33e2500fbedce92f8c542e7c11b50d7d086578f14b7074d8c241422004af0718e08a6eaae8705cee09c77e39a61c1c79e9370ba689b7010c152e6a76ab - languageName: node - linkType: hard - -"lru-cache@npm:^10.2.0": +"lru-cache@npm:10.4.3, lru-cache@npm:^10.0.0, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a languageName: node linkType: hard +"lru-cache@npm:^10.0.1": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 58056d33e2500fbedce92f8c542e7c11b50d7d086578f14b7074d8c241422004af0718e08a6eaae8705cee09c77e39a61c1c79e9370ba689b7010c152e6a76ab + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -7553,6 +7860,13 @@ __metadata: languageName: node linkType: hard +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2 + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -7580,40 +7894,38 @@ __metadata: dependencies: "@babel/preset-env": ^7.26.0 "@babel/preset-typescript": ^7.26.0 - "@metamask/eslint-config": ^11.1.0 - "@metamask/eslint-config-nodejs": ^11.1.0 - "@metamask/eslint-config-typescript": ^11.1.0 + "@metamask/eslint-config": 11.1.0 + "@metamask/eslint-config-nodejs": 11.1.0 + "@metamask/eslint-config-typescript": 11.1.0 "@types/koa": ^2.13.12 - "@types/lodash.merge": ^4.6.9 + "@types/lodash.merge": 4.6.9 "@types/module-alias": ^2.0.4 - "@typescript-eslint/eslint-plugin": ^5.61.0 - "@typescript-eslint/parser": ^5.61.0 + "@typescript-eslint/eslint-plugin": 5.61.0 + "@typescript-eslint/parser": 5.61.0 "@wdio/allure-reporter": ^8.11.0 "@wdio/appium-service": ^9.2.1 "@wdio/browserstack-service": ^9.1.2 "@wdio/cli": latest - "@wdio/globals": ^8.24.6 + "@wdio/globals": 8.24.6 "@wdio/local-runner": latest "@wdio/mocha-framework": latest "@wdio/spec-reporter": latest - allure-commandline: ^2.23.0 - appium-adb: ^11.0.8 - axios: ^1.6.2 + allure-commandline: 2.23.0 + appium-adb: 11.0.8 babel-plugin-module-resolver: ^5.0.2 - dotenv: ^16.0.3 - eslint: ^8.44.0 - eslint-config-prettier: ^8.8.0 - eslint-plugin-import: ^2.27.5 - eslint-plugin-jsdoc: ^46.4.3 - eslint-plugin-prettier: ^4.2.1 - koa: ^2.16.0 + dotenv: 16.0.3 + eslint: 8.44.0 + eslint-config-prettier: 8.8.0 + eslint-plugin-import: 2.27.5 + eslint-plugin-jsdoc: 46.4.3 + eslint-plugin-prettier: 4.2.1 + koa: 2.14.2 module-alias: ^2.2.3 - prettier: ^2.8.8 + prettier: 2.8.8 ts-node: ^10.9.2 typescript: ^4.9.5 wdio-wait-for: ^3.0.9 - webdriverio: ^9.2.1 - winston: ^3.17.0 + webdriverio: 9.2.1 languageName: unknown linkType: soft @@ -7734,7 +8046,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": +"minimist@npm:^1.2.0, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 @@ -7846,7 +8158,7 @@ __metadata: languageName: node linkType: hard -"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": +"mkdirp-classic@npm:^0.5.2": version: 0.5.3 resolution: "mkdirp-classic@npm:0.5.3" checksum: 3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac @@ -7912,10 +8224,10 @@ __metadata: languageName: node linkType: hard -"moment@npm:2.29.4": - version: 2.29.4 - resolution: "moment@npm:2.29.4" - checksum: 0ec3f9c2bcba38dc2451b1daed5daded747f17610b92427bebe1d08d48d8b7bdd8d9197500b072d14e326dd0ccf3e326b9e3d07c5895d3d49e39b6803b76e80e +"moment@npm:2.30.1": + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 859236bab1e88c3e5802afcf797fc801acdbd0ee509d34ea3df6eea21eb6bcc2abd4ae4e4e64aa7c986aa6cba563c6e62806218e6412a765010712e5fa121ba6 languageName: node linkType: hard @@ -7967,13 +8279,6 @@ __metadata: languageName: node linkType: hard -"napi-build-utils@npm:^1.0.1": - version: 1.0.2 - resolution: "napi-build-utils@npm:1.0.2" - checksum: 06c14271ee966e108d55ae109f340976a9556c8603e888037145d6522726aebe89dd0c861b4b83947feaf6d39e79e08817559e8693deedc2c94e82c5cbd090c7 - languageName: node - linkType: hard - "natural-compare-lite@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare-lite@npm:1.4.0" @@ -8011,24 +8316,6 @@ __metadata: languageName: node linkType: hard -"node-abi@npm:^3.3.0": - version: 3.52.0 - resolution: "node-abi@npm:3.52.0" - dependencies: - semver: ^7.3.5 - checksum: 2ef47937d058fa1f0817294fe5ac3ec1d370d3f8eb4931ea920b7e147033390058d3bc35b64d9161036ad2fda191aa1155005cea20ec50984312637221559354 - languageName: node - linkType: hard - -"node-addon-api@npm:^6.1.0": - version: 6.1.0 - resolution: "node-addon-api@npm:6.1.0" - dependencies: - node-gyp: latest - checksum: 3a539510e677cfa3a833aca5397300e36141aca064cdc487554f2017110709a03a95da937e98c2a14ec3c626af7b2d1b6dabe629a481f9883143d0d5bff07bf2 - languageName: node - linkType: hard - "node-domexception@npm:1.0.0, node-domexception@npm:^1.0.0": version: 1.0.0 resolution: "node-domexception@npm:1.0.0" @@ -8168,18 +8455,6 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:7.0.1": - version: 7.0.1 - resolution: "npmlog@npm:7.0.1" - dependencies: - are-we-there-yet: ^4.0.0 - console-control-strings: ^1.1.0 - gauge: ^5.0.0 - set-blocking: ^2.0.0 - checksum: caabeb1f557c1094ad7ed3275b968b83ccbaefc133f17366ebb9fe8eb44e1aace28c31419d6244bfc0422aede1202875d555fe6661978bf04386f6cf617f43a4 - languageName: node - linkType: hard - "npmlog@npm:^6.0.0": version: 6.0.2 resolution: "npmlog@npm:6.0.2" @@ -8201,13 +8476,20 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.0, object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.0": version: 1.12.3 resolution: "object-inspect@npm:1.12.3" checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db languageName: node linkType: hard +"object-inspect@npm:^1.13.3": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 582810c6a8d2ef988ea0a39e69e115a138dad8f42dd445383b394877e5816eb4268489f316a6f74ee9c4e0a984b3eab1028e3e79d62b1ed67c726661d55c7a8b + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -8215,26 +8497,29 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.4": - version: 4.1.4 - resolution: "object.assign@npm:4.1.4" +"object.assign@npm:^4.1.7": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - has-symbols: ^1.0.3 + call-bind: ^1.0.8 + call-bound: ^1.0.3 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + has-symbols: ^1.1.0 object-keys: ^1.1.1 - checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + checksum: 60e07d2651cf4f5528c485f1aa4dbded9b384c47d80e8187cefd11320abb1aebebf78df5483451dfa549059f8281c21f7b4bf7d19e9e5e97d8d617df0df298de languageName: node linkType: hard "object.values@npm:^1.1.6": - version: 1.1.6 - resolution: "object.values@npm:1.1.6" + version: 1.2.1 + resolution: "object.values@npm:1.2.1" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + call-bind: ^1.0.8 + call-bound: ^1.0.3 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: f9b9a2a125ccf8ded29414d7c056ae0d187b833ee74919821fc60d7e216626db220d9cb3cf33f965c84aaaa96133626ca13b80f3c158b673976dc8cfcfcd26bb languageName: node linkType: hard @@ -8256,15 +8541,6 @@ __metadata: languageName: node linkType: hard -"one-time@npm:^1.0.0": - version: 1.0.0 - resolution: "one-time@npm:1.0.0" - dependencies: - fn.name: 1.x.x - checksum: fd008d7e992bdec1c67f53a2f9b46381ee12a9b8c309f88b21f0223546003fb47e8ad7c1fd5843751920a8d276c63bd4b45670ef80c61fb3e07dbccc962b5c7d - languageName: node - linkType: hard - "onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -8298,16 +8574,16 @@ __metadata: linkType: hard "optionator@npm:^0.9.3": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" + version: 0.9.4 + resolution: "optionator@npm:0.9.4" dependencies: - "@aashutoshrathi/word-wrap": ^1.2.3 deep-is: ^0.1.3 fast-levenshtein: ^2.0.6 levn: ^0.4.1 prelude-ls: ^1.2.1 type-check: ^0.4.0 - checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a + word-wrap: ^1.2.5 + checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb languageName: node linkType: hard @@ -8335,6 +8611,17 @@ __metadata: languageName: node linkType: hard +"own-keys@npm:^1.0.1": + version: 1.0.1 + resolution: "own-keys@npm:1.0.1" + dependencies: + get-intrinsic: ^1.2.6 + object-keys: ^1.1.1 + safe-push-apply: ^1.0.0 + checksum: cc9dd7d85c4ccfbe8109fce307d581ac7ede7b26de892b537873fbce2dc6a206d89aea0630dbb98e47ce0873517cefeaa7be15fcf94aaf4764a3b34b474a5b61 + languageName: node + linkType: hard + "p-cancelable@npm:^3.0.0": version: 3.0.0 resolution: "p-cancelable@npm:3.0.0" @@ -8678,25 +8965,10 @@ __metadata: languageName: node linkType: hard -"prebuild-install@npm:^7.1.1": - version: 7.1.1 - resolution: "prebuild-install@npm:7.1.1" - dependencies: - detect-libc: ^2.0.0 - expand-template: ^2.0.3 - github-from-package: 0.0.0 - minimist: ^1.2.3 - mkdirp-classic: ^0.5.3 - napi-build-utils: ^1.0.1 - node-abi: ^3.3.0 - pump: ^3.0.0 - rc: ^1.2.7 - simple-get: ^4.0.0 - tar-fs: ^2.0.0 - tunnel-agent: ^0.6.0 - bin: - prebuild-install: bin.js - checksum: dbf96d0146b6b5827fc8f67f72074d2e19c69628b9a7a0a17d0fad1bf37e9f06922896972e074197fc00a52eae912993e6ef5a0d471652f561df5cb516f3f467 +"possible-typed-array-names@npm:^1.0.0": + version: 1.1.0 + resolution: "possible-typed-array-names@npm:1.1.0" + checksum: cfcd4f05264eee8fd184cd4897a17890561d1d473434b43ab66ad3673d9c9128981ec01e0cb1d65a52cd6b1eebfb2eae1e53e39b2e0eca86afc823ede7a4f41b languageName: node linkType: hard @@ -8716,7 +8988,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.8.8": +"prettier@npm:2.8.8": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -8860,9 +9132,9 @@ __metadata: linkType: hard "punycode@npm:^2.1.0": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 languageName: node linkType: hard @@ -8922,20 +9194,6 @@ __metadata: languageName: node linkType: hard -"rc@npm:^1.2.7": - version: 1.2.8 - resolution: "rc@npm:1.2.8" - dependencies: - deep-extend: ^0.6.0 - ini: ~1.3.0 - minimist: ^1.2.0 - strip-json-comments: ~2.0.1 - bin: - rc: ./cli.js - checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e - languageName: node - linkType: hard - "react-is@npm:^18.0.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" @@ -9005,7 +9263,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": +"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -9029,19 +9287,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^4.1.0": - version: 4.4.2 - resolution: "readable-stream@npm:4.4.2" - dependencies: - abort-controller: ^3.0.0 - buffer: ^6.0.3 - events: ^3.3.0 - process: ^0.11.10 - string_decoder: ^1.3.0 - checksum: 6f4063763dbdb52658d22d3f49ca976420e1fbe16bbd241f744383715845350b196a2f08b8d6330f8e219153dff34b140aeefd6296da828e1041a7eab1f20d5e - languageName: node - linkType: hard - "readdir-glob@npm:^1.1.2": version: 1.1.3 resolution: "readdir-glob@npm:1.1.3" @@ -9069,6 +9314,22 @@ __metadata: languageName: node linkType: hard +"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": + version: 1.0.10 + resolution: "reflect.getprototypeof@npm:1.0.10" + dependencies: + call-bind: ^1.0.8 + define-properties: ^1.2.1 + es-abstract: ^1.23.9 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.7 + get-proto: ^1.0.1 + which-builtin-type: ^1.2.1 + checksum: ccc5debeb66125e276ae73909cecb27e47c35d9bb79d9cc8d8d055f008c58010ab8cb401299786e505e4aab733a64cba9daf5f312a58e96a43df66adad221870 + languageName: node + linkType: hard + "regenerate-unicode-properties@npm:^10.2.0": version: 10.2.0 resolution: "regenerate-unicode-properties@npm:10.2.0" @@ -9101,14 +9362,17 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.5.0": - version: 1.5.0 - resolution: "regexp.prototype.flags@npm:1.5.0" +"regexp.prototype.flags@npm:^1.5.3": + version: 1.5.4 + resolution: "regexp.prototype.flags@npm:1.5.4" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - functions-have-names: ^1.2.3 - checksum: c541687cdbdfff1b9a07f6e44879f82c66bbf07665f9a7544c5fd16acdb3ec8d1436caab01662d2fbcad403f3499d49ab0b77fbc7ef29ef961d98cc4bc9755b4 + call-bind: ^1.0.8 + define-properties: ^1.2.1 + es-errors: ^1.3.0 + get-proto: ^1.0.1 + gopd: ^1.2.0 + set-function-name: ^2.0.2 + checksum: 18cb667e56cb328d2dda569d7f04e3ea78f2683135b866d606538cf7b1d4271f7f749f09608c877527799e6cf350e531368f3c7a20ccd1bb41048a48926bdeeb languageName: node linkType: hard @@ -9179,20 +9443,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c - languageName: node - linkType: hard - -"resolve@npm:^1.14.2, resolve@npm:^1.22.8": +"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:^1.22.8": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -9205,33 +9456,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.22.1": - version: 1.22.3 - resolution: "resolve@npm:1.22.3" - dependencies: - is-core-module: ^2.12.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: fb834b81348428cb545ff1b828a72ea28feb5a97c026a1cf40aa1008352c72811ff4d4e71f2035273dc536dcfcae20c13604ba6283c612d70fa0b6e44519c374 - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.10.0#~builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.22.8#~builtin": +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.22.8#~builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -9244,19 +9469,6 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.22.1#~builtin": - version: 1.22.3 - resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin::version=1.22.3&hash=c3c19d" - dependencies: - is-core-module: ^2.12.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: ad59734723b596d0891321c951592ed9015a77ce84907f89c9d9307dd0c06e11a67906a3e628c4cae143d3e44898603478af0ddeb2bba3f229a9373efe342665 - languageName: node - linkType: hard - "responselike@npm:^3.0.0": version: 3.0.0 resolution: "responselike@npm:3.0.0" @@ -9389,19 +9601,20 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-array-concat@npm:1.0.0" +"safe-array-concat@npm:^1.1.3": + version: 1.1.3 + resolution: "safe-array-concat@npm:1.1.3" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.0 - has-symbols: ^1.0.3 + call-bind: ^1.0.8 + call-bound: ^1.0.2 + get-intrinsic: ^1.2.6 + has-symbols: ^1.1.0 isarray: ^2.0.5 - checksum: f43cb98fe3b566327d0c09284de2b15fb85ae964a89495c1b1a5d50c7c8ed484190f4e5e71aacc167e16231940079b326f2c0807aea633d47cc7322f40a6b57f + checksum: 00f6a68140e67e813f3ad5e73e6dedcf3e42a9fa01f04d44b0d3f7b1f4b257af876832a9bfc82ac76f307e8a6cc652e3cf95876048a26cbec451847cf6ae3707 languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -9415,14 +9628,24 @@ __metadata: languageName: node linkType: hard -"safe-regex-test@npm:^1.0.0": +"safe-push-apply@npm:^1.0.0": version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" + resolution: "safe-push-apply@npm:1.0.0" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 - is-regex: ^1.1.4 - checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + es-errors: ^1.3.0 + isarray: ^2.0.5 + checksum: 8c11cbee6dc8ff5cc0f3d95eef7052e43494591384015902e4292aef4ae9e539908288520ed97179cee17d6ffb450fe5f05a46ce7a1749685f7524fd568ab5db + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" + dependencies: + call-bound: ^1.0.2 + es-errors: ^1.3.0 + is-regex: ^1.2.1 + checksum: 3c809abeb81977c9ed6c869c83aca6873ea0f3ab0f806b8edbba5582d51713f8a6e9757d24d2b4b088f563801475ea946c8e77e7713e8c65cdd02305b6caedab languageName: node linkType: hard @@ -9458,14 +9681,12 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.5.4, semver@npm:^7.0.0, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.1, semver@npm:^7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: ^6.0.0 +"semver@npm:7.6.2": + version: 7.6.2 + resolution: "semver@npm:7.6.2" bin: semver: bin/semver.js - checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + checksum: 40f6a95101e8d854357a644da1b8dd9d93ce786d5c6a77227bc69dbb17bea83d0d1d1d7c4cd5920a6df909f48e8bd8a5909869535007f90278289f2451d0292d languageName: node linkType: hard @@ -9478,6 +9699,26 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.0.0, semver@npm:^7.5.1, semver@npm:^7.6.0": + version: 7.7.1 + resolution: "semver@npm:7.7.1" + bin: + semver: bin/semver.js + checksum: 586b825d36874007c9382d9e1ad8f93888d8670040add24a28e06a910aeebd673a2eb9e3bf169c6679d9245e66efb9057e0852e70d9daa6c27372aab1dda7104 + languageName: node + linkType: hard + +"semver@npm:^7.3.5, semver@npm:^7.3.7": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + "semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" @@ -9505,13 +9746,50 @@ __metadata: languageName: node linkType: hard -"set-blocking@npm:^2.0.0": +"set-blocking@npm:2.0.0, set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 languageName: node linkType: hard +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.2 + checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f + languageName: node + linkType: hard + +"set-proto@npm:^1.0.0": + version: 1.0.0 + resolution: "set-proto@npm:1.0.0" + dependencies: + dunder-proto: ^1.0.1 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + checksum: ec27cbbe334598547e99024403e96da32aca3e530583e4dba7f5db1c43cbc4affa9adfbd77c7b2c210b9b8b2e7b2e600bad2a6c44fd62e804d8233f96bbb62f4 + languageName: node + linkType: hard + "setimmediate@npm:^1.0.5, setimmediate@npm:~1.0.4": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" @@ -9526,20 +9804,72 @@ __metadata: languageName: node linkType: hard -"sharp@npm:0.32.6": - version: 0.32.6 - resolution: "sharp@npm:0.32.6" - dependencies: +"sharp@npm:0.33.4": + version: 0.33.4 + resolution: "sharp@npm:0.33.4" + dependencies: + "@img/sharp-darwin-arm64": 0.33.4 + "@img/sharp-darwin-x64": 0.33.4 + "@img/sharp-libvips-darwin-arm64": 1.0.2 + "@img/sharp-libvips-darwin-x64": 1.0.2 + "@img/sharp-libvips-linux-arm": 1.0.2 + "@img/sharp-libvips-linux-arm64": 1.0.2 + "@img/sharp-libvips-linux-s390x": 1.0.2 + "@img/sharp-libvips-linux-x64": 1.0.2 + "@img/sharp-libvips-linuxmusl-arm64": 1.0.2 + "@img/sharp-libvips-linuxmusl-x64": 1.0.2 + "@img/sharp-linux-arm": 0.33.4 + "@img/sharp-linux-arm64": 0.33.4 + "@img/sharp-linux-s390x": 0.33.4 + "@img/sharp-linux-x64": 0.33.4 + "@img/sharp-linuxmusl-arm64": 0.33.4 + "@img/sharp-linuxmusl-x64": 0.33.4 + "@img/sharp-wasm32": 0.33.4 + "@img/sharp-win32-ia32": 0.33.4 + "@img/sharp-win32-x64": 0.33.4 color: ^4.2.3 - detect-libc: ^2.0.2 - node-addon-api: ^6.1.0 - node-gyp: latest - prebuild-install: ^7.1.1 - semver: ^7.5.4 - simple-get: ^4.0.1 - tar-fs: ^3.0.4 - tunnel-agent: ^0.6.0 - checksum: 0cca1d16b1920800c0e22d27bc6305f4c67c9ebe44f67daceb30bf645ae39e7fb7dfbd7f5d6cd9f9eebfddd87ac3f7e2695f4eb906d19b7a775286238e6a29fc + detect-libc: ^2.0.3 + semver: ^7.6.0 + dependenciesMeta: + "@img/sharp-darwin-arm64": + optional: true + "@img/sharp-darwin-x64": + optional: true + "@img/sharp-libvips-darwin-arm64": + optional: true + "@img/sharp-libvips-darwin-x64": + optional: true + "@img/sharp-libvips-linux-arm": + optional: true + "@img/sharp-libvips-linux-arm64": + optional: true + "@img/sharp-libvips-linux-s390x": + optional: true + "@img/sharp-libvips-linux-x64": + optional: true + "@img/sharp-libvips-linuxmusl-arm64": + optional: true + "@img/sharp-libvips-linuxmusl-x64": + optional: true + "@img/sharp-linux-arm": + optional: true + "@img/sharp-linux-arm64": + optional: true + "@img/sharp-linux-s390x": + optional: true + "@img/sharp-linux-x64": + optional: true + "@img/sharp-linuxmusl-arm64": + optional: true + "@img/sharp-linuxmusl-x64": + optional: true + "@img/sharp-wasm32": + optional: true + "@img/sharp-win32-ia32": + optional: true + "@img/sharp-win32-x64": + optional: true + checksum: f5f91ce2a657128db9b45bc88781b1df185f91dffb16af12e76dc367b170a88353f8b0c406a93c7f110d9734b33a3c8b2d3faa6efb6508cdb5f382ffa36fdad0 languageName: node linkType: hard @@ -9559,21 +9889,65 @@ __metadata: languageName: node linkType: hard -"shell-quote@npm:1.8.1, shell-quote@npm:^1.8.1": +"shell-quote@npm:1.8.1": version: 1.8.1 resolution: "shell-quote@npm:1.8.1" checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b languageName: node linkType: hard -"side-channel@npm:^1.0.4": - version: 1.0.4 - resolution: "side-channel@npm:1.0.4" +"shell-quote@npm:^1.8.1": + version: 1.8.2 + resolution: "shell-quote@npm:1.8.2" + checksum: 1e97b62ced1c4c5135015978ebf273bed1f425a68cf84163e83fbb0f34b3ff9471e656720dab2b7cbb4ae0f58998e686d17d166c28dfb3662acd009e8bd7faed + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" dependencies: - call-bind: ^1.0.0 - get-intrinsic: ^1.0.2 - object-inspect: ^1.9.0 - checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + es-errors: ^1.3.0 + object-inspect: ^1.13.3 + checksum: 603b928997abd21c5a5f02ae6b9cc36b72e3176ad6827fab0417ead74580cc4fb4d5c7d0a8a2ff4ead34d0f9e35701ed7a41853dac8a6d1a664fcce1a044f86f + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: ^1.0.2 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.5 + object-inspect: ^1.13.3 + checksum: 42501371cdf71f4ccbbc9c9e2eb00aaaab80a4c1c429d5e8da713fd4d39ef3b8d4a4b37ed4f275798a65260a551a7131fd87fe67e922dba4ac18586d6aab8b06 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: ^1.0.2 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.5 + object-inspect: ^1.13.3 + side-channel-map: ^1.0.1 + checksum: a815c89bc78c5723c714ea1a77c938377ea710af20d4fb886d362b0d1f8ac73a17816a5f6640f354017d7e292a43da9c5e876c22145bac00b76cfb3468001736 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: ^1.3.0 + object-inspect: ^1.13.3 + side-channel-list: ^1.0.0 + side-channel-map: ^1.0.1 + side-channel-weakmap: ^1.0.2 + checksum: bf73d6d6682034603eb8e99c63b50155017ed78a522d27c2acec0388a792c3ede3238b878b953a08157093b85d05797217d270b7666ba1f111345fbe933380ff languageName: node linkType: hard @@ -9598,24 +9972,6 @@ __metadata: languageName: node linkType: hard -"simple-concat@npm:^1.0.0": - version: 1.0.1 - resolution: "simple-concat@npm:1.0.1" - checksum: 4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a - languageName: node - linkType: hard - -"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": - version: 4.0.1 - resolution: "simple-get@npm:4.0.1" - dependencies: - decompress-response: ^6.0.0 - once: ^1.3.1 - simple-concat: ^1.0.0 - checksum: e4132fd27cf7af230d853fa45c1b8ce900cb430dd0a3c6d3829649fe4f2b26574c803698076c4006450efb0fad2ba8c5455fbb5755d4b0a5ec42d4f12b31d27e - languageName: node - linkType: hard - "simple-swizzle@npm:^0.2.2": version: 0.2.2 resolution: "simple-swizzle@npm:0.2.2" @@ -9754,13 +10110,6 @@ __metadata: languageName: node linkType: hard -"stack-trace@npm:0.0.x": - version: 0.0.10 - resolution: "stack-trace@npm:0.0.10" - checksum: 473036ad32f8c00e889613153d6454f9be0536d430eb2358ca51cad6b95cea08a3cc33cc0e34de66b0dad221582b08ed2e61ef8e13f4087ab690f388362d6610 - languageName: node - linkType: hard - "stack-utils@npm:^2.0.3": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" @@ -9864,36 +10213,41 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.7": - version: 1.2.7 - resolution: "string.prototype.trim@npm:1.2.7" +"string.prototype.trim@npm:^1.2.10": + version: 1.2.10 + resolution: "string.prototype.trim@npm:1.2.10" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 + call-bind: ^1.0.8 + call-bound: ^1.0.2 + define-data-property: ^1.1.4 + define-properties: ^1.2.1 + es-abstract: ^1.23.5 + es-object-atoms: ^1.0.0 + has-property-descriptors: ^1.0.2 + checksum: 87659cd8561237b6c69f5376328fda934693aedde17bb7a2c57008e9d9ff992d0c253a391c7d8d50114e0e49ff7daf86a362f7961cf92f7564cd01342ca2e385 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimend@npm:1.0.6" +"string.prototype.trimend@npm:^1.0.9": + version: 1.0.9 + resolution: "string.prototype.trimend@npm:1.0.9" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e + call-bind: ^1.0.8 + call-bound: ^1.0.2 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: cb86f639f41d791a43627784be2175daa9ca3259c7cb83e7a207a729909b74f2ea0ec5d85de5761e6835e5f443e9420c6ff3f63a845378e4a61dd793177bc287 languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimstart@npm:1.0.6" +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 languageName: node linkType: hard @@ -9961,20 +10315,13 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 languageName: node linkType: hard -"strip-json-comments@npm:~2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 - languageName: node - linkType: hard - "strnum@npm:^1.0.5": version: 1.0.5 resolution: "strnum@npm:1.0.5" @@ -10034,18 +10381,6 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:^2.0.0": - version: 2.1.1 - resolution: "tar-fs@npm:2.1.1" - dependencies: - chownr: ^1.1.1 - mkdirp-classic: ^0.5.2 - pump: ^3.0.0 - tar-stream: ^2.1.4 - checksum: f5b9a70059f5b2969e65f037b4e4da2daf0fa762d3d232ffd96e819e3f94665dbbbe62f76f084f1acb4dbdcce16c6e4dac08d12ffc6d24b8d76720f4d9cf032d - languageName: node - linkType: hard - "tar-fs@npm:^3.0.6": version: 3.0.6 resolution: "tar-fs@npm:3.0.6" @@ -10063,19 +10398,6 @@ __metadata: languageName: node linkType: hard -"tar-stream@npm:^2.1.4": - version: 2.2.0 - resolution: "tar-stream@npm:2.2.0" - dependencies: - bl: ^4.0.3 - end-of-stream: ^1.4.1 - fs-constants: ^1.0.0 - inherits: ^2.0.3 - readable-stream: ^3.1.1 - checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 - languageName: node - linkType: hard - "tar-stream@npm:^3.0.0, tar-stream@npm:^3.1.5": version: 3.1.6 resolution: "tar-stream@npm:3.1.6" @@ -10101,27 +10423,27 @@ __metadata: languageName: node linkType: hard -"teen_process@npm:2.0.101": - version: 2.0.101 - resolution: "teen_process@npm:2.0.101" +"teen_process@npm:2.1.4": + version: 2.1.4 + resolution: "teen_process@npm:2.1.4" dependencies: - bluebird: 3.7.2 - lodash: 4.17.21 - shell-quote: 1.8.1 - source-map-support: 0.5.21 - checksum: 2582f8a40cbc0103bc40e68316bc2565c139c0346044c94c2c5d50e7a91b8ea5fcb9fa90a170d1165e495e34f778ae51c0963cc1ded30789557a8462c4fbdfdf + bluebird: ^3.7.2 + lodash: ^4.17.21 + shell-quote: ^1.8.1 + source-map-support: ^0.x + checksum: 16f6f040b6b5fe4c655a4006a483c8d5b93e2b60b9002c90fe63473ed7aaf1b05b1e5a324ec5d01eef6e6f4d649eec86145fd7709dfba283e5e9f57133dc3509 languageName: node linkType: hard "teen_process@npm:^2.0.1": - version: 2.1.1 - resolution: "teen_process@npm:2.1.1" + version: 2.3.1 + resolution: "teen_process@npm:2.3.1" dependencies: bluebird: ^3.7.2 lodash: ^4.17.21 shell-quote: ^1.8.1 source-map-support: ^0.x - checksum: f85d1dfbe21eafcaac0ce90ae95b7f13278c45d68b7e90f5b63ae9c7ce702bb1e55b7282218fafc493d5ff8a5ba0471db13a501c42e1a507ae8f9dba85e3fbb4 + checksum: 09d37c147a255a1bfb990079391b4b36f6af49e7bb79500cd5a419b528ab351b3713cc794631c93ecac1468f07f9d2eb9ee795b2cabff62440812251a85fac51 languageName: node linkType: hard @@ -10143,13 +10465,6 @@ __metadata: languageName: node linkType: hard -"text-hex@npm:1.0.x": - version: 1.0.0 - resolution: "text-hex@npm:1.0.0" - checksum: 1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a - languageName: node - linkType: hard - "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -10274,14 +10589,14 @@ __metadata: linkType: hard "tsconfig-paths@npm:^3.14.1": - version: 3.14.2 - resolution: "tsconfig-paths@npm:3.14.2" + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" dependencies: "@types/json5": ^0.0.29 json5: ^1.0.2 minimist: ^1.2.6 strip-bom: ^3.0.0 - checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 + checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201 languageName: node linkType: hard @@ -10306,6 +10621,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.4.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a + languageName: node + linkType: hard + "tsscmp@npm:1.0.6": version: 1.0.6 resolution: "tsscmp@npm:1.0.6" @@ -10324,15 +10646,6 @@ __metadata: languageName: node linkType: hard -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: ^5.0.1 - checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711 - languageName: node - linkType: hard - "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -10349,10 +10662,10 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:3.13.1, type-fest@npm:^3.8.0": - version: 3.13.1 - resolution: "type-fest@npm:3.13.1" - checksum: c06b0901d54391dc46de3802375f5579868949d71f93b425ce564e19a428a0d411ae8d8cb0e300d330071d86152c3ea86e744c3f2860a42a79585b6ec2fdae8e +"type-fest@npm:4.19.0": + version: 4.19.0 + resolution: "type-fest@npm:4.19.0" + checksum: 04cc30faca153917fe335dbeaff05c1c2a165a3fe72134a1dfd7eec1bb625414f3dcabaf26b7d49deba91436ae7c4eb4c05f8df9c68b11ede6ae4bbca1972f1a languageName: node linkType: hard @@ -10384,6 +10697,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^3.8.0": + version: 3.13.1 + resolution: "type-fest@npm:3.13.1" + checksum: c06b0901d54391dc46de3802375f5579868949d71f93b425ce564e19a428a0d411ae8d8cb0e300d330071d86152c3ea86e744c3f2860a42a79585b6ec2fdae8e + languageName: node + linkType: hard + "type-fest@npm:^4.2.0": version: 4.8.3 resolution: "type-fest@npm:4.8.3" @@ -10401,50 +10721,56 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-buffer@npm:1.0.0" +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.1 - is-typed-array: ^1.1.10 - checksum: 3e0281c79b2a40cd97fe715db803884301993f4e8c18e8d79d75fd18f796e8cd203310fec8c7fdb5e6c09bedf0af4f6ab8b75eb3d3a85da69328f28a80456bd3 + call-bound: ^1.0.3 + es-errors: ^1.3.0 + is-typed-array: ^1.1.14 + checksum: 3fb91f0735fb413b2bbaaca9fabe7b8fc14a3fa5a5a7546bab8a57e755be0e3788d893195ad9c2b842620592de0e68d4c077d4c2c41f04ec25b8b5bb82fa9a80 languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-length@npm:1.0.0" +"typed-array-byte-length@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" dependencies: - call-bind: ^1.0.2 + call-bind: ^1.0.8 for-each: ^0.3.3 - has-proto: ^1.0.1 - is-typed-array: ^1.1.10 - checksum: b03db16458322b263d87a702ff25388293f1356326c8a678d7515767ef563ef80e1e67ce648b821ec13178dd628eb2afdc19f97001ceae7a31acf674c849af94 + gopd: ^1.2.0 + has-proto: ^1.2.0 + is-typed-array: ^1.1.14 + checksum: cda9352178ebeab073ad6499b03e938ebc30c4efaea63a26839d89c4b1da9d2640b0d937fc2bd1f049eb0a38def6fbe8a061b601292ae62fe079a410ce56e3a6 languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-offset@npm:1.0.0" +"typed-array-byte-offset@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-byte-offset@npm:1.0.4" dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.8 for-each: ^0.3.3 - has-proto: ^1.0.1 - is-typed-array: ^1.1.10 - checksum: 04f6f02d0e9a948a95fbfe0d5a70b002191fae0b8fe0fe3130a9b2336f043daf7a3dda56a31333c35a067a97e13f539949ab261ca0f3692c41603a46a94e960b + gopd: ^1.2.0 + has-proto: ^1.2.0 + is-typed-array: ^1.1.15 + reflect.getprototypeof: ^1.0.9 + checksum: 670b7e6bb1d3c2cf6160f27f9f529e60c3f6f9611c67e47ca70ca5cfa24ad95415694c49d1dbfeda016d3372cab7dfc9e38c7b3e1bb8d692cae13a63d3c144d7 languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-length@npm:1.0.4" +"typed-array-length@npm:^1.0.7": + version: 1.0.7 + resolution: "typed-array-length@npm:1.0.7" dependencies: - call-bind: ^1.0.2 + call-bind: ^1.0.7 for-each: ^0.3.3 - is-typed-array: ^1.1.9 - checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 + gopd: ^1.0.1 + is-typed-array: ^1.1.13 + possible-typed-array-names: ^1.0.0 + reflect.getprototypeof: ^1.0.6 + checksum: deb1a4ffdb27cd930b02c7030cb3e8e0993084c643208e52696e18ea6dd3953dfc37b939df06ff78170423d353dc8b10d5bae5796f3711c1b3abe52872b3774c languageName: node linkType: hard @@ -10468,15 +10794,15 @@ __metadata: languageName: node linkType: hard -"unbox-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "unbox-primitive@npm:1.0.2" +"unbox-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "unbox-primitive@npm:1.1.0" dependencies: - call-bind: ^1.0.2 + call-bound: ^1.0.3 has-bigints: ^1.0.2 - has-symbols: ^1.0.3 - which-boxed-primitive: ^1.0.2 - checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + has-symbols: ^1.1.0 + which-boxed-primitive: ^1.1.1 + checksum: 729f13b84a5bfa3fead1d8139cee5c38514e63a8d6a437819a473e241ba87eeb593646568621c7fc7f133db300ef18d65d1a5a60dc9c7beb9000364d93c581df languageName: node linkType: hard @@ -10623,9 +10949,9 @@ __metadata: linkType: hard "utf8-byte-length@npm:^1.0.1": - version: 1.0.4 - resolution: "utf8-byte-length@npm:1.0.4" - checksum: f188ca076ec094d58e7009fcc32623c5830c7f0f3e15802bfa4fdd1e759454a481fc4ac05e0fa83b7736e77af628a9ee0e57dcc89683d688fde3811473e42143 + version: 1.0.5 + resolution: "utf8-byte-length@npm:1.0.5" + checksum: 168edff8f7baca974b5bfb5256cebd57deaef8fbf2d0390301dd1009da52de64774d62f088254c94021e372147b6c938aa82f2318a3a19f9ebd21e48b7f40029 languageName: node linkType: hard @@ -10860,7 +11186,7 @@ __metadata: languageName: node linkType: hard -"webdriverio@npm:9.2.1, webdriverio@npm:^9.2.1": +"webdriverio@npm:9.2.1": version: 9.2.1 resolution: "webdriverio@npm:9.2.1" dependencies: @@ -10933,29 +11259,64 @@ __metadata: languageName: node linkType: hard -"which-boxed-primitive@npm:^1.0.2": +"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": + version: 1.1.1 + resolution: "which-boxed-primitive@npm:1.1.1" + dependencies: + is-bigint: ^1.1.0 + is-boolean-object: ^1.2.1 + is-number-object: ^1.1.1 + is-string: ^1.1.1 + is-symbol: ^1.1.1 + checksum: ee41d0260e4fd39551ad77700c7047d3d281ec03d356f5e5c8393fe160ba0db53ef446ff547d05f76ffabfd8ad9df7c9a827e12d4cccdbc8fccf9239ff8ac21e + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.2.1": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" + dependencies: + call-bound: ^1.0.2 + function.prototype.name: ^1.1.6 + has-tostringtag: ^1.0.2 + is-async-function: ^2.0.0 + is-date-object: ^1.1.0 + is-finalizationregistry: ^1.1.0 + is-generator-function: ^1.0.10 + is-regex: ^1.2.1 + is-weakref: ^1.0.2 + isarray: ^2.0.5 + which-boxed-primitive: ^1.1.0 + which-collection: ^1.0.2 + which-typed-array: ^1.1.16 + checksum: 7a3617ba0e7cafb795f74db418df889867d12bce39a477f3ee29c6092aa64d396955bf2a64eae3726d8578440e26777695544057b373c45a8bcf5fbe920bf633 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.2": version: 1.0.2 - resolution: "which-boxed-primitive@npm:1.0.2" + resolution: "which-collection@npm:1.0.2" dependencies: - is-bigint: ^1.0.1 - is-boolean-object: ^1.1.0 - is-number-object: ^1.0.4 - is-string: ^1.0.5 - is-symbol: ^1.0.3 - checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + is-map: ^2.0.3 + is-set: ^2.0.3 + is-weakmap: ^2.0.2 + is-weakset: ^2.0.3 + checksum: c51821a331624c8197916598a738fc5aeb9a857f1e00d89f5e4c03dc7c60b4032822b8ec5696d28268bb83326456a8b8216344fb84270d18ff1d7628051879d9 languageName: node linkType: hard -"which-typed-array@npm:^1.1.10, which-typed-array@npm:^1.1.11": - version: 1.1.11 - resolution: "which-typed-array@npm:1.1.11" +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18": + version: 1.1.19 + resolution: "which-typed-array@npm:1.1.19" dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-tostringtag: ^1.0.0 - checksum: 711ffc8ef891ca6597b19539075ec3e08bb9b4c2ca1f78887e3c07a977ab91ac1421940505a197758fb5939aa9524976d0a5bbcac34d07ed6faa75cedbb17206 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.8 + call-bound: ^1.0.4 + for-each: ^0.3.5 + get-proto: ^1.0.1 + gopd: ^1.2.0 + has-tostringtag: ^1.0.2 + checksum: 162d2a07f68ea323f88ed9419861487ce5d02cb876f2cf9dd1e428d04a63133f93a54f89308f337b27cabd312ee3d027cae4a79002b2f0a85b79b9ef4c190670 languageName: node linkType: hard @@ -11001,33 +11362,10 @@ __metadata: languageName: node linkType: hard -"winston-transport@npm:^4.9.0": - version: 4.9.0 - resolution: "winston-transport@npm:4.9.0" - dependencies: - logform: ^2.7.0 - readable-stream: ^3.6.2 - triple-beam: ^1.3.0 - checksum: f5fd06a27def7597229925ba2b8b9ffa61b5b8748f994c8325064744e4e36dfea19868a16c16b3806f9b98bb7da67c25f08ae6fba3bdc6db4a9555673474a972 - languageName: node - linkType: hard - -"winston@npm:^3.17.0": - version: 3.17.0 - resolution: "winston@npm:3.17.0" - dependencies: - "@colors/colors": ^1.6.0 - "@dabh/diagnostics": ^2.0.2 - async: ^3.2.3 - is-stream: ^2.0.0 - logform: ^2.7.0 - one-time: ^1.0.0 - readable-stream: ^3.4.0 - safe-stable-stringify: ^2.3.1 - stack-trace: 0.0.x - triple-beam: ^1.3.0 - winston-transport: ^4.9.0 - checksum: ba772c25937007cea6cdeddc931de18a1ea336ae7b3aff2c15de762de5c559b2d310ca2e7a911c209711d325e47d653485e33271ddfb27cd73179e35c7d52267 +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb languageName: node linkType: hard @@ -11199,30 +11537,30 @@ __metadata: languageName: node linkType: hard -"yauzl@npm:2.10.0, yauzl@npm:^2.10.0, yauzl@npm:^2.7.0": - version: 2.10.0 - resolution: "yauzl@npm:2.10.0" +"yauzl@npm:3.1.3, yauzl@npm:^3.0.0": + version: 3.1.3 + resolution: "yauzl@npm:3.1.3" dependencies: buffer-crc32: ~0.2.3 - fd-slicer: ~1.1.0 - checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b + pend: ~1.2.0 + checksum: 5b782f6e99361a9c715e7a82e7aae3d983b6ddff6ebe3a66d2dd3f4ee601ec41c55fa88587bf6de0acbc013aac0b2cac84f9f0cd48372fd5329ee5e273f46f2c languageName: node linkType: hard -"yauzl@npm:^3.0.0": - version: 3.1.3 - resolution: "yauzl@npm:3.1.3" +"yauzl@npm:^2.10.0, yauzl@npm:^2.7.0": + version: 2.10.0 + resolution: "yauzl@npm:2.10.0" dependencies: buffer-crc32: ~0.2.3 - pend: ~1.2.0 - checksum: 5b782f6e99361a9c715e7a82e7aae3d983b6ddff6ebe3a66d2dd3f4ee601ec41c55fa88587bf6de0acbc013aac0b2cac84f9f0cd48372fd5329ee5e273f46f2c + fd-slicer: ~1.1.0 + checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b languageName: node linkType: hard "ylru@npm:^1.2.0": - version: 1.3.2 - resolution: "ylru@npm:1.3.2" - checksum: b6bb3931144424114f2350c072cfeb180f205add93509c605ae025cbed8059846f8a5767655feeeab890d288b5b4c4b36f5d5d867ee4e6946c16bcc7ec3ddaee + version: 1.4.0 + resolution: "ylru@npm:1.4.0" + checksum: e0bf797476487e3d57a6e8790cbb749cff2089e2afc87e46bc84ce7605c329d578ff422c8e8c2ddf167681ddd218af0f58e099733ae1044cba9e9472ebedc01d languageName: node linkType: hard From ad48cdb15d146e91a616b9ec9fc489b5ddfe490a Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Mon, 5 May 2025 22:43:46 +0100 Subject: [PATCH 14/20] chore: removes unused page object models --- e2e/src/screens/Dapps/AndroidSDKDappScreen.ts | 252 --------------- .../screens/Dapps/CreateReactAppDappScreen.ts | 112 ------- e2e/src/screens/Dapps/DevnextJSDappScreen.ts | 106 ------- e2e/src/screens/Dapps/NextJSDappScreen.ts | 63 ---- .../screens/Dapps/PlaygroundNextDappScreen.ts | 118 ------- .../Dapps/ReactMetamaskButtonDappScreen.ts | 47 --- .../screens/Dapps/ReactNativeDappScreen.ts | 59 ---- .../screens/Dapps/SdkPlaygroundDappScreen.ts | 293 ------------------ e2e/src/screens/Dapps/TestDappScreen.ts | 110 ------- e2e/src/screens/Dapps/UnityDappScreen.ts | 45 --- e2e/src/screens/Dapps/VueJSDappScreen.ts | 150 --------- .../screens/Dapps/Web3OnBoardDappScreen.ts | 88 ------ e2e/src/screens/Dapps/iOSNativeDappScreen.ts | 65 ---- 13 files changed, 1508 deletions(-) delete mode 100644 e2e/src/screens/Dapps/AndroidSDKDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/CreateReactAppDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/DevnextJSDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/NextJSDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/ReactNativeDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/TestDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/UnityDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/VueJSDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts delete mode 100644 e2e/src/screens/Dapps/iOSNativeDappScreen.ts diff --git a/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts b/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts deleted file mode 100644 index 09b7556d4..000000000 --- a/e2e/src/screens/Dapps/AndroidSDKDappScreen.ts +++ /dev/null @@ -1,252 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { AndroidSelector } from '@util/Selectors'; -import { getSelectorForPlatform } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; - -class AndroidSDKDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Connect"]', - ), - }), - ); - } - - get connectAndSignButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Connect and Sign"]', - ), - }), - ); - } - - get connectWithRequestButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Connect With Request"]', - ), - }), - ); - } - - get clearSessionButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Clear Session"]', - ), - }), - ); - } - - get signButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Sign Message"]', - ), - }), - ); - } - - get signButton2(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '(//android.widget.TextView[@text="Sign Message"])[2]', - ), - }), - ); - } - - get batchSigningButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Batch Signing"]', - ), - }), - ); - } - - get batchSigningButton2(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '(//android.widget.TextView[@text="Batch Signing"])[2]', - ), - }), - ); - } - - get sendTransactionButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Send Transaction"]', - ), - }), - ); - } - - get sendTransactionButton2(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '(//android.widget.TextView[@text="Send Transaction"])[2]', - ), - }), - ); - } - - get switchChainButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Switch Chain"]', - ), - }), - ); - } - - get switchChainButton2(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '(//android.widget.TextView[@text="Switch Chain"])[2]', - ), - }), - ); - } - - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Disconnect"]', - ), - }), - ); - } - - get backButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.view.View[@content-desc="Back"]', - ), - }), - ); - } - - async connect(): Promise { - await this.connectButton.waitForEnabled({ - timeout: 5000, - }); - await this.connectButton.click(); - } - - async sign(): Promise { - await this.signButton.waitForEnabled({ - timeout: 5000, - }); - await this.signButton.click(); - } - - async sign2(): Promise { - await this.signButton2.waitForEnabled({ - timeout: 5000, - }); - await this.signButton2.click(); - } - - async sendTransaction(): Promise { - await this.sendTransactionButton.waitForEnabled({ - timeout: 5000, - }); - await this.sendTransactionButton.click(); - } - - async sendTransaction2(): Promise { - await this.sendTransactionButton2.waitForEnabled({ - timeout: 5000, - }); - await this.sendTransactionButton2.click(); - } - - async switchChain(): Promise { - await this.switchChainButton.waitForEnabled({ - timeout: 5000, - }); - await this.switchChainButton.click(); - } - - async switchChain2(): Promise { - await this.switchChainButton2.waitForEnabled({ - timeout: 5000, - }); - await this.switchChainButton2.click(); - } - - async clearSession(): Promise { - await this.clearSessionButton.waitForEnabled({ - timeout: 5000, - }); - await this.clearSessionButton.click(); - } - - async goBack(): Promise { - await this.backButton.waitForEnabled({ - timeout: 5000, - }); - await this.backButton.click(); - } - - async connectAndSign(): Promise { - await this.connectAndSignButton.waitForEnabled({ - timeout: 5000, - }); - await this.connectAndSignButton.click(); - } - - async connectWithRequest(): Promise { - await this.connectWithRequestButton.waitForEnabled({ - timeout: 5000, - }); - await this.connectWithRequestButton.click(); - } - - async batchSigning(): Promise { - await this.batchSigningButton.waitForEnabled({ - timeout: 5000, - }); - await this.batchSigningButton.click(); - } - - async batchSigning2(): Promise { - await this.batchSigningButton2.waitForEnabled({ - timeout: 5000, - }); - await this.batchSigningButton2.click(); - } - - async terminate(): Promise { - await this.terminateButton.waitForEnabled({ - timeout: 5000, - }); - await this.terminateButton.click(); - } - - async isDappConnected(): Promise { - throw new Error('Not implemented'); - } -} - -const androidSDKDappScreen = new AndroidSDKDappScreen(); -export default androidSDKDappScreen; diff --git a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts b/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts deleted file mode 100644 index a9976a03e..000000000 --- a/e2e/src/screens/Dapps/CreateReactAppDappScreen.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { getSelectorForPlatform } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@util/Selectors'; - -class CreateReactAppDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Connect"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Connect"`]', - ), - }), - ); - } - - get connectAndSignButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Connect w/ Sign"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', - ), - }), - ); - } - - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Terminate"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Terminate"`]', - ), - }), - ); - } - - get personalSignButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="personal_sign"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "personal_sign"`]', - ), - }), - ); - } - - get signTypedDataV4Button(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="eth_signTypedData_v4"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "eth_signTypedData_v4"`]', - ), - }), - ); - } - - get sendTransactionButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Send transaction"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Send transaction"`]', - ), - }), - ); - } - - async connect(): Promise { - await this.connectButton.click(); - } - - async signTypedDataV4(): Promise { - await this.signTypedDataV4Button.click(); - } - - async personalSign(): Promise { - await this.personalSignButton.click(); - } - - async sendTransaction(): Promise { - await this.sendTransactionButton.click(); - } - - async terminate(): Promise { - await this.terminateButton.click(); - } - - async isDappConnected(): Promise { - return !(await this.terminateButton.isDisplayed()); - } -} - -const createReactAppDappScreen = new CreateReactAppDappScreen(); -export default createReactAppDappScreen; diff --git a/e2e/src/screens/Dapps/DevnextJSDappScreen.ts b/e2e/src/screens/Dapps/DevnextJSDappScreen.ts deleted file mode 100644 index 7398e668a..000000000 --- a/e2e/src/screens/Dapps/DevnextJSDappScreen.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { visibilityOf } from 'wdio-wait-for'; -import { getSelectorForPlatform, scrollToElement } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@util/Selectors'; - -class DevnextDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.view.View[@text="Connect wallet"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Connect wallet"', - ), - }), - ); - } - - // TODO: Add iOS Locator when adding the personal_sign test case - get personalSignButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="personal_sign"]', - ), - }), - ); - } - - get signButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Sign"]', - ), - iosSelector: IOSSelector.by().predicateString('label == "Sign"'), - }), - ); - } - - // Currently there's no terminate in create-react-dapp - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Terminate"]', - ), - iosSelector: IOSSelector.by().predicateString('label == "Terminate"'), - }), - ); - } - - // TODO: - // Improve devnext dapp to have a better way to locate the connected status - // status - get connectedStatus(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="YES"]', - ), - iosSelector: IOSSelector.by().predicateString('name == "YES"'), - }), - ); - } - - async connect(): Promise { - await this.connectButton.click(); - } - - async sign(): Promise { - await this.scrollToSignButton(); - await this.signButton.click(); - } - - async terminate(): Promise { - await scrollToElement(this.terminateButton); - await this.terminateButton.click(); - } - - async scrollToSignButton(): Promise { - await this.signButton.scrollIntoView(); - } - - async tapPersonalSignButton(): Promise { - await scrollToElement(this.personalSignButton); - await this.personalSignButton.click(); - } - - async isDappConnected(): Promise { - const isConnected = await driver.waitUntil( - visibilityOf(this.connectedStatus), - { - timeout: 10000, - timeoutMsg: 'Dapp is not connected!', - }, - ); - return Boolean(isConnected); - } -} - -const devnextJSDappScreen = new DevnextDappScreen(); -export default devnextJSDappScreen; diff --git a/e2e/src/screens/Dapps/NextJSDappScreen.ts b/e2e/src/screens/Dapps/NextJSDappScreen.ts deleted file mode 100644 index 2db1f4bf5..000000000 --- a/e2e/src/screens/Dapps/NextJSDappScreen.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { getSelectorForPlatform } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@util/Selectors'; - -class NextJSDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().uiAutomatorAndText('Connect'), - iosSelector: IOSSelector.by().predicateString('label == "Connect"'), - }), - ); - } - - get signButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Sign"]', - ), - iosSelector: IOSSelector.by().predicateString('label == "Sign"'), - }), - ); - } - - // Currently there's no terminate in create-react-dapp - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Terminate"]', - ), - iosSelector: IOSSelector.by().predicateString('label == "Terminate"'), - }), - ); - } - - async connect(): Promise { - await this.connectButton.click(); - } - - async sign(): Promise { - await this.scrollToSignButton(); - await this.signButton.click(); - } - - async terminate(): Promise { - await this.terminateButton.click(); - } - - async scrollToSignButton(): Promise { - await this.signButton.scrollIntoView(); - } - - async isDappConnected(): Promise { - return !(await this.terminateButton.isDisplayed()); - } -} - -const nextJSDappScreen = new NextJSDappScreen(); -export default nextJSDappScreen; diff --git a/e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts b/e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts deleted file mode 100644 index c00fc53c4..000000000 --- a/e2e/src/screens/Dapps/PlaygroundNextDappScreen.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; -import { visibilityOf } from 'wdio-wait-for'; - -import { getSelectorForPlatform } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@util/Selectors'; - -class PlaygroundNextDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Connect MetaMask"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Connect MetaMask"', - ), - }), - ); - } - - get addressContainer(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.view.View', // TODO - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeStaticText[`name == "Address:"`]', - ), - }), - ); - } - - get connectAndSignButton(): ChainablePromiseElement { - throw new Error('Not implemented'); - } - - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Terminate Connection"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Terminate Connection"', - ), - }), - ); - } - - get personalSignButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Personal Sign"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Personal Sign"', - ), - }), - ); - } - - get signTypedDataV4Button(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="eth_signTypedData_v4"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "eth_signTypedData_v4"`]', - ), - }), - ); - } - - get sendTransactionButton(): ChainablePromiseElement { - throw new Error('Not implemented'); - } - - async connect(): Promise { - await this.connectButton.click(); - } - - async signTypedDataV4(): Promise { - await this.signTypedDataV4Button.click(); - } - - async personalSign(): Promise { - await this.personalSignButton.click(); - } - - async sendTransaction(): Promise { - await this.sendTransactionButton.click(); - } - - async terminate(): Promise { - await this.terminateButton.click(); - } - - async isDappConnected(): Promise { - const isAddressContainerDisplayed = await driver.waitUntil( - visibilityOf(this.addressContainer), - { - timeout: 10000, - }, - ); - return isAddressContainerDisplayed; - } - - async tapPersonalSignButton(): Promise { - await this.personalSignButton.click(); - } -} - -const playgroundNextDappScreen = new PlaygroundNextDappScreen(); -export default playgroundNextDappScreen; diff --git a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts b/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts deleted file mode 100644 index 5301ba249..000000000 --- a/e2e/src/screens/Dapps/ReactMetamaskButtonDappScreen.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { AndroidSelector, IOSSelector } from '@util/Selectors'; -import { getSelectorForPlatform } from '@util/Utils'; - -class ReactMetamaskButtonDappScreen { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Connect wallet"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', - ), - }), - ); - } - - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Terminate"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Terminate"`]', - ), - }), - ); - } - - async connect(): Promise { - await this.connectButton.click(); - } - - async terminate(): Promise { - await this.terminateButton.click(); - } - - async isDappConnected(): Promise { - throw new Error('Not implemented'); - } -} - -const createReactDappScreen = new ReactMetamaskButtonDappScreen(); -export default createReactDappScreen; diff --git a/e2e/src/screens/Dapps/ReactNativeDappScreen.ts b/e2e/src/screens/Dapps/ReactNativeDappScreen.ts deleted file mode 100644 index eb43de74c..000000000 --- a/e2e/src/screens/Dapps/ReactNativeDappScreen.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { getSelectorForPlatform } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@util/Selectors'; - -class ReactNativeDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="CONNECT"]', - ), - iosSelector: IOSSelector.by().predicateString('label == "Connect"'), - }), - ); - } - - get signButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="SIGN"]', - ), - iosSelector: IOSSelector.by().predicateString('label == "Sign"'), - }), - ); - } - - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Terminate"]', - ), - iosSelector: IOSSelector.by().predicateString('label == "Terminate"'), - }), - ); - } - - async connect(): Promise { - await this.connectButton.click(); - } - - async sign(): Promise { - await this.signButton.click(); - } - - async terminate(): Promise { - await this.terminateButton.click(); - } - - async isDappConnected(): Promise { - throw new Error('Not implemented'); - } -} - -const reactNativeDappScreen = new ReactNativeDappScreen(); -export default reactNativeDappScreen; diff --git a/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts b/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts deleted file mode 100644 index 67d0cf76a..000000000 --- a/e2e/src/screens/Dapps/SdkPlaygroundDappScreen.ts +++ /dev/null @@ -1,293 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import Gestures from '@util/Gestures'; -import { AndroidSelector, IOSSelector } from '@util/Selectors'; -import { getSelectorForPlatform } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; - -class SdkPlaygroundDappScreen implements Dapp { - get demoProviderButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.TextView[@text="Demo Provider"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Demo Provider" AND label == "Demo Provider" AND value == "Demo Provider"', - ), - }), - ); - } - - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Connect"]', - ), - iosSelector: IOSSelector.by().predicateString('name == "Connect"'), - }), - ); - } - - get personalSignButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="personal_sign"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "personal_sign"', - ), - }), - ); - } - - get signTypedDataV4Button(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="eth_signTypedData_v4"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "eth_signTypedData_v4"', - ), - }), - ); - } - - get sendTransactionButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Send transaction"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Send transaction"', - ), - }), - ); - } - - get sendBatchRpcCallsButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Chain RPC Calls"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Chain RPC Calls"', - ), - }), - ); - } - - get switchToPolygonButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Switch to Polygon"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Switch to Polygon"', - ), - }), - ); - } - - get switchToGoerliButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Switch to Goerli"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Switch to Goerli"', - ), - }), - ); - } - - get chainSwitchAndSignAndSwitchBackButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Chain Switch + sign + switch back"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Chain Switch + sign + switch back"', - ), - }), - ); - } - - get chainSwitchAndSignAndSendTxButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Chain sendTransaction + personal_sign + sendTransaction"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Chain sendTransaction + personal_sign + sendTransaction"', - ), - }), - ); - } - - // Currently there's no terminate in create-react-dapp - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Terminate"]', - ), - iosSelector: IOSSelector.by().predicateString('name == "Terminate"'), - }), - ); - } - - get dropdownSettingsArrowButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.view.View[@resource-id="root"]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[1]/android.view.View[1]/android.view.View[3]/android.view.View/android.view.View[3]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "" AND label == "" AND type == "XCUIElementTypeButton"', - ), - }), - ); - } - - get toggleDeeplinkButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.view.View[@text="Toggle Deeplink"]', - ), - iosSelector: IOSSelector.by().predicateString( - 'name == "Toggle Deeplink"', - ), - }), - ); - } - - async connect(): Promise { - await this.connectButton.waitForEnabled({ - timeout: 10000, - }); - await this.connectButton.click(); - } - - async tapDropdownSettingsArrowButton(): Promise { - await this.dropdownSettingsArrowButton.waitForEnabled({ - timeout: 10000, - }); - await this.dropdownSettingsArrowButton.click(); - } - - async tapToggleDeeplinkButton(): Promise { - await this.toggleDeeplinkButton.waitForEnabled({ - timeout: 10000, - }); - await this.toggleDeeplinkButton.click(); - } - - async signTypedDataV4(): Promise { - await this.scrollToElement(this.signTypedDataV4Button); - await this.signTypedDataV4Button.waitForEnabled({ - timeout: 10000, - }); - await this.signTypedDataV4Button.click(); - } - - async personalSign(): Promise { - await this.scrollToElement(this.personalSignButton); - await this.personalSignButton.waitForEnabled({ - timeout: 10000, - }); - await this.personalSignButton.click(); - } - - async sendTransaction(): Promise { - await this.scrollToElement(this.sendTransactionButton); - await this.sendTransactionButton.waitForEnabled({ - timeout: 10000, - }); - await this.sendTransactionButton.click(); - } - - async tapDemoProviderButton(): Promise { - await this.scrollToElement(this.demoProviderButton); - await this.demoProviderButton.waitForEnabled({ - timeout: 10000, - }); - await this.demoProviderButton.click(); - } - - async terminate(): Promise { - await this.scrollToElement(this.terminateButton); - await this.terminateButton.waitForEnabled({ - timeout: 10000, - }); - await this.terminateButton.click(); - } - - async switchToGoerliNetwork(): Promise { - await this.scrollToElement(this.switchToGoerliButton); - await this.switchToGoerliButton.waitForEnabled({ - timeout: 10000, - }); - await this.switchToGoerliButton.click(); - } - - async switchToPolygonNetwork(): Promise { - await this.scrollToElement(this.switchToPolygonButton); - await this.switchToPolygonButton.waitForEnabled({ - timeout: 10000, - }); - await this.switchToPolygonButton.click(); - } - - async chainSwitchAndSignAndSendTx(): Promise { - await this.scrollToElement(this.chainSwitchAndSignAndSendTxButton); - await this.chainSwitchAndSignAndSendTxButton.waitForEnabled({ - timeout: 10000, - }); - await this.chainSwitchAndSignAndSendTxButton.click(); - } - - async sendBatchRpcCalls(): Promise { - await this.scrollToElement(this.sendBatchRpcCallsButton); - await this.sendBatchRpcCallsButton.waitForEnabled({ - timeout: 10000, - }); - await this.sendBatchRpcCallsButton.click(); - } - - async chainSwitchAndSignAndSwitchBack(): Promise { - await this.scrollToElement(this.chainSwitchAndSignAndSwitchBackButton); - await this.chainSwitchAndSignAndSwitchBackButton.waitForEnabled({ - timeout: 10000, - }); - await this.chainSwitchAndSignAndSwitchBackButton.click(); - } - - async scrollToElement(element: ChainablePromiseElement): Promise { - if (driver.isAndroid) { - let isMetaMaskLinksButtonDisplayed = await element.isDisplayed(); - - while (!isMetaMaskLinksButtonDisplayed) { - await Gestures.swipeByPercentage({ x: 50, y: 90 }, { x: 50, y: 5 }); - isMetaMaskLinksButtonDisplayed = await element.isDisplayed(); - } - } - } - - async isDappConnected(): Promise { - throw new Error('Not implemented'); - } -} - -const sdkPlaygroundDappScreen = new SdkPlaygroundDappScreen(); -export default sdkPlaygroundDappScreen; diff --git a/e2e/src/screens/Dapps/TestDappScreen.ts b/e2e/src/screens/Dapps/TestDappScreen.ts deleted file mode 100644 index 6c619e1cc..000000000 --- a/e2e/src/screens/Dapps/TestDappScreen.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { driver } from '@wdio/globals'; -import { Dapp } from '@screens/interfaces/Dapp'; -import Gestures from '@util/Gestures'; -import { getSelectorForPlatform } from '@util/Utils'; -import { AndroidSelector, IOSSelector } from '@util/Selectors'; - -class TestDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@resource-id="connectButton"]', - ), - iosSelector: IOSSelector.by().predicateString('name == "CONNECT"'), - }), - ); - } - - get personalSignButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@resource-id="personalSign"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "SIGN"`][2]', - ), - }), - ); - } - - get signTypedDataV3Button(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@resource-id="signTypedDataV3"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "SIGN"`][4]', - ), - }), - ); - } - - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@resource-id="terminateButton"]', - ), - iosSelector: IOSSelector.by().predicateString('name == "DISCONNECT"'), - }), - ); - } - - async connect(): Promise { - await this.connectButton.click(); - } - - async signTypedDataV3(): Promise { - await this.scrollToSignTypedDataV3Button(); - await this.signTypedDataV3Button.click(); - } - - async personalSign(): Promise { - await this.scrollToPersonalSignButton(); - await this.personalSignButton.click(); - } - - async terminate(): Promise { - await this.terminateButton.click(); - } - - async scrollToSignTypedDataV3Button(): Promise { - let isButtonDisplayed = await this.signTypedDataV3Button.isDisplayed(); - - while (!isButtonDisplayed) { - if (driver.isAndroid) { - await Gestures.swipeByPercentage({ x: 50, y: 90 }, { x: 50, y: 5 }); - } else { - await Gestures.swipeByPercentage({ x: 50, y: 50 }, { x: 50, y: 5 }); - } - - isButtonDisplayed = await this.signTypedDataV3Button.isDisplayed(); - } - } - - async scrollToPersonalSignButton(): Promise { - let isButtonDisplayed = await this.personalSignButton.isDisplayed(); - - while (!isButtonDisplayed) { - if (driver.isAndroid) { - await Gestures.swipeByPercentage({ x: 50, y: 90 }, { x: 50, y: 5 }); - } else { - await Gestures.swipeByPercentage({ x: 50, y: 50 }, { x: 50, y: 5 }); - } - - isButtonDisplayed = await this.personalSignButton.isDisplayed(); - } - } - - async isDappConnected(): Promise { - throw new Error('Not implemented'); - } -} - -const testDappScreen = new TestDappScreen(); -export default testDappScreen; diff --git a/e2e/src/screens/Dapps/UnityDappScreen.ts b/e2e/src/screens/Dapps/UnityDappScreen.ts deleted file mode 100644 index 08d9f01b8..000000000 --- a/e2e/src/screens/Dapps/UnityDappScreen.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { UnityDappElement } from '@util/types'; -import Gestures from '@util/Gestures'; -import { Dapp } from '@screens/interfaces/Dapp'; - -class UnityDappScreen implements Dapp { - get connectButton(): UnityDappElement { - return new UnityDappElement({ x: 50.24, y: 62.63 }); - } - - get terminateButton(): UnityDappElement { - return new UnityDappElement({ x: 27.29, y: 66.66 }); - } - - get signButton(): UnityDappElement { - return new UnityDappElement({ x: 0, y: 0 }); // TODO - } - - async connect(): Promise { - await Gestures.tapOnCoordinatesByPercentage({ - x: this.connectButton.xPercentage, - y: this.connectButton.yPercentage, - }); - } - - async sign(): Promise { - await Gestures.tapOnCoordinatesByPercentage({ - x: this.signButton.xPercentage, - y: this.signButton.yPercentage, - }); - } - - async terminate(): Promise { - await Gestures.tapOnCoordinatesByPercentage({ - x: this.terminateButton.xPercentage, - y: this.terminateButton.yPercentage, - }); - } - - async isDappConnected(): Promise { - throw new Error('Not implemented'); - } -} - -const unityDappScreen = new UnityDappScreen(); -export default unityDappScreen; diff --git a/e2e/src/screens/Dapps/VueJSDappScreen.ts b/e2e/src/screens/Dapps/VueJSDappScreen.ts deleted file mode 100644 index cbb6a832f..000000000 --- a/e2e/src/screens/Dapps/VueJSDappScreen.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { getSelectorForPlatform } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@util/Selectors'; - -class VueJSDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Connect"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', - ), - }), - ); - } - - get connectAndSignButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Connect w/ sign"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeStaticText[`name == "Connect wallet"`]', - ), - }), - ); - } - - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="TERMINATE"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Terminate"`]', - ), - }), - ); - } - - get personalSignButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="personal_sign"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "personal_sign"`]', - ), - }), - ); - } - - get signTypedDataV4Button(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="eth_signTypedData_v4"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "eth_signTypedData_v4"`]', - ), - }), - ); - } - - get sendTransactionButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Send transaction"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Send transaction"`]', - ), - }), - ); - } - - get switchToPolygonButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Switch to Polygon"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Send transaction"`]', - ), - }), - ); - } - - get switchToMainnetButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Switch to Mainnet"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Send transaction"`]', - ), - }), - ); - } - - async connect(): Promise { - await this.connectButton.click(); - } - - async connectAndSign(): Promise { - await this.connectAndSignButton.click(); - } - - async terminate(): Promise { - await this.terminateButton.click(); - } - - async signTypedDataV4(): Promise { - await this.signTypedDataV4Button.click(); - } - - async personalSign(): Promise { - await this.personalSignButton.click(); - } - - async sendTransaction(): Promise { - await this.sendTransactionButton.click(); - } - - async switchToPolygonNetwork(): Promise { - await this.switchToPolygonButton.click(); - } - - async switchToMainnetNetwork(): Promise { - await this.switchToMainnetButton.click(); - } - - async isDappConnected(): Promise { - throw new Error('Not implemented'); - } -} - -const vueJSDappScreen = new VueJSDappScreen(); -export default vueJSDappScreen; diff --git a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts b/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts deleted file mode 100644 index 231687e90..000000000 --- a/e2e/src/screens/Dapps/Web3OnBoardDappScreen.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { getSelectorForPlatform } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; -import { AndroidSelector, IOSSelector } from '@util/Selectors'; - -class Web3OnBoardDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="connect"]', - ), - iosSelector: IOSSelector.by().predicateString('name == "connect"'), - }), - ); - } - - get metaMaskConnectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="MetaMask"]', - ), - iosSelector: IOSSelector.by().predicateString('name == "MetaMask"'), - }), - ); - } - - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="disconnect"]', - ), - iosSelector: IOSSelector.by().classChain( - '**/XCUIElementTypeButton[`name == "Terminate"`]', - ), - }), - ); - } - - get signButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - androidSelector: AndroidSelector.by().xpath( - '//android.widget.Button[@text="Test Sign"]', - ), - iosSelector: IOSSelector.by().predicateString('name == "Test Sign"'), - }), - ); - } - - async connect(): Promise { - await this.connectButton.waitForEnabled({ - timeout: 10000, - }); - await this.connectButton.click(); - } - - async tapMetaMaskConnectButton(): Promise { - await this.metaMaskConnectButton.waitForEnabled({ - timeout: 10000, - }); - await this.metaMaskConnectButton.click(); - } - - async terminate(): Promise { - await this.terminateButton.waitForEnabled({ - timeout: 10000, - }); - await this.terminateButton.click(); - } - - async sign(): Promise { - await this.signButton.waitForEnabled({ - timeout: 10000, - }); - await this.signButton.click(); - } - - async isDappConnected(): Promise { - throw new Error('Not implemented'); - } -} - -const web3OnBoardDappScreen = new Web3OnBoardDappScreen(); -export default web3OnBoardDappScreen; diff --git a/e2e/src/screens/Dapps/iOSNativeDappScreen.ts b/e2e/src/screens/Dapps/iOSNativeDappScreen.ts deleted file mode 100644 index 8091c6ad4..000000000 --- a/e2e/src/screens/Dapps/iOSNativeDappScreen.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { ChainablePromiseElement } from 'webdriverio'; - -import { getSelectorForPlatform } from '@util/Utils'; -import { Dapp } from '@screens/interfaces/Dapp'; -import { IOSSelector } from '@util/Selectors'; - -class IOSNNativeDappScreen implements Dapp { - get connectButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - iosSelector: IOSSelector.by().predicateString( - 'label == "Connect to MetaMask"', - ), - }), - ); - } - - get signMenuButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - iosSelector: IOSSelector.by().predicateString( - 'label == "Sign" AND name == "Sign" AND type == "XCUIElementTypeButton"', - ), - }), - ); - } - - get signButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - iosSelector: IOSSelector.by().predicateString( - 'label == "Sign message"', - ), - }), - ); - } - - get terminateButton(): ChainablePromiseElement { - return $( - getSelectorForPlatform({ - iosSelector: IOSSelector.by().predicateString('label == "Terminate"'), - }), - ); - } - - async connect(): Promise { - await this.connectButton.click(); - } - - async sign(): Promise { - await this.signMenuButton.click(); - await this.signButton.click(); - } - - async terminate(): Promise { - await this.terminateButton.click(); - } - - async isDappConnected(): Promise { - throw new Error('Not implemented'); - } -} - -const iosNativeDappScreen = new IOSNNativeDappScreen(); -export default iosNativeDappScreen; From 3b08dcf6857c593a9df9d1acfd9f70677b7aa8a3 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Mon, 5 May 2025 22:45:27 +0100 Subject: [PATCH 15/20] feat: adds context switching feature to improve flakiness --- .../Dapps/MetaMaskSDKTestDappScreen.ts | 147 ++++++++++++++++++ .../specs/metamask-connector/web_dapp.spec.ts | 57 +++---- 2 files changed, 171 insertions(+), 33 deletions(-) create mode 100644 e2e/src/screens/Dapps/MetaMaskSDKTestDappScreen.ts diff --git a/e2e/src/screens/Dapps/MetaMaskSDKTestDappScreen.ts b/e2e/src/screens/Dapps/MetaMaskSDKTestDappScreen.ts new file mode 100644 index 000000000..946f8a042 --- /dev/null +++ b/e2e/src/screens/Dapps/MetaMaskSDKTestDappScreen.ts @@ -0,0 +1,147 @@ +import { ChainablePromiseElement } from 'webdriverio'; + +import { + getSelectorForPlatform, + scrollToElement, + getWebViewElementText, +} from '@util/Utils'; +import { Dapp } from '@screens/interfaces/Dapp'; +import { AndroidSelector, IOSSelector } from '@util/Selectors'; + +class MetaMaskSDKTestDappScreen implements Dapp { + private connectionStatusLocator = '[data-testid="connection-status"]'; + + get connectButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//*[@data-testid="connect-button"]', + ), + iosSelector: IOSSelector.by().xpath( + '//*[@data-testid="connect-button"]', + ), + }), + ); + } + + get terminateButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//*[@data-testid="terminate-button"]', + ), + iosSelector: IOSSelector.by().xpath( + '//*[@data-testid="terminate-button"]', + ), + }), + ); + } + + get switchToLineaSepoliaButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//*[@data-testid="switch-linea-button"]', + ), + iosSelector: IOSSelector.by().xpath( + '//*[@data-testid="switch-linea-button"]', + ), + }), + ); + } + + get switchToMainnetButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//*[@data-testid="switch-mainnet-button"]', + ), + iosSelector: IOSSelector.by().xpath( + '//*[@data-testid="switch-mainnet-button"]', + ), + }), + ); + } + + get switchToPolygonButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//*[@data-testid="switch-polygon-button"]', + ), + iosSelector: IOSSelector.by().xpath( + '//*[@data-testid="switch-polygon-button"]', + ), + }), + ); + } + + get clearUIStateButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//*[@data-testid="clear-ui-buttonn"]', + ), + iosSelector: IOSSelector.by().xpath( + '//*[@data-testid="clear-ui-button"]', + ), + }), + ); + } + + get personalSignButton(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + '//*[@data-testid="personal-sign-button"]', + ), + iosSelector: IOSSelector.by().xpath( + '//*[@data-testid="personal-sign-button"]', + ), + }), + ); + } + + get connectionStatusContainer(): ChainablePromiseElement { + return $( + getSelectorForPlatform({ + androidSelector: AndroidSelector.by().xpath( + this.connectionStatusLocator, + ), + iosSelector: IOSSelector.by().xpath(this.connectionStatusLocator), + }), + ); + } + + async connect(): Promise { + await this.connectButton.click(); + } + + async terminate(): Promise { + await scrollToElement(this.terminateButton); + await this.terminateButton.click(); + } + + async tapPersonalSignButton(): Promise { + await scrollToElement(this.personalSignButton); + await this.personalSignButton.click(); + } + + async isDappConnected(): Promise { + const maxRetries = 5; + const retryInterval = 1000; + for (let i = 0; i < maxRetries; i++) { + const connectionStatus = await getWebViewElementText( + this.connectionStatusLocator, + ); + if (connectionStatus.includes('Yes')) { + return true; + } + await driver.pause(retryInterval); + } + return false; + } +} + +const metaMaskSDKTestDappScreen = new MetaMaskSDKTestDappScreen(); +export default metaMaskSDKTestDappScreen; diff --git a/e2e/test/specs/metamask-connector/web_dapp.spec.ts b/e2e/test/specs/metamask-connector/web_dapp.spec.ts index fcb41ef18..d42714536 100644 --- a/e2e/test/specs/metamask-connector/web_dapp.spec.ts +++ b/e2e/test/specs/metamask-connector/web_dapp.spec.ts @@ -6,23 +6,24 @@ import { launchMetaMaskWithFixture, navigateToWebMobileDapp, refreshBrowser, + switchToContext, } from '@util/Utils'; import ConnectModalComponent from '@screens/MetaMask/components/ConnectModalComponent'; -import PersonalSignConfirmationComponent from '@screens/MetaMask/components/PersonalSignConfirmationComponent'; import LockScreen from '@screens/MetaMask/LockScreen'; -import PlaygroundNextDappScreen from '@screens/Dapps/PlaygroundNextDappScreen'; +import MetaMaskSDKTestDappScreen from '@screens/Dapps/MetaMaskSDKTestDappScreen'; import { + Contexts, METAMASK_BUNDLE_ID, WALLET_PASSWORD, } from '../../../src/util/Constants'; -let playgroundNextDappUrl: string; +let metamaskSDKTestDappUrl: string; const fixtureServer = new FixtureServer(); describe('MetaMask Connector Playground dapp', () => { before(async () => { - playgroundNextDappUrl = process.env.PLAYGROUND_NEXT_DAPP_URL ?? ''; - expect(playgroundNextDappUrl.length).toBeGreaterThan(0); + metamaskSDKTestDappUrl = process.env.METAMASK_TEST_DAPP_URL ?? ''; + expect(metamaskSDKTestDappUrl.length).toBeGreaterThan(0); await launchMetaMaskWithFixture(fixtureServer, METAMASK_BUNDLE_ID); await LockScreen.unlockMM(WALLET_PASSWORD); @@ -30,47 +31,37 @@ describe('MetaMask Connector Playground dapp', () => { it('connect with a cold start state', async () => { await navigateToWebMobileDapp( - playgroundNextDappUrl, - PlaygroundNextDappScreen, + metamaskSDKTestDappUrl, + MetaMaskSDKTestDappScreen, ); // Start with a cold start await killApp(METAMASK_BUNDLE_ID); await refreshBrowser(); - await PlaygroundNextDappScreen.connect(); - await deviceOpenDeeplinkWithMetaMask(); - - await LockScreen.unlockMM(WALLET_PASSWORD); - - await ConnectModalComponent.tapConnectApproval(); - - await goBack(); + await switchToContext({ + context: Contexts.WEBVIEW, + dappUrl: metamaskSDKTestDappUrl, + }); - expect(await PlaygroundNextDappScreen.isDappConnected()).toBe(true); - }); + await MetaMaskSDKTestDappScreen.connect(); - // Boilerplate for the next test - it('call personal_sign with a cold start state', async () => { - const personalSignMessage = 'Hello, world!'; + await switchToContext({ + context: Contexts.NATIVE, + }); - // Start with a cold start - await killApp(METAMASK_BUNDLE_ID); - - await PlaygroundNextDappScreen.tapPersonalSignButton(); await deviceOpenDeeplinkWithMetaMask(); - await LockScreen.unlockMM(WALLET_PASSWORD); - expect( - await PersonalSignConfirmationComponent.isPersonalSignComponentDisplayed(), - ).toBe(true); + await LockScreen.unlockMM(WALLET_PASSWORD); - expect( - await PersonalSignConfirmationComponent.messageText.getText(), - ).toContain(personalSignMessage); + await ConnectModalComponent.tapConnectApproval(); - await PersonalSignConfirmationComponent.tapSignButton(); await goBack(); - // TODO: Assert personalSign contents + await switchToContext({ + context: Contexts.WEBVIEW, + dappUrl: metamaskSDKTestDappUrl, + }); + + expect(await MetaMaskSDKTestDappScreen.isDappConnected()).toBe(true); }); }); From 15dd9142bc8e90e7400870fecb56bc8bb988d9da Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Mon, 5 May 2025 22:45:57 +0100 Subject: [PATCH 16/20] feat: add new dapp requirements --- e2e/src/screens/interfaces/Dapp.ts | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/e2e/src/screens/interfaces/Dapp.ts b/e2e/src/screens/interfaces/Dapp.ts index 1f17a9281..c88f6ca71 100644 --- a/e2e/src/screens/interfaces/Dapp.ts +++ b/e2e/src/screens/interfaces/Dapp.ts @@ -5,19 +5,25 @@ export type Dapp = { terminateButton: ChainablePromiseElement; - signTypedDataV3Button?: ChainablePromiseElement; - - signTypedDataV4Button?: ChainablePromiseElement; - sendTransactionButton?: ChainablePromiseElement; personalSignButton?: ChainablePromiseElement; + clearUIStateButton?: ChainablePromiseElement; + + switchToLineaSepoliaButton?: ChainablePromiseElement; + + switchToMainnetButton?: ChainablePromiseElement; + + switchToPolygonButton?: ChainablePromiseElement; + connect(): Promise; - signTypedDataV3?(): Promise; - signTypedDataV4?(): Promise; - personalSign?(): Promise; + terminate(): Promise; sendTransaction?(): Promise; + personalSign?(): Promise; + clearUIState?(): Promise; + switchToLineaSepolia?(): Promise; + switchToMainnet?(): Promise; + switchToPolygon?(): Promise; isDappConnected(): Promise; - terminate(): Promise; }; From d039ce138f3acdcabc44e4233499452930932616 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Mon, 5 May 2025 22:48:09 +0100 Subject: [PATCH 17/20] feat: cleans wdio configs --- e2e/.dapps.env.example | 1 + .../browserstack/wdio.ios.app.browserstack.conf.ts | 9 +++++++-- .../browserstack/wdio.shared.browserstack.conf.ts | 3 --- e2e/test/configs/local/wdio.ios.app.local.conf.ts | 3 +++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/e2e/.dapps.env.example b/e2e/.dapps.env.example index 103a9c1d3..ad05628f3 100644 --- a/e2e/.dapps.env.example +++ b/e2e/.dapps.env.example @@ -1,2 +1,3 @@ DEVNEXT_DAPP_URL=http://192.111.111.111:3333/demo PLAYGROUND_DAPP_URL=http://192.111.111.111:3333/demo +METAMASK_TEST_DAPP_URL=http://192.111.111.111:3333 diff --git a/e2e/test/configs/browserstack/wdio.ios.app.browserstack.conf.ts b/e2e/test/configs/browserstack/wdio.ios.app.browserstack.conf.ts index 92c847ff5..ffad8c637 100644 --- a/e2e/test/configs/browserstack/wdio.ios.app.browserstack.conf.ts +++ b/e2e/test/configs/browserstack/wdio.ios.app.browserstack.conf.ts @@ -13,8 +13,6 @@ config.capabilities = [ 'appium:platformVersion': '17.3', 'appium:automationName': 'XCUITest', 'appium:app': process.env.APP_PATH || '', - // Removing the otherApps capability for now while we work on the e2e refactor - // 'appium:otherApps': getOtherAppsPath(), // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore 'appium:bundleId': process.env.BUNDLE_ID, @@ -25,12 +23,19 @@ config.capabilities = [ 'appium:fullReset': true, 'appium:settings[snapshotMaxDepth]': 62, 'appium:settings[customSnapshotTimeout]': 50000, + 'appium:includeSafariInWebviews': true, + 'appium:fullContextList': true, + 'appium:webviewConnectTimeout': 9000, 'bstack:options': { deviceName: 'iPhone 15 Pro Max', platformVersion: '17.3', platformName: 'ios', realMobile: true, interactiveDebugging: true, + networkLogs: true, + networkLogsOptions: { + captureContent: true, + }, }, } as Capabilities.RemoteCapability, ]; diff --git a/e2e/test/configs/browserstack/wdio.shared.browserstack.conf.ts b/e2e/test/configs/browserstack/wdio.shared.browserstack.conf.ts index f3597fea1..e9e0f18dc 100644 --- a/e2e/test/configs/browserstack/wdio.shared.browserstack.conf.ts +++ b/e2e/test/configs/browserstack/wdio.shared.browserstack.conf.ts @@ -13,9 +13,6 @@ config.services = (config.services ? config.services : []).concat([ buildName: 'SDK e2e PR regression', }, browserstackLocal: true, - opts: { - forceLocal: 'true', - }, }, ], ]); diff --git a/e2e/test/configs/local/wdio.ios.app.local.conf.ts b/e2e/test/configs/local/wdio.ios.app.local.conf.ts index f412f8073..b4c89566d 100644 --- a/e2e/test/configs/local/wdio.ios.app.local.conf.ts +++ b/e2e/test/configs/local/wdio.ios.app.local.conf.ts @@ -34,6 +34,9 @@ config.capabilities = [ 'appium:fullReset': false, 'appium:settings[snapshotMaxDepth]': 62, 'appium:settings[customSnapshotTimeout]': 50000, + 'appium:includeSafariInWebviews': true, + 'appium:chromeDriverExecutable': '', + 'appium:chromedriverAutodownload': true, // "appium:usePreinstalledWDA": true, // "appium:updatedWDABundleId": "io.metamask.mmsdk.chris.qa", // "appium:wdaLaunchTimeout": 120000, From 2f2bef827749c14eac9e90696576ae752056bd1e Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Mon, 5 May 2025 22:48:28 +0100 Subject: [PATCH 18/20] chore: updates locators --- .../screens/Android/ChromeBrowserScreen.ts | 10 ++- .../components/ConnectModalComponent.ts | 2 +- e2e/src/screens/iOS/SafariBrowserScreen.ts | 11 ++- e2e/src/util/Constants.ts | 5 ++ e2e/src/util/Utils.ts | 70 +++++++++++++++++++ 5 files changed, 89 insertions(+), 9 deletions(-) diff --git a/e2e/src/screens/Android/ChromeBrowserScreen.ts b/e2e/src/screens/Android/ChromeBrowserScreen.ts index 8aa1b97f4..e2d73dd86 100644 --- a/e2e/src/screens/Android/ChromeBrowserScreen.ts +++ b/e2e/src/screens/Android/ChromeBrowserScreen.ts @@ -4,7 +4,7 @@ import { MobileBrowser } from '@screens/interfaces/MobileBrowser'; import { Dapp } from '@screens/interfaces/Dapp'; import { getSelectorForPlatform } from '@util/Utils'; import { AndroidSelector } from '@util/Selectors'; -import { Browsers, WEB_DAPP_LOAD_ATTEMPTS } from '@util/Constants'; +import { Browsers } from '@util/Constants'; class ChromeBrowserScreen implements MobileBrowser { get urlAddressBar(): ChainablePromiseElement { @@ -108,7 +108,13 @@ class ChromeBrowserScreen implements MobileBrowser { await driver.pressKeyCode(66); } - await pageObject.terminate(); + if (pageObject) { + // pageObject will be used to determine if the page was loaded successfully + // once new test cases are added + console.log('ChromeBrowserScreen.goToAddress:: PageObject is not null'); + } + + // await pageObject.terminate(); } async tapSwitchTabsButton(): Promise { diff --git a/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts b/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts index d216a6f71..26e5ef60d 100644 --- a/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts +++ b/e2e/src/screens/MetaMask/components/ConnectModalComponent.ts @@ -43,8 +43,8 @@ class ConnectModalComponent { await this.connectApprovalButton.waitForEnabled({ timeout: 10000, }); - await driver.pause(2000); await this.connectApprovalButton.click(); + await driver.pause(1000); // Wait for the connection to be established } } diff --git a/e2e/src/screens/iOS/SafariBrowserScreen.ts b/e2e/src/screens/iOS/SafariBrowserScreen.ts index 80897fe4c..6688fcd2b 100644 --- a/e2e/src/screens/iOS/SafariBrowserScreen.ts +++ b/e2e/src/screens/iOS/SafariBrowserScreen.ts @@ -51,12 +51,11 @@ class SafariBrowserScreen implements MobileBrowser { // Trying to navigate directly to the address await driver.navigateTo(address); - // waits for the refresh button to be displayed meaning that the page is loaded - await this.refreshButton.waitForDisplayed({ - timeout: 10000, - }); - - await dappScreen.terminate(); + if (dappScreen) { + // pageObject will be used to determine if the page was loaded successfully + // once new test cases are added + console.log('SafariBrowserScreen.goToAddress:: dappScreen is not null'); + } } async launchBrowser(): Promise { diff --git a/e2e/src/util/Constants.ts b/e2e/src/util/Constants.ts index 3b5f2221c..ebd83aebe 100644 --- a/e2e/src/util/Constants.ts +++ b/e2e/src/util/Constants.ts @@ -6,6 +6,11 @@ export const Browsers = { CHROME: 'com.android.chrome', }; +export const Contexts = { + NATIVE: 'NATIVE_APP', + WEBVIEW: 'WEBVIEW', +}; + export const BrowsersActivity = { CHROME: 'com.google.android.apps.chrome.Main', }; diff --git a/e2e/src/util/Utils.ts b/e2e/src/util/Utils.ts index 674822418..51156db86 100644 --- a/e2e/src/util/Utils.ts +++ b/e2e/src/util/Utils.ts @@ -23,6 +23,7 @@ import { LOCALHOST, WALLET_PASSWORD, Browsers, + Contexts, } from './Constants'; import Gestures from './Gestures'; @@ -203,3 +204,72 @@ export const launchMetaMaskWithFixture = async ( console.log('MetaMask was loaded with fixtures!'); }; + +export const getWebViewElementText = async (locator: string) => { + const webviewElementText = await driver.executeScript( + `const element = document.querySelector('${locator}'); + return element ? element.innerText || element.textContent : '';`, + [], + ); + return webviewElementText; +}; + +export const switchToNativeContext = async () => { + const availableContexts = await driver.getContexts(); + const nativeContext = availableContexts.find( + (ctx) => (typeof ctx === 'string' ? ctx : ctx.id) === Contexts.NATIVE, + ); + try { + if (nativeContext) { + const contextId = + typeof nativeContext === 'string' ? nativeContext : nativeContext.id; + await driver.switchContext(contextId); + } else { + console.log('Native context not found in available contexts'); + } + } catch (error) { + console.log('Error switching to native context:', error); + } +}; + +export const switchToWebviewContext = async (dappUrl: string) => { + const availableContexts = await driver.getContexts(); + const webviewContext = availableContexts.find((context) => { + if (typeof context === 'string') { + return context.includes('WEBVIEW'); + } else if (typeof context === 'object' && context !== null) { + const contextUrl = context.url || ''; + return contextUrl.includes(dappUrl); + } + return false; + }); + + console.log('Selected webview context:', webviewContext); + + if (webviewContext) { + // Use the id property if it's an object, otherwise use the context directly + const contextId = + typeof webviewContext === 'object' ? webviewContext.id : webviewContext; + console.log(`Switching to context ID: ${contextId}`); + await driver.switchContext(contextId); + console.log('Successfully switched context'); + } else { + console.log('No matching webview context found'); + } +}; + +export const switchToContext = async ({ + context, + dappUrl, +}: { + context: (typeof Contexts)[keyof typeof Contexts]; + dappUrl?: string; +}) => { + if (context === Contexts.NATIVE) { + await switchToNativeContext(); + } else if (dappUrl) { + await switchToWebviewContext(dappUrl); + } else { + throw new Error('Invalid Context or Dapp URL provided'); + } +}; From ff2d85ad64119ddf06f5d628de47383d7daf98b5 Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Mon, 5 May 2025 22:50:25 +0100 Subject: [PATCH 19/20] chore: removes unused test dapp reference --- e2e/.dapps.env.example | 2 -- 1 file changed, 2 deletions(-) diff --git a/e2e/.dapps.env.example b/e2e/.dapps.env.example index ad05628f3..b9eb15ecb 100644 --- a/e2e/.dapps.env.example +++ b/e2e/.dapps.env.example @@ -1,3 +1 @@ -DEVNEXT_DAPP_URL=http://192.111.111.111:3333/demo -PLAYGROUND_DAPP_URL=http://192.111.111.111:3333/demo METAMASK_TEST_DAPP_URL=http://192.111.111.111:3333 From bdb24226b7f9157659ae8897ca4c33d67527ebaf Mon Sep 17 00:00:00 2001 From: Christopher Ferreira Date: Tue, 6 May 2025 12:08:52 +0100 Subject: [PATCH 20/20] feat: adds automatic context switching via helpers --- e2e/src/util/Utils.ts | 43 +++++++++++++++++++ .../specs/metamask-connector/web_dapp.spec.ts | 33 +++++--------- 2 files changed, 54 insertions(+), 22 deletions(-) diff --git a/e2e/src/util/Utils.ts b/e2e/src/util/Utils.ts index 51156db86..f07ad22d9 100644 --- a/e2e/src/util/Utils.ts +++ b/e2e/src/util/Utils.ts @@ -273,3 +273,46 @@ export const switchToContext = async ({ throw new Error('Invalid Context or Dapp URL provided'); } }; + +/** + * Executes actions in the mobile (native) context, handling the context switching automatically + * @param actionFn - The function containing actions to perform in the native context + * @returns The result of the action function + */ +export const withMobileAction = async ( + actionFn: () => Promise, +): Promise => { + // Switch to native context + await switchToContext({ + context: Contexts.NATIVE, + }); + + // Execute the mobile actions + const result = await actionFn(); + + // Return the result + return result; +}; + +/** + * Executes actions in the web context, handling the context switching automatically + * @param dappUrl - The URL of the dapp to switch context to + * @param actionFn - The function containing actions to perform in the web context + * @returns The result of the action function + */ +export const withWebAction = async ( + dappUrl: string, + actionFn: () => Promise, +): Promise => { + // Switch to webview context + await switchToContext({ + context: Contexts.WEBVIEW, + dappUrl, + }); + + // Execute the web actions + const result = await actionFn(); + + // Return the result + return result; +}; diff --git a/e2e/test/specs/metamask-connector/web_dapp.spec.ts b/e2e/test/specs/metamask-connector/web_dapp.spec.ts index d42714536..e650d365e 100644 --- a/e2e/test/specs/metamask-connector/web_dapp.spec.ts +++ b/e2e/test/specs/metamask-connector/web_dapp.spec.ts @@ -6,13 +6,13 @@ import { launchMetaMaskWithFixture, navigateToWebMobileDapp, refreshBrowser, - switchToContext, + withMobileAction, + withWebAction, } from '@util/Utils'; import ConnectModalComponent from '@screens/MetaMask/components/ConnectModalComponent'; import LockScreen from '@screens/MetaMask/LockScreen'; import MetaMaskSDKTestDappScreen from '@screens/Dapps/MetaMaskSDKTestDappScreen'; import { - Contexts, METAMASK_BUNDLE_ID, WALLET_PASSWORD, } from '../../../src/util/Constants'; @@ -38,30 +38,19 @@ describe('MetaMask Connector Playground dapp', () => { await killApp(METAMASK_BUNDLE_ID); await refreshBrowser(); - await switchToContext({ - context: Contexts.WEBVIEW, - dappUrl: metamaskSDKTestDappUrl, + await withWebAction(metamaskSDKTestDappUrl, async () => { + await MetaMaskSDKTestDappScreen.connect(); }); - await MetaMaskSDKTestDappScreen.connect(); - - await switchToContext({ - context: Contexts.NATIVE, + await withMobileAction(async () => { + await deviceOpenDeeplinkWithMetaMask(); + await LockScreen.unlockMM(WALLET_PASSWORD); + await ConnectModalComponent.tapConnectApproval(); + await goBack(); }); - await deviceOpenDeeplinkWithMetaMask(); - - await LockScreen.unlockMM(WALLET_PASSWORD); - - await ConnectModalComponent.tapConnectApproval(); - - await goBack(); - - await switchToContext({ - context: Contexts.WEBVIEW, - dappUrl: metamaskSDKTestDappUrl, + await withWebAction(metamaskSDKTestDappUrl, async () => { + expect(await MetaMaskSDKTestDappScreen.isDappConnected()).toBe(true); }); - - expect(await MetaMaskSDKTestDappScreen.isDappConnected()).toBe(true); }); });