diff --git a/.github/workflows/ci-playwright.yaml b/.github/workflows/ci-playwright.yaml
new file mode 100644
index 00000000..483f4949
--- /dev/null
+++ b/.github/workflows/ci-playwright.yaml
@@ -0,0 +1,87 @@
+name: playwright-test
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+jobs:
+ playwright-test:
+ runs-on: ubuntu-latest
+ services:
+ sapphire-localnet-ci:
+ image: ghcr.io/oasisprotocol/sapphire-localnet:latest
+ ports:
+ - 8545:8545
+ - 8546:8546
+ env:
+ OASIS_DEPOSIT_BINARY: /oasis-deposit -test-mnemonic -n 5
+ options: >-
+ --rm
+ --health-cmd="test -f /CONTAINER_READY"
+ --health-start-period=90s
+ env:
+ SAPPHIRE_LOCALNET_HTTP_PROXY_PORT: 3001
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ - name: Install jq
+ run: sudo apt install -y jq
+ - name: Install Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 18
+ - uses: pnpm/action-setup@v4
+ name: Install pnpm
+ id: pnpm-install
+ with:
+ version: 8
+ run_install: false
+ - name: Get pnpm store directory
+ id: pnpm-cache
+ run: |
+ echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT
+ - uses: actions/cache@v4
+ name: Setup pnpm cache
+ with:
+ path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-pnpm-store-
+ - name: Install dependencies
+ run: pnpm install
+ - name: Build JS client
+ run: make -C clients/js build
+ - name: Build Integrations
+ run: make -C integrations build
+ - uses: JarvusInnovations/background-action@v1
+ name: RPC proxy will error if non-encrypted calls are made
+ with:
+ run: pnpm run proxy &
+ wait-on: http://127.0.0.1:${{ env.SAPPHIRE_LOCALNET_HTTP_PROXY_PORT }}
+ tail: true
+ log-output-resume: true
+ wait-for: 31sec
+ log-output: true
+ log-output-if: true
+ working-directory: clients/js
+ - name: Checkout code
+ uses: actions/checkout@v4
+ - name: Install dependencies
+ run: npx pnpm install
+ - name: Set up playwright tests
+ run: npx playwright install --with-deps
+ working-directory: examples/wagmi-v2
+
+ - name: Run playwright tests (with xvfb-run to support headed extension test)
+ working-directory: examples/wagmi-v2
+ run: xvfb-run npx playwright test
+
+ - name: 'Upload playwright test-results'
+ if: ${{ failure() }}
+ uses: actions/upload-artifact@v4
+ with:
+ name: playwright-test-results
+ path: playwright/test-results
+ retention-days: 5
\ No newline at end of file
diff --git a/examples/wagmi-v2/.gitignore b/examples/wagmi-v2/.gitignore
index 30779123..d6a51648 100644
--- a/examples/wagmi-v2/.gitignore
+++ b/examples/wagmi-v2/.gitignore
@@ -13,6 +13,8 @@ node_modules
dist
dist-ssr
*.local
+playwright-report
+test-results
# Editor directories and files
.vscode/*
diff --git a/examples/wagmi-v2/package.json b/examples/wagmi-v2/package.json
index 2e9628ec..14361507 100644
--- a/examples/wagmi-v2/package.json
+++ b/examples/wagmi-v2/package.json
@@ -10,12 +10,15 @@
"lint": "biome check .",
"format": "biome format --write .",
"preview": "vite preview",
+ "test": "playwright test",
"start:server": "vite --port 3000"
},
"dependencies": {
- "@oasisprotocol/sapphire-wagmi-v2": "workspace:^",
"@oasisprotocol/sapphire-paratime": "workspace:^",
+ "@oasisprotocol/sapphire-wagmi-v2": "workspace:^",
+ "@playwright/test": "^1.48.2",
"@tanstack/react-query": "5.0.5",
+ "@tenkeylabs/dappwright": "^2.8.6",
"abitype": "^1.0.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
diff --git a/examples/wagmi-v2/playwright.config.ts b/examples/wagmi-v2/playwright.config.ts
new file mode 100644
index 00000000..3782e35a
--- /dev/null
+++ b/examples/wagmi-v2/playwright.config.ts
@@ -0,0 +1,46 @@
+import { defineConfig, devices } from "@playwright/test";
+
+/**
+ * See https://playwright.dev/docs/test-configuration.
+ */
+export default defineConfig({
+ timeout: 2 * 60 * 1000,
+ testDir: "./test/e2e/",
+ fullyParallel: true,
+ /* Fail the build on CI if you accidentally left test.only in the source code. */
+ forbidOnly: !!process.env.CI,
+ /* Retry on CI only */
+ retries: process.env.CI ? 2 : 0,
+ /* Opt out of parallel tests on CI. */
+ workers: process.env.CI ? 1 : undefined,
+ /* Reporter to use. See https://playwright.dev/docs/test-reporters */
+ reporter: [["html"], ["list", { printSteps: true }]],
+ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
+ use: {
+ baseURL: process.env.FRONTEND_URL || "http://localhost:3000/",
+ trace: "on-first-retry",
+ headless: false,
+ screenshot: {
+ mode: "only-on-failure",
+ fullPage: true,
+ },
+ },
+ /* Configure projects for major browsers */
+ projects: [
+ {
+ name: 'main',
+ testDir: './test/',
+ use: {
+ ...devices['Desktop Chrome'],
+ },
+ },
+ ],
+ /* Run your local dev server before starting the tests */
+ webServer: {
+ command: 'pnpm run start:server',
+ url: 'http://localhost:3000',
+ reuseExistingServer: !process.env.CI,
+ stdout: 'pipe',
+ stderr: 'pipe',
+ },
+});
diff --git a/examples/wagmi-v2/src/App.tsx b/examples/wagmi-v2/src/App.tsx
index ddaa74e8..1774e7b5 100644
--- a/examples/wagmi-v2/src/App.tsx
+++ b/examples/wagmi-v2/src/App.tsx
@@ -186,7 +186,7 @@ function App() {
Write Tx Calldata:
-
+
{isCalldataEnveloped(writeTxInfo?.input) ? 'encrypted' : 'plaintext'}
>
@@ -199,7 +199,7 @@ function App() {
{readResult !== undefined && (
<>
- {readResult.toString()}
+ {readResult.toString()}
>
)}
diff --git a/examples/wagmi-v2/test/e2e.spec.ts b/examples/wagmi-v2/test/e2e.spec.ts
new file mode 100644
index 00000000..c5bceae0
--- /dev/null
+++ b/examples/wagmi-v2/test/e2e.spec.ts
@@ -0,0 +1,58 @@
+import { BrowserContext, expect, test as baseTest } from "@playwright/test";
+import dappwright, { Dappwright, MetaMaskWallet } from "@tenkeylabs/dappwright";
+
+export const test = baseTest.extend<{
+ context: BrowserContext;
+ wallet: Dappwright;
+}>({
+ context: async ({}, use) => {
+ // Launch context with extension
+ const [wallet, _, context] = await dappwright.bootstrap("", {
+ wallet: "metamask",
+ version: MetaMaskWallet.recommendedVersion,
+ seed: "test test test test test test test test test test test junk", // Hardhat's default https://hardhat.org/hardhat-network/docs/reference#accounts
+ headless: false,
+ });
+
+ // Add Hardhat as a custom network
+ await wallet.addNetwork({
+ networkName: "Sapphire Localnet",
+ rpc: "http://localhost:8545",
+ chainId: 23293,
+ symbol: "ROSE",
+ });
+
+ await use(context);
+ },
+
+ wallet: async ({ context }, use) => {
+ const metamask = await dappwright.getWallet("metamask", context);
+
+ await use(metamask);
+ },
+});
+
+test.beforeEach(async ({ wallet, page }) => {
+ await wallet.switchAccount(1);
+ await page.bringToFront();
+});
+
+test("deploy contract and send encrypted transaction", async ({ wallet, page }) => {
+ await page.goto("http://localhost:3000");
+
+ await page.getByText("Injected (Sapphire)").click();
+ await wallet.approve();
+ await expect(page.getByText("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266")).toBeVisible();
+
+ await page.getByText("Deploy").click();
+ await wallet.confirmTransaction();
+ await expect(page.getByText("Contract:")).toBeVisible();
+
+ await page.getByText("Write").click();
+ await wallet.confirmTransaction();
+ await expect(page.getByText("Contract:")).toBeVisible();
+ await expect(page.getByTestId('is-write-enveloped')).toHaveText('encrypted');
+
+ await page.getByText("Read").click();
+ await expect(page.getByTestId("read-result")).not.toBeEmpty();
+});
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 31eb261d..5ae75bf6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -67,6 +67,9 @@ importers:
specifier: ^5.0.2
version: 5.0.2
devDependencies:
+ '@noble/hashes':
+ specifier: 1.3.2
+ version: 1.3.2
'@nomicfoundation/hardhat-chai-matchers':
specifier: ^2.0.0
version: 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.12(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@4.9.5))(typescript@4.9.5)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.12(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@4.9.5))(typescript@4.9.5)(utf-8-validate@5.0.10))
@@ -236,7 +239,7 @@ importers:
devDependencies:
react-scripts:
specifier: 5.0.1
- version: 5.0.1(@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7))(@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(eslint@8.57.1)(react@18.3.1)(ts-node@10.9.2(typescript@5.6.2))(type-fest@0.21.3)(typescript@5.6.2)(utf-8-validate@5.0.10)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(webpack-dev-server@4.15.2)(webpack@5.95.0))
+ version: 5.0.1(@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7))(@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(eslint@8.57.1)(react@18.3.1)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(type-fest@0.21.3)(typescript@5.6.2)(utf-8-validate@5.0.10)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(webpack-dev-server@4.15.2)(webpack@5.95.0))
webpack-bundle-analyzer:
specifier: ^4.10.2
version: 4.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -374,7 +377,7 @@ importers:
version: 2.9.19(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)
wagmi:
specifier: 1.4.13
- version: 1.4.13(@types/react@18.3.11)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.9.19(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10))
+ version: 1.4.13(@types/react@18.3.11)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.9.19(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10))
devDependencies:
'@biomejs/biome':
specifier: ^1.7.0
@@ -409,9 +412,15 @@ importers:
'@oasisprotocol/sapphire-wagmi-v2':
specifier: workspace:^
version: link:../../integrations/wagmi-v2
+ '@playwright/test':
+ specifier: ^1.48.2
+ version: 1.48.2
'@tanstack/react-query':
specifier: 5.0.5
version: 5.0.5(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)
+ '@tenkeylabs/dappwright':
+ specifier: ^2.8.6
+ version: 2.8.6(playwright-core@1.48.2)
abitype:
specifier: ^1.0.2
version: 1.0.6(typescript@5.6.2)
@@ -2686,6 +2695,11 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
+ '@playwright/test@1.48.2':
+ resolution: {integrity: sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
'@pmmmwh/react-refresh-webpack-plugin@0.5.15':
resolution: {integrity: sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==}
engines: {node: '>= 10.13'}
@@ -3232,6 +3246,12 @@ packages:
react-native:
optional: true
+ '@tenkeylabs/dappwright@2.8.6':
+ resolution: {integrity: sha512-V5rWXCbln7Kigu+VdYvpxUWlgyOmpcyYom8udSsngpkCgGKJ/DOMNEvhvi5xP2Rtv0IA22WRu1wiRpiaGOpJaw==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ playwright-core: '>1.0'
+
'@tootallnate/once@1.1.2':
resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==}
engines: {node: '>= 6'}
@@ -5425,6 +5445,7 @@ packages:
eciesjs@0.3.20:
resolution: {integrity: sha512-Rz5AB8v9+xmMdS/R7RzWPe/R8DP5QfyrkA6ce4umJopoB5su2H2aDy/GcgIfwhmCwxnBkqGf/PbGzmKcGtIgGA==}
+ deprecated: Please upgrade to v0.4+
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@@ -5738,6 +5759,7 @@ packages:
eslint@8.57.1:
resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true
esniff@2.0.1:
@@ -6155,6 +6177,11 @@ packages:
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -8389,6 +8416,16 @@ packages:
resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
engines: {node: '>=8'}
+ playwright-core@1.48.2:
+ resolution: {integrity: sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright@1.48.2:
+ resolution: {integrity: sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
@@ -11068,6 +11105,7 @@ packages:
workbox-google-analytics@6.6.0:
resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==}
+ deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained
workbox-navigation-preload@6.6.0:
resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==}
@@ -13001,7 +13039,7 @@ snapshots:
jest-util: 29.7.0
slash: 3.0.0
- '@jest/core@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)':
+ '@jest/core@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)':
dependencies:
'@jest/console': 27.5.1
'@jest/reporters': 27.5.1
@@ -13015,7 +13053,7 @@ snapshots:
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 27.5.1
- jest-config: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)
+ jest-config: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)
jest-haste-map: 27.5.1
jest-message-util: 27.5.1
jest-regex-util: 27.5.1
@@ -14085,6 +14123,10 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
+ '@playwright/test@1.48.2':
+ dependencies:
+ playwright: 1.48.2
+
'@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.11.0)(type-fest@0.21.3)(webpack-dev-server@4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack-cli@5.1.4)(webpack@5.95.0))(webpack@5.95.0(webpack-cli@5.1.4))':
dependencies:
ansi-html: 0.0.9
@@ -14822,18 +14864,19 @@ snapshots:
dependencies:
'@tanstack/query-persist-client-core': 4.36.1
- '@tanstack/react-query-persist-client@4.36.1(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ '@tanstack/react-query-persist-client@4.36.1(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1))':
dependencies:
'@tanstack/query-persist-client-core': 4.36.1
- '@tanstack/react-query': 4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tanstack/react-query': 4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)
- '@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)':
dependencies:
'@tanstack/query-core': 4.36.1
react: 18.3.1
use-sync-external-store: 1.2.2(react@18.3.1)
optionalDependencies:
react-dom: 18.3.1(react@18.3.1)
+ react-native: 0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)
'@tanstack/react-query@5.0.5(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)':
dependencies:
@@ -14843,6 +14886,11 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
react-native: 0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)
+ '@tenkeylabs/dappwright@2.8.6(playwright-core@1.48.2)':
+ dependencies:
+ node-stream-zip: 1.15.0
+ playwright-core: 1.48.2
+
'@tootallnate/once@1.1.2': {}
'@truffle/error@0.1.1': {}
@@ -18222,7 +18270,7 @@ snapshots:
dependencies:
eslint: 8.57.1
- eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7))(@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7))(eslint@8.57.1)(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2):
+ eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7))(@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7))(eslint@8.57.1)(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2):
dependencies:
'@babel/core': 7.25.7
'@babel/eslint-parser': 7.25.7(@babel/core@7.25.7)(eslint@8.57.1)
@@ -18234,7 +18282,7 @@ snapshots:
eslint: 8.57.1
eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7))(@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7))(eslint@8.57.1)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)
- eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2)
+ eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2)
eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1)
eslint-plugin-react: 7.37.1(eslint@8.57.1)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1)
@@ -18303,13 +18351,13 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2):
+ eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2):
dependencies:
'@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2)
eslint: 8.57.1
optionalDependencies:
'@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)
- jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)
+ jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)
transitivePeerDependencies:
- supports-color
- typescript
@@ -19037,6 +19085,9 @@ snapshots:
fs.realpath@1.0.0: {}
+ fsevents@2.3.2:
+ optional: true
+
fsevents@2.3.3:
optional: true
@@ -20140,16 +20191,16 @@ snapshots:
- babel-plugin-macros
- supports-color
- jest-cli@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10):
+ jest-cli@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10):
dependencies:
- '@jest/core': 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)
+ '@jest/core': 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)
'@jest/test-result': 27.5.1
'@jest/types': 27.5.1
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
import-local: 3.2.0
- jest-config: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)
+ jest-config: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)
jest-util: 27.5.1
jest-validate: 27.5.1
prompts: 2.4.2
@@ -20180,7 +20231,7 @@ snapshots:
- supports-color
- ts-node
- jest-config@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10):
+ jest-config@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10):
dependencies:
'@babel/core': 7.25.7
'@jest/test-sequencer': 27.5.1
@@ -20711,11 +20762,11 @@ snapshots:
leven: 3.1.0
pretty-format: 29.7.0
- jest-watch-typeahead@1.1.0(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)):
+ jest-watch-typeahead@1.1.0(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)):
dependencies:
ansi-escapes: 4.3.2
chalk: 4.1.2
- jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)
+ jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)
jest-regex-util: 28.0.2
jest-watcher: 28.1.3
slash: 4.0.0
@@ -20779,11 +20830,11 @@ snapshots:
merge-stream: 2.0.0
supports-color: 8.1.1
- jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10):
+ jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10):
dependencies:
- '@jest/core': 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)
+ '@jest/core': 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)
import-local: 3.2.0
- jest-cli: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)
+ jest-cli: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)
transitivePeerDependencies:
- bufferutil
- canvas
@@ -22081,6 +22132,14 @@ snapshots:
dependencies:
find-up: 3.0.0
+ playwright-core@1.48.2: {}
+
+ playwright@1.48.2:
+ dependencies:
+ playwright-core: 1.48.2
+ optionalDependencies:
+ fsevents: 2.3.2
+
pluralize@8.0.0: {}
pngjs@5.0.0: {}
@@ -22237,7 +22296,7 @@ snapshots:
postcss: 8.4.47
postcss-value-parser: 4.2.0
- postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(typescript@5.6.2)):
+ postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2)):
dependencies:
lilconfig: 3.1.2
yaml: 2.5.1
@@ -22858,7 +22917,7 @@ snapshots:
react-refresh@0.14.2: {}
- react-scripts@5.0.1(@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7))(@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(eslint@8.57.1)(react@18.3.1)(ts-node@10.9.2(typescript@5.6.2))(type-fest@0.21.3)(typescript@5.6.2)(utf-8-validate@5.0.10)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(webpack-dev-server@4.15.2)(webpack@5.95.0)):
+ react-scripts@5.0.1(@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7))(@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(eslint@8.57.1)(react@18.3.1)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(type-fest@0.21.3)(typescript@5.6.2)(utf-8-validate@5.0.10)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(webpack-dev-server@4.15.2)(webpack@5.95.0)):
dependencies:
'@babel/core': 7.25.7
'@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.11.0)(type-fest@0.21.3)(webpack-dev-server@4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack-cli@5.1.4)(webpack@5.95.0))(webpack@5.95.0(webpack-cli@5.1.4))
@@ -22876,15 +22935,15 @@ snapshots:
dotenv: 10.0.0
dotenv-expand: 5.1.0
eslint: 8.57.1
- eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7))(@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7))(eslint@8.57.1)(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2)
+ eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7))(@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7))(eslint@8.57.1)(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2)
eslint-webpack-plugin: 3.2.0(eslint@8.57.1)(webpack@5.95.0(webpack-cli@5.1.4))
file-loader: 6.2.0(webpack@5.95.0(webpack-cli@5.1.4))
fs-extra: 10.1.0
html-webpack-plugin: 5.6.0(webpack@5.95.0(webpack-cli@5.1.4))
identity-obj-proxy: 3.0.0
- jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10)
+ jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10)
jest-resolve: 27.5.1
- jest-watch-typeahead: 1.1.0(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(typescript@5.6.2))(utf-8-validate@5.0.10))
+ jest-watch-typeahead: 1.1.0(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))(utf-8-validate@5.0.10))
mini-css-extract-plugin: 2.9.1(webpack@5.95.0(webpack-cli@5.1.4))
postcss: 8.4.47
postcss-flexbugs-fixes: 5.0.2(postcss@8.4.47)
@@ -22902,7 +22961,7 @@ snapshots:
semver: 7.6.3
source-map-loader: 3.0.2(webpack@5.95.0(webpack-cli@5.1.4))
style-loader: 3.3.4(webpack@5.95.0(webpack-cli@5.1.4))
- tailwindcss: 3.4.13(ts-node@10.9.2(typescript@5.6.2))
+ tailwindcss: 3.4.13(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))
terser-webpack-plugin: 5.3.10(webpack@5.95.0(webpack-cli@5.1.4))
webpack: 5.95.0(webpack-cli@5.1.4)
webpack-dev-server: 4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack-cli@5.1.4)(webpack@5.95.0)
@@ -24074,7 +24133,7 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
- tailwindcss@3.4.13(ts-node@10.9.2(typescript@5.6.2)):
+ tailwindcss@3.4.13(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2)):
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -24093,7 +24152,7 @@ snapshots:
postcss: 8.4.47
postcss-import: 15.1.0(postcss@8.4.47)
postcss-js: 4.0.1(postcss@8.4.47)
- postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(typescript@5.6.2))
+ postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@18.19.54)(typescript@5.6.2))
postcss-nested: 6.2.0(postcss@8.4.47)
postcss-selector-parser: 6.1.2
resolve: 1.22.8
@@ -24807,11 +24866,11 @@ snapshots:
dependencies:
xml-name-validator: 3.0.0
- wagmi@1.4.13(@types/react@18.3.11)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.9.19(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)):
+ wagmi@1.4.13(@types/react@18.3.11)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.9.19(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)):
dependencies:
'@tanstack/query-sync-storage-persister': 4.36.1
- '@tanstack/react-query': 4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@tanstack/react-query-persist-client': 4.36.1(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@tanstack/react-query': 4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)
+ '@tanstack/react-query-persist-client': 4.36.1(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1))
'@wagmi/core': 1.4.13(@types/react@18.3.11)(bufferutil@4.0.8)(immer@10.0.2)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.9.19(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10))
abitype: 0.8.7(typescript@5.6.2)
react: 18.3.1