From 54a5c1a1ebc7d98136d17b64a93b2b2f57ca189f Mon Sep 17 00:00:00 2001 From: Tom Meagher Date: Tue, 17 Dec 2024 18:16:52 -0500 Subject: [PATCH 1/4] test: add --- .gitignore | 6 + .npmrc | 3 +- app/package.json | 2 +- examples/wagmi/package.json | 4 +- package.json | 7 +- playground/package.json | 4 +- playwright.config.ts | 36 ++ pnpm-lock.yaml | 582 ++++++++++++++++--- pnpm-workspace.yaml | 4 +- src/exports.test.ts | 52 ++ src/internal/accountDelegation.ts | 2 +- test/browser/Caddyfile | 3 + test/browser/app/create-account/page.test.ts | 76 +++ test/browser/app/create-account/page.tsx | 26 + test/browser/app/favicon.ico | Bin 0 -> 25931 bytes test/browser/app/globals.css | 5 + test/browser/app/layout.tsx | 18 + test/browser/app/page.tsx | 7 + test/browser/next.config.ts | 15 + test/browser/package.json | 19 + test/browser/tests/index.test.ts | 7 + test/browser/tsconfig.json | 27 + tsconfig.json | 8 +- vitest.workspace.ts | 11 + 24 files changed, 820 insertions(+), 104 deletions(-) create mode 100644 playwright.config.ts create mode 100644 src/exports.test.ts create mode 100644 test/browser/Caddyfile create mode 100644 test/browser/app/create-account/page.test.ts create mode 100644 test/browser/app/create-account/page.tsx create mode 100644 test/browser/app/favicon.ico create mode 100644 test/browser/app/globals.css create mode 100644 test/browser/app/layout.tsx create mode 100644 test/browser/app/page.tsx create mode 100644 test/browser/next.config.ts create mode 100644 test/browser/package.json create mode 100644 test/browser/tests/index.test.ts create mode 100644 test/browser/tsconfig.json create mode 100644 vitest.workspace.ts diff --git a/.gitignore b/.gitignore index 394fb3b..0609b5a 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,12 @@ src/_generated .next out +# playwright +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ + # vercel .vercel diff --git a/.npmrc b/.npmrc index 4bd0f0a..4768756 100644 --- a/.npmrc +++ b/.npmrc @@ -1,4 +1,5 @@ auto-install-peers=false +enable-pre-post-scripts=true link-workspace-packages=deep -provenance=false +provenance=true strict-peer-dependencies=false diff --git a/app/package.json b/app/package.json index fddfaed..83b5d07 100644 --- a/app/package.json +++ b/app/package.json @@ -21,6 +21,6 @@ "@types/react-dom": "catalog:", "postcss": "^8", "tailwindcss": "^3.4.1", - "typescript": "^5" + "typescript": "catalog:" } } diff --git a/examples/wagmi/package.json b/examples/wagmi/package.json index 43fc346..071155e 100644 --- a/examples/wagmi/package.json +++ b/examples/wagmi/package.json @@ -18,9 +18,9 @@ "devDependencies": { "@types/react": "catalog:", "@types/react-dom": "catalog:", - "@vitejs/plugin-react": "^4.3.3", + "@vitejs/plugin-react": "catalog:", "globals": "^15.11.0", - "typescript": "~5.6.3", + "typescript": "catalog:", "vite": "^5.4.10" } } diff --git a/package.json b/package.json index 81f4a80..4c96723 100644 --- a/package.json +++ b/package.json @@ -22,13 +22,16 @@ "postinstall": "pnpm preconstruct", "preconstruct": "tsx ./scripts/preconstruct.ts", "preinstall": "pnpx only-allow pnpm", - "prepare": "pnpm simple-git-hooks" + "prepare": "pnpm simple-git-hooks", + "test": "vitest dev", + "test:browser": "pnpm exec playwright test" }, "devDependencies": { "@arethetypeswrong/cli": "^0.17.1", "@biomejs/biome": "^1.8.3", "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.7", + "@playwright/test": "^1.49.1", "@size-limit/preset-big-lib": "^11.1.6", "@tanstack/react-query": "catalog:", "@types/node": "^22.5.4", @@ -36,12 +39,14 @@ "@wagmi/cli": "^2.1.18", "knip": "^5.30.6", "publint": "^0.2.12", + "react": "catalog:", "sherif": "^0.11.0", "simple-git-hooks": "^2.11.1", "size-limit": "^11.1.6", "tsx": "^4.17.0", "typescript": "catalog:", "viem": "catalog:", + "vitest": "^2.1.8", "wagmi": "catalog:" }, "packageManager": "pnpm@9.7.0", diff --git a/playground/package.json b/playground/package.json index a1d0917..3a554b3 100644 --- a/playground/package.json +++ b/playground/package.json @@ -15,9 +15,9 @@ "devDependencies": { "@types/react": "catalog:", "@types/react-dom": "catalog:", - "@vitejs/plugin-react": "^4.3.1", + "@vitejs/plugin-react": "catalog:", "globals": "^15.9.0", - "typescript": "^5.5.3", + "typescript": "catalog:", "vite": "^5.4.1" } } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..a6b0e58 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,36 @@ +import { defineConfig, devices } from '@playwright/test' + +/** https://playwright.dev/docs/test-configuration */ +export default defineConfig({ + forbidOnly: !!process.env.CI, + fullyParallel: true, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + // name: 'firefox', + // use: { ...devices['Desktop Firefox'] }, + // }, + // { + // name: 'webkit', + // use: { ...devices['Desktop Safari'] }, + // }, + ], + reporter: 'html', + retries: process.env.CI ? 2 : 0, + testDir: './test/browser', + use: { + baseURL: 'https://porto.localhost', + }, + webServer: { + command: + 'caddy start -c test/browser/Caddyfile && pnpm --filter browser-app dev', + url: 'http://127.0.0.1:3000', + reuseExistingServer: !process.env.CI, + stdout: 'pipe', + stderr: 'pipe', + timeout: 5_000, + }, + // workers: process.env.CI ? 1 : undefined, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9762b56..c462791 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,9 @@ catalogs: '@types/react-dom': specifier: ^18.3.0 version: 18.3.1 + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4 react: specifier: ^18.3.1 version: 18.3.1 @@ -22,7 +25,7 @@ catalogs: specifier: ^18.3.1 version: 18.3.1 typescript: - specifier: ^5.5.4 + specifier: ^5.6.3 version: 5.6.3 viem: specifier: ^2.21.51 @@ -47,6 +50,9 @@ importers: '@changesets/cli': specifier: ^2.27.7 version: 2.27.9 + '@playwright/test': + specifier: ^1.49.1 + version: 1.49.1 '@size-limit/preset-big-lib': specifier: ^11.1.6 version: 11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10) @@ -68,6 +74,9 @@ importers: publint: specifier: ^0.2.12 version: 0.2.12 + react: + specifier: 'catalog:' + version: 18.3.1 sherif: specifier: ^0.11.0 version: 0.11.0 @@ -86,9 +95,12 @@ importers: viem: specifier: 'catalog:' version: 2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + vitest: + specifier: ^2.1.8 + version: 2.1.8(@types/node@22.9.0)(terser@5.37.0) wagmi: specifier: 'catalog:' - version: 2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + version: 2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) app: dependencies: @@ -100,7 +112,7 @@ importers: version: 1.34.3 next: specifier: ^15 - version: 15.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.0.3(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: 'catalog:' version: 18.3.1 @@ -124,8 +136,8 @@ importers: specifier: ^3.4.1 version: 3.4.14 typescript: - specifier: ^5 - version: 5.6.3 + specifier: 'catalog:' + version: 5.7.2 examples/wagmi: dependencies: @@ -143,10 +155,10 @@ importers: version: 18.3.1(react@18.3.1) viem: specifier: 'catalog:' - version: 2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + version: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) wagmi: specifier: 'catalog:' - version: 2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + version: 2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) devDependencies: '@types/react': specifier: 'catalog:' @@ -155,14 +167,14 @@ importers: specifier: 'catalog:' version: 18.3.1 '@vitejs/plugin-react': - specifier: ^4.3.3 - version: 4.3.3(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) + specifier: 'catalog:' + version: 4.3.4(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) globals: specifier: ^15.11.0 version: 15.12.0 typescript: - specifier: ~5.6.3 - version: 5.6.3 + specifier: 'catalog:' + version: 5.7.2 vite: specifier: ^5.4.10 version: 5.4.11(@types/node@22.9.0)(terser@5.37.0) @@ -171,7 +183,7 @@ importers: dependencies: ox: specifier: ^0.2.2 - version: 0.2.2(typescript@5.6.3)(zod@3.23.8) + version: 0.2.2(typescript@5.7.2)(zod@3.23.8) porto: specifier: workspace:* version: link:../src @@ -183,7 +195,7 @@ importers: version: 18.3.1(react@18.3.1) viem: specifier: 'catalog:' - version: 2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + version: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) devDependencies: '@types/react': specifier: 'catalog:' @@ -192,14 +204,14 @@ importers: specifier: 'catalog:' version: 18.3.1 '@vitejs/plugin-react': - specifier: ^4.3.1 - version: 4.3.3(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) + specifier: 'catalog:' + version: 4.3.4(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) globals: specifier: ^15.9.0 version: 15.12.0 typescript: - specifier: ^5.5.3 - version: 5.6.3 + specifier: 'catalog:' + version: 5.7.2 vite: specifier: ^5.4.1 version: 5.4.11(@types/node@22.9.0)(terser@5.37.0) @@ -211,13 +223,38 @@ importers: version: 6.2.1 mipd: specifier: ^0.0.7 - version: 0.0.7(typescript@5.6.3) + version: 0.0.7(typescript@5.7.2) ox: specifier: ^0.2.2 - version: 0.2.2(typescript@5.6.3)(zod@3.23.8) + version: 0.2.2(typescript@5.7.2)(zod@3.23.8) zustand: specifier: ^5.0.1 - version: 5.0.1(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)) + version: 5.0.1(@types/react@19.0.1)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)) + + test/browser: + dependencies: + next: + specifier: 15.1.0 + version: 15.1.0(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + porto: + specifier: workspace:* + version: link:../../src + react: + specifier: 'catalog:' + version: 18.3.1 + react-dom: + specifier: 'catalog:' + version: 18.3.1(react@18.3.1) + devDependencies: + '@types/node': + specifier: ^20 + version: 20.17.6 + '@types/react': + specifier: 'catalog:' + version: 18.3.12 + '@types/react-dom': + specifier: 'catalog:' + version: 18.3.1 packages: @@ -1155,54 +1192,105 @@ packages: '@next/env@15.0.3': resolution: {integrity: sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==} + '@next/env@15.1.0': + resolution: {integrity: sha512-UcCO481cROsqJuszPPXJnb7GGuLq617ve4xuAyyNG4VSSocJNtMU5Fsx+Lp6mlN8c7W58aZLc5y6D/2xNmaK+w==} + '@next/swc-darwin-arm64@15.0.3': resolution: {integrity: sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + '@next/swc-darwin-arm64@15.1.0': + resolution: {integrity: sha512-ZU8d7xxpX14uIaFC3nsr4L++5ZS/AkWDm1PzPO6gD9xWhFkOj2hzSbSIxoncsnlJXB1CbLOfGVN4Zk9tg83PUw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@next/swc-darwin-x64@15.0.3': resolution: {integrity: sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + '@next/swc-darwin-x64@15.1.0': + resolution: {integrity: sha512-DQ3RiUoW2XC9FcSM4ffpfndq1EsLV0fj0/UY33i7eklW5akPUCo6OX2qkcLXZ3jyPdo4sf2flwAED3AAq3Om2Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@next/swc-linux-arm64-gnu@15.0.3': resolution: {integrity: sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-gnu@15.1.0': + resolution: {integrity: sha512-M+vhTovRS2F//LMx9KtxbkWk627l5Q7AqXWWWrfIzNIaUFiz2/NkOFkxCFyNyGACi5YbA8aekzCLtbDyfF/v5Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-arm64-musl@15.0.3': resolution: {integrity: sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-musl@15.1.0': + resolution: {integrity: sha512-Qn6vOuwaTCx3pNwygpSGtdIu0TfS1KiaYLYXLH5zq1scoTXdwYfdZtwvJTpB1WrLgiQE2Ne2kt8MZok3HlFqmg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-x64-gnu@15.0.3': resolution: {integrity: sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-gnu@15.1.0': + resolution: {integrity: sha512-yeNh9ofMqzOZ5yTOk+2rwncBzucc6a1lyqtg8xZv0rH5znyjxHOWsoUtSq4cUTeeBIiXXX51QOOe+VoCjdXJRw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-linux-x64-musl@15.0.3': resolution: {integrity: sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-musl@15.1.0': + resolution: {integrity: sha512-t9IfNkHQs/uKgPoyEtU912MG6a1j7Had37cSUyLTKx9MnUpjj+ZDKw9OyqTI9OwIIv0wmkr1pkZy+3T5pxhJPg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-win32-arm64-msvc@15.0.3': resolution: {integrity: sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + '@next/swc-win32-arm64-msvc@15.1.0': + resolution: {integrity: sha512-WEAoHyG14t5sTavZa1c6BnOIEukll9iqFRTavqRVPfYmfegOAd5MaZfXgOGG6kGo1RduyGdTHD4+YZQSdsNZXg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@next/swc-win32-x64-msvc@15.0.3': resolution: {integrity: sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@next/swc-win32-x64-msvc@15.1.0': + resolution: {integrity: sha512-J1YdKuJv9xcixzXR24Dv+4SaDKc2jj31IVUEMdO5xJivMTXuE6MAdIi4qPjSymHuFG8O5wbfWKnhJUcHHpj5CA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@noble/ciphers@1.0.0': resolution: {integrity: sha512-wH5EHOmLi0rEazphPbecAzmjd12I6/Yv/SiHdkA9LSycsQk7RuuTp7am5/o62qYr0RScE7Pc9icXGBbsr6cesA==} engines: {node: ^14.21.3 || >=16} @@ -1326,6 +1414,11 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@playwright/test@1.49.1': + resolution: {integrity: sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==} + engines: {node: '>=18'} + hasBin: true + '@puppeteer/browsers@2.2.2': resolution: {integrity: sha512-hZ/JhxPIceWaGSEzUZp83/8M49CoxlkuThfTR7t4AoCu5+ZvJ3vktLm60Otww2TXeROB5igiZ8D9oPQh6ckBVg==} engines: {node: '>=18'} @@ -1550,6 +1643,9 @@ packages: '@swc/helpers@0.5.13': resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@tanstack/query-core@5.59.20': resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==} @@ -1609,6 +1705,9 @@ packages: '@types/react@18.3.12': resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} + '@types/react@19.0.1': + resolution: {integrity: sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1625,17 +1724,17 @@ packages: '@upstash/redis@1.34.3': resolution: {integrity: sha512-VT25TyODGy/8ljl7GADnJoMmtmJ1F8d84UXfGonRRF8fWYJz7+2J6GzW+a6ETGtk4OyuRTt7FRSvFG5GvrfSdQ==} - '@vitejs/plugin-react@4.3.3': - resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.2.0 || ^5.0.0 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@vitest/expect@2.1.4': - resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} + '@vitest/expect@2.1.8': + resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==} - '@vitest/mocker@2.1.4': - resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} + '@vitest/mocker@2.1.8': + resolution: {integrity: sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 @@ -1645,20 +1744,20 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.4': - resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} + '@vitest/pretty-format@2.1.8': + resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} - '@vitest/runner@2.1.4': - resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} + '@vitest/runner@2.1.8': + resolution: {integrity: sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==} - '@vitest/snapshot@2.1.4': - resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} + '@vitest/snapshot@2.1.8': + resolution: {integrity: sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==} - '@vitest/spy@2.1.4': - resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} + '@vitest/spy@2.1.8': + resolution: {integrity: sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==} - '@vitest/utils@2.1.4': - resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} + '@vitest/utils@2.1.8': + resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} '@wagmi/cli@2.1.18': resolution: {integrity: sha512-1Vqz3Kj0WY/p6vUq1a2m8NH+64wAcoV+fUC8j5BrEgaeCDbQrWdZ2nMLbz/I6ao2oPNvv1eNWCjR6r8QiscXlA==} @@ -2575,6 +2674,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} @@ -3145,6 +3249,27 @@ packages: sass: optional: true + next@15.1.0: + resolution: {integrity: sha512-QKhzt6Y8rgLNlj30izdMbxAwjHMFANnLwDwZ+WQh5sMhyt4lEBqDK9QpvWHtIM4rINKPoJ8aiRZKg5ULSybVHw==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} @@ -3401,6 +3526,16 @@ packages: pkg-types@1.2.1: resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + playwright-core@1.49.1: + resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.49.1: + resolution: {integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==} + engines: {node: '>=18'} + hasBin: true + pngjs@5.0.0: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} @@ -4045,6 +4180,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} @@ -4185,8 +4325,8 @@ packages: typescript: optional: true - vite-node@2.1.4: - resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} + vite-node@2.1.8: + resolution: {integrity: sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -4221,15 +4361,15 @@ packages: terser: optional: true - vitest@2.1.4: - resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} + vitest@2.1.8: + resolution: {integrity: sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.4 - '@vitest/ui': 2.1.4 + '@vitest/browser': 2.1.8 + '@vitest/ui': 2.1.8 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4536,7 +4676,7 @@ snapshots: '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.7 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4619,7 +4759,7 @@ snapshots: '@babel/parser': 7.26.2 '@babel/template': 7.25.9 '@babel/types': 7.26.0 - debug: 4.3.7 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4841,7 +4981,7 @@ snapshots: clsx: 1.2.1 eventemitter3: 5.0.1 preact: 10.24.3 - vitest: 2.1.4(@types/node@22.9.0)(terser@5.37.0) + vitest: 2.1.8(@types/node@22.9.0)(terser@5.37.0) transitivePeerDependencies: - '@edge-runtime/vm' - '@types/node' @@ -5304,7 +5444,7 @@ snapshots: bufferutil: 4.0.8 cross-fetch: 4.0.0 date-fns: 2.30.0 - debug: 4.3.7 + debug: 4.4.0 eciesjs: 0.4.11 eventemitter2: 6.4.9 readable-stream: 3.6.2 @@ -5330,7 +5470,7 @@ snapshots: '@metamask/sdk-install-modal-web': 0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) bowser: 2.11.0 cross-fetch: 4.0.0 - debug: 4.3.7 + debug: 4.4.0 eciesjs: 0.4.11 eth-rpc-errors: 4.0.3 eventemitter2: 6.4.9 @@ -5373,7 +5513,7 @@ snapshots: '@noble/hashes': 1.5.0 '@scure/base': 1.1.9 '@types/debug': 4.1.12 - debug: 4.3.7 + debug: 4.4.0 pony-cause: 2.1.11 semver: 7.6.3 uuid: 9.0.1 @@ -5387,7 +5527,7 @@ snapshots: '@noble/hashes': 1.5.0 '@scure/base': 1.1.9 '@types/debug': 4.1.12 - debug: 4.3.7 + debug: 4.4.0 pony-cause: 2.1.11 semver: 7.6.3 uuid: 9.0.1 @@ -5441,30 +5581,56 @@ snapshots: '@next/env@15.0.3': {} + '@next/env@15.1.0': {} + '@next/swc-darwin-arm64@15.0.3': optional: true + '@next/swc-darwin-arm64@15.1.0': + optional: true + '@next/swc-darwin-x64@15.0.3': optional: true + '@next/swc-darwin-x64@15.1.0': + optional: true + '@next/swc-linux-arm64-gnu@15.0.3': optional: true + '@next/swc-linux-arm64-gnu@15.1.0': + optional: true + '@next/swc-linux-arm64-musl@15.0.3': optional: true + '@next/swc-linux-arm64-musl@15.1.0': + optional: true + '@next/swc-linux-x64-gnu@15.0.3': optional: true + '@next/swc-linux-x64-gnu@15.1.0': + optional: true + '@next/swc-linux-x64-musl@15.0.3': optional: true + '@next/swc-linux-x64-musl@15.1.0': + optional: true + '@next/swc-win32-arm64-msvc@15.0.3': optional: true + '@next/swc-win32-arm64-msvc@15.1.0': + optional: true + '@next/swc-win32-x64-msvc@15.0.3': optional: true + '@next/swc-win32-x64-msvc@15.1.0': + optional: true + '@noble/ciphers@1.0.0': {} '@noble/curves@1.4.2': @@ -5559,6 +5725,10 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@playwright/test@1.49.1': + dependencies: + playwright: 1.49.1 + '@puppeteer/browsers@2.2.2': dependencies: debug: 4.3.4 @@ -5649,6 +5819,16 @@ snapshots: - utf-8-validate - zod + '@safe-global/safe-apps-provider@0.18.4(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)': + dependencies: + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + events: 3.3.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.22.2 @@ -5659,6 +5839,16 @@ snapshots: - utf-8-validate - zod + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)': + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.22.2 + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + '@safe-global/safe-gateway-typescript-sdk@3.22.2': {} '@scure/base@1.1.9': {} @@ -5689,7 +5879,7 @@ snapshots: '@sitespeed.io/tracium@0.3.3': dependencies: - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -5826,6 +6016,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + '@tanstack/query-core@5.59.20': {} '@tanstack/react-query@5.59.20(react@18.3.1)': @@ -5890,13 +6084,17 @@ snapshots: '@types/react-dom@18.3.1': dependencies: - '@types/react': 18.3.12 + '@types/react': 19.0.1 '@types/react@18.3.12': dependencies: '@types/prop-types': 15.7.13 csstype: 3.1.3 + '@types/react@19.0.1': + dependencies: + csstype: 3.1.3 + '@types/trusted-types@2.0.7': {} '@types/yauzl@2.10.3': @@ -5916,7 +6114,7 @@ snapshots: dependencies: crypto-js: 4.2.0 - '@vitejs/plugin-react@4.3.3(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))': + '@vitejs/plugin-react@4.3.4(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) @@ -5927,43 +6125,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.4': + '@vitest/expect@2.1.8': dependencies: - '@vitest/spy': 2.1.4 - '@vitest/utils': 2.1.4 + '@vitest/spy': 2.1.8 + '@vitest/utils': 2.1.8 chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.4(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))': + '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))': dependencies: - '@vitest/spy': 2.1.4 + '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: vite: 5.4.11(@types/node@22.9.0)(terser@5.37.0) - '@vitest/pretty-format@2.1.4': + '@vitest/pretty-format@2.1.8': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.4': + '@vitest/runner@2.1.8': dependencies: - '@vitest/utils': 2.1.4 + '@vitest/utils': 2.1.8 pathe: 1.1.2 - '@vitest/snapshot@2.1.4': + '@vitest/snapshot@2.1.8': dependencies: - '@vitest/pretty-format': 2.1.4 + '@vitest/pretty-format': 2.1.8 magic-string: 0.30.12 pathe: 1.1.2 - '@vitest/spy@2.1.4': + '@vitest/spy@2.1.8': dependencies: tinyspy: 3.0.2 - '@vitest/utils@2.1.4': + '@vitest/utils@2.1.8': dependencies: - '@vitest/pretty-format': 2.1.4 + '@vitest/pretty-format': 2.1.8 loupe: 3.1.2 tinyrainbow: 1.2.0 @@ -5995,7 +6193,7 @@ snapshots: - bufferutil - utf-8-validate - '@wagmi/connectors@5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/connectors@5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': dependencies: '@coinbase/wallet-sdk': 4.2.1(@types/node@22.9.0)(terser@5.37.0) '@metamask/sdk': 0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10) @@ -6045,6 +6243,56 @@ snapshots: - utf-8-validate - zod + '@wagmi/connectors@5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + dependencies: + '@coinbase/wallet-sdk': 4.2.1(@types/node@22.9.0)(terser@5.37.0) + '@metamask/sdk': 0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.4(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + '@wagmi/core': 2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@walletconnect/ethereum-provider': 2.17.0(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + cbw-sdk: '@coinbase/wallet-sdk@3.9.3' + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@edge-runtime/vm' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/node' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - '@vitest/browser' + - '@vitest/ui' + - bufferutil + - encoding + - happy-dom + - ioredis + - jsdom + - less + - lightningcss + - msw + - react + - react-dom + - react-native + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - utf-8-validate + - zod + '@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))': dependencies: eventemitter3: 5.0.1 @@ -6060,6 +6308,21 @@ snapshots: - react - use-sync-external-store + '@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7(typescript@5.7.2) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + zustand: 5.0.0(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)) + optionalDependencies: + '@tanstack/query-core': 5.59.20 + typescript: 5.7.2 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + '@walletconnect/core@2.17.0(@upstash/redis@1.34.3)(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/heartbeat': 1.2.2 @@ -6455,6 +6718,11 @@ snapshots: typescript: 5.6.3 zod: 3.23.8 + abitype@1.0.6(typescript@5.7.2)(zod@3.23.8): + optionalDependencies: + typescript: 5.7.2 + zod: 3.23.8 + acorn@8.14.0: {} agent-base@7.1.3: {} @@ -7164,7 +7432,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.7 + debug: 4.4.0 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -7259,6 +7527,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -7292,7 +7563,7 @@ snapshots: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -7391,7 +7662,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -7400,7 +7671,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -7752,6 +8023,10 @@ snapshots: optionalDependencies: typescript: 5.6.3 + mipd@0.0.7(typescript@5.7.2): + optionalDependencies: + typescript: 5.7.2 + mitt@3.0.1: {} mlly@1.7.2: @@ -7798,7 +8073,7 @@ snapshots: netmask@2.0.2: {} - next@15.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.0.3(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 15.0.3 '@swc/counter': 0.1.3 @@ -7818,6 +8093,33 @@ snapshots: '@next/swc-linux-x64-musl': 15.0.3 '@next/swc-win32-arm64-msvc': 15.0.3 '@next/swc-win32-x64-msvc': 15.0.3 + '@playwright/test': 1.49.1 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + next@15.1.0(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@next/env': 15.1.0 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001680 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.6(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 15.1.0 + '@next/swc-darwin-x64': 15.1.0 + '@next/swc-linux-arm64-gnu': 15.1.0 + '@next/swc-linux-arm64-musl': 15.1.0 + '@next/swc-linux-x64-gnu': 15.1.0 + '@next/swc-linux-x64-musl': 15.1.0 + '@next/swc-win32-arm64-msvc': 15.1.0 + '@next/swc-win32-x64-msvc': 15.1.0 + '@playwright/test': 1.49.1 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -7927,17 +8229,31 @@ snapshots: transitivePeerDependencies: - zod - ox@0.2.2(typescript@5.6.3)(zod@3.23.8): + ox@0.1.2(typescript@5.7.2)(zod@3.23.8): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 '@scure/bip32': 1.5.0 '@scure/bip39': 1.4.0 - abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8) + abitype: 1.0.6(typescript@5.7.2)(zod@3.23.8) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 + transitivePeerDependencies: + - zod + + ox@0.2.2(typescript@5.7.2)(zod@3.23.8): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + abitype: 1.0.6(typescript@5.7.2)(zod@3.23.8) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.7.2 transitivePeerDependencies: - zod @@ -7973,7 +8289,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.3 - debug: 4.3.7 + debug: 4.4.0 get-uri: 6.0.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -8069,6 +8385,14 @@ snapshots: mlly: 1.7.2 pathe: 1.1.2 + playwright-core@1.49.1: {} + + playwright@1.49.1: + dependencies: + playwright-core: 1.49.1 + optionalDependencies: + fsevents: 2.3.2 + pngjs@5.0.0: {} pony-cause@2.1.11: {} @@ -8137,7 +8461,7 @@ snapshots: proxy-agent@6.4.0: dependencies: agent-base: 7.1.3 - debug: 4.3.7 + debug: 4.4.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -8499,7 +8823,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.3 - debug: 4.3.7 + debug: 4.4.0 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -8756,6 +9080,8 @@ snapshots: typescript@5.6.3: {} + typescript@5.7.2: {} + ufo@1.5.4: {} uint8arrays@3.1.0: @@ -8871,10 +9197,29 @@ snapshots: - utf-8-validate - zod - vite-node@2.1.4(@types/node@22.9.0)(terser@5.37.0): + viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8): + dependencies: + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + abitype: 1.0.6(typescript@5.7.2)(zod@3.23.8) + isows: 1.0.6(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + ox: 0.1.2(typescript@5.7.2)(zod@3.23.8) + webauthn-p256: 0.0.10 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + vite-node@2.1.8(@types/node@22.9.0)(terser@5.37.0): dependencies: cac: 6.7.14 - debug: 4.3.7 + debug: 4.4.0 + es-module-lexer: 1.5.4 pathe: 1.1.2 vite: 5.4.11(@types/node@22.9.0)(terser@5.37.0) transitivePeerDependencies: @@ -8898,17 +9243,17 @@ snapshots: fsevents: 2.3.3 terser: 5.37.0 - vitest@2.1.4(@types/node@22.9.0)(terser@5.37.0): + vitest@2.1.8(@types/node@22.9.0)(terser@5.37.0): dependencies: - '@vitest/expect': 2.1.4 - '@vitest/mocker': 2.1.4(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) - '@vitest/pretty-format': 2.1.4 - '@vitest/runner': 2.1.4 - '@vitest/snapshot': 2.1.4 - '@vitest/spy': 2.1.4 - '@vitest/utils': 2.1.4 + '@vitest/expect': 2.1.8 + '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) + '@vitest/pretty-format': 2.1.8 + '@vitest/runner': 2.1.8 + '@vitest/snapshot': 2.1.8 + '@vitest/spy': 2.1.8 + '@vitest/utils': 2.1.8 chai: 5.1.2 - debug: 4.3.7 + debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.12 pathe: 1.1.2 @@ -8918,7 +9263,7 @@ snapshots: tinypool: 1.0.1 tinyrainbow: 1.2.0 vite: 5.4.11(@types/node@22.9.0)(terser@5.37.0) - vite-node: 2.1.4(@types/node@22.9.0)(terser@5.37.0) + vite-node: 2.1.8(@types/node@22.9.0)(terser@5.37.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.9.0 @@ -8933,10 +9278,59 @@ snapshots: - supports-color - terser - wagmi@2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): + wagmi@2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): + dependencies: + '@tanstack/react-query': 5.59.20(react@18.3.1) + '@wagmi/connectors': 5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@wagmi/core': 2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) + react: 18.3.1 + use-sync-external-store: 1.2.0(react@18.3.1) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@edge-runtime/vm' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/query-core' + - '@types/node' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - '@vitest/browser' + - '@vitest/ui' + - bufferutil + - encoding + - happy-dom + - immer + - ioredis + - jsdom + - less + - lightningcss + - msw + - react-dom + - react-native + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - utf-8-validate + - zod + + wagmi@2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): dependencies: '@tanstack/react-query': 5.59.20(react@18.3.1) - '@wagmi/connectors': 5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@wagmi/connectors': 5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) '@wagmi/core': 2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) @@ -9180,8 +9574,8 @@ snapshots: react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) - zustand@5.0.1(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)): + zustand@5.0.1(@types/react@19.0.1)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)): optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 19.0.1 react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f873e20..7419875 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,13 +3,15 @@ packages: - 'examples/*' - 'playground' - 'src' + - 'test/browser' catalog: "@tanstack/react-query": "^5.59.20" "@types/react": "^18.3.3" "@types/react-dom": "^18.3.0" + "@vitejs/plugin-react": "^4.3.4" react: "^18.3.1" react-dom: "^18.3.1" - typescript: "^5.5.4" + typescript: "^5.6.3" viem: "^2.21.51" wagmi: "^2.12.30" diff --git a/src/exports.test.ts b/src/exports.test.ts new file mode 100644 index 0000000..06170e8 --- /dev/null +++ b/src/exports.test.ts @@ -0,0 +1,52 @@ +import { expect, test } from 'vitest' + +import * as actions from './actions.js' +import * as index from './index.js' +import * as query from './query.js' +import * as wagmi from './wagmi.js' + +test('index', () => { + expect(Object.keys(index)).toMatchInlineSnapshot(` + [ + "Chains", + "Porto", + ] + `) +}) + +test('actions', () => { + expect(Object.keys(actions)).toMatchInlineSnapshot(` + [ + "connect", + "createAccount", + "disconnect", + "grantSession", + "importAccount", + "sessions", + "A", + ] + `) +}) + +test('query', () => { + expect(Object.keys(query)).toMatchInlineSnapshot(` + [ + "sessionsQueryKey", + "Q", + ] + `) +}) + +test('wagmi', () => { + expect(Object.keys(wagmi)).toMatchInlineSnapshot(` + [ + "useConnect", + "useCreateAccount", + "useDisconnect", + "useGrantSession", + "useImportAccount", + "useSessions", + "W", + ] + `) +}) diff --git a/src/internal/accountDelegation.ts b/src/internal/accountDelegation.ts index 550dbc6..357afd9 100644 --- a/src/internal/accountDelegation.ts +++ b/src/internal/accountDelegation.ts @@ -185,8 +185,8 @@ export async function createWebAuthnKey( const key = await WebAuthnP256.createCredential({ authenticatorSelection: { - requireResidentKey: false, residentKey: 'preferred', + requireResidentKey: false, userVerification: 'required', }, rp: rpId diff --git a/test/browser/Caddyfile b/test/browser/Caddyfile new file mode 100644 index 0000000..ee81190 --- /dev/null +++ b/test/browser/Caddyfile @@ -0,0 +1,3 @@ +porto.localhost, www.porto.localhost { + reverse_proxy localhost:3000 +} diff --git a/test/browser/app/create-account/page.test.ts b/test/browser/app/create-account/page.test.ts new file mode 100644 index 0000000..f6ab3a5 --- /dev/null +++ b/test/browser/app/create-account/page.test.ts @@ -0,0 +1,76 @@ +import { type CDPSession, expect, test } from '@playwright/test' + +test('test', async ({ page }) => { + const client = await page.context().newCDPSession(page) + + await client.send('WebAuthn.enable') + + const result = await client.send('WebAuthn.addVirtualAuthenticator', { + options: { + protocol: 'ctap2', + transport: 'internal', + hasResidentKey: true, + hasUserVerification: true, + isUserVerified: true, + }, + }) + const authenticatorId = result.authenticatorId + + await page.goto('./create-account') + + await expect( + page.getByRole('heading', { name: 'experimental_createAccount' }), + ).toBeVisible() + + await simulateSuccessfulPasskeyInput({ + authenticatorId, + client, + trigger() { + return page.getByRole('button', { name: 'Register' }).click() + }, + }) + + // Confirm the passkey was successfully registered + const credentials = await client.send('WebAuthn.getCredentials', { + authenticatorId, + }) + expect(credentials.credentials).toHaveLength(1) + + await expect(page.getByText(/^0x.+/)).toBeVisible() +}) + +async function simulateSuccessfulPasskeyInput(options: { + authenticatorId: string + client: CDPSession + trigger: () => Promise +}) { + const { authenticatorId, client, trigger } = options + + await Promise.all([ + // set `isUserVerified` so subsequent passkey operations will succeed + client.send('WebAuthn.setUserVerified', { + authenticatorId, + isUserVerified: true, + }), + // set `automaticPresenceSimulation` so virtual authenticator will respond to next passkey prompt + client.send('WebAuthn.setAutomaticPresenceSimulation', { + authenticatorId, + enabled: true, + }), + ]) + + // perform user action that triggers passkey prompt + await trigger() + + // wait to receive the event that the passkey was successfully registered or verified + // await new Promise((resolve) => { + // client.on('WebAuthn.credentialAdded', () => resolve()) + // client.on('WebAuthn.credentialAsserted', () => resolve()) + // }) + + // set `automaticPresenceSimulation` option back to false + await client.send('WebAuthn.setAutomaticPresenceSimulation', { + authenticatorId, + enabled: false, + }) +} diff --git a/test/browser/app/create-account/page.tsx b/test/browser/app/create-account/page.tsx new file mode 100644 index 0000000..5897508 --- /dev/null +++ b/test/browser/app/create-account/page.tsx @@ -0,0 +1,26 @@ +'use client' + +import { Porto } from 'porto' +import { useState } from 'react' + +const porto = Porto.create() + +export default function Page() { + const [result, setResult] = useState(null) + return ( +
+

experimental_createAccount

+ + {result &&
{result}
} +
+ ) +} diff --git a/test/browser/app/favicon.ico b/test/browser/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/test/browser/app/globals.css b/test/browser/app/globals.css new file mode 100644 index 0000000..76c781a --- /dev/null +++ b/test/browser/app/globals.css @@ -0,0 +1,5 @@ +:root { + background-color: light-dark(#f8f8f8, #181818); + color: light-dark(#181818, rgba(255, 255, 255, 0.87)); + color-scheme: light dark; +} diff --git a/test/browser/app/layout.tsx b/test/browser/app/layout.tsx new file mode 100644 index 0000000..58d5b61 --- /dev/null +++ b/test/browser/app/layout.tsx @@ -0,0 +1,18 @@ +import type { Metadata } from 'next' +import './globals.css' + +export const metadata = { + title: 'Browser', +} satisfies Metadata + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { + return ( + + {children} + + ) +} diff --git a/test/browser/app/page.tsx b/test/browser/app/page.tsx new file mode 100644 index 0000000..4664f11 --- /dev/null +++ b/test/browser/app/page.tsx @@ -0,0 +1,7 @@ +export default function Page() { + return ( +
+

Porto

+
+ ) +} diff --git a/test/browser/next.config.ts b/test/browser/next.config.ts new file mode 100644 index 0000000..d24b0f6 --- /dev/null +++ b/test/browser/next.config.ts @@ -0,0 +1,15 @@ +import type { NextConfig } from 'next' + +const nextConfig: NextConfig = { + experimental: { + externalDir: true, + }, + webpack(config) { + config.resolve.extensionAlias = { + '.js': ['.js', '.ts'], + } + return config + }, +} + +export default nextConfig diff --git a/test/browser/package.json b/test/browser/package.json new file mode 100644 index 0000000..6740136 --- /dev/null +++ b/test/browser/package.json @@ -0,0 +1,19 @@ +{ + "name": "browser-app", + "private": true, + "type": "module", + "scripts": { + "dev": "next dev" + }, + "dependencies": { + "porto": "workspace:*", + "next": "15.1.0", + "react": "catalog:", + "react-dom": "catalog:" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "catalog:", + "@types/react-dom": "catalog:" + } +} diff --git a/test/browser/tests/index.test.ts b/test/browser/tests/index.test.ts new file mode 100644 index 0000000..0705b9a --- /dev/null +++ b/test/browser/tests/index.test.ts @@ -0,0 +1,7 @@ +import { expect, test } from '@playwright/test' + +test('test', async ({ page }) => { + await page.goto('./') + + await expect(page.getByRole('heading', { name: 'porto' })).toBeVisible() +}) diff --git a/test/browser/tsconfig.json b/test/browser/tsconfig.json new file mode 100644 index 0000000..d8b9323 --- /dev/null +++ b/test/browser/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/tsconfig.json b/tsconfig.json index 4f1d1ce..efff319 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,13 @@ { // This configuration is used for local development and type checking. "extends": "./tsconfig.base.json", - "include": ["scripts", "src"], + "include": [ + "scripts", + "src", + "playwright.config.ts", + "vitest.workspace.ts", + "wagmi.config.ts" + ], "exclude": ["src/_dist"], "compilerOptions": { "baseUrl": "." diff --git a/vitest.workspace.ts b/vitest.workspace.ts new file mode 100644 index 0000000..4a6b28d --- /dev/null +++ b/vitest.workspace.ts @@ -0,0 +1,11 @@ +import { defineWorkspace } from 'vitest/config' + +export default defineWorkspace([ + { + test: { + name: 'porto', + environment: 'node', + include: ['./src/**/*.test.ts'], + }, + }, +]) From 80640fb143ec2c5deec43e51443bf4047ee1444d Mon Sep 17 00:00:00 2001 From: Tom Meagher Date: Thu, 19 Dec 2024 11:33:25 -0500 Subject: [PATCH 2/4] test: start anvil --- .gitignore | 8 ++-- README.md | 8 ++-- package.json | 2 +- playwright.config.ts | 36 --------------- scripts/generate-typed-artifacts.ts | 32 ------------- test/browser/Caddyfile | 10 +++- test/browser/app/create-account/page.tsx | 4 +- test/browser/config.ts | 23 ++++++++++ test/browser/playwright.config.ts | 58 ++++++++++++++++++++++++ 9 files changed, 100 insertions(+), 81 deletions(-) delete mode 100644 playwright.config.ts delete mode 100644 scripts/generate-typed-artifacts.ts create mode 100644 test/browser/config.ts create mode 100644 test/browser/playwright.config.ts diff --git a/.gitignore b/.gitignore index 0609b5a..7966a03 100644 --- a/.gitignore +++ b/.gitignore @@ -39,10 +39,10 @@ src/_generated out # playwright -/test-results/ -/playwright-report/ -/blob-report/ -/playwright/.cache/ +test-results/ +playwright-report/ +blob-report/ +playwright/.cache/ # vercel .vercel diff --git a/README.md b/README.md index 50052f5..294f849 100644 --- a/README.md +++ b/README.md @@ -511,9 +511,9 @@ import { useConnect } from 'porto/wagmi' # Install pnpm $ curl -fsSL https://get.pnpm.io/install.sh | sh - -$ pnpm install # Install modules -$ pnpm wagmi generate # get ABIs, etc. -$ pnpm dev # Run playground +$ pnpm install # Install modules +$ pnpm wagmi generate # Get ABIs, etc. +$ pnpm dev # Run playground ``` ### Contracts @@ -523,7 +523,7 @@ $ pnpm dev # Run playground $ foundryup $ forge build --config-path ./contracts/foundry.toml # Build -$ forge test --config-path ./contracts/foundry.toml # Test +$ forge test --config-path ./contracts/foundry.toml # Test ``` ## License diff --git a/package.json b/package.json index 4c96723..0196d05 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "preinstall": "pnpx only-allow pnpm", "prepare": "pnpm simple-git-hooks", "test": "vitest dev", - "test:browser": "pnpm exec playwright test" + "test:browser": "pnpm exec playwright test -c test/browser/playwright.config.ts" }, "devDependencies": { "@arethetypeswrong/cli": "^0.17.1", diff --git a/playwright.config.ts b/playwright.config.ts deleted file mode 100644 index a6b0e58..0000000 --- a/playwright.config.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { defineConfig, devices } from '@playwright/test' - -/** https://playwright.dev/docs/test-configuration */ -export default defineConfig({ - forbidOnly: !!process.env.CI, - fullyParallel: true, - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, - }, - // name: 'firefox', - // use: { ...devices['Desktop Firefox'] }, - // }, - // { - // name: 'webkit', - // use: { ...devices['Desktop Safari'] }, - // }, - ], - reporter: 'html', - retries: process.env.CI ? 2 : 0, - testDir: './test/browser', - use: { - baseURL: 'https://porto.localhost', - }, - webServer: { - command: - 'caddy start -c test/browser/Caddyfile && pnpm --filter browser-app dev', - url: 'http://127.0.0.1:3000', - reuseExistingServer: !process.env.CI, - stdout: 'pipe', - stderr: 'pipe', - timeout: 5_000, - }, - // workers: process.env.CI ? 1 : undefined, -}) diff --git a/scripts/generate-typed-artifacts.ts b/scripts/generate-typed-artifacts.ts deleted file mode 100644 index de57f91..0000000 --- a/scripts/generate-typed-artifacts.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { appendFile, glob, mkdir, readFile, writeFile } from 'node:fs/promises' -import { resolve } from 'node:path' - -await mkdir(resolve(import.meta.dirname, '../src/_generated'), { - recursive: true, -}) - -const out = resolve(import.meta.dirname, '../src/_generated/contracts.ts') -await writeFile(out, '') - -const fileNames: string[] = [] - -for await (const file of glob( - resolve(import.meta.dirname, '../contracts/out/**/*.json'), -)) { - if (file.includes('build-info')) continue - - const fileName = file.split('/').pop()?.replace('.json', '')! - if (fileNames.includes(fileName)) continue - - const { abi, bytecode } = JSON.parse(await readFile(file, 'utf-8')) - fileNames.push(fileName) - - appendFile( - out, - `export const ${fileName} = ${JSON.stringify( - { abi, bytecode }, - null, - 2, - )} as const;\n\n`, - ) -} diff --git a/test/browser/Caddyfile b/test/browser/Caddyfile index ee81190..3b0cff3 100644 --- a/test/browser/Caddyfile +++ b/test/browser/Caddyfile @@ -1,3 +1,11 @@ porto.localhost, www.porto.localhost { - reverse_proxy localhost:3000 + reverse_proxy localhost:3000 +} + +anvil.porto.localhost { + reverse_proxy localhost:8545 +} + +caddy.porto.localhost { + respond 200 } diff --git a/test/browser/app/create-account/page.tsx b/test/browser/app/create-account/page.tsx index 5897508..e1dd5b1 100644 --- a/test/browser/app/create-account/page.tsx +++ b/test/browser/app/create-account/page.tsx @@ -1,10 +1,8 @@ 'use client' -import { Porto } from 'porto' +import { porto } from '@/config' import { useState } from 'react' -const porto = Porto.create() - export default function Page() { const [result, setResult] = useState(null) return ( diff --git a/test/browser/config.ts b/test/browser/config.ts new file mode 100644 index 0000000..fadad2e --- /dev/null +++ b/test/browser/config.ts @@ -0,0 +1,23 @@ +import { Chains, Porto } from 'porto' +import { http, type Chain } from 'viem' + +const odysseyTestnet = { + ...Chains.odysseyTestnet, + rpcUrls: { + default: { + http: ['https://anvil.porto.localhost'], + webSocket: ['wss://anvil.porto.localhost'], + }, + public: { + http: ['https://anvil.porto.localhost'], + webSocket: ['wss://anvil.porto.localhost'], + }, + }, +} as const satisfies Chain + +export const porto = Porto.create({ + chains: [odysseyTestnet], + transports: { + [odysseyTestnet.id]: http(), + }, +}) diff --git a/test/browser/playwright.config.ts b/test/browser/playwright.config.ts new file mode 100644 index 0000000..c6716f2 --- /dev/null +++ b/test/browser/playwright.config.ts @@ -0,0 +1,58 @@ +import { defineConfig, devices } from '@playwright/test' + +/** https://playwright.dev/docs/test-configuration */ +export default defineConfig({ + forbidOnly: !!process.env.CI, + fullyParallel: true, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + // { + // name: 'firefox', + // use: { ...devices['Desktop Firefox'] }, + // }, + // { + // name: 'webkit', + // use: { ...devices['Desktop Safari'] }, + // }, + ], + reporter: process.env.CI ? 'github' : 'list', + retries: process.env.CI ? 2 : 0, + testDir: './', + use: { + baseURL: 'https://porto.localhost', + }, + webServer: [ + { + command: ['pnpm dev'].join(' && '), + url: 'http://127.0.0.1:3000', + reuseExistingServer: !process.env.CI, + stdout: 'ignore', + stderr: 'pipe', + timeout: 5_000, + }, + { + command: [ + 'anvil', + '--chain-id 911867', + `--fork-url ${process.env.ODYSSEY_FORK_URL ?? 'https://911867.rpc.thirdweb.com'}`, + '--fork-block-number 6030102', + ].join(' '), + url: 'http://127.0.0.1:8545', + reuseExistingServer: !process.env.CI, + stdout: 'ignore', + stderr: 'pipe', + timeout: 5_000, + }, + { + command: 'caddy run -c Caddyfile', + url: 'http://localhost:2019/reverse_proxy/upstreams', + reuseExistingServer: !process.env.CI, + stdout: 'ignore', + stderr: 'pipe', + timeout: 5_000, + }, + ], +}) From 9b216cff82660c7a273c94a71b5b3a105ed91be5 Mon Sep 17 00:00:00 2001 From: Tom Meagher Date: Thu, 19 Dec 2024 20:00:30 -0500 Subject: [PATCH 3/4] refactor: playwright => vitest browser --- Caddyfile | 4 + package.json | 11 +- pnpm-lock.yaml | 1594 +++++++++++++++--- src/{ => exports}/actions.ts | 4 +- src/{ => exports}/exports.test.ts | 2 +- src/exports/query.ts | 2 + src/{ => exports}/wagmi.ts | 4 +- src/index.browser.test.ts | 25 + src/package.json | 18 +- src/query.ts | 2 - src/test-utils.ts | 111 ++ test/browser/Caddyfile | 11 - test/browser/app/create-account/page.test.ts | 76 - test/browser/app/create-account/page.tsx | 24 - test/browser/app/favicon.ico | Bin 25931 -> 0 bytes test/browser/app/globals.css | 5 - test/browser/app/layout.tsx | 18 - test/browser/app/page.tsx | 7 - test/browser/config.ts | 23 - test/browser/next.config.ts | 15 - test/browser/package.json | 19 - test/browser/playwright.config.ts | 58 - test/browser/tests/index.test.ts | 7 - test/browser/tsconfig.json | 27 - tsconfig.json | 5 +- vitest.workspace.ts | 86 +- 26 files changed, 1631 insertions(+), 527 deletions(-) create mode 100644 Caddyfile rename src/{ => exports}/actions.ts (53%) rename src/{ => exports}/exports.test.ts (96%) create mode 100644 src/exports/query.ts rename src/{ => exports}/wagmi.ts (57%) create mode 100644 src/index.browser.test.ts delete mode 100644 src/query.ts create mode 100644 src/test-utils.ts delete mode 100644 test/browser/Caddyfile delete mode 100644 test/browser/app/create-account/page.test.ts delete mode 100644 test/browser/app/create-account/page.tsx delete mode 100644 test/browser/app/favicon.ico delete mode 100644 test/browser/app/globals.css delete mode 100644 test/browser/app/layout.tsx delete mode 100644 test/browser/app/page.tsx delete mode 100644 test/browser/config.ts delete mode 100644 test/browser/next.config.ts delete mode 100644 test/browser/package.json delete mode 100644 test/browser/playwright.config.ts delete mode 100644 test/browser/tests/index.test.ts delete mode 100644 test/browser/tsconfig.json diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..7e67ac2 --- /dev/null +++ b/Caddyfile @@ -0,0 +1,4 @@ +anvil.porto.localhost { + reverse_proxy localhost:8545 +} + diff --git a/package.json b/package.json index 0196d05..25983dc 100644 --- a/package.json +++ b/package.json @@ -24,22 +24,25 @@ "preinstall": "pnpx only-allow pnpm", "prepare": "pnpm simple-git-hooks", "test": "vitest dev", - "test:browser": "pnpm exec playwright test -c test/browser/playwright.config.ts" + "test:browser": "vitest --project browser" }, "devDependencies": { "@arethetypeswrong/cli": "^0.17.1", "@biomejs/biome": "^1.8.3", "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.7", - "@playwright/test": "^1.49.1", "@size-limit/preset-big-lib": "^11.1.6", "@tanstack/react-query": "catalog:", + "@testing-library/react": "^16.1.0", "@types/node": "^22.5.4", "@types/react": "catalog:", + "@vitejs/plugin-react": "catalog:", + "@vitest/browser": "^2.1.8", "@wagmi/cli": "^2.1.18", "knip": "^5.30.6", "publint": "^0.2.12", "react": "catalog:", + "react-dom": "catalog:", "sherif": "^0.11.0", "simple-git-hooks": "^2.11.1", "size-limit": "^11.1.6", @@ -47,7 +50,9 @@ "typescript": "catalog:", "viem": "catalog:", "vitest": "^2.1.8", - "wagmi": "catalog:" + "vitest-browser-react": "^0.0.4", + "wagmi": "catalog:", + "webdriverio": "^9.4.5" }, "packageManager": "pnpm@9.7.0", "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c462791..0fc103a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,21 +50,27 @@ importers: '@changesets/cli': specifier: ^2.27.7 version: 2.27.9 - '@playwright/test': - specifier: ^1.49.1 - version: 1.49.1 '@size-limit/preset-big-lib': specifier: ^11.1.6 version: 11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10) '@tanstack/react-query': specifier: 'catalog:' version: 5.59.20(react@18.3.1) + '@testing-library/react': + specifier: ^16.1.0 + version: 16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/node': specifier: ^22.5.4 version: 22.9.0 '@types/react': specifier: 'catalog:' version: 18.3.12 + '@vitejs/plugin-react': + specifier: 'catalog:' + version: 4.3.4(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) + '@vitest/browser': + specifier: ^2.1.8 + version: 2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)) '@wagmi/cli': specifier: ^2.1.18 version: 2.1.18(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) @@ -77,6 +83,9 @@ importers: react: specifier: 'catalog:' version: 18.3.1 + react-dom: + specifier: 'catalog:' + version: 18.3.1(react@18.3.1) sherif: specifier: ^0.11.0 version: 0.11.0 @@ -97,10 +106,16 @@ importers: version: 2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) vitest: specifier: ^2.1.8 - version: 2.1.8(@types/node@22.9.0)(terser@5.37.0) + version: 2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(terser@5.37.0) + vitest-browser-react: + specifier: ^0.0.4 + version: 0.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(terser@5.37.0)) wagmi: specifier: 'catalog:' - version: 2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + version: 2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + webdriverio: + specifier: ^9.4.5 + version: 9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) app: dependencies: @@ -112,7 +127,7 @@ importers: version: 1.34.3 next: specifier: ^15 - version: 15.0.3(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: 'catalog:' version: 18.3.1 @@ -158,7 +173,7 @@ importers: version: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) wagmi: specifier: 'catalog:' - version: 2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + version: 2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) devDependencies: '@types/react': specifier: 'catalog:' @@ -231,31 +246,6 @@ importers: specifier: ^5.0.1 version: 5.0.1(@types/react@19.0.1)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)) - test/browser: - dependencies: - next: - specifier: 15.1.0 - version: 15.1.0(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - porto: - specifier: workspace:* - version: link:../../src - react: - specifier: 'catalog:' - version: 18.3.1 - react-dom: - specifier: 'catalog:' - version: 18.3.1(react@18.3.1) - devDependencies: - '@types/node': - specifier: ^20 - version: 20.17.6 - '@types/react': - specifier: 'catalog:' - version: 18.3.12 - '@types/react-dom': - specifier: 'catalog:' - version: 18.3.1 - packages: '@adraffy/ens-normalize@1.11.0': @@ -417,6 +407,15 @@ packages: cpu: [x64] os: [win32] + '@bundled-es-modules/cookie@2.0.1': + resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} + + '@bundled-es-modules/statuses@1.0.1': + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + + '@bundled-es-modules/tough-cookie@0.1.6': + resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@changesets/apply-release-plan@7.0.5': resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} @@ -1038,6 +1037,26 @@ packages: cpu: [x64] os: [win32] + '@inquirer/confirm@5.1.0': + resolution: {integrity: sha512-osaBbIMEqVFjTX5exoqPXs6PilWQdjaLhGtMDXMXg/yxkHXNq43GlxGyTA35lK2HpzUgDN+Cjh/2AmqCN0QJpw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/core@10.1.1': + resolution: {integrity: sha512-rmZVXy9iZvO3ZStEe/ayuuwIJ23LSF13aPMlLMTQARX6lGUBDHGV8UB5i9MRrfy0+mZwt5/9bdy8llszSD3NQA==} + engines: {node: '>=18'} + + '@inquirer/figures@1.0.8': + resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==} + engines: {node: '>=18'} + + '@inquirer/type@3.0.1': + resolution: {integrity: sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1189,108 +1208,61 @@ packages: resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} deprecated: Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion + '@mswjs/interceptors@0.37.3': + resolution: {integrity: sha512-USvgCL/uOGFtVa6SVyRrC8kIAedzRohxIXN5LISlg5C5vLZCn7dgMFVSNhSF9cuBEFrm/O2spDWEZeMnw4ZXYg==} + engines: {node: '>=18'} + '@next/env@15.0.3': resolution: {integrity: sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==} - '@next/env@15.1.0': - resolution: {integrity: sha512-UcCO481cROsqJuszPPXJnb7GGuLq617ve4xuAyyNG4VSSocJNtMU5Fsx+Lp6mlN8c7W58aZLc5y6D/2xNmaK+w==} - '@next/swc-darwin-arm64@15.0.3': resolution: {integrity: sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-arm64@15.1.0': - resolution: {integrity: sha512-ZU8d7xxpX14uIaFC3nsr4L++5ZS/AkWDm1PzPO6gD9xWhFkOj2hzSbSIxoncsnlJXB1CbLOfGVN4Zk9tg83PUw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - '@next/swc-darwin-x64@15.0.3': resolution: {integrity: sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-darwin-x64@15.1.0': - resolution: {integrity: sha512-DQ3RiUoW2XC9FcSM4ffpfndq1EsLV0fj0/UY33i7eklW5akPUCo6OX2qkcLXZ3jyPdo4sf2flwAED3AAq3Om2Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - '@next/swc-linux-arm64-gnu@15.0.3': resolution: {integrity: sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-gnu@15.1.0': - resolution: {integrity: sha512-M+vhTovRS2F//LMx9KtxbkWk627l5Q7AqXWWWrfIzNIaUFiz2/NkOFkxCFyNyGACi5YbA8aekzCLtbDyfF/v5Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-arm64-musl@15.0.3': resolution: {integrity: sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.0': - resolution: {integrity: sha512-Qn6vOuwaTCx3pNwygpSGtdIu0TfS1KiaYLYXLH5zq1scoTXdwYfdZtwvJTpB1WrLgiQE2Ne2kt8MZok3HlFqmg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-x64-gnu@15.0.3': resolution: {integrity: sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.0': - resolution: {integrity: sha512-yeNh9ofMqzOZ5yTOk+2rwncBzucc6a1lyqtg8xZv0rH5znyjxHOWsoUtSq4cUTeeBIiXXX51QOOe+VoCjdXJRw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-linux-x64-musl@15.0.3': resolution: {integrity: sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.0': - resolution: {integrity: sha512-t9IfNkHQs/uKgPoyEtU912MG6a1j7Had37cSUyLTKx9MnUpjj+ZDKw9OyqTI9OwIIv0wmkr1pkZy+3T5pxhJPg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-win32-arm64-msvc@15.0.3': resolution: {integrity: sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-arm64-msvc@15.1.0': - resolution: {integrity: sha512-WEAoHyG14t5sTavZa1c6BnOIEukll9iqFRTavqRVPfYmfegOAd5MaZfXgOGG6kGo1RduyGdTHD4+YZQSdsNZXg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - '@next/swc-win32-x64-msvc@15.0.3': resolution: {integrity: sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.0': - resolution: {integrity: sha512-J1YdKuJv9xcixzXR24Dv+4SaDKc2jj31IVUEMdO5xJivMTXuE6MAdIi4qPjSymHuFG8O5wbfWKnhJUcHHpj5CA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - '@noble/ciphers@1.0.0': resolution: {integrity: sha512-wH5EHOmLi0rEazphPbecAzmjd12I6/Yv/SiHdkA9LSycsQk7RuuTp7am5/o62qYr0RScE7Pc9icXGBbsr6cesA==} engines: {node: ^14.21.3 || >=16} @@ -1322,6 +1294,15 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@parcel/watcher-android-arm64@2.5.0': resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} engines: {node: '>= 10.0.0'} @@ -1414,10 +1395,11 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.49.1': - resolution: {integrity: sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==} - engines: {node: '>=18'} - hasBin: true + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@promptbook/utils@0.69.5': + resolution: {integrity: sha512-xm5Ti/Hp3o4xHrsK9Yy3MS6KbDxYbq485hDsFvxqaNA7equHLPdo8H8faTitTeb14QCDfLW4iwCxdVYu5sn6YQ==} '@puppeteer/browsers@2.2.2': resolution: {integrity: sha512-hZ/JhxPIceWaGSEzUZp83/8M49CoxlkuThfTR7t4AoCu5+ZvJ3vktLm60Otww2TXeROB5igiZ8D9oPQh6ckBVg==} @@ -1643,9 +1625,6 @@ packages: '@swc/helpers@0.5.13': resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@tanstack/query-core@5.59.20': resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==} @@ -1654,9 +1633,37 @@ packages: peerDependencies: react: ^18 || ^19 + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/react@16.1.0': + resolution: {integrity: sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@testing-library/user-event@14.5.2': + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1669,6 +1676,9 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -1708,9 +1718,24 @@ packages: '@types/react@19.0.1': resolution: {integrity: sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ==} + '@types/sinonjs__fake-timers@8.1.5': + resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} + + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/which@2.0.2': + resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} + + '@types/ws@8.5.13': + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -1730,6 +1755,21 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + '@vitest/browser@2.1.8': + resolution: {integrity: sha512-OWVvEJThRgxlNMYNVLEK/9qVkpRcLvyuKLngIV3Hob01P56NjPHprVBYn+rx4xAJudbM9yrCrywPIEuA3Xyo8A==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: 2.1.8 + webdriverio: '*' + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + '@vitest/expect@2.1.8': resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==} @@ -1871,6 +1911,29 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + '@wdio/config@9.4.4': + resolution: {integrity: sha512-w1Qo6QywLSGxmoglU4BiqDGNmFbwh/L6BRud4AO9nGgTuwKy6UkT7KevzlkIRiCHtdqkkjExR3xUi2OgjMdHAA==} + engines: {node: '>=18.20.0'} + + '@wdio/logger@9.4.4': + resolution: {integrity: sha512-BXx8RXFUW2M4dcO6t5Le95Hi2ZkTQBRsvBQqLekT2rZ6Xmw8ZKZBPf0FptnoftFGg6dYmwnDidYv/0+4PiHjpQ==} + engines: {node: '>=18.20.0'} + + '@wdio/protocols@9.4.4': + resolution: {integrity: sha512-IqbAWe5feY3xOwjbiW/2iwcbDU+nm5CX5Om835mxaNWqEoQiaZuTin4YgtgsPeSEBcSFtQ+2ooswr/6vIZdxSw==} + + '@wdio/repl@9.4.4': + resolution: {integrity: sha512-kchPRhoG/pCn4KhHGiL/ocNhdpR8OkD2e6sANlSUZ4TGBVi86YSIEjc2yXUwLacHknC/EnQk/SFnqd4MsNjGGg==} + engines: {node: '>=18.20.0'} + + '@wdio/types@9.4.4': + resolution: {integrity: sha512-Z2TAVMZiz4wCfP7ZdHqUXlYfF4qj5bBOV25A7tHxFbbdWPvFb8sSW3SU2+fxSwu02n5sV1mgfRYOsloypOXBnw==} + engines: {node: '>=18.20.0'} + + '@wdio/utils@9.4.4': + resolution: {integrity: sha512-CH2uHziYKZrm6xvI2Drfha+CBAK3cCHTFqhxfjP2dhz5kcCQfCEn22Bj12t2jYTILNvnxKFCxZyk+VEcQNMIKg==} + engines: {node: '>=18.20.0'} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -1922,6 +1985,10 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + '@zip.js/zip.js@2.7.54': + resolution: {integrity: sha512-qMrJVg2hoEsZJjMJez9yI2+nZlBUxgYzGV3mqcb2B/6T1ihXp0fWBDYlVHlHquuorgNUQP5a8qSmX6HF5rFJNg==} + engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'} + abitype@1.0.6: resolution: {integrity: sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==} peerDependencies: @@ -1933,6 +2000,10 @@ packages: zod: optional: true + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -1958,6 +2029,10 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + ansi-escapes@7.0.0: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} @@ -1974,6 +2049,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -1985,6 +2064,14 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -1994,6 +2081,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -2009,6 +2099,9 @@ packages: async-mutex@0.2.6: resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} @@ -2062,6 +2155,9 @@ packages: bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bowser@2.11.0: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} @@ -2083,6 +2179,10 @@ packages: buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2155,6 +2255,13 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2203,6 +2310,10 @@ packages: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -2257,6 +2368,14 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -2270,6 +2389,10 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2278,6 +2401,10 @@ packages: engines: {node: '>=0.8'} hasBin: true + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} @@ -2297,6 +2424,19 @@ packages: crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-shorthand-properties@1.1.2: + resolution: {integrity: sha512-C2AugXIpRGQTxaCW0N7n5jD/p5irUmCrwl03TrnMFBHDbdq44CFWR2zO7rK9xPN4Eo3pUxC4vQzQgbIpzrD1PQ==} + + css-value@0.0.1: + resolution: {integrity: sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -2305,6 +2445,10 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -2347,6 +2491,10 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decamelize@6.0.0: + resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} @@ -2358,6 +2506,10 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} + deepmerge-ts@7.1.3: + resolution: {integrity: sha512-qCSH6I0INPxd9Y1VtAiLpnYvz5O//6rCfJXKk0z66Up9/VOSr+1yS8XSKA5IWRxjocFGlzPyaZYe+jxq7OOLtQ==} + engines: {node: '>=16.0.0'} + defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -2372,6 +2524,10 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + destr@2.0.3: resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} @@ -2407,6 +2563,22 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dotenv-expand@10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} @@ -2432,6 +2604,15 @@ packages: resolution: {integrity: sha512-SmUG449n1w1YGvJD9R30tBGvpxTxA0cnn0rfvpFIBvmezfIhagLjsH2JG8HBHOLS8slXsPh48II7IDUTH/J3Mg==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} + edge-paths@3.0.5: + resolution: {integrity: sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==} + engines: {node: '>=14.0.0'} + + edgedriver@6.1.1: + resolution: {integrity: sha512-/dM/PoBf22Xg3yypMWkmRQrBKEnSyNaZ7wHGCT9+qqT14izwtFT+QvdR89rjNkMfXwW+bSFoqOfbcvM+2Cyc7w==} + engines: {node: '>=18.0.0'} + hasBin: true + electron-to-chromium@1.5.56: resolution: {integrity: sha512-7lXb9dAvimCFdvUMTyucD4mnIndt/xhRKFAlky0CyFogdnNmdPQNoHI23msF/2V4mpTxMzgMdjK4+YRlFlRQZw==} @@ -2450,6 +2631,9 @@ packages: encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -2468,6 +2652,10 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -2561,6 +2749,10 @@ packages: ethereum-cryptography@2.2.1: resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + eventemitter2@6.4.9: resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} @@ -2595,6 +2787,9 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true + fast-deep-equal@2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2615,6 +2810,10 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-xml-parser@4.5.1: + resolution: {integrity: sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w==} + hasBin: true + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -2629,6 +2828,10 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -2659,6 +2862,10 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -2674,11 +2881,6 @@ 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} @@ -2687,6 +2889,11 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + geckodriver@5.0.0: + resolution: {integrity: sha512-vn7TtQ3b9VMJtVXsyWtQQl1fyBVFhQy7UvJF96kPuuJ0or5THH496AD3eUyaDD11+EqCxH9t6V+EP9soZQk4YQ==} + engines: {node: '>=18.0.0'} + hasBin: true + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2702,6 +2909,10 @@ packages: get-port-please@3.1.2: resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + get-port@7.1.0: + resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + engines: {node: '>=16'} + get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -2755,6 +2966,13 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + + graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + h3@1.13.0: resolution: {integrity: sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==} @@ -2784,6 +3002,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + hey-listen@1.0.8: resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} @@ -2793,6 +3014,12 @@ packages: hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + htmlfy@0.3.2: + resolution: {integrity: sha512-FsxzfpeDYRqn1emox9VpxMPfGjADoUmmup8D604q497R0VNxiXs4ZZTN2QzkaMA5C9aHGUoe1iQRVSm+HK9xuA==} + + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -2822,6 +3049,10 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + idb-keyval@6.2.1: resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} @@ -2836,6 +3067,12 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -2906,10 +3143,17 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -2948,6 +3192,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + isows@1.0.6: resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} peerDependencies: @@ -3011,6 +3259,9 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + keccak@3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} @@ -3026,6 +3277,13 @@ packages: '@types/node': '>=18' typescript: '>=5.0.4' + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -3058,6 +3316,9 @@ packages: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} + locate-app@2.5.0: + resolution: {integrity: sha512-xIqbzPMBYArJRmPGUZD9CzV9wOqmVtQnaAn3wrj3s6WYW0bQvPI7x+sPYUGmDTYMHefVK//zc6HEYZ1qnxIK+Q==} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3066,16 +3327,32 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash.zip@4.2.0: + resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@5.1.0: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} + loglevel-plugin-prefix@0.8.4: + resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} + + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -3100,6 +3377,10 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} @@ -3191,15 +3472,33 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msw@2.7.0: + resolution: {integrity: sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3249,33 +3548,16 @@ packages: sass: optional: true - next@15.1.0: - resolution: {integrity: sha512-QKhzt6Y8rgLNlj30izdMbxAwjHMFANnLwDwZ+WQh5sMhyt4lEBqDK9QpvWHtIM4rINKPoJ8aiRZKg5ULSybVHw==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + node-emoji@2.2.0: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} @@ -3292,6 +3574,10 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -3324,6 +3610,9 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + obj-multiplex@1.0.0: resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} @@ -3366,6 +3655,9 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + ox@0.1.2: resolution: {integrity: sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww==} peerDependencies: @@ -3428,6 +3720,9 @@ packages: package-manager-detector@0.2.2: resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + parse-ms@4.0.0: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} @@ -3435,12 +3730,21 @@ packages: parse5-htmlparser2-tree-adapter@6.0.1: resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + parse5@5.1.1: resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3464,6 +3768,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -3526,16 +3833,6 @@ packages: pkg-types@1.2.1: resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} - playwright-core@1.49.1: - resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==} - engines: {node: '>=18'} - hasBin: true - - playwright@1.49.1: - resolution: {integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==} - engines: {node: '>=18'} - hasBin: true - pngjs@5.0.0: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} @@ -3606,6 +3903,10 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-ms@9.2.0: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} @@ -3616,6 +3917,10 @@ packages: process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -3637,6 +3942,9 @@ packages: pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + publint@0.2.12: resolution: {integrity: sha512-YNeUtCVeM4j9nDiTT2OPczmlyzOkIXNtdDZnSuajAxS/nZ6j3t7Vs9SUB4euQNddiltIwu7Tdd3s+hr08fAsMw==} engines: {node: '>=16'} @@ -3669,10 +3977,16 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + query-selector-shadow-dom@1.0.1: + resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==} + query-string@7.1.3: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -3693,6 +4007,9 @@ packages: peerDependencies: react: ^18.3.1 + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-native-webview@11.26.1: resolution: {integrity: sha512-hC7BkxOpf+z0UKhxFSFTPAM4shQzYmZHoELa6/8a/MspcjEP7ukYKpuSUTLDywQditT8yI9idfcKvfZDKQExGw==} peerDependencies: @@ -3721,6 +4038,13 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readable-stream@4.6.0: + resolution: {integrity: sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3743,6 +4067,9 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -3754,6 +4081,9 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true + resq@1.11.0: + resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==} + restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3762,6 +4092,9 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rgb2hex@0.2.5: + resolution: {integrity: sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==} + rollup@4.25.0: resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3774,6 +4107,10 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} + safaridriver@1.0.0: + resolution: {integrity: sha512-J92IFbskyo7OYB3Dt4aTdyhag1GlInrfbPCmMteb7aBK7PwlnGz1HI0+oyNN97j7pV9DqUAVoVgkNRMrfY47mQ==} + engines: {node: '>=18.0.0'} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -3808,6 +4145,10 @@ packages: engines: {node: '>=10'} hasBin: true + serialize-error@11.0.3: + resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} + engines: {node: '>=14.16'} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -3818,6 +4159,9 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true @@ -3893,6 +4237,10 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} + size-limit@11.1.6: resolution: {integrity: sha512-S5ux2IB8rU26xwVgMskmknGMFkieaIAqDLuwgKiypk6oa4lFsie8yFPrzRFV+yrLDY2GddjXuCaVk5PveVOHiQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3944,6 +4292,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + spacetrim@0.11.59: + resolution: {integrity: sha512-lLYsktklSRKprreOm7NXReW8YiX2VBjbgmXYEziOoGf/qsJqAEACaDvoTtUOycwjpaSh+bT8eu0KrJn7UNxiCg==} + spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -3964,6 +4315,10 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + std-env@3.8.0: resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} @@ -3981,6 +4336,9 @@ packages: streamx@2.21.1: resolution: {integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==} + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} @@ -4019,6 +4377,9 @@ packages: resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} engines: {node: '>=14.16'} + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -4153,6 +4514,14 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -4170,6 +4539,22 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@4.26.0: + resolution: {integrity: sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==} + engines: {node: '>=16'} + + type-fest@4.30.2: + resolution: {integrity: sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==} + engines: {node: '>=16'} + typescript@5.6.1-rc: resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} engines: {node: '>=14.17'} @@ -4200,6 +4585,10 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@6.21.0: + resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} + engines: {node: '>=18.17'} + unenv@1.10.0: resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} @@ -4211,6 +4600,10 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -4275,6 +4668,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} @@ -4283,6 +4679,10 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + userhome@1.0.1: + resolution: {integrity: sha512-5cnLm4gseXjAclKowC4IjByaGsjtAoV6PrOQOljplNB54ReUYJP8HdAFq2muHinSDAh09PPX/uXDPfdxRHvuSA==} + engines: {node: '>= 0.8.0'} + utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} @@ -4361,6 +4761,22 @@ packages: terser: optional: true + vitest-browser-react@0.0.4: + resolution: {integrity: sha512-4uK8zgo5eHlhrBVEPX8ejRt8Bn4gzV6OZFTPdb1en3FtgjEhhst400XkIQHUC875Q90rOO5Tc4zPpCl8YXvoxg==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + '@types/react': '>18.0.0' + '@types/react-dom': '>18.0.0' + '@vitest/browser': '>=2.1.0' + react: '>18.0.0' + react-dom: '>18.0.0' + vitest: '>=2.1.0' + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + vitest@2.1.8: resolution: {integrity: sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4397,6 +4813,11 @@ packages: typescript: optional: true + wait-port@1.1.0: + resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} + engines: {node: '>=10'} + hasBin: true + watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} @@ -4404,9 +4825,26 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + webauthn-p256@0.0.10: resolution: {integrity: sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA==} + webdriver@9.4.4: + resolution: {integrity: sha512-F/QxX3TNfkBWzYC0Ywz0oRRUtvUEFUM59pob19gs+lZ2seXKKCJ8vVLzIWcT9XBU8dFAWN6Mzqi5FypHWeBgfw==} + engines: {node: '>=18.20.0'} + + webdriverio@9.4.5: + resolution: {integrity: sha512-tc22NSwKbXNROhafzktoQnhfkx0bhvh9a+XVaVu3mLhaiOmymIGDcS2NyRoOn3Sq4JxWJuOUwTO6f6jNkFJ5bQ==} + engines: {node: '>=18.20.0'} + peerDependencies: + puppeteer-core: ^22.3.0 + peerDependenciesMeta: + puppeteer-core: + optional: true + webextension-polyfill@0.10.0: resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} @@ -4427,6 +4865,14 @@ packages: webpack-cli: optional: true + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -4446,6 +4892,11 @@ packages: engines: {node: '>= 8'} hasBin: true + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -4574,6 +5025,14 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + zod-validation-error@3.4.0: resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} engines: {node: '>=18.0.0'} @@ -4804,6 +5263,19 @@ snapshots: '@biomejs/cli-win32-x64@1.9.4': optional: true + '@bundled-es-modules/cookie@2.0.1': + dependencies: + cookie: 0.7.2 + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + '@changesets/apply-release-plan@7.0.5': dependencies: '@changesets/config': 3.0.3 @@ -4975,13 +5447,37 @@ snapshots: transitivePeerDependencies: - supports-color - '@coinbase/wallet-sdk@4.2.1(@types/node@22.9.0)(terser@5.37.0)': + '@coinbase/wallet-sdk@4.2.1(@types/node@22.9.0)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(terser@5.37.0)': + dependencies: + '@noble/hashes': 1.5.0 + clsx: 1.2.1 + eventemitter3: 5.0.1 + preact: 10.24.3 + vitest: 2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(terser@5.37.0) + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@types/node' + - '@vitest/browser' + - '@vitest/ui' + - happy-dom + - jsdom + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + '@coinbase/wallet-sdk@4.2.1(@types/node@22.9.0)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.37.0)': dependencies: '@noble/hashes': 1.5.0 clsx: 1.2.1 eventemitter3: 5.0.1 preact: 10.24.3 - vitest: 2.1.8(@types/node@22.9.0)(terser@5.37.0) + vitest: 2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.37.0) transitivePeerDependencies: - '@edge-runtime/vm' - '@types/node' @@ -5316,6 +5812,32 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true + '@inquirer/confirm@5.1.0(@types/node@22.9.0)': + dependencies: + '@inquirer/core': 10.1.1(@types/node@22.9.0) + '@inquirer/type': 3.0.1(@types/node@22.9.0) + '@types/node': 22.9.0 + + '@inquirer/core@10.1.1(@types/node@22.9.0)': + dependencies: + '@inquirer/figures': 1.0.8 + '@inquirer/type': 3.0.1(@types/node@22.9.0) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + transitivePeerDependencies: + - '@types/node' + + '@inquirer/figures@1.0.8': {} + + '@inquirer/type@3.0.1(@types/node@22.9.0)': + dependencies: + '@types/node': 22.9.0 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -5579,58 +6101,41 @@ snapshots: '@motionone/dom': 10.18.0 tslib: 2.8.1 - '@next/env@15.0.3': {} + '@mswjs/interceptors@0.37.3': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 - '@next/env@15.1.0': {} + '@next/env@15.0.3': {} '@next/swc-darwin-arm64@15.0.3': optional: true - '@next/swc-darwin-arm64@15.1.0': - optional: true - '@next/swc-darwin-x64@15.0.3': optional: true - '@next/swc-darwin-x64@15.1.0': - optional: true - '@next/swc-linux-arm64-gnu@15.0.3': optional: true - '@next/swc-linux-arm64-gnu@15.1.0': - optional: true - '@next/swc-linux-arm64-musl@15.0.3': optional: true - '@next/swc-linux-arm64-musl@15.1.0': - optional: true - '@next/swc-linux-x64-gnu@15.0.3': optional: true - '@next/swc-linux-x64-gnu@15.1.0': - optional: true - '@next/swc-linux-x64-musl@15.0.3': optional: true - '@next/swc-linux-x64-musl@15.1.0': - optional: true - '@next/swc-win32-arm64-msvc@15.0.3': optional: true - '@next/swc-win32-arm64-msvc@15.1.0': - optional: true - '@next/swc-win32-x64-msvc@15.0.3': optional: true - '@next/swc-win32-x64-msvc@15.1.0': - optional: true - '@noble/ciphers@1.0.0': {} '@noble/curves@1.4.2': @@ -5657,6 +6162,15 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + '@parcel/watcher-android-arm64@2.5.0': optional: true @@ -5725,9 +6239,11 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.49.1': + '@polka/url@1.0.0-next.28': {} + + '@promptbook/utils@0.69.5': dependencies: - playwright: 1.49.1 + spacetrim: 0.11.59 '@puppeteer/browsers@2.2.2': dependencies: @@ -6016,10 +6532,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.15': - dependencies: - tslib: 2.8.1 - '@tanstack/query-core@5.59.20': {} '@tanstack/react-query@5.59.20(react@18.3.1)': @@ -6027,8 +6539,35 @@ snapshots: '@tanstack/query-core': 5.59.20 react: 18.3.1 + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.0 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/react@16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@testing-library/dom': 10.4.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + '@tootallnate/quickjs-emscripten@0.23.0': {} + '@types/aria-query@5.0.4': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.26.2 @@ -6050,6 +6589,8 @@ snapshots: dependencies: '@babel/types': 7.26.0 + '@types/cookie@0.6.0': {} + '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 @@ -6095,8 +6636,20 @@ snapshots: dependencies: csstype: 3.1.3 + '@types/sinonjs__fake-timers@8.1.5': {} + + '@types/statuses@2.0.5': {} + + '@types/tough-cookie@4.0.5': {} + '@types/trusted-types@2.0.7': {} + '@types/which@2.0.2': {} + + '@types/ws@8.5.13': + dependencies: + '@types/node': 22.9.0 + '@types/yauzl@2.10.3': dependencies: '@types/node': 22.9.0 @@ -6125,6 +6678,49 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) + '@vitest/utils': 2.1.8 + magic-string: 0.30.12 + msw: 2.7.0(@types/node@22.9.0)(typescript@5.6.3) + sirv: 3.0.0 + tinyrainbow: 1.2.0 + vitest: 2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(terser@5.37.0) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + webdriverio: 9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite + + '@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) + '@vitest/utils': 2.1.8 + magic-string: 0.30.12 + msw: 2.7.0(@types/node@22.9.0)(typescript@5.7.2) + sirv: 3.0.0 + tinyrainbow: 1.2.0 + vitest: 2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.37.0) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + webdriverio: 9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite + optional: true + '@vitest/expect@2.1.8': dependencies: '@vitest/spy': 2.1.8 @@ -6132,12 +6728,22 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))': + '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))': + dependencies: + '@vitest/spy': 2.1.8 + estree-walker: 3.0.3 + magic-string: 0.30.12 + optionalDependencies: + msw: 2.7.0(@types/node@22.9.0)(typescript@5.6.3) + vite: 5.4.11(@types/node@22.9.0)(terser@5.37.0) + + '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))': dependencies: '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: + msw: 2.7.0(@types/node@22.9.0)(typescript@5.7.2) vite: 5.4.11(@types/node@22.9.0)(terser@5.37.0) '@vitest/pretty-format@2.1.8': @@ -6193,9 +6799,9 @@ snapshots: - bufferutil - utf-8-validate - '@wagmi/connectors@5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/connectors@5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': dependencies: - '@coinbase/wallet-sdk': 4.2.1(@types/node@22.9.0)(terser@5.37.0) + '@coinbase/wallet-sdk': 4.2.1(@types/node@22.9.0)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(terser@5.37.0) '@metamask/sdk': 0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.4(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) @@ -6243,9 +6849,9 @@ snapshots: - utf-8-validate - zod - '@wagmi/connectors@5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/connectors@5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': dependencies: - '@coinbase/wallet-sdk': 4.2.1(@types/node@22.9.0)(terser@5.37.0) + '@coinbase/wallet-sdk': 4.2.1(@types/node@22.9.0)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.37.0) '@metamask/sdk': 0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.4(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) @@ -6633,6 +7239,52 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 + '@wdio/config@9.4.4': + dependencies: + '@wdio/logger': 9.4.4 + '@wdio/types': 9.4.4 + '@wdio/utils': 9.4.4 + deepmerge-ts: 7.1.3 + glob: 10.4.5 + import-meta-resolve: 4.1.0 + transitivePeerDependencies: + - supports-color + + '@wdio/logger@9.4.4': + dependencies: + chalk: 5.3.0 + loglevel: 1.9.2 + loglevel-plugin-prefix: 0.8.4 + strip-ansi: 7.1.0 + + '@wdio/protocols@9.4.4': {} + + '@wdio/repl@9.4.4': + dependencies: + '@types/node': 20.17.6 + + '@wdio/types@9.4.4': + dependencies: + '@types/node': 20.17.6 + + '@wdio/utils@9.4.4': + dependencies: + '@puppeteer/browsers': 2.6.1 + '@wdio/logger': 9.4.4 + '@wdio/types': 9.4.4 + decamelize: 6.0.0 + deepmerge-ts: 7.1.3 + edgedriver: 6.1.1 + geckodriver: 5.0.0 + get-port: 7.1.0 + import-meta-resolve: 4.1.0 + locate-app: 2.5.0 + safaridriver: 1.0.0 + split2: 4.2.0 + wait-port: 1.1.0 + transitivePeerDependencies: + - supports-color + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -6713,6 +7365,8 @@ snapshots: '@xtuc/long@4.2.2': {} + '@zip.js/zip.js@2.7.54': {} + abitype@1.0.6(typescript@5.6.3)(zod@3.23.8): optionalDependencies: typescript: 5.6.3 @@ -6723,6 +7377,10 @@ snapshots: typescript: 5.7.2 zod: 3.23.8 + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + acorn@8.14.0: {} agent-base@7.1.3: {} @@ -6745,6 +7403,10 @@ snapshots: ansi-colors@4.1.3: {} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + ansi-escapes@7.0.0: dependencies: environment: 1.1.0 @@ -6757,6 +7419,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} any-promise@1.3.0: {} @@ -6766,6 +7430,26 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + archiver-utils@5.0.2: + dependencies: + glob: 10.4.5 + graceful-fs: 4.2.11 + is-stream: 2.0.1 + lazystream: 1.0.1 + lodash: 4.17.21 + normalize-path: 3.0.0 + readable-stream: 4.6.0 + + archiver@7.0.1: + dependencies: + archiver-utils: 5.0.2 + async: 3.2.6 + buffer-crc32: 1.0.0 + readable-stream: 4.6.0 + readdir-glob: 1.1.3 + tar-stream: 3.1.7 + zip-stream: 6.0.1 + arg@5.0.2: {} argparse@1.0.10: @@ -6774,6 +7458,10 @@ snapshots: argparse@2.0.1: {} + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + array-union@2.1.0: {} assertion-error@2.0.1: {} @@ -6786,6 +7474,8 @@ snapshots: dependencies: tslib: 2.8.1 + async@3.2.6: {} + atomic-sleep@1.0.0: {} available-typed-arrays@1.0.7: @@ -6839,6 +7529,8 @@ snapshots: bn.js@5.2.1: {} + boolbase@1.0.0: {} + bowser@2.11.0: {} brace-expansion@2.0.1: @@ -6860,6 +7552,8 @@ snapshots: buffer-crc32@0.2.13: {} + buffer-crc32@1.0.0: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -6926,6 +7620,29 @@ snapshots: check-error@2.1.1: {} + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + + cheerio@1.0.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 6.21.0 + whatwg-mimetype: 4.0.0 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -6982,6 +7699,8 @@ snapshots: optionalDependencies: '@colors/colors': 1.5.0 + cli-width@4.1.0: {} + client-only@0.0.1: {} clipboardy@4.0.0: @@ -7038,6 +7757,16 @@ snapshots: commander@4.1.1: {} + commander@9.5.0: {} + + compress-commons@6.0.2: + dependencies: + crc-32: 1.2.2 + crc32-stream: 6.0.0 + is-stream: 2.0.1 + normalize-path: 3.0.0 + readable-stream: 4.6.0 + confbox@0.1.8: {} consola@3.2.3: {} @@ -7046,10 +7775,17 @@ snapshots: cookie-es@1.2.2: {} + cookie@0.7.2: {} + core-util-is@1.0.3: {} crc-32@1.2.2: {} + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.6.0 + cross-fetch@3.1.8: dependencies: node-fetch: 2.7.0 @@ -7080,10 +7816,26 @@ snapshots: crypto-js@4.2.0: {} + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + + css-shorthand-properties@1.1.2: {} + + css-value@0.0.1: {} + + css-what@6.1.0: {} + cssesc@3.0.0: {} csstype@3.1.3: {} + data-uri-to-buffer@4.0.1: {} + data-uri-to-buffer@6.0.2: {} dataloader@1.4.0: {} @@ -7106,12 +7858,16 @@ snapshots: decamelize@1.2.0: {} + decamelize@6.0.0: {} + decode-uri-component@0.2.2: {} dedent@0.7.0: {} deep-eql@5.0.2: {} + deepmerge-ts@7.1.3: {} + defaults@1.0.4: dependencies: clone: 1.0.4 @@ -7130,6 +7886,8 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 + dequal@2.0.3: {} + destr@2.0.3: {} detect-browser@5.3.0: {} @@ -7153,6 +7911,26 @@ snapshots: dlv@1.1.3: {} + dom-accessibility-api@0.5.16: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.1.0: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dotenv-expand@10.0.0: {} dotenv@16.4.5: {} @@ -7181,6 +7959,25 @@ snapshots: '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 + edge-paths@3.0.5: + dependencies: + '@types/which': 2.0.2 + which: 2.0.2 + + edgedriver@6.1.1: + dependencies: + '@wdio/logger': 9.4.4 + '@zip.js/zip.js': 2.7.54 + decamelize: 6.0.0 + edge-paths: 3.0.5 + fast-xml-parser: 4.5.1 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + electron-to-chromium@1.5.56: {} elliptic@6.6.0: @@ -7201,6 +7998,11 @@ snapshots: encode-utf8@1.0.3: {} + encoding-sniffer@0.2.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -7229,6 +8031,8 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 + entities@4.5.0: {} + environment@1.1.0: {} es-define-property@1.0.0: @@ -7397,6 +8201,8 @@ snapshots: '@scure/bip32': 1.4.0 '@scure/bip39': 1.3.0 + event-target-shim@5.0.1: {} + eventemitter2@6.4.9: {} eventemitter3@5.0.1: {} @@ -7440,6 +8246,8 @@ snapshots: transitivePeerDependencies: - supports-color + fast-deep-equal@2.0.1: {} + fast-deep-equal@3.1.3: {} fast-fifo@1.3.2: {} @@ -7458,6 +8266,10 @@ snapshots: fast-safe-stringify@2.1.1: {} + fast-xml-parser@4.5.1: + dependencies: + strnum: 1.0.5 + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -7474,6 +8286,11 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + fflate@0.8.2: {} fill-range@7.1.1: @@ -7507,6 +8324,10 @@ snapshots: cross-spawn: 7.0.5 signal-exit: 4.1.0 + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 @@ -7527,14 +8348,24 @@ snapshots: fs.realpath@1.0.0: {} - fsevents@2.3.2: - optional: true - fsevents@2.3.3: optional: true function-bind@1.1.2: {} + geckodriver@5.0.0: + dependencies: + '@wdio/logger': 9.4.4 + '@zip.js/zip.js': 2.7.54 + decamelize: 6.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + tar-fs: 3.0.6 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -7549,6 +8380,8 @@ snapshots: get-port-please@3.1.2: {} + get-port@7.1.0: {} + get-stream@5.2.0: dependencies: pump: 3.0.2 @@ -7613,6 +8446,10 @@ snapshots: graceful-fs@4.2.11: {} + grapheme-splitter@1.0.4: {} + + graphql@16.10.0: {} + h3@1.13.0: dependencies: cookie-es: 1.2.2 @@ -7649,6 +8486,8 @@ snapshots: dependencies: function-bind: 1.1.2 + headers-polyfill@4.0.3: {} + hey-listen@1.0.8: {} highlight.js@10.7.3: {} @@ -7659,6 +8498,15 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + htmlfy@0.3.2: {} + + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 @@ -7691,6 +8539,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + idb-keyval@6.2.1: {} ieee754@1.2.1: {} @@ -7701,6 +8553,10 @@ snapshots: ignore@5.3.2: {} + immediate@3.0.6: {} + + import-meta-resolve@4.1.0: {} + indent-string@4.0.0: {} inflight@1.0.6: @@ -7759,8 +8615,12 @@ snapshots: is-interactive@2.0.0: {} + is-node-process@1.2.0: {} + is-number@7.0.0: {} + is-plain-obj@4.1.0: {} + is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -7789,6 +8649,8 @@ snapshots: isexe@2.0.0: {} + isexe@3.1.1: {} + isows@1.0.6(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)): dependencies: ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -7847,6 +8709,13 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + keccak@3.0.4: dependencies: node-addon-api: 2.0.2 @@ -7876,6 +8745,14 @@ snapshots: zod: 3.23.8 zod-validation-error: 3.4.0(zod@3.23.8) + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + lilconfig@2.1.0: {} lilconfig@3.1.2: {} @@ -7923,6 +8800,12 @@ snapshots: loader-runner@4.3.0: {} + locate-app@2.5.0: + dependencies: + '@promptbook/utils': 0.69.5 + type-fest: 4.26.0 + userhome: 1.0.1 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -7931,15 +8814,25 @@ snapshots: dependencies: p-locate: 6.0.0 + lodash.clonedeep@4.5.0: {} + lodash.isequal@4.5.0: {} lodash.startcase@4.4.0: {} + lodash.zip@4.2.0: {} + + lodash@4.17.21: {} + log-symbols@5.1.0: dependencies: chalk: 5.3.0 is-unicode-supported: 1.3.0 + loglevel-plugin-prefix@0.8.4: {} + + loglevel@1.9.2: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -7963,6 +8856,8 @@ snapshots: lru-cache@7.18.3: {} + lz-string@1.5.0: {} + magic-string@0.30.12: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -8047,12 +8942,67 @@ snapshots: mri@1.2.0: {} + mrmime@2.0.0: {} + ms@2.1.2: {} ms@2.1.3: {} + msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.0(@types/node@22.9.0) + '@mswjs/interceptors': 0.37.3 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.30.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - '@types/node' + + msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.0(@types/node@22.9.0) + '@mswjs/interceptors': 0.37.3 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.30.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - '@types/node' + optional: true + multiformats@9.9.0: {} + mute-stream@2.0.0: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -8073,7 +9023,7 @@ snapshots: netmask@2.0.2: {} - next@15.0.3(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 15.0.3 '@swc/counter': 0.1.3 @@ -8093,33 +9043,6 @@ snapshots: '@next/swc-linux-x64-musl': 15.0.3 '@next/swc-win32-arm64-msvc': 15.0.3 '@next/swc-win32-x64-msvc': 15.0.3 - '@playwright/test': 1.49.1 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - next@15.1.0(@playwright/test@1.49.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@next/env': 15.1.0 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001680 - postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.6(react@18.3.1) - optionalDependencies: - '@next/swc-darwin-arm64': 15.1.0 - '@next/swc-darwin-x64': 15.1.0 - '@next/swc-linux-arm64-gnu': 15.1.0 - '@next/swc-linux-arm64-musl': 15.1.0 - '@next/swc-linux-x64-gnu': 15.1.0 - '@next/swc-linux-x64-musl': 15.1.0 - '@next/swc-win32-arm64-msvc': 15.1.0 - '@next/swc-win32-x64-msvc': 15.1.0 - '@playwright/test': 1.49.1 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -8129,6 +9052,8 @@ snapshots: node-addon-api@7.1.1: {} + node-domexception@1.0.0: {} + node-emoji@2.2.0: dependencies: '@sindresorhus/is': 4.6.0 @@ -8142,6 +9067,12 @@ snapshots: dependencies: whatwg-url: 5.0.0 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-forge@1.3.1: {} node-gyp-build@4.8.2: {} @@ -8167,6 +9098,10 @@ snapshots: dependencies: path-key: 4.0.0 + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + obj-multiplex@1.0.0: dependencies: end-of-stream: 1.4.4 @@ -8215,6 +9150,8 @@ snapshots: outdent@0.5.0: {} + outvariant@1.4.3: {} + ox@0.1.2(typescript@5.6.3)(zod@3.23.8): dependencies: '@adraffy/ens-normalize': 1.11.0 @@ -8307,16 +9244,31 @@ snapshots: package-manager-detector@0.2.2: {} + pako@1.0.11: {} + parse-ms@4.0.0: {} parse5-htmlparser2-tree-adapter@6.0.1: dependencies: parse5: 6.0.1 + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.2.1 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.2.1 + parse5@5.1.1: {} parse5@6.0.1: {} + parse5@7.2.1: + dependencies: + entities: 4.5.0 + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -8332,6 +9284,8 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-to-regexp@6.3.0: {} + path-type@4.0.0: {} pathe@1.1.2: {} @@ -8385,14 +9339,6 @@ snapshots: mlly: 1.7.2 pathe: 1.1.2 - playwright-core@1.49.1: {} - - playwright@1.49.1: - dependencies: - playwright-core: 1.49.1 - optionalDependencies: - fsevents: 2.3.2 - pngjs@5.0.0: {} pony-cause@2.1.11: {} @@ -8448,6 +9394,12 @@ snapshots: prettier@3.3.3: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + pretty-ms@9.2.0: dependencies: parse-ms: 4.0.0 @@ -8456,6 +9408,8 @@ snapshots: process-warning@1.0.0: {} + process@0.11.10: {} + progress@2.0.3: {} proxy-agent@6.4.0: @@ -8490,6 +9444,10 @@ snapshots: pseudomap@1.0.2: {} + psl@1.15.0: + dependencies: + punycode: 2.3.1 + publint@0.2.12: dependencies: npm-packlist: 5.1.3 @@ -8530,6 +9488,8 @@ snapshots: pngjs: 5.0.0 yargs: 15.4.1 + query-selector-shadow-dom@1.0.1: {} + query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 @@ -8537,6 +9497,8 @@ snapshots: split-on-first: 1.1.0 strict-uri-encode: 2.0.0 + querystringify@2.2.0: {} + queue-microtask@1.2.3: {} queue-tick@1.0.1: {} @@ -8555,6 +9517,8 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-is@17.0.2: {} + react-native-webview@11.26.1(react@18.3.1): dependencies: escape-string-regexp: 2.0.0 @@ -8594,6 +9558,18 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readable-stream@4.6.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -8608,6 +9584,8 @@ snapshots: require-main-filename@2.0.0: {} + requires-port@1.0.0: {} + resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -8618,6 +9596,10 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resq@1.11.0: + dependencies: + fast-deep-equal: 2.0.1 + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -8625,6 +9607,8 @@ snapshots: reusify@1.0.4: {} + rgb2hex@0.2.5: {} + rollup@4.25.0: dependencies: '@types/estree': 1.0.6 @@ -8657,6 +9641,8 @@ snapshots: dependencies: mri: 1.2.0 + safaridriver@1.0.0: {} + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -8683,6 +9669,10 @@ snapshots: semver@7.6.3: {} + serialize-error@11.0.3: + dependencies: + type-fest: 2.19.0 + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -8698,6 +9688,8 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 + setimmediate@1.0.5: {} + sha.js@2.4.11: dependencies: inherits: 2.0.4 @@ -8782,6 +9774,12 @@ snapshots: is-arrayish: 0.3.2 optional: true + sirv@3.0.0: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + size-limit@11.1.6: dependencies: bytes-iec: 3.1.1 @@ -8846,6 +9844,8 @@ snapshots: source-map@0.6.1: {} + spacetrim@0.11.59: {} + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 @@ -8861,6 +9861,8 @@ snapshots: stackback@0.0.2: {} + statuses@2.0.1: {} + std-env@3.8.0: {} stdin-discarder@0.1.0: @@ -8879,6 +9881,8 @@ snapshots: optionalDependencies: bare-events: 2.5.0 + strict-event-emitter@0.5.1: {} + strict-uri-encode@2.0.0: {} string-width@4.2.3: @@ -8915,6 +9919,8 @@ snapshots: strip-json-comments@5.0.1: {} + strnum@1.0.5: {} + styled-jsx@5.1.6(react@18.3.1): dependencies: client-only: 0.0.1 @@ -9061,6 +10067,15 @@ snapshots: dependencies: is-number: 7.0.0 + totalist@3.0.1: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + tr46@0.0.3: {} ts-interface-checker@0.1.13: {} @@ -9076,6 +10091,14 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + type-fest@0.21.3: {} + + type-fest@2.19.0: {} + + type-fest@4.26.0: {} + + type-fest@4.30.2: {} + typescript@5.6.1-rc: {} typescript@5.6.3: {} @@ -9097,6 +10120,8 @@ snapshots: undici-types@6.19.8: {} + undici@6.21.0: {} + unenv@1.10.0: dependencies: consola: 3.2.3 @@ -9109,6 +10134,8 @@ snapshots: universalify@0.1.2: {} + universalify@0.2.0: {} + universalify@2.0.1: {} unstorage@1.13.1(@upstash/redis@1.34.3)(idb-keyval@6.2.1): @@ -9145,12 +10172,19 @@ snapshots: dependencies: punycode: 2.3.1 + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + urlpattern-polyfill@10.0.0: {} use-sync-external-store@1.2.0(react@18.3.1): dependencies: react: 18.3.1 + userhome@1.0.1: {} + utf-8-validate@5.0.10: dependencies: node-gyp-build: 4.8.2 @@ -9243,10 +10277,20 @@ snapshots: fsevents: 2.3.3 terser: 5.37.0 - vitest@2.1.8(@types/node@22.9.0)(terser@5.37.0): + vitest-browser-react@0.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vitest@2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(terser@5.37.0)): + dependencies: + '@vitest/browser': 2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + vitest: 2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(terser@5.37.0) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + vitest@2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(terser@5.37.0): dependencies: '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) + '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.8 '@vitest/snapshot': 2.1.8 @@ -9267,6 +10311,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.9.0 + '@vitest/browser': 2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)) transitivePeerDependencies: - less - lightningcss @@ -9278,16 +10323,52 @@ snapshots: - supports-color - terser - wagmi@2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): + vitest@2.1.8(@types/node@22.9.0)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.37.0): + dependencies: + '@vitest/expect': 2.1.8 + '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0)) + '@vitest/pretty-format': 2.1.8 + '@vitest/runner': 2.1.8 + '@vitest/snapshot': 2.1.8 + '@vitest/spy': 2.1.8 + '@vitest/utils': 2.1.8 + chai: 5.1.2 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.12 + pathe: 1.1.2 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.1 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.11(@types/node@22.9.0)(terser@5.37.0) + vite-node: 2.1.8(@types/node@22.9.0)(terser@5.37.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.9.0 + '@vitest/browser': 2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + wagmi@2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): dependencies: '@tanstack/react-query': 5.59.20(react@18.3.1) - '@wagmi/connectors': 5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) - '@wagmi/core': 2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@wagmi/connectors': 5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@wagmi/core': 2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) - viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) optionalDependencies: - typescript: 5.7.2 + typescript: 5.6.3 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9327,16 +10408,16 @@ snapshots: - utf-8-validate - zod - wagmi@2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(bufferutil@4.0.8)(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): + wagmi@2.12.30(@tanstack/query-core@5.59.20)(@tanstack/react-query@5.59.20(react@18.3.1))(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): dependencies: '@tanstack/react-query': 5.59.20(react@18.3.1) - '@wagmi/connectors': 5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react@18.3.1)(terser@5.37.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) - '@wagmi/core': 2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@wagmi/connectors': 5.3.8(@types/node@22.9.0)(@types/react@18.3.12)(@upstash/redis@1.34.3)(@vitest/browser@2.1.8(@types/node@22.9.0)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(vite@5.4.11(@types/node@22.9.0)(terser@5.37.0))(vitest@2.1.8)(webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)))(@wagmi/core@2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.37.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@wagmi/core': 2.14.5(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.7.2)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) - viem: 2.21.51(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9376,6 +10457,14 @@ snapshots: - utf-8-validate - zod + wait-port@1.1.0: + dependencies: + chalk: 4.1.2 + commander: 9.5.0 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 @@ -9385,11 +10474,66 @@ snapshots: dependencies: defaults: 1.0.4 + web-streams-polyfill@3.3.3: {} + webauthn-p256@0.0.10: dependencies: '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 + webdriver@9.4.4(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/node': 20.17.6 + '@types/ws': 8.5.13 + '@wdio/config': 9.4.4 + '@wdio/logger': 9.4.4 + '@wdio/protocols': 9.4.4 + '@wdio/types': 9.4.4 + '@wdio/utils': 9.4.4 + deepmerge-ts: 7.1.3 + undici: 6.21.0 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + webdriverio@9.4.5(bufferutil@4.0.8)(puppeteer-core@22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + dependencies: + '@types/node': 20.17.6 + '@types/sinonjs__fake-timers': 8.1.5 + '@wdio/config': 9.4.4 + '@wdio/logger': 9.4.4 + '@wdio/protocols': 9.4.4 + '@wdio/repl': 9.4.4 + '@wdio/types': 9.4.4 + '@wdio/utils': 9.4.4 + archiver: 7.0.1 + aria-query: 5.3.0 + cheerio: 1.0.0 + css-shorthand-properties: 1.1.2 + css-value: 0.0.1 + grapheme-splitter: 1.0.4 + htmlfy: 0.3.2 + import-meta-resolve: 4.1.0 + is-plain-obj: 4.1.0 + jszip: 3.10.1 + lodash.clonedeep: 4.5.0 + lodash.zip: 4.2.0 + minimatch: 9.0.5 + query-selector-shadow-dom: 1.0.1 + resq: 1.11.0 + rgb2hex: 0.2.5 + serialize-error: 11.0.3 + urlpattern-polyfill: 10.0.0 + webdriver: 9.4.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + puppeteer-core: 22.6.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + webextension-polyfill@0.10.0: {} webidl-conversions@3.0.1: {} @@ -9426,6 +10570,12 @@ snapshots: - esbuild - uglify-js + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -9449,6 +10599,10 @@ snapshots: dependencies: isexe: 2.0.0 + which@5.0.0: + dependencies: + isexe: 3.1.1 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 @@ -9560,6 +10714,14 @@ snapshots: yocto-queue@1.1.1: {} + yoctocolors-cjs@2.1.2: {} + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.6.0 + zod-validation-error@3.4.0(zod@3.23.8): dependencies: zod: 3.23.8 diff --git a/src/actions.ts b/src/exports/actions.ts similarity index 53% rename from src/actions.ts rename to src/exports/actions.ts index 06c1da5..52aa572 100644 --- a/src/actions.ts +++ b/src/exports/actions.ts @@ -5,5 +5,5 @@ export { grantSession, importAccount, sessions, -} from './internal/wagmi/core.js' -export * as A from './internal/wagmi/core.js' +} from '../internal/wagmi/core.js' +export * as A from '../internal/wagmi/core.js' diff --git a/src/exports.test.ts b/src/exports/exports.test.ts similarity index 96% rename from src/exports.test.ts rename to src/exports/exports.test.ts index 06170e8..30aa29d 100644 --- a/src/exports.test.ts +++ b/src/exports/exports.test.ts @@ -1,7 +1,7 @@ import { expect, test } from 'vitest' +import * as index from '../index.js' import * as actions from './actions.js' -import * as index from './index.js' import * as query from './query.js' import * as wagmi from './wagmi.js' diff --git a/src/exports/query.ts b/src/exports/query.ts new file mode 100644 index 0000000..97f65b1 --- /dev/null +++ b/src/exports/query.ts @@ -0,0 +1,2 @@ +export { sessionsQueryKey } from '../internal/wagmi/query.js' +export * as Q from '../internal/wagmi/query.js' diff --git a/src/wagmi.ts b/src/exports/wagmi.ts similarity index 57% rename from src/wagmi.ts rename to src/exports/wagmi.ts index c745619..d2c0cf0 100644 --- a/src/wagmi.ts +++ b/src/exports/wagmi.ts @@ -5,5 +5,5 @@ export { useGrantSession, useImportAccount, useSessions, -} from './internal/wagmi/react.js' -export * as W from './internal/wagmi/react.js' +} from '../internal/wagmi/react.js' +export * as W from '../internal/wagmi/react.js' diff --git a/src/index.browser.test.ts b/src/index.browser.test.ts new file mode 100644 index 0000000..868e567 --- /dev/null +++ b/src/index.browser.test.ts @@ -0,0 +1,25 @@ +import { commands } from '@vitest/browser/context' +import { expect, test } from 'vitest' + +import { getPorto, run, waitFor } from './test-utils.js' + +test('default', async () => { + const authenticatorId = await commands.addVirtualAuthenticator({ + isUserConsenting: true, + }) + + const porto = getPorto() + const method = 'experimental_createAccount' + const { result } = run(() => porto.provider.request({ method }), { + name: method, + }) + + await waitFor(() => expect(result.current).not.toBeNull()) + + const credentials = await commands.getCredentials(authenticatorId) + expect(credentials).toHaveLength(1) + + await expect( + porto.provider.request({ method: 'eth_accounts' }), + ).resolves.toEqual([result.current]) +}) diff --git a/src/package.json b/src/package.json index 458fa04..ceb3d85 100644 --- a/src/package.json +++ b/src/package.json @@ -21,16 +21,16 @@ "default": "./_dist/Porto.js" }, "./wagmi": { - "types": "./_dist/wagmi.d.ts", - "default": "./_dist/wagmi.js" + "types": "./_dist/exports/wagmi.d.ts", + "default": "./_dist/exports/wagmi.js" }, "./wagmi/actions": { - "types": "./_dist/actions.d.ts", - "default": "./_dist/actions.js" + "types": "./_dist/exports/actions.d.ts", + "default": "./_dist/exports/actions.js" }, "./wagmi/query": { - "types": "./_dist/query.d.ts", - "default": "./_dist/query.js" + "types": "./_dist/exports/query.d.ts", + "default": "./_dist/exports/query.js" }, "./package.json": "./package.json" }, @@ -38,9 +38,9 @@ "*": { "Chains": ["./_dist/Chains.d.ts"], "Porto": ["./_dist/Porto.d.ts"], - "wagmi": ["./_dist/wagmi.d.ts"], - "wagmi/actions": ["./_dist/actions.d.ts"], - "wagmi/query": ["./_dist/query.d.ts"] + "wagmi": ["./_dist/exports/wagmi.d.ts"], + "wagmi/actions": ["./_dist/exports/actions.d.ts"], + "wagmi/query": ["./_dist/exports/query.d.ts"] } }, "files": [ diff --git a/src/query.ts b/src/query.ts deleted file mode 100644 index f8c88b9..0000000 --- a/src/query.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { sessionsQueryKey } from './internal/wagmi/query.js' -export * as Q from './internal/wagmi/query.js' diff --git a/src/test-utils.ts b/src/test-utils.ts new file mode 100644 index 0000000..2dbaf35 --- /dev/null +++ b/src/test-utils.ts @@ -0,0 +1,111 @@ +import { http, type Chain } from 'viem' +import * as React from 'react' +import { + renderHook as rtl_renderHook, + waitFor as rtl_waitFor, + type RenderHookOptions, + type RenderHookResult, + type waitForOptions, +} from '@testing-library/react' + +import { Chains, Porto } from './index.js' + +const odysseyTestnet = { + ...Chains.odysseyTestnet, + rpcUrls: { + default: { + http: ['https://anvil.porto.localhost'], + webSocket: ['wss://anvil.porto.localhost'], + }, + public: { + http: ['https://anvil.porto.localhost'], + webSocket: ['wss://anvil.porto.localhost'], + }, + }, +} as const satisfies Chain + +export function getPorto() { + return Porto.create({ + chains: [odysseyTestnet], + transports: { + [odysseyTestnet.id]: http(), + }, + }) +} + +export function waitFor( + callback: () => Promise | type, + options?: waitForOptions | undefined, +): Promise { + return rtl_waitFor(callback, { timeout: 10_000, ...options }) +} + +export function run( + action: (props: props) => Promise, + options: Omit, 'wrapper'> & { name: string }, +): RenderHookResult { + function useTestHook(props: props) { + const { setData } = React.useContext(context) + const [result, setResult] = React.useState(null) + // biome-ignore lint/correctness/useExhaustiveDependencies: + React.useEffect(() => { + action(props).then((res) => { + setResult(res) + setData(res) + }) + }, []) + return result as result + } + + const context = React.createContext<{ + data: unknown + setData: React.Dispatch + }>({ data: null, setData: () => {} }) + function Provider(props: React.PropsWithChildren) { + const [data, setData] = React.useState() + return React.createElement( + context.Provider, + { value: { data, setData } }, + props.children, + ) + } + function Content(props: React.PropsWithChildren) { + const { data } = React.useContext(context) + return React.createElement( + 'div', + null, + React.createElement('h1', null, options.name), + React.createElement('pre', null, JSON.stringify(data, null, 2)), + props.children, + ) + } + + const style = ` +:root { + background-color: light-dark(#f8f8f8, #191919); + color: light-dark(#191919, #f8f8f8); + color-scheme: light dark; +} +html { + font-size: 16px; + font-family: monospace; +} +body { padding: 1rem; } +h1 { font-size: 1rem; } +pre { + font-size: 0.85rem; + white-space: pre-wrap; +} +` + return rtl_renderHook(useTestHook, { + ...options, + wrapper(props) { + return React.createElement( + Provider, + null, + React.createElement('style', null, style), + React.createElement(Content, null, props.children), + ) + }, + }) +} diff --git a/test/browser/Caddyfile b/test/browser/Caddyfile deleted file mode 100644 index 3b0cff3..0000000 --- a/test/browser/Caddyfile +++ /dev/null @@ -1,11 +0,0 @@ -porto.localhost, www.porto.localhost { - reverse_proxy localhost:3000 -} - -anvil.porto.localhost { - reverse_proxy localhost:8545 -} - -caddy.porto.localhost { - respond 200 -} diff --git a/test/browser/app/create-account/page.test.ts b/test/browser/app/create-account/page.test.ts deleted file mode 100644 index f6ab3a5..0000000 --- a/test/browser/app/create-account/page.test.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { type CDPSession, expect, test } from '@playwright/test' - -test('test', async ({ page }) => { - const client = await page.context().newCDPSession(page) - - await client.send('WebAuthn.enable') - - const result = await client.send('WebAuthn.addVirtualAuthenticator', { - options: { - protocol: 'ctap2', - transport: 'internal', - hasResidentKey: true, - hasUserVerification: true, - isUserVerified: true, - }, - }) - const authenticatorId = result.authenticatorId - - await page.goto('./create-account') - - await expect( - page.getByRole('heading', { name: 'experimental_createAccount' }), - ).toBeVisible() - - await simulateSuccessfulPasskeyInput({ - authenticatorId, - client, - trigger() { - return page.getByRole('button', { name: 'Register' }).click() - }, - }) - - // Confirm the passkey was successfully registered - const credentials = await client.send('WebAuthn.getCredentials', { - authenticatorId, - }) - expect(credentials.credentials).toHaveLength(1) - - await expect(page.getByText(/^0x.+/)).toBeVisible() -}) - -async function simulateSuccessfulPasskeyInput(options: { - authenticatorId: string - client: CDPSession - trigger: () => Promise -}) { - const { authenticatorId, client, trigger } = options - - await Promise.all([ - // set `isUserVerified` so subsequent passkey operations will succeed - client.send('WebAuthn.setUserVerified', { - authenticatorId, - isUserVerified: true, - }), - // set `automaticPresenceSimulation` so virtual authenticator will respond to next passkey prompt - client.send('WebAuthn.setAutomaticPresenceSimulation', { - authenticatorId, - enabled: true, - }), - ]) - - // perform user action that triggers passkey prompt - await trigger() - - // wait to receive the event that the passkey was successfully registered or verified - // await new Promise((resolve) => { - // client.on('WebAuthn.credentialAdded', () => resolve()) - // client.on('WebAuthn.credentialAsserted', () => resolve()) - // }) - - // set `automaticPresenceSimulation` option back to false - await client.send('WebAuthn.setAutomaticPresenceSimulation', { - authenticatorId, - enabled: false, - }) -} diff --git a/test/browser/app/create-account/page.tsx b/test/browser/app/create-account/page.tsx deleted file mode 100644 index e1dd5b1..0000000 --- a/test/browser/app/create-account/page.tsx +++ /dev/null @@ -1,24 +0,0 @@ -'use client' - -import { porto } from '@/config' -import { useState } from 'react' - -export default function Page() { - const [result, setResult] = useState(null) - return ( -
-

experimental_createAccount

- - {result &&
{result}
} -
- ) -} diff --git a/test/browser/app/favicon.ico b/test/browser/app/favicon.ico deleted file mode 100644 index 718d6fea4835ec2d246af9800eddb7ffb276240c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/test/browser/app/globals.css b/test/browser/app/globals.css deleted file mode 100644 index 76c781a..0000000 --- a/test/browser/app/globals.css +++ /dev/null @@ -1,5 +0,0 @@ -:root { - background-color: light-dark(#f8f8f8, #181818); - color: light-dark(#181818, rgba(255, 255, 255, 0.87)); - color-scheme: light dark; -} diff --git a/test/browser/app/layout.tsx b/test/browser/app/layout.tsx deleted file mode 100644 index 58d5b61..0000000 --- a/test/browser/app/layout.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { Metadata } from 'next' -import './globals.css' - -export const metadata = { - title: 'Browser', -} satisfies Metadata - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode -}>) { - return ( - - {children} - - ) -} diff --git a/test/browser/app/page.tsx b/test/browser/app/page.tsx deleted file mode 100644 index 4664f11..0000000 --- a/test/browser/app/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default function Page() { - return ( -
-

Porto

-
- ) -} diff --git a/test/browser/config.ts b/test/browser/config.ts deleted file mode 100644 index fadad2e..0000000 --- a/test/browser/config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Chains, Porto } from 'porto' -import { http, type Chain } from 'viem' - -const odysseyTestnet = { - ...Chains.odysseyTestnet, - rpcUrls: { - default: { - http: ['https://anvil.porto.localhost'], - webSocket: ['wss://anvil.porto.localhost'], - }, - public: { - http: ['https://anvil.porto.localhost'], - webSocket: ['wss://anvil.porto.localhost'], - }, - }, -} as const satisfies Chain - -export const porto = Porto.create({ - chains: [odysseyTestnet], - transports: { - [odysseyTestnet.id]: http(), - }, -}) diff --git a/test/browser/next.config.ts b/test/browser/next.config.ts deleted file mode 100644 index d24b0f6..0000000 --- a/test/browser/next.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { NextConfig } from 'next' - -const nextConfig: NextConfig = { - experimental: { - externalDir: true, - }, - webpack(config) { - config.resolve.extensionAlias = { - '.js': ['.js', '.ts'], - } - return config - }, -} - -export default nextConfig diff --git a/test/browser/package.json b/test/browser/package.json deleted file mode 100644 index 6740136..0000000 --- a/test/browser/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "browser-app", - "private": true, - "type": "module", - "scripts": { - "dev": "next dev" - }, - "dependencies": { - "porto": "workspace:*", - "next": "15.1.0", - "react": "catalog:", - "react-dom": "catalog:" - }, - "devDependencies": { - "@types/node": "^20", - "@types/react": "catalog:", - "@types/react-dom": "catalog:" - } -} diff --git a/test/browser/playwright.config.ts b/test/browser/playwright.config.ts deleted file mode 100644 index c6716f2..0000000 --- a/test/browser/playwright.config.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { defineConfig, devices } from '@playwright/test' - -/** https://playwright.dev/docs/test-configuration */ -export default defineConfig({ - forbidOnly: !!process.env.CI, - fullyParallel: true, - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, - }, - // { - // name: 'firefox', - // use: { ...devices['Desktop Firefox'] }, - // }, - // { - // name: 'webkit', - // use: { ...devices['Desktop Safari'] }, - // }, - ], - reporter: process.env.CI ? 'github' : 'list', - retries: process.env.CI ? 2 : 0, - testDir: './', - use: { - baseURL: 'https://porto.localhost', - }, - webServer: [ - { - command: ['pnpm dev'].join(' && '), - url: 'http://127.0.0.1:3000', - reuseExistingServer: !process.env.CI, - stdout: 'ignore', - stderr: 'pipe', - timeout: 5_000, - }, - { - command: [ - 'anvil', - '--chain-id 911867', - `--fork-url ${process.env.ODYSSEY_FORK_URL ?? 'https://911867.rpc.thirdweb.com'}`, - '--fork-block-number 6030102', - ].join(' '), - url: 'http://127.0.0.1:8545', - reuseExistingServer: !process.env.CI, - stdout: 'ignore', - stderr: 'pipe', - timeout: 5_000, - }, - { - command: 'caddy run -c Caddyfile', - url: 'http://localhost:2019/reverse_proxy/upstreams', - reuseExistingServer: !process.env.CI, - stdout: 'ignore', - stderr: 'pipe', - timeout: 5_000, - }, - ], -}) diff --git a/test/browser/tests/index.test.ts b/test/browser/tests/index.test.ts deleted file mode 100644 index 0705b9a..0000000 --- a/test/browser/tests/index.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { expect, test } from '@playwright/test' - -test('test', async ({ page }) => { - await page.goto('./') - - await expect(page.getByRole('heading', { name: 'porto' })).toBeVisible() -}) diff --git a/test/browser/tsconfig.json b/test/browser/tsconfig.json deleted file mode 100644 index d8b9323..0000000 --- a/test/browser/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/tsconfig.json b/tsconfig.json index efff319..3d7756f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,9 @@ ], "exclude": ["src/_dist"], "compilerOptions": { - "baseUrl": "." + "baseUrl": ".", + "types": [ + "@vitest/browser/providers/webdriverio" + ] } } diff --git a/vitest.workspace.ts b/vitest.workspace.ts index 4a6b28d..e49d109 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -1,11 +1,95 @@ +import react from '@vitejs/plugin-react' import { defineWorkspace } from 'vitest/config' +import type { BrowserCommand } from 'vitest/node' export default defineWorkspace([ { test: { - name: 'porto', + name: 'node', environment: 'node', include: ['./src/**/*.test.ts'], }, }, + { + plugins: [react()], + test: { + name: 'browser', + include: ['./src/**/*.browser.test.ts'], + browser: { + commands: { + ...getWebauthnCommands(), + }, + enabled: true, + headless: false, + name: 'chrome', + provider: 'webdriverio', + providerOptions: {}, + }, + }, + }, ]) + +declare module '@vitest/browser/context' { + interface BrowserCommands extends WebauthnCommands {} + + type WebauthnCommands< + obj extends ReturnType = ReturnType< + typeof getWebauthnCommands + >, + > = { + [key in keyof obj]: obj[key] extends BrowserCommand< + infer payload extends unknown[] + > + ? (...p: payload) => ReturnType + : never + } +} + +function getWebauthnCommands() { + return { + addVirtualAuthenticator(ctx, payload) { + const { + protocol = 'ctap2', + transport = 'internal', + hasResidentKey = true, + hasUserVerification = true, + isUserConsenting, + isUserVerified = true, + extensions, + uvm, + } = payload + return ctx.browser.addVirtualAuthenticator( + protocol, + transport, + hasResidentKey, + hasUserVerification, + isUserConsenting, + isUserVerified, + extensions, + uvm, + ) + }, + getCredentials(ctx, authenticatorId) { + return ctx.browser.getCredentials(authenticatorId) + }, + } as const satisfies { + addVirtualAuthenticator: BrowserCommand<[payload: Payload]> + getCredentials: BrowserCommand< + Parameters + > + } +} + +type Payload = { + protocol?: addVirtualAuthenticator[0] + transport?: addVirtualAuthenticator[1] + hasResidentKey?: addVirtualAuthenticator[2] + hasUserVerification?: addVirtualAuthenticator[3] + isUserConsenting: addVirtualAuthenticator[4] + isUserVerified?: addVirtualAuthenticator[5] + extensions?: addVirtualAuthenticator[6] + uvm?: addVirtualAuthenticator[7] +} +type addVirtualAuthenticator = Parameters< + WebdriverIO.Browser['addVirtualAuthenticator'] +> From 1340d04b1ab8e1a074b24c34b12a8bc9624c2917 Mon Sep 17 00:00:00 2001 From: Tom Meagher Date: Thu, 19 Dec 2024 20:57:13 -0500 Subject: [PATCH 4/4] test: fail states --- src/Porto.ts | 14 ++++++-- src/index.browser.test.ts | 55 ++++++++++++++++++++-------- src/test-utils.ts | 75 ++++++++++++++------------------------- vitest.workspace.ts | 16 ++++++--- 4 files changed, 90 insertions(+), 70 deletions(-) diff --git a/src/Porto.ts b/src/Porto.ts index 110591f..4cbb20d 100644 --- a/src/Porto.ts +++ b/src/Porto.ts @@ -1,6 +1,10 @@ import type * as Address from 'ox/Address' import { http, type Client, type Transport, createClient } from 'viem' -import { persist, subscribeWithSelector } from 'zustand/middleware' +import { + type PersistStorage, + persist, + subscribeWithSelector, +} from 'zustand/middleware' import { type Mutate, type StoreApi, createStore } from 'zustand/vanilla' import * as Chains from './Chains.js' @@ -43,6 +47,7 @@ export function create(config: Config | undefined = {}): Porto { chains = defaultConfig.chains, headless = defaultConfig.headless, keystoreHost: keystoreHost_ = defaultConfig.keystoreHost, + storage = Storage.idb, transports = defaultConfig.transports, } = config @@ -97,7 +102,7 @@ export function create(config: Config | undefined = {}): Porto { chain: state.chain, } as unknown as State }, - storage: Storage.idb, + storage, }, ), ), @@ -168,6 +173,11 @@ export type Config< * @default 'self' */ keystoreHost?: 'self' | (string & {}) | undefined + /** + * Storage to use for persistence + * @default Storage.idb + */ + storage?: PersistStorage | undefined /** * Transport to use for each chain. */ diff --git a/src/index.browser.test.ts b/src/index.browser.test.ts index 868e567..d0ee876 100644 --- a/src/index.browser.test.ts +++ b/src/index.browser.test.ts @@ -1,25 +1,52 @@ import { commands } from '@vitest/browser/context' -import { expect, test } from 'vitest' +import { describe, expect, test } from 'vitest' import { getPorto, run, waitFor } from './test-utils.js' -test('default', async () => { - const authenticatorId = await commands.addVirtualAuthenticator({ - isUserConsenting: true, - }) +// TODO +// - CI setup +// - experimental_connect test - const porto = getPorto() +describe('`experimental_createAccount`', () => { const method = 'experimental_createAccount' - const { result } = run(() => porto.provider.request({ method }), { - name: method, + + test('default', async () => { + const authenticatorId = await commands.addVirtualAuthenticator() + + const porto = getPorto() + const { result } = run(() => porto.provider.request({ method }), { + name: method, + }) + + await waitFor(() => expect(result.current.result).toBeDefined()) + + const credentials = await commands.getCredentials(authenticatorId) + expect(credentials).toHaveLength(1) + + await expect( + porto.provider.request({ method: 'eth_accounts' }), + ).resolves.toEqual([result.current.result]) }) - await waitFor(() => expect(result.current).not.toBeNull()) + test('`isUserVerified: false`', async () => { + const authenticatorId = await commands.addVirtualAuthenticator({ + isUserVerified: false, + }) + + const porto = getPorto() + const { result } = run(() => porto.provider.request({ method }), { + name: method, + }) + + await waitFor(() => expect(result.current.error).toBeDefined()) - const credentials = await commands.getCredentials(authenticatorId) - expect(credentials).toHaveLength(1) + const credentials = await commands.getCredentials(authenticatorId) + expect(credentials).toHaveLength(0) - await expect( - porto.provider.request({ method: 'eth_accounts' }), - ).resolves.toEqual([result.current]) + expect(result.current.error).toMatchInlineSnapshot(` + [WebAuthnP256.CredentialCreationFailedError: Failed to create credential. + + Details: The operation either timed out or was not allowed. See: https://www.w3.org/TR/webauthn-2/#sctn-privacy-considerations-client.] + `) + }) }) diff --git a/src/test-utils.ts b/src/test-utils.ts index 2dbaf35..db99013 100644 --- a/src/test-utils.ts +++ b/src/test-utils.ts @@ -1,12 +1,12 @@ -import { http, type Chain } from 'viem' -import * as React from 'react' import { - renderHook as rtl_renderHook, - waitFor as rtl_waitFor, type RenderHookOptions, type RenderHookResult, + renderHook as rtl_renderHook, + waitFor as rtl_waitFor, type waitForOptions, } from '@testing-library/react' +import * as React from 'react' +import { http, type Chain } from 'viem' import { Chains, Porto } from './index.js' @@ -30,6 +30,11 @@ export function getPorto() { transports: { [odysseyTestnet.id]: http(), }, + storage: { + getItem: () => null, + setItem: () => {}, + removeItem: () => {}, + }, }) } @@ -43,68 +48,40 @@ export function waitFor( export function run( action: (props: props) => Promise, options: Omit, 'wrapper'> & { name: string }, -): RenderHookResult { +): RenderHookResult< + { error: Error | undefined; result: result | undefined }, + props +> { function useTestHook(props: props) { - const { setData } = React.useContext(context) - const [result, setResult] = React.useState(null) + const [result, setResult] = React.useState() + const [error, setError] = React.useState() // biome-ignore lint/correctness/useExhaustiveDependencies: React.useEffect(() => { - action(props).then((res) => { - setResult(res) - setData(res) - }) + action(props).then(setResult).catch(setError) }, []) - return result as result - } - - const context = React.createContext<{ - data: unknown - setData: React.Dispatch - }>({ data: null, setData: () => {} }) - function Provider(props: React.PropsWithChildren) { - const [data, setData] = React.useState() - return React.createElement( - context.Provider, - { value: { data, setData } }, - props.children, - ) - } - function Content(props: React.PropsWithChildren) { - const { data } = React.useContext(context) - return React.createElement( - 'div', - null, - React.createElement('h1', null, options.name), - React.createElement('pre', null, JSON.stringify(data, null, 2)), - props.children, - ) + return { error, result } as { + error: Error | undefined + result: result | undefined + } } const style = ` :root { - background-color: light-dark(#f8f8f8, #191919); - color: light-dark(#191919, #f8f8f8); + background-color: light-dark(#fff, #141414); + color: light-dark(#141414, #fff); color-scheme: light dark; } -html { - font-size: 16px; - font-family: monospace; -} -body { padding: 1rem; } -h1 { font-size: 1rem; } -pre { - font-size: 0.85rem; - white-space: pre-wrap; -} +h1 { font-size: 20px; } ` return rtl_renderHook(useTestHook, { ...options, wrapper(props) { return React.createElement( - Provider, + 'div', null, React.createElement('style', null, style), - React.createElement(Content, null, props.children), + React.createElement('h1', null, options.name), + props.children as React.ReactNode, ) }, }) diff --git a/vitest.workspace.ts b/vitest.workspace.ts index e49d109..0de7c22 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -20,7 +20,7 @@ export default defineWorkspace([ ...getWebauthnCommands(), }, enabled: true, - headless: false, + headless: true, name: 'chrome', provider: 'webdriverio', providerOptions: {}, @@ -47,13 +47,13 @@ declare module '@vitest/browser/context' { function getWebauthnCommands() { return { - addVirtualAuthenticator(ctx, payload) { + addVirtualAuthenticator(ctx, payload = {}) { const { protocol = 'ctap2', transport = 'internal', hasResidentKey = true, hasUserVerification = true, - isUserConsenting, + isUserConsenting = true, isUserVerified = true, extensions, uvm, @@ -72,11 +72,17 @@ function getWebauthnCommands() { getCredentials(ctx, authenticatorId) { return ctx.browser.getCredentials(authenticatorId) }, + setUserVerified(ctx, authenticatorId) { + return ctx.browser.setUserVerified(authenticatorId) + }, } as const satisfies { - addVirtualAuthenticator: BrowserCommand<[payload: Payload]> + addVirtualAuthenticator: BrowserCommand<[payload: Payload | undefined]> getCredentials: BrowserCommand< Parameters > + setUserVerified: BrowserCommand< + Parameters + > } } @@ -85,7 +91,7 @@ type Payload = { transport?: addVirtualAuthenticator[1] hasResidentKey?: addVirtualAuthenticator[2] hasUserVerification?: addVirtualAuthenticator[3] - isUserConsenting: addVirtualAuthenticator[4] + isUserConsenting?: addVirtualAuthenticator[4] isUserVerified?: addVirtualAuthenticator[5] extensions?: addVirtualAuthenticator[6] uvm?: addVirtualAuthenticator[7]