From cb81fea745ff18f7a3e4c76787212f7a5c8241b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Mon, 8 Jul 2024 11:28:44 +0100 Subject: [PATCH 01/41] feat: add hybrid-pay base --- apps/hybrid-pay/.env.example | 18 + apps/hybrid-pay/.gitignore | 28 + apps/hybrid-pay/README.md | 28 + apps/hybrid-pay/api/geoblock.js | 51 + apps/hybrid-pay/api/index.js | 46 + apps/hybrid-pay/api/marketdata.js | 24 + apps/hybrid-pay/api/package-lock.json | 210 + apps/hybrid-pay/api/package.json | 16 + apps/hybrid-pay/api/sentry.js | 48 + apps/hybrid-pay/index.html | 31 + apps/hybrid-pay/package.json | 56 + apps/hybrid-pay/src/App.tsx | 61 + .../components/AmountLabel/AmountLabel.tsx | 35 + .../src/components/AmountLabel/index.tsx | 1 + .../src/components/Layout/Header.tsx | 53 + .../src/components/Layout/Layout.style.tsx | 95 + .../src/components/Layout/Layout.tsx | 22 + .../src/components/Layout/LayoutContext.tsx | 20 + .../hybrid-pay/src/components/Layout/Main.tsx | 20 + apps/hybrid-pay/src/components/Layout/Nav.tsx | 9 + .../src/components/Layout/NavItem.tsx | 62 + .../src/components/Layout/Sidebar.tsx | 49 + .../Layout/__tests__/Header.test.tsx | 11 + .../src/components/Layout/index.tsx | 5 + .../src/components/Logo/Logo.style.tsx | 19 + apps/hybrid-pay/src/components/Logo/Logo.tsx | 39 + apps/hybrid-pay/src/components/Logo/index.tsx | 1 + .../components/SocialsGroup/SocialsGroup.tsx | 43 + .../src/components/SocialsGroup/index.tsx | 1 + .../TransactionDetails.style.tsx | 17 + .../TransactionDetails/TransactionDetails.tsx | 84 + .../components/TransactionDetails/index.tsx | 1 + apps/hybrid-pay/src/components/index.ts | 3 + apps/hybrid-pay/src/constants/assets.ts | 79 + apps/hybrid-pay/src/constants/chain.ts | 11 + apps/hybrid-pay/src/constants/index.ts | 3 + apps/hybrid-pay/src/constants/links.ts | 6 + apps/hybrid-pay/src/constants/routes.ts | 5 + apps/hybrid-pay/src/hooks/index.ts | 3 + apps/hybrid-pay/src/hooks/useBalances.ts | 72 + apps/hybrid-pay/src/hooks/useKernelClient.ts | 90 + apps/hybrid-pay/src/hooks/useTokens.ts | 32 + apps/hybrid-pay/src/index.css | 26 + .../src/lib/account-abstraction/bundler.ts | 12 + apps/hybrid-pay/src/lib/form/transfer.ts | 38 + apps/hybrid-pay/src/lib/form/utils.ts | 3 + apps/hybrid-pay/src/lib/form/yup.custom.ts | 122 + apps/hybrid-pay/src/lib/react-query/index.ts | 5 + apps/hybrid-pay/src/main.tsx | 38 + apps/hybrid-pay/src/pages/404/404.tsx | 30 + apps/hybrid-pay/src/pages/404/index.tsx | 1 + apps/hybrid-pay/src/pages/Home/Home.style.tsx | 12 + apps/hybrid-pay/src/pages/Home/Home.tsx | 24 + .../SendTokenModal/SendTokenModal.tsx | 346 ++ .../Home/components/SendTokenModal/index.tsx | 1 + .../src/pages/Home/components/index.tsx | 1 + apps/hybrid-pay/src/pages/Home/index.tsx | 1 + .../src/types/styled-components.d.ts | 5 + .../src/utils/dynamic-api-client.ts | 39 + apps/hybrid-pay/src/utils/index.ts | 2 + apps/hybrid-pay/src/utils/math.ts | 7 + apps/hybrid-pay/src/utils/sentry.ts | 38 + apps/hybrid-pay/src/vite-env.d.ts | 1 + apps/hybrid-pay/tsconfig.json | 25 + apps/hybrid-pay/tsconfig.node.json | 10 + apps/hybrid-pay/vercel.json | 30 + apps/hybrid-pay/vite.config.ts | 55 + knip.config.js | 3 +- package.json | 1 + packages/chains/src/chainId.ts | 1 + packages/chains/src/chainNames.ts | 4 +- packages/hooks/src/useApproval.tsx | 5 +- packages/sats-wagmi/src/hooks/useBalance.tsx | 6 +- packages/tokens/src/constants/common.ts | 2 +- packages/tokens/src/constants/native.ts | 8 +- packages/wagmi/src/config.ts | 7 +- pnpm-lock.yaml | 4113 +++++++++++------ 77 files changed, 5175 insertions(+), 1355 deletions(-) create mode 100644 apps/hybrid-pay/.env.example create mode 100644 apps/hybrid-pay/.gitignore create mode 100644 apps/hybrid-pay/README.md create mode 100644 apps/hybrid-pay/api/geoblock.js create mode 100644 apps/hybrid-pay/api/index.js create mode 100644 apps/hybrid-pay/api/marketdata.js create mode 100644 apps/hybrid-pay/api/package-lock.json create mode 100644 apps/hybrid-pay/api/package.json create mode 100644 apps/hybrid-pay/api/sentry.js create mode 100644 apps/hybrid-pay/index.html create mode 100644 apps/hybrid-pay/package.json create mode 100644 apps/hybrid-pay/src/App.tsx create mode 100644 apps/hybrid-pay/src/components/AmountLabel/AmountLabel.tsx create mode 100644 apps/hybrid-pay/src/components/AmountLabel/index.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/Header.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/Layout.style.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/Layout.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/LayoutContext.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/Main.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/Nav.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/NavItem.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/Sidebar.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/__tests__/Header.test.tsx create mode 100644 apps/hybrid-pay/src/components/Layout/index.tsx create mode 100644 apps/hybrid-pay/src/components/Logo/Logo.style.tsx create mode 100644 apps/hybrid-pay/src/components/Logo/Logo.tsx create mode 100644 apps/hybrid-pay/src/components/Logo/index.tsx create mode 100644 apps/hybrid-pay/src/components/SocialsGroup/SocialsGroup.tsx create mode 100644 apps/hybrid-pay/src/components/SocialsGroup/index.tsx create mode 100644 apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.style.tsx create mode 100644 apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.tsx create mode 100644 apps/hybrid-pay/src/components/TransactionDetails/index.tsx create mode 100644 apps/hybrid-pay/src/components/index.ts create mode 100644 apps/hybrid-pay/src/constants/assets.ts create mode 100644 apps/hybrid-pay/src/constants/chain.ts create mode 100644 apps/hybrid-pay/src/constants/index.ts create mode 100644 apps/hybrid-pay/src/constants/links.ts create mode 100644 apps/hybrid-pay/src/constants/routes.ts create mode 100644 apps/hybrid-pay/src/hooks/index.ts create mode 100644 apps/hybrid-pay/src/hooks/useBalances.ts create mode 100644 apps/hybrid-pay/src/hooks/useKernelClient.ts create mode 100644 apps/hybrid-pay/src/hooks/useTokens.ts create mode 100644 apps/hybrid-pay/src/index.css create mode 100644 apps/hybrid-pay/src/lib/account-abstraction/bundler.ts create mode 100644 apps/hybrid-pay/src/lib/form/transfer.ts create mode 100644 apps/hybrid-pay/src/lib/form/utils.ts create mode 100644 apps/hybrid-pay/src/lib/form/yup.custom.ts create mode 100644 apps/hybrid-pay/src/lib/react-query/index.ts create mode 100644 apps/hybrid-pay/src/main.tsx create mode 100644 apps/hybrid-pay/src/pages/404/404.tsx create mode 100644 apps/hybrid-pay/src/pages/404/index.tsx create mode 100644 apps/hybrid-pay/src/pages/Home/Home.style.tsx create mode 100644 apps/hybrid-pay/src/pages/Home/Home.tsx create mode 100644 apps/hybrid-pay/src/pages/Home/components/SendTokenModal/SendTokenModal.tsx create mode 100644 apps/hybrid-pay/src/pages/Home/components/SendTokenModal/index.tsx create mode 100644 apps/hybrid-pay/src/pages/Home/components/index.tsx create mode 100644 apps/hybrid-pay/src/pages/Home/index.tsx create mode 100644 apps/hybrid-pay/src/types/styled-components.d.ts create mode 100644 apps/hybrid-pay/src/utils/dynamic-api-client.ts create mode 100644 apps/hybrid-pay/src/utils/index.ts create mode 100644 apps/hybrid-pay/src/utils/math.ts create mode 100644 apps/hybrid-pay/src/utils/sentry.ts create mode 100644 apps/hybrid-pay/src/vite-env.d.ts create mode 100644 apps/hybrid-pay/tsconfig.json create mode 100644 apps/hybrid-pay/tsconfig.node.json create mode 100644 apps/hybrid-pay/vercel.json create mode 100644 apps/hybrid-pay/vite.config.ts diff --git a/apps/hybrid-pay/.env.example b/apps/hybrid-pay/.env.example new file mode 100644 index 000000000..2cb8ff363 --- /dev/null +++ b/apps/hybrid-pay/.env.example @@ -0,0 +1,18 @@ +VITE_API_URL="" +VITE_L1_CHAIN_NAME="sepolia" +VITE_COINGECKO_API_KEY= +VITE_DISPLAY_TVL_FEATURE=enabled +VITE_MARKET_DATA_API="/marketdata/v1" +VITE_GEOBLOCK_ENABLED=false +VITE_ONRAMP_API_URL="https://onramp-api-testnet.gobob.xyz" +VITE_BTC_API_URL="https://btc-testnet.gobob.xyz" +VITE_FEATURE_FLAG_BTC_ONRAMP=disabled +VITE_INDEXER_BRIDGE_URL="" +VITE_SENTRY_URL="" +VITE_SENTRY_AUTH_TOKEN="" + + +/* MAINNET */ +VITE_ONRAMP_API_URL="https://onramp-api-mainnet.gobob.xyz" +VITE_BTC_API_URL="https://btc-mainnet.gobob.xyz" +VITE_L1_CHAIN_NAME="ethereum" diff --git a/apps/hybrid-pay/.gitignore b/apps/hybrid-pay/.gitignore new file mode 100644 index 000000000..b4ac0dcd0 --- /dev/null +++ b/apps/hybrid-pay/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env +# Sentry Config File +.env.sentry-build-plugin diff --git a/apps/hybrid-pay/README.md b/apps/hybrid-pay/README.md new file mode 100644 index 000000000..0df6978d7 --- /dev/null +++ b/apps/hybrid-pay/README.md @@ -0,0 +1,28 @@ +# BOB Collective: Highway + +## Local development + +### Installing the project + +1. Install [pnpm](https://pnpm.io/installation) +2. Run `pnpm install` + +### Starting the project + +1. Run `pnpm dev` + +### Browser support + +This application is tested using: + +- Chrome +- Brave +- Firefox + +In the following environments: + +- Linux +- MacOS +- Windows + +It does not currently support any mobile wallets. diff --git a/apps/hybrid-pay/api/geoblock.js b/apps/hybrid-pay/api/geoblock.js new file mode 100644 index 000000000..3907b3cd2 --- /dev/null +++ b/apps/hybrid-pay/api/geoblock.js @@ -0,0 +1,51 @@ +export const config = { + runtime: 'edge' +}; + +const blockedCountries = [ + 'AL', + 'BS', + 'BB', + 'BW', + 'KH', + 'KP', + 'GH', + 'JM', + 'MY', + 'MU', + 'MM', + 'NI', + 'ID', + 'IR', + 'AF', + 'PK', + 'CN', + 'PA', + 'AM', + 'GN', + 'IQ', + 'RW', + 'RS', + 'SY', + 'TH', + 'UG', + 'TZ', + 'US', + 'YE', + 'ZW', + 'RU', + 'CU', + 'SD', + 'VE' +]; + +function isGeoblocked(req) { + // https://vercel.com/docs/concepts/edge-network/headers#x-vercel-ip-country + const countryCode = req.headers.get('x-vercel-ip-country'); + + return blockedCountries.includes(countryCode); +} + +export default (req) => { + return new Response(null, { status: isGeoblocked(req) ? 403 : 200 }); +}; diff --git a/apps/hybrid-pay/api/index.js b/apps/hybrid-pay/api/index.js new file mode 100644 index 000000000..9fd79b386 --- /dev/null +++ b/apps/hybrid-pay/api/index.js @@ -0,0 +1,46 @@ +import { createProxyMiddleware } from 'http-proxy-middleware'; + +const CHAIN = process.env.CHAIN || 'mainnet'; + +const API_URL = { + mainnet: 'https://fusion-api.gobob.xyz', + sepolia: 'https://fusion-api-sepolia.gobob.xyz' +}; + +const ONRAMP_API_URL = { + mainnet: 'https://onramp-api-mainnet.gobob.xyz', + sepolia: 'https://onramp-api-testnet.gobob.xyz' +}; + +const BTC_API_URL = { + mainnet: 'https://btc-mainnet.gobob.xyz', + sepolia: 'https://btc-testnet.gobob.xyz' +}; + +const proxyMiddleware = createProxyMiddleware({ + target: API_URL[CHAIN], + router: { + '/dynamic-api': API_URL[CHAIN], + '/onramp-api': ONRAMP_API_URL[CHAIN], + '/btc-api': BTC_API_URL[CHAIN] + }, + changeOrigin: true, + pathRewrite: { '^/dynamic-api': '', '^/onramp-api': '', '^/btc-api': '' }, + on: { + proxyReq: (proxyReq) => { + proxyReq.setHeader('x-sec-token', 'foobar'); + }, + proxyRes: (proxyRes) => { + // vary: accept-encoding to handle caching of compressed responses + proxyRes.headers['vary'] = 'accept-encoding'; + } + } +}); + +export default function handler(req, res) { + proxyMiddleware(req, res, (result) => { + if (result instanceof Error) { + throw result; + } + }); +} diff --git a/apps/hybrid-pay/api/marketdata.js b/apps/hybrid-pay/api/marketdata.js new file mode 100644 index 000000000..cd24e7757 --- /dev/null +++ b/apps/hybrid-pay/api/marketdata.js @@ -0,0 +1,24 @@ +export const config = { + runtime: 'edge' +}; + +export default async (request) => { + const url = 'https://api.coingecko.com/api/v3/simple/price?' + new URL(request.url).searchParams; + const cgResp = await fetch(url, { headers: { accept: 'application/json' } }); + + if (!cgResp.ok) { + const errMsg = await cgResp.text(); + + throw new Error(errMsg); + } + + const data = await cgResp.json(); + + return new Response(JSON.stringify(data), { + status: 200, + headers: { + 'content-type': 'application/json', + 'cache-control': 'public, max-age=120, s-maxage=120, stale-while-revalidate=300, stale-if-error=300' + } + }); +}; diff --git a/apps/hybrid-pay/api/package-lock.json b/apps/hybrid-pay/api/package-lock.json new file mode 100644 index 000000000..e721ecb5d --- /dev/null +++ b/apps/hybrid-pay/api/package-lock.json @@ -0,0 +1,210 @@ +{ + "name": "api", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "api", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "http-proxy-middleware": "^3.0.0" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", + "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", + "dependencies": { + "@types/http-proxy": "^1.17.10", + "debug": "^4.3.4", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + } + } +} diff --git a/apps/hybrid-pay/api/package.json b/apps/hybrid-pay/api/package.json new file mode 100644 index 000000000..00da1fdf7 --- /dev/null +++ b/apps/hybrid-pay/api/package.json @@ -0,0 +1,16 @@ +{ + "name": "api", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "http-proxy-middleware": "^3.0.0" + } +} diff --git a/apps/hybrid-pay/api/sentry.js b/apps/hybrid-pay/api/sentry.js new file mode 100644 index 000000000..677373513 --- /dev/null +++ b/apps/hybrid-pay/api/sentry.js @@ -0,0 +1,48 @@ +const SENTRY_HOST = 'o4504853415329792.ingest.us.sentry.io'; +const SENTRY_PROJECT_IDS = ['4507407322316800']; + +export const config = { + runtime: 'edge' +}; + +async function extractBody(request) { + const dec = new TextDecoder(); + const reader = request.body.getReader(); + let body = ''; + + while (true) { + const { done, value } = await reader.read(); + + if (done) return body; + + body = body + dec.decode(value); + } +} + +export default async (request) => { + try { + const envelope = await extractBody(request); + const piece = envelope.split('\n')[0]; + const header = JSON.parse(piece); + const dsn = new URL(header['dsn']); + const project_id = dsn.pathname?.replace('/', ''); + + if (dsn.hostname !== SENTRY_HOST) { + throw new Error(`Invalid sentry hostname: ${dsn.hostname}`); + } + + if (!project_id || !SENTRY_PROJECT_IDS.includes(project_id)) { + throw new Error(`Invalid sentry project id: ${project_id}`); + } + + const upstream_sentry_url = `https://${SENTRY_HOST}/api/${project_id}/envelope/`; + + await fetch(upstream_sentry_url, { method: 'POST', body: envelope }); + + return new Response(null, { status: 200 }); + } catch (e) { + console.error('error tunneling to sentry', e); // eslint-disable-line no-console + + return new Response('error tunneling to sentry', { status: 500 }); + } +}; diff --git a/apps/hybrid-pay/index.html b/apps/hybrid-pay/index.html new file mode 100644 index 000000000..a4a62eead --- /dev/null +++ b/apps/hybrid-pay/index.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + BOB + + +
+ + + + + + diff --git a/apps/hybrid-pay/package.json b/apps/hybrid-pay/package.json new file mode 100644 index 000000000..5867b3d34 --- /dev/null +++ b/apps/hybrid-pay/package.json @@ -0,0 +1,56 @@ +{ + "name": "bob-hybrid-pay", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview", + "format:check": "prettier --check src/** --cache", + "format:write": "prettier --write src/** --cache", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@dynamic-labs/bitcoin": "^2.2.10", + "@dynamic-labs/ethereum": "^2.2.10", + "@dynamic-labs/ethereum-aa": "^2.2.10", + "@dynamic-labs/sdk-react-core": "^2.2.10", + "@dynamic-labs/wagmi-connector": "^2.2.10", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "@gobob/chains": "workspace:^", + "@gobob/currency": "workspace:^", + "@gobob/hooks": "workspace:^", + "@gobob/icons": "workspace:^", + "@gobob/react-query": "workspace:^", + "@gobob/tokens": "workspace:^", + "@gobob/types": "workspace:^", + "@gobob/ui": "workspace:^", + "@gobob/utils": "workspace:^", + "@gobob/wagmi": "workspace:^", + "@react-aria/utils": "^3.23.2", + "@sentry/react": "^8.8.0", + "@sentry/vite-plugin": "^2.18.0", + "@zerodev/sdk": "^5.3.3", + "big.js": "^6.2.1", + "permissionless": "^0.1.36", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.16.0", + "styled-components": "^6.0.8", + "viem": "^2.17.3", + "wagmi": "^2.8.1", + "yup": "^0.32.11" + }, + "devDependencies": { + "@gobob/test-utils": "workspace:^", + "@types/big.js": "^6.2.0", + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react": "^4.0.3", + "eslint": "^8.45.0", + "vite": "^4.4.5" + } +} diff --git a/apps/hybrid-pay/src/App.tsx b/apps/hybrid-pay/src/App.tsx new file mode 100644 index 000000000..d4f0c27ac --- /dev/null +++ b/apps/hybrid-pay/src/App.tsx @@ -0,0 +1,61 @@ +import { useReconnect } from '@gobob/wagmi'; +import { Suspense, lazy, useEffect } from 'react'; +import { BrowserRouter, Route, Routes, useLocation } from 'react-router-dom'; + +import { Header, Layout, Main, Sidebar } from './components'; +import { RoutesPath } from './constants'; + +const ScrollToTop = () => { + // Extracts pathname property(key) from an object + const { pathname } = useLocation(); + + // Automatically scrolls to top whenever pathname changes + useEffect(() => { + window.scrollTo(0, 0); + }, [pathname]); + + return null; +}; + +const Home = lazy(() => import('./pages/Home')); +const Custom404 = lazy(() => import('./pages/404')); + +// using Main just so we can show the background wallpaper +const Fallback = () => { + const { pathname } = useLocation(); + + if (pathname === RoutesPath.HOME) return null; + + return ( +
+
+
+ ); +}; + +function App() { + const { reconnect } = useReconnect(); + + useEffect(() => { + reconnect(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + + +
+ }> + + } path={RoutesPath.HOME} /> + } path='*' /> + + + + + ); +} + +export default App; diff --git a/apps/hybrid-pay/src/components/AmountLabel/AmountLabel.tsx b/apps/hybrid-pay/src/components/AmountLabel/AmountLabel.tsx new file mode 100644 index 000000000..0ab13a1a8 --- /dev/null +++ b/apps/hybrid-pay/src/components/AmountLabel/AmountLabel.tsx @@ -0,0 +1,35 @@ +import { Currency, CurrencyAmount } from '@gobob/currency'; +import { usePrices } from '@gobob/react-query'; +import { useCurrencyFormatter } from '@gobob/ui'; +import { useMemo } from 'react'; + +import { calculateAmountUSD } from '../../utils'; + +type Props = { + amount?: CurrencyAmount; +}; + +type AmountLabelProps = Props; + +const AmountLabel = ({ amount }: AmountLabelProps): JSX.Element => { + const format = useCurrencyFormatter(); + + const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); + + const amountUSD = useMemo( + () => (amount ? calculateAmountUSD(amount, getPrice(amount.currency.symbol)) : undefined), + [amount, getPrice] + ); + + if (!amount) { + return <>-; + } + + return ( + <> + {amount.toExact()} {amount.currency.symbol} ({format(amountUSD || 0)}) + + ); +}; + +export { AmountLabel }; diff --git a/apps/hybrid-pay/src/components/AmountLabel/index.tsx b/apps/hybrid-pay/src/components/AmountLabel/index.tsx new file mode 100644 index 000000000..2e4268cf9 --- /dev/null +++ b/apps/hybrid-pay/src/components/AmountLabel/index.tsx @@ -0,0 +1 @@ +export { AmountLabel } from './AmountLabel'; diff --git a/apps/hybrid-pay/src/components/Layout/Header.tsx b/apps/hybrid-pay/src/components/Layout/Header.tsx new file mode 100644 index 000000000..263932dc1 --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/Header.tsx @@ -0,0 +1,53 @@ +import { Bars3, Button, Flex, FlexProps, useMediaQuery } from '@gobob/ui'; +import { useTheme } from 'styled-components'; +import { DynamicWidget } from '@dynamic-labs/sdk-react-core'; + +import { RoutesPath } from '../../constants'; +import { Logo } from '../Logo'; +import { SocialsGroup } from '../SocialsGroup'; + +import { StyledHeader, StyledLogoWrapper } from './Layout.style'; +import { useLayoutContext } from './LayoutContext'; +import { Nav } from './Nav'; +import { NavItem } from './NavItem'; + +type Props = { isTestnet?: boolean; isFusion?: boolean }; + +type InheritAttrs = Omit; + +type HeaderProps = Props & InheritAttrs; + +const Header = ({ isTestnet, isFusion, ...props }: HeaderProps): JSX.Element => { + const { setSidebarOpen } = useLayoutContext(); + + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down('md')); + + return ( + + + {isMobile && ( + + )} + {!isMobile && } + + + {!isMobile && ( + <> + + + + )} + + + + ); +}; + +export { Header }; diff --git a/apps/hybrid-pay/src/components/Layout/Layout.style.tsx b/apps/hybrid-pay/src/components/Layout/Layout.style.tsx new file mode 100644 index 000000000..e39986bcb --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/Layout.style.tsx @@ -0,0 +1,95 @@ +import { MaxWidth, ResponsiveProp, Spacing, Span } from '@gobob/ui'; +import { Drawer, Flex } from '@gobob/ui'; +import { NavLink } from 'react-router-dom'; +import styled, { css } from 'styled-components'; + +type StyledMainProps = { + $maxWidth?: ResponsiveProp; + $padding: Spacing; +}; + +const StyledLayout = styled(Flex)` + min-height: 100vh; + // TODO: figure this out + background-color: #0d1017; +`; + +const StyledHeader = styled(Flex)` + width: 100%; + padding-right: ${({ theme }) => theme.spacing('3xl')}; + overflow-x: hidden; + z-index: 20; + max-width: ${({ theme }) => theme.maxWidth('7xl')}; + margin: 0 auto; +`; + +const StyledLogoWrapper = styled(Flex)` + height: 76px; + padding-left: ${({ theme }) => theme.spacing('3xl')}; +`; + +const StyledDrawer = styled(Drawer)` + height: 100%; +`; + +const StyledMain = styled.main` + width: 100%; + overflow-x: hidden; + padding: ${({ theme, $padding }) => theme.spacing($padding)}; + margin-left: auto; + margin-right: auto; + + ${({ $maxWidth, theme }) => + typeof $maxWidth === 'object' + ? css` + ${$maxWidth.base && theme.breakpoints.media.base`max-width: ${theme.maxWidth($maxWidth.base)};`} + ${$maxWidth.s && theme.breakpoints.media.s`max-width: ${theme.maxWidth($maxWidth.s)};`} + ${$maxWidth.md && theme.breakpoints.media.md`max-width: ${theme.maxWidth($maxWidth.md)};`} + ${$maxWidth.lg && theme.breakpoints.media.lg`max-width: ${theme.maxWidth($maxWidth.lg)};`} + ${$maxWidth.xl && theme.breakpoints.media.xl`max-width: ${theme.maxWidth($maxWidth.xl)};`} + ` + : $maxWidth && `max-width:${theme.maxWidth($maxWidth)};`} + min-height: calc(100vh - 4.75rem); +`; + +// TODO: to be removed +const StyledContent = styled.div` + position: relative; +`; + +type StyledNavLinkProps = { + $isActive?: boolean; +}; + +const StyledNativeNavLink = styled(NavLink)` + text-decoration: none; + display: inline-flex; + align-items: center; + justify-content: center; +`; + +const StyledNavLink = styled(Span)` + ${({ theme }) => theme.transition('common', 'normal')} + + &:hover { + opacity: 0.8; + } +`; + +const StyledAnchor = styled.a` + text-decoration: none; + font: inherit; + color: inherit; +`; + +export { + StyledDrawer, + StyledHeader, + StyledNativeNavLink, + StyledNavLink, + StyledAnchor, + StyledContent, + StyledLogoWrapper, + StyledLayout, + StyledMain +}; diff --git a/apps/hybrid-pay/src/components/Layout/Layout.tsx b/apps/hybrid-pay/src/components/Layout/Layout.tsx new file mode 100644 index 000000000..b2ab438fa --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/Layout.tsx @@ -0,0 +1,22 @@ +import { HTMLAttributes } from 'react'; + +import { StyledLayout } from './Layout.style'; +import { LayoutProvider } from './LayoutContext'; + +type Props = {}; + +type NattiveAttrs = Omit, keyof Props>; + +type LayoutProps = Props & NattiveAttrs; + +const Layout = ({ children, ...props }: LayoutProps): JSX.Element => { + return ( + + + {children} + + + ); +}; + +export { Layout }; diff --git a/apps/hybrid-pay/src/components/Layout/LayoutContext.tsx b/apps/hybrid-pay/src/components/Layout/LayoutContext.tsx new file mode 100644 index 000000000..e57dbac30 --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/LayoutContext.tsx @@ -0,0 +1,20 @@ +import React, { ReactNode, useState } from 'react'; + +interface LayoutConfig { + isSidebarOpen: boolean; + setSidebarOpen: (isOpen: boolean) => void; +} + +const defaultContext: LayoutConfig = { isSidebarOpen: false, setSidebarOpen: () => {} }; + +const LayoutContext = React.createContext(defaultContext); + +const useLayoutContext = (): LayoutConfig => React.useContext(LayoutContext); + +const LayoutProvider = ({ children }: { children: ReactNode }) => { + const [isSidebarOpen, setSidebarOpen] = useState(false); + + return {children}; +}; + +export { LayoutProvider, useLayoutContext }; diff --git a/apps/hybrid-pay/src/components/Layout/Main.tsx b/apps/hybrid-pay/src/components/Layout/Main.tsx new file mode 100644 index 000000000..b4d3300b2 --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/Main.tsx @@ -0,0 +1,20 @@ +import { ReactNode } from 'react'; +import { MaxWidth, ResponsiveProp, Spacing } from '@gobob/ui'; + +import { StyledContent, StyledMain } from './Layout.style'; + +type Props = { + maxWidth?: ResponsiveProp; + padding?: Spacing; + children: ReactNode; +}; + +type MainProps = Props; + +const Main = ({ children, maxWidth, padding = '4xl', ...props }: MainProps): JSX.Element => ( + + {children} + +); + +export { Main }; diff --git a/apps/hybrid-pay/src/components/Layout/Nav.tsx b/apps/hybrid-pay/src/components/Layout/Nav.tsx new file mode 100644 index 000000000..314f57191 --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/Nav.tsx @@ -0,0 +1,9 @@ +import { Flex, FlexProps } from '@gobob/ui'; + +type NavProps = FlexProps; + +const Nav = ({ gap = 'xl', ...props }: NavProps): JSX.Element => { + return ; +}; + +export { Nav }; diff --git a/apps/hybrid-pay/src/components/Layout/NavItem.tsx b/apps/hybrid-pay/src/components/Layout/NavItem.tsx new file mode 100644 index 000000000..56478dec4 --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/NavItem.tsx @@ -0,0 +1,62 @@ +import { Flex, Span, TextProps } from '@gobob/ui'; +import { ReactNode, useRef } from 'react'; +import { NavLinkProps } from 'react-router-dom'; +import { ArrowTopRightOnSquare } from '@gobob/ui'; + +import { StyledAnchor, StyledNativeNavLink, StyledNavLink } from './Layout.style'; + +import { useLayoutContext } from '.'; + +type Props = { + children: ReactNode; + size?: TextProps['size']; + isExternal?: boolean; +}; + +type InheritAttrs = Omit; + +type NavItemProps = Props & InheritAttrs; + +const NavItem = ({ children, size, isExternal, to, ...props }: NavItemProps): JSX.Element => { + const ref = useRef(null); + const { setSidebarOpen } = useLayoutContext(); + + const handlePress = () => setSidebarOpen(false); + + if (isExternal) { + return ( +
  • + + + + {children} + + + + +
  • + ); + } + + return ( +
  • + + {({ isActive }) => ( + + {children} + + )} + +
  • + ); +}; + +export { NavItem }; diff --git a/apps/hybrid-pay/src/components/Layout/Sidebar.tsx b/apps/hybrid-pay/src/components/Layout/Sidebar.tsx new file mode 100644 index 000000000..8d16e1dff --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/Sidebar.tsx @@ -0,0 +1,49 @@ +import { Button, Flex, XMark, useMediaQuery } from '@gobob/ui'; +import { useTheme } from 'styled-components'; + +import { RoutesPath } from '../../constants'; +import { Logo } from '../Logo'; +import { SocialsGroup } from '../SocialsGroup'; + +import { StyledDrawer } from './Layout.style'; +import { useLayoutContext } from './LayoutContext'; +import { Nav } from './Nav'; +import { NavItem } from './NavItem'; + +type Props = { isTestnet?: boolean; isFusion?: boolean }; + +type SidebarProps = Props; + +const Sidebar = ({ isTestnet, isFusion }: SidebarProps): JSX.Element | null => { + const { isSidebarOpen, setSidebarOpen } = useLayoutContext(); + const theme = useTheme(); + + const isMobile = useMediaQuery(theme.breakpoints.down('lg')); + + if (isMobile) { + const handleClose = () => setSidebarOpen(false); + + return ( + + + + + + + + + + + + + ); + } + + return null; +}; + +export { Sidebar }; diff --git a/apps/hybrid-pay/src/components/Layout/__tests__/Header.test.tsx b/apps/hybrid-pay/src/components/Layout/__tests__/Header.test.tsx new file mode 100644 index 000000000..3c472b9a9 --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/__tests__/Header.test.tsx @@ -0,0 +1,11 @@ +import { render } from '@gobob/test-utils'; + +import { Layout } from '..'; + +describe('Layout', () => { + it('should render correctly', () => { + const { unmount } = render(Layout); + + expect(() => unmount()).not.toThrow(); + }); +}); diff --git a/apps/hybrid-pay/src/components/Layout/index.tsx b/apps/hybrid-pay/src/components/Layout/index.tsx new file mode 100644 index 000000000..f0e99079c --- /dev/null +++ b/apps/hybrid-pay/src/components/Layout/index.tsx @@ -0,0 +1,5 @@ +export { Header } from './Header'; +export { Layout } from './Layout'; +export { Sidebar } from './Sidebar'; +export { Main } from './Main'; +export { useLayoutContext } from './LayoutContext'; diff --git a/apps/hybrid-pay/src/components/Logo/Logo.style.tsx b/apps/hybrid-pay/src/components/Logo/Logo.style.tsx new file mode 100644 index 000000000..ab6d71f94 --- /dev/null +++ b/apps/hybrid-pay/src/components/Logo/Logo.style.tsx @@ -0,0 +1,19 @@ +import { Span } from '@gobob/ui'; +import { Link } from 'react-router-dom'; +import styled from 'styled-components'; + +const StyledLogo = styled(Link)` + display: inline-flex; + align-items: center; + gap: ${({ theme }) => theme.spacing('md')}; + text-decoration: none; +`; + +// TODO: Create UI badge component +const StyledBadge = styled(Span)` + border-radius: ${({ theme }) => theme.rounded('3xl')}; + background-color: ${({ theme }) => theme.color('grey-500')}; + padding: ${({ theme }) => `${theme.spacing('xs')} ${theme.spacing('md')}`}; +`; + +export { StyledLogo, StyledBadge }; diff --git a/apps/hybrid-pay/src/components/Logo/Logo.tsx b/apps/hybrid-pay/src/components/Logo/Logo.tsx new file mode 100644 index 000000000..0d14481a5 --- /dev/null +++ b/apps/hybrid-pay/src/components/Logo/Logo.tsx @@ -0,0 +1,39 @@ +import { Flex, Span } from '@gobob/ui'; +import { BOBLogo } from '@gobob/icons'; +import { NavLinkProps } from 'react-router-dom'; + +import { StyledBadge, StyledLogo } from './Logo.style'; + +type Props = { + isTestnet?: boolean; + isFusion?: boolean; + onPress?: () => void; + to?: string; +}; + +type InheritAttrs = Omit; + +type LogoProps = Props & InheritAttrs; + +const Logo = ({ isTestnet, isFusion, to = '/', onPress, ...props }: LogoProps) => ( + + + + + BOB + + {isFusion && ( + + FUSION + + )} + + {isTestnet && ( + + Testnet + + )} + +); + +export { Logo }; diff --git a/apps/hybrid-pay/src/components/Logo/index.tsx b/apps/hybrid-pay/src/components/Logo/index.tsx new file mode 100644 index 000000000..33af50533 --- /dev/null +++ b/apps/hybrid-pay/src/components/Logo/index.tsx @@ -0,0 +1 @@ +export { Logo } from './Logo'; diff --git a/apps/hybrid-pay/src/components/SocialsGroup/SocialsGroup.tsx b/apps/hybrid-pay/src/components/SocialsGroup/SocialsGroup.tsx new file mode 100644 index 000000000..4cd441eba --- /dev/null +++ b/apps/hybrid-pay/src/components/SocialsGroup/SocialsGroup.tsx @@ -0,0 +1,43 @@ +import { Button, ButtonProps, Flex, FlexProps } from '@gobob/ui'; +import { Discord, Twitter } from '@gobob/icons'; + +import { DocsLinks } from '../../constants'; + +type Props = { + showDocs?: boolean; + variant?: ButtonProps['variant']; +}; + +type InheritAttrs = Omit; + +type SocialsGroupProps = Props & InheritAttrs; + +const SocialsGroup = ({ + showDocs, + gap = 's', + justifyContent = 'center', + variant = 'outline', + ...props +}: SocialsGroupProps): JSX.Element => ( + + {showDocs && ( + + )} + + + +); + +export { SocialsGroup }; diff --git a/apps/hybrid-pay/src/components/SocialsGroup/index.tsx b/apps/hybrid-pay/src/components/SocialsGroup/index.tsx new file mode 100644 index 000000000..19513347f --- /dev/null +++ b/apps/hybrid-pay/src/components/SocialsGroup/index.tsx @@ -0,0 +1 @@ +export { SocialsGroup } from './SocialsGroup'; diff --git a/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.style.tsx b/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.style.tsx new file mode 100644 index 000000000..a6f4c653f --- /dev/null +++ b/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.style.tsx @@ -0,0 +1,17 @@ +import { DlGroup, Dt } from '@gobob/ui'; +import styled from 'styled-components'; + +type StyledDtProps = { + $hasExtendedHeight?: boolean; +}; + +// This custom padding helps to keep harmony between normal elements and elements with small select +const StyledDlGroup = styled(DlGroup)` + line-height: 20px; +`; + +const StyledDt = styled(Dt)` + line-height: ${({ $hasExtendedHeight = true }) => $hasExtendedHeight && '1.875rem'}; +`; + +export { StyledDlGroup, StyledDt }; diff --git a/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.tsx b/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.tsx new file mode 100644 index 000000000..de33a88ea --- /dev/null +++ b/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.tsx @@ -0,0 +1,84 @@ +import { Currency, CurrencyAmount } from '@gobob/currency'; +import { Avatar, Card, Dd, Dl, DlProps, Flex, SelectProps, Span, Spinner, TokenData } from '@gobob/ui'; +import { ReactNode } from 'react'; +import { ChainId } from '@gobob/chains'; + +import { AmountLabel } from '../AmountLabel'; + +import { StyledDlGroup, StyledDt } from './TransactionDetails.style'; + +type Props = { + chainId: ChainId; + gasEstimate?: CurrencyAmount; + gasEstimatePlaceholder?: CurrencyAmount; + isLoadingGasEstimate?: boolean; + tokenUrl?: string; + amount?: CurrencyAmount; + amountPlaceholder?: CurrencyAmount; + onChangeGasTicker?: (ticker: string) => void; + selectProps?: Omit, 'children'>; + duration?: ReactNode; + gasLabel?: ReactNode; +}; + +type InheritAttrs = Omit; + +type TransactionDetailsProps = Props & InheritAttrs; + +const TransactionDetails = ({ + chainId, + onChangeGasTicker, + amount: amountProp, + amountPlaceholder, + gasEstimate: gasEstimateProp, + gasEstimatePlaceholder, + isLoadingGasEstimate, + duration, + selectProps, + gasLabel = 'Estimated Gas', + tokenUrl, + ...props +}: TransactionDetailsProps): JSX.Element => { + const amount = amountProp || amountPlaceholder; + const gasEstimate = gasEstimateProp || gasEstimatePlaceholder; + + return ( + +
    + {amount && ( + + Sending +
    + + {tokenUrl && } + + + + +
    +
    + )} + {duration && ( + + Transfer time +
    {duration}
    +
    + )} + {gasEstimate && ( + + {gasLabel} +
    + + {isLoadingGasEstimate && } + {tokenUrl && } + + +
    +
    + )} +
    +
    + ); +}; + +export { TransactionDetails }; diff --git a/apps/hybrid-pay/src/components/TransactionDetails/index.tsx b/apps/hybrid-pay/src/components/TransactionDetails/index.tsx new file mode 100644 index 000000000..9c33a19c3 --- /dev/null +++ b/apps/hybrid-pay/src/components/TransactionDetails/index.tsx @@ -0,0 +1 @@ +export { TransactionDetails } from './TransactionDetails'; diff --git a/apps/hybrid-pay/src/components/index.ts b/apps/hybrid-pay/src/components/index.ts new file mode 100644 index 000000000..ee99930d4 --- /dev/null +++ b/apps/hybrid-pay/src/components/index.ts @@ -0,0 +1,3 @@ +export * from './TransactionDetails'; +export * from './Layout'; +export * from './AmountLabel'; diff --git a/apps/hybrid-pay/src/constants/assets.ts b/apps/hybrid-pay/src/constants/assets.ts new file mode 100644 index 000000000..8a0c5e78d --- /dev/null +++ b/apps/hybrid-pay/src/constants/assets.ts @@ -0,0 +1,79 @@ +import { ChainId } from '@gobob/chains'; +import { Address } from 'viem'; + +export type RawToken = { + chainId: ChainId; + address: Address; + name: string; + symbol: string; + decimals: number; + logoUrl: string; + apiId: string; + bridgeDisabled?: boolean; +}; + +const ETH: Record< + ChainId.BOB | ChainId.ETHEREUM | ChainId.SEPOLIA | ChainId.BOB_SEPOLIA | ChainId.BASE_SEPOLIA, + RawToken +> = { + [ChainId.ETHEREUM]: { + chainId: ChainId.ETHEREUM, + address: '0x0000000000000000000000000000000000000000', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', + apiId: 'ethereum' + }, + [ChainId.BOB]: { + chainId: ChainId.BOB, + address: '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', + apiId: 'ethereum' + }, + [ChainId.SEPOLIA]: { + chainId: ChainId.SEPOLIA, + address: '0x0000000000000000000000000000000000000000', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', + apiId: 'ethereum' + }, + [ChainId.BOB_SEPOLIA]: { + chainId: ChainId.BOB_SEPOLIA, + address: '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', + apiId: 'ethereum' + }, + [ChainId.BASE_SEPOLIA]: { + chainId: ChainId.BASE_SEPOLIA, + address: '0x0000000000000000000000000000000000000000', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', + apiId: 'ethereum' + } +}; + +const baseSepoliaAssets: RawToken[] = [ + ETH[ChainId.BASE_SEPOLIA], + { + chainId: ChainId.BASE_SEPOLIA, + address: '0x036CbD53842c5426634e7929541eC2318f3dCF7e', + name: 'USD Coin', + symbol: 'USDC', + decimals: 6, + logoUrl: 'https://ethereum-optimism.github.io/data/USDC/logo.png', + apiId: 'usd-coin' + } +]; + +export const tokens: RawToken[] = [...baseSepoliaAssets]; diff --git a/apps/hybrid-pay/src/constants/chain.ts b/apps/hybrid-pay/src/constants/chain.ts new file mode 100644 index 000000000..b659285ee --- /dev/null +++ b/apps/hybrid-pay/src/constants/chain.ts @@ -0,0 +1,11 @@ +import { ChainId, getChainIdByChainName, isTestnetChainId } from '@gobob/chains'; + +const CHAIN = getChainIdByChainName(import.meta.env.VITE_CHAIN_NAME) as ChainId; + +if (!CHAIN) { + throw new Error('Missing L1 chain'); +} + +const isProd = !isTestnetChainId(CHAIN); + +export { CHAIN, isProd }; diff --git a/apps/hybrid-pay/src/constants/index.ts b/apps/hybrid-pay/src/constants/index.ts new file mode 100644 index 000000000..4d74a03a6 --- /dev/null +++ b/apps/hybrid-pay/src/constants/index.ts @@ -0,0 +1,3 @@ +export * from './routes'; +export * from './links'; +export * from './chain'; diff --git a/apps/hybrid-pay/src/constants/links.ts b/apps/hybrid-pay/src/constants/links.ts new file mode 100644 index 000000000..04f08c246 --- /dev/null +++ b/apps/hybrid-pay/src/constants/links.ts @@ -0,0 +1,6 @@ +const DocsLinks = { + HOME: 'https://docs.gobob.xyz/', + OP_STACK: 'https://docs.gobob.xyz/docs/learn/bob-stack/op-stack' +}; + +export { DocsLinks }; diff --git a/apps/hybrid-pay/src/constants/routes.ts b/apps/hybrid-pay/src/constants/routes.ts new file mode 100644 index 000000000..4f5172931 --- /dev/null +++ b/apps/hybrid-pay/src/constants/routes.ts @@ -0,0 +1,5 @@ +const RoutesPath = { + HOME: '/' +}; + +export { RoutesPath }; diff --git a/apps/hybrid-pay/src/hooks/index.ts b/apps/hybrid-pay/src/hooks/index.ts new file mode 100644 index 000000000..3ecf22fa8 --- /dev/null +++ b/apps/hybrid-pay/src/hooks/index.ts @@ -0,0 +1,3 @@ +export * from './useBalances'; +export * from './useTokens'; +export * from './useKernelClient'; diff --git a/apps/hybrid-pay/src/hooks/useBalances.ts b/apps/hybrid-pay/src/hooks/useBalances.ts new file mode 100644 index 000000000..f65a35f58 --- /dev/null +++ b/apps/hybrid-pay/src/hooks/useBalances.ts @@ -0,0 +1,72 @@ +import { ChainId } from '@gobob/chains'; +import { CurrencyAmount, ERC20Token, Ether } from '@gobob/currency'; +import { INTERVAL, useQuery } from '@gobob/react-query'; +import { useAccount, useBalance, usePublicClient } from '@gobob/wagmi'; +import { chain } from '@react-aria/utils'; +import { useCallback, useMemo } from 'react'; +import { erc20Abi } from 'viem'; + +import { useTokens } from './useTokens'; + +type Balances = Record>; + +const useBalances = (chainId: ChainId) => { + const publicClient = usePublicClient({ chainId }); + const { address } = useAccount(); + + const { data: ethBalance, refetch } = useBalance({ address, chainId }); + + const { data: tokens } = useTokens(chainId); + + // TODO: add transfer event listener and update balance on transfer in/out + // TODO: useReadContracts instead https://wagmi.sh/react/guides/migrate-from-v1-to-v2#deprecated-usebalance-token-parameter + const { + data: erc20Balances, + refetch: refetchErc20, + ...queryResult + } = useQuery({ + queryKey: ['balances', chainId, address], + enabled: Boolean(address && publicClient && tokens), + queryFn: async () => { + if (!tokens || !publicClient) return; + + const balancesMulticallResult = await publicClient.multicall({ + contracts: tokens.map((token) => ({ + abi: erc20Abi, + address: token.raw.address, + functionName: 'balanceOf', + args: [address] + })) + }); + + return tokens.reduce( + (result, token, index) => ({ + ...result, + [token.raw.symbol]: CurrencyAmount.fromRawAmount( + token.currency, + (balancesMulticallResult[index].result as bigint) || 0n + ) + }), + {} as Balances + ); + }, + refetchInterval: INTERVAL.MINUTE + }); + + const balances = useMemo(() => { + const ether = Ether.onChain(chainId); + + return { + ...erc20Balances, + ...(ethBalance && { + [ether.symbol]: CurrencyAmount.fromRawAmount(ether, ethBalance.value) + }) + }; + }, [erc20Balances, ethBalance, chainId]); + + const getBalance = useCallback((symbol: string) => balances?.[symbol], [balances]); + + return { ...queryResult, balances, getBalance, refetch: chain(refetch, refetchErc20) }; +}; + +export { useBalances }; diff --git a/apps/hybrid-pay/src/hooks/useKernelClient.ts b/apps/hybrid-pay/src/hooks/useKernelClient.ts new file mode 100644 index 000000000..a37faa0f3 --- /dev/null +++ b/apps/hybrid-pay/src/hooks/useKernelClient.ts @@ -0,0 +1,90 @@ +import { isZeroDevConnector } from '@dynamic-labs/ethereum-aa'; +import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { ChainId } from '@gobob/chains'; +import { Currency } from '@gobob/currency'; +import { createKernelAccountClient } from '@zerodev/sdk'; +import { ENTRYPOINT_ADDRESS_V07 } from 'permissionless'; +import { createPimlicoBundlerClient } from 'permissionless/clients/pimlico'; +import { useMemo } from 'react'; +import { Address, http } from 'viem'; +import { useAccount } from 'wagmi'; + +import { getBundlerByChainId } from '../lib/account-abstraction/bundler'; + +type Paymasters = Partial>>; + +const paymasters: Paymasters = { + [ChainId.BASE_SEPOLIA]: { USDC: '0x00000000002E3A39aFEf1132214fEee5a55ce127' }, + [ChainId.BOB]: { + WBTC: '0x000000003CE83Ad13E6A53658Eb03179a37411AE', + USDC: '0x00000000D00a8A2AdA5EE8c162C90B6e7A05e970', + USDT: '0x000000009f6044DD489C2e2351AdbD9F52C3ABe7' + } +}; + +const useKernelClient = (gasToken?: Currency) => { + const { chain } = useAccount(); + const { primaryWallet } = useDynamicContext(); + + const { connector } = primaryWallet || {}; + + const bundlerClient = useMemo( + () => + chain && + createPimlicoBundlerClient({ + transport: http(getBundlerByChainId(chain?.id)), + entryPoint: ENTRYPOINT_ADDRESS_V07 + }), + [chain] + ); + + if (!connector || !isZeroDevConnector(connector)) { + return; + } + + const paymaster = gasToken ? paymasters?.[chain?.id as ChainId]?.[gasToken.symbol] : undefined; + + const dynamicAccountProvider = connector.getAccountAbstractionProvider(); + + return dynamicAccountProvider && chain && bundlerClient + ? createKernelAccountClient({ + account: dynamicAccountProvider.account as any, + chain, + bundlerTransport: http(getBundlerByChainId(chain.id), { + timeout: 30_000 // optional + }), + entryPoint: ENTRYPOINT_ADDRESS_V07, + middleware: { + gasPrice: async () => (await bundlerClient.getUserOperationGasPrice()).fast, + // MEMO: uncomment for fully sponsored tx + // sponsorUserOperation: async ({ userOperation }) => { + // const paymaster = createPimlicoPaymasterClient({ + // chain, + // entryPoint: ENTRYPOINT_ADDRESS_V07, + // // Get this RPC from ZeroDev dashboard + // transport: http(getBundlerByChainId(chain.id)) + // }); + + // return paymaster.sponsorUserOperation({ + // userOperation + // }); + // } + sponsorUserOperation: async (args) => { + const gasEstimates = await bundlerClient.estimateUserOperationGas({ + userOperation: { + ...args.userOperation, + paymaster + } + }); + + return { + ...gasEstimates, + paymaster + }; + } + } + }) + : undefined; +}; + +export { useKernelClient, paymasters }; diff --git a/apps/hybrid-pay/src/hooks/useTokens.ts b/apps/hybrid-pay/src/hooks/useTokens.ts new file mode 100644 index 000000000..10e74d9e4 --- /dev/null +++ b/apps/hybrid-pay/src/hooks/useTokens.ts @@ -0,0 +1,32 @@ +import { ChainId } from '@gobob/chains'; +import { INTERVAL, useQuery } from '@gobob/react-query'; +import { ERC20Token, Ether } from '@gobob/currency'; +import { NATIVE } from '@gobob/tokens'; + +import { RawToken, tokens } from '../constants/assets'; + +type TokenData = { + raw: RawToken; + currency: Ether | ERC20Token; +}; + +const useTokens = (chainId: ChainId) => { + return useQuery({ + queryKey: ['tokens', chainId], + refetchOnWindowFocus: false, + refetchOnMount: false, + gcTime: INTERVAL.HOUR, + queryFn: async () => + tokens + .filter((token) => token.chainId === chainId) + .map((token) => ({ + raw: token, + currency: + token.symbol === NATIVE[chainId].symbol + ? Ether.onChain(chainId) + : new ERC20Token(chainId, token.address, token.decimals, token.symbol, token.name) + })) + }); +}; + +export { useTokens }; diff --git a/apps/hybrid-pay/src/index.css b/apps/hybrid-pay/src/index.css new file mode 100644 index 000000000..d29b067cd --- /dev/null +++ b/apps/hybrid-pay/src/index.css @@ -0,0 +1,26 @@ +@font-face { + font-family: eurostar; + src: url(./assets/fonts/eurostar-black-extended.ttf); +} + +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +body { + min-height: 100vh; +} + +html { + overflow-x: hidden; +} diff --git a/apps/hybrid-pay/src/lib/account-abstraction/bundler.ts b/apps/hybrid-pay/src/lib/account-abstraction/bundler.ts new file mode 100644 index 000000000..f85e88545 --- /dev/null +++ b/apps/hybrid-pay/src/lib/account-abstraction/bundler.ts @@ -0,0 +1,12 @@ +import { ChainId } from '@gobob/chains'; + +const bundler = { + [ChainId.BASE_SEPOLIA]: `https://api.pimlico.io/v2/84532/rpc?apikey=${import.meta.env.VITE_PIMLICO_API_KEY}`, + [ChainId.BOB]: `https://api.pimlico.io/v2/60808/rpc?apikey=${import.meta.env.VITE_PIMLICO_API_KEY}` +}; + +const getBundlerByChainId = (chainId: ChainId) => { + return bundler[chainId as ChainId.BOB]; +}; + +export { getBundlerByChainId }; diff --git a/apps/hybrid-pay/src/lib/form/transfer.ts b/apps/hybrid-pay/src/lib/form/transfer.ts new file mode 100644 index 000000000..dd433cf9c --- /dev/null +++ b/apps/hybrid-pay/src/lib/form/transfer.ts @@ -0,0 +1,38 @@ +import yup, { MaxAmountValidationParams, MinAmountValidationParams } from './yup.custom'; + +const TRANSFER_TOKEN_RECIPIENT = 'transfer-token-recipient'; +const TRANSFER_TOKEN_AMOUNT = 'transfer-token-amount'; +const TRANSFER_TOKEN_TICKER = 'transfer-token-ticker'; + +type TransferTokenFormValues = { + [TRANSFER_TOKEN_RECIPIENT]?: string; + [TRANSFER_TOKEN_AMOUNT]?: string; + [TRANSFER_TOKEN_TICKER]?: string; +}; + +type TransferTokenFormValidationParams = { + [TRANSFER_TOKEN_AMOUNT]: MaxAmountValidationParams & MinAmountValidationParams; + [TRANSFER_TOKEN_RECIPIENT]?: 'evm' | 'socials'; +}; + +const transferTokenSchema = (params: TransferTokenFormValidationParams) => { + let recipient = yup.string().required('Recipient is a required field'); + + if (params[TRANSFER_TOKEN_RECIPIENT] === 'socials') { + recipient = recipient as any; + } else { + recipient = (recipient as any).evmAddress(); + } + + return yup.object().shape({ + [TRANSFER_TOKEN_RECIPIENT]: recipient, + [TRANSFER_TOKEN_AMOUNT]: yup + .string() + .requiredAmount('transfer') + .maxAmount(params[TRANSFER_TOKEN_AMOUNT], 'transfer') + .minAmount(params[TRANSFER_TOKEN_AMOUNT], 'transfer') + }); +}; + +export { TRANSFER_TOKEN_RECIPIENT, TRANSFER_TOKEN_AMOUNT, transferTokenSchema }; +export type { TransferTokenFormValues, TransferTokenFormValidationParams }; diff --git a/apps/hybrid-pay/src/lib/form/utils.ts b/apps/hybrid-pay/src/lib/form/utils.ts new file mode 100644 index 000000000..99f7dc77d --- /dev/null +++ b/apps/hybrid-pay/src/lib/form/utils.ts @@ -0,0 +1,3 @@ +const isFormDisabled = (form: any, shouldBeDirty = true): boolean => !form.isValid || (shouldBeDirty && !form.dirty); + +export { isFormDisabled }; diff --git a/apps/hybrid-pay/src/lib/form/yup.custom.ts b/apps/hybrid-pay/src/lib/form/yup.custom.ts new file mode 100644 index 000000000..8fceab09e --- /dev/null +++ b/apps/hybrid-pay/src/lib/form/yup.custom.ts @@ -0,0 +1,122 @@ +/* eslint-disable no-invalid-this */ +import Big from 'big.js'; +import * as yup from 'yup'; +import { AnyObject, Maybe } from 'yup/lib/types'; +import { isValidBTCAddress } from '@gobob/utils'; +import { BitcoinNetwork } from '@gobob/types'; +import { isAddress } from 'viem'; + +yup.addMethod(yup.string, 'requiredAmount', function (action: string, customMessage?: string) { + return this.transform((value) => (isNaN(value) ? undefined : value)).test('requiredAmount', (value, ctx) => { + if (value === undefined) { + const message = customMessage || `Please enter the amount to ${action}`; + + return ctx.createError({ message }); + } + + return true; + }); +}); + +type MaxAmountValidationParams = { + maxAmount: Big; +}; + +yup.addMethod( + yup.string, + 'maxAmount', + function ({ maxAmount }: MaxAmountValidationParams, action?: string, customMessage?: string) { + return this.test('maxAmount', (value, ctx) => { + if (value === undefined) return true; + + const amount = new Big(value); + + if (amount.gt(maxAmount)) { + const message = customMessage || `Amount to ${action} must be at most ${maxAmount.toFixed()}`; + + return ctx.createError({ message }); + } + + return true; + }); + } +); + +type MinAmountValidationParams = { + minAmount?: Big; +}; + +yup.addMethod( + yup.string, + 'minAmount', + function ({ minAmount }: MinAmountValidationParams = {}, action: string, customMessage?: string) { + return this.test('balance', (value, ctx) => { + if (value === undefined) return true; + + const amount = new Big(value); + + if (!minAmount && !amount.gt(0)) { + const message = customMessage || `Amount to ${action} must be greater than 0`; + + return ctx.createError({ message }); + } + + if (minAmount && amount.lt(minAmount)) { + const message = customMessage || `Amount to ${action} must be at least ${minAmount.toFixed()}`; + + return ctx.createError({ message }); + } + + return true; + }); + } +); + +yup.addMethod(yup.string, 'btcAddress', function (network: BitcoinNetwork, customMessage?: string) { + return this.test('btcAddress', (value, ctx) => { + if (!value || !isValidBTCAddress(network, value)) { + const message = customMessage || 'Please enter a valid address'; + + return ctx.createError({ message }); + } + + return true; + }); +}); + +yup.addMethod(yup.string, 'evmAddress', function (customMessage?: string) { + return this.test('evmAddress', (value, ctx) => { + if (!value || !isAddress(value)) { + const message = customMessage || 'Please enter a valid address'; + + return ctx.createError({ message }); + } + + return true; + }); +}); + +declare module 'yup' { + interface StringSchema< + TType extends Maybe = string | undefined, + TContext extends AnyObject = AnyObject, + TOut extends TType = TType + > extends yup.BaseSchema { + requiredAmount(action?: string, customMessage?: string): StringSchema; + maxAmount( + params: MaxAmountValidationParams, + action?: string, + customMessage?: string + ): StringSchema; + minAmount( + params: MinAmountValidationParams, + action?: string, + customMessage?: string + ): StringSchema; + btcAddress(network: BitcoinNetwork, customMessage?: string): StringSchema; + evmAddress(customMessage?: string): StringSchema; + } +} + +export default yup; +export type { MaxAmountValidationParams, MinAmountValidationParams }; diff --git a/apps/hybrid-pay/src/lib/react-query/index.ts b/apps/hybrid-pay/src/lib/react-query/index.ts new file mode 100644 index 000000000..845e508bd --- /dev/null +++ b/apps/hybrid-pay/src/lib/react-query/index.ts @@ -0,0 +1,5 @@ +import { QueryClient } from '@gobob/react-query'; + +const queryClient = new QueryClient(); + +export { queryClient }; diff --git a/apps/hybrid-pay/src/main.tsx b/apps/hybrid-pay/src/main.tsx new file mode 100644 index 000000000..ef6d5b700 --- /dev/null +++ b/apps/hybrid-pay/src/main.tsx @@ -0,0 +1,38 @@ +import { BitcoinWalletConnectors } from '@dynamic-labs/bitcoin'; +import { EthereumWalletConnectors } from '@dynamic-labs/ethereum'; +import { ZeroDevSmartWalletConnectors } from '@dynamic-labs/ethereum-aa'; +import { DynamicContextProvider } from '@dynamic-labs/sdk-react-core'; +import { DynamicWagmiConnector } from '@dynamic-labs/wagmi-connector'; +import { QueryClientProvider } from '@gobob/react-query'; +import { BOBUIProvider, CSSReset } from '@gobob/ui'; +import { WagmiProvider } from '@gobob/wagmi'; +import React from 'react'; +import ReactDOM from 'react-dom/client'; + +import App from './App'; +import { queryClient } from './lib/react-query'; +import { isProd } from './constants'; +import './index.css'; +import './utils/sentry'; + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + + + + + + + + + + + + +); diff --git a/apps/hybrid-pay/src/pages/404/404.tsx b/apps/hybrid-pay/src/pages/404/404.tsx new file mode 100644 index 000000000..748a0a698 --- /dev/null +++ b/apps/hybrid-pay/src/pages/404/404.tsx @@ -0,0 +1,30 @@ +import { Button, Flex, H1, P } from '@gobob/ui'; +import { Link } from 'react-router-dom'; + +import { Main } from '../../components'; +import { RoutesPath } from '../../constants'; + +const Custom404 = (): JSX.Element => { + return ( +
    + +

    + 404 Error +

    +

    + Sorry, the page you are looking for doesn't exist or has been moved. Here are some helpful links: +

    + + + + +
    +
    + ); +}; + +export { Custom404 }; diff --git a/apps/hybrid-pay/src/pages/404/index.tsx b/apps/hybrid-pay/src/pages/404/index.tsx new file mode 100644 index 000000000..80ca9dc12 --- /dev/null +++ b/apps/hybrid-pay/src/pages/404/index.tsx @@ -0,0 +1 @@ +export { Custom404 as default } from './404'; diff --git a/apps/hybrid-pay/src/pages/Home/Home.style.tsx b/apps/hybrid-pay/src/pages/Home/Home.style.tsx new file mode 100644 index 000000000..6f9f7104d --- /dev/null +++ b/apps/hybrid-pay/src/pages/Home/Home.style.tsx @@ -0,0 +1,12 @@ +import { Card, Flex } from '@gobob/ui'; +import styled from 'styled-components'; + +const StyledFlex = styled(Flex)` + width: 100%; +`; + +const StyledCard = styled(Card)` + width: 100%; +`; + +export { StyledFlex, StyledCard }; diff --git a/apps/hybrid-pay/src/pages/Home/Home.tsx b/apps/hybrid-pay/src/pages/Home/Home.tsx new file mode 100644 index 000000000..dcc46b852 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Home/Home.tsx @@ -0,0 +1,24 @@ +import { Main } from '../../components'; +import { CHAIN } from '../../constants'; +import { useTokens } from '../../hooks'; + +import { TransferForm } from './components'; +import { StyledCard, StyledFlex } from './Home.style'; + +const Home = () => { + const { data: tokens } = useTokens(CHAIN); + + if (!tokens?.length) return; + + return ( +
    + + + + + +
    + ); +}; + +export { Home }; diff --git a/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/SendTokenModal.tsx b/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/SendTokenModal.tsx new file mode 100644 index 000000000..bf7958882 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/SendTokenModal.tsx @@ -0,0 +1,346 @@ +import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { ChainId } from '@gobob/chains'; +import { CurrencyAmount, ERC20Token, Ether, Token } from '@gobob/currency'; +import { useMutation, usePrices } from '@gobob/react-query'; +import { Button, Flex, Input, toast, TokenInput, useForm } from '@gobob/ui'; +import { useAccount, useSendTransaction, useWaitForTransactionReceipt, useWriteContract } from '@gobob/wagmi'; +import { mergeProps } from '@react-aria/utils'; +import Big from 'big.js'; +import { useEffect, useMemo, useState } from 'react'; +import { Address, encodeFunctionData, erc20Abi, isAddress, isAddressEqual } from 'viem'; +import { useGetApprovalData } from '@gobob/hooks'; +import { MaxUint256 } from '@gobob/currency/src/constants'; + +import { TransactionDetails } from '../../../../components'; +import { CHAIN } from '../../../../constants'; +import { paymasters, useBalances, useKernelClient } from '../../../../hooks'; +import { + TRANSFER_TOKEN_AMOUNT, + TRANSFER_TOKEN_RECIPIENT, + TransferTokenFormValidationParams, + TransferTokenFormValues, + transferTokenSchema +} from '../../../../lib/form/transfer'; +import { isFormDisabled } from '../../../../lib/form/utils'; +import { calculateAmountUSD, dynamicApiClient } from '../../../../utils'; + +const baseToken = { + [ChainId.BASE_SEPOLIA]: { + currency: new ERC20Token(ChainId.BASE_SEPOLIA, '0x036CbD53842c5426634e7929541eC2318f3dCF7e', 6, 'USDC', 'USD Coin'), + raw: { + chainId: ChainId.BASE_SEPOLIA, + address: '0x036CbD53842c5426634e7929541eC2318f3dCF7e', + name: 'USD Coin', + symbol: 'USDC', + decimals: 6, + logoUrl: 'https://ethereum-optimism.github.io/data/USDC/logo.png', + apiId: 'usd-coin' + } + }, + [ChainId.BOB]: { + currency: new ERC20Token(ChainId.BOB, '0x03c7054bcb39f7b2e5b2c7acb37583e32d70cfa3', 8, 'WBTC', 'Wrapped BTC'), + raw: { + chainId: ChainId.BOB, + address: '0x03c7054bcb39f7b2e5b2c7acb37583e32d70cfa3', + name: 'Wrapped BTC', + symbol: 'WBTC', + decimals: 8, + logoUrl: + 'https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/ethereum/assets/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png', + apiId: 'wrapped-btc' + } + } +}; + +const getAddress = async (recipient: string) => { + const isRecipientAddress = isAddress(recipient); + + if (isRecipientAddress) { + return recipient; + } + const walletData = await dynamicApiClient.createEmbeddedWallet(recipient); + const smartAccount = walletData.user.verifiedCredentials.find( + (credentials) => credentials.wallet_provider === 'smartContractWallet' + ); + + if (!smartAccount) { + throw new Error('Smart Account Not Found'); + } + + return smartAccount?.address; +}; + +type Props = {}; + +type TransferFormProps = Props; + +const TransferForm = ({}: TransferFormProps): JSX.Element => { + const { address, chain } = useAccount(); + + const token = baseToken[(chain?.id as ChainId.BASE_SEPOLIA) || ChainId.BASE_SEPOLIA]; + const gasToken = token; + + const { isAuthenticated, setShowAuthFlow, user } = useDynamicContext(); + + const [amount, setAmount] = useState(''); + + const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); + const { getBalance } = useBalances(CHAIN); + + const kernelClient = useKernelClient(token.currency); + + const currencyAmount = useMemo( + () => CurrencyAmount.fromBaseAmount(token.currency, amount !== '' && !isNaN(amount as any) ? amount : 0), + [token, amount] + ); + + const isSmartAccount = useMemo( + () => + !!( + address && + user?.verifiedCredentials.find( + (credentials) => + credentials.walletProvider === 'smartContractWallet' && + isAddressEqual(credentials.address as Address, address) + ) + ), + [address, user?.verifiedCredentials] + ); + + const initialValues = useMemo( + () => ({ + [TRANSFER_TOKEN_AMOUNT]: '', + [TRANSFER_TOKEN_RECIPIENT]: '' + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + + const tokenBalance = useMemo(() => token && getBalance(token.currency.symbol), [getBalance, token]); + + const params: TransferTokenFormValidationParams = { + [TRANSFER_TOKEN_AMOUNT]: { + minAmount: token && new Big(1 / 10 ** token.currency.decimals), + maxAmount: new Big(tokenBalance?.toExact() || 0) + }, + [TRANSFER_TOKEN_RECIPIENT]: 'socials' + }; + + const paymasterApprovalData = useGetApprovalData( + currencyAmount.currency.isToken ? (currencyAmount as CurrencyAmount) : undefined, + isSmartAccount ? kernelClient?.account?.address : undefined, + paymasters?.[CHAIN as ChainId.BASE_SEPOLIA]?.[gasToken.currency.symbol] + ); + + const handleSubmit = async (data: TransferTokenFormValues) => { + if (!data[TRANSFER_TOKEN_RECIPIENT] || !currencyAmount) return; + + const args = { recipient: data[TRANSFER_TOKEN_RECIPIENT], currencyAmount }; + + if (isSmartAccount) { + smartAccountTransfer(args); + + return; + } + + eoaTransfer(args); + }; + + const form = useForm({ + initialValues, + validationSchema: transferTokenSchema(params), + onSubmit: handleSubmit, + hideErrors: 'untouched' + }); + + const { sendTransactionAsync } = useSendTransaction(); + + const { writeContractAsync: writeTransferErc20Async } = useWriteContract(); + + const { + data: eoaTransferTx, + mutate: eoaTransfer, + isPending: isEOATransferPending, + error: eoaTransferError + } = useMutation({ + mutationKey: ['eoa-transfer', amount, form.values[TRANSFER_TOKEN_RECIPIENT]], + onSuccess: () => { + form.resetForm(); + setAmount(''); + }, + mutationFn: async ({ + recipient, + currencyAmount + }: { + recipient: string; + currencyAmount: CurrencyAmount; + }) => { + const recipientAddress = await getAddress(recipient); + + if (currencyAmount.currency.isNative) { + return sendTransactionAsync({ + to: recipientAddress, + value: currencyAmount.numerator + }); + } + + return writeTransferErc20Async({ + address: (currencyAmount.currency as Token).address, + abi: erc20Abi, + functionName: 'transfer', + args: [recipientAddress, currencyAmount.numerator] + }); + } + }); + + const { isLoading: isWaitingEoaTransferTxConfirmation, data: eoaTransferTransactionReceipt } = + useWaitForTransactionReceipt({ + hash: eoaTransferTx + }); + + useEffect(() => { + if (eoaTransferTransactionReceipt?.status === 'success') { + toast.success(`Successfully sent ${amount} ${token?.currency.symbol}`); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [eoaTransferTransactionReceipt]); + + useEffect(() => { + if (eoaTransferError) { + toast.error(eoaTransferError.message); + // eslint-disable-next-line no-console + console.log(eoaTransferError); + } + }, [eoaTransferError]); + + const { + mutate: smartAccountTransfer, + isPending: isSmartAccountTransferPending, + error: smartAccountTransferError + } = useMutation({ + mutationKey: ['smart-account-transfer', amount, form.values[TRANSFER_TOKEN_RECIPIENT]], + onSuccess: (tx, variables) => { + if (!tx) { + throw new Error('Failed to submit tx'); + } + + toast.success( + `Successfully transfered ${variables.currencyAmount.numerator} ${variables.currencyAmount.currency.symbol}` + ); + + form.resetForm(); + setAmount(''); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, + mutationFn: async ({ + recipient, + currencyAmount + }: { + recipient: string; + currencyAmount: CurrencyAmount; + }) => { + const recipientAddress = await getAddress(recipient); + + if (paymasterApprovalData.isApproveRequired) { + return kernelClient?.sendUserOperation({ + account: kernelClient?.account!, + userOperation: { + callData: await kernelClient?.account!.encodeCallData([ + { + to: (currencyAmount.currency as Token).address, + data: encodeFunctionData({ + abi: erc20Abi, + args: [paymasters?.[CHAIN as ChainId.BASE_SEPOLIA]?.[gasToken.currency.symbol]!, MaxUint256], + functionName: 'approve' + }), + value: BigInt(0) + }, + { + to: (currencyAmount.currency as Token).address, + data: encodeFunctionData({ + abi: erc20Abi, + args: [recipientAddress, currencyAmount.numerator], + functionName: 'transfer' + }), + value: BigInt(0) + } + ]) + } + }); + } + + return kernelClient?.sendUserOperation({ + account: kernelClient?.account!, + userOperation: { + callData: await kernelClient?.account!.encodeCallData([ + { + to: (currencyAmount.currency as Token).address, + data: encodeFunctionData({ + abi: erc20Abi, + args: [recipientAddress, currencyAmount.numerator], + functionName: 'transfer' + }), + value: BigInt(0) + } + ]) + } + }); + } + }); + + useEffect(() => { + if (smartAccountTransferError) { + toast.error('Failed to submite transaction'); + // eslint-disable-next-line no-console + console.log(smartAccountTransferError); + } + }, [smartAccountTransferError]); + + const balance = tokenBalance?.toExact() || '0'; + const humanBalance = tokenBalance?.toSignificant(); + + const isTransferLoading = isSmartAccountTransferPending || isEOATransferPending || isWaitingEoaTransferTxConfirmation; + const isSubmitDisabled = isFormDisabled(form); + + return ( + + + setAmount(value) + })} + /> + + {isAuthenticated ? ( + + ) : ( + + )} + + ); +}; + +export { TransferForm }; diff --git a/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/index.tsx b/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/index.tsx new file mode 100644 index 000000000..2d9161420 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/index.tsx @@ -0,0 +1 @@ +export { TransferForm } from './SendTokenModal'; diff --git a/apps/hybrid-pay/src/pages/Home/components/index.tsx b/apps/hybrid-pay/src/pages/Home/components/index.tsx new file mode 100644 index 000000000..d4d891176 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Home/components/index.tsx @@ -0,0 +1 @@ +export * from './SendTokenModal'; diff --git a/apps/hybrid-pay/src/pages/Home/index.tsx b/apps/hybrid-pay/src/pages/Home/index.tsx new file mode 100644 index 000000000..22b113895 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Home/index.tsx @@ -0,0 +1 @@ +export { Home as default } from './Home'; diff --git a/apps/hybrid-pay/src/types/styled-components.d.ts b/apps/hybrid-pay/src/types/styled-components.d.ts new file mode 100644 index 000000000..596b831c8 --- /dev/null +++ b/apps/hybrid-pay/src/types/styled-components.d.ts @@ -0,0 +1,5 @@ +import { Theme } from '@gobob/ui'; + +declare module 'styled-components' { + export interface DefaultTheme extends Theme {} +} diff --git a/apps/hybrid-pay/src/utils/dynamic-api-client.ts b/apps/hybrid-pay/src/utils/dynamic-api-client.ts new file mode 100644 index 000000000..dd89e907b --- /dev/null +++ b/apps/hybrid-pay/src/utils/dynamic-api-client.ts @@ -0,0 +1,39 @@ +import { Address } from 'viem'; + +type WalletData = { + user: { + id: string; + projectEnvironmentId: string; + verifiedCredentials: Array<{ + address: Address; + wallet_name: 'zerodev' | 'turnkeyhd'; + wallet_provider: 'smartContractWallet' | 'embeddedWallet'; + }>; + }; +}; + +class DynamicApiClient { + private baseUrl: string; + + constructor(baseUrl: string) { + this.baseUrl = baseUrl; + } + + async createEmbeddedWallet(email: string): Promise { + const response = await fetch( + `${this.baseUrl}/environments/${import.meta.env.VITE_DYNAMIC_ENVIRONMENT_ID}/embeddedWallets`, + { + method: 'POST', + headers: { + Authorization: `Bearer ${import.meta.env.VITE_DYNAMIC_API_KEY}`, + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ type: 'email', identifier: email, chain: 'EVM', socialProvider: 'emailOnly' }) + } + ); + + return response.json(); + } +} + +export const dynamicApiClient = new DynamicApiClient('/dynamic-api'); diff --git a/apps/hybrid-pay/src/utils/index.ts b/apps/hybrid-pay/src/utils/index.ts new file mode 100644 index 000000000..c0deccf96 --- /dev/null +++ b/apps/hybrid-pay/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './dynamic-api-client'; +export * from './math'; diff --git a/apps/hybrid-pay/src/utils/math.ts b/apps/hybrid-pay/src/utils/math.ts new file mode 100644 index 000000000..dfa893ebd --- /dev/null +++ b/apps/hybrid-pay/src/utils/math.ts @@ -0,0 +1,7 @@ +import { Currency, CurrencyAmount } from '@gobob/currency'; +import Big from 'big.js'; + +const calculateAmountUSD = (amount: CurrencyAmount, price: number) => + !isNaN(amount as any) ? new Big(amount.toExact()).mul(price || 0).toNumber() : 0; + +export { calculateAmountUSD }; diff --git a/apps/hybrid-pay/src/utils/sentry.ts b/apps/hybrid-pay/src/utils/sentry.ts new file mode 100644 index 000000000..d88d821dd --- /dev/null +++ b/apps/hybrid-pay/src/utils/sentry.ts @@ -0,0 +1,38 @@ +import { useEffect } from 'react'; +import * as Sentry from '@sentry/react'; +import { createRoutesFromChildren, matchRoutes, useLocation, useNavigationType } from 'react-router-dom'; + +Sentry.init({ + dsn: import.meta.env.VITE_SENTRY_URL, + ignoreErrors: [ + 'User rejected the request', + 'Talisman extension has not been configured yet', + '"MetaMask" does not support programmatic chain switching', + 'Failed to fetch dynamically imported module' + ], + tunnel: '/tunnel', + integrations: [ + // See docs for support of different versions of variation of react router + // https://docs.sentry.io/platforms/javascript/guides/react/configuration/integrations/react-router/ + Sentry.reactRouterV6BrowserTracingIntegration({ + useEffect, + useLocation, + useNavigationType, + createRoutesFromChildren, + matchRoutes + }), + Sentry.replayIntegration() + ], + + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + tracesSampleRate: import.meta.env.VITE_SENTRY_TRACES_SAMPLE_RATE || '0.5', + + // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled + tracePropagationTargets: [/^\//, /^https:\/\/gobob\.xyz/], + + // Capture Replay for 10% of all sessions, + // plus for 100% of sessions with an error + replaysSessionSampleRate: 0.1, + replaysOnErrorSampleRate: 1.0 +}); diff --git a/apps/hybrid-pay/src/vite-env.d.ts b/apps/hybrid-pay/src/vite-env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/apps/hybrid-pay/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/hybrid-pay/tsconfig.json b/apps/hybrid-pay/tsconfig.json new file mode 100644 index 000000000..d983b30da --- /dev/null +++ b/apps/hybrid-pay/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + + /* Bundler mode */ + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/apps/hybrid-pay/tsconfig.node.json b/apps/hybrid-pay/tsconfig.node.json new file mode 100644 index 000000000..cfa1ab5b9 --- /dev/null +++ b/apps/hybrid-pay/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/apps/hybrid-pay/vercel.json b/apps/hybrid-pay/vercel.json new file mode 100644 index 000000000..0d0f49523 --- /dev/null +++ b/apps/hybrid-pay/vercel.json @@ -0,0 +1,30 @@ +{ + "functions": { + "api/index.js": { + "memory": 128, + "maxDuration": 20 + } + }, + "rewrites": [ + { + "source": "/check_access", + "destination": "/api/geoblock.js" + }, + { + "source": "/tunnel", + "destination": "/api/sentry.js" + }, + { + "source": "/marketdata/v1", + "destination": "/api/marketdata.js" + }, + { + "source": "/(dynamic-api|onramp-api|btc-api)/(.*)", + "destination": "/api" + }, + { + "source": "/(.*)", + "destination": "/" + } + ] +} diff --git a/apps/hybrid-pay/vite.config.ts b/apps/hybrid-pay/vite.config.ts new file mode 100644 index 000000000..d232c3b3d --- /dev/null +++ b/apps/hybrid-pay/vite.config.ts @@ -0,0 +1,55 @@ +import { sentryVitePlugin } from '@sentry/vite-plugin'; +import { defineConfig, loadEnv } from 'vite'; +import react from '@vitejs/plugin-react'; +import { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill'; +import { NodeModulesPolyfillPlugin } from '@esbuild-plugins/node-modules-polyfill'; + +// https://vitejs.dev/config/ +export default defineConfig(({ mode }) => { + const env = loadEnv(mode, process.cwd()); + + return { + plugins: [ + react(), + sentryVitePlugin({ + authToken: env.VITE_SENTRY_AUTH_TOKEN, + org: 'distributed-crafts', + project: 'bob-ui' + }) + ], + build: { + target: 'esnext', + sourcemap: true // Source map generation must be turned on + }, + optimizeDeps: { + esbuildOptions: { + // Enable esbuild polyfill plugins + plugins: [ + NodeGlobalsPolyfillPlugin({ + process: true + }), + NodeModulesPolyfillPlugin() + ] + } + }, + server: { + proxy: { + '/dynamic-api': { + target: env.VITE_DYNAMIC_API_URL, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/dynamic-api/, '') + }, + '/onramp-api': { + target: env.VITE_ONRAMP_API_URL, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/onramp-api/, '') + }, + '/btc-api': { + target: env.VITE_BTC_API_URL, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/btc-api/, '') + } + } + } + }; +}); diff --git a/knip.config.js b/knip.config.js index 2d74fad0d..a1fe5efc4 100644 --- a/knip.config.js +++ b/knip.config.js @@ -6,7 +6,8 @@ const config = { 'apps/evm/src/pages/Home/**', 'apps/evm/api/**', 'packages/currency/src/constants.ts', - '.storybook/vite.config.ts' + '.storybook/vite.config.ts', + 'apps/hybrid-pay/api/**' ] }; diff --git a/package.json b/package.json index b26935f2d..803519626 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "build:sb": "storybook build", "test": "jest --verbose --config ./jest.config.js packages/ui", "start:evm": "pnpm run --filter bob-evm dev --port 5050", + "start:hybrid-pay": "pnpm run --filter bob-hybrid-pay dev --port 5050", "test:e2e": "start-server-and-test 'pnpm start:bridge' http-get://localhost:3000 'cd apps/e2e && pnpm synpress:run'", "test:e2e:ci": "cd apps/e2e && pnpm synpress:run", "postinstall": "husky install", diff --git a/packages/chains/src/chainId.ts b/packages/chains/src/chainId.ts index 75ecbe012..f8390aa8f 100644 --- a/packages/chains/src/chainId.ts +++ b/packages/chains/src/chainId.ts @@ -4,6 +4,7 @@ export enum ChainId { BOB_SEPOLIA = 111, BOB = 60808, BASE = 8453, + BASE_SEPOLIA = 84532, ARBITRUM_ONE = 42161, POLYGON = 137, POLYGON_ZKEVM = 1101, diff --git a/packages/chains/src/chainNames.ts b/packages/chains/src/chainNames.ts index e127c5448..5a5077f80 100644 --- a/packages/chains/src/chainNames.ts +++ b/packages/chains/src/chainNames.ts @@ -12,7 +12,8 @@ export const chainNames: Record = { [ChainId.BSC]: 'BNB Smart Chain', [ChainId.OPBNB]: 'OPBNB', [ChainId.BASE]: 'base', - [ChainId.MOONBEAM]: 'moonbeam' + [ChainId.MOONBEAM]: 'moonbeam', + [ChainId.BASE_SEPOLIA]: 'base sepolia' }; export const chainNameToChainId = Object.entries(chainNames).reduce( @@ -36,6 +37,7 @@ export const defiLlamaChainNames: Record = { [ChainId.OPBNB]: 'op_bnb', [ChainId.BSC]: '', [ChainId.BASE]: 'base', + [ChainId.BASE_SEPOLIA]: '', [ChainId.OP]: '', [ChainId.POLYGON_ZKEVM]: '', [ChainId.POLYGON]: '', diff --git a/packages/hooks/src/useApproval.tsx b/packages/hooks/src/useApproval.tsx index 51650cb5d..137695f55 100644 --- a/packages/hooks/src/useApproval.tsx +++ b/packages/hooks/src/useApproval.tsx @@ -9,8 +9,7 @@ import { USDTAbi } from './abis/USDT.abi'; const UINT_256_MAX = BigInt(2 ** 256) - BigInt(1); -export const useGetApprovalData = (amount: CurrencyAmount | undefined, spender?: Address) => { - const { address } = useAccount(); +export const useGetApprovalData = (amount: CurrencyAmount | undefined, address?: Address, spender?: Address) => { const { allowance, refetch } = useTokenAllowance({ token: amount?.currency, owner: address, spender }); const isRevokeRequired = useMemo((): boolean => { @@ -50,7 +49,7 @@ const useApproval = ({ amount, spender, onApprovalSuccess }: UseApprovalProps) = const tokenAmount = (amount?.currency?.isToken ? amount : undefined) as CurrencyAmount | undefined; - const { isRevokeRequired, isApproveRequired, allowance, refetch } = useGetApprovalData(tokenAmount, spender); + const { isRevokeRequired, isApproveRequired, allowance, refetch } = useGetApprovalData(tokenAmount, address, spender); const abi = useMemo( () => (tokenAmount?.currency.symbol === USDT_ETH.symbol ? USDTAbi : erc20Abi) as typeof erc20Abi, diff --git a/packages/sats-wagmi/src/hooks/useBalance.tsx b/packages/sats-wagmi/src/hooks/useBalance.tsx index 2d4429b25..35d9f9e3f 100644 --- a/packages/sats-wagmi/src/hooks/useBalance.tsx +++ b/packages/sats-wagmi/src/hooks/useBalance.tsx @@ -10,9 +10,11 @@ type UseBalanceProps = Omit< 'initialData' | 'queryFn' | 'queryKey' | 'enabled' >; -const useBalance = (props: UseBalanceProps = {}) => { +const useBalance = ({ address: addressProp, ...props }: UseBalanceProps & { address?: string } = {}) => { const { network } = useSatsWagmi(); - const { address } = useAccount(); + const account = useAccount(); + + const address = addressProp || account.address; const apiUrl = useMemo( () => (network === 'mainnet' ? 'https://btc-mainnet.gobob.xyz' : 'https://btc-testnet.gobob.xyz'), diff --git a/packages/tokens/src/constants/common.ts b/packages/tokens/src/constants/common.ts index 967985469..e00539f66 100644 --- a/packages/tokens/src/constants/common.ts +++ b/packages/tokens/src/constants/common.ts @@ -13,7 +13,7 @@ export const USDC = { [ChainId.ETHEREUM]: USDC_ETH, [ChainId.SEPOLIA]: new ERC20Token( ChainId.SEPOLIA, - '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', + '0x13fA158A117b93C27c55b8216806294a0aE88b6D', 6, 'USDC', 'USD Coin' diff --git a/packages/tokens/src/constants/native.ts b/packages/tokens/src/constants/native.ts index 6cbf99761..078d57f38 100644 --- a/packages/tokens/src/constants/native.ts +++ b/packages/tokens/src/constants/native.ts @@ -15,7 +15,8 @@ export const WNATIVE = { [ChainId.OPBNB]: '' as any, [ChainId.POLYGON]: '' as any, [ChainId.POLYGON_ZKEVM]: '' as any, - [ChainId.MOONBEAM]: '' as any + [ChainId.MOONBEAM]: '' as any, + [ChainId.BASE_SEPOLIA]: '' as any } satisfies Record; const ETHER = { name: 'Ether', symbol: 'ETH', decimals: 18 } as const; @@ -47,6 +48,11 @@ export const NATIVE = { symbol: 'ETH', decimals: 18 }, + [ChainId.BASE_SEPOLIA]: { + name: 'Ether', + symbol: 'ETH', + decimals: 18 + }, [ChainId.OP]: { name: 'Ether', symbol: 'ETH', diff --git a/packages/wagmi/src/config.ts b/packages/wagmi/src/config.ts index ff83db308..e9f6d3f19 100644 --- a/packages/wagmi/src/config.ts +++ b/packages/wagmi/src/config.ts @@ -1,13 +1,14 @@ import { createConfig, http } from 'wagmi'; import { coinbaseWallet, injected, walletConnect } from 'wagmi/connectors'; import { ChainId } from '@gobob/chains'; +import { baseSepolia } from 'viem/chains'; import { Config } from './types'; import { bob, bobSepolia } from './bob'; import { mainnet } from './mainnet'; import { sepolia } from './sepolia'; -const testnetChains = [bobSepolia, sepolia]; +const testnetChains = [bobSepolia, sepolia, baseSepolia]; const prodChains = [mainnet, bob]; @@ -41,11 +42,13 @@ const getConfig = ({ isProd }: Config) => { return createConfig({ chains: (isProd ? prodChains : allChains) as any, + multiInjectedProviderDiscovery: false, transports: { [mainnet.id]: http(), [sepolia.id]: http(), [bob.id]: http(), - [bobSepolia.id]: http() + [bobSepolia.id]: http(), + [baseSepolia.id]: http() }, connectors }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4bb078b55..c43ed8e24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,19 +14,19 @@ importers: devDependencies: '@commitlint/cli': specifier: ^17.8.1 - version: 17.8.1(@swc/core@1.5.28) + version: 17.8.1(@swc/core@1.6.13) '@commitlint/config-conventional': specifier: ^17.8.1 version: 17.8.1 '@storybook/addon-essentials': specifier: ^7.6.19 - version: 7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@storybook/addon-interactions': specifier: ^7.6.19 - version: 7.6.19 + version: 7.6.20 '@storybook/addon-links': specifier: ^7.6.19 - version: 7.6.19(react@18.3.1) + version: 7.6.20(react@18.3.1) '@storybook/addon-onboarding': specifier: ^1.0.11 version: 1.0.11(react-dom@18.3.1)(react@18.3.1) @@ -35,19 +35,19 @@ importers: version: 7.6.17(react-dom@18.3.1)(react@18.3.1) '@storybook/react': specifier: ^7.6.19 - version: 7.6.19(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + version: 7.6.20(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) '@storybook/react-vite': specifier: ^7.6.19 - version: 7.6.19(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(vite@4.5.3) + version: 7.6.20(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(vite@4.5.3) '@storybook/theming': specifier: ^8.1.6 - version: 8.1.7(react-dom@18.3.1)(react@18.3.1) + version: 8.1.11(react-dom@18.3.1)(react@18.3.1) '@swc/core': specifier: ^1.5.24 - version: 1.5.28 + version: 1.6.13 '@swc/jest': specifier: ^0.2.36 - version: 0.2.36(@swc/core@1.5.28) + version: 0.2.36(@swc/core@1.6.13) '@testing-library/dom': specifier: ^9.3.4 version: 9.3.4 @@ -65,7 +65,7 @@ importers: version: 29.5.12 '@types/node': specifier: ^20.14.2 - version: 20.14.2 + version: 20.14.10 '@types/react': specifier: ^18.3.3 version: 18.3.3 @@ -77,10 +77,10 @@ importers: version: 5.1.34 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.13.0(@typescript-eslint/parser@7.13.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.16.0(@typescript-eslint/parser@7.16.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 - version: 7.13.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.16.0(eslint@8.57.0)(typescript@5.4.5) commitlint-plugin-function-rules: specifier: ^2.0.2 version: 2.0.2(@commitlint/lint@17.8.1) @@ -92,16 +92,16 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.13.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.16.0)(eslint@8.57.0) eslint-plugin-jsx-a11y: specifier: ^6.8.0 - version: 6.8.0(eslint@8.57.0) + version: 6.9.0(eslint@8.57.0) eslint-plugin-prettier: specifier: ^5.1.3 version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.2) eslint-plugin-react: specifier: ^7.34.2 - version: 7.34.2(eslint@8.57.0) + version: 7.34.3(eslint@8.57.0) eslint-plugin-react-hooks: specifier: ^4.6.2 version: 4.6.2(eslint@8.57.0) @@ -110,7 +110,7 @@ importers: version: 6.2.2(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-unused-imports: specifier: ^3.2.0 - version: 3.2.0(@typescript-eslint/eslint-plugin@7.13.0)(eslint@8.57.0) + version: 3.2.0(@typescript-eslint/eslint-plugin@7.16.0)(eslint@8.57.0) husky: specifier: ^8.0.3 version: 8.0.3 @@ -119,7 +119,7 @@ importers: version: 3.0.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -128,7 +128,7 @@ importers: version: 2.2.2(jest@29.7.0) knip: specifier: ^5.17.4 - version: 5.18.2(@types/node@20.14.2)(typescript@5.4.5) + version: 5.25.1(@types/node@20.14.10)(typescript@5.4.5) lint-staged: specifier: ^14.0.1 version: 14.0.1 @@ -143,16 +143,16 @@ importers: version: 18.3.1(react@18.3.1) rimraf: specifier: ^5.0.7 - version: 5.0.7 + version: 5.0.9 start-server-and-test: specifier: ^2.0.3 version: 2.0.4 storybook: specifier: ^7.6.19 - version: 7.6.19 + version: 7.6.20 turbo: specifier: latest - version: 2.0.3 + version: 2.0.6 typescript: specifier: 5.4.5 version: 5.4.5 @@ -161,13 +161,13 @@ importers: devDependencies: '@synthetixio/synpress': specifier: 3.7.2-beta.9 - version: 3.7.2-beta.9(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(webpack@5.92.0)(zod@3.23.8) + version: 3.7.2-beta.9(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(webpack@5.92.1)(zod@3.23.8) '@testing-library/cypress': specifier: ^10.0.1 - version: 10.0.2(cypress@13.11.0) + version: 10.0.2(cypress@13.13.0) cypress: specifier: ^13.6.0 - version: 13.11.0 + version: 13.13.0 cypress-wait-until: specifier: ^2.0.1 version: 2.0.1 @@ -176,7 +176,7 @@ importers: dependencies: '@eth-optimism/sdk': specifier: ^3.1.6 - version: 3.3.1(ethers@5.7.2) + version: 3.3.2(ethers@5.7.2) '@ethersproject/providers': specifier: ^5.7.2 version: 5.7.2 @@ -248,7 +248,7 @@ importers: version: 3.6.0 graphql-request: specifier: ^6.1.0 - version: 6.1.0(graphql@16.8.1) + version: 6.1.0(graphql@16.9.0) i18next: specifier: ^23.10.1 version: 23.11.5 @@ -269,10 +269,10 @@ importers: version: 3.1.1(react-dom@18.3.1)(react@18.3.1) react-qr-code: specifier: ^2.0.12 - version: 2.0.14(react@18.3.1) + version: 2.0.15(react@18.3.1) react-router-dom: specifier: ^6.16.0 - version: 6.23.1(react-dom@18.3.1)(react@18.3.1) + version: 6.24.1(react-dom@18.3.1)(react@18.3.1) react-slick: specifier: ^0.30.2 version: 0.30.2(react-dom@18.3.1)(react@18.3.1) @@ -287,7 +287,7 @@ importers: version: 6.1.11(react-dom@18.3.1)(react@18.3.1) viem: specifier: ^2.10.2 - version: 2.13.8(typescript@5.4.5)(zod@3.23.8) + version: 2.17.3(typescript@5.4.5)(zod@3.23.8) yup: specifier: ^0.32.11 version: 0.32.11 @@ -312,7 +312,7 @@ importers: version: 8.57.0 vite: specifier: ^4.4.5 - version: 4.5.3(@types/node@20.14.2) + version: 4.5.3(@types/node@20.14.10) vite-plugin-node-polyfills: specifier: ^0.15.0 version: 0.15.0(vite@4.5.3) @@ -320,6 +320,121 @@ importers: specifier: ^3.3.0 version: 3.3.0(vite@4.5.3) + apps/hybrid-pay: + dependencies: + '@dynamic-labs/bitcoin': + specifier: ^2.2.10 + version: 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/ethereum': + specifier: ^2.2.10 + version: 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/ethereum-aa': + specifier: ^2.2.10 + version: 2.2.10(@dynamic-labs/rpc-providers@2.2.10)(@types/react@18.3.3)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/sdk-react-core': + specifier: ^2.2.10 + version: 2.2.10(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/wagmi-connector': + specifier: ^2.2.10 + version: 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/sdk-react-core@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/wallet-connector-core@2.2.10)(@wagmi/core@2.11.6)(eventemitter3@5.0.1)(react@18.3.1)(viem@2.17.3)(wagmi@2.10.9) + '@esbuild-plugins/node-globals-polyfill': + specifier: ^0.2.3 + version: 0.2.3(esbuild@0.21.5) + '@esbuild-plugins/node-modules-polyfill': + specifier: ^0.2.2 + version: 0.2.2(esbuild@0.21.5) + '@gobob/chains': + specifier: workspace:^ + version: link:../../packages/chains + '@gobob/currency': + specifier: workspace:^ + version: link:../../packages/currency + '@gobob/hooks': + specifier: workspace:^ + version: link:../../packages/hooks + '@gobob/icons': + specifier: workspace:^ + version: link:../../packages/icons + '@gobob/react-query': + specifier: workspace:^ + version: link:../../packages/react-query + '@gobob/tokens': + specifier: workspace:^ + version: link:../../packages/tokens + '@gobob/types': + specifier: workspace:^ + version: link:../../packages/types + '@gobob/ui': + specifier: workspace:^ + version: link:../../packages/ui + '@gobob/utils': + specifier: workspace:^ + version: link:../../packages/utils + '@gobob/wagmi': + specifier: workspace:^ + version: link:../../packages/wagmi + '@react-aria/utils': + specifier: ^3.23.2 + version: 3.24.1(react@18.3.1) + '@sentry/react': + specifier: ^8.8.0 + version: 8.15.0(react@18.3.1) + '@sentry/vite-plugin': + specifier: ^2.18.0 + version: 2.20.1 + '@zerodev/sdk': + specifier: ^5.3.3 + version: 5.3.3(permissionless@0.1.36)(viem@2.17.3) + big.js: + specifier: ^6.2.1 + version: 6.2.1 + permissionless: + specifier: ^0.1.36 + version: 0.1.36(viem@2.17.3) + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: ^6.16.0 + version: 6.24.1(react-dom@18.3.1)(react@18.3.1) + styled-components: + specifier: ^6.0.8 + version: 6.1.11(react-dom@18.3.1)(react@18.3.1) + viem: + specifier: ^2.17.3 + version: 2.17.3(typescript@5.4.5)(zod@3.23.8) + wagmi: + specifier: ^2.8.1 + version: 2.10.9(@tanstack/react-query@5.50.1)(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8) + yup: + specifier: ^0.32.11 + version: 0.32.11 + devDependencies: + '@gobob/test-utils': + specifier: workspace:^ + version: link:../../packages/test-utils + '@types/big.js': + specifier: ^6.2.0 + version: 6.2.2 + '@types/react': + specifier: ^18.2.15 + version: 18.3.3 + '@types/react-dom': + specifier: ^18.2.7 + version: 18.3.0 + '@vitejs/plugin-react': + specifier: ^4.0.3 + version: 4.3.1(vite@4.5.3) + eslint: + specifier: ^8.45.0 + version: 8.57.0 + vite: + specifier: ^4.4.5 + version: 4.5.3(@types/node@20.14.10) + packages/chains: {} packages/connect-ui: @@ -381,7 +496,7 @@ importers: version: 2.0.0 viem: specifier: ^2.10.2 - version: 2.13.8(typescript@5.4.5)(zod@3.23.8) + version: 2.17.3(typescript@5.4.5)(zod@3.23.8) devDependencies: '@types/big.js': specifier: ^6.2.0 @@ -403,7 +518,7 @@ importers: version: link:../wagmi viem: specifier: ^2.10.2 - version: 2.13.8(typescript@5.4.5)(zod@3.23.8) + version: 2.17.3(typescript@5.4.5)(zod@3.23.8) devDependencies: react: specifier: ^18.2.0 @@ -429,10 +544,10 @@ importers: dependencies: '@tanstack/react-query': specifier: ^5.35.1 - version: 5.44.0(react@18.3.1) + version: 5.50.1(react@18.3.1) '@tanstack/react-query-devtools': specifier: ^5.35.1 - version: 5.44.0(@tanstack/react-query@5.44.0)(react@18.3.1) + version: 5.50.1(@tanstack/react-query@5.50.1)(react@18.3.1) devDependencies: react: specifier: ^18.2.0 @@ -460,7 +575,7 @@ importers: version: 12.0.0 '@scure/base': specifier: ^1.1.6 - version: 1.1.6 + version: 1.1.7 '@scure/btc-signer': specifier: ^1.3.1 version: 1.3.2 @@ -542,7 +657,7 @@ importers: version: 3.5.3 '@radix-ui/react-slot': specifier: ^1.0.2 - version: 1.0.2(@types/react@18.3.3)(react@18.3.1) + version: 1.1.0(@types/react@18.3.3)(react@18.3.1) '@react-aria/accordion': specifier: 3.0.0-alpha.20 version: 3.0.0-alpha.20(react-dom@18.3.1)(react@18.3.1) @@ -690,7 +805,7 @@ importers: version: 1.3.0 '@scure/base': specifier: ^1.1.6 - version: 1.1.6 + version: 1.1.7 '@scure/btc-signer': specifier: ^1.3.1 version: 1.3.2 @@ -706,7 +821,7 @@ importers: version: link:../types vitest: specifier: ^1.5.2 - version: 1.6.0(@types/node@20.14.2) + version: 1.6.0(@types/node@20.14.10) packages/wagmi: dependencies: @@ -718,13 +833,13 @@ importers: version: link:../chains '@wagmi/core': specifier: ^2.9.1 - version: 2.11.0(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.13.8)(zod@3.23.8) + version: 2.11.6(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8) viem: specifier: ^2.10.2 - version: 2.13.8(typescript@5.4.5)(zod@3.23.8) + version: 2.17.3(typescript@5.4.5)(zod@3.23.8) wagmi: specifier: ^2.8.1 - version: 2.10.0(@tanstack/react-query@5.44.0)(@types/react@18.3.3)(react-dom@18.3.1)(react-i18next@13.5.0)(react-native@0.74.2)(react@18.3.1)(typescript@5.4.5)(viem@2.13.8)(zod@3.23.8) + version: 2.10.9(@tanstack/react-query@5.50.1)(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8) devDependencies: react: specifier: ^18.2.0 @@ -2194,6 +2309,10 @@ packages: uint8array-tools: 0.0.7 dev: false + /@btckit/types@0.0.19: + resolution: {integrity: sha512-APoOfYSg9SRR4CMXL606IDtpgh+ZD3kS/+iY0BkUALD6HvXo2pVw20L5YYIc+HrgMcF6WN0TH7TXdVs+Vu+kww==} + dev: false + /@coinbase/wallet-sdk@3.9.3: resolution: {integrity: sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw==} dependencies: @@ -2204,20 +2323,20 @@ packages: eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.1 keccak: 3.0.4 - preact: 10.22.0 + preact: 10.22.1 sha.js: 2.4.11 transitivePeerDependencies: - supports-color dev: false - /@coinbase/wallet-sdk@4.0.3: - resolution: {integrity: sha512-y/OGEjlvosikjfB+wk+4CVb9OxD1ob9cidEBLI5h8Hxaf/Qoob2XoVT1uvhtAzBx34KpGYSd+alKvh/GCRre4Q==} + /@coinbase/wallet-sdk@4.0.4: + resolution: {integrity: sha512-74c040CRnGhfRjr3ArnkAgud86erIqdkPHNt5HR1k9u97uTIZCJww9eGYT67Qf7gHPpGS/xW8Be1D4dvRm63FA==} dependencies: buffer: 6.0.3 clsx: 1.2.1 eventemitter3: 5.0.1 keccak: 3.0.4 - preact: 10.22.0 + preact: 10.22.1 sha.js: 2.4.11 dev: false @@ -2228,14 +2347,14 @@ packages: dev: true optional: true - /@commitlint/cli@17.8.1(@swc/core@1.5.28): + /@commitlint/cli@17.8.1(@swc/core@1.6.13): resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==} engines: {node: '>=v14'} hasBin: true dependencies: '@commitlint/format': 17.8.1 '@commitlint/lint': 17.8.1 - '@commitlint/load': 17.8.1(@swc/core@1.5.28) + '@commitlint/load': 17.8.1(@swc/core@1.6.13) '@commitlint/read': 17.8.1 '@commitlint/types': 17.8.1 execa: 5.1.1 @@ -2306,7 +2425,7 @@ packages: '@commitlint/types': 17.8.1 dev: true - /@commitlint/load@17.8.1(@swc/core@1.5.28): + /@commitlint/load@17.8.1(@swc/core@1.6.13): resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} engines: {node: '>=v14'} dependencies: @@ -2322,7 +2441,7 @@ packages: lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.2(@swc/core@1.5.28)(@types/node@20.14.2)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.6.13)(@types/node@20.14.10)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - '@swc/core' @@ -2402,8 +2521,8 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@cypress/code-coverage@3.12.39(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(cypress@12.17.3)(webpack@5.92.0): - resolution: {integrity: sha512-ja7I/GRmkSAW9e3O7pideWcNUEHao0WT6sRyXQEURoxkJUASJssJ7Kb/bd3eMYmkUCiD5CRFqWR5BGF4mWVaUw==} + /@cypress/code-coverage@3.12.41(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(cypress@12.17.3)(webpack@5.92.1): + resolution: {integrity: sha512-82ndoXij1t1jlUC7id9MV2u+TB4qQds7BnNxYk+Bnz8879lj4wFIpqE3TnI9w+0Y0qayaJh7ZBJnwBbht6Ib2A==} peerDependencies: '@babel/core': ^7.0.1 '@babel/preset-env': ^7.0.0 @@ -2413,8 +2532,8 @@ packages: dependencies: '@babel/core': 7.24.7 '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@cypress/webpack-preprocessor': 6.0.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(webpack@5.92.0) - babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.92.0) + '@cypress/webpack-preprocessor': 6.0.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(webpack@5.92.1) + babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.92.1) chalk: 4.1.2 cypress: 12.17.3 dayjs: 1.11.10 @@ -2424,7 +2543,7 @@ packages: istanbul-lib-coverage: 3.2.2 js-yaml: 4.1.0 nyc: 15.1.0 - webpack: 5.92.0(@swc/core@1.5.28)(esbuild@0.18.20) + webpack: 5.92.1(@swc/core@1.6.13)(esbuild@0.18.20) transitivePeerDependencies: - supports-color dev: true @@ -2477,18 +2596,18 @@ packages: uuid: 8.3.2 dev: true - /@cypress/webpack-dev-server@3.10.0(debug@4.3.5)(webpack@5.92.0): + /@cypress/webpack-dev-server@3.10.0(debug@4.3.5)(webpack@5.92.1): resolution: {integrity: sha512-oktIWfsOeeXG9JNoWdfANsVX604VPc4KHnU0xwjYwtWxHCLAGl4uMXS7BxxejqtLboNaLySwwGkw3T15weIPug==} dependencies: find-up: 6.3.0 fs-extra: 9.1.0 - html-webpack-plugin-4: /html-webpack-plugin@4.5.2(webpack@5.92.0) - html-webpack-plugin-5: /html-webpack-plugin@5.6.0(webpack@5.92.0) + html-webpack-plugin-4: /html-webpack-plugin@4.5.2(webpack@5.92.1) + html-webpack-plugin-5: /html-webpack-plugin@5.6.0(webpack@5.92.1) local-pkg: 0.4.1 semver: 7.6.2 - speed-measure-webpack-plugin: 1.4.2(webpack@5.92.0) + speed-measure-webpack-plugin: 1.4.2(webpack@5.92.1) tslib: 2.6.3 - webpack-dev-server: 4.15.2(debug@4.3.5)(webpack@5.92.0) + webpack-dev-server: 4.15.2(debug@4.3.5)(webpack@5.92.1) webpack-merge: 5.10.0 transitivePeerDependencies: - '@rspack/core' @@ -2500,7 +2619,7 @@ packages: - webpack-cli dev: true - /@cypress/webpack-preprocessor@6.0.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(webpack@5.92.0): + /@cypress/webpack-preprocessor@6.0.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(webpack@5.92.1): resolution: {integrity: sha512-0+1+4iy4W9PE6R5ywBNKAZoFp8Sf//w3UJ+CKTqkcAjA29b+dtsD0iFT70DsYE0BMqUM1PO7HXFGbXllQ+bRAA==} peerDependencies: '@babel/core': ^7.0.1 @@ -2510,11 +2629,11 @@ packages: dependencies: '@babel/core': 7.24.7 '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.92.0) + babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.92.1) bluebird: 3.7.1 debug: 4.3.5(supports-color@8.1.1) lodash: 4.17.21 - webpack: 5.92.0(@swc/core@1.5.28)(esbuild@0.18.20) + webpack: 5.92.1(@swc/core@1.6.13)(esbuild@0.18.20) transitivePeerDependencies: - supports-color dev: true @@ -2540,6 +2659,404 @@ packages: core-js: 3.37.1 dev: true + /@dynamic-labs/bitcoin@2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3): + resolution: {integrity: sha512-l9vUpNGMGX+S7dtNjZtwEFZtL4QCLLXCH8pLTh6lOElkm0oXR0Gv4HTVmTpUfUiraPWZwS4qC4Qihd0asLjdpw==} + dependencies: + '@btckit/types': 0.0.19 + '@dynamic-labs/sdk-api-core': 0.0.460 + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/wallet-book': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/wallet-connector-core': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(eventemitter3@5.0.1) + '@wallet-standard/app': 1.0.1 + '@wallet-standard/base': 1.0.1 + bitcoinjs-lib: 6.1.5 + sats-connect: 2.0.0 + stream: 0.0.2 + transitivePeerDependencies: + - '@dynamic-labs/logger' + - '@dynamic-labs/rpc-providers' + - '@dynamic-labs/types' + - eventemitter3 + - react + - react-dom + - viem + dev: false + + /@dynamic-labs/ethereum-aa@2.2.10(@dynamic-labs/rpc-providers@2.2.10)(@types/react@18.3.3)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3): + resolution: {integrity: sha512-1Iw+OZQ8zF1Ij8Zc0Cd1EbwaynjE2F7fec8CBhcxugMj/UKy6j3lk1r0P0Ftfqn+2Yny/b2ti3FY3fPiUbjCSg==} + peerDependencies: + viem: ^2.7.6 + dependencies: + '@dynamic-labs/ethereum': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/logger': 2.2.10(eventemitter3@5.0.1) + '@dynamic-labs/sdk-api-core': 0.0.460 + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/viem-utils': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(@dynamic-labs/wallet-connector-core@2.2.10)(viem@2.17.3) + '@dynamic-labs/wallet-book': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/wallet-connector-core': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(eventemitter3@5.0.1) + '@zerodev/ecdsa-validator': 5.2.3(@zerodev/sdk@5.2.8)(permissionless@0.1.20)(viem@2.17.3) + '@zerodev/sdk': 5.2.8(permissionless@0.1.20)(viem@2.17.3) + permissionless: 0.1.20(viem@2.17.3) + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@dynamic-labs/rpc-providers' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - eventemitter3 + - ioredis + - react + - react-dom + - uWebSockets.js + - utf-8-validate + dev: false + + /@dynamic-labs/ethereum@2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3): + resolution: {integrity: sha512-pq6EPQoMU85LWeBGt1a/kURu9GLLuE5SpjSxJklxF6WtVj/kG0V9pd+vYU1jcnSHqJS5bdUO6+4taq5pO4Tgxw==} + peerDependencies: + viem: ^2.7.6 + dependencies: + '@coinbase/wallet-sdk': 4.0.4 + '@dynamic-labs/rpc-provider-ethereum': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/sdk-api-core': 0.0.460 + '@dynamic-labs/turnkey': 2.2.10(@dynamic-labs/logger@2.2.10)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/viem-utils': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(@dynamic-labs/wallet-connector-core@2.2.10)(viem@2.17.3) + '@dynamic-labs/wallet-book': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/wallet-connector-core': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(eventemitter3@5.0.1) + '@walletconnect/ethereum-provider': 2.11.2(@types/react@18.3.3)(react@18.3.1) + buffer: 6.0.3 + eventemitter3: 5.0.1 + stream: 0.0.2 + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@dynamic-labs/logger' + - '@dynamic-labs/rpc-providers' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - react + - react-dom + - uWebSockets.js + - utf-8-validate + dev: false + + /@dynamic-labs/iconic@2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-8ubXwfOgYsU2zlP6a3uQpmKVXYWh2pQpVG2kFdC+SqqQ7OvVjm+KKaFyakykjP73iewxdkq2+9ZzMcSrG8c9Ig==} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + dependencies: + '@dynamic-labs/logger': 2.2.10(eventemitter3@5.0.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + sharp: 0.33.2 + transitivePeerDependencies: + - eventemitter3 + dev: false + + /@dynamic-labs/logger@2.2.10(eventemitter3@5.0.1): + resolution: {integrity: sha512-XryVUA/tJR4wdf35KGqXw22sB3p3nJAbOiWwM2MgINVe3qXtLHDNq6cfT24h0/IN59QwMnd/y3StjnW8whpl+A==} + peerDependencies: + eventemitter3: 5.0.1 + dependencies: + eventemitter3: 5.0.1 + dev: false + + /@dynamic-labs/multi-wallet@2.2.10(@dynamic-labs/logger@2.2.10)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3): + resolution: {integrity: sha512-Um1Wxd8/joEXD/+56kw65Xy8LKaln7HIisuJBl6Tlx5z3DNIPDG0pXE07V8kvmbqnJOxG8fYTxWT/0t25IfO9w==} + peerDependencies: + viem: ^2.7.6 + dependencies: + '@dynamic-labs/rpc-providers': 2.2.10(viem@2.17.3) + '@dynamic-labs/sdk-api-core': 0.0.460 + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/wallet-book': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/wallet-connector-core': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(eventemitter3@5.0.1) + tslib: 2.4.1 + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + transitivePeerDependencies: + - '@dynamic-labs/logger' + - eventemitter3 + - react + - react-dom + dev: false + + /@dynamic-labs/rpc-provider-ethereum@2.2.10(eventemitter3@5.0.1)(viem@2.17.3): + resolution: {integrity: sha512-yxjKkG2+Ty7aJsHvDDrnQvMsblM6WeK1dWIG+DdHpRuWfElTZRJMngyJ2MvDnDemiODc5qBCsuKnbFVm4tP04Q==} + peerDependencies: + viem: ^1.19.13 || ^2.2.0 + dependencies: + '@dynamic-labs/rpc-providers': 2.2.10(viem@2.17.3) + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + transitivePeerDependencies: + - eventemitter3 + dev: false + + /@dynamic-labs/rpc-provider-solana@2.2.10(viem@2.17.3): + resolution: {integrity: sha512-K5OaPbeEcZd9kmWqgNS/+YE8JvWudSfAuQSr7VqcwvXeOYpWJiiHYTxSc7kH+Xf37170mP79PKCjGSDVrwQI4w==} + dependencies: + '@dynamic-labs/rpc-providers': 2.2.10(viem@2.17.3) + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@solana/web3.js': 1.92.1 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + - viem + dev: false + + /@dynamic-labs/rpc-providers@2.2.10(viem@2.17.3): + resolution: {integrity: sha512-QnM7AFcQaivRvKQovXhO3bLP0JkFtdWH30fQRse+yIJ2Gmpg1Ki8oMrziEH6+DLMR9I/Xfm+aDyzzgskebXWCg==} + dependencies: + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + transitivePeerDependencies: + - viem + dev: false + + /@dynamic-labs/sdk-api-core@0.0.460: + resolution: {integrity: sha512-g80gsR7Ub5GsqlUpZI6c7+/XmV6gm4FQ5flgrCfUArrPWpvSERXezyaSXCz3xLM9JbxWuli4pM+Pd3glphHSXA==} + dev: false + + /@dynamic-labs/sdk-react-core@2.2.10(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(viem@2.17.3): + resolution: {integrity: sha512-GyvooB2jzmvTPm/hTEuw4QLTLNjSPtCA5Wrk7nxI2tRLxIMRztwFl1+YbEkT7lKV7/YzvU73Hxa/UY3vY273lw==} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + viem: ^2.7.6 + dependencies: + '@dynamic-labs/iconic': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/logger': 2.2.10(eventemitter3@5.0.1) + '@dynamic-labs/multi-wallet': 2.2.10(@dynamic-labs/logger@2.2.10)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/rpc-provider-ethereum': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/rpc-provider-solana': 2.2.10(viem@2.17.3) + '@dynamic-labs/rpc-providers': 2.2.10(viem@2.17.3) + '@dynamic-labs/sdk-api-core': 0.0.460 + '@dynamic-labs/store': 2.2.10(eventemitter3@5.0.1) + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/viem-utils': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(@dynamic-labs/wallet-connector-core@2.2.10)(viem@2.17.3) + '@dynamic-labs/wallet-book': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/wallet-connector-core': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(eventemitter3@5.0.1) + '@hcaptcha/react-hcaptcha': 1.4.4(react-dom@18.3.1)(react@18.3.1) + country-list: 2.3.0 + eventemitter3: 5.0.1 + formik: 2.2.9(react@18.3.1) + i18next: 23.4.6 + qrcode: 1.5.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-focus-lock: 2.9.2(@types/react@18.3.3)(react@18.3.1) + react-i18next: 13.5.0(i18next@23.4.6)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1) + react-international-phone: 4.2.5(react@18.3.1) + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + yup: 0.32.11 + transitivePeerDependencies: + - '@types/react' + - bufferutil + - encoding + - react-native + - utf-8-validate + dev: false + + /@dynamic-labs/solana-utils@2.2.10(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10): + resolution: {integrity: sha512-aG0/yZFNktTQ29TsaIEFXLKhwauV9BElOs74hIN1N9COXeonRy6RUBQMCM1caHIPyyw061OYHtw1cacveNC9Zw==} + peerDependencies: + '@dynamic-labs/types': 2.2.10 + '@dynamic-labs/utils': 2.2.10 + dependencies: + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@solana/web3.js': 1.92.1 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@dynamic-labs/store@2.2.10(eventemitter3@5.0.1): + resolution: {integrity: sha512-/+NM19feC7bJjT6BGp1HwjROFZ0rKE+57IByOUIeyQ8zRVWhUic1wgwKjU4XE5acDVAosTvOX4iTwVOkgzV+cQ==} + dependencies: + '@dynamic-labs/logger': 2.2.10(eventemitter3@5.0.1) + transitivePeerDependencies: + - eventemitter3 + dev: false + + /@dynamic-labs/turnkey@2.2.10(@dynamic-labs/logger@2.2.10)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3): + resolution: {integrity: sha512-zOjM7u+Qlq6TcL7kujDLrB5x71ZSfXZaC6agSuftQcegv1pQSn8SryPoTqpo75MLY5cXM+uK+Cq1MtpuVkgYSw==} + peerDependencies: + viem: ^2.7.6 + dependencies: + '@dynamic-labs/rpc-provider-ethereum': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/rpc-provider-solana': 2.2.10(viem@2.17.3) + '@dynamic-labs/rpc-providers': 2.2.10(viem@2.17.3) + '@dynamic-labs/sdk-api-core': 0.0.460 + '@dynamic-labs/solana-utils': 2.2.10(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10) + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/viem-utils': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(@dynamic-labs/wallet-connector-core@2.2.10)(viem@2.17.3) + '@dynamic-labs/wallet-book': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/wallet-connector-core': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(eventemitter3@5.0.1) + '@solana/web3.js': 1.92.1 + '@turnkey/http': 2.7.1 + '@turnkey/iframe-stamper': 2.0.0 + '@turnkey/solana': 0.3.1 + '@turnkey/viem': 0.4.10(viem@2.17.3) + '@turnkey/webauthn-stamper': 0.5.0 + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + transitivePeerDependencies: + - '@dynamic-labs/logger' + - bufferutil + - encoding + - eventemitter3 + - react + - react-dom + - utf-8-validate + dev: false + + /@dynamic-labs/types@2.2.10(viem@2.17.3): + resolution: {integrity: sha512-Tk5n3LWcMFXrefKbR5DyZd/XyE+7bP3+wLvwbAfMtAKkPbkAsGTRdJTeSfaki6AG7YSOm68I23BVXPpjZ5RJyg==} + peerDependencies: + viem: ^2.7.6 + dependencies: + '@dynamic-labs/sdk-api-core': 0.0.460 + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + dev: false + + /@dynamic-labs/utils@2.2.10(eventemitter3@5.0.1)(viem@2.17.3): + resolution: {integrity: sha512-Gejv+eLManv4Teh8K6fysCtGshj5BxjeYZklgJnoEm2GB2QzJiIVs2mEpqjrMp0ZI6CVznA7Exwtadiij0d+VQ==} + peerDependencies: + viem: ^2.7.6 + dependencies: + '@dynamic-labs/logger': 2.2.10(eventemitter3@5.0.1) + '@dynamic-labs/sdk-api-core': 0.0.460 + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + buffer: 6.0.3 + tldts: 6.0.16 + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + transitivePeerDependencies: + - eventemitter3 + dev: false + + /@dynamic-labs/viem-utils@2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(@dynamic-labs/wallet-connector-core@2.2.10)(viem@2.17.3): + resolution: {integrity: sha512-xzsZIomBI+kPq1Ij++uHLChMNpYPy8x14TUQEldXOpjrppxVl5/p5ljbZ+CEinLby1TyJfnVuHKJ524+y8W24Q==} + peerDependencies: + '@dynamic-labs/logger': 2.2.10 + '@dynamic-labs/types': 2.2.10 + '@dynamic-labs/utils': 2.2.10 + '@dynamic-labs/wallet-book': 2.2.10 + '@dynamic-labs/wallet-connector-core': 2.2.10 + viem: ^2.7.6 + dependencies: + '@dynamic-labs/logger': 2.2.10(eventemitter3@5.0.1) + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/wallet-book': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/wallet-connector-core': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(eventemitter3@5.0.1) + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + dev: false + + /@dynamic-labs/wagmi-connector@2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/sdk-react-core@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/wallet-connector-core@2.2.10)(@wagmi/core@2.11.6)(eventemitter3@5.0.1)(react@18.3.1)(viem@2.17.3)(wagmi@2.10.9): + resolution: {integrity: sha512-25PhBmORi9rt2hF+oZm9ereV2AV2ZFEU0O3SkII2NF0Jc9uEN+uiCqcL5APtpUEmjkNnuwBzKk/BzzKtrE27aQ==} + peerDependencies: + '@dynamic-labs/logger': 2.2.10 + '@dynamic-labs/rpc-providers': 2.2.10 + '@dynamic-labs/sdk-react-core': 2.2.10 + '@dynamic-labs/types': 2.2.10 + '@dynamic-labs/wallet-connector-core': 2.2.10 + '@wagmi/core': ^2.6.4 + eventemitter3: 5.0.1 + react: ^18.2.0 + viem: ^2.7.6 + wagmi: 2.8.8 + dependencies: + '@dynamic-labs/logger': 2.2.10(eventemitter3@5.0.1) + '@dynamic-labs/rpc-providers': 2.2.10(viem@2.17.3) + '@dynamic-labs/sdk-react-core': 2.2.10(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(viem@2.17.3) + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/wallet-connector-core': 2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(eventemitter3@5.0.1) + '@wagmi/core': 2.11.6(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8) + eventemitter3: 5.0.1 + react: 18.3.1 + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + wagmi: 2.10.9(@tanstack/react-query@5.50.1)(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8) + dev: false + + /@dynamic-labs/wallet-book@2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3): + resolution: {integrity: sha512-I84jjpGaNfmHc3WSQogYkP6RDQuijgL1YruKiQAlg3KeLkZrl3sNJiVWvxwIv6aJ4b2N1B2KQwcaFGdvqcQMeA==} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + dependencies: + '@dynamic-labs/iconic': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/logger': 2.2.10(eventemitter3@5.0.1) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + util: 0.12.5 + zod: 3.22.4 + transitivePeerDependencies: + - eventemitter3 + - viem + dev: false + + /@dynamic-labs/wallet-connector-core@2.2.10(@dynamic-labs/logger@2.2.10)(@dynamic-labs/rpc-providers@2.2.10)(@dynamic-labs/types@2.2.10)(@dynamic-labs/utils@2.2.10)(@dynamic-labs/wallet-book@2.2.10)(eventemitter3@5.0.1): + resolution: {integrity: sha512-bYS3/pvdj5bMl4b7cpNL80+8Nadmc6Bz0UvAPbHUllynR1MPG98KuEkJOjPRQcIVIFRXid9wwymUvcIAYr9GjA==} + peerDependencies: + '@dynamic-labs/logger': 2.2.10 + '@dynamic-labs/rpc-providers': 2.2.10 + '@dynamic-labs/types': 2.2.10 + '@dynamic-labs/utils': 2.2.10 + '@dynamic-labs/wallet-book': 2.2.10 + eventemitter3: 5.0.1 + dependencies: + '@dynamic-labs/logger': 2.2.10(eventemitter3@5.0.1) + '@dynamic-labs/rpc-providers': 2.2.10(viem@2.17.3) + '@dynamic-labs/sdk-api-core': 0.0.460 + '@dynamic-labs/types': 2.2.10(viem@2.17.3) + '@dynamic-labs/utils': 2.2.10(eventemitter3@5.0.1)(viem@2.17.3) + '@dynamic-labs/wallet-book': 2.2.10(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.3) + eventemitter3: 5.0.1 + dev: false + + /@emnapi/runtime@0.45.0: + resolution: {integrity: sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==} + requiresBuild: true + dependencies: + tslib: 2.6.3 + dev: false + optional: true + /@emotion/is-prop-valid@1.2.2: resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} dependencies: @@ -2559,36 +3076,30 @@ packages: react: 18.3.1 dev: true - /@ericcornelissen/bash-parser@0.5.3: - resolution: {integrity: sha512-9Z0sGuXqf6En19qmwB0Syi1Mc8TYl756dNuuaYal9mrypKa0Jq/IX6aJfh6Rk2S3z66KBisWTqloDo7weYj4zg==} - engines: {node: '>=4'} + /@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.21.5): + resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} + peerDependencies: + esbuild: '*' dependencies: - array-last: 1.3.0 - babylon: 6.18.0 - compose-function: 3.0.3 - filter-obj: 1.1.0 - has-own-property: 0.1.0 - identity-function: 1.0.0 - is-iterable: 1.1.1 - iterable-lookahead: 1.0.0 - lodash.curry: 4.1.1 - magic-string: 0.16.0 - map-obj: 2.0.0 - object-pairs: 0.1.0 - object-values: 1.0.0 - reverse-arguments: 1.0.0 - shell-quote-word: 1.0.1 - to-pascal-case: 1.0.0 - unescape-js: 1.1.4 - dev: true - - /@esbuild/aix-ppc64@0.20.2: - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + esbuild: 0.21.5 + dev: false + + /@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.21.5): + resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} + peerDependencies: + esbuild: '*' + dependencies: + esbuild: 0.21.5 + escape-string-regexp: 4.0.0 + rollup-plugin-node-polyfills: 0.2.1 + dev: false + + /@esbuild/aix-ppc64@0.21.5: + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] requiresBuild: true - dev: true optional: true /@esbuild/android-arm64@0.18.20: @@ -2600,13 +3111,12 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.20.2: - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + /@esbuild/android-arm64@0.21.5: + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-arm@0.18.20: @@ -2618,13 +3128,12 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.20.2: - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + /@esbuild/android-arm@0.21.5: + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-x64@0.18.20: @@ -2636,13 +3145,12 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.20.2: - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + /@esbuild/android-x64@0.21.5: + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/darwin-arm64@0.18.20: @@ -2654,13 +3162,12 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.20.2: - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + /@esbuild/darwin-arm64@0.21.5: + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/darwin-x64@0.18.20: @@ -2672,13 +3179,12 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.20.2: - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + /@esbuild/darwin-x64@0.21.5: + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-arm64@0.18.20: @@ -2690,13 +3196,12 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.20.2: - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + /@esbuild/freebsd-arm64@0.21.5: + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-x64@0.18.20: @@ -2708,13 +3213,12 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.20.2: - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + /@esbuild/freebsd-x64@0.21.5: + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm64@0.18.20: @@ -2726,13 +3230,12 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.20.2: - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + /@esbuild/linux-arm64@0.21.5: + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm@0.18.20: @@ -2744,13 +3247,12 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.20.2: - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + /@esbuild/linux-arm@0.21.5: + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ia32@0.18.20: @@ -2762,13 +3264,12 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.20.2: - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + /@esbuild/linux-ia32@0.21.5: + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-loong64@0.18.20: @@ -2780,13 +3281,12 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.20.2: - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + /@esbuild/linux-loong64@0.21.5: + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-mips64el@0.18.20: @@ -2798,13 +3298,12 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.20.2: - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + /@esbuild/linux-mips64el@0.21.5: + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ppc64@0.18.20: @@ -2816,13 +3315,12 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.20.2: - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + /@esbuild/linux-ppc64@0.21.5: + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-riscv64@0.18.20: @@ -2834,13 +3332,12 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.20.2: - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + /@esbuild/linux-riscv64@0.21.5: + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-s390x@0.18.20: @@ -2852,13 +3349,12 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.20.2: - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + /@esbuild/linux-s390x@0.21.5: + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-x64@0.18.20: @@ -2870,13 +3366,12 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.20.2: - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + /@esbuild/linux-x64@0.21.5: + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/netbsd-x64@0.18.20: @@ -2888,13 +3383,12 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.20.2: - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + /@esbuild/netbsd-x64@0.21.5: + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true - dev: true optional: true /@esbuild/openbsd-x64@0.18.20: @@ -2906,13 +3400,12 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.20.2: - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + /@esbuild/openbsd-x64@0.21.5: + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true /@esbuild/sunos-x64@0.18.20: @@ -2924,13 +3417,12 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.20.2: - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + /@esbuild/sunos-x64@0.21.5: + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true - dev: true optional: true /@esbuild/win32-arm64@0.18.20: @@ -2942,13 +3434,12 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.20.2: - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + /@esbuild/win32-arm64@0.21.5: + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-ia32@0.18.20: @@ -2960,13 +3451,12 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.20.2: - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + /@esbuild/win32-ia32@0.21.5: + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-x64@0.18.20: @@ -2978,13 +3468,12 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.20.2: - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + /@esbuild/win32-x64@0.21.5: + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): @@ -2997,8 +3486,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.10.1: - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + /@eslint-community/regexpp@4.11.0: + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -3085,8 +3574,8 @@ packages: - utf-8-validate dev: false - /@eth-optimism/sdk@3.3.1(ethers@5.7.2): - resolution: {integrity: sha512-zf8qL+KwYWUUwvdcjF1HpBxgKSt5wsKr8oa6jwqUhdPkQHUtVK5SRKtqXqYplnAgKtxDQYwlK512GU16odEl1w==} + /@eth-optimism/sdk@3.3.2(ethers@5.7.2): + resolution: {integrity: sha512-+zhxT0YkBIEzHsuIayQGjr8g9NawZo6/HYfzg1NSEFsE2Yt0NyCWqVDFTuuak0T6AvIa2kNcl3r0Z8drdb2QmQ==} peerDependencies: ethers: ^5 dependencies: @@ -3123,7 +3612,7 @@ packages: '@ethereumjs/common': 3.2.0 '@ethereumjs/rlp': 4.0.1 '@ethereumjs/util': 8.1.0 - ethereum-cryptography: 2.2.0 + ethereum-cryptography: 2.2.1 dev: false /@ethereumjs/util@8.1.0: @@ -3131,7 +3620,7 @@ packages: engines: {node: '>=14'} dependencies: '@ethereumjs/rlp': 4.0.1 - ethereum-cryptography: 2.2.0 + ethereum-cryptography: 2.2.1 micro-ftch: 0.3.1 dev: false @@ -3454,32 +3943,32 @@ packages: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: true - /@floating-ui/core@1.6.2: - resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==} + /@floating-ui/core@1.6.4: + resolution: {integrity: sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==} dependencies: - '@floating-ui/utils': 0.2.2 + '@floating-ui/utils': 0.2.4 dev: true - /@floating-ui/dom@1.6.5: - resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} + /@floating-ui/dom@1.6.7: + resolution: {integrity: sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==} dependencies: - '@floating-ui/core': 1.6.2 - '@floating-ui/utils': 0.2.2 + '@floating-ui/core': 1.6.4 + '@floating-ui/utils': 0.2.4 dev: true - /@floating-ui/react-dom@2.1.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} + /@floating-ui/react-dom@2.1.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@floating-ui/dom': 1.6.5 + '@floating-ui/dom': 1.6.7 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: true - /@floating-ui/utils@0.2.2: - resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} + /@floating-ui/utils@0.2.4: + resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==} dev: true /@formatjs/ecma402-abstract@2.0.0: @@ -3532,12 +4021,12 @@ packages: bitcoinjs-lib: 6.1.6 dev: false - /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): + /@graphql-typed-document-node/core@3.2.0(graphql@16.9.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.8.1 + graphql: 16.9.0 dev: false /@hapi/hoek@9.3.0: @@ -3548,6 +4037,17 @@ packages: dependencies: '@hapi/hoek': 9.3.0 + /@hcaptcha/react-hcaptcha@1.4.4(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Aen217LDnf5ywbPSwBG5CsoqBLIHIAS9lhj3zQjXJuO13doQ6/ubkCWNuY8jmwYLefoFt3V3MrZmCdKDaFoTuQ==} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + dependencies: + '@babel/runtime': 7.24.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -3570,6 +4070,194 @@ packages: deprecated: Use @eslint/object-schema instead dev: true + /@img/sharp-darwin-arm64@0.33.2: + resolution: {integrity: sha512-itHBs1rPmsmGF9p4qRe++CzCgd+kFYktnsoR1sbIAfsRMrJZau0Tt1AH9KVnufc2/tU02Gf6Ibujx+15qRE03w==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.1 + dev: false + optional: true + + /@img/sharp-darwin-x64@0.33.2: + resolution: {integrity: sha512-/rK/69Rrp9x5kaWBjVN07KixZanRr+W1OiyKdXcbjQD6KbW+obaTeBBtLUAtbBsnlTTmWthw99xqoOS7SsySDg==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.1 + dev: false + optional: true + + /@img/sharp-libvips-darwin-arm64@1.0.1: + resolution: {integrity: sha512-kQyrSNd6lmBV7O0BUiyu/OEw9yeNGFbQhbxswS1i6rMDwBBSX+e+rPzu3S+MwAiGU3HdLze3PanQ4Xkfemgzcw==} + engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-darwin-x64@1.0.1: + resolution: {integrity: sha512-eVU/JYLPVjhhrd8Tk6gosl5pVlvsqiFlt50wotCvdkFGf+mDNBJxMh+bvav+Wt3EBnNZWq8Sp2I7XfSjm8siog==} + engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-arm64@1.0.1: + resolution: {integrity: sha512-bnGG+MJjdX70mAQcSLxgeJco11G+MxTz+ebxlz8Y3dxyeb3Nkl7LgLI0mXupoO+u1wRNx/iRj5yHtzA4sde1yA==} + engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-arm@1.0.1: + resolution: {integrity: sha512-FtdMvR4R99FTsD53IA3LxYGghQ82t3yt0ZQ93WMZ2xV3dqrb0E8zq4VHaTOuLEAuA83oDawHV3fd+BsAPadHIQ==} + engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-s390x@1.0.1: + resolution: {integrity: sha512-3+rzfAR1YpMOeA2zZNp+aYEzGNWK4zF3+sdMxuCS3ey9HhDbJ66w6hDSHDMoap32DueFwhhs3vwooAB2MaK4XQ==} + engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-x64@1.0.1: + resolution: {integrity: sha512-3NR1mxFsaSgMMzz1bAnnKbSAI+lHXVTqAHgc1bgzjHuXjo4hlscpUxc0vFSAPKI3yuzdzcZOkq7nDPrP2F8Jgw==} + engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linuxmusl-arm64@1.0.1: + resolution: {integrity: sha512-5aBRcjHDG/T6jwC3Edl3lP8nl9U2Yo8+oTl5drd1dh9Z1EBfzUKAJFUDTDisDjUwc7N4AjnPGfCA3jl3hY8uDg==} + engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linuxmusl-x64@1.0.1: + resolution: {integrity: sha512-dcT7inI9DBFK6ovfeWRe3hG30h51cBAP5JXlZfx6pzc/Mnf9HFCQDLtYf4MCBjxaaTfjCCjkBxcy3XzOAo5txw==} + engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-linux-arm64@0.33.2: + resolution: {integrity: sha512-pz0NNo882vVfqJ0yNInuG9YH71smP4gRSdeL09ukC2YLE6ZyZePAlWKEHgAzJGTiOh8Qkaov6mMIMlEhmLdKew==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.1 + dev: false + optional: true + + /@img/sharp-linux-arm@0.33.2: + resolution: {integrity: sha512-Fndk/4Zq3vAc4G/qyfXASbS3HBZbKrlnKZLEJzPLrXoJuipFNNwTes71+Ki1hwYW5lch26niRYoZFAtZVf3EGA==} + engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.1 + dev: false + optional: true + + /@img/sharp-linux-s390x@0.33.2: + resolution: {integrity: sha512-MBoInDXDppMfhSzbMmOQtGfloVAflS2rP1qPcUIiITMi36Mm5YR7r0ASND99razjQUpHTzjrU1flO76hKvP5RA==} + engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [s390x] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.1 + dev: false + optional: true + + /@img/sharp-linux-x64@0.33.2: + resolution: {integrity: sha512-xUT82H5IbXewKkeF5aiooajoO1tQV4PnKfS/OZtb5DDdxS/FCI/uXTVZ35GQ97RZXsycojz/AJ0asoz6p2/H/A==} + engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.1 + dev: false + optional: true + + /@img/sharp-linuxmusl-arm64@0.33.2: + resolution: {integrity: sha512-F+0z8JCu/UnMzg8IYW1TMeiViIWBVg7IWP6nE0p5S5EPQxlLd76c8jYemG21X99UzFwgkRo5yz2DS+zbrnxZeA==} + engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.1 + dev: false + optional: true + + /@img/sharp-linuxmusl-x64@0.33.2: + resolution: {integrity: sha512-+ZLE3SQmSL+Fn1gmSaM8uFusW5Y3J9VOf+wMGNnTtJUMUxFhv+P4UPaYEYT8tqnyYVaOVGgMN/zsOxn9pSsO2A==} + engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.1 + dev: false + optional: true + + /@img/sharp-wasm32@0.33.2: + resolution: {integrity: sha512-fLbTaESVKuQcpm8ffgBD7jLb/CQLcATju/jxtTXR1XCLwbOQt+OL5zPHSDMmp2JZIeq82e18yE0Vv7zh6+6BfQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/runtime': 0.45.0 + dev: false + optional: true + + /@img/sharp-win32-ia32@0.33.2: + resolution: {integrity: sha512-okBpql96hIGuZ4lN3+nsAjGeggxKm7hIRu9zyec0lnfB8E7Z6p95BuRZzDDXZOl2e8UmR4RhYt631i7mfmKU8g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-win32-x64@0.33.2: + resolution: {integrity: sha512-E4magOks77DK47FwHUIGH0RYWSgRBfGdK56kIHSVeB9uIS4pPFr4N2kIVsXdQQo4LzOsENKV5KAhRlRL7eMAdg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@internationalized/date@3.5.4: resolution: {integrity: sha512-qoVJVro+O0rBaw+8HPjUB1iH8Ihf8oziEnqMnvhJUSuVIrHOuZ6eNLHNvzXJKUvAtaDiqMnRlg8Z2mgh09BlUw==} dependencies: @@ -3631,7 +4319,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -3651,14 +4339,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3691,7 +4379,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 jest-mock: 29.7.0 /@jest/expect-utils@29.7.0: @@ -3715,7 +4403,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.14.2 + '@types/node': 20.14.10 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3746,14 +4434,14 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.14.2 + '@types/node': 20.14.10 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.2 + istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.7 @@ -3763,7 +4451,7 @@ packages: slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 + v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color @@ -3827,7 +4515,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.2 + '@types/node': 20.14.10 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -3837,7 +4525,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.2 + '@types/node': 20.14.10 '@types/yargs': 16.0.9 chalk: 4.1.2 dev: true @@ -3849,7 +4537,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.2 + '@types/node': 20.14.10 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -3867,7 +4555,7 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.4.5) typescript: 5.4.5 - vite: 4.5.3(@types/node@20.14.2) + vite: 4.5.3(@types/node@20.14.10) dev: true /@jridgewell/gen-mapping@0.3.5: @@ -3950,7 +4638,7 @@ packages: resolution: {integrity: sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==} engines: {node: '>=16.0.0'} dependencies: - '@metamask/rpc-errors': 6.3.0 + '@metamask/rpc-errors': 6.3.1 '@metamask/safe-event-emitter': 3.1.1 '@metamask/utils': 8.5.0 transitivePeerDependencies: @@ -3998,7 +4686,7 @@ packages: dependencies: '@metamask/json-rpc-engine': 7.3.3 '@metamask/object-multiplex': 1.3.0 - '@metamask/rpc-errors': 6.3.0 + '@metamask/rpc-errors': 6.3.1 '@metamask/safe-event-emitter': 3.1.1 '@metamask/utils': 8.5.0 detect-browser: 5.3.0 @@ -4019,7 +4707,7 @@ packages: '@metamask/json-rpc-engine': 7.3.3 '@metamask/json-rpc-middleware-stream': 6.0.2 '@metamask/object-multiplex': 2.0.0 - '@metamask/rpc-errors': 6.3.0 + '@metamask/rpc-errors': 6.3.1 '@metamask/safe-event-emitter': 3.1.1 '@metamask/utils': 8.5.0 detect-browser: 5.3.0 @@ -4032,11 +4720,11 @@ packages: - supports-color dev: false - /@metamask/rpc-errors@6.3.0: - resolution: {integrity: sha512-B1UIG/0xWkaDs/d6xrxsRf7kmFLdk8YE0HUToaFumjwQM36AjBsqEzVyemPTQv0SIrAPFnSmkLt053JOWcu5iw==} + /@metamask/rpc-errors@6.3.1: + resolution: {integrity: sha512-ugDY7cKjF4/yH5LtBaOIKHw/AiGGSAmzptAUEiAEGr/78LwuzcXAxmzEQfSfMIfI+f9Djr8cttq1pRJJKfTuCg==} engines: {node: '>=16.0.0'} dependencies: - '@metamask/utils': 8.5.0 + '@metamask/utils': 9.0.0 fast-safe-stringify: 2.1.1 transitivePeerDependencies: - supports-color @@ -4051,8 +4739,8 @@ packages: engines: {node: '>=12.0.0'} dev: false - /@metamask/sdk-communication-layer@0.20.5(cross-fetch@4.0.0)(eciesjs@0.3.19)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.7.5): - resolution: {integrity: sha512-Y3pzg1GBB7tDUCUsyhvlhxQ+h/pDrTjO2yUwjCJj2S8Nx5OtdRv/foRGfbDHkfYt6Z9ANRfivWU2U6El17B24A==} + /@metamask/sdk-communication-layer@0.26.4(cross-fetch@4.0.0)(eciesjs@0.3.19)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.7.5): + resolution: {integrity: sha512-+X4GEc5mV1gWK4moSswVlKsUh+RsA48qPlkxBLTUxQODSnyBe0TRMxE6mH+bSrfponnTzvBkGUXyEjvDwDjDHw==} peerDependencies: cross-fetch: ^4.0.0 eciesjs: ^0.3.16 @@ -4068,19 +4756,18 @@ packages: eventemitter2: 6.4.9 readable-stream: 3.6.2 socket.io-client: 4.7.5 - utf-8-validate: 6.0.4 + utf-8-validate: 5.0.10 uuid: 8.3.2 transitivePeerDependencies: - supports-color dev: false - /@metamask/sdk-install-modal-web@0.20.4(i18next@22.5.1)(react-dom@18.3.1)(react-i18next@13.5.0)(react-native@0.74.2)(react@18.3.1): - resolution: {integrity: sha512-AX3mTr0IDpS0ajV83okTaixG+2wIxTVbgvEuQgAj2Ed7PWAdiZ1aX93AVcaCgkOWhTf267z7mXCSuBDpBCje9g==} + /@metamask/sdk-install-modal-web@0.26.4(i18next@23.11.5)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1): + resolution: {integrity: sha512-7Cx7ZsaExbMwghlRrUWWI0Ksg0m7K60LtMjfuDpjvjWqoZa9MoPxitGDEXNbLaqvKn39ebPvNcPzQ6czA4ilTw==} peerDependencies: - i18next: 22.5.1 + i18next: 23.2.3 react: ^18.2.0 react-dom: ^18.2.0 - react-i18next: ^13.2.2 react-native: '*' peerDependenciesMeta: react: @@ -4090,16 +4777,15 @@ packages: react-native: optional: true dependencies: - i18next: 22.5.1 + i18next: 23.11.5 qr-code-styling: 1.6.0-rc.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-i18next: 13.5.0(i18next@22.5.1)(react-dom@18.3.1)(react-native@0.74.2)(react@18.3.1) - react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1) + react-native: 0.74.3(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1) dev: false - /@metamask/sdk@0.20.5(react-dom@18.3.1)(react-i18next@13.5.0)(react-native@0.74.2)(react@18.3.1): - resolution: {integrity: sha512-BEL3BKbb0O09QgOzvyPH5xUONl2uicS9WT1AYhZ8yR4ytz5fhyHWJzs8Q/cwgm1qIdn3eumnjXfgA6pKirWa3A==} + /@metamask/sdk@0.26.4(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1): + resolution: {integrity: sha512-9Yh41KJkD9RhW0lRijnQzPV0ptblLorLdTsf5GnAl3yE72QIfaPBtsDxzLtX+0QLppiFfj7o8vRBYvBApG9k+Q==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -4111,8 +4797,8 @@ packages: dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 15.0.0 - '@metamask/sdk-communication-layer': 0.20.5(cross-fetch@4.0.0)(eciesjs@0.3.19)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.7.5) - '@metamask/sdk-install-modal-web': 0.20.4(i18next@22.5.1)(react-dom@18.3.1)(react-i18next@13.5.0)(react-native@0.74.2)(react@18.3.1) + '@metamask/sdk-communication-layer': 0.26.4(cross-fetch@4.0.0)(eciesjs@0.3.19)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.7.5) + '@metamask/sdk-install-modal-web': 0.26.4(i18next@23.11.5)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1) '@types/dom-screen-wake-lock': 1.0.3 bowser: 2.11.0 cross-fetch: 4.0.0 @@ -4120,14 +4806,14 @@ packages: eciesjs: 0.3.19 eth-rpc-errors: 4.0.3 eventemitter2: 6.4.9 - i18next: 22.5.1 + i18next: 23.11.5 i18next-browser-languagedetector: 7.1.0 obj-multiplex: 1.0.0 pump: 3.0.0 qrcode-terminal-nooctal: 0.12.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-native-webview: 11.26.1(react-native@0.74.2)(react@18.3.1) + react-native-webview: 11.26.1(react-native@0.74.3)(react@18.3.1) readable-stream: 3.6.2 rollup-plugin-visualizer: 5.12.0 socket.io-client: 4.7.5 @@ -4136,15 +4822,14 @@ packages: transitivePeerDependencies: - bufferutil - encoding - - react-i18next - react-native - rollup - supports-color - utf-8-validate dev: false - /@metamask/superstruct@3.0.0: - resolution: {integrity: sha512-TOm+Lt/lCJk9j/3QT2LucrPewRmqI7/GKT+blK2IIOAkBMS+9TmeNjd2Y+TlfpSSYstaYsGZyz1XwpiTCg6RLA==} + /@metamask/superstruct@3.1.0: + resolution: {integrity: sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA==} engines: {node: '>=16.0.0'} dev: false @@ -4166,7 +4851,24 @@ packages: engines: {node: '>=16.0.0'} dependencies: '@ethereumjs/tx': 4.2.0 - '@metamask/superstruct': 3.0.0 + '@metamask/superstruct': 3.1.0 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.7 + '@types/debug': 4.1.12 + debug: 4.3.5(supports-color@8.1.1) + pony-cause: 2.1.11 + semver: 7.6.2 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/utils@9.0.0: + resolution: {integrity: sha512-Q/PzQCm6rkmePxHghXgJuYEkVfSvwKLLFZwFtfmLAz4mxIPuFJSMawaJM7sfZsVybK5Bf9QaKAjgMvHk5iGGvA==} + engines: {node: '>=16.0.0'} + dependencies: + '@ethereumjs/tx': 4.2.0 + '@metamask/superstruct': 3.1.0 '@noble/hashes': 1.4.0 '@scure/base': 1.1.7 '@types/debug': 4.1.12 @@ -4259,6 +4961,12 @@ packages: '@noble/hashes': 1.4.0 dev: false + /@noble/curves@1.4.2: + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + dependencies: + '@noble/hashes': 1.4.0 + dev: false + /@noble/hashes@1.3.2: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} @@ -4279,23 +4987,10 @@ packages: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - /@nodelib/fs.scandir@3.0.0: - resolution: {integrity: sha512-ktI9+PxfHYtKjF3cLTUAh2N+b8MijCRPNwKJNqTVdL0gB0QxLU2rIRaZ1t71oEa3YBDE6bukH1sR0+CDnpp/Mg==} - engines: {node: '>=16.14.0'} - dependencies: - '@nodelib/fs.stat': 3.0.0 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - /@nodelib/fs.stat@3.0.0: - resolution: {integrity: sha512-2tQOI38s19P9i7X/Drt0v8iMA+KMsgdhB/dyPER+e+2Y8L1Z7QvnuRdW/uLuf5YRFUYmnj4bMA6qCuZHFI1GDQ==} - engines: {node: '>=16.14.0'} - dev: true - /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} @@ -4303,14 +4998,6 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - /@nodelib/fs.walk@2.0.0: - resolution: {integrity: sha512-54voNDBobGdMl3BUXSu7UaDh1P85PGHWlJ5e0XhPugo1JulOyCtp2I+5ri4wplGDJ8QGwPEQW7/x3yTLU7yF1A==} - engines: {node: '>=16.14.0'} - dependencies: - '@nodelib/fs.scandir': 3.0.0 - fastq: 1.17.1 - dev: true - /@parcel/watcher-android-arm64@2.4.1: resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} engines: {node: '>= 10.0.0'} @@ -4464,12 +5151,12 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true - /@playwright/test@1.44.1: - resolution: {integrity: sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q==} - engines: {node: '>=16'} + /@playwright/test@1.45.1: + resolution: {integrity: sha512-Wo1bWTzQvGA7LyKGIZc8nFSTFf2TkthGIFBR+QVNilvwouGzFd4PYukZe3rvf5PSqjHi1+1NyKSDZKcQWETzaA==} + engines: {node: '>=18'} hasBin: true dependencies: - playwright: 1.44.1 + playwright: 1.45.1 dev: true /@radix-ui/number@1.0.1: @@ -4484,6 +5171,10 @@ packages: '@babel/runtime': 7.24.7 dev: true + /@radix-ui/primitive@1.1.0: + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + dev: true + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -4524,13 +5215,76 @@ packages: '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: true + + /@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: true + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.7 + '@types/react': 18.3.3 + react: 18.3.1 + dev: true + + /@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + + /@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.7 + '@types/react': 18.3.3 react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) dev: true - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + /@radix-ui/react-context@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} peerDependencies: '@types/react': '*' react: ^18.2.0 @@ -4538,12 +5292,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.7 '@types/react': 18.3.3 react: 18.3.1 + dev: true - /@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + /@radix-ui/react-direction@1.0.1(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' react: ^18.2.0 @@ -4556,8 +5310,8 @@ packages: react: 18.3.1 dev: true - /@radix-ui/react-direction@1.0.1(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + /@radix-ui/react-direction@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} peerDependencies: '@types/react': '*' react: ^18.2.0 @@ -4565,7 +5319,6 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.7 '@types/react': 18.3.3 react: 18.3.1 dev: true @@ -4647,6 +5400,20 @@ packages: react: 18.3.1 dev: true + /@radix-ui/react-id@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + react: 18.3.1 + dev: true + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: @@ -4661,7 +5428,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -4719,8 +5486,8 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: true - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -4732,16 +5499,35 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: true + + /@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^18.2.0 + react-dom: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 @@ -4789,8 +5575,8 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) dev: true - /@radix-ui/react-separator@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + /@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -4802,8 +5588,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 @@ -4823,9 +5608,23 @@ packages: '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 react: 18.3.1 + dev: true + + /@radix-ui/react-slot@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + react: 18.3.1 - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + /@radix-ui/react-toggle-group@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -4837,22 +5636,21 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-toggle': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: true - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + /@radix-ui/react-toggle@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-gwoxaKZ0oJ4vIgzsfESBuSgJNdc0rv12VhHgcqN0TEJmmZixXG/2XpsLK8kzNWYcnaoRIEEQc0bEi3dIvdUpjw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -4864,18 +5662,17 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: true - /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} + /@radix-ui/react-toolbar@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ZUKknxhMTL/4hPh+4DuaTot9aO7UD6Kupj4gqXCsBTayX1pD1L+0C2/2VZKXb4tIifQklZ3pf2hG9T+ns+FclQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -4887,14 +5684,13 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-separator': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 react: 18.3.1 @@ -4915,6 +5711,19 @@ packages: react: 18.3.1 dev: true + /@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + dev: true + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -4930,6 +5739,20 @@ packages: react: 18.3.1 dev: true + /@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + react: 18.3.1 + dev: true + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -4959,6 +5782,19 @@ packages: react: 18.3.1 dev: true + /@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + dev: true + /@radix-ui/react-use-previous@1.0.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: @@ -5508,10 +6344,10 @@ packages: react: 18.3.1 dev: false - /@react-native-community/cli-clean@13.6.8: - resolution: {integrity: sha512-B1uxlm1N4BQuWFvBL3yRl3LVvydjswsdbTi7tMrHMtSxfRio1p9HjcmDzlzKco09Y+8qBGgakm3jcMZGLbhXQQ==} + /@react-native-community/cli-clean@13.6.9: + resolution: {integrity: sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA==} dependencies: - '@react-native-community/cli-tools': 13.6.8 + '@react-native-community/cli-tools': 13.6.9 chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 @@ -5519,35 +6355,35 @@ packages: - encoding dev: false - /@react-native-community/cli-config@13.6.8: - resolution: {integrity: sha512-RabCkIsWdP4Ex/sf1uSP9qxc30utm+0uIJAjrZkNQynm7T4Lyqn/kT3LKm4yM6M0Qk61YxGguiaXF4601vAduw==} + /@react-native-community/cli-config@13.6.9: + resolution: {integrity: sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg==} dependencies: - '@react-native-community/cli-tools': 13.6.8 + '@react-native-community/cli-tools': 13.6.9 chalk: 4.1.2 cosmiconfig: 5.2.1 deepmerge: 4.3.1 fast-glob: 3.3.2 - joi: 17.13.1 + joi: 17.13.3 transitivePeerDependencies: - encoding dev: false - /@react-native-community/cli-debugger-ui@13.6.8: - resolution: {integrity: sha512-2cS+MX/Su6sVSjqpDftFOXbK7EuPg98xzsPkdPhkQnkZwvXqodK9CAMuDMbx3lBHHtrPrpMbBCpFmPN8iVOnlA==} + /@react-native-community/cli-debugger-ui@13.6.9: + resolution: {integrity: sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw==} dependencies: serve-static: 1.15.0 transitivePeerDependencies: - supports-color dev: false - /@react-native-community/cli-doctor@13.6.8: - resolution: {integrity: sha512-/3Vdy9J3hyiu0y3nd/CU3kBqPlTRxnLXg7V6jrA1jbTOlZAMyV9imEkrqEaGK0SMOyMhh9Pipf98Ozhk0Nl4QA==} + /@react-native-community/cli-doctor@13.6.9: + resolution: {integrity: sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A==} dependencies: - '@react-native-community/cli-config': 13.6.8 - '@react-native-community/cli-platform-android': 13.6.8 - '@react-native-community/cli-platform-apple': 13.6.8 - '@react-native-community/cli-platform-ios': 13.6.8 - '@react-native-community/cli-tools': 13.6.8 + '@react-native-community/cli-config': 13.6.9 + '@react-native-community/cli-platform-android': 13.6.9 + '@react-native-community/cli-platform-apple': 13.6.9 + '@react-native-community/cli-platform-ios': 13.6.9 + '@react-native-community/cli-tools': 13.6.9 chalk: 4.1.2 command-exists: 1.2.9 deepmerge: 4.3.1 @@ -5564,21 +6400,21 @@ packages: - encoding dev: false - /@react-native-community/cli-hermes@13.6.8: - resolution: {integrity: sha512-lZi/OBFuZUj5cLK94oEgtrtmxGoqeYVRcnHXl/R5c4put9PDl+qH2bEMlGZkFiw57ae3UZKr3TMk+1s4jh3FYQ==} + /@react-native-community/cli-hermes@13.6.9: + resolution: {integrity: sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA==} dependencies: - '@react-native-community/cli-platform-android': 13.6.8 - '@react-native-community/cli-tools': 13.6.8 + '@react-native-community/cli-platform-android': 13.6.9 + '@react-native-community/cli-tools': 13.6.9 chalk: 4.1.2 hermes-profile-transformer: 0.0.6 transitivePeerDependencies: - encoding dev: false - /@react-native-community/cli-platform-android@13.6.8: - resolution: {integrity: sha512-vWrqeLRRTwp2kO33nbrAgbYn8HR2c2CpIfyVJY9Ckk7HGUSwDyxdcSu7YBvt2ShdfLZH0HctWFNXsgGrfg6BDw==} + /@react-native-community/cli-platform-android@13.6.9: + resolution: {integrity: sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw==} dependencies: - '@react-native-community/cli-tools': 13.6.8 + '@react-native-community/cli-tools': 13.6.9 chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 @@ -5588,10 +6424,10 @@ packages: - encoding dev: false - /@react-native-community/cli-platform-apple@13.6.8: - resolution: {integrity: sha512-1JPohnlXPqU44zns3ALEzIbH2cKRw6JtEDJERgLuEUbs2r2NeJgqDbKyZ7fTTO8o+pegDnn6+Rr7qGVVOuUzzg==} + /@react-native-community/cli-platform-apple@13.6.9: + resolution: {integrity: sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA==} dependencies: - '@react-native-community/cli-tools': 13.6.8 + '@react-native-community/cli-tools': 13.6.9 chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 @@ -5601,26 +6437,26 @@ packages: - encoding dev: false - /@react-native-community/cli-platform-ios@13.6.8: - resolution: {integrity: sha512-/IIcIRM8qaoD7iZqsvtf6Qq1AwtChWYfB9sTn3mTiolZ5Zd5bXH37g+6liPfAICRkj2Ptq3iXmjrDVUQAxrOXw==} + /@react-native-community/cli-platform-ios@13.6.9: + resolution: {integrity: sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw==} dependencies: - '@react-native-community/cli-platform-apple': 13.6.8 + '@react-native-community/cli-platform-apple': 13.6.9 transitivePeerDependencies: - encoding dev: false - /@react-native-community/cli-server-api@13.6.8: - resolution: {integrity: sha512-Lx664oWTzpVfbKUTy+3GIX7e+Mt5Zn+zdkM4ehllNdik/lbB3tM9Nrg8PSvOfI+tTXs2w55+nIydLfH+0FqJVg==} + /@react-native-community/cli-server-api@13.6.9: + resolution: {integrity: sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug==} dependencies: - '@react-native-community/cli-debugger-ui': 13.6.8 - '@react-native-community/cli-tools': 13.6.8 + '@react-native-community/cli-debugger-ui': 13.6.9 + '@react-native-community/cli-tools': 13.6.9 compression: 1.7.4 connect: 3.7.0 errorhandler: 1.5.1 nocache: 3.0.4 pretty-format: 26.6.2 serve-static: 1.15.0 - ws: 6.2.2 + ws: 6.2.3 transitivePeerDependencies: - bufferutil - encoding @@ -5628,8 +6464,8 @@ packages: - utf-8-validate dev: false - /@react-native-community/cli-tools@13.6.8: - resolution: {integrity: sha512-1MYlae9EkbjC7DBYOGMH5xF9yDoeNYUKgEdDjL6WAUBoF2gtwiZPM6igLKi/+dhb5sCtC7fiLrLi0Oevdf+RmQ==} + /@react-native-community/cli-tools@13.6.9: + resolution: {integrity: sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ==} dependencies: appdirsjs: 1.2.7 chalk: 4.1.2 @@ -5646,25 +6482,25 @@ packages: - encoding dev: false - /@react-native-community/cli-types@13.6.8: - resolution: {integrity: sha512-C4mVByy0i+/NPuPhdMLBR7ubEVkjVS1VwoQu/BoG1crJFNE+167QXAzH01eFbXndsjZaMWmD4Gerx7TYc6lHfA==} + /@react-native-community/cli-types@13.6.9: + resolution: {integrity: sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w==} dependencies: - joi: 17.13.1 + joi: 17.13.3 dev: false - /@react-native-community/cli@13.6.8: - resolution: {integrity: sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ==} + /@react-native-community/cli@13.6.9: + resolution: {integrity: sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ==} engines: {node: '>=18'} hasBin: true dependencies: - '@react-native-community/cli-clean': 13.6.8 - '@react-native-community/cli-config': 13.6.8 - '@react-native-community/cli-debugger-ui': 13.6.8 - '@react-native-community/cli-doctor': 13.6.8 - '@react-native-community/cli-hermes': 13.6.8 - '@react-native-community/cli-server-api': 13.6.8 - '@react-native-community/cli-tools': 13.6.8 - '@react-native-community/cli-types': 13.6.8 + '@react-native-community/cli-clean': 13.6.9 + '@react-native-community/cli-config': 13.6.9 + '@react-native-community/cli-debugger-ui': 13.6.9 + '@react-native-community/cli-doctor': 13.6.9 + '@react-native-community/cli-hermes': 13.6.9 + '@react-native-community/cli-server-api': 13.6.9 + '@react-native-community/cli-tools': 13.6.9 + '@react-native-community/cli-types': 13.6.9 chalk: 4.1.2 commander: 9.5.0 deepmerge: 4.3.1 @@ -5681,23 +6517,23 @@ packages: - utf-8-validate dev: false - /@react-native/assets-registry@0.74.84: - resolution: {integrity: sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ==} + /@react-native/assets-registry@0.74.85: + resolution: {integrity: sha512-59YmIQxfGDw4aP9S/nAM+sjSFdW8fUP6fsqczCcXgL2YVEjyER9XCaUT0J1K+PdHep8pi05KUgIKUds8P3jbmA==} engines: {node: '>=18'} dev: false - /@react-native/babel-plugin-codegen@0.74.84(@babel/preset-env@7.24.7): - resolution: {integrity: sha512-UR4uiii5szIJA84mSC6GJOfYKDq7/ThyetOQT62+BBcyGeHVtHlNLNRzgaMeLqIQaT8Fq4pccMI+7QqLOMXzdw==} + /@react-native/babel-plugin-codegen@0.74.85(@babel/preset-env@7.24.7): + resolution: {integrity: sha512-48TSDclRB5OMXiImiJkLxyCfRyLsqkCgI8buugCZzvXcYslfV7gCvcyFyQldtcOmerV+CK4RAj7QS4hmB5Mr8Q==} engines: {node: '>=18'} dependencies: - '@react-native/codegen': 0.74.84(@babel/preset-env@7.24.7) + '@react-native/codegen': 0.74.85(@babel/preset-env@7.24.7) transitivePeerDependencies: - '@babel/preset-env' - supports-color dev: false - /@react-native/babel-preset@0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7): - resolution: {integrity: sha512-WUfu6Y4aGuVdocQZvx33BJiQWFH6kRCHYbZfBn2psgFrSRLgQWEQrDCxqPFObNAVSayM0rNhp2FvI5K/Eyeqlg==} + /@react-native/babel-preset@0.74.85(@babel/core@7.24.7)(@babel/preset-env@7.24.7): + resolution: {integrity: sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' @@ -5742,7 +6578,7 @@ packages: '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) '@babel/template': 7.24.7 - '@react-native/babel-plugin-codegen': 0.74.84(@babel/preset-env@7.24.7) + '@react-native/babel-plugin-codegen': 0.74.85(@babel/preset-env@7.24.7) babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.24.7) react-refresh: 0.14.2 transitivePeerDependencies: @@ -5750,8 +6586,8 @@ packages: - supports-color dev: false - /@react-native/codegen@0.74.84(@babel/preset-env@7.24.7): - resolution: {integrity: sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ==} + /@react-native/codegen@0.74.85(@babel/preset-env@7.24.7): + resolution: {integrity: sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q==} engines: {node: '>=18'} peerDependencies: '@babel/preset-env': ^7.1.6 @@ -5768,14 +6604,14 @@ packages: - supports-color dev: false - /@react-native/community-cli-plugin@0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7): - resolution: {integrity: sha512-GBKE+1sUh86fS2XXV46gMCNHMc1KetshMbYJ0AhDhldpaILZHqRBX50mdVsiYVvkzp4QjM0nmYqefuJ9NVwicQ==} + /@react-native/community-cli-plugin@0.74.85(@babel/core@7.24.7)(@babel/preset-env@7.24.7): + resolution: {integrity: sha512-ODzND33eA2owAY3g9jgCdqB+BjAh8qJ7dvmSotXgrgDYr3MJMpd8gvHTIPe2fg4Kab+wk8uipRhrE0i0RYMwtQ==} engines: {node: '>=18'} dependencies: - '@react-native-community/cli-server-api': 13.6.8 - '@react-native-community/cli-tools': 13.6.8 - '@react-native/dev-middleware': 0.74.84 - '@react-native/metro-babel-transformer': 0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7) + '@react-native-community/cli-server-api': 13.6.9 + '@react-native-community/cli-tools': 13.6.9 + '@react-native/dev-middleware': 0.74.85 + '@react-native/metro-babel-transformer': 0.74.85(@babel/core@7.24.7)(@babel/preset-env@7.24.7) chalk: 4.1.2 execa: 5.1.1 metro: 0.80.9 @@ -5793,17 +6629,17 @@ packages: - utf-8-validate dev: false - /@react-native/debugger-frontend@0.74.84: - resolution: {integrity: sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A==} + /@react-native/debugger-frontend@0.74.85: + resolution: {integrity: sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ==} engines: {node: '>=18'} dev: false - /@react-native/dev-middleware@0.74.84: - resolution: {integrity: sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ==} + /@react-native/dev-middleware@0.74.85: + resolution: {integrity: sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w==} engines: {node: '>=18'} dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.74.84 + '@react-native/debugger-frontend': 0.74.85 '@rnx-kit/chromium-edge-launcher': 1.0.0 chrome-launcher: 0.15.2 connect: 3.7.0 @@ -5814,7 +6650,7 @@ packages: selfsigned: 2.4.1 serve-static: 1.15.0 temp-dir: 2.0.0 - ws: 6.2.2 + ws: 6.2.3 transitivePeerDependencies: - bufferutil - encoding @@ -5822,24 +6658,24 @@ packages: - utf-8-validate dev: false - /@react-native/gradle-plugin@0.74.84: - resolution: {integrity: sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg==} + /@react-native/gradle-plugin@0.74.85: + resolution: {integrity: sha512-1VQSLukJzaVMn1MYcs8Weo1nUW8xCas2XU1KuoV7OJPk6xPnEBFJmapmEGP5mWeEy7kcTXJmddEgy1wwW0tcig==} engines: {node: '>=18'} dev: false - /@react-native/js-polyfills@0.74.84: - resolution: {integrity: sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ==} + /@react-native/js-polyfills@0.74.85: + resolution: {integrity: sha512-gp4Rg9le3lVZeW7Cie6qLfekvRKZuhJ3LKgi1SFB4N154z1wIclypAJXVXgWBsy8JKJfTwRI+sffC4qZDlvzrg==} engines: {node: '>=18'} dev: false - /@react-native/metro-babel-transformer@0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7): - resolution: {integrity: sha512-YtVGq7jkgyUECv5yt4BOFbOXyW4ddUn8+dnwGGpJKdfhXYL5o5++AxNdE+2x+SZdkj3JUVekGKPwRabFECABaw==} + /@react-native/metro-babel-transformer@0.74.85(@babel/core@7.24.7)(@babel/preset-env@7.24.7): + resolution: {integrity: sha512-JIrXqEwhTvWPtGArgMptIPGstMdXQIkwSjKVYt+7VC4a9Pw1GurIWanIJheEW6ZuCVvTc0VZkwglFz9JVjzDjA==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' dependencies: '@babel/core': 7.24.7 - '@react-native/babel-preset': 0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7) + '@react-native/babel-preset': 0.74.85(@babel/core@7.24.7)(@babel/preset-env@7.24.7) hermes-parser: 0.19.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -5847,12 +6683,12 @@ packages: - supports-color dev: false - /@react-native/normalize-colors@0.74.84: - resolution: {integrity: sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A==} + /@react-native/normalize-colors@0.74.85: + resolution: {integrity: sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw==} dev: false - /@react-native/virtualized-lists@0.74.84(@types/react@18.3.3)(react-native@0.74.2)(react@18.3.1): - resolution: {integrity: sha512-XcV+qdqt2WihaY4iRm/M1FdSy+18lecU9mRXNmy9YK8g9Th/8XbNtmmKI0qWBx3KxyuXMH/zd0ps05YTrX16kw==} + /@react-native/virtualized-lists@0.74.85(@types/react@18.3.3)(react-native@0.74.3)(react@18.3.1): + resolution: {integrity: sha512-jx2Zw0qlZteoQ+0KxRc7s4drsljLBEP534FaNZ950e9+CN9nVkLsV6rigcTjDR8wjKMSBWhKf0C0C3egYz7Ehg==} engines: {node: '>=18'} peerDependencies: '@types/react': ^18.2.6 @@ -5866,7 +6702,7 @@ packages: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1) + react-native: 0.74.3(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1) dev: false /@react-stately/collections@3.10.7(react@18.3.1): @@ -6239,8 +7075,8 @@ packages: react: 18.3.1 dev: false - /@remix-run/router@1.16.1: - resolution: {integrity: sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==} + /@remix-run/router@1.17.1: + resolution: {integrity: sha512-mCOMec4BKd6BRGBZeSnGiIgwsbLGp3yhVqAD8H+PxiRNEHgDpZb8J1TnrSDlg97t0ySKMQJTHCWBCmBpSmkF6Q==} engines: {node: '>=14.0.0'} dev: false @@ -6248,7 +7084,7 @@ packages: resolution: {integrity: sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==} engines: {node: '>=14.15'} dependencies: - '@types/node': 18.19.34 + '@types/node': 18.19.39 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -6286,128 +7122,128 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.18.0: - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + /@rollup/rollup-android-arm-eabi@4.18.1: + resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.18.0: - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + /@rollup/rollup-android-arm64@4.18.1: + resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.18.0: - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + /@rollup/rollup-darwin-arm64@4.18.1: + resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.18.0: - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + /@rollup/rollup-darwin-x64@4.18.1: + resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.18.0: - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + /@rollup/rollup-linux-arm-gnueabihf@4.18.1: + resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.18.0: - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + /@rollup/rollup-linux-arm-musleabihf@4.18.1: + resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.18.0: - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + /@rollup/rollup-linux-arm64-gnu@4.18.1: + resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.18.0: - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + /@rollup/rollup-linux-arm64-musl@4.18.1: + resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.18.0: - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + /@rollup/rollup-linux-powerpc64le-gnu@4.18.1: + resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.18.0: - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + /@rollup/rollup-linux-riscv64-gnu@4.18.1: + resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.18.0: - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + /@rollup/rollup-linux-s390x-gnu@4.18.1: + resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.18.0: - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + /@rollup/rollup-linux-x64-gnu@4.18.1: + resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.18.0: - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + /@rollup/rollup-linux-x64-musl@4.18.1: + resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.18.0: - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + /@rollup/rollup-win32-arm64-msvc@4.18.1: + resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.18.0: - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + /@rollup/rollup-win32-ia32-msvc@4.18.1: + resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.18.0: - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + /@rollup/rollup-win32-x64-msvc@4.18.1: + resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} cpu: [x64] os: [win32] requiresBuild: true @@ -6429,7 +7265,7 @@ packages: /@safe-global/safe-apps-sdk@8.1.0(typescript@5.4.5)(zod@3.23.8): resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} dependencies: - '@safe-global/safe-gateway-typescript-sdk': 3.21.2 + '@safe-global/safe-gateway-typescript-sdk': 3.21.8 viem: 1.21.4(typescript@5.4.5)(zod@3.23.8) transitivePeerDependencies: - bufferutil @@ -6438,24 +7274,20 @@ packages: - zod dev: false - /@safe-global/safe-gateway-typescript-sdk@3.21.2: - resolution: {integrity: sha512-N9Y2CKPBVbc8FbOKzqepy8TJUY2VILX7bmxV4ruByLJvR9PBnGvGfnOhw975cDn6PmSziXL0RaUWHpSW23rsng==} + /@safe-global/safe-gateway-typescript-sdk@3.21.8: + resolution: {integrity: sha512-n/fYgiqbuzAQuK0bgny6GBYvb585ETxKURa5Kb9hBV3fa47SvJo/dpGq275fJUn0e3Hh1YqETiLGj4HVJjHiTA==} engines: {node: '>=16'} dev: false - /@scure/base@1.1.6: - resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} - /@scure/base@1.1.7: resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} - dev: false /@scure/bip32@1.3.2: resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} dependencies: '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 - '@scure/base': 1.1.6 + '@scure/base': 1.1.7 /@scure/bip32@1.4.0: resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} @@ -6469,7 +7301,7 @@ packages: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: '@noble/hashes': 1.3.2 - '@scure/base': 1.1.6 + '@scure/base': 1.1.7 /@scure/bip39@1.3.0: resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} @@ -6481,9 +7313,9 @@ packages: /@scure/btc-signer@1.3.2: resolution: {integrity: sha512-BmcQHvxaaShKwgbFC0vDk0xzqbMhNtNmgXm6u7cz07FNtGsVItUuHow6NbgHmc+oJSBZJRym5dz8+Uu0JoEJhQ==} dependencies: - '@noble/curves': 1.4.0 + '@noble/curves': 1.4.2 '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 + '@scure/base': 1.1.7 micro-packed: 0.6.3 dev: false @@ -6734,6 +7566,37 @@ packages: resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} dev: false + /@solana/buffer-layout@4.0.1: + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + dependencies: + buffer: 6.0.3 + dev: false + + /@solana/web3.js@1.92.1: + resolution: {integrity: sha512-72hytgOHfJLbvKT0+HRuFUhxxZpCnlo4zFDt37UHPel1DJbgqGOWo3xUf3VEPRWBvSRv0EH15g8MGatdj1PO9g==} + dependencies: + '@babel/runtime': 7.24.7 + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.1 + node-fetch: 2.7.0 + rpc-websockets: 7.11.2 + superstruct: 1.0.4 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + /@spruceid/siwe-parser@2.1.2: resolution: {integrity: sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ==} dependencies: @@ -6859,10 +7722,10 @@ packages: '@stablelib/wipe': 1.0.1 dev: false - /@storybook/addon-actions@7.6.19: - resolution: {integrity: sha512-ATLrA5QKFJt7tIAScRHz5T3eBQ+RG3jaZk08L7gChvyQZhei8knWwePElZ7GaWbCr9BgznQp1lQUUXq/UUblAQ==} + /@storybook/addon-actions@7.6.20: + resolution: {integrity: sha512-c/GkEQ2U9BC/Ew/IMdh+zvsh4N6y6n7Zsn2GIhJgcu9YEAa5aF2a9/pNgEGBMOABH959XE8DAOMERw/5qiLR8g==} dependencies: - '@storybook/core-events': 7.6.19 + '@storybook/core-events': 7.6.20 '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 @@ -6870,18 +7733,18 @@ packages: uuid: 9.0.1 dev: true - /@storybook/addon-backgrounds@7.6.19: - resolution: {integrity: sha512-Nu3LAZODRSV2e5bOroKm/Jp6BIFzwu/nJxD5OvLWkkwNCh+vDXUFbbaVrZf5xRL+fHd9iLFPtWbJQpF/w7UsCw==} + /@storybook/addon-backgrounds@7.6.20: + resolution: {integrity: sha512-a7ukoaXT42vpKsMxkseIeO3GqL0Zst2IxpCTq5dSlXiADrcemSF/8/oNpNW9C4L6F1Zdt+WDtECXslEm017FvQ==} dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 dev: true - /@storybook/addon-controls@7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-cl6PCNEwihDjuWIUsKTyDNKk+/IE4J3oMbSY5AZV/9Z0jJbpMV2shVm5DMZm5LhCCVcu5obWcxCIa4FMIMJAMQ==} + /@storybook/addon-controls@7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-06ZT5Ce1sZW52B0s6XuokwjkKO9GqHlTUHvuflvd8wifxKlCmRvNUxjBvwh+ccGJ49ZS73LbMSLFgtmBEkCxbg==} dependencies: - '@storybook/blocks': 7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@storybook/blocks': 7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) lodash: 4.17.21 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -6893,27 +7756,27 @@ packages: - supports-color dev: true - /@storybook/addon-docs@7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-nv+9SR/NOtM8Od2esOXHcg0NQT8Pk8BMUyGwZu5Q3MLI4JxNVEG65dY0IP2j6Knc4UtlvQTpM0f7m5xp4seHjQ==} + /@storybook/addon-docs@7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-XNfYRhbxH5JP7B9Lh4W06PtMefNXkfpV39Gaoih5HuqngV3eoSL4RikZYOMkvxRGQ738xc6axySU3+JKcP1OZg==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: '@jest/transform': 29.7.0 '@mdx-js/react': 2.3.0(react@18.3.1) - '@storybook/blocks': 7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@storybook/client-logger': 7.6.19 - '@storybook/components': 7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@storybook/csf-plugin': 7.6.19 - '@storybook/csf-tools': 7.6.19 + '@storybook/blocks': 7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@storybook/client-logger': 7.6.20 + '@storybook/components': 7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@storybook/csf-plugin': 7.6.20 + '@storybook/csf-tools': 7.6.20 '@storybook/global': 5.0.0 '@storybook/mdx2-csf': 1.1.0 - '@storybook/node-logger': 7.6.19 - '@storybook/postinstall': 7.6.19 - '@storybook/preview-api': 7.6.19 - '@storybook/react-dom-shim': 7.6.19(react-dom@18.3.1)(react@18.3.1) - '@storybook/theming': 7.6.19(react-dom@18.3.1)(react@18.3.1) - '@storybook/types': 7.6.19 + '@storybook/node-logger': 7.6.20 + '@storybook/postinstall': 7.6.20 + '@storybook/preview-api': 7.6.20 + '@storybook/react-dom-shim': 7.6.20(react-dom@18.3.1)(react@18.3.1) + '@storybook/theming': 7.6.20(react-dom@18.3.1)(react@18.3.1) + '@storybook/types': 7.6.20 fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6927,25 +7790,25 @@ packages: - supports-color dev: true - /@storybook/addon-essentials@7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-SC33ZEQ5YaOt9wDkrdZmwQgqPWo9om/gqnyif06eug3SwrTe9JjO5iq1PIBfQodLD9MAxr9cwBvO0NG505oszQ==} + /@storybook/addon-essentials@7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-hCupSOiJDeOxJKZSgH0x5Mb2Xqii6mps21g5hpxac1XjhQtmGflShxi/xOHhK3sNqrbgTSbScfpUP3hUlZO/2Q==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@storybook/addon-actions': 7.6.19 - '@storybook/addon-backgrounds': 7.6.19 - '@storybook/addon-controls': 7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@storybook/addon-docs': 7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@storybook/addon-highlight': 7.6.19 - '@storybook/addon-measure': 7.6.19 - '@storybook/addon-outline': 7.6.19 - '@storybook/addon-toolbars': 7.6.19 - '@storybook/addon-viewport': 7.6.19 - '@storybook/core-common': 7.6.19 - '@storybook/manager-api': 7.6.19(react-dom@18.3.1)(react@18.3.1) - '@storybook/node-logger': 7.6.19 - '@storybook/preview-api': 7.6.19 + '@storybook/addon-actions': 7.6.20 + '@storybook/addon-backgrounds': 7.6.20 + '@storybook/addon-controls': 7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@storybook/addon-docs': 7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@storybook/addon-highlight': 7.6.20 + '@storybook/addon-measure': 7.6.20 + '@storybook/addon-outline': 7.6.20 + '@storybook/addon-toolbars': 7.6.20 + '@storybook/addon-viewport': 7.6.20 + '@storybook/core-common': 7.6.20 + '@storybook/manager-api': 7.6.20(react-dom@18.3.1)(react@18.3.1) + '@storybook/node-logger': 7.6.20 + '@storybook/preview-api': 7.6.20 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) ts-dedent: 2.2.0 @@ -6956,38 +7819,38 @@ packages: - supports-color dev: true - /@storybook/addon-highlight@7.6.19: - resolution: {integrity: sha512-/pApl0oiVU1CQ8xETRNDLDthMBjeTmvFnTRq8RJ9m0JYTrSsoyHDmj9zS4K1k9gReqijE7brslhP8d2tblBpNw==} + /@storybook/addon-highlight@7.6.20: + resolution: {integrity: sha512-7/x7xFdFyqCki5Dm3uBePldUs9l98/WxJ7rTHQuYqlX7kASwyN5iXPzuhmMRUhlMm/6G6xXtLabIpzwf1sFurA==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/addon-interactions@7.6.19: - resolution: {integrity: sha512-lMQDu6JT2LXDWcRnIGvrKRk/W+67zOtUNpDKwoVuvM5eHVJcza5SPV6v8yXDLCHLOt7RZ15h6LT2uXabfKpcww==} + /@storybook/addon-interactions@7.6.20: + resolution: {integrity: sha512-uH+OIxLtvfnnmdN3Uf8MwzfEFYtaqSA6Hir6QNPc643se0RymM8mULN0rzRyvspwd6OagWdtOxsws3aHk02KTA==} dependencies: '@storybook/global': 5.0.0 - '@storybook/types': 7.6.19 + '@storybook/types': 7.6.20 jest-mock: 27.5.1 polished: 4.3.1 ts-dedent: 2.2.0 dev: true - /@storybook/addon-links@7.6.19(react@18.3.1): - resolution: {integrity: sha512-qMIFfcsMf4olxhYUHUV2ZJhxphh6Xpf1DMd0lxKqAibfxl/sX1m0rJkyiqWSBxbCmAy/pwdgqEOJ1lpDUsJ33w==} + /@storybook/addon-links@7.6.20(react@18.3.1): + resolution: {integrity: sha512-iomSnBD90CA4MinesYiJkFX2kb3P1Psd/a1Y0ghlFEsHD4uMId9iT6sx2s16DYMja0SlPkrbWYnGukqaCjZpRw==} peerDependencies: react: ^18.2.0 peerDependenciesMeta: react: optional: true dependencies: - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 react: 18.3.1 ts-dedent: 2.2.0 dev: true - /@storybook/addon-measure@7.6.19: - resolution: {integrity: sha512-n+cfhVXXouBv9oQr3a77vvip5dTznaNoBDWMafP2ohauc8jBlAxeBwCjk5r3pyThMRIFCTG/ypZrhiJcSJT3bw==} + /@storybook/addon-measure@7.6.20: + resolution: {integrity: sha512-i2Iq08bGfI7gZbG6Lb8uF/L287tnaGUR+2KFEmdBjH6+kgjWLiwfpanoPQpy4drm23ar0gUjX+L3Ri03VI5/Xg==} dependencies: '@storybook/global': 5.0.0 tiny-invariant: 1.3.3 @@ -6999,7 +7862,7 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@storybook/telemetry': 7.6.19 + '@storybook/telemetry': 7.6.20 react: 18.3.1 react-confetti: 6.1.0(react@18.3.1) react-dom: 18.3.1(react@18.3.1) @@ -7008,19 +7871,19 @@ packages: - supports-color dev: true - /@storybook/addon-outline@7.6.19: - resolution: {integrity: sha512-Tt4MrfjK5j/Mdh8nJ8ccVyh78Dy7aiEPxO31YVvr5XUkge0pDi1PX328mHRDPur0i56NM8ssVbekWBZr+9MxlA==} + /@storybook/addon-outline@7.6.20: + resolution: {integrity: sha512-TdsIQZf/TcDsGoZ1XpO+9nBc4OKqcMIzY4SrI8Wj9dzyFLQ37s08gnZr9POci8AEv62NTUOVavsxcafllkzqDQ==} dependencies: '@storybook/global': 5.0.0 ts-dedent: 2.2.0 dev: true - /@storybook/addon-toolbars@7.6.19: - resolution: {integrity: sha512-+qGbPP2Vo/HoPiS4EJopZ127HGculCV74Hkz6ot7ob6AkYdA1yLMPzWns/ZXNIWm6ab3jV+iq+mQCM/i1qJzvA==} + /@storybook/addon-toolbars@7.6.20: + resolution: {integrity: sha512-5Btg4i8ffWTDHsU72cqxC8nIv9N3E3ObJAc6k0llrmPBG/ybh3jxmRfs8fNm44LlEXaZ5qrK/petsXX3UbpIFg==} dev: true - /@storybook/addon-viewport@7.6.19: - resolution: {integrity: sha512-OQQtJ2kYwImbvE9QiC3I3yR0O0EBgNjq+XSaSS4ixJrvUyesfuB7Lm7RkubhEEiP4yANi9OlbzsqZelmPOnk6w==} + /@storybook/addon-viewport@7.6.20: + resolution: {integrity: sha512-i8mIw8BjLWAVHEQsOTE6UPuEGQvJDpsu1XZnOCkpfTfPMz73m+3td/PmLG7mMT2wPnLu9IZncKLCKTAZRbt/YQ==} dependencies: memoizerific: 1.11.3 dev: true @@ -7036,24 +7899,24 @@ packages: - react-dom dev: true - /@storybook/blocks@7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-/c/bVQRmyRPoviJhPrFdLfubRcrnZWTwkjxsCvrOTJ/UDOyEl0t/H8yY1mGq7KWWTdbIznnZWhAIofHnH4/Esw==} + /@storybook/blocks@7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-xADKGEOJWkG0UD5jbY4mBXRlmj2C+CIupDL0/hpzvLvwobxBMFPKZIkcZIMvGvVnI/Ui+tJxQxLSuJ5QsPthUw==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@storybook/channels': 7.6.19 - '@storybook/client-logger': 7.6.19 - '@storybook/components': 7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@storybook/core-events': 7.6.19 - '@storybook/csf': 0.1.8 - '@storybook/docs-tools': 7.6.19 + '@storybook/channels': 7.6.20 + '@storybook/client-logger': 7.6.20 + '@storybook/components': 7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@storybook/core-events': 7.6.20 + '@storybook/csf': 0.1.11 + '@storybook/docs-tools': 7.6.20 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.6.19(react-dom@18.3.1)(react@18.3.1) - '@storybook/preview-api': 7.6.19 - '@storybook/theming': 7.6.19(react-dom@18.3.1)(react@18.3.1) - '@storybook/types': 7.6.19 - '@types/lodash': 4.17.5 + '@storybook/manager-api': 7.6.20(react-dom@18.3.1)(react@18.3.1) + '@storybook/preview-api': 7.6.20 + '@storybook/theming': 7.6.20(react-dom@18.3.1)(react@18.3.1) + '@storybook/types': 7.6.20 + '@types/lodash': 4.17.6 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -7074,13 +7937,13 @@ packages: - supports-color dev: true - /@storybook/builder-manager@7.6.19: - resolution: {integrity: sha512-Dt5OLh97xeWh4h2mk9uG0SbCxBKHPhIiHLHAKEIDzIZBdwUhuyncVNDPHW2NlXM+S7U0/iKs2tw05waqh2lHvg==} + /@storybook/builder-manager@7.6.20: + resolution: {integrity: sha512-e2GzpjLaw6CM/XSmc4qJRzBF8GOoOyotyu3JrSPTYOt4RD8kjUsK4QlismQM1DQRu8i39aIexxmRbiJyD74xzQ==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.6.19 - '@storybook/manager': 7.6.19 - '@storybook/node-logger': 7.6.19 + '@storybook/core-common': 7.6.20 + '@storybook/manager': 7.6.20 + '@storybook/node-logger': 7.6.20 '@types/ejs': 3.1.5 '@types/find-cache-dir': 3.2.1 '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.20) @@ -7098,8 +7961,8 @@ packages: - supports-color dev: true - /@storybook/builder-vite@7.6.19(typescript@5.4.5)(vite@4.5.3): - resolution: {integrity: sha512-llYpfYCHQCD0nPy+5J+H67iKcOpBrexIFO13wXxHQyl27Z+1T2JJj4cHqZs5S3a2XLiwf4df44NBvvwV5cmJmQ==} + /@storybook/builder-vite@7.6.20(typescript@5.4.5)(vite@4.5.3): + resolution: {integrity: sha512-q3vf8heE7EaVYTWlm768ewaJ9lh6v/KfoPPeHxXxzSstg4ByP9kg4E1mrfAo/l6broE9E9zo3/Q4gsM/G/rw8Q==} peerDependencies: '@preact/preset-vite': '*' typescript: '>= 4.3.x' @@ -7113,14 +7976,14 @@ packages: vite-plugin-glimmerx: optional: true dependencies: - '@storybook/channels': 7.6.19 - '@storybook/client-logger': 7.6.19 - '@storybook/core-common': 7.6.19 - '@storybook/csf-plugin': 7.6.19 - '@storybook/node-logger': 7.6.19 - '@storybook/preview': 7.6.19 - '@storybook/preview-api': 7.6.19 - '@storybook/types': 7.6.19 + '@storybook/channels': 7.6.20 + '@storybook/client-logger': 7.6.20 + '@storybook/core-common': 7.6.20 + '@storybook/csf-plugin': 7.6.20 + '@storybook/node-logger': 7.6.20 + '@storybook/preview': 7.6.20 + '@storybook/preview-api': 7.6.20 + '@storybook/types': 7.6.20 '@types/find-cache-dir': 3.2.1 browser-assert: 1.2.1 es-module-lexer: 0.9.3 @@ -7130,7 +7993,7 @@ packages: magic-string: 0.30.10 rollup: 3.29.4 typescript: 5.4.5 - vite: 4.5.3(@types/node@20.14.2) + vite: 4.5.3(@types/node@20.14.10) transitivePeerDependencies: - encoding - supports-color @@ -7142,38 +8005,38 @@ packages: '@storybook/client-logger': 7.6.17 '@storybook/core-events': 7.6.17 '@storybook/global': 5.0.0 - qs: 6.12.1 + qs: 6.12.3 telejson: 7.2.0 tiny-invariant: 1.3.3 dev: true - /@storybook/channels@7.6.19: - resolution: {integrity: sha512-2JGh+i95GwjtjqWqhtEh15jM5ifwbRGmXeFqkY7dpdHH50EEWafYHr2mg3opK3heVDwg0rJ/VBptkmshloXuvA==} + /@storybook/channels@7.6.20: + resolution: {integrity: sha512-4hkgPSH6bJclB2OvLnkZOGZW1WptJs09mhQ6j6qLjgBZzL/ZdD6priWSd7iXrmPiN5TzUobkG4P4Dp7FjkiO7A==} dependencies: - '@storybook/client-logger': 7.6.19 - '@storybook/core-events': 7.6.19 + '@storybook/client-logger': 7.6.20 + '@storybook/core-events': 7.6.20 '@storybook/global': 5.0.0 - qs: 6.12.1 + qs: 6.12.3 telejson: 7.2.0 tiny-invariant: 1.3.3 dev: true - /@storybook/cli@7.6.19: - resolution: {integrity: sha512-7OVy7nPgkLfgivv6/dmvoyU6pKl9EzWFk+g9izyQHiM/jS8jOiEyn6akG8Ebj6k5pWslo5lgiXUSW+cEEZUnqQ==} + /@storybook/cli@7.6.20: + resolution: {integrity: sha512-ZlP+BJyqg7HlnXf7ypjG2CKMI/KVOn03jFIiClItE/jQfgR6kRFgtjRU7uajh427HHfjv9DRiur8nBzuO7vapA==} hasBin: true dependencies: '@babel/core': 7.24.7 '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/types': 7.24.7 '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 7.6.19 - '@storybook/core-common': 7.6.19 - '@storybook/core-events': 7.6.19 - '@storybook/core-server': 7.6.19 - '@storybook/csf-tools': 7.6.19 - '@storybook/node-logger': 7.6.19 - '@storybook/telemetry': 7.6.19 - '@storybook/types': 7.6.19 + '@storybook/codemod': 7.6.20 + '@storybook/core-common': 7.6.20 + '@storybook/core-events': 7.6.20 + '@storybook/core-server': 7.6.20 + '@storybook/csf-tools': 7.6.20 + '@storybook/node-logger': 7.6.20 + '@storybook/telemetry': 7.6.20 + '@storybook/types': 7.6.20 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 @@ -7215,28 +8078,28 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.6.19: - resolution: {integrity: sha512-oGzOxbmLmciSIfd5gsxDzPmX8DttWhoYdPKxjMuCuWLTO2TWpkCWp1FTUMWO72mm/6V/FswT/aqpJJBBvdZ3RQ==} + /@storybook/client-logger@7.6.20: + resolution: {integrity: sha512-NwG0VIJQCmKrSaN5GBDFyQgTAHLNishUPLW1NrzqTDNAhfZUoef64rPQlinbopa0H4OXmlB+QxbQIb3ubeXmSQ==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@8.1.7: - resolution: {integrity: sha512-Cmdt9qpyIQZcVR3y16464vrO06YFaWice+wQZ1OIror8XBqkpUxgZldQ95uTed6Wz9igf0PEYyaV8jJrGcHMrA==} + /@storybook/client-logger@8.1.11: + resolution: {integrity: sha512-DVMh2usz3yYmlqCLCiCKy5fT8/UR9aTh+gSqwyNFkGZrIM4otC5A8eMXajXifzotQLT5SaOEnM3WzHwmpvMIEA==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/codemod@7.6.19: - resolution: {integrity: sha512-bmHE0iEEgWZ65dXCmasd+GreChjPiWkXu2FEa0cJmNz/PqY12GsXGls4ke1TkNTj4gdSZnbtJxbclPZZnib2tQ==} + /@storybook/codemod@7.6.20: + resolution: {integrity: sha512-8vmSsksO4XukNw0TmqylPmk7PxnfNfE21YsxFa7mnEBmEKQcZCQsNil4ZgWfG0IzdhTfhglAN4r++Ew0WE+PYA==} dependencies: '@babel/core': 7.24.7 '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 - '@storybook/csf-tools': 7.6.19 - '@storybook/node-logger': 7.6.19 - '@storybook/types': 7.6.19 + '@storybook/csf': 0.1.11 + '@storybook/csf-tools': 7.6.20 + '@storybook/node-logger': 7.6.20 + '@storybook/types': 7.6.20 '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 globby: 11.1.0 @@ -7248,19 +8111,19 @@ packages: - supports-color dev: true - /@storybook/components@7.6.19(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-8Zw/RQ4crzKkUR7ojxvRIj8vktKiBBO8Nq93qv4JfDqDWrcR7cro0hOlZgmZmrzbFunBBt6WlsNNO6nVP7R4Xw==} + /@storybook/components@7.6.20(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-0d8u4m558R+W5V+rseF/+e9JnMciADLXTpsILrG+TBhwECk0MctIWW18bkqkujdCm8kDZr5U2iM/5kS1Noy7Ug==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: '@radix-ui/react-select': 1.2.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@storybook/client-logger': 7.6.19 - '@storybook/csf': 0.1.8 + '@radix-ui/react-toolbar': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@storybook/client-logger': 7.6.20 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/theming': 7.6.19(react-dom@18.3.1)(react@18.3.1) - '@storybook/types': 7.6.19 + '@storybook/theming': 7.6.20(react-dom@18.3.1)(react@18.3.1) + '@storybook/types': 7.6.20 memoizerific: 1.11.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -7271,21 +8134,21 @@ packages: - '@types/react-dom' dev: true - /@storybook/core-client@7.6.19: - resolution: {integrity: sha512-F0V9nzcEnj6DIpnw2ilrxsV4d9ibyyQS+Wi2uQtXy+wCQQm9PeBVqrOywjXAY2F9pcoftXOaepfhp8jrxX4MXw==} + /@storybook/core-client@7.6.20: + resolution: {integrity: sha512-upQuQQinLmlOPKcT8yqXNtwIucZ4E4qegYZXH5HXRWoLAL6GQtW7sUVSIuFogdki8OXRncr/dz8OA+5yQyYS4w==} dependencies: - '@storybook/client-logger': 7.6.19 - '@storybook/preview-api': 7.6.19 + '@storybook/client-logger': 7.6.20 + '@storybook/preview-api': 7.6.20 dev: true - /@storybook/core-common@7.6.19: - resolution: {integrity: sha512-njwpGzFJrfbJr/AFxGP8KMrfPfxN85KOfSlxYnQwRm5Z0H1D/lT33LhEBf5m37gaGawHeG7KryxO6RvaioMt2Q==} + /@storybook/core-common@7.6.20: + resolution: {integrity: sha512-8H1zPWPjcmeD4HbDm4FDD0WLsfAKGVr566IZ4hG+h3iWVW57II9JW9MLBtiR2LPSd8u7o0kw64lwRGmtCO1qAw==} dependencies: - '@storybook/core-events': 7.6.19 - '@storybook/node-logger': 7.6.19 - '@storybook/types': 7.6.19 + '@storybook/core-events': 7.6.20 + '@storybook/node-logger': 7.6.20 + '@storybook/types': 7.6.20 '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.34 + '@types/node': 18.19.39 '@types/node-fetch': 2.6.11 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 @@ -7295,7 +8158,7 @@ packages: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.4.1 + glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 @@ -7315,32 +8178,32 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/core-events@7.6.19: - resolution: {integrity: sha512-K/W6Uvum0ocZSgjbi8hiotpe+wDEHDZlvN+KlPqdh9ae9xDK8aBNBq9IelCoqM+uKO1Zj+dDfSQds7CD781DJg==} + /@storybook/core-events@7.6.20: + resolution: {integrity: sha512-tlVDuVbDiNkvPDFAu+0ou3xBBYbx9zUURQz4G9fAq0ScgBOs/bpzcRrFb4mLpemUViBAd47tfZKdH4MAX45KVQ==} dependencies: ts-dedent: 2.2.0 dev: true - /@storybook/core-server@7.6.19: - resolution: {integrity: sha512-7mKL73Wv5R2bEl0kJ6QJ9bOu5YY53Idu24QgvTnUdNsQazp2yUONBNwHIrNDnNEXm8SfCi4Mc9o0mmNRMIoiRA==} + /@storybook/core-server@7.6.20: + resolution: {integrity: sha512-qC5BdbqqwMLTdCwMKZ1Hbc3+3AaxHYWLiJaXL9e8s8nJw89xV8c8l30QpbJOGvcDmsgY6UTtXYaJ96OsTr7MrA==} dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.6.19 - '@storybook/channels': 7.6.19 - '@storybook/core-common': 7.6.19 - '@storybook/core-events': 7.6.19 - '@storybook/csf': 0.1.8 - '@storybook/csf-tools': 7.6.19 + '@storybook/builder-manager': 7.6.20 + '@storybook/channels': 7.6.20 + '@storybook/core-common': 7.6.20 + '@storybook/core-events': 7.6.20 + '@storybook/csf': 0.1.11 + '@storybook/csf-tools': 7.6.20 '@storybook/docs-mdx': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/manager': 7.6.19 - '@storybook/node-logger': 7.6.19 - '@storybook/preview-api': 7.6.19 - '@storybook/telemetry': 7.6.19 - '@storybook/types': 7.6.19 + '@storybook/manager': 7.6.20 + '@storybook/node-logger': 7.6.20 + '@storybook/preview-api': 7.6.20 + '@storybook/telemetry': 7.6.20 + '@storybook/types': 7.6.20 '@types/detect-port': 1.3.5 - '@types/node': 18.19.34 + '@types/node': 18.19.39 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.5.8 better-opn: 3.0.2 @@ -7351,7 +8214,6 @@ packages: express: 4.19.2 fs-extra: 11.2.0 globby: 11.1.0 - ip: 2.0.1 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 @@ -7364,7 +8226,7 @@ packages: util: 0.12.5 util-deprecate: 1.0.2 watchpack: 2.4.1 - ws: 8.17.0 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding @@ -7372,24 +8234,24 @@ packages: - utf-8-validate dev: true - /@storybook/csf-plugin@7.6.19: - resolution: {integrity: sha512-yUP0xfJyR8e6fmCgKoEt4c1EvslF8dZ8wtwVLE5hnC3kfs7xt8RVDiKLB/9NhYjY3mD/oOesX60HqRXDgJQHwA==} + /@storybook/csf-plugin@7.6.20: + resolution: {integrity: sha512-dzBzq0dN+8WLDp6NxYS4G7BCe8+vDeDRBRjHmM0xb0uJ6xgQViL8SDplYVSGnk3bXE/1WmtvyRzQyTffBnaj9Q==} dependencies: - '@storybook/csf-tools': 7.6.19 - unplugin: 1.10.1 + '@storybook/csf-tools': 7.6.20 + unplugin: 1.11.0 transitivePeerDependencies: - supports-color dev: true - /@storybook/csf-tools@7.6.19: - resolution: {integrity: sha512-8Vzia3cHhDdGHuS3XKXJReCRxmfRq3vmTm/Te9yKZnPSAsC58CCKcMh8FNEFJ44vxYF9itKTkRutjGs+DprKLQ==} + /@storybook/csf-tools@7.6.20: + resolution: {integrity: sha512-rwcwzCsAYh/m/WYcxBiEtLpIW5OH1ingxNdF/rK9mtGWhJxXRDV8acPkFrF8rtFWIVKoOCXu5USJYmc3f2gdYQ==} dependencies: '@babel/generator': 7.24.7 '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 - '@storybook/types': 7.6.19 + '@storybook/csf': 0.1.11 + '@storybook/types': 7.6.20 fs-extra: 11.2.0 recast: 0.23.9 ts-dedent: 2.2.0 @@ -7397,8 +8259,8 @@ packages: - supports-color dev: true - /@storybook/csf@0.1.8: - resolution: {integrity: sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==} + /@storybook/csf@0.1.11: + resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} dependencies: type-fest: 2.19.0 dev: true @@ -7407,12 +8269,12 @@ packages: resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} dev: true - /@storybook/docs-tools@7.6.19: - resolution: {integrity: sha512-JuwV6wtm7Hb7Kb5ValChfxy4J7XngfrSQNpvwsDCSBNVcQUv2y843hvclpa26Ptfr/c7zpUX8r9FGSaMDy+2aQ==} + /@storybook/docs-tools@7.6.20: + resolution: {integrity: sha512-Bw2CcCKQ5xGLQgtexQsI1EGT6y5epoFzOINi0FSTGJ9Wm738nRp5LH3dLk1GZLlywIXcYwOEThb2pM+pZeRQxQ==} dependencies: - '@storybook/core-common': 7.6.19 - '@storybook/preview-api': 7.6.19 - '@storybook/types': 7.6.19 + '@storybook/core-common': 7.6.20 + '@storybook/preview-api': 7.6.20 + '@storybook/types': 7.6.20 '@types/doctrine': 0.0.3 assert: 2.1.0 doctrine: 3.0.0 @@ -7432,7 +8294,7 @@ packages: '@storybook/channels': 7.6.17 '@storybook/client-logger': 7.6.17 '@storybook/core-events': 7.6.17 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/router': 7.6.17 '@storybook/theming': 7.6.17(react-dom@18.3.1)(react@18.3.1) @@ -7448,17 +8310,17 @@ packages: - react-dom dev: true - /@storybook/manager-api@7.6.19(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-dVCx1Q+HZEA4U08XqYljiG88BeS3I3ahnPAQLZAeWQXQRkoc9G2jMgLNPKYPIqEtq7Xrn6SRlFMIofhwWrwZpg==} + /@storybook/manager-api@7.6.20(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-gOB3m8hO3gBs9cBoN57T7jU0wNKDh+hi06gLcyd2awARQlAlywnLnr3s1WH5knih6Aq+OpvGBRVKkGLOkaouCQ==} dependencies: - '@storybook/channels': 7.6.19 - '@storybook/client-logger': 7.6.19 - '@storybook/core-events': 7.6.19 - '@storybook/csf': 0.1.8 + '@storybook/channels': 7.6.20 + '@storybook/client-logger': 7.6.20 + '@storybook/core-events': 7.6.20 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/router': 7.6.19 - '@storybook/theming': 7.6.19(react-dom@18.3.1)(react@18.3.1) - '@storybook/types': 7.6.19 + '@storybook/router': 7.6.20 + '@storybook/theming': 7.6.20(react-dom@18.3.1)(react@18.3.1) + '@storybook/types': 7.6.20 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -7470,20 +8332,20 @@ packages: - react-dom dev: true - /@storybook/manager@7.6.19: - resolution: {integrity: sha512-fZWQcf59x4P0iiBhrL74PZrqKJAPuk9sWjP8BIkGbf8wTZtUunbY5Sv4225fOL4NLJbuX9/RYLUPoxQ3nucGHA==} + /@storybook/manager@7.6.20: + resolution: {integrity: sha512-0Cf6WN0t7yEG2DR29tN5j+i7H/TH5EfPppg9h9/KiQSoFHk+6KLoy2p5do94acFU+Ro4+zzxvdCGbcYGKuArpg==} dev: true /@storybook/mdx2-csf@1.1.0: resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} dev: true - /@storybook/node-logger@7.6.19: - resolution: {integrity: sha512-2g29QC44Zl1jKY37DmQ0/dO7+VSKnGgPI/x0mwVwQffypSapxH3rwLLT5Q5XLHeFyD+fhRu5w9Cj4vTGynJgpA==} + /@storybook/node-logger@7.6.20: + resolution: {integrity: sha512-l2i4qF1bscJkOplNffcRTsgQWYR7J51ewmizj5YrTM8BK6rslWT1RntgVJWB1RgPqvx6VsCz1gyP3yW1oKxvYw==} dev: true - /@storybook/postinstall@7.6.19: - resolution: {integrity: sha512-s6p1vpgMfn+QGDfCK2YNdyyWKidUgb3nGicB81FANRyzYqGB//QlJlghEc2LKCIQbGIZQiwP3l8PdZQmczEJRw==} + /@storybook/postinstall@7.6.20: + resolution: {integrity: sha512-AN4WPeNma2xC2/K/wP3I/GMbBUyeSGD3+86ZFFJFO1QmE/Zea6E+1aVlTd1iKHQUcNkZ9bZTrqkhPGVYx10pIw==} dev: true /@storybook/preview-api@7.6.17: @@ -7492,44 +8354,44 @@ packages: '@storybook/channels': 7.6.17 '@storybook/client-logger': 7.6.17 '@storybook/core-events': 7.6.17 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/types': 7.6.17 '@types/qs': 6.9.15 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.6.19: - resolution: {integrity: sha512-04hdMSQucroJT4dBjQzRd7ZwH2hij8yx2nm5qd4HYGkd1ORkvlH6GOLph4XewNJl5Um3xfzFQzBhvkqvG0WaCQ==} + /@storybook/preview-api@7.6.20: + resolution: {integrity: sha512-3ic2m9LDZEPwZk02wIhNc3n3rNvbi7VDKn52hDXfAxnL5EYm7yDICAkaWcVaTfblru2zn0EDJt7ROpthscTW5w==} dependencies: - '@storybook/channels': 7.6.19 - '@storybook/client-logger': 7.6.19 - '@storybook/core-events': 7.6.19 - '@storybook/csf': 0.1.8 + '@storybook/channels': 7.6.20 + '@storybook/client-logger': 7.6.20 + '@storybook/core-events': 7.6.20 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/types': 7.6.19 + '@storybook/types': 7.6.20 '@types/qs': 6.9.15 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true - /@storybook/preview@7.6.19: - resolution: {integrity: sha512-VqRPua2koOQTOteB+VvuKNXFYQ7IDEopaPpj9Nx+3kom+bqp0hWdAysWcm6CtKN2GGzBQm+5PvGibMNdawsaVg==} + /@storybook/preview@7.6.20: + resolution: {integrity: sha512-cxYlZ5uKbCYMHoFpgleZqqGWEnqHrk5m5fT8bYSsDsdQ+X5wPcwI/V+v8dxYAdQcMphZVIlTjo6Dno9WG8qmVA==} dev: true - /@storybook/react-dom-shim@7.6.19(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-tpt2AC1428d1gF4fetMkpkeFZ1WdDr1CLKoLbSInWQZ7i96nbnIMIA9raR/W8ai1bo55KSz9Bq5ytC/1Pac2qQ==} + /@storybook/react-dom-shim@7.6.20(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-SRvPDr9VWcS24ByQOVmbfZ655y5LvjXRlsF1I6Pr9YZybLfYbu3L5IicfEHT4A8lMdghzgbPFVQaJez46DTrkg==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -7538,8 +8400,8 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: true - /@storybook/react-vite@7.6.19(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(vite@4.5.3): - resolution: {integrity: sha512-TqKQvWi53vE0KbWrlNq61cTLpzfQ5QMZv42YiwEUhM7ysSmrrg6WjgfEnvEyiAuY8yyaRspPF6Y8pYTKGHM8Nw==} + /@storybook/react-vite@7.6.20(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(vite@4.5.3): + resolution: {integrity: sha512-uKuBFyGPZxpfR8vpDU/2OE9v7iTaxwL7ldd7k1swYd1rTSAPacTnEHSMl1R5AjUhkdI7gRmGN9q7qiVfK2XJCA==} engines: {node: '>=16'} peerDependencies: react: ^18.2.0 @@ -7548,14 +8410,14 @@ packages: dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.4.5)(vite@4.5.3) '@rollup/pluginutils': 5.1.0 - '@storybook/builder-vite': 7.6.19(typescript@5.4.5)(vite@4.5.3) - '@storybook/react': 7.6.19(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@storybook/builder-vite': 7.6.20(typescript@5.4.5)(vite@4.5.3) + '@storybook/react': 7.6.20(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) '@vitejs/plugin-react': 3.1.0(vite@4.5.3) magic-string: 0.30.10 react: 18.3.1 react-docgen: 7.0.3 react-dom: 18.3.1(react@18.3.1) - vite: 4.5.3(@types/node@20.14.2) + vite: 4.5.3(@types/node@20.14.10) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -7565,8 +8427,8 @@ packages: - vite-plugin-glimmerx dev: true - /@storybook/react@7.6.19(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): - resolution: {integrity: sha512-uKShAAp1/pRki1YnRjBveH/jAD3f8V0W2WP1LxTQqnKVFkl01mTbDZ/9ZIK6rVTSILUlmsk3fwsNyRbOKVgBGQ==} + /@storybook/react@7.6.20(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-i5tKNgUbTNwlqBWGwPveDhh9ktlS0wGtd97A1ZgKZc3vckLizunlAFc7PRC1O/CMq5PTyxbuUb4RvRD2jWKwDA==} engines: {node: '>=16.0.0'} peerDependencies: react: ^18.2.0 @@ -7576,16 +8438,16 @@ packages: typescript: optional: true dependencies: - '@storybook/client-logger': 7.6.19 - '@storybook/core-client': 7.6.19 - '@storybook/docs-tools': 7.6.19 + '@storybook/client-logger': 7.6.20 + '@storybook/core-client': 7.6.20 + '@storybook/docs-tools': 7.6.20 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.6.19 - '@storybook/react-dom-shim': 7.6.19(react-dom@18.3.1)(react@18.3.1) - '@storybook/types': 7.6.19 + '@storybook/preview-api': 7.6.20 + '@storybook/react-dom-shim': 7.6.20(react-dom@18.3.1)(react@18.3.1) + '@storybook/types': 7.6.20 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 - '@types/node': 18.19.34 + '@types/node': 18.19.39 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -7610,23 +8472,23 @@ packages: dependencies: '@storybook/client-logger': 7.6.17 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 dev: true - /@storybook/router@7.6.19: - resolution: {integrity: sha512-q2/AvY8rG0znFEfbg50OIhkS5yQ6OmyzdCdztoEsDDdsbq87YPmsDj7k8Op1EkTa2T5CB8XhBOCQDtcj7gUUtg==} + /@storybook/router@7.6.20: + resolution: {integrity: sha512-mCzsWe6GrH47Xb1++foL98Zdek7uM5GhaSlrI7blWVohGa0qIUYbfJngqR4ZsrXmJeeEvqowobh+jlxg3IJh+w==} dependencies: - '@storybook/client-logger': 7.6.19 + '@storybook/client-logger': 7.6.20 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 dev: true - /@storybook/telemetry@7.6.19: - resolution: {integrity: sha512-rA5xum4I36M57iiD3uzmW0MOdpl0vEpHWBSAa5hK0a0ALPeY9TgAsQlI/0dSyNYJ/K7aczEEN6d4qm1NC4u10A==} + /@storybook/telemetry@7.6.20: + resolution: {integrity: sha512-dmAOCWmOscYN6aMbhCMmszQjoycg7tUPRVy2kTaWg6qX10wtMrvEtBV29W4eMvqdsoRj5kcvoNbzRdYcWBUOHQ==} dependencies: - '@storybook/client-logger': 7.6.19 - '@storybook/core-common': 7.6.19 - '@storybook/csf-tools': 7.6.19 + '@storybook/client-logger': 7.6.20 + '@storybook/core-common': 7.6.20 + '@storybook/csf-tools': 7.6.20 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 @@ -7651,22 +8513,22 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: true - /@storybook/theming@7.6.19(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==} + /@storybook/theming@7.6.20(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-iT1pXHkSkd35JsCte6Qbanmprx5flkqtSHC6Gi6Umqoxlg9IjiLPmpHbaIXzoC06DSW93hPj5Zbi1lPlTvRC7Q==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) - '@storybook/client-logger': 7.6.19 + '@storybook/client-logger': 7.6.20 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: true - /@storybook/theming@8.1.7(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-iIg1+SBv3d9aCyHp7soPPglfn2GoP69Xp+F8nfdo8lx+SHaWxRCqvW+jiZaJur0c4yqKsFpDrvWjYa4xWfQP7w==} + /@storybook/theming@8.1.11(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Chn/opjO6Rl1isNobutYqAH2PjKNkj09YBw/8noomk6gElSa3JbUTyaG/+JCHA6OG/9kUsqoKDb5cZmAKNq/jA==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -7677,7 +8539,7 @@ packages: optional: true dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) - '@storybook/client-logger': 8.1.7 + '@storybook/client-logger': 8.1.11 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 18.3.1 @@ -7693,97 +8555,97 @@ packages: file-system-cache: 2.3.0 dev: true - /@storybook/types@7.6.19: - resolution: {integrity: sha512-DeGYrRPRMGTVfT7o2rEZtRzyLT2yKTI2exgpnxbwPWEFAduZCSfzBrcBXZ/nb5B0pjA9tUNWls1YzGkJGlkhpg==} + /@storybook/types@7.6.20: + resolution: {integrity: sha512-GncdY3x0LpbhmUAAJwXYtJDUQEwfF175gsjH0/fxPkxPoV7Sef9TM41jQLJW/5+6TnZoCZP/+aJZTJtq3ni23Q==} dependencies: - '@storybook/channels': 7.6.19 + '@storybook/channels': 7.6.20 '@types/babel__core': 7.20.5 '@types/express': 4.17.21 file-system-cache: 2.3.0 dev: true - /@swc/core-darwin-arm64@1.5.28: - resolution: {integrity: sha512-sP6g63ybzIdOWNDbn51tyHN8EMt7Mb4RMeHQEsXB7wQfDvzhpWB+AbfK6Gs3Q8fwP/pmWIrWW9csKOc1K2Mmkg==} + /@swc/core-darwin-arm64@1.6.13: + resolution: {integrity: sha512-SOF4buAis72K22BGJ3N8y88mLNfxLNprTuJUpzikyMGrvkuBFNcxYtMhmomO0XHsgLDzOJ+hWzcgjRNzjMsUcQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.5.28: - resolution: {integrity: sha512-Bd/agp/g7QocQG5AuorOzSC78t8OzeN+pCN/QvJj1CvPhvppjJw6e1vAbOR8vO2vvGi2pvtf3polrYQStJtSiA==} + /@swc/core-darwin-x64@1.6.13: + resolution: {integrity: sha512-AW8akFSC+tmPE6YQQvK9S2A1B8pjnXEINg+gGgw0KRUUXunvu1/OEOeC5L2Co1wAwhD7bhnaefi06Qi9AiwOag==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.5.28: - resolution: {integrity: sha512-Wr3TwPGIveS9/OBWm0r9VAL8wkCR0zQn46J8K01uYCmVhUNK3Muxjs0vQBZaOrGu94mqbj9OXY+gB3W7aDvGdA==} + /@swc/core-linux-arm-gnueabihf@1.6.13: + resolution: {integrity: sha512-f4gxxvDXVUm2HLYXRd311mSrmbpQF2MZ4Ja6XCQz1hWAxXdhRl1gpnZ+LH/xIfGSwQChrtLLVrkxdYUCVuIjFg==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.5.28: - resolution: {integrity: sha512-8G1ZwVTuLgTAVTMPD+M97eU6WeiRIlGHwKZ5fiJHPBcz1xqIC7jQcEh7XBkobkYoU5OILotls3gzjRt8CMNyDQ==} + /@swc/core-linux-arm64-gnu@1.6.13: + resolution: {integrity: sha512-Nf/eoW2CbG8s+9JoLtjl9FByBXyQ5cjdBsA4efO7Zw4p+YSuXDgc8HRPC+E2+ns0praDpKNZtLvDtmF2lL+2Gg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.5.28: - resolution: {integrity: sha512-0Ajdzb5Fzvz+XUbN5ESeHAz9aHHSYiQcm+vmsDi0TtPHmsalfnqEPZmnK0zPALPJPLQP2dDo4hELeDg3/c3xgA==} + /@swc/core-linux-arm64-musl@1.6.13: + resolution: {integrity: sha512-2OysYSYtdw79prJYuKIiux/Gj0iaGEbpS2QZWCIY4X9sGoETJ5iMg+lY+YCrIxdkkNYd7OhIbXdYFyGs/w5LDg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.5.28: - resolution: {integrity: sha512-ueQ9VejnQUM2Pt+vT0IAKoF4vYBWUP6n1KHGdILpoGe3LuafQrqu7RoyQ15C7/AYii7hAeNhTFdf6gLbg8cjFg==} + /@swc/core-linux-x64-gnu@1.6.13: + resolution: {integrity: sha512-PkR4CZYJNk5hcd2+tMWBpnisnmYsUzazI1O5X7VkIGFcGePTqJ/bWlfUIVVExWxvAI33PQFzLbzmN5scyIUyGQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.5.28: - resolution: {integrity: sha512-G5th8Mg0az8CbY4GQt9/m5hg2Y0kGIwvQBeVACuLQB6q2Y4txzdiTpjmFqUUhEvvl7Klyx1IHvNhfXs3zpt7PA==} + /@swc/core-linux-x64-musl@1.6.13: + resolution: {integrity: sha512-OdsY7wryTxCKwGQcwW9jwWg3cxaHBkTTHi91+5nm7hFPpmZMz1HivJrWAMwVE7iXFw+M4l6ugB/wCvpYrUAAjA==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.5.28: - resolution: {integrity: sha512-JezwCGavZ7CkNXx4yInI4kpb71L0zxzxA9BFlmnsGKEEjVQcKc3hFpmIzfFVs+eotlBUwDNb0+Yo9m6Cb7lllA==} + /@swc/core-win32-arm64-msvc@1.6.13: + resolution: {integrity: sha512-ap6uNmYjwk9M/+bFEuWRNl3hq4VqgQ/Lk+ID/F5WGqczNr0L7vEf+pOsRAn0F6EV+o/nyb3ePt8rLhE/wjHpPg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.5.28: - resolution: {integrity: sha512-q8tW5J4RkOkl7vYShnWS//VAb2Ngolfm9WOMaF2GRJUr2Y/Xeb/+cNjdsNOqea2BzW049D5vdP7XPmir3/zUZw==} + /@swc/core-win32-ia32-msvc@1.6.13: + resolution: {integrity: sha512-IJ8KH4yIUHTnS/U1jwQmtbfQals7zWPG0a9hbEfIr4zI0yKzjd83lmtS09lm2Q24QBWOCFGEEbuZxR4tIlvfzA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.5.28: - resolution: {integrity: sha512-jap6EiB3wG1YE1hyhNr9KLPpH4PGm+5tVMfN0l7fgKtV0ikgpcEN/YF94tru+z5m2HovqYW009+Evq9dcVGmpg==} + /@swc/core-win32-x64-msvc@1.6.13: + resolution: {integrity: sha512-f6/sx6LMuEnbuxtiSL/EkR0Y6qUHFw1XVrh6rwzKXptTipUdOY+nXpKoh+1UsBm/r7H0/5DtOdrn3q5ZHbFZjQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.5.28: - resolution: {integrity: sha512-muCdNIqOTURUgYeyyOLYE3ShL8SZO6dw6bhRm6dCvxWzCZOncPc5fB0kjcPXTML+9KJoHL7ks5xg+vsQK+v6ig==} + /@swc/core@1.6.13: + resolution: {integrity: sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -7793,18 +8655,18 @@ packages: optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.8 + '@swc/types': 0.1.9 optionalDependencies: - '@swc/core-darwin-arm64': 1.5.28 - '@swc/core-darwin-x64': 1.5.28 - '@swc/core-linux-arm-gnueabihf': 1.5.28 - '@swc/core-linux-arm64-gnu': 1.5.28 - '@swc/core-linux-arm64-musl': 1.5.28 - '@swc/core-linux-x64-gnu': 1.5.28 - '@swc/core-linux-x64-musl': 1.5.28 - '@swc/core-win32-arm64-msvc': 1.5.28 - '@swc/core-win32-ia32-msvc': 1.5.28 - '@swc/core-win32-x64-msvc': 1.5.28 + '@swc/core-darwin-arm64': 1.6.13 + '@swc/core-darwin-x64': 1.6.13 + '@swc/core-linux-arm-gnueabihf': 1.6.13 + '@swc/core-linux-arm64-gnu': 1.6.13 + '@swc/core-linux-arm64-musl': 1.6.13 + '@swc/core-linux-x64-gnu': 1.6.13 + '@swc/core-linux-x64-musl': 1.6.13 + '@swc/core-win32-arm64-msvc': 1.6.13 + '@swc/core-win32-ia32-msvc': 1.6.13 + '@swc/core-win32-x64-msvc': 1.6.13 /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -7815,33 +8677,33 @@ packages: tslib: 2.6.3 dev: false - /@swc/jest@0.2.36(@swc/core@1.5.28): + /@swc/jest@0.2.36(@swc/core@1.6.13): resolution: {integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==} engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 29.7.0 - '@swc/core': 1.5.28 + '@swc/core': 1.6.13 '@swc/counter': 0.1.3 - jsonc-parser: 3.2.1 + jsonc-parser: 3.3.1 dev: true - /@swc/types@0.1.8: - resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} + /@swc/types@0.1.9: + resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} dependencies: '@swc/counter': 0.1.3 - /@synthetixio/synpress@3.7.2-beta.9(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(webpack@5.92.0)(zod@3.23.8): + /@synthetixio/synpress@3.7.2-beta.9(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(webpack@5.92.1)(zod@3.23.8): resolution: {integrity: sha512-1fnr3jzQA2op6YnXxx6ERZ4babB+Ib1Xc5URGTcndH891Oa5uVlIaP0zRm5udTJuNdENOTLgkAdjv4WTGurBVA==} engines: {node: '>=14'} hasBin: true dependencies: - '@cypress/code-coverage': 3.12.39(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(cypress@12.17.3)(webpack@5.92.0) - '@cypress/webpack-dev-server': 3.10.0(debug@4.3.5)(webpack@5.92.0) + '@cypress/code-coverage': 3.12.41(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(babel-loader@9.1.3)(cypress@12.17.3)(webpack@5.92.1) + '@cypress/webpack-dev-server': 3.10.0(debug@4.3.5)(webpack@5.92.1) '@drptbl/gremlins.js': 2.2.1 '@foundry-rs/easy-foundryup': 0.1.3 - '@playwright/test': 1.44.1 + '@playwright/test': 1.45.1 '@testing-library/cypress': 9.0.0(cypress@12.17.3) '@testing-library/react': 14.3.1(react-dom@18.3.1)(react@18.3.1) '@types/testing-library__cypress': 5.0.13 @@ -7861,7 +8723,7 @@ packages: dotenv: 16.4.5 dotenv-parse-variables: 2.0.0 download: 8.0.0 - ethers: 6.13.0 + ethers: 6.13.1 etherscan-api: 10.3.0(debug@4.3.5) find-config: 1.0.0 get-port: 7.1.0 @@ -7886,43 +8748,43 @@ packages: - zod dev: true - /@tanstack/query-core@5.44.0: - resolution: {integrity: sha512-Fa1J7iEEyJnjXG1N4+Fz4OXNH/INve3XSn0Htms3X4wgRsXHxMDwqBE2XtDCts7swkwSIs4izEtaFqWVFr/eLQ==} + /@tanstack/query-core@5.50.1: + resolution: {integrity: sha512-lpfhKPrJlyV2DSVcQb/HuozH3Av3kws4ge22agx+lNGpFkS4vLZ7St0l3GLwlAD+bqB+qXGex3JdRKUNtMviEQ==} dev: false - /@tanstack/query-devtools@5.37.1: - resolution: {integrity: sha512-XcG4IIHIv0YQKrexTqo2zogQWR1Sz672tX2KsfE9kzB+9zhx44vRKH5si4WDILE1PIWQpStFs/NnrDQrBAUQpg==} + /@tanstack/query-devtools@5.50.1: + resolution: {integrity: sha512-MQ5JK3yRwBP1SRuwoJVPGZP4cMLXCQ0t+6blDbcAVGEoqrEuvbgTdwlN729AKBR0hidOWPFR9n5YpI2Y8bBZOQ==} dev: false - /@tanstack/react-query-devtools@5.44.0(@tanstack/react-query@5.44.0)(react@18.3.1): - resolution: {integrity: sha512-dDch88aF36DBLVvrNvpI0dq19lp9pgWVzsEkYzqKcFb260glfhB/EiAT2mvURVM5lqtVQdMMktCsw7AB+Z6Htw==} + /@tanstack/react-query-devtools@5.50.1(@tanstack/react-query@5.50.1)(react@18.3.1): + resolution: {integrity: sha512-zgPmEFv9GhLAx6eaf9r0ACbcxit1ZSuv/uPpOXBTTSPLijlWcfpQTOdZx0jYQ14t2cUfWjrAW41cUmcCvT4X/g==} peerDependencies: - '@tanstack/react-query': ^5.44.0 + '@tanstack/react-query': ^5.50.1 react: ^18.2.0 dependencies: - '@tanstack/query-devtools': 5.37.1 - '@tanstack/react-query': 5.44.0(react@18.3.1) + '@tanstack/query-devtools': 5.50.1 + '@tanstack/react-query': 5.50.1(react@18.3.1) react: 18.3.1 dev: false - /@tanstack/react-query@5.44.0(react@18.3.1): - resolution: {integrity: sha512-zmaD6cw8P2cBOfRHhqRmwvDsAi56gqbiwG2CDR6oQOCXSDOvRagvpP6RUStn+RrfcVUrNjKsxBmrgG6Za8p5zg==} + /@tanstack/react-query@5.50.1(react@18.3.1): + resolution: {integrity: sha512-s0DW3rVBDPReDDovUjVqItVa3R2nPfUANK9nqGvarO2DwTiY9U4EBTsqizMxItRCoGgK5apeM7D3mxlHrSKpdQ==} peerDependencies: react: ^18.2.0 dependencies: - '@tanstack/query-core': 5.44.0 + '@tanstack/query-core': 5.50.1 react: 18.3.1 dev: false - /@testing-library/cypress@10.0.2(cypress@13.11.0): + /@testing-library/cypress@10.0.2(cypress@13.13.0): resolution: {integrity: sha512-dKv95Bre5fDmNb9tOIuWedhGUryxGu1GWYWtXDqUsDPcr9Ekld0fiTb+pcBvSsFpYXAZSpmyEjhoXzLbhh06yQ==} engines: {node: '>=12', npm: '>=6'} peerDependencies: cypress: ^12.0.0 || ^13.0.0 dependencies: '@babel/runtime': 7.24.7 - '@testing-library/dom': 10.1.0 - cypress: 13.11.0 + '@testing-library/dom': 10.3.1 + cypress: 13.13.0 dev: true /@testing-library/cypress@9.0.0(cypress@12.17.3): @@ -7936,8 +8798,8 @@ packages: cypress: 12.17.3 dev: true - /@testing-library/dom@10.1.0: - resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} + /@testing-library/dom@10.3.1: + resolution: {integrity: sha512-q/WL+vlXMpC0uXDyfsMtc1rmotzLV8Y0gq6q1gfrrDjQeHoeLrqHbxdPvPNAh1i+xuJl7+BezywcXArz7vLqKQ==} engines: {node: '>=18'} dependencies: '@babel/code-frame': 7.24.7 @@ -8019,7 +8881,7 @@ packages: chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 - jest: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2) lodash: 4.17.21 redent: 3.0.0 @@ -8061,6 +8923,71 @@ packages: /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + /@turnkey/api-key-stamper@0.4.0: + resolution: {integrity: sha512-LyIiAXRuSL5UBa/Y95gHuh7j4uHzVMkI2+sHWM4/UWZat3nCoveU66h6SFXwF1BThA0poGgsKjWjsKNCJ89NPg==} + engines: {node: '>=18.0.0'} + dependencies: + '@noble/curves': 1.4.2 + '@turnkey/encoding': 0.1.0 + sha256-uint8array: 0.10.7 + dev: false + + /@turnkey/encoding@0.1.0: + resolution: {integrity: sha512-aLmLrWtvV1k9UyGzuzMpBFdwleCH8VpzXIriusVMrFLiQp+4uHCS9cwrEG1glg3207ewWFDtvgj31qLoJS29pg==} + engines: {node: '>=18.0.0'} + dev: false + + /@turnkey/http@2.7.1: + resolution: {integrity: sha512-yrmE5FcMYanrNqwnvSy0cLaZBHTe0TWK+DAvPXDF655Ki+AP/+nHzYrzGK7aneNfTJIMPP9AEYdxY2PkytKtBg==} + engines: {node: '>=16.0.0'} + dependencies: + '@turnkey/api-key-stamper': 0.4.0 + '@turnkey/encoding': 0.1.0 + '@turnkey/webauthn-stamper': 0.5.0 + cross-fetch: 3.1.8 + transitivePeerDependencies: + - encoding + dev: false + + /@turnkey/iframe-stamper@2.0.0: + resolution: {integrity: sha512-14IPfloVCV3ngoxsy3KoEUbEtYYxPU5H6T4WcNzY8Z67A1NJZfipk6pTaN5h3efkUm208G2TvDd63sZOdbyuxQ==} + engines: {node: '>=18.0.0'} + dev: false + + /@turnkey/solana@0.3.1: + resolution: {integrity: sha512-LxNJhhkT9HwwgBLqorKQREgFAOOboAeZwnZpNTjS+sJS19TG8WV7JNmbnYs2oTBzw/0nbouqM4hn+hv1Fy9nUA==} + engines: {node: '>=18.0.0'} + dependencies: + '@solana/web3.js': 1.92.1 + '@turnkey/http': 2.7.1 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@turnkey/viem@0.4.10(viem@2.17.3): + resolution: {integrity: sha512-x2k+8h7ic1hrFZ4zOFCD9CMI7ZhrQ/TeQ6k20rHZ3dbG0RyalIa29IulL0iJ7xjUX6v/3sucyGt6FtS6yjIWgg==} + engines: {node: '>=18.0.0'} + peerDependencies: + viem: ^1.16.6 || ^2.1.1 + dependencies: + '@turnkey/api-key-stamper': 0.4.0 + '@turnkey/http': 2.7.1 + cross-fetch: 4.0.0 + typescript: 5.4.5 + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + transitivePeerDependencies: + - encoding + dev: false + + /@turnkey/webauthn-stamper@0.5.0: + resolution: {integrity: sha512-iUbTUwD4f4ibdLy5PWWb7ITEz4S4VAP9/mNjFhoRY3cKVVTDfmykrVTKjPOIHWzDgAmLtgrLvySIIC9ZBVENBw==} + engines: {node: '>=18.0.0'} + dependencies: + sha256-uint8array: 0.10.7 + dev: false + /@types/aria-query@4.2.2: resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==} dev: true @@ -8107,38 +9034,37 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/bs58check@2.1.2: resolution: {integrity: sha512-xpXaQlOIY1KoXlA/ytHGHpEIU87PJt+g9SH7nC6HdCgaBwT2IEZIwBMHbjuX6BpnfbiUMlmwqurdLDwXpcdmSA==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - '@types/express-serve-static-core': 4.19.3 - '@types/node': 20.14.2 + '@types/express-serve-static-core': 4.19.5 + '@types/node': 20.14.10 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.14.2 - dev: true + '@types/node': 20.14.10 /@types/cross-spawn@6.0.6: resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/debug@4.1.12: @@ -8197,10 +9123,10 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/express-serve-static-core@4.19.3: - resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -8210,7 +9136,7 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.3 + '@types/express-serve-static-core': 4.19.5 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 dev: true @@ -8223,13 +9149,13 @@ packages: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 /@types/hoist-non-react-statics@3.3.5: resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} @@ -8252,7 +9178,7 @@ packages: /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -8288,7 +9214,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 dev: true @@ -8304,11 +9230,11 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true - /@types/lodash@4.17.5: - resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} + /@types/lodash@4.17.6: + resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} /@types/mdx@2.0.13: resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} @@ -8337,30 +9263,34 @@ packages: /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 form-data: 4.0.0 dev: true /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 - /@types/node@16.18.98: - resolution: {integrity: sha512-fpiC20NvLpTLAzo3oVBKIqBGR6Fx/8oAK/SSf7G+fydnXMY1x4x9RZ6sBXhqKlCU21g2QapUsbLlhv3+a7wS+Q==} + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: false + + /@types/node@16.18.101: + resolution: {integrity: sha512-AAsx9Rgz2IzG8KJ6tXd6ndNkVcu+GYB6U/SnFAaokSPNx2N7dcIIfnighYUNumvj6YS2q39Dejz5tT0NCV7CWA==} dev: true /@types/node@18.15.13: resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} dev: true - /@types/node@18.19.34: - resolution: {integrity: sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==} + /@types/node@18.19.39: + resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==} dependencies: undici-types: 5.26.5 - /@types/node@20.14.2: - resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} + /@types/node@20.14.10: + resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} dependencies: undici-types: 5.26.5 @@ -8417,7 +9347,7 @@ packages: /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/retry@0.12.0: @@ -8431,7 +9361,7 @@ packages: /@types/secp256k1@4.0.6: resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: false /@types/semver@7.5.8: @@ -8442,7 +9372,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/serve-index@1.9.4: @@ -8455,7 +9385,7 @@ packages: resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.14.2 + '@types/node': 20.14.10 '@types/send': 0.17.4 dev: true @@ -8470,7 +9400,7 @@ packages: /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/source-list-map@0.1.6: @@ -8499,7 +9429,7 @@ packages: resolution: {integrity: sha512-lkxNGVFBEX825Z/FrHA8FLuKv1q5L6Bccqm08Zds2MUG4gd5al32hCpplzVumke3br+hkhtVmuPTfwQadIkc5w==} dependencies: '@testing-library/dom': 7.31.2 - cypress: 13.11.0 + cypress: 13.13.0 dev: true /@types/tough-cookie@4.0.5: @@ -8527,7 +9457,7 @@ packages: /@types/webpack-sources@3.2.3: resolution: {integrity: sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 '@types/source-list-map': 0.1.6 source-map: 0.7.4 dev: true @@ -8535,7 +9465,7 @@ packages: /@types/webpack@4.41.38: resolution: {integrity: sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 '@types/tapable': 1.0.12 '@types/uglify-js': 3.17.5 '@types/webpack-sources': 3.2.3 @@ -8543,10 +9473,16 @@ packages: source-map: 0.6.1 dev: true + /@types/ws@7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 20.14.10 + dev: false + /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /@types/yargs-parser@21.0.3: @@ -8572,12 +9508,12 @@ packages: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true optional: true - /@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==} + /@typescript-eslint/eslint-plugin@7.16.0(@typescript-eslint/parser@7.16.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -8587,12 +9523,12 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.13.0 - '@typescript-eslint/type-utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.13.0 + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 7.16.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.16.0 + '@typescript-eslint/type-utils': 7.16.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.16.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.16.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -8603,8 +9539,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==} + /@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -8613,10 +9549,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.13.0 - '@typescript-eslint/types': 7.13.0 - '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.13.0 + '@typescript-eslint/scope-manager': 7.16.0 + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.16.0 debug: 4.3.5(supports-color@8.1.1) eslint: 8.57.0 typescript: 5.4.5 @@ -8632,16 +9568,16 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@7.13.0: - resolution: {integrity: sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==} + /@typescript-eslint/scope-manager@7.16.0: + resolution: {integrity: sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.13.0 - '@typescript-eslint/visitor-keys': 7.13.0 + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/visitor-keys': 7.16.0 dev: true - /@typescript-eslint/type-utils@7.13.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==} + /@typescript-eslint/type-utils@7.16.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -8650,8 +9586,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.16.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.5(supports-color@8.1.1) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) @@ -8665,8 +9601,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@7.13.0: - resolution: {integrity: sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==} + /@typescript-eslint/types@7.16.0: + resolution: {integrity: sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==} engines: {node: ^18.18.0 || >=20.0.0} dev: true @@ -8691,8 +9627,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.13.0(typescript@5.4.5): - resolution: {integrity: sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==} + /@typescript-eslint/typescript-estree@7.16.0(typescript@5.4.5): + resolution: {integrity: sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -8700,12 +9636,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.13.0 - '@typescript-eslint/visitor-keys': 7.13.0 + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/visitor-keys': 7.16.0 debug: 4.3.5(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.4 + minimatch: 9.0.5 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) typescript: 5.4.5 @@ -8733,16 +9669,16 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.13.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==} + /@typescript-eslint/utils@7.16.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.13.0 - '@typescript-eslint/types': 7.13.0 - '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.16.0 + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -8757,11 +9693,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@7.13.0: - resolution: {integrity: sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==} + /@typescript-eslint/visitor-keys@7.16.0: + resolution: {integrity: sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.13.0 + '@typescript-eslint/types': 7.16.0 eslint-visitor-keys: 3.4.3 dev: true @@ -8786,7 +9722,7 @@ packages: execa: 7.2.0 get-port: 6.1.2 http-proxy: 1.18.1(debug@4.3.5) - ws: 8.17.0 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - debug @@ -8804,7 +9740,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.7) magic-string: 0.27.0 react-refresh: 0.14.2 - vite: 4.5.3(@types/node@20.14.2) + vite: 4.5.3(@types/node@20.14.10) transitivePeerDependencies: - supports-color dev: true @@ -8820,7 +9756,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 4.5.3(@types/node@20.14.2) + vite: 4.5.3(@types/node@20.14.10) transitivePeerDependencies: - supports-color dev: true @@ -8864,26 +9800,26 @@ packages: pretty-format: 29.7.0 dev: true - /@wagmi/connectors@5.0.12(@types/react@18.3.3)(@wagmi/core@2.11.0)(react-dom@18.3.1)(react-i18next@13.5.0)(react-native@0.74.2)(react@18.3.1)(typescript@5.4.5)(viem@2.13.8)(zod@3.23.8): - resolution: {integrity: sha512-pHXH/+n0wTdPJqfgOrqR1qhIc+AnelX101gJc1RCDDKDzxC6U0CudVX7dias9rlgcqOc9IgKqCH1JfRSu3nDyw==} + /@wagmi/connectors@5.0.21(@types/react@18.3.3)(@wagmi/core@2.11.6)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8): + resolution: {integrity: sha512-lbjXEv6HhOa9nXZ5r6NGFJdaadCt2Yj9hSWHjKuiTobrE6dEGQqG16mCQS17yXcvXpI62Q/sW6SL347JrBju/Q==} peerDependencies: - '@wagmi/core': 2.11.0 + '@wagmi/core': 2.11.6 typescript: '>=5.0.4' viem: 2.x peerDependenciesMeta: typescript: optional: true dependencies: - '@coinbase/wallet-sdk': 4.0.3 - '@metamask/sdk': 0.20.5(react-dom@18.3.1)(react-i18next@13.5.0)(react-native@0.74.2)(react@18.3.1) + '@coinbase/wallet-sdk': 4.0.4 + '@metamask/sdk': 0.26.4(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1) '@safe-global/safe-apps-provider': 0.18.1(typescript@5.4.5)(zod@3.23.8) '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.4.5)(zod@3.23.8) - '@wagmi/core': 2.11.0(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.13.8)(zod@3.23.8) + '@wagmi/core': 2.11.6(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8) '@walletconnect/ethereum-provider': 2.13.0(@types/react@18.3.3)(react@18.3.1) '@walletconnect/modal': 2.6.2(@types/react@18.3.3)(react@18.3.1) cbw-sdk: /@coinbase/wallet-sdk@3.9.3 typescript: 5.4.5 - viem: 2.13.8(typescript@5.4.5)(zod@3.23.8) + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8903,7 +9839,6 @@ packages: - ioredis - react - react-dom - - react-i18next - react-native - rollup - supports-color @@ -8912,8 +9847,8 @@ packages: - zod dev: false - /@wagmi/core@2.11.0(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.13.8)(zod@3.23.8): - resolution: {integrity: sha512-c4h4qBxw2wy+39IJMgvHPOsGwVO5BqrPHDr+5/q3aFB5FOUwBKeDkdtNMp3BWKjAWsIuG2SzvnElAaWs3wmBkw==} + /@wagmi/core@2.11.6(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8): + resolution: {integrity: sha512-Ohk7Bh+Q8kjzxEHImIq98CnPduz8n1a5bdwJi6F7zU3h62crhlVq7fZBYoBhoDgmX0ROVOMr8WW3XU3XhRwUOw==} peerDependencies: '@tanstack/query-core': '>=5.0.0' typescript: '>=5.0.4' @@ -8927,7 +9862,7 @@ packages: eventemitter3: 5.0.1 mipd: 0.0.5(typescript@5.4.5)(zod@3.23.8) typescript: 5.4.5 - viem: 2.13.8(typescript@5.4.5)(zod@3.23.8) + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) zustand: 4.4.1(@types/react@18.3.3)(react@18.3.1) transitivePeerDependencies: - '@types/react' @@ -8938,6 +9873,58 @@ packages: - zod dev: false + /@wallet-standard/app@1.0.1: + resolution: {integrity: sha512-LnLYq2Vy2guTZ8GQKKSXQK3+FRGPil75XEdkZqE6fiLixJhZJoJa5hT7lXxwe0ykVTt9LEThdTbOpT7KadS26Q==} + engines: {node: '>=16'} + dependencies: + '@wallet-standard/base': 1.0.1 + dev: false + + /@wallet-standard/base@1.0.1: + resolution: {integrity: sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w==} + engines: {node: '>=16'} + dev: false + + /@walletconnect/core@2.11.2: + resolution: {integrity: sha512-bB4SiXX8hX3/hyBfVPC5gwZCXCl+OPj+/EDVM71iAO3TDsh78KPbrVAbDnnsbHzZVHlsMohtXX3j5XVsheN3+g==} + dependencies: + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.14 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.10 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.11.2 + '@walletconnect/utils': 2.11.2 + events: 3.3.0 + isomorphic-unfetch: 3.1.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + /@walletconnect/core@2.13.0: resolution: {integrity: sha512-blDuZxQenjeXcVJvHxPznTNl6c/2DO4VNrFnus+qHmO6OtT5lZRowdMtlCaCNb1q0OxzgrmBDcTOCbFcCpio/g==} dependencies: @@ -8955,9 +9942,48 @@ packages: '@walletconnect/types': 2.13.0 '@walletconnect/utils': 2.13.0 events: 3.3.0 - isomorphic-unfetch: 3.1.0 - lodash.isequal: 4.5.0 - uint8arrays: 3.1.0 + isomorphic-unfetch: 3.1.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + + /@walletconnect/environment@1.0.1: + resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/ethereum-provider@2.11.2(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-BUDqee0Uy2rCZVkW5Ao3q6Ado/3fePYnFdryVF+YL6bPhj+xQZ5OfKodl+uvs7Rwq++O5wTX2RqOTzpW7+v+Mg==} + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/modal': 2.6.2(@types/react@18.3.3)(react@18.3.1) + '@walletconnect/sign-client': 2.11.2 + '@walletconnect/types': 2.11.2 + '@walletconnect/universal-provider': 2.11.2 + '@walletconnect/utils': 2.11.2 + events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8969,21 +9995,17 @@ packages: - '@netlify/blobs' - '@planetscale/database' - '@react-native-async-storage/async-storage' + - '@types/react' - '@upstash/redis' - '@vercel/kv' - bufferutil - encoding - ioredis + - react - uWebSockets.js - utf-8-validate dev: false - /@walletconnect/environment@1.0.1: - resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} - dependencies: - tslib: 1.14.1 - dev: false - /@walletconnect/ethereum-provider@2.13.0(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-dnpW8mmLpWl1AZUYGYZpaAfGw1HFkL0WSlhk5xekx3IJJKn4pLacX2QeIOo0iNkzNQxZfux1AK4Grl1DvtzZEA==} dependencies: @@ -9026,6 +10048,14 @@ packages: tslib: 1.14.1 dev: false + /@walletconnect/heartbeat@1.2.1: + resolution: {integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + dev: false + /@walletconnect/heartbeat@1.2.2: resolution: {integrity: sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==} dependencies: @@ -9045,6 +10075,14 @@ packages: - encoding dev: false + /@walletconnect/jsonrpc-provider@1.0.13: + resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + tslib: 1.14.1 + dev: false + /@walletconnect/jsonrpc-provider@1.0.14: resolution: {integrity: sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==} dependencies: @@ -9053,6 +10091,13 @@ packages: events: 3.3.0 dev: false + /@walletconnect/jsonrpc-types@1.0.3: + resolution: {integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + /@walletconnect/jsonrpc-types@1.0.4: resolution: {integrity: sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==} dependencies: @@ -9074,7 +10119,7 @@ packages: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/safe-json': 1.0.2 events: 3.3.0 - ws: 7.5.9 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -9159,7 +10204,7 @@ packages: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 tslib: 1.14.1 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 dev: false /@walletconnect/safe-json@1.0.2: @@ -9168,6 +10213,38 @@ packages: tslib: 1.14.1 dev: false + /@walletconnect/sign-client@2.11.2: + resolution: {integrity: sha512-MfBcuSz2GmMH+P7MrCP46mVE5qhP0ZyWA0FyIH6/WuxQ6G+MgKsGfaITqakpRPsykWOJq8tXMs3XvUPDU413OQ==} + dependencies: + '@walletconnect/core': 2.11.2 + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.11.2 + '@walletconnect/utils': 2.11.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + /@walletconnect/sign-client@2.13.0: resolution: {integrity: sha512-En7KSvNUlQFx20IsYGsFgkNJ2lpvDvRsSFOT5PTdGskwCkUfOpB33SQJ6nCrN19gyoKPNvWg80Cy6MJI0TjNYA==} dependencies: @@ -9206,6 +10283,32 @@ packages: tslib: 1.14.1 dev: false + /@walletconnect/types@2.11.2: + resolution: {integrity: sha512-p632MFB+lJbip2cvtXPBQslpUdiw1sDtQ5y855bOlAGquay+6fZ4h1DcDePeKQDQM3P77ax2a9aNPZxV6y/h1Q==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + /@walletconnect/types@2.13.0: resolution: {integrity: sha512-MWaVT0FkZwzYbD3tvk8F+2qpPlz1LUSWHuqbINUtMXnSzJtXN49Y99fR7FuBhNFtDalfuWsEK17GrNA+KnAsPQ==} dependencies: @@ -9232,6 +10335,38 @@ packages: - uWebSockets.js dev: false + /@walletconnect/universal-provider@2.11.2: + resolution: {integrity: sha512-cNtIn5AVoDxKAJ4PmB8m5adnf5mYQMUamEUPKMVvOPscfGtIMQEh9peKsh2AN5xcRVDbgluC01Id545evFyymw==} + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.11.2 + '@walletconnect/types': 2.11.2 + '@walletconnect/utils': 2.11.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + /@walletconnect/universal-provider@2.13.0: resolution: {integrity: sha512-B5QvO8pnk5Bqn4aIt0OukGEQn2Auk9VbHfhQb9cGwgmSCd1GlprX/Qblu4gyT5+TjHMb1Gz5UssUaZWTWbDhBg==} dependencies: @@ -9264,6 +10399,40 @@ packages: - utf-8-validate dev: false + /@walletconnect/utils@2.11.2: + resolution: {integrity: sha512-LyfdmrnZY6dWqlF4eDrx5jpUwsB2bEPjoqR5Z6rXPiHJKUOdJt7az+mNOn5KTSOlRpd1DmozrBrWr+G9fFLYVw==} + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.10 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.11.2 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + /@walletconnect/utils@2.13.0: resolution: {integrity: sha512-q1eDCsRHj5iLe7fF8RroGoPZpdo2CYMZzQSrw1iqL+2+GOeqapxxuJ1vaJkmDUkwgklfB22ufqG6KQnz78sD4w==} dependencies: @@ -9455,13 +10624,46 @@ packages: tslib: 1.14.1 dev: true + /@zerodev/ecdsa-validator@5.2.3(@zerodev/sdk@5.2.8)(permissionless@0.1.20)(viem@2.17.3): + resolution: {integrity: sha512-zeJjYhOW5EWK6XnctPt3iVnrqmrHfb81p/fJKaY4yQnL2ZYPrH37ZgtY1z5COETPCDTm65+jPfc1Zn/dziyAXQ==} + peerDependencies: + '@zerodev/sdk': ^5.2.1 + permissionless: ^0.1.18 + viem: ^2.9.17 + dependencies: + '@zerodev/sdk': 5.2.8(permissionless@0.1.20)(viem@2.17.3) + permissionless: 0.1.20(viem@2.17.3) + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + dev: false + + /@zerodev/sdk@5.2.8(permissionless@0.1.20)(viem@2.17.3): + resolution: {integrity: sha512-mHxiNxZRnE+z3qqeXQtqVjzMEvjabOSj/4qVdqXGKu3471ykxSC5PjCjFl1o8vynqyGoqxiqf8RIX0sp9JsEbA==} + peerDependencies: + permissionless: ^0.1.18 + viem: ^2.9.17 + dependencies: + permissionless: 0.1.20(viem@2.17.3) + semver: 7.6.2 + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + dev: false + + /@zerodev/sdk@5.3.3(permissionless@0.1.36)(viem@2.17.3): + resolution: {integrity: sha512-NZs0dW9cvRdmcju7rQ4C47TysbDnhpWxPzPQrfZ5VJFHQTa01qAZcKJrTpzVeduzMDnntZgv2ueFrYGAW00Xog==} + peerDependencies: + permissionless: ^0.1.18 + viem: ^2.16.3 + dependencies: + permissionless: 0.1.36(viem@2.17.3) + semver: 7.6.2 + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + dev: false + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 - dev: true /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -9482,8 +10684,8 @@ packages: typescript: 5.4.5 zod: 3.23.8 - /abitype@1.0.0(typescript@5.4.5)(zod@3.23.8): - resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} + /abitype@1.0.5(typescript@5.4.5)(zod@3.23.8): + resolution: {integrity: sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw==} peerDependencies: typescript: '>=5.0.4' zod: ^3 >=3.22.0 @@ -9514,16 +10716,16 @@ packages: /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.11.3 - acorn-walk: 8.3.2 + acorn: 8.12.1 + acorn-walk: 8.3.3 dev: true - /acorn-import-attributes@1.9.5(acorn@8.11.3): + /acorn-import-attributes@1.9.5(acorn@8.12.1): resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.11.3 + acorn: 8.12.1 dev: true /acorn-jsx@5.3.2(acorn@7.4.1): @@ -9534,12 +10736,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.12.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.12.1 dev: true /acorn-walk@7.2.0: @@ -9547,9 +10749,11 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} @@ -9557,8 +10761,8 @@ packages: hasBin: true dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true @@ -9588,6 +10792,13 @@ packages: transitivePeerDependencies: - supports-color + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + dev: false + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -9810,10 +11021,6 @@ packages: dependencies: dequal: 2.0.3 - /arity-n@1.0.4: - resolution: {integrity: sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==} - dev: true - /array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} @@ -9841,13 +11048,6 @@ packages: is-string: 1.0.7 dev: true - /array-last@1.3.0: - resolution: {integrity: sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 4.0.0 - dev: true - /array-union@1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} @@ -10083,16 +11283,16 @@ packages: engines: {node: '>=4'} dev: false - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: true - /axe-core@4.7.2: resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} engines: {node: '>=4'} dev: false + /axe-core@4.9.1: + resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + engines: {node: '>=4'} + dev: true + /axios@1.2.2(debug@4.3.5): resolution: {integrity: sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==} dependencies: @@ -10113,10 +11313,10 @@ packages: - debug dev: true - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + /axobject-query@3.1.1: + resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} dependencies: - dequal: 2.0.3 + deep-equal: 2.2.3 dev: true /babel-core@7.0.0-bridge.0(@babel/core@7.24.7): @@ -10143,7 +11343,7 @@ packages: transitivePeerDependencies: - supports-color - /babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.92.0): + /babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.92.1): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -10153,7 +11353,7 @@ packages: '@babel/core': 7.24.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.92.0(@swc/core@1.5.28)(esbuild@0.18.20) + webpack: 5.92.1(@swc/core@1.6.13)(esbuild@0.18.20) dev: true /babel-plugin-istanbul@6.1.1: @@ -10292,16 +11492,11 @@ packages: to-fast-properties: 1.0.3 dev: true - /babylon@6.18.0: - resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} - hasBin: true - dev: true - /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /base-x@3.0.9: - resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + /base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} dependencies: safe-buffer: 5.2.1 dev: false @@ -10356,6 +11551,14 @@ packages: resolution: {integrity: sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==} dev: false + /bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + dev: false + /bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} dev: false @@ -10364,6 +11567,12 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: false + /bip174@2.1.1: resolution: {integrity: sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==} engines: {node: '>=8.0.0'} @@ -10374,7 +11583,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 + '@scure/base': 1.1.7 typeforce: 1.18.0 wif: 2.0.6 dev: false @@ -10387,6 +11596,18 @@ packages: sha256-uint8array: 0.10.7 dev: false + /bitcoinjs-lib@6.1.5: + resolution: {integrity: sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@noble/hashes': 1.4.0 + bech32: 2.0.0 + bip174: 2.1.1 + bs58check: 3.0.1 + typeforce: 1.18.0 + varuint-bitcoin: 1.1.2 + dev: false + /bitcoinjs-lib@6.1.6: resolution: {integrity: sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA==} engines: {node: '>=8.0.0'} @@ -10466,6 +11687,14 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true + /borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + dev: false + /bowser@2.11.0: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} dev: false @@ -10575,15 +11804,15 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001632 - electron-to-chromium: 1.4.799 + caniuse-lite: 1.0.30001640 + electron-to-chromium: 1.4.820 node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) + update-browserslist-db: 1.1.0(browserslist@4.23.1) /bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} dependencies: - base-x: 3.0.9 + base-x: 3.0.10 dev: false /bs58@5.0.0: @@ -10660,7 +11889,6 @@ packages: requiresBuild: true dependencies: node-gyp-build: 4.8.1 - dev: false /bufio@1.2.1: resolution: {integrity: sha512-9oR3zNdupcg/Ge2sSHQF3GX+kmvL/fTPvD0nd5AGLq8SjUYnTz+SlFjK/GXidndbZtIj+pVKXiWeR9w6e9wKCA==} @@ -10777,8 +12005,8 @@ packages: /camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - /caniuse-lite@1.0.30001632: - resolution: {integrity: sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==} + /caniuse-lite@1.0.30001640: + resolution: {integrity: sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==} /caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -10874,7 +12102,7 @@ packages: engines: {node: '>=12.13.0'} hasBin: true dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -11058,6 +12286,21 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false + /colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} dev: false @@ -11137,12 +12380,6 @@ packages: dot-prop: 5.3.0 dev: true - /compose-function@3.0.3: - resolution: {integrity: sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==} - dependencies: - arity-n: 1.0.4 - dev: true - /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -11310,7 +12547,7 @@ packages: dependencies: '@types/node': 20.5.1 cosmiconfig: 8.3.6(typescript@5.4.5) - ts-node: 10.9.2(@swc/core@1.5.28)(@types/node@20.14.2)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.6.13)(@types/node@20.14.10)(typescript@5.4.5) typescript: 5.4.5 dev: true @@ -11340,6 +12577,10 @@ packages: typescript: 5.4.5 dev: true + /country-list@2.3.0: + resolution: {integrity: sha512-qZk66RlmQm7fQjMYWku1AyjlKPogjPEorAZJG88owPExoPV8EsyCcuFLvO2afTXHEhi9liVOoyd+5A6ZS5QwaA==} + dev: false + /countup.js@2.8.0: resolution: {integrity: sha512-f7xEhX0awl4NOElHulrl4XRfKoNH3rB+qfNSZZyjSZhaAoUk6elvhH+MNxMmlmuUJ2/QNTWPSA7U4mNtIAKljQ==} dev: false @@ -11377,7 +12618,7 @@ packages: sha.js: 2.4.11 dev: true - /create-jest@29.7.0(@types/node@20.14.2)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -11386,7 +12627,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -11463,7 +12704,7 @@ packages: /css-in-js-utils@3.1.0: resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} dependencies: - hyphenate-style-name: 1.0.5 + hyphenate-style-name: 1.1.0 dev: false /css-select@4.3.0: @@ -11529,7 +12770,7 @@ packages: dependencies: '@cypress/request': 2.88.12 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) - '@types/node': 16.18.98 + '@types/node': 16.18.101 '@types/sinonjs__fake-timers': 8.1.1 '@types/sizzle': 2.3.8 arch: 2.2.0 @@ -11571,8 +12812,8 @@ packages: yauzl: 2.10.0 dev: true - /cypress@13.11.0: - resolution: {integrity: sha512-NXXogbAxVlVje4XHX+Cx5eMFZv4Dho/2rIcdBHg9CNPFUGZdM4cRdgIgM7USmNYsC12XY0bZENEQ+KBk72fl+A==} + /cypress@13.13.0: + resolution: {integrity: sha512-ou/MQUDq4tcDJI2FsPaod2FZpex4kpIK43JJlcBgWrX8WX7R/05ZxGTuxedOuZBfxjZxja+fbijZGyxiLP6CFA==} engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} hasBin: true requiresBuild: true @@ -11936,6 +13177,11 @@ packages: slash: 3.0.0 dev: true + /delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: false + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -11988,13 +13234,17 @@ packages: hasBin: true dev: false + /detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + dev: false + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} /detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: true /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} @@ -12246,8 +13496,8 @@ packages: jake: 10.9.1 dev: true - /electron-to-chromium@1.4.799: - resolution: {integrity: sha512-3D3DwWkRTzrdEpntY0hMLYwj7SeBk1138CkPE8sBDSj3WzrzOiG2rHm3luw8jucpf+WiyLBCZyU9lMHyQI9M9Q==} + /electron-to-chromium@1.4.820: + resolution: {integrity: sha512-kK/4O/YunacfboFEk/BDf7VO1HoPmDudLTJAU9NmXIOSjsV7qVIX3OrI4REZo0VmdqhcpUcncQc6N8Q3aEXlHg==} /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -12276,6 +13526,10 @@ packages: resolution: {integrity: sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==} dev: true + /emitter-component@1.1.2: + resolution: {integrity: sha512-QdXO3nXOzZB4pAjM0n6ZE+R9/+kPpECA/XSELIcc54NeYVnBqIk+4DFiBgK+8QbV3mdvTG6nedl7dTYgO+5wDw==} + dev: false + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -12305,13 +13559,13 @@ packages: dependencies: once: 1.4.0 - /engine.io-client@6.5.3: - resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} + /engine.io-client@6.5.4: + resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==} dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.3.5(supports-color@8.1.1) engine.io-parser: 5.2.2 - ws: 8.11.0 + ws: 8.17.1 xmlhttprequest-ssl: 2.0.0 transitivePeerDependencies: - bufferutil @@ -12412,7 +13666,7 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 @@ -12480,8 +13734,8 @@ packages: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-module-lexer@1.5.3: - resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} dev: true /es-object-atoms@1.0.0: @@ -12519,6 +13773,16 @@ packages: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: false + + /es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + dependencies: + es6-promise: 4.2.8 + dev: false + /esbuild-plugin-alias@0.2.1: resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} dev: true @@ -12564,36 +13828,35 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true - /esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + /esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - dev: true + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} @@ -12639,13 +13902,13 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7(supports-color@8.1.1) - is-core-module: 2.13.1 + is-core-module: 2.14.0 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.13.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.16.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: @@ -12666,7 +13929,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.16.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7(supports-color@8.1.1) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -12674,7 +13937,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.0)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -12684,7 +13947,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.16.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -12693,9 +13956,9 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.13.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.16.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 - is-core-module: 2.13.1 + is-core-module: 2.14.0 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -12709,19 +13972,18 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + /eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0): + resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.7 - aria-query: 5.3.0 + aria-query: 5.1.3 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 + axe-core: 4.9.1 + axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.19 @@ -12730,8 +13992,9 @@ packages: jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.8 object.fromentries: 2.0.8 + safe-regex-test: 1.0.3 + string.prototype.includes: 2.0.0 dev: true /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.2): @@ -12764,8 +14027,8 @@ packages: eslint: 8.57.0 dev: true - /eslint-plugin-react@7.34.2(eslint@8.57.0): - resolution: {integrity: sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==} + /eslint-plugin-react@7.34.3(eslint@8.57.0): + resolution: {integrity: sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -12804,7 +14067,7 @@ packages: - typescript dev: true - /eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.13.0)(eslint@8.57.0): + /eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.16.0)(eslint@8.57.0): resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -12814,7 +14077,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.13.0(@typescript-eslint/parser@7.13.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.16.0(@typescript-eslint/parser@7.16.0)(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-rule-composer: 0.3.0 dev: true @@ -12851,7 +14114,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -12867,7 +14130,7 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -12896,8 +14159,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 dev: true @@ -12906,8 +14169,8 @@ packages: engines: {node: '>=4'} hasBin: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -12930,6 +14193,10 @@ packages: engines: {node: '>=4.0'} dev: true + /estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + dev: false + /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true @@ -12991,10 +14258,10 @@ packages: '@noble/hashes': 1.4.0 dev: false - /ethereum-cryptography@2.2.0: - resolution: {integrity: sha512-hsm9JhfytIf8QME/3B7j4bc8V+VdTU+Vas1aJlvIS96ffoNAosudXvGoEvWmc7QZYdkC8mrMJz9r0fcbw7GyCA==} + /ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} dependencies: - '@noble/curves': 1.4.0 + '@noble/curves': 1.4.2 '@noble/hashes': 1.4.0 '@scure/bip32': 1.4.0 '@scure/bip39': 1.3.0 @@ -13038,8 +14305,8 @@ packages: - utf-8-validate dev: false - /ethers@6.13.0: - resolution: {integrity: sha512-+yyQQQWEntY5UVbCv++guA14RRVFm1rSnO1GoLFdrK7/XRWMoktNgyG9UjwxrQqGBfGyFKknNZ81YpUS2emCgg==} + /ethers@6.13.1: + resolution: {integrity: sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==} engines: {node: '>=14.0.0'} dependencies: '@adraffy/ens-normalize': 1.10.1 @@ -13048,7 +14315,7 @@ packages: '@types/node': 18.15.13 aes-js: 4.0.0-beta.5 tslib: 2.4.0 - ws: 8.5.0 + ws: 8.17.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -13099,7 +14366,6 @@ packages: /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -13298,6 +14564,11 @@ packages: engines: {'0': node >=0.6.0} dev: true + /eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + dev: false + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -13322,10 +14593,6 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-loops@1.1.3: - resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==} - dev: false - /fast-redact@3.5.0: resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} @@ -13339,6 +14606,10 @@ packages: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} dev: false + /fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + dev: false + /fast-xml-parser@4.4.0: resolution: {integrity: sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==} hasBin: true @@ -13391,13 +14662,6 @@ packages: flat-cache: 3.2.0 dev: true - /file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - dependencies: - flat-cache: 4.0.1 - dev: true - /file-system-cache@2.3.0: resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} dependencies: @@ -13430,6 +14694,10 @@ packages: engines: {node: '>=4'} dev: true + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: false + /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -13468,6 +14736,7 @@ packages: /filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} + dev: false /finalhandler@1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} @@ -13561,19 +14830,11 @@ packages: /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.3.1 keyv: 4.5.4 + rimraf: 3.0.2 dev: true /flat@5.0.2: @@ -13589,10 +14850,17 @@ packages: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} dev: false - /flow-parser@0.237.2: - resolution: {integrity: sha512-mvI/kdfr3l1waaPbThPA8dJa77nHXrfZIun+SWvFwSwDjmeByU7mGJGRmv1+7guU6ccyLV8e1lqZA1lD4iMGnQ==} + /flow-parser@0.239.1: + resolution: {integrity: sha512-topOrETNxJ6T2gAnQiWqAlzGPj8uI2wtmNOlDIMNB+qyvGJZ6R++STbUOTAYmvPhOMz2gXnXPH0hOvURYmrBow==} engines: {node: '>=0.4.0'} + /focus-lock@0.11.6: + resolution: {integrity: sha512-KSuV3ur4gf2KqMNoZx3nXNVhqCkn42GuTYCX4tXPEwf0MjpFQmNMiN6m7dXaUXgIoivL6/65agoUMg4RLS0Vbg==} + engines: {node: '>=10'} + dependencies: + tslib: 2.6.3 + dev: false + /follow-redirects@1.15.6(debug@4.3.5): resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} @@ -13618,8 +14886,8 @@ packages: signal-exit: 3.0.7 dev: true - /foreground-child@3.2.0: - resolution: {integrity: sha512-CrWQNaEl1/6WeZoarcM9LHupTo3RpZO2Pdk1vktwzPiQTsJnAKJmm3TACKeG5UZbWDfaH2AbvYxzP96y0MT7fA==} + /foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 @@ -13648,6 +14916,21 @@ packages: mime-types: 2.1.35 dev: true + /formik@2.2.9(react@18.3.1): + resolution: {integrity: sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==} + peerDependencies: + react: ^18.2.0 + dependencies: + deepmerge: 2.2.1 + hoist-non-react-statics: 3.3.2 + lodash: 4.17.21 + lodash-es: 4.17.21 + react: 18.3.1 + react-fast-compare: 2.0.4 + tiny-warning: 1.0.3 + tslib: 1.14.1 + dev: false + /formik@2.4.6(react@18.3.1): resolution: {integrity: sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==} peerDependencies: @@ -13910,7 +15193,7 @@ packages: consola: 3.2.3 defu: 6.1.4 node-fetch-native: 1.6.4 - nypm: 0.3.8 + nypm: 0.3.9 ohash: 1.1.3 pathe: 1.1.2 tar: 6.2.1 @@ -13959,15 +15242,15 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.4.1: - resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} - engines: {node: '>=16 || 14 >=14.18'} + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true dependencies: - foreground-child: 3.2.0 - jackspeak: 3.4.0 - minimatch: 9.0.4 + foreground-child: 3.2.1 + jackspeak: 3.4.2 + minimatch: 9.0.5 minipass: 7.1.2 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 dev: true @@ -14085,20 +15368,20 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /graphql-request@6.1.0(graphql@16.8.1): + /graphql-request@6.1.0(graphql@16.9.0): resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: graphql: 14 - 16 dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) cross-fetch: 3.1.8 - graphql: 16.8.1 + graphql: 16.9.0 transitivePeerDependencies: - encoding dev: false - /graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + /graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false @@ -14114,8 +15397,8 @@ packages: through2: 2.0.5 dev: true - /h3@1.11.1: - resolution: {integrity: sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A==} + /h3@1.12.0: + resolution: {integrity: sha512-Zi/CcNeWBXDrFNlV0hUBJQR9F7a96RjMeAZweW/ZWkR9fuXrMcvKnSA63f/zZ9l0GgQOZDVHGvXivNN9PWOwhA==} dependencies: cookie-es: 1.1.0 crossws: 0.2.4 @@ -14168,10 +15451,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-own-property@0.1.0: - resolution: {integrity: sha512-14qdBKoonU99XDhWcFKZTShK+QV47qU97u8zzoVo9cL5TZ3BmBHXogItSt9qJjR0KUMFRhcCW8uGIGl8nkl7Aw==} - dev: true - /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: @@ -14358,7 +15637,7 @@ packages: engines: {node: '>=8'} dev: true - /html-webpack-plugin@4.5.2(webpack@5.92.0): + /html-webpack-plugin@4.5.2(webpack@5.92.1): resolution: {integrity: sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==} engines: {node: '>=6.9'} peerDependencies: @@ -14373,10 +15652,10 @@ packages: pretty-error: 2.1.2 tapable: 1.1.3 util.promisify: 1.0.0 - webpack: 5.92.0(@swc/core@1.5.28)(esbuild@0.18.20) + webpack: 5.92.1(@swc/core@1.6.13)(esbuild@0.18.20) dev: true - /html-webpack-plugin@5.6.0(webpack@5.92.0): + /html-webpack-plugin@5.6.0(webpack@5.92.1): resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==} engines: {node: '>=10.13.0'} peerDependencies: @@ -14393,7 +15672,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.92.0(@swc/core@1.5.28)(esbuild@0.18.20) + webpack: 5.92.1(@swc/core@1.6.13)(esbuild@0.18.20) dev: true /htmlparser2@6.1.0: @@ -14533,14 +15812,20 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + dev: false + /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} hasBin: true dev: true - /hyphenate-style-name@1.0.5: - resolution: {integrity: sha512-fedL7PRwmeVkgyhu9hLeTBaI6wcGk7JGJswdaRsa5aUbkXI1kr1xZwTPBtaYPpwf56878iDek6VbVnuWMebJmw==} + /hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} dev: false /i18next-browser-languagedetector@7.1.0: @@ -14555,14 +15840,14 @@ packages: '@babel/runtime': 7.24.7 dev: false - /i18next@22.5.1: - resolution: {integrity: sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==} + /i18next@23.11.5: + resolution: {integrity: sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==} dependencies: '@babel/runtime': 7.24.7 dev: false - /i18next@23.11.5: - resolution: {integrity: sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==} + /i18next@23.4.6: + resolution: {integrity: sha512-jBE8bui969Ygv7TVYp0pwDZB7+he0qsU+nz7EcfdqSh+QvKjEfl9YPRQd/KrGiMhTYFGkeuPaeITenKK/bSFDg==} dependencies: '@babel/runtime': 7.24.7 dev: false @@ -14585,10 +15870,6 @@ packages: resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} dev: false - /identity-function@1.0.0: - resolution: {integrity: sha512-kNrgUK0qI+9qLTBidsH85HjDLpZfrrS0ElquKKe/fJFdB3D7VeKdXXEvOPDUHSHOzdZKCAAaQIWWyp0l2yq6pw==} - dev: true - /identity-obj-proxy@3.0.0: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} engines: {node: '>=4'} @@ -14667,11 +15948,10 @@ packages: engines: {node: '>=10'} dev: true - /inline-style-prefixer@7.0.0: - resolution: {integrity: sha512-I7GEdScunP1dQ6IM2mQWh6v0mOYdYmH3Bp31UecKdrcUgcURTcctSe1IECdUznSHKSmsHtjrT3CwCPI1pyxfUQ==} + /inline-style-prefixer@7.0.1: + resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} dependencies: css-in-js-utils: 3.1.0 - fast-loops: 1.1.3 dev: false /internal-slot@1.0.7: @@ -14704,10 +15984,6 @@ packages: dependencies: loose-envify: 1.4.0 - /ip@2.0.1: - resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} - dev: true - /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -14744,6 +16020,10 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + /is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + /is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} @@ -14780,8 +16060,9 @@ packages: ci-info: 3.9.0 dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + /is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 @@ -14888,11 +16169,6 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - /is-iterable@1.1.1: - resolution: {integrity: sha512-EdOZCr0NsGE00Pot+x1ZFx9MJK3C6wy91geZpXwvwexDLJvA4nzYyZf7r+EIwSeVsOLDdBz7ATg9NqKTzuNYuQ==} - engines: {node: '>= 4'} - dev: true - /is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -14920,11 +16196,6 @@ packages: dependencies: has-tostringtag: 1.0.2 - /is-number@4.0.0: - resolution: {integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==} - engines: {node: '>=0.10.0'} - dev: true - /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -15126,6 +16397,14 @@ packages: - encoding dev: false + /isomorphic-ws@4.0.1(ws@7.5.10): + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.10 + dev: false + /isows@1.0.3(ws@8.13.0): resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} peerDependencies: @@ -15133,12 +16412,12 @@ packages: dependencies: ws: 8.13.0 - /isows@1.0.4(ws@8.13.0): + /isows@1.0.4(ws@8.17.1): resolution: {integrity: sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ==} peerDependencies: ws: '*' dependencies: - ws: 8.13.0 + ws: 8.17.1 dev: false /isstream@0.1.2: @@ -15180,8 +16459,8 @@ packages: transitivePeerDependencies: - supports-color - /istanbul-lib-instrument@6.0.2: - resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} dependencies: '@babel/core': 7.24.7 @@ -15237,11 +16516,6 @@ packages: is-object: 1.0.2 dev: true - /iterable-lookahead@1.0.0: - resolution: {integrity: sha512-hJnEP2Xk4+44DDwJqUQGdXal5VbyeWLaPyDl2AQc242Zr7iqz4DgpQOrEzglWVMGHMDCkguLHEKxd1+rOsmgSQ==} - engines: {node: '>=4'} - dev: true - /iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: @@ -15252,9 +16526,9 @@ packages: set-function-name: 2.0.2 dev: true - /jackspeak@3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + /jackspeak@3.4.2: + resolution: {integrity: sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q==} + engines: {node: 14 >=14.21 || 16 >=16.20 || >=18} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -15272,6 +16546,28 @@ packages: minimatch: 3.1.2 dev: true + /jayson@4.1.1: + resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /jest-axe@8.0.0: resolution: {integrity: sha512-4kNcNn7J0jPO4jANEYZOHeQ/tSBvkXS+MxTbX1CKbXGd0+ZbRGDn/v/8IYWI/MmYX15iLVyYRnRev9X3ksePWA==} engines: {node: '>= 14.0.0'} @@ -15298,7 +16594,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -15318,7 +16614,7 @@ packages: - babel-plugin-macros - supports-color - /jest-cli@29.7.0(@types/node@20.14.2)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.14.10)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -15332,10 +16628,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -15345,7 +16641,7 @@ packages: - supports-color - ts-node - /jest-config@29.7.0(@types/node@20.14.2)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.14.10)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -15360,7 +16656,7 @@ packages: '@babel/core': 7.24.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 babel-jest: 29.7.0(@babel/core@7.24.7) chalk: 4.1.2 ci-info: 3.9.0 @@ -15380,7 +16676,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@swc/core@1.5.28)(@types/node@20.14.2)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.6.13)(@types/node@20.14.10)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -15423,7 +16719,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.14.2 + '@types/node': 20.14.10 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -15440,7 +16736,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -15454,7 +16750,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.14.2 + '@types/node': 20.14.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -15511,7 +16807,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.14.2 + '@types/node': 20.14.10 dev: true /jest-mock@29.7.0: @@ -15519,7 +16815,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 jest-util: 29.7.0 /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -15569,7 +16865,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -15599,7 +16895,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 chalk: 4.1.2 cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 @@ -15649,7 +16945,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -15674,7 +16970,7 @@ packages: dependencies: ansi-escapes: 6.2.1 chalk: 5.3.0 - jest: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2) jest-regex-util: 29.6.3 jest-watcher: 29.7.0 slash: 5.1.0 @@ -15688,7 +16984,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.2 + '@types/node': 20.14.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -15699,7 +16995,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -15708,12 +17004,12 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - /jest@29.7.0(@types/node@20.14.2)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -15726,7 +17022,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.14.2)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -15737,8 +17033,8 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true - /joi@17.13.1: - resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==} + /joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -15809,7 +17105,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.237.2 + flow-parser: 0.239.1 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -15843,7 +17139,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.237.2 + flow-parser: 0.239.1 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -15865,7 +17161,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.11.3 + acorn: 8.12.1 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -15888,7 +17184,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.17.0 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -15959,7 +17255,6 @@ packages: /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true /json2mq@0.2.0: resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} @@ -15979,8 +17274,8 @@ packages: engines: {node: '>=6'} hasBin: true - /jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + /jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} dev: true /jsonfile@4.0.0: @@ -15999,7 +17294,6 @@ packages: /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - dev: true /jsontokens@4.0.1: resolution: {integrity: sha512-+MO415LEN6M+3FGsRz4wU20g7N2JA+2j9d9+pGaNJHviG4L8N0qzavGyENw6fJqsq9CcrHOIL6iWX5yeTZ86+Q==} @@ -16063,21 +17357,19 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - /knip@5.18.2(@types/node@20.14.2)(typescript@5.4.5): - resolution: {integrity: sha512-SR3XHUviWFFfmyt4FT+iWdu17pWEypaJF5EJfiRjZ7j4J6D9Kf4Ju7+Sw+n4suIIbhZmO3+oDBZKJsRVoY/lOw==} + /knip@5.25.1(@types/node@20.14.10)(typescript@5.4.5): + resolution: {integrity: sha512-vUopqkh/gOovZ05qYgTghZpmkM3b2eKYdLTsu11ZTYnYEcsdfQeZs6l4U7Rap4b+1KEDd/yydJsuWl+4NyEA9g==} engines: {node: '>=18.6.0'} hasBin: true peerDependencies: '@types/node': '>=18' typescript: '>=5.0.4' dependencies: - '@ericcornelissen/bash-parser': 0.5.3 - '@nodelib/fs.walk': 2.0.0 + '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 - '@types/node': 20.14.2 + '@types/node': 20.14.10 easy-table: 1.2.0 fast-glob: 3.3.2 - file-entry-cache: 8.0.0 jiti: 1.21.6 js-yaml: 4.1.0 minimist: 1.2.8 @@ -16085,9 +17377,10 @@ packages: picomatch: 4.0.2 pretty-ms: 9.0.0 resolve: 1.22.8 - smol-toml: 1.2.1 + smol-toml: 1.2.2 strip-json-comments: 5.0.1 summary: 2.1.0 + tsconfig-paths: 4.2.0 typescript: 5.4.5 zod: 3.23.8 zod-validation-error: 3.3.0(zod@3.23.8) @@ -16104,8 +17397,8 @@ packages: language-subtag-registry: 0.3.23 dev: true - /launch-editor@2.6.1: - resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} + /launch-editor@2.8.0: + resolution: {integrity: sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==} dependencies: picocolors: 1.0.1 shell-quote: 1.8.1 @@ -16186,7 +17479,7 @@ packages: crossws: 0.2.4 defu: 6.1.4 get-port-please: 3.1.2 - h3: 1.11.1 + h3: 1.12.0 http-shutdown: 1.2.2 jiti: 1.21.6 mlly: 1.7.1 @@ -16283,7 +17576,7 @@ packages: engines: {node: '>=14'} dependencies: mlly: 1.7.1 - pkg-types: 1.1.1 + pkg-types: 1.1.3 dev: true /locate-path@3.0.0: @@ -16320,10 +17613,6 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.curry@4.1.1: - resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==} - dev: true - /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -16449,9 +17738,9 @@ packages: engines: {node: '>=0.10.0'} dev: true - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} + /lru-cache@10.4.2: + resolution: {integrity: sha512-voV4dDrdVZVNz84n39LFKDaRzfwhdzJ7akpyXfTMxCgRUp07U3lcJUXRlhTKP17rgt09sUzLi5iCitpEAr+6ug==} + engines: {node: 14 || 16 || 18 || 20 || >=22} /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -16469,11 +17758,11 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - /magic-string@0.16.0: - resolution: {integrity: sha512-c4BEos3y6G2qO0B9X7K0FVLOPT9uGrjYwYRLFmDqyl5YMboUviyecnXWp94fJTSMwPw2/sf+CEYt5AGpmklkkQ==} + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: - vlq: 0.2.3 - dev: true + sourcemap-codec: 1.4.8 + dev: false /magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} @@ -16535,11 +17824,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /map-obj@2.0.0: - resolution: {integrity: sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==} - engines: {node: '>=4'} - dev: true - /map-obj@4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} @@ -16859,7 +18143,7 @@ packages: source-map: 0.5.7 strip-ansi: 6.0.1 throat: 5.0.0 - ws: 7.5.9 + ws: 7.5.10 yargs: 17.7.2 transitivePeerDependencies: - bufferutil @@ -16969,8 +18253,8 @@ packages: brace-expansion: 2.0.1 dev: false - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -17051,9 +18335,9 @@ packages: /mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} dependencies: - acorn: 8.11.3 + acorn: 8.12.1 pathe: 1.1.2 - pkg-types: 1.1.1 + pkg-types: 1.1.3 ufo: 1.5.3 /motion@10.16.2: @@ -17103,7 +18387,7 @@ packages: css-tree: 1.1.3 csstype: 3.1.3 fastest-stable-stringify: 2.0.2 - inline-style-prefixer: 7.0.0 + inline-style-prefixer: 7.0.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) rtl-css-js: 1.16.1 @@ -17186,7 +18470,6 @@ packages: /node-gyp-build@4.8.1: resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} hasBin: true - dev: false /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -17253,7 +18536,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.13.1 + is-core-module: 2.14.0 semver: 7.6.2 validate-npm-package-license: 3.0.4 dev: true @@ -17341,8 +18624,8 @@ packages: - supports-color dev: true - /nypm@0.3.8: - resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} + /nypm@0.3.9: + resolution: {integrity: sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==} engines: {node: ^14.16.0 || >=16.10.0} hasBin: true dependencies: @@ -17350,6 +18633,7 @@ packages: consola: 3.2.3 execa: 8.0.1 pathe: 1.1.2 + pkg-types: 1.1.3 ufo: 1.5.3 dev: true @@ -17370,8 +18654,9 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} /object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} @@ -17384,15 +18669,6 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - /object-pairs@0.1.0: - resolution: {integrity: sha512-3ECr6K831I4xX/Mduxr9UC+HPOz/d6WKKYj9p4cmC8Lg8p7g8gitzsxNX5IWlSIgFWN/a4JgrJaoAMKn20oKwA==} - dev: true - - /object-values@1.0.0: - resolution: {integrity: sha512-+8hwcz/JnQ9EpLIXzN0Rs7DLsBpJNT/xYehtB/jU93tHYr5BFEO8E+JGQNOSqE7opVzz5cGksKFHt7uUJVLSjQ==} - engines: {node: '>=0.10.0'} - dev: true - /object.assign@4.1.5: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} @@ -17614,14 +18890,14 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - yocto-queue: 1.0.0 + yocto-queue: 1.1.1 dev: true /p-limit@5.0.0: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} engines: {node: '>=18'} dependencies: - yocto-queue: 1.0.0 + yocto-queue: 1.1.1 dev: true /p-locate@3.0.0: @@ -17692,6 +18968,10 @@ packages: release-zalgo: 1.0.0 dev: true + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + dev: true + /pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} dev: true @@ -17806,7 +19086,7 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.2.2 + lru-cache: 10.4.2 minipass: 7.1.2 /path-to-regexp@0.1.7: @@ -17857,6 +19137,22 @@ packages: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: true + /permissionless@0.1.20(viem@2.17.3): + resolution: {integrity: sha512-e+jHLOdDvOiHEAIKGPo1HCviTOnwxSkqFmfCQve7Zl1VbeFTBYWZF78fsZlhO5Gje1irfqsh+SCfbpPjFA4fcA==} + peerDependencies: + viem: ^2.9.17 + dependencies: + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + dev: false + + /permissionless@0.1.36(viem@2.17.3): + resolution: {integrity: sha512-v+VMpkHX9wr13ZPV6nilwQ0yiFU1K4498j6ohmNzD2eLlP1R/FB77xQrbMkZo98ATYca2CYh2gcBYsxmOC3VmA==} + peerDependencies: + viem: ^2.14.1 + dependencies: + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) + dev: false + /picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -17963,25 +19259,25 @@ packages: find-up: 6.3.0 dev: true - /pkg-types@1.1.1: - resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} + /pkg-types@1.1.3: + resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} dependencies: confbox: 0.1.7 mlly: 1.7.1 pathe: 1.1.2 - /playwright-core@1.44.1: - resolution: {integrity: sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==} - engines: {node: '>=16'} + /playwright-core@1.45.1: + resolution: {integrity: sha512-LF4CUUtrUu2TCpDw4mcrAIuYrEjVDfT1cHbJMfwnE2+1b8PZcFzPNgvZCvq2JfQ4aTjRCCHw5EJ2tmr2NSzdPg==} + engines: {node: '>=18'} hasBin: true dev: true - /playwright@1.44.1: - resolution: {integrity: sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==} - engines: {node: '>=16'} + /playwright@1.45.1: + resolution: {integrity: sha512-Hjrgae4kpSQBr98nhCj3IScxVeVUixqj+5oyif8TdIn2opTCPEzqAqNMeK42i3cWDCVu9MI+ZsGWw+gVR4ISBg==} + engines: {node: '>=18'} hasBin: true dependencies: - playwright-core: 1.44.1 + playwright-core: 1.45.1 optionalDependencies: fsevents: 2.3.2 dev: true @@ -18018,8 +19314,17 @@ packages: picocolors: 1.0.1 source-map-js: 1.2.0 - /preact@10.22.0: - resolution: {integrity: sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==} + /postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + dev: true + + /preact@10.22.1: + resolution: {integrity: sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==} dev: false /prelude-ls@1.2.1: @@ -18237,7 +19542,7 @@ packages: progress: 2.0.3 proxy-from-env: 1.1.0 rimraf: 2.7.1 - ws: 6.2.2 + ws: 6.2.3 transitivePeerDependencies: - bufferutil - supports-color @@ -18266,6 +19571,17 @@ packages: hasBin: true dev: false + /qrcode@1.5.1: + resolution: {integrity: sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + dev: false + /qrcode@1.5.3: resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} engines: {node: '>=10.13.0'} @@ -18291,8 +19607,8 @@ packages: side-channel: 1.0.6 dev: true - /qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + /qs@6.12.3: + resolution: {integrity: sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 @@ -18383,6 +19699,15 @@ packages: unpipe: 1.0.0 dev: true + /react-clientside-effect@1.2.6(react@18.3.1): + resolution: {integrity: sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==} + peerDependencies: + react: ^18.2.0 + dependencies: + '@babel/runtime': 7.24.7 + react: 18.3.1 + dev: false + /react-colorful@5.6.1(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} peerDependencies: @@ -18403,11 +19728,11 @@ packages: tween-functions: 1.2.0 dev: true - /react-devtools-core@5.2.0: - resolution: {integrity: sha512-vZK+/gvxxsieAoAyYaiRIVFxlajb7KXhgBDV7OsoMzaAE+IqGpoxusBjIgq5ibqA2IloKu0p9n7tE68z1xs18A==} + /react-devtools-core@5.3.1: + resolution: {integrity: sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw==} dependencies: shell-quote: 1.8.1 - ws: 7.5.9 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -18465,7 +19790,26 @@ packages: resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} dev: false - /react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1)(react-native@0.74.2)(react@18.3.1): + /react-focus-lock@2.9.2(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-5JfrsOKyA5Zn3h958mk7bAcfphr24jPoMoznJ8vaJF6fUrPQ8zrtEd3ILLOK8P5jvGxdMd96OxWNjDzATfR2qw==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.7 + '@types/react': 18.3.3 + focus-lock: 0.11.6 + prop-types: 15.8.1 + react: 18.3.1 + react-clientside-effect: 1.2.6(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + dev: false + + /react-i18next@13.5.0(i18next@23.4.6)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1): resolution: {integrity: sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA==} peerDependencies: i18next: '>= 23.2.3' @@ -18480,10 +19824,10 @@ packages: dependencies: '@babel/runtime': 7.24.7 html-parse-stringify: 3.0.1 - i18next: 22.5.1 + i18next: 23.4.6 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1) + react-native: 0.74.3(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1) dev: false /react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1)(react@18.3.1): @@ -18506,6 +19850,14 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false + /react-international-phone@4.2.5(react@18.3.1): + resolution: {integrity: sha512-jXxeEG5jvwivwSb/ImIIwIH1lSGD6VSy4W2CaInBiXo2PWnDj2BTzC0sAyZzNJarT7NX9kPdUHyGyyfziS5Rpw==} + peerDependencies: + react: ^18.2.0 + dependencies: + react: 18.3.1 + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -18530,7 +19882,7 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /react-native-webview@11.26.1(react-native@0.74.2)(react@18.3.1): + /react-native-webview@11.26.1(react-native@0.74.3)(react@18.3.1): resolution: {integrity: sha512-hC7BkxOpf+z0UKhxFSFTPAM4shQzYmZHoELa6/8a/MspcjEP7ukYKpuSUTLDywQditT8yI9idfcKvfZDKQExGw==} peerDependencies: react: ^18.2.0 @@ -18539,11 +19891,11 @@ packages: escape-string-regexp: 2.0.0 invariant: 2.2.4 react: 18.3.1 - react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1) + react-native: 0.74.3(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1) dev: false - /react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-EBMBjPPL4/GjHMP4NqsZabT3gI5WU9cSmduABGAGrd8uIcmTZ5F2Ng9k6gFmRm7n8e8CULxDNu98ZpQfBjl7Bw==} + /react-native@0.74.3(@babel/core@7.24.7)(@babel/preset-env@7.24.7)(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-UFutCC6WEw6HkxlcpQ2BemKqi0JkwrgDchYB5Svi8Sp4Xwt4HA6LGEjNQgZ+3KM44bjyFRpofQym0uh0jACGng==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -18554,16 +19906,16 @@ packages: optional: true dependencies: '@jest/create-cache-key-function': 29.7.0 - '@react-native-community/cli': 13.6.8 - '@react-native-community/cli-platform-android': 13.6.8 - '@react-native-community/cli-platform-ios': 13.6.8 - '@react-native/assets-registry': 0.74.84 - '@react-native/codegen': 0.74.84(@babel/preset-env@7.24.7) - '@react-native/community-cli-plugin': 0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7) - '@react-native/gradle-plugin': 0.74.84 - '@react-native/js-polyfills': 0.74.84 - '@react-native/normalize-colors': 0.74.84 - '@react-native/virtualized-lists': 0.74.84(@types/react@18.3.3)(react-native@0.74.2)(react@18.3.1) + '@react-native-community/cli': 13.6.9 + '@react-native-community/cli-platform-android': 13.6.9 + '@react-native-community/cli-platform-ios': 13.6.9 + '@react-native/assets-registry': 0.74.85 + '@react-native/codegen': 0.74.85(@babel/preset-env@7.24.7) + '@react-native/community-cli-plugin': 0.74.85(@babel/core@7.24.7)(@babel/preset-env@7.24.7) + '@react-native/gradle-plugin': 0.74.85 + '@react-native/js-polyfills': 0.74.85 + '@react-native/normalize-colors': 0.74.85 + '@react-native/virtualized-lists': 0.74.85(@types/react@18.3.3)(react-native@0.74.3)(react@18.3.1) '@types/react': 18.3.3 abort-controller: 3.0.0 anser: 1.4.10 @@ -18583,14 +19935,14 @@ packages: pretty-format: 26.6.2 promise: 8.3.0 react: 18.3.1 - react-devtools-core: 5.2.0 + react-devtools-core: 5.3.1 react-refresh: 0.14.2 react-shallow-renderer: 16.15.0(react@18.3.1) regenerator-runtime: 0.13.11 scheduler: 0.24.0-canary-efb381bbf-20230505 stacktrace-parser: 0.1.10 whatwg-fetch: 3.6.20 - ws: 6.2.2 + ws: 6.2.3 yargs: 17.7.2 transitivePeerDependencies: - '@babel/core' @@ -18611,14 +19963,10 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /react-qr-code@2.0.14(react@18.3.1): - resolution: {integrity: sha512-xvAUqmXzFzf7X6aQAAKb6T02YYk9grBBFeqpp1MiVhUAKG3Rg9+hFiOKRYg4+rWc2MiXNxkri0ulAJgS12xh7Q==} + /react-qr-code@2.0.15(react@18.3.1): + resolution: {integrity: sha512-MkZcjEXqVKqXEIMVE0mbcGgDpkfSdd8zhuzXEl9QzYeNcw8Hq2oVIzDLWuZN2PQBwM5PWjc2S31K8Q1UbcFMfw==} peerDependencies: react: ^18.2.0 - react-native-svg: '*' - peerDependenciesMeta: - react-native-svg: - optional: true dependencies: prop-types: 15.8.1 qr.js: 0.0.0 @@ -18664,26 +20012,26 @@ packages: use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) dev: true - /react-router-dom@6.23.1(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==} + /react-router-dom@6.24.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-U19KtXqooqw967Vw0Qcn5cOvrX5Ejo9ORmOtJMzYWtCT4/WOfFLIZGGsVLxcd9UkBO0mSTZtXqhZBsWlHr7+Sg==} engines: {node: '>=14.0.0'} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@remix-run/router': 1.16.1 + '@remix-run/router': 1.17.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.23.1(react@18.3.1) + react-router: 6.24.1(react@18.3.1) dev: false - /react-router@6.23.1(react@18.3.1): - resolution: {integrity: sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==} + /react-router@6.24.1(react@18.3.1): + resolution: {integrity: sha512-PTXFXGK2pyXpHzVo3rR9H7ip4lSPZZc0bHG5CARmj65fTT6qG7sTngmb6lcYu1gf3y/8KxORoy9yn59pGpCnpg==} engines: {node: '>=14.0.0'} peerDependencies: react: ^18.2.0 dependencies: - '@remix-run/router': 1.16.1 + '@remix-run/router': 1.17.1 react: 18.3.1 dev: false @@ -19050,7 +20398,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -19058,7 +20406,7 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -19092,10 +20440,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /reverse-arguments@1.0.0: - resolution: {integrity: sha512-/x8uIPdTafBqakK0TmPNJzgkLP+3H+yxpUJhCQHsLBg1rYEVNR2D8BRYNWQhVBjyOd7oo1dZRVzIkwMY2oqfYQ==} - dev: true - /rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} dev: true @@ -19122,12 +20466,12 @@ packages: dependencies: glob: 7.2.3 - /rimraf@5.0.7: - resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} - engines: {node: '>=14.18'} + /rimraf@5.0.9: + resolution: {integrity: sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==} + engines: {node: 14 >=14.20 || 16 >=16.20 || >=18} hasBin: true dependencies: - glob: 10.4.1 + glob: 10.4.5 dev: true /ripemd160@2.0.2: @@ -19143,6 +20487,21 @@ packages: bn.js: 5.2.1 dev: false + /rollup-plugin-inject@3.0.2: + resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. + dependencies: + estree-walker: 0.6.1 + magic-string: 0.25.9 + rollup-pluginutils: 2.8.2 + dev: false + + /rollup-plugin-node-polyfills@0.2.1: + resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} + dependencies: + rollup-plugin-inject: 3.0.2 + dev: false + /rollup-plugin-visualizer@5.12.0: resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} engines: {node: '>=14'} @@ -19159,6 +20518,12 @@ packages: yargs: 17.7.2 dev: false + /rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + dependencies: + estree-walker: 0.6.1 + dev: false + /rollup@3.29.4: resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -19167,32 +20532,43 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + /rollup@4.18.1: + resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 + '@rollup/rollup-android-arm-eabi': 4.18.1 + '@rollup/rollup-android-arm64': 4.18.1 + '@rollup/rollup-darwin-arm64': 4.18.1 + '@rollup/rollup-darwin-x64': 4.18.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 + '@rollup/rollup-linux-arm-musleabihf': 4.18.1 + '@rollup/rollup-linux-arm64-gnu': 4.18.1 + '@rollup/rollup-linux-arm64-musl': 4.18.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 + '@rollup/rollup-linux-riscv64-gnu': 4.18.1 + '@rollup/rollup-linux-s390x-gnu': 4.18.1 + '@rollup/rollup-linux-x64-gnu': 4.18.1 + '@rollup/rollup-linux-x64-musl': 4.18.1 + '@rollup/rollup-win32-arm64-msvc': 4.18.1 + '@rollup/rollup-win32-ia32-msvc': 4.18.1 + '@rollup/rollup-win32-x64-msvc': 4.18.1 fsevents: 2.3.3 dev: true + /rpc-websockets@7.11.2: + resolution: {integrity: sha512-pL9r5N6AVHlMN/vT98+fcO+5+/UcPLf/4tq+WUaid/PPUGS/ttJ3y8e9IqmaWKtShNAysMSjkczuEA49NuV7UQ==} + dependencies: + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + dev: false + /rtl-css-js@1.16.1: resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} dependencies: @@ -19252,6 +20628,14 @@ packages: util: 0.12.5 dev: false + /sats-connect@2.0.0: + resolution: {integrity: sha512-DmEcbYON3QLJVfLB4u1pni4VReLhJ6nuOOT2fxMIOZ4RbFupDJZpJ9o1cWx8vItIepiK/6fgIAaivQ96VFW2uQ==} + dependencies: + jsontokens: 4.0.1 + process: 0.11.10 + util: 0.12.5 + dev: false + /saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -19463,6 +20847,36 @@ packages: /shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + /sharp@0.33.2: + resolution: {integrity: sha512-WlYOPyyPDiiM07j/UO+E720ju6gtNtHjEGg5vovUk1Lgxyjm2LFO+37Nt/UI3MMh2l6hxTWQWi7qk3cXJTutcQ==} + engines: {libvips: '>=8.15.1', node: ^18.17.0 || ^20.3.0 || >=21.0.0} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.2 + '@img/sharp-darwin-x64': 0.33.2 + '@img/sharp-libvips-darwin-arm64': 1.0.1 + '@img/sharp-libvips-darwin-x64': 1.0.1 + '@img/sharp-libvips-linux-arm': 1.0.1 + '@img/sharp-libvips-linux-arm64': 1.0.1 + '@img/sharp-libvips-linux-s390x': 1.0.1 + '@img/sharp-libvips-linux-x64': 1.0.1 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.1 + '@img/sharp-libvips-linuxmusl-x64': 1.0.1 + '@img/sharp-linux-arm': 0.33.2 + '@img/sharp-linux-arm64': 0.33.2 + '@img/sharp-linux-s390x': 0.33.2 + '@img/sharp-linux-x64': 0.33.2 + '@img/sharp-linuxmusl-arm64': 0.33.2 + '@img/sharp-linuxmusl-x64': 0.33.2 + '@img/sharp-wasm32': 0.33.2 + '@img/sharp-win32-ia32': 0.33.2 + '@img/sharp-win32-x64': 0.33.2 + dev: false + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -19473,10 +20887,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shell-quote-word@1.0.1: - resolution: {integrity: sha512-lT297f1WLAdq0A4O+AknIFRP6kkiI3s8C913eJ0XqBxJbZPGWUNkRQk2u8zk4bEAjUJ5i+fSLwB6z1HzeT+DEg==} - dev: true - /shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} @@ -19487,7 +20897,7 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -19500,6 +20910,12 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + /simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: false + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -19567,9 +20983,9 @@ packages: jquery: 3.7.1 dev: false - /smol-toml@1.2.1: - resolution: {integrity: sha512-OtZKrVrGIT+m++lxyF0z5n68nkwdgZotPhy89bfA4T7nSWe0xeQtfbjM1z5VLTilJdWXH46g8i0oAcpQNkzZTg==} - engines: {node: '>= 18', pnpm: '>= 9'} + /smol-toml@1.2.2: + resolution: {integrity: sha512-fVEjX2ybKdJKzFL46VshQbj9PuA4IUKivalgp48/3zwS9vXzyykzQ6AX92UxHSvWJagziMRLeHMgEzoGO7A8hQ==} + engines: {node: '>= 18'} dev: true /socket.io-client@4.7.5: @@ -19578,7 +20994,7 @@ packages: dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.3.5(supports-color@8.1.1) - engine.io-client: 6.5.3 + engine.io-client: 6.5.4 socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil @@ -19665,6 +21081,11 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: false + /space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} dev: true @@ -19729,14 +21150,14 @@ packages: - supports-color dev: true - /speed-measure-webpack-plugin@1.4.2(webpack@5.92.0): + /speed-measure-webpack-plugin@1.4.2(webpack@5.92.1): resolution: {integrity: sha512-AtVzD0bnIy2/B0fWqJpJgmhcrfWFhBlduzSo0uwplr/QvB33ZNZj2NEth3NONgdnZJqicK0W0mSxnLSbsVCDbw==} engines: {node: '>=6.0.0'} peerDependencies: webpack: ^1 || ^2 || ^3 || ^4 || ^5 dependencies: chalk: 4.1.2 - webpack: 5.92.0(@swc/core@1.5.28)(esbuild@0.18.20) + webpack: 5.92.1(@swc/core@1.6.13)(esbuild@0.18.20) dev: true /split-on-first@1.1.0: @@ -19860,11 +21281,11 @@ packages: resolution: {integrity: sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==} dev: true - /storybook@7.6.19: - resolution: {integrity: sha512-xWD1C4vD/4KMffCrBBrUpsLUO/9uNpm8BVW8+Vcb30gkQDfficZ0oziWkmLexpT53VSioa24iazGXMwBqllYjQ==} + /storybook@7.6.20: + resolution: {integrity: sha512-Wt04pPTO71pwmRmsgkyZhNo4Bvdb/1pBAMsIFb9nQLykEdzzpXjvingxFFvdOG4nIowzwgxD+CLlyRqVJqnATw==} hasBin: true dependencies: - '@storybook/cli': 7.6.19 + '@storybook/cli': 7.6.20 transitivePeerDependencies: - bufferutil - encoding @@ -19897,6 +21318,12 @@ packages: /stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + /stream@0.0.2: + resolution: {integrity: sha512-gCq3NDI2P35B2n6t76YJuOp7d6cN/C7Rt0577l91wllh0sY9ZBuw9KaSGqH/b0hzn3CWWJbpbW0W0WvQ1H/Q7g==} + dependencies: + emitter-component: 1.1.2 + dev: false + /strict-uri-encode@1.1.0: resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} engines: {node: '>=0.10.0'} @@ -19948,8 +21375,11 @@ packages: strip-ansi: 7.1.0 dev: true - /string.fromcodepoint@0.2.1: - resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} + /string.prototype.includes@2.0.0: + resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 dev: true /string.prototype.matchall@4.0.11: @@ -20263,7 +21693,7 @@ packages: unique-string: 2.0.0 dev: true - /terser-webpack-plugin@5.3.10(@swc/core@1.5.28)(esbuild@0.18.20)(webpack@5.92.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.6.13)(esbuild@0.18.20)(webpack@5.92.1): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -20280,13 +21710,13 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.5.28 + '@swc/core': 1.6.13 esbuild: 0.18.20 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.1 - webpack: 5.92.0(@swc/core@1.5.28)(esbuild@0.18.20) + webpack: 5.92.1(@swc/core@1.6.13)(esbuild@0.18.20) dev: true /terser@4.8.1: @@ -20294,7 +21724,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - acorn: 8.11.3 + acorn: 8.12.1 commander: 2.20.3 source-map: 0.6.1 source-map-support: 0.5.21 @@ -20306,7 +21736,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -20318,6 +21748,10 @@ packages: glob: 7.2.3 minimatch: 3.1.2 + /text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + dev: false + /text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} @@ -20360,7 +21794,6 @@ packages: /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} @@ -20399,6 +21832,17 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tldts-core@6.1.31: + resolution: {integrity: sha512-IdTd0OpW2qgG1mbFxoXp14ohLNO6KP+H3htsNb3pk2FF8m21vvIaDlTWmKBR+UnZmXkSFOfZYYeswPAjSoHs+g==} + dev: false + + /tldts@6.0.16: + resolution: {integrity: sha512-TkEq38COU640mzOKPk4D1oH3FFVvwEtMaKIfw/+F/umVsy7ONWu8PPQH0c11qJ/Jq/zbcQGprXGsT8GcaDSmJg==} + hasBin: true + dependencies: + tldts-core: 6.1.31 + dev: false + /tmp@0.2.3: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} @@ -20420,28 +21864,12 @@ packages: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - /to-no-case@1.0.2: - resolution: {integrity: sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==} - dev: true - - /to-pascal-case@1.0.0: - resolution: {integrity: sha512-QGMWHqM6xPrcQW57S23c5/3BbYb0Tbe9p+ur98ckRnGDwD4wbbtDiYI38CfmMKNB5Iv0REjs5SNDntTwvDxzZA==} - dependencies: - to-space-case: 1.0.0 - dev: true - /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /to-space-case@1.0.0: - resolution: {integrity: sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==} - dependencies: - to-no-case: 1.0.2 - dev: true - /tocbot@4.28.2: resolution: {integrity: sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==} dev: true @@ -20521,7 +21949,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node@10.9.2(@swc/core@1.5.28)(@types/node@20.14.2)(typescript@5.4.5): + /ts-node@10.9.2(@swc/core@1.6.13)(@types/node@20.14.10)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -20536,14 +21964,14 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.5.28 + '@swc/core': 1.6.13 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.2 - acorn: 8.11.3 - acorn-walk: 8.3.2 + '@types/node': 20.14.10 + acorn: 8.12.1 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -20561,6 +21989,15 @@ packages: strip-bom: 3.0.0 dev: true + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -20568,6 +22005,10 @@ packages: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} dev: true + /tslib@2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + dev: false + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -20594,64 +22035,64 @@ packages: safe-buffer: 5.2.1 dev: true - /turbo-darwin-64@2.0.3: - resolution: {integrity: sha512-v7ztJ8sxdHw3SLfO2MhGFeeU4LQhFii1hIGs9uBiXns/0YTGOvxLeifnfGqhfSrAIIhrCoByXO7nR9wlm10n3Q==} + /turbo-darwin-64@2.0.6: + resolution: {integrity: sha512-XpgBwWj3Ggmz/gQVqXdMKXHC1iFPMDiuwugLwSzE7Ih0O13JuNtYZKhQnopvbDQnFQCeRq2Vsm5OTWabg/oB/g==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@2.0.3: - resolution: {integrity: sha512-LUcqvkV9Bxtng6QHbevp8IK8zzwbIxM6HMjCE7FEW6yJBN1KwvTtRtsGBwwmTxaaLO0wD1Jgl3vgkXAmQ4fqUw==} + /turbo-darwin-arm64@2.0.6: + resolution: {integrity: sha512-RfeZYXIAkiA21E8lsvfptGTqz/256YD+eI1x37fedfvnHFWuIMFZGAOwJxtZc6QasQunDZ9TRRREbJNI68tkIw==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@2.0.3: - resolution: {integrity: sha512-xpdY1suXoEbsQsu0kPep2zrB8ijv/S5aKKrntGuQ62hCiwDFoDcA/Z7FZ8IHQ2u+dpJARa7yfiByHmizFE0r5Q==} + /turbo-linux-64@2.0.6: + resolution: {integrity: sha512-92UDa0xNQQbx0HdSp9ag3YSS3xPdavhc7q9q9mxIAcqyjjD6VElA4Y85m4F/DDGE5SolCrvBz2sQhVmkOd6Caw==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@2.0.3: - resolution: {integrity: sha512-MBACTcSR874L1FtLL7gkgbI4yYJWBUCqeBN/iE29D+8EFe0d3fAyviFlbQP4K/HaDYet1i26xkkOiWr0z7/V9A==} + /turbo-linux-arm64@2.0.6: + resolution: {integrity: sha512-eQKu6utCVUkIH2kqOzD8OS6E0ba6COjWm6PRDTNCHQRljZW503ycaTUIdMOiJrVg1MkEjDyOReUg8s8D18aJ4Q==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@2.0.3: - resolution: {integrity: sha512-zi3YuKPkM9JxMTshZo3excPk37hUrj5WfnCqh4FjI26ux6j/LJK+Dh3SebMHd9mR7wP9CMam4GhmLCT+gDfM+w==} + /turbo-windows-64@2.0.6: + resolution: {integrity: sha512-+9u4EPrpoeHYCQ46dRcou9kbkSoelhOelHNcbs2d86D6ruYD/oIAHK9qgYK8LeARRz0jxhZIA/dWYdYsxJJWkw==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@2.0.3: - resolution: {integrity: sha512-wmed4kkenLvRbidi7gISB4PU77ujBuZfgVGDZ4DXTFslE/kYpINulwzkVwJIvNXsJtHqyOq0n6jL8Zwl3BrwDg==} + /turbo-windows-arm64@2.0.6: + resolution: {integrity: sha512-rdrKL+p+EjtdDVg0wQ/7yTbzkIYrnb0Pw4IKcjsy3M0RqUM9UcEi67b94XOAyTa5a0GqJL1+tUj2ebsFGPgZbg==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@2.0.3: - resolution: {integrity: sha512-jF1K0tTUyryEWmgqk1V0ALbSz3VdeZ8FXUo6B64WsPksCMCE48N5jUezGOH2MN0+epdaRMH8/WcPU0QQaVfeLA==} + /turbo@2.0.6: + resolution: {integrity: sha512-/Ftmxd5Mq//a9yMonvmwENNUN65jOVTwhhBPQjEtNZutYT9YKyzydFGLyVM1nzhpLWahQSMamRc/RDBv5EapzA==} hasBin: true optionalDependencies: - turbo-darwin-64: 2.0.3 - turbo-darwin-arm64: 2.0.3 - turbo-linux-64: 2.0.3 - turbo-linux-arm64: 2.0.3 - turbo-windows-64: 2.0.3 - turbo-windows-arm64: 2.0.3 + turbo-darwin-64: 2.0.6 + turbo-darwin-arm64: 2.0.6 + turbo-linux-64: 2.0.6 + turbo-linux-arm64: 2.0.6 + turbo-windows-64: 2.0.6 + turbo-windows-arm64: 2.0.6 dev: true /tween-functions@1.2.0: @@ -20810,6 +22251,12 @@ packages: multiformats: 9.9.0 dev: false + /uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + dependencies: + multiformats: 9.9.0 + dev: false + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -20847,12 +22294,6 @@ packages: pathe: 1.1.2 dev: false - /unescape-js@1.1.4: - resolution: {integrity: sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==} - dependencies: - string.fromcodepoint: 0.2.1 - dev: true - /unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} dev: false @@ -20923,17 +22364,17 @@ packages: /unplugin@1.0.1: resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} dependencies: - acorn: 8.11.3 + acorn: 8.12.1 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 dev: false - /unplugin@1.10.1: - resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} + /unplugin@1.11.0: + resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} engines: {node: '>=14.0.0'} dependencies: - acorn: 8.11.3 + acorn: 8.12.1 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.2 @@ -20986,10 +22427,10 @@ packages: anymatch: 3.1.3 chokidar: 3.6.0 destr: 2.0.3 - h3: 1.11.1 + h3: 1.12.0 idb-keyval: 6.2.1 listhen: 1.7.2 - lru-cache: 10.2.2 + lru-cache: 10.4.2 mri: 1.2.0 node-fetch-native: 1.6.4 ofetch: 1.3.4 @@ -21012,8 +22453,8 @@ packages: pathe: 1.1.2 dev: false - /update-browserslist-db@1.0.16(browserslist@4.23.1): - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + /update-browserslist-db@1.1.0(browserslist@4.23.1): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -21054,7 +22495,7 @@ packages: resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: punycode: 1.4.1 - qs: 6.12.1 + qs: 6.12.3 dev: true /use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): @@ -21070,7 +22511,6 @@ packages: '@types/react': 18.3.3 react: 18.3.1 tslib: 2.6.3 - dev: true /use-resize-observer@9.1.0(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} @@ -21097,7 +22537,6 @@ packages: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.3 - dev: true /use-sync-external-store@1.2.0(react@18.3.1): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} @@ -21114,13 +22553,12 @@ packages: os-homedir: 1.0.2 dev: true - /utf-8-validate@6.0.4: - resolution: {integrity: sha512-xu9GQDeFp+eZ6LnCywXN/zBancWvOpUMzgjLPSjy4BRHSmTelvn2E0DG0o1sTiw5hkCKBHo8rwSKncfRfv2EEQ==} + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} requiresBuild: true dependencies: node-gyp-build: 4.8.1 - dev: false /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} @@ -21164,8 +22602,8 @@ packages: /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - /v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -21242,8 +22680,8 @@ packages: - utf-8-validate - zod - /viem@2.13.8(typescript@5.4.5)(zod@3.23.8): - resolution: {integrity: sha512-JX8dOrCJKazNVs7YAahXnX+NANp0nlK16GyYjtQXILnar1daCPsLy4uzKgZDBVBD6DdRP2lsbPfo4X7QX3q5EQ==} + /viem@2.17.3(typescript@5.4.5)(zod@3.23.8): + resolution: {integrity: sha512-FY/1uBQWfko4Esy8mU1RamvL64TLy91LZwFyQJ20E6AI3vTTEOctWfSn0pkMKa3okq4Gxs5dJE7q1hmWOQ7xcw==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -21251,21 +22689,21 @@ packages: optional: true dependencies: '@adraffy/ens-normalize': 1.10.0 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/bip32': 1.3.2 - '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.4.5)(zod@3.23.8) - isows: 1.0.4(ws@8.13.0) + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + abitype: 1.0.5(typescript@5.4.5)(zod@3.23.8) + isows: 1.0.4(ws@8.17.1) typescript: 5.4.5 - ws: 8.13.0 + ws: 8.17.1 transitivePeerDependencies: - bufferutil - utf-8-validate - zod dev: false - /vite-node@1.6.0(@types/node@20.14.2): + /vite-node@1.6.0(@types/node@20.14.10): resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -21274,7 +22712,7 @@ packages: debug: 4.3.5(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.0.1 - vite: 5.2.13(@types/node@20.14.2) + vite: 5.3.3(@types/node@20.14.10) transitivePeerDependencies: - '@types/node' - less @@ -21295,7 +22733,7 @@ packages: buffer-polyfill: /buffer@6.0.3 node-stdlib-browser: 1.2.0 process: 0.11.10 - vite: 4.5.3(@types/node@20.14.2) + vite: 4.5.3(@types/node@20.14.10) transitivePeerDependencies: - rollup dev: true @@ -21305,10 +22743,10 @@ packages: peerDependencies: vite: ^2 || ^3 || ^4 || ^5 dependencies: - vite: 4.5.3(@types/node@20.14.2) + vite: 4.5.3(@types/node@20.14.10) dev: true - /vite@4.5.3(@types/node@20.14.2): + /vite@4.5.3(@types/node@20.14.10): resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -21336,16 +22774,16 @@ packages: terser: optional: true dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 esbuild: 0.18.20 - postcss: 8.4.38 + postcss: 8.4.39 rollup: 3.29.4 optionalDependencies: fsevents: 2.3.3 dev: true - /vite@5.2.13(@types/node@20.14.2): - resolution: {integrity: sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==} + /vite@5.3.3(@types/node@20.14.10): + resolution: {integrity: sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -21372,15 +22810,15 @@ packages: terser: optional: true dependencies: - '@types/node': 20.14.2 - esbuild: 0.20.2 - postcss: 8.4.38 - rollup: 4.18.0 + '@types/node': 20.14.10 + esbuild: 0.21.5 + postcss: 8.4.39 + rollup: 4.18.1 optionalDependencies: fsevents: 2.3.3 dev: true - /vitest@1.6.0(@types/node@20.14.2): + /vitest@1.6.0(@types/node@20.14.10): resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -21405,13 +22843,13 @@ packages: jsdom: optional: true dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.10 '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 '@vitest/snapshot': 1.6.0 '@vitest/spy': 1.6.0 '@vitest/utils': 1.6.0 - acorn-walk: 8.3.2 + acorn-walk: 8.3.3 chai: 4.4.1 debug: 4.3.5(supports-color@8.1.1) execa: 8.0.1 @@ -21423,9 +22861,9 @@ packages: strip-literal: 2.1.0 tinybench: 2.8.0 tinypool: 0.8.4 - vite: 5.2.13(@types/node@20.14.2) - vite-node: 1.6.0(@types/node@20.14.2) - why-is-node-running: 2.2.2 + vite: 5.3.3(@types/node@20.14.10) + vite-node: 1.6.0(@types/node@20.14.10) + why-is-node-running: 2.3.0 transitivePeerDependencies: - less - lightningcss @@ -21436,10 +22874,6 @@ packages: - terser dev: true - /vlq@0.2.3: - resolution: {integrity: sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==} - dev: true - /vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} dev: false @@ -21460,8 +22894,8 @@ packages: xml-name-validator: 4.0.0 dev: true - /wagmi@2.10.0(@tanstack/react-query@5.44.0)(@types/react@18.3.3)(react-dom@18.3.1)(react-i18next@13.5.0)(react-native@0.74.2)(react@18.3.1)(typescript@5.4.5)(viem@2.13.8)(zod@3.23.8): - resolution: {integrity: sha512-4XyAIyzSEsDBoAnQjOYD8zgb9A/YXyiCVAWC7jMdtC3La1w/aU/TslEUIYwFsnwCb7yTwsy9z6fXRHKsGp3ScA==} + /wagmi@2.10.9(@tanstack/react-query@5.50.1)(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8): + resolution: {integrity: sha512-pYGTLmVIAC4q/a90i+vlrkJL86n5Kf/gwhhi65XtQklpsUQWrKDmn4dsY1/yFeAmZ/1yx1mpxYpX3LI97eTuWA==} peerDependencies: '@tanstack/react-query': '>=5.0.0' react: ^18.2.0 @@ -21471,13 +22905,13 @@ packages: typescript: optional: true dependencies: - '@tanstack/react-query': 5.44.0(react@18.3.1) - '@wagmi/connectors': 5.0.12(@types/react@18.3.3)(@wagmi/core@2.11.0)(react-dom@18.3.1)(react-i18next@13.5.0)(react-native@0.74.2)(react@18.3.1)(typescript@5.4.5)(viem@2.13.8)(zod@3.23.8) - '@wagmi/core': 2.11.0(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.13.8)(zod@3.23.8) + '@tanstack/react-query': 5.50.1(react@18.3.1) + '@wagmi/connectors': 5.0.21(@types/react@18.3.3)(@wagmi/core@2.11.6)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8) + '@wagmi/core': 2.11.6(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.3)(zod@3.23.8) react: 18.3.1 typescript: 5.4.5 use-sync-external-store: 1.2.0(react@18.3.1) - viem: 2.13.8(typescript@5.4.5)(zod@3.23.8) + viem: 2.17.3(typescript@5.4.5)(zod@3.23.8) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -21498,7 +22932,6 @@ packages: - immer - ioredis - react-dom - - react-i18next - react-native - rollup - supports-color @@ -21513,7 +22946,7 @@ packages: hasBin: true dependencies: axios: 1.7.2(debug@4.3.5) - joi: 17.13.1 + joi: 17.13.3 lodash: 4.17.21 minimist: 1.2.8 rxjs: 7.8.1 @@ -21552,7 +22985,7 @@ packages: '@ethereumjs/util': 8.1.0 bn.js: 5.2.1 ethereum-bloom-filters: 1.1.0 - ethereum-cryptography: 2.2.0 + ethereum-cryptography: 2.2.1 ethjs-unit: 0.1.6 number-to-bn: 1.7.0 randombytes: 2.1.0 @@ -21571,7 +23004,7 @@ packages: engines: {node: '>=12'} dev: true - /webpack-dev-middleware@5.3.4(webpack@5.92.0): + /webpack-dev-middleware@5.3.4(webpack@5.92.1): resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -21582,10 +23015,10 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.92.0(@swc/core@1.5.28)(esbuild@0.18.20) + webpack: 5.92.1(@swc/core@1.6.13)(esbuild@0.18.20) dev: true - /webpack-dev-server@4.15.2(debug@4.3.5)(webpack@5.92.0): + /webpack-dev-server@4.15.2(debug@4.3.5)(webpack@5.92.1): resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} engines: {node: '>= 12.13.0'} hasBin: true @@ -21617,7 +23050,7 @@ packages: html-entities: 2.5.2 http-proxy-middleware: 2.0.6(@types/express@4.17.21)(debug@4.3.5) ipaddr.js: 2.2.0 - launch-editor: 2.6.1 + launch-editor: 2.8.0 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 @@ -21626,9 +23059,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.92.0(@swc/core@1.5.28)(esbuild@0.18.20) - webpack-dev-middleware: 5.3.4(webpack@5.92.0) - ws: 8.17.0 + webpack: 5.92.1(@swc/core@1.6.13)(esbuild@0.18.20) + webpack-dev-middleware: 5.3.4(webpack@5.92.1) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - debug @@ -21657,8 +23090,8 @@ packages: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} dev: true - /webpack@5.92.0(@swc/core@1.5.28)(esbuild@0.18.20): - resolution: {integrity: sha512-Bsw2X39MYIgxouNATyVpCNVWBCuUwDgWtN78g6lSdPJRLaQ/PUVm/oXcaRAyY/sMFoKFQrsPeqvTizWtq7QPCA==} + /webpack@5.92.1(@swc/core@1.6.13)(esbuild@0.18.20): + resolution: {integrity: sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -21672,12 +23105,12 @@ packages: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-attributes: 1.9.5(acorn@8.11.3) + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) browserslist: 4.23.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.0 - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -21688,7 +23121,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.5.28)(esbuild@0.18.20)(webpack@5.92.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.13)(esbuild@0.18.20)(webpack@5.92.1) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -21797,8 +23230,8 @@ packages: dependencies: isexe: 2.0.0 - /why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + /why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} hasBin: true dependencies: @@ -21876,8 +23309,8 @@ packages: imurmurhash: 0.1.4 signal-exit: 3.0.7 - /ws@6.2.2: - resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} + /ws@6.2.3: + resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -21902,8 +23335,8 @@ packages: optional: true dev: false - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -21915,19 +23348,6 @@ packages: optional: true dev: false - /ws@8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} @@ -21940,8 +23360,8 @@ packages: utf-8-validate: optional: true - /ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + /ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -21951,20 +23371,21 @@ packages: optional: true utf-8-validate: optional: true - dev: true - /ws@8.5.0: - resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - dev: true + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} @@ -22068,8 +23489,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + /yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} dev: true @@ -22078,7 +23499,7 @@ packages: engines: {node: '>=10'} dependencies: '@babel/runtime': 7.24.7 - '@types/lodash': 4.17.5 + '@types/lodash': 4.17.6 lodash: 4.17.21 lodash-es: 4.17.21 nanoclone: 0.2.1 @@ -22095,6 +23516,10 @@ packages: zod: 3.23.8 dev: true + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + /zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} From c24644dc56dc6bfe8faa7b17016375ef637a6aae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Wed, 17 Jul 2024 21:15:06 +0100 Subject: [PATCH 02/41] fix: wagmi flag --- apps/hybrid-pay/src/constants/chain.ts | 6 ++---- apps/hybrid-pay/src/main.tsx | 3 +-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/apps/hybrid-pay/src/constants/chain.ts b/apps/hybrid-pay/src/constants/chain.ts index b659285ee..6bace8ce5 100644 --- a/apps/hybrid-pay/src/constants/chain.ts +++ b/apps/hybrid-pay/src/constants/chain.ts @@ -1,4 +1,4 @@ -import { ChainId, getChainIdByChainName, isTestnetChainId } from '@gobob/chains'; +import { ChainId, getChainIdByChainName } from '@gobob/chains'; const CHAIN = getChainIdByChainName(import.meta.env.VITE_CHAIN_NAME) as ChainId; @@ -6,6 +6,4 @@ if (!CHAIN) { throw new Error('Missing L1 chain'); } -const isProd = !isTestnetChainId(CHAIN); - -export { CHAIN, isProd }; +export { CHAIN }; diff --git a/apps/hybrid-pay/src/main.tsx b/apps/hybrid-pay/src/main.tsx index ef6d5b700..bb07d7c70 100644 --- a/apps/hybrid-pay/src/main.tsx +++ b/apps/hybrid-pay/src/main.tsx @@ -11,7 +11,6 @@ import ReactDOM from 'react-dom/client'; import App from './App'; import { queryClient } from './lib/react-query'; -import { isProd } from './constants'; import './index.css'; import './utils/sentry'; @@ -23,7 +22,7 @@ ReactDOM.createRoot(document.getElementById('root')!).render( walletConnectors: [EthereumWalletConnectors, BitcoinWalletConnectors, ZeroDevSmartWalletConnectors] }} > - + From 473890c3da353ae9f347e75abfe3181627e1dbae Mon Sep 17 00:00:00 2001 From: Sander Bosma Date: Thu, 18 Jul 2024 17:40:10 +0200 Subject: [PATCH 03/41] feat: use guarantor --- apps/hybrid-pay/.env.example | 1 + apps/hybrid-pay/src/hooks/useKernelClient.ts | 48 ++++++++++++++------ apps/hybrid-pay/vite.config.ts | 5 ++ 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/apps/hybrid-pay/.env.example b/apps/hybrid-pay/.env.example index 2cb8ff363..cf2d355c6 100644 --- a/apps/hybrid-pay/.env.example +++ b/apps/hybrid-pay/.env.example @@ -6,6 +6,7 @@ VITE_MARKET_DATA_API="/marketdata/v1" VITE_GEOBLOCK_ENABLED=false VITE_ONRAMP_API_URL="https://onramp-api-testnet.gobob.xyz" VITE_BTC_API_URL="https://btc-testnet.gobob.xyz" +VITE_FUSION_API='http://localhost:4000' VITE_FEATURE_FLAG_BTC_ONRAMP=disabled VITE_INDEXER_BRIDGE_URL="" VITE_SENTRY_URL="" diff --git a/apps/hybrid-pay/src/hooks/useKernelClient.ts b/apps/hybrid-pay/src/hooks/useKernelClient.ts index a37faa0f3..563240ea9 100644 --- a/apps/hybrid-pay/src/hooks/useKernelClient.ts +++ b/apps/hybrid-pay/src/hooks/useKernelClient.ts @@ -57,18 +57,18 @@ const useKernelClient = (gasToken?: Currency) => { middleware: { gasPrice: async () => (await bundlerClient.getUserOperationGasPrice()).fast, // MEMO: uncomment for fully sponsored tx - // sponsorUserOperation: async ({ userOperation }) => { - // const paymaster = createPimlicoPaymasterClient({ - // chain, - // entryPoint: ENTRYPOINT_ADDRESS_V07, - // // Get this RPC from ZeroDev dashboard - // transport: http(getBundlerByChainId(chain.id)) - // }); - - // return paymaster.sponsorUserOperation({ - // userOperation - // }); - // } + // sponsorUserOperation: async ({ userOperation }) => { + // const paymaster = createPimlicoPaymasterClient({ + // chain, + // entryPoint: ENTRYPOINT_ADDRESS_V07, + // // Get this RPC from ZeroDev dashboard + // transport: http(getBundlerByChainId(chain.id)) + // }); + // + // return paymaster.sponsorUserOperation({ + // userOperation + // }); + // } sponsorUserOperation: async (args) => { const gasEstimates = await bundlerClient.estimateUserOperationGas({ userOperation: { @@ -77,9 +77,31 @@ const useKernelClient = (gasToken?: Currency) => { } }); + // We need to estimate gas prior to adding paymaster data, since the guarantor signs the gas limits. + // However, adding the guarantor actually increases the required gas. As a workaround, we add fixed + // amounts of gas here to account for the guarantor gas usage + gasEstimates.paymasterVerificationGasLimit! += 25000n; // observed increase was 13992 + gasEstimates.paymasterPostOpGasLimit! += 20000n; // observed increase was 10678 + + const fullUserOp = { + paymaster, + ...args.userOperation, + ...gasEstimates + }; + + // can't json-serialize bigints - convert them to strings + BigInt.prototype['toJSON'] = function () { + return this.toString(); + }; + const body = JSON.stringify(fullUserOp); + + const rawData = await fetch('/fusion-api/guarantor', { method: 'POST', body }); + const paymasterData = (await rawData.json()).paymasterData; + return { ...gasEstimates, - paymaster + paymaster, + paymasterData }; } } diff --git a/apps/hybrid-pay/vite.config.ts b/apps/hybrid-pay/vite.config.ts index d232c3b3d..08161f78c 100644 --- a/apps/hybrid-pay/vite.config.ts +++ b/apps/hybrid-pay/vite.config.ts @@ -39,6 +39,11 @@ export default defineConfig(({ mode }) => { changeOrigin: true, rewrite: (path) => path.replace(/^\/dynamic-api/, '') }, + '/fusion-api': { + target: env.VITE_FUSION_API, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, '') + }, '/onramp-api': { target: env.VITE_ONRAMP_API_URL, changeOrigin: true, From f0898a2111eeace100812fde6a3fc2b8c4d07fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Thu, 18 Jul 2024 18:54:09 +0100 Subject: [PATCH 04/41] feat: add new design --- apps/evm/src/utils/math.ts | 2 +- apps/hybrid-pay/package.json | 4 + apps/hybrid-pay/src/App.tsx | 62 ++++++- .../components/AmountLabel/AmountLabel.tsx | 35 ---- .../src/components/AmountLabel/index.tsx | 1 - .../src/components/Layout/Header.tsx | 51 +++--- .../src/components/Layout/Layout.style.tsx | 50 +----- .../src/components/Layout/Layout.tsx | 9 +- .../src/components/Layout/LayoutContext.tsx | 20 --- .../hybrid-pay/src/components/Layout/Main.tsx | 4 +- apps/hybrid-pay/src/components/Layout/Nav.tsx | 9 - .../src/components/Layout/NavItem.tsx | 62 ------- .../src/components/Layout/Sidebar.tsx | 49 ------ .../src/components/Layout/index.tsx | 2 - .../src/components/Logo/Logo.style.tsx | 14 +- apps/hybrid-pay/src/components/Logo/Logo.tsx | 21 +-- .../components/SocialsGroup/SocialsGroup.tsx | 43 ----- .../src/components/SocialsGroup/index.tsx | 1 - .../TransactionDetails.style.tsx | 17 -- .../TransactionDetails/TransactionDetails.tsx | 84 --------- .../components/TransactionDetails/index.tsx | 1 - apps/hybrid-pay/src/components/index.ts | 2 - apps/hybrid-pay/src/constants/assets.ts | 127 ++++++++------ apps/hybrid-pay/src/constants/chain.ts | 6 +- apps/hybrid-pay/src/constants/index.ts | 1 - apps/hybrid-pay/src/constants/links.ts | 6 - apps/hybrid-pay/src/constants/routes.ts | 4 +- apps/hybrid-pay/src/hooks/index.ts | 1 + apps/hybrid-pay/src/hooks/useBalances.ts | 2 +- apps/hybrid-pay/src/hooks/useTokens.ts | 10 ++ apps/hybrid-pay/src/hooks/useTotalBalance.ts | 34 ++++ apps/hybrid-pay/src/lib/form/transfer.ts | 32 ++-- apps/hybrid-pay/src/pages/Home/Home.tsx | 24 --- .../Home/components/SendTokenModal/index.tsx | 1 - .../src/pages/Home/components/index.tsx | 1 - apps/hybrid-pay/src/pages/Home/index.tsx | 1 - apps/hybrid-pay/src/pages/Recieve/Recieve.tsx | 46 +++++ apps/hybrid-pay/src/pages/Recieve/index.tsx | 1 + .../SendTokenModal.tsx => Send/Send.tsx} | 159 +++++++++--------- .../components/ButtonGroup/ButtonGroup.tsx | 30 ++++ .../ButtonGroup/CardButton.style.tsx | 13 ++ .../components/ButtonGroup/CardButton.tsx | 34 ++++ .../Send/components/ButtonGroup/index.ts | 1 + .../TokenButtonGroup/TokenButtonGroup.tsx | 103 ++++++++++++ .../Send/components/TokenButtonGroup/index.ts | 1 + .../src/pages/Send/components/index.tsx | 1 + apps/hybrid-pay/src/pages/Send/index.tsx | 1 + .../Wallet.style.tsx} | 0 apps/hybrid-pay/src/pages/Wallet/Wallet.tsx | 32 ++++ .../src/pages/Wallet/components/Hero/Hero.tsx | 67 ++++++++ .../pages/Wallet/components/Hero/index.tsx | 1 + .../src/pages/Wallet/components/index.tsx | 1 + apps/hybrid-pay/src/pages/Wallet/index.tsx | 1 + apps/hybrid-pay/src/utils/math.ts | 2 +- apps/hybrid-pay/vite.config.ts | 5 + pnpm-lock.yaml | 32 ++++ 56 files changed, 696 insertions(+), 628 deletions(-) delete mode 100644 apps/hybrid-pay/src/components/AmountLabel/AmountLabel.tsx delete mode 100644 apps/hybrid-pay/src/components/AmountLabel/index.tsx delete mode 100644 apps/hybrid-pay/src/components/Layout/LayoutContext.tsx delete mode 100644 apps/hybrid-pay/src/components/Layout/Nav.tsx delete mode 100644 apps/hybrid-pay/src/components/Layout/NavItem.tsx delete mode 100644 apps/hybrid-pay/src/components/Layout/Sidebar.tsx delete mode 100644 apps/hybrid-pay/src/components/SocialsGroup/SocialsGroup.tsx delete mode 100644 apps/hybrid-pay/src/components/SocialsGroup/index.tsx delete mode 100644 apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.style.tsx delete mode 100644 apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.tsx delete mode 100644 apps/hybrid-pay/src/components/TransactionDetails/index.tsx delete mode 100644 apps/hybrid-pay/src/constants/links.ts create mode 100644 apps/hybrid-pay/src/hooks/useTotalBalance.ts delete mode 100644 apps/hybrid-pay/src/pages/Home/Home.tsx delete mode 100644 apps/hybrid-pay/src/pages/Home/components/SendTokenModal/index.tsx delete mode 100644 apps/hybrid-pay/src/pages/Home/components/index.tsx delete mode 100644 apps/hybrid-pay/src/pages/Home/index.tsx create mode 100644 apps/hybrid-pay/src/pages/Recieve/Recieve.tsx create mode 100644 apps/hybrid-pay/src/pages/Recieve/index.tsx rename apps/hybrid-pay/src/pages/{Home/components/SendTokenModal/SendTokenModal.tsx => Send/Send.tsx} (73%) create mode 100644 apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx create mode 100644 apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.style.tsx create mode 100644 apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx create mode 100644 apps/hybrid-pay/src/pages/Send/components/ButtonGroup/index.ts create mode 100644 apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx create mode 100644 apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/index.ts create mode 100644 apps/hybrid-pay/src/pages/Send/components/index.tsx create mode 100644 apps/hybrid-pay/src/pages/Send/index.tsx rename apps/hybrid-pay/src/pages/{Home/Home.style.tsx => Wallet/Wallet.style.tsx} (100%) create mode 100644 apps/hybrid-pay/src/pages/Wallet/Wallet.tsx create mode 100644 apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx create mode 100644 apps/hybrid-pay/src/pages/Wallet/components/Hero/index.tsx create mode 100644 apps/hybrid-pay/src/pages/Wallet/components/index.tsx create mode 100644 apps/hybrid-pay/src/pages/Wallet/index.tsx diff --git a/apps/evm/src/utils/math.ts b/apps/evm/src/utils/math.ts index dfa893ebd..94ee871f0 100644 --- a/apps/evm/src/utils/math.ts +++ b/apps/evm/src/utils/math.ts @@ -2,6 +2,6 @@ import { Currency, CurrencyAmount } from '@gobob/currency'; import Big from 'big.js'; const calculateAmountUSD = (amount: CurrencyAmount, price: number) => - !isNaN(amount as any) ? new Big(amount.toExact()).mul(price || 0).toNumber() : 0; + new Big(amount.toExact()).mul(price || 0).toNumber(); export { calculateAmountUSD }; diff --git a/apps/hybrid-pay/package.json b/apps/hybrid-pay/package.json index 5867b3d34..a5a6da47f 100644 --- a/apps/hybrid-pay/package.json +++ b/apps/hybrid-pay/package.json @@ -30,7 +30,10 @@ "@gobob/ui": "workspace:^", "@gobob/utils": "workspace:^", "@gobob/wagmi": "workspace:^", + "@react-aria/tag": "^3.4.1", "@react-aria/utils": "^3.23.2", + "@react-stately/collections": "^3.10.0", + "@react-stately/list": "^3.9.1", "@sentry/react": "^8.8.0", "@sentry/vite-plugin": "^2.18.0", "@zerodev/sdk": "^5.3.3", @@ -38,6 +41,7 @@ "permissionless": "^0.1.36", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-qr-code": "^2.0.12", "react-router-dom": "^6.16.0", "styled-components": "^6.0.8", "viem": "^2.17.3", diff --git a/apps/hybrid-pay/src/App.tsx b/apps/hybrid-pay/src/App.tsx index d4f0c27ac..573df4274 100644 --- a/apps/hybrid-pay/src/App.tsx +++ b/apps/hybrid-pay/src/App.tsx @@ -1,9 +1,12 @@ -import { useReconnect } from '@gobob/wagmi'; -import { Suspense, lazy, useEffect } from 'react'; -import { BrowserRouter, Route, Routes, useLocation } from 'react-router-dom'; +import { useAccount, useReconnect } from '@gobob/wagmi'; +import { ReactNode, Suspense, lazy, useEffect } from 'react'; +import { BrowserRouter, Navigate, Route, Routes, useLocation } from 'react-router-dom'; +import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { usePrices } from '@gobob/react-query'; -import { Header, Layout, Main, Sidebar } from './components'; -import { RoutesPath } from './constants'; +import { Header, Layout, Main } from './components'; +import { CHAIN, RoutesPath } from './constants'; +import { useBalances, useTokens } from './hooks'; const ScrollToTop = () => { // Extracts pathname property(key) from an object @@ -17,9 +20,21 @@ const ScrollToTop = () => { return null; }; -const Home = lazy(() => import('./pages/Home')); +const Wallet = lazy(() => import('./pages/Wallet')); +const Send = lazy(() => import('./pages/Send')); +const Recieve = lazy(() => import('./pages/Recieve')); const Custom404 = lazy(() => import('./pages/404')); +const ProtectedRoute = ({ children }: { children: ReactNode }) => { + const { isAuthenticated } = useDynamicContext(); + + if (!isAuthenticated) { + return ; + } + + return children; +}; + // using Main just so we can show the background wallpaper const Fallback = () => { const { pathname } = useLocation(); @@ -35,21 +50,52 @@ const Fallback = () => { function App() { const { reconnect } = useReconnect(); + const { walletConnector } = useDynamicContext(); + const { chain } = useAccount(); useEffect(() => { reconnect(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); + usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); + useBalances(CHAIN); + useTokens(CHAIN); + + useEffect(() => { + const switchChain = () => { + walletConnector!.switchNetwork({ networkChainId: CHAIN }); + }; + + if (walletConnector && chain && CHAIN !== chain.id) { + switchChain(); + } + }, [chain, walletConnector]); + return ( -
    }> - } path={RoutesPath.HOME} /> + } path={RoutesPath.HOME} /> + + + + } + path={RoutesPath.SEND} + /> + + + + } + path={RoutesPath.RECIEVE} + /> } path='*' /> diff --git a/apps/hybrid-pay/src/components/AmountLabel/AmountLabel.tsx b/apps/hybrid-pay/src/components/AmountLabel/AmountLabel.tsx deleted file mode 100644 index 0ab13a1a8..000000000 --- a/apps/hybrid-pay/src/components/AmountLabel/AmountLabel.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Currency, CurrencyAmount } from '@gobob/currency'; -import { usePrices } from '@gobob/react-query'; -import { useCurrencyFormatter } from '@gobob/ui'; -import { useMemo } from 'react'; - -import { calculateAmountUSD } from '../../utils'; - -type Props = { - amount?: CurrencyAmount; -}; - -type AmountLabelProps = Props; - -const AmountLabel = ({ amount }: AmountLabelProps): JSX.Element => { - const format = useCurrencyFormatter(); - - const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); - - const amountUSD = useMemo( - () => (amount ? calculateAmountUSD(amount, getPrice(amount.currency.symbol)) : undefined), - [amount, getPrice] - ); - - if (!amount) { - return <>-; - } - - return ( - <> - {amount.toExact()} {amount.currency.symbol} ({format(amountUSD || 0)}) - - ); -}; - -export { AmountLabel }; diff --git a/apps/hybrid-pay/src/components/AmountLabel/index.tsx b/apps/hybrid-pay/src/components/AmountLabel/index.tsx deleted file mode 100644 index 2e4268cf9..000000000 --- a/apps/hybrid-pay/src/components/AmountLabel/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { AmountLabel } from './AmountLabel'; diff --git a/apps/hybrid-pay/src/components/Layout/Header.tsx b/apps/hybrid-pay/src/components/Layout/Header.tsx index 263932dc1..b56e26d92 100644 --- a/apps/hybrid-pay/src/components/Layout/Header.tsx +++ b/apps/hybrid-pay/src/components/Layout/Header.tsx @@ -1,15 +1,11 @@ -import { Bars3, Button, Flex, FlexProps, useMediaQuery } from '@gobob/ui'; -import { useTheme } from 'styled-components'; -import { DynamicWidget } from '@dynamic-labs/sdk-react-core'; +import { DynamicWidget, useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { ArrowLeft, Button, Flex, FlexProps, Span } from '@gobob/ui'; +import { useLocation, useNavigate } from 'react-router-dom'; -import { RoutesPath } from '../../constants'; import { Logo } from '../Logo'; -import { SocialsGroup } from '../SocialsGroup'; +import { RoutesPath } from '../../constants'; import { StyledHeader, StyledLogoWrapper } from './Layout.style'; -import { useLayoutContext } from './LayoutContext'; -import { Nav } from './Nav'; -import { NavItem } from './NavItem'; type Props = { isTestnet?: boolean; isFusion?: boolean }; @@ -17,35 +13,28 @@ type InheritAttrs = Omit; type HeaderProps = Props & InheritAttrs; -const Header = ({ isTestnet, isFusion, ...props }: HeaderProps): JSX.Element => { - const { setSidebarOpen } = useLayoutContext(); - - const theme = useTheme(); - const isMobile = useMediaQuery(theme.breakpoints.down('md')); +const Header = ({ ...props }: HeaderProps): JSX.Element => { + const { isAuthenticated } = useDynamicContext(); + const { pathname } = useLocation(); + const navigate = useNavigate(); return ( - {isMobile && ( - + {pathname === RoutesPath.HOME ? ( + + ) : ( + + + + {pathname === RoutesPath.SEND ? 'Send' : 'Recieve'} + + )} - {!isMobile && } - - {!isMobile && ( - <> - - - - )} - - + {isAuthenticated && } ); }; diff --git a/apps/hybrid-pay/src/components/Layout/Layout.style.tsx b/apps/hybrid-pay/src/components/Layout/Layout.style.tsx index e39986bcb..eea0cded0 100644 --- a/apps/hybrid-pay/src/components/Layout/Layout.style.tsx +++ b/apps/hybrid-pay/src/components/Layout/Layout.style.tsx @@ -1,6 +1,4 @@ -import { MaxWidth, ResponsiveProp, Spacing, Span } from '@gobob/ui'; -import { Drawer, Flex } from '@gobob/ui'; -import { NavLink } from 'react-router-dom'; +import { Flex, MaxWidth, ResponsiveProp, Spacing } from '@gobob/ui'; import styled, { css } from 'styled-components'; type StyledMainProps = { @@ -28,10 +26,6 @@ const StyledLogoWrapper = styled(Flex)` padding-left: ${({ theme }) => theme.spacing('3xl')}; `; -const StyledDrawer = styled(Drawer)` - height: 100%; -`; - const StyledMain = styled.main` width: 100%; overflow-x: hidden; @@ -52,44 +46,4 @@ const StyledMain = styled.main` min-height: calc(100vh - 4.75rem); `; -// TODO: to be removed -const StyledContent = styled.div` - position: relative; -`; - -type StyledNavLinkProps = { - $isActive?: boolean; -}; - -const StyledNativeNavLink = styled(NavLink)` - text-decoration: none; - display: inline-flex; - align-items: center; - justify-content: center; -`; - -const StyledNavLink = styled(Span)` - ${({ theme }) => theme.transition('common', 'normal')} - - &:hover { - opacity: 0.8; - } -`; - -const StyledAnchor = styled.a` - text-decoration: none; - font: inherit; - color: inherit; -`; - -export { - StyledDrawer, - StyledHeader, - StyledNativeNavLink, - StyledNavLink, - StyledAnchor, - StyledContent, - StyledLogoWrapper, - StyledLayout, - StyledMain -}; +export { StyledHeader, StyledLayout, StyledLogoWrapper, StyledMain }; diff --git a/apps/hybrid-pay/src/components/Layout/Layout.tsx b/apps/hybrid-pay/src/components/Layout/Layout.tsx index b2ab438fa..03dc78bc5 100644 --- a/apps/hybrid-pay/src/components/Layout/Layout.tsx +++ b/apps/hybrid-pay/src/components/Layout/Layout.tsx @@ -1,7 +1,6 @@ import { HTMLAttributes } from 'react'; import { StyledLayout } from './Layout.style'; -import { LayoutProvider } from './LayoutContext'; type Props = {}; @@ -11,11 +10,9 @@ type LayoutProps = Props & NattiveAttrs; const Layout = ({ children, ...props }: LayoutProps): JSX.Element => { return ( - - - {children} - - + + {children} + ); }; diff --git a/apps/hybrid-pay/src/components/Layout/LayoutContext.tsx b/apps/hybrid-pay/src/components/Layout/LayoutContext.tsx deleted file mode 100644 index e57dbac30..000000000 --- a/apps/hybrid-pay/src/components/Layout/LayoutContext.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React, { ReactNode, useState } from 'react'; - -interface LayoutConfig { - isSidebarOpen: boolean; - setSidebarOpen: (isOpen: boolean) => void; -} - -const defaultContext: LayoutConfig = { isSidebarOpen: false, setSidebarOpen: () => {} }; - -const LayoutContext = React.createContext(defaultContext); - -const useLayoutContext = (): LayoutConfig => React.useContext(LayoutContext); - -const LayoutProvider = ({ children }: { children: ReactNode }) => { - const [isSidebarOpen, setSidebarOpen] = useState(false); - - return {children}; -}; - -export { LayoutProvider, useLayoutContext }; diff --git a/apps/hybrid-pay/src/components/Layout/Main.tsx b/apps/hybrid-pay/src/components/Layout/Main.tsx index b4d3300b2..383963f3b 100644 --- a/apps/hybrid-pay/src/components/Layout/Main.tsx +++ b/apps/hybrid-pay/src/components/Layout/Main.tsx @@ -1,7 +1,7 @@ import { ReactNode } from 'react'; import { MaxWidth, ResponsiveProp, Spacing } from '@gobob/ui'; -import { StyledContent, StyledMain } from './Layout.style'; +import { StyledMain } from './Layout.style'; type Props = { maxWidth?: ResponsiveProp; @@ -13,7 +13,7 @@ type MainProps = Props; const Main = ({ children, maxWidth, padding = '4xl', ...props }: MainProps): JSX.Element => ( - {children} + {children} ); diff --git a/apps/hybrid-pay/src/components/Layout/Nav.tsx b/apps/hybrid-pay/src/components/Layout/Nav.tsx deleted file mode 100644 index 314f57191..000000000 --- a/apps/hybrid-pay/src/components/Layout/Nav.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Flex, FlexProps } from '@gobob/ui'; - -type NavProps = FlexProps; - -const Nav = ({ gap = 'xl', ...props }: NavProps): JSX.Element => { - return ; -}; - -export { Nav }; diff --git a/apps/hybrid-pay/src/components/Layout/NavItem.tsx b/apps/hybrid-pay/src/components/Layout/NavItem.tsx deleted file mode 100644 index 56478dec4..000000000 --- a/apps/hybrid-pay/src/components/Layout/NavItem.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { Flex, Span, TextProps } from '@gobob/ui'; -import { ReactNode, useRef } from 'react'; -import { NavLinkProps } from 'react-router-dom'; -import { ArrowTopRightOnSquare } from '@gobob/ui'; - -import { StyledAnchor, StyledNativeNavLink, StyledNavLink } from './Layout.style'; - -import { useLayoutContext } from '.'; - -type Props = { - children: ReactNode; - size?: TextProps['size']; - isExternal?: boolean; -}; - -type InheritAttrs = Omit; - -type NavItemProps = Props & InheritAttrs; - -const NavItem = ({ children, size, isExternal, to, ...props }: NavItemProps): JSX.Element => { - const ref = useRef(null); - const { setSidebarOpen } = useLayoutContext(); - - const handlePress = () => setSidebarOpen(false); - - if (isExternal) { - return ( -
  • - - - - {children} - - - - -
  • - ); - } - - return ( -
  • - - {({ isActive }) => ( - - {children} - - )} - -
  • - ); -}; - -export { NavItem }; diff --git a/apps/hybrid-pay/src/components/Layout/Sidebar.tsx b/apps/hybrid-pay/src/components/Layout/Sidebar.tsx deleted file mode 100644 index 8d16e1dff..000000000 --- a/apps/hybrid-pay/src/components/Layout/Sidebar.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { Button, Flex, XMark, useMediaQuery } from '@gobob/ui'; -import { useTheme } from 'styled-components'; - -import { RoutesPath } from '../../constants'; -import { Logo } from '../Logo'; -import { SocialsGroup } from '../SocialsGroup'; - -import { StyledDrawer } from './Layout.style'; -import { useLayoutContext } from './LayoutContext'; -import { Nav } from './Nav'; -import { NavItem } from './NavItem'; - -type Props = { isTestnet?: boolean; isFusion?: boolean }; - -type SidebarProps = Props; - -const Sidebar = ({ isTestnet, isFusion }: SidebarProps): JSX.Element | null => { - const { isSidebarOpen, setSidebarOpen } = useLayoutContext(); - const theme = useTheme(); - - const isMobile = useMediaQuery(theme.breakpoints.down('lg')); - - if (isMobile) { - const handleClose = () => setSidebarOpen(false); - - return ( - - - - - - - - - - - - - ); - } - - return null; -}; - -export { Sidebar }; diff --git a/apps/hybrid-pay/src/components/Layout/index.tsx b/apps/hybrid-pay/src/components/Layout/index.tsx index f0e99079c..e1b896880 100644 --- a/apps/hybrid-pay/src/components/Layout/index.tsx +++ b/apps/hybrid-pay/src/components/Layout/index.tsx @@ -1,5 +1,3 @@ export { Header } from './Header'; export { Layout } from './Layout'; -export { Sidebar } from './Sidebar'; export { Main } from './Main'; -export { useLayoutContext } from './LayoutContext'; diff --git a/apps/hybrid-pay/src/components/Logo/Logo.style.tsx b/apps/hybrid-pay/src/components/Logo/Logo.style.tsx index ab6d71f94..ba66383fe 100644 --- a/apps/hybrid-pay/src/components/Logo/Logo.style.tsx +++ b/apps/hybrid-pay/src/components/Logo/Logo.style.tsx @@ -1,19 +1,11 @@ import { Span } from '@gobob/ui'; -import { Link } from 'react-router-dom'; import styled from 'styled-components'; -const StyledLogo = styled(Link)` +const StyledLogo = styled(Span)` display: inline-flex; align-items: center; - gap: ${({ theme }) => theme.spacing('md')}; + gap: ${({ theme }) => theme.spacing('s')}; text-decoration: none; `; -// TODO: Create UI badge component -const StyledBadge = styled(Span)` - border-radius: ${({ theme }) => theme.rounded('3xl')}; - background-color: ${({ theme }) => theme.color('grey-500')}; - padding: ${({ theme }) => `${theme.spacing('xs')} ${theme.spacing('md')}`}; -`; - -export { StyledLogo, StyledBadge }; +export { StyledLogo }; diff --git a/apps/hybrid-pay/src/components/Logo/Logo.tsx b/apps/hybrid-pay/src/components/Logo/Logo.tsx index 0d14481a5..61dad9212 100644 --- a/apps/hybrid-pay/src/components/Logo/Logo.tsx +++ b/apps/hybrid-pay/src/components/Logo/Logo.tsx @@ -1,12 +1,10 @@ -import { Flex, Span } from '@gobob/ui'; +import { Em, Flex, Span } from '@gobob/ui'; import { BOBLogo } from '@gobob/icons'; import { NavLinkProps } from 'react-router-dom'; -import { StyledBadge, StyledLogo } from './Logo.style'; +import { StyledLogo } from './Logo.style'; type Props = { - isTestnet?: boolean; - isFusion?: boolean; onPress?: () => void; to?: string; }; @@ -15,24 +13,17 @@ type InheritAttrs = Omit; type LogoProps = Props & InheritAttrs; -const Logo = ({ isTestnet, isFusion, to = '/', onPress, ...props }: LogoProps) => ( +const Logo = ({ to = '/', onPress, ...props }: LogoProps) => ( BOB - {isFusion && ( - - FUSION - - )} + + PAY + - {isTestnet && ( - - Testnet - - )} ); diff --git a/apps/hybrid-pay/src/components/SocialsGroup/SocialsGroup.tsx b/apps/hybrid-pay/src/components/SocialsGroup/SocialsGroup.tsx deleted file mode 100644 index 4cd441eba..000000000 --- a/apps/hybrid-pay/src/components/SocialsGroup/SocialsGroup.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { Button, ButtonProps, Flex, FlexProps } from '@gobob/ui'; -import { Discord, Twitter } from '@gobob/icons'; - -import { DocsLinks } from '../../constants'; - -type Props = { - showDocs?: boolean; - variant?: ButtonProps['variant']; -}; - -type InheritAttrs = Omit; - -type SocialsGroupProps = Props & InheritAttrs; - -const SocialsGroup = ({ - showDocs, - gap = 's', - justifyContent = 'center', - variant = 'outline', - ...props -}: SocialsGroupProps): JSX.Element => ( - - {showDocs && ( - - )} - - - -); - -export { SocialsGroup }; diff --git a/apps/hybrid-pay/src/components/SocialsGroup/index.tsx b/apps/hybrid-pay/src/components/SocialsGroup/index.tsx deleted file mode 100644 index 19513347f..000000000 --- a/apps/hybrid-pay/src/components/SocialsGroup/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { SocialsGroup } from './SocialsGroup'; diff --git a/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.style.tsx b/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.style.tsx deleted file mode 100644 index a6f4c653f..000000000 --- a/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.style.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { DlGroup, Dt } from '@gobob/ui'; -import styled from 'styled-components'; - -type StyledDtProps = { - $hasExtendedHeight?: boolean; -}; - -// This custom padding helps to keep harmony between normal elements and elements with small select -const StyledDlGroup = styled(DlGroup)` - line-height: 20px; -`; - -const StyledDt = styled(Dt)` - line-height: ${({ $hasExtendedHeight = true }) => $hasExtendedHeight && '1.875rem'}; -`; - -export { StyledDlGroup, StyledDt }; diff --git a/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.tsx b/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.tsx deleted file mode 100644 index de33a88ea..000000000 --- a/apps/hybrid-pay/src/components/TransactionDetails/TransactionDetails.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { Currency, CurrencyAmount } from '@gobob/currency'; -import { Avatar, Card, Dd, Dl, DlProps, Flex, SelectProps, Span, Spinner, TokenData } from '@gobob/ui'; -import { ReactNode } from 'react'; -import { ChainId } from '@gobob/chains'; - -import { AmountLabel } from '../AmountLabel'; - -import { StyledDlGroup, StyledDt } from './TransactionDetails.style'; - -type Props = { - chainId: ChainId; - gasEstimate?: CurrencyAmount; - gasEstimatePlaceholder?: CurrencyAmount; - isLoadingGasEstimate?: boolean; - tokenUrl?: string; - amount?: CurrencyAmount; - amountPlaceholder?: CurrencyAmount; - onChangeGasTicker?: (ticker: string) => void; - selectProps?: Omit, 'children'>; - duration?: ReactNode; - gasLabel?: ReactNode; -}; - -type InheritAttrs = Omit; - -type TransactionDetailsProps = Props & InheritAttrs; - -const TransactionDetails = ({ - chainId, - onChangeGasTicker, - amount: amountProp, - amountPlaceholder, - gasEstimate: gasEstimateProp, - gasEstimatePlaceholder, - isLoadingGasEstimate, - duration, - selectProps, - gasLabel = 'Estimated Gas', - tokenUrl, - ...props -}: TransactionDetailsProps): JSX.Element => { - const amount = amountProp || amountPlaceholder; - const gasEstimate = gasEstimateProp || gasEstimatePlaceholder; - - return ( - -
    - {amount && ( - - Sending -
    - - {tokenUrl && } - - - - -
    -
    - )} - {duration && ( - - Transfer time -
    {duration}
    -
    - )} - {gasEstimate && ( - - {gasLabel} -
    - - {isLoadingGasEstimate && } - {tokenUrl && } - - -
    -
    - )} -
    -
    - ); -}; - -export { TransactionDetails }; diff --git a/apps/hybrid-pay/src/components/TransactionDetails/index.tsx b/apps/hybrid-pay/src/components/TransactionDetails/index.tsx deleted file mode 100644 index 9c33a19c3..000000000 --- a/apps/hybrid-pay/src/components/TransactionDetails/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { TransactionDetails } from './TransactionDetails'; diff --git a/apps/hybrid-pay/src/components/index.ts b/apps/hybrid-pay/src/components/index.ts index ee99930d4..9877e7f4a 100644 --- a/apps/hybrid-pay/src/components/index.ts +++ b/apps/hybrid-pay/src/components/index.ts @@ -1,3 +1 @@ -export * from './TransactionDetails'; export * from './Layout'; -export * from './AmountLabel'; diff --git a/apps/hybrid-pay/src/constants/assets.ts b/apps/hybrid-pay/src/constants/assets.ts index 8a0c5e78d..ba9562d94 100644 --- a/apps/hybrid-pay/src/constants/assets.ts +++ b/apps/hybrid-pay/src/constants/assets.ts @@ -1,4 +1,5 @@ import { ChainId } from '@gobob/chains'; +import { USDC, USDT } from '@gobob/tokens'; import { Address } from 'viem'; export type RawToken = { @@ -12,59 +13,89 @@ export type RawToken = { bridgeDisabled?: boolean; }; -const ETH: Record< - ChainId.BOB | ChainId.ETHEREUM | ChainId.SEPOLIA | ChainId.BOB_SEPOLIA | ChainId.BASE_SEPOLIA, - RawToken -> = { - [ChainId.ETHEREUM]: { - chainId: ChainId.ETHEREUM, - address: '0x0000000000000000000000000000000000000000', - name: 'Ether', - symbol: 'ETH', - decimals: 18, - logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', - apiId: 'ethereum' - }, - [ChainId.BOB]: { +// const ETH: Record< +// ChainId.BOB | ChainId.ETHEREUM | ChainId.SEPOLIA | ChainId.BOB_SEPOLIA | ChainId.BASE_SEPOLIA, +// RawToken +// > = { +// [ChainId.ETHEREUM]: { +// chainId: ChainId.ETHEREUM, +// address: '0x0000000000000000000000000000000000000000', +// name: 'Ether', +// symbol: 'ETH', +// decimals: 18, +// logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', +// apiId: 'ethereum' +// }, +// [ChainId.BOB]: { +// chainId: ChainId.BOB, +// address: '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000', +// name: 'Ether', +// symbol: 'ETH', +// decimals: 18, +// logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', +// apiId: 'ethereum' +// }, +// [ChainId.SEPOLIA]: { +// chainId: ChainId.SEPOLIA, +// address: '0x0000000000000000000000000000000000000000', +// name: 'Ether', +// symbol: 'ETH', +// decimals: 18, +// logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', +// apiId: 'ethereum' +// }, +// [ChainId.BOB_SEPOLIA]: { +// chainId: ChainId.BOB_SEPOLIA, +// address: '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000', +// name: 'Ether', +// symbol: 'ETH', +// decimals: 18, +// logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', +// apiId: 'ethereum' +// }, +// [ChainId.BASE_SEPOLIA]: { +// chainId: ChainId.BASE_SEPOLIA, +// address: '0x0000000000000000000000000000000000000000', +// name: 'Ether', +// symbol: 'ETH', +// decimals: 18, +// logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', +// apiId: 'ethereum' +// } +// }; + +const bobAssets: RawToken[] = [ + { chainId: ChainId.BOB, - address: '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000', - name: 'Ether', - symbol: 'ETH', - decimals: 18, - logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', - apiId: 'ethereum' - }, - [ChainId.SEPOLIA]: { - chainId: ChainId.SEPOLIA, - address: '0x0000000000000000000000000000000000000000', - name: 'Ether', - symbol: 'ETH', - decimals: 18, - logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', - apiId: 'ethereum' + address: '0x03c7054bcb39f7b2e5b2c7acb37583e32d70cfa3', + name: 'Wrapped BTC', + symbol: 'WBTC', + decimals: 8, + logoUrl: + 'https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/ethereum/assets/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png', + apiId: 'wrapped-btc' }, - [ChainId.BOB_SEPOLIA]: { - chainId: ChainId.BOB_SEPOLIA, - address: '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000', - name: 'Ether', - symbol: 'ETH', - decimals: 18, - logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', - apiId: 'ethereum' + { + chainId: ChainId.BOB, + address: USDC[ChainId.BOB].address, + name: USDC[ChainId.BOB].name!, + symbol: USDC[ChainId.BOB].symbol!, + decimals: USDC[ChainId.BOB].decimals, + logoUrl: 'https://ethereum-optimism.github.io/data/USDC/logo.png', + apiId: 'usd-coin' }, - [ChainId.BASE_SEPOLIA]: { - chainId: ChainId.BASE_SEPOLIA, - address: '0x0000000000000000000000000000000000000000', - name: 'Ether', - symbol: 'ETH', - decimals: 18, - logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', - apiId: 'ethereum' + { + chainId: ChainId.BOB, + address: USDT[ChainId.BOB].address, + name: USDT[ChainId.BOB].name!, + symbol: USDT[ChainId.BOB].symbol, + decimals: USDT[ChainId.BOB].decimals, + logoUrl: 'https://ethereum-optimism.github.io/data/USDT/logo.png', + apiId: 'tether' } -}; +]; const baseSepoliaAssets: RawToken[] = [ - ETH[ChainId.BASE_SEPOLIA], { chainId: ChainId.BASE_SEPOLIA, address: '0x036CbD53842c5426634e7929541eC2318f3dCF7e', @@ -76,4 +107,4 @@ const baseSepoliaAssets: RawToken[] = [ } ]; -export const tokens: RawToken[] = [...baseSepoliaAssets]; +export const tokens: RawToken[] = [...baseSepoliaAssets, ...bobAssets]; diff --git a/apps/hybrid-pay/src/constants/chain.ts b/apps/hybrid-pay/src/constants/chain.ts index 6bace8ce5..da347b144 100644 --- a/apps/hybrid-pay/src/constants/chain.ts +++ b/apps/hybrid-pay/src/constants/chain.ts @@ -1,9 +1,9 @@ -import { ChainId, getChainIdByChainName } from '@gobob/chains'; +import { ChainId } from '@gobob/chains'; -const CHAIN = getChainIdByChainName(import.meta.env.VITE_CHAIN_NAME) as ChainId; +const CHAIN = Number(import.meta.env.VITE_CHAIN_ID) as ChainId; if (!CHAIN) { - throw new Error('Missing L1 chain'); + throw new Error('Missing chain'); } export { CHAIN }; diff --git a/apps/hybrid-pay/src/constants/index.ts b/apps/hybrid-pay/src/constants/index.ts index 4d74a03a6..499cee095 100644 --- a/apps/hybrid-pay/src/constants/index.ts +++ b/apps/hybrid-pay/src/constants/index.ts @@ -1,3 +1,2 @@ export * from './routes'; -export * from './links'; export * from './chain'; diff --git a/apps/hybrid-pay/src/constants/links.ts b/apps/hybrid-pay/src/constants/links.ts deleted file mode 100644 index 04f08c246..000000000 --- a/apps/hybrid-pay/src/constants/links.ts +++ /dev/null @@ -1,6 +0,0 @@ -const DocsLinks = { - HOME: 'https://docs.gobob.xyz/', - OP_STACK: 'https://docs.gobob.xyz/docs/learn/bob-stack/op-stack' -}; - -export { DocsLinks }; diff --git a/apps/hybrid-pay/src/constants/routes.ts b/apps/hybrid-pay/src/constants/routes.ts index 4f5172931..bff74b1ce 100644 --- a/apps/hybrid-pay/src/constants/routes.ts +++ b/apps/hybrid-pay/src/constants/routes.ts @@ -1,5 +1,7 @@ const RoutesPath = { - HOME: '/' + HOME: '/', + SEND: '/send', + RECIEVE: '/recieve' }; export { RoutesPath }; diff --git a/apps/hybrid-pay/src/hooks/index.ts b/apps/hybrid-pay/src/hooks/index.ts index 3ecf22fa8..781ab1dee 100644 --- a/apps/hybrid-pay/src/hooks/index.ts +++ b/apps/hybrid-pay/src/hooks/index.ts @@ -1,3 +1,4 @@ export * from './useBalances'; export * from './useTokens'; export * from './useKernelClient'; +export * from './useTotalBalance'; diff --git a/apps/hybrid-pay/src/hooks/useBalances.ts b/apps/hybrid-pay/src/hooks/useBalances.ts index f65a35f58..8aa40435a 100644 --- a/apps/hybrid-pay/src/hooks/useBalances.ts +++ b/apps/hybrid-pay/src/hooks/useBalances.ts @@ -66,7 +66,7 @@ const useBalances = (chainId: ChainId) => { const getBalance = useCallback((symbol: string) => balances?.[symbol], [balances]); - return { ...queryResult, balances, getBalance, refetch: chain(refetch, refetchErc20) }; + return { ...queryResult, balances, erc20Balances, getBalance, refetch: chain(refetch, refetchErc20) }; }; export { useBalances }; diff --git a/apps/hybrid-pay/src/hooks/useTokens.ts b/apps/hybrid-pay/src/hooks/useTokens.ts index 10e74d9e4..b9c05313e 100644 --- a/apps/hybrid-pay/src/hooks/useTokens.ts +++ b/apps/hybrid-pay/src/hooks/useTokens.ts @@ -16,6 +16,16 @@ const useTokens = (chainId: ChainId) => { refetchOnWindowFocus: false, refetchOnMount: false, gcTime: INTERVAL.HOUR, + initialData: () => + tokens + .filter((token) => token.chainId === chainId) + .map((token) => ({ + raw: token, + currency: + token.symbol === NATIVE[chainId].symbol + ? Ether.onChain(chainId) + : new ERC20Token(chainId, token.address, token.decimals, token.symbol, token.name) + })), queryFn: async () => tokens .filter((token) => token.chainId === chainId) diff --git a/apps/hybrid-pay/src/hooks/useTotalBalance.ts b/apps/hybrid-pay/src/hooks/useTotalBalance.ts new file mode 100644 index 000000000..02f551df8 --- /dev/null +++ b/apps/hybrid-pay/src/hooks/useTotalBalance.ts @@ -0,0 +1,34 @@ +import { ChainId } from '@gobob/chains'; +import { INTERVAL, usePrices, useQuery } from '@gobob/react-query'; +import { useAccount } from '@gobob/wagmi'; +import Big from 'big.js'; + +import { calculateAmountUSD } from '../utils'; + +import { useTokens } from './useTokens'; +import { useBalances } from './useBalances'; + +const useTotalBalance = (chainId: ChainId) => { + const { address } = useAccount(); + + const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); + + const { erc20Balances } = useBalances(chainId); + + const { data: tokens } = useTokens(chainId); + + return useQuery({ + queryKey: ['total-balances', chainId, address], + enabled: Boolean(address && erc20Balances && tokens), + queryFn: async () => { + if (!erc20Balances) return; + + return Object.values(erc20Balances).reduce((acc, amount) => { + return acc.add(calculateAmountUSD(amount, getPrice(amount.currency.symbol))); + }, new Big(0)); + }, + refetchInterval: INTERVAL.MINUTE + }); +}; + +export { useTotalBalance }; diff --git a/apps/hybrid-pay/src/lib/form/transfer.ts b/apps/hybrid-pay/src/lib/form/transfer.ts index dd433cf9c..316ed203d 100644 --- a/apps/hybrid-pay/src/lib/form/transfer.ts +++ b/apps/hybrid-pay/src/lib/form/transfer.ts @@ -1,5 +1,15 @@ +import { isAddress } from 'viem'; + import yup, { MaxAmountValidationParams, MinAmountValidationParams } from './yup.custom'; +const validateEmail = (email: string) => { + return String(email) + .toLowerCase() + .match( + /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + ); +}; + const TRANSFER_TOKEN_RECIPIENT = 'transfer-token-recipient'; const TRANSFER_TOKEN_AMOUNT = 'transfer-token-amount'; const TRANSFER_TOKEN_TICKER = 'transfer-token-ticker'; @@ -12,27 +22,25 @@ type TransferTokenFormValues = { type TransferTokenFormValidationParams = { [TRANSFER_TOKEN_AMOUNT]: MaxAmountValidationParams & MinAmountValidationParams; - [TRANSFER_TOKEN_RECIPIENT]?: 'evm' | 'socials'; + [TRANSFER_TOKEN_RECIPIENT]?: 'evm' | 'email'; }; const transferTokenSchema = (params: TransferTokenFormValidationParams) => { - let recipient = yup.string().required('Recipient is a required field'); - - if (params[TRANSFER_TOKEN_RECIPIENT] === 'socials') { - recipient = recipient as any; - } else { - recipient = (recipient as any).evmAddress(); - } - return yup.object().shape({ - [TRANSFER_TOKEN_RECIPIENT]: recipient, + [TRANSFER_TOKEN_RECIPIENT]: yup + .string() + .required('Recipient is required field') + .test('is-emails-or-address', 'Recipient must be a valid EVM/email address', (value) => + value ? !!validateEmail(value) || isAddress(value) : false + ), [TRANSFER_TOKEN_AMOUNT]: yup .string() .requiredAmount('transfer') .maxAmount(params[TRANSFER_TOKEN_AMOUNT], 'transfer') - .minAmount(params[TRANSFER_TOKEN_AMOUNT], 'transfer') + .minAmount(params[TRANSFER_TOKEN_AMOUNT], 'transfer'), + [TRANSFER_TOKEN_TICKER]: yup.string() }); }; -export { TRANSFER_TOKEN_RECIPIENT, TRANSFER_TOKEN_AMOUNT, transferTokenSchema }; +export { TRANSFER_TOKEN_RECIPIENT, TRANSFER_TOKEN_AMOUNT, TRANSFER_TOKEN_TICKER, transferTokenSchema }; export type { TransferTokenFormValues, TransferTokenFormValidationParams }; diff --git a/apps/hybrid-pay/src/pages/Home/Home.tsx b/apps/hybrid-pay/src/pages/Home/Home.tsx deleted file mode 100644 index dcc46b852..000000000 --- a/apps/hybrid-pay/src/pages/Home/Home.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { Main } from '../../components'; -import { CHAIN } from '../../constants'; -import { useTokens } from '../../hooks'; - -import { TransferForm } from './components'; -import { StyledCard, StyledFlex } from './Home.style'; - -const Home = () => { - const { data: tokens } = useTokens(CHAIN); - - if (!tokens?.length) return; - - return ( -
    - - - - - -
    - ); -}; - -export { Home }; diff --git a/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/index.tsx b/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/index.tsx deleted file mode 100644 index 2d9161420..000000000 --- a/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { TransferForm } from './SendTokenModal'; diff --git a/apps/hybrid-pay/src/pages/Home/components/index.tsx b/apps/hybrid-pay/src/pages/Home/components/index.tsx deleted file mode 100644 index d4d891176..000000000 --- a/apps/hybrid-pay/src/pages/Home/components/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from './SendTokenModal'; diff --git a/apps/hybrid-pay/src/pages/Home/index.tsx b/apps/hybrid-pay/src/pages/Home/index.tsx deleted file mode 100644 index 22b113895..000000000 --- a/apps/hybrid-pay/src/pages/Home/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { Home as default } from './Home'; diff --git a/apps/hybrid-pay/src/pages/Recieve/Recieve.tsx b/apps/hybrid-pay/src/pages/Recieve/Recieve.tsx new file mode 100644 index 000000000..7fbe70b0f --- /dev/null +++ b/apps/hybrid-pay/src/pages/Recieve/Recieve.tsx @@ -0,0 +1,46 @@ +import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { Flex, H1, H2 } from '@gobob/ui'; +import QRCode from 'react-qr-code'; +import { useAccount } from 'wagmi'; +import { truncateEthAddress } from '@gobob/utils'; + +import { Main } from '../../components'; + +const Recieve = () => { + const { user } = useDynamicContext(); + const { address } = useAccount(); + + return ( +
    + + +

    + {user?.email ? user?.email : truncateEthAddress(address!)} +

    + {user?.email && ( +

    + ({truncateEthAddress(address!)}) +

    + )} +
    + +
    +
    + ); +}; + +export { Recieve }; diff --git a/apps/hybrid-pay/src/pages/Recieve/index.tsx b/apps/hybrid-pay/src/pages/Recieve/index.tsx new file mode 100644 index 000000000..7a8cb18e7 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Recieve/index.tsx @@ -0,0 +1 @@ +export { Recieve as default } from './Recieve'; diff --git a/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/SendTokenModal.tsx b/apps/hybrid-pay/src/pages/Send/Send.tsx similarity index 73% rename from apps/hybrid-pay/src/pages/Home/components/SendTokenModal/SendTokenModal.tsx rename to apps/hybrid-pay/src/pages/Send/Send.tsx index bf7958882..006a48c32 100644 --- a/apps/hybrid-pay/src/pages/Home/components/SendTokenModal/SendTokenModal.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.tsx @@ -11,46 +11,21 @@ import { Address, encodeFunctionData, erc20Abi, isAddress, isAddressEqual } from import { useGetApprovalData } from '@gobob/hooks'; import { MaxUint256 } from '@gobob/currency/src/constants'; -import { TransactionDetails } from '../../../../components'; -import { CHAIN } from '../../../../constants'; -import { paymasters, useBalances, useKernelClient } from '../../../../hooks'; +import { paymasters, useBalances, useKernelClient, useTokens } from '../../hooks'; import { TRANSFER_TOKEN_AMOUNT, TRANSFER_TOKEN_RECIPIENT, + TRANSFER_TOKEN_TICKER, TransferTokenFormValidationParams, TransferTokenFormValues, transferTokenSchema -} from '../../../../lib/form/transfer'; -import { isFormDisabled } from '../../../../lib/form/utils'; -import { calculateAmountUSD, dynamicApiClient } from '../../../../utils'; - -const baseToken = { - [ChainId.BASE_SEPOLIA]: { - currency: new ERC20Token(ChainId.BASE_SEPOLIA, '0x036CbD53842c5426634e7929541eC2318f3dCF7e', 6, 'USDC', 'USD Coin'), - raw: { - chainId: ChainId.BASE_SEPOLIA, - address: '0x036CbD53842c5426634e7929541eC2318f3dCF7e', - name: 'USD Coin', - symbol: 'USDC', - decimals: 6, - logoUrl: 'https://ethereum-optimism.github.io/data/USDC/logo.png', - apiId: 'usd-coin' - } - }, - [ChainId.BOB]: { - currency: new ERC20Token(ChainId.BOB, '0x03c7054bcb39f7b2e5b2c7acb37583e32d70cfa3', 8, 'WBTC', 'Wrapped BTC'), - raw: { - chainId: ChainId.BOB, - address: '0x03c7054bcb39f7b2e5b2c7acb37583e32d70cfa3', - name: 'Wrapped BTC', - symbol: 'WBTC', - decimals: 8, - logoUrl: - 'https://raw.githubusercontent.com/Uniswap/assets/master/blockchains/ethereum/assets/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png', - apiId: 'wrapped-btc' - } - } -}; +} from '../../lib/form/transfer'; +import { isFormDisabled } from '../../lib/form/utils'; +import { calculateAmountUSD, dynamicApiClient } from '../../utils'; +import { CHAIN } from '../../constants'; +import { Main } from '../../components'; + +import { TokenButtonGroup } from './components'; const getAddress = async (recipient: string) => { const isRecipientAddress = isAddress(recipient); @@ -72,21 +47,25 @@ const getAddress = async (recipient: string) => { type Props = {}; -type TransferFormProps = Props; +type SendProps = Props; -const TransferForm = ({}: TransferFormProps): JSX.Element => { - const { address, chain } = useAccount(); +const Send = ({}: SendProps): JSX.Element => { + const { address } = useAccount(); - const token = baseToken[(chain?.id as ChainId.BASE_SEPOLIA) || ChainId.BASE_SEPOLIA]; - const gasToken = token; - - const { isAuthenticated, setShowAuthFlow, user } = useDynamicContext(); + const { user } = useDynamicContext(); + const [ticker, setTicker] = useState(CHAIN === ChainId.BASE_SEPOLIA ? 'USDC' : 'WBTC'); const [amount, setAmount] = useState(''); + const [isGroupAmount, setGroupAmount] = useState(false); const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); const { getBalance } = useBalances(CHAIN); + const { data: tokens } = useTokens(CHAIN); + + const token = tokens.find((token) => token.currency.symbol === ticker)!; + const gasToken = token; + const kernelClient = useKernelClient(token.currency); const currencyAmount = useMemo( @@ -110,7 +89,8 @@ const TransferForm = ({}: TransferFormProps): JSX.Element => { const initialValues = useMemo( () => ({ [TRANSFER_TOKEN_AMOUNT]: '', - [TRANSFER_TOKEN_RECIPIENT]: '' + [TRANSFER_TOKEN_RECIPIENT]: '', + [TRANSFER_TOKEN_TICKER]: ticker }), // eslint-disable-next-line react-hooks/exhaustive-deps [] @@ -122,8 +102,7 @@ const TransferForm = ({}: TransferFormProps): JSX.Element => { [TRANSFER_TOKEN_AMOUNT]: { minAmount: token && new Big(1 / 10 ** token.currency.decimals), maxAmount: new Big(tokenBalance?.toExact() || 0) - }, - [TRANSFER_TOKEN_RECIPIENT]: 'socials' + } }; const paymasterApprovalData = useGetApprovalData( @@ -290,12 +269,28 @@ const TransferForm = ({}: TransferFormProps): JSX.Element => { useEffect(() => { if (smartAccountTransferError) { - toast.error('Failed to submite transaction'); + toast.error('Failed to submit transaction'); // eslint-disable-next-line no-console console.log(smartAccountTransferError); } }, [smartAccountTransferError]); + const tokenInputItems = useMemo( + () => + tokens?.map((token) => { + const balance = getBalance(token.currency.symbol); + + return { + balance: balance?.toExact() || 0, + balanceUSD: balance ? calculateAmountUSD(balance, getPrice(token.currency.symbol)) : 0, + logoUrl: token.raw.logoUrl, + currency: token.currency + }; + }) || [], + // eslint-disable-next-line react-hooks/exhaustive-deps + [tokens, getBalance] + ); + const balance = tokenBalance?.toExact() || '0'; const humanBalance = tokenBalance?.toSignificant(); @@ -303,44 +298,48 @@ const TransferForm = ({}: TransferFormProps): JSX.Element => { const isSubmitDisabled = isFormDisabled(form); return ( - - - setAmount(value) - })} - /> - - {isAuthenticated ? ( +
    + + + setTicker(currency.symbol)} + {...mergeProps( + form.getSelectableTokenFieldProps({ amount: TRANSFER_TOKEN_AMOUNT, currency: TRANSFER_TOKEN_TICKER }), + { + onValueChange: (value: string) => { + setAmount(value); + setGroupAmount(false); + } + } + )} + /> + { + form.setFieldValue(TRANSFER_TOKEN_AMOUNT, currencyAmount.toSignificant(), true); + form.setFieldTouched(TRANSFER_TOKEN_AMOUNT, true); + setGroupAmount(true); + }} + /> - ) : ( - - )} - + +
    ); }; -export { TransferForm }; +export { Send }; diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx new file mode 100644 index 000000000..26587d05c --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx @@ -0,0 +1,30 @@ +import { Flex, FlexProps, useDOMRef } from '@gobob/ui'; +import { useListState } from '@react-stately/list'; +import { AriaTagGroupProps, useTagGroup } from '@react-aria/tag'; +import { mergeProps } from '@react-aria/utils'; + +import { CardButton } from './CardButton'; + +type Props = {}; + +type AriaAttrs = Omit, keyof Props>; + +type InheritAttrs = Omit; + +type HeaderProps = Props & AriaAttrs & InheritAttrs; + +const ButtonGroup = ({ ...props }: HeaderProps): JSX.Element => { + const domRef = useDOMRef(null); + let state = useListState(props); + let { gridProps } = useTagGroup(props, state, domRef); + + return ( + + {[...state.collection].map((item) => ( + + ))} + + ); +}; + +export { ButtonGroup }; diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.style.tsx b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.style.tsx new file mode 100644 index 000000000..07e97209e --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.style.tsx @@ -0,0 +1,13 @@ +import styled from 'styled-components'; +import { Card } from '@gobob/ui'; + +const StyledCard = styled(Card)` + border: 1px solid transparent; + + &[aria-selected='true'] { + border: 1px solid ${({ theme }) => theme.color('primary-500')}; + box-shadow: 0 0 0 1px ${({ theme }) => theme.color('primary-500')}; + } +`; + +export { StyledCard }; diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx new file mode 100644 index 000000000..e1ee03272 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx @@ -0,0 +1,34 @@ +import { ListState } from '@react-stately/list'; +import { useTag, AriaTagProps } from '@react-aria/tag'; +import { useRef } from 'react'; + +import { StyledCard } from './CardButton.style'; + +type Props = { state: ListState }; + +type InheritAttrs = Omit, keyof Props>; + +type CardButtonProps = Props & InheritAttrs; + +const CardButton = ({ ...props }: CardButtonProps): JSX.Element => { + let { item, state } = props; + let ref = useRef(null); + let { rowProps, gridCellProps } = useTag(props, state, ref); + + return ( + +
    {item.rendered}
    +
    + ); +}; + +export { CardButton }; diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/index.ts b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/index.ts new file mode 100644 index 000000000..eaeaef64a --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/index.ts @@ -0,0 +1 @@ +export { ButtonGroup } from './ButtonGroup'; diff --git a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx new file mode 100644 index 000000000..26ee32c73 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx @@ -0,0 +1,103 @@ +import { Flex, Span, useCurrencyFormatter, useLocale } from '@gobob/ui'; +import { Item } from '@react-stately/collections'; +import { Currency, CurrencyAmount } from '@gobob/currency'; +import { usePrices } from '@gobob/react-query'; +import { useEffect, useMemo, useState } from 'react'; +import Big from 'big.js'; + +import { ButtonGroup } from '../ButtonGroup'; + +const usdItems = [5, 10, 15]; + +type Props = { + isSelected: boolean; + currency: Currency; + onSelectionChange: (amount: CurrencyAmount) => void; +}; + +type HeaderProps = Props; + +const TokenButtonGroup = ({ isSelected, currency, onSelectionChange }: HeaderProps): JSX.Element => { + const { locale } = useLocale(); + const format = useCurrencyFormatter(); + const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); + + const [key, setKey] = useState(); + + useEffect(() => { + if (!isSelected) { + setKey(undefined); + } + }, [isSelected]); + + const amounts = useMemo(() => { + if (currency.symbol === 'WBTC') { + return usdItems.map((usd) => + CurrencyAmount.fromRawAmount( + currency, + new Big(100000000).mul(usd).div(getPrice(currency.symbol)).round(0, 0).toNumber() + ) + ); + } + + return usdItems.map((usd) => CurrencyAmount.fromBaseAmount(currency, usd)); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [currency]); + + const handleSelectionChange = (key: any) => { + const [selectedKey] = [...key]; + + if (!selectedKey) { + return; + } + + setKey(selectedKey); + + onSelectionChange(amounts[selectedKey as number]); + }; + + return ( + + {amounts.map((amount, idx) => ( + + {currency.symbol === 'WBTC' ? ( + + {Intl.NumberFormat(locale).format(amount.numerator)} + + {format(usdItems[idx])} + + + ) : ( + {format(usdItems[idx])} + )} + + ))} + + {/* + + {Intl.NumberFormat(locale).format(16000)} + + {format(10)} + + + + + + {Intl.NumberFormat(locale).format(32000)} + + {format(20)} + + + */} + + ); +}; + +export { TokenButtonGroup }; diff --git a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/index.ts b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/index.ts new file mode 100644 index 000000000..051adc7fb --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/index.ts @@ -0,0 +1 @@ +export { TokenButtonGroup } from './TokenButtonGroup'; diff --git a/apps/hybrid-pay/src/pages/Send/components/index.tsx b/apps/hybrid-pay/src/pages/Send/components/index.tsx new file mode 100644 index 000000000..051adc7fb --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/components/index.tsx @@ -0,0 +1 @@ +export { TokenButtonGroup } from './TokenButtonGroup'; diff --git a/apps/hybrid-pay/src/pages/Send/index.tsx b/apps/hybrid-pay/src/pages/Send/index.tsx new file mode 100644 index 000000000..e884473d0 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/index.tsx @@ -0,0 +1 @@ +export { Send as default } from './Send'; diff --git a/apps/hybrid-pay/src/pages/Home/Home.style.tsx b/apps/hybrid-pay/src/pages/Wallet/Wallet.style.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Home/Home.style.tsx rename to apps/hybrid-pay/src/pages/Wallet/Wallet.style.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx b/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx new file mode 100644 index 000000000..b2f349039 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx @@ -0,0 +1,32 @@ +import { DynamicEmbeddedWidget, useDynamicContext } from '@dynamic-labs/sdk-react-core'; + +import { Main } from '../../components'; + +import { StyledCard, StyledFlex } from './Wallet.style'; +import { Hero } from './components'; + +const Wallet = () => { + const { isAuthenticated } = useDynamicContext(); + + if (!isAuthenticated) { + return ( +
    + + + + + +
    + ); + } + + return ( +
    + + + +
    + ); +}; + +export { Wallet }; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx new file mode 100644 index 000000000..c35fa8c31 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx @@ -0,0 +1,67 @@ +import { Avatar, Button, Flex, H1, H2, Span, useCurrencyFormatter, useLocale } from '@gobob/ui'; +import { usePrices } from '@gobob/react-query'; +import { useMemo } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { useTotalBalance } from '../../../../hooks'; +import { CHAIN, RoutesPath } from '../../../../constants'; + +type Props = {}; + +type HeroProps = Props; + +const Hero = ({}: HeroProps): JSX.Element => { + const { locale } = useLocale(); + const { data: accountBalance } = useTotalBalance(CHAIN); + const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); + const format = useCurrencyFormatter(); + + const navigate = useNavigate(); + + const handleSend = () => { + navigate(RoutesPath.SEND); + }; + + const handleRecieve = () => { + navigate(RoutesPath.RECIEVE); + }; + + const accountBalanceSats = useMemo( + () => + Intl.NumberFormat(locale).format(Math.round(accountBalance?.div(getPrice('WBTC') / 100000000).toNumber() || 0)), + // eslint-disable-next-line react-hooks/exhaustive-deps + [accountBalance, locale] + ); + + return ( + + +

    + {format(accountBalance?.toNumber() || 0)} +

    + + +

    + {accountBalanceSats}{' '} + + SATS + +

    +
    +
    + + + + +
    + ); +}; + +export { Hero }; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/Hero/index.tsx b/apps/hybrid-pay/src/pages/Wallet/components/Hero/index.tsx new file mode 100644 index 000000000..76d2216b1 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Wallet/components/Hero/index.tsx @@ -0,0 +1 @@ +export { Hero } from './Hero'; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/index.tsx b/apps/hybrid-pay/src/pages/Wallet/components/index.tsx new file mode 100644 index 000000000..76d2216b1 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Wallet/components/index.tsx @@ -0,0 +1 @@ +export { Hero } from './Hero'; diff --git a/apps/hybrid-pay/src/pages/Wallet/index.tsx b/apps/hybrid-pay/src/pages/Wallet/index.tsx new file mode 100644 index 000000000..36295b61b --- /dev/null +++ b/apps/hybrid-pay/src/pages/Wallet/index.tsx @@ -0,0 +1 @@ +export { Wallet as default } from './Wallet'; diff --git a/apps/hybrid-pay/src/utils/math.ts b/apps/hybrid-pay/src/utils/math.ts index dfa893ebd..94ee871f0 100644 --- a/apps/hybrid-pay/src/utils/math.ts +++ b/apps/hybrid-pay/src/utils/math.ts @@ -2,6 +2,6 @@ import { Currency, CurrencyAmount } from '@gobob/currency'; import Big from 'big.js'; const calculateAmountUSD = (amount: CurrencyAmount, price: number) => - !isNaN(amount as any) ? new Big(amount.toExact()).mul(price || 0).toNumber() : 0; + new Big(amount.toExact()).mul(price || 0).toNumber(); export { calculateAmountUSD }; diff --git a/apps/hybrid-pay/vite.config.ts b/apps/hybrid-pay/vite.config.ts index 08161f78c..feb6872dd 100644 --- a/apps/hybrid-pay/vite.config.ts +++ b/apps/hybrid-pay/vite.config.ts @@ -34,6 +34,11 @@ export default defineConfig(({ mode }) => { }, server: { proxy: { + '/api': { + target: env.VITE_API_URL, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, '') + }, '/dynamic-api': { target: env.VITE_DYNAMIC_API_URL, changeOrigin: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c43ed8e24..84c9f2568 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -373,9 +373,18 @@ importers: '@gobob/wagmi': specifier: workspace:^ version: link:../../packages/wagmi + '@react-aria/tag': + specifier: ^3.4.1 + version: 3.4.1(react-dom@18.3.1)(react@18.3.1) '@react-aria/utils': specifier: ^3.23.2 version: 3.24.1(react@18.3.1) + '@react-stately/collections': + specifier: ^3.10.0 + version: 3.10.7(react@18.3.1) + '@react-stately/list': + specifier: ^3.9.1 + version: 3.10.5(react@18.3.1) '@sentry/react': specifier: ^8.8.0 version: 8.15.0(react@18.3.1) @@ -397,6 +406,9 @@ importers: react-dom: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) + react-qr-code: + specifier: ^2.0.12 + version: 2.0.15(react@18.3.1) react-router-dom: specifier: ^6.16.0 version: 6.24.1(react-dom@18.3.1)(react@18.3.1) @@ -6273,6 +6285,26 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false + /@react-aria/tag@3.4.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-gcIGPYZ2OBwMT4IHnlczEezKlxr0KRPL/mSfm2Q91GE027ZGOJnqusH9az6DX1qxrQx8x3vRdqYT2KmuefkrBQ==} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + dependencies: + '@react-aria/gridlist': 3.8.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/i18n': 3.11.1(react@18.3.1) + '@react-aria/interactions': 3.21.3(react@18.3.1) + '@react-aria/label': 3.7.8(react@18.3.1) + '@react-aria/selection': 3.18.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/utils': 3.24.1(react@18.3.1) + '@react-stately/list': 3.10.5(react@18.3.1) + '@react-types/button': 3.9.4(react@18.3.1) + '@react-types/shared': 3.23.1(react@18.3.1) + '@swc/helpers': 0.5.11 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /@react-aria/textfield@3.14.5(react@18.3.1): resolution: {integrity: sha512-hj7H+66BjB1iTKKaFXwSZBZg88YT+wZboEXZ0DNdQB2ytzoz/g045wBItUuNi4ZjXI3P+0AOZznVMYadWBAmiA==} peerDependencies: From 880bd8d81ad04dda26fc321b9b0ae3893194e0d7 Mon Sep 17 00:00:00 2001 From: Sander Bosma Date: Thu, 18 Jul 2024 21:44:30 +0200 Subject: [PATCH 05/41] fix: fix some (but not all) bugs --- apps/hybrid-pay/src/hooks/useKernelClient.ts | 5 +++-- apps/hybrid-pay/vite.config.ts | 5 ----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/apps/hybrid-pay/src/hooks/useKernelClient.ts b/apps/hybrid-pay/src/hooks/useKernelClient.ts index 563240ea9..453a1f153 100644 --- a/apps/hybrid-pay/src/hooks/useKernelClient.ts +++ b/apps/hybrid-pay/src/hooks/useKernelClient.ts @@ -9,6 +9,7 @@ import { useMemo } from 'react'; import { Address, http } from 'viem'; import { useAccount } from 'wagmi'; +import { CHAIN } from '../constants'; import { getBundlerByChainId } from '../lib/account-abstraction/bundler'; type Paymasters = Partial>>; @@ -42,7 +43,7 @@ const useKernelClient = (gasToken?: Currency) => { return; } - const paymaster = gasToken ? paymasters?.[chain?.id as ChainId]?.[gasToken.symbol] : undefined; + const paymaster = gasToken ? paymasters?.[CHAIN]?.[gasToken.symbol] : undefined; const dynamicAccountProvider = connector.getAccountAbstractionProvider(); @@ -95,7 +96,7 @@ const useKernelClient = (gasToken?: Currency) => { }; const body = JSON.stringify(fullUserOp); - const rawData = await fetch('/fusion-api/guarantor', { method: 'POST', body }); + const rawData = await fetch('/api/guarantor', { method: 'POST', body }); const paymasterData = (await rawData.json()).paymasterData; return { diff --git a/apps/hybrid-pay/vite.config.ts b/apps/hybrid-pay/vite.config.ts index feb6872dd..32c002f3f 100644 --- a/apps/hybrid-pay/vite.config.ts +++ b/apps/hybrid-pay/vite.config.ts @@ -44,11 +44,6 @@ export default defineConfig(({ mode }) => { changeOrigin: true, rewrite: (path) => path.replace(/^\/dynamic-api/, '') }, - '/fusion-api': { - target: env.VITE_FUSION_API, - changeOrigin: true, - rewrite: (path) => path.replace(/^\/api/, '') - }, '/onramp-api': { target: env.VITE_ONRAMP_API_URL, changeOrigin: true, From 6dd955718070d302c4922b02ee74e6f0a7ad4c24 Mon Sep 17 00:00:00 2001 From: Sander Bosma Date: Fri, 19 Jul 2024 11:35:03 +0200 Subject: [PATCH 06/41] fix: set content-type in guarantor api call --- apps/hybrid-pay/src/hooks/useKernelClient.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/hybrid-pay/src/hooks/useKernelClient.ts b/apps/hybrid-pay/src/hooks/useKernelClient.ts index 453a1f153..8f788b728 100644 --- a/apps/hybrid-pay/src/hooks/useKernelClient.ts +++ b/apps/hybrid-pay/src/hooks/useKernelClient.ts @@ -96,7 +96,14 @@ const useKernelClient = (gasToken?: Currency) => { }; const body = JSON.stringify(fullUserOp); - const rawData = await fetch('/api/guarantor', { method: 'POST', body }); + const rawData = await fetch('/api/guarantor', { + method: 'POST', + headers: { + Accept: 'application/json, text/plain, */*', + 'Content-Type': 'application/json' + }, + body + }); const paymasterData = (await rawData.json()).paymasterData; return { From 92a8c3a03d6269091b5baedfc37ba0179196a5f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Fri, 19 Jul 2024 12:00:09 +0100 Subject: [PATCH 07/41] feat: improve UI --- apps/hybrid-pay/package.json | 2 + apps/hybrid-pay/src/App.tsx | 24 +++- apps/hybrid-pay/src/hooks/index.ts | 1 + .../src/hooks/useGetTransactions.ts | 118 ++++++++++++++++++ apps/hybrid-pay/src/hooks/useKernelClient.ts | 2 +- apps/hybrid-pay/src/hooks/useTokens.ts | 1 + apps/hybrid-pay/src/pages/Send/Send.tsx | 7 +- .../src/pages/Wallet/Wallet.style.tsx | 8 +- apps/hybrid-pay/src/pages/Wallet/Wallet.tsx | 23 +--- .../src/pages/Wallet/components/Hero/Hero.tsx | 6 +- .../TransactionList/TransactionItem.style.tsx | 9 ++ .../TransactionList/TransactionItem.tsx | 53 ++++++++ .../TransactionList/TransactionList.tsx | 56 +++++++++ .../components/TransactionList/index.tsx | 1 + .../src/pages/Wallet/components/index.tsx | 1 + apps/hybrid-pay/vite.config.ts | 2 +- pnpm-lock.yaml | 6 + 17 files changed, 284 insertions(+), 36 deletions(-) create mode 100644 apps/hybrid-pay/src/hooks/useGetTransactions.ts create mode 100644 apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx create mode 100644 apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx create mode 100644 apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx create mode 100644 apps/hybrid-pay/src/pages/Wallet/components/TransactionList/index.tsx diff --git a/apps/hybrid-pay/package.json b/apps/hybrid-pay/package.json index a5a6da47f..c7d31682f 100644 --- a/apps/hybrid-pay/package.json +++ b/apps/hybrid-pay/package.json @@ -38,6 +38,8 @@ "@sentry/vite-plugin": "^2.18.0", "@zerodev/sdk": "^5.3.3", "big.js": "^6.2.1", + "date-fns": "^3.2.0", + "graphql-request": "6.1.0", "permissionless": "^0.1.36", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/apps/hybrid-pay/src/App.tsx b/apps/hybrid-pay/src/App.tsx index 573df4274..dc479a4be 100644 --- a/apps/hybrid-pay/src/App.tsx +++ b/apps/hybrid-pay/src/App.tsx @@ -1,8 +1,9 @@ import { useAccount, useReconnect } from '@gobob/wagmi'; import { ReactNode, Suspense, lazy, useEffect } from 'react'; -import { BrowserRouter, Navigate, Route, Routes, useLocation } from 'react-router-dom'; -import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { BrowserRouter, Route, Routes, useLocation } from 'react-router-dom'; +import { DynamicEmbeddedWidget, useDynamicContext } from '@dynamic-labs/sdk-react-core'; import { usePrices } from '@gobob/react-query'; +import { Card, Flex } from '@gobob/ui'; import { Header, Layout, Main } from './components'; import { CHAIN, RoutesPath } from './constants'; @@ -29,7 +30,15 @@ const ProtectedRoute = ({ children }: { children: ReactNode }) => { const { isAuthenticated } = useDynamicContext(); if (!isAuthenticated) { - return ; + return ( +
    + + + + + +
    + ); } return children; @@ -79,7 +88,14 @@ function App() {
    }> - } path={RoutesPath.HOME} /> + + + + } + path={RoutesPath.HOME} + /> diff --git a/apps/hybrid-pay/src/hooks/index.ts b/apps/hybrid-pay/src/hooks/index.ts index 781ab1dee..579ba07e6 100644 --- a/apps/hybrid-pay/src/hooks/index.ts +++ b/apps/hybrid-pay/src/hooks/index.ts @@ -2,3 +2,4 @@ export * from './useBalances'; export * from './useTokens'; export * from './useKernelClient'; export * from './useTotalBalance'; +export * from './useGetTransactions'; diff --git a/apps/hybrid-pay/src/hooks/useGetTransactions.ts b/apps/hybrid-pay/src/hooks/useGetTransactions.ts new file mode 100644 index 000000000..8bb9dc055 --- /dev/null +++ b/apps/hybrid-pay/src/hooks/useGetTransactions.ts @@ -0,0 +1,118 @@ +import { Currency, CurrencyAmount } from '@gobob/currency'; +import { useQuery } from '@gobob/react-query'; +import { Address, useAccount } from '@gobob/wagmi'; +import request, { gql } from 'graphql-request'; +import { isAddressEqual } from 'viem'; +import { ChainId } from '@gobob/chains'; + +import { CHAIN } from '../constants'; + +import { TokenData, useTokens } from './useTokens'; +import { paymasters } from './useKernelClient'; + +type TransactionItemResponse = { + from: Address; + to: Address; + blockNumber: number; + transactionHash: Address; + timestamp: number; + amount: string; + token: Address; +}; + +type TransactionsResponse = { + receive: TransactionItemResponse[]; + sent: TransactionItemResponse[]; +}; + +type TransactionData = { + from: Address; + to: Address; + blockNumber: number; + transactionHash: Address; + date: Date; + amount: CurrencyAmount; + tokenUrl: string; + type: 'receive' | 'send'; +}; + +const getTransactions = gql` + query getTransactions($address: String!) { + receive: transfers(where: { to_contains_nocase: $address }) { + transactionHash: transactionHash_ + timestamp: timestamp_ + from + to + amount: value + blockNumber: block_number + token: contractId_ + } + sent: transfers(where: { from_contains_nocase: $address }) { + transactionHash: transactionHash_ + timestamp: timestamp_ + from + to + amount: value + blockNumber: block_number + token: contractId_ + } + } +`; + +const transactionsUrl = `${import.meta.env.VITE_INDEXER_URL}/BOB-Pay-Tokens-bob/prod/gn`; + +const transformData = (transactions: TransactionItemResponse[], tokens: TokenData[], type: 'receive' | 'send') => + transactions + .filter( + (tx) => + !( + isAddressEqual(tx.from, '0x0000000000000000000000000000000000000000') || + isAddressEqual(tx.to, '0x0000000000000000000000000000000000000000') + ) + ) + .map((tx): TransactionData | null => { + const token = tokens!.find((token) => isAddressEqual(tx.token, token.raw.address)); + + if (!token) return null; + + if ( + isAddressEqual(tx.from, paymasters[CHAIN as ChainId.BOB][token.currency.symbol]) || + isAddressEqual(tx.to, paymasters[CHAIN as ChainId.BOB][token.currency.symbol]) + ) { + return null; + } + + return { + date: new Date(tx.timestamp * 1000), + amount: CurrencyAmount.fromRawAmount(token.currency, tx.amount), + blockNumber: tx.blockNumber, + from: tx.from, + to: tx.to, + transactionHash: tx.transactionHash, + tokenUrl: token.raw.logoUrl, + type + }; + }) + .filter(Boolean) as TransactionData[]; + +const useGetTransactions = () => { + const { address } = useAccount(); + const { data: tokens } = useTokens(CHAIN); + + return useQuery({ + queryKey: ['aa-transaction', address], + queryFn: async (): Promise => { + const { receive, sent } = await request(transactionsUrl, getTransactions, { address }); + + return [...transformData(receive, tokens, 'receive'), ...transformData(sent, tokens, 'send')]; + }, + enabled: Boolean(address), + // refetchInterval: INTERVAL.SECONDS_30, + // gcTime: INTERVAL.MINUTE, + refetchOnWindowFocus: false, + refetchOnMount: false + }); +}; + +export { useGetTransactions }; +export type { TransactionData }; diff --git a/apps/hybrid-pay/src/hooks/useKernelClient.ts b/apps/hybrid-pay/src/hooks/useKernelClient.ts index 8f788b728..4dbd9229f 100644 --- a/apps/hybrid-pay/src/hooks/useKernelClient.ts +++ b/apps/hybrid-pay/src/hooks/useKernelClient.ts @@ -12,7 +12,7 @@ import { useAccount } from 'wagmi'; import { CHAIN } from '../constants'; import { getBundlerByChainId } from '../lib/account-abstraction/bundler'; -type Paymasters = Partial>>; +type Paymasters = Record>; const paymasters: Paymasters = { [ChainId.BASE_SEPOLIA]: { USDC: '0x00000000002E3A39aFEf1132214fEee5a55ce127' }, diff --git a/apps/hybrid-pay/src/hooks/useTokens.ts b/apps/hybrid-pay/src/hooks/useTokens.ts index b9c05313e..32ba90296 100644 --- a/apps/hybrid-pay/src/hooks/useTokens.ts +++ b/apps/hybrid-pay/src/hooks/useTokens.ts @@ -40,3 +40,4 @@ const useTokens = (chainId: ChainId) => { }; export { useTokens }; +export type { TokenData }; diff --git a/apps/hybrid-pay/src/pages/Send/Send.tsx b/apps/hybrid-pay/src/pages/Send/Send.tsx index 006a48c32..3c7a4e349 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.tsx @@ -10,6 +10,7 @@ import { useEffect, useMemo, useState } from 'react'; import { Address, encodeFunctionData, erc20Abi, isAddress, isAddressEqual } from 'viem'; import { useGetApprovalData } from '@gobob/hooks'; import { MaxUint256 } from '@gobob/currency/src/constants'; +import { useSearchParams } from 'react-router-dom'; import { paymasters, useBalances, useKernelClient, useTokens } from '../../hooks'; import { @@ -50,11 +51,13 @@ type Props = {}; type SendProps = Props; const Send = ({}: SendProps): JSX.Element => { + const [searchParams] = useSearchParams(new URLSearchParams(window.location.search)); + const { address } = useAccount(); const { user } = useDynamicContext(); - const [ticker, setTicker] = useState(CHAIN === ChainId.BASE_SEPOLIA ? 'USDC' : 'WBTC'); + const [ticker, setTicker] = useState(CHAIN === ChainId.BASE_SEPOLIA ? 'USDC' : searchParams.get('token') || 'WBTC'); const [amount, setAmount] = useState(''); const [isGroupAmount, setGroupAmount] = useState(false); @@ -89,7 +92,7 @@ const Send = ({}: SendProps): JSX.Element => { const initialValues = useMemo( () => ({ [TRANSFER_TOKEN_AMOUNT]: '', - [TRANSFER_TOKEN_RECIPIENT]: '', + [TRANSFER_TOKEN_RECIPIENT]: searchParams.get('to') || '', [TRANSFER_TOKEN_TICKER]: ticker }), // eslint-disable-next-line react-hooks/exhaustive-deps diff --git a/apps/hybrid-pay/src/pages/Wallet/Wallet.style.tsx b/apps/hybrid-pay/src/pages/Wallet/Wallet.style.tsx index 6f9f7104d..5051d525d 100644 --- a/apps/hybrid-pay/src/pages/Wallet/Wallet.style.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/Wallet.style.tsx @@ -1,12 +1,8 @@ -import { Card, Flex } from '@gobob/ui'; +import { Flex } from '@gobob/ui'; import styled from 'styled-components'; const StyledFlex = styled(Flex)` width: 100%; `; -const StyledCard = styled(Card)` - width: 100%; -`; - -export { StyledFlex, StyledCard }; +export { StyledFlex }; diff --git a/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx b/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx index b2f349039..f604709b8 100644 --- a/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx @@ -1,29 +1,14 @@ -import { DynamicEmbeddedWidget, useDynamicContext } from '@dynamic-labs/sdk-react-core'; - import { Main } from '../../components'; -import { StyledCard, StyledFlex } from './Wallet.style'; -import { Hero } from './components'; +import { StyledFlex } from './Wallet.style'; +import { Hero, TransactionList } from './components'; const Wallet = () => { - const { isAuthenticated } = useDynamicContext(); - - if (!isAuthenticated) { - return ( -
    - - - - - -
    - ); - } - return (
    - + +
    ); diff --git a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx index c35fa8c31..d1415ce95 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx @@ -22,7 +22,7 @@ const Hero = ({}: HeroProps): JSX.Element => { navigate(RoutesPath.SEND); }; - const handleRecieve = () => { + const handleReceive = () => { navigate(RoutesPath.RECIEVE); }; @@ -56,8 +56,8 @@ const Hero = ({}: HeroProps): JSX.Element => { - diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx new file mode 100644 index 000000000..8b7d01c33 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx @@ -0,0 +1,9 @@ +import styled from 'styled-components'; + +const StyledGrid = styled.div` + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: ${({ theme }) => theme.spacing('md')}; +`; + +export { StyledGrid }; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx new file mode 100644 index 000000000..2b4dd280b --- /dev/null +++ b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx @@ -0,0 +1,53 @@ +import { Avatar, Flex, FlexProps, P, Span, useLocale } from '@gobob/ui'; +import { usePrices } from '@gobob/react-query'; +import { truncateEthAddress } from '@gobob/utils'; +import { formatDistanceToNow } from 'date-fns'; + +import { TransactionData } from '../../../../hooks'; +import { calculateAmountUSD } from '../../../../utils'; + +import { StyledGrid } from './TransactionItem.style'; + +type Props = { transaction: TransactionData }; + +type InheritAttrs = Omit; + +type TransactionItemProps = Props & InheritAttrs; + +const TransactionItem = ({ transaction, ...props }: TransactionItemProps): JSX.Element => { + const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); + const { locale } = useLocale(); + + const price = getPrice(transaction.amount.currency.symbol); + + const amountPrice = + // eslint-disable-next-line react-hooks/exhaustive-deps + Intl.NumberFormat(locale, { style: 'currency', currency: 'USD', maximumFractionDigits: 4 }).format( + calculateAmountUSD(transaction.amount, price) + ); + + // const stasAmount = calculateSats(transaction.amount, price); + + return ( + + + + + + {transaction.type === 'send' ? '-' : '+'} + {amountPrice} + + {/* {stasAmount && {stasAmount}} */} + + + +

    {truncateEthAddress(transaction.type === 'receive' ? transaction.from : transaction.to)}

    +
    + +

    {formatDistanceToNow(transaction.date)} ago

    +
    +
    + ); +}; + +export { TransactionItem }; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx new file mode 100644 index 000000000..96564e656 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx @@ -0,0 +1,56 @@ +import { Card, Flex, P, Spinner } from '@gobob/ui'; +import { useEffect, useState } from 'react'; +import { useAccount } from 'wagmi'; + +import { useGetTransactions } from '../../../../hooks'; + +import { TransactionItem } from './TransactionItem'; + +type Props = {}; + +type TransactionListProps = Props; + +const TransactionList = ({}: TransactionListProps): JSX.Element => { + const { address } = useAccount(); + const { data: transactions, isLoading } = useGetTransactions(); + const [isInitialLoading, setInitialLoading] = useState(isLoading); + + useEffect(() => { + if (isInitialLoading) { + setInitialLoading(isLoading); + } + }, [isLoading, isInitialLoading]); + + useEffect(() => { + if (address) { + setInitialLoading(isLoading); + } + }, [address, isLoading]); + + return ( + + {isInitialLoading ? ( + + +

    + Fetching bridging operations... +

    +
    + ) : ( + <> + {transactions?.length ? ( + transactions.map((transaction, idx) => ) + ) : ( + +

    + No bridging operations found +

    +
    + )} + + )} +
    + ); +}; + +export { TransactionList }; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/index.tsx b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/index.tsx new file mode 100644 index 000000000..30e9c699e --- /dev/null +++ b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/index.tsx @@ -0,0 +1 @@ +export { TransactionList } from './TransactionList'; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/index.tsx b/apps/hybrid-pay/src/pages/Wallet/components/index.tsx index 76d2216b1..5a9f8c694 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/index.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/index.tsx @@ -1 +1,2 @@ export { Hero } from './Hero'; +export { TransactionList } from './TransactionList'; diff --git a/apps/hybrid-pay/vite.config.ts b/apps/hybrid-pay/vite.config.ts index 32c002f3f..1134d1024 100644 --- a/apps/hybrid-pay/vite.config.ts +++ b/apps/hybrid-pay/vite.config.ts @@ -30,7 +30,7 @@ export default defineConfig(({ mode }) => { }), NodeModulesPolyfillPlugin() ] - } + } as any }, server: { proxy: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 84c9f2568..1e8faca1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -397,6 +397,12 @@ importers: big.js: specifier: ^6.2.1 version: 6.2.1 + date-fns: + specifier: ^3.2.0 + version: 3.6.0 + graphql-request: + specifier: 6.1.0 + version: 6.1.0(graphql@16.9.0) permissionless: specifier: ^0.1.36 version: 0.1.36(viem@2.17.3) From 4430e1e16349e592bb5b7f86b133b877c3e03ecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Fri, 19 Jul 2024 12:17:09 +0100 Subject: [PATCH 08/41] fix: ui --- .../src/hooks/useGetTransactions.ts | 4 +++- .../TransactionList/TransactionList.tsx | 24 ++++--------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/apps/hybrid-pay/src/hooks/useGetTransactions.ts b/apps/hybrid-pay/src/hooks/useGetTransactions.ts index 8bb9dc055..6a0d77070 100644 --- a/apps/hybrid-pay/src/hooks/useGetTransactions.ts +++ b/apps/hybrid-pay/src/hooks/useGetTransactions.ts @@ -104,7 +104,9 @@ const useGetTransactions = () => { queryFn: async (): Promise => { const { receive, sent } = await request(transactionsUrl, getTransactions, { address }); - return [...transformData(receive, tokens, 'receive'), ...transformData(sent, tokens, 'send')]; + return [...transformData(receive, tokens, 'receive'), ...transformData(sent, tokens, 'send')].sort( + (a, b) => b.date.getTime() - a.date.getTime() + ); }, enabled: Boolean(address), // refetchInterval: INTERVAL.SECONDS_30, diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx index 96564e656..da0b30b63 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx @@ -1,6 +1,4 @@ import { Card, Flex, P, Spinner } from '@gobob/ui'; -import { useEffect, useState } from 'react'; -import { useAccount } from 'wagmi'; import { useGetTransactions } from '../../../../hooks'; @@ -11,29 +9,15 @@ type Props = {}; type TransactionListProps = Props; const TransactionList = ({}: TransactionListProps): JSX.Element => { - const { address } = useAccount(); - const { data: transactions, isLoading } = useGetTransactions(); - const [isInitialLoading, setInitialLoading] = useState(isLoading); - - useEffect(() => { - if (isInitialLoading) { - setInitialLoading(isLoading); - } - }, [isLoading, isInitialLoading]); - - useEffect(() => { - if (address) { - setInitialLoading(isLoading); - } - }, [address, isLoading]); + const { data: transactions, isPending } = useGetTransactions(); return ( - {isInitialLoading ? ( + {isPending ? (

    - Fetching bridging operations... + Loading transactions...

    ) : ( @@ -43,7 +27,7 @@ const TransactionList = ({}: TransactionListProps): JSX.Element => { ) : (

    - No bridging operations found + No transactions found

    )} From 3f2cbde4110471d41117dc7f9909b51214c0fc68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Fri, 19 Jul 2024 14:13:11 +0100 Subject: [PATCH 09/41] fix: ui --- apps/hybrid-pay/api/geoblock.js | 51 - apps/hybrid-pay/api/index.js | 26 +- apps/hybrid-pay/package.json | 12 +- apps/hybrid-pay/src/App.tsx | 4 +- .../src/components/Layout/Header.tsx | 2 +- apps/hybrid-pay/src/hooks/useKernelClient.ts | 3 +- apps/hybrid-pay/src/lib/form/transfer.ts | 1 - .../Recieve.tsx => Receive/Receive.tsx} | 7 +- apps/hybrid-pay/src/pages/Receive/index.tsx | 1 + apps/hybrid-pay/src/pages/Recieve/index.tsx | 1 - apps/hybrid-pay/src/pages/Send/Send.tsx | 30 +- .../ButtonGroup/CardButton.style.tsx | 2 - apps/hybrid-pay/src/pages/Wallet/Wallet.tsx | 18 +- apps/hybrid-pay/vercel.json | 6 +- apps/hybrid-pay/vite.config.ts | 10 - packages/tokens/src/tokens.ts | 3 +- pnpm-lock.yaml | 3828 +++++++++-------- 17 files changed, 2010 insertions(+), 1995 deletions(-) delete mode 100644 apps/hybrid-pay/api/geoblock.js rename apps/hybrid-pay/src/pages/{Recieve/Recieve.tsx => Receive/Receive.tsx} (87%) create mode 100644 apps/hybrid-pay/src/pages/Receive/index.tsx delete mode 100644 apps/hybrid-pay/src/pages/Recieve/index.tsx diff --git a/apps/hybrid-pay/api/geoblock.js b/apps/hybrid-pay/api/geoblock.js deleted file mode 100644 index 3907b3cd2..000000000 --- a/apps/hybrid-pay/api/geoblock.js +++ /dev/null @@ -1,51 +0,0 @@ -export const config = { - runtime: 'edge' -}; - -const blockedCountries = [ - 'AL', - 'BS', - 'BB', - 'BW', - 'KH', - 'KP', - 'GH', - 'JM', - 'MY', - 'MU', - 'MM', - 'NI', - 'ID', - 'IR', - 'AF', - 'PK', - 'CN', - 'PA', - 'AM', - 'GN', - 'IQ', - 'RW', - 'RS', - 'SY', - 'TH', - 'UG', - 'TZ', - 'US', - 'YE', - 'ZW', - 'RU', - 'CU', - 'SD', - 'VE' -]; - -function isGeoblocked(req) { - // https://vercel.com/docs/concepts/edge-network/headers#x-vercel-ip-country - const countryCode = req.headers.get('x-vercel-ip-country'); - - return blockedCountries.includes(countryCode); -} - -export default (req) => { - return new Response(null, { status: isGeoblocked(req) ? 403 : 200 }); -}; diff --git a/apps/hybrid-pay/api/index.js b/apps/hybrid-pay/api/index.js index 9fd79b386..017ce4db5 100644 --- a/apps/hybrid-pay/api/index.js +++ b/apps/hybrid-pay/api/index.js @@ -1,31 +1,13 @@ import { createProxyMiddleware } from 'http-proxy-middleware'; -const CHAIN = process.env.CHAIN || 'mainnet'; - -const API_URL = { - mainnet: 'https://fusion-api.gobob.xyz', - sepolia: 'https://fusion-api-sepolia.gobob.xyz' -}; - -const ONRAMP_API_URL = { - mainnet: 'https://onramp-api-mainnet.gobob.xyz', - sepolia: 'https://onramp-api-testnet.gobob.xyz' -}; - -const BTC_API_URL = { - mainnet: 'https://btc-mainnet.gobob.xyz', - sepolia: 'https://btc-testnet.gobob.xyz' -}; - const proxyMiddleware = createProxyMiddleware({ - target: API_URL[CHAIN], + target: 'https://app.gobob.xyz/api', router: { - '/dynamic-api': API_URL[CHAIN], - '/onramp-api': ONRAMP_API_URL[CHAIN], - '/btc-api': BTC_API_URL[CHAIN] + '/api': 'https://app.gobob.xyz/api', + '/dynamic-api': 'https://app.dynamicauth.com/api/v0' }, changeOrigin: true, - pathRewrite: { '^/dynamic-api': '', '^/onramp-api': '', '^/btc-api': '' }, + pathRewrite: { '^/dynamic-api': '', '^/api': '' }, on: { proxyReq: (proxyReq) => { proxyReq.setHeader('x-sec-token', 'foobar'); diff --git a/apps/hybrid-pay/package.json b/apps/hybrid-pay/package.json index c7d31682f..0e20bb49e 100644 --- a/apps/hybrid-pay/package.json +++ b/apps/hybrid-pay/package.json @@ -13,11 +13,11 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@dynamic-labs/bitcoin": "^2.2.10", - "@dynamic-labs/ethereum": "^2.2.10", - "@dynamic-labs/ethereum-aa": "^2.2.10", - "@dynamic-labs/sdk-react-core": "^2.2.10", - "@dynamic-labs/wagmi-connector": "^2.2.10", + "@dynamic-labs/bitcoin": "^v3.0.0-alpha.22", + "@dynamic-labs/ethereum": "^v3.0.0-alpha.22", + "@dynamic-labs/ethereum-aa": "^v3.0.0-alpha.22", + "@dynamic-labs/sdk-react-core": "^v3.0.0-alpha.22", + "@dynamic-labs/wagmi-connector": "^v3.0.0-alpha.22", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@gobob/chains": "workspace:^", @@ -36,7 +36,7 @@ "@react-stately/list": "^3.9.1", "@sentry/react": "^8.8.0", "@sentry/vite-plugin": "^2.18.0", - "@zerodev/sdk": "^5.3.3", + "@zerodev/sdk": "^5.3.4", "big.js": "^6.2.1", "date-fns": "^3.2.0", "graphql-request": "6.1.0", diff --git a/apps/hybrid-pay/src/App.tsx b/apps/hybrid-pay/src/App.tsx index dc479a4be..8460c6add 100644 --- a/apps/hybrid-pay/src/App.tsx +++ b/apps/hybrid-pay/src/App.tsx @@ -23,7 +23,7 @@ const ScrollToTop = () => { const Wallet = lazy(() => import('./pages/Wallet')); const Send = lazy(() => import('./pages/Send')); -const Recieve = lazy(() => import('./pages/Recieve')); +const Receive = lazy(() => import('./pages/Receive')); const Custom404 = lazy(() => import('./pages/404')); const ProtectedRoute = ({ children }: { children: ReactNode }) => { @@ -107,7 +107,7 @@ function App() { - + } path={RoutesPath.RECIEVE} diff --git a/apps/hybrid-pay/src/components/Layout/Header.tsx b/apps/hybrid-pay/src/components/Layout/Header.tsx index b56e26d92..57543daeb 100644 --- a/apps/hybrid-pay/src/components/Layout/Header.tsx +++ b/apps/hybrid-pay/src/components/Layout/Header.tsx @@ -21,7 +21,7 @@ const Header = ({ ...props }: HeaderProps): JSX.Element => { return ( - {pathname === RoutesPath.HOME ? ( + {pathname === RoutesPath.HOME || !isAuthenticated ? ( ) : ( diff --git a/apps/hybrid-pay/src/hooks/useKernelClient.ts b/apps/hybrid-pay/src/hooks/useKernelClient.ts index 4dbd9229f..767eeee87 100644 --- a/apps/hybrid-pay/src/hooks/useKernelClient.ts +++ b/apps/hybrid-pay/src/hooks/useKernelClient.ts @@ -43,7 +43,7 @@ const useKernelClient = (gasToken?: Currency) => { return; } - const paymaster = gasToken ? paymasters?.[CHAIN]?.[gasToken.symbol] : undefined; + const paymaster = gasToken ? paymasters?.[CHAIN as ChainId.BOB]?.[gasToken.symbol] : undefined; const dynamicAccountProvider = connector.getAccountAbstractionProvider(); @@ -91,6 +91,7 @@ const useKernelClient = (gasToken?: Currency) => { }; // can't json-serialize bigints - convert them to strings + // @ts-ignore BigInt.prototype['toJSON'] = function () { return this.toString(); }; diff --git a/apps/hybrid-pay/src/lib/form/transfer.ts b/apps/hybrid-pay/src/lib/form/transfer.ts index 316ed203d..d2d3e36d2 100644 --- a/apps/hybrid-pay/src/lib/form/transfer.ts +++ b/apps/hybrid-pay/src/lib/form/transfer.ts @@ -22,7 +22,6 @@ type TransferTokenFormValues = { type TransferTokenFormValidationParams = { [TRANSFER_TOKEN_AMOUNT]: MaxAmountValidationParams & MinAmountValidationParams; - [TRANSFER_TOKEN_RECIPIENT]?: 'evm' | 'email'; }; const transferTokenSchema = (params: TransferTokenFormValidationParams) => { diff --git a/apps/hybrid-pay/src/pages/Recieve/Recieve.tsx b/apps/hybrid-pay/src/pages/Receive/Receive.tsx similarity index 87% rename from apps/hybrid-pay/src/pages/Recieve/Recieve.tsx rename to apps/hybrid-pay/src/pages/Receive/Receive.tsx index 7fbe70b0f..892f8b47a 100644 --- a/apps/hybrid-pay/src/pages/Recieve/Recieve.tsx +++ b/apps/hybrid-pay/src/pages/Receive/Receive.tsx @@ -5,8 +5,9 @@ import { useAccount } from 'wagmi'; import { truncateEthAddress } from '@gobob/utils'; import { Main } from '../../components'; +import { RoutesPath } from '../../constants'; -const Recieve = () => { +const Receive = () => { const { user } = useDynamicContext(); const { address } = useAccount(); @@ -35,7 +36,7 @@ const Recieve = () => { fgColor='#ffffff' size={256} style={{ height: 'auto', maxWidth: '100%', width: '100%', background: 'transparent' }} - value={address!} + value={`${window.location.host}${RoutesPath.SEND}?to=${user?.email || address}`} viewBox={`0 0 256 256`} /> @@ -43,4 +44,4 @@ const Recieve = () => { ); }; -export { Recieve }; +export { Receive }; diff --git a/apps/hybrid-pay/src/pages/Receive/index.tsx b/apps/hybrid-pay/src/pages/Receive/index.tsx new file mode 100644 index 000000000..4bb84aeba --- /dev/null +++ b/apps/hybrid-pay/src/pages/Receive/index.tsx @@ -0,0 +1 @@ +export { Receive as default } from './Receive'; diff --git a/apps/hybrid-pay/src/pages/Recieve/index.tsx b/apps/hybrid-pay/src/pages/Recieve/index.tsx deleted file mode 100644 index 7a8cb18e7..000000000 --- a/apps/hybrid-pay/src/pages/Recieve/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { Recieve as default } from './Recieve'; diff --git a/apps/hybrid-pay/src/pages/Send/Send.tsx b/apps/hybrid-pay/src/pages/Send/Send.tsx index 3c7a4e349..465ce6194 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.tsx @@ -57,12 +57,14 @@ const Send = ({}: SendProps): JSX.Element => { const { user } = useDynamicContext(); - const [ticker, setTicker] = useState(CHAIN === ChainId.BASE_SEPOLIA ? 'USDC' : searchParams.get('token') || 'WBTC'); + const defaultTicker = CHAIN === ChainId.BASE_SEPOLIA ? 'USDC' : searchParams.get('token') || 'WBTC'; + + const [ticker, setTicker] = useState(defaultTicker); const [amount, setAmount] = useState(''); const [isGroupAmount, setGroupAmount] = useState(false); const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); - const { getBalance } = useBalances(CHAIN); + const { getBalance, balances, isPending } = useBalances(CHAIN); const { data: tokens } = useTokens(CHAIN); @@ -146,10 +148,6 @@ const Send = ({}: SendProps): JSX.Element => { error: eoaTransferError } = useMutation({ mutationKey: ['eoa-transfer', amount, form.values[TRANSFER_TOKEN_RECIPIENT]], - onSuccess: () => { - form.resetForm(); - setAmount(''); - }, mutationFn: async ({ recipient, currencyAmount @@ -183,6 +181,11 @@ const Send = ({}: SendProps): JSX.Element => { useEffect(() => { if (eoaTransferTransactionReceipt?.status === 'success') { toast.success(`Successfully sent ${amount} ${token?.currency.symbol}`); + + form.resetForm(); + setAmount(''); + setGroupAmount(false); + setTicker(defaultTicker); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [eoaTransferTransactionReceipt]); @@ -207,12 +210,13 @@ const Send = ({}: SendProps): JSX.Element => { } toast.success( - `Successfully transfered ${variables.currencyAmount.numerator} ${variables.currencyAmount.currency.symbol}` + `Successfully transfered ${variables.currencyAmount.toExact()} ${variables.currencyAmount.currency.symbol}` ); form.resetForm(); setAmount(''); - // eslint-disable-next-line react-hooks/exhaustive-deps + setGroupAmount(false); + setTicker(defaultTicker); }, mutationFn: async ({ recipient, @@ -278,6 +282,13 @@ const Send = ({}: SendProps): JSX.Element => { } }, [smartAccountTransferError]); + useEffect(() => { + if (!isPending) { + form.validateField(TRANSFER_TOKEN_AMOUNT); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [balances, isPending]); + const tokenInputItems = useMemo( () => tokens?.map((token) => { @@ -332,9 +343,10 @@ const Send = ({}: SendProps): JSX.Element => { currency={token.currency} isSelected={isGroupAmount} onSelectionChange={(currencyAmount) => { - form.setFieldValue(TRANSFER_TOKEN_AMOUNT, currencyAmount.toSignificant(), true); + form.setFieldValue(TRANSFER_TOKEN_AMOUNT, currencyAmount.toSignificant()); form.setFieldTouched(TRANSFER_TOKEN_AMOUNT, true); setGroupAmount(true); + setTimeout(() => form.validateField(TRANSFER_TOKEN_AMOUNT), 0); }} /> ); diff --git a/apps/hybrid-pay/src/pages/Send/Send.tsx b/apps/hybrid-pay/src/pages/Send/Send.tsx index 822b4d09e..bde10aa0d 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.tsx @@ -314,8 +314,8 @@ const Send = ({}: SendProps): JSX.Element => { const isSubmitDisabled = isFormDisabled(form); return ( -
    - +
    + { setTimeout(() => form.validateField(TRANSFER_TOKEN_AMOUNT), 0); }} /> - diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx index e1ee03272..f59fc468c 100644 --- a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx @@ -21,6 +21,8 @@ const CardButton = ({ ...props }: CardButtonProps): JSX.Element => { isHoverable isPressable alignItems='center' + background='grey-500' + bordered={'transparent' as any} flex={1} justifyContent='center' padding='md' diff --git a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx index 26ee32c73..3919bc68e 100644 --- a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx @@ -61,6 +61,7 @@ const TokenButtonGroup = ({ isSelected, currency, onSelectionChange }: HeaderPro flex={1} gap='md' justifyContent='space-between' + marginTop='s' selectedKeys={key ? [key] : []} selectionMode='single' onSelectionChange={handleSelectionChange} diff --git a/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx b/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx index 6c41687a7..0fd28da40 100644 --- a/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx @@ -4,7 +4,7 @@ import { StyledFlex } from './Wallet.style'; import { Hero, TransactionList } from './components'; const Wallet = () => ( -
    +
    diff --git a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx index d1415ce95..5adb21eab 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx @@ -1,6 +1,4 @@ -import { Avatar, Button, Flex, H1, H2, Span, useCurrencyFormatter, useLocale } from '@gobob/ui'; -import { usePrices } from '@gobob/react-query'; -import { useMemo } from 'react'; +import { Button, Flex, H1, useLocale } from '@gobob/ui'; import { useNavigate } from 'react-router-dom'; import { useTotalBalance } from '../../../../hooks'; @@ -13,8 +11,6 @@ type HeroProps = Props; const Hero = ({}: HeroProps): JSX.Element => { const { locale } = useLocale(); const { data: accountBalance } = useTotalBalance(CHAIN); - const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); - const format = useCurrencyFormatter(); const navigate = useNavigate(); @@ -26,31 +22,21 @@ const Hero = ({}: HeroProps): JSX.Element => { navigate(RoutesPath.RECIEVE); }; - const accountBalanceSats = useMemo( - () => - Intl.NumberFormat(locale).format(Math.round(accountBalance?.div(getPrice('WBTC') / 100000000).toNumber() || 0)), - // eslint-disable-next-line react-hooks/exhaustive-deps - [accountBalance, locale] - ); - return ( -

    - {format(accountBalance?.toNumber() || 0)} -

    - - -

    - {accountBalanceSats}{' '} - - SATS - -

    -
    + ) : ( */} +

    + {Intl.NumberFormat(locale, { style: 'currency', currency: 'USD' }).format(accountBalance?.toNumber() || 0)} +

    + {/* )} */}
    - {pathname === RoutesPath.SEND ? 'Send' : 'Recieve'} + {pathname === RoutesPath.SEND ? 'Send' : 'Receive'} )} diff --git a/apps/hybrid-pay/src/constants/routes.ts b/apps/hybrid-pay/src/constants/routes.ts index bff74b1ce..9f9487772 100644 --- a/apps/hybrid-pay/src/constants/routes.ts +++ b/apps/hybrid-pay/src/constants/routes.ts @@ -1,7 +1,7 @@ const RoutesPath = { HOME: '/', SEND: '/send', - RECIEVE: '/recieve' + RECEIVE: '/receive' }; export { RoutesPath }; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx index 5adb21eab..88e0aa171 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx @@ -19,7 +19,7 @@ const Hero = ({}: HeroProps): JSX.Element => { }; const handleReceive = () => { - navigate(RoutesPath.RECIEVE); + navigate(RoutesPath.RECEIVE); }; return ( From c3839da4ea224af5f16b407b81b4a85328643add Mon Sep 17 00:00:00 2001 From: Sander Bosma Date: Mon, 22 Jul 2024 18:31:22 +0200 Subject: [PATCH 20/41] fix: add https prefix to qr code --- apps/hybrid-pay/src/pages/Receive/Receive.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hybrid-pay/src/pages/Receive/Receive.tsx b/apps/hybrid-pay/src/pages/Receive/Receive.tsx index 9db7776c7..b10dcace4 100644 --- a/apps/hybrid-pay/src/pages/Receive/Receive.tsx +++ b/apps/hybrid-pay/src/pages/Receive/Receive.tsx @@ -38,7 +38,7 @@ const Receive = () => { fgColor='#ffffff' size={256} style={{ height: 'auto', maxWidth: '100%', width: '100%', background: 'transparent' }} - value={`${window.location.host}${RoutesPath.SEND}?to=${user?.email || address}`} + value={`https://${window.location.host}${RoutesPath.SEND}?to=${user?.email || address}`} viewBox={`0 0 256 256`} />
    From 6776631209826d56123977721b36aa1c05ddc78c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Mon, 22 Jul 2024 18:16:40 +0100 Subject: [PATCH 23/41] fix: send crash --- apps/hybrid-pay/src/lib/form/yup.custom.ts | 6 +- .../components/ButtonGroup/ButtonGroup.tsx | 4 +- .../TokenButtonGroup/TokenButtonGroup.tsx | 18 +- pnpm-lock.yaml | 308 ------------------ 4 files changed, 6 insertions(+), 330 deletions(-) diff --git a/apps/hybrid-pay/src/lib/form/yup.custom.ts b/apps/hybrid-pay/src/lib/form/yup.custom.ts index 8fceab09e..89f42651b 100644 --- a/apps/hybrid-pay/src/lib/form/yup.custom.ts +++ b/apps/hybrid-pay/src/lib/form/yup.custom.ts @@ -8,7 +8,7 @@ import { isAddress } from 'viem'; yup.addMethod(yup.string, 'requiredAmount', function (action: string, customMessage?: string) { return this.transform((value) => (isNaN(value) ? undefined : value)).test('requiredAmount', (value, ctx) => { - if (value === undefined) { + if (value === undefined || value === '') { const message = customMessage || `Please enter the amount to ${action}`; return ctx.createError({ message }); @@ -27,7 +27,7 @@ yup.addMethod( 'maxAmount', function ({ maxAmount }: MaxAmountValidationParams, action?: string, customMessage?: string) { return this.test('maxAmount', (value, ctx) => { - if (value === undefined) return true; + if (value === undefined || value === '') return true; const amount = new Big(value); @@ -51,7 +51,7 @@ yup.addMethod( 'minAmount', function ({ minAmount }: MinAmountValidationParams = {}, action: string, customMessage?: string) { return this.test('balance', (value, ctx) => { - if (value === undefined) return true; + if (value === undefined || value === '') return true; const amount = new Big(value); diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx index 26587d05c..9871da0ef 100644 --- a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx @@ -13,9 +13,9 @@ type InheritAttrs = Omit; type HeaderProps = Props & AriaAttrs & InheritAttrs; -const ButtonGroup = ({ ...props }: HeaderProps): JSX.Element => { +const ButtonGroup = ({ onSelectionChange, selectionMode, ...props }: HeaderProps): JSX.Element => { const domRef = useDOMRef(null); - let state = useListState(props); + let state = useListState({ ...props, onSelectionChange, selectionMode }); let { gridProps } = useTagGroup(props, state, domRef); return ( diff --git a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx index 3919bc68e..0ad91dafa 100644 --- a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx @@ -58,6 +58,7 @@ const TokenButtonGroup = ({ isSelected, currency, onSelectionChange }: HeaderPro return ( ))} - - {/* - - {Intl.NumberFormat(locale).format(16000)} - - {format(10)} - - - - - - {Intl.NumberFormat(locale).format(32000)} - - {format(20)} - - - */} ); }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9999cff20..e67a9f1db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -334,12 +334,6 @@ importers: '@dynamic-labs/wagmi-connector': specifier: ^v3.0.0-alpha.24 version: 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/sdk-react-core@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(@wagmi/core@2.12.2)(eventemitter3@5.0.1)(react@18.3.1)(viem@2.17.5)(wagmi@2.11.2) - '@esbuild-plugins/node-globals-polyfill': - specifier: ^0.2.3 - version: 0.2.3(esbuild@0.23.0) - '@esbuild-plugins/node-modules-polyfill': - specifier: ^0.2.2 - version: 0.2.2(esbuild@0.23.0) '@gobob/chains': specifier: workspace:^ version: link:../../packages/chains @@ -3047,24 +3041,6 @@ packages: react: 18.3.1 dev: true - /@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.23.0): - resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} - peerDependencies: - esbuild: '*' - dependencies: - esbuild: 0.23.0 - dev: false - - /@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.23.0): - resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} - peerDependencies: - esbuild: '*' - dependencies: - esbuild: 0.23.0 - escape-string-regexp: 4.0.0 - rollup-plugin-node-polyfills: 0.2.1 - dev: false - /@esbuild/aix-ppc64@0.21.5: resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -3074,15 +3050,6 @@ packages: dev: true optional: true - /@esbuild/aix-ppc64@0.23.0: - resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -3100,15 +3067,6 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.23.0: - resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -3126,15 +3084,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.23.0: - resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -3152,15 +3101,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.23.0: - resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -3178,15 +3118,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.23.0: - resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -3204,15 +3135,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.23.0: - resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -3230,15 +3152,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.23.0: - resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -3256,15 +3169,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.23.0: - resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -3282,15 +3186,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.23.0: - resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -3308,15 +3203,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.23.0: - resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -3334,15 +3220,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.23.0: - resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -3360,15 +3237,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.23.0: - resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -3386,15 +3254,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.23.0: - resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -3412,15 +3271,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.23.0: - resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -3438,15 +3288,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.23.0: - resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -3464,15 +3305,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.23.0: - resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -3490,15 +3322,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.23.0: - resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -3516,24 +3339,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.23.0: - resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: false - optional: true - - /@esbuild/openbsd-arm64@0.23.0: - resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -3551,15 +3356,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.23.0: - resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -3577,15 +3373,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.23.0: - resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -3603,15 +3390,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.23.0: - resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -3629,15 +3407,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.23.0: - resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -3655,15 +3424,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.23.0: - resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -13911,38 +13671,6 @@ packages: '@esbuild/win32-x64': 0.21.5 dev: true - /esbuild@0.23.0: - resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} - engines: {node: '>=18'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.23.0 - '@esbuild/android-arm': 0.23.0 - '@esbuild/android-arm64': 0.23.0 - '@esbuild/android-x64': 0.23.0 - '@esbuild/darwin-arm64': 0.23.0 - '@esbuild/darwin-x64': 0.23.0 - '@esbuild/freebsd-arm64': 0.23.0 - '@esbuild/freebsd-x64': 0.23.0 - '@esbuild/linux-arm': 0.23.0 - '@esbuild/linux-arm64': 0.23.0 - '@esbuild/linux-ia32': 0.23.0 - '@esbuild/linux-loong64': 0.23.0 - '@esbuild/linux-mips64el': 0.23.0 - '@esbuild/linux-ppc64': 0.23.0 - '@esbuild/linux-riscv64': 0.23.0 - '@esbuild/linux-s390x': 0.23.0 - '@esbuild/linux-x64': 0.23.0 - '@esbuild/netbsd-x64': 0.23.0 - '@esbuild/openbsd-arm64': 0.23.0 - '@esbuild/openbsd-x64': 0.23.0 - '@esbuild/sunos-x64': 0.23.0 - '@esbuild/win32-arm64': 0.23.0 - '@esbuild/win32-ia32': 0.23.0 - '@esbuild/win32-x64': 0.23.0 - dev: false - /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -14279,10 +14007,6 @@ packages: engines: {node: '>=4.0'} dev: true - /estree-walker@0.6.1: - resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - dev: false - /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -17800,12 +17524,6 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 - dev: false - /magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -20538,21 +20256,6 @@ packages: bn.js: 5.2.1 dev: false - /rollup-plugin-inject@3.0.2: - resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. - dependencies: - estree-walker: 0.6.1 - magic-string: 0.25.9 - rollup-pluginutils: 2.8.2 - dev: false - - /rollup-plugin-node-polyfills@0.2.1: - resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} - dependencies: - rollup-plugin-inject: 3.0.2 - dev: false - /rollup-plugin-visualizer@5.12.0: resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} engines: {node: '>=14'} @@ -20569,12 +20272,6 @@ packages: yargs: 17.7.2 dev: false - /rollup-pluginutils@2.8.2: - resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - dependencies: - estree-walker: 0.6.1 - dev: false - /rollup@3.29.4: resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -21111,11 +20808,6 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: false - /space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} dev: true From b8f05bba068742e49794fbcf420aef2aecac9944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Mon, 22 Jul 2024 18:25:33 +0100 Subject: [PATCH 24/41] fix: prices --- .../src/pages/Send/components/ButtonGroup/ButtonGroup.tsx | 4 ++-- .../Send/components/TokenButtonGroup/TokenButtonGroup.tsx | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx index 9871da0ef..4f71bc0e0 100644 --- a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx @@ -13,9 +13,9 @@ type InheritAttrs = Omit; type HeaderProps = Props & AriaAttrs & InheritAttrs; -const ButtonGroup = ({ onSelectionChange, selectionMode, ...props }: HeaderProps): JSX.Element => { +const ButtonGroup = ({ onSelectionChange, selectionMode, selectedKeys, ...props }: HeaderProps): JSX.Element => { const domRef = useDOMRef(null); - let state = useListState({ ...props, onSelectionChange, selectionMode }); + let state = useListState({ ...props, onSelectionChange, selectionMode, selectedKeys }); let { gridProps } = useTagGroup(props, state, domRef); return ( diff --git a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx index 0ad91dafa..e7f71faaa 100644 --- a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx @@ -20,7 +20,7 @@ type HeaderProps = Props; const TokenButtonGroup = ({ isSelected, currency, onSelectionChange }: HeaderProps): JSX.Element => { const { locale } = useLocale(); const format = useCurrencyFormatter(); - const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); + const { getPrice, data: pricesData } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); const [key, setKey] = useState(); @@ -35,14 +35,14 @@ const TokenButtonGroup = ({ isSelected, currency, onSelectionChange }: HeaderPro return usdItems.map((usd) => CurrencyAmount.fromRawAmount( currency, - new Big(100000000).mul(usd).div(getPrice(currency.symbol)).round(0, 0).toNumber() + pricesData ? new Big(100000000).mul(usd).div(getPrice(currency.symbol)).round(0, 0).toNumber() : 0 ) ); } return usdItems.map((usd) => CurrencyAmount.fromBaseAmount(currency, usd)); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [currency]); + }, [currency, pricesData]); const handleSelectionChange = (key: any) => { const [selectedKey] = [...key]; From 157cf525ec2e35fac89d7b6f16884419f8e7293c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Mon, 22 Jul 2024 19:39:48 +0100 Subject: [PATCH 25/41] fix: minor ui --- apps/hybrid-pay/src/pages/Send/Send.style.tsx | 2 +- apps/hybrid-pay/src/pages/Send/Send.tsx | 5 ++++- packages/ui/src/components/TokenInput/BaseTokenInput.tsx | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/hybrid-pay/src/pages/Send/Send.style.tsx b/apps/hybrid-pay/src/pages/Send/Send.style.tsx index 93b9e1f03..d9d7894d9 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.style.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.style.tsx @@ -4,7 +4,7 @@ import styled from 'styled-components'; const StyledInput = styled(Input)` input { padding: ${({ theme }) => `${theme.spacing('xl')} ${theme.spacing('lg')}`}; - font-size: ${({ theme }) => theme.fontSize('s')}; + font-size: ${({ theme }) => theme.fontSize('md')}; } `; diff --git a/apps/hybrid-pay/src/pages/Send/Send.tsx b/apps/hybrid-pay/src/pages/Send/Send.tsx index bde10aa0d..15602135e 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.tsx @@ -330,7 +330,10 @@ const Send = ({}: SendProps): JSX.Element => { size='lg' type='selectable' valueUSD={calculateAmountUSD(currencyAmount, getPrice(token.currency.symbol))} - onChangeCurrency={(currency) => setTicker(currency.symbol)} + onChangeCurrency={(currency) => { + setTicker(currency.symbol); + setGroupAmount(false); + }} {...mergeProps( form.getSelectableTokenFieldProps({ amount: TRANSFER_TOKEN_AMOUNT, currency: TRANSFER_TOKEN_TICKER }), { diff --git a/packages/ui/src/components/TokenInput/BaseTokenInput.tsx b/packages/ui/src/components/TokenInput/BaseTokenInput.tsx index bec1e66d5..181c4e998 100644 --- a/packages/ui/src/components/TokenInput/BaseTokenInput.tsx +++ b/packages/ui/src/components/TokenInput/BaseTokenInput.tsx @@ -74,7 +74,7 @@ const BaseTokenInput = forwardRef( isDisabled, isInvalid: isInvalidProp, defaultValue, - inputMode, + inputMode = 'decimal', value = '', endAdornment, currency, From b02f183178fc238906148ffd6d4b8d4e03de06a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Tue, 23 Jul 2024 10:21:27 +0100 Subject: [PATCH 26/41] fix: send form --- apps/hybrid-pay/src/lib/form/transfer.ts | 4 ++-- apps/hybrid-pay/src/lib/form/yup.custom.ts | 7 ++++++- apps/hybrid-pay/src/pages/Send/Send.tsx | 8 ++++++-- .../components/ButtonGroup/ButtonGroup.tsx | 10 ++++++++-- .../components/ButtonGroup/CardButton.tsx | 1 + .../TokenButtonGroup/TokenButtonGroup.tsx | 19 +++++++++++++++++-- 6 files changed, 40 insertions(+), 9 deletions(-) diff --git a/apps/hybrid-pay/src/lib/form/transfer.ts b/apps/hybrid-pay/src/lib/form/transfer.ts index d2d3e36d2..7cf2697d1 100644 --- a/apps/hybrid-pay/src/lib/form/transfer.ts +++ b/apps/hybrid-pay/src/lib/form/transfer.ts @@ -35,8 +35,8 @@ const transferTokenSchema = (params: TransferTokenFormValidationParams) => { [TRANSFER_TOKEN_AMOUNT]: yup .string() .requiredAmount('transfer') - .maxAmount(params[TRANSFER_TOKEN_AMOUNT], 'transfer') - .minAmount(params[TRANSFER_TOKEN_AMOUNT], 'transfer'), + .minAmount(params[TRANSFER_TOKEN_AMOUNT], 'transfer') + .maxAmount(params[TRANSFER_TOKEN_AMOUNT], 'transfer'), [TRANSFER_TOKEN_TICKER]: yup.string() }); }; diff --git a/apps/hybrid-pay/src/lib/form/yup.custom.ts b/apps/hybrid-pay/src/lib/form/yup.custom.ts index 89f42651b..d3880b38f 100644 --- a/apps/hybrid-pay/src/lib/form/yup.custom.ts +++ b/apps/hybrid-pay/src/lib/form/yup.custom.ts @@ -31,6 +31,12 @@ yup.addMethod( const amount = new Big(value); + if (amount.gt(0) && maxAmount && maxAmount.eq(0)) { + const message = customMessage || `Insufficient balance`; + + return ctx.createError({ message }); + } + if (amount.gt(maxAmount)) { const message = customMessage || `Amount to ${action} must be at most ${maxAmount.toFixed()}`; @@ -52,7 +58,6 @@ yup.addMethod( function ({ minAmount }: MinAmountValidationParams = {}, action: string, customMessage?: string) { return this.test('balance', (value, ctx) => { if (value === undefined || value === '') return true; - const amount = new Big(value); if (!minAmount && !amount.gt(0)) { diff --git a/apps/hybrid-pay/src/pages/Send/Send.tsx b/apps/hybrid-pay/src/pages/Send/Send.tsx index 15602135e..b8d7d4a11 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.tsx @@ -345,12 +345,16 @@ const Send = ({}: SendProps): JSX.Element => { )} /> { - form.setFieldValue(TRANSFER_TOKEN_AMOUNT, currencyAmount.toSignificant()); - form.setFieldTouched(TRANSFER_TOKEN_AMOUNT, true); + const amountValue = currencyAmount.toSignificant(); + + form.setFieldValue(TRANSFER_TOKEN_AMOUNT, amountValue); setGroupAmount(true); + setAmount(amountValue); + setTimeout(() => form.setFieldTouched(TRANSFER_TOKEN_AMOUNT, true), 0); setTimeout(() => form.validateField(TRANSFER_TOKEN_AMOUNT), 0); }} /> diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx index 4f71bc0e0..38a4c36d0 100644 --- a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx @@ -13,9 +13,15 @@ type InheritAttrs = Omit; type HeaderProps = Props & AriaAttrs & InheritAttrs; -const ButtonGroup = ({ onSelectionChange, selectionMode, selectedKeys, ...props }: HeaderProps): JSX.Element => { +const ButtonGroup = ({ + onSelectionChange, + selectionMode, + selectedKeys, + disabledKeys, + ...props +}: HeaderProps): JSX.Element => { const domRef = useDOMRef(null); - let state = useListState({ ...props, onSelectionChange, selectionMode, selectedKeys }); + let state = useListState({ ...props, onSelectionChange, selectionMode, selectedKeys, disabledKeys }); let { gridProps } = useTagGroup(props, state, domRef); return ( diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx index f59fc468c..b82e1b8cd 100644 --- a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx @@ -24,6 +24,7 @@ const CardButton = ({ ...props }: CardButtonProps): JSX.Element => { background='grey-500' bordered={'transparent' as any} flex={1} + isDisabled={!!rowProps['aria-disabled']} justifyContent='center' padding='md' {...rowProps} diff --git a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx index e7f71faaa..8a8d9c038 100644 --- a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx @@ -7,17 +7,18 @@ import Big from 'big.js'; import { ButtonGroup } from '../ButtonGroup'; -const usdItems = [5, 10, 15]; +const usdItems = [1, 2, 5]; type Props = { isSelected: boolean; currency: Currency; onSelectionChange: (amount: CurrencyAmount) => void; + balance?: CurrencyAmount; }; type HeaderProps = Props; -const TokenButtonGroup = ({ isSelected, currency, onSelectionChange }: HeaderProps): JSX.Element => { +const TokenButtonGroup = ({ isSelected, currency, balance, onSelectionChange }: HeaderProps): JSX.Element => { const { locale } = useLocale(); const format = useCurrencyFormatter(); const { getPrice, data: pricesData } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); @@ -44,6 +45,19 @@ const TokenButtonGroup = ({ isSelected, currency, onSelectionChange }: HeaderPro // eslint-disable-next-line react-hooks/exhaustive-deps }, [currency, pricesData]); + const disabledKeys = useMemo(() => { + if (!pricesData) { + return amounts.map((_, idx) => idx.toString()); + } + + return balance + ? amounts.reduce( + (acc, amount, idx) => (amount.greaterThan(balance) ? [...acc, idx.toString()] : acc), + [] as string[] + ) + : []; + }, [amounts, pricesData, balance]); + const handleSelectionChange = (key: any) => { const [selectedKey] = [...key]; @@ -59,6 +73,7 @@ const TokenButtonGroup = ({ isSelected, currency, onSelectionChange }: HeaderPro return ( Date: Tue, 23 Jul 2024 11:24:39 +0100 Subject: [PATCH 27/41] fix: logos --- apps/hybrid-pay/package.json | 1 - apps/hybrid-pay/src/components/Logo/Logo.tsx | 60 ++++++++++++++++--- .../TransactionList/TransactionItem.style.tsx | 31 +++++----- .../TransactionList/TransactionItem.tsx | 4 +- pnpm-lock.yaml | 3 - 5 files changed, 69 insertions(+), 30 deletions(-) diff --git a/apps/hybrid-pay/package.json b/apps/hybrid-pay/package.json index 975e591c7..128a22235 100644 --- a/apps/hybrid-pay/package.json +++ b/apps/hybrid-pay/package.json @@ -20,7 +20,6 @@ "@gobob/chains": "workspace:^", "@gobob/currency": "workspace:^", "@gobob/hooks": "workspace:^", - "@gobob/icons": "workspace:^", "@gobob/react-query": "workspace:^", "@gobob/tokens": "workspace:^", "@gobob/types": "workspace:^", diff --git a/apps/hybrid-pay/src/components/Logo/Logo.tsx b/apps/hybrid-pay/src/components/Logo/Logo.tsx index 61dad9212..a67a21feb 100644 --- a/apps/hybrid-pay/src/components/Logo/Logo.tsx +++ b/apps/hybrid-pay/src/components/Logo/Logo.tsx @@ -1,5 +1,4 @@ -import { Em, Flex, Span } from '@gobob/ui'; -import { BOBLogo } from '@gobob/icons'; +import { Flex } from '@gobob/ui'; import { NavLinkProps } from 'react-router-dom'; import { StyledLogo } from './Logo.style'; @@ -16,13 +15,56 @@ type LogoProps = Props & InheritAttrs; const Logo = ({ to = '/', onPress, ...props }: LogoProps) => ( - - - BOB - - - PAY - + + + + + + + + + + + + + + ); diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx index e993b540f..43c66438d 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx @@ -1,28 +1,29 @@ import styled from 'styled-components'; -type StyledAvatarWrapperProps = { - $type: 'receive' | 'send'; -}; +const Addornment = ({ type, className }: { type: 'receive' | 'send'; className?: string }) => ( + + + {type === 'receive' ? ( + + ) : ( + + )} + +); -const StyledAvatarWrapper = styled.div` +const StyledAvatarWrapper = styled.div` position: relative; `; -const StyledAvatarAdornment = styled.div` - display: flex; - align-items: center; - justify-content: center; +const StyledAvatarAdornment = styled(Addornment)` position: absolute; - background-color: ${({ $type, theme }) => ($type === 'send' ? theme.color('red-500') : theme.color('green-500'))}; - width: ${({ theme }) => theme.spacing('2xl')}; - height: ${({ theme }) => theme.spacing('2xl')}; - line-height: 0px; - font-weight: 700; + color: ${({ type, theme }) => (type === 'send' ? theme.color('red-500') : theme.color('green-500'))}; right: 0; bottom: 0; transform: translateX(25%); - border: 2px solid ${({ theme }) => theme.color('grey-500')}; - color: ${({ theme }) => theme.color('grey-500')}; border-radius: ${({ theme }) => theme.rounded('full')}; `; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx index 483a2ab64..9e547c784 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx @@ -35,9 +35,9 @@ const TransactionItem = ({ transaction, ...props }: TransactionItemProps): JSX.E - + - {symbol} + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e67a9f1db..2849d5268 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -343,9 +343,6 @@ importers: '@gobob/hooks': specifier: workspace:^ version: link:../../packages/hooks - '@gobob/icons': - specifier: workspace:^ - version: link:../../packages/icons '@gobob/react-query': specifier: workspace:^ version: link:../../packages/react-query From c6e0d93b416251cbc9da10c6ffb26badbfe2549c Mon Sep 17 00:00:00 2001 From: Sander Bosma Date: Tue, 23 Jul 2024 14:27:19 +0200 Subject: [PATCH 28/41] chore: minimum 2 usd digits --- .../pages/Wallet/components/TransactionList/TransactionItem.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx index 9e547c784..ecda310ad 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx @@ -26,6 +26,7 @@ const TransactionItem = ({ transaction, ...props }: TransactionItemProps): JSX.E style: 'currency', currency: 'USD', maximumFractionDigits: 4, + minimumFractionDigits: 2, notation: 'compact' }).format(calculateAmountUSD(transaction.amount, price)); From 2d89617b95a9e95381130af685521a3b76e2383e Mon Sep 17 00:00:00 2001 From: tomjeatt <40243778+tomjeatt@users.noreply.github.com> Date: Tue, 23 Jul 2024 13:33:14 +0100 Subject: [PATCH 29/41] Hybrid app sentry config (#74) * chore: sentry config * chore: tag third party errors --- apps/evm/sentry.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/evm/sentry.ts b/apps/evm/sentry.ts index 7933c69b3..2712db0e9 100644 --- a/apps/evm/sentry.ts +++ b/apps/evm/sentry.ts @@ -35,7 +35,7 @@ Sentry.init({ // - 'drop-error-if-exclusively-contains-third-party-frames' // - 'apply-tag-if-contains-third-party-frames' // - 'apply-tag-if-exclusively-contains-third-party-frames' - behaviour: 'drop-error-if-contains-third-party-frames' + behaviour: 'apply-tag-if-contains-third-party-frames' }) ], From 91740b6181127caf393100d83502b36262e4f7c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sim=C3=A3o?= Date: Tue, 23 Jul 2024 16:53:24 +0100 Subject: [PATCH 30/41] feat: improve dynamic state persistance (#75) --- .../src/components/Layout/Header.tsx | 6 +++- apps/hybrid-pay/src/hooks/index.ts | 2 ++ apps/hybrid-pay/src/hooks/useBalances.ts | 5 ++-- .../hybrid-pay/src/hooks/useDynamicAddress.ts | 26 +++++++++++++++++ .../src/hooks/useGetTransactions.ts | 5 ++-- .../src/hooks/useIsDynamicSmartAccount.ts | 24 +++++++++++++++ apps/hybrid-pay/src/hooks/useTotalBalance.ts | 23 ++++----------- apps/hybrid-pay/src/pages/Receive/Receive.tsx | 4 +-- apps/hybrid-pay/src/pages/Send/Send.tsx | 29 ++++--------------- .../src/pages/Wallet/components/Hero/Hero.tsx | 4 +-- 10 files changed, 77 insertions(+), 51 deletions(-) create mode 100644 apps/hybrid-pay/src/hooks/useDynamicAddress.ts create mode 100644 apps/hybrid-pay/src/hooks/useIsDynamicSmartAccount.ts diff --git a/apps/hybrid-pay/src/components/Layout/Header.tsx b/apps/hybrid-pay/src/components/Layout/Header.tsx index c08dbee93..26d6c9ff2 100644 --- a/apps/hybrid-pay/src/components/Layout/Header.tsx +++ b/apps/hybrid-pay/src/components/Layout/Header.tsx @@ -1,4 +1,4 @@ -import { DynamicWidget, useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { DynamicWidget, useDynamicContext, useDynamicEvents } from '@dynamic-labs/sdk-react-core'; import { ArrowLeft, Button, Flex, FlexProps, Span } from '@gobob/ui'; import { useLocation, useNavigate } from 'react-router-dom'; @@ -18,6 +18,10 @@ const Header = ({ ...props }: HeaderProps): JSX.Element => { const { pathname } = useLocation(); const navigate = useNavigate(); + useDynamicEvents('logout', async () => { + navigate(RoutesPath.HOME); + }); + return ( diff --git a/apps/hybrid-pay/src/hooks/index.ts b/apps/hybrid-pay/src/hooks/index.ts index 579ba07e6..bae7ccbb4 100644 --- a/apps/hybrid-pay/src/hooks/index.ts +++ b/apps/hybrid-pay/src/hooks/index.ts @@ -3,3 +3,5 @@ export * from './useTokens'; export * from './useKernelClient'; export * from './useTotalBalance'; export * from './useGetTransactions'; +export * from './useIsDynamicSmartAccount'; +export * from './useDynamicAddress'; diff --git a/apps/hybrid-pay/src/hooks/useBalances.ts b/apps/hybrid-pay/src/hooks/useBalances.ts index 8aa40435a..d96e99536 100644 --- a/apps/hybrid-pay/src/hooks/useBalances.ts +++ b/apps/hybrid-pay/src/hooks/useBalances.ts @@ -1,18 +1,19 @@ import { ChainId } from '@gobob/chains'; import { CurrencyAmount, ERC20Token, Ether } from '@gobob/currency'; import { INTERVAL, useQuery } from '@gobob/react-query'; -import { useAccount, useBalance, usePublicClient } from '@gobob/wagmi'; +import { useBalance, usePublicClient } from '@gobob/wagmi'; import { chain } from '@react-aria/utils'; import { useCallback, useMemo } from 'react'; import { erc20Abi } from 'viem'; import { useTokens } from './useTokens'; +import { useDynamicAddress } from './useDynamicAddress'; type Balances = Record>; const useBalances = (chainId: ChainId) => { const publicClient = usePublicClient({ chainId }); - const { address } = useAccount(); + const address = useDynamicAddress(); const { data: ethBalance, refetch } = useBalance({ address, chainId }); diff --git a/apps/hybrid-pay/src/hooks/useDynamicAddress.ts b/apps/hybrid-pay/src/hooks/useDynamicAddress.ts new file mode 100644 index 000000000..e3f5b0955 --- /dev/null +++ b/apps/hybrid-pay/src/hooks/useDynamicAddress.ts @@ -0,0 +1,26 @@ +import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { useMemo } from 'react'; +import { Address } from 'viem'; +import { useAccount } from 'wagmi'; + +// This only works if we only enable embedded wallets to be smart accounts +const useDynamicAddress = () => { + const { address } = useAccount(); + const { user } = useDynamicContext(); + + const dynamicAccount = useMemo(() => { + const smartAccount = user?.verifiedCredentials.find( + (credentials) => credentials.walletProvider === 'smartContractWallet' + ); + + if (smartAccount) { + return smartAccount; + } + + return user?.verifiedCredentials.find((credentials) => credentials.walletProvider === 'browserExtension'); + }, [user?.verifiedCredentials]); + + return (dynamicAccount?.address as Address) || address; +}; + +export { useDynamicAddress }; diff --git a/apps/hybrid-pay/src/hooks/useGetTransactions.ts b/apps/hybrid-pay/src/hooks/useGetTransactions.ts index e13d3dc6d..22c45d6a0 100644 --- a/apps/hybrid-pay/src/hooks/useGetTransactions.ts +++ b/apps/hybrid-pay/src/hooks/useGetTransactions.ts @@ -1,6 +1,6 @@ import { Currency, CurrencyAmount } from '@gobob/currency'; import { INTERVAL, useQuery } from '@gobob/react-query'; -import { Address, useAccount } from '@gobob/wagmi'; +import { Address } from '@gobob/wagmi'; import request, { gql } from 'graphql-request'; import { isAddressEqual } from 'viem'; import { ChainId } from '@gobob/chains'; @@ -9,6 +9,7 @@ import { CHAIN } from '../constants'; import { TokenData, useTokens } from './useTokens'; import { paymasters } from './useKernelClient'; +import { useDynamicAddress } from './useDynamicAddress'; type TransactionItemResponse = { from: Address; @@ -96,7 +97,7 @@ const transformData = (transactions: TransactionItemResponse[], tokens: TokenDat .filter(Boolean) as TransactionData[]; const useGetTransactions = () => { - const { address } = useAccount(); + const address = useDynamicAddress(); const { data: tokens } = useTokens(CHAIN); return useQuery({ diff --git a/apps/hybrid-pay/src/hooks/useIsDynamicSmartAccount.ts b/apps/hybrid-pay/src/hooks/useIsDynamicSmartAccount.ts new file mode 100644 index 000000000..0d9bc53ae --- /dev/null +++ b/apps/hybrid-pay/src/hooks/useIsDynamicSmartAccount.ts @@ -0,0 +1,24 @@ +import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { useMemo } from 'react'; +import { Address, isAddressEqual } from 'viem'; +import { useAccount } from 'wagmi'; + +const useIsDynamicSmartAccount = () => { + const { address } = useAccount(); + const { user } = useDynamicContext(); + + return useMemo( + () => + !!( + address && + user?.verifiedCredentials.find( + (credentials) => + credentials.walletProvider === 'smartContractWallet' && + isAddressEqual(credentials.address as Address, address) + ) + ), + [address, user?.verifiedCredentials] + ); +}; + +export { useIsDynamicSmartAccount }; diff --git a/apps/hybrid-pay/src/hooks/useTotalBalance.ts b/apps/hybrid-pay/src/hooks/useTotalBalance.ts index 02f551df8..79bf687e2 100644 --- a/apps/hybrid-pay/src/hooks/useTotalBalance.ts +++ b/apps/hybrid-pay/src/hooks/useTotalBalance.ts @@ -1,34 +1,21 @@ import { ChainId } from '@gobob/chains'; -import { INTERVAL, usePrices, useQuery } from '@gobob/react-query'; -import { useAccount } from '@gobob/wagmi'; +import { usePrices } from '@gobob/react-query'; import Big from 'big.js'; import { calculateAmountUSD } from '../utils'; -import { useTokens } from './useTokens'; import { useBalances } from './useBalances'; const useTotalBalance = (chainId: ChainId) => { - const { address } = useAccount(); - const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); const { erc20Balances } = useBalances(chainId); - const { data: tokens } = useTokens(chainId); - - return useQuery({ - queryKey: ['total-balances', chainId, address], - enabled: Boolean(address && erc20Balances && tokens), - queryFn: async () => { - if (!erc20Balances) return; - - return Object.values(erc20Balances).reduce((acc, amount) => { + return erc20Balances + ? Object.values(erc20Balances).reduce((acc, amount) => { return acc.add(calculateAmountUSD(amount, getPrice(amount.currency.symbol))); - }, new Big(0)); - }, - refetchInterval: INTERVAL.MINUTE - }); + }, new Big(0)) + : new Big(0); }; export { useTotalBalance }; diff --git a/apps/hybrid-pay/src/pages/Receive/Receive.tsx b/apps/hybrid-pay/src/pages/Receive/Receive.tsx index ff8a6ffc3..26cd16b18 100644 --- a/apps/hybrid-pay/src/pages/Receive/Receive.tsx +++ b/apps/hybrid-pay/src/pages/Receive/Receive.tsx @@ -1,16 +1,16 @@ import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; import { Button, Flex, H1, H2 } from '@gobob/ui'; import QRCode from 'react-qr-code'; -import { useAccount } from 'wagmi'; import { truncateEthAddress } from '@gobob/utils'; import { useCopyToClipboard } from 'react-use'; import { Main } from '../../components'; import { RoutesPath } from '../../constants'; +import { useDynamicAddress } from '../../hooks'; const Receive = () => { const { user } = useDynamicContext(); - const { address } = useAccount(); + const address = useDynamicAddress(); const [, copy] = useCopyToClipboard(); if (!user || !address) { diff --git a/apps/hybrid-pay/src/pages/Send/Send.tsx b/apps/hybrid-pay/src/pages/Send/Send.tsx index b8d7d4a11..06ef38c28 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.tsx @@ -1,13 +1,12 @@ -import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; import { ChainId } from '@gobob/chains'; import { CurrencyAmount, ERC20Token, Ether, Token } from '@gobob/currency'; import { useMutation, usePrices } from '@gobob/react-query'; import { Button, Flex, toast, TokenInput, useForm } from '@gobob/ui'; -import { useAccount, useSendTransaction, useWaitForTransactionReceipt, useWriteContract } from '@gobob/wagmi'; +import { useSendTransaction, useWaitForTransactionReceipt, useWriteContract } from '@gobob/wagmi'; import { mergeProps } from '@react-aria/utils'; import Big from 'big.js'; import { useEffect, useMemo, useState } from 'react'; -import { Address, encodeFunctionData, erc20Abi, isAddress, isAddressEqual } from 'viem'; +import { encodeFunctionData, erc20Abi, isAddress } from 'viem'; import { useGetApprovalData } from '@gobob/hooks'; import { MaxUint256 } from '@gobob/currency/src/constants'; import { useSearchParams } from 'react-router-dom'; @@ -25,6 +24,7 @@ import { isFormDisabled } from '../../lib/form/utils'; import { calculateAmountUSD, dynamicApiClient } from '../../utils'; import { CHAIN } from '../../constants'; import { Main } from '../../components'; +import { useIsDynamicSmartAccount } from '../../hooks'; import { TokenButtonGroup } from './components'; import { StyledInput } from './Send.style'; @@ -48,17 +48,9 @@ const getAddress = async (recipient: string) => { return smartAccount?.address; }; -type Props = {}; - -type SendProps = Props; - -const Send = ({}: SendProps): JSX.Element => { +const Send = (): JSX.Element => { const [searchParams] = useSearchParams(new URLSearchParams(window.location.search)); - const { address } = useAccount(); - - const { user } = useDynamicContext(); - const defaultTicker = CHAIN === ChainId.BASE_SEPOLIA ? 'USDC' : searchParams.get('token') || 'WBTC'; const [ticker, setTicker] = useState(defaultTicker); @@ -80,18 +72,7 @@ const Send = ({}: SendProps): JSX.Element => { [token, amount] ); - const isSmartAccount = useMemo( - () => - !!( - address && - user?.verifiedCredentials.find( - (credentials) => - credentials.walletProvider === 'smartContractWallet' && - isAddressEqual(credentials.address as Address, address) - ) - ), - [address, user?.verifiedCredentials] - ); + const isSmartAccount = useIsDynamicSmartAccount(); const initialValues = useMemo( () => ({ diff --git a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx index 88e0aa171..9ca8433ef 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx @@ -10,7 +10,7 @@ type HeroProps = Props; const Hero = ({}: HeroProps): JSX.Element => { const { locale } = useLocale(); - const { data: accountBalance } = useTotalBalance(CHAIN); + const totalBalance = useTotalBalance(CHAIN); const navigate = useNavigate(); @@ -34,7 +34,7 @@ const Hero = ({}: HeroProps): JSX.Element => { /> ) : ( */}

    - {Intl.NumberFormat(locale, { style: 'currency', currency: 'USD' }).format(accountBalance?.toNumber() || 0)} + {Intl.NumberFormat(locale, { style: 'currency', currency: 'USD' }).format(totalBalance?.toNumber() || 0)}

    {/* )} */}
    From 9dc37f945fd48ef1acc9b6772032bb8cc2e27eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sim=C3=A3o?= Date: Tue, 23 Jul 2024 17:39:31 +0100 Subject: [PATCH 31/41] fix: total balance display (#76) --- apps/hybrid-pay/src/hooks/useTotalBalance.ts | 2 +- .../src/pages/Wallet/components/Hero/Hero.tsx | 13 +++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/apps/hybrid-pay/src/hooks/useTotalBalance.ts b/apps/hybrid-pay/src/hooks/useTotalBalance.ts index 79bf687e2..124467358 100644 --- a/apps/hybrid-pay/src/hooks/useTotalBalance.ts +++ b/apps/hybrid-pay/src/hooks/useTotalBalance.ts @@ -15,7 +15,7 @@ const useTotalBalance = (chainId: ChainId) => { ? Object.values(erc20Balances).reduce((acc, amount) => { return acc.add(calculateAmountUSD(amount, getPrice(amount.currency.symbol))); }, new Big(0)) - : new Big(0); + : undefined; }; export { useTotalBalance }; diff --git a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx index 9ca8433ef..53d3dec98 100644 --- a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx +++ b/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx @@ -25,18 +25,11 @@ const Hero = ({}: HeroProps): JSX.Element => { return ( - {/* {isPending ? ( - - ) : ( */}

    - {Intl.NumberFormat(locale, { style: 'currency', currency: 'USD' }).format(totalBalance?.toNumber() || 0)} + {totalBalance + ? Intl.NumberFormat(locale, { style: 'currency', currency: 'USD' }).format(totalBalance?.toNumber()) + : '-'}

    - {/* )} */}
    - - {pathname === RoutesPath.SEND ? 'Send' : 'Receive'} - + + {pathname === RoutesPath.SEND ? 'Send' : 'Receive'} + + )} diff --git a/apps/hybrid-pay/src/components/Layout/Layout.style.tsx b/apps/hybrid-pay/src/components/Layout/Layout.style.tsx index eea0cded0..689ff4b38 100644 --- a/apps/hybrid-pay/src/components/Layout/Layout.style.tsx +++ b/apps/hybrid-pay/src/components/Layout/Layout.style.tsx @@ -1,4 +1,4 @@ -import { Flex, MaxWidth, ResponsiveProp, Spacing } from '@gobob/ui'; +import { Flex, MaxWidth, ResponsiveProp, Spacing, UnstyledButton } from '@gobob/ui'; import styled, { css } from 'styled-components'; type StyledMainProps = { @@ -46,4 +46,12 @@ const StyledMain = styled.main` min-height: calc(100vh - 4.75rem); `; -export { StyledHeader, StyledLayout, StyledLogoWrapper, StyledMain }; +const StyledBackButton = styled(UnstyledButton)` + display: flex; + align-items: center; + gap: ${({ theme }) => theme.spacing('md')}; + cursor: pointer; + padding: ${({ theme }) => theme.spacing('lg')} 0; +`; + +export { StyledHeader, StyledLayout, StyledBackButton, StyledLogoWrapper, StyledMain }; diff --git a/apps/hybrid-pay/src/hooks/useBalances.ts b/apps/hybrid-pay/src/hooks/useBalances.ts index d96e99536..700268727 100644 --- a/apps/hybrid-pay/src/hooks/useBalances.ts +++ b/apps/hybrid-pay/src/hooks/useBalances.ts @@ -1,73 +1,69 @@ import { ChainId } from '@gobob/chains'; import { CurrencyAmount, ERC20Token, Ether } from '@gobob/currency'; import { INTERVAL, useQuery } from '@gobob/react-query'; -import { useBalance, usePublicClient } from '@gobob/wagmi'; -import { chain } from '@react-aria/utils'; +import { usePublicClient } from '@gobob/wagmi'; import { useCallback, useMemo } from 'react'; -import { erc20Abi } from 'viem'; +import { Address, erc20Abi } from 'viem'; import { useTokens } from './useTokens'; import { useDynamicAddress } from './useDynamicAddress'; -type Balances = Record>; +type Balances = Record>; const useBalances = (chainId: ChainId) => { const publicClient = usePublicClient({ chainId }); const address = useDynamicAddress(); - const { data: ethBalance, refetch } = useBalance({ address, chainId }); - const { data: tokens } = useTokens(chainId); - // TODO: add transfer event listener and update balance on transfer in/out - // TODO: useReadContracts instead https://wagmi.sh/react/guides/migrate-from-v1-to-v2#deprecated-usebalance-token-parameter - const { - data: erc20Balances, - refetch: refetchErc20, - ...queryResult - } = useQuery({ + const erc20Tokens = useMemo(() => tokens.filter((token) => token.currency.isToken), [tokens]); + const native = useMemo(() => tokens.find((token) => token.currency.isNative), [tokens]); + + const { data: balances, ...queryResult } = useQuery({ queryKey: ['balances', chainId, address], enabled: Boolean(address && publicClient && tokens), queryFn: async () => { if (!tokens || !publicClient) return; - const balancesMulticallResult = await publicClient.multicall({ - contracts: tokens.map((token) => ({ - abi: erc20Abi, - address: token.raw.address, - functionName: 'balanceOf', - args: [address] - })) - }); + const [erc20TokensBalance, nativeBalance] = await Promise.all([ + publicClient.multicall({ + contracts: erc20Tokens.map((token) => ({ + abi: erc20Abi, + address: token.raw.address, + functionName: 'balanceOf', + args: [address] + })) + }), + native ? publicClient.getBalance({ address }) : undefined + ]); + + return { + erc20TokensBalance, + nativeBalance + }; + }, + refetchInterval: INTERVAL.MINUTE, + select: (data) => { + const { erc20TokensBalance, nativeBalance } = data || {}; - return tokens.reduce( + return erc20Tokens.reduce( (result, token, index) => ({ ...result, - [token.raw.symbol]: CurrencyAmount.fromRawAmount( + [token.raw.address]: CurrencyAmount.fromRawAmount( token.currency, - (balancesMulticallResult[index].result as bigint) || 0n + (erc20TokensBalance?.[index].result as bigint) || 0n ) }), - {} as Balances + native && nativeBalance + ? { [native?.raw.address]: CurrencyAmount.fromRawAmount(native.currency, nativeBalance) } + : ({} as Balances) ); - }, - refetchInterval: INTERVAL.MINUTE + } }); - const balances = useMemo(() => { - const ether = Ether.onChain(chainId); - - return { - ...erc20Balances, - ...(ethBalance && { - [ether.symbol]: CurrencyAmount.fromRawAmount(ether, ethBalance.value) - }) - }; - }, [erc20Balances, ethBalance, chainId]); - - const getBalance = useCallback((symbol: string) => balances?.[symbol], [balances]); + const getBalance = useCallback((address: Address) => balances?.[address], [balances]); - return { ...queryResult, balances, erc20Balances, getBalance, refetch: chain(refetch, refetchErc20) }; + return { ...queryResult, balances, getBalance }; }; export { useBalances }; diff --git a/apps/hybrid-pay/src/hooks/useTotalBalance.ts b/apps/hybrid-pay/src/hooks/useTotalBalance.ts index 124467358..1c7133fb4 100644 --- a/apps/hybrid-pay/src/hooks/useTotalBalance.ts +++ b/apps/hybrid-pay/src/hooks/useTotalBalance.ts @@ -9,10 +9,10 @@ import { useBalances } from './useBalances'; const useTotalBalance = (chainId: ChainId) => { const { getPrice } = usePrices({ baseUrl: import.meta.env.VITE_MARKET_DATA_API }); - const { erc20Balances } = useBalances(chainId); + const { balances } = useBalances(chainId); - return erc20Balances - ? Object.values(erc20Balances).reduce((acc, amount) => { + return balances + ? Object.values(balances).reduce((acc, amount) => { return acc.add(calculateAmountUSD(amount, getPrice(amount.currency.symbol))); }, new Big(0)) : undefined; diff --git a/apps/hybrid-pay/src/lib/form/transfer.ts b/apps/hybrid-pay/src/lib/form/transfer.ts index 7cf2697d1..1ddddcf9d 100644 --- a/apps/hybrid-pay/src/lib/form/transfer.ts +++ b/apps/hybrid-pay/src/lib/form/transfer.ts @@ -10,6 +10,10 @@ const validateEmail = (email: string) => { ); }; +const validateTelegram = (handle: string) => { + return handle.startsWith('@'); +}; + const TRANSFER_TOKEN_RECIPIENT = 'transfer-token-recipient'; const TRANSFER_TOKEN_AMOUNT = 'transfer-token-amount'; const TRANSFER_TOKEN_TICKER = 'transfer-token-ticker'; @@ -29,8 +33,8 @@ const transferTokenSchema = (params: TransferTokenFormValidationParams) => { [TRANSFER_TOKEN_RECIPIENT]: yup .string() .required('Recipient is required field') - .test('is-emails-or-address', 'Recipient must be a valid EVM/email address', (value) => - value ? !!validateEmail(value) || isAddress(value) : false + .test('is-emails-or-tg-or-address', 'Recipient must be a valid Telegram handle or EVM/email address', (value) => + value ? !!validateEmail(value) || validateTelegram(value) || isAddress(value) : false ), [TRANSFER_TOKEN_AMOUNT]: yup .string() diff --git a/apps/hybrid-pay/src/pages/Receive/Receive.tsx b/apps/hybrid-pay/src/pages/Receive/Receive.tsx index 26cd16b18..d7a7c6d2f 100644 --- a/apps/hybrid-pay/src/pages/Receive/Receive.tsx +++ b/apps/hybrid-pay/src/pages/Receive/Receive.tsx @@ -1,4 +1,4 @@ -import { useDynamicContext } from '@dynamic-labs/sdk-react-core'; +import { useDynamicContext, UserProfile } from '@dynamic-labs/sdk-react-core'; import { Button, Flex, H1, H2 } from '@gobob/ui'; import QRCode from 'react-qr-code'; import { truncateEthAddress } from '@gobob/utils'; @@ -8,6 +8,21 @@ import { Main } from '../../components'; import { RoutesPath } from '../../constants'; import { useDynamicAddress } from '../../hooks'; +const extractHandle = (user: UserProfile | undefined) => { + if (user?.email) { + return user?.email; + } + + // look for tg handle + const credentials = user?.verifiedCredentials.find((x) => x.oauthProvider == 'telegram'); + + if (credentials) { + return `@${credentials.oauthUsername}`; + } + + return undefined; +}; + const Receive = () => { const { user } = useDynamicContext(); const address = useDynamicAddress(); @@ -17,6 +32,8 @@ const Receive = () => { return null; } + const handle = extractHandle(user); + return (
    { >

    - {user?.email ? user?.email : truncateEthAddress(address)} + {handle || truncateEthAddress(address)}

    - {user?.email && ( + {handle && (

    ({truncateEthAddress(address)})

    @@ -42,7 +59,7 @@ const Receive = () => { fgColor='#ffffff' size={256} style={{ height: 'auto', maxWidth: '100%', width: '100%', background: 'transparent' }} - value={`https://${window.location.host}${RoutesPath.SEND}?to=${encodeURIComponent(user?.email || address || '')}`} + value={`https://${window.location.host}${RoutesPath.SEND}?to=${encodeURIComponent(handle || address || '')}`} viewBox={`0 0 256 256`} /> + // } label='Recipient' placeholder='pay@gobob.xyz' size='lg' @@ -377,6 +391,18 @@ const Send = (): JSX.Element => { Send
    + setScanModalOpen(false)} + onClose={() => {}} + onScan={([scan]) => { + // setScanModalOpen(false); + + const url = new URL(scan.rawValue); + + form.setFieldValue(TRANSFER_TOKEN_RECIPIENT, url.searchParams.get('to')); + }} + />
    ); }; diff --git a/apps/hybrid-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx b/apps/hybrid-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx new file mode 100644 index 000000000..a13cc553d --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx @@ -0,0 +1,26 @@ +import { Modal, ModalBody, ModalHeader, ModalProps } from '@gobob/ui'; +// @ts-ignore +import { Scanner } from '@yudiel/react-qr-scanner'; + +type IDetectedBarcode = { + rawValue: string; +}; + +type Props = { onScan: (detectedCodes: IDetectedBarcode[]) => void }; + +type InheritAttrs = Omit; + +type ScannerModal = Props & InheritAttrs; + +const ScannerModal = ({ onScan, ...props }: ScannerModal): JSX.Element => { + return ( + + Scan QR Code + + + + + ); +}; + +export { ScannerModal }; diff --git a/apps/hybrid-pay/src/pages/Send/components/ScannerModal/index.ts b/apps/hybrid-pay/src/pages/Send/components/ScannerModal/index.ts new file mode 100644 index 000000000..e2db52344 --- /dev/null +++ b/apps/hybrid-pay/src/pages/Send/components/ScannerModal/index.ts @@ -0,0 +1 @@ +export { ScannerModal } from './ScannerModal'; diff --git a/apps/hybrid-pay/src/pages/Send/components/index.tsx b/apps/hybrid-pay/src/pages/Send/components/index.tsx index 051adc7fb..8a794affa 100644 --- a/apps/hybrid-pay/src/pages/Send/components/index.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/index.tsx @@ -1 +1,2 @@ export { TokenButtonGroup } from './TokenButtonGroup'; +export { ScannerModal } from './ScannerModal'; diff --git a/apps/hybrid-pay/src/providers/balances.tsx b/apps/hybrid-pay/src/providers/balances.tsx new file mode 100644 index 000000000..012084539 --- /dev/null +++ b/apps/hybrid-pay/src/providers/balances.tsx @@ -0,0 +1,67 @@ +import { FC, ReactNode, createContext, useEffect, useRef } from 'react'; +import { useAccount, useChainId, useConfig, watchContractEvent } from '@gobob/wagmi'; +import { isAddressEqual, WatchContractEventReturnType } from 'viem'; +import { erc20Abi } from 'viem'; +import { useAccountEffect } from 'wagmi'; + +import { useBalances, useGetTransactions, useTokens } from '../hooks'; + +type BalanceData = {}; + +const BalanceContext = createContext({}); + +type BalanceWalletContextProps = { + children: ReactNode; +}; + +const BalanceProvider: FC = ({ children }) => { + const chainId = useChainId(); + const { data: tokens } = useTokens(chainId); + const { refetch: refetchBalances } = useBalances(chainId); + // TODO: remove it + const { refetch: refetchTransactions } = useGetTransactions(); + const config = useConfig(); + const { address } = useAccount(); + const watchRefs = useRef(); + + useAccountEffect({ + onDisconnect: () => { + watchRefs.current?.map((unwatch) => unwatch()); + watchRefs.current = undefined; + } + }); + + useEffect(() => { + if (!watchRefs.current && address) { + watchRefs.current = tokens.map((token) => { + if (token.currency.isNative) { + return () => {}; + } + + return watchContractEvent(config, { + abi: erc20Abi, + address: token.currency.address, + eventName: 'Transfer', + onLogs(logs) { + logs.forEach((log) => { + if (log.args.to && address && isAddressEqual(log.args.to, address)) { + refetchBalances(); + refetchTransactions(); + } + }); + } + }); + }); + } + + return () => { + watchRefs.current?.map((unwatch) => unwatch()); + watchRefs.current = undefined; + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [tokens]); + + return {children}; +}; + +export { BalanceProvider }; diff --git a/apps/hybrid-pay/src/providers/index.ts b/apps/hybrid-pay/src/providers/index.ts new file mode 100644 index 000000000..a67ead1db --- /dev/null +++ b/apps/hybrid-pay/src/providers/index.ts @@ -0,0 +1 @@ +export * from './balances'; diff --git a/apps/hybrid-pay/src/utils/dynamic-api-client.ts b/apps/hybrid-pay/src/utils/dynamic-api-client.ts index dd89e907b..4557b2120 100644 --- a/apps/hybrid-pay/src/utils/dynamic-api-client.ts +++ b/apps/hybrid-pay/src/utils/dynamic-api-client.ts @@ -19,7 +19,19 @@ class DynamicApiClient { this.baseUrl = baseUrl; } - async createEmbeddedWallet(email: string): Promise { + async createEmbeddedWallet(identifier: string): Promise { + let type; + let socialProvider; + + if (identifier.startsWith('@')) { + socialProvider = 'telegram'; + type = 'socialUsername'; + identifier = identifier.substring(1); // strip the @ + } else { + socialProvider = 'emailOnly'; + type = 'email'; + } + const response = await fetch( `${this.baseUrl}/environments/${import.meta.env.VITE_DYNAMIC_ENVIRONMENT_ID}/embeddedWallets`, { @@ -28,7 +40,7 @@ class DynamicApiClient { Authorization: `Bearer ${import.meta.env.VITE_DYNAMIC_API_KEY}`, 'Content-Type': 'application/json' }, - body: JSON.stringify({ type: 'email', identifier: email, chain: 'EVM', socialProvider: 'emailOnly' }) + body: JSON.stringify({ type, identifier, chain: 'EVM', socialProvider }) } ); diff --git a/packages/ui/src/icons/QRCode.tsx b/packages/ui/src/icons/QRCode.tsx new file mode 100644 index 000000000..a3bd65c8e --- /dev/null +++ b/packages/ui/src/icons/QRCode.tsx @@ -0,0 +1,30 @@ +import { forwardRef } from 'react'; + +import { Icon, IconProps } from '../components'; + +const QRCode = forwardRef((props, ref) => ( + + + + +)); + +QRCode.displayName = 'QRCode'; + +export { QRCode }; diff --git a/packages/ui/src/icons/index.ts b/packages/ui/src/icons/index.ts index 560f786f8..447f06e7a 100644 --- a/packages/ui/src/icons/index.ts +++ b/packages/ui/src/icons/index.ts @@ -6,13 +6,13 @@ export { ArrowPathRoundedSquare } from './ArrowPathRoundedSquare'; export { ArrowRight } from './ArrowRight'; export { ArrowRightCircle } from './ArrowRightCircle'; export { ArrowRightLeft } from './ArrowRightLeft'; +export { ArrowsUpDown } from './ArrowsUpDown'; export { ArrowTopRightOnSquare } from './ArrowTopRightOnSquare'; export { ArrowTrendingUp } from './ArrowTrendingUp'; export { ArrowUp } from './ArrowUp'; -export { ArrowsUpDown } from './ArrowsUpDown'; -export { BLogo } from './BLogo'; export { Bars3 } from './Bars3'; export { BankNotes } from './BankNotes'; +export { BLogo } from './BLogo'; export { Bolt } from './Bolt'; export { ChatBubbleLeftRight } from './ChatBubbleLeftRight'; export { Check } from './Check'; @@ -34,6 +34,7 @@ export { PlusCircle } from './PlusCircle'; export { Power } from './Power'; export { PresentationChartBar } from './PresentationChartBar'; export { PuzzlePiece } from './PuzzlePiece'; +export { QRCode } from './QRCode'; export { QuestionMarkCircle } from './QuestionMarkCircle'; export { StickyNote } from './StickyNote'; export { Twitter } from './Twitter'; diff --git a/packages/wagmi/src/index.ts b/packages/wagmi/src/index.ts index 539605421..8906c6c86 100644 --- a/packages/wagmi/src/index.ts +++ b/packages/wagmi/src/index.ts @@ -1,4 +1,4 @@ -export { watchAccount } from '@wagmi/core'; +export { watchAccount, watchContractEvent } from '@wagmi/core'; export * from 'wagmi'; export * from './bob'; export * from './config'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2849d5268..993fde683 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -323,17 +323,17 @@ importers: apps/hybrid-pay: dependencies: '@dynamic-labs/ethereum': - specifier: ^v3.0.0-alpha.24 - version: 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) + specifier: ^v3.0.0-alpha.29 + version: 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) '@dynamic-labs/ethereum-aa': - specifier: ^v3.0.0-alpha.24 - version: 3.0.0-alpha.24(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@types/react@18.3.3)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) + specifier: ^v3.0.0-alpha.29 + version: 3.0.0-alpha.29(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@types/react@18.3.3)(@zerodev/webauthn-key@5.3.1)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) '@dynamic-labs/sdk-react-core': - specifier: ^v3.0.0-alpha.24 - version: 3.0.0-alpha.24(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1) + specifier: ^v3.0.0-alpha.29 + version: 3.0.0-alpha.29(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1) '@dynamic-labs/wagmi-connector': - specifier: ^v3.0.0-alpha.24 - version: 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/sdk-react-core@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(@wagmi/core@2.12.2)(eventemitter3@5.0.1)(react@18.3.1)(viem@2.17.5)(wagmi@2.11.2) + specifier: ^v3.0.0-alpha.29 + version: 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/sdk-react-core@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(@wagmi/core@2.12.2)(eventemitter3@5.0.1)(react@18.3.1)(viem@2.17.5)(wagmi@2.11.2) '@gobob/chains': specifier: workspace:^ version: link:../../packages/chains @@ -379,6 +379,9 @@ importers: '@sentry/vite-plugin': specifier: ^2.18.0 version: 2.21.1 + '@yudiel/react-qr-scanner': + specifier: ^2.0.4 + version: 2.0.4(react-dom@18.3.1)(react@18.3.1) '@zerodev/sdk': specifier: ^5.3.4 version: 5.3.4(permissionless@0.1.41)(viem@2.17.5) @@ -2667,19 +2670,19 @@ packages: core-js: 3.37.1 dev: true - /@dynamic-labs/embedded-wallet-evm@3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5): - resolution: {integrity: sha512-0AFrblARrwTRWBSXRgM0ml6KKKUpF8yJYlSlQ+Rvw/4JYlLG9AnknvBa/eSYFz+jOgQ9iMB/qPYDX71Q5B3nig==} + /@dynamic-labs/embedded-wallet-evm@3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5): + resolution: {integrity: sha512-3TI+43DE0yG5NUP+S/nwp7ws3Wdn9lwugq9V1I9jbDSrabjIsSLhd9x9px6NMaA3WtDBW7AFHykLeB7+xAqNrA==} peerDependencies: viem: ^2.7.6 dependencies: - '@dynamic-labs/embedded-wallet': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/rpc-provider-ethereum': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(eventemitter3@5.0.1)(viem@2.17.5) - '@dynamic-labs/sdk-api-core': 0.0.489 - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/viem-utils': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(eventemitter3@5.0.1)(viem@2.17.5) - '@dynamic-labs/wallet-book': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(eventemitter3@5.0.1) + '@dynamic-labs/embedded-wallet': 3.0.0-alpha.29(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/rpc-provider-ethereum': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(eventemitter3@5.0.1)(viem@2.17.5) + '@dynamic-labs/sdk-api-core': 0.0.497 + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/viem-utils': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(eventemitter3@5.0.1)(viem@2.17.5) + '@dynamic-labs/wallet-book': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(eventemitter3@5.0.1) '@turnkey/api-key-stamper': 0.4.0 '@turnkey/http': 2.7.1 '@turnkey/iframe-stamper': 2.0.0 @@ -2695,19 +2698,19 @@ packages: - react-dom dev: false - /@dynamic-labs/embedded-wallet@3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-pNwpxf8l8cS+3rP/Dh04HRKeLkvji+N8FJdbPk352vBlm3fWbhbljBMogmOqIGC9STiaeCr00IstAlr62utlsw==} + /@dynamic-labs/embedded-wallet@3.0.0-alpha.29(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-AhPAkLNj+JInQQf5ih86A1XG5OdS5AT+kQhM/ojgmH5MF8p37nod2B4qOao7ol6FJhlJNCClx0t3wYGiPKMlKA==} dependencies: - '@dynamic-labs/sdk-api-core': 0.0.489 - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/wallet-book': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(eventemitter3@5.0.1) + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/sdk-api-core': 0.0.497 + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/wallet-book': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(eventemitter3@5.0.1) '@turnkey/api-key-stamper': 0.4.0 '@turnkey/http': 2.7.1 '@turnkey/iframe-stamper': 2.0.0 '@turnkey/webauthn-stamper': 0.5.0 transitivePeerDependencies: - - '@dynamic-labs/logger' - '@dynamic-labs/rpc-providers' - '@dynamic-labs/types' - encoding @@ -2716,20 +2719,21 @@ packages: - react-dom dev: false - /@dynamic-labs/ethereum-aa@3.0.0-alpha.24(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@types/react@18.3.3)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5): - resolution: {integrity: sha512-1yflhRhe9kiXlTV0ZCxxM/g5VavTMdnRWfft+wTrbLMArc8SZJwM1lWP3hnTv/ZcBa3BmPoKz4SZoAhDZtrN+A==} + /@dynamic-labs/ethereum-aa@3.0.0-alpha.29(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@types/react@18.3.3)(@zerodev/webauthn-key@5.3.1)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5): + resolution: {integrity: sha512-V3qzg/KwsoEyiX5MQ8AtEUXrLQb8jh/mqI2oZjmgYXkyPZQ4TCLD4WD2K3PvydkLLbOwRydFftMRbVYlfFqSCA==} peerDependencies: viem: ^2.7.6 dependencies: - '@dynamic-labs/ethereum': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) - '@dynamic-labs/logger': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/sdk-api-core': 0.0.489 - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/viem-utils': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(eventemitter3@5.0.1)(viem@2.17.5) - '@dynamic-labs/wallet-book': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(eventemitter3@5.0.1) + '@dynamic-labs/ethereum': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/sdk-api-core': 0.0.497 + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/viem-utils': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(eventemitter3@5.0.1)(viem@2.17.5) + '@dynamic-labs/wallet-book': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(eventemitter3@5.0.1) '@zerodev/ecdsa-validator': 5.3.1(@zerodev/sdk@5.3.4)(permissionless@0.1.41)(viem@2.17.5) + '@zerodev/multi-chain-validator': 5.3.3(@zerodev/sdk@5.3.4)(@zerodev/webauthn-key@5.3.1)(permissionless@0.1.41)(viem@2.17.5) '@zerodev/sdk': 5.3.4(permissionless@0.1.41)(viem@2.17.5) permissionless: 0.1.41(viem@2.17.5) viem: 2.17.5(typescript@5.4.5)(zod@3.23.8) @@ -2748,6 +2752,7 @@ packages: - '@types/react' - '@upstash/redis' - '@vercel/kv' + - '@zerodev/webauthn-key' - bufferutil - encoding - eventemitter3 @@ -2758,20 +2763,20 @@ packages: - utf-8-validate dev: false - /@dynamic-labs/ethereum@3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5): - resolution: {integrity: sha512-pCgz61wfd7J/RlZv4cHg8+V3833shu5W9gX138xtm6dpYuD6jVe9DgvB1czJm72RdpXi3/HK4c/N0cZ/e8UTfw==} + /@dynamic-labs/ethereum@3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5): + resolution: {integrity: sha512-yIw1LJZEqaaNMctBKMzEktQV2u/ap2B8fR+HPay9UJNaQBlpGwjpP1CSSS9Q4Z5qOBVeY3gLJ8R1LwITX7jvqg==} peerDependencies: viem: ^2.7.6 dependencies: '@coinbase/wallet-sdk': 4.0.4 - '@dynamic-labs/embedded-wallet-evm': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) - '@dynamic-labs/rpc-provider-ethereum': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(eventemitter3@5.0.1)(viem@2.17.5) - '@dynamic-labs/sdk-api-core': 0.0.489 - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/viem-utils': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(eventemitter3@5.0.1)(viem@2.17.5) - '@dynamic-labs/wallet-book': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(eventemitter3@5.0.1) + '@dynamic-labs/embedded-wallet-evm': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) + '@dynamic-labs/rpc-provider-ethereum': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(eventemitter3@5.0.1)(viem@2.17.5) + '@dynamic-labs/sdk-api-core': 0.0.497 + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/viem-utils': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(eventemitter3@5.0.1)(viem@2.17.5) + '@dynamic-labs/wallet-book': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(eventemitter3@5.0.1) '@walletconnect/ethereum-provider': 2.11.2(@types/react@18.3.3)(react@18.3.1) buffer: 6.0.3 eventemitter3: 5.0.1 @@ -2802,13 +2807,13 @@ packages: - utf-8-validate dev: false - /@dynamic-labs/iconic@3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-7kCJ9bOTTou6Nxy8/ju/o1/9wFsCE5ive708l05TpZQZEfIuUb3oJjnK8bohf3j3WceGo5lXeKK3+pR/JAj/+w==} + /@dynamic-labs/iconic@3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-TfhacfgZCZls9qQXnBJAAU903tbAzfoBJMGODAMoKumqDrlK2nm+GWESpXxKnFcLecRaQF7y8CSow/Zqgh2K8g==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@dynamic-labs/logger': 3.0.0-alpha.24(eventemitter3@5.0.1) + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) sharp: 0.33.2 @@ -2816,23 +2821,31 @@ packages: - eventemitter3 dev: false - /@dynamic-labs/logger@3.0.0-alpha.24(eventemitter3@5.0.1): - resolution: {integrity: sha512-1/e0JPGIdUVTI+uBQ1q+DknwKQ2wNnO3axd7HnWLPtqjGp4PyT680IrCcTjwc3KJZm96atXZXYJzR+lCdPtrAw==} + /@dynamic-labs/logger@3.0.0-alpha.29(eventemitter3@5.0.1): + resolution: {integrity: sha512-xxigjftaCjlDSlLR8V60H+2llGRpRz2wzqQR26QhbmlPm3lVPAauWODXaWLCyjXZ4FKkpHQ7xYZQUsdKDwsJtw==} peerDependencies: eventemitter3: 5.0.1 dependencies: eventemitter3: 5.0.1 dev: false - /@dynamic-labs/multi-wallet@3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-BY13G9L6Ej3ZvJ2ZBY2XuL6zYafnbIAHrooXAWBZsHth9XBJ2tDj2bEqrL6vyaeQgjvQr/xe6DI7tVxrmaf70Q==} + /@dynamic-labs/message-transport@3.0.0-alpha.29: + resolution: {integrity: sha512-WhpOQ+IcXm8lLulDOGAFc01TEa98fuYNtNutYyij5WUbJMR9jj5rDa+PnfuDcMKVzfYsQF14KN9sYXarWUxyWA==} + dependencies: + '@dynamic-labs/types': 3.0.0-alpha.29 + '@vue/reactivity': 3.4.21 + eventemitter3: 5.0.1 + dev: false + + /@dynamic-labs/multi-wallet@3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-B8Cscn2SyLUtnEwoG9rqRLdaUPUYxT6NkGN5dqubRw/ZzgRvv3z6Qx7VggCv9sdxBISYbA70Ck/8oTN6cg0wOQ==} dependencies: - '@dynamic-labs/rpc-providers': 3.0.0-alpha.24 - '@dynamic-labs/sdk-api-core': 0.0.489 - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/wallet-book': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(eventemitter3@5.0.1) + '@dynamic-labs/rpc-providers': 3.0.0-alpha.29 + '@dynamic-labs/sdk-api-core': 0.0.497 + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/wallet-book': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(eventemitter3@5.0.1) tslib: 2.4.1 transitivePeerDependencies: - '@dynamic-labs/logger' @@ -2841,16 +2854,16 @@ packages: - react-dom dev: false - /@dynamic-labs/rpc-provider-ethereum@3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(eventemitter3@5.0.1)(viem@2.17.5): - resolution: {integrity: sha512-JoMR8GWPpqfdIwB9OFcxsTs2qbaFVF9Uz6vHErZYkTudaQBQWaf5l5VGfWGQq/pAde6Fb/mlsAAWlRtl4rkvQg==} + /@dynamic-labs/rpc-provider-ethereum@3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(eventemitter3@5.0.1)(viem@2.17.5): + resolution: {integrity: sha512-X+lJxfbV6aGdS8cJlRvLNrtIJ41WO0zcBw9Dvxg4O7UGHxAjiHLmvemC71eBTBeysd2ajfOkGiLN4I7ll4/nNw==} peerDependencies: viem: ^1.19.13 || ^2.2.0 dependencies: - '@dynamic-labs/rpc-providers': 3.0.0-alpha.24 - '@dynamic-labs/sdk-api-core': 0.0.489 - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/viem-utils': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(eventemitter3@5.0.1)(viem@2.17.5) + '@dynamic-labs/rpc-providers': 3.0.0-alpha.29 + '@dynamic-labs/sdk-api-core': 0.0.497 + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/viem-utils': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(eventemitter3@5.0.1)(viem@2.17.5) viem: 2.17.5(typescript@5.4.5)(zod@3.23.8) transitivePeerDependencies: - '@dynamic-labs/logger' @@ -2859,32 +2872,33 @@ packages: - eventemitter3 dev: false - /@dynamic-labs/rpc-providers@3.0.0-alpha.24: - resolution: {integrity: sha512-lgx00YgOZeiMTCiyAFVlUrXqQi82jXpxrLA/C6gJr6TfHLYZkA600mIntQ/QAThWiB1nkV+Wtxljxlhee2RQgg==} + /@dynamic-labs/rpc-providers@3.0.0-alpha.29: + resolution: {integrity: sha512-F89tAiZge6mYG5QVcHhDKi09x45WeT00BI8EUOmJiqQNrA6Jm7Hkz+r3NgCpWHRPFRpnyoPGRAEsHaBuX+VIkQ==} dependencies: - '@dynamic-labs/types': 3.0.0-alpha.24 + '@dynamic-labs/types': 3.0.0-alpha.29 dev: false - /@dynamic-labs/sdk-api-core@0.0.489: - resolution: {integrity: sha512-r1not7gexDi/aejZrX3+2aZu4zzJESQdDgn5lSBgdxLf8E206pJLZfqs6EbneeqnD9jgZW4GlFjcW53ji0oqww==} + /@dynamic-labs/sdk-api-core@0.0.497: + resolution: {integrity: sha512-J9njra1RGQL50UJ2QADaW6t9JZ5QIvDlpUMNNJIhlYrNiUdeLlZ17sTwAeN8s7J1Dppk7sKu0qOAImDBhaNkEw==} dev: false - /@dynamic-labs/sdk-react-core@3.0.0-alpha.24(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1): - resolution: {integrity: sha512-AcFUfJnl6b9cccxKAOEH25DWIy0wpBO7ERyFXhS4rcA46vgIYig+h2oYJSHYa23RQDrQhDmPx715bEay038BAw==} + /@dynamic-labs/sdk-react-core@3.0.0-alpha.29(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1): + resolution: {integrity: sha512-qCEJ4Lcq3Xrx9J8timWSDa4YMZ26xIxHtbioeeeLHRBhK8kYtiJ5YBeSJvwjeKjLdSIXrivK9/Gsli78tMnq9Q==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@dynamic-labs/iconic': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/logger': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/multi-wallet': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/rpc-providers': 3.0.0-alpha.24 - '@dynamic-labs/sdk-api-core': 0.0.489 - '@dynamic-labs/store': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/wallet-book': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(eventemitter3@5.0.1) + '@dynamic-labs/iconic': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/message-transport': 3.0.0-alpha.29 + '@dynamic-labs/multi-wallet': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/rpc-providers': 3.0.0-alpha.29 + '@dynamic-labs/sdk-api-core': 0.0.497 + '@dynamic-labs/store': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/wallet-book': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(eventemitter3@5.0.1) '@hcaptcha/react-hcaptcha': 1.4.4(react-dom@18.3.1)(react@18.3.1) country-list: 2.3.0 eventemitter3: 5.0.1 @@ -2902,26 +2916,26 @@ packages: - react-native dev: false - /@dynamic-labs/store@3.0.0-alpha.24(eventemitter3@5.0.1): - resolution: {integrity: sha512-SXPC8rXk2hm/+WD1qJAdpd295OIO7yMEODXc9pbOG8LFbt99Xhax8K3H1WADTX4W98KilaDCzwCn02f+Efk3Aw==} + /@dynamic-labs/store@3.0.0-alpha.29(eventemitter3@5.0.1): + resolution: {integrity: sha512-FRDrP0NO3GlI5DlKHs6CiU5Ua1dn1d5q/CqLt6wuDtNynTrUY+4j5f+6SVtFdBsHwuP24CrTk9Z85RmGrSOpkA==} dependencies: - '@dynamic-labs/logger': 3.0.0-alpha.24(eventemitter3@5.0.1) + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) transitivePeerDependencies: - eventemitter3 dev: false - /@dynamic-labs/types@3.0.0-alpha.24: - resolution: {integrity: sha512-WiKdLliVMWQPZT2YIa4hckJpybPZ/OTEbUNBuRdhpSZwTII6NbRB5cPFcOYirwK3817i/7MzhEYeFwH9rJpe0A==} + /@dynamic-labs/types@3.0.0-alpha.29: + resolution: {integrity: sha512-Oqr0A6ADfnKZQNEJp3oSljmO4r0g8gb0VraJt+CO2aQB2y9WGkXtBuWdFutL7kUhgw/nyyMtPLGDcWwgdWFbYw==} dependencies: - '@dynamic-labs/sdk-api-core': 0.0.489 + '@dynamic-labs/sdk-api-core': 0.0.497 dev: false - /@dynamic-labs/utils@3.0.0-alpha.24(eventemitter3@5.0.1): - resolution: {integrity: sha512-ddRU1Ex7KgWQk0Rznzz6a1h6rhmleqEqylXRZwdl2hbS7CqlMYnLpDccnBoGBHIvvMv6j1jqW+MJmYztu8pynQ==} + /@dynamic-labs/utils@3.0.0-alpha.29(eventemitter3@5.0.1): + resolution: {integrity: sha512-47yhBOfPG3MoVrYLqe1I6RM/5CqhMPFdGjRe1nmnjtuIoMxGqXx07NwxnI6MM4oynuNlF6nUNefZ71bIHplb5Q==} dependencies: - '@dynamic-labs/logger': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/sdk-api-core': 0.0.489 - '@dynamic-labs/types': 3.0.0-alpha.24 + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/sdk-api-core': 0.0.497 + '@dynamic-labs/types': 3.0.0-alpha.29 buffer: 6.0.3 stream: 0.0.2 tldts: 6.0.16 @@ -2929,45 +2943,45 @@ packages: - eventemitter3 dev: false - /@dynamic-labs/viem-utils@3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(eventemitter3@5.0.1)(viem@2.17.5): - resolution: {integrity: sha512-xIVOMcjaVTDkOHzDBDVKKQTVvqwpu9iP2SDbRvg9hgc8AcHxxDcqy6ZBnx5OPU/+hMdup3cckGESyJeEYVCYdg==} + /@dynamic-labs/viem-utils@3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(eventemitter3@5.0.1)(viem@2.17.5): + resolution: {integrity: sha512-c2+r2aGhI10eow8kpDYXY2t/s8g+mSM1Efe2OWKM1lMn/cwd8T6qsBTw3IpaWw8b6EfW/+xkrd/HLlerEQzoSQ==} peerDependencies: - '@dynamic-labs/logger': 3.0.0-alpha.24 - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24 - '@dynamic-labs/wallet-book': 3.0.0-alpha.24 - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24 + '@dynamic-labs/logger': 3.0.0-alpha.29 + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29 + '@dynamic-labs/wallet-book': 3.0.0-alpha.29 + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29 eventemitter3: 5.0.1 viem: ^2.7.6 dependencies: - '@dynamic-labs/logger': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/wallet-book': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(eventemitter3@5.0.1) + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/wallet-book': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(eventemitter3@5.0.1) eventemitter3: 5.0.1 viem: 2.17.5(typescript@5.4.5)(zod@3.23.8) dev: false - /@dynamic-labs/wagmi-connector@3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/sdk-react-core@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.24)(@wagmi/core@2.12.2)(eventemitter3@5.0.1)(react@18.3.1)(viem@2.17.5)(wagmi@2.11.2): - resolution: {integrity: sha512-IZ9UPzcT9pFU+MswR9WD42topayiXHVHDFVhuC2SPg3aYpXIcbw817379xZROWcm4YELjPha7wvlOI2dB8jHcw==} + /@dynamic-labs/wagmi-connector@3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/sdk-react-core@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(@wagmi/core@2.12.2)(eventemitter3@5.0.1)(react@18.3.1)(viem@2.17.5)(wagmi@2.11.2): + resolution: {integrity: sha512-pU5kaKo4DToJfjPpfm/Obgzr5VV0jaVF9quSiNwKNMD9JCY4Tpss1yxmKsy5V3JmK9uG/484lqTG2RZK17fPTA==} peerDependencies: - '@dynamic-labs/logger': 3.0.0-alpha.24 - '@dynamic-labs/rpc-providers': 3.0.0-alpha.24 - '@dynamic-labs/sdk-react-core': 3.0.0-alpha.24 - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24 + '@dynamic-labs/logger': 3.0.0-alpha.29 + '@dynamic-labs/rpc-providers': 3.0.0-alpha.29 + '@dynamic-labs/sdk-react-core': 3.0.0-alpha.29 + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29 '@wagmi/core': ^2.6.4 eventemitter3: 5.0.1 react: ^18.2.0 viem: ^2.7.6 wagmi: ^2.5.7 dependencies: - '@dynamic-labs/logger': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/rpc-providers': 3.0.0-alpha.24 - '@dynamic-labs/sdk-react-core': 3.0.0-alpha.24(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1) - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(eventemitter3@5.0.1) + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/rpc-providers': 3.0.0-alpha.29 + '@dynamic-labs/sdk-react-core': 3.0.0-alpha.29(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1) + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/wallet-connector-core': 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(eventemitter3@5.0.1) '@wagmi/core': 2.12.2(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.5) eventemitter3: 5.0.1 react: 18.3.1 @@ -2975,15 +2989,15 @@ packages: wagmi: 2.11.2(@tanstack/react-query@5.51.9)(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.5)(zod@3.23.8) dev: false - /@dynamic-labs/wallet-book@3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-LfkaK0kSAiEVmq8HxGpUKbVXIKzsBamCTgw1yV+C5vSKhyFq+mZnuIrUvfTA1hp/ecy6kjL84yMSp0iTimT/XQ==} + /@dynamic-labs/wallet-book@3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-1f31m6ddo42mhxKiFc16o1u+6h7hk4infAeMUIgXbLIdR2FxrARYsASfycHIo21ITxSEoIzdP47DCS4Mny2sSA==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@dynamic-labs/iconic': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) - '@dynamic-labs/logger': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) + '@dynamic-labs/iconic': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) util: 0.12.5 @@ -2992,22 +3006,22 @@ packages: - eventemitter3 dev: false - /@dynamic-labs/wallet-connector-core@3.0.0-alpha.24(@dynamic-labs/logger@3.0.0-alpha.24)(@dynamic-labs/rpc-providers@3.0.0-alpha.24)(@dynamic-labs/types@3.0.0-alpha.24)(@dynamic-labs/utils@3.0.0-alpha.24)(@dynamic-labs/wallet-book@3.0.0-alpha.24)(eventemitter3@5.0.1): - resolution: {integrity: sha512-3OqLC9lo27RmyqS+FulHHSgyV9Zhn6CCTmrKaapCx2DhZftgxTbUuYgrJcom/DRsQ1AbRwP0vpnD3/tmBoRFyQ==} + /@dynamic-labs/wallet-connector-core@3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/utils@3.0.0-alpha.29)(@dynamic-labs/wallet-book@3.0.0-alpha.29)(eventemitter3@5.0.1): + resolution: {integrity: sha512-bydP+KGvc/l6CNkyt/mVyHR7RuDw66rJox9LAvJs+E/lfvjgncqu/aXXSQNvYRp4cZv+W4jD3Yn1IicKsMf4QQ==} peerDependencies: - '@dynamic-labs/logger': 3.0.0-alpha.24 - '@dynamic-labs/rpc-providers': 3.0.0-alpha.24 - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24 - '@dynamic-labs/wallet-book': 3.0.0-alpha.24 + '@dynamic-labs/logger': 3.0.0-alpha.29 + '@dynamic-labs/rpc-providers': 3.0.0-alpha.29 + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29 + '@dynamic-labs/wallet-book': 3.0.0-alpha.29 eventemitter3: 5.0.1 dependencies: - '@dynamic-labs/logger': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/rpc-providers': 3.0.0-alpha.24 - '@dynamic-labs/sdk-api-core': 0.0.489 - '@dynamic-labs/types': 3.0.0-alpha.24 - '@dynamic-labs/utils': 3.0.0-alpha.24(eventemitter3@5.0.1) - '@dynamic-labs/wallet-book': 3.0.0-alpha.24(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) + '@dynamic-labs/logger': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/rpc-providers': 3.0.0-alpha.29 + '@dynamic-labs/sdk-api-core': 0.0.497 + '@dynamic-labs/types': 3.0.0-alpha.29 + '@dynamic-labs/utils': 3.0.0-alpha.29(eventemitter3@5.0.1) + '@dynamic-labs/wallet-book': 3.0.0-alpha.29(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1) eventemitter3: 5.0.1 dev: false @@ -5043,6 +5057,7 @@ packages: dependencies: is-glob: 4.0.3 micromatch: 4.0.7 + napi-wasm: 1.1.0 dev: false bundledDependencies: - napi-wasm @@ -7512,6 +7527,27 @@ packages: /@sideway/pinpoint@2.0.0: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + /@simplewebauthn/browser@8.3.7: + resolution: {integrity: sha512-ZtRf+pUEgOCvjrYsbMsJfiHOdKcrSZt2zrAnIIpfmA06r0FxBovFYq0rJ171soZbe13KmWzAoLKjSxVW7KxCdQ==} + dependencies: + '@simplewebauthn/typescript-types': 8.3.4 + dev: false + + /@simplewebauthn/browser@9.0.1: + resolution: {integrity: sha512-wD2WpbkaEP4170s13/HUxPcAV5y4ZXaKo1TfNklS5zDefPinIgXOpgz1kpEvobAsaLPa2KeH7AKKX/od1mrBJw==} + dependencies: + '@simplewebauthn/types': 9.0.1 + dev: false + + /@simplewebauthn/types@9.0.1: + resolution: {integrity: sha512-tGSRP1QvsAvsJmnOlRQyw/mvK9gnPtjEc5fg2+m8n+QUa+D7rvrKkOYyfpy42GTs90X3RDOnqJgfHt+qO67/+w==} + dev: false + + /@simplewebauthn/typescript-types@8.3.4: + resolution: {integrity: sha512-38xtca0OqfRVNloKBrFB5LEM6PN5vzFbJG6rAutPVrtGHFYxPdiV3btYWq0eAZAZmP+dqFPYJxJWeJrGfmYHng==} + deprecated: This package has been renamed to @simplewebauthn/types. Please install @simplewebauthn/types instead to ensure you receive future updates. + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -9008,13 +9044,16 @@ packages: resolution: {integrity: sha512-3Iten7X3Zgwvk6kh6/NRdwN7WbZ760YgFCsF5AxDifltUQzW1RaW+WRmcVtgwFzLjaNu64H+0MPJ13yRa8g3Dw==} dev: false + /@types/dom-webcodecs@0.1.11: + resolution: {integrity: sha512-yPEZ3z7EohrmOxbk/QTAa0yonMFkNkjnVXqbGb7D4rMr+F1dGQ8ZUFxXkyLLJuiICPejZ0AZE9Rrk9wUCczx4A==} + dev: false + /@types/ejs@3.1.5: resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} dev: true /@types/emscripten@1.39.13: resolution: {integrity: sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==} - dev: true /@types/escodegen@0.0.6: resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} @@ -9708,6 +9747,16 @@ packages: pretty-format: 29.7.0 dev: true + /@vue/reactivity@3.4.21: + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} + dependencies: + '@vue/shared': 3.4.21 + dev: false + + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + dev: false + /@wagmi/connectors@5.0.26(@types/react@18.3.3)(@wagmi/core@2.12.2)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.5)(zod@3.23.8): resolution: {integrity: sha512-aGc3oDQPQwVqJr7S/7IU7rF0bA61OYXGPLzj30Y3MSmmEWXtAEgKpqkhIwiEdYQAMnlR3ukbqROq8qmUm/iYQg==} peerDependencies: @@ -10517,6 +10566,18 @@ packages: tslib: 1.14.1 dev: true + /@yudiel/react-qr-scanner@2.0.4(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ZVSyT6F2S8mdURUCy2Oz9/khZ3DfzsbU8OO5lXYzLzJLVwfhLX+jo2Gd80FyBMqBxM0fbwNNvAawTajcJ3hb8w==} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + dependencies: + barcode-detector: 2.2.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + webrtc-adapter: 9.0.1 + dev: false + /@zerodev/ecdsa-validator@5.3.1(@zerodev/sdk@5.3.4)(permissionless@0.1.41)(viem@2.17.5): resolution: {integrity: sha512-4xg/uBgjQLyO5GoE9TkQqO7HRwSPVbchd6UXit+R3excN1fC27k7UcjLmm5rTrM2JxbgncIodGcNQMxYKNejsA==} peerDependencies: @@ -10529,6 +10590,23 @@ packages: viem: 2.17.5(typescript@5.4.5)(zod@3.23.8) dev: false + /@zerodev/multi-chain-validator@5.3.3(@zerodev/sdk@5.3.4)(@zerodev/webauthn-key@5.3.1)(permissionless@0.1.41)(viem@2.17.5): + resolution: {integrity: sha512-rJWd+3qo0+3Nr+FH46agWiEBV2jJRzJAuwxl1TOSjPPaBQWVJ6itYFs0EV7qUczvJ9BeY/qMfnW2ojHMwj5KPA==} + peerDependencies: + '@zerodev/sdk': ^5.2.15 + '@zerodev/webauthn-key': ^5.3.0 + permissionless: ^0.1.18 + viem: ^2.16.3 + dependencies: + '@simplewebauthn/browser': 9.0.1 + '@simplewebauthn/typescript-types': 8.3.4 + '@zerodev/sdk': 5.3.4(permissionless@0.1.41)(viem@2.17.5) + '@zerodev/webauthn-key': 5.3.1(viem@2.17.5) + merkletreejs: 0.3.11 + permissionless: 0.1.41(viem@2.17.5) + viem: 2.17.5(typescript@5.4.5)(zod@3.23.8) + dev: false + /@zerodev/sdk@5.3.4(permissionless@0.1.41)(viem@2.17.5): resolution: {integrity: sha512-ffUlB4JOc0SmH+zglYPv0zY6qgAZoxH9ddVbLjO7QiUe7mkoCBk3OmZ7ki2jM+YmvkvE2l1HD9STj8V33jV7Pg==} peerDependencies: @@ -10540,6 +10618,16 @@ packages: viem: 2.17.5(typescript@5.4.5)(zod@3.23.8) dev: false + /@zerodev/webauthn-key@5.3.1(viem@2.17.5): + resolution: {integrity: sha512-8s/gdKppXgh15wrER50nAIhaD/QTEwecN288RbXI+TWVmdwzuLOpbMuzfgBvisfiE1kNJlfYEl9qos7aKm6EkQ==} + peerDependencies: + viem: ^2.16.3 + dependencies: + '@noble/curves': 1.4.2 + '@simplewebauthn/browser': 8.3.7 + viem: 2.17.5(typescript@5.4.5)(zod@3.23.8) + dev: false + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -11370,6 +11458,13 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /barcode-detector@2.2.7: + resolution: {integrity: sha512-+6PJNcMtdVehX5i2LQUE9L+mS6C3cG00Vsuc4Ynj3Mls5GNKIAFkE0IFGtw4s6vu8SXeogrzTj4btm44oD+gNw==} + dependencies: + '@types/dom-webcodecs': 0.1.11 + zxing-wasm: 1.2.11 + dev: false + /base-x@3.0.10: resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} dependencies: @@ -18176,6 +18271,10 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /napi-wasm@1.1.0: + resolution: {integrity: sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg==} + dev: false + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -20407,6 +20506,10 @@ packages: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} dev: false + /sdp@3.2.0: + resolution: {integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==} + dev: false + /secp256k1@5.0.0: resolution: {integrity: sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==} engines: {node: '>=14.0.0'} @@ -22838,6 +22941,13 @@ packages: - uglify-js dev: true + /webrtc-adapter@9.0.1: + resolution: {integrity: sha512-1AQO+d4ElfVSXyzNVTOewgGT/tAomwwztX/6e3totvyyzXPvXIIuUUjAmyZGbKBKbZOXauuJooZm3g6IuFuiNQ==} + engines: {node: '>=6.0.0', npm: '>=3.10.0'} + dependencies: + sdp: 3.2.0 + dev: false + /websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} @@ -23249,3 +23359,9 @@ packages: react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) dev: false + + /zxing-wasm@1.2.11: + resolution: {integrity: sha512-rNSMkIU310sK5cCPSjZA58FEhGZUtNx+f0CmtZ3SZzpdwZE6IzzKFdkbFkl8CFnxiUrx1VMVl/2WULDnwwJbfg==} + dependencies: + '@types/emscripten': 1.39.13 + dev: false From d4d359df33e7288a7842fbb453491109cf453c73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Fri, 26 Jul 2024 15:59:35 +0100 Subject: [PATCH 34/41] fix: arrow color --- apps/hybrid-pay/src/components/Layout/Header.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hybrid-pay/src/components/Layout/Header.tsx b/apps/hybrid-pay/src/components/Layout/Header.tsx index 135428038..e3250024b 100644 --- a/apps/hybrid-pay/src/components/Layout/Header.tsx +++ b/apps/hybrid-pay/src/components/Layout/Header.tsx @@ -30,7 +30,7 @@ const Header = ({ ...props }: HeaderProps): JSX.Element => { ) : ( navigate(RoutesPath.HOME)}> - + {pathname === RoutesPath.SEND ? 'Send' : 'Receive'} From 7a788a66fec26dd3ce8d48e72cc66b6ff0af7063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Fri, 26 Jul 2024 16:17:12 +0100 Subject: [PATCH 35/41] feat: add T&C --- apps/hybrid-pay/src/App.tsx | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/apps/hybrid-pay/src/App.tsx b/apps/hybrid-pay/src/App.tsx index 5fa502210..85a9e1563 100644 --- a/apps/hybrid-pay/src/App.tsx +++ b/apps/hybrid-pay/src/App.tsx @@ -3,7 +3,7 @@ import { ReactNode, Suspense, lazy, useEffect } from 'react'; import { BrowserRouter, Route, Routes, useLocation } from 'react-router-dom'; import { DynamicEmbeddedWidget, useDynamicContext } from '@dynamic-labs/sdk-react-core'; import { usePrices } from '@gobob/react-query'; -import { Card, Flex } from '@gobob/ui'; +import { Card, Flex, P, TextLink } from '@gobob/ui'; import { Header, Layout, Main } from './components'; import { CHAIN, RoutesPath } from './constants'; @@ -33,9 +33,33 @@ const ProtectedRoute = ({ children }: { children: ReactNode }) => { if (!isAuthenticated) { return (
    - + + +

    + By logging in, you agree to our{' '} + + Terms and Conditions. + +

    +
    From 12c256b16378e281a530f56a3cc2adc906b23c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rui=20Sim=C3=A3o?= Date: Fri, 26 Jul 2024 16:18:49 +0100 Subject: [PATCH 36/41] fix: terms padding bottom --- apps/hybrid-pay/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hybrid-pay/src/App.tsx b/apps/hybrid-pay/src/App.tsx index 85a9e1563..4408eb481 100644 --- a/apps/hybrid-pay/src/App.tsx +++ b/apps/hybrid-pay/src/App.tsx @@ -36,7 +36,7 @@ const ProtectedRoute = ({ children }: { children: ReactNode }) => { - +

    Date: Fri, 26 Jul 2024 17:47:40 +0100 Subject: [PATCH 37/41] feat: add qr code scanner (#83) --- apps/hybrid-pay/src/pages/Send/Send.style.tsx | 1 + apps/hybrid-pay/src/pages/Send/Send.tsx | 34 +++++++++---------- .../components/ScannerModal/ScannerModal.tsx | 2 +- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/apps/hybrid-pay/src/pages/Send/Send.style.tsx b/apps/hybrid-pay/src/pages/Send/Send.style.tsx index d9d7894d9..d7c6e22ab 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.style.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.style.tsx @@ -5,6 +5,7 @@ const StyledInput = styled(Input)` input { padding: ${({ theme }) => `${theme.spacing('xl')} ${theme.spacing('lg')}`}; font-size: ${({ theme }) => theme.fontSize('md')}; + padding-right: ${({ theme }) => theme.spacing('5xl')}; } `; diff --git a/apps/hybrid-pay/src/pages/Send/Send.tsx b/apps/hybrid-pay/src/pages/Send/Send.tsx index add2e4384..1e15e20aa 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.tsx @@ -1,7 +1,7 @@ import { ChainId } from '@gobob/chains'; import { CurrencyAmount, ERC20Token, Ether, Token } from '@gobob/currency'; import { useMutation, usePrices } from '@gobob/react-query'; -import { Button, Flex, toast, TokenInput, useForm } from '@gobob/ui'; +import { Button, Flex, QRCode, toast, TokenInput, useForm } from '@gobob/ui'; import { useAccount, useSendTransaction, useWaitForTransactionReceipt, useWriteContract } from '@gobob/wagmi'; import { mergeProps } from '@react-aria/utils'; import Big from 'big.js'; @@ -53,7 +53,7 @@ const Send = (): JSX.Element => { const defaultTicker = CHAIN === ChainId.BASE_SEPOLIA ? 'USDC' : searchParams.get('token') || 'WBTC'; - // const [isScanModalOpen, setScanModalOpen] = useState(false); + const [isScanModalOpen, setScanModalOpen] = useState(false); const [ticker, setTicker] = useState(defaultTicker); const [amount, setAmount] = useState(''); @@ -327,18 +327,17 @@ const Send = (): JSX.Element => {

    { - // getVideoStream(); - // setScanModalOpen(true); - // }} - // > - // - // - // } + endAdornment={ + + } label='Recipient' placeholder='pay@gobob.xyz' size='lg' @@ -392,11 +391,10 @@ const Send = (): JSX.Element => { setScanModalOpen(false)} - onClose={() => {}} + isOpen={isScanModalOpen} + onClose={() => setScanModalOpen(false)} onScan={([scan]) => { - // setScanModalOpen(false); + setScanModalOpen(false); const url = new URL(scan.rawValue); diff --git a/apps/hybrid-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx b/apps/hybrid-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx index a13cc553d..f1dfcdcd6 100644 --- a/apps/hybrid-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx +++ b/apps/hybrid-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx @@ -16,7 +16,7 @@ const ScannerModal = ({ onScan, ...props }: ScannerModal): JSX.Element => { return ( Scan QR Code - + From 5786c086f9e0e17cd7a86e383e0deefb81625ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sim=C3=A3o?= Date: Tue, 30 Jul 2024 09:00:34 +0100 Subject: [PATCH 38/41] fix: remove base sepolia (#77) --- .../src/components/ChainLogo/ChainLogo.tsx | 3 +-- apps/hybrid-pay/src/constants/assets.ts | 25 ++----------------- apps/hybrid-pay/src/hooks/useKernelClient.ts | 3 +-- .../src/lib/account-abstraction/bundler.ts | 1 - apps/hybrid-pay/src/pages/Send/Send.tsx | 6 ++--- packages/chains/src/chainId.ts | 1 - packages/chains/src/chainNames.ts | 4 +-- packages/tokens/src/constants/native.ts | 8 +----- packages/tokens/src/tokens.ts | 3 +-- 9 files changed, 10 insertions(+), 44 deletions(-) diff --git a/apps/evm/src/components/ChainLogo/ChainLogo.tsx b/apps/evm/src/components/ChainLogo/ChainLogo.tsx index b984bf427..b7cc7c1d5 100644 --- a/apps/evm/src/components/ChainLogo/ChainLogo.tsx +++ b/apps/evm/src/components/ChainLogo/ChainLogo.tsx @@ -15,8 +15,7 @@ const chainLogo: Record = { [ChainId.OPBNB]: BNB, [ChainId.POLYGON_ZKEVM]: Polygon, [ChainId.POLYGON]: Polygon, - [ChainId.MOONBEAM]: Moonbeam, - [ChainId.BASE_SEPOLIA]: Base + [ChainId.MOONBEAM]: Moonbeam }; type Props = { diff --git a/apps/hybrid-pay/src/constants/assets.ts b/apps/hybrid-pay/src/constants/assets.ts index ccd67203b..ecfdfff4f 100644 --- a/apps/hybrid-pay/src/constants/assets.ts +++ b/apps/hybrid-pay/src/constants/assets.ts @@ -14,7 +14,7 @@ export type RawToken = { }; // const ETH: Record< -// ChainId.BOB | ChainId.ETHEREUM | ChainId.SEPOLIA | ChainId.BOB_SEPOLIA | ChainId.BASE_SEPOLIA, +// ChainId.BOB | ChainId.ETHEREUM | ChainId.SEPOLIA | ChainId.BOB_SEPOLIA , // RawToken // > = { // [ChainId.ETHEREUM]: { @@ -53,15 +53,6 @@ export type RawToken = { // logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', // apiId: 'ethereum' // }, -// [ChainId.BASE_SEPOLIA]: { -// chainId: ChainId.BASE_SEPOLIA, -// address: '0x0000000000000000000000000000000000000000', -// name: 'Ether', -// symbol: 'ETH', -// decimals: 18, -// logoUrl: 'https://ethereum-optimism.github.io/data/ETH/logo.svg', -// apiId: 'ethereum' -// } // }; const bobAssets: RawToken[] = [ @@ -95,16 +86,4 @@ const bobAssets: RawToken[] = [ } ]; -const baseSepoliaAssets: RawToken[] = [ - { - chainId: ChainId.BASE_SEPOLIA, - address: '0x036CbD53842c5426634e7929541eC2318f3dCF7e', - name: 'USD Coin', - symbol: 'USDC', - decimals: 6, - logoUrl: 'https://ethereum-optimism.github.io/data/USDC/logo.png', - apiId: 'usd-coin' - } -]; - -export const tokens: RawToken[] = [...baseSepoliaAssets, ...bobAssets]; +export const tokens: RawToken[] = [...bobAssets]; diff --git a/apps/hybrid-pay/src/hooks/useKernelClient.ts b/apps/hybrid-pay/src/hooks/useKernelClient.ts index fba01d35c..bd15fe6d1 100644 --- a/apps/hybrid-pay/src/hooks/useKernelClient.ts +++ b/apps/hybrid-pay/src/hooks/useKernelClient.ts @@ -12,10 +12,9 @@ import { useAccount } from 'wagmi'; import { CHAIN } from '../constants'; import { getBundlerByChainId } from '../lib/account-abstraction/bundler'; -type Paymasters = Record>; +type Paymasters = Record>; const paymasters: Paymasters = { - [ChainId.BASE_SEPOLIA]: { USDC: '0x00000000002E3A39aFEf1132214fEee5a55ce127' }, [ChainId.BOB]: { WBTC: '0x000000003CE83Ad13E6A53658Eb03179a37411AE', USDC: '0x00000000D00a8A2AdA5EE8c162C90B6e7A05e970', diff --git a/apps/hybrid-pay/src/lib/account-abstraction/bundler.ts b/apps/hybrid-pay/src/lib/account-abstraction/bundler.ts index f85e88545..a605c4255 100644 --- a/apps/hybrid-pay/src/lib/account-abstraction/bundler.ts +++ b/apps/hybrid-pay/src/lib/account-abstraction/bundler.ts @@ -1,7 +1,6 @@ import { ChainId } from '@gobob/chains'; const bundler = { - [ChainId.BASE_SEPOLIA]: `https://api.pimlico.io/v2/84532/rpc?apikey=${import.meta.env.VITE_PIMLICO_API_KEY}`, [ChainId.BOB]: `https://api.pimlico.io/v2/60808/rpc?apikey=${import.meta.env.VITE_PIMLICO_API_KEY}` }; diff --git a/apps/hybrid-pay/src/pages/Send/Send.tsx b/apps/hybrid-pay/src/pages/Send/Send.tsx index 1e15e20aa..25785dbfd 100644 --- a/apps/hybrid-pay/src/pages/Send/Send.tsx +++ b/apps/hybrid-pay/src/pages/Send/Send.tsx @@ -51,7 +51,7 @@ const getAddressData = async (recipient: string) => { const Send = (): JSX.Element => { const [searchParams] = useSearchParams(new URLSearchParams(window.location.search)); - const defaultTicker = CHAIN === ChainId.BASE_SEPOLIA ? 'USDC' : searchParams.get('token') || 'WBTC'; + const defaultTicker = searchParams.get('token') || 'WBTC'; const [isScanModalOpen, setScanModalOpen] = useState(false); @@ -100,7 +100,7 @@ const Send = (): JSX.Element => { const paymasterApprovalData = useGetApprovalData( currencyAmount.currency.isToken ? (currencyAmount as CurrencyAmount) : undefined, isSmartAccount ? kernelClient?.account?.address : undefined, - paymasters?.[CHAIN as ChainId.BASE_SEPOLIA]?.[gasToken.currency.symbol] + paymasters?.[CHAIN as ChainId.BOB]?.[gasToken.currency.symbol] ); const handleSubmit = async (data: TransferTokenFormValues) => { @@ -225,7 +225,7 @@ const Send = (): JSX.Element => { to: (currencyAmount.currency as Token).address, data: encodeFunctionData({ abi: erc20Abi, - args: [paymasters?.[CHAIN as ChainId.BASE_SEPOLIA]?.[gasToken.currency.symbol]!, MaxUint256], + args: [paymasters?.[CHAIN as ChainId.BOB]?.[gasToken.currency.symbol]!, MaxUint256], functionName: 'approve' }), value: BigInt(0) diff --git a/packages/chains/src/chainId.ts b/packages/chains/src/chainId.ts index f8390aa8f..75ecbe012 100644 --- a/packages/chains/src/chainId.ts +++ b/packages/chains/src/chainId.ts @@ -4,7 +4,6 @@ export enum ChainId { BOB_SEPOLIA = 111, BOB = 60808, BASE = 8453, - BASE_SEPOLIA = 84532, ARBITRUM_ONE = 42161, POLYGON = 137, POLYGON_ZKEVM = 1101, diff --git a/packages/chains/src/chainNames.ts b/packages/chains/src/chainNames.ts index 5a5077f80..e127c5448 100644 --- a/packages/chains/src/chainNames.ts +++ b/packages/chains/src/chainNames.ts @@ -12,8 +12,7 @@ export const chainNames: Record = { [ChainId.BSC]: 'BNB Smart Chain', [ChainId.OPBNB]: 'OPBNB', [ChainId.BASE]: 'base', - [ChainId.MOONBEAM]: 'moonbeam', - [ChainId.BASE_SEPOLIA]: 'base sepolia' + [ChainId.MOONBEAM]: 'moonbeam' }; export const chainNameToChainId = Object.entries(chainNames).reduce( @@ -37,7 +36,6 @@ export const defiLlamaChainNames: Record = { [ChainId.OPBNB]: 'op_bnb', [ChainId.BSC]: '', [ChainId.BASE]: 'base', - [ChainId.BASE_SEPOLIA]: '', [ChainId.OP]: '', [ChainId.POLYGON_ZKEVM]: '', [ChainId.POLYGON]: '', diff --git a/packages/tokens/src/constants/native.ts b/packages/tokens/src/constants/native.ts index 078d57f38..6cbf99761 100644 --- a/packages/tokens/src/constants/native.ts +++ b/packages/tokens/src/constants/native.ts @@ -15,8 +15,7 @@ export const WNATIVE = { [ChainId.OPBNB]: '' as any, [ChainId.POLYGON]: '' as any, [ChainId.POLYGON_ZKEVM]: '' as any, - [ChainId.MOONBEAM]: '' as any, - [ChainId.BASE_SEPOLIA]: '' as any + [ChainId.MOONBEAM]: '' as any } satisfies Record; const ETHER = { name: 'Ether', symbol: 'ETH', decimals: 18 } as const; @@ -48,11 +47,6 @@ export const NATIVE = { symbol: 'ETH', decimals: 18 }, - [ChainId.BASE_SEPOLIA]: { - name: 'Ether', - symbol: 'ETH', - decimals: 18 - }, [ChainId.OP]: { name: 'Ether', symbol: 'ETH', diff --git a/packages/tokens/src/tokens.ts b/packages/tokens/src/tokens.ts index 49bf3aa92..c0e4d14b3 100644 --- a/packages/tokens/src/tokens.ts +++ b/packages/tokens/src/tokens.ts @@ -16,6 +16,5 @@ export const tokens = { [ChainId.OPBNB]: [], [ChainId.POLYGON]: [], [ChainId.POLYGON_ZKEVM]: [], - [ChainId.MOONBEAM]: [], - [ChainId.BASE_SEPOLIA]: [] + [ChainId.MOONBEAM]: [] }; From 39e0e4b37e5e31f3a2e53b8e47ede42c5ad9a322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sim=C3=A3o?= Date: Tue, 30 Jul 2024 17:26:44 +0100 Subject: [PATCH 39/41] refactor: rename to bob-pay (#85) --- apps/{hybrid-pay => bob-pay}/.env.example | 0 apps/{hybrid-pay => bob-pay}/.gitignore | 0 apps/{hybrid-pay => bob-pay}/README.md | 0 apps/{hybrid-pay => bob-pay}/api/index.js | 0 .../{hybrid-pay => bob-pay}/api/marketdata.js | 0 .../api/package-lock.json | 0 apps/{hybrid-pay => bob-pay}/api/package.json | 0 apps/{hybrid-pay => bob-pay}/api/sentry.js | 0 apps/{hybrid-pay => bob-pay}/index.html | 0 apps/{hybrid-pay => bob-pay}/package.json | 2 +- apps/{hybrid-pay => bob-pay}/src/App.tsx | 0 .../src/components/Layout/Header.tsx | 0 .../src/components/Layout/Layout.style.tsx | 0 .../src/components/Layout/Layout.tsx | 0 .../src/components/Layout/Main.tsx | 0 .../Layout/__tests__/Header.test.tsx | 0 .../src/components/Layout/index.tsx | 0 .../src/components/Logo/Logo.style.tsx | 0 .../src/components/Logo/Logo.tsx | 0 .../src/components/Logo/index.tsx | 0 .../src/components/index.ts | 0 .../src/constants/assets.ts | 0 .../src/constants/chain.ts | 0 .../src/constants/index.ts | 0 .../src/constants/routes.ts | 0 .../src/hooks/index.ts | 0 .../src/hooks/useBalances.ts | 0 .../src/hooks/useDynamicAddress.ts | 0 .../src/hooks/useGetTransactions.ts | 0 .../src/hooks/useIsDynamicSmartAccount.ts | 0 .../src/hooks/useKernelClient.ts | 0 .../src/hooks/useTokens.ts | 0 .../src/hooks/useTotalBalance.ts | 0 apps/{hybrid-pay => bob-pay}/src/index.css | 0 .../src/lib/account-abstraction/bundler.ts | 0 .../src/lib/form/transfer.ts | 0 .../src/lib/form/utils.ts | 0 .../src/lib/form/yup.custom.ts | 0 .../src/lib/react-query/index.ts | 0 apps/{hybrid-pay => bob-pay}/src/main.tsx | 0 .../src/pages/404/404.tsx | 0 .../src/pages/404/index.tsx | 0 .../src/pages/Receive/Receive.tsx | 0 .../src/pages/Receive/index.tsx | 0 .../src/pages/Send/Send.style.tsx | 0 .../src/pages/Send/Send.tsx | 0 .../components/ButtonGroup/ButtonGroup.tsx | 0 .../ButtonGroup/CardButton.style.tsx | 0 .../components/ButtonGroup/CardButton.tsx | 0 .../Send/components/ButtonGroup/index.ts | 0 .../components/ScannerModal/ScannerModal.tsx | 0 .../Send/components/ScannerModal/index.ts | 0 .../TokenButtonGroup/TokenButtonGroup.tsx | 0 .../Send/components/TokenButtonGroup/index.ts | 0 .../src/pages/Send/components/index.tsx | 0 .../src/pages/Send/index.tsx | 0 .../src/pages/Wallet/Wallet.style.tsx | 0 .../src/pages/Wallet/Wallet.tsx | 0 .../src/pages/Wallet/components/Hero/Hero.tsx | 0 .../pages/Wallet/components/Hero/index.tsx | 0 .../TransactionList/TransactionItem.style.tsx | 0 .../TransactionList/TransactionItem.tsx | 0 .../TransactionList/TransactionList.tsx | 0 .../components/TransactionList/index.tsx | 0 .../src/pages/Wallet/components/index.tsx | 0 .../src/pages/Wallet/index.tsx | 0 .../src/providers/balances.tsx | 0 .../src/providers/index.ts | 0 .../src/types/styled-components.d.ts | 0 .../src/utils/dynamic-api-client.ts | 0 .../src/utils/index.ts | 0 .../{hybrid-pay => bob-pay}/src/utils/math.ts | 0 .../src/utils/sentry.ts | 0 .../{hybrid-pay => bob-pay}/src/vite-env.d.ts | 0 apps/{hybrid-pay => bob-pay}/tsconfig.json | 0 .../tsconfig.node.json | 0 apps/{hybrid-pay => bob-pay}/vercel.json | 0 apps/{hybrid-pay => bob-pay}/vite.config.ts | 0 knip.config.js | 2 +- package.json | 2 +- pnpm-lock.yaml | 242 +++++++++--------- 81 files changed, 124 insertions(+), 124 deletions(-) rename apps/{hybrid-pay => bob-pay}/.env.example (100%) rename apps/{hybrid-pay => bob-pay}/.gitignore (100%) rename apps/{hybrid-pay => bob-pay}/README.md (100%) rename apps/{hybrid-pay => bob-pay}/api/index.js (100%) rename apps/{hybrid-pay => bob-pay}/api/marketdata.js (100%) rename apps/{hybrid-pay => bob-pay}/api/package-lock.json (100%) rename apps/{hybrid-pay => bob-pay}/api/package.json (100%) rename apps/{hybrid-pay => bob-pay}/api/sentry.js (100%) rename apps/{hybrid-pay => bob-pay}/index.html (100%) rename apps/{hybrid-pay => bob-pay}/package.json (98%) rename apps/{hybrid-pay => bob-pay}/src/App.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/Layout/Header.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/Layout/Layout.style.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/Layout/Layout.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/Layout/Main.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/Layout/__tests__/Header.test.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/Layout/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/Logo/Logo.style.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/Logo/Logo.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/Logo/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/components/index.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/constants/assets.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/constants/chain.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/constants/index.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/constants/routes.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/hooks/index.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/hooks/useBalances.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/hooks/useDynamicAddress.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/hooks/useGetTransactions.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/hooks/useIsDynamicSmartAccount.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/hooks/useKernelClient.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/hooks/useTokens.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/hooks/useTotalBalance.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/index.css (100%) rename apps/{hybrid-pay => bob-pay}/src/lib/account-abstraction/bundler.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/lib/form/transfer.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/lib/form/utils.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/lib/form/yup.custom.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/lib/react-query/index.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/main.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/404/404.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/404/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Receive/Receive.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Receive/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/Send.style.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/Send.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/components/ButtonGroup/CardButton.style.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/components/ButtonGroup/CardButton.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/components/ButtonGroup/index.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/components/ScannerModal/ScannerModal.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/components/ScannerModal/index.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/components/TokenButtonGroup/index.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/components/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Send/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/Wallet.style.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/Wallet.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/components/Hero/Hero.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/components/Hero/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/components/TransactionList/TransactionItem.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/components/TransactionList/TransactionList.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/components/TransactionList/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/components/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/pages/Wallet/index.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/providers/balances.tsx (100%) rename apps/{hybrid-pay => bob-pay}/src/providers/index.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/types/styled-components.d.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/utils/dynamic-api-client.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/utils/index.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/utils/math.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/utils/sentry.ts (100%) rename apps/{hybrid-pay => bob-pay}/src/vite-env.d.ts (100%) rename apps/{hybrid-pay => bob-pay}/tsconfig.json (100%) rename apps/{hybrid-pay => bob-pay}/tsconfig.node.json (100%) rename apps/{hybrid-pay => bob-pay}/vercel.json (100%) rename apps/{hybrid-pay => bob-pay}/vite.config.ts (100%) diff --git a/apps/hybrid-pay/.env.example b/apps/bob-pay/.env.example similarity index 100% rename from apps/hybrid-pay/.env.example rename to apps/bob-pay/.env.example diff --git a/apps/hybrid-pay/.gitignore b/apps/bob-pay/.gitignore similarity index 100% rename from apps/hybrid-pay/.gitignore rename to apps/bob-pay/.gitignore diff --git a/apps/hybrid-pay/README.md b/apps/bob-pay/README.md similarity index 100% rename from apps/hybrid-pay/README.md rename to apps/bob-pay/README.md diff --git a/apps/hybrid-pay/api/index.js b/apps/bob-pay/api/index.js similarity index 100% rename from apps/hybrid-pay/api/index.js rename to apps/bob-pay/api/index.js diff --git a/apps/hybrid-pay/api/marketdata.js b/apps/bob-pay/api/marketdata.js similarity index 100% rename from apps/hybrid-pay/api/marketdata.js rename to apps/bob-pay/api/marketdata.js diff --git a/apps/hybrid-pay/api/package-lock.json b/apps/bob-pay/api/package-lock.json similarity index 100% rename from apps/hybrid-pay/api/package-lock.json rename to apps/bob-pay/api/package-lock.json diff --git a/apps/hybrid-pay/api/package.json b/apps/bob-pay/api/package.json similarity index 100% rename from apps/hybrid-pay/api/package.json rename to apps/bob-pay/api/package.json diff --git a/apps/hybrid-pay/api/sentry.js b/apps/bob-pay/api/sentry.js similarity index 100% rename from apps/hybrid-pay/api/sentry.js rename to apps/bob-pay/api/sentry.js diff --git a/apps/hybrid-pay/index.html b/apps/bob-pay/index.html similarity index 100% rename from apps/hybrid-pay/index.html rename to apps/bob-pay/index.html diff --git a/apps/hybrid-pay/package.json b/apps/bob-pay/package.json similarity index 98% rename from apps/hybrid-pay/package.json rename to apps/bob-pay/package.json index 7bf439fa8..72e8832d9 100644 --- a/apps/hybrid-pay/package.json +++ b/apps/bob-pay/package.json @@ -1,5 +1,5 @@ { - "name": "bob-hybrid-pay", + "name": "bob-pay", "private": true, "version": "0.0.0", "type": "module", diff --git a/apps/hybrid-pay/src/App.tsx b/apps/bob-pay/src/App.tsx similarity index 100% rename from apps/hybrid-pay/src/App.tsx rename to apps/bob-pay/src/App.tsx diff --git a/apps/hybrid-pay/src/components/Layout/Header.tsx b/apps/bob-pay/src/components/Layout/Header.tsx similarity index 100% rename from apps/hybrid-pay/src/components/Layout/Header.tsx rename to apps/bob-pay/src/components/Layout/Header.tsx diff --git a/apps/hybrid-pay/src/components/Layout/Layout.style.tsx b/apps/bob-pay/src/components/Layout/Layout.style.tsx similarity index 100% rename from apps/hybrid-pay/src/components/Layout/Layout.style.tsx rename to apps/bob-pay/src/components/Layout/Layout.style.tsx diff --git a/apps/hybrid-pay/src/components/Layout/Layout.tsx b/apps/bob-pay/src/components/Layout/Layout.tsx similarity index 100% rename from apps/hybrid-pay/src/components/Layout/Layout.tsx rename to apps/bob-pay/src/components/Layout/Layout.tsx diff --git a/apps/hybrid-pay/src/components/Layout/Main.tsx b/apps/bob-pay/src/components/Layout/Main.tsx similarity index 100% rename from apps/hybrid-pay/src/components/Layout/Main.tsx rename to apps/bob-pay/src/components/Layout/Main.tsx diff --git a/apps/hybrid-pay/src/components/Layout/__tests__/Header.test.tsx b/apps/bob-pay/src/components/Layout/__tests__/Header.test.tsx similarity index 100% rename from apps/hybrid-pay/src/components/Layout/__tests__/Header.test.tsx rename to apps/bob-pay/src/components/Layout/__tests__/Header.test.tsx diff --git a/apps/hybrid-pay/src/components/Layout/index.tsx b/apps/bob-pay/src/components/Layout/index.tsx similarity index 100% rename from apps/hybrid-pay/src/components/Layout/index.tsx rename to apps/bob-pay/src/components/Layout/index.tsx diff --git a/apps/hybrid-pay/src/components/Logo/Logo.style.tsx b/apps/bob-pay/src/components/Logo/Logo.style.tsx similarity index 100% rename from apps/hybrid-pay/src/components/Logo/Logo.style.tsx rename to apps/bob-pay/src/components/Logo/Logo.style.tsx diff --git a/apps/hybrid-pay/src/components/Logo/Logo.tsx b/apps/bob-pay/src/components/Logo/Logo.tsx similarity index 100% rename from apps/hybrid-pay/src/components/Logo/Logo.tsx rename to apps/bob-pay/src/components/Logo/Logo.tsx diff --git a/apps/hybrid-pay/src/components/Logo/index.tsx b/apps/bob-pay/src/components/Logo/index.tsx similarity index 100% rename from apps/hybrid-pay/src/components/Logo/index.tsx rename to apps/bob-pay/src/components/Logo/index.tsx diff --git a/apps/hybrid-pay/src/components/index.ts b/apps/bob-pay/src/components/index.ts similarity index 100% rename from apps/hybrid-pay/src/components/index.ts rename to apps/bob-pay/src/components/index.ts diff --git a/apps/hybrid-pay/src/constants/assets.ts b/apps/bob-pay/src/constants/assets.ts similarity index 100% rename from apps/hybrid-pay/src/constants/assets.ts rename to apps/bob-pay/src/constants/assets.ts diff --git a/apps/hybrid-pay/src/constants/chain.ts b/apps/bob-pay/src/constants/chain.ts similarity index 100% rename from apps/hybrid-pay/src/constants/chain.ts rename to apps/bob-pay/src/constants/chain.ts diff --git a/apps/hybrid-pay/src/constants/index.ts b/apps/bob-pay/src/constants/index.ts similarity index 100% rename from apps/hybrid-pay/src/constants/index.ts rename to apps/bob-pay/src/constants/index.ts diff --git a/apps/hybrid-pay/src/constants/routes.ts b/apps/bob-pay/src/constants/routes.ts similarity index 100% rename from apps/hybrid-pay/src/constants/routes.ts rename to apps/bob-pay/src/constants/routes.ts diff --git a/apps/hybrid-pay/src/hooks/index.ts b/apps/bob-pay/src/hooks/index.ts similarity index 100% rename from apps/hybrid-pay/src/hooks/index.ts rename to apps/bob-pay/src/hooks/index.ts diff --git a/apps/hybrid-pay/src/hooks/useBalances.ts b/apps/bob-pay/src/hooks/useBalances.ts similarity index 100% rename from apps/hybrid-pay/src/hooks/useBalances.ts rename to apps/bob-pay/src/hooks/useBalances.ts diff --git a/apps/hybrid-pay/src/hooks/useDynamicAddress.ts b/apps/bob-pay/src/hooks/useDynamicAddress.ts similarity index 100% rename from apps/hybrid-pay/src/hooks/useDynamicAddress.ts rename to apps/bob-pay/src/hooks/useDynamicAddress.ts diff --git a/apps/hybrid-pay/src/hooks/useGetTransactions.ts b/apps/bob-pay/src/hooks/useGetTransactions.ts similarity index 100% rename from apps/hybrid-pay/src/hooks/useGetTransactions.ts rename to apps/bob-pay/src/hooks/useGetTransactions.ts diff --git a/apps/hybrid-pay/src/hooks/useIsDynamicSmartAccount.ts b/apps/bob-pay/src/hooks/useIsDynamicSmartAccount.ts similarity index 100% rename from apps/hybrid-pay/src/hooks/useIsDynamicSmartAccount.ts rename to apps/bob-pay/src/hooks/useIsDynamicSmartAccount.ts diff --git a/apps/hybrid-pay/src/hooks/useKernelClient.ts b/apps/bob-pay/src/hooks/useKernelClient.ts similarity index 100% rename from apps/hybrid-pay/src/hooks/useKernelClient.ts rename to apps/bob-pay/src/hooks/useKernelClient.ts diff --git a/apps/hybrid-pay/src/hooks/useTokens.ts b/apps/bob-pay/src/hooks/useTokens.ts similarity index 100% rename from apps/hybrid-pay/src/hooks/useTokens.ts rename to apps/bob-pay/src/hooks/useTokens.ts diff --git a/apps/hybrid-pay/src/hooks/useTotalBalance.ts b/apps/bob-pay/src/hooks/useTotalBalance.ts similarity index 100% rename from apps/hybrid-pay/src/hooks/useTotalBalance.ts rename to apps/bob-pay/src/hooks/useTotalBalance.ts diff --git a/apps/hybrid-pay/src/index.css b/apps/bob-pay/src/index.css similarity index 100% rename from apps/hybrid-pay/src/index.css rename to apps/bob-pay/src/index.css diff --git a/apps/hybrid-pay/src/lib/account-abstraction/bundler.ts b/apps/bob-pay/src/lib/account-abstraction/bundler.ts similarity index 100% rename from apps/hybrid-pay/src/lib/account-abstraction/bundler.ts rename to apps/bob-pay/src/lib/account-abstraction/bundler.ts diff --git a/apps/hybrid-pay/src/lib/form/transfer.ts b/apps/bob-pay/src/lib/form/transfer.ts similarity index 100% rename from apps/hybrid-pay/src/lib/form/transfer.ts rename to apps/bob-pay/src/lib/form/transfer.ts diff --git a/apps/hybrid-pay/src/lib/form/utils.ts b/apps/bob-pay/src/lib/form/utils.ts similarity index 100% rename from apps/hybrid-pay/src/lib/form/utils.ts rename to apps/bob-pay/src/lib/form/utils.ts diff --git a/apps/hybrid-pay/src/lib/form/yup.custom.ts b/apps/bob-pay/src/lib/form/yup.custom.ts similarity index 100% rename from apps/hybrid-pay/src/lib/form/yup.custom.ts rename to apps/bob-pay/src/lib/form/yup.custom.ts diff --git a/apps/hybrid-pay/src/lib/react-query/index.ts b/apps/bob-pay/src/lib/react-query/index.ts similarity index 100% rename from apps/hybrid-pay/src/lib/react-query/index.ts rename to apps/bob-pay/src/lib/react-query/index.ts diff --git a/apps/hybrid-pay/src/main.tsx b/apps/bob-pay/src/main.tsx similarity index 100% rename from apps/hybrid-pay/src/main.tsx rename to apps/bob-pay/src/main.tsx diff --git a/apps/hybrid-pay/src/pages/404/404.tsx b/apps/bob-pay/src/pages/404/404.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/404/404.tsx rename to apps/bob-pay/src/pages/404/404.tsx diff --git a/apps/hybrid-pay/src/pages/404/index.tsx b/apps/bob-pay/src/pages/404/index.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/404/index.tsx rename to apps/bob-pay/src/pages/404/index.tsx diff --git a/apps/hybrid-pay/src/pages/Receive/Receive.tsx b/apps/bob-pay/src/pages/Receive/Receive.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Receive/Receive.tsx rename to apps/bob-pay/src/pages/Receive/Receive.tsx diff --git a/apps/hybrid-pay/src/pages/Receive/index.tsx b/apps/bob-pay/src/pages/Receive/index.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Receive/index.tsx rename to apps/bob-pay/src/pages/Receive/index.tsx diff --git a/apps/hybrid-pay/src/pages/Send/Send.style.tsx b/apps/bob-pay/src/pages/Send/Send.style.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Send/Send.style.tsx rename to apps/bob-pay/src/pages/Send/Send.style.tsx diff --git a/apps/hybrid-pay/src/pages/Send/Send.tsx b/apps/bob-pay/src/pages/Send/Send.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Send/Send.tsx rename to apps/bob-pay/src/pages/Send/Send.tsx diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx b/apps/bob-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx rename to apps/bob-pay/src/pages/Send/components/ButtonGroup/ButtonGroup.tsx diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.style.tsx b/apps/bob-pay/src/pages/Send/components/ButtonGroup/CardButton.style.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.style.tsx rename to apps/bob-pay/src/pages/Send/components/ButtonGroup/CardButton.style.tsx diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx b/apps/bob-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx rename to apps/bob-pay/src/pages/Send/components/ButtonGroup/CardButton.tsx diff --git a/apps/hybrid-pay/src/pages/Send/components/ButtonGroup/index.ts b/apps/bob-pay/src/pages/Send/components/ButtonGroup/index.ts similarity index 100% rename from apps/hybrid-pay/src/pages/Send/components/ButtonGroup/index.ts rename to apps/bob-pay/src/pages/Send/components/ButtonGroup/index.ts diff --git a/apps/hybrid-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx b/apps/bob-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx rename to apps/bob-pay/src/pages/Send/components/ScannerModal/ScannerModal.tsx diff --git a/apps/hybrid-pay/src/pages/Send/components/ScannerModal/index.ts b/apps/bob-pay/src/pages/Send/components/ScannerModal/index.ts similarity index 100% rename from apps/hybrid-pay/src/pages/Send/components/ScannerModal/index.ts rename to apps/bob-pay/src/pages/Send/components/ScannerModal/index.ts diff --git a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx b/apps/bob-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx rename to apps/bob-pay/src/pages/Send/components/TokenButtonGroup/TokenButtonGroup.tsx diff --git a/apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/index.ts b/apps/bob-pay/src/pages/Send/components/TokenButtonGroup/index.ts similarity index 100% rename from apps/hybrid-pay/src/pages/Send/components/TokenButtonGroup/index.ts rename to apps/bob-pay/src/pages/Send/components/TokenButtonGroup/index.ts diff --git a/apps/hybrid-pay/src/pages/Send/components/index.tsx b/apps/bob-pay/src/pages/Send/components/index.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Send/components/index.tsx rename to apps/bob-pay/src/pages/Send/components/index.tsx diff --git a/apps/hybrid-pay/src/pages/Send/index.tsx b/apps/bob-pay/src/pages/Send/index.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Send/index.tsx rename to apps/bob-pay/src/pages/Send/index.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/Wallet.style.tsx b/apps/bob-pay/src/pages/Wallet/Wallet.style.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/Wallet.style.tsx rename to apps/bob-pay/src/pages/Wallet/Wallet.style.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/Wallet.tsx b/apps/bob-pay/src/pages/Wallet/Wallet.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/Wallet.tsx rename to apps/bob-pay/src/pages/Wallet/Wallet.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx b/apps/bob-pay/src/pages/Wallet/components/Hero/Hero.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/components/Hero/Hero.tsx rename to apps/bob-pay/src/pages/Wallet/components/Hero/Hero.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/components/Hero/index.tsx b/apps/bob-pay/src/pages/Wallet/components/Hero/index.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/components/Hero/index.tsx rename to apps/bob-pay/src/pages/Wallet/components/Hero/index.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx b/apps/bob-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx rename to apps/bob-pay/src/pages/Wallet/components/TransactionList/TransactionItem.style.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx b/apps/bob-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx rename to apps/bob-pay/src/pages/Wallet/components/TransactionList/TransactionItem.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx b/apps/bob-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx rename to apps/bob-pay/src/pages/Wallet/components/TransactionList/TransactionList.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/components/TransactionList/index.tsx b/apps/bob-pay/src/pages/Wallet/components/TransactionList/index.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/components/TransactionList/index.tsx rename to apps/bob-pay/src/pages/Wallet/components/TransactionList/index.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/components/index.tsx b/apps/bob-pay/src/pages/Wallet/components/index.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/components/index.tsx rename to apps/bob-pay/src/pages/Wallet/components/index.tsx diff --git a/apps/hybrid-pay/src/pages/Wallet/index.tsx b/apps/bob-pay/src/pages/Wallet/index.tsx similarity index 100% rename from apps/hybrid-pay/src/pages/Wallet/index.tsx rename to apps/bob-pay/src/pages/Wallet/index.tsx diff --git a/apps/hybrid-pay/src/providers/balances.tsx b/apps/bob-pay/src/providers/balances.tsx similarity index 100% rename from apps/hybrid-pay/src/providers/balances.tsx rename to apps/bob-pay/src/providers/balances.tsx diff --git a/apps/hybrid-pay/src/providers/index.ts b/apps/bob-pay/src/providers/index.ts similarity index 100% rename from apps/hybrid-pay/src/providers/index.ts rename to apps/bob-pay/src/providers/index.ts diff --git a/apps/hybrid-pay/src/types/styled-components.d.ts b/apps/bob-pay/src/types/styled-components.d.ts similarity index 100% rename from apps/hybrid-pay/src/types/styled-components.d.ts rename to apps/bob-pay/src/types/styled-components.d.ts diff --git a/apps/hybrid-pay/src/utils/dynamic-api-client.ts b/apps/bob-pay/src/utils/dynamic-api-client.ts similarity index 100% rename from apps/hybrid-pay/src/utils/dynamic-api-client.ts rename to apps/bob-pay/src/utils/dynamic-api-client.ts diff --git a/apps/hybrid-pay/src/utils/index.ts b/apps/bob-pay/src/utils/index.ts similarity index 100% rename from apps/hybrid-pay/src/utils/index.ts rename to apps/bob-pay/src/utils/index.ts diff --git a/apps/hybrid-pay/src/utils/math.ts b/apps/bob-pay/src/utils/math.ts similarity index 100% rename from apps/hybrid-pay/src/utils/math.ts rename to apps/bob-pay/src/utils/math.ts diff --git a/apps/hybrid-pay/src/utils/sentry.ts b/apps/bob-pay/src/utils/sentry.ts similarity index 100% rename from apps/hybrid-pay/src/utils/sentry.ts rename to apps/bob-pay/src/utils/sentry.ts diff --git a/apps/hybrid-pay/src/vite-env.d.ts b/apps/bob-pay/src/vite-env.d.ts similarity index 100% rename from apps/hybrid-pay/src/vite-env.d.ts rename to apps/bob-pay/src/vite-env.d.ts diff --git a/apps/hybrid-pay/tsconfig.json b/apps/bob-pay/tsconfig.json similarity index 100% rename from apps/hybrid-pay/tsconfig.json rename to apps/bob-pay/tsconfig.json diff --git a/apps/hybrid-pay/tsconfig.node.json b/apps/bob-pay/tsconfig.node.json similarity index 100% rename from apps/hybrid-pay/tsconfig.node.json rename to apps/bob-pay/tsconfig.node.json diff --git a/apps/hybrid-pay/vercel.json b/apps/bob-pay/vercel.json similarity index 100% rename from apps/hybrid-pay/vercel.json rename to apps/bob-pay/vercel.json diff --git a/apps/hybrid-pay/vite.config.ts b/apps/bob-pay/vite.config.ts similarity index 100% rename from apps/hybrid-pay/vite.config.ts rename to apps/bob-pay/vite.config.ts diff --git a/knip.config.js b/knip.config.js index a1fe5efc4..4225bbe24 100644 --- a/knip.config.js +++ b/knip.config.js @@ -7,7 +7,7 @@ const config = { 'apps/evm/api/**', 'packages/currency/src/constants.ts', '.storybook/vite.config.ts', - 'apps/hybrid-pay/api/**' + 'apps/bob-pay/api/**' ] }; diff --git a/package.json b/package.json index 803519626..6967832b0 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "build:sb": "storybook build", "test": "jest --verbose --config ./jest.config.js packages/ui", "start:evm": "pnpm run --filter bob-evm dev --port 5050", - "start:hybrid-pay": "pnpm run --filter bob-hybrid-pay dev --port 5050", + "start:bob-pay": "pnpm run --filter bob-pay dev --port 5050", "test:e2e": "start-server-and-test 'pnpm start:bridge' http-get://localhost:3000 'cd apps/e2e && pnpm synpress:run'", "test:e2e:ci": "cd apps/e2e && pnpm synpress:run", "postinstall": "husky install", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 993fde683..ae04a99c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -157,53 +157,32 @@ importers: specifier: 5.4.5 version: 5.4.5 - apps/e2e: - devDependencies: - '@synthetixio/synpress': - specifier: 3.7.2-beta.9 - version: 3.7.2-beta.9(@babel/core@7.24.9)(@babel/preset-env@7.24.8)(babel-loader@9.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(webpack@5.93.0)(zod@3.23.8) - '@testing-library/cypress': - specifier: ^10.0.1 - version: 10.0.2(cypress@13.13.1) - cypress: - specifier: ^13.6.0 - version: 13.13.1 - cypress-wait-until: - specifier: ^2.0.1 - version: 2.0.1 - - apps/evm: + apps/bob-pay: dependencies: - '@eth-optimism/sdk': - specifier: ^3.1.6 - version: 3.3.2(ethers@5.7.2) - '@ethersproject/providers': - specifier: ^5.7.2 - version: 5.7.2 - '@gobob/bob-sdk': - specifier: 1.3.0 - version: 1.3.0 + '@dynamic-labs/ethereum': + specifier: ^v3.0.0-alpha.29 + version: 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) + '@dynamic-labs/ethereum-aa': + specifier: ^v3.0.0-alpha.29 + version: 3.0.0-alpha.29(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@types/react@18.3.3)(@zerodev/webauthn-key@5.3.1)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) + '@dynamic-labs/sdk-react-core': + specifier: ^v3.0.0-alpha.29 + version: 3.0.0-alpha.29(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1) + '@dynamic-labs/wagmi-connector': + specifier: ^v3.0.0-alpha.29 + version: 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/sdk-react-core@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(@wagmi/core@2.12.2)(eventemitter3@5.0.1)(react@18.3.1)(viem@2.17.5)(wagmi@2.11.2) '@gobob/chains': specifier: workspace:^ version: link:../../packages/chains - '@gobob/connect-ui': - specifier: workspace:^ - version: link:../../packages/connect-ui '@gobob/currency': specifier: workspace:^ version: link:../../packages/currency '@gobob/hooks': specifier: workspace:^ version: link:../../packages/hooks - '@gobob/icons': - specifier: workspace:^ - version: link:../../packages/icons '@gobob/react-query': specifier: workspace:^ version: link:../../packages/react-query - '@gobob/sats-wagmi': - specifier: workspace:^ - version: link:../../packages/sats-wagmi '@gobob/tokens': specifier: workspace:^ version: link:../../packages/tokens @@ -219,75 +198,69 @@ importers: '@gobob/wagmi': specifier: workspace:^ version: link:../../packages/wagmi - '@react-aria/label': - specifier: ^3.7.6 - version: 3.7.8(react@18.3.1) + '@react-aria/tag': + specifier: ^3.4.1 + version: 3.4.1(react-dom@18.3.1)(react@18.3.1) '@react-aria/utils': specifier: ^3.23.2 version: 3.24.1(react@18.3.1) + '@react-stately/collections': + specifier: ^3.10.0 + version: 3.10.7(react@18.3.1) + '@react-stately/list': + specifier: ^3.9.1 + version: 3.10.5(react@18.3.1) '@sentry/react': - specifier: ^8.15.0 + specifier: ^8.8.0 version: 8.19.0(react@18.3.1) '@sentry/vite-plugin': - specifier: ^2.20.1 + specifier: ^2.18.0 version: 2.21.1 - '@types/react-slick': - specifier: ^0.23.13 - version: 0.23.13 - '@uidotdev/usehooks': - specifier: ^2.4.1 - version: 2.4.1(react-dom@18.3.1)(react@18.3.1) + '@yudiel/react-qr-scanner': + specifier: ^2.0.4 + version: 2.0.4(react-dom@18.3.1)(react@18.3.1) + '@zerodev/sdk': + specifier: ^5.3.4 + version: 5.3.4(permissionless@0.1.41)(viem@2.17.5) big.js: specifier: ^6.2.1 version: 6.2.1 - countup.js: - specifier: ^2.8.0 - version: 2.8.0 date-fns: specifier: ^3.2.0 version: 3.6.0 graphql-request: - specifier: ^6.1.0 + specifier: 6.1.0 version: 6.1.0(graphql@16.9.0) - i18next: - specifier: ^23.10.1 - version: 23.12.2 - i18next-browser-languagedetector: - specifier: ^7.2.0 - version: 7.2.1 + permissionless: + specifier: ^0.1.41 + version: 0.1.41(viem@2.17.5) react: specifier: ^18.2.0 version: 18.3.1 react-dom: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) - react-i18next: - specifier: ^14.1.0 - version: 14.1.3(i18next@23.12.2)(react-dom@18.3.1)(react@18.3.1) - react-otp-input: - specifier: ^3.1.1 - version: 3.1.1(react-dom@18.3.1)(react@18.3.1) react-qr-code: specifier: ^2.0.12 version: 2.0.15(react@18.3.1) react-router-dom: specifier: ^6.16.0 version: 6.25.1(react-dom@18.3.1)(react@18.3.1) - react-slick: - specifier: ^0.30.2 - version: 0.30.2(react-dom@18.3.1)(react@18.3.1) - siwe: - specifier: ^2.1.4 - version: 2.3.2(ethers@5.7.2) - slick-carousel: - specifier: ^1.8.1 - version: 1.8.1(jquery@3.7.1) + react-use: + specifier: ^17.5.1 + version: 17.5.1(react-dom@18.3.1)(react@18.3.1) styled-components: specifier: ^6.0.8 version: 6.1.12(react-dom@18.3.1)(react@18.3.1) viem: - specifier: ^2.10.2 + specifier: ^2.17.3 version: 2.17.5(typescript@5.4.5)(zod@3.23.8) + vite-plugin-node-polyfills: + specifier: ^0.15.0 + version: 0.15.0(vite@4.5.3) + wagmi: + specifier: ^2.8.1 + version: 2.11.2(@tanstack/react-query@5.51.9)(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.5)(zod@3.23.8) yup: specifier: ^0.32.11 version: 0.32.11 @@ -313,39 +286,54 @@ importers: vite: specifier: ^4.4.5 version: 4.5.3(@types/node@20.14.11) - vite-plugin-node-polyfills: - specifier: ^0.15.0 - version: 0.15.0(vite@4.5.3) - vite-plugin-wasm: - specifier: ^3.3.0 - version: 3.3.0(vite@4.5.3) - apps/hybrid-pay: + apps/e2e: + devDependencies: + '@synthetixio/synpress': + specifier: 3.7.2-beta.9 + version: 3.7.2-beta.9(@babel/core@7.24.9)(@babel/preset-env@7.24.8)(babel-loader@9.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(webpack@5.93.0)(zod@3.23.8) + '@testing-library/cypress': + specifier: ^10.0.1 + version: 10.0.2(cypress@13.13.1) + cypress: + specifier: ^13.6.0 + version: 13.13.1 + cypress-wait-until: + specifier: ^2.0.1 + version: 2.0.1 + + apps/evm: dependencies: - '@dynamic-labs/ethereum': - specifier: ^v3.0.0-alpha.29 - version: 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) - '@dynamic-labs/ethereum-aa': - specifier: ^v3.0.0-alpha.29 - version: 3.0.0-alpha.29(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@types/react@18.3.3)(@zerodev/webauthn-key@5.3.1)(eventemitter3@5.0.1)(react-dom@18.3.1)(react@18.3.1)(viem@2.17.5) - '@dynamic-labs/sdk-react-core': - specifier: ^v3.0.0-alpha.29 - version: 3.0.0-alpha.29(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1) - '@dynamic-labs/wagmi-connector': - specifier: ^v3.0.0-alpha.29 - version: 3.0.0-alpha.29(@dynamic-labs/logger@3.0.0-alpha.29)(@dynamic-labs/rpc-providers@3.0.0-alpha.29)(@dynamic-labs/sdk-react-core@3.0.0-alpha.29)(@dynamic-labs/types@3.0.0-alpha.29)(@dynamic-labs/wallet-connector-core@3.0.0-alpha.29)(@wagmi/core@2.12.2)(eventemitter3@5.0.1)(react@18.3.1)(viem@2.17.5)(wagmi@2.11.2) + '@eth-optimism/sdk': + specifier: ^3.1.6 + version: 3.3.2(ethers@5.7.2) + '@ethersproject/providers': + specifier: ^5.7.2 + version: 5.7.2 + '@gobob/bob-sdk': + specifier: 1.3.0 + version: 1.3.0 '@gobob/chains': specifier: workspace:^ version: link:../../packages/chains + '@gobob/connect-ui': + specifier: workspace:^ + version: link:../../packages/connect-ui '@gobob/currency': specifier: workspace:^ version: link:../../packages/currency '@gobob/hooks': specifier: workspace:^ version: link:../../packages/hooks + '@gobob/icons': + specifier: workspace:^ + version: link:../../packages/icons '@gobob/react-query': specifier: workspace:^ version: link:../../packages/react-query + '@gobob/sats-wagmi': + specifier: workspace:^ + version: link:../../packages/sats-wagmi '@gobob/tokens': specifier: workspace:^ version: link:../../packages/tokens @@ -361,69 +349,75 @@ importers: '@gobob/wagmi': specifier: workspace:^ version: link:../../packages/wagmi - '@react-aria/tag': - specifier: ^3.4.1 - version: 3.4.1(react-dom@18.3.1)(react@18.3.1) + '@react-aria/label': + specifier: ^3.7.6 + version: 3.7.8(react@18.3.1) '@react-aria/utils': specifier: ^3.23.2 version: 3.24.1(react@18.3.1) - '@react-stately/collections': - specifier: ^3.10.0 - version: 3.10.7(react@18.3.1) - '@react-stately/list': - specifier: ^3.9.1 - version: 3.10.5(react@18.3.1) '@sentry/react': - specifier: ^8.8.0 + specifier: ^8.15.0 version: 8.19.0(react@18.3.1) '@sentry/vite-plugin': - specifier: ^2.18.0 + specifier: ^2.20.1 version: 2.21.1 - '@yudiel/react-qr-scanner': - specifier: ^2.0.4 - version: 2.0.4(react-dom@18.3.1)(react@18.3.1) - '@zerodev/sdk': - specifier: ^5.3.4 - version: 5.3.4(permissionless@0.1.41)(viem@2.17.5) + '@types/react-slick': + specifier: ^0.23.13 + version: 0.23.13 + '@uidotdev/usehooks': + specifier: ^2.4.1 + version: 2.4.1(react-dom@18.3.1)(react@18.3.1) big.js: specifier: ^6.2.1 version: 6.2.1 + countup.js: + specifier: ^2.8.0 + version: 2.8.0 date-fns: specifier: ^3.2.0 version: 3.6.0 graphql-request: - specifier: 6.1.0 + specifier: ^6.1.0 version: 6.1.0(graphql@16.9.0) - permissionless: - specifier: ^0.1.41 - version: 0.1.41(viem@2.17.5) + i18next: + specifier: ^23.10.1 + version: 23.12.2 + i18next-browser-languagedetector: + specifier: ^7.2.0 + version: 7.2.1 react: specifier: ^18.2.0 version: 18.3.1 react-dom: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) + react-i18next: + specifier: ^14.1.0 + version: 14.1.3(i18next@23.12.2)(react-dom@18.3.1)(react@18.3.1) + react-otp-input: + specifier: ^3.1.1 + version: 3.1.1(react-dom@18.3.1)(react@18.3.1) react-qr-code: specifier: ^2.0.12 version: 2.0.15(react@18.3.1) react-router-dom: specifier: ^6.16.0 version: 6.25.1(react-dom@18.3.1)(react@18.3.1) - react-use: - specifier: ^17.5.1 - version: 17.5.1(react-dom@18.3.1)(react@18.3.1) + react-slick: + specifier: ^0.30.2 + version: 0.30.2(react-dom@18.3.1)(react@18.3.1) + siwe: + specifier: ^2.1.4 + version: 2.3.2(ethers@5.7.2) + slick-carousel: + specifier: ^1.8.1 + version: 1.8.1(jquery@3.7.1) styled-components: specifier: ^6.0.8 version: 6.1.12(react-dom@18.3.1)(react@18.3.1) viem: - specifier: ^2.17.3 + specifier: ^2.10.2 version: 2.17.5(typescript@5.4.5)(zod@3.23.8) - vite-plugin-node-polyfills: - specifier: ^0.15.0 - version: 0.15.0(vite@4.5.3) - wagmi: - specifier: ^2.8.1 - version: 2.11.2(@tanstack/react-query@5.51.9)(@types/react@18.3.3)(react-dom@18.3.1)(react-native@0.74.3)(react@18.3.1)(typescript@5.4.5)(viem@2.17.5)(zod@3.23.8) yup: specifier: ^0.32.11 version: 0.32.11 @@ -449,6 +443,12 @@ importers: vite: specifier: ^4.4.5 version: 4.5.3(@types/node@20.14.11) + vite-plugin-node-polyfills: + specifier: ^0.15.0 + version: 0.15.0(vite@4.5.3) + vite-plugin-wasm: + specifier: ^3.3.0 + version: 3.3.0(vite@4.5.3) packages/chains: {} From d1bcbeedb91b8d8a9720724938cc331a020a4dc6 Mon Sep 17 00:00:00 2001 From: sander2 Date: Tue, 30 Jul 2024 18:41:28 +0200 Subject: [PATCH 40/41] fix: also call the api if sending from eoa (#86) --- apps/bob-pay/src/pages/Send/Send.tsx | 35 ++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/apps/bob-pay/src/pages/Send/Send.tsx b/apps/bob-pay/src/pages/Send/Send.tsx index 25785dbfd..d2deff1a4 100644 --- a/apps/bob-pay/src/pages/Send/Send.tsx +++ b/apps/bob-pay/src/pages/Send/Send.tsx @@ -142,21 +142,42 @@ const Send = (): JSX.Element => { recipient: string; currencyAmount: CurrencyAmount; }) => { - const { recipientAddress } = await getAddressData(recipient); + const { isAddress: isRecipientAddress, recipientAddress } = await getAddressData(recipient); + + let txid; if (currencyAmount.currency.isNative) { - return sendTransactionAsync({ + txid = await sendTransactionAsync({ to: recipientAddress, value: currencyAmount.numerator }); + } else { + txid = await writeTransferErc20Async({ + address: (currencyAmount.currency as Token).address, + abi: erc20Abi, + functionName: 'transfer', + args: [recipientAddress, currencyAmount.numerator] + }); } - return writeTransferErc20Async({ - address: (currencyAmount.currency as Token).address, - abi: erc20Abi, - functionName: 'transfer', - args: [recipientAddress, currencyAmount.numerator] + // Record the tx in the db so that we can check for intract whether someone has sent to an email. + // The same data could be used to provide a better tx history to the user, where we can show the + // destination email address rather than the evm address. + fetch('/api/bob-pay-insert-transaction', { + method: 'POST', + headers: { + Accept: 'application/json, text/plain, */*', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + receiverEmail: isRecipientAddress ? '' : recipient, // for now, also submit when transferring to evm address + sender: address, + receiver: recipientAddress, + userOperationHash: txid + }) }); + + return txid; } }); From 53f7a81bbeaafcf50f1d32b55f32cf51fdabeec0 Mon Sep 17 00:00:00 2001 From: tomjeatt <40243778+tomjeatt@users.noreply.github.com> Date: Fri, 2 Aug 2024 14:58:29 +0100 Subject: [PATCH 41/41] feature: add unsupported alert (#94) * feature: add unsupported alert * chore: update copy --- apps/bob-pay/src/App.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/bob-pay/src/App.tsx b/apps/bob-pay/src/App.tsx index 4408eb481..6a2df30ca 100644 --- a/apps/bob-pay/src/App.tsx +++ b/apps/bob-pay/src/App.tsx @@ -3,7 +3,7 @@ import { ReactNode, Suspense, lazy, useEffect } from 'react'; import { BrowserRouter, Route, Routes, useLocation } from 'react-router-dom'; import { DynamicEmbeddedWidget, useDynamicContext } from '@dynamic-labs/sdk-react-core'; import { usePrices } from '@gobob/react-query'; -import { Card, Flex, P, TextLink } from '@gobob/ui'; +import { Alert, Card, Flex, P, TextLink } from '@gobob/ui'; import { Header, Layout, Main } from './components'; import { CHAIN, RoutesPath } from './constants'; @@ -33,6 +33,9 @@ const ProtectedRoute = ({ children }: { children: ReactNode }) => { if (!isAuthenticated) { return (
    + + BOB Pay is currently in testing. Please try it at your own risk. +