From 41dfdf6d966d0bbc07d8599a3561d1f104b46843 Mon Sep 17 00:00:00 2001 From: Krishang Date: Wed, 28 Jan 2026 18:49:33 +0530 Subject: [PATCH 01/18] nit: install --- bun.lock | 2004 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2004 insertions(+) create mode 100644 bun.lock diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..06ce25b --- /dev/null +++ b/bun.lock @@ -0,0 +1,2004 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "my-app", + "dependencies": { + "@privy-io/react-auth": "^2.8.2", + "@radix-ui/react-alert-dialog": "^1.1.11", + "@radix-ui/react-slot": "^1.2.0", + "@tailwindcss/vite": "^4.0.17", + "@types/node": "^22.13.14", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.484.0", + "next-themes": "^0.4.6", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "sonner": "^2.0.3", + "tailwind-merge": "^3.0.2", + "tailwindcss": "^4.0.17", + "tw-animate-css": "^1.2.4", + "viem": "2.43.0", + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react-swc": "^3.8.0", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "typescript": "~5.7.2", + "typescript-eslint": "^8.24.1", + "vite": "^6.2.0", + }, + }, + }, + "packages": { + "@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.11.1", "", {}, "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ=="], + + "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], + + "@base-org/account": ["@base-org/account@1.1.1", "", { "dependencies": { "@noble/hashes": "1.4.0", "clsx": "1.2.1", "eventemitter3": "5.0.1", "idb-keyval": "6.2.1", "ox": "0.6.9", "preact": "10.24.2", "viem": "^2.31.7", "zustand": "5.0.3" } }, "sha512-IfVJPrDPhHfqXRDb89472hXkpvJuQQR7FDI9isLPHEqSYt/45whIoBxSPgZ0ssTt379VhQo4+87PWI1DoLSfAQ=="], + + "@coinbase/cdp-sdk": ["@coinbase/cdp-sdk@1.43.1", "", { "dependencies": { "@solana-program/system": "^0.10.0", "@solana-program/token": "^0.9.0", "@solana/kit": "^5.1.0", "@solana/web3.js": "^1.98.1", "abitype": "1.0.6", "axios": "^1.12.2", "axios-retry": "^4.5.0", "jose": "^6.0.8", "md5": "^2.3.0", "uncrypto": "^0.1.3", "viem": "^2.21.26", "zod": "^3.24.4" } }, "sha512-3eXP24p5q68agRgu8grGlF+ASidf3xYSDQtdRuDOFCMZafbqANsjl/JxLwYDmUenRodhxBBJgYJ65nOALP58tA=="], + + "@coinbase/wallet-sdk": ["@coinbase/wallet-sdk@4.3.2", "", { "dependencies": { "@noble/hashes": "^1.4.0", "clsx": "^1.2.1", "eventemitter3": "^5.0.1", "preact": "^10.24.2" } }, "sha512-hOLA2YONq8Z9n8f6oVP6N//FEEHOen7nq+adG/cReol6juFTHUelVN5GnA5zTIxiLFMDcrhDwwgCA6Tdb5jubw=="], + + "@emotion/is-prop-valid": ["@emotion/is-prop-valid@1.4.0", "", { "dependencies": { "@emotion/memoize": "^0.9.0" } }, "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw=="], + + "@emotion/memoize": ["@emotion/memoize@0.9.0", "", {}, "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="], + + "@emotion/unitless": ["@emotion/unitless@0.10.0", "", {}, "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], + + "@eslint/config-array": ["@eslint/config-array@0.21.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], + + "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.3", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ=="], + + "@eslint/js": ["@eslint/js@9.39.2", "", {}, "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], + + "@ethereumjs/common": ["@ethereumjs/common@3.2.0", "", { "dependencies": { "@ethereumjs/util": "^8.1.0", "crc-32": "^1.2.0" } }, "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA=="], + + "@ethereumjs/rlp": ["@ethereumjs/rlp@4.0.1", "", { "bin": { "rlp": "bin/rlp" } }, "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw=="], + + "@ethereumjs/tx": ["@ethereumjs/tx@4.2.0", "", { "dependencies": { "@ethereumjs/common": "^3.2.0", "@ethereumjs/rlp": "^4.0.1", "@ethereumjs/util": "^8.1.0", "ethereum-cryptography": "^2.0.0" } }, "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw=="], + + "@ethereumjs/util": ["@ethereumjs/util@8.1.0", "", { "dependencies": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", "micro-ftch": "^0.3.1" } }, "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA=="], + + "@ethersproject/abi": ["@ethersproject/abi@5.8.0", "", { "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/hash": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q=="], + + "@ethersproject/abstract-provider": ["@ethersproject/abstract-provider@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/networks": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/transactions": "^5.8.0", "@ethersproject/web": "^5.8.0" } }, "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg=="], + + "@ethersproject/abstract-signer": ["@ethersproject/abstract-signer@5.8.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0" } }, "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA=="], + + "@ethersproject/address": ["@ethersproject/address@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/rlp": "^5.8.0" } }, "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA=="], + + "@ethersproject/base64": ["@ethersproject/base64@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0" } }, "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ=="], + + "@ethersproject/basex": ["@ethersproject/basex@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/properties": "^5.8.0" } }, "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q=="], + + "@ethersproject/bignumber": ["@ethersproject/bignumber@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "bn.js": "^5.2.1" } }, "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA=="], + + "@ethersproject/bytes": ["@ethersproject/bytes@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A=="], + + "@ethersproject/constants": ["@ethersproject/constants@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0" } }, "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg=="], + + "@ethersproject/contracts": ["@ethersproject/contracts@5.8.0", "", { "dependencies": { "@ethersproject/abi": "^5.8.0", "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/transactions": "^5.8.0" } }, "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ=="], + + "@ethersproject/hash": ["@ethersproject/hash@5.8.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/base64": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA=="], + + "@ethersproject/keccak256": ["@ethersproject/keccak256@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "js-sha3": "0.8.0" } }, "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng=="], + + "@ethersproject/logger": ["@ethersproject/logger@5.8.0", "", {}, "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA=="], + + "@ethersproject/networks": ["@ethersproject/networks@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg=="], + + "@ethersproject/properties": ["@ethersproject/properties@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw=="], + + "@ethersproject/providers": ["@ethersproject/providers@5.8.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/base64": "^5.8.0", "@ethersproject/basex": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/hash": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/networks": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/random": "^5.8.0", "@ethersproject/rlp": "^5.8.0", "@ethersproject/sha2": "^5.8.0", "@ethersproject/strings": "^5.8.0", "@ethersproject/transactions": "^5.8.0", "@ethersproject/web": "^5.8.0", "bech32": "1.1.4", "ws": "8.18.0" } }, "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw=="], + + "@ethersproject/random": ["@ethersproject/random@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A=="], + + "@ethersproject/rlp": ["@ethersproject/rlp@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q=="], + + "@ethersproject/sha2": ["@ethersproject/sha2@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "hash.js": "1.1.7" } }, "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A=="], + + "@ethersproject/signing-key": ["@ethersproject/signing-key@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "bn.js": "^5.2.1", "elliptic": "6.6.1", "hash.js": "1.1.7" } }, "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w=="], + + "@ethersproject/strings": ["@ethersproject/strings@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg=="], + + "@ethersproject/transactions": ["@ethersproject/transactions@5.8.0", "", { "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/rlp": "^5.8.0", "@ethersproject/signing-key": "^5.8.0" } }, "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg=="], + + "@ethersproject/units": ["@ethersproject/units@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ=="], + + "@ethersproject/web": ["@ethersproject/web@5.8.0", "", { "dependencies": { "@ethersproject/base64": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.4", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.5", "", { "dependencies": { "@floating-ui/core": "^1.7.4", "@floating-ui/utils": "^0.2.10" } }, "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg=="], + + "@floating-ui/react": ["@floating-ui/react@0.26.28", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.2", "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw=="], + + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.7", "", { "dependencies": { "@floating-ui/dom": "^1.7.5" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + + "@headlessui/react": ["@headlessui/react@2.2.9", "", { "dependencies": { "@floating-ui/react": "^0.26.16", "@react-aria/focus": "^3.20.2", "@react-aria/interactions": "^3.25.0", "@tanstack/react-virtual": "^3.13.9", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ=="], + + "@heroicons/react": ["@heroicons/react@2.2.0", "", { "peerDependencies": { "react": ">= 16 || ^19.0.0-rc" } }, "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ=="], + + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + + "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@lit-labs/ssr-dom-shim": ["@lit-labs/ssr-dom-shim@1.5.1", "", {}, "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA=="], + + "@lit/react": ["@lit/react@1.0.8", "", { "peerDependencies": { "@types/react": "17 || 18 || 19" } }, "sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw=="], + + "@lit/reactive-element": ["@lit/reactive-element@2.1.2", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.5.0" } }, "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A=="], + + "@marsidev/react-turnstile": ["@marsidev/react-turnstile@0.4.1", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-uZusUW9mPr0csWpls8bApe5iuRK0YK7H1PCKqfM4djW3OA9GB9rU68irjk7xRO8qlHyj0aDTeVu9tTLPExBO4Q=="], + + "@metamask/abi-utils": ["@metamask/abi-utils@1.2.0", "", { "dependencies": { "@metamask/utils": "^3.4.1", "superstruct": "^1.0.3" } }, "sha512-Hf7fnBDM9ptCPDtq/wQffWbw859CdVGMwlpWUEsTH6gLXhXONGrRXHA2piyYPRuia8YYTdJvRC/zSK1/nyLvYg=="], + + "@metamask/eth-sig-util": ["@metamask/eth-sig-util@6.0.2", "", { "dependencies": { "@ethereumjs/util": "^8.1.0", "@metamask/abi-utils": "^1.2.0", "@metamask/utils": "^5.0.2", "ethereum-cryptography": "^2.1.2", "ethjs-util": "^0.1.6", "tweetnacl": "^1.0.3", "tweetnacl-util": "^0.15.1" } }, "sha512-D6IIefM2vS+4GUGGtezdBbkwUYQC4bCosYx/JteUuF0zfe6lyxR4cruA8+2QHoUg7F7edNH1xymYpqYq1BeOkw=="], + + "@metamask/utils": ["@metamask/utils@5.0.2", "", { "dependencies": { "@ethereumjs/tx": "^4.1.2", "@types/debug": "^4.1.7", "debug": "^4.3.4", "semver": "^7.3.8", "superstruct": "^1.0.3" } }, "sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g=="], + + "@msgpack/msgpack": ["@msgpack/msgpack@3.1.2", "", {}, "sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ=="], + + "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], + + "@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], + + "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + + "@phosphor-icons/webcomponents": ["@phosphor-icons/webcomponents@2.1.5", "", { "dependencies": { "lit": "^3" } }, "sha512-JcvQkZxvcX2jK+QCclm8+e8HXqtdFW9xV4/kk2aL9Y3dJA2oQVt+pzbv1orkumz3rfx4K9mn9fDoMr1He1yr7Q=="], + + "@privy-io/api-base": ["@privy-io/api-base@1.7.0", "", { "dependencies": { "zod": "^3.24.3" } }, "sha512-ji6ARQAAuW/FzRTgft9NCjRuouWX9t+J7JMmvLPsnXQJDFEV9mqh4sWXZhQ8ddTq/iDZ4z/yz1ORJqN8bYAi4Q=="], + + "@privy-io/chains": ["@privy-io/chains@0.0.2", "", {}, "sha512-vT+EcPstcKbvrPyGA2YDD1W8YxaJhKFKYGmS9PaycODpL9HvMsPpkJ1y6SddmVAKL+WIow+nH9cV1/q0aCmPXA=="], + + "@privy-io/ethereum": ["@privy-io/ethereum@0.0.2", "", { "peerDependencies": { "viem": "^2.21.36" } }, "sha512-FnJ1dzgg/tij4jLeKHLlZM9uNk4WN+iIOkc8CG0FZKUQxqXH60Fs/dMF6Xbndd5CQkUO8LUU7FLom/405VKXpQ=="], + + "@privy-io/js-sdk-core": ["@privy-io/js-sdk-core@0.55.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@ethersproject/transactions": "^5.7.0", "@ethersproject/units": "^5.7.0", "@privy-io/api-base": "1.7.0", "@privy-io/chains": "0.0.2", "@privy-io/public-api": "2.45.0", "canonicalize": "^2.0.0", "eventemitter3": "^5.0.1", "fetch-retry": "^6.0.0", "jose": "^4.15.5", "js-cookie": "^3.0.5", "libphonenumber-js": "^1.10.44", "set-cookie-parser": "^2.6.0", "uuid": ">=8 <10" }, "peerDependencies": { "permissionless": "^0.2.47", "viem": "^2.30.6" }, "optionalPeers": ["permissionless", "viem"] }, "sha512-halUc0CS0fKQY5fX7YOBpL1piBz5eg140rL+tjyL7yeBCjNkgf5DX6J4BWzRdr5AplRdMWRBUb1/6+g+pcm4Iw=="], + + "@privy-io/public-api": ["@privy-io/public-api@2.45.0", "", { "dependencies": { "@privy-io/api-base": "1.7.0", "bs58": "^5.0.0", "libphonenumber-js": "^1.10.31", "viem": "^2", "zod": "^3.24.3" } }, "sha512-gEYclrdjirGqKrJBn1ZXkTuZTL/gK9FjPppoxDJ8/dX1JD4/vXahdt0AdgUfNUf70ZfMdVKYhyos1RkvSLFGYQ=="], + + "@privy-io/react-auth": ["@privy-io/react-auth@2.25.0", "", { "dependencies": { "@base-org/account": "^1.1.0", "@coinbase/wallet-sdk": "4.3.2", "@floating-ui/react": "^0.26.22", "@headlessui/react": "^2.2.0", "@heroicons/react": "^2.1.1", "@marsidev/react-turnstile": "^0.4.1", "@metamask/eth-sig-util": "^6.0.0", "@privy-io/api-base": "1.7.0", "@privy-io/chains": "0.0.2", "@privy-io/ethereum": "0.0.2", "@privy-io/js-sdk-core": "0.55.0", "@privy-io/public-api": "2.45.0", "@reown/appkit": "^1.7.11", "@scure/base": "^1.2.5", "@simplewebauthn/browser": "^9.0.1", "@solana/wallet-adapter-base": "0.9.23", "@solana/wallet-standard-wallet-adapter-base": "^1.1.2", "@solana/wallet-standard-wallet-adapter-react": "^1.1.2", "@tanstack/react-virtual": "^3.13.10", "@wallet-standard/app": "^1.0.1", "@walletconnect/ethereum-provider": "2.21.7", "base64-js": "^1.5.1", "dotenv": "^16.0.3", "encoding": "^0.1.13", "eventemitter3": "^5.0.1", "fast-password-entropy": "^1.1.1", "jose": "^4.15.5", "js-cookie": "^3.0.5", "lokijs": "^1.5.12", "lucide-react": "^0.383.0", "md5": "^2.3.0", "mipd": "^0.0.7", "ofetch": "^1.3.4", "pino-pretty": "^10.0.0", "qrcode": "^1.5.1", "react-device-detect": "^2.2.2", "secure-password-utilities": "^0.2.1", "styled-components": "^6.1.13", "stylis": "^4.3.4", "tinycolor2": "^1.6.0", "uuid": ">=8 <10", "viem": "^2.32.0", "zustand": "^5.0.0" }, "peerDependencies": { "@abstract-foundation/agw-client": "^1.0.0", "@solana-program/system": "^0.7.0", "@solana-program/token": "^0.5.1", "@solana/kit": "^2.3.0", "@solana/spl-token": "^0.4.9", "@solana/web3.js": "^1.95.8", "permissionless": "^0.2.47", "react": "^18 || ^19", "react-dom": "^18 || ^19" }, "optionalPeers": ["@abstract-foundation/agw-client", "@solana-program/system", "@solana-program/token", "@solana/kit", "@solana/spl-token", "@solana/web3.js", "permissionless"] }, "sha512-lcILJaXi2wYgxFsxbvSrIM1Cz8FAumMy90YS4R6wcBNWg79U6S6YTHKMa0U8xJPhJUoKrugAi/LTSifYdTCZjg=="], + + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], + + "@radix-ui/react-alert-dialog": ["@radix-ui/react-alert-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw=="], + + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + + "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], + + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], + + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], + + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], + + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], + + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], + + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], + + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], + + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], + + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], + + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@react-aria/focus": ["@react-aria/focus@3.21.3", "", { "dependencies": { "@react-aria/interactions": "^3.26.0", "@react-aria/utils": "^3.32.0", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-FsquWvjSCwC2/sBk4b+OqJyONETUIXQ2vM0YdPAuC+QFQh2DT6TIBo6dOZVSezlhudDla69xFBd6JvCFq1AbUw=="], + + "@react-aria/interactions": ["@react-aria/interactions@3.26.0", "", { "dependencies": { "@react-aria/ssr": "^3.9.10", "@react-aria/utils": "^3.32.0", "@react-stately/flags": "^3.1.2", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-AAEcHiltjfbmP1i9iaVw34Mb7kbkiHpYdqieWufldh4aplWgsF11YQZOfaCJW4QoR2ML4Zzoa9nfFwLXA52R7Q=="], + + "@react-aria/ssr": ["@react-aria/ssr@3.9.10", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ=="], + + "@react-aria/utils": ["@react-aria/utils@3.32.0", "", { "dependencies": { "@react-aria/ssr": "^3.9.10", "@react-stately/flags": "^3.1.2", "@react-stately/utils": "^3.11.0", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-/7Rud06+HVBIlTwmwmJa2W8xVtgxgzm0+kLbuFooZRzKDON6hhozS1dOMR/YLMxyJOaYOTpImcP4vRR9gL1hEg=="], + + "@react-stately/flags": ["@react-stately/flags@3.1.2", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg=="], + + "@react-stately/utils": ["@react-stately/utils@3.11.0", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw=="], + + "@react-types/shared": ["@react-types/shared@3.32.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w=="], + + "@reown/appkit": ["@reown/appkit@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-pay": "1.8.17", "@reown/appkit-polyfills": "1.8.17", "@reown/appkit-scaffold-ui": "1.8.17", "@reown/appkit-ui": "1.8.17", "@reown/appkit-utils": "1.8.17", "@reown/appkit-wallet": "1.8.17", "@walletconnect/universal-provider": "2.23.2", "bs58": "6.0.0", "semver": "7.7.2", "valtio": "2.1.7", "viem": ">=2.44.2" }, "optionalDependencies": { "@lit/react": "1.0.8" } }, "sha512-svov4ShvEi4YboVe+kXT8xGQvDrYsgQBrBmccOel9nT7/lOEDUimFu5Irna8g/8Zji9/XbRrYi49cLPJrzd45Q=="], + + "@reown/appkit-common": ["@reown/appkit-common@1.8.17", "", { "dependencies": { "big.js": "6.2.2", "dayjs": "1.11.13", "viem": ">=2.44.2" } }, "sha512-sccDeSyzP+Bttyp63Wir8Ark/BPi+eenw8/SY2KFkmKh4D/s3MLVTQMLi+zxZYQG2eFlOF1LcGJf2uYFvTXcgA=="], + + "@reown/appkit-controllers": ["@reown/appkit-controllers@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-wallet": "1.8.17", "@walletconnect/universal-provider": "2.23.2", "valtio": "2.1.7", "viem": ">=2.44.2" } }, "sha512-cUZitQRj/jmFKMxWoPnLPT2ki2SAyYMp4xSmPRKu6XO/OGKSbGa3qKkghDBJ+dJJSDXDywn6Vs98RG0o+V48UA=="], + + "@reown/appkit-pay": ["@reown/appkit-pay@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-ui": "1.8.17", "@reown/appkit-utils": "1.8.17", "lit": "3.3.0", "valtio": "2.1.7" } }, "sha512-+8XEysiNQqB4SVkCHCcoS2raUVPRMGbNMERTbbJLWY7mA/XzaX0PPSGoRm1omqQH5oUYhNwYFnHyEsM8K2t5KA=="], + + "@reown/appkit-polyfills": ["@reown/appkit-polyfills@1.8.17", "", { "dependencies": { "buffer": "6.0.3" } }, "sha512-m46ybIDewkGN+1V+po4+OfxnMkzmBOOch58k8Xo0RuWzfAvDZp7XvXClJvdX4kHpW3Olsq1EgRJYoaW5zCDetQ=="], + + "@reown/appkit-scaffold-ui": ["@reown/appkit-scaffold-ui@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-pay": "1.8.17", "@reown/appkit-ui": "1.8.17", "@reown/appkit-utils": "1.8.17", "@reown/appkit-wallet": "1.8.17", "lit": "3.3.0" } }, "sha512-+P+G1uo5k6psLp/U/JFijPRSgw6duECrvIVYS820+RcZvUg7qPa7Pq22sPfqp09oCXnzqO43ac1quM+paklZBA=="], + + "@reown/appkit-ui": ["@reown/appkit-ui@1.8.17", "", { "dependencies": { "@phosphor-icons/webcomponents": "2.1.5", "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-wallet": "1.8.17", "lit": "3.3.0", "qrcode": "1.5.3" } }, "sha512-F8rcebyN0GQaUIKwpzziS0sFb4IARPVHZiRHugFkXAgZRop9LgvJ/4VvT70UJQCrwTbdZNVjmscR2tk98s1eDA=="], + + "@reown/appkit-utils": ["@reown/appkit-utils@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-polyfills": "1.8.17", "@reown/appkit-wallet": "1.8.17", "@wallet-standard/wallet": "1.1.0", "@walletconnect/logger": "3.0.2", "@walletconnect/universal-provider": "2.23.2", "valtio": "2.1.7", "viem": ">=2.44.2" }, "optionalDependencies": { "@base-org/account": "2.4.0", "@safe-global/safe-apps-provider": "0.18.6", "@safe-global/safe-apps-sdk": "9.1.0" } }, "sha512-Gmi5EjqB0VpvjMQSTsBcM9me+yADQap1OC8Hxhz353hgwti2PKDmmh0qQDUnKr1RMDljD6AHrqOd7U5hTPUi2g=="], + + "@reown/appkit-wallet": ["@reown/appkit-wallet@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-polyfills": "1.8.17", "@walletconnect/logger": "3.0.2", "zod": "3.22.4" } }, "sha512-khuQqHGtCyKSTUlcCnB1Evy1ZLmrU5cUXjP6/zrFYW3m+THnNfr+w6Tp49OfnW1wYsoe53GHzlgTuGASwXYloQ=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.57.0", "", { "os": "android", "cpu": "arm" }, "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.57.0", "", { "os": "android", "cpu": "arm64" }, "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.57.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.57.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.57.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.57.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.57.0", "", { "os": "linux", "cpu": "arm" }, "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.57.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.57.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.57.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.57.0", "", { "os": "linux", "cpu": "none" }, "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.57.0", "", { "os": "linux", "cpu": "none" }, "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.57.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.57.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.57.0", "", { "os": "linux", "cpu": "none" }, "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.57.0", "", { "os": "linux", "cpu": "none" }, "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.57.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.57.0", "", { "os": "linux", "cpu": "x64" }, "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.57.0", "", { "os": "linux", "cpu": "x64" }, "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.57.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.57.0", "", { "os": "none", "cpu": "arm64" }, "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.57.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.57.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.57.0", "", { "os": "win32", "cpu": "x64" }, "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.57.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ=="], + + "@safe-global/safe-apps-provider": ["@safe-global/safe-apps-provider@0.18.6", "", { "dependencies": { "@safe-global/safe-apps-sdk": "^9.1.0", "events": "^3.3.0" } }, "sha512-4LhMmjPWlIO8TTDC2AwLk44XKXaK6hfBTWyljDm0HQ6TWlOEijVWNrt2s3OCVMSxlXAcEzYfqyu1daHZooTC2Q=="], + + "@safe-global/safe-apps-sdk": ["@safe-global/safe-apps-sdk@9.1.0", "", { "dependencies": { "@safe-global/safe-gateway-typescript-sdk": "^3.5.3", "viem": "^2.1.1" } }, "sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q=="], + + "@safe-global/safe-gateway-typescript-sdk": ["@safe-global/safe-gateway-typescript-sdk@3.23.1", "", {}, "sha512-6ORQfwtEJYpalCeVO21L4XXGSdbEMfyp2hEv6cP82afKXSwvse6d3sdelgaPWUxHIsFRkWvHDdzh8IyyKHZKxw=="], + + "@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], + + "@scure/bip32": ["@scure/bip32@1.7.0", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="], + + "@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], + + "@simplewebauthn/browser": ["@simplewebauthn/browser@9.0.1", "", { "dependencies": { "@simplewebauthn/types": "^9.0.1" } }, "sha512-wD2WpbkaEP4170s13/HUxPcAV5y4ZXaKo1TfNklS5zDefPinIgXOpgz1kpEvobAsaLPa2KeH7AKKX/od1mrBJw=="], + + "@simplewebauthn/types": ["@simplewebauthn/types@9.0.1", "", {}, "sha512-tGSRP1QvsAvsJmnOlRQyw/mvK9gnPtjEc5fg2+m8n+QUa+D7rvrKkOYyfpy42GTs90X3RDOnqJgfHt+qO67/+w=="], + + "@solana-program/system": ["@solana-program/system@0.10.0", "", { "peerDependencies": { "@solana/kit": "^5.0" } }, "sha512-Go+LOEZmqmNlfr+Gjy5ZWAdY5HbYzk2RBewD9QinEU/bBSzpFfzqDRT55JjFRBGJUvMgf3C2vfXEGT4i8DSI4g=="], + + "@solana-program/token": ["@solana-program/token@0.9.0", "", { "peerDependencies": { "@solana/kit": "^5.0" } }, "sha512-vnZxndd4ED4Fc56sw93cWZ2djEeeOFxtaPS8SPf5+a+JZjKA/EnKqzbE1y04FuMhIVrLERQ8uR8H2h72eZzlsA=="], + + "@solana/accounts": ["@solana/accounts@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TfOY9xixg5rizABuLVuZ9XI2x2tmWUC/OoN556xwfDlhBHBjKfszicYYOyD6nbFmwTGYarCmyGIdteXxTXIdhQ=="], + + "@solana/addresses": ["@solana/addresses@5.5.1", "", { "dependencies": { "@solana/assertions": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5xoah3Q9G30HQghu/9BiHLb5pzlPKRC3zydQDmE3O9H//WfayxTFppsUDCL6FjYUHqj/wzK6CWHySglc2RkpdA=="], + + "@solana/assertions": ["@solana/assertions@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-YTCSWAlGwSlVPnWtWLm3ukz81wH4j2YaCveK+TjpvUU88hTy6fmUqxi0+hvAMAe4zKXpJyj3Az7BrLJRxbIm4Q=="], + + "@solana/buffer-layout": ["@solana/buffer-layout@4.0.1", "", { "dependencies": { "buffer": "~6.0.3" } }, "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA=="], + + "@solana/codecs": ["@solana/codecs@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/options": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Vea29nJub/bXjfzEV7ZZQ/PWr1pYLZo3z0qW0LQL37uKKVzVFRQlwetd7INk3YtTD3xm9WUYr7bCvYUk3uKy2g=="], + + "@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], + + "@solana/codecs-data-structures": ["@solana/codecs-data-structures@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-97bJWGyUY9WvBz3mX1UV3YPWGDTez6btCfD0ip3UVEXJbItVuUiOkzcO5iFDUtQT5riKT6xC+Mzl+0nO76gd0w=="], + + "@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], + + "@solana/codecs-strings": ["@solana/codecs-strings@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-7klX4AhfHYA+uKKC/nxRGP2MntbYQCR3N6+v7bk1W/rSxYuhNmt+FN8aoThSZtWIKwN6BEyR1167ka8Co1+E7A=="], + + "@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], + + "@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Ni7s2FN33zTzhTFgRjEbOVFO+UAmK8qi3Iu0/GRFYK4jN696OjKHnboSQH/EacQ+yGqS54bfxf409wU5dsLLCw=="], + + "@solana/functional": ["@solana/functional@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-tTHoJcEQq3gQx5qsdsDJ0LEJeFzwNpXD80xApW9o/PPoCNimI3SALkZl+zNW8VnxRrV3l3yYvfHWBKe/X3WG3w=="], + + "@solana/instruction-plans": ["@solana/instruction-plans@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/promises": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-7z3CB7YMcFKuVvgcnNY8bY6IsZ8LG61Iytbz7HpNVGX2u1RthOs1tRW8luTzSG1MPL0Ox7afyAVMYeFqSPHnaQ=="], + + "@solana/instructions": ["@solana/instructions@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h0G1CG6S+gUUSt0eo6rOtsaXRBwCq1+Js2a+Ps9Bzk9q7YHNFA75/X0NWugWLgC92waRp66hrjMTiYYnLBoWOQ=="], + + "@solana/keys": ["@solana/keys@5.5.1", "", { "dependencies": { "@solana/assertions": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-KRD61cL7CRL+b4r/eB9dEoVxIf/2EJ1Pm1DmRYhtSUAJD2dJ5Xw8QFuehobOGm9URqQ7gaQl+Fkc1qvDlsWqKg=="], + + "@solana/kit": ["@solana/kit@5.5.1", "", { "dependencies": { "@solana/accounts": "5.5.1", "@solana/addresses": "5.5.1", "@solana/codecs": "5.5.1", "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/instruction-plans": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/offchain-messages": "5.5.1", "@solana/plugin-core": "5.5.1", "@solana/programs": "5.5.1", "@solana/rpc": "5.5.1", "@solana/rpc-api": "5.5.1", "@solana/rpc-parsed-types": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-subscriptions": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/signers": "5.5.1", "@solana/sysvars": "5.5.1", "@solana/transaction-confirmation": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-irKUGiV2yRoyf+4eGQ/ZeCRxa43yjFEL1DUI5B0DkcfZw3cr0VJtVJnrG8OtVF01vT0OUfYOcUn6zJW5TROHvQ=="], + + "@solana/nominal-types": ["@solana/nominal-types@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-I1ImR+kfrLFxN5z22UDiTWLdRZeKtU0J/pkWkO8qm/8WxveiwdIv4hooi8pb6JnlR4mSrWhq0pCIOxDYrL9GIQ=="], + + "@solana/offchain-messages": ["@solana/offchain-messages@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/keys": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-g+xHH95prTU+KujtbOzj8wn+C7ZNoiLhf3hj6nYq3MTyxOXtBEysguc97jJveUZG0K97aIKG6xVUlMutg5yxhw=="], + + "@solana/options": ["@solana/options@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-eo971c9iLNLmk+yOFyo7yKIJzJ/zou6uKpy6mBuyb/thKtS/haiKIc3VLhyTXty3OH2PW8yOlORJnv4DexJB8A=="], + + "@solana/plugin-core": ["@solana/plugin-core@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-VUZl30lDQFJeiSyNfzU1EjYt2QZvoBFKEwjn1lilUJw7KgqD5z7mbV7diJhT+dLFs36i0OsjXvq5kSygn8YJ3A=="], + + "@solana/programs": ["@solana/programs@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-7U9kn0Jsx1NuBLn5HRTFYh78MV4XN145Yc3WP/q5BlqAVNlMoU9coG5IUTJIG847TUqC1lRto3Dnpwm6T4YRpA=="], + + "@solana/promises": ["@solana/promises@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-T9lfuUYkGykJmppEcssNiCf6yiYQxJkhiLPP+pyAc2z84/7r3UVIb2tNJk4A9sucS66pzJnVHZKcZVGUUp6wzA=="], + + "@solana/rpc": ["@solana/rpc@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/fast-stable-stringify": "5.5.1", "@solana/functional": "5.5.1", "@solana/rpc-api": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-transport-http": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ku8zTUMrkCWci66PRIBC+1mXepEnZH/q1f3ck0kJZ95a06bOTl5KU7HeXWtskkyefzARJ5zvCs54AD5nxjQJ+A=="], + + "@solana/rpc-api": ["@solana/rpc-api@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/keys": "5.5.1", "@solana/rpc-parsed-types": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XWOQQPhKl06Vj0xi3RYHAc6oEQd8B82okYJ04K7N0Vvy3J4PN2cxeK7klwkjgavdcN9EVkYCChm2ADAtnztKnA=="], + + "@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HEi3G2nZqGEsa3vX6U0FrXLaqnUCg4SKIUrOe8CezD+cSFbRTOn3rCLrUmJrhVyXlHoQVaRO9mmeovk31jWxJg=="], + + "@solana/rpc-spec": ["@solana/rpc-spec@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/rpc-spec-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-m3LX2bChm3E3by4mQrH4YwCAFY57QBzuUSWqlUw7ChuZ+oLLOq7b2czi4i6L4Vna67j3eCmB3e+4tqy1j5wy7Q=="], + + "@solana/rpc-spec-types": ["@solana/rpc-spec-types@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-6OFKtRpIEJQs8Jb2C4OO8KyP2h2Hy1MFhatMAoXA+0Ik8S3H+CicIuMZvGZ91mIu/tXicuOOsNNLu3HAkrakrw=="], + + "@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/fast-stable-stringify": "5.5.1", "@solana/functional": "5.5.1", "@solana/promises": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-subscriptions-api": "5.5.1", "@solana/rpc-subscriptions-channel-websocket": "5.5.1", "@solana/rpc-subscriptions-spec": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/subscribable": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CTMy5bt/6mDh4tc6vUJms9EcuZj3xvK0/xq8IQ90rhkpYvate91RjBP+egvjgSayUg9yucU9vNuUpEjz4spM7w=="], + + "@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/keys": "5.5.1", "@solana/rpc-subscriptions-spec": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5Oi7k+GdeS8xR2ly1iuSFkAv6CZqwG0Z6b1QZKbEgxadE1XGSDrhM2cn59l+bqCozUWCqh4c/A2znU/qQjROlw=="], + + "@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/rpc-subscriptions-spec": "5.5.1", "@solana/subscribable": "5.5.1", "ws": "^8.19.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-7tGfBBrYY8TrngOyxSHoCU5shy86iA9SRMRrPSyBhEaZRAk6dnbdpmUTez7gtdVo0BCvh9nzQtUycKWSS7PnFQ=="], + + "@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/promises": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/subscribable": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iq+rGq5fMKP3/mKHPNB6MC8IbVW41KGZg83Us/+LE3AWOTWV1WT20KT2iH1F1ik9roi42COv/TpoZZvhKj45XQ=="], + + "@solana/rpc-transformers": ["@solana/rpc-transformers@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-OsWqLCQdcrRJKvHiMmwFhp9noNZ4FARuMkHT5us3ustDLXaxOjF0gfqZLnMkulSLcKt7TGXqMhBV+HCo7z5M8Q=="], + + "@solana/rpc-transport-http": ["@solana/rpc-transport-http@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "undici-types": "^7.19.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-yv8GoVSHqEV0kUJEIhkdOVkR2SvJ6yoWC51cJn2rSV7plr6huLGe0JgujCmB7uZhhaLbcbP3zxXxu9sOjsi7Fg=="], + + "@solana/rpc-types": ["@solana/rpc-types@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-bibTFQ7PbHJJjGJPmfYC2I+/5CRFS4O2p9WwbFraX1Keeel+nRrt/NBXIy8veP5AEn2sVJIyJPpWBRpCx1oATA=="], + + "@solana/signers": ["@solana/signers@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/offchain-messages": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-FY0IVaBT2kCAze55vEieR6hag4coqcuJ31Aw3hqRH7mv6sV8oqwuJmUrx+uFwOp1gwd5OEAzlv6N4hOOple4sQ=="], + + "@solana/subscribable": ["@solana/subscribable@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-9K0PsynFq0CsmK1CDi5Y2vUIJpCqkgSS5yfDN0eKPgHqEptLEaia09Kaxc90cSZDZU5mKY/zv1NBmB6Aro9zQQ=="], + + "@solana/sysvars": ["@solana/sysvars@5.5.1", "", { "dependencies": { "@solana/accounts": "5.5.1", "@solana/codecs": "5.5.1", "@solana/errors": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k3Quq87Mm+geGUu1GWv6knPk0ALsfY6EKSJGw9xUJDHzY/RkYSBnh0RiOrUhtFm2TDNjOailg8/m0VHmi3reFA=="], + + "@solana/transaction-confirmation": ["@solana/transaction-confirmation@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/keys": "5.5.1", "@solana/promises": "5.5.1", "@solana/rpc": "5.5.1", "@solana/rpc-subscriptions": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-j4mKlYPHEyu+OD7MBt3jRoX4ScFgkhZC6H65on4Fux6LMScgivPJlwnKoZMnsgxFgWds0pl+BYzSiALDsXlYtw=="], + + "@solana/transaction-messages": ["@solana/transaction-messages@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/instructions": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-aXyhMCEaAp3M/4fP0akwBBQkFPr4pfwoC5CLDq999r/FUwDax2RE/h4Ic7h2Xk+JdcUwsb+rLq85Y52hq84XvQ=="], + + "@solana/transactions": ["@solana/transactions@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-8hHtDxtqalZ157pnx6p8k10D7J/KY/biLzfgh9R09VNLLY3Fqi7kJvJCr7M2ik3oRll56pxhraAGCC9yIT6eOA=="], + + "@solana/wallet-adapter-base": ["@solana/wallet-adapter-base@0.9.23", "", { "dependencies": { "@solana/wallet-standard-features": "^1.1.0", "@wallet-standard/base": "^1.0.1", "@wallet-standard/features": "^1.0.3", "eventemitter3": "^4.0.7" }, "peerDependencies": { "@solana/web3.js": "^1.77.3" } }, "sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw=="], + + "@solana/wallet-standard-chains": ["@solana/wallet-standard-chains@1.1.1", "", { "dependencies": { "@wallet-standard/base": "^1.1.0" } }, "sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw=="], + + "@solana/wallet-standard-features": ["@solana/wallet-standard-features@1.3.0", "", { "dependencies": { "@wallet-standard/base": "^1.1.0", "@wallet-standard/features": "^1.1.0" } }, "sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg=="], + + "@solana/wallet-standard-util": ["@solana/wallet-standard-util@1.1.2", "", { "dependencies": { "@noble/curves": "^1.8.0", "@solana/wallet-standard-chains": "^1.1.1", "@solana/wallet-standard-features": "^1.3.0" } }, "sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA=="], + + "@solana/wallet-standard-wallet-adapter-base": ["@solana/wallet-standard-wallet-adapter-base@1.1.4", "", { "dependencies": { "@solana/wallet-adapter-base": "^0.9.23", "@solana/wallet-standard-chains": "^1.1.1", "@solana/wallet-standard-features": "^1.3.0", "@solana/wallet-standard-util": "^1.1.2", "@wallet-standard/app": "^1.1.0", "@wallet-standard/base": "^1.1.0", "@wallet-standard/features": "^1.1.0", "@wallet-standard/wallet": "^1.1.0" }, "peerDependencies": { "@solana/web3.js": "^1.98.0", "bs58": "^6.0.0" } }, "sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw=="], + + "@solana/wallet-standard-wallet-adapter-react": ["@solana/wallet-standard-wallet-adapter-react@1.1.4", "", { "dependencies": { "@solana/wallet-standard-wallet-adapter-base": "^1.1.4", "@wallet-standard/app": "^1.1.0", "@wallet-standard/base": "^1.1.0" }, "peerDependencies": { "@solana/wallet-adapter-base": "*", "react": "*" } }, "sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg=="], + + "@solana/web3.js": ["@solana/web3.js@1.98.4", "", { "dependencies": { "@babel/runtime": "^7.25.0", "@noble/curves": "^1.4.2", "@noble/hashes": "^1.4.0", "@solana/buffer-layout": "^4.0.1", "@solana/codecs-numbers": "^2.1.0", "agentkeepalive": "^4.5.0", "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": "^9.0.2", "superstruct": "^2.0.2" } }, "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw=="], + + "@swc/core": ["@swc/core@1.15.11", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.15.11", "@swc/core-darwin-x64": "1.15.11", "@swc/core-linux-arm-gnueabihf": "1.15.11", "@swc/core-linux-arm64-gnu": "1.15.11", "@swc/core-linux-arm64-musl": "1.15.11", "@swc/core-linux-x64-gnu": "1.15.11", "@swc/core-linux-x64-musl": "1.15.11", "@swc/core-win32-arm64-msvc": "1.15.11", "@swc/core-win32-ia32-msvc": "1.15.11", "@swc/core-win32-x64-msvc": "1.15.11" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w=="], + + "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.15.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg=="], + + "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.15.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA=="], + + "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.15.11", "", { "os": "linux", "cpu": "arm" }, "sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg=="], + + "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.15.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA=="], + + "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.15.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w=="], + + "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.15.11", "", { "os": "linux", "cpu": "x64" }, "sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ=="], + + "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.15.11", "", { "os": "linux", "cpu": "x64" }, "sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw=="], + + "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.15.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA=="], + + "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.15.11", "", { "os": "win32", "cpu": "ia32" }, "sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw=="], + + "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.15.11", "", { "os": "win32", "cpu": "x64" }, "sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw=="], + + "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], + + "@swc/helpers": ["@swc/helpers@0.5.18", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ=="], + + "@swc/types": ["@swc/types@0.1.25", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.1.18", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.18" } }, "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.18", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.18", "@tailwindcss/oxide-darwin-arm64": "4.1.18", "@tailwindcss/oxide-darwin-x64": "4.1.18", "@tailwindcss/oxide-freebsd-x64": "4.1.18", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", "@tailwindcss/oxide-linux-x64-musl": "4.1.18", "@tailwindcss/oxide-wasm32-wasi": "4.1.18", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" } }, "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.18", "", { "os": "android", "cpu": "arm64" }, "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.18", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.18", "", { "os": "darwin", "cpu": "x64" }, "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.18", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18", "", { "os": "linux", "cpu": "arm" }, "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.18", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.0", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.18", "", { "os": "win32", "cpu": "arm64" }, "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.18", "", { "os": "win32", "cpu": "x64" }, "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.1.18", "", { "dependencies": { "@tailwindcss/node": "4.1.18", "@tailwindcss/oxide": "4.1.18", "tailwindcss": "4.1.18" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA=="], + + "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.18", "", { "dependencies": { "@tanstack/virtual-core": "3.13.18" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-dZkhyfahpvlaV0rIKnvQiVoWPyURppl6w4m9IwMDpuIjcJ1sD9YGWrt0wISvgU7ewACXx2Ct46WPgI6qAD4v6A=="], + + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.18", "", {}, "sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg=="], + + "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], + + "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + + "@types/node": ["@types/node@22.19.7", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw=="], + + "@types/react": ["@types/react@19.2.10", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw=="], + + "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + + "@types/stylis": ["@types/stylis@4.2.7", "", {}, "sha512-VgDNokpBoKF+wrdvhAAfS55OMQpL6QRglwTwNC3kIgBrzZxA4WsFj+2eLfEA/uMUDzBcEhYmjSbwQakn/i3ajA=="], + + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], + + "@types/uuid": ["@types/uuid@8.3.4", "", {}, "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw=="], + + "@types/ws": ["@types/ws@7.4.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.54.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.54.0", "@typescript-eslint/type-utils": "8.54.0", "@typescript-eslint/utils": "8.54.0", "@typescript-eslint/visitor-keys": "8.54.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.54.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.54.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.54.0", "@typescript-eslint/types": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0", "@typescript-eslint/visitor-keys": "8.54.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA=="], + + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.54.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.54.0", "@typescript-eslint/types": "^8.54.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.54.0", "", { "dependencies": { "@typescript-eslint/types": "8.54.0", "@typescript-eslint/visitor-keys": "8.54.0" } }, "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg=="], + + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.54.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.54.0", "", { "dependencies": { "@typescript-eslint/types": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0", "@typescript-eslint/utils": "8.54.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.54.0", "", {}, "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.54.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.54.0", "@typescript-eslint/tsconfig-utils": "8.54.0", "@typescript-eslint/types": "8.54.0", "@typescript-eslint/visitor-keys": "8.54.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.54.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.54.0", "@typescript-eslint/types": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.54.0", "", { "dependencies": { "@typescript-eslint/types": "8.54.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA=="], + + "@vitejs/plugin-react-swc": ["@vitejs/plugin-react-swc@3.11.0", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.27", "@swc/core": "^1.12.11" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7" } }, "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w=="], + + "@wallet-standard/app": ["@wallet-standard/app@1.1.0", "", { "dependencies": { "@wallet-standard/base": "^1.1.0" } }, "sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ=="], + + "@wallet-standard/base": ["@wallet-standard/base@1.1.0", "", {}, "sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ=="], + + "@wallet-standard/features": ["@wallet-standard/features@1.1.0", "", { "dependencies": { "@wallet-standard/base": "^1.1.0" } }, "sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg=="], + + "@wallet-standard/wallet": ["@wallet-standard/wallet@1.1.0", "", { "dependencies": { "@wallet-standard/base": "^1.1.0" } }, "sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg=="], + + "@walletconnect/core": ["@walletconnect/core@2.21.7", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.7", "@walletconnect/utils": "2.21.7", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.39.3", "events": "3.3.0", "uint8arrays": "3.1.1" } }, "sha512-q/Au5Ne3g4R+q4GvHR5cvRd3+ha00QZCZiCs058lmy+eDbiZd0YsautvTPJ5a2guD6UaS1k/w5e1JHgixdcgLA=="], + + "@walletconnect/environment": ["@walletconnect/environment@1.0.1", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg=="], + + "@walletconnect/ethereum-provider": ["@walletconnect/ethereum-provider@2.21.7", "", { "dependencies": { "@reown/appkit": "1.7.8", "@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/keyvaluestorage": "1.1.1", "@walletconnect/sign-client": "2.21.7", "@walletconnect/types": "2.21.7", "@walletconnect/universal-provider": "2.21.7", "@walletconnect/utils": "2.21.7", "events": "3.3.0" } }, "sha512-T+cBFCw095tDpR35WqwsTFod2ZsizmLfieSbTqpQDpNjhQyFwYf9d+tn2kcBFmxzENXAsWA8BIZK1tjRrXKtog=="], + + "@walletconnect/events": ["@walletconnect/events@1.0.1", "", { "dependencies": { "keyvaluestorage-interface": "^1.0.0", "tslib": "1.14.1" } }, "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ=="], + + "@walletconnect/heartbeat": ["@walletconnect/heartbeat@1.2.2", "", { "dependencies": { "@walletconnect/events": "^1.0.1", "@walletconnect/time": "^1.0.2", "events": "^3.3.0" } }, "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw=="], + + "@walletconnect/jsonrpc-http-connection": ["@walletconnect/jsonrpc-http-connection@1.0.8", "", { "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.6", "@walletconnect/safe-json": "^1.0.1", "cross-fetch": "^3.1.4", "events": "^3.3.0" } }, "sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw=="], + + "@walletconnect/jsonrpc-provider": ["@walletconnect/jsonrpc-provider@1.0.14", "", { "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.8", "@walletconnect/safe-json": "^1.0.2", "events": "^3.3.0" } }, "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow=="], + + "@walletconnect/jsonrpc-types": ["@walletconnect/jsonrpc-types@1.0.4", "", { "dependencies": { "events": "^3.3.0", "keyvaluestorage-interface": "^1.0.0" } }, "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ=="], + + "@walletconnect/jsonrpc-utils": ["@walletconnect/jsonrpc-utils@1.0.8", "", { "dependencies": { "@walletconnect/environment": "^1.0.1", "@walletconnect/jsonrpc-types": "^1.0.3", "tslib": "1.14.1" } }, "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw=="], + + "@walletconnect/jsonrpc-ws-connection": ["@walletconnect/jsonrpc-ws-connection@1.0.16", "", { "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.6", "@walletconnect/safe-json": "^1.0.2", "events": "^3.3.0", "ws": "^7.5.1" } }, "sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q=="], + + "@walletconnect/keyvaluestorage": ["@walletconnect/keyvaluestorage@1.1.1", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.1", "idb-keyval": "^6.2.1", "unstorage": "^1.9.0" }, "peerDependencies": { "@react-native-async-storage/async-storage": "1.x" }, "optionalPeers": ["@react-native-async-storage/async-storage"] }, "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA=="], + + "@walletconnect/logger": ["@walletconnect/logger@3.0.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "10.0.0" } }, "sha512-7wR3wAwJTOmX4gbcUZcFMov8fjftY05+5cO/d4cpDD8wDzJ+cIlKdYOXaXfxHLSYeDazMXIsxMYjHYVDfkx+nA=="], + + "@walletconnect/relay-api": ["@walletconnect/relay-api@1.0.11", "", { "dependencies": { "@walletconnect/jsonrpc-types": "^1.0.2" } }, "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q=="], + + "@walletconnect/relay-auth": ["@walletconnect/relay-auth@1.1.0", "", { "dependencies": { "@noble/curves": "1.8.0", "@noble/hashes": "1.7.0", "@walletconnect/safe-json": "^1.0.1", "@walletconnect/time": "^1.0.2", "uint8arrays": "^3.0.0" } }, "sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ=="], + + "@walletconnect/safe-json": ["@walletconnect/safe-json@1.0.2", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA=="], + + "@walletconnect/sign-client": ["@walletconnect/sign-client@2.21.7", "", { "dependencies": { "@walletconnect/core": "2.21.7", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.7", "@walletconnect/utils": "2.21.7", "events": "3.3.0" } }, "sha512-9k/JEl9copR6nXRhqnmzWz2Zk1hiWysH+o6bp6Cqo8TgDUrZoMLBZMZ6qbo+2HLI54V02kKf0Vg8M81nNFOpjQ=="], + + "@walletconnect/time": ["@walletconnect/time@1.0.2", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g=="], + + "@walletconnect/types": ["@walletconnect/types@2.21.7", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-kyGnFje4Iq+XGkZZcSoAIrJWBE4BeghVW4O7n9e1MhUyeOOtO55M/kcqceNGYrvwjHvdN+Kf+aoLnKC0zKlpbQ=="], + + "@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.23.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@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/keyvaluestorage": "1.1.1", "@walletconnect/logger": "3.0.2", "@walletconnect/sign-client": "2.23.2", "@walletconnect/types": "2.23.2", "@walletconnect/utils": "2.23.2", "es-toolkit": "1.39.3", "events": "3.3.0" } }, "sha512-vs9iorPUAiVesFJ95O6XvLjmRgF+B2TspxJNL90ZULbrkRw4JFsmaRdb965PZKc+s182k1MkS/MQ0o964xRcEw=="], + + "@walletconnect/utils": ["@walletconnect/utils@2.21.7", "", { "dependencies": { "@msgpack/msgpack": "3.1.2", "@noble/ciphers": "1.3.0", "@noble/curves": "1.9.2", "@noble/hashes": "1.8.0", "@scure/base": "1.2.6", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.7", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "blakejs": "1.2.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "query-string": "7.1.3", "uint8arrays": "3.1.1", "viem": "2.31.0" } }, "sha512-qyaclTgcFf9AwVuoV8CLLg8wfH3nX7yZdpylNkDqCpS7wawQL9zmFFTaGgma8sQrCsd3Sd9jUIymcpRvCJnSTw=="], + + "@walletconnect/window-getters": ["@walletconnect/window-getters@1.0.1", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q=="], + + "@walletconnect/window-metadata": ["@walletconnect/window-metadata@1.0.1", "", { "dependencies": { "@walletconnect/window-getters": "^1.0.1", "tslib": "1.14.1" } }, "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA=="], + + "abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], + + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], + + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], + + "axios": ["axios@1.13.4", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg=="], + + "axios-retry": ["axios-retry@4.5.0", "", { "dependencies": { "is-retry-allowed": "^2.2.0" }, "peerDependencies": { "axios": "0.x || 1.x" } }, "sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base-x": ["base-x@4.0.1", "", {}, "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "bech32": ["bech32@1.1.4", "", {}, "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="], + + "big.js": ["big.js@6.2.2", "", {}, "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ=="], + + "blakejs": ["blakejs@1.2.1", "", {}, "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ=="], + + "bn.js": ["bn.js@5.2.2", "", {}, "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw=="], + + "borsh": ["borsh@0.7.0", "", { "dependencies": { "bn.js": "^5.2.0", "bs58": "^4.0.0", "text-encoding-utf-8": "^1.0.2" } }, "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA=="], + + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "brorand": ["brorand@1.1.0", "", {}, "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="], + + "bs58": ["bs58@5.0.0", "", { "dependencies": { "base-x": "^4.0.0" } }, "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ=="], + + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "bufferutil": ["bufferutil@4.1.0", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + + "camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="], + + "canonicalize": ["canonicalize@2.1.0", "", { "bin": { "canonicalize": "bin/canonicalize.js" } }, "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "charenc": ["charenc@0.0.2", "", {}, "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="], + + "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], + + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], + + "cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], + + "crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="], + + "cross-fetch": ["cross-fetch@3.2.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], + + "crypt": ["crypt@0.0.2", "", {}, "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="], + + "css-color-keywords": ["css-color-keywords@1.0.0", "", {}, "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg=="], + + "css-to-react-native": ["css-to-react-native@3.2.0", "", { "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", "postcss-value-parser": "^4.0.2" } }, "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "dateformat": ["dateformat@4.6.3", "", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="], + + "dayjs": ["dayjs@1.11.13", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], + + "decode-uri-component": ["decode-uri-component@0.2.2", "", {}, "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + + "delay": ["delay@5.0.0", "", {}, "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "derive-valtio": ["derive-valtio@0.1.0", "", { "peerDependencies": { "valtio": "*" } }, "sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A=="], + + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + + "detect-browser": ["detect-browser@5.3.0", "", {}, "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], + + "dijkstrajs": ["dijkstrajs@1.0.3", "", {}, "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="], + + "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "duplexify": ["duplexify@4.1.3", "", { "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.2" } }, "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA=="], + + "elliptic": ["elliptic@6.6.1", "", { "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "encode-utf8": ["encode-utf8@1.0.3", "", {}, "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="], + + "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], + + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + + "enhanced-resolve": ["enhanced-resolve@5.18.4", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "es-toolkit": ["es-toolkit@1.39.3", "", {}, "sha512-Qb/TCFCldgOy8lZ5uC7nLGdqJwSabkQiYQShmw4jyiPk1pZzaYWTwaYKYP7EgLccWYgZocMrtItrwh683voaww=="], + + "es6-promise": ["es6-promise@4.2.8", "", {}, "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="], + + "es6-promisify": ["es6-promisify@5.0.0", "", { "dependencies": { "es6-promise": "^4.0.3" } }, "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ=="], + + "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@9.39.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw=="], + + "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.2.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg=="], + + "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.26", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ=="], + + "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + + "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], + + "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "ethereum-cryptography": ["ethereum-cryptography@2.2.1", "", { "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", "@scure/bip32": "1.4.0", "@scure/bip39": "1.3.0" } }, "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg=="], + + "ethjs-util": ["ethjs-util@0.1.6", "", { "dependencies": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" } }, "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w=="], + + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], + + "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], + + "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + + "eyes": ["eyes@0.1.8", "", {}, "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ=="], + + "fast-copy": ["fast-copy@3.0.2", "", {}, "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fast-password-entropy": ["fast-password-entropy@1.1.1", "", {}, "sha512-dxm29/BPFrNgyEDygg/lf9c2xQR0vnQhG7+hZjAI39M/3um9fD4xiqG6F0ZjW6bya5m9CI0u6YryHGRtxCGCiw=="], + + "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], + + "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], + + "fast-stable-stringify": ["fast-stable-stringify@1.0.0", "", {}, "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fetch-retry": ["fetch-retry@6.0.0", "", {}, "sha512-BUFj1aMubgib37I3v4q78fYo63Po7t4HUPTpQ6/QE6yK6cIQrP+W43FYToeTEyg5m2Y7eFUtijUuAv/PDlWuag=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "filter-obj": ["filter-obj@1.1.0", "", {}, "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + + "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "globals": ["globals@15.15.0", "", {}, "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "h3": ["h3@1.15.5", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hash.js": ["hash.js@1.1.7", "", { "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "help-me": ["help-me@5.0.0", "", {}, "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg=="], + + "hmac-drbg": ["hmac-drbg@1.0.1", "", { "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg=="], + + "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "idb-keyval": ["idb-keyval@6.2.1", "", {}, "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], + + "is-buffer": ["is-buffer@1.1.6", "", {}, "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-hex-prefixed": ["is-hex-prefixed@1.0.0", "", {}, "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA=="], + + "is-retry-allowed": ["is-retry-allowed@2.2.0", "", {}, "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "isomorphic-ws": ["isomorphic-ws@4.0.1", "", { "peerDependencies": { "ws": "*" } }, "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w=="], + + "isows": ["isows@1.0.7", "", { "peerDependencies": { "ws": "*" } }, "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg=="], + + "jayson": ["jayson@4.3.0", "", { "dependencies": { "@types/connect": "^3.4.33", "@types/node": "^12.12.54", "@types/ws": "^7.4.4", "commander": "^2.20.3", "delay": "^5.0.0", "es6-promisify": "^5.0.0", "eyes": "^0.1.8", "isomorphic-ws": "^4.0.1", "json-stringify-safe": "^5.0.1", "stream-json": "^1.9.1", "uuid": "^8.3.2", "ws": "^7.5.10" }, "bin": { "jayson": "bin/jayson.js" } }, "sha512-AauzHcUcqs8OBnCHOkJY280VaTiCm57AbuO7lqzcw7JapGj50BisE3xhksye4zlTSR1+1tAz67wLTl8tEH1obQ=="], + + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + + "jose": ["jose@4.15.9", "", {}, "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA=="], + + "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], + + "js-cookie": ["js-cookie@3.0.5", "", {}, "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="], + + "js-sha3": ["js-sha3@0.8.0", "", {}, "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="], + + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "keyvaluestorage-interface": ["keyvaluestorage-interface@1.0.0", "", {}, "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "libphonenumber-js": ["libphonenumber-js@1.12.35", "", {}, "sha512-T/Cz6iLcsZdb5jDncDcUNhSAJ0VlSC9TnsqtBNdpkaAmy24/R1RhErtNWVWBrcUZKs9hSgaVsBkc7HxYnazIfw=="], + + "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="], + + "lit": ["lit@3.3.0", "", { "dependencies": { "@lit/reactive-element": "^2.1.0", "lit-element": "^4.2.0", "lit-html": "^3.3.0" } }, "sha512-DGVsqsOIHBww2DqnuZzW7QsuCdahp50ojuDaBPC7jUDRpYoH0z7kHBBYZewRzer75FwtrkmkKk7iOAwSaWdBmw=="], + + "lit-element": ["lit-element@4.2.2", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.5.0", "@lit/reactive-element": "^2.1.0", "lit-html": "^3.3.0" } }, "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w=="], + + "lit-html": ["lit-html@3.3.2", "", { "dependencies": { "@types/trusted-types": "^2.0.2" } }, "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "lokijs": ["lokijs@1.5.12", "", {}, "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q=="], + + "lru-cache": ["lru-cache@11.2.5", "", {}, "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw=="], + + "lucide-react": ["lucide-react@0.484.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-oZy8coK9kZzvqhSgfbGkPtTgyjpBvs3ukLgDPv14dSOZtBtboryWF5o8i3qen7QbGg7JhiJBz5mK1p8YoMZTLQ=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "md5": ["md5@2.3.0", "", { "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", "is-buffer": "~1.1.6" } }, "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g=="], + + "micro-ftch": ["micro-ftch@0.3.1", "", {}, "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], + + "minimalistic-crypto-utils": ["minimalistic-crypto-utils@1.0.1", "", {}, "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "mipd": ["mipd@0.0.7", "", { "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "multiformats": ["multiformats@9.9.0", "", {}, "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], + + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + + "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], + + "node-mock-http": ["node-mock-http@1.0.4", "", {}, "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], + + "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "ox": ["ox@0.10.5", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-mXJRiZswmX46abrzNkJpTN9sPJ/Rhevsp5Dfg0z80D55aoLNmEV4oN+/+feSNW593c2CnHavMqSVBanpJ0lUkQ=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "pino": ["pino@10.0.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "slow-redact": "^0.3.0", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-eI9pKwWEix40kfvSzqEP6ldqOoBIN7dwD/o91TY5z8vQI12sAffpR/pOqAD1IVVwIVHDpHjkq0joBPdJD0rafA=="], + + "pino-abstract-transport": ["pino-abstract-transport@1.2.0", "", { "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" } }, "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q=="], + + "pino-pretty": ["pino-pretty@10.3.1", "", { "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", "fast-copy": "^3.0.0", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^1.0.0", "pump": "^3.0.0", "readable-stream": "^4.0.0", "secure-json-parse": "^2.4.0", "sonic-boom": "^3.0.0", "strip-json-comments": "^3.1.1" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g=="], + + "pino-std-serializers": ["pino-std-serializers@7.1.0", "", {}, "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="], + + "pngjs": ["pngjs@5.0.0", "", {}, "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "preact": ["preact@10.24.2", "", {}, "sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], + + "process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="], + + "proxy-compare": ["proxy-compare@3.0.1", "", {}, "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q=="], + + "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + + "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "qrcode": ["qrcode@1.5.4", "", { "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="], + + "query-string": ["query-string@7.1.3", "", { "dependencies": { "decode-uri-component": "^0.2.2", "filter-obj": "^1.1.0", "split-on-first": "^1.0.0", "strict-uri-encode": "^2.0.0" } }, "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg=="], + + "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], + + "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], + + "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], + + "react-device-detect": ["react-device-detect@2.2.3", "", { "dependencies": { "ua-parser-js": "^1.0.33" }, "peerDependencies": { "react": ">= 0.14.0", "react-dom": ">= 0.14.0" } }, "sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw=="], + + "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], + + "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], + + "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], + + "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], + + "readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + + "readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + + "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "require-main-filename": ["require-main-filename@2.0.0", "", {}, "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="], + + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "rollup": ["rollup@4.57.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.57.0", "@rollup/rollup-android-arm64": "4.57.0", "@rollup/rollup-darwin-arm64": "4.57.0", "@rollup/rollup-darwin-x64": "4.57.0", "@rollup/rollup-freebsd-arm64": "4.57.0", "@rollup/rollup-freebsd-x64": "4.57.0", "@rollup/rollup-linux-arm-gnueabihf": "4.57.0", "@rollup/rollup-linux-arm-musleabihf": "4.57.0", "@rollup/rollup-linux-arm64-gnu": "4.57.0", "@rollup/rollup-linux-arm64-musl": "4.57.0", "@rollup/rollup-linux-loong64-gnu": "4.57.0", "@rollup/rollup-linux-loong64-musl": "4.57.0", "@rollup/rollup-linux-ppc64-gnu": "4.57.0", "@rollup/rollup-linux-ppc64-musl": "4.57.0", "@rollup/rollup-linux-riscv64-gnu": "4.57.0", "@rollup/rollup-linux-riscv64-musl": "4.57.0", "@rollup/rollup-linux-s390x-gnu": "4.57.0", "@rollup/rollup-linux-x64-gnu": "4.57.0", "@rollup/rollup-linux-x64-musl": "4.57.0", "@rollup/rollup-openbsd-x64": "4.57.0", "@rollup/rollup-openharmony-arm64": "4.57.0", "@rollup/rollup-win32-arm64-msvc": "4.57.0", "@rollup/rollup-win32-ia32-msvc": "4.57.0", "@rollup/rollup-win32-x64-gnu": "4.57.0", "@rollup/rollup-win32-x64-msvc": "4.57.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA=="], + + "rpc-websockets": ["rpc-websockets@9.3.3", "", { "dependencies": { "@swc/helpers": "^0.5.11", "@types/uuid": "^8.3.4", "@types/ws": "^8.2.2", "buffer": "^6.0.3", "eventemitter3": "^5.0.1", "uuid": "^8.3.2", "ws": "^8.5.0" }, "optionalDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" } }, "sha512-OkCsBBzrwxX4DoSv4Zlf9DgXKRB0MzVfCFg5MC+fNnf9ktr4SMWjsri0VNZQlDbCnGcImT6KNEv4ZoxktQhdpA=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + + "secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], + + "secure-password-utilities": ["secure-password-utilities@0.2.1", "", {}, "sha512-znUg8ae3cpuAaogiFBhP82gD2daVkSz4Qv/L7OWjB7wWvfbCdeqqQuJkm2/IvhKQPOV0T739YPR6rb7vs0uWaw=="], + + "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + + "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], + + "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], + + "shallowequal": ["shallowequal@1.1.0", "", {}, "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "slow-redact": ["slow-redact@0.3.2", "", {}, "sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw=="], + + "sonic-boom": ["sonic-boom@3.8.1", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg=="], + + "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "split-on-first": ["split-on-first@1.1.0", "", {}, "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="], + + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + + "stream-chain": ["stream-chain@2.2.5", "", {}, "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA=="], + + "stream-json": ["stream-json@1.9.1", "", { "dependencies": { "stream-chain": "^2.2.5" } }, "sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw=="], + + "stream-shift": ["stream-shift@1.0.3", "", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="], + + "strict-uri-encode": ["strict-uri-encode@2.0.0", "", {}, "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-hex-prefix": ["strip-hex-prefix@1.0.0", "", { "dependencies": { "is-hex-prefixed": "1.0.0" } }, "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "styled-components": ["styled-components@6.3.8", "", { "dependencies": { "@emotion/is-prop-valid": "1.4.0", "@emotion/unitless": "0.10.0", "@types/stylis": "4.2.7", "css-to-react-native": "3.2.0", "csstype": "3.2.3", "postcss": "8.4.49", "shallowequal": "1.1.0", "stylis": "4.3.6", "tslib": "2.8.1" }, "peerDependencies": { "react": ">= 16.8.0", "react-dom": ">= 16.8.0" }, "optionalPeers": ["react-dom"] }, "sha512-Kq/W41AKQloOqKM39zfaMdJ4BcYDw/N5CIq4/GTI0YjU6pKcZ1KKhk6b4du0a+6RA9pIfOP/eu94Ge7cu+PDCA=="], + + "stylis": ["stylis@4.3.6", "", {}, "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="], + + "superstruct": ["superstruct@1.0.4", "", {}, "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], + + "tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="], + + "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], + + "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + + "text-encoding-utf-8": ["text-encoding-utf-8@1.0.2", "", {}, "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg=="], + + "thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="], + + "tinycolor2": ["tinycolor2@1.6.0", "", {}, "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + + "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], + + "tweetnacl": ["tweetnacl@1.0.3", "", {}, "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="], + + "tweetnacl-util": ["tweetnacl-util@0.15.1", "", {}, "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], + + "typescript-eslint": ["typescript-eslint@8.54.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.54.0", "@typescript-eslint/parser": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0", "@typescript-eslint/utils": "8.54.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ=="], + + "ua-parser-js": ["ua-parser-js@1.0.41", "", { "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug=="], + + "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + + "uint8arrays": ["uint8arrays@3.1.1", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg=="], + + "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "unstorage": ["unstorage@1.17.4", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.5", "lru-cache": "^11.2.0", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.3" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6 || ^7 || ^8", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1 || ^2 || ^3", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], + + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], + + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], + + "utf-8-validate": ["utf-8-validate@5.0.10", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + + "valtio": ["valtio@2.1.7", "", { "dependencies": { "proxy-compare": "^3.0.1" }, "peerDependencies": { "@types/react": ">=18.0.0", "react": ">=18.0.0" }, "optionalPeers": ["@types/react", "react"] }, "sha512-DwJhCDpujuQuKdJ2H84VbTjEJJteaSmqsuUltsfbfdbotVfNeTE4K/qc/Wi57I9x8/2ed4JNdjEna7O6PfavRg=="], + + "viem": ["viem@2.43.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.10.5", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-OBLr1zhmCD1ioE/WufBZTFi6NMrfnfkE5BMTDB+1BDOyr0Q2F0cF7F4im/0RQYkhxSi9fjUDUTmCJEHbnIZ89w=="], + + "vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], + + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "which-module": ["which-module@2.0.1", "", {}, "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="], + + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], + + "y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], + + "yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], + + "yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "zustand": ["zustand@5.0.10", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-U1AiltS1O9hSy3rul+Ub82ut2fqIAefiSuwECWt6jlMVUGejvf+5omLcRBSzqbRagSM3hQZbtzdeRc6QVScXTg=="], + + "@base-org/account/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], + + "@base-org/account/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="], + + "@base-org/account/ox": ["ox@0.6.9", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug=="], + + "@base-org/account/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], + + "@base-org/account/zustand": ["zustand@5.0.3", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg=="], + + "@coinbase/cdp-sdk/abitype": ["abitype@1.0.6", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A=="], + + "@coinbase/cdp-sdk/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], + + "@coinbase/cdp-sdk/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], + + "@coinbase/wallet-sdk/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="], + + "@coinbase/wallet-sdk/preact": ["preact@10.28.2", "", {}, "sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + + "@ethersproject/providers/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + + "@metamask/abi-utils/@metamask/utils": ["@metamask/utils@3.6.0", "", { "dependencies": { "@types/debug": "^4.1.7", "debug": "^4.3.4", "semver": "^7.3.8", "superstruct": "^1.0.3" } }, "sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ=="], + + "@privy-io/react-auth/lucide-react": ["lucide-react@0.383.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } }, "sha512-13xlG0CQCJtzjSQYwwJ3WRqMHtRj3EXmLlorrARt7y+IHnxUCp3XyFNL1DfaGySWxHObDvnu1u1dV+0VMKHUSg=="], + + "@radix-ui/react-alert-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@reown/appkit/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], + + "@reown/appkit/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "@reown/appkit/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], + + "@reown/appkit-common/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], + + "@reown/appkit-controllers/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], + + "@reown/appkit-ui/qrcode": ["qrcode@1.5.3", "", { "dependencies": { "dijkstrajs": "^1.0.1", "encode-utf8": "^1.0.3", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg=="], + + "@reown/appkit-utils/@base-org/account": ["@base-org/account@2.4.0", "", { "dependencies": { "@coinbase/cdp-sdk": "^1.0.0", "@noble/hashes": "1.4.0", "clsx": "1.2.1", "eventemitter3": "5.0.1", "idb-keyval": "6.2.1", "ox": "0.6.9", "preact": "10.24.2", "viem": "^2.31.7", "zustand": "5.0.3" } }, "sha512-A4Umpi8B9/pqR78D1Yoze4xHyQaujioVRqqO3d6xuDFw9VRtjg6tK3bPlwE0aW+nVH/ntllCpPa2PbI8Rnjcug=="], + + "@reown/appkit-utils/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], + + "@reown/appkit-wallet/zod": ["zod@3.22.4", "", {}, "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg=="], + + "@safe-global/safe-apps-sdk/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], + + "@solana/accounts/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/accounts/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/addresses/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/addresses/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/assertions/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/codecs/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/codecs/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], + + "@solana/codecs-data-structures/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], + + "@solana/codecs-data-structures/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/codecs-strings/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], + + "@solana/codecs-strings/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/instruction-plans/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/instructions/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/instructions/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/keys/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/keys/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/kit/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/offchain-messages/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], + + "@solana/offchain-messages/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/options/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/options/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], + + "@solana/options/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/programs/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/rpc/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/rpc-api/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/rpc-api/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/rpc-spec/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/rpc-subscriptions/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/rpc-subscriptions-channel-websocket/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], + + "@solana/rpc-subscriptions-spec/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/rpc-transformers/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/rpc-transport-http/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/rpc-transport-http/undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], + + "@solana/rpc-types/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], + + "@solana/rpc-types/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/signers/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/signers/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/subscribable/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/sysvars/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/transaction-confirmation/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/transaction-messages/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], + + "@solana/transaction-messages/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/transactions/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], + + "@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], + + "@solana/transactions/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/wallet-adapter-base/eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], + + "@solana/wallet-standard-util/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], + + "@solana/wallet-standard-wallet-adapter-base/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], + + "@solana/web3.js/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], + + "@solana/web3.js/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], + + "@solana/web3.js/superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@walletconnect/core/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], + + "@walletconnect/environment/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "@walletconnect/ethereum-provider/@reown/appkit": ["@reown/appkit@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-pay": "1.7.8", "@reown/appkit-polyfills": "1.7.8", "@reown/appkit-scaffold-ui": "1.7.8", "@reown/appkit-ui": "1.7.8", "@reown/appkit-utils": "1.7.8", "@reown/appkit-wallet": "1.7.8", "@walletconnect/types": "2.21.0", "@walletconnect/universal-provider": "2.21.0", "bs58": "6.0.0", "valtio": "1.13.2", "viem": ">=2.29.0" } }, "sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.21.7", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@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/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.21.7", "@walletconnect/types": "2.21.7", "@walletconnect/utils": "2.21.7", "es-toolkit": "1.39.3", "events": "3.3.0" } }, "sha512-8PB+vA5VuR9PBqt5Y0xj4JC2doYNPlXLGQt3wJORVF9QC227Mm/8R1CAKpmneeLrUH02LkSRwx+wnN/pPnDiQA=="], + + "@walletconnect/events/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "@walletconnect/jsonrpc-utils/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "@walletconnect/jsonrpc-ws-connection/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + + "@walletconnect/keyvaluestorage/idb-keyval": ["idb-keyval@6.2.2", "", {}, "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg=="], + + "@walletconnect/relay-auth/@noble/curves": ["@noble/curves@1.8.0", "", { "dependencies": { "@noble/hashes": "1.7.0" } }, "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ=="], + + "@walletconnect/relay-auth/@noble/hashes": ["@noble/hashes@1.7.0", "", {}, "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w=="], + + "@walletconnect/safe-json/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "@walletconnect/sign-client/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], + + "@walletconnect/time/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "@walletconnect/types/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], + + "@walletconnect/universal-provider/@walletconnect/sign-client": ["@walletconnect/sign-client@2.23.2", "", { "dependencies": { "@walletconnect/core": "2.23.2", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "3.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.23.2", "@walletconnect/utils": "2.23.2", "events": "3.3.0" } }, "sha512-LL5KgmJHvY5NqQn+ZHQJLia1p6fpUWXHtiG97S5rNfyuPx6gT/Jkkwqc2LwdmAjFkr61t8zTagHC9ETq203mNA=="], + + "@walletconnect/universal-provider/@walletconnect/types": ["@walletconnect/types@2.23.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "3.0.2", "events": "3.3.0" } }, "sha512-5dxBCdUM+4Dqe1/A7uqkm2tWPXce4UUGSr+ImfI0YjwEExQS8+TzdOlhMt3n32ncnBCllU5paG+fsndT06R0iw=="], + + "@walletconnect/universal-provider/@walletconnect/utils": ["@walletconnect/utils@2.23.2", "", { "dependencies": { "@msgpack/msgpack": "3.1.2", "@noble/ciphers": "1.3.0", "@noble/curves": "1.9.7", "@noble/hashes": "1.8.0", "@scure/base": "1.2.6", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "3.0.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.23.2", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "blakejs": "1.2.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "ox": "0.9.3", "uint8arrays": "3.1.1" } }, "sha512-ReSjU3kX+3i3tYJQZbVfetY5SSUL+iM6uiIVVD1PJalePa/5A40VgLVRTF7sDCJTIFfpf3Mt4bFjeaYuoxWtIw=="], + + "@walletconnect/utils/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], + + "@walletconnect/utils/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], + + "@walletconnect/utils/viem": ["viem@2.31.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.0.8", "isows": "1.0.7", "ox": "0.7.1", "ws": "8.18.2" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-U7OMQ6yqK+bRbEIarf2vqxL7unSEQvNxvML/1zG7suAmKuJmipqdVTVJGKBCJiYsm/EremyO2FS4dHIPpGv+eA=="], + + "@walletconnect/window-getters/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "@walletconnect/window-metadata/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "borsh/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], + + "duplexify/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "elliptic/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], + + "ethereum-cryptography/@noble/curves": ["@noble/curves@1.4.2", "", { "dependencies": { "@noble/hashes": "1.4.0" } }, "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw=="], + + "ethereum-cryptography/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], + + "ethereum-cryptography/@scure/bip32": ["@scure/bip32@1.4.0", "", { "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" } }, "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg=="], + + "ethereum-cryptography/@scure/bip39": ["@scure/bip39@1.3.0", "", { "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" } }, "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ=="], + + "jayson/@types/node": ["@types/node@12.20.55", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="], + + "jayson/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + + "jayson/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + + "pino/pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], + + "pino/sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], + + "rpc-websockets/@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + + "rpc-websockets/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + + "styled-components/postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="], + + "yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + + "@base-org/account/ox/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], + + "@base-org/account/ox/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + + "@base-org/account/viem/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + + "@base-org/account/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], + + "@coinbase/cdp-sdk/viem/abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], + + "@coinbase/cdp-sdk/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], + + "@reown/appkit-common/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], + + "@reown/appkit-controllers/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], + + "@reown/appkit-utils/@base-org/account/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], + + "@reown/appkit-utils/@base-org/account/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="], + + "@reown/appkit-utils/@base-org/account/ox": ["ox@0.6.9", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug=="], + + "@reown/appkit-utils/@base-org/account/zustand": ["zustand@5.0.3", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg=="], + + "@reown/appkit-utils/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], + + "@reown/appkit/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], + + "@reown/appkit/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], + + "@safe-global/safe-apps-sdk/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], + + "@solana/accounts/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/accounts/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/addresses/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/addresses/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/assertions/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/assertions/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/codecs-data-structures/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/codecs-data-structures/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/codecs-strings/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/codecs-strings/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/codecs/@solana/codecs-core/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/codecs/@solana/codecs-numbers/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], + + "@solana/instruction-plans/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/instruction-plans/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/instructions/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/instructions/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/keys/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/keys/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/kit/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/kit/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/offchain-messages/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/offchain-messages/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/options/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/options/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/programs/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/programs/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/rpc-api/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/rpc-api/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/rpc-spec/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/rpc-spec/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/rpc-subscriptions-channel-websocket/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/rpc-subscriptions-channel-websocket/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/rpc-subscriptions-spec/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/rpc-subscriptions-spec/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/rpc-subscriptions/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/rpc-subscriptions/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/rpc-transformers/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/rpc-transformers/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/rpc-transport-http/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/rpc-transport-http/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/rpc-types/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/rpc-types/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/rpc/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/rpc/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/signers/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/signers/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/subscribable/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/subscribable/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/sysvars/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/sysvars/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/transaction-confirmation/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/transaction-confirmation/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/transaction-messages/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/transaction-messages/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/transactions/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/transactions/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/wallet-standard-wallet-adapter-base/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], + + "@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "@walletconnect/core/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-common": ["@reown/appkit-common@1.7.8", "", { "dependencies": { "big.js": "6.2.2", "dayjs": "1.11.13", "viem": ">=2.29.0" } }, "sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-controllers": ["@reown/appkit-controllers@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-wallet": "1.7.8", "@walletconnect/universal-provider": "2.21.0", "valtio": "1.13.2", "viem": ">=2.29.0" } }, "sha512-IdXlJlivrlj6m63VsGLsjtPHHsTWvKGVzWIP1fXZHVqmK+rZCBDjCi9j267Rb9/nYRGHWBtlFQhO8dK35WfeDA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-pay": ["@reown/appkit-pay@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-ui": "1.7.8", "@reown/appkit-utils": "1.7.8", "lit": "3.3.0", "valtio": "1.13.2" } }, "sha512-OSGQ+QJkXx0FEEjlpQqIhT8zGJKOoHzVnyy/0QFrl3WrQTjCzg0L6+i91Ad5Iy1zb6V5JjqtfIFpRVRWN4M3pw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-polyfills": ["@reown/appkit-polyfills@1.7.8", "", { "dependencies": { "buffer": "6.0.3" } }, "sha512-W/kq786dcHHAuJ3IV2prRLEgD/2iOey4ueMHf1sIFjhhCGMynMkhsOhQMUH0tzodPqUgAC494z4bpIDYjwWXaA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-scaffold-ui": ["@reown/appkit-scaffold-ui@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-ui": "1.7.8", "@reown/appkit-utils": "1.7.8", "@reown/appkit-wallet": "1.7.8", "lit": "3.3.0" } }, "sha512-RCeHhAwOrIgcvHwYlNWMcIDibdI91waaoEYBGw71inE0kDB8uZbE7tE6DAXJmDkvl0qPh+DqlC4QbJLF1FVYdQ=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-ui": ["@reown/appkit-ui@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-wallet": "1.7.8", "lit": "3.3.0", "qrcode": "1.5.3" } }, "sha512-1hjCKjf6FLMFzrulhl0Y9Vb9Fu4royE+SXCPSWh4VhZhWqlzUFc7kutnZKx8XZFVQH4pbBvY62SpRC93gqoHow=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils": ["@reown/appkit-utils@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-polyfills": "1.7.8", "@reown/appkit-wallet": "1.7.8", "@walletconnect/logger": "2.1.2", "@walletconnect/universal-provider": "2.21.0", "valtio": "1.13.2", "viem": ">=2.29.0" } }, "sha512-8X7UvmE8GiaoitCwNoB86pttHgQtzy4ryHZM9kQpvjQ0ULpiER44t1qpVLXNM4X35O0v18W0Dk60DnYRMH2WRw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet": ["@reown/appkit-wallet@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-polyfills": "1.7.8", "@walletconnect/logger": "2.1.2", "zod": "3.22.4" } }, "sha512-kspz32EwHIOT/eg/ZQbFPxgXq0B/olDOj3YMu7gvLEFz4xyOFd/wgzxxAXkp5LbG4Cp++s/elh79rVNmVFdB9A=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types": ["@walletconnect/types@2.21.0", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-ll+9upzqt95ZBWcfkOszXZkfnpbJJ2CmxMfGgE5GmhdxxxCcO5bGhXkI+x8OpiS555RJ/v/sXJYMSOLkmu4fFw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.21.0", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@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/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.21.0", "@walletconnect/types": "2.21.0", "@walletconnect/utils": "2.21.0", "es-toolkit": "1.33.0", "events": "3.3.0" } }, "sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/valtio": ["valtio@1.13.2", "", { "dependencies": { "derive-valtio": "0.1.0", "proxy-compare": "2.6.0", "use-sync-external-store": "1.2.0" }, "peerDependencies": { "@types/react": ">=16.8", "react": ">=16.8" }, "optionalPeers": ["@types/react", "react"] }, "sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A=="], + + "@walletconnect/ethereum-provider/@reown/appkit/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], + + "@walletconnect/sign-client/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], + + "@walletconnect/types/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], + + "@walletconnect/universal-provider/@walletconnect/sign-client/@walletconnect/core": ["@walletconnect/core@2.23.2", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "3.0.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.23.2", "@walletconnect/utils": "2.23.2", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.39.3", "events": "3.3.0", "uint8arrays": "3.1.1" } }, "sha512-KkaTELRu8t/mt3J9doCQ1fBGCbYsCNfpo2JpKdCwKQR7PVjVKeVpYQK/blVkA5m6uLPpBtVRbOMKjnHW1m7JLw=="], + + "@walletconnect/universal-provider/@walletconnect/utils/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], + + "@walletconnect/universal-provider/@walletconnect/utils/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], + + "@walletconnect/universal-provider/@walletconnect/utils/ox": ["ox@0.9.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.0.9", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg=="], + + "@walletconnect/utils/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], + + "@walletconnect/utils/viem/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], + + "@walletconnect/utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + + "@walletconnect/utils/viem/ox": ["ox@0.7.1", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-+k9fY9PRNuAMHRFIUbiK9Nt5seYHHzSQs9Bj+iMETcGtlpS7SmBzcGSVUQO3+nqGLEiNK4598pHNFlVRaZbRsg=="], + + "@walletconnect/utils/viem/ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], + + "borsh/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + + "ethereum-cryptography/@scure/bip32/@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], + + "ethereum-cryptography/@scure/bip39/@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], + + "yargs/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + + "@reown/appkit-utils/@base-org/account/ox/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], + + "@reown/appkit-utils/@base-org/account/ox/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + + "@solana/codecs/@solana/codecs-core/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/codecs/@solana/codecs-core/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@solana/codecs/@solana/codecs-numbers/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "@solana/codecs/@solana/codecs-numbers/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + + "@walletconnect/core/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], + + "@walletconnect/core/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], + + "@walletconnect/core/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], + + "@walletconnect/core/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + + "@walletconnect/core/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], + + "@walletconnect/core/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], + + "@walletconnect/core/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-ui/qrcode": ["qrcode@1.5.3", "", { "dependencies": { "dijkstrajs": "^1.0.1", "encode-utf8": "^1.0.3", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/zod": ["zod@3.22.4", "", {}, "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/sign-client": ["@walletconnect/sign-client@2.21.0", "", { "dependencies": { "@walletconnect/core": "2.21.0", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.0", "@walletconnect/utils": "2.21.0", "events": "3.3.0" } }, "sha512-z7h+PeLa5Au2R591d/8ZlziE0stJvdzP9jNFzFolf2RG/OiXulgFKum8PrIyXy+Rg2q95U9nRVUF9fWcn78yBA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils": ["@walletconnect/utils@2.21.0", "", { "dependencies": { "@noble/ciphers": "1.2.1", "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.0", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "query-string": "7.1.3", "uint8arrays": "3.1.0", "viem": "2.23.2" } }, "sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/es-toolkit": ["es-toolkit@1.33.0", "", {}, "sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/valtio/proxy-compare": ["proxy-compare@2.6.0", "", {}, "sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/valtio/use-sync-external-store": ["use-sync-external-store@1.2.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], + + "@walletconnect/sign-client/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], + + "@walletconnect/sign-client/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], + + "@walletconnect/sign-client/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], + + "@walletconnect/sign-client/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + + "@walletconnect/sign-client/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], + + "@walletconnect/sign-client/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], + + "@walletconnect/sign-client/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + + "@walletconnect/types/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], + + "@walletconnect/types/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], + + "@walletconnect/types/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], + + "@walletconnect/types/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + + "@walletconnect/types/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], + + "@walletconnect/types/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], + + "@walletconnect/types/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + + "@walletconnect/universal-provider/@walletconnect/utils/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], + + "@walletconnect/universal-provider/@walletconnect/utils/ox/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], + + "@walletconnect/utils/viem/ox/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], + + "@walletconnect/utils/viem/ox/abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], + + "yargs/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/sign-client/@walletconnect/core": ["@walletconnect/core@2.21.0", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.0", "@walletconnect/utils": "2.21.0", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.33.0", "events": "3.3.0", "uint8arrays": "3.1.0" } }, "sha512-o6R7Ua4myxR8aRUAJ1z3gT9nM+jd2B2mfamu6arzy1Cc6vi10fIwFWb6vg3bC8xJ6o9H3n/cN5TOW3aA9Y1XVw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/@noble/ciphers": ["@noble/ciphers@1.2.1", "", {}, "sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/@noble/curves": ["@noble/curves@1.8.1", "", { "dependencies": { "@noble/hashes": "1.7.1" } }, "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/@noble/hashes": ["@noble/hashes@1.7.1", "", {}, "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/uint8arrays": ["uint8arrays@3.1.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], + + "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + + "yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/sign-client/@walletconnect/core/uint8arrays": ["uint8arrays@3.1.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/@scure/bip32": ["@scure/bip32@1.6.2", "", { "dependencies": { "@noble/curves": "~1.8.1", "@noble/hashes": "~1.7.1", "@scure/base": "~1.2.2" } }, "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/@scure/bip39": ["@scure/bip39@1.5.4", "", { "dependencies": { "@noble/hashes": "~1.7.1", "@scure/base": "~1.2.4" } }, "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/isows": ["isows@1.0.6", "", { "peerDependencies": { "ws": "*" } }, "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox": ["ox@0.6.7", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@scure/bip32": ["@scure/bip32@1.7.0", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], + + "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@scure/bip32/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], + } +} From 5c008e0145f5057c946de3338682e7755a310292 Mon Sep 17 00:00:00 2001 From: Krishang Date: Wed, 28 Jan 2026 18:50:42 +0530 Subject: [PATCH 02/18] nit: update deployment --- src/utils/constants.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 7d4e5b1..bdf3804 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -1,6 +1,6 @@ import type { Network } from "@/contexts/NetworkContext"; export const GAME_CONTRACT_ADDRESS: Record = { - testnet: "0xC52d29f79b2552801e95C8Dc7646f59125009904", - mainnet: "0x653d2536D82FA9812337D91e60BC2b9Fc19864Db", + testnet: "0xC52d29f79b2552801e95C8Dc7646f59125009904", + mainnet: "0x53748668642735CDa45935716525E7DFbC8aAACC", }; From 5944456bedc997ab1d73cb440dee8ce94a83cb55 Mon Sep 17 00:00:00 2001 From: Krishang Date: Wed, 28 Jan 2026 18:50:59 +0530 Subject: [PATCH 03/18] fix: toast explorer link --- src/hooks/useTransactions.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hooks/useTransactions.tsx b/src/hooks/useTransactions.tsx index c7ffc73..919a04b 100644 --- a/src/hooks/useTransactions.tsx +++ b/src/hooks/useTransactions.tsx @@ -139,15 +139,15 @@ export function useTransactions() { }); const time = Date.now() - startTime; - if (receipt.status === "reverted") { + if (receipt.result.status === "reverted") { console.log(`Failed confirmation in ${time} ms`); throw Error( - `Failed to confirm transaction: ${receipt.transactionHash}`, + `Failed to confirm transaction: ${receipt.result.transactionHash}`, ); } console.log( - `Transaction confirmed in ${time} ms: ${receipt.transactionHash}`, + `Transaction confirmed in ${time} ms: ${receipt.result.transactionHash}`, ); toast.success(`Confirmed transaction.`, { description: `${successText} Time: ${time} ms`, @@ -157,7 +157,7 @@ export function useTransactions() { variant="ghost" onClick={() => window.open( - `${explorerUrl}/tx/${receipt.transactionHash}`, + `${explorerUrl}/tx/${receipt.result.transactionHash}`, "_blank", "noopener,noreferrer", ) From a39766225d2114b64a19a17019b64caa7882ca0e Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 29 Jan 2026 11:11:19 +0530 Subject: [PATCH 04/18] refactor: monorepo --- .gitignore | 50 +- ARCHITECTURE.md | 562 +++++ MIGRATION.md | 133 + README.md | 245 +- bun.lock | 2004 --------------- package.json | 64 +- packages/contracts/.gitignore | 14 + packages/contracts/README.md | 62 + .../Deploy.s.sol/10143/run-1743147792.json | 108 + .../Deploy.s.sol/10143/run-1743152781.json | 106 + .../Deploy.s.sol/10143/run-1743408572.json | 72 + .../Deploy.s.sol/10143/run-1743496583.json | 106 + .../Deploy.s.sol/10143/run-1743498025.json | 72 + .../Deploy.s.sol/10143/run-1745469906.json | 87 + .../Deploy.s.sol/10143/run-1745556899.json | 87 + .../Deploy.s.sol/10143/run-1746797402.json | 87 + .../Deploy.s.sol/10143/run-1747028257.json | 87 + .../Deploy.s.sol/10143/run-latest.json | 87 + .../Deploy.s.sol/143/run-1769605008553.json | 87 + .../Deploy.s.sol/143/run-latest.json | 87 + packages/contracts/foundry.lock | 8 + packages/contracts/foundry.toml | 14 + packages/contracts/package.json | 20 + packages/contracts/script/Deploy.s.sol | 21 + packages/contracts/src/LibBoard.sol | 166 ++ packages/contracts/src/Monad2048.sol | 149 ++ packages/contracts/test/LibBoardTest.t.sol | 570 +++++ packages/contracts/test/Monad2048Test.t.sol | 108 + .../frontend/.env.local.example | 0 packages/frontend/.gitignore | 24 + LICENSE => packages/frontend/LICENSE | 0 packages/frontend/README.md | 26 + .../frontend/components.json | 0 .../frontend/eslint.config.js | 0 index.html => packages/frontend/index.html | 0 packages/frontend/package.json | 44 + .../frontend/public}/monad-logo.svg | 0 {src => packages/frontend/src}/App.tsx | 0 .../frontend/src}/components/Board.tsx | 0 .../frontend/src}/components/Container.tsx | 0 .../frontend/src}/components/FaucetDialog.tsx | 0 .../src}/components/FunPurpleButton.tsx | 0 .../frontend/src}/components/LoginButton.tsx | 0 .../src}/components/NetworkToggle.tsx | 0 .../frontend/src}/components/Scorecard.tsx | 0 .../src}/components/ui/alert-dialog.tsx | 0 .../frontend/src}/components/ui/alert.tsx | 0 .../frontend/src}/components/ui/button.tsx | 0 .../frontend/src}/components/ui/card.tsx | 0 .../frontend/src}/components/ui/sonner.tsx | 0 .../frontend/src}/contexts/NetworkContext.tsx | 0 .../frontend/src}/hooks/useTransactions.tsx | 0 {src => packages/frontend/src}/index.css | 0 {src => packages/frontend/src}/main.tsx | 0 .../frontend/src}/utils/client.ts | 0 .../frontend/src}/utils/constants.ts | 0 {src => packages/frontend/src}/utils/fetch.ts | 0 {src => packages/frontend/src}/vite-env.d.ts | 0 .../frontend/tsconfig.app.json | 0 .../frontend/tsconfig.json | 0 .../frontend/tsconfig.node.json | 0 .../frontend/vite.config.ts | 0 pnpm-lock.yaml | 2246 ++++++++++------- pnpm-workspace.yaml | 2 +- src/lib/utils.ts | 6 - 65 files changed, 4559 insertions(+), 3052 deletions(-) create mode 100644 ARCHITECTURE.md create mode 100644 MIGRATION.md delete mode 100644 bun.lock create mode 100644 packages/contracts/.gitignore create mode 100644 packages/contracts/README.md create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-1743147792.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-1743152781.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-1743408572.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-1743496583.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-1743498025.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-1745469906.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-1745556899.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-1746797402.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-1747028257.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/10143/run-latest.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/143/run-1769605008553.json create mode 100644 packages/contracts/broadcast/Deploy.s.sol/143/run-latest.json create mode 100644 packages/contracts/foundry.lock create mode 100644 packages/contracts/foundry.toml create mode 100644 packages/contracts/package.json create mode 100644 packages/contracts/script/Deploy.s.sol create mode 100644 packages/contracts/src/LibBoard.sol create mode 100644 packages/contracts/src/Monad2048.sol create mode 100644 packages/contracts/test/LibBoardTest.t.sol create mode 100644 packages/contracts/test/Monad2048Test.t.sol rename .env.local.example => packages/frontend/.env.local.example (100%) create mode 100644 packages/frontend/.gitignore rename LICENSE => packages/frontend/LICENSE (100%) create mode 100644 packages/frontend/README.md rename components.json => packages/frontend/components.json (100%) rename eslint.config.js => packages/frontend/eslint.config.js (100%) rename index.html => packages/frontend/index.html (100%) create mode 100644 packages/frontend/package.json rename {public => packages/frontend/public}/monad-logo.svg (100%) rename {src => packages/frontend/src}/App.tsx (100%) rename {src => packages/frontend/src}/components/Board.tsx (100%) rename {src => packages/frontend/src}/components/Container.tsx (100%) rename {src => packages/frontend/src}/components/FaucetDialog.tsx (100%) rename {src => packages/frontend/src}/components/FunPurpleButton.tsx (100%) rename {src => packages/frontend/src}/components/LoginButton.tsx (100%) rename {src => packages/frontend/src}/components/NetworkToggle.tsx (100%) rename {src => packages/frontend/src}/components/Scorecard.tsx (100%) rename {src => packages/frontend/src}/components/ui/alert-dialog.tsx (100%) rename {src => packages/frontend/src}/components/ui/alert.tsx (100%) rename {src => packages/frontend/src}/components/ui/button.tsx (100%) rename {src => packages/frontend/src}/components/ui/card.tsx (100%) rename {src => packages/frontend/src}/components/ui/sonner.tsx (100%) rename {src => packages/frontend/src}/contexts/NetworkContext.tsx (100%) rename {src => packages/frontend/src}/hooks/useTransactions.tsx (100%) rename {src => packages/frontend/src}/index.css (100%) rename {src => packages/frontend/src}/main.tsx (100%) rename {src => packages/frontend/src}/utils/client.ts (100%) rename {src => packages/frontend/src}/utils/constants.ts (100%) rename {src => packages/frontend/src}/utils/fetch.ts (100%) rename {src => packages/frontend/src}/vite-env.d.ts (100%) rename tsconfig.app.json => packages/frontend/tsconfig.app.json (100%) rename tsconfig.json => packages/frontend/tsconfig.json (100%) rename tsconfig.node.json => packages/frontend/tsconfig.node.json (100%) rename vite.config.ts => packages/frontend/vite.config.ts (100%) delete mode 100644 src/lib/utils.ts diff --git a/.gitignore b/.gitignore index a547bf3..4276f2f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1,46 @@ -# Logs -logs +# Dependencies +node_modules/ +.pnp +.pnp.js + +# Production builds +dist/ +build/ + +# Testing +coverage/ + +# Misc +.DS_Store *.log +*.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 +# IDEs .vscode/* !.vscode/extensions.json -.idea +.idea/ +*.swp +*.swo +*~ + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Foundry/Forge +cache/ +out/ +broadcast/ +lib/ + +# OS .DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? +Thumbs.db diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md new file mode 100644 index 0000000..4a9381d --- /dev/null +++ b/ARCHITECTURE.md @@ -0,0 +1,562 @@ +# Architecture Overview + +This document explains how the onchain 2048 game works, from the smart contracts to the frontend, and how they interact to create a fully decentralized gaming experience. + +## Table of Contents + +1. [High-Level Architecture](#high-level-architecture) +2. [Smart Contract Design](#smart-contract-design) +3. [Board Representation](#board-representation) +4. [Game Lifecycle](#game-lifecycle) +5. [Frontend Architecture](#frontend-architecture) +6. [Transaction Flow](#transaction-flow) +7. [Key Design Decisions](#key-design-decisions) + +--- + +## High-Level Architecture + +The 2048 game is played entirely onchain with these components: + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Frontend (React) │ +│ • User interface and game rendering │ +│ • Local game logic (optimistic updates) │ +│ • Transaction signing via Privy embedded wallets │ +└─────────────────────────────────────────────────────────────┘ + │ + │ Transactions + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Monad Blockchain (EVM-compatible) │ +│ │ +│ ┌───────────────────────────────────────────────────────┐ │ +│ │ Monad2048.sol (Main Contract) │ │ +│ │ • Game state storage │ │ +│ │ • Validates all moves │ │ +│ │ • Prevents cheating/replays │ │ +│ └───────────────────────────────────────────────────────┘ │ +│ │ │ +│ │ Uses │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────┐ │ +│ │ LibBoard.sol (Game Logic Library) │ │ +│ │ • Board transformations (move processing) │ │ +│ │ • Move validation │ │ +│ │ • Tile compression and merging │ │ +│ └───────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +--- + +## Smart Contract Design + +### Monad2048.sol - Main Game Contract + +**Purpose**: Manages game state and ensures all moves are valid. + +**Key Components**: + +1. **Game State Storage**: + +```solidity +struct GameState { + uint8 move; // Last move direction (UP=0, DOWN=1, LEFT=2, RIGHT=3) + uint120 nextMove; // Next move number (4, 5, 6, ...) + uint128 board; // Current board state (encoded as 128 bits) +} + +mapping(bytes32 gameId => GameState state) public state; +``` + +2. **Replay Prevention**: + +```solidity +// Prevents reusing the same starting position + first 3 moves +mapping(bytes32 gameHash => bytes32 gameId) public gameHashOf; +``` + +3. **Two Main Functions**: + + **`startGame(gameId, boards[4], moves[3])`**: + - Called after the player makes their first 3 moves locally + - Validates the starting board has exactly 2 tiles (value 2 or 4) + - Validates each of the first 3 moves is legal + - Prevents replay attacks by hashing the board sequence + - Stores the game state after move 3 + + **`play(gameId, move, resultBoard)`**: + - Called for every move after the first 3 + - Validates the move transforms the previous board correctly + - Updates the game state with the new board + - Emits `NewMove` event + +### LibBoard.sol - Game Logic Library + +**Purpose**: Pure functions that implement 2048 game mechanics. + +**Key Functions**: + +1. **`validateStartPosition(board)`**: Ensures starting board has exactly 2 tiles +2. **`validateTransformation(prevBoard, move, nextBoard, seed)`**: Verifies a move is legal +3. **`processMove(board, move, seed)`**: Applies a move to a board and adds a random tile +4. **Move Processing Pipeline**: + ``` + Board → Compress → Merge → Add Random Tile → New Board + ``` + +**Move Directions**: + +- `UP = 0`: Tiles slide upward +- `DOWN = 1`: Tiles slide downward +- `LEFT = 2`: Tiles slide left +- `RIGHT = 3`: Tiles slide right + +--- + +## Board Representation + +The game board is encoded as a single **128-bit unsigned integer** (`uint128`). + +### Encoding Format + +- Board has 16 cells (4x4 grid) +- Each cell uses 8 bits (1 byte) +- Cell value stores **log₂(tile_value)** instead of the actual tile value + +**Why log₂?** This allows efficient storage: + +``` +Tile Value → Stored Value (log₂) +───────────────────────────────── +Empty (0) → 0 +2 → 1 +4 → 2 +8 → 3 +16 → 4 +32 → 5 +64 → 6 +128 → 7 +256 → 8 +512 → 9 +1024 → 10 +2048 → 11 +4096 → 12 +``` + +### Memory Layout + +The board is stored as 128 bits (16 bytes) laid out as: + +``` +Bit positions: [127-120][119-112]...[15-8][7-0] +Cell positions: [0] [1] ... [14] [15] + +Grid mapping: + 0 1 2 3 + 4 5 6 7 + 8 9 10 11 + 12 13 14 15 +``` + +**Example**: A board with tiles `[2, 4, _, _]` in the first row would be: + +``` +0x01020000000000000000000000000000 + ^^ ^^ (rest are zeros) + | | + | +-- log₂(4) = 2 + +----- log₂(2) = 1 +``` + +--- + +## Game Lifecycle + +### 1. Game Initialization (Local) + +**User Action**: Clicks "New Game" + +**Frontend Flow**: + +1. Generates a unique `gameId`: + - First 160 bits: User's Ethereum address + - Last 96 bits: Random nonce +2. Creates initial board with 2 random tiles (90% chance of 2, 10% chance of 4) +3. Sets `playedMovesCount = 1` +4. No blockchain transaction yet + +### 2. First Three Moves (Local + Validation) + +**User Action**: Swipes or presses arrow keys + +**Frontend Flow**: + +1. Processes move locally (compress, merge, add random tile) +2. Encodes the board state +3. Stores the move in `encodedMoves` array +4. Increments `playedMovesCount` + +**Why wait until move 3?** There are billions of possible board states possible after 3 moves. This lets the contract mandate two random players to have different start positions. + +### 3. Move 3 → Blockchain Initialization + +**User Action**: Makes the 3rd move + +**Frontend Flow**: + +1. Processes the move locally +2. Calls `initializeGameTransaction(gameId, boards[4], moves[3])` + - `boards[4]`: Initial board + boards after moves 1, 2, 3 + - `moves[3]`: The 3 move directions + +**Smart Contract Flow** (`startGame`): + +1. Validates the game ID encodes the player's address +2. Checks the game ID hasn't been used +3. Validates starting board has exactly 2 tiles +4. Validates each transformation using `LibBoard.validateTransformation()` +5. Checks board sequence hasn't been played before (anti-replay) +6. Stores game state after move 3 +7. Emits `NewGame` event + +**Transaction Details**: + +- Gas: ~150,000 +- Method: `eth_sendRawTransactionSync` (Monad's synchronous transaction API) +- Timeout: 10 seconds + +### 4. Subsequent Moves (Onchain) + +**User Action**: Makes move 4, 5, 6, ... + +**Frontend Flow**: + +1. Processes move locally (optimistic update) +2. Calls `playNewMoveTransaction(gameId, boardAfterMove, move, moveCount)` + +**Smart Contract Flow** (`play`): + +1. Validates the game ID matches the sender +2. Retrieves the previous board state +3. Applies the move using `LibBoard.processMove()` +4. Compares result to submitted board - must match exactly +5. Updates game state +6. Emits `NewMove` event + +**Transaction Details**: + +- Gas: ~100,000 +- Each move is a separate transaction +- Frontend tracks nonce locally to send transactions sequentially + +### 5. Random Tile Placement (Deterministic) + +**How randomness works**: + +Both frontend and contract use the same deterministic seed: + +```solidity +seed = keccak256(gameId || moveNumber) +``` + +This ensures: + +- Frontend can predict where tiles will appear +- Contract validates the same placement +- No randomness manipulation by players + +**Tile selection**: + +1. Find all empty cells +2. Use `seed % emptyCount` to pick a cell +3. Use `seed % 100` to decide value (>90 = tile 4, else tile 2) + +### 6. Game Over Detection + +**Frontend checks after each move**: + +1. Is the board full? (16 tiles) +2. Are there any adjacent tiles with the same value? +3. If no valid moves remain → Game Over + +**No onchain game-over transaction** - the contract simply won't accept invalid moves. + +### 7. Game Resumption + +**User Action**: Clicks "Resync Game" or switches networks + +**Frontend Flow**: + +1. Calls `getLatestGameBoard(gameId)` to read contract state +2. Decodes the board (convert log₂ values back to tile values) +3. Restores the board visually +4. Resumes gameplay from that point + +--- + +## Frontend Architecture + +### Technology Stack + +- **React 19**: UI framework +- **Vite**: Build tool +- **Privy**: Authentication and embedded wallets (no seed phrases needed) +- **Viem**: Ethereum library for contract interactions +- **Tailwind CSS**: Styling + +### Key Components + +1. **App.tsx** - Main game logic: + - Game state management (tiles, score, game over) + - Move processing (compress, merge, add tiles) + - Keyboard and touch input handling + - Transaction orchestration + +2. **Board.tsx** - Visual rendering: + - 4x4 grid display + - Tile animations (slide, merge, appear) + - Responsive design + +3. **useTransactions.tsx** - Blockchain interaction: + - Transaction signing + - Nonce management (local tracking for sequential txs) + - Balance checking + - Contract method calls + +4. **NetworkContext.tsx** - Network management: + - Testnet/Mainnet switching + - RPC client configuration + - Explorer URL mapping + +### State Management + +**Game State**: + +```typescript +{ + tiles: Tile[], // Current tiles on board + score: number, // Current score + gameOver: boolean, // Is game finished? + activeGameId: Hex, // Current game's ID + encodedMoves: EncodedMove[], // History of moves + playedMovesCount: number // How many moves made +} +``` + +**Tile Object**: + +```typescript +{ + id: string, // Unique identifier + value: number, // 2, 4, 8, ..., 2048 + row: number, // 0-3 + col: number, // 0-3 + mergedFrom?: string[], // IDs of tiles that merged + isNew?: boolean // Just spawned? +} +``` + +--- + +## Transaction Flow + +### Optimistic Updates + +The frontend uses **optimistic updates** to provide instant feedback: + +1. User makes a move +2. Frontend immediately updates the UI +3. Transaction is sent to blockchain in the background +4. If transaction fails, board reverts to previous state + +### Error Handling + +**If a transaction fails**: + +1. Frontend catches the error +2. Displays an error toast with details +3. Reverts the board to the pre-move state +4. User can try again or resync with contract + +**Insufficient Balance**: + +- Opens a faucet dialog +- Provides link to get test tokens +- Prevents further moves until balance restored + +### Nonce Management + +**Problem**: Sending multiple transactions quickly requires careful nonce tracking. + +**Solution**: + +```typescript +userNonce.current = await getTransactionCount(address) + +// For each transaction: +const nonce = userNonce.current +userNonce.current = nonce + 1 // Increment immediately + +await sendTransaction({ nonce, ... }) +``` + +This allows transactions to be sent sequentially without waiting for confirmation. + +--- + +## Key Design Decisions + +### 1. Why Wait Until Move 3? + +**Gas Optimization**: Starting a game with 1 transaction is cheaper than 4 separate transactions. + +**Trade-off**: First 3 moves aren't validated until the 4th move, but the contract checks all 3 retroactively. + +### 2. Why Store Board as uint128? + +**Efficiency**: + +- 128 bits fits perfectly in a single storage slot +- Using log₂ encoding allows values up to 2^255 (way beyond 2048) +- Cheaper to store and read than an array + +### 3. Why Deterministic Randomness? + +**Verifiability**: + +- Contract can validate that frontend placed tiles correctly +- No need for oracle or VRF (Verifiable Random Function) +- Prevents cheating - can't "reroll" tile placement + +**Seed formula**: `keccak256(gameId || moveNumber)` ensures: + +- Each move gets a unique seed +- Players can't predict future tiles +- Contract and frontend agree on placement + +### 4. Why Privy Embedded Wallets? + +**User Experience**: + +- No seed phrase management +- Social login (Google, email) +- Passkey support +- Reduces friction for non-crypto users + +### 5. Why Monad? + +**Performance**: + +- Synchronous transaction confirmation (`eth_sendRawTransactionSync`) +- Fast block times +- Low latency for onchain gaming +- Each move confirmed within ~10 seconds + +### 6. Why Validate Every Move Onchain? + +**Trust Minimization**: + +- Anyone can verify game integrity +- Scores are provably legitimate +- No server can manipulate outcomes +- Truly decentralized gaming + +### 7. Board Encoding Efficiency + +**Log₂ encoding saves space**: + +- Normal encoding: 16 cells × 16 bits = 256 bits +- Log₂ encoding: 16 cells × 8 bits = 128 bits +- 50% storage reduction + +**Bit manipulation benefits**: + +- Fast tile merging with bit shifts +- Efficient empty cell detection +- Compact state representation + +--- + +## Security Features + +### 1. Game ID Validation + +The game ID must encode the player's address in the first 160 bits: + +```solidity +require(player == address(uint160(uint256(gameId) >> 96))) +``` + +This ensures: + +- Only the game creator can make moves +- No one can hijack another player's game + +### 2. Replay Attack Prevention + +The contract hashes the starting position + first 3 moves: + +```solidity +bytes32 hashedBoards = keccak256(abi.encodePacked(boards)) +require(gameHashOf[hashedBoards] == bytes32(0)) +gameHashOf[hashedBoards] = gameId +``` + +This prevents: + +- Reusing a winning game sequence +- Claiming multiple high scores from one game + +### 3. Move Validation + +Every move is validated by recomputing it: + +```solidity +require(processMove(prevBoard, move, seed) == resultBoard) +``` + +This ensures: + +- No invalid board states +- Tiles merge correctly +- Random tiles placed according to seed + +### 4. Client-Side Nonce Tracking + +Prevents nonce conflicts when sending rapid transactions: + +- Frontend tracks nonce locally +- Increments immediately after sending +- Prevents transaction race conditions + +--- + +## Contract Addresses + +**Testnet (Chain ID: 10143)**: + +- Address: `0xC52d29f79b2552801e95C8Dc7646f59125009904` + +**Mainnet (Chain ID: 143)**: + +- Address: `0x53748668642735CDa45935716525E7DFbC8aAACC` + +Both deployments use identical contract code with gas optimizations: + +- Solidity 0.8.28 +- Optimizer runs: 2,000,000 +- Via IR compilation +- EVM version: Paris + +--- + +## Further Reading + +- [Monad Developer Docs](https://docs.monad.xyz) +- [2048 Game Rules]() +- [Privy Documentation](https://docs.privy.io) +- [Viem Documentation](https://viem.sh) +- [Foundry Book](https://book.getfoundry.sh) diff --git a/MIGRATION.md b/MIGRATION.md new file mode 100644 index 0000000..3673861 --- /dev/null +++ b/MIGRATION.md @@ -0,0 +1,133 @@ +# Migration Guide - Monorepo Structure + +This document explains the changes made to convert the 2048-frontend repository into a pnpm monorepo. + +## What Changed + +### Structure Changes + +**Before:** +``` +2048-frontend/ +├── src/ +├── public/ +├── package.json +├── vite.config.ts +├── tsconfig.json +└── ... +``` + +**After:** +``` +2048-monorepo/ +├── packages/ +│ ├── frontend/ # All original frontend files moved here +│ └── contracts/ # New: contracts from 2048-contracts repo +├── package.json # New: root orchestration scripts +├── pnpm-workspace.yaml # New: workspace configuration +└── README.md # Updated with monorepo docs +``` + +### Package Manager + +- **Changed from:** Bun (`bun.lock`) +- **Changed to:** pnpm (`pnpm-lock.yaml`) +- All dependencies remain the same, just managed by pnpm now + +### Running Commands + +**Before:** +```bash +bun dev +bun run build +``` + +**After (from root):** +```bash +pnpm dev # Runs frontend dev server +pnpm build # Builds both packages +pnpm build:frontend # Builds only frontend +pnpm build:contracts # Builds only contracts +``` + +**Or from package directory:** +```bash +cd packages/frontend +pnpm dev +pnpm build +``` + +## Key Benefits + +1. **Single Repository**: Frontend and contracts are now co-located +2. **Unified Commands**: Run builds/tests for all packages from root +3. **Shared Dependencies**: Better dependency management across packages +4. **Easier Development**: No need to switch between repos +5. **Consistent Versioning**: Both packages version together + +## Contract Integration + +The contracts package is now directly accessible from the frontend: + +```typescript +// Contract addresses are still in packages/frontend/src/utils/constants.ts +const TESTNET_ADDRESS = "0xC52d29f79b2552801e95C8Dc7646f59125009904" +const MAINNET_ADDRESS = "0x53748668642735CDa45935716525E7DFbC8aAACC" +``` + +## Environment Variables + +Frontend environment variables remain in the same location: +- `packages/frontend/.env.local` + +No changes needed to existing `.env.local` files - they work as-is. + +## Git Repository + +- The `.git` directory remains at the root +- Both packages share the same git history +- The contracts package was copied from `/Users/krishang/Desktop/code/monad/2048-contracts` (branch: `krishang/deploy`) + +## Workspace Commands + +pnpm supports several workspace-specific commands: + +```bash +# Filter by package +pnpm --filter frontend +pnpm --filter contracts + +# Run recursively (all packages) +pnpm -r + +# Run in specific package directory +cd packages/frontend && pnpm +``` + +## Deployment + +Contract deployment can now be done from the root: + +```bash +pnpm contracts:deploy # With env vars RPC_URL and DEPLOYER_PRIVATE_KEY +pnpm --filter contracts deploy:testnet +pnpm --filter contracts deploy:mainnet +``` + +## No Breaking Changes + +- All frontend code remains exactly the same +- Contract addresses haven't changed +- Build outputs remain in the same locations +- Environment variables work identically +- Development workflow is the same or better + +## Rollback (if needed) + +If you need to rollback to separate repositories: + +1. Copy `packages/frontend/` contents to a new directory +2. Copy `packages/contracts/` contents to a new directory +3. Run `pnpm install` in each directory + +The packages are fully independent and can be separated if needed. diff --git a/README.md b/README.md index 4a2d38f..90f1e3c 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,247 @@ -# Monad 2048 Frontend +# 2048 Onchain Game - Monorepo -**Check out a full writeup of how we built this [here](https://blog.monad.xyz/blog/build-2048).** +A fully onchain implementation of the 2048 game built on Monad. This monorepo contains both the frontend application and the smart contracts that power the game. -Credits: [2048](https://github.com/gabrielecirulli/2048) +## 🏗️ Project Structure -`Monad 2048` is a fully on-chain game implementation of the popular sliding puzzle game 2048. This game connects with a smart contract -on [Monad testnet](https://testnet.monad.xyz/) and records every game and every move on-chain. +``` +2048-monorepo/ +├── packages/ +│ ├── frontend/ # React + Vite frontend application +│ └── contracts/ # Foundry smart contracts +├── package.json # Root package.json with workspace scripts +├── pnpm-workspace.yaml # PNPM workspace configuration +└── README.md +``` + +## 📦 Packages + +### Frontend (`packages/frontend/`) + +React-based web application that provides the user interface for playing 2048 onchain. + +**Tech Stack:** + +- React 19 with TypeScript +- Vite for build tooling +- Tailwind CSS v4 for styling +- Privy for authentication and embedded wallets +- Viem for Ethereum interactions +- Radix UI components + +**Features:** + +- Fully onchain gameplay - each move is a transaction +- Privy embedded wallets (no seed phrases required) +- Network switching (Monad Testnet/Mainnet) +- Real-time game state synchronization with smart contract +- Responsive design with touch support + +### Contracts (`packages/contracts/`) + +Foundry-based smart contracts implementing the 2048 game logic entirely onchain. + +**Tech Stack:** + +- Solidity 0.8.28 +- Foundry (forge, cast, anvil) +- Optimized for gas efficiency + +**Main Contracts:** + +- `Monad2048.sol` - Main game contract with state management +- `LibBoard.sol` - Library for board transformations and move validation + +**Contract Addresses:** + +- **Testnet:** `0xC52d29f79b2552801e95C8Dc7646f59125009904` +- **Mainnet:** `0x53748668642735CDa45935716525E7DFbC8aAACC` + +## 🚀 Getting Started + +### Prerequisites + +- Node.js >= 18 +- pnpm >= 8 +- Foundry (for contracts development) + +### Installation -## Development +1. Clone the repository: -Clone the repo and run the following to install dependencies: +```bash +git clone +cd 2048-frontend +``` + +2. Install dependencies: ```bash -bun install +pnpm install ``` -Set the environment variables in your `.env.local` file (see `.env.local.example`). Then run the following to run the game locally: +This will install dependencies for all workspace packages (frontend and contracts). + +### Development + +Start the frontend development server: ```bash -bun dev +pnpm dev +# or +pnpm dev:frontend ``` -## Feedback +The frontend will be available at `http://localhost:5173` + +## 🛠️ Available Commands + +### Root-Level Commands + +Run commands across all packages or specific packages: + +```bash +# Development +pnpm dev # Start frontend dev server +pnpm dev:frontend # Same as above + +# Build +pnpm build # Build all packages +pnpm build:frontend # Build frontend only +pnpm build:contracts # Build contracts only + +# Test +pnpm test # Run tests for all packages +pnpm test:frontend # Run frontend tests +pnpm test:contracts # Run contract tests + +# Lint +pnpm lint # Lint all packages +pnpm lint:frontend # Lint frontend code +pnpm lint:contracts # Check contract formatting + +# Preview +pnpm preview # Preview frontend production build + +# Contracts +pnpm contracts:deploy # Deploy contracts (requires env vars) +``` + +### Frontend-Specific Commands + +Navigate to `packages/frontend/` and run: + +```bash +pnpm dev # Start dev server +pnpm build # Build for production +pnpm preview # Preview production build +pnpm lint # Lint code +``` + +### Contracts-Specific Commands + +Navigate to `packages/contracts/` and run: + +```bash +pnpm build # Compile contracts +pnpm test # Run tests with verbose output +pnpm test:gas # Run tests with gas report +pnpm lint # Check formatting +pnpm format # Format Solidity code +pnpm clean # Clean build artifacts +pnpm deploy # Deploy with custom RPC_URL +pnpm deploy:testnet # Deploy to Monad testnet +pnpm deploy:mainnet # Deploy to Monad mainnet +``` + +Or use Foundry directly: + +```bash +forge build # Compile contracts +forge test # Run tests +forge test -vvv # Run tests with verbose output +forge fmt # Format contracts +``` + +## 🔧 Configuration + +### Frontend Environment Variables + +Create `packages/frontend/.env.local`: + +```env +VITE_PRIVY_APP_ID=your_privy_app_id +VITE_MONAD_TESTNET_RPC_URL=https://monad-testnet.g.alchemy.com/v2/YOUR_KEY +VITE_MONAD_MAINNET_RPC_URL=https://monad-mainnet.g.alchemy.com/v2/YOUR_KEY +VITE_2048_FAUCET_URL=https://faucet.monad.xyz +``` + +### Contract Deployment + +For contract deployment, set environment variables: + +```bash +export RPC_URL="https://monad-testnet.g.alchemy.com/v2/YOUR_KEY" +export DEPLOYER_PRIVATE_KEY="your_private_key" +pnpm contracts:deploy +``` + +## 📚 How It Works + +### Game Flow + +1. **User Authentication**: Users log in with Privy (Google, Passkey, or Wallet) +2. **Game Start**: First 3 moves are played locally to initialize the board +3. **Initialize Transaction**: After move 3, `initializeGameTransaction` is called with the board states +4. **Subsequent Moves**: Each move after initialization calls `playNewMoveTransaction` +5. **Onchain Validation**: Smart contract validates each move and updates the board state +6. **Game State**: Board is stored onchain and can be queried/resynced at any time + +### Board Encoding + +The board is encoded as a 128-bit integer where each 8-bit segment represents a tile. The value stored is `log₂(tile_value)`, so: + +- Empty tile (0) = 0 +- Tile with 2 = 1 +- Tile with 4 = 2 +- Tile with 2048 = 11 + +## 🧪 Testing + +### Frontend Tests + +```bash +pnpm test:frontend +``` + +### Contract Tests + +```bash +pnpm test:contracts +``` + +The contracts include comprehensive tests for: + +- Board validation and transformations +- Move processing (up, down, left, right) +- Tile merging logic +- Game state management + +## 📝 License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. + +## 🤝 Contributing + +1. Fork the repository +2. Create a feature branch (`git checkout -b feature/amazing-feature`) +3. Commit your changes (`git commit -m 'Add amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request + +## 🔗 Links -Please open issues or PRs on this repository for any feedback. +- [Monad Documentation](https://docs.monad.xyz) +- [Privy Documentation](https://docs.privy.io) +- [Foundry Book](https://book.getfoundry.sh) +- [Vite Documentation](https://vitejs.dev) diff --git a/bun.lock b/bun.lock deleted file mode 100644 index 06ce25b..0000000 --- a/bun.lock +++ /dev/null @@ -1,2004 +0,0 @@ -{ - "lockfileVersion": 1, - "workspaces": { - "": { - "name": "my-app", - "dependencies": { - "@privy-io/react-auth": "^2.8.2", - "@radix-ui/react-alert-dialog": "^1.1.11", - "@radix-ui/react-slot": "^1.2.0", - "@tailwindcss/vite": "^4.0.17", - "@types/node": "^22.13.14", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^0.484.0", - "next-themes": "^0.4.6", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "sonner": "^2.0.3", - "tailwind-merge": "^3.0.2", - "tailwindcss": "^4.0.17", - "tw-animate-css": "^1.2.4", - "viem": "2.43.0", - }, - "devDependencies": { - "@eslint/js": "^9.21.0", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", - "@vitejs/plugin-react-swc": "^3.8.0", - "eslint": "^9.21.0", - "eslint-plugin-react-hooks": "^5.1.0", - "eslint-plugin-react-refresh": "^0.4.19", - "globals": "^15.15.0", - "typescript": "~5.7.2", - "typescript-eslint": "^8.24.1", - "vite": "^6.2.0", - }, - }, - }, - "packages": { - "@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.11.1", "", {}, "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ=="], - - "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], - - "@base-org/account": ["@base-org/account@1.1.1", "", { "dependencies": { "@noble/hashes": "1.4.0", "clsx": "1.2.1", "eventemitter3": "5.0.1", "idb-keyval": "6.2.1", "ox": "0.6.9", "preact": "10.24.2", "viem": "^2.31.7", "zustand": "5.0.3" } }, "sha512-IfVJPrDPhHfqXRDb89472hXkpvJuQQR7FDI9isLPHEqSYt/45whIoBxSPgZ0ssTt379VhQo4+87PWI1DoLSfAQ=="], - - "@coinbase/cdp-sdk": ["@coinbase/cdp-sdk@1.43.1", "", { "dependencies": { "@solana-program/system": "^0.10.0", "@solana-program/token": "^0.9.0", "@solana/kit": "^5.1.0", "@solana/web3.js": "^1.98.1", "abitype": "1.0.6", "axios": "^1.12.2", "axios-retry": "^4.5.0", "jose": "^6.0.8", "md5": "^2.3.0", "uncrypto": "^0.1.3", "viem": "^2.21.26", "zod": "^3.24.4" } }, "sha512-3eXP24p5q68agRgu8grGlF+ASidf3xYSDQtdRuDOFCMZafbqANsjl/JxLwYDmUenRodhxBBJgYJ65nOALP58tA=="], - - "@coinbase/wallet-sdk": ["@coinbase/wallet-sdk@4.3.2", "", { "dependencies": { "@noble/hashes": "^1.4.0", "clsx": "^1.2.1", "eventemitter3": "^5.0.1", "preact": "^10.24.2" } }, "sha512-hOLA2YONq8Z9n8f6oVP6N//FEEHOen7nq+adG/cReol6juFTHUelVN5GnA5zTIxiLFMDcrhDwwgCA6Tdb5jubw=="], - - "@emotion/is-prop-valid": ["@emotion/is-prop-valid@1.4.0", "", { "dependencies": { "@emotion/memoize": "^0.9.0" } }, "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw=="], - - "@emotion/memoize": ["@emotion/memoize@0.9.0", "", {}, "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="], - - "@emotion/unitless": ["@emotion/unitless@0.10.0", "", {}, "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="], - - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], - - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], - - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], - - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], - - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], - - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], - - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], - - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], - - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], - - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], - - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], - - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], - - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], - - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], - - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], - - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], - - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], - - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], - - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], - - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], - - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], - - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], - - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], - - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], - - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], - - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], - - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], - - "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], - - "@eslint/config-array": ["@eslint/config-array@0.21.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="], - - "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="], - - "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="], - - "@eslint/eslintrc": ["@eslint/eslintrc@3.3.3", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ=="], - - "@eslint/js": ["@eslint/js@9.39.2", "", {}, "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA=="], - - "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="], - - "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], - - "@ethereumjs/common": ["@ethereumjs/common@3.2.0", "", { "dependencies": { "@ethereumjs/util": "^8.1.0", "crc-32": "^1.2.0" } }, "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA=="], - - "@ethereumjs/rlp": ["@ethereumjs/rlp@4.0.1", "", { "bin": { "rlp": "bin/rlp" } }, "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw=="], - - "@ethereumjs/tx": ["@ethereumjs/tx@4.2.0", "", { "dependencies": { "@ethereumjs/common": "^3.2.0", "@ethereumjs/rlp": "^4.0.1", "@ethereumjs/util": "^8.1.0", "ethereum-cryptography": "^2.0.0" } }, "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw=="], - - "@ethereumjs/util": ["@ethereumjs/util@8.1.0", "", { "dependencies": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", "micro-ftch": "^0.3.1" } }, "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA=="], - - "@ethersproject/abi": ["@ethersproject/abi@5.8.0", "", { "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/hash": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q=="], - - "@ethersproject/abstract-provider": ["@ethersproject/abstract-provider@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/networks": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/transactions": "^5.8.0", "@ethersproject/web": "^5.8.0" } }, "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg=="], - - "@ethersproject/abstract-signer": ["@ethersproject/abstract-signer@5.8.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0" } }, "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA=="], - - "@ethersproject/address": ["@ethersproject/address@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/rlp": "^5.8.0" } }, "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA=="], - - "@ethersproject/base64": ["@ethersproject/base64@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0" } }, "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ=="], - - "@ethersproject/basex": ["@ethersproject/basex@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/properties": "^5.8.0" } }, "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q=="], - - "@ethersproject/bignumber": ["@ethersproject/bignumber@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "bn.js": "^5.2.1" } }, "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA=="], - - "@ethersproject/bytes": ["@ethersproject/bytes@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A=="], - - "@ethersproject/constants": ["@ethersproject/constants@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0" } }, "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg=="], - - "@ethersproject/contracts": ["@ethersproject/contracts@5.8.0", "", { "dependencies": { "@ethersproject/abi": "^5.8.0", "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/transactions": "^5.8.0" } }, "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ=="], - - "@ethersproject/hash": ["@ethersproject/hash@5.8.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/base64": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA=="], - - "@ethersproject/keccak256": ["@ethersproject/keccak256@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "js-sha3": "0.8.0" } }, "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng=="], - - "@ethersproject/logger": ["@ethersproject/logger@5.8.0", "", {}, "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA=="], - - "@ethersproject/networks": ["@ethersproject/networks@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg=="], - - "@ethersproject/properties": ["@ethersproject/properties@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw=="], - - "@ethersproject/providers": ["@ethersproject/providers@5.8.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/base64": "^5.8.0", "@ethersproject/basex": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/hash": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/networks": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/random": "^5.8.0", "@ethersproject/rlp": "^5.8.0", "@ethersproject/sha2": "^5.8.0", "@ethersproject/strings": "^5.8.0", "@ethersproject/transactions": "^5.8.0", "@ethersproject/web": "^5.8.0", "bech32": "1.1.4", "ws": "8.18.0" } }, "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw=="], - - "@ethersproject/random": ["@ethersproject/random@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A=="], - - "@ethersproject/rlp": ["@ethersproject/rlp@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q=="], - - "@ethersproject/sha2": ["@ethersproject/sha2@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "hash.js": "1.1.7" } }, "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A=="], - - "@ethersproject/signing-key": ["@ethersproject/signing-key@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "bn.js": "^5.2.1", "elliptic": "6.6.1", "hash.js": "1.1.7" } }, "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w=="], - - "@ethersproject/strings": ["@ethersproject/strings@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg=="], - - "@ethersproject/transactions": ["@ethersproject/transactions@5.8.0", "", { "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/rlp": "^5.8.0", "@ethersproject/signing-key": "^5.8.0" } }, "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg=="], - - "@ethersproject/units": ["@ethersproject/units@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ=="], - - "@ethersproject/web": ["@ethersproject/web@5.8.0", "", { "dependencies": { "@ethersproject/base64": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw=="], - - "@floating-ui/core": ["@floating-ui/core@1.7.4", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg=="], - - "@floating-ui/dom": ["@floating-ui/dom@1.7.5", "", { "dependencies": { "@floating-ui/core": "^1.7.4", "@floating-ui/utils": "^0.2.10" } }, "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg=="], - - "@floating-ui/react": ["@floating-ui/react@0.26.28", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.2", "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw=="], - - "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.7", "", { "dependencies": { "@floating-ui/dom": "^1.7.5" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg=="], - - "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], - - "@headlessui/react": ["@headlessui/react@2.2.9", "", { "dependencies": { "@floating-ui/react": "^0.26.16", "@react-aria/focus": "^3.20.2", "@react-aria/interactions": "^3.25.0", "@tanstack/react-virtual": "^3.13.9", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ=="], - - "@heroicons/react": ["@heroicons/react@2.2.0", "", { "peerDependencies": { "react": ">= 16 || ^19.0.0-rc" } }, "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ=="], - - "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], - - "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], - - "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], - - "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], - - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - - "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], - - "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - - "@lit-labs/ssr-dom-shim": ["@lit-labs/ssr-dom-shim@1.5.1", "", {}, "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA=="], - - "@lit/react": ["@lit/react@1.0.8", "", { "peerDependencies": { "@types/react": "17 || 18 || 19" } }, "sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw=="], - - "@lit/reactive-element": ["@lit/reactive-element@2.1.2", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.5.0" } }, "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A=="], - - "@marsidev/react-turnstile": ["@marsidev/react-turnstile@0.4.1", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-uZusUW9mPr0csWpls8bApe5iuRK0YK7H1PCKqfM4djW3OA9GB9rU68irjk7xRO8qlHyj0aDTeVu9tTLPExBO4Q=="], - - "@metamask/abi-utils": ["@metamask/abi-utils@1.2.0", "", { "dependencies": { "@metamask/utils": "^3.4.1", "superstruct": "^1.0.3" } }, "sha512-Hf7fnBDM9ptCPDtq/wQffWbw859CdVGMwlpWUEsTH6gLXhXONGrRXHA2piyYPRuia8YYTdJvRC/zSK1/nyLvYg=="], - - "@metamask/eth-sig-util": ["@metamask/eth-sig-util@6.0.2", "", { "dependencies": { "@ethereumjs/util": "^8.1.0", "@metamask/abi-utils": "^1.2.0", "@metamask/utils": "^5.0.2", "ethereum-cryptography": "^2.1.2", "ethjs-util": "^0.1.6", "tweetnacl": "^1.0.3", "tweetnacl-util": "^0.15.1" } }, "sha512-D6IIefM2vS+4GUGGtezdBbkwUYQC4bCosYx/JteUuF0zfe6lyxR4cruA8+2QHoUg7F7edNH1xymYpqYq1BeOkw=="], - - "@metamask/utils": ["@metamask/utils@5.0.2", "", { "dependencies": { "@ethereumjs/tx": "^4.1.2", "@types/debug": "^4.1.7", "debug": "^4.3.4", "semver": "^7.3.8", "superstruct": "^1.0.3" } }, "sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g=="], - - "@msgpack/msgpack": ["@msgpack/msgpack@3.1.2", "", {}, "sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ=="], - - "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], - - "@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], - - "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@phosphor-icons/webcomponents": ["@phosphor-icons/webcomponents@2.1.5", "", { "dependencies": { "lit": "^3" } }, "sha512-JcvQkZxvcX2jK+QCclm8+e8HXqtdFW9xV4/kk2aL9Y3dJA2oQVt+pzbv1orkumz3rfx4K9mn9fDoMr1He1yr7Q=="], - - "@privy-io/api-base": ["@privy-io/api-base@1.7.0", "", { "dependencies": { "zod": "^3.24.3" } }, "sha512-ji6ARQAAuW/FzRTgft9NCjRuouWX9t+J7JMmvLPsnXQJDFEV9mqh4sWXZhQ8ddTq/iDZ4z/yz1ORJqN8bYAi4Q=="], - - "@privy-io/chains": ["@privy-io/chains@0.0.2", "", {}, "sha512-vT+EcPstcKbvrPyGA2YDD1W8YxaJhKFKYGmS9PaycODpL9HvMsPpkJ1y6SddmVAKL+WIow+nH9cV1/q0aCmPXA=="], - - "@privy-io/ethereum": ["@privy-io/ethereum@0.0.2", "", { "peerDependencies": { "viem": "^2.21.36" } }, "sha512-FnJ1dzgg/tij4jLeKHLlZM9uNk4WN+iIOkc8CG0FZKUQxqXH60Fs/dMF6Xbndd5CQkUO8LUU7FLom/405VKXpQ=="], - - "@privy-io/js-sdk-core": ["@privy-io/js-sdk-core@0.55.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@ethersproject/transactions": "^5.7.0", "@ethersproject/units": "^5.7.0", "@privy-io/api-base": "1.7.0", "@privy-io/chains": "0.0.2", "@privy-io/public-api": "2.45.0", "canonicalize": "^2.0.0", "eventemitter3": "^5.0.1", "fetch-retry": "^6.0.0", "jose": "^4.15.5", "js-cookie": "^3.0.5", "libphonenumber-js": "^1.10.44", "set-cookie-parser": "^2.6.0", "uuid": ">=8 <10" }, "peerDependencies": { "permissionless": "^0.2.47", "viem": "^2.30.6" }, "optionalPeers": ["permissionless", "viem"] }, "sha512-halUc0CS0fKQY5fX7YOBpL1piBz5eg140rL+tjyL7yeBCjNkgf5DX6J4BWzRdr5AplRdMWRBUb1/6+g+pcm4Iw=="], - - "@privy-io/public-api": ["@privy-io/public-api@2.45.0", "", { "dependencies": { "@privy-io/api-base": "1.7.0", "bs58": "^5.0.0", "libphonenumber-js": "^1.10.31", "viem": "^2", "zod": "^3.24.3" } }, "sha512-gEYclrdjirGqKrJBn1ZXkTuZTL/gK9FjPppoxDJ8/dX1JD4/vXahdt0AdgUfNUf70ZfMdVKYhyos1RkvSLFGYQ=="], - - "@privy-io/react-auth": ["@privy-io/react-auth@2.25.0", "", { "dependencies": { "@base-org/account": "^1.1.0", "@coinbase/wallet-sdk": "4.3.2", "@floating-ui/react": "^0.26.22", "@headlessui/react": "^2.2.0", "@heroicons/react": "^2.1.1", "@marsidev/react-turnstile": "^0.4.1", "@metamask/eth-sig-util": "^6.0.0", "@privy-io/api-base": "1.7.0", "@privy-io/chains": "0.0.2", "@privy-io/ethereum": "0.0.2", "@privy-io/js-sdk-core": "0.55.0", "@privy-io/public-api": "2.45.0", "@reown/appkit": "^1.7.11", "@scure/base": "^1.2.5", "@simplewebauthn/browser": "^9.0.1", "@solana/wallet-adapter-base": "0.9.23", "@solana/wallet-standard-wallet-adapter-base": "^1.1.2", "@solana/wallet-standard-wallet-adapter-react": "^1.1.2", "@tanstack/react-virtual": "^3.13.10", "@wallet-standard/app": "^1.0.1", "@walletconnect/ethereum-provider": "2.21.7", "base64-js": "^1.5.1", "dotenv": "^16.0.3", "encoding": "^0.1.13", "eventemitter3": "^5.0.1", "fast-password-entropy": "^1.1.1", "jose": "^4.15.5", "js-cookie": "^3.0.5", "lokijs": "^1.5.12", "lucide-react": "^0.383.0", "md5": "^2.3.0", "mipd": "^0.0.7", "ofetch": "^1.3.4", "pino-pretty": "^10.0.0", "qrcode": "^1.5.1", "react-device-detect": "^2.2.2", "secure-password-utilities": "^0.2.1", "styled-components": "^6.1.13", "stylis": "^4.3.4", "tinycolor2": "^1.6.0", "uuid": ">=8 <10", "viem": "^2.32.0", "zustand": "^5.0.0" }, "peerDependencies": { "@abstract-foundation/agw-client": "^1.0.0", "@solana-program/system": "^0.7.0", "@solana-program/token": "^0.5.1", "@solana/kit": "^2.3.0", "@solana/spl-token": "^0.4.9", "@solana/web3.js": "^1.95.8", "permissionless": "^0.2.47", "react": "^18 || ^19", "react-dom": "^18 || ^19" }, "optionalPeers": ["@abstract-foundation/agw-client", "@solana-program/system", "@solana-program/token", "@solana/kit", "@solana/spl-token", "@solana/web3.js", "permissionless"] }, "sha512-lcILJaXi2wYgxFsxbvSrIM1Cz8FAumMy90YS4R6wcBNWg79U6S6YTHKMa0U8xJPhJUoKrugAi/LTSifYdTCZjg=="], - - "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], - - "@radix-ui/react-alert-dialog": ["@radix-ui/react-alert-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw=="], - - "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], - - "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], - - "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], - - "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], - - "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], - - "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], - - "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], - - "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], - - "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], - - "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - - "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], - - "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], - - "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], - - "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], - - "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], - - "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], - - "@react-aria/focus": ["@react-aria/focus@3.21.3", "", { "dependencies": { "@react-aria/interactions": "^3.26.0", "@react-aria/utils": "^3.32.0", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-FsquWvjSCwC2/sBk4b+OqJyONETUIXQ2vM0YdPAuC+QFQh2DT6TIBo6dOZVSezlhudDla69xFBd6JvCFq1AbUw=="], - - "@react-aria/interactions": ["@react-aria/interactions@3.26.0", "", { "dependencies": { "@react-aria/ssr": "^3.9.10", "@react-aria/utils": "^3.32.0", "@react-stately/flags": "^3.1.2", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-AAEcHiltjfbmP1i9iaVw34Mb7kbkiHpYdqieWufldh4aplWgsF11YQZOfaCJW4QoR2ML4Zzoa9nfFwLXA52R7Q=="], - - "@react-aria/ssr": ["@react-aria/ssr@3.9.10", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ=="], - - "@react-aria/utils": ["@react-aria/utils@3.32.0", "", { "dependencies": { "@react-aria/ssr": "^3.9.10", "@react-stately/flags": "^3.1.2", "@react-stately/utils": "^3.11.0", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-/7Rud06+HVBIlTwmwmJa2W8xVtgxgzm0+kLbuFooZRzKDON6hhozS1dOMR/YLMxyJOaYOTpImcP4vRR9gL1hEg=="], - - "@react-stately/flags": ["@react-stately/flags@3.1.2", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg=="], - - "@react-stately/utils": ["@react-stately/utils@3.11.0", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw=="], - - "@react-types/shared": ["@react-types/shared@3.32.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w=="], - - "@reown/appkit": ["@reown/appkit@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-pay": "1.8.17", "@reown/appkit-polyfills": "1.8.17", "@reown/appkit-scaffold-ui": "1.8.17", "@reown/appkit-ui": "1.8.17", "@reown/appkit-utils": "1.8.17", "@reown/appkit-wallet": "1.8.17", "@walletconnect/universal-provider": "2.23.2", "bs58": "6.0.0", "semver": "7.7.2", "valtio": "2.1.7", "viem": ">=2.44.2" }, "optionalDependencies": { "@lit/react": "1.0.8" } }, "sha512-svov4ShvEi4YboVe+kXT8xGQvDrYsgQBrBmccOel9nT7/lOEDUimFu5Irna8g/8Zji9/XbRrYi49cLPJrzd45Q=="], - - "@reown/appkit-common": ["@reown/appkit-common@1.8.17", "", { "dependencies": { "big.js": "6.2.2", "dayjs": "1.11.13", "viem": ">=2.44.2" } }, "sha512-sccDeSyzP+Bttyp63Wir8Ark/BPi+eenw8/SY2KFkmKh4D/s3MLVTQMLi+zxZYQG2eFlOF1LcGJf2uYFvTXcgA=="], - - "@reown/appkit-controllers": ["@reown/appkit-controllers@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-wallet": "1.8.17", "@walletconnect/universal-provider": "2.23.2", "valtio": "2.1.7", "viem": ">=2.44.2" } }, "sha512-cUZitQRj/jmFKMxWoPnLPT2ki2SAyYMp4xSmPRKu6XO/OGKSbGa3qKkghDBJ+dJJSDXDywn6Vs98RG0o+V48UA=="], - - "@reown/appkit-pay": ["@reown/appkit-pay@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-ui": "1.8.17", "@reown/appkit-utils": "1.8.17", "lit": "3.3.0", "valtio": "2.1.7" } }, "sha512-+8XEysiNQqB4SVkCHCcoS2raUVPRMGbNMERTbbJLWY7mA/XzaX0PPSGoRm1omqQH5oUYhNwYFnHyEsM8K2t5KA=="], - - "@reown/appkit-polyfills": ["@reown/appkit-polyfills@1.8.17", "", { "dependencies": { "buffer": "6.0.3" } }, "sha512-m46ybIDewkGN+1V+po4+OfxnMkzmBOOch58k8Xo0RuWzfAvDZp7XvXClJvdX4kHpW3Olsq1EgRJYoaW5zCDetQ=="], - - "@reown/appkit-scaffold-ui": ["@reown/appkit-scaffold-ui@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-pay": "1.8.17", "@reown/appkit-ui": "1.8.17", "@reown/appkit-utils": "1.8.17", "@reown/appkit-wallet": "1.8.17", "lit": "3.3.0" } }, "sha512-+P+G1uo5k6psLp/U/JFijPRSgw6duECrvIVYS820+RcZvUg7qPa7Pq22sPfqp09oCXnzqO43ac1quM+paklZBA=="], - - "@reown/appkit-ui": ["@reown/appkit-ui@1.8.17", "", { "dependencies": { "@phosphor-icons/webcomponents": "2.1.5", "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-wallet": "1.8.17", "lit": "3.3.0", "qrcode": "1.5.3" } }, "sha512-F8rcebyN0GQaUIKwpzziS0sFb4IARPVHZiRHugFkXAgZRop9LgvJ/4VvT70UJQCrwTbdZNVjmscR2tk98s1eDA=="], - - "@reown/appkit-utils": ["@reown/appkit-utils@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-controllers": "1.8.17", "@reown/appkit-polyfills": "1.8.17", "@reown/appkit-wallet": "1.8.17", "@wallet-standard/wallet": "1.1.0", "@walletconnect/logger": "3.0.2", "@walletconnect/universal-provider": "2.23.2", "valtio": "2.1.7", "viem": ">=2.44.2" }, "optionalDependencies": { "@base-org/account": "2.4.0", "@safe-global/safe-apps-provider": "0.18.6", "@safe-global/safe-apps-sdk": "9.1.0" } }, "sha512-Gmi5EjqB0VpvjMQSTsBcM9me+yADQap1OC8Hxhz353hgwti2PKDmmh0qQDUnKr1RMDljD6AHrqOd7U5hTPUi2g=="], - - "@reown/appkit-wallet": ["@reown/appkit-wallet@1.8.17", "", { "dependencies": { "@reown/appkit-common": "1.8.17", "@reown/appkit-polyfills": "1.8.17", "@walletconnect/logger": "3.0.2", "zod": "3.22.4" } }, "sha512-khuQqHGtCyKSTUlcCnB1Evy1ZLmrU5cUXjP6/zrFYW3m+THnNfr+w6Tp49OfnW1wYsoe53GHzlgTuGASwXYloQ=="], - - "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.57.0", "", { "os": "android", "cpu": "arm" }, "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA=="], - - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.57.0", "", { "os": "android", "cpu": "arm64" }, "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg=="], - - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.57.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg=="], - - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.57.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA=="], - - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.57.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g=="], - - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.57.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA=="], - - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.57.0", "", { "os": "linux", "cpu": "arm" }, "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q=="], - - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.57.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA=="], - - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.57.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw=="], - - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.57.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw=="], - - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.57.0", "", { "os": "linux", "cpu": "none" }, "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q=="], - - "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.57.0", "", { "os": "linux", "cpu": "none" }, "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ=="], - - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.57.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ=="], - - "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.57.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA=="], - - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.57.0", "", { "os": "linux", "cpu": "none" }, "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ=="], - - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.57.0", "", { "os": "linux", "cpu": "none" }, "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ=="], - - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.57.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg=="], - - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.57.0", "", { "os": "linux", "cpu": "x64" }, "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A=="], - - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.57.0", "", { "os": "linux", "cpu": "x64" }, "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw=="], - - "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.57.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw=="], - - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.57.0", "", { "os": "none", "cpu": "arm64" }, "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA=="], - - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.57.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ=="], - - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.57.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA=="], - - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.57.0", "", { "os": "win32", "cpu": "x64" }, "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA=="], - - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.57.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ=="], - - "@safe-global/safe-apps-provider": ["@safe-global/safe-apps-provider@0.18.6", "", { "dependencies": { "@safe-global/safe-apps-sdk": "^9.1.0", "events": "^3.3.0" } }, "sha512-4LhMmjPWlIO8TTDC2AwLk44XKXaK6hfBTWyljDm0HQ6TWlOEijVWNrt2s3OCVMSxlXAcEzYfqyu1daHZooTC2Q=="], - - "@safe-global/safe-apps-sdk": ["@safe-global/safe-apps-sdk@9.1.0", "", { "dependencies": { "@safe-global/safe-gateway-typescript-sdk": "^3.5.3", "viem": "^2.1.1" } }, "sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q=="], - - "@safe-global/safe-gateway-typescript-sdk": ["@safe-global/safe-gateway-typescript-sdk@3.23.1", "", {}, "sha512-6ORQfwtEJYpalCeVO21L4XXGSdbEMfyp2hEv6cP82afKXSwvse6d3sdelgaPWUxHIsFRkWvHDdzh8IyyKHZKxw=="], - - "@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - - "@scure/bip32": ["@scure/bip32@1.7.0", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="], - - "@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@simplewebauthn/browser": ["@simplewebauthn/browser@9.0.1", "", { "dependencies": { "@simplewebauthn/types": "^9.0.1" } }, "sha512-wD2WpbkaEP4170s13/HUxPcAV5y4ZXaKo1TfNklS5zDefPinIgXOpgz1kpEvobAsaLPa2KeH7AKKX/od1mrBJw=="], - - "@simplewebauthn/types": ["@simplewebauthn/types@9.0.1", "", {}, "sha512-tGSRP1QvsAvsJmnOlRQyw/mvK9gnPtjEc5fg2+m8n+QUa+D7rvrKkOYyfpy42GTs90X3RDOnqJgfHt+qO67/+w=="], - - "@solana-program/system": ["@solana-program/system@0.10.0", "", { "peerDependencies": { "@solana/kit": "^5.0" } }, "sha512-Go+LOEZmqmNlfr+Gjy5ZWAdY5HbYzk2RBewD9QinEU/bBSzpFfzqDRT55JjFRBGJUvMgf3C2vfXEGT4i8DSI4g=="], - - "@solana-program/token": ["@solana-program/token@0.9.0", "", { "peerDependencies": { "@solana/kit": "^5.0" } }, "sha512-vnZxndd4ED4Fc56sw93cWZ2djEeeOFxtaPS8SPf5+a+JZjKA/EnKqzbE1y04FuMhIVrLERQ8uR8H2h72eZzlsA=="], - - "@solana/accounts": ["@solana/accounts@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TfOY9xixg5rizABuLVuZ9XI2x2tmWUC/OoN556xwfDlhBHBjKfszicYYOyD6nbFmwTGYarCmyGIdteXxTXIdhQ=="], - - "@solana/addresses": ["@solana/addresses@5.5.1", "", { "dependencies": { "@solana/assertions": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5xoah3Q9G30HQghu/9BiHLb5pzlPKRC3zydQDmE3O9H//WfayxTFppsUDCL6FjYUHqj/wzK6CWHySglc2RkpdA=="], - - "@solana/assertions": ["@solana/assertions@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-YTCSWAlGwSlVPnWtWLm3ukz81wH4j2YaCveK+TjpvUU88hTy6fmUqxi0+hvAMAe4zKXpJyj3Az7BrLJRxbIm4Q=="], - - "@solana/buffer-layout": ["@solana/buffer-layout@4.0.1", "", { "dependencies": { "buffer": "~6.0.3" } }, "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA=="], - - "@solana/codecs": ["@solana/codecs@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/options": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Vea29nJub/bXjfzEV7ZZQ/PWr1pYLZo3z0qW0LQL37uKKVzVFRQlwetd7INk3YtTD3xm9WUYr7bCvYUk3uKy2g=="], - - "@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], - - "@solana/codecs-data-structures": ["@solana/codecs-data-structures@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-97bJWGyUY9WvBz3mX1UV3YPWGDTez6btCfD0ip3UVEXJbItVuUiOkzcO5iFDUtQT5riKT6xC+Mzl+0nO76gd0w=="], - - "@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], - - "@solana/codecs-strings": ["@solana/codecs-strings@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-7klX4AhfHYA+uKKC/nxRGP2MntbYQCR3N6+v7bk1W/rSxYuhNmt+FN8aoThSZtWIKwN6BEyR1167ka8Co1+E7A=="], - - "@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], - - "@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Ni7s2FN33zTzhTFgRjEbOVFO+UAmK8qi3Iu0/GRFYK4jN696OjKHnboSQH/EacQ+yGqS54bfxf409wU5dsLLCw=="], - - "@solana/functional": ["@solana/functional@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-tTHoJcEQq3gQx5qsdsDJ0LEJeFzwNpXD80xApW9o/PPoCNimI3SALkZl+zNW8VnxRrV3l3yYvfHWBKe/X3WG3w=="], - - "@solana/instruction-plans": ["@solana/instruction-plans@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/promises": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-7z3CB7YMcFKuVvgcnNY8bY6IsZ8LG61Iytbz7HpNVGX2u1RthOs1tRW8luTzSG1MPL0Ox7afyAVMYeFqSPHnaQ=="], - - "@solana/instructions": ["@solana/instructions@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h0G1CG6S+gUUSt0eo6rOtsaXRBwCq1+Js2a+Ps9Bzk9q7YHNFA75/X0NWugWLgC92waRp66hrjMTiYYnLBoWOQ=="], - - "@solana/keys": ["@solana/keys@5.5.1", "", { "dependencies": { "@solana/assertions": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-KRD61cL7CRL+b4r/eB9dEoVxIf/2EJ1Pm1DmRYhtSUAJD2dJ5Xw8QFuehobOGm9URqQ7gaQl+Fkc1qvDlsWqKg=="], - - "@solana/kit": ["@solana/kit@5.5.1", "", { "dependencies": { "@solana/accounts": "5.5.1", "@solana/addresses": "5.5.1", "@solana/codecs": "5.5.1", "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/instruction-plans": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/offchain-messages": "5.5.1", "@solana/plugin-core": "5.5.1", "@solana/programs": "5.5.1", "@solana/rpc": "5.5.1", "@solana/rpc-api": "5.5.1", "@solana/rpc-parsed-types": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-subscriptions": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/signers": "5.5.1", "@solana/sysvars": "5.5.1", "@solana/transaction-confirmation": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-irKUGiV2yRoyf+4eGQ/ZeCRxa43yjFEL1DUI5B0DkcfZw3cr0VJtVJnrG8OtVF01vT0OUfYOcUn6zJW5TROHvQ=="], - - "@solana/nominal-types": ["@solana/nominal-types@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-I1ImR+kfrLFxN5z22UDiTWLdRZeKtU0J/pkWkO8qm/8WxveiwdIv4hooi8pb6JnlR4mSrWhq0pCIOxDYrL9GIQ=="], - - "@solana/offchain-messages": ["@solana/offchain-messages@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/keys": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-g+xHH95prTU+KujtbOzj8wn+C7ZNoiLhf3hj6nYq3MTyxOXtBEysguc97jJveUZG0K97aIKG6xVUlMutg5yxhw=="], - - "@solana/options": ["@solana/options@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-eo971c9iLNLmk+yOFyo7yKIJzJ/zou6uKpy6mBuyb/thKtS/haiKIc3VLhyTXty3OH2PW8yOlORJnv4DexJB8A=="], - - "@solana/plugin-core": ["@solana/plugin-core@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-VUZl30lDQFJeiSyNfzU1EjYt2QZvoBFKEwjn1lilUJw7KgqD5z7mbV7diJhT+dLFs36i0OsjXvq5kSygn8YJ3A=="], - - "@solana/programs": ["@solana/programs@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-7U9kn0Jsx1NuBLn5HRTFYh78MV4XN145Yc3WP/q5BlqAVNlMoU9coG5IUTJIG847TUqC1lRto3Dnpwm6T4YRpA=="], - - "@solana/promises": ["@solana/promises@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-T9lfuUYkGykJmppEcssNiCf6yiYQxJkhiLPP+pyAc2z84/7r3UVIb2tNJk4A9sucS66pzJnVHZKcZVGUUp6wzA=="], - - "@solana/rpc": ["@solana/rpc@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/fast-stable-stringify": "5.5.1", "@solana/functional": "5.5.1", "@solana/rpc-api": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-transport-http": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ku8zTUMrkCWci66PRIBC+1mXepEnZH/q1f3ck0kJZ95a06bOTl5KU7HeXWtskkyefzARJ5zvCs54AD5nxjQJ+A=="], - - "@solana/rpc-api": ["@solana/rpc-api@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/keys": "5.5.1", "@solana/rpc-parsed-types": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XWOQQPhKl06Vj0xi3RYHAc6oEQd8B82okYJ04K7N0Vvy3J4PN2cxeK7klwkjgavdcN9EVkYCChm2ADAtnztKnA=="], - - "@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HEi3G2nZqGEsa3vX6U0FrXLaqnUCg4SKIUrOe8CezD+cSFbRTOn3rCLrUmJrhVyXlHoQVaRO9mmeovk31jWxJg=="], - - "@solana/rpc-spec": ["@solana/rpc-spec@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/rpc-spec-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-m3LX2bChm3E3by4mQrH4YwCAFY57QBzuUSWqlUw7ChuZ+oLLOq7b2czi4i6L4Vna67j3eCmB3e+4tqy1j5wy7Q=="], - - "@solana/rpc-spec-types": ["@solana/rpc-spec-types@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-6OFKtRpIEJQs8Jb2C4OO8KyP2h2Hy1MFhatMAoXA+0Ik8S3H+CicIuMZvGZ91mIu/tXicuOOsNNLu3HAkrakrw=="], - - "@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/fast-stable-stringify": "5.5.1", "@solana/functional": "5.5.1", "@solana/promises": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-subscriptions-api": "5.5.1", "@solana/rpc-subscriptions-channel-websocket": "5.5.1", "@solana/rpc-subscriptions-spec": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/subscribable": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CTMy5bt/6mDh4tc6vUJms9EcuZj3xvK0/xq8IQ90rhkpYvate91RjBP+egvjgSayUg9yucU9vNuUpEjz4spM7w=="], - - "@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/keys": "5.5.1", "@solana/rpc-subscriptions-spec": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5Oi7k+GdeS8xR2ly1iuSFkAv6CZqwG0Z6b1QZKbEgxadE1XGSDrhM2cn59l+bqCozUWCqh4c/A2znU/qQjROlw=="], - - "@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/rpc-subscriptions-spec": "5.5.1", "@solana/subscribable": "5.5.1", "ws": "^8.19.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-7tGfBBrYY8TrngOyxSHoCU5shy86iA9SRMRrPSyBhEaZRAk6dnbdpmUTez7gtdVo0BCvh9nzQtUycKWSS7PnFQ=="], - - "@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/promises": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/subscribable": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iq+rGq5fMKP3/mKHPNB6MC8IbVW41KGZg83Us/+LE3AWOTWV1WT20KT2iH1F1ik9roi42COv/TpoZZvhKj45XQ=="], - - "@solana/rpc-transformers": ["@solana/rpc-transformers@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-OsWqLCQdcrRJKvHiMmwFhp9noNZ4FARuMkHT5us3ustDLXaxOjF0gfqZLnMkulSLcKt7TGXqMhBV+HCo7z5M8Q=="], - - "@solana/rpc-transport-http": ["@solana/rpc-transport-http@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "undici-types": "^7.19.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-yv8GoVSHqEV0kUJEIhkdOVkR2SvJ6yoWC51cJn2rSV7plr6huLGe0JgujCmB7uZhhaLbcbP3zxXxu9sOjsi7Fg=="], - - "@solana/rpc-types": ["@solana/rpc-types@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-bibTFQ7PbHJJjGJPmfYC2I+/5CRFS4O2p9WwbFraX1Keeel+nRrt/NBXIy8veP5AEn2sVJIyJPpWBRpCx1oATA=="], - - "@solana/signers": ["@solana/signers@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/offchain-messages": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-FY0IVaBT2kCAze55vEieR6hag4coqcuJ31Aw3hqRH7mv6sV8oqwuJmUrx+uFwOp1gwd5OEAzlv6N4hOOple4sQ=="], - - "@solana/subscribable": ["@solana/subscribable@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-9K0PsynFq0CsmK1CDi5Y2vUIJpCqkgSS5yfDN0eKPgHqEptLEaia09Kaxc90cSZDZU5mKY/zv1NBmB6Aro9zQQ=="], - - "@solana/sysvars": ["@solana/sysvars@5.5.1", "", { "dependencies": { "@solana/accounts": "5.5.1", "@solana/codecs": "5.5.1", "@solana/errors": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k3Quq87Mm+geGUu1GWv6knPk0ALsfY6EKSJGw9xUJDHzY/RkYSBnh0RiOrUhtFm2TDNjOailg8/m0VHmi3reFA=="], - - "@solana/transaction-confirmation": ["@solana/transaction-confirmation@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/keys": "5.5.1", "@solana/promises": "5.5.1", "@solana/rpc": "5.5.1", "@solana/rpc-subscriptions": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-j4mKlYPHEyu+OD7MBt3jRoX4ScFgkhZC6H65on4Fux6LMScgivPJlwnKoZMnsgxFgWds0pl+BYzSiALDsXlYtw=="], - - "@solana/transaction-messages": ["@solana/transaction-messages@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/instructions": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-aXyhMCEaAp3M/4fP0akwBBQkFPr4pfwoC5CLDq999r/FUwDax2RE/h4Ic7h2Xk+JdcUwsb+rLq85Y52hq84XvQ=="], - - "@solana/transactions": ["@solana/transactions@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-8hHtDxtqalZ157pnx6p8k10D7J/KY/biLzfgh9R09VNLLY3Fqi7kJvJCr7M2ik3oRll56pxhraAGCC9yIT6eOA=="], - - "@solana/wallet-adapter-base": ["@solana/wallet-adapter-base@0.9.23", "", { "dependencies": { "@solana/wallet-standard-features": "^1.1.0", "@wallet-standard/base": "^1.0.1", "@wallet-standard/features": "^1.0.3", "eventemitter3": "^4.0.7" }, "peerDependencies": { "@solana/web3.js": "^1.77.3" } }, "sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw=="], - - "@solana/wallet-standard-chains": ["@solana/wallet-standard-chains@1.1.1", "", { "dependencies": { "@wallet-standard/base": "^1.1.0" } }, "sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw=="], - - "@solana/wallet-standard-features": ["@solana/wallet-standard-features@1.3.0", "", { "dependencies": { "@wallet-standard/base": "^1.1.0", "@wallet-standard/features": "^1.1.0" } }, "sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg=="], - - "@solana/wallet-standard-util": ["@solana/wallet-standard-util@1.1.2", "", { "dependencies": { "@noble/curves": "^1.8.0", "@solana/wallet-standard-chains": "^1.1.1", "@solana/wallet-standard-features": "^1.3.0" } }, "sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA=="], - - "@solana/wallet-standard-wallet-adapter-base": ["@solana/wallet-standard-wallet-adapter-base@1.1.4", "", { "dependencies": { "@solana/wallet-adapter-base": "^0.9.23", "@solana/wallet-standard-chains": "^1.1.1", "@solana/wallet-standard-features": "^1.3.0", "@solana/wallet-standard-util": "^1.1.2", "@wallet-standard/app": "^1.1.0", "@wallet-standard/base": "^1.1.0", "@wallet-standard/features": "^1.1.0", "@wallet-standard/wallet": "^1.1.0" }, "peerDependencies": { "@solana/web3.js": "^1.98.0", "bs58": "^6.0.0" } }, "sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw=="], - - "@solana/wallet-standard-wallet-adapter-react": ["@solana/wallet-standard-wallet-adapter-react@1.1.4", "", { "dependencies": { "@solana/wallet-standard-wallet-adapter-base": "^1.1.4", "@wallet-standard/app": "^1.1.0", "@wallet-standard/base": "^1.1.0" }, "peerDependencies": { "@solana/wallet-adapter-base": "*", "react": "*" } }, "sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg=="], - - "@solana/web3.js": ["@solana/web3.js@1.98.4", "", { "dependencies": { "@babel/runtime": "^7.25.0", "@noble/curves": "^1.4.2", "@noble/hashes": "^1.4.0", "@solana/buffer-layout": "^4.0.1", "@solana/codecs-numbers": "^2.1.0", "agentkeepalive": "^4.5.0", "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": "^9.0.2", "superstruct": "^2.0.2" } }, "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw=="], - - "@swc/core": ["@swc/core@1.15.11", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.15.11", "@swc/core-darwin-x64": "1.15.11", "@swc/core-linux-arm-gnueabihf": "1.15.11", "@swc/core-linux-arm64-gnu": "1.15.11", "@swc/core-linux-arm64-musl": "1.15.11", "@swc/core-linux-x64-gnu": "1.15.11", "@swc/core-linux-x64-musl": "1.15.11", "@swc/core-win32-arm64-msvc": "1.15.11", "@swc/core-win32-ia32-msvc": "1.15.11", "@swc/core-win32-x64-msvc": "1.15.11" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w=="], - - "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.15.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg=="], - - "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.15.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA=="], - - "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.15.11", "", { "os": "linux", "cpu": "arm" }, "sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg=="], - - "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.15.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA=="], - - "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.15.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w=="], - - "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.15.11", "", { "os": "linux", "cpu": "x64" }, "sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ=="], - - "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.15.11", "", { "os": "linux", "cpu": "x64" }, "sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw=="], - - "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.15.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA=="], - - "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.15.11", "", { "os": "win32", "cpu": "ia32" }, "sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw=="], - - "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.15.11", "", { "os": "win32", "cpu": "x64" }, "sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw=="], - - "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], - - "@swc/helpers": ["@swc/helpers@0.5.18", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ=="], - - "@swc/types": ["@swc/types@0.1.25", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g=="], - - "@tailwindcss/node": ["@tailwindcss/node@4.1.18", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.18" } }, "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ=="], - - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.18", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.18", "@tailwindcss/oxide-darwin-arm64": "4.1.18", "@tailwindcss/oxide-darwin-x64": "4.1.18", "@tailwindcss/oxide-freebsd-x64": "4.1.18", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", "@tailwindcss/oxide-linux-x64-musl": "4.1.18", "@tailwindcss/oxide-wasm32-wasi": "4.1.18", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" } }, "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A=="], - - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.18", "", { "os": "android", "cpu": "arm64" }, "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q=="], - - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.18", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A=="], - - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.18", "", { "os": "darwin", "cpu": "x64" }, "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw=="], - - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.18", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA=="], - - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18", "", { "os": "linux", "cpu": "arm" }, "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA=="], - - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw=="], - - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg=="], - - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g=="], - - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ=="], - - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.18", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.0", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA=="], - - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.18", "", { "os": "win32", "cpu": "arm64" }, "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA=="], - - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.18", "", { "os": "win32", "cpu": "x64" }, "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q=="], - - "@tailwindcss/vite": ["@tailwindcss/vite@4.1.18", "", { "dependencies": { "@tailwindcss/node": "4.1.18", "@tailwindcss/oxide": "4.1.18", "tailwindcss": "4.1.18" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA=="], - - "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.18", "", { "dependencies": { "@tanstack/virtual-core": "3.13.18" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-dZkhyfahpvlaV0rIKnvQiVoWPyURppl6w4m9IwMDpuIjcJ1sD9YGWrt0wISvgU7ewACXx2Ct46WPgI6qAD4v6A=="], - - "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.18", "", {}, "sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg=="], - - "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], - - "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], - - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - - "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - - "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - - "@types/node": ["@types/node@22.19.7", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw=="], - - "@types/react": ["@types/react@19.2.10", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw=="], - - "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], - - "@types/stylis": ["@types/stylis@4.2.7", "", {}, "sha512-VgDNokpBoKF+wrdvhAAfS55OMQpL6QRglwTwNC3kIgBrzZxA4WsFj+2eLfEA/uMUDzBcEhYmjSbwQakn/i3ajA=="], - - "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], - - "@types/uuid": ["@types/uuid@8.3.4", "", {}, "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw=="], - - "@types/ws": ["@types/ws@7.4.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww=="], - - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.54.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.54.0", "@typescript-eslint/type-utils": "8.54.0", "@typescript-eslint/utils": "8.54.0", "@typescript-eslint/visitor-keys": "8.54.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.54.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ=="], - - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.54.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.54.0", "@typescript-eslint/types": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0", "@typescript-eslint/visitor-keys": "8.54.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA=="], - - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.54.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.54.0", "@typescript-eslint/types": "^8.54.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g=="], - - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.54.0", "", { "dependencies": { "@typescript-eslint/types": "8.54.0", "@typescript-eslint/visitor-keys": "8.54.0" } }, "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg=="], - - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.54.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw=="], - - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.54.0", "", { "dependencies": { "@typescript-eslint/types": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0", "@typescript-eslint/utils": "8.54.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA=="], - - "@typescript-eslint/types": ["@typescript-eslint/types@8.54.0", "", {}, "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA=="], - - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.54.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.54.0", "@typescript-eslint/tsconfig-utils": "8.54.0", "@typescript-eslint/types": "8.54.0", "@typescript-eslint/visitor-keys": "8.54.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA=="], - - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.54.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.54.0", "@typescript-eslint/types": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA=="], - - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.54.0", "", { "dependencies": { "@typescript-eslint/types": "8.54.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA=="], - - "@vitejs/plugin-react-swc": ["@vitejs/plugin-react-swc@3.11.0", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.27", "@swc/core": "^1.12.11" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7" } }, "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w=="], - - "@wallet-standard/app": ["@wallet-standard/app@1.1.0", "", { "dependencies": { "@wallet-standard/base": "^1.1.0" } }, "sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ=="], - - "@wallet-standard/base": ["@wallet-standard/base@1.1.0", "", {}, "sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ=="], - - "@wallet-standard/features": ["@wallet-standard/features@1.1.0", "", { "dependencies": { "@wallet-standard/base": "^1.1.0" } }, "sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg=="], - - "@wallet-standard/wallet": ["@wallet-standard/wallet@1.1.0", "", { "dependencies": { "@wallet-standard/base": "^1.1.0" } }, "sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg=="], - - "@walletconnect/core": ["@walletconnect/core@2.21.7", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.7", "@walletconnect/utils": "2.21.7", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.39.3", "events": "3.3.0", "uint8arrays": "3.1.1" } }, "sha512-q/Au5Ne3g4R+q4GvHR5cvRd3+ha00QZCZiCs058lmy+eDbiZd0YsautvTPJ5a2guD6UaS1k/w5e1JHgixdcgLA=="], - - "@walletconnect/environment": ["@walletconnect/environment@1.0.1", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg=="], - - "@walletconnect/ethereum-provider": ["@walletconnect/ethereum-provider@2.21.7", "", { "dependencies": { "@reown/appkit": "1.7.8", "@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/keyvaluestorage": "1.1.1", "@walletconnect/sign-client": "2.21.7", "@walletconnect/types": "2.21.7", "@walletconnect/universal-provider": "2.21.7", "@walletconnect/utils": "2.21.7", "events": "3.3.0" } }, "sha512-T+cBFCw095tDpR35WqwsTFod2ZsizmLfieSbTqpQDpNjhQyFwYf9d+tn2kcBFmxzENXAsWA8BIZK1tjRrXKtog=="], - - "@walletconnect/events": ["@walletconnect/events@1.0.1", "", { "dependencies": { "keyvaluestorage-interface": "^1.0.0", "tslib": "1.14.1" } }, "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ=="], - - "@walletconnect/heartbeat": ["@walletconnect/heartbeat@1.2.2", "", { "dependencies": { "@walletconnect/events": "^1.0.1", "@walletconnect/time": "^1.0.2", "events": "^3.3.0" } }, "sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw=="], - - "@walletconnect/jsonrpc-http-connection": ["@walletconnect/jsonrpc-http-connection@1.0.8", "", { "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.6", "@walletconnect/safe-json": "^1.0.1", "cross-fetch": "^3.1.4", "events": "^3.3.0" } }, "sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw=="], - - "@walletconnect/jsonrpc-provider": ["@walletconnect/jsonrpc-provider@1.0.14", "", { "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.8", "@walletconnect/safe-json": "^1.0.2", "events": "^3.3.0" } }, "sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow=="], - - "@walletconnect/jsonrpc-types": ["@walletconnect/jsonrpc-types@1.0.4", "", { "dependencies": { "events": "^3.3.0", "keyvaluestorage-interface": "^1.0.0" } }, "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ=="], - - "@walletconnect/jsonrpc-utils": ["@walletconnect/jsonrpc-utils@1.0.8", "", { "dependencies": { "@walletconnect/environment": "^1.0.1", "@walletconnect/jsonrpc-types": "^1.0.3", "tslib": "1.14.1" } }, "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw=="], - - "@walletconnect/jsonrpc-ws-connection": ["@walletconnect/jsonrpc-ws-connection@1.0.16", "", { "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.6", "@walletconnect/safe-json": "^1.0.2", "events": "^3.3.0", "ws": "^7.5.1" } }, "sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q=="], - - "@walletconnect/keyvaluestorage": ["@walletconnect/keyvaluestorage@1.1.1", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.1", "idb-keyval": "^6.2.1", "unstorage": "^1.9.0" }, "peerDependencies": { "@react-native-async-storage/async-storage": "1.x" }, "optionalPeers": ["@react-native-async-storage/async-storage"] }, "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA=="], - - "@walletconnect/logger": ["@walletconnect/logger@3.0.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "10.0.0" } }, "sha512-7wR3wAwJTOmX4gbcUZcFMov8fjftY05+5cO/d4cpDD8wDzJ+cIlKdYOXaXfxHLSYeDazMXIsxMYjHYVDfkx+nA=="], - - "@walletconnect/relay-api": ["@walletconnect/relay-api@1.0.11", "", { "dependencies": { "@walletconnect/jsonrpc-types": "^1.0.2" } }, "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q=="], - - "@walletconnect/relay-auth": ["@walletconnect/relay-auth@1.1.0", "", { "dependencies": { "@noble/curves": "1.8.0", "@noble/hashes": "1.7.0", "@walletconnect/safe-json": "^1.0.1", "@walletconnect/time": "^1.0.2", "uint8arrays": "^3.0.0" } }, "sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ=="], - - "@walletconnect/safe-json": ["@walletconnect/safe-json@1.0.2", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA=="], - - "@walletconnect/sign-client": ["@walletconnect/sign-client@2.21.7", "", { "dependencies": { "@walletconnect/core": "2.21.7", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.7", "@walletconnect/utils": "2.21.7", "events": "3.3.0" } }, "sha512-9k/JEl9copR6nXRhqnmzWz2Zk1hiWysH+o6bp6Cqo8TgDUrZoMLBZMZ6qbo+2HLI54V02kKf0Vg8M81nNFOpjQ=="], - - "@walletconnect/time": ["@walletconnect/time@1.0.2", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g=="], - - "@walletconnect/types": ["@walletconnect/types@2.21.7", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-kyGnFje4Iq+XGkZZcSoAIrJWBE4BeghVW4O7n9e1MhUyeOOtO55M/kcqceNGYrvwjHvdN+Kf+aoLnKC0zKlpbQ=="], - - "@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.23.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@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/keyvaluestorage": "1.1.1", "@walletconnect/logger": "3.0.2", "@walletconnect/sign-client": "2.23.2", "@walletconnect/types": "2.23.2", "@walletconnect/utils": "2.23.2", "es-toolkit": "1.39.3", "events": "3.3.0" } }, "sha512-vs9iorPUAiVesFJ95O6XvLjmRgF+B2TspxJNL90ZULbrkRw4JFsmaRdb965PZKc+s182k1MkS/MQ0o964xRcEw=="], - - "@walletconnect/utils": ["@walletconnect/utils@2.21.7", "", { "dependencies": { "@msgpack/msgpack": "3.1.2", "@noble/ciphers": "1.3.0", "@noble/curves": "1.9.2", "@noble/hashes": "1.8.0", "@scure/base": "1.2.6", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.7", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "blakejs": "1.2.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "query-string": "7.1.3", "uint8arrays": "3.1.1", "viem": "2.31.0" } }, "sha512-qyaclTgcFf9AwVuoV8CLLg8wfH3nX7yZdpylNkDqCpS7wawQL9zmFFTaGgma8sQrCsd3Sd9jUIymcpRvCJnSTw=="], - - "@walletconnect/window-getters": ["@walletconnect/window-getters@1.0.1", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q=="], - - "@walletconnect/window-metadata": ["@walletconnect/window-metadata@1.0.1", "", { "dependencies": { "@walletconnect/window-getters": "^1.0.1", "tslib": "1.14.1" } }, "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA=="], - - "abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], - - "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], - - "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - - "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - - "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], - - "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], - - "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], - - "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - - "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], - - "axios": ["axios@1.13.4", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg=="], - - "axios-retry": ["axios-retry@4.5.0", "", { "dependencies": { "is-retry-allowed": "^2.2.0" }, "peerDependencies": { "axios": "0.x || 1.x" } }, "sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ=="], - - "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "base-x": ["base-x@4.0.1", "", {}, "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw=="], - - "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], - - "bech32": ["bech32@1.1.4", "", {}, "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="], - - "big.js": ["big.js@6.2.2", "", {}, "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ=="], - - "blakejs": ["blakejs@1.2.1", "", {}, "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ=="], - - "bn.js": ["bn.js@5.2.2", "", {}, "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw=="], - - "borsh": ["borsh@0.7.0", "", { "dependencies": { "bn.js": "^5.2.0", "bs58": "^4.0.0", "text-encoding-utf-8": "^1.0.2" } }, "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA=="], - - "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - - "brorand": ["brorand@1.1.0", "", {}, "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="], - - "bs58": ["bs58@5.0.0", "", { "dependencies": { "base-x": "^4.0.0" } }, "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ=="], - - "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - - "bufferutil": ["bufferutil@4.1.0", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - - "camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], - - "camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="], - - "canonicalize": ["canonicalize@2.1.0", "", { "bin": { "canonicalize": "bin/canonicalize.js" } }, "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ=="], - - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - - "charenc": ["charenc@0.0.2", "", {}, "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="], - - "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], - - "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], - - "cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="], - - "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], - - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], - - "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], - - "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - - "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - - "cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], - - "crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="], - - "cross-fetch": ["cross-fetch@3.2.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q=="], - - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - - "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], - - "crypt": ["crypt@0.0.2", "", {}, "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="], - - "css-color-keywords": ["css-color-keywords@1.0.0", "", {}, "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg=="], - - "css-to-react-native": ["css-to-react-native@3.2.0", "", { "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", "postcss-value-parser": "^4.0.2" } }, "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ=="], - - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - - "dateformat": ["dateformat@4.6.3", "", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="], - - "dayjs": ["dayjs@1.11.13", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], - - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], - - "decode-uri-component": ["decode-uri-component@0.2.2", "", {}, "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="], - - "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], - - "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], - - "delay": ["delay@5.0.0", "", {}, "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw=="], - - "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], - - "derive-valtio": ["derive-valtio@0.1.0", "", { "peerDependencies": { "valtio": "*" } }, "sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A=="], - - "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], - - "detect-browser": ["detect-browser@5.3.0", "", {}, "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w=="], - - "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - - "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], - - "dijkstrajs": ["dijkstrajs@1.0.3", "", {}, "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="], - - "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], - - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - - "duplexify": ["duplexify@4.1.3", "", { "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.2" } }, "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA=="], - - "elliptic": ["elliptic@6.6.1", "", { "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g=="], - - "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "encode-utf8": ["encode-utf8@1.0.3", "", {}, "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="], - - "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], - - "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], - - "enhanced-resolve": ["enhanced-resolve@5.18.4", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q=="], - - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - - "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], - - "es-toolkit": ["es-toolkit@1.39.3", "", {}, "sha512-Qb/TCFCldgOy8lZ5uC7nLGdqJwSabkQiYQShmw4jyiPk1pZzaYWTwaYKYP7EgLccWYgZocMrtItrwh683voaww=="], - - "es6-promise": ["es6-promise@4.2.8", "", {}, "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="], - - "es6-promisify": ["es6-promisify@5.0.0", "", { "dependencies": { "es6-promise": "^4.0.3" } }, "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ=="], - - "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], - - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - - "eslint": ["eslint@9.39.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw=="], - - "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.2.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg=="], - - "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.26", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ=="], - - "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], - - "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], - - "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], - - "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], - - "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], - - "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], - - "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - - "ethereum-cryptography": ["ethereum-cryptography@2.2.1", "", { "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", "@scure/bip32": "1.4.0", "@scure/bip39": "1.3.0" } }, "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg=="], - - "ethjs-util": ["ethjs-util@0.1.6", "", { "dependencies": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" } }, "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w=="], - - "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], - - "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], - - "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - - "eyes": ["eyes@0.1.8", "", {}, "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ=="], - - "fast-copy": ["fast-copy@3.0.2", "", {}, "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ=="], - - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], - - "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - - "fast-password-entropy": ["fast-password-entropy@1.1.1", "", {}, "sha512-dxm29/BPFrNgyEDygg/lf9c2xQR0vnQhG7+hZjAI39M/3um9fD4xiqG6F0ZjW6bya5m9CI0u6YryHGRtxCGCiw=="], - - "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], - - "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], - - "fast-stable-stringify": ["fast-stable-stringify@1.0.0", "", {}, "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag=="], - - "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - - "fetch-retry": ["fetch-retry@6.0.0", "", {}, "sha512-BUFj1aMubgib37I3v4q78fYo63Po7t4HUPTpQ6/QE6yK6cIQrP+W43FYToeTEyg5m2Y7eFUtijUuAv/PDlWuag=="], - - "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], - - "filter-obj": ["filter-obj@1.1.0", "", {}, "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="], - - "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], - - "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], - - "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], - - "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], - - "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], - - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - - "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - - "globals": ["globals@15.15.0", "", {}, "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg=="], - - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - - "h3": ["h3@1.15.5", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg=="], - - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - - "hash.js": ["hash.js@1.1.7", "", { "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - - "help-me": ["help-me@5.0.0", "", {}, "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg=="], - - "hmac-drbg": ["hmac-drbg@1.0.1", "", { "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg=="], - - "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="], - - "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], - - "idb-keyval": ["idb-keyval@6.2.1", "", {}, "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg=="], - - "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - - "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - - "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - - "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], - - "is-buffer": ["is-buffer@1.1.6", "", {}, "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="], - - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], - - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - - "is-hex-prefixed": ["is-hex-prefixed@1.0.0", "", {}, "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA=="], - - "is-retry-allowed": ["is-retry-allowed@2.2.0", "", {}, "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg=="], - - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - - "isomorphic-ws": ["isomorphic-ws@4.0.1", "", { "peerDependencies": { "ws": "*" } }, "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w=="], - - "isows": ["isows@1.0.7", "", { "peerDependencies": { "ws": "*" } }, "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg=="], - - "jayson": ["jayson@4.3.0", "", { "dependencies": { "@types/connect": "^3.4.33", "@types/node": "^12.12.54", "@types/ws": "^7.4.4", "commander": "^2.20.3", "delay": "^5.0.0", "es6-promisify": "^5.0.0", "eyes": "^0.1.8", "isomorphic-ws": "^4.0.1", "json-stringify-safe": "^5.0.1", "stream-json": "^1.9.1", "uuid": "^8.3.2", "ws": "^7.5.10" }, "bin": { "jayson": "bin/jayson.js" } }, "sha512-AauzHcUcqs8OBnCHOkJY280VaTiCm57AbuO7lqzcw7JapGj50BisE3xhksye4zlTSR1+1tAz67wLTl8tEH1obQ=="], - - "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], - - "jose": ["jose@4.15.9", "", {}, "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA=="], - - "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], - - "js-cookie": ["js-cookie@3.0.5", "", {}, "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="], - - "js-sha3": ["js-sha3@0.8.0", "", {}, "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="], - - "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], - - "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - - "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], - - "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], - - "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - - "keyvaluestorage-interface": ["keyvaluestorage-interface@1.0.0", "", {}, "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g=="], - - "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], - - "libphonenumber-js": ["libphonenumber-js@1.12.35", "", {}, "sha512-T/Cz6iLcsZdb5jDncDcUNhSAJ0VlSC9TnsqtBNdpkaAmy24/R1RhErtNWVWBrcUZKs9hSgaVsBkc7HxYnazIfw=="], - - "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], - - "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], - - "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="], - - "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="], - - "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="], - - "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="], - - "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="], - - "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="], - - "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="], - - "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="], - - "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="], - - "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="], - - "lit": ["lit@3.3.0", "", { "dependencies": { "@lit/reactive-element": "^2.1.0", "lit-element": "^4.2.0", "lit-html": "^3.3.0" } }, "sha512-DGVsqsOIHBww2DqnuZzW7QsuCdahp50ojuDaBPC7jUDRpYoH0z7kHBBYZewRzer75FwtrkmkKk7iOAwSaWdBmw=="], - - "lit-element": ["lit-element@4.2.2", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.5.0", "@lit/reactive-element": "^2.1.0", "lit-html": "^3.3.0" } }, "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w=="], - - "lit-html": ["lit-html@3.3.2", "", { "dependencies": { "@types/trusted-types": "^2.0.2" } }, "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw=="], - - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - - "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], - - "lokijs": ["lokijs@1.5.12", "", {}, "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q=="], - - "lru-cache": ["lru-cache@11.2.5", "", {}, "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw=="], - - "lucide-react": ["lucide-react@0.484.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-oZy8coK9kZzvqhSgfbGkPtTgyjpBvs3ukLgDPv14dSOZtBtboryWF5o8i3qen7QbGg7JhiJBz5mK1p8YoMZTLQ=="], - - "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "md5": ["md5@2.3.0", "", { "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", "is-buffer": "~1.1.6" } }, "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g=="], - - "micro-ftch": ["micro-ftch@0.3.1", "", {}, "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg=="], - - "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], - - "minimalistic-crypto-utils": ["minimalistic-crypto-utils@1.0.1", "", {}, "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="], - - "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - - "mipd": ["mipd@0.0.7", "", { "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg=="], - - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "multiformats": ["multiformats@9.9.0", "", {}, "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="], - - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - - "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - - "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], - - "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - - "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], - - "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], - - "node-mock-http": ["node-mock-http@1.0.4", "", {}, "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ=="], - - "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], - - "ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], - - "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], - - "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - - "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], - - "ox": ["ox@0.10.5", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-mXJRiZswmX46abrzNkJpTN9sPJ/Rhevsp5Dfg0z80D55aoLNmEV4oN+/+feSNW593c2CnHavMqSVBanpJ0lUkQ=="], - - "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - - "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], - - "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], - - "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], - - "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - - "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - - "pino": ["pino@10.0.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "slow-redact": "^0.3.0", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-eI9pKwWEix40kfvSzqEP6ldqOoBIN7dwD/o91TY5z8vQI12sAffpR/pOqAD1IVVwIVHDpHjkq0joBPdJD0rafA=="], - - "pino-abstract-transport": ["pino-abstract-transport@1.2.0", "", { "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" } }, "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q=="], - - "pino-pretty": ["pino-pretty@10.3.1", "", { "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", "fast-copy": "^3.0.0", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^1.0.0", "pump": "^3.0.0", "readable-stream": "^4.0.0", "secure-json-parse": "^2.4.0", "sonic-boom": "^3.0.0", "strip-json-comments": "^3.1.1" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g=="], - - "pino-std-serializers": ["pino-std-serializers@7.1.0", "", {}, "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="], - - "pngjs": ["pngjs@5.0.0", "", {}, "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="], - - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - - "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], - - "preact": ["preact@10.24.2", "", {}, "sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q=="], - - "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - - "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], - - "process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="], - - "proxy-compare": ["proxy-compare@3.0.1", "", {}, "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q=="], - - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - - "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], - - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - - "qrcode": ["qrcode@1.5.4", "", { "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="], - - "query-string": ["query-string@7.1.3", "", { "dependencies": { "decode-uri-component": "^0.2.2", "filter-obj": "^1.1.0", "split-on-first": "^1.0.0", "strict-uri-encode": "^2.0.0" } }, "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg=="], - - "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], - - "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], - - "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], - - "react-device-detect": ["react-device-detect@2.2.3", "", { "dependencies": { "ua-parser-js": "^1.0.33" }, "peerDependencies": { "react": ">= 0.14.0", "react-dom": ">= 0.14.0" } }, "sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw=="], - - "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], - - "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], - - "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], - - "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], - - "readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], - - "readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], - - "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], - - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], - - "require-main-filename": ["require-main-filename@2.0.0", "", {}, "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="], - - "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], - - "rollup": ["rollup@4.57.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.57.0", "@rollup/rollup-android-arm64": "4.57.0", "@rollup/rollup-darwin-arm64": "4.57.0", "@rollup/rollup-darwin-x64": "4.57.0", "@rollup/rollup-freebsd-arm64": "4.57.0", "@rollup/rollup-freebsd-x64": "4.57.0", "@rollup/rollup-linux-arm-gnueabihf": "4.57.0", "@rollup/rollup-linux-arm-musleabihf": "4.57.0", "@rollup/rollup-linux-arm64-gnu": "4.57.0", "@rollup/rollup-linux-arm64-musl": "4.57.0", "@rollup/rollup-linux-loong64-gnu": "4.57.0", "@rollup/rollup-linux-loong64-musl": "4.57.0", "@rollup/rollup-linux-ppc64-gnu": "4.57.0", "@rollup/rollup-linux-ppc64-musl": "4.57.0", "@rollup/rollup-linux-riscv64-gnu": "4.57.0", "@rollup/rollup-linux-riscv64-musl": "4.57.0", "@rollup/rollup-linux-s390x-gnu": "4.57.0", "@rollup/rollup-linux-x64-gnu": "4.57.0", "@rollup/rollup-linux-x64-musl": "4.57.0", "@rollup/rollup-openbsd-x64": "4.57.0", "@rollup/rollup-openharmony-arm64": "4.57.0", "@rollup/rollup-win32-arm64-msvc": "4.57.0", "@rollup/rollup-win32-ia32-msvc": "4.57.0", "@rollup/rollup-win32-x64-gnu": "4.57.0", "@rollup/rollup-win32-x64-msvc": "4.57.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA=="], - - "rpc-websockets": ["rpc-websockets@9.3.3", "", { "dependencies": { "@swc/helpers": "^0.5.11", "@types/uuid": "^8.3.4", "@types/ws": "^8.2.2", "buffer": "^6.0.3", "eventemitter3": "^5.0.1", "uuid": "^8.3.2", "ws": "^8.5.0" }, "optionalDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" } }, "sha512-OkCsBBzrwxX4DoSv4Zlf9DgXKRB0MzVfCFg5MC+fNnf9ktr4SMWjsri0VNZQlDbCnGcImT6KNEv4ZoxktQhdpA=="], - - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], - - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - - "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], - - "secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], - - "secure-password-utilities": ["secure-password-utilities@0.2.1", "", {}, "sha512-znUg8ae3cpuAaogiFBhP82gD2daVkSz4Qv/L7OWjB7wWvfbCdeqqQuJkm2/IvhKQPOV0T739YPR6rb7vs0uWaw=="], - - "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], - - "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], - - "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], - - "shallowequal": ["shallowequal@1.1.0", "", {}, "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="], - - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], - - "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - - "slow-redact": ["slow-redact@0.3.2", "", {}, "sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw=="], - - "sonic-boom": ["sonic-boom@3.8.1", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg=="], - - "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], - - "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - - "split-on-first": ["split-on-first@1.1.0", "", {}, "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="], - - "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], - - "stream-chain": ["stream-chain@2.2.5", "", {}, "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA=="], - - "stream-json": ["stream-json@1.9.1", "", { "dependencies": { "stream-chain": "^2.2.5" } }, "sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw=="], - - "stream-shift": ["stream-shift@1.0.3", "", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="], - - "strict-uri-encode": ["strict-uri-encode@2.0.0", "", {}, "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ=="], - - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - - "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "strip-hex-prefix": ["strip-hex-prefix@1.0.0", "", { "dependencies": { "is-hex-prefixed": "1.0.0" } }, "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A=="], - - "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - - "styled-components": ["styled-components@6.3.8", "", { "dependencies": { "@emotion/is-prop-valid": "1.4.0", "@emotion/unitless": "0.10.0", "@types/stylis": "4.2.7", "css-to-react-native": "3.2.0", "csstype": "3.2.3", "postcss": "8.4.49", "shallowequal": "1.1.0", "stylis": "4.3.6", "tslib": "2.8.1" }, "peerDependencies": { "react": ">= 16.8.0", "react-dom": ">= 16.8.0" }, "optionalPeers": ["react-dom"] }, "sha512-Kq/W41AKQloOqKM39zfaMdJ4BcYDw/N5CIq4/GTI0YjU6pKcZ1KKhk6b4du0a+6RA9pIfOP/eu94Ge7cu+PDCA=="], - - "stylis": ["stylis@4.3.6", "", {}, "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="], - - "superstruct": ["superstruct@1.0.4", "", {}, "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ=="], - - "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - - "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], - - "tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="], - - "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], - - "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], - - "text-encoding-utf-8": ["text-encoding-utf-8@1.0.2", "", {}, "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg=="], - - "thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="], - - "tinycolor2": ["tinycolor2@1.6.0", "", {}, "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="], - - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - - "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], - - "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], - - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], - - "tweetnacl": ["tweetnacl@1.0.3", "", {}, "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="], - - "tweetnacl-util": ["tweetnacl-util@0.15.1", "", {}, "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw=="], - - "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], - - "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], - - "typescript-eslint": ["typescript-eslint@8.54.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.54.0", "@typescript-eslint/parser": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0", "@typescript-eslint/utils": "8.54.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ=="], - - "ua-parser-js": ["ua-parser-js@1.0.41", "", { "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug=="], - - "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], - - "uint8arrays": ["uint8arrays@3.1.1", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg=="], - - "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], - - "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - - "unstorage": ["unstorage@1.17.4", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.5", "lru-cache": "^11.2.0", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.3" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6 || ^7 || ^8", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1 || ^2 || ^3", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw=="], - - "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - - "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], - - "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], - - "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], - - "utf-8-validate": ["utf-8-validate@5.0.10", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ=="], - - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - - "uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "valtio": ["valtio@2.1.7", "", { "dependencies": { "proxy-compare": "^3.0.1" }, "peerDependencies": { "@types/react": ">=18.0.0", "react": ">=18.0.0" }, "optionalPeers": ["@types/react", "react"] }, "sha512-DwJhCDpujuQuKdJ2H84VbTjEJJteaSmqsuUltsfbfdbotVfNeTE4K/qc/Wi57I9x8/2ed4JNdjEna7O6PfavRg=="], - - "viem": ["viem@2.43.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.10.5", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-OBLr1zhmCD1ioE/WufBZTFi6NMrfnfkE5BMTDB+1BDOyr0Q2F0cF7F4im/0RQYkhxSi9fjUDUTmCJEHbnIZ89w=="], - - "vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], - - "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - - "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - - "which-module": ["which-module@2.0.1", "", {}, "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="], - - "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], - - "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], - - "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - - "ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], - - "y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], - - "yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], - - "yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], - - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - - "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - - "zustand": ["zustand@5.0.10", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-U1AiltS1O9hSy3rul+Ub82ut2fqIAefiSuwECWt6jlMVUGejvf+5omLcRBSzqbRagSM3hQZbtzdeRc6QVScXTg=="], - - "@base-org/account/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], - - "@base-org/account/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="], - - "@base-org/account/ox": ["ox@0.6.9", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug=="], - - "@base-org/account/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], - - "@base-org/account/zustand": ["zustand@5.0.3", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg=="], - - "@coinbase/cdp-sdk/abitype": ["abitype@1.0.6", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A=="], - - "@coinbase/cdp-sdk/jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="], - - "@coinbase/cdp-sdk/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], - - "@coinbase/wallet-sdk/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="], - - "@coinbase/wallet-sdk/preact": ["preact@10.28.2", "", {}, "sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA=="], - - "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - - "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], - - "@ethersproject/providers/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], - - "@metamask/abi-utils/@metamask/utils": ["@metamask/utils@3.6.0", "", { "dependencies": { "@types/debug": "^4.1.7", "debug": "^4.3.4", "semver": "^7.3.8", "superstruct": "^1.0.3" } }, "sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ=="], - - "@privy-io/react-auth/lucide-react": ["lucide-react@0.383.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } }, "sha512-13xlG0CQCJtzjSQYwwJ3WRqMHtRj3EXmLlorrARt7y+IHnxUCp3XyFNL1DfaGySWxHObDvnu1u1dV+0VMKHUSg=="], - - "@radix-ui/react-alert-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - - "@radix-ui/react-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - - "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - - "@reown/appkit/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], - - "@reown/appkit/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - - "@reown/appkit/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], - - "@reown/appkit-common/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], - - "@reown/appkit-controllers/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], - - "@reown/appkit-ui/qrcode": ["qrcode@1.5.3", "", { "dependencies": { "dijkstrajs": "^1.0.1", "encode-utf8": "^1.0.3", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg=="], - - "@reown/appkit-utils/@base-org/account": ["@base-org/account@2.4.0", "", { "dependencies": { "@coinbase/cdp-sdk": "^1.0.0", "@noble/hashes": "1.4.0", "clsx": "1.2.1", "eventemitter3": "5.0.1", "idb-keyval": "6.2.1", "ox": "0.6.9", "preact": "10.24.2", "viem": "^2.31.7", "zustand": "5.0.3" } }, "sha512-A4Umpi8B9/pqR78D1Yoze4xHyQaujioVRqqO3d6xuDFw9VRtjg6tK3bPlwE0aW+nVH/ntllCpPa2PbI8Rnjcug=="], - - "@reown/appkit-utils/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], - - "@reown/appkit-wallet/zod": ["zod@3.22.4", "", {}, "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg=="], - - "@safe-global/safe-apps-sdk/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], - - "@solana/accounts/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/accounts/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/addresses/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/addresses/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/assertions/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/codecs/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/codecs/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], - - "@solana/codecs-data-structures/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], - - "@solana/codecs-data-structures/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/codecs-strings/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], - - "@solana/codecs-strings/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/instruction-plans/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/instructions/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/instructions/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/keys/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/keys/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/kit/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/offchain-messages/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], - - "@solana/offchain-messages/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/options/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/options/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], - - "@solana/options/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/programs/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/rpc/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/rpc-api/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/rpc-api/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/rpc-spec/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/rpc-subscriptions/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/rpc-subscriptions-channel-websocket/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], - - "@solana/rpc-subscriptions-spec/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/rpc-transformers/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/rpc-transport-http/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/rpc-transport-http/undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], - - "@solana/rpc-types/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], - - "@solana/rpc-types/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/signers/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/signers/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/subscribable/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/sysvars/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/transaction-confirmation/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/transaction-messages/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], - - "@solana/transaction-messages/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/transactions/@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - - "@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], - - "@solana/transactions/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/wallet-adapter-base/eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], - - "@solana/wallet-standard-util/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], - - "@solana/wallet-standard-wallet-adapter-base/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], - - "@solana/web3.js/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@solana/web3.js/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], - - "@solana/web3.js/superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], - - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], - - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], - - "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], - - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], - - "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], - - "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - - "@walletconnect/core/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], - - "@walletconnect/environment/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "@walletconnect/ethereum-provider/@reown/appkit": ["@reown/appkit@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-pay": "1.7.8", "@reown/appkit-polyfills": "1.7.8", "@reown/appkit-scaffold-ui": "1.7.8", "@reown/appkit-ui": "1.7.8", "@reown/appkit-utils": "1.7.8", "@reown/appkit-wallet": "1.7.8", "@walletconnect/types": "2.21.0", "@walletconnect/universal-provider": "2.21.0", "bs58": "6.0.0", "valtio": "1.13.2", "viem": ">=2.29.0" } }, "sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.21.7", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@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/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.21.7", "@walletconnect/types": "2.21.7", "@walletconnect/utils": "2.21.7", "es-toolkit": "1.39.3", "events": "3.3.0" } }, "sha512-8PB+vA5VuR9PBqt5Y0xj4JC2doYNPlXLGQt3wJORVF9QC227Mm/8R1CAKpmneeLrUH02LkSRwx+wnN/pPnDiQA=="], - - "@walletconnect/events/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "@walletconnect/jsonrpc-utils/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "@walletconnect/jsonrpc-ws-connection/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], - - "@walletconnect/keyvaluestorage/idb-keyval": ["idb-keyval@6.2.2", "", {}, "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg=="], - - "@walletconnect/relay-auth/@noble/curves": ["@noble/curves@1.8.0", "", { "dependencies": { "@noble/hashes": "1.7.0" } }, "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ=="], - - "@walletconnect/relay-auth/@noble/hashes": ["@noble/hashes@1.7.0", "", {}, "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w=="], - - "@walletconnect/safe-json/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "@walletconnect/sign-client/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], - - "@walletconnect/time/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "@walletconnect/types/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], - - "@walletconnect/universal-provider/@walletconnect/sign-client": ["@walletconnect/sign-client@2.23.2", "", { "dependencies": { "@walletconnect/core": "2.23.2", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "3.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.23.2", "@walletconnect/utils": "2.23.2", "events": "3.3.0" } }, "sha512-LL5KgmJHvY5NqQn+ZHQJLia1p6fpUWXHtiG97S5rNfyuPx6gT/Jkkwqc2LwdmAjFkr61t8zTagHC9ETq203mNA=="], - - "@walletconnect/universal-provider/@walletconnect/types": ["@walletconnect/types@2.23.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "3.0.2", "events": "3.3.0" } }, "sha512-5dxBCdUM+4Dqe1/A7uqkm2tWPXce4UUGSr+ImfI0YjwEExQS8+TzdOlhMt3n32ncnBCllU5paG+fsndT06R0iw=="], - - "@walletconnect/universal-provider/@walletconnect/utils": ["@walletconnect/utils@2.23.2", "", { "dependencies": { "@msgpack/msgpack": "3.1.2", "@noble/ciphers": "1.3.0", "@noble/curves": "1.9.7", "@noble/hashes": "1.8.0", "@scure/base": "1.2.6", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "3.0.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.23.2", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "blakejs": "1.2.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "ox": "0.9.3", "uint8arrays": "3.1.1" } }, "sha512-ReSjU3kX+3i3tYJQZbVfetY5SSUL+iM6uiIVVD1PJalePa/5A40VgLVRTF7sDCJTIFfpf3Mt4bFjeaYuoxWtIw=="], - - "@walletconnect/utils/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], - - "@walletconnect/utils/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], - - "@walletconnect/utils/viem": ["viem@2.31.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.0.8", "isows": "1.0.7", "ox": "0.7.1", "ws": "8.18.2" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-U7OMQ6yqK+bRbEIarf2vqxL7unSEQvNxvML/1zG7suAmKuJmipqdVTVJGKBCJiYsm/EremyO2FS4dHIPpGv+eA=="], - - "@walletconnect/window-getters/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "@walletconnect/window-metadata/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "borsh/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], - - "duplexify/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "elliptic/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], - - "ethereum-cryptography/@noble/curves": ["@noble/curves@1.4.2", "", { "dependencies": { "@noble/hashes": "1.4.0" } }, "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw=="], - - "ethereum-cryptography/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], - - "ethereum-cryptography/@scure/bip32": ["@scure/bip32@1.4.0", "", { "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" } }, "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg=="], - - "ethereum-cryptography/@scure/bip39": ["@scure/bip39@1.3.0", "", { "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" } }, "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ=="], - - "jayson/@types/node": ["@types/node@12.20.55", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="], - - "jayson/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - - "jayson/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], - - "pino/pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], - - "pino/sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], - - "rpc-websockets/@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], - - "rpc-websockets/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - - "styled-components/postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="], - - "yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], - - "@base-org/account/ox/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], - - "@base-org/account/ox/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@base-org/account/viem/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@base-org/account/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], - - "@coinbase/cdp-sdk/viem/abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], - - "@coinbase/cdp-sdk/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], - - "@reown/appkit-common/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], - - "@reown/appkit-controllers/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], - - "@reown/appkit-utils/@base-org/account/@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], - - "@reown/appkit-utils/@base-org/account/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="], - - "@reown/appkit-utils/@base-org/account/ox": ["ox@0.6.9", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug=="], - - "@reown/appkit-utils/@base-org/account/zustand": ["zustand@5.0.3", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg=="], - - "@reown/appkit-utils/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], - - "@reown/appkit/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], - - "@reown/appkit/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], - - "@safe-global/safe-apps-sdk/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], - - "@solana/accounts/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/accounts/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/addresses/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/addresses/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/assertions/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/assertions/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/codecs-data-structures/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/codecs-data-structures/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/codecs-strings/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/codecs-strings/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/codecs/@solana/codecs-core/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/codecs/@solana/codecs-numbers/@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - - "@solana/instruction-plans/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/instruction-plans/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/instructions/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/instructions/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/keys/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/keys/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/kit/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/kit/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/offchain-messages/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/offchain-messages/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/options/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/options/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/programs/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/programs/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/rpc-api/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/rpc-api/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/rpc-spec/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/rpc-spec/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/rpc-subscriptions-channel-websocket/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/rpc-subscriptions-channel-websocket/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/rpc-subscriptions-spec/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/rpc-subscriptions-spec/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/rpc-subscriptions/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/rpc-subscriptions/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/rpc-transformers/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/rpc-transformers/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/rpc-transport-http/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/rpc-transport-http/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/rpc-types/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/rpc-types/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/rpc/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/rpc/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/signers/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/signers/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/subscribable/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/subscribable/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/sysvars/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/sysvars/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/transaction-confirmation/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/transaction-confirmation/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/transaction-messages/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/transaction-messages/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/transactions/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/transactions/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/wallet-standard-wallet-adapter-base/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], - - "@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], - - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - - "@walletconnect/core/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-common": ["@reown/appkit-common@1.7.8", "", { "dependencies": { "big.js": "6.2.2", "dayjs": "1.11.13", "viem": ">=2.29.0" } }, "sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-controllers": ["@reown/appkit-controllers@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-wallet": "1.7.8", "@walletconnect/universal-provider": "2.21.0", "valtio": "1.13.2", "viem": ">=2.29.0" } }, "sha512-IdXlJlivrlj6m63VsGLsjtPHHsTWvKGVzWIP1fXZHVqmK+rZCBDjCi9j267Rb9/nYRGHWBtlFQhO8dK35WfeDA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-pay": ["@reown/appkit-pay@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-ui": "1.7.8", "@reown/appkit-utils": "1.7.8", "lit": "3.3.0", "valtio": "1.13.2" } }, "sha512-OSGQ+QJkXx0FEEjlpQqIhT8zGJKOoHzVnyy/0QFrl3WrQTjCzg0L6+i91Ad5Iy1zb6V5JjqtfIFpRVRWN4M3pw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-polyfills": ["@reown/appkit-polyfills@1.7.8", "", { "dependencies": { "buffer": "6.0.3" } }, "sha512-W/kq786dcHHAuJ3IV2prRLEgD/2iOey4ueMHf1sIFjhhCGMynMkhsOhQMUH0tzodPqUgAC494z4bpIDYjwWXaA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-scaffold-ui": ["@reown/appkit-scaffold-ui@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-ui": "1.7.8", "@reown/appkit-utils": "1.7.8", "@reown/appkit-wallet": "1.7.8", "lit": "3.3.0" } }, "sha512-RCeHhAwOrIgcvHwYlNWMcIDibdI91waaoEYBGw71inE0kDB8uZbE7tE6DAXJmDkvl0qPh+DqlC4QbJLF1FVYdQ=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-ui": ["@reown/appkit-ui@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-wallet": "1.7.8", "lit": "3.3.0", "qrcode": "1.5.3" } }, "sha512-1hjCKjf6FLMFzrulhl0Y9Vb9Fu4royE+SXCPSWh4VhZhWqlzUFc7kutnZKx8XZFVQH4pbBvY62SpRC93gqoHow=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils": ["@reown/appkit-utils@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-controllers": "1.7.8", "@reown/appkit-polyfills": "1.7.8", "@reown/appkit-wallet": "1.7.8", "@walletconnect/logger": "2.1.2", "@walletconnect/universal-provider": "2.21.0", "valtio": "1.13.2", "viem": ">=2.29.0" } }, "sha512-8X7UvmE8GiaoitCwNoB86pttHgQtzy4ryHZM9kQpvjQ0ULpiER44t1qpVLXNM4X35O0v18W0Dk60DnYRMH2WRw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet": ["@reown/appkit-wallet@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-polyfills": "1.7.8", "@walletconnect/logger": "2.1.2", "zod": "3.22.4" } }, "sha512-kspz32EwHIOT/eg/ZQbFPxgXq0B/olDOj3YMu7gvLEFz4xyOFd/wgzxxAXkp5LbG4Cp++s/elh79rVNmVFdB9A=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types": ["@walletconnect/types@2.21.0", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-ll+9upzqt95ZBWcfkOszXZkfnpbJJ2CmxMfGgE5GmhdxxxCcO5bGhXkI+x8OpiS555RJ/v/sXJYMSOLkmu4fFw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.21.0", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@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/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.21.0", "@walletconnect/types": "2.21.0", "@walletconnect/utils": "2.21.0", "es-toolkit": "1.33.0", "events": "3.3.0" } }, "sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/valtio": ["valtio@1.13.2", "", { "dependencies": { "derive-valtio": "0.1.0", "proxy-compare": "2.6.0", "use-sync-external-store": "1.2.0" }, "peerDependencies": { "@types/react": ">=16.8", "react": ">=16.8" }, "optionalPeers": ["@types/react", "react"] }, "sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A=="], - - "@walletconnect/ethereum-provider/@reown/appkit/viem": ["viem@2.45.0", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", "ox": "0.11.3", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], - - "@walletconnect/sign-client/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - - "@walletconnect/types/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - - "@walletconnect/universal-provider/@walletconnect/sign-client/@walletconnect/core": ["@walletconnect/core@2.23.2", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "3.0.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.23.2", "@walletconnect/utils": "2.23.2", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.39.3", "events": "3.3.0", "uint8arrays": "3.1.1" } }, "sha512-KkaTELRu8t/mt3J9doCQ1fBGCbYsCNfpo2JpKdCwKQR7PVjVKeVpYQK/blVkA5m6uLPpBtVRbOMKjnHW1m7JLw=="], - - "@walletconnect/universal-provider/@walletconnect/utils/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@walletconnect/universal-provider/@walletconnect/utils/bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], - - "@walletconnect/universal-provider/@walletconnect/utils/ox": ["ox@0.9.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.0.9", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg=="], - - "@walletconnect/utils/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], - - "@walletconnect/utils/viem/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], - - "@walletconnect/utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - - "@walletconnect/utils/viem/ox": ["ox@0.7.1", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-+k9fY9PRNuAMHRFIUbiK9Nt5seYHHzSQs9Bj+iMETcGtlpS7SmBzcGSVUQO3+nqGLEiNK4598pHNFlVRaZbRsg=="], - - "@walletconnect/utils/viem/ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], - - "borsh/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], - - "ethereum-cryptography/@scure/bip32/@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], - - "ethereum-cryptography/@scure/bip39/@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], - - "yargs/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - - "@reown/appkit-utils/@base-org/account/ox/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], - - "@reown/appkit-utils/@base-org/account/ox/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@solana/codecs/@solana/codecs-core/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/codecs/@solana/codecs-core/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@solana/codecs/@solana/codecs-numbers/@solana/errors/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "@solana/codecs/@solana/codecs-numbers/@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - - "@walletconnect/core/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], - - "@walletconnect/core/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], - - "@walletconnect/core/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], - - "@walletconnect/core/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], - - "@walletconnect/core/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], - - "@walletconnect/core/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], - - "@walletconnect/core/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-ui/qrcode": ["qrcode@1.5.3", "", { "dependencies": { "dijkstrajs": "^1.0.1", "encode-utf8": "^1.0.3", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/zod": ["zod@3.22.4", "", {}, "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/sign-client": ["@walletconnect/sign-client@2.21.0", "", { "dependencies": { "@walletconnect/core": "2.21.0", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.0", "@walletconnect/utils": "2.21.0", "events": "3.3.0" } }, "sha512-z7h+PeLa5Au2R591d/8ZlziE0stJvdzP9jNFzFolf2RG/OiXulgFKum8PrIyXy+Rg2q95U9nRVUF9fWcn78yBA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils": ["@walletconnect/utils@2.21.0", "", { "dependencies": { "@noble/ciphers": "1.2.1", "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.0", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "query-string": "7.1.3", "uint8arrays": "3.1.0", "viem": "2.23.2" } }, "sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/es-toolkit": ["es-toolkit@1.33.0", "", {}, "sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/valtio/proxy-compare": ["proxy-compare@2.6.0", "", {}, "sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/valtio/use-sync-external-store": ["use-sync-external-store@1.2.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/viem/ox": ["ox@0.11.3", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.2.3", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - - "@walletconnect/sign-client/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], - - "@walletconnect/sign-client/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], - - "@walletconnect/sign-client/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], - - "@walletconnect/sign-client/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], - - "@walletconnect/sign-client/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], - - "@walletconnect/sign-client/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], - - "@walletconnect/sign-client/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], - - "@walletconnect/types/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], - - "@walletconnect/types/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], - - "@walletconnect/types/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], - - "@walletconnect/types/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], - - "@walletconnect/types/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], - - "@walletconnect/types/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], - - "@walletconnect/types/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], - - "@walletconnect/universal-provider/@walletconnect/utils/bs58/base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], - - "@walletconnect/universal-provider/@walletconnect/utils/ox/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], - - "@walletconnect/utils/viem/ox/@noble/curves": ["@noble/curves@1.9.2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="], - - "@walletconnect/utils/viem/ox/abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], - - "yargs/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/sign-client/@walletconnect/core": ["@walletconnect/core@2.21.0", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.21.0", "@walletconnect/utils": "2.21.0", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.33.0", "events": "3.3.0", "uint8arrays": "3.1.0" } }, "sha512-o6R7Ua4myxR8aRUAJ1z3gT9nM+jd2B2mfamu6arzy1Cc6vi10fIwFWb6vg3bC8xJ6o9H3n/cN5TOW3aA9Y1XVw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/@noble/ciphers": ["@noble/ciphers@1.2.1", "", {}, "sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/@noble/curves": ["@noble/curves@1.8.1", "", { "dependencies": { "@noble/hashes": "1.7.1" } }, "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/@noble/hashes": ["@noble/hashes@1.7.1", "", {}, "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/uint8arrays": ["uint8arrays@3.1.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], - - "@walletconnect/ethereum-provider/@walletconnect/universal-provider/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], - - "yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-utils/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-wallet/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/types/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/sign-client/@walletconnect/core/uint8arrays": ["uint8arrays@3.1.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/@scure/bip32": ["@scure/bip32@1.6.2", "", { "dependencies": { "@noble/curves": "~1.8.1", "@noble/hashes": "~1.7.1", "@scure/base": "~1.2.2" } }, "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/@scure/bip39": ["@scure/bip39@1.5.4", "", { "dependencies": { "@noble/hashes": "~1.7.1", "@scure/base": "~1.2.4" } }, "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/isows": ["isows@1.0.6", "", { "peerDependencies": { "ws": "*" } }, "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox": ["ox@0.6.7", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@scure/bip32": ["@scure/bip32@1.7.0", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/abitype": ["abitype@1.2.3", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg=="], - - "@walletconnect/ethereum-provider/@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ox/@scure/bip32/@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], - } -} diff --git a/package.json b/package.json index c7792b5..06af206 100644 --- a/package.json +++ b/package.json @@ -1,43 +1,25 @@ { - "name": "my-app", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc -b && vite build", - "lint": "eslint .", - "preview": "vite preview" - }, - "dependencies": { - "@privy-io/react-auth": "^2.8.2", - "@radix-ui/react-alert-dialog": "^1.1.11", - "@radix-ui/react-slot": "^1.2.0", - "@tailwindcss/vite": "^4.0.17", - "@types/node": "^22.13.14", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^0.484.0", - "next-themes": "^0.4.6", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "sonner": "^2.0.3", - "tailwind-merge": "^3.0.2", - "tailwindcss": "^4.0.17", - "tw-animate-css": "^1.2.4", - "viem": "2.43.0" - }, - "devDependencies": { - "@eslint/js": "^9.21.0", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", - "@vitejs/plugin-react-swc": "^3.8.0", - "eslint": "^9.21.0", - "eslint-plugin-react-hooks": "^5.1.0", - "eslint-plugin-react-refresh": "^0.4.19", - "globals": "^15.15.0", - "typescript": "~5.7.2", - "typescript-eslint": "^8.24.1", - "vite": "^6.2.0" - } + "name": "2048-monorepo", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "pnpm --filter frontend dev", + "dev:frontend": "pnpm --filter frontend dev", + "build": "pnpm -r build", + "build:frontend": "pnpm --filter frontend build", + "build:contracts": "pnpm --filter contracts build", + "test": "pnpm -r test", + "test:frontend": "pnpm --filter frontend test", + "test:contracts": "pnpm --filter contracts test", + "lint": "pnpm -r lint", + "lint:frontend": "pnpm --filter frontend lint", + "lint:contracts": "pnpm --filter contracts lint", + "preview": "pnpm --filter frontend preview", + "contracts:deploy": "pnpm --filter contracts deploy" + }, + "engines": { + "node": ">=18", + "pnpm": ">=8" + } } diff --git a/packages/contracts/.gitignore b/packages/contracts/.gitignore new file mode 100644 index 0000000..85198aa --- /dev/null +++ b/packages/contracts/.gitignore @@ -0,0 +1,14 @@ +# Compiler files +cache/ +out/ + +# Ignores development broadcast logs +!/broadcast +/broadcast/*/31337/ +/broadcast/**/dry-run/ + +# Docs +docs/ + +# Dotenv file +.env diff --git a/packages/contracts/README.md b/packages/contracts/README.md new file mode 100644 index 0000000..81f345c --- /dev/null +++ b/packages/contracts/README.md @@ -0,0 +1,62 @@ +# Play 2048 on Monad + +**Check out a full writeup of how we built this [here](https://blog.monad.xyz/blog/build-2048).** + +Smart contracts that let you play a game of 2048 entirely on-chain. The game is deployed on [Monad testnet](https://testnet.monad.xyz/) to showcase how Monad is well suited for building fast paced games with a high volume of interactions. + +### About the game + +From the [2048 Wikipedia]() page: + +- 2048 is a single-player sliding tile puzzle video game. +- 2048 is played on a plain 4×4 grid, with numbered tiles that slide when a player moves them using the four arrow keys. +- The game begins with two tiles already in the grid, having a value of either 2 or 4, and another such tile appears in a random empty space after each turn. - Tiles with a value of 2 appear 90% of the time, and tiles with a value of 4 appear 10% of the time. +- Tiles slide as far as possible in the chosen direction until they are stopped by either another tile or the edge of the grid. If two tiles of the same number collide while moving, they will merge into a tile with the total value of the two tiles that collided. +- The resulting tile cannot merge with another tile again in the same move. + +## Deployments + +`Monad2048.sol` is deployed on Monad testnet: [0xe0FA8195AE92b9C473c0c0c12c2D6bCbd245De47](https://testnet.monadexplorer.com/address/0xe0FA8195AE92b9C473c0c0c12c2D6bCbd245De47). + +## Development + +This is a Foundry project. You can find installation instructions for foundry, [here](https://book.getfoundry.sh/getting-started/installation). Clone the repository and run the following commands: + +### Install + +```shell +$ forge install +``` + +### Build + +```shell +$ forge build +``` + +### Test + +```shell +$ forge test +``` + +### Format + +```shell +$ forge fmt +``` + +## Documentation + +The `Monad2048.sol` smart contract contains the API to play a game of 2048. + +- `startGame`: Starts a new game of 2048 for a player (`msg.sender`). The player reveals and reserves the first 4 boards of the game and the contract validates that this is a legal game of 2048. +- `play`: Lets a player make a move for a game by providing the game's session ID and the result board or applying a move (UP, DOWN, LEFT or RIGHT) on the latest board of the game. The contract then validates that the player has made a valid move (board transformation). + +The `LiBoard` library implements the logic of board transformations, and other helper functions for extracting information about a given board position. + +The contract has no permissions or privileged actors. + +## Feedback + +Please open issues or PRs on this repositories for any feedback. diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743147792.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743147792.json new file mode 100644 index 0000000..c501fe2 --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743147792.json @@ -0,0 +1,108 @@ +{ + "transactions": [ + { + "hash": "0x066d9e1b54588c683d10a0ec2518ff085e4909f631b67d52a76970697e1413e6", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0x33239dfc579bd6193879a551157cfd8a4ea5095a", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x2370fa", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000611d6c61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100f3575f3560e01c806337afd9641161009557806365b559b01161006f57806365b559b01461028f5780637b60a804146102bf578063f173e012146102ef578063f54a36eb1461031f576100f3565b806337afd964146102115780633b9f7a1f1461024157806364cd159514610271576100f3565b806324f4ec51116100d157806324f4ec51146101635780632c5f3c4514610181578063312ffe40146101b157806335e37c72146101e1576100f3565b806301df1995146100f757806319c14718146101155780631af4f97014610145575b5f5ffd5b6100ff61034f565b60405161010c9190611860565b60405180910390f35b61012f600480360381019061012a91906118a7565b610354565b60405161013c91906118ec565b60405180910390f35b61014d61045f565b60405161015a9190611860565b60405180910390f35b61016b610464565b6040516101789190611860565b60405180910390f35b61019b600480360381019061019691906118a7565b610468565b6040516101a89190611860565b60405180910390f35b6101cb60048036038101906101c691906118a7565b610798565b6040516101d89190611860565b60405180910390f35b6101fb60048036038101906101f6919061193b565b610ac8565b6040516102089190611988565b60405180910390f35b61022b600480360381019061022691906119d4565b610af3565b6040516102389190611860565b60405180910390f35b61025b600480360381019061025691906118a7565b610d60565b6040516102689190611860565b60405180910390f35b61027961117c565b6040516102869190611860565b60405180910390f35b6102a960048036038101906102a49190611a24565b611181565b6040516102b691906118ec565b60405180910390f35b6102d960048036038101906102d4919061193b565b61135d565b6040516102e691906118ec565b60405180910390f35b61030960048036038101906103049190611a62565b6113aa565b6040516103169190611860565b60405180910390f35b610339600480360381019061033491906118a7565b6113fa565b6040516103469190611860565b60405180910390f35b600181565b5f5f6082600284901b901c14610396576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff16101561041a575f6103b38583610ac8565b905060038160ff16106103f2576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff16111561040c57828061040890611adf565b9350505b50808060010191505061039c565b5060028114610455576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90505b60048160ff16101561078f57610482611826565b5f5f90505b60048160ff1610156104e8576104b485826004866104a59190611b26565b6104af9190611b62565b610ac8565b828260ff16600481106104ca576104c9611b96565b5b602002019060ff16908160ff16815250508080600101915050610487565b506104f1611826565b5f5f90505f5f90505b60048160ff161015610586575f848260ff166004811061051d5761051c611b96565b5b602002015160ff161461057957838160ff16600481106105405761053f611b96565b5b602002015183838061055190611bc3565b945060ff166004811061056757610566611b96565b5b602002019060ff16908160ff16815250505b80806001019150506104fa565b505f5f90505b60038160ff161015610683575f838260ff16600481106105af576105ae611b96565b5b602002015160ff161415801561060a5750826001826105ce9190611b62565b60ff16600481106105e2576105e1611b96565b5b602002015160ff16838260ff1660048110610600576105ff611b96565b5b602002015160ff16145b1561067657828160ff166004811061062557610624611b96565b5b60200201805180919061063790611bc3565b60ff1660ff16815250505f836001836106509190611b62565b60ff166004811061066457610663611b96565b5b602002019060ff16908160ff16815250505b808060010191505061058c565b5061068c611826565b5f91505f5f90505b60048160ff161015610720575f848260ff16600481106106b7576106b6611b96565b5b602002015160ff161461071357838160ff16600481106106da576106d9611b96565b5b60200201518284806106eb90611bc3565b955060ff166004811061070157610700611b96565b5b602002019060ff16908160ff16815250505b8080600101915050610694565b505f5f90505b60048160ff16101561077d5761076e88826004896107449190611b26565b61074e9190611b62565b848460ff166004811061076457610763611b96565b5b60200201516113aa565b97508080600101915050610726565b5050505050808060010191505061046e565b50819050919050565b5f5f5f90505b60048160ff161015610abf576107b2611826565b5f5f90505b60048160ff161015610818576107e485846004846107d59190611b26565b6107df9190611b62565b610ac8565b828260ff16600481106107fa576107f9611b96565b5b602002019060ff16908160ff168152505080806001019150506107b7565b50610821611826565b5f5f90505f5f90505b60048160ff1610156108b6575f848260ff166004811061084d5761084c611b96565b5b602002015160ff16146108a957838160ff16600481106108705761086f611b96565b5b602002015183838061088190611bc3565b945060ff166004811061089757610896611b96565b5b602002019060ff16908160ff16815250505b808060010191505061082a565b505f5f90505b60038160ff1610156109b3575f838260ff16600481106108df576108de611b96565b5b602002015160ff161415801561093a5750826001826108fe9190611b62565b60ff166004811061091257610911611b96565b5b602002015160ff16838260ff16600481106109305761092f611b96565b5b602002015160ff16145b156109a657828160ff166004811061095557610954611b96565b5b60200201805180919061096790611bc3565b60ff1660ff16815250505f836001836109809190611b62565b60ff166004811061099457610993611b96565b5b602002019060ff16908160ff16815250505b80806001019150506108bc565b506109bc611826565b5f91505f5f90505b60048160ff161015610a50575f848260ff16600481106109e7576109e6611b96565b5b602002015160ff1614610a4357838160ff1660048110610a0a57610a09611b96565b5b6020020151828480610a1b90611bc3565b955060ff1660048110610a3157610a30611b96565b5b602002019060ff16908160ff16815250505b80806001019150506109c4565b505f5f90505b60048160ff161015610aad57610a9e8887600484610a749190611b26565b610a7e9190611b62565b848460ff1660048110610a9457610a93611b96565b5b60200201516113aa565b97508080600101915050610a56565b5050505050808060010191505061079e565b50819050919050565b5f60ff600883600f610ada9190611beb565b610ae49190611b26565b60ff1684901c16905092915050565b5f60048310610b2e576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8303610b4557610b3e84610798565b9050610b8c565b60018303610b5d57610b56846113fa565b9050610b8b565b60038303610b7557610b6e84610d60565b9050610b8a565b60028303610b8957610b8684610468565b90505b5b5b5b608081901b608085901b03610bcd576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f5f90505b60108160ff161015610c11575f610bed8483610ac8565b60ff1603610c04578180610c0090611adf565b9250505b8080600101915050610bd6565b505f811115610d58575f85858486604051602001610c329493929190611c5f565b604051602081830303815290604052805190602001205f1c90505f8267ffffffffffffffff811115610c6757610c66611cac565b5b604051908082528060200260200182016040528015610c955781602001602082028036833780820191505090505b5090505f5f90505f5f90505b60108160ff161015610d04575f610cb88783610ac8565b60ff1603610cf75780838381518110610cd457610cd3611b96565b5b602002602001019060ff16908160ff16815250508180610cf390611adf565b9250505b8080600101915050610ca1565b50610d5285838686610d169190611d06565b81518110610d2757610d26611b96565b5b6020026020010151605a606487610d3e9190611d06565b11610d4a576001610d4d565b60025b6113aa565b94505050505b509392505050565b5f5f5f90505b60048160ff16101561117357610d7a611826565b5f5f90505b60048160ff161015610de057610dac8582600486610d9d9190611b26565b610da79190611b62565b610ac8565b828260ff1660048110610dc257610dc1611b96565b5b602002019060ff16908160ff16815250508080600101915050610d7f565b50610de9611826565b5f5f90505b60048160ff161015610e555782816003610e089190611beb565b60ff1660048110610e1c57610e1b611b96565b5b6020020151828260ff1660048110610e3757610e36611b96565b5b602002019060ff16908160ff16815250508080600101915050610dee565b50610e5e611826565b5f5f90505f5f90505b60048160ff161015610ef3575f848260ff1660048110610e8a57610e89611b96565b5b602002015160ff1614610ee657838160ff1660048110610ead57610eac611b96565b5b6020020151838380610ebe90611bc3565b945060ff1660048110610ed457610ed3611b96565b5b602002019060ff16908160ff16815250505b8080600101915050610e67565b505f5f90505b60038160ff161015610ff0575f838260ff1660048110610f1c57610f1b611b96565b5b602002015160ff1614158015610f77575082600182610f3b9190611b62565b60ff1660048110610f4f57610f4e611b96565b5b602002015160ff16838260ff1660048110610f6d57610f6c611b96565b5b602002015160ff16145b15610fe357828160ff1660048110610f9257610f91611b96565b5b602002018051809190610fa490611bc3565b60ff1660ff16815250505f83600183610fbd9190611b62565b60ff1660048110610fd157610fd0611b96565b5b602002019060ff16908160ff16815250505b8080600101915050610ef9565b50610ff9611826565b5f91505f5f90505b60048160ff16101561108d575f848260ff166004811061102457611023611b96565b5b602002015160ff161461108057838160ff166004811061104757611046611b96565b5b602002015182848061105890611bc3565b955060ff166004811061106e5761106d611b96565b5b602002019060ff16908160ff16815250505b8080600101915050611001565b50611096611826565b5f5f90505b60048160ff16101561110257828160036110b59190611beb565b60ff16600481106110c9576110c8611b96565b5b6020020151828260ff16600481106110e4576110e3611b96565b5b602002019060ff16908160ff1681525050808060010191505061109b565b505f5f90505b60048160ff16101561115f576111508a8260048b6111269190611b26565b6111309190611b62565b848460ff166004811061114657611145611b96565b5b60200201516113aa565b99508080600101915050611108565b505050505050508080600101915050610d66565b50819050919050565b600281565b5f5f6088600885901b901c146111c3576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600884901b901c14611204576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f61120f84611816565b90505f8160ff160361122b5761122485610798565b915061127b565b60018160ff16036112465761123f856113fa565b915061127a565b60038160ff16036112615761125a85610d60565b9150611279565b60028160ff16036112785761127585610468565b91505b5b5b5b5f5f90505f5f90505f5f90505b60108160ff1610156112d25761129e8782610ac8565b60ff166112ab8683610ac8565b60ff16146112c55781806112be90611bc3565b9250508092505b8080600101915050611288565b505f6112de8784610ac8565b60ff1690505f6112ee8685610ac8565b60ff161480156112fd57505f81115b80156113095750600381105b8015611318575060018260ff16145b61134e576040517f62417ce600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60019550505050505092915050565b5f5f5f90505b60108160ff1610156113a2575f61137a8583610ac8565b60ff1690508360ff168110611394576001925050506113a4565b508080600101915050611363565b505b92915050565b5f600883600f6113ba9190611beb565b6113c49190611b26565b60ff168260ff16901b600884600f6113dc9190611beb565b6113e69190611b26565b60ff1660ff901b1985161790509392505050565b5f5f5f90505b60048160ff16101561180d57611414611826565b5f5f90505b60048160ff16101561147a5761144685846004846114379190611b26565b6114419190611b62565b610ac8565b828260ff166004811061145c5761145b611b96565b5b602002019060ff16908160ff16815250508080600101915050611419565b50611483611826565b5f5f90505b60048160ff1610156114ef57828160036114a29190611beb565b60ff16600481106114b6576114b5611b96565b5b6020020151828260ff16600481106114d1576114d0611b96565b5b602002019060ff16908160ff16815250508080600101915050611488565b506114f8611826565b5f5f90505f5f90505b60048160ff16101561158d575f848260ff166004811061152457611523611b96565b5b602002015160ff161461158057838160ff166004811061154757611546611b96565b5b602002015183838061155890611bc3565b945060ff166004811061156e5761156d611b96565b5b602002019060ff16908160ff16815250505b8080600101915050611501565b505f5f90505b60038160ff16101561168a575f838260ff16600481106115b6576115b5611b96565b5b602002015160ff16141580156116115750826001826115d59190611b62565b60ff16600481106115e9576115e8611b96565b5b602002015160ff16838260ff166004811061160757611606611b96565b5b602002015160ff16145b1561167d57828160ff166004811061162c5761162b611b96565b5b60200201805180919061163e90611bc3565b60ff1660ff16815250505f836001836116579190611b62565b60ff166004811061166b5761166a611b96565b5b602002019060ff16908160ff16815250505b8080600101915050611593565b50611693611826565b5f91505f5f90505b60048160ff161015611727575f848260ff16600481106116be576116bd611b96565b5b602002015160ff161461171a57838160ff16600481106116e1576116e0611b96565b5b60200201518284806116f290611bc3565b955060ff166004811061170857611707611b96565b5b602002019060ff16908160ff16815250505b808060010191505061169b565b50611730611826565b5f5f90505b60048160ff16101561179c578281600361174f9190611beb565b60ff166004811061176357611762611b96565b5b6020020151828260ff166004811061177e5761177d611b96565b5b602002019060ff16908160ff16815250508080600101915050611735565b505f5f90505b60048160ff1610156117f9576117ea8a896004846117c09190611b26565b6117ca9190611b62565b848460ff16600481106117e0576117df611b96565b5b60200201516113aa565b995080806001019150506117a2565b505050505050508080600101915050611400565b50819050919050565b5f60ff60f883901c169050919050565b6040518060800160405280600490602082028036833780820191505090505090565b5f819050919050565b61185a81611848565b82525050565b5f6020820190506118735f830184611851565b92915050565b5f5ffd5b61188681611848565b8114611890575f5ffd5b50565b5f813590506118a18161187d565b92915050565b5f602082840312156118bc576118bb611879565b5b5f6118c984828501611893565b91505092915050565b5f8115159050919050565b6118e6816118d2565b82525050565b5f6020820190506118ff5f8301846118dd565b92915050565b5f60ff82169050919050565b61191a81611905565b8114611924575f5ffd5b50565b5f8135905061193581611911565b92915050565b5f5f6040838503121561195157611950611879565b5b5f61195e85828601611893565b925050602061196f85828601611927565b9150509250929050565b61198281611905565b82525050565b5f60208201905061199b5f830184611979565b92915050565b5f819050919050565b6119b3816119a1565b81146119bd575f5ffd5b50565b5f813590506119ce816119aa565b92915050565b5f5f5f606084860312156119eb576119ea611879565b5b5f6119f886828701611893565b9350506020611a0986828701611893565b9250506040611a1a868287016119c0565b9150509250925092565b5f5f60408385031215611a3a57611a39611879565b5b5f611a4785828601611893565b9250506020611a5885828601611893565b9150509250929050565b5f5f5f60608486031215611a7957611a78611879565b5b5f611a8686828701611893565b9350506020611a9786828701611927565b9250506040611aa886828701611927565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611ae982611848565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b1b57611b1a611ab2565b5b600182019050919050565b5f611b3082611905565b9150611b3b83611905565b9250828202611b4981611905565b9150808214611b5b57611b5a611ab2565b5b5092915050565b5f611b6c82611905565b9150611b7783611905565b9250828201905060ff811115611b9057611b8f611ab2565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611bcd82611905565b915060ff8203611be057611bdf611ab2565b5b600182019050919050565b5f611bf582611905565b9150611c0083611905565b9250828203905060ff811115611c1957611c18611ab2565b5b92915050565b5f819050919050565b611c39611c3482611848565b611c1f565b82525050565b5f819050919050565b611c59611c54826119a1565b611c3f565b82525050565b5f611c6a8287611c28565b602082019150611c7a8286611c28565b602082019150611c8a8285611c28565b602082019150611c9a8284611c48565b60208201915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611d1082611848565b9150611d1b83611848565b925082611d2b57611d2a611cd9565b5b82820690509291505056fea2646970667358221220fb979d40aea8ea7833233787a57ef5b2de8b29208c6b276fe25d2f7ad313641564736f6c634300081c0033", + "nonce": "0x0", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x334316f6b6184c1d52b1d9b707796284b617396bc5bedb35c0c3c72d54b61fd8", + "transactionType": "CREATE", + "contractName": "Faucet2048", + "contractAddress": "0x7dbd1b9355e16cff85cfa5d0a6734c880b2cd69e", + "function": null, + "arguments": [ + "0x234828a40de63d21072D1218cFb5D208654C12Bb", + "0", + "11" + ], + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0x208412", + "value": "0x0", + "input": "0x60a06040527f3230343800000000000000000000000000000000000000000000000000000000600155348015610033575f5ffd5b50604051611e34380380611e3483398181016040528101906100559190610218565b8060ff1660808160ff16815250506100728361008160201b60201c565b81600281905550505050610268565b61008f61014d60201b60201c565b156100f4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b821781555061014a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b5f90565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61017e82610155565b9050919050565b61018e81610174565b8114610198575f5ffd5b50565b5f815190506101a981610185565b92915050565b5f819050919050565b6101c1816101af565b81146101cb575f5ffd5b50565b5f815190506101dc816101b8565b92915050565b5f60ff82169050919050565b6101f7816101e2565b8114610201575f5ffd5b50565b5f81519050610212816101ee565b92915050565b5f5f5f6060848603121561022f5761022e610151565b5b5f61023c8682870161019b565b935050602061024d868287016101ce565b925050604061025e86828701610204565b9150509250925092565b608051611bad6102875f395f81816108870152610a850152611bad5ff3fe608060405260043610610169575f3560e01c8063715018a6116100d0578063ac88036c11610089578063ed80526911610063578063ed80526914610509578063f04e283e14610545578063f2fde38b14610561578063fee81cf41461057d576101a7565b8063ac88036c1461047d578063bedb86fb146104b9578063c7bdce0b146104e1576101a7565b8063715018a61461039357806375b238fc1461039d57806376592bee146103c75780637c376d39146103ef5780638da5cb5b146104175780638ea0923614610441576101a7565b80633e98ab54116101225780633e98ab54146102a15780634a4ee7b1146102dd578063514e62fc146102f957806354d1f13d1461033557806364fefbfc1461033f5780636b58d85014610369576101a7565b80630ea30f48146101ab578063183a4f6e146101e75780631c10893f146102035780631cd64df41461021f578063256929621461025b5780632de9480714610265576101a7565b366101a7577fc4c14883ae9fd8e26d5d59e3485ed29fd126d781d7e498a4ca5c54c8268e49363460405161019d9190611499565b60405180910390a1005b5f5ffd5b3480156101b6575f5ffd5b506101d160048036038101906101cc91906114ed565b6105b9565b6040516101de9190611557565b60405180910390f35b61020160048036038101906101fc919061159a565b6105e9565b005b61021d600480360381019061021891906115ef565b6105f6565b005b34801561022a575f5ffd5b50610245600480360381019061024091906115ef565b61060c565b6040516102529190611647565b60405180910390f35b610263610622565b005b348015610270575f5ffd5b5061028b60048036038101906102869190611660565b610673565b6040516102989190611499565b60405180910390f35b3480156102ac575f5ffd5b506102c760048036038101906102c2919061168b565b61068c565b6040516102d49190611499565b60405180910390f35b6102f760048036038101906102f291906115ef565b610a17565b005b348015610304575f5ffd5b5061031f600480360381019061031a91906115ef565b610a2d565b60405161032c9190611647565b60405180910390f35b61033d610a44565b005b34801561034a575f5ffd5b50610353610a7d565b6040516103609190611499565b60405180910390f35b348015610374575f5ffd5b5061037d610a83565b60405161038a91906116e4565b60405180910390f35b61039b610aa7565b005b3480156103a8575f5ffd5b506103b1610aba565b6040516103be9190611499565b60405180910390f35b3480156103d2575f5ffd5b506103ed60048036038101906103e891906116fd565b610abf565b005b3480156103fa575f5ffd5b506104156004803603810190610410919061159a565b610cd5565b005b348015610422575f5ffd5b5061042b610d24565b6040516104389190611557565b60405180910390f35b34801561044c575f5ffd5b50610467600480360381019061046291906114ed565b610d4c565b6040516104749190611647565b60405180910390f35b348015610488575f5ffd5b506104a3600480360381019061049e91906114ed565b610d69565b6040516104b09190611499565b60405180910390f35b3480156104c4575f5ffd5b506104df60048036038101906104da9190611765565b610d7e565b005b3480156104ec575f5ffd5b50610507600480360381019061050291906117f1565b610ddc565b005b348015610514575f5ffd5b5061052f600480360381019061052a91906114ed565b611218565b60405161053c919061185d565b60405180910390f35b61055f600480360381019061055a9190611660565b61122d565b005b61057b60048036038101906105769190611660565b61126b565b005b348015610588575f5ffd5b506105a3600480360381019061059e9190611660565b611294565b6040516105b09190611499565b60405180910390f35b6005602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105f333826112ad565b50565b6105fe6112bc565b61060882826112f3565b5050565b5f818261061885610673565b1614905092915050565b5f61062b611303565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f638b78c6d8600c52815f526020600c20549050919050565b5f5f5f9054906101000a900460ff16156106d2576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b43476001546040516020016106e9939291906118b6565b604051602081830303815290604052805190602001206001819055505f33905060055f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461079e576040517f2db47d5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60045f8681526020019081526020015f205490505f81116107ec576040517f3a5f7b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7333239dfc579bd6193879a551157cfd8a4ea5095a6337afd96482866001546040518463ffffffff1660e01b815260040161082993929190611910565b602060405180830381865af4158015610844573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108689190611959565b92507333239dfc579bd6193879a551157cfd8a4ea5095a637b60a804847f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016108c3929190611993565b602060405180830381865af41580156108de573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090291906119ce565b8015610929575060065f8681526020019081526020015f205f9054906101000a900460ff16155b156109a85761093a8260025461130d565b600160065f8781526020019081526020015f205f6101000a81548160ff021916908315150217905550848273ffffffffffffffffffffffffffffffffffffffff167fb961680a5264d838aae8db99673d832d178d5e11548676b8ea11c1d295b1a3d060405160405180910390a35b8260045f8781526020019081526020015f2081905550848273ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce8428686604051610a079291906119f9565b60405180910390a3505092915050565b610a1f6112bc565b610a2982826112ad565b5050565b5f5f82610a3985610673565b161415905092915050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b60025481565b7f000000000000000000000000000000000000000000000000000000000000000081565b610aaf6112bc565b610ab85f61132a565b565b600181565b5f5f9054906101000a900460ff1615610b04576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4347600154604051602001610b1b939291906118b6565b604051602081830303815290604052805190602001206001819055505f3390505f5f1b60035f8481526020019081526020015f205414610b87576040517f7e9c457700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c1c576040517fd5a95a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060055f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260035f8481526020019081526020015f2081905550828173ffffffffffffffffffffffffffffffffffffffff167f8d7f42813f395a8a637272e345d1354cccd3d4154c9da23a082e8b393b72d34a84604051610cc8919061185d565b60405180910390a3505050565b6001610ce0816113f0565b816002819055507f3de94b45dcf1466ebddcaf08282a61857b04b206def18513d137c3ce3f4fb459600254604051610d189190611499565b60405180910390a15050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b6006602052805f5260405f205f915054906101000a900460ff1681565b6004602052805f5260405f205f915090505481565b6001610d89816113f0565b815f5f6101000a81548160ff0219169083151502179055507f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd282604051610dd09190611647565b60405180910390a15050565b5f5f9054906101000a900460ff1615610e21576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4347600154604051602001610e38939291906118b6565b604051602081830303815290604052805190602001206001819055505f33905060055f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f2db47d5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60045f8681526020019081526020015f205414610f37576040517f762f260400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60048383905014610f74576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8383604051602001610f88929190611a92565b6040516020818303038152906040528051906020012090508460035f8381526020019081526020015f205414610fea576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505b8484905081101561115b575f8103611096577333239dfc579bd6193879a551157cfd8a4ea5095a6319c1471886868481811061102e5761102d611aaa565b5b905060200201356040518263ffffffff1660e01b81526004016110519190611ad7565b602060405180830381865af415801561106c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109091906119ce565b5061114e565b7333239dfc579bd6193879a551157cfd8a4ea5095a6365b559b086866001856110bf9190611b1d565b8181106110cf576110ce611aaa565b5b905060200201358787858181106110e9576110e8611aaa565b5b905060200201356040518363ffffffff1660e01b815260040161110d929190611b50565b602060405180830381865af4158015611128573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114c91906119ce565b505b8080600101915050610fef565b50838360018686905061116e9190611b1d565b81811061117e5761117d611aaa565b5b9050602002013560045f8781526020019081526020015f2081905550848273ffffffffffffffffffffffffffffffffffffffff167f0d0a2245f107bccacfa55be58c1202917e494b61aae007897d04dc991442408d86866001898990506111e59190611b1d565b8181106111f5576111f4611aaa565b5b905060200201356040516112099190611499565b60405180910390a35050505050565b6003602052805f5260405f205f915090505481565b6112356112bc565b63389a75e1600c52805f526020600c20805442111561125b57636f5e88185f526004601cfd5b5f8155506112688161132a565b50565b6112736112bc565b8060601b61128857637448fbae5f526004601cfd5b6112918161132a565b50565b5f63389a75e1600c52815f526020600c20549050919050565b6112b882825f611425565b5050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146112f1576382b429005f526004601cfd5b565b6112ff82826001611425565b5050565b5f6202a300905090565b5f385f3884865af16113265763b12d13eb5f526004601cfd5b5050565b61133261147d565b15611397577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b82178155506113ed565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b638b78c6d81954331461142257638b78c6d8600c52335f52806020600c205416611421576382b429005f526004601cfd5b5b50565b638b78c6d8600c52825f526020600c2080548381178361144757848216821890505b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f5fa3505050505050565b5f90565b5f819050919050565b61149381611481565b82525050565b5f6020820190506114ac5f83018461148a565b92915050565b5f5ffd5b5f5ffd5b5f819050919050565b6114cc816114ba565b81146114d6575f5ffd5b50565b5f813590506114e7816114c3565b92915050565b5f60208284031215611502576115016114b2565b5b5f61150f848285016114d9565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61154182611518565b9050919050565b61155181611537565b82525050565b5f60208201905061156a5f830184611548565b92915050565b61157981611481565b8114611583575f5ffd5b50565b5f8135905061159481611570565b92915050565b5f602082840312156115af576115ae6114b2565b5b5f6115bc84828501611586565b91505092915050565b6115ce81611537565b81146115d8575f5ffd5b50565b5f813590506115e9816115c5565b92915050565b5f5f60408385031215611605576116046114b2565b5b5f611612858286016115db565b925050602061162385828601611586565b9150509250929050565b5f8115159050919050565b6116418161162d565b82525050565b5f60208201905061165a5f830184611638565b92915050565b5f60208284031215611675576116746114b2565b5b5f611682848285016115db565b91505092915050565b5f5f604083850312156116a1576116a06114b2565b5b5f6116ae858286016114d9565b92505060206116bf85828601611586565b9150509250929050565b5f60ff82169050919050565b6116de816116c9565b82525050565b5f6020820190506116f75f8301846116d5565b92915050565b5f5f60408385031215611713576117126114b2565b5b5f611720858286016114d9565b9250506020611731858286016114d9565b9150509250929050565b6117448161162d565b811461174e575f5ffd5b50565b5f8135905061175f8161173b565b92915050565b5f6020828403121561177a576117796114b2565b5b5f61178784828501611751565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126117b1576117b0611790565b5b8235905067ffffffffffffffff8111156117ce576117cd611794565b5b6020830191508360208202830111156117ea576117e9611798565b5b9250929050565b5f5f5f60408486031215611808576118076114b2565b5b5f611815868287016114d9565b935050602084013567ffffffffffffffff811115611836576118356114b6565b5b6118428682870161179c565b92509250509250925092565b611857816114ba565b82525050565b5f6020820190506118705f83018461184e565b92915050565b5f819050919050565b61189061188b82611481565b611876565b82525050565b5f819050919050565b6118b06118ab826114ba565b611896565b82525050565b5f6118c1828661187f565b6020820191506118d1828561187f565b6020820191506118e1828461189f565b602082019150819050949350505050565b6118fb81611481565b82525050565b61190a816114ba565b82525050565b5f6060820190506119235f8301866118f2565b61193060208301856118f2565b61193d6040830184611901565b949350505050565b5f8151905061195381611570565b92915050565b5f6020828403121561196e5761196d6114b2565b5b5f61197b84828501611945565b91505092915050565b61198d816116c9565b82525050565b5f6040820190506119a65f8301856118f2565b6119b36020830184611984565b9392505050565b5f815190506119c88161173b565b92915050565b5f602082840312156119e3576119e26114b2565b5b5f6119f0848285016119ba565b91505092915050565b5f604082019050611a0c5f83018561148a565b611a19602083018461148a565b9392505050565b5f81905092915050565b5f5ffd5b82818337505050565b5f611a428385611a20565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611a7557611a74611a2a565b5b602083029250611a86838584611a2e565b82840190509392505050565b5f611a9e828486611a37565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082019050611aea5f8301846118f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b2782611481565b9150611b3283611481565b9250828203905081811115611b4a57611b49611af0565b5b92915050565b5f604082019050611b635f8301856118f2565b611b7060208301846118f2565b939250505056fea2646970667358221220554d615c74665612f5e07072cb13d570d7f6ef17940dc1b2bafcea7faaceb0c864736f6c634300081c0033000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b", + "nonce": "0x1", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x10e1896", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x066d9e1b54588c683d10a0ec2518ff085e4909f631b67d52a76970697e1413e6", + "transactionIndex": "0x90", + "blockHash": "0x493af32d87206a58c022d1dff1862e4e3f68ac28d04dbf8ff7a665668a681cea", + "blockNumber": "0x9579d6", + "gasUsed": "0x2370fa", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xaf2e1f", + "logs": [ + { + "address": "0x7dbd1b9355e16cff85cfa5d0a6734c880b2cd69e", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb" + ], + "data": "0x", + "blockHash": "0x88e4becc90f8a01a9076a2eb3ac3ecf5c8364e315b336ed510453a502f211096", + "blockNumber": "0x9579d7", + "blockTimestamp": "0x67e6530e", + "transactionHash": "0x334316f6b6184c1d52b1d9b707796284b617396bc5bedb35c0c3c72d54b61fd8", + "transactionIndex": "0x55", + "logIndex": "0x8f", + "removed": false + } + ], + "logsBloom": "0x00000000100000000000000000000000000000000000000000800000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000420000040000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x334316f6b6184c1d52b1d9b707796284b617396bc5bedb35c0c3c72d54b61fd8", + "transactionIndex": "0x55", + "blockHash": "0x88e4becc90f8a01a9076a2eb3ac3ecf5c8364e315b336ed510453a502f211096", + "blockNumber": "0x9579d7", + "gasUsed": "0x208412", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0x7dbd1b9355e16cff85cfa5d0a6734c880b2cd69e" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0x33239DFc579bD6193879A551157CfD8a4eA5095A" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0x7DBd1B9355e16CFf85cfA5D0A6734C880b2Cd69E" + } + }, + "timestamp": 1743147792, + "chain": 10143, + "commit": "24cf186" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743152781.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743152781.json new file mode 100644 index 0000000..9df24bc --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743152781.json @@ -0,0 +1,106 @@ +{ + "transactions": [ + { + "hash": "0x5312b1db067c3d897105e51f9e823e3d6f63f1d75678681a2c54295c50185087", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0xc08a3e243288827586e0c3a590290593b2977e6b", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x24f8c1", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000611ebb61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100f3575f3560e01c806337afd9641161009557806365b559b01161006f57806365b559b01461028f5780637e8dbaf6146102bf578063f173e012146102ef578063f54a36eb1461031f576100f3565b806337afd964146102115780633b9f7a1f1461024157806364cd159514610271576100f3565b806324f4ec51116100d157806324f4ec51146101635780632c5f3c4514610181578063312ffe40146101b157806335e37c72146101e1576100f3565b806301df1995146100f757806319c14718146101155780631af4f97014610145575b5f5ffd5b6100ff61034f565b60405161010c919061191d565b60405180910390f35b61012f600480360381019061012a9190611964565b610354565b60405161013c91906119a9565b60405180910390f35b61014d61045f565b60405161015a919061191d565b60405180910390f35b61016b610464565b604051610178919061191d565b60405180910390f35b61019b60048036038101906101969190611964565b610468565b6040516101a8919061191d565b60405180910390f35b6101cb60048036038101906101c69190611964565b610798565b6040516101d8919061191d565b60405180910390f35b6101fb60048036038101906101f691906119f8565b610ac8565b6040516102089190611a45565b60405180910390f35b61022b60048036038101906102269190611a91565b610af3565b604051610238919061191d565b60405180910390f35b61025b60048036038101906102569190611964565b610d60565b604051610268919061191d565b60405180910390f35b61027961117c565b604051610286919061191d565b60405180910390f35b6102a960048036038101906102a49190611ae1565b611181565b6040516102b691906119a9565b60405180910390f35b6102d960048036038101906102d49190611b1f565b61135d565b6040516102e6919061191d565b60405180910390f35b61030960048036038101906103049190611b4a565b611467565b604051610316919061191d565b60405180910390f35b61033960048036038101906103349190611964565b6114b7565b604051610346919061191d565b60405180910390f35b600181565b5f5f6082600284901b901c14610396576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff16101561041a575f6103b38583610ac8565b905060038160ff16106103f2576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff16111561040c57828061040890611bc7565b9350505b50808060010191505061039c565b5060028114610455576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90505b60048160ff16101561078f576104826118e3565b5f5f90505b60048160ff1610156104e8576104b485826004866104a59190611c0e565b6104af9190611c4a565b610ac8565b828260ff16600481106104ca576104c9611c7e565b5b602002019060ff16908160ff16815250508080600101915050610487565b506104f16118e3565b5f5f90505f5f90505b60048160ff161015610586575f848260ff166004811061051d5761051c611c7e565b5b602002015160ff161461057957838160ff16600481106105405761053f611c7e565b5b602002015183838061055190611cab565b945060ff166004811061056757610566611c7e565b5b602002019060ff16908160ff16815250505b80806001019150506104fa565b505f5f90505b60038160ff161015610683575f838260ff16600481106105af576105ae611c7e565b5b602002015160ff161415801561060a5750826001826105ce9190611c4a565b60ff16600481106105e2576105e1611c7e565b5b602002015160ff16838260ff1660048110610600576105ff611c7e565b5b602002015160ff16145b1561067657828160ff166004811061062557610624611c7e565b5b60200201805180919061063790611cab565b60ff1660ff16815250505f836001836106509190611c4a565b60ff166004811061066457610663611c7e565b5b602002019060ff16908160ff16815250505b808060010191505061058c565b5061068c6118e3565b5f91505f5f90505b60048160ff161015610720575f848260ff16600481106106b7576106b6611c7e565b5b602002015160ff161461071357838160ff16600481106106da576106d9611c7e565b5b60200201518284806106eb90611cab565b955060ff166004811061070157610700611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050610694565b505f5f90505b60048160ff16101561077d5761076e88826004896107449190611c0e565b61074e9190611c4a565b848460ff166004811061076457610763611c7e565b5b6020020151611467565b97508080600101915050610726565b5050505050808060010191505061046e565b50819050919050565b5f5f5f90505b60048160ff161015610abf576107b26118e3565b5f5f90505b60048160ff161015610818576107e485846004846107d59190611c0e565b6107df9190611c4a565b610ac8565b828260ff16600481106107fa576107f9611c7e565b5b602002019060ff16908160ff168152505080806001019150506107b7565b506108216118e3565b5f5f90505f5f90505b60048160ff1610156108b6575f848260ff166004811061084d5761084c611c7e565b5b602002015160ff16146108a957838160ff16600481106108705761086f611c7e565b5b602002015183838061088190611cab565b945060ff166004811061089757610896611c7e565b5b602002019060ff16908160ff16815250505b808060010191505061082a565b505f5f90505b60038160ff1610156109b3575f838260ff16600481106108df576108de611c7e565b5b602002015160ff161415801561093a5750826001826108fe9190611c4a565b60ff166004811061091257610911611c7e565b5b602002015160ff16838260ff16600481106109305761092f611c7e565b5b602002015160ff16145b156109a657828160ff166004811061095557610954611c7e565b5b60200201805180919061096790611cab565b60ff1660ff16815250505f836001836109809190611c4a565b60ff166004811061099457610993611c7e565b5b602002019060ff16908160ff16815250505b80806001019150506108bc565b506109bc6118e3565b5f91505f5f90505b60048160ff161015610a50575f848260ff16600481106109e7576109e6611c7e565b5b602002015160ff1614610a4357838160ff1660048110610a0a57610a09611c7e565b5b6020020151828480610a1b90611cab565b955060ff1660048110610a3157610a30611c7e565b5b602002019060ff16908160ff16815250505b80806001019150506109c4565b505f5f90505b60048160ff161015610aad57610a9e8887600484610a749190611c0e565b610a7e9190611c4a565b848460ff1660048110610a9457610a93611c7e565b5b6020020151611467565b97508080600101915050610a56565b5050505050808060010191505061079e565b50819050919050565b5f60ff600883600f610ada9190611cd3565b610ae49190611c0e565b60ff1684901c16905092915050565b5f60048310610b2e576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8303610b4557610b3e84610798565b9050610b8c565b60018303610b5d57610b56846114b7565b9050610b8b565b60038303610b7557610b6e84610d60565b9050610b8a565b60028303610b8957610b8684610468565b90505b5b5b5b608081901b608085901b03610bcd576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f5f90505b60108160ff161015610c11575f610bed8483610ac8565b60ff1603610c04578180610c0090611bc7565b9250505b8080600101915050610bd6565b505f811115610d58575f85858486604051602001610c329493929190611d47565b604051602081830303815290604052805190602001205f1c90505f8267ffffffffffffffff811115610c6757610c66611d94565b5b604051908082528060200260200182016040528015610c955781602001602082028036833780820191505090505b5090505f5f90505f5f90505b60108160ff161015610d04575f610cb88783610ac8565b60ff1603610cf75780838381518110610cd457610cd3611c7e565b5b602002602001019060ff16908160ff16815250508180610cf390611bc7565b9250505b8080600101915050610ca1565b50610d5285838686610d169190611dee565b81518110610d2757610d26611c7e565b5b6020026020010151605a606487610d3e9190611dee565b11610d4a576001610d4d565b60025b611467565b94505050505b509392505050565b5f5f5f90505b60048160ff16101561117357610d7a6118e3565b5f5f90505b60048160ff161015610de057610dac8582600486610d9d9190611c0e565b610da79190611c4a565b610ac8565b828260ff1660048110610dc257610dc1611c7e565b5b602002019060ff16908160ff16815250508080600101915050610d7f565b50610de96118e3565b5f5f90505b60048160ff161015610e555782816003610e089190611cd3565b60ff1660048110610e1c57610e1b611c7e565b5b6020020151828260ff1660048110610e3757610e36611c7e565b5b602002019060ff16908160ff16815250508080600101915050610dee565b50610e5e6118e3565b5f5f90505f5f90505b60048160ff161015610ef3575f848260ff1660048110610e8a57610e89611c7e565b5b602002015160ff1614610ee657838160ff1660048110610ead57610eac611c7e565b5b6020020151838380610ebe90611cab565b945060ff1660048110610ed457610ed3611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050610e67565b505f5f90505b60038160ff161015610ff0575f838260ff1660048110610f1c57610f1b611c7e565b5b602002015160ff1614158015610f77575082600182610f3b9190611c4a565b60ff1660048110610f4f57610f4e611c7e565b5b602002015160ff16838260ff1660048110610f6d57610f6c611c7e565b5b602002015160ff16145b15610fe357828160ff1660048110610f9257610f91611c7e565b5b602002018051809190610fa490611cab565b60ff1660ff16815250505f83600183610fbd9190611c4a565b60ff1660048110610fd157610fd0611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050610ef9565b50610ff96118e3565b5f91505f5f90505b60048160ff16101561108d575f848260ff166004811061102457611023611c7e565b5b602002015160ff161461108057838160ff166004811061104757611046611c7e565b5b602002015182848061105890611cab565b955060ff166004811061106e5761106d611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050611001565b506110966118e3565b5f5f90505b60048160ff16101561110257828160036110b59190611cd3565b60ff16600481106110c9576110c8611c7e565b5b6020020151828260ff16600481106110e4576110e3611c7e565b5b602002019060ff16908160ff1681525050808060010191505061109b565b505f5f90505b60048160ff16101561115f576111508a8260048b6111269190611c0e565b6111309190611c4a565b848460ff166004811061114657611145611c7e565b5b6020020151611467565b99508080600101915050611108565b505050505050508080600101915050610d66565b50819050919050565b600281565b5f5f6088600885901b901c146111c3576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600884901b901c14611204576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f61120f846118d3565b90505f8160ff160361122b5761122485610798565b915061127b565b60018160ff16036112465761123f856114b7565b915061127a565b60038160ff16036112615761125a85610d60565b9150611279565b60028160ff16036112785761127585610468565b91505b5b5b5b5f5f90505f5f90505f5f90505b60108160ff1610156112d25761129e8782610ac8565b60ff166112ab8683610ac8565b60ff16146112c55781806112be90611cab565b9250508092505b8080600101915050611288565b505f6112de8784610ac8565b60ff1690505f6112ee8685610ac8565b60ff161480156112fd57505f81115b80156113095750600381105b8015611318575060018260ff16145b61134e576040517f62417ce600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60019550505050505092915050565b5f5f826040516020016113709190611e1e565b604051602081830303815290604052805190602001205f1c90505f6010826113989190611dee565b9050816040516020016113ab9190611e38565b604051602081830303815290604052805190602001205f1c91505f6010836113d39190611dee565b90505b8181036113fd5760106001826113ec9190611e52565b6113f69190611dee565b90506113d6565b5f5f90505b60108160ff16101561145e57828160ff1614806114215750818160ff16145b156114515761144e8582605a60648861143a9190611dee565b11611446576001611449565b60025b611467565b94505b8080600101915050611402565b50505050919050565b5f600883600f6114779190611cd3565b6114819190611c0e565b60ff168260ff16901b600884600f6114999190611cd3565b6114a39190611c0e565b60ff1660ff901b1985161790509392505050565b5f5f5f90505b60048160ff1610156118ca576114d16118e3565b5f5f90505b60048160ff1610156115375761150385846004846114f49190611c0e565b6114fe9190611c4a565b610ac8565b828260ff166004811061151957611518611c7e565b5b602002019060ff16908160ff168152505080806001019150506114d6565b506115406118e3565b5f5f90505b60048160ff1610156115ac578281600361155f9190611cd3565b60ff166004811061157357611572611c7e565b5b6020020151828260ff166004811061158e5761158d611c7e565b5b602002019060ff16908160ff16815250508080600101915050611545565b506115b56118e3565b5f5f90505f5f90505b60048160ff16101561164a575f848260ff16600481106115e1576115e0611c7e565b5b602002015160ff161461163d57838160ff166004811061160457611603611c7e565b5b602002015183838061161590611cab565b945060ff166004811061162b5761162a611c7e565b5b602002019060ff16908160ff16815250505b80806001019150506115be565b505f5f90505b60038160ff161015611747575f838260ff166004811061167357611672611c7e565b5b602002015160ff16141580156116ce5750826001826116929190611c4a565b60ff16600481106116a6576116a5611c7e565b5b602002015160ff16838260ff16600481106116c4576116c3611c7e565b5b602002015160ff16145b1561173a57828160ff16600481106116e9576116e8611c7e565b5b6020020180518091906116fb90611cab565b60ff1660ff16815250505f836001836117149190611c4a565b60ff166004811061172857611727611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050611650565b506117506118e3565b5f91505f5f90505b60048160ff1610156117e4575f848260ff166004811061177b5761177a611c7e565b5b602002015160ff16146117d757838160ff166004811061179e5761179d611c7e565b5b60200201518284806117af90611cab565b955060ff16600481106117c5576117c4611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050611758565b506117ed6118e3565b5f5f90505b60048160ff161015611859578281600361180c9190611cd3565b60ff16600481106118205761181f611c7e565b5b6020020151828260ff166004811061183b5761183a611c7e565b5b602002019060ff16908160ff168152505080806001019150506117f2565b505f5f90505b60048160ff1610156118b6576118a78a8960048461187d9190611c0e565b6118879190611c4a565b848460ff166004811061189d5761189c611c7e565b5b6020020151611467565b9950808060010191505061185f565b5050505050505080806001019150506114bd565b50819050919050565b5f60ff60f883901c169050919050565b6040518060800160405280600490602082028036833780820191505090505090565b5f819050919050565b61191781611905565b82525050565b5f6020820190506119305f83018461190e565b92915050565b5f5ffd5b61194381611905565b811461194d575f5ffd5b50565b5f8135905061195e8161193a565b92915050565b5f6020828403121561197957611978611936565b5b5f61198684828501611950565b91505092915050565b5f8115159050919050565b6119a38161198f565b82525050565b5f6020820190506119bc5f83018461199a565b92915050565b5f60ff82169050919050565b6119d7816119c2565b81146119e1575f5ffd5b50565b5f813590506119f2816119ce565b92915050565b5f5f60408385031215611a0e57611a0d611936565b5b5f611a1b85828601611950565b9250506020611a2c858286016119e4565b9150509250929050565b611a3f816119c2565b82525050565b5f602082019050611a585f830184611a36565b92915050565b5f819050919050565b611a7081611a5e565b8114611a7a575f5ffd5b50565b5f81359050611a8b81611a67565b92915050565b5f5f5f60608486031215611aa857611aa7611936565b5b5f611ab586828701611950565b9350506020611ac686828701611950565b9250506040611ad786828701611a7d565b9150509250925092565b5f5f60408385031215611af757611af6611936565b5b5f611b0485828601611950565b9250506020611b1585828601611950565b9150509250929050565b5f60208284031215611b3457611b33611936565b5b5f611b4184828501611a7d565b91505092915050565b5f5f5f60608486031215611b6157611b60611936565b5b5f611b6e86828701611950565b9350506020611b7f868287016119e4565b9250506040611b90868287016119e4565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611bd182611905565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c0357611c02611b9a565b5b600182019050919050565b5f611c18826119c2565b9150611c23836119c2565b9250828202611c31816119c2565b9150808214611c4357611c42611b9a565b5b5092915050565b5f611c54826119c2565b9150611c5f836119c2565b9250828201905060ff811115611c7857611c77611b9a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611cb5826119c2565b915060ff8203611cc857611cc7611b9a565b5b600182019050919050565b5f611cdd826119c2565b9150611ce8836119c2565b9250828203905060ff811115611d0157611d00611b9a565b5b92915050565b5f819050919050565b611d21611d1c82611905565b611d07565b82525050565b5f819050919050565b611d41611d3c82611a5e565b611d27565b82525050565b5f611d528287611d10565b602082019150611d628286611d10565b602082019150611d728285611d10565b602082019150611d828284611d30565b60208201915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611df882611905565b9150611e0383611905565b925082611e1357611e12611dc1565b5b828206905092915050565b5f611e298284611d30565b60208201915081905092915050565b5f611e438284611d10565b60208201915081905092915050565b5f611e5c82611905565b9150611e6783611905565b9250828201905080821115611e7f57611e7e611b9a565b5b9291505056fea2646970667358221220fa867ae34d8048e805af2679dd7ddcb1b030217712915ccfb6b220636c10087564736f6c634300081c0033", + "nonce": "0x2", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4e5b8bf263f57523a18296132cd4dfbe75e254e8a942a9a965ebf5f201f74f81", + "transactionType": "CREATE", + "contractName": "Play2048", + "contractAddress": "0xbb9378705e67a5439f4aef160ceaac7d932bf119", + "function": null, + "arguments": [ + "0x234828a40de63d21072D1218cFb5D208654C12Bb" + ], + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0x148ad1", + "value": "0x0", + "input": "0x60806040527f3230343800000000000000000000000000000000000000000000000000000000600155348015610033575f5ffd5b5060405161129f38038061129f83398181016040528101906100559190610198565b6100648161006a60201b60201c565b506101c3565b61007861013660201b60201c565b156100dd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550610133565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b5f90565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101678261013e565b9050919050565b6101778161015d565b8114610181575f5ffd5b50565b5f815190506101928161016e565b92915050565b5f602082840312156101ad576101ac61013a565b5b5f6101ba84828501610184565b91505092915050565b6110cf806101d05f395ff3fe608060405260043610610113575f3560e01c806354d1f13d1161009f578063bedb86fb11610063578063bedb86fb14610345578063d65ab5f21461036d578063f04e283e14610397578063f2fde38b146103b3578063fee81cf4146103cf57610113565b806354d1f13d146102a1578063715018a6146102ab57806375b238fc146102b55780638da5cb5b146102df578063ac88036c1461030957610113565b806325692962116100e657806325692962146101c75780632de94807146101d15780633e98ab541461020d5780634a4ee7b114610249578063514e62fc1461026557610113565b80630ea30f4814610117578063183a4f6e146101535780631c10893f1461016f5780631cd64df41461018b575b5f5ffd5b348015610122575f5ffd5b5061013d60048036038101906101389190610c8a565b61040b565b60405161014a9190610cf4565b60405180910390f35b61016d60048036038101906101689190610d40565b61043b565b005b61018960048036038101906101849190610d95565b610448565b005b348015610196575f5ffd5b506101b160048036038101906101ac9190610d95565b61045e565b6040516101be9190610ded565b60405180910390f35b6101cf610474565b005b3480156101dc575f5ffd5b506101f760048036038101906101f29190610e06565b6104c5565b6040516102049190610e40565b60405180910390f35b348015610218575f5ffd5b50610233600480360381019061022e9190610e59565b6104de565b6040516102409190610e40565b60405180910390f35b610263600480360381019061025e9190610d95565b610729565b005b348015610270575f5ffd5b5061028b60048036038101906102869190610d95565b61073f565b6040516102989190610ded565b60405180910390f35b6102a9610756565b005b6102b361078f565b005b3480156102c0575f5ffd5b506102c96107a2565b6040516102d69190610e40565b60405180910390f35b3480156102ea575f5ffd5b506102f36107a7565b6040516103009190610cf4565b60405180910390f35b348015610314575f5ffd5b5061032f600480360381019061032a9190610c8a565b6107cf565b60405161033c9190610e40565b60405180910390f35b348015610350575f5ffd5b5061036b60048036038101906103669190610ec1565b6107e4565b005b348015610378575f5ffd5b50610381610842565b60405161038e9190610e40565b60405180910390f35b6103b160048036038101906103ac9190610e06565b610a1c565b005b6103cd60048036038101906103c89190610e06565b610a5a565b005b3480156103da575f5ffd5b506103f560048036038101906103f09190610e06565b610a83565b6040516104029190610e40565b60405180910390f35b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104453382610a9c565b50565b610450610aab565b61045a8282610ae2565b5050565b5f818261046a856104c5565b1614905092915050565b5f61047d610af2565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f638b78c6d8600c52815f526020600c20549050919050565b5f5f5f9054906101000a900460ff1615610524576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b43600154604051602001610539929190610f2c565b604051602081830303815290604052805190602001206001819055505f33905060035f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105ee576040517f2db47d5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60025f8681526020019081526020015f205490505f811161063c576040517f3a5f7b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73c08a3e243288827586e0c3a590290593b2977e6b6337afd96482866001546040518463ffffffff1660e01b815260040161067993929190610f75565b602060405180830381865af4158015610694573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b89190610fbe565b92508260025f8781526020019081526020015f2081905550848273ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce8428686604051610719929190610fe9565b60405180910390a3505092915050565b610731610aab565b61073b8282610a9c565b5050565b5f5f8261074b856104c5565b161415905092915050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b610797610aab565b6107a05f610afc565b565b600181565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b6002602052805f5260405f205f915090505481565b60016107ef81610bc2565b815f5f6101000a81548160ff0219169083151502179055507f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2826040516108369190610ded565b60405180910390a15050565b5f5f5f9054906101000a900460ff1615610888576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4360015460405160200161089d929190610f2c565b604051602081830303815290604052805190602001206001819055505f3390505f33436040516020016108d1929190611055565b6040516020818303038152906040528051906020012090508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c08a3e243288827586e0c3a590290593b2977e6b637e8dbaf66001546040518263ffffffff1660e01b81526004016109719190611080565b602060405180830381865af415801561098c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b09190610fbe565b92508260025f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff167f0d0a2245f107bccacfa55be58c1202917e494b61aae007897d04dc991442408d85604051610a0f9190610e40565b60405180910390a3505090565b610a24610aab565b63389a75e1600c52805f526020600c208054421115610a4a57636f5e88185f526004601cfd5b5f815550610a5781610afc565b50565b610a62610aab565b8060601b610a7757637448fbae5f526004601cfd5b610a8081610afc565b50565b5f63389a75e1600c52815f526020600c20549050919050565b610aa782825f610bf7565b5050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610ae0576382b429005f526004601cfd5b565b610aee82826001610bf7565b5050565b5f6202a300905090565b610b04610c4f565b15610b69577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550610bbf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b638b78c6d819543314610bf457638b78c6d8600c52335f52806020600c205416610bf3576382b429005f526004601cfd5b5b50565b638b78c6d8600c52825f526020600c20805483811783610c1957848216821890505b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f5fa3505050505050565b5f90565b5f5ffd5b5f819050919050565b610c6981610c57565b8114610c73575f5ffd5b50565b5f81359050610c8481610c60565b92915050565b5f60208284031215610c9f57610c9e610c53565b5b5f610cac84828501610c76565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cde82610cb5565b9050919050565b610cee81610cd4565b82525050565b5f602082019050610d075f830184610ce5565b92915050565b5f819050919050565b610d1f81610d0d565b8114610d29575f5ffd5b50565b5f81359050610d3a81610d16565b92915050565b5f60208284031215610d5557610d54610c53565b5b5f610d6284828501610d2c565b91505092915050565b610d7481610cd4565b8114610d7e575f5ffd5b50565b5f81359050610d8f81610d6b565b92915050565b5f5f60408385031215610dab57610daa610c53565b5b5f610db885828601610d81565b9250506020610dc985828601610d2c565b9150509250929050565b5f8115159050919050565b610de781610dd3565b82525050565b5f602082019050610e005f830184610dde565b92915050565b5f60208284031215610e1b57610e1a610c53565b5b5f610e2884828501610d81565b91505092915050565b610e3a81610d0d565b82525050565b5f602082019050610e535f830184610e31565b92915050565b5f5f60408385031215610e6f57610e6e610c53565b5b5f610e7c85828601610c76565b9250506020610e8d85828601610d2c565b9150509250929050565b610ea081610dd3565b8114610eaa575f5ffd5b50565b5f81359050610ebb81610e97565b92915050565b5f60208284031215610ed657610ed5610c53565b5b5f610ee384828501610ead565b91505092915050565b5f819050919050565b610f06610f0182610d0d565b610eec565b82525050565b5f819050919050565b610f26610f2182610c57565b610f0c565b82525050565b5f610f378285610ef5565b602082019150610f478284610f15565b6020820191508190509392505050565b610f6081610d0d565b82525050565b610f6f81610c57565b82525050565b5f606082019050610f885f830186610f57565b610f956020830185610f57565b610fa26040830184610f66565b949350505050565b5f81519050610fb881610d16565b92915050565b5f60208284031215610fd357610fd2610c53565b5b5f610fe084828501610faa565b91505092915050565b5f604082019050610ffc5f830185610e31565b6110096020830184610e31565b9392505050565b5f8160601b9050919050565b5f61102682611010565b9050919050565b5f6110378261101c565b9050919050565b61104f61104a82610cd4565b61102d565b82525050565b5f611060828561103e565b6014820191506110708284610ef5565b6020820191508190509392505050565b5f6020820190506110935f830184610f66565b9291505056fea2646970667358221220076da121549df007ff18bc47594cab292d48362a6178c5268b07a1ed56dd708e64736f6c634300081c0033000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb", + "nonce": "0x3", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1a93f35", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x5312b1db067c3d897105e51f9e823e3d6f63f1d75678681a2c54295c50185087", + "transactionIndex": "0x75", + "blockHash": "0xc0324854ff5e70727aa2d8535bd4c8620b99fb1160fa1c4f7dc34df30747a6f9", + "blockNumber": "0x959a27", + "gasUsed": "0x24f8c1", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x3061871", + "logs": [ + { + "address": "0xbb9378705e67a5439f4aef160ceaac7d932bf119", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb" + ], + "data": "0x", + "blockHash": "0x15d2226870555edb745a544a748c39dfe1c5f1d216a5d864dd96c0564c90aed0", + "blockNumber": "0x959a2a", + "blockTimestamp": "0x67e6668c", + "transactionHash": "0x4e5b8bf263f57523a18296132cd4dfbe75e254e8a942a9a965ebf5f201f74f81", + "transactionIndex": "0x5b", + "logIndex": "0xb4", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000004000000000000008000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000020000040000400000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x4e5b8bf263f57523a18296132cd4dfbe75e254e8a942a9a965ebf5f201f74f81", + "transactionIndex": "0x5b", + "blockHash": "0x15d2226870555edb745a544a748c39dfe1c5f1d216a5d864dd96c0564c90aed0", + "blockNumber": "0x959a2a", + "gasUsed": "0x148ad1", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0xbb9378705e67a5439f4aef160ceaac7d932bf119" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0xc08a3e243288827586e0c3a590290593b2977e6b" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0xBb9378705E67a5439f4AEF160cEAaC7D932BF119" + } + }, + "timestamp": 1743152781, + "chain": 10143, + "commit": "36b502f" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743408572.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743408572.json new file mode 100644 index 0000000..da668e2 --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743408572.json @@ -0,0 +1,72 @@ +{ + "transactions": [ + { + "hash": "0x4ec9c4d142533240d28ad1c92c374b550d14f26c9656a914dcf61a9b8aee5d24", + "transactionType": "CREATE", + "contractName": "Play2048", + "contractAddress": "0xe1e5f226f8dac0bac6b363c6e0b8a38a5dc7f1fb", + "function": null, + "arguments": [ + "0x234828a40de63d21072D1218cFb5D208654C12Bb" + ], + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0x179d94", + "value": "0x0", + "input": "0x60806040527f3230343800000000000000000000000000000000000000000000000000000000600155348015610033575f5ffd5b5060405161156d38038061156d83398181016040528101906100559190610198565b6100648161006a60201b60201c565b506101c3565b61007861013660201b60201c565b156100dd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550610133565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b5f90565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101678261013e565b9050919050565b6101778161015d565b8114610181575f5ffd5b50565b5f815190506101928161016e565b92915050565b5f602082840312156101ad576101ac61013a565b5b5f6101ba84828501610184565b91505092915050565b61139d806101d05f395ff3fe60806040526004361061011e575f3560e01c8063715018a61161009f578063d65ab5f211610063578063d65ab5f214610378578063e51b891f146103a2578063f04e283e146103de578063f2fde38b146103fa578063fee81cf4146104165761011e565b8063715018a6146102b657806375b238fc146102c05780638da5cb5b146102ea578063ac88036c14610314578063bedb86fb146103505761011e565b80632de94807116100e65780632de94807146101dc5780633e98ab54146102185780634a4ee7b114610254578063514e62fc1461027057806354d1f13d146102ac5761011e565b80630ea30f4814610122578063183a4f6e1461015e5780631c10893f1461017a5780631cd64df41461019657806325692962146101d2575b5f5ffd5b34801561012d575f5ffd5b5061014860048036038101906101439190610dd5565b610452565b6040516101559190610e3f565b60405180910390f35b61017860048036038101906101739190610e8b565b610482565b005b610194600480360381019061018f9190610ee0565b61048f565b005b3480156101a1575f5ffd5b506101bc60048036038101906101b79190610ee0565b6104a5565b6040516101c99190610f38565b60405180910390f35b6101da6104bb565b005b3480156101e7575f5ffd5b5061020260048036038101906101fd9190610f51565b61050c565b60405161020f9190610f8b565b60405180910390f35b348015610223575f5ffd5b5061023e60048036038101906102399190610fa4565b610525565b60405161024b9190610f8b565b60405180910390f35b61026e60048036038101906102699190610ee0565b610770565b005b34801561027b575f5ffd5b5061029660048036038101906102919190610ee0565b610786565b6040516102a39190610f38565b60405180910390f35b6102b461079d565b005b6102be6107d6565b005b3480156102cb575f5ffd5b506102d46107e9565b6040516102e19190610f8b565b60405180910390f35b3480156102f5575f5ffd5b506102fe6107ee565b60405161030b9190610e3f565b60405180910390f35b34801561031f575f5ffd5b5061033a60048036038101906103359190610dd5565b610816565b6040516103479190610f8b565b60405180910390f35b34801561035b575f5ffd5b506103766004803603810190610371919061100c565b61082b565b005b348015610383575f5ffd5b5061038c610889565b6040516103999190610f8b565b60405180910390f35b3480156103ad575f5ffd5b506103c860048036038101906103c39190610dd5565b610a63565b6040516103d591906110e8565b60405180910390f35b6103f860048036038101906103f39190610f51565b610b44565b005b610414600480360381019061040f9190610f51565b610b82565b005b348015610421575f5ffd5b5061043c60048036038101906104379190610f51565b610bab565b6040516104499190610f8b565b60405180910390f35b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61048c3382610bc4565b50565b610497610bd3565b6104a18282610c0a565b5050565b5f81826104b18561050c565b1614905092915050565b5f6104c4610c1a565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f638b78c6d8600c52815f526020600c20549050919050565b5f5f5f9054906101000a900460ff161561056b576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b43600154604051602001610580929190611142565b604051602081830303815290604052805190602001206001819055505f33905060035f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610635576040517f2db47d5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60025f8681526020019081526020015f205490505f8111610683576040517f3a5f7b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73c08a3e243288827586e0c3a590290593b2977e6b6337afd96482866001546040518463ffffffff1660e01b81526004016106c09392919061118b565b602060405180830381865af41580156106db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ff91906111d4565b92508260025f8781526020019081526020015f2081905550848273ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84286866040516107609291906111ff565b60405180910390a3505092915050565b610778610bd3565b6107828282610bc4565b5050565b5f5f826107928561050c565b161415905092915050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b6107de610bd3565b6107e75f610c24565b565b600181565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b6002602052805f5260405f205f915090505481565b600161083681610cea565b815f5f6101000a81548160ff0219169083151502179055507f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd28260405161087d9190610f38565b60405180910390a15050565b5f5f5f9054906101000a900460ff16156108cf576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b436001546040516020016108e4929190611142565b604051602081830303815290604052805190602001206001819055505f3390505f334360405160200161091892919061126b565b6040516020818303038152906040528051906020012090508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c08a3e243288827586e0c3a590290593b2977e6b637e8dbaf66001546040518263ffffffff1660e01b81526004016109b89190611296565b602060405180830381865af41580156109d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f791906111d4565b92508260025f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff167f0d0a2245f107bccacfa55be58c1202917e494b61aae007897d04dc991442408d85604051610a569190610f8b565b60405180910390a3505090565b610a6b610d7b565b5f60025f8481526020019081526020015f205490505f5f90505b60108160ff161015610b3d5773c08a3e243288827586e0c3a590290593b2977e6b6335e37c7283836040518363ffffffff1660e01b8152600401610aca9291906112be565b602060405180830381865af4158015610ae5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b09919061130f565b838260ff1660108110610b1f57610b1e61133a565b5b602002019060ff16908160ff16815250508080600101915050610a85565b5050919050565b610b4c610bd3565b63389a75e1600c52805f526020600c208054421115610b7257636f5e88185f526004601cfd5b5f815550610b7f81610c24565b50565b610b8a610bd3565b8060601b610b9f57637448fbae5f526004601cfd5b610ba881610c24565b50565b5f63389a75e1600c52815f526020600c20549050919050565b610bcf82825f610d1f565b5050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610c08576382b429005f526004601cfd5b565b610c1682826001610d1f565b5050565b5f6202a300905090565b610c2c610d77565b15610c91577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550610ce7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b638b78c6d819543314610d1c57638b78c6d8600c52335f52806020600c205416610d1b576382b429005f526004601cfd5b5b50565b638b78c6d8600c52825f526020600c20805483811783610d4157848216821890505b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f5fa3505050505050565b5f90565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b610db481610da2565b8114610dbe575f5ffd5b50565b5f81359050610dcf81610dab565b92915050565b5f60208284031215610dea57610de9610d9e565b5b5f610df784828501610dc1565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e2982610e00565b9050919050565b610e3981610e1f565b82525050565b5f602082019050610e525f830184610e30565b92915050565b5f819050919050565b610e6a81610e58565b8114610e74575f5ffd5b50565b5f81359050610e8581610e61565b92915050565b5f60208284031215610ea057610e9f610d9e565b5b5f610ead84828501610e77565b91505092915050565b610ebf81610e1f565b8114610ec9575f5ffd5b50565b5f81359050610eda81610eb6565b92915050565b5f5f60408385031215610ef657610ef5610d9e565b5b5f610f0385828601610ecc565b9250506020610f1485828601610e77565b9150509250929050565b5f8115159050919050565b610f3281610f1e565b82525050565b5f602082019050610f4b5f830184610f29565b92915050565b5f60208284031215610f6657610f65610d9e565b5b5f610f7384828501610ecc565b91505092915050565b610f8581610e58565b82525050565b5f602082019050610f9e5f830184610f7c565b92915050565b5f5f60408385031215610fba57610fb9610d9e565b5b5f610fc785828601610dc1565b9250506020610fd885828601610e77565b9150509250929050565b610feb81610f1e565b8114610ff5575f5ffd5b50565b5f8135905061100681610fe2565b92915050565b5f6020828403121561102157611020610d9e565b5b5f61102e84828501610ff8565b91505092915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b61106981611054565b82525050565b5f61107a8383611060565b60208301905092915050565b5f602082019050919050565b61109b81611037565b6110a58184611041565b92506110b08261104b565b805f5b838110156110e05781516110c7878261106f565b96506110d283611086565b9250506001810190506110b3565b505050505050565b5f610200820190506110fc5f830184611092565b92915050565b5f819050919050565b61111c61111782610e58565b611102565b82525050565b5f819050919050565b61113c61113782610da2565b611122565b82525050565b5f61114d828561110b565b60208201915061115d828461112b565b6020820191508190509392505050565b61117681610e58565b82525050565b61118581610da2565b82525050565b5f60608201905061119e5f83018661116d565b6111ab602083018561116d565b6111b8604083018461117c565b949350505050565b5f815190506111ce81610e61565b92915050565b5f602082840312156111e9576111e8610d9e565b5b5f6111f6848285016111c0565b91505092915050565b5f6040820190506112125f830185610f7c565b61121f6020830184610f7c565b9392505050565b5f8160601b9050919050565b5f61123c82611226565b9050919050565b5f61124d82611232565b9050919050565b61126561126082610e1f565b611243565b82525050565b5f6112768285611254565b601482019150611286828461110b565b6020820191508190509392505050565b5f6020820190506112a95f83018461117c565b92915050565b6112b881611054565b82525050565b5f6040820190506112d15f83018561116d565b6112de60208301846112af565b9392505050565b6112ee81611054565b81146112f8575f5ffd5b50565b5f81519050611309816112e5565b92915050565b5f6020828403121561132457611323610d9e565b5b5f611331848285016112fb565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212206eb2140d818a06e17fbf6832092a2b64520372157ea53bb8f730f02744e7b01664736f6c634300081c0033000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb", + "nonce": "0x4", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x7ed3ce", + "logs": [ + { + "address": "0xe1e5f226f8dac0bac6b363c6e0b8a38a5dc7f1fb", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb" + ], + "data": "0x", + "blockHash": "0x51d8694ecc291b0c7c8ba82999a7320a0b893702946a1d6911f0b7cfe82c3d03", + "blockNumber": "0x9c209a", + "blockTimestamp": "0x67ea4db9", + "transactionHash": "0x4ec9c4d142533240d28ad1c92c374b550d14f26c9656a914dcf61a9b8aee5d24", + "transactionIndex": "0x42", + "logIndex": "0x6d", + "removed": false + } + ], + "logsBloom": "0x00000200000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000800800000000000000000000020000040000400000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x4ec9c4d142533240d28ad1c92c374b550d14f26c9656a914dcf61a9b8aee5d24", + "transactionIndex": "0x42", + "blockHash": "0x51d8694ecc291b0c7c8ba82999a7320a0b893702946a1d6911f0b7cfe82c3d03", + "blockNumber": "0x9c209a", + "gasUsed": "0x179d94", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0xe1e5f226f8dac0bac6b363c6e0b8a38a5dc7f1fb" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0xc08a3e243288827586e0c3a590290593b2977e6b" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0xe1E5f226f8DAC0baC6b363c6e0B8A38a5DC7F1fB" + } + }, + "timestamp": 1743408572, + "chain": 10143, + "commit": "331b054" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743496583.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743496583.json new file mode 100644 index 0000000..d3174af --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743496583.json @@ -0,0 +1,106 @@ +{ + "transactions": [ + { + "hash": "0xd1a1d02447759a99e02254f0c998e24d6ce04ce95bdb88228568c3b037e06518", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0x18c3a7837feee1d838dba085611d3a0903ceed72", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x253d1a", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000611ef761004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100f3575f3560e01c806337afd9641161009557806365b559b01161006f57806365b559b01461028f5780637e8dbaf6146102bf578063f173e012146102ef578063f54a36eb1461031f576100f3565b806337afd964146102115780633b9f7a1f1461024157806364cd159514610271576100f3565b806324f4ec51116100d157806324f4ec51146101635780632c5f3c4514610181578063312ffe40146101b157806335e37c72146101e1576100f3565b806301df1995146100f757806319c14718146101155780631af4f97014610145575b5f5ffd5b6100ff61034f565b60405161010c9190611959565b60405180910390f35b61012f600480360381019061012a91906119a0565b610354565b60405161013c91906119e5565b60405180910390f35b61014d61045b565b60405161015a9190611959565b60405180910390f35b61016b610460565b6040516101789190611959565b60405180910390f35b61019b600480360381019061019691906119a0565b610464565b6040516101a89190611959565b60405180910390f35b6101cb60048036038101906101c691906119a0565b610794565b6040516101d89190611959565b60405180910390f35b6101fb60048036038101906101f69190611a34565b610ac4565b6040516102089190611a81565b60405180910390f35b61022b60048036038101906102269190611acd565b610aef565b6040516102389190611959565b60405180910390f35b61025b600480360381019061025691906119a0565b610d66565b6040516102689190611959565b60405180910390f35b610279611182565b6040516102869190611959565b60405180910390f35b6102a960048036038101906102a49190611b1d565b611187565b6040516102b691906119e5565b60405180910390f35b6102d960048036038101906102d49190611b5b565b611399565b6040516102e69190611959565b60405180910390f35b61030960048036038101906103049190611b86565b6114a3565b6040516103169190611959565b60405180910390f35b610339600480360381019061033491906119a0565b6114f3565b6040516103469190611959565b60405180910390f35b600181565b5f5f608083901c14610392576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff161015610416575f6103af8583610ac4565b905060038160ff16106103ee576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff16111561040857828061040490611c03565b9350505b508080600101915050610398565b5060028114610451576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90505b60048160ff16101561078b5761047e61191f565b5f5f90505b60048160ff1610156104e4576104b085826004866104a19190611c4a565b6104ab9190611c86565b610ac4565b828260ff16600481106104c6576104c5611cba565b5b602002019060ff16908160ff16815250508080600101915050610483565b506104ed61191f565b5f5f90505f5f90505b60048160ff161015610582575f848260ff166004811061051957610518611cba565b5b602002015160ff161461057557838160ff166004811061053c5761053b611cba565b5b602002015183838061054d90611ce7565b945060ff166004811061056357610562611cba565b5b602002019060ff16908160ff16815250505b80806001019150506104f6565b505f5f90505b60038160ff16101561067f575f838260ff16600481106105ab576105aa611cba565b5b602002015160ff16141580156106065750826001826105ca9190611c86565b60ff16600481106105de576105dd611cba565b5b602002015160ff16838260ff16600481106105fc576105fb611cba565b5b602002015160ff16145b1561067257828160ff166004811061062157610620611cba565b5b60200201805180919061063390611ce7565b60ff1660ff16815250505f8360018361064c9190611c86565b60ff16600481106106605761065f611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610588565b5061068861191f565b5f91505f5f90505b60048160ff16101561071c575f848260ff16600481106106b3576106b2611cba565b5b602002015160ff161461070f57838160ff16600481106106d6576106d5611cba565b5b60200201518284806106e790611ce7565b955060ff16600481106106fd576106fc611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610690565b505f5f90505b60048160ff1610156107795761076a88826004896107409190611c4a565b61074a9190611c86565b848460ff16600481106107605761075f611cba565b5b60200201516114a3565b97508080600101915050610722565b5050505050808060010191505061046a565b50819050919050565b5f5f5f90505b60048160ff161015610abb576107ae61191f565b5f5f90505b60048160ff161015610814576107e085846004846107d19190611c4a565b6107db9190611c86565b610ac4565b828260ff16600481106107f6576107f5611cba565b5b602002019060ff16908160ff168152505080806001019150506107b3565b5061081d61191f565b5f5f90505f5f90505b60048160ff1610156108b2575f848260ff166004811061084957610848611cba565b5b602002015160ff16146108a557838160ff166004811061086c5761086b611cba565b5b602002015183838061087d90611ce7565b945060ff166004811061089357610892611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610826565b505f5f90505b60038160ff1610156109af575f838260ff16600481106108db576108da611cba565b5b602002015160ff16141580156109365750826001826108fa9190611c86565b60ff166004811061090e5761090d611cba565b5b602002015160ff16838260ff166004811061092c5761092b611cba565b5b602002015160ff16145b156109a257828160ff166004811061095157610950611cba565b5b60200201805180919061096390611ce7565b60ff1660ff16815250505f8360018361097c9190611c86565b60ff16600481106109905761098f611cba565b5b602002019060ff16908160ff16815250505b80806001019150506108b8565b506109b861191f565b5f91505f5f90505b60048160ff161015610a4c575f848260ff16600481106109e3576109e2611cba565b5b602002015160ff1614610a3f57838160ff1660048110610a0657610a05611cba565b5b6020020151828480610a1790611ce7565b955060ff1660048110610a2d57610a2c611cba565b5b602002019060ff16908160ff16815250505b80806001019150506109c0565b505f5f90505b60048160ff161015610aa957610a9a8887600484610a709190611c4a565b610a7a9190611c86565b848460ff1660048110610a9057610a8f611cba565b5b60200201516114a3565b97508080600101915050610a52565b5050505050808060010191505061079a565b50819050919050565b5f60ff600883600f610ad69190611d0f565b610ae09190611c4a565b60ff1684901c16905092915050565b5f60048310610b2a576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8303610b4157610b3a84610794565b9050610b88565b60018303610b5957610b52846114f3565b9050610b87565b60038303610b7157610b6a84610d66565b9050610b86565b60028303610b8557610b8284610464565b90505b5b5b5b608081901b608085901b03610bc9576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f5f90505b60108160ff161015610c0d575f610be98483610ac4565b60ff1603610c00578180610bfc90611c03565b9250505b8080600101915050610bd2565b505f811115610d54575f85858486604051602001610c2e9493929190611d83565b604051602081830303815290604052805190602001205f1c90505f8267ffffffffffffffff811115610c6357610c62611dd0565b5b604051908082528060200260200182016040528015610c915781602001602082028036833780820191505090505b5090505f5f90505f5f90505b60108160ff161015610d00575f610cb48783610ac4565b60ff1603610cf35780838381518110610cd057610ccf611cba565b5b602002602001019060ff16908160ff16815250508180610cef90611c03565b9250505b8080600101915050610c9d565b50610d4e85838686610d129190611e2a565b81518110610d2357610d22611cba565b5b6020026020010151605a606487610d3a9190611e2a565b11610d46576001610d49565b60025b6114a3565b94505050505b60808083901b901c9150509392505050565b5f5f5f90505b60048160ff16101561117957610d8061191f565b5f5f90505b60048160ff161015610de657610db28582600486610da39190611c4a565b610dad9190611c86565b610ac4565b828260ff1660048110610dc857610dc7611cba565b5b602002019060ff16908160ff16815250508080600101915050610d85565b50610def61191f565b5f5f90505b60048160ff161015610e5b5782816003610e0e9190611d0f565b60ff1660048110610e2257610e21611cba565b5b6020020151828260ff1660048110610e3d57610e3c611cba565b5b602002019060ff16908160ff16815250508080600101915050610df4565b50610e6461191f565b5f5f90505f5f90505b60048160ff161015610ef9575f848260ff1660048110610e9057610e8f611cba565b5b602002015160ff1614610eec57838160ff1660048110610eb357610eb2611cba565b5b6020020151838380610ec490611ce7565b945060ff1660048110610eda57610ed9611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610e6d565b505f5f90505b60038160ff161015610ff6575f838260ff1660048110610f2257610f21611cba565b5b602002015160ff1614158015610f7d575082600182610f419190611c86565b60ff1660048110610f5557610f54611cba565b5b602002015160ff16838260ff1660048110610f7357610f72611cba565b5b602002015160ff16145b15610fe957828160ff1660048110610f9857610f97611cba565b5b602002018051809190610faa90611ce7565b60ff1660ff16815250505f83600183610fc39190611c86565b60ff1660048110610fd757610fd6611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610eff565b50610fff61191f565b5f91505f5f90505b60048160ff161015611093575f848260ff166004811061102a57611029611cba565b5b602002015160ff161461108657838160ff166004811061104d5761104c611cba565b5b602002015182848061105e90611ce7565b955060ff166004811061107457611073611cba565b5b602002019060ff16908160ff16815250505b8080600101915050611007565b5061109c61191f565b5f5f90505b60048160ff16101561110857828160036110bb9190611d0f565b60ff16600481106110cf576110ce611cba565b5b6020020151828260ff16600481106110ea576110e9611cba565b5b602002019060ff16908160ff168152505080806001019150506110a1565b505f5f90505b60048160ff161015611165576111568a8260048b61112c9190611c4a565b6111369190611c86565b848460ff166004811061114c5761114b611cba565b5b60200201516114a3565b9950808060010191505061110e565b505050505050508080600101915050610d6c565b50819050919050565b600281565b5f5f6088600885901b901c146111c9576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600884901b901c1461120a576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f6112158461190f565b90505f8160ff16036112315761122a85610794565b91506112b7565b60018160ff160361124c57611245856114f3565b91506112b6565b60038160ff16036112675761126085610d66565b91506112b5565b60028160ff16036112825761127b85610464565b91506112b4565b6040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b5f5f90505f5f90505f5f90505b60108160ff16101561130e576112da8782610ac4565b60ff166112e78683610ac4565b60ff16146113015781806112fa90611ce7565b9250508092505b80806001019150506112c4565b505f61131a8784610ac4565b60ff1690505f61132a8685610ac4565b60ff1614801561133957505f81115b80156113455750600381105b8015611354575060018260ff16145b61138a576040517f62417ce600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60019550505050505092915050565b5f5f826040516020016113ac9190611e5a565b604051602081830303815290604052805190602001205f1c90505f6010826113d49190611e2a565b9050816040516020016113e79190611e74565b604051602081830303815290604052805190602001205f1c91505f60108361140f9190611e2a565b90505b8181036114395760106001826114289190611e8e565b6114329190611e2a565b9050611412565b5f5f90505b60108160ff16101561149a57828160ff16148061145d5750818160ff16145b1561148d5761148a8582605a6064886114769190611e2a565b11611482576001611485565b60025b6114a3565b94505b808060010191505061143e565b50505050919050565b5f600883600f6114b39190611d0f565b6114bd9190611c4a565b60ff168260ff16901b600884600f6114d59190611d0f565b6114df9190611c4a565b60ff1660ff901b1985161790509392505050565b5f5f5f90505b60048160ff1610156119065761150d61191f565b5f5f90505b60048160ff1610156115735761153f85846004846115309190611c4a565b61153a9190611c86565b610ac4565b828260ff166004811061155557611554611cba565b5b602002019060ff16908160ff16815250508080600101915050611512565b5061157c61191f565b5f5f90505b60048160ff1610156115e8578281600361159b9190611d0f565b60ff16600481106115af576115ae611cba565b5b6020020151828260ff16600481106115ca576115c9611cba565b5b602002019060ff16908160ff16815250508080600101915050611581565b506115f161191f565b5f5f90505f5f90505b60048160ff161015611686575f848260ff166004811061161d5761161c611cba565b5b602002015160ff161461167957838160ff16600481106116405761163f611cba565b5b602002015183838061165190611ce7565b945060ff166004811061166757611666611cba565b5b602002019060ff16908160ff16815250505b80806001019150506115fa565b505f5f90505b60038160ff161015611783575f838260ff16600481106116af576116ae611cba565b5b602002015160ff161415801561170a5750826001826116ce9190611c86565b60ff16600481106116e2576116e1611cba565b5b602002015160ff16838260ff1660048110611700576116ff611cba565b5b602002015160ff16145b1561177657828160ff166004811061172557611724611cba565b5b60200201805180919061173790611ce7565b60ff1660ff16815250505f836001836117509190611c86565b60ff166004811061176457611763611cba565b5b602002019060ff16908160ff16815250505b808060010191505061168c565b5061178c61191f565b5f91505f5f90505b60048160ff161015611820575f848260ff16600481106117b7576117b6611cba565b5b602002015160ff161461181357838160ff16600481106117da576117d9611cba565b5b60200201518284806117eb90611ce7565b955060ff166004811061180157611800611cba565b5b602002019060ff16908160ff16815250505b8080600101915050611794565b5061182961191f565b5f5f90505b60048160ff16101561189557828160036118489190611d0f565b60ff166004811061185c5761185b611cba565b5b6020020151828260ff166004811061187757611876611cba565b5b602002019060ff16908160ff1681525050808060010191505061182e565b505f5f90505b60048160ff1610156118f2576118e38a896004846118b99190611c4a565b6118c39190611c86565b848460ff16600481106118d9576118d8611cba565b5b60200201516114a3565b9950808060010191505061189b565b5050505050505080806001019150506114f9565b50819050919050565b5f60ff60f883901c169050919050565b6040518060800160405280600490602082028036833780820191505090505090565b5f819050919050565b61195381611941565b82525050565b5f60208201905061196c5f83018461194a565b92915050565b5f5ffd5b61197f81611941565b8114611989575f5ffd5b50565b5f8135905061199a81611976565b92915050565b5f602082840312156119b5576119b4611972565b5b5f6119c28482850161198c565b91505092915050565b5f8115159050919050565b6119df816119cb565b82525050565b5f6020820190506119f85f8301846119d6565b92915050565b5f60ff82169050919050565b611a13816119fe565b8114611a1d575f5ffd5b50565b5f81359050611a2e81611a0a565b92915050565b5f5f60408385031215611a4a57611a49611972565b5b5f611a578582860161198c565b9250506020611a6885828601611a20565b9150509250929050565b611a7b816119fe565b82525050565b5f602082019050611a945f830184611a72565b92915050565b5f819050919050565b611aac81611a9a565b8114611ab6575f5ffd5b50565b5f81359050611ac781611aa3565b92915050565b5f5f5f60608486031215611ae457611ae3611972565b5b5f611af18682870161198c565b9350506020611b028682870161198c565b9250506040611b1386828701611ab9565b9150509250925092565b5f5f60408385031215611b3357611b32611972565b5b5f611b408582860161198c565b9250506020611b518582860161198c565b9150509250929050565b5f60208284031215611b7057611b6f611972565b5b5f611b7d84828501611ab9565b91505092915050565b5f5f5f60608486031215611b9d57611b9c611972565b5b5f611baa8682870161198c565b9350506020611bbb86828701611a20565b9250506040611bcc86828701611a20565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c0d82611941565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c3f57611c3e611bd6565b5b600182019050919050565b5f611c54826119fe565b9150611c5f836119fe565b9250828202611c6d816119fe565b9150808214611c7f57611c7e611bd6565b5b5092915050565b5f611c90826119fe565b9150611c9b836119fe565b9250828201905060ff811115611cb457611cb3611bd6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611cf1826119fe565b915060ff8203611d0457611d03611bd6565b5b600182019050919050565b5f611d19826119fe565b9150611d24836119fe565b9250828203905060ff811115611d3d57611d3c611bd6565b5b92915050565b5f819050919050565b611d5d611d5882611941565b611d43565b82525050565b5f819050919050565b611d7d611d7882611a9a565b611d63565b82525050565b5f611d8e8287611d4c565b602082019150611d9e8286611d4c565b602082019150611dae8285611d4c565b602082019150611dbe8284611d6c565b60208201915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611e3482611941565b9150611e3f83611941565b925082611e4f57611e4e611dfd565b5b828206905092915050565b5f611e658284611d6c565b60208201915081905092915050565b5f611e7f8284611d4c565b60208201915081905092915050565b5f611e9882611941565b9150611ea383611941565b9250828201905080821115611ebb57611eba611bd6565b5b9291505056fea2646970667358221220f3332bc015a8b02b5587e4d5451954a7c1e1befc72256bf96ca5646438f5bfa764736f6c634300081c0033", + "nonce": "0x6", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xcafedab3827c2aeb04a3316ccf04a30d0d465c17597579ddba79f0c69cacb44c", + "transactionType": "CREATE", + "contractName": "Play2048", + "contractAddress": "0x977fb1f92dfbf475df926db7fee64cc705a762bd", + "function": null, + "arguments": [ + "0x234828a40de63d21072D1218cFb5D208654C12Bb" + ], + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0x1c7893", + "value": "0x0", + "input": "0x608060405234801561000f575f5ffd5b50604051611a29380380611a2983398181016040528101906100319190610174565b6100408161004660201b60201c565b5061019f565b61005461011260201b60201c565b156100b9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b821781555061010f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b5f90565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101438261011a565b9050919050565b61015381610139565b811461015d575f5ffd5b50565b5f8151905061016e8161014a565b92915050565b5f6020828403121561018957610188610116565b5b5f61019684828501610160565b91505092915050565b61187d806101ac5f395ff3fe608060405260043610610133575f3560e01c806354d1f13d116100aa578063ac88036c1161006e578063ac88036c146103b5578063bedb86fb146103f1578063e51b891f14610419578063f04e283e14610455578063f2fde38b14610471578063fee81cf41461048d57610133565b806354d1f13d14610311578063715018a61461031b57806375b238fc1461032557806389d355e91461034f5780638da5cb5b1461038b57610133565b806325692962116100fc57806325692962146102235780632de948071461022d57806339b9e19f146102695780633e98ab54146102915780634a4ee7b1146102b9578063514e62fc146102d557610133565b80622a0c3d146101375780630ea30f4814610173578063183a4f6e146101af5780631c10893f146101cb5780631cd64df4146101e7575b5f5ffd5b348015610142575f5ffd5b5061015d600480360381019061015891906111c6565b6104c9565b60405161016a9190611200565b60405180910390f35b34801561017e575f5ffd5b50610199600480360381019061019491906111c6565b6104de565b6040516101a69190611258565b60405180910390f35b6101c960048036038101906101c491906112a4565b61050e565b005b6101e560048036038101906101e091906112f9565b61051b565b005b3480156101f2575f5ffd5b5061020d600480360381019061020891906112f9565b610531565b60405161021a9190611351565b60405180910390f35b61022b610547565b005b348015610238575f5ffd5b50610253600480360381019061024e919061136a565b610598565b60405161026091906113a4565b60405180910390f35b348015610274575f5ffd5b5061028f600480360381019061028a91906113e2565b6105b1565b005b34801561029c575f5ffd5b506102b760048036038101906102b29190611420565b610961565b005b6102d360048036038101906102ce91906112f9565b610bb0565b005b3480156102e0575f5ffd5b506102fb60048036038101906102f691906112f9565b610bc6565b6040516103089190611351565b60405180910390f35b610319610bdd565b005b610323610c16565b005b348015610330575f5ffd5b50610339610c29565b60405161034691906113a4565b60405180910390f35b34801561035a575f5ffd5b50610375600480360381019061037091906111c6565b610c2e565b6040516103829190611200565b60405180910390f35b348015610396575f5ffd5b5061039f610da9565b6040516103ac9190611258565b60405180910390f35b3480156103c0575f5ffd5b506103db60048036038101906103d691906111c6565b610dd1565b6040516103e891906113a4565b60405180910390f35b3480156103fc575f5ffd5b5061041760048036038101906104129190611488565b610de6565b005b348015610424575f5ffd5b5061043f600480360381019061043a91906111c6565b610e44565b60405161044c9190611564565b60405180910390f35b61046f600480360381019061046a919061136a565b610f25565b005b61048b6004803603810190610486919061136a565b610f63565b005b348015610498575f5ffd5b506104b360048036038101906104ae919061136a565b610f8c565b6040516104c091906113a4565b60405180910390f35b6002602052805f5260405f205f915090505481565b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105183382610fa5565b50565b610523610fb4565b61052d8282610feb565b5050565b5f818261053d85610598565b1614905092915050565b5f610550610ffb565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f638b78c6d8600c52815f526020600c20549050919050565b5f5f9054906101000a900460ff16156105f6576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f33905060035f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461068f576040517f11d0328c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260025f846040516020016106a49190611597565b6040516020818303038152906040528051906020012081526020019081526020015f2054146106ff576040517f41c1ac5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7318c3a7837feee1d838dba085611d3a0903ceed726319c14718835f6004811061072c5761072b6115b1565b5b60200201356040518263ffffffff1660e01b815260040161074d91906115ed565b602060405180830381865af4158015610768573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078c919061161a565b6107c2576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505b60048110156108c6577318c3a7837feee1d838dba085611d3a0903ceed726365b559b0846001846107f99190611672565b6004811061080a576108096115b1565b5b6020020135858460048110610822576108216115b1565b5b60200201356040518363ffffffff1660e01b81526004016108449291906116a5565b602060405180830381865af415801561085f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610883919061161a565b6108b9576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80806001019150506107c8565b50816003600481106108db576108da6115b1565b5b602002013560015f8581526020019081526020015f2081905550828173ffffffffffffffffffffffffffffffffffffffff167f0d0a2245f107bccacfa55be58c1202917e494b61aae007897d04dc991442408d84600360048110610942576109416115b1565b5b602002013560405161095491906113a4565b60405180910390a3505050565b5f5f9054906101000a900460ff16156109a6576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f33905060035f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a3f576040517f11d0328c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f8581526020019081526020015f205490505f8111610a8d576040517f3a5f7b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7318c3a7837feee1d838dba085611d3a0903ceed726365b559b082856040518363ffffffff1660e01b8152600401610ac69291906116a5565b602060405180830381865af4158015610ae1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b05919061161a565b610b3b576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260015f8681526020019081526020015f2081905550838273ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce842610b9386611005565b86604051610ba2929190611705565b60405180910390a350505050565b610bb8610fb4565b610bc28282610fa5565b5050565b5f5f82610bd285610598565b161415905092915050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b610c1e610fb4565b610c275f611015565b565b600181565b5f5f5f9054906101000a900460ff1615610c74576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f3390503343604051602001610c8b929190611791565b6040516020818303038152906040528051906020012091505f5f1b60025f8581526020019081526020015f205414610cef576040517fb47f114500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160025f8581526020019081526020015f2081905550818173ffffffffffffffffffffffffffffffffffffffff167f69e448b11dc6d1d2b599edbb4ea0476b0c8c2e107efe06064092199bedaf94aa85604051610d9b9190611200565b60405180910390a350919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b6001602052805f5260405f205f915090505481565b6001610df1816110db565b815f5f6101000a81548160ff0219169083151502179055507f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd282604051610e389190611351565b60405180910390a15050565b610e4c61116c565b5f60015f8481526020019081526020015f205490505f5f90505b60108160ff161015610f1e577318c3a7837feee1d838dba085611d3a0903ceed726335e37c7283836040518363ffffffff1660e01b8152600401610eab9291906117cb565b602060405180830381865af4158015610ec6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eea919061181c565b838260ff1660108110610f0057610eff6115b1565b5b602002019060ff16908160ff16815250508080600101915050610e66565b5050919050565b610f2d610fb4565b63389a75e1600c52805f526020600c208054421115610f5357636f5e88185f526004601cfd5b5f815550610f6081611015565b50565b610f6b610fb4565b8060601b610f8057637448fbae5f526004601cfd5b610f8981611015565b50565b5f63389a75e1600c52815f526020600c20549050919050565b610fb082825f611110565b5050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610fe9576382b429005f526004601cfd5b565b610ff782826001611110565b5050565b5f6202a300905090565b5f60ff60f883901c169050919050565b61101d611168565b15611082577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b82178155506110d8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b638b78c6d81954331461110d57638b78c6d8600c52335f52806020600c20541661110c576382b429005f526004601cfd5b5b50565b638b78c6d8600c52825f526020600c2080548381178361113257848216821890505b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f5fa3505050505050565b5f90565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b6111a581611193565b81146111af575f5ffd5b50565b5f813590506111c08161119c565b92915050565b5f602082840312156111db576111da61118f565b5b5f6111e8848285016111b2565b91505092915050565b6111fa81611193565b82525050565b5f6020820190506112135f8301846111f1565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61124282611219565b9050919050565b61125281611238565b82525050565b5f60208201905061126b5f830184611249565b92915050565b5f819050919050565b61128381611271565b811461128d575f5ffd5b50565b5f8135905061129e8161127a565b92915050565b5f602082840312156112b9576112b861118f565b5b5f6112c684828501611290565b91505092915050565b6112d881611238565b81146112e2575f5ffd5b50565b5f813590506112f3816112cf565b92915050565b5f5f6040838503121561130f5761130e61118f565b5b5f61131c858286016112e5565b925050602061132d85828601611290565b9150509250929050565b5f8115159050919050565b61134b81611337565b82525050565b5f6020820190506113645f830184611342565b92915050565b5f6020828403121561137f5761137e61118f565b5b5f61138c848285016112e5565b91505092915050565b61139e81611271565b82525050565b5f6020820190506113b75f830184611395565b92915050565b5f5ffd5b5f819050826020600402820111156113dc576113db6113bd565b5b92915050565b5f5f60a083850312156113f8576113f761118f565b5b5f611405858286016111b2565b9250506020611416858286016113c1565b9150509250929050565b5f5f604083850312156114365761143561118f565b5b5f611443858286016111b2565b925050602061145485828601611290565b9150509250929050565b61146781611337565b8114611471575f5ffd5b50565b5f813590506114828161145e565b92915050565b5f6020828403121561149d5761149c61118f565b5b5f6114aa84828501611474565b91505092915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b6114e5816114d0565b82525050565b5f6114f683836114dc565b60208301905092915050565b5f602082019050919050565b611517816114b3565b61152181846114bd565b925061152c826114c7565b805f5b8381101561155c57815161154387826114eb565b965061154e83611502565b92505060018101905061152f565b505050505050565b5f610200820190506115785f83018461150e565b92915050565b82818337505050565b6115936080838361157e565b5050565b5f6115a28284611587565b60808201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6115e781611271565b82525050565b5f6020820190506116005f8301846115de565b92915050565b5f815190506116148161145e565b92915050565b5f6020828403121561162f5761162e61118f565b5b5f61163c84828501611606565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61167c82611271565b915061168783611271565b925082820390508181111561169f5761169e611645565b5b92915050565b5f6040820190506116b85f8301856115de565b6116c560208301846115de565b9392505050565b5f819050919050565b5f6116ef6116ea6116e5846114d0565b6116cc565b611271565b9050919050565b6116ff816116d5565b82525050565b5f6040820190506117185f8301856116f6565b6117256020830184611395565b9392505050565b5f8160601b9050919050565b5f6117428261172c565b9050919050565b5f61175382611738565b9050919050565b61176b61176682611238565b611749565b82525050565b5f819050919050565b61178b61178682611271565b611771565b82525050565b5f61179c828561175a565b6014820191506117ac828461177a565b6020820191508190509392505050565b6117c5816114d0565b82525050565b5f6040820190506117de5f8301856115de565b6117eb60208301846117bc565b9392505050565b6117fb816114d0565b8114611805575f5ffd5b50565b5f81519050611816816117f2565b92915050565b5f602082840312156118315761183061118f565b5b5f61183e84828501611808565b9150509291505056fea26469706673582212202b3aaa2fcf77263d57c4e6e446a4302e38aa82a0a5da9122386cd517b03091cd64736f6c634300081c0033000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb", + "nonce": "0x7", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x4bbe5be", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd1a1d02447759a99e02254f0c998e24d6ce04ce95bdb88228568c3b037e06518", + "transactionIndex": "0x24b", + "blockHash": "0x3bddb8bf202857554090367bf0273eb8619f320120f98df8865c7538c28a4ff5", + "blockNumber": "0x9e3d23", + "gasUsed": "0x253d1a", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x4d85e51", + "logs": [ + { + "address": "0x977fb1f92dfbf475df926db7fee64cc705a762bd", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb" + ], + "data": "0x", + "blockHash": "0x3bddb8bf202857554090367bf0273eb8619f320120f98df8865c7538c28a4ff5", + "blockNumber": "0x9e3d23", + "blockTimestamp": "0x67eba583", + "transactionHash": "0xcafedab3827c2aeb04a3316ccf04a30d0d465c17597579ddba79f0c69cacb44c", + "transactionIndex": "0x24c", + "logIndex": "0x305", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000020000000000000000000800000000001000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000020000040000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xcafedab3827c2aeb04a3316ccf04a30d0d465c17597579ddba79f0c69cacb44c", + "transactionIndex": "0x24c", + "blockHash": "0x3bddb8bf202857554090367bf0273eb8619f320120f98df8865c7538c28a4ff5", + "blockNumber": "0x9e3d23", + "gasUsed": "0x1c7893", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0x977fb1f92dfbf475df926db7fee64cc705a762bd" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0x18c3a7837FEeE1d838DbA085611D3A0903CEEd72" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0x977FB1F92DFBf475dF926DB7Fee64cc705A762bD" + } + }, + "timestamp": 1743496583, + "chain": 10143, + "commit": "0d3d2c2" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743498025.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743498025.json new file mode 100644 index 0000000..dc893f8 --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1743498025.json @@ -0,0 +1,72 @@ +{ + "transactions": [ + { + "hash": "0xe8f70907839f066358d5fe8d30e1ddc2fe954c8e89241aa3c9a2bdd2fabb067f", + "transactionType": "CREATE", + "contractName": "Play2048", + "contractAddress": "0xd9d6c523bf597e82d5247ab7ca1104215b73e5bc", + "function": null, + "arguments": [ + "0x234828a40de63d21072D1218cFb5D208654C12Bb" + ], + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0x1c793f", + "value": "0x0", + "input": "0x608060405234801561000f575f5ffd5b50604051611a2b380380611a2b83398181016040528101906100319190610174565b6100408161004660201b60201c565b5061019f565b61005461011260201b60201c565b156100b9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b821781555061010f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b5f90565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101438261011a565b9050919050565b61015381610139565b811461015d575f5ffd5b50565b5f8151905061016e8161014a565b92915050565b5f6020828403121561018957610188610116565b5b5f61019684828501610160565b91505092915050565b61187f806101ac5f395ff3fe608060405260043610610133575f3560e01c806354d1f13d116100aa578063bedb86fb1161006e578063bedb86fb146103b5578063e51b891f146103dd578063f04e283e14610419578063f2fde38b14610435578063f3618a2214610451578063fee81cf41461047957610133565b806354d1f13d14610311578063715018a61461031b57806375b238fc146103255780638da5cb5b1461034f578063ac88036c1461037957610133565b806325692962116100fc57806325692962146102235780632de948071461022d57806339b9e19f146102695780633e98ab54146102915780634a4ee7b1146102b9578063514e62fc146102d557610133565b80622a0c3d146101375780630ea30f4814610173578063183a4f6e146101af5780631c10893f146101cb5780631cd64df4146101e7575b5f5ffd5b348015610142575f5ffd5b5061015d6004803603810190610158919061121a565b6104b5565b60405161016a9190611254565b60405180910390f35b34801561017e575f5ffd5b506101996004803603810190610194919061121a565b6104ca565b6040516101a691906112ac565b60405180910390f35b6101c960048036038101906101c491906112f8565b6104fa565b005b6101e560048036038101906101e0919061134d565b610507565b005b3480156101f2575f5ffd5b5061020d6004803603810190610208919061134d565b61051d565b60405161021a91906113a5565b60405180910390f35b61022b610533565b005b348015610238575f5ffd5b50610253600480360381019061024e91906113be565b610584565b60405161026091906113f8565b60405180910390f35b348015610274575f5ffd5b5061028f600480360381019061028a9190611436565b61059d565b005b34801561029c575f5ffd5b506102b760048036038101906102b29190611474565b61094d565b005b6102d360048036038101906102ce919061134d565b610b9c565b005b3480156102e0575f5ffd5b506102fb60048036038101906102f6919061134d565b610bb2565b60405161030891906113a5565b60405180910390f35b610319610bc9565b005b610323610c02565b005b348015610330575f5ffd5b50610339610c15565b60405161034691906113f8565b60405180910390f35b34801561035a575f5ffd5b50610363610c1a565b60405161037091906112ac565b60405180910390f35b348015610384575f5ffd5b5061039f600480360381019061039a919061121a565b610c42565b6040516103ac91906113f8565b60405180910390f35b3480156103c0575f5ffd5b506103db60048036038101906103d691906114dc565b610c57565b005b3480156103e8575f5ffd5b5061040360048036038101906103fe919061121a565b610cb5565b60405161041091906115b8565b60405180910390f35b610433600480360381019061042e91906113be565b610d96565b005b61044f600480360381019061044a91906113be565b610dd4565b005b34801561045c575f5ffd5b50610477600480360381019061047291906115d2565b610dfd565b005b348015610484575f5ffd5b5061049f600480360381019061049a91906113be565b610fe0565b6040516104ac91906113f8565b60405180910390f35b6002602052805f5260405f205f915090505481565b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105043382610ff9565b50565b61050f611008565b610519828261103f565b5050565b5f818261052985610584565b1614905092915050565b5f61053c61104f565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f638b78c6d8600c52815f526020600c20549050919050565b5f5f9054906101000a900460ff16156105e2576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f33905060035f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461067b576040517f11d0328c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260025f846040516020016106909190611629565b6040516020818303038152906040528051906020012081526020019081526020015f2054146106eb576040517f41c1ac5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7318c3a7837feee1d838dba085611d3a0903ceed726319c14718835f6004811061071857610717611643565b5b60200201356040518263ffffffff1660e01b8152600401610739919061167f565b602060405180830381865af4158015610754573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077891906116ac565b6107ae576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505b60048110156108b2577318c3a7837feee1d838dba085611d3a0903ceed726365b559b0846001846107e59190611704565b600481106107f6576107f5611643565b5b602002013585846004811061080e5761080d611643565b5b60200201356040518363ffffffff1660e01b8152600401610830929190611737565b602060405180830381865af415801561084b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086f91906116ac565b6108a5576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80806001019150506107b4565b50816003600481106108c7576108c6611643565b5b602002013560015f8581526020019081526020015f2081905550828173ffffffffffffffffffffffffffffffffffffffff167f0d0a2245f107bccacfa55be58c1202917e494b61aae007897d04dc991442408d8460036004811061092e5761092d611643565b5b602002013560405161094091906113f8565b60405180910390a3505050565b5f5f9054906101000a900460ff1615610992576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f33905060035f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a2b576040517f11d0328c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f8581526020019081526020015f205490505f8111610a79576040517f3a5f7b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7318c3a7837feee1d838dba085611d3a0903ceed726365b559b082856040518363ffffffff1660e01b8152600401610ab2929190611737565b602060405180830381865af4158015610acd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af191906116ac565b610b27576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260015f8681526020019081526020015f2081905550838273ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce842610b7f86611059565b86604051610b8e929190611797565b60405180910390a350505050565b610ba4611008565b610bae8282610ff9565b5050565b5f5f82610bbe85610584565b161415905092915050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b610c0a611008565b610c135f611069565b565b600181565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b6001602052805f5260405f205f915090505481565b6001610c628161112f565b815f5f6101000a81548160ff0219169083151502179055507f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd282604051610ca991906113a5565b60405180910390a15050565b610cbd6111c0565b5f60015f8481526020019081526020015f205490505f5f90505b60108160ff161015610d8f577318c3a7837feee1d838dba085611d3a0903ceed726335e37c7283836040518363ffffffff1660e01b8152600401610d1c9291906117cd565b602060405180830381865af4158015610d37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061181e565b838260ff1660108110610d7157610d70611643565b5b602002019060ff16908160ff16815250508080600101915050610cd7565b5050919050565b610d9e611008565b63389a75e1600c52805f526020600c208054421115610dc457636f5e88185f526004601cfd5b5f815550610dd181611069565b50565b610ddc611008565b8060601b610df157637448fbae5f526004601cfd5b610dfa81611069565b50565b5f5f9054906101000a900460ff1615610e42576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f3390505f73ffffffffffffffffffffffffffffffffffffffff1660035f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610edb576040517f11d0328c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f1b60025f8481526020019081526020015f205414610f27576040517fb47f114500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260025f8481526020019081526020015f2081905550828173ffffffffffffffffffffffffffffffffffffffff167f69e448b11dc6d1d2b599edbb4ea0476b0c8c2e107efe06064092199bedaf94aa84604051610fd39190611254565b60405180910390a3505050565b5f63389a75e1600c52815f526020600c20549050919050565b61100482825f611164565b5050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754331461103d576382b429005f526004601cfd5b565b61104b82826001611164565b5050565b5f6202a300905090565b5f60ff60f883901c169050919050565b6110716111bc565b156110d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b821781555061112c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b638b78c6d81954331461116157638b78c6d8600c52335f52806020600c205416611160576382b429005f526004601cfd5b5b50565b638b78c6d8600c52825f526020600c2080548381178361118657848216821890505b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f5fa3505050505050565b5f90565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b6111f9816111e7565b8114611203575f5ffd5b50565b5f81359050611214816111f0565b92915050565b5f6020828403121561122f5761122e6111e3565b5b5f61123c84828501611206565b91505092915050565b61124e816111e7565b82525050565b5f6020820190506112675f830184611245565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6112968261126d565b9050919050565b6112a68161128c565b82525050565b5f6020820190506112bf5f83018461129d565b92915050565b5f819050919050565b6112d7816112c5565b81146112e1575f5ffd5b50565b5f813590506112f2816112ce565b92915050565b5f6020828403121561130d5761130c6111e3565b5b5f61131a848285016112e4565b91505092915050565b61132c8161128c565b8114611336575f5ffd5b50565b5f8135905061134781611323565b92915050565b5f5f60408385031215611363576113626111e3565b5b5f61137085828601611339565b9250506020611381858286016112e4565b9150509250929050565b5f8115159050919050565b61139f8161138b565b82525050565b5f6020820190506113b85f830184611396565b92915050565b5f602082840312156113d3576113d26111e3565b5b5f6113e084828501611339565b91505092915050565b6113f2816112c5565b82525050565b5f60208201905061140b5f8301846113e9565b92915050565b5f5ffd5b5f819050826020600402820111156114305761142f611411565b5b92915050565b5f5f60a0838503121561144c5761144b6111e3565b5b5f61145985828601611206565b925050602061146a85828601611415565b9150509250929050565b5f5f6040838503121561148a576114896111e3565b5b5f61149785828601611206565b92505060206114a8858286016112e4565b9150509250929050565b6114bb8161138b565b81146114c5575f5ffd5b50565b5f813590506114d6816114b2565b92915050565b5f602082840312156114f1576114f06111e3565b5b5f6114fe848285016114c8565b91505092915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b61153981611524565b82525050565b5f61154a8383611530565b60208301905092915050565b5f602082019050919050565b61156b81611507565b6115758184611511565b92506115808261151b565b805f5b838110156115b0578151611597878261153f565b96506115a283611556565b925050600181019050611583565b505050505050565b5f610200820190506115cc5f830184611562565b92915050565b5f5f604083850312156115e8576115e76111e3565b5b5f6115f585828601611206565b925050602061160685828601611206565b9150509250929050565b82818337505050565b61162560808383611610565b5050565b5f6116348284611619565b60808201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b611679816112c5565b82525050565b5f6020820190506116925f830184611670565b92915050565b5f815190506116a6816114b2565b92915050565b5f602082840312156116c1576116c06111e3565b5b5f6116ce84828501611698565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61170e826112c5565b9150611719836112c5565b9250828203905081811115611731576117306116d7565b5b92915050565b5f60408201905061174a5f830185611670565b6117576020830184611670565b9392505050565b5f819050919050565b5f61178161177c61177784611524565b61175e565b6112c5565b9050919050565b61179181611767565b82525050565b5f6040820190506117aa5f830185611788565b6117b760208301846113e9565b9392505050565b6117c781611524565b82525050565b5f6040820190506117e05f830185611670565b6117ed60208301846117be565b9392505050565b6117fd81611524565b8114611807575f5ffd5b50565b5f81519050611818816117f4565b92915050565b5f60208284031215611833576118326111e3565b5b5f6118408482850161180a565b9150509291505056fea2646970667358221220ea05155d57f8f0a1a4563a313ce6e5384a237a920df6698c967017492f9b0b9b64736f6c634300081c0033000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb", + "nonce": "0x8", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xd4ae68", + "logs": [ + { + "address": "0xd9d6c523bf597e82d5247ab7ca1104215b73e5bc", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb" + ], + "data": "0x", + "blockHash": "0x02bfe853820f6d0e05b6507ea93ea2f070caddaf3dba217b6c88a5c7d83aa51c", + "blockNumber": "0x9e465f", + "blockTimestamp": "0x67ebab27", + "transactionHash": "0xe8f70907839f066358d5fe8d30e1ddc2fe954c8e89241aa3c9a2bdd2fabb067f", + "transactionIndex": "0x69", + "logIndex": "0xd8", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000000000000000000000000000020000000000000000000810000000000000000000020000040000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe8f70907839f066358d5fe8d30e1ddc2fe954c8e89241aa3c9a2bdd2fabb067f", + "transactionIndex": "0x69", + "blockHash": "0x02bfe853820f6d0e05b6507ea93ea2f070caddaf3dba217b6c88a5c7d83aa51c", + "blockNumber": "0x9e465f", + "gasUsed": "0x1c793f", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0xd9d6c523bf597e82d5247ab7ca1104215b73e5bc" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0x18c3a7837FEeE1d838DbA085611D3A0903CEEd72" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0xD9d6C523BF597e82D5247aB7CA1104215B73e5Bc" + } + }, + "timestamp": 1743498025, + "chain": 10143, + "commit": "11be9e2" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-1745469906.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1745469906.json new file mode 100644 index 0000000..dd8df22 --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1745469906.json @@ -0,0 +1,87 @@ +{ + "transactions": [ + { + "hash": "0x05b57c8bb053fc9268ab43934143ee7a6050b9bd0a1e91513bdfaeffc68a2574", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0x3a98ff59f451f16dc5201ad287073202d82aba6e", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x253d0a", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000611ef761004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100f3575f3560e01c806337afd9641161009557806365b559b01161006f57806365b559b01461028f5780637e8dbaf6146102bf578063f173e012146102ef578063f54a36eb1461031f576100f3565b806337afd964146102115780633b9f7a1f1461024157806364cd159514610271576100f3565b806324f4ec51116100d157806324f4ec51146101635780632c5f3c4514610181578063312ffe40146101b157806335e37c72146101e1576100f3565b806301df1995146100f757806319c14718146101155780631af4f97014610145575b5f5ffd5b6100ff61034f565b60405161010c9190611959565b60405180910390f35b61012f600480360381019061012a91906119a0565b610354565b60405161013c91906119e5565b60405180910390f35b61014d61045b565b60405161015a9190611959565b60405180910390f35b61016b610460565b6040516101789190611959565b60405180910390f35b61019b600480360381019061019691906119a0565b610464565b6040516101a89190611959565b60405180910390f35b6101cb60048036038101906101c691906119a0565b610794565b6040516101d89190611959565b60405180910390f35b6101fb60048036038101906101f69190611a34565b610ac4565b6040516102089190611a81565b60405180910390f35b61022b60048036038101906102269190611acd565b610aef565b6040516102389190611959565b60405180910390f35b61025b600480360381019061025691906119a0565b610d66565b6040516102689190611959565b60405180910390f35b610279611182565b6040516102869190611959565b60405180910390f35b6102a960048036038101906102a49190611b1d565b611187565b6040516102b691906119e5565b60405180910390f35b6102d960048036038101906102d49190611b5b565b611399565b6040516102e69190611959565b60405180910390f35b61030960048036038101906103049190611b86565b6114a3565b6040516103169190611959565b60405180910390f35b610339600480360381019061033491906119a0565b6114f3565b6040516103469190611959565b60405180910390f35b600181565b5f5f608083901c14610392576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff161015610416575f6103af8583610ac4565b905060038160ff16106103ee576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff16111561040857828061040490611c03565b9350505b508080600101915050610398565b5060028114610451576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90505b60048160ff16101561078b5761047e61191f565b5f5f90505b60048160ff1610156104e4576104b085826004866104a19190611c4a565b6104ab9190611c86565b610ac4565b828260ff16600481106104c6576104c5611cba565b5b602002019060ff16908160ff16815250508080600101915050610483565b506104ed61191f565b5f5f90505f5f90505b60048160ff161015610582575f848260ff166004811061051957610518611cba565b5b602002015160ff161461057557838160ff166004811061053c5761053b611cba565b5b602002015183838061054d90611ce7565b945060ff166004811061056357610562611cba565b5b602002019060ff16908160ff16815250505b80806001019150506104f6565b505f5f90505b60038160ff16101561067f575f838260ff16600481106105ab576105aa611cba565b5b602002015160ff16141580156106065750826001826105ca9190611c86565b60ff16600481106105de576105dd611cba565b5b602002015160ff16838260ff16600481106105fc576105fb611cba565b5b602002015160ff16145b1561067257828160ff166004811061062157610620611cba565b5b60200201805180919061063390611ce7565b60ff1660ff16815250505f8360018361064c9190611c86565b60ff16600481106106605761065f611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610588565b5061068861191f565b5f91505f5f90505b60048160ff16101561071c575f848260ff16600481106106b3576106b2611cba565b5b602002015160ff161461070f57838160ff16600481106106d6576106d5611cba565b5b60200201518284806106e790611ce7565b955060ff16600481106106fd576106fc611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610690565b505f5f90505b60048160ff1610156107795761076a88826004896107409190611c4a565b61074a9190611c86565b848460ff16600481106107605761075f611cba565b5b60200201516114a3565b97508080600101915050610722565b5050505050808060010191505061046a565b50819050919050565b5f5f5f90505b60048160ff161015610abb576107ae61191f565b5f5f90505b60048160ff161015610814576107e085846004846107d19190611c4a565b6107db9190611c86565b610ac4565b828260ff16600481106107f6576107f5611cba565b5b602002019060ff16908160ff168152505080806001019150506107b3565b5061081d61191f565b5f5f90505f5f90505b60048160ff1610156108b2575f848260ff166004811061084957610848611cba565b5b602002015160ff16146108a557838160ff166004811061086c5761086b611cba565b5b602002015183838061087d90611ce7565b945060ff166004811061089357610892611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610826565b505f5f90505b60038160ff1610156109af575f838260ff16600481106108db576108da611cba565b5b602002015160ff16141580156109365750826001826108fa9190611c86565b60ff166004811061090e5761090d611cba565b5b602002015160ff16838260ff166004811061092c5761092b611cba565b5b602002015160ff16145b156109a257828160ff166004811061095157610950611cba565b5b60200201805180919061096390611ce7565b60ff1660ff16815250505f8360018361097c9190611c86565b60ff16600481106109905761098f611cba565b5b602002019060ff16908160ff16815250505b80806001019150506108b8565b506109b861191f565b5f91505f5f90505b60048160ff161015610a4c575f848260ff16600481106109e3576109e2611cba565b5b602002015160ff1614610a3f57838160ff1660048110610a0657610a05611cba565b5b6020020151828480610a1790611ce7565b955060ff1660048110610a2d57610a2c611cba565b5b602002019060ff16908160ff16815250505b80806001019150506109c0565b505f5f90505b60048160ff161015610aa957610a9a8887600484610a709190611c4a565b610a7a9190611c86565b848460ff1660048110610a9057610a8f611cba565b5b60200201516114a3565b97508080600101915050610a52565b5050505050808060010191505061079a565b50819050919050565b5f60ff600883600f610ad69190611d0f565b610ae09190611c4a565b60ff1684901c16905092915050565b5f60048310610b2a576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8303610b4157610b3a84610794565b9050610b88565b60018303610b5957610b52846114f3565b9050610b87565b60038303610b7157610b6a84610d66565b9050610b86565b60028303610b8557610b8284610464565b90505b5b5b5b608081901b608085901b03610bc9576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f5f90505b60108160ff161015610c0d575f610be98483610ac4565b60ff1603610c00578180610bfc90611c03565b9250505b8080600101915050610bd2565b505f811115610d54575f85858486604051602001610c2e9493929190611d83565b604051602081830303815290604052805190602001205f1c90505f8267ffffffffffffffff811115610c6357610c62611dd0565b5b604051908082528060200260200182016040528015610c915781602001602082028036833780820191505090505b5090505f5f90505f5f90505b60108160ff161015610d00575f610cb48783610ac4565b60ff1603610cf35780838381518110610cd057610ccf611cba565b5b602002602001019060ff16908160ff16815250508180610cef90611c03565b9250505b8080600101915050610c9d565b50610d4e85838686610d129190611e2a565b81518110610d2357610d22611cba565b5b6020026020010151605a606487610d3a9190611e2a565b11610d46576001610d49565b60025b6114a3565b94505050505b60808083901b901c9150509392505050565b5f5f5f90505b60048160ff16101561117957610d8061191f565b5f5f90505b60048160ff161015610de657610db28582600486610da39190611c4a565b610dad9190611c86565b610ac4565b828260ff1660048110610dc857610dc7611cba565b5b602002019060ff16908160ff16815250508080600101915050610d85565b50610def61191f565b5f5f90505b60048160ff161015610e5b5782816003610e0e9190611d0f565b60ff1660048110610e2257610e21611cba565b5b6020020151828260ff1660048110610e3d57610e3c611cba565b5b602002019060ff16908160ff16815250508080600101915050610df4565b50610e6461191f565b5f5f90505f5f90505b60048160ff161015610ef9575f848260ff1660048110610e9057610e8f611cba565b5b602002015160ff1614610eec57838160ff1660048110610eb357610eb2611cba565b5b6020020151838380610ec490611ce7565b945060ff1660048110610eda57610ed9611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610e6d565b505f5f90505b60038160ff161015610ff6575f838260ff1660048110610f2257610f21611cba565b5b602002015160ff1614158015610f7d575082600182610f419190611c86565b60ff1660048110610f5557610f54611cba565b5b602002015160ff16838260ff1660048110610f7357610f72611cba565b5b602002015160ff16145b15610fe957828160ff1660048110610f9857610f97611cba565b5b602002018051809190610faa90611ce7565b60ff1660ff16815250505f83600183610fc39190611c86565b60ff1660048110610fd757610fd6611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610eff565b50610fff61191f565b5f91505f5f90505b60048160ff161015611093575f848260ff166004811061102a57611029611cba565b5b602002015160ff161461108657838160ff166004811061104d5761104c611cba565b5b602002015182848061105e90611ce7565b955060ff166004811061107457611073611cba565b5b602002019060ff16908160ff16815250505b8080600101915050611007565b5061109c61191f565b5f5f90505b60048160ff16101561110857828160036110bb9190611d0f565b60ff16600481106110cf576110ce611cba565b5b6020020151828260ff16600481106110ea576110e9611cba565b5b602002019060ff16908160ff168152505080806001019150506110a1565b505f5f90505b60048160ff161015611165576111568a8260048b61112c9190611c4a565b6111369190611c86565b848460ff166004811061114c5761114b611cba565b5b60200201516114a3565b9950808060010191505061110e565b505050505050508080600101915050610d6c565b50819050919050565b600281565b5f5f6088600885901b901c146111c9576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600884901b901c1461120a576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f6112158461190f565b90505f8160ff16036112315761122a85610794565b91506112b7565b60018160ff160361124c57611245856114f3565b91506112b6565b60038160ff16036112675761126085610d66565b91506112b5565b60028160ff16036112825761127b85610464565b91506112b4565b6040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b5f5f90505f5f90505f5f90505b60108160ff16101561130e576112da8782610ac4565b60ff166112e78683610ac4565b60ff16146113015781806112fa90611ce7565b9250508092505b80806001019150506112c4565b505f61131a8784610ac4565b60ff1690505f61132a8685610ac4565b60ff1614801561133957505f81115b80156113455750600381105b8015611354575060018260ff16145b61138a576040517f62417ce600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60019550505050505092915050565b5f5f826040516020016113ac9190611e5a565b604051602081830303815290604052805190602001205f1c90505f6010826113d49190611e2a565b9050816040516020016113e79190611e74565b604051602081830303815290604052805190602001205f1c91505f60108361140f9190611e2a565b90505b8181036114395760106001826114289190611e8e565b6114329190611e2a565b9050611412565b5f5f90505b60108160ff16101561149a57828160ff16148061145d5750818160ff16145b1561148d5761148a8582605a6064886114769190611e2a565b11611482576001611485565b60025b6114a3565b94505b808060010191505061143e565b50505050919050565b5f600883600f6114b39190611d0f565b6114bd9190611c4a565b60ff168260ff16901b600884600f6114d59190611d0f565b6114df9190611c4a565b60ff1660ff901b1985161790509392505050565b5f5f5f90505b60048160ff1610156119065761150d61191f565b5f5f90505b60048160ff1610156115735761153f85846004846115309190611c4a565b61153a9190611c86565b610ac4565b828260ff166004811061155557611554611cba565b5b602002019060ff16908160ff16815250508080600101915050611512565b5061157c61191f565b5f5f90505b60048160ff1610156115e8578281600361159b9190611d0f565b60ff16600481106115af576115ae611cba565b5b6020020151828260ff16600481106115ca576115c9611cba565b5b602002019060ff16908160ff16815250508080600101915050611581565b506115f161191f565b5f5f90505f5f90505b60048160ff161015611686575f848260ff166004811061161d5761161c611cba565b5b602002015160ff161461167957838160ff16600481106116405761163f611cba565b5b602002015183838061165190611ce7565b945060ff166004811061166757611666611cba565b5b602002019060ff16908160ff16815250505b80806001019150506115fa565b505f5f90505b60038160ff161015611783575f838260ff16600481106116af576116ae611cba565b5b602002015160ff161415801561170a5750826001826116ce9190611c86565b60ff16600481106116e2576116e1611cba565b5b602002015160ff16838260ff1660048110611700576116ff611cba565b5b602002015160ff16145b1561177657828160ff166004811061172557611724611cba565b5b60200201805180919061173790611ce7565b60ff1660ff16815250505f836001836117509190611c86565b60ff166004811061176457611763611cba565b5b602002019060ff16908160ff16815250505b808060010191505061168c565b5061178c61191f565b5f91505f5f90505b60048160ff161015611820575f848260ff16600481106117b7576117b6611cba565b5b602002015160ff161461181357838160ff16600481106117da576117d9611cba565b5b60200201518284806117eb90611ce7565b955060ff166004811061180157611800611cba565b5b602002019060ff16908160ff16815250505b8080600101915050611794565b5061182961191f565b5f5f90505b60048160ff16101561189557828160036118489190611d0f565b60ff166004811061185c5761185b611cba565b5b6020020151828260ff166004811061187757611876611cba565b5b602002019060ff16908160ff1681525050808060010191505061182e565b505f5f90505b60048160ff1610156118f2576118e38a896004846118b99190611c4a565b6118c39190611c86565b848460ff16600481106118d9576118d8611cba565b5b60200201516114a3565b9950808060010191505061189b565b5050505050505080806001019150506114f9565b50819050919050565b5f60ff60f883901c169050919050565b6040518060800160405280600490602082028036833780820191505090505090565b5f819050919050565b61195381611941565b82525050565b5f60208201905061196c5f83018461194a565b92915050565b5f5ffd5b61197f81611941565b8114611989575f5ffd5b50565b5f8135905061199a81611976565b92915050565b5f602082840312156119b5576119b4611972565b5b5f6119c28482850161198c565b91505092915050565b5f8115159050919050565b6119df816119cb565b82525050565b5f6020820190506119f85f8301846119d6565b92915050565b5f60ff82169050919050565b611a13816119fe565b8114611a1d575f5ffd5b50565b5f81359050611a2e81611a0a565b92915050565b5f5f60408385031215611a4a57611a49611972565b5b5f611a578582860161198c565b9250506020611a6885828601611a20565b9150509250929050565b611a7b816119fe565b82525050565b5f602082019050611a945f830184611a72565b92915050565b5f819050919050565b611aac81611a9a565b8114611ab6575f5ffd5b50565b5f81359050611ac781611aa3565b92915050565b5f5f5f60608486031215611ae457611ae3611972565b5b5f611af18682870161198c565b9350506020611b028682870161198c565b9250506040611b1386828701611ab9565b9150509250925092565b5f5f60408385031215611b3357611b32611972565b5b5f611b408582860161198c565b9250506020611b518582860161198c565b9150509250929050565b5f60208284031215611b7057611b6f611972565b5b5f611b7d84828501611ab9565b91505092915050565b5f5f5f60608486031215611b9d57611b9c611972565b5b5f611baa8682870161198c565b9350506020611bbb86828701611a20565b9250506040611bcc86828701611a20565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c0d82611941565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c3f57611c3e611bd6565b5b600182019050919050565b5f611c54826119fe565b9150611c5f836119fe565b9250828202611c6d816119fe565b9150808214611c7f57611c7e611bd6565b5b5092915050565b5f611c90826119fe565b9150611c9b836119fe565b9250828201905060ff811115611cb457611cb3611bd6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611cf1826119fe565b915060ff8203611d0457611d03611bd6565b5b600182019050919050565b5f611d19826119fe565b9150611d24836119fe565b9250828203905060ff811115611d3d57611d3c611bd6565b5b92915050565b5f819050919050565b611d5d611d5882611941565b611d43565b82525050565b5f819050919050565b611d7d611d7882611a9a565b611d63565b82525050565b5f611d8e8287611d4c565b602082019150611d9e8286611d4c565b602082019150611dae8285611d4c565b602082019150611dbe8284611d6c565b60208201915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611e3482611941565b9150611e3f83611941565b925082611e4f57611e4e611dfd565b5b828206905092915050565b5f611e658284611d6c565b60208201915081905092915050565b5f611e7f8284611d4c565b60208201915081905092915050565b5f611e9882611941565b9150611ea383611941565b9250828201905080821115611ebb57611eba611bd6565b5b9291505056fea264697066735822122081c4f02de77760543541f4da94bd17b5c1b08600a7b2b25c36652ccc9f957fdd64736f6c634300081c0033", + "nonce": "0x3d", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xbda58aa32e7c0b48f95b2994726c126d67fd385b388263546b5abf5daa5b83cb", + "transactionType": "CREATE", + "contractName": "Monad2048", + "contractAddress": "0x8d9fd1cffe6e549803285c3ff990faec1d49ee7f", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0xff8ed", + "value": "0x0", + "input": "0x6080604052348015600e575f5ffd5b50610da28061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806339b9e19f146100645780633e98ab541461008057806379cbd2331461009c578063ac88036c146100cc578063e51b891f146100fc578063ed8052691461012c575b5f5ffd5b61007e600480360381019061007991906108c5565b61015c565b005b61009a60048036038101906100959190610936565b610531565b005b6100b660048036038101906100b19190610974565b6106fc565b6040516100c391906109ae565b60405180910390f35b6100e660048036038101906100e19190610974565b610711565b6040516100f391906109d6565b60405180910390f35b61011660048036038101906101119190610974565b610726565b6040516101239190610aa0565b60405180910390f35b61014660048036038101906101419190610974565b610807565b6040516101539190610af9565b60405180910390f35b5f3390505f73ffffffffffffffffffffffffffffffffffffffff165f5f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101f4576040517f25434c8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826040516020016102069190610b2b565b6040516020818303038152906040528051906020012090505f5f1b60025f8381526020019081526020015f20541461026a576040517f6e3ca80500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b733a98ff59f451f16dc5201ad287073202d82aba6e6319c14718845f6004811061029757610296610b45565b5b60200201356040518263ffffffff1660e01b81526004016102b89190610b81565b602060405180830381865af41580156102d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f79190610bcf565b61032d576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505b600481101561043157733a98ff59f451f16dc5201ad287073202d82aba6e6365b559b0856001846103649190610c27565b6004811061037557610374610b45565b5b602002013586846004811061038d5761038c610b45565b5b60200201356040518363ffffffff1660e01b81526004016103af929190610c5a565b602060405180830381865af41580156103ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ee9190610bcf565b610424576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8080600101915050610333565b50815f5f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360025f8381526020019081526020015f2081905550826003600481106104aa576104a9610b45565b5b602002013560015f8681526020019081526020015f2081905550838273ffffffffffffffffffffffffffffffffffffffff167f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e38560036004811061051157610510610b45565b5b602002013560405161052391906109d6565b60405180910390a350505050565b5f3390505f5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105c9576040517faed8b1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b733a98ff59f451f16dc5201ad287073202d82aba6e6365b559b060015f8681526020019081526020015f2054846040518363ffffffff1660e01b8152600401610613929190610c5a565b602060405180830381865af415801561062e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106529190610bcf565b610688576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160015f8581526020019081526020015f2081905550828173ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce8426106e085610836565b856040516106ef929190610cba565b60405180910390a3505050565b6002602052805f5260405f205f915090505481565b6001602052805f5260405f205f915090505481565b61072e610846565b5f60015f8481526020019081526020015f205490505f5f90505b60108160ff16101561080057733a98ff59f451f16dc5201ad287073202d82aba6e6335e37c7283836040518363ffffffff1660e01b815260040161078d929190610cf0565b602060405180830381865af41580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cc9190610d41565b838260ff16601081106107e2576107e1610b45565b5b602002019060ff16908160ff16815250508080600101915050610748565b5050919050565b5f602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60ff60f883901c169050919050565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b61087f8161086d565b8114610889575f5ffd5b50565b5f8135905061089a81610876565b92915050565b5f5ffd5b5f819050826020600402820111156108bf576108be6108a0565b5b92915050565b5f5f60a083850312156108db576108da610869565b5b5f6108e88582860161088c565b92505060206108f9858286016108a4565b9150509250929050565b5f819050919050565b61091581610903565b811461091f575f5ffd5b50565b5f813590506109308161090c565b92915050565b5f5f6040838503121561094c5761094b610869565b5b5f6109598582860161088c565b925050602061096a85828601610922565b9150509250929050565b5f6020828403121561098957610988610869565b5b5f6109968482850161088c565b91505092915050565b6109a88161086d565b82525050565b5f6020820190506109c15f83018461099f565b92915050565b6109d081610903565b82525050565b5f6020820190506109e95f8301846109c7565b92915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b610a2181610a0c565b82525050565b5f610a328383610a18565b60208301905092915050565b5f602082019050919050565b610a53816109ef565b610a5d81846109f9565b9250610a6882610a03565b805f5b83811015610a98578151610a7f8782610a27565b9650610a8a83610a3e565b925050600181019050610a6b565b505050505050565b5f61020082019050610ab45f830184610a4a565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ae382610aba565b9050919050565b610af381610ad9565b82525050565b5f602082019050610b0c5f830184610aea565b92915050565b82818337505050565b610b2760808383610b12565b5050565b5f610b368284610b1b565b60808201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b610b7b81610903565b82525050565b5f602082019050610b945f830184610b72565b92915050565b5f8115159050919050565b610bae81610b9a565b8114610bb8575f5ffd5b50565b5f81519050610bc981610ba5565b92915050565b5f60208284031215610be457610be3610869565b5b5f610bf184828501610bbb565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c3182610903565b9150610c3c83610903565b9250828203905081811115610c5457610c53610bfa565b5b92915050565b5f604082019050610c6d5f830185610b72565b610c7a6020830184610b72565b9392505050565b5f819050919050565b5f610ca4610c9f610c9a84610a0c565b610c81565b610903565b9050919050565b610cb481610c8a565b82525050565b5f604082019050610ccd5f830185610cab565b610cda60208301846109c7565b9392505050565b610cea81610a0c565b82525050565b5f604082019050610d035f830185610b72565b610d106020830184610ce1565b9392505050565b610d2081610a0c565b8114610d2a575f5ffd5b50565b5f81519050610d3b81610d17565b92915050565b5f60208284031215610d5657610d55610869565b5b5f610d6384828501610d2d565b9150509291505056fea2646970667358221220ff08ee24743ce9fae6f450cf1e77bcc4b1ef9440b44868c00f27e1696ee4cc8464736f6c634300081c0033", + "nonce": "0x3e", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xabef24", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x05b57c8bb053fc9268ab43934143ee7a6050b9bd0a1e91513bdfaeffc68a2574", + "transactionIndex": "0x45", + "blockHash": "0x8c9f210e1de95b1656512f2751c43bcb36e53f8da77e7e725e63aa3138896fbf", + "blockNumber": "0xd137a7", + "gasUsed": "0x253d0a", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xbbe811", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xbda58aa32e7c0b48f95b2994726c126d67fd385b388263546b5abf5daa5b83cb", + "transactionIndex": "0x46", + "blockHash": "0x8c9f210e1de95b1656512f2751c43bcb36e53f8da77e7e725e63aa3138896fbf", + "blockNumber": "0xd137a7", + "gasUsed": "0xff8ed", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0x8d9fd1cffe6e549803285c3ff990faec1d49ee7f" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0x3A98ff59F451f16DC5201Ad287073202d82abA6e" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0x8d9fD1cFFe6e549803285C3Ff990faec1D49eE7f" + } + }, + "timestamp": 1745469906, + "chain": 10143, + "commit": "58bbd3d" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-1745556899.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1745556899.json new file mode 100644 index 0000000..7162d65 --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1745556899.json @@ -0,0 +1,87 @@ +{ + "transactions": [ + { + "hash": "0x16bd9f5d4a735cd2928e2ad6fc6aa0f32a0ed359b6efc6ae860540ea9ebf4db3", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0x71a332c446d06a33a12e7f5c42b5bdd2c74aea64", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x22c4b9", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000611cd761004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100f3575f3560e01c806335e37c72116100955780637e8dbaf61161006f5780637e8dbaf61461028f578063f173e012146102bf578063f3750466146102ef578063f54a36eb1461031f576100f3565b806335e37c72146102115780633b9f7a1f1461024157806364cd159514610271576100f3565b80631af4f970116100d15780631af4f9701461017557806324f4ec51146101935780632c5f3c45146101b1578063312ffe40146101e1576100f3565b806301df1995146100f757806303ee233d1461011557806319c1471814610145575b5f5ffd5b6100ff61034f565b60405161010c91906117c4565b60405180910390f35b61012f600480360381019061012a919061180b565b610354565b60405161013c9190611875565b60405180910390f35b61015f600480360381019061015a919061188e565b610404565b60405161016c9190611875565b60405180910390f35b61017d61050b565b60405161018a91906117c4565b60405180910390f35b61019b610510565b6040516101a891906117c4565b60405180910390f35b6101cb60048036038101906101c6919061188e565b610514565b6040516101d891906117c4565b60405180910390f35b6101fb60048036038101906101f6919061188e565b610844565b60405161020891906117c4565b60405180910390f35b61022b600480360381019061022691906118ef565b610b74565b604051610238919061193c565b60405180910390f35b61025b6004803603810190610256919061188e565b610b9f565b60405161026891906117c4565b60405180910390f35b610279610fbb565b60405161028691906117c4565b60405180910390f35b6102a960048036038101906102a49190611988565b610fc0565b6040516102b691906117c4565b60405180910390f35b6102d960048036038101906102d491906119b3565b6110ca565b6040516102e691906117c4565b60405180910390f35b6103096004803603810190610304919061180b565b61111a565b60405161031691906117c4565b60405180910390f35b6103396004803603810190610334919061188e565b61135e565b60405161034691906117c4565b60405180910390f35b600181565b5f5f6088600886901b901c14610396576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600885901b901c146103d7576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6103ee856103e58661177a565b60ff168561111a565b905060088085901b901c81149150509392505050565b5f5f608083901c14610442576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff1610156104c6575f61045f8583610b74565b905060038160ff161061049e576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff1611156104b85782806104b490611a30565b9350505b508080600101915050610448565b5060028114610501576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90505b60048160ff16101561083b5761052e61178a565b5f5f90505b60048160ff1610156105945761056085826004866105519190611a77565b61055b9190611ab3565b610b74565b828260ff166004811061057657610575611ae7565b5b602002019060ff16908160ff16815250508080600101915050610533565b5061059d61178a565b5f5f90505f5f90505b60048160ff161015610632575f848260ff16600481106105c9576105c8611ae7565b5b602002015160ff161461062557838160ff16600481106105ec576105eb611ae7565b5b60200201518383806105fd90611b14565b945060ff166004811061061357610612611ae7565b5b602002019060ff16908160ff16815250505b80806001019150506105a6565b505f5f90505b60038160ff16101561072f575f838260ff166004811061065b5761065a611ae7565b5b602002015160ff16141580156106b657508260018261067a9190611ab3565b60ff166004811061068e5761068d611ae7565b5b602002015160ff16838260ff16600481106106ac576106ab611ae7565b5b602002015160ff16145b1561072257828160ff16600481106106d1576106d0611ae7565b5b6020020180518091906106e390611b14565b60ff1660ff16815250505f836001836106fc9190611ab3565b60ff16600481106107105761070f611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610638565b5061073861178a565b5f91505f5f90505b60048160ff1610156107cc575f848260ff166004811061076357610762611ae7565b5b602002015160ff16146107bf57838160ff166004811061078657610785611ae7565b5b602002015182848061079790611b14565b955060ff16600481106107ad576107ac611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610740565b505f5f90505b60048160ff1610156108295761081a88826004896107f09190611a77565b6107fa9190611ab3565b848460ff16600481106108105761080f611ae7565b5b60200201516110ca565b975080806001019150506107d2565b5050505050808060010191505061051a565b50819050919050565b5f5f5f90505b60048160ff161015610b6b5761085e61178a565b5f5f90505b60048160ff1610156108c45761089085846004846108819190611a77565b61088b9190611ab3565b610b74565b828260ff16600481106108a6576108a5611ae7565b5b602002019060ff16908160ff16815250508080600101915050610863565b506108cd61178a565b5f5f90505f5f90505b60048160ff161015610962575f848260ff16600481106108f9576108f8611ae7565b5b602002015160ff161461095557838160ff166004811061091c5761091b611ae7565b5b602002015183838061092d90611b14565b945060ff166004811061094357610942611ae7565b5b602002019060ff16908160ff16815250505b80806001019150506108d6565b505f5f90505b60038160ff161015610a5f575f838260ff166004811061098b5761098a611ae7565b5b602002015160ff16141580156109e65750826001826109aa9190611ab3565b60ff16600481106109be576109bd611ae7565b5b602002015160ff16838260ff16600481106109dc576109db611ae7565b5b602002015160ff16145b15610a5257828160ff1660048110610a0157610a00611ae7565b5b602002018051809190610a1390611b14565b60ff1660ff16815250505f83600183610a2c9190611ab3565b60ff1660048110610a4057610a3f611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610968565b50610a6861178a565b5f91505f5f90505b60048160ff161015610afc575f848260ff1660048110610a9357610a92611ae7565b5b602002015160ff1614610aef57838160ff1660048110610ab657610ab5611ae7565b5b6020020151828480610ac790611b14565b955060ff1660048110610add57610adc611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610a70565b505f5f90505b60048160ff161015610b5957610b4a8887600484610b209190611a77565b610b2a9190611ab3565b848460ff1660048110610b4057610b3f611ae7565b5b60200201516110ca565b97508080600101915050610b02565b5050505050808060010191505061084a565b50819050919050565b5f60ff600883600f610b869190611b3c565b610b909190611a77565b60ff1684901c16905092915050565b5f5f5f90505b60048160ff161015610fb257610bb961178a565b5f5f90505b60048160ff161015610c1f57610beb8582600486610bdc9190611a77565b610be69190611ab3565b610b74565b828260ff1660048110610c0157610c00611ae7565b5b602002019060ff16908160ff16815250508080600101915050610bbe565b50610c2861178a565b5f5f90505b60048160ff161015610c945782816003610c479190611b3c565b60ff1660048110610c5b57610c5a611ae7565b5b6020020151828260ff1660048110610c7657610c75611ae7565b5b602002019060ff16908160ff16815250508080600101915050610c2d565b50610c9d61178a565b5f5f90505f5f90505b60048160ff161015610d32575f848260ff1660048110610cc957610cc8611ae7565b5b602002015160ff1614610d2557838160ff1660048110610cec57610ceb611ae7565b5b6020020151838380610cfd90611b14565b945060ff1660048110610d1357610d12611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610ca6565b505f5f90505b60038160ff161015610e2f575f838260ff1660048110610d5b57610d5a611ae7565b5b602002015160ff1614158015610db6575082600182610d7a9190611ab3565b60ff1660048110610d8e57610d8d611ae7565b5b602002015160ff16838260ff1660048110610dac57610dab611ae7565b5b602002015160ff16145b15610e2257828160ff1660048110610dd157610dd0611ae7565b5b602002018051809190610de390611b14565b60ff1660ff16815250505f83600183610dfc9190611ab3565b60ff1660048110610e1057610e0f611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610d38565b50610e3861178a565b5f91505f5f90505b60048160ff161015610ecc575f848260ff1660048110610e6357610e62611ae7565b5b602002015160ff1614610ebf57838160ff1660048110610e8657610e85611ae7565b5b6020020151828480610e9790611b14565b955060ff1660048110610ead57610eac611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610e40565b50610ed561178a565b5f5f90505b60048160ff161015610f415782816003610ef49190611b3c565b60ff1660048110610f0857610f07611ae7565b5b6020020151828260ff1660048110610f2357610f22611ae7565b5b602002019060ff16908160ff16815250508080600101915050610eda565b505f5f90505b60048160ff161015610f9e57610f8f8a8260048b610f659190611a77565b610f6f9190611ab3565b848460ff1660048110610f8557610f84611ae7565b5b60200201516110ca565b99508080600101915050610f47565b505050505050508080600101915050610ba5565b50819050919050565b600281565b5f5f82604051602001610fd39190611b90565b604051602081830303815290604052805190602001205f1c90505f601082610ffb9190611bd7565b90508160405160200161100e9190611c27565b604051602081830303815290604052805190602001205f1c91505f6010836110369190611bd7565b90505b81810361106057601060018261104f9190611c41565b6110599190611bd7565b9050611039565b5f5f90505b60108160ff1610156110c157828160ff1614806110845750818160ff16145b156110b4576110b18582605a60648861109d9190611bd7565b116110a95760016110ac565b60025b6110ca565b94505b8080600101915050611065565b50505050919050565b5f600883600f6110da9190611b3c565b6110e49190611a77565b60ff168260ff16901b600884600f6110fc9190611b3c565b6111069190611a77565b60ff1660ff901b1985161790509392505050565b5f60048310611155576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f830361116c5761116584610844565b90506111b3565b600183036111845761117d8461135e565b90506111b2565b6003830361119c5761119584610b9f565b90506111b1565b600283036111b0576111ad84610514565b90505b5b5b5b608081901b608085901b036111f4576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f5f90505b60108160ff161015611238575f6112148483610b74565b60ff160361122b57818061122790611a30565b9250505b80806001019150506111fd565b505f81111561134c575f8167ffffffffffffffff81111561125c5761125b611c74565b5b60405190808252806020026020018201604052801561128a5781602001602082028036833780820191505090505b5090505f5f90505f5f90505b60108160ff1610156112f9575f6112ad8683610b74565b60ff16036112ec57808383815181106112c9576112c8611ae7565b5b602002602001019060ff16908160ff168152505081806112e890611a30565b9250505b8080600101915050611296565b506113478483858861130b9190611bd7565b8151811061131c5761131b611ae7565b5b6020026020010151605a6064896113339190611bd7565b1161133f576001611342565b60025b6110ca565b935050505b60808083901b901c9150509392505050565b5f5f5f90505b60048160ff1610156117715761137861178a565b5f5f90505b60048160ff1610156113de576113aa858460048461139b9190611a77565b6113a59190611ab3565b610b74565b828260ff16600481106113c0576113bf611ae7565b5b602002019060ff16908160ff1681525050808060010191505061137d565b506113e761178a565b5f5f90505b60048160ff16101561145357828160036114069190611b3c565b60ff166004811061141a57611419611ae7565b5b6020020151828260ff166004811061143557611434611ae7565b5b602002019060ff16908160ff168152505080806001019150506113ec565b5061145c61178a565b5f5f90505f5f90505b60048160ff1610156114f1575f848260ff166004811061148857611487611ae7565b5b602002015160ff16146114e457838160ff16600481106114ab576114aa611ae7565b5b60200201518383806114bc90611b14565b945060ff16600481106114d2576114d1611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050611465565b505f5f90505b60038160ff1610156115ee575f838260ff166004811061151a57611519611ae7565b5b602002015160ff16141580156115755750826001826115399190611ab3565b60ff166004811061154d5761154c611ae7565b5b602002015160ff16838260ff166004811061156b5761156a611ae7565b5b602002015160ff16145b156115e157828160ff16600481106115905761158f611ae7565b5b6020020180518091906115a290611b14565b60ff1660ff16815250505f836001836115bb9190611ab3565b60ff16600481106115cf576115ce611ae7565b5b602002019060ff16908160ff16815250505b80806001019150506114f7565b506115f761178a565b5f91505f5f90505b60048160ff16101561168b575f848260ff166004811061162257611621611ae7565b5b602002015160ff161461167e57838160ff166004811061164557611644611ae7565b5b602002015182848061165690611b14565b955060ff166004811061166c5761166b611ae7565b5b602002019060ff16908160ff16815250505b80806001019150506115ff565b5061169461178a565b5f5f90505b60048160ff16101561170057828160036116b39190611b3c565b60ff16600481106116c7576116c6611ae7565b5b6020020151828260ff16600481106116e2576116e1611ae7565b5b602002019060ff16908160ff16815250508080600101915050611699565b505f5f90505b60048160ff16101561175d5761174e8a896004846117249190611a77565b61172e9190611ab3565b848460ff166004811061174457611743611ae7565b5b60200201516110ca565b99508080600101915050611706565b505050505050508080600101915050611364565b50819050919050565b5f60ff60f883901c169050919050565b6040518060800160405280600490602082028036833780820191505090505090565b5f819050919050565b6117be816117ac565b82525050565b5f6020820190506117d75f8301846117b5565b92915050565b5f5ffd5b6117ea816117ac565b81146117f4575f5ffd5b50565b5f81359050611805816117e1565b92915050565b5f5f5f60608486031215611822576118216117dd565b5b5f61182f868287016117f7565b9350506020611840868287016117f7565b9250506040611851868287016117f7565b9150509250925092565b5f8115159050919050565b61186f8161185b565b82525050565b5f6020820190506118885f830184611866565b92915050565b5f602082840312156118a3576118a26117dd565b5b5f6118b0848285016117f7565b91505092915050565b5f60ff82169050919050565b6118ce816118b9565b81146118d8575f5ffd5b50565b5f813590506118e9816118c5565b92915050565b5f5f60408385031215611905576119046117dd565b5b5f611912858286016117f7565b9250506020611923858286016118db565b9150509250929050565b611936816118b9565b82525050565b5f60208201905061194f5f83018461192d565b92915050565b5f819050919050565b61196781611955565b8114611971575f5ffd5b50565b5f813590506119828161195e565b92915050565b5f6020828403121561199d5761199c6117dd565b5b5f6119aa84828501611974565b91505092915050565b5f5f5f606084860312156119ca576119c96117dd565b5b5f6119d7868287016117f7565b93505060206119e8868287016118db565b92505060406119f9868287016118db565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a3a826117ac565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a6c57611a6b611a03565b5b600182019050919050565b5f611a81826118b9565b9150611a8c836118b9565b9250828202611a9a816118b9565b9150808214611aac57611aab611a03565b5b5092915050565b5f611abd826118b9565b9150611ac8836118b9565b9250828201905060ff811115611ae157611ae0611a03565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611b1e826118b9565b915060ff8203611b3157611b30611a03565b5b600182019050919050565b5f611b46826118b9565b9150611b51836118b9565b9250828203905060ff811115611b6a57611b69611a03565b5b92915050565b5f819050919050565b611b8a611b8582611955565b611b70565b82525050565b5f611b9b8284611b79565b60208201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611be1826117ac565b9150611bec836117ac565b925082611bfc57611bfb611baa565b5b828206905092915050565b5f819050919050565b611c21611c1c826117ac565b611c07565b82525050565b5f611c328284611c10565b60208201915081905092915050565b5f611c4b826117ac565b9150611c56836117ac565b9250828201905080821115611c6e57611c6d611a03565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffdfea2646970667358221220b39a864d6d2d2a7a8e5f00ccf0b77940d19dc2b9fe937acf5c466c45f6d11f0864736f6c634300081c0033", + "nonce": "0x51", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb6f0df98cf0eafde5111bdcf2d62326697dea923943e30b8a462cdf71478725e", + "transactionType": "CREATE", + "contractName": "Monad2048", + "contractAddress": "0xd58a47b87a49d260a437693d330dfb59d379b74a", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0x121444", + "value": "0x0", + "input": "0x6080604052348015600e575f5ffd5b50610f8d8061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061007b575f3560e01c80639a987475116100595780639a987475146100e7578063ac88036c14610117578063e51b891f14610147578063ed805269146101785761007b565b806339b9e19f1461007f5780633e98ab541461009b57806379cbd233146100b7575b5f5ffd5b610099600480360381019061009491906109e1565b6101a8565b005b6100b560048036038101906100b09190610a52565b6105c0565b005b6100d160048036038101906100cc9190610a90565b6107ee565b6040516100de9190610aca565b60405180910390f35b61010160048036038101906100fc9190610a90565b610803565b60405161010e9190610af2565b60405180910390f35b610131600480360381019061012c9190610a90565b610818565b60405161013e9190610af2565b60405180910390f35b610161600480360381019061015c9190610a90565b61082d565b60405161016f929190610bbc565b60405180910390f35b610192600480360381019061018d9190610a90565b610923565b60405161019f9190610c24565b60405180910390f35b5f3390505f73ffffffffffffffffffffffffffffffffffffffff165f5f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610240576040517f25434c8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826040516020016102529190610c56565b6040516020818303038152906040528051906020012090505f5f1b60035f8381526020019081526020015f2054146102b6576040517f6e3ca80500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7371a332c446d06a33a12e7f5c42b5bdd2c74aea646319c14718845f600481106102e3576102e2610c70565b5b60200201356040518263ffffffff1660e01b81526004016103049190610cac565b602060405180830381865af415801561031f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103439190610cfa565b610379576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505b60048110156104a9577371a332c446d06a33a12e7f5c42b5bdd2c74aea646303ee233d856001846103b09190610d52565b600481106103c1576103c0610c70565b5b60200201358684600481106103d9576103d8610c70565b5b602002013588856040516020016103f1929190610dc5565b604051602081830303815290604052805190602001205f1c6040518463ffffffff1660e01b815260040161042793929190610df0565b602060405180830381865af4158015610442573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104669190610cfa565b61049c576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808060010191505061037f565b50815f5f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460025f8681526020019081526020015f20819055508360035f8381526020019081526020015f20819055508260036004811061053957610538610c70565b5b602002013560015f8681526020019081526020015f2081905550838273ffffffffffffffffffffffffffffffffffffffff167f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e3856003600481106105a05761059f610c70565b5b60200201356040516105b29190610af2565b60405180910390a350505050565b5f3390505f5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610658576040517faed8b1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7371a332c446d06a33a12e7f5c42b5bdd2c74aea646303ee233d60015f8681526020019081526020015f2054848660025f8981526020019081526020015f20546040516020016106a9929190610dc5565b604051602081830303815290604052805190602001205f1c6040518463ffffffff1660e01b81526004016106df93929190610df0565b602060405180830381865af41580156106fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061071e9190610cfa565b610754576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160015f8581526020019081526020015f208190555060025f8481526020019081526020015f205f81548092919061078b90610e25565b9190505550828173ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce8426107d285610952565b856040516107e1929190610ea5565b60405180910390a3505050565b6003602052805f5260405f205f915090505481565b6002602052805f5260405f205f915090505481565b6001602052805f5260405f205f915090505481565b610835610962565b5f5f60015f8581526020019081526020015f205490505f5f90505b60108160ff161015610908577371a332c446d06a33a12e7f5c42b5bdd2c74aea646335e37c7283836040518363ffffffff1660e01b8152600401610895929190610edb565b602060405180830381865af41580156108b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d49190610f2c565b848260ff16601081106108ea576108e9610c70565b5b602002019060ff16908160ff16815250508080600101915050610850565b5060025f8581526020019081526020015f2054915050915091565b5f602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60ff60f883901c169050919050565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b61099b81610989565b81146109a5575f5ffd5b50565b5f813590506109b681610992565b92915050565b5f5ffd5b5f819050826020600402820111156109db576109da6109bc565b5b92915050565b5f5f60a083850312156109f7576109f6610985565b5b5f610a04858286016109a8565b9250506020610a15858286016109c0565b9150509250929050565b5f819050919050565b610a3181610a1f565b8114610a3b575f5ffd5b50565b5f81359050610a4c81610a28565b92915050565b5f5f60408385031215610a6857610a67610985565b5b5f610a75858286016109a8565b9250506020610a8685828601610a3e565b9150509250929050565b5f60208284031215610aa557610aa4610985565b5b5f610ab2848285016109a8565b91505092915050565b610ac481610989565b82525050565b5f602082019050610add5f830184610abb565b92915050565b610aec81610a1f565b82525050565b5f602082019050610b055f830184610ae3565b92915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b610b3d81610b28565b82525050565b5f610b4e8383610b34565b60208301905092915050565b5f602082019050919050565b610b6f81610b0b565b610b798184610b15565b9250610b8482610b1f565b805f5b83811015610bb4578151610b9b8782610b43565b9650610ba683610b5a565b925050600181019050610b87565b505050505050565b5f61022082019050610bd05f830185610b66565b610bde610200830184610ae3565b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c0e82610be5565b9050919050565b610c1e81610c04565b82525050565b5f602082019050610c375f830184610c15565b92915050565b82818337505050565b610c5260808383610c3d565b5050565b5f610c618284610c46565b60808201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b610ca681610a1f565b82525050565b5f602082019050610cbf5f830184610c9d565b92915050565b5f8115159050919050565b610cd981610cc5565b8114610ce3575f5ffd5b50565b5f81519050610cf481610cd0565b92915050565b5f60208284031215610d0f57610d0e610985565b5b5f610d1c84828501610ce6565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d5c82610a1f565b9150610d6783610a1f565b9250828203905081811115610d7f57610d7e610d25565b5b92915050565b5f819050919050565b610d9f610d9a82610989565b610d85565b82525050565b5f819050919050565b610dbf610dba82610a1f565b610da5565b82525050565b5f610dd08285610d8e565b602082019150610de08284610dae565b6020820191508190509392505050565b5f606082019050610e035f830186610c9d565b610e106020830185610c9d565b610e1d6040830184610c9d565b949350505050565b5f610e2f82610a1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e6157610e60610d25565b5b600182019050919050565b5f819050919050565b5f610e8f610e8a610e8584610b28565b610e6c565b610a1f565b9050919050565b610e9f81610e75565b82525050565b5f604082019050610eb85f830185610e96565b610ec56020830184610ae3565b9392505050565b610ed581610b28565b82525050565b5f604082019050610eee5f830185610c9d565b610efb6020830184610ecc565b9392505050565b610f0b81610b28565b8114610f15575f5ffd5b50565b5f81519050610f2681610f02565b92915050565b5f60208284031215610f4157610f40610985565b5b5f610f4e84828501610f18565b9150509291505056fea26469706673582212206910acfb4b24932d85f52ba1d30ae8ff1ad231bd7ab3fe1d7d714d5754147c2764736f6c634300081c0033", + "nonce": "0x52", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xd4a4a9", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x16bd9f5d4a735cd2928e2ad6fc6aa0f32a0ed359b6efc6ae860540ea9ebf4db3", + "transactionIndex": "0x55", + "blockHash": "0x01092e4362a1c77f17357b54288d7dd573f7b659e4640fd9d9d058abf3aae4d3", + "blockNumber": "0xd39cb7", + "gasUsed": "0x22c4b9", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xe6b8ed", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb6f0df98cf0eafde5111bdcf2d62326697dea923943e30b8a462cdf71478725e", + "transactionIndex": "0x56", + "blockHash": "0x01092e4362a1c77f17357b54288d7dd573f7b659e4640fd9d9d058abf3aae4d3", + "blockNumber": "0xd39cb7", + "gasUsed": "0x121444", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0xd58a47b87a49d260a437693d330dfb59d379b74a" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0x71A332C446d06A33A12e7f5C42B5BdD2c74AEa64" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0xd58A47b87A49D260A437693D330dFb59d379B74a" + } + }, + "timestamp": 1745556899, + "chain": 10143, + "commit": "8d121b9" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-1746797402.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1746797402.json new file mode 100644 index 0000000..1b91435 --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1746797402.json @@ -0,0 +1,87 @@ +{ + "transactions": [ + { + "hash": "0x8554f0cf080cbd8c7785e0ad0794bd4762d19fc709856ee89dd743a539f70a49", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0x8fa02ad884b2a60f47ccf5850e242e72f5131450", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x149572", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610fbc61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b2575f3560e01c80632e1a2b221161007a5780632e1a2b221461017057806335e37c72146101a057806364cd1595146101d05780637e8dbaf6146101ee578063f173e0121461021e578063f37504661461024e576100b2565b806301df1995146100b657806303ee233d146100d457806319c14718146101045780631af4f9701461013457806324f4ec5114610152575b5f5ffd5b6100be61027e565b6040516100cb9190610aa4565b60405180910390f35b6100ee60048036038101906100e99190610aeb565b610283565b6040516100fb9190610b55565b60405180910390f35b61011e60048036038101906101199190610b6e565b610333565b60405161012b9190610b55565b60405180910390f35b61013c61043a565b6040516101499190610aa4565b60405180910390f35b61015a61043f565b6040516101679190610aa4565b60405180910390f35b61018a60048036038101906101859190610bc3565b610443565b6040516101979190610aa4565b60405180910390f35b6101ba60048036038101906101b59190610c49565b610512565b6040516101c79190610c96565b60405180910390f35b6101d861053d565b6040516101e59190610aa4565b60405180910390f35b61020860048036038101906102039190610ce2565b610542565b6040516102159190610aa4565b60405180910390f35b61023860048036038101906102339190610d0d565b61063a565b6040516102459190610aa4565b60405180910390f35b61026860048036038101906102639190610aeb565b61068a565b6040516102759190610aa4565b60405180910390f35b600181565b5f5f6088600886901b901c146102c5576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600885901b901c14610306576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61031d85610314866107f2565b60ff168561068a565b905060088085901b901c81149150509392505050565b5f5f608083901c14610371576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff1610156103f5575f61038e8583610512565b905060038160ff16106103cd576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff1611156103e75782806103e390610d8a565b9350505b508080600101915050610377565b5060028114610430576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90506fffffffffffffffffffffffffffffffff8016851694505f8461046f5763ffffffff61047e565b6cff000000ff000000ff000000ff5b6cffffffffffffffffffffffffff1690505f5f90505b6004811015610508575f6104ab8884168888610802565b90505f6104b98289896108f8565b90508481901b86179550876104cf5760206104d2565b60085b60ff16856104e09190610dd1565b9450876104ee5760206104f1565b60085b60ff1689901c985050508080600101915050610494565b5050509392505050565b5f60ff600883600f6105249190610e04565b61052e9190610e38565b60ff1684901c16905092915050565b600281565b5f5f826040516020016105559190610e94565b604051602081830303815290604052805190602001205f1c90505f60108261057d9190610edb565b9050816040516020016105909190610f2b565b604051602081830303815290604052805190602001205f1c91505f600f836105b89190610edb565b90508181106105d05780806105cc90610d8a565b9150505b5f5f90505b60108160ff16101561063157828160ff1614806105f45750818160ff16145b15610624576106218582605a60648861060d9190610edb565b1161061957600161061c565b60025b61063a565b94505b80806001019150506105d5565b50505050919050565b5f600883600f61064a9190610e04565b6106549190610e38565b60ff168260ff16901b600884600f61066c9190610e04565b6106769190610e38565b60ff1660ff901b1985161790509392505050565b5f600483106106c5576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106e28460018511155f6002876106dc9190610edb565b14610443565b9050608081901b608085901b03610725576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6fff00000000000000000000000000000090505f5f5f5b5f8414610788575f8486160361076e57818061075890610d8a565b925060086107669190610f45565b81901b831792505b600884901c9350808061078090610d8a565b91505061073d565b5f8211156107dd575f60ff838861079f9190610edb565b60086107ab9190610f45565b85901c1690506107d98682605a60648b6107c59190610edb565b116107d15760016107d4565b60025b61063a565b9550505b60808086901b901c9450505050509392505050565b5f60ff60f883901c169050919050565b5f5f83610810576008610813565b60205b60ff1690505f836108255760ff610844565b846108345763ff000000610843565b6cff0000000000000000000000005b5b6cffffffffffffffffffffffffff1690505f856108655763ffffffff610874565b6cff000000ff000000ff000000ff5b6cffffffffffffffffffffffffff1690505b5f821415801561089657505f8714155b156108ee575b5f8188161180156108ae57505f828816145b156108cd57846108c1578287901c6108c6565b8287901b5b965061089c565b81871684179350846108e2578282901b6108e7565b8282901c5b9150610886565b5050509392505050565b5f5f83610906576008610909565b60205b60ff1690505f8361091b5760ff61093a565b8461092a5763ff000000610939565b6cff0000000000000000000000005b5b6cffffffffffffffffffffffffff1690505f8561095b5763ffffffff61096a565b6cff000000ff000000ff000000ff5b6cffffffffffffffffffffffffff1690505f8561098a578383901b61098f565b8383901c5b90505f8661099e5760016109bd565b876109ad5763010000006109bc565b6c010000000000000000000000005b5b6cffffffffffffffffffffffffff1690505b5f89841614610a80575f876109e95785838b16901c6109f0565b85838b16901b5b905080858b1603610a1f5787610a0957858a901c610a0e565b858a901b5b9950818a610a1c9190610dd1565b99505b848a168717965087610a34578585901b610a39565b8585901c5b945087610a49578583901b610a4e565b8583901c5b925087610a5e578582901b610a63565b8582901c5b915087610a73578584901b610a78565b8584901c5b9350506109cf565b50505050509392505050565b5f819050919050565b610a9e81610a8c565b82525050565b5f602082019050610ab75f830184610a95565b92915050565b5f5ffd5b610aca81610a8c565b8114610ad4575f5ffd5b50565b5f81359050610ae581610ac1565b92915050565b5f5f5f60608486031215610b0257610b01610abd565b5b5f610b0f86828701610ad7565b9350506020610b2086828701610ad7565b9250506040610b3186828701610ad7565b9150509250925092565b5f8115159050919050565b610b4f81610b3b565b82525050565b5f602082019050610b685f830184610b46565b92915050565b5f60208284031215610b8357610b82610abd565b5b5f610b9084828501610ad7565b91505092915050565b610ba281610b3b565b8114610bac575f5ffd5b50565b5f81359050610bbd81610b99565b92915050565b5f5f5f60608486031215610bda57610bd9610abd565b5b5f610be786828701610ad7565b9350506020610bf886828701610baf565b9250506040610c0986828701610baf565b9150509250925092565b5f60ff82169050919050565b610c2881610c13565b8114610c32575f5ffd5b50565b5f81359050610c4381610c1f565b92915050565b5f5f60408385031215610c5f57610c5e610abd565b5b5f610c6c85828601610ad7565b9250506020610c7d85828601610c35565b9150509250929050565b610c9081610c13565b82525050565b5f602082019050610ca95f830184610c87565b92915050565b5f819050919050565b610cc181610caf565b8114610ccb575f5ffd5b50565b5f81359050610cdc81610cb8565b92915050565b5f60208284031215610cf757610cf6610abd565b5b5f610d0484828501610cce565b91505092915050565b5f5f5f60608486031215610d2457610d23610abd565b5b5f610d3186828701610ad7565b9350506020610d4286828701610c35565b9250506040610d5386828701610c35565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d9482610a8c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610dc657610dc5610d5d565b5b600182019050919050565b5f610ddb82610a8c565b9150610de683610a8c565b9250828201905080821115610dfe57610dfd610d5d565b5b92915050565b5f610e0e82610c13565b9150610e1983610c13565b9250828203905060ff811115610e3257610e31610d5d565b5b92915050565b5f610e4282610c13565b9150610e4d83610c13565b9250828202610e5b81610c13565b9150808214610e6d57610e6c610d5d565b5b5092915050565b5f819050919050565b610e8e610e8982610caf565b610e74565b82525050565b5f610e9f8284610e7d565b60208201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ee582610a8c565b9150610ef083610a8c565b925082610f0057610eff610eae565b5b828206905092915050565b5f819050919050565b610f25610f2082610a8c565b610f0b565b82525050565b5f610f368284610f14565b60208201915081905092915050565b5f610f4f82610a8c565b9150610f5a83610a8c565b9250828202610f6881610a8c565b91508282048414831517610f7f57610f7e610d5d565b5b509291505056fea26469706673582212207a69099fdb98d08816a23c71ad6b6619a446a1f429dcce2bd59508ec3ecbc24564736f6c634300081c0033", + "nonce": "0x72", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7993fa7ab600911367fd2042fdf8c7dfd162c1b02de6256c1271343c244513e2", + "transactionType": "CREATE", + "contractName": "Monad2048", + "contractAddress": "0x01bccdccdecafe3f357e8df9ae5b9af002939d1c", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0x10cfd1", + "value": "0x0", + "input": "0x6080604052348015600e575f5ffd5b50610e678061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806339b9e19f146100645780633e98ab541461008057806379cbd2331461009c5780639a987475146100cc578063ac88036c146100fc578063e51b891f1461012c575b5f5ffd5b61007e60048036038101906100799190610913565b61015d565b005b61009a60048036038101906100959190610984565b61054a565b005b6100b660048036038101906100b191906109c2565b610751565b6040516100c391906109fc565b60405180910390f35b6100e660048036038101906100e191906109c2565b610766565b6040516100f39190610a24565b60405180910390f35b610116600480360381019061011191906109c2565b61077b565b6040516101239190610a24565b60405180910390f35b610146600480360381019061014191906109c2565b61078f565b604051610154929190610aee565b60405180910390f35b33826060815f1c901c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146101ca576040517faed8b1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f3390505f5f5f8781526020019081526020015f205414610217576040517f25434c8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f846040516020016102299190610b30565b6040516020818303038152906040528051906020012090505f5f1b60025f8381526020019081526020015f20541461028d576040517f6e3ca80500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b738fa02ad884b2a60f47ccf5850e242e72f51314506319c14718865f600481106102ba576102b9610b4a565b5b60200201356040518263ffffffff1660e01b81526004016102db9190610b86565b602060405180830381865af41580156102f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031a9190610bd4565b610350576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505b600481101561048057738fa02ad884b2a60f47ccf5850e242e72f51314506303ee233d876001846103879190610c2c565b6004811061039857610397610b4a565b5b60200201358884600481106103b0576103af610b4a565b5b60200201358a856040516020016103c8929190610c9f565b604051602081830303815290604052805190602001205f1c6040518463ffffffff1660e01b81526004016103fe93929190610cca565b602060405180830381865af4158015610419573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d9190610bd4565b610473576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8080600101915050610356565b50600460015f8881526020019081526020015f20819055508560025f8381526020019081526020015f2081905550846003600481106104c2576104c1610b4a565b5b60200201355f5f8881526020019081526020015f2081905550858273ffffffffffffffffffffffffffffffffffffffff167f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e38760036004811061052857610527610b4a565b5b602002013560405161053a9190610a24565b60405180910390a3505050505050565b33826060815f1c901c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146105b7576040517faed8b1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f339050738fa02ad884b2a60f47ccf5850e242e72f51314506303ee233d5f5f8881526020019081526020015f2054868860015f8b81526020019081526020015f205460405160200161060b929190610c9f565b604051602081830303815290604052805190602001205f1c6040518463ffffffff1660e01b815260040161064193929190610cca565b602060405180830381865af415801561065c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106809190610bd4565b6106b6576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f5f8781526020019081526020015f208190555060015f8681526020019081526020015f205f8154809291906106ec90610cff565b9190505550848173ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84261073387610884565b87604051610742929190610d7f565b60405180910390a35050505050565b6002602052805f5260405f205f915090505481565b6001602052805f5260405f205f915090505481565b5f602052805f5260405f205f915090505481565b610797610894565b5f5f5f5f8581526020019081526020015f205490505f5f90505b60108160ff16101561086957738fa02ad884b2a60f47ccf5850e242e72f51314506335e37c7283836040518363ffffffff1660e01b81526004016107f6929190610db5565b602060405180830381865af4158015610811573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108359190610e06565b848260ff166010811061084b5761084a610b4a565b5b602002019060ff16908160ff168152505080806001019150506107b1565b5060015f8581526020019081526020015f2054915050915091565b5f60ff60f883901c169050919050565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b6108cd816108bb565b81146108d7575f5ffd5b50565b5f813590506108e8816108c4565b92915050565b5f5ffd5b5f8190508260206004028201111561090d5761090c6108ee565b5b92915050565b5f5f60a08385031215610929576109286108b7565b5b5f610936858286016108da565b9250506020610947858286016108f2565b9150509250929050565b5f819050919050565b61096381610951565b811461096d575f5ffd5b50565b5f8135905061097e8161095a565b92915050565b5f5f6040838503121561099a576109996108b7565b5b5f6109a7858286016108da565b92505060206109b885828601610970565b9150509250929050565b5f602082840312156109d7576109d66108b7565b5b5f6109e4848285016108da565b91505092915050565b6109f6816108bb565b82525050565b5f602082019050610a0f5f8301846109ed565b92915050565b610a1e81610951565b82525050565b5f602082019050610a375f830184610a15565b92915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b610a6f81610a5a565b82525050565b5f610a808383610a66565b60208301905092915050565b5f602082019050919050565b610aa181610a3d565b610aab8184610a47565b9250610ab682610a51565b805f5b83811015610ae6578151610acd8782610a75565b9650610ad883610a8c565b925050600181019050610ab9565b505050505050565b5f61022082019050610b025f830185610a98565b610b10610200830184610a15565b9392505050565b82818337505050565b610b2c60808383610b17565b5050565b5f610b3b8284610b20565b60808201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b610b8081610951565b82525050565b5f602082019050610b995f830184610b77565b92915050565b5f8115159050919050565b610bb381610b9f565b8114610bbd575f5ffd5b50565b5f81519050610bce81610baa565b92915050565b5f60208284031215610be957610be86108b7565b5b5f610bf684828501610bc0565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c3682610951565b9150610c4183610951565b9250828203905081811115610c5957610c58610bff565b5b92915050565b5f819050919050565b610c79610c74826108bb565b610c5f565b82525050565b5f819050919050565b610c99610c9482610951565b610c7f565b82525050565b5f610caa8285610c68565b602082019150610cba8284610c88565b6020820191508190509392505050565b5f606082019050610cdd5f830186610b77565b610cea6020830185610b77565b610cf76040830184610b77565b949350505050565b5f610d0982610951565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d3b57610d3a610bff565b5b600182019050919050565b5f819050919050565b5f610d69610d64610d5f84610a5a565b610d46565b610951565b9050919050565b610d7981610d4f565b82525050565b5f604082019050610d925f830185610d70565b610d9f6020830184610a15565b9392505050565b610daf81610a5a565b82525050565b5f604082019050610dc85f830185610b77565b610dd56020830184610da6565b9392505050565b610de581610a5a565b8114610def575f5ffd5b50565b5f81519050610e0081610ddc565b92915050565b5f60208284031215610e1b57610e1a6108b7565b5b5f610e2884828501610df2565b9150509291505056fea26469706673582212204407ab850bb713c8f65c96ab9b993b3f15a6884bd6dbedac751a114ffce6420c64736f6c634300081c0033", + "nonce": "0x73", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb2bbf9", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x8554f0cf080cbd8c7785e0ad0794bd4762d19fc709856ee89dd743a539f70a49", + "transactionIndex": "0x2f", + "blockHash": "0x4466c9bfaacd7db50fd939b8f0f5af1df1d88aaf2851a96787cc07f64ef37197", + "blockNumber": "0xf4db1a", + "gasUsed": "0x149572", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x7eaa8b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x7993fa7ab600911367fd2042fdf8c7dfd162c1b02de6256c1271343c244513e2", + "transactionIndex": "0x24", + "blockHash": "0x2f095e1d762c94987e0e53a327ddca24f100c2fe455705dabcc98d3f0cae5851", + "blockNumber": "0xf4db1b", + "gasUsed": "0x10cfd1", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0x01bccdccdecafe3f357e8df9ae5b9af002939d1c" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0x8fa02Ad884b2a60f47ccf5850E242e72F5131450" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0x01BCCDccDEcAFe3F357e8DF9aE5b9aF002939D1c" + } + }, + "timestamp": 1746797402, + "chain": 10143, + "commit": "80040d4" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-1747028257.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1747028257.json new file mode 100644 index 0000000..ff8655e --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-1747028257.json @@ -0,0 +1,87 @@ +{ + "transactions": [ + { + "hash": "0x7ead7b3b3c7cfac064d2445ffb4aeef5936c7b4247c66cbd1edfd878361f6c79", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0xa3fd3e8866875524e08fb158a7287c642da53fa8", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x125701", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234601957610de6908161001e823930815050f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301df1995146104c7575080630be27a04146104435780631af4f9701461040f57806324f4ec51146103dc5780632b2f6a121461039657806354c30fd91461032e57806364cd1595146102fa5780637e8dbaf6146101a65780638def51a11461014f578063918a2a65146100fb57639aff28fe14610095575f80fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206100dd6100cc6104f9565b6100d4610518565b60443591610ba6565b6fffffffffffffffffffffffffffffffff60405191168152f35b5f80fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75761012d6104f9565b610135610518565b9060443560ff811681036100f7576020926100dd92610b36565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f7576101816104f9565b6024359081151582036100f75760443580151581036100f7576020926100dd92610656565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760405160208101906004358252602081526040810181811067ffffffffffffffff8211176102cd57604052519020600f81169060101c60ff600f820616908282101561028c575b906020926fffffffffffffffffffffffffffffffff605a60646100dd95061192835f1461027c5760ff6102636102568260025b61025b610256876105fe565b61060f565b5016936105fe565b161b16911561027457600291610b36565b600191610b36565b60ff61026361025682600161024a565b60ff82146102a05760019190910190610217565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f757602060405160028152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206103626104f9565b60ff80610378610256610373610518565b6105fe565b166fffffffffffffffffffffffffffffffff6040519316901c168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206103d26103cd6104f9565b610528565b6040519015158152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206040515f8152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f757602060405160038152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f7576104756104f9565b61047d610518565b90604435906fffffffffffffffffffffffffffffffff82168092036100f7576104bd6fffffffffffffffffffffffffffffffff9160209460643591610ba6565b1614604051908152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75780600160209252f35b600435906fffffffffffffffffffffffffffffffff821682036100f757565b6024359060ff821682036100f757565b6ffcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc8116158015906105dd575b6105d8575f905b6fffffffffffffffffffffffffffffffff811680156105d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906fffffffffffffffffffffffffffffffff82116102a05716907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146102a0576001019061054b565b505060021490565b505f90565b50600181901c81166f7fffffffffffffffffffffffffffffff161515610544565b60ff16600f039060ff82116102a057565b60031b906107f860f88316921682036102a057565b906fffffffffffffffffffffffffffffffff809116911601906fffffffffffffffffffffffffffffffff82116102a057565b5f93928492908115610b28576cff000000ff000000ff000000ff929391935b5f925b6004841061068857505050505050565b90919294966cffffffffffffffffffffffffff838698961616915f93895f14610b1f5760ff60205b16978615610b0a578a15610af2576cffffffffffffffffffffffffff6cff0000000000000000000000005b169a8015610ae4576cff000000ff000000ff000000ff989590955b6fffffffffffffffffffffffffffffffff8d169b8c151580610ac9575b156107bb57915b808b166cffffffffffffffffffffffffff1615158e8161079e575b5015610767576fffffffffffffffffffffffffffffffff80918b5f1461075e57168c1b1661071a565b168c1c1661071a565b96919b976fffffffffffffffffffffffffffffffff919d88161797895f14610796578b1c165b9b9590956106f6565b8b1b1661078d565b6fffffffffffffffffffffffffffffffff9150821616158e610735565b99509a505093959491995096505f90855f14610ac05760ff60205b168515610aab578615610a93576cffffffffffffffffffffffffff6cff0000000000000000000000005b16918715610a7b576cffffffffffffffffffffffffff6cff000000ff000000ff000000ff5b168715610a61576fffffffffffffffffffffffffffffffff84841c165b8815610a48578915610a30576cffffffffffffffffffffffffff6c010000000000000000000000005b908a969392915b16925b6fffffffffffffffffffffffffffffffff858416166108fa57505050505050506108ca6001926fffffffffffffffffffffffffffffffff80809416818d161b161799865f146108f15760ff60085b1690610624565b9685156108e65760ff826008925b1691161c1691019294610678565b60ff826020926108d8565b60ff60206108c3565b8697875f14610a0f5786886fffffffffffffffffffffffffffffffff8080878b1616841b165b166fffffffffffffffffffffffffffffffff858a1616146109bc575b50506fffffffffffffffffffffffffffffffff8080809581808781989782988e16179f5f146109b357168c1c165b9b156109aa5716891c165b958d156109a15716871c165b928b156109985716851c165b918995929192610875565b16851b1661098d565b16871b16610981565b16891b16610975565b168c1b1661096a565b6fffffffffffffffffffffffffffffffff809581808781989c976109f28d84809b9a81809c819c5f14610a065716901b16610624565b9d509750975050509550505050868861093c565b16901c16610624565b86886fffffffffffffffffffffffffffffffff8080878b1616841c16610920565b6cffffffffffffffffffffffffff630100000061086b565b889491906cffffffffffffffffffffffffff6001610872565b6fffffffffffffffffffffffffffffffff84841b16610842565b6cffffffffffffffffffffffffff63ffffffff610825565b6cffffffffffffffffffffffffff63ff000000610800565b6cffffffffffffffffffffffffff60ff610800565b60ff60086107d6565b506fffffffffffffffffffffffffffffffff83161515610713565b63ffffffff989590956106f6565b6cffffffffffffffffffffffffff63ff0000006106db565b6cffffffffffffffffffffffffff60ff6106db565b60ff60086106b0565b63ffffffff92939193610675565b6fffffffffffffffffffffffffffffffff809260ff610b6c61025682858180610b61610256896105fe565b161b169816936105fe565b161b16921916161790565b6fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff81146102a05760010190565b92919060ff81166004811015610d8857600180610bc893161591111585610656565b926fffffffffffffffffffffffffffffffff808516911614610d88575f80806fff0000000000000000000000000000005b6fffffffffffffffffffffffffffffffff8116610cef5750506fffffffffffffffffffffffffffffffff1680158015610c33575b50505050565b5f959293949550610cc2578306927f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841684036102a057610c9f93605a606460ff9306115f14610ca9576fffffffffffffffffffffffffffffffff6002945b169060031b1c1690610b36565b905f808080610c2d565b6fffffffffffffffffffffffffffffffff600194610c92565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6fffffffffffffffffffffffffffffffff8188161615610d2e575b6effffffffffffffffffffffffffffff610d289160081c1691610b77565b90610bf9565b92610d3883610b77565b9260031b7007fffffffffffffffffffffffffffffff86ffffffffffffffffffffffffffffffff88216911681036102a0576fffffffffffffffffffffffffffffffff83811690911b161792610d0a565b7f35405e3c000000000000000000000000000000000000000000000000000000005f5260045ffdfea264697066735822122070d2381bf6b7305009885b5d725b8c1ff99d3898b0fb599b437862fde33fd38464736f6c634300081c0033", + "nonce": "0x74", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb4da45a9779ecbe40764ea86e96a0a34df76a9388b1af1cf0a7338cb86c7290a", + "transactionType": "CREATE", + "contractName": "Monad2048", + "contractAddress": "0xe0fa8195ae92b9c473c0c0c12c2d6bcbd245de47", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0xd16d0", + "value": "0x0", + "input": "0x60808060405234601557610b06908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816325c09963146107e35750806361d585da1461077657806379cbd2331461072e5780639a987475146106d3578063ac88036c14610689578063bb9df307146101eb5763e51b891f14610069575f80fd5b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576040516102006004356100ab8284610a29565b81368437805f525f60205260405f205460801c905f9173a3fd3e8866875524e08fb158a7287c642da53fa8925b60ff8116601081101561019457604051907f54c30fd90000000000000000000000000000000000000000000000000000000082528360048301526024820152602081604481885af4908115610189575f91610149575b5060ff918260019216611fe08260051b1689015201166100d8565b90506020813d8211610181575b8161016360209383610a29565b8101031261017d575160ff8116810361017d5760ff61012e565b5f80fd5b3d9150610156565b6040513d5f823e3d90fd5b8686855f525f6020526effffffffffffffffffffffffffffff60405f205460081c1660405191825f905b601082106101d25750506102209350820152f35b60208060019260ff8951168152019601910190946101be565b3461017d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004353660a41161017d57366101041161017d578060601c330361066157805f525f60205260405f205460801c6106395760405160208101905f6024835b60048310610607575050506080815261027360a082610a29565b519020805f52600160205260405f20546105df5773a3fd3e8866875524e08fb158a7287c642da53fa86024356fffffffffffffffffffffffffffffffff81169081810361017d5750604051907f2b2f6a120000000000000000000000000000000000000000000000000000000082526004820152602081602481855af4908115610189575f916105c0575b50156105105760015b600481106104015750505f5260016020528060405f205560e43560ff81169081810361017d5750610336610a94565b60405191610343836109e0565b825260208201600481526fffffffffffffffffffffffffffffffff6040840192168252835f525f6020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff60405f20955116925160081b16925160801b1691171790556103c1610a94565b6fffffffffffffffffffffffffffffffff604051911681527f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e360203392a3005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116105935761043c61043782610a82565b610ab3565b9060038110156105665760051b60a4013560ff8116810361017d5760209061046661043785610a82565b926104ef604051848101908a825287604082015260408152610489606082610a29565b51902060405195869485947f0be27a0400000000000000000000000000000000000000000000000000000000865260048601909493926fffffffffffffffffffffffffffffffff9060ff6060948360808601991685521660208401521660408201520152565b0381865af4908115610189575f91610538575b501561051057600101610307565b7f2b977ce3000000000000000000000000000000000000000000000000000000005f5260045ffd5b610559915060203d811161055f575b6105518183610a29565b810190610a6a565b85610502565b503d610547565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6105d9915060203d60201161055f576105518183610a29565b846102fe565b7f6e3ca805000000000000000000000000000000000000000000000000000000005f5260045ffd5b8135906fffffffffffffffffffffffffffffffff821680920361017d5760208160019382935201920192019190610259565b7f25434c83000000000000000000000000000000000000000000000000000000005f5260045ffd5b7faed8b1cf000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f602052602060405f205460801c604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f60205260206effffffffffffffffffffffffffffff60405f205460081c16604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f526001602052602060405f2054604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f602052606060405f20546040519060ff811682526effffffffffffffffffffffffffffff8160081c16602083015260801c6040820152f35b3461017d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004359060243560ff81169182820361017d576044356fffffffffffffffffffffffffffffffff81169283820361017d578560601c330361066157602090865f525f825260406108b2815f20610867876109e0565b549560ff871681526effffffffffffffffffffffffffffff8760081c16908581019782895260801c9384910152604051858101918b8352604082015260408152610489606082610a29565b038173a3fd3e8866875524e08fb158a7287c642da53fa85af4908115610189575f916109c1575b5015610510576effffffffffffffffffffffffffffff6001915116016effffffffffffffffffffffffffffff81116105935760405190610918826109e0565b8382526effffffffffffffffffffffffffffff60208301911681526040820190838252855f525f6020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff60405f20955116925160081b16925160801b16911717905560405191825260208201527f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84260403392a3005b6109da915060203d60201161055f576105518183610a29565b856108d9565b6060810190811067ffffffffffffffff8211176109fc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109fc57604052565b9081602091031261017d5751801515810361017d5790565b60048110156105665760051b60240190565b6084356fffffffffffffffffffffffffffffffff8116810361017d5790565b356fffffffffffffffffffffffffffffffff8116810361017d579056fea2646970667358221220969a7f7c514aa734f294aa96245a7452aa46ed6a1a3ce4c0584d3af116f7bc9264736f6c634300081c0033", + "nonce": "0x75", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x738dea", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x7ead7b3b3c7cfac064d2445ffb4aeef5936c7b4247c66cbd1edfd878361f6c79", + "transactionIndex": "0x1d", + "blockHash": "0x6bd47e8728e72317d73af02f6e77e3da404f771620b34fe265f7b80cb0ec474e", + "blockNumber": "0xfb8abb", + "gasUsed": "0x125701", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x8fe6fa", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb4da45a9779ecbe40764ea86e96a0a34df76a9388b1af1cf0a7338cb86c7290a", + "transactionIndex": "0x1f", + "blockHash": "0x6bd47e8728e72317d73af02f6e77e3da404f771620b34fe265f7b80cb0ec474e", + "blockNumber": "0xfb8abb", + "gasUsed": "0xd16d0", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0xe0fa8195ae92b9c473c0c0c12c2d6bcbd245de47" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0xa3Fd3e8866875524E08FB158A7287c642dA53fA8" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0xe0FA8195AE92b9C473c0c0c12c2D6bCbd245De47" + } + }, + "timestamp": 1747028257, + "chain": 10143, + "commit": "d3c1d31" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/10143/run-latest.json b/packages/contracts/broadcast/Deploy.s.sol/10143/run-latest.json new file mode 100644 index 0000000..ff8655e --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/10143/run-latest.json @@ -0,0 +1,87 @@ +{ + "transactions": [ + { + "hash": "0x7ead7b3b3c7cfac064d2445ffb4aeef5936c7b4247c66cbd1edfd878361f6c79", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0xa3fd3e8866875524e08fb158a7287c642da53fa8", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x125701", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234601957610de6908161001e823930815050f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301df1995146104c7575080630be27a04146104435780631af4f9701461040f57806324f4ec51146103dc5780632b2f6a121461039657806354c30fd91461032e57806364cd1595146102fa5780637e8dbaf6146101a65780638def51a11461014f578063918a2a65146100fb57639aff28fe14610095575f80fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206100dd6100cc6104f9565b6100d4610518565b60443591610ba6565b6fffffffffffffffffffffffffffffffff60405191168152f35b5f80fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75761012d6104f9565b610135610518565b9060443560ff811681036100f7576020926100dd92610b36565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f7576101816104f9565b6024359081151582036100f75760443580151581036100f7576020926100dd92610656565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760405160208101906004358252602081526040810181811067ffffffffffffffff8211176102cd57604052519020600f81169060101c60ff600f820616908282101561028c575b906020926fffffffffffffffffffffffffffffffff605a60646100dd95061192835f1461027c5760ff6102636102568260025b61025b610256876105fe565b61060f565b5016936105fe565b161b16911561027457600291610b36565b600191610b36565b60ff61026361025682600161024a565b60ff82146102a05760019190910190610217565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f757602060405160028152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206103626104f9565b60ff80610378610256610373610518565b6105fe565b166fffffffffffffffffffffffffffffffff6040519316901c168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206103d26103cd6104f9565b610528565b6040519015158152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206040515f8152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f757602060405160038152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f7576104756104f9565b61047d610518565b90604435906fffffffffffffffffffffffffffffffff82168092036100f7576104bd6fffffffffffffffffffffffffffffffff9160209460643591610ba6565b1614604051908152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75780600160209252f35b600435906fffffffffffffffffffffffffffffffff821682036100f757565b6024359060ff821682036100f757565b6ffcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc8116158015906105dd575b6105d8575f905b6fffffffffffffffffffffffffffffffff811680156105d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906fffffffffffffffffffffffffffffffff82116102a05716907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146102a0576001019061054b565b505060021490565b505f90565b50600181901c81166f7fffffffffffffffffffffffffffffff161515610544565b60ff16600f039060ff82116102a057565b60031b906107f860f88316921682036102a057565b906fffffffffffffffffffffffffffffffff809116911601906fffffffffffffffffffffffffffffffff82116102a057565b5f93928492908115610b28576cff000000ff000000ff000000ff929391935b5f925b6004841061068857505050505050565b90919294966cffffffffffffffffffffffffff838698961616915f93895f14610b1f5760ff60205b16978615610b0a578a15610af2576cffffffffffffffffffffffffff6cff0000000000000000000000005b169a8015610ae4576cff000000ff000000ff000000ff989590955b6fffffffffffffffffffffffffffffffff8d169b8c151580610ac9575b156107bb57915b808b166cffffffffffffffffffffffffff1615158e8161079e575b5015610767576fffffffffffffffffffffffffffffffff80918b5f1461075e57168c1b1661071a565b168c1c1661071a565b96919b976fffffffffffffffffffffffffffffffff919d88161797895f14610796578b1c165b9b9590956106f6565b8b1b1661078d565b6fffffffffffffffffffffffffffffffff9150821616158e610735565b99509a505093959491995096505f90855f14610ac05760ff60205b168515610aab578615610a93576cffffffffffffffffffffffffff6cff0000000000000000000000005b16918715610a7b576cffffffffffffffffffffffffff6cff000000ff000000ff000000ff5b168715610a61576fffffffffffffffffffffffffffffffff84841c165b8815610a48578915610a30576cffffffffffffffffffffffffff6c010000000000000000000000005b908a969392915b16925b6fffffffffffffffffffffffffffffffff858416166108fa57505050505050506108ca6001926fffffffffffffffffffffffffffffffff80809416818d161b161799865f146108f15760ff60085b1690610624565b9685156108e65760ff826008925b1691161c1691019294610678565b60ff826020926108d8565b60ff60206108c3565b8697875f14610a0f5786886fffffffffffffffffffffffffffffffff8080878b1616841b165b166fffffffffffffffffffffffffffffffff858a1616146109bc575b50506fffffffffffffffffffffffffffffffff8080809581808781989782988e16179f5f146109b357168c1c165b9b156109aa5716891c165b958d156109a15716871c165b928b156109985716851c165b918995929192610875565b16851b1661098d565b16871b16610981565b16891b16610975565b168c1b1661096a565b6fffffffffffffffffffffffffffffffff809581808781989c976109f28d84809b9a81809c819c5f14610a065716901b16610624565b9d509750975050509550505050868861093c565b16901c16610624565b86886fffffffffffffffffffffffffffffffff8080878b1616841c16610920565b6cffffffffffffffffffffffffff630100000061086b565b889491906cffffffffffffffffffffffffff6001610872565b6fffffffffffffffffffffffffffffffff84841b16610842565b6cffffffffffffffffffffffffff63ffffffff610825565b6cffffffffffffffffffffffffff63ff000000610800565b6cffffffffffffffffffffffffff60ff610800565b60ff60086107d6565b506fffffffffffffffffffffffffffffffff83161515610713565b63ffffffff989590956106f6565b6cffffffffffffffffffffffffff63ff0000006106db565b6cffffffffffffffffffffffffff60ff6106db565b60ff60086106b0565b63ffffffff92939193610675565b6fffffffffffffffffffffffffffffffff809260ff610b6c61025682858180610b61610256896105fe565b161b169816936105fe565b161b16921916161790565b6fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff81146102a05760010190565b92919060ff81166004811015610d8857600180610bc893161591111585610656565b926fffffffffffffffffffffffffffffffff808516911614610d88575f80806fff0000000000000000000000000000005b6fffffffffffffffffffffffffffffffff8116610cef5750506fffffffffffffffffffffffffffffffff1680158015610c33575b50505050565b5f959293949550610cc2578306927f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841684036102a057610c9f93605a606460ff9306115f14610ca9576fffffffffffffffffffffffffffffffff6002945b169060031b1c1690610b36565b905f808080610c2d565b6fffffffffffffffffffffffffffffffff600194610c92565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6fffffffffffffffffffffffffffffffff8188161615610d2e575b6effffffffffffffffffffffffffffff610d289160081c1691610b77565b90610bf9565b92610d3883610b77565b9260031b7007fffffffffffffffffffffffffffffff86ffffffffffffffffffffffffffffffff88216911681036102a0576fffffffffffffffffffffffffffffffff83811690911b161792610d0a565b7f35405e3c000000000000000000000000000000000000000000000000000000005f5260045ffdfea264697066735822122070d2381bf6b7305009885b5d725b8c1ff99d3898b0fb599b437862fde33fd38464736f6c634300081c0033", + "nonce": "0x74", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb4da45a9779ecbe40764ea86e96a0a34df76a9388b1af1cf0a7338cb86c7290a", + "transactionType": "CREATE", + "contractName": "Monad2048", + "contractAddress": "0xe0fa8195ae92b9c473c0c0c12c2d6bcbd245de47", + "function": null, + "arguments": null, + "transaction": { + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "gas": "0xd16d0", + "value": "0x0", + "input": "0x60808060405234601557610b06908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816325c09963146107e35750806361d585da1461077657806379cbd2331461072e5780639a987475146106d3578063ac88036c14610689578063bb9df307146101eb5763e51b891f14610069575f80fd5b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576040516102006004356100ab8284610a29565b81368437805f525f60205260405f205460801c905f9173a3fd3e8866875524e08fb158a7287c642da53fa8925b60ff8116601081101561019457604051907f54c30fd90000000000000000000000000000000000000000000000000000000082528360048301526024820152602081604481885af4908115610189575f91610149575b5060ff918260019216611fe08260051b1689015201166100d8565b90506020813d8211610181575b8161016360209383610a29565b8101031261017d575160ff8116810361017d5760ff61012e565b5f80fd5b3d9150610156565b6040513d5f823e3d90fd5b8686855f525f6020526effffffffffffffffffffffffffffff60405f205460081c1660405191825f905b601082106101d25750506102209350820152f35b60208060019260ff8951168152019601910190946101be565b3461017d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004353660a41161017d57366101041161017d578060601c330361066157805f525f60205260405f205460801c6106395760405160208101905f6024835b60048310610607575050506080815261027360a082610a29565b519020805f52600160205260405f20546105df5773a3fd3e8866875524e08fb158a7287c642da53fa86024356fffffffffffffffffffffffffffffffff81169081810361017d5750604051907f2b2f6a120000000000000000000000000000000000000000000000000000000082526004820152602081602481855af4908115610189575f916105c0575b50156105105760015b600481106104015750505f5260016020528060405f205560e43560ff81169081810361017d5750610336610a94565b60405191610343836109e0565b825260208201600481526fffffffffffffffffffffffffffffffff6040840192168252835f525f6020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff60405f20955116925160081b16925160801b1691171790556103c1610a94565b6fffffffffffffffffffffffffffffffff604051911681527f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e360203392a3005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116105935761043c61043782610a82565b610ab3565b9060038110156105665760051b60a4013560ff8116810361017d5760209061046661043785610a82565b926104ef604051848101908a825287604082015260408152610489606082610a29565b51902060405195869485947f0be27a0400000000000000000000000000000000000000000000000000000000865260048601909493926fffffffffffffffffffffffffffffffff9060ff6060948360808601991685521660208401521660408201520152565b0381865af4908115610189575f91610538575b501561051057600101610307565b7f2b977ce3000000000000000000000000000000000000000000000000000000005f5260045ffd5b610559915060203d811161055f575b6105518183610a29565b810190610a6a565b85610502565b503d610547565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6105d9915060203d60201161055f576105518183610a29565b846102fe565b7f6e3ca805000000000000000000000000000000000000000000000000000000005f5260045ffd5b8135906fffffffffffffffffffffffffffffffff821680920361017d5760208160019382935201920192019190610259565b7f25434c83000000000000000000000000000000000000000000000000000000005f5260045ffd5b7faed8b1cf000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f602052602060405f205460801c604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f60205260206effffffffffffffffffffffffffffff60405f205460081c16604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f526001602052602060405f2054604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f602052606060405f20546040519060ff811682526effffffffffffffffffffffffffffff8160081c16602083015260801c6040820152f35b3461017d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004359060243560ff81169182820361017d576044356fffffffffffffffffffffffffffffffff81169283820361017d578560601c330361066157602090865f525f825260406108b2815f20610867876109e0565b549560ff871681526effffffffffffffffffffffffffffff8760081c16908581019782895260801c9384910152604051858101918b8352604082015260408152610489606082610a29565b038173a3fd3e8866875524e08fb158a7287c642da53fa85af4908115610189575f916109c1575b5015610510576effffffffffffffffffffffffffffff6001915116016effffffffffffffffffffffffffffff81116105935760405190610918826109e0565b8382526effffffffffffffffffffffffffffff60208301911681526040820190838252855f525f6020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff60405f20955116925160081b16925160801b16911717905560405191825260208201527f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84260403392a3005b6109da915060203d60201161055f576105518183610a29565b856108d9565b6060810190811067ffffffffffffffff8211176109fc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109fc57604052565b9081602091031261017d5751801515810361017d5790565b60048110156105665760051b60240190565b6084356fffffffffffffffffffffffffffffffff8116810361017d5790565b356fffffffffffffffffffffffffffffffff8116810361017d579056fea2646970667358221220969a7f7c514aa734f294aa96245a7452aa46ed6a1a3ce4c0584d3af116f7bc9264736f6c634300081c0033", + "nonce": "0x75", + "chainId": "0x279f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x738dea", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x7ead7b3b3c7cfac064d2445ffb4aeef5936c7b4247c66cbd1edfd878361f6c79", + "transactionIndex": "0x1d", + "blockHash": "0x6bd47e8728e72317d73af02f6e77e3da404f771620b34fe265f7b80cb0ec474e", + "blockNumber": "0xfb8abb", + "gasUsed": "0x125701", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x8fe6fa", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb4da45a9779ecbe40764ea86e96a0a34df76a9388b1af1cf0a7338cb86c7290a", + "transactionIndex": "0x1f", + "blockHash": "0x6bd47e8728e72317d73af02f6e77e3da404f771620b34fe265f7b80cb0ec474e", + "blockNumber": "0xfb8abb", + "gasUsed": "0xd16d0", + "effectiveGasPrice": "0xba43b7401", + "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", + "to": null, + "contractAddress": "0xe0fa8195ae92b9c473c0c0c12c2d6bcbd245de47" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0xa3Fd3e8866875524E08FB158A7287c642dA53fA8" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0xe0FA8195AE92b9C473c0c0c12c2D6bCbd245De47" + } + }, + "timestamp": 1747028257, + "chain": 10143, + "commit": "d3c1d31" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/143/run-1769605008553.json b/packages/contracts/broadcast/Deploy.s.sol/143/run-1769605008553.json new file mode 100644 index 0000000..872ef00 --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/143/run-1769605008553.json @@ -0,0 +1,87 @@ +{ + "transactions": [ + { + "hash": "0x7846172decf613bc039de94c6ca646bdfe4f5e2816f8264458bbed26cdaa5237", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0x140fd93a53218f93ec8b0ecbfb05db73cf5c10d3", + "function": null, + "arguments": null, + "transaction": { + "from": "0xcbc2d8fe511e38f99512bd41b06698628aa8e267", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1176a1", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234601957610e08908161001f823930815050f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301df1995146104d4575080630be27a04146104505780631af4f9701461041b57806324f4ec51146103e65780632b2f6a12146103a057806354c30fd91461033857806364cd1595146103035780637e8dbaf6146101aa5780638def51a114610153578063918a2a65146100ff57639aff28fe1461009857600080fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa5760206100e06100cf610507565b6100d7610526565b60443591610bc2565b6fffffffffffffffffffffffffffffffff60405191168152f35b600080fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57610131610507565b610139610526565b9060443560ff811681036100fa576020926100e092610b52565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57610185610507565b6024359081151582036100fa5760443580151581036100fa576020926100e092610666565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa5760405160208101906004358252602081526040810181811067ffffffffffffffff8211176102d457604052519020600f81169060101c60ff600f8206169082821015610291575b906020926fffffffffffffffffffffffffffffffff605a60646100e095061192836000146102815760ff61026861025b8260025b61026061025b8761060e565b61061f565b50169361060e565b161b16911561027957600291610b52565b600191610b52565b60ff61026861025b82600161024f565b60ff82146102a5576001919091019061021b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57602060405160028152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57602061036c610507565b60ff8061038261025b61037d610526565b61060e565b166fffffffffffffffffffffffffffffffff6040519316901c168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa5760206103dc6103d7610507565b610536565b6040519015158152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57602060405160008152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57602060405160038152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57610482610507565b61048a610526565b90604435906fffffffffffffffffffffffffffffffff82168092036100fa576104ca6fffffffffffffffffffffffffffffffff9160209460643591610bc2565b1614604051908152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa5780600160209252f35b600435906fffffffffffffffffffffffffffffffff821682036100fa57565b6024359060ff821682036100fa57565b6ffcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc8116158015906105ed575b6105e7576000905b6fffffffffffffffffffffffffffffffff811680156105df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906fffffffffffffffffffffffffffffffff82116102a55716907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146102a5576001019061055a565b505060021490565b50600090565b50600181901c81166f7fffffffffffffffffffffffffffffff161515610552565b60ff16600f039060ff82116102a557565b60031b906107f860f88316921682036102a557565b906fffffffffffffffffffffffffffffffff809116911601906fffffffffffffffffffffffffffffffff82116102a557565b600093928492908115610b44576cff000000ff000000ff000000ff929391935b6000925b6004841061069a57505050505050565b90919294966cffffffffffffffffffffffffff8386989616169160009389600014610b3b5760ff60205b16978615610b26578a15610b0e576cffffffffffffffffffffffffff6cff0000000000000000000000005b169a8015610b00576cff000000ff000000ff000000ff989590955b6fffffffffffffffffffffffffffffffff8d169b8c151580610ae5575b156107d157915b808b166cffffffffffffffffffffffffff1615158e816107b4575b501561077c576fffffffffffffffffffffffffffffffff80918b60001461077357168c1b1661072e565b168c1c1661072e565b96919b976fffffffffffffffffffffffffffffffff919d88161797896000146107ac578b1c165b9b95909561070a565b8b1b166107a3565b6fffffffffffffffffffffffffffffffff9150821616158e610749565b99509a5050939594919950965060009085600014610adc5760ff60205b168515610ac7578615610aaf576cffffffffffffffffffffffffff6cff0000000000000000000000005b16918715610a97576cffffffffffffffffffffffffff6cff000000ff000000ff000000ff5b168715610a7d576fffffffffffffffffffffffffffffffff84841c165b8815610a64578915610a4c576cffffffffffffffffffffffffff6c010000000000000000000000005b908a969392915b16925b6fffffffffffffffffffffffffffffffff8584161661091357505050505050506108e36001926fffffffffffffffffffffffffffffffff80809416818d161b1617998660001461090a5760ff60085b1690610634565b9685156108ff5760ff826008925b1691161c169101929461068a565b60ff826020926108f1565b60ff60206108dc565b869787600014610a2b5786886fffffffffffffffffffffffffffffffff8080878b1616841b165b166fffffffffffffffffffffffffffffffff858a1616146109d7575b50506fffffffffffffffffffffffffffffffff8080809581808781989782988e16179f6000146109ce57168c1c165b9b156109c55716891c165b958d156109bc5716871c165b928b156109b35716851c165b91899592919261088d565b16851b166109a8565b16871b1661099c565b16891b16610990565b168c1b16610985565b6fffffffffffffffffffffffffffffffff809581808781989c97610a0e8d84809b9a81809c819c600014610a225716901b16610634565b9d5097509750505095505050508688610956565b16901c16610634565b86886fffffffffffffffffffffffffffffffff8080878b1616841c1661093a565b6cffffffffffffffffffffffffff6301000000610883565b889491906cffffffffffffffffffffffffff600161088a565b6fffffffffffffffffffffffffffffffff84841b1661085a565b6cffffffffffffffffffffffffff63ffffffff61083d565b6cffffffffffffffffffffffffff63ff000000610818565b6cffffffffffffffffffffffffff60ff610818565b60ff60086107ee565b506fffffffffffffffffffffffffffffffff83161515610727565b63ffffffff9895909561070a565b6cffffffffffffffffffffffffff63ff0000006106ef565b6cffffffffffffffffffffffffff60ff6106ef565b60ff60086106c4565b63ffffffff92939193610686565b6fffffffffffffffffffffffffffffffff809260ff610b8861025b82858180610b7d61025b8961060e565b161b1698169361060e565b161b16921916161790565b6fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff81146102a55760010190565b92919060ff81166004811015610da857600180610be493161591111585610666565b926fffffffffffffffffffffffffffffffff808516911614610da857600080806fff0000000000000000000000000000005b6fffffffffffffffffffffffffffffffff8116610d0f5750506fffffffffffffffffffffffffffffffff1680158015610c50575b50505050565b6000959293949590610ce257508306927f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841684036102a557610cbf93605a606460ff930611600014610cc9576fffffffffffffffffffffffffffffffff6002945b169060031b1c1690610b52565b9038808080610c4a565b6fffffffffffffffffffffffffffffffff600194610cb2565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526012600452fd5b6fffffffffffffffffffffffffffffffff8188161615610d4e575b6effffffffffffffffffffffffffffff610d489160081c1691610b93565b90610c16565b92610d5883610b93565b9260031b7007fffffffffffffffffffffffffffffff86ffffffffffffffffffffffffffffffff88216911681036102a5576fffffffffffffffffffffffffffffffff83811690911b161792610d2a565b7f35405e3c0000000000000000000000000000000000000000000000000000000060005260046000fdfea264697066735822122051cde6e8ba62922ad92fd11aa9d1b1fd8a44b62804e0348088bde5c42fc0e6e464736f6c634300081c0033", + "nonce": "0x12", + "chainId": "0x8f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb214424e5e6649d5a9f2e82f0d7ffa3567bf18a5a405491e0cffc33eb7695118", + "transactionType": "CREATE", + "contractName": "Monad2048", + "contractAddress": "0x53748668642735cda45935716525e7dfbc8aaacc", + "function": null, + "arguments": null, + "transaction": { + "from": "0xcbc2d8fe511e38f99512bd41b06698628aa8e267", + "gas": "0xdc875", + "value": "0x0", + "input": "0x60808060405234601557610baf908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816325c09963146108545750806361d585da146107e457806379cbd2331461079a5780639a9874751461073c578063ac88036c146106ef578063bb9df307146102015763e51b891f1461006c57600080fd5b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc57604051610200906004356100af8383610aa3565b8236833780600052600060205260406000205460801c9060009173140fd93a53218f93ec8b0ecbfb05db73cf5c10d3925b60ff811660108110156101a157604051907f54c30fd90000000000000000000000000000000000000000000000000000000082528360048301526024820152602081604481885af490811561019557600091610152575b5060ff918260019216611fe08260051b1688015201166100e0565b6020813d821161018d575b8161016a60209383610aa3565b8101031261018957519060ff82168203610186575060ff610137565b80fd5b5080fd5b3d915061015d565b6040513d6000823e3d90fd5b85878560005260006020526effffffffffffffffffffffffffffff60406000205460081c1660405191826000905b601082106101e35750506102209350820152f35b60208060019260ff8951168152019601910190946101cf565b600080fd5b346101fc576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc576004353660a4116101fc5736610104116101fc578060601c33036106c55780600052600060205260406000205460801c61069b57604051602081019060006024835b60048310610669575050506080815261028d60a082610aa3565b51902080600052600160205260406000205461063f5773140fd93a53218f93ec8b0ecbfb05db73cf5c10d36024356fffffffffffffffffffffffffffffffff8116908181036101fc5750604051907f2b2f6a120000000000000000000000000000000000000000000000000000000082526004820152602081602481855af490811561019557600091610620575b50156105f65760015b6004811061042357505060005260016020528060406000205560e43560ff8116908181036101fc5750610355610b3d565b6040519161036283610a58565b825260208201600481526fffffffffffffffffffffffffffffffff60408401921682528360005260006020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff6040600020955116925160081b16925160801b1691171790556103e3610b3d565b6fffffffffffffffffffffffffffffffff604051911681527f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e360203392a3005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116105c75761045e61045982610afc565b610b5c565b600091600381101561059a5760051b60a4013560ff811681036105965760209061048a61045986610afc565b92610513604051848101908b8252886040820152604081526104ad606082610aa3565b51902060405195869485947f0be27a0400000000000000000000000000000000000000000000000000000000865260048601909493926fffffffffffffffffffffffffffffffff9060ff6060948360808601991685521660208401521660408201520152565b0381875af490811561058b57829161055d575b50156105355750600101610324565b807f2b977ce30000000000000000000000000000000000000000000000000000000060049252fd5b61057e915060203d8111610584575b6105768183610aa3565b810190610ae4565b86610526565b503d61056c565b6040513d84823e3d90fd5b8280fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f2b977ce30000000000000000000000000000000000000000000000000000000060005260046000fd5b610639915060203d602011610584576105768183610aa3565b8461031b565b7f6e3ca8050000000000000000000000000000000000000000000000000000000060005260046000fd5b8135906fffffffffffffffffffffffffffffffff82168092036101fc5760208160019382935201920192019190610273565b7f25434c830000000000000000000000000000000000000000000000000000000060005260046000fd5b7faed8b1cf0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc576004356000526000602052602060406000205460801c604051908152f35b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc57600435600052600060205260206effffffffffffffffffffffffffffff60406000205460081c16604051908152f35b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc5760043560005260016020526020604060002054604051908152f35b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc57600435600052600060205260606040600020546040519060ff811682526effffffffffffffffffffffffffffff8160081c16602083015260801c6040820152f35b346101fc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc576004359060243560ff8116918282036101fc576044356fffffffffffffffffffffffffffffffff8116928382036101fc578560601c33036106c55760209086600052600082526040610926816000206108db87610a58565b549560ff871681526effffffffffffffffffffffffffffff8760081c16908581019782895260801c9384910152604051858101918b83526040820152604081526104ad606082610aa3565b038173140fd93a53218f93ec8b0ecbfb05db73cf5c10d35af490811561019557600091610a39575b50156105f6576effffffffffffffffffffffffffffff6001915116016effffffffffffffffffffffffffffff81116105c7576040519061098d82610a58565b8382526effffffffffffffffffffffffffffff602083019116815260408201908382528560005260006020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff6040600020955116925160081b16925160801b16911717905560405191825260208201527f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84260403392a3005b610a52915060203d602011610584576105768183610aa3565b8561094e565b6060810190811067ffffffffffffffff821117610a7457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a7457604052565b908160209103126101fc575180151581036101fc5790565b6004811015610b0e5760051b60240190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6084356fffffffffffffffffffffffffffffffff811681036101fc5790565b356fffffffffffffffffffffffffffffffff811681036101fc579056fea264697066735822122072394165c674c3a78888db5a18fb970ca6b082cc30bbea93c0e25ba9f71a062f64736f6c634300081c0033", + "nonce": "0x13", + "chainId": "0x8f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x15d38a", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x7846172decf613bc039de94c6ca646bdfe4f5e2816f8264458bbed26cdaa5237", + "transactionIndex": "0x2", + "blockHash": "0x34305062ffc35ee4978cd23d87435aae58b59408ca27771395a3610d8d1eabcb", + "blockNumber": "0x3147450", + "gasUsed": "0x1176a1", + "effectiveGasPrice": "0x18904a3f00", + "from": "0xcbc2d8fe511e38f99512bd41b06698628aa8e267", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x239bff", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb214424e5e6649d5a9f2e82f0d7ffa3567bf18a5a405491e0cffc33eb7695118", + "transactionIndex": "0x3", + "blockHash": "0x34305062ffc35ee4978cd23d87435aae58b59408ca27771395a3610d8d1eabcb", + "blockNumber": "0x3147450", + "gasUsed": "0xdc875", + "effectiveGasPrice": "0x18904a3f00", + "from": "0xcbc2d8fe511e38f99512bd41b06698628aa8e267", + "to": null, + "contractAddress": "0x53748668642735cda45935716525e7dfbc8aaacc" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0x140fD93a53218F93Ec8b0ECbFB05db73cf5C10D3" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0x53748668642735CDa45935716525E7DFbC8aAACC" + } + }, + "timestamp": 1769605008553, + "chain": 143, + "commit": "11f3680" +} \ No newline at end of file diff --git a/packages/contracts/broadcast/Deploy.s.sol/143/run-latest.json b/packages/contracts/broadcast/Deploy.s.sol/143/run-latest.json new file mode 100644 index 0000000..872ef00 --- /dev/null +++ b/packages/contracts/broadcast/Deploy.s.sol/143/run-latest.json @@ -0,0 +1,87 @@ +{ + "transactions": [ + { + "hash": "0x7846172decf613bc039de94c6ca646bdfe4f5e2816f8264458bbed26cdaa5237", + "transactionType": "CREATE2", + "contractName": "Board", + "contractAddress": "0x140fd93a53218f93ec8b0ecbfb05db73cf5c10d3", + "function": null, + "arguments": null, + "transaction": { + "from": "0xcbc2d8fe511e38f99512bd41b06698628aa8e267", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x1176a1", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234601957610e08908161001f823930815050f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301df1995146104d4575080630be27a04146104505780631af4f9701461041b57806324f4ec51146103e65780632b2f6a12146103a057806354c30fd91461033857806364cd1595146103035780637e8dbaf6146101aa5780638def51a114610153578063918a2a65146100ff57639aff28fe1461009857600080fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa5760206100e06100cf610507565b6100d7610526565b60443591610bc2565b6fffffffffffffffffffffffffffffffff60405191168152f35b600080fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57610131610507565b610139610526565b9060443560ff811681036100fa576020926100e092610b52565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57610185610507565b6024359081151582036100fa5760443580151581036100fa576020926100e092610666565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa5760405160208101906004358252602081526040810181811067ffffffffffffffff8211176102d457604052519020600f81169060101c60ff600f8206169082821015610291575b906020926fffffffffffffffffffffffffffffffff605a60646100e095061192836000146102815760ff61026861025b8260025b61026061025b8761060e565b61061f565b50169361060e565b161b16911561027957600291610b52565b600191610b52565b60ff61026861025b82600161024f565b60ff82146102a5576001919091019061021b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57602060405160028152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57602061036c610507565b60ff8061038261025b61037d610526565b61060e565b166fffffffffffffffffffffffffffffffff6040519316901c168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa5760206103dc6103d7610507565b610536565b6040519015158152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57602060405160008152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57602060405160038152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa57610482610507565b61048a610526565b90604435906fffffffffffffffffffffffffffffffff82168092036100fa576104ca6fffffffffffffffffffffffffffffffff9160209460643591610bc2565b1614604051908152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fa5780600160209252f35b600435906fffffffffffffffffffffffffffffffff821682036100fa57565b6024359060ff821682036100fa57565b6ffcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc8116158015906105ed575b6105e7576000905b6fffffffffffffffffffffffffffffffff811680156105df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906fffffffffffffffffffffffffffffffff82116102a55716907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146102a5576001019061055a565b505060021490565b50600090565b50600181901c81166f7fffffffffffffffffffffffffffffff161515610552565b60ff16600f039060ff82116102a557565b60031b906107f860f88316921682036102a557565b906fffffffffffffffffffffffffffffffff809116911601906fffffffffffffffffffffffffffffffff82116102a557565b600093928492908115610b44576cff000000ff000000ff000000ff929391935b6000925b6004841061069a57505050505050565b90919294966cffffffffffffffffffffffffff8386989616169160009389600014610b3b5760ff60205b16978615610b26578a15610b0e576cffffffffffffffffffffffffff6cff0000000000000000000000005b169a8015610b00576cff000000ff000000ff000000ff989590955b6fffffffffffffffffffffffffffffffff8d169b8c151580610ae5575b156107d157915b808b166cffffffffffffffffffffffffff1615158e816107b4575b501561077c576fffffffffffffffffffffffffffffffff80918b60001461077357168c1b1661072e565b168c1c1661072e565b96919b976fffffffffffffffffffffffffffffffff919d88161797896000146107ac578b1c165b9b95909561070a565b8b1b166107a3565b6fffffffffffffffffffffffffffffffff9150821616158e610749565b99509a5050939594919950965060009085600014610adc5760ff60205b168515610ac7578615610aaf576cffffffffffffffffffffffffff6cff0000000000000000000000005b16918715610a97576cffffffffffffffffffffffffff6cff000000ff000000ff000000ff5b168715610a7d576fffffffffffffffffffffffffffffffff84841c165b8815610a64578915610a4c576cffffffffffffffffffffffffff6c010000000000000000000000005b908a969392915b16925b6fffffffffffffffffffffffffffffffff8584161661091357505050505050506108e36001926fffffffffffffffffffffffffffffffff80809416818d161b1617998660001461090a5760ff60085b1690610634565b9685156108ff5760ff826008925b1691161c169101929461068a565b60ff826020926108f1565b60ff60206108dc565b869787600014610a2b5786886fffffffffffffffffffffffffffffffff8080878b1616841b165b166fffffffffffffffffffffffffffffffff858a1616146109d7575b50506fffffffffffffffffffffffffffffffff8080809581808781989782988e16179f6000146109ce57168c1c165b9b156109c55716891c165b958d156109bc5716871c165b928b156109b35716851c165b91899592919261088d565b16851b166109a8565b16871b1661099c565b16891b16610990565b168c1b16610985565b6fffffffffffffffffffffffffffffffff809581808781989c97610a0e8d84809b9a81809c819c600014610a225716901b16610634565b9d5097509750505095505050508688610956565b16901c16610634565b86886fffffffffffffffffffffffffffffffff8080878b1616841c1661093a565b6cffffffffffffffffffffffffff6301000000610883565b889491906cffffffffffffffffffffffffff600161088a565b6fffffffffffffffffffffffffffffffff84841b1661085a565b6cffffffffffffffffffffffffff63ffffffff61083d565b6cffffffffffffffffffffffffff63ff000000610818565b6cffffffffffffffffffffffffff60ff610818565b60ff60086107ee565b506fffffffffffffffffffffffffffffffff83161515610727565b63ffffffff9895909561070a565b6cffffffffffffffffffffffffff63ff0000006106ef565b6cffffffffffffffffffffffffff60ff6106ef565b60ff60086106c4565b63ffffffff92939193610686565b6fffffffffffffffffffffffffffffffff809260ff610b8861025b82858180610b7d61025b8961060e565b161b1698169361060e565b161b16921916161790565b6fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff81146102a55760010190565b92919060ff81166004811015610da857600180610be493161591111585610666565b926fffffffffffffffffffffffffffffffff808516911614610da857600080806fff0000000000000000000000000000005b6fffffffffffffffffffffffffffffffff8116610d0f5750506fffffffffffffffffffffffffffffffff1680158015610c50575b50505050565b6000959293949590610ce257508306927f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841684036102a557610cbf93605a606460ff930611600014610cc9576fffffffffffffffffffffffffffffffff6002945b169060031b1c1690610b52565b9038808080610c4a565b6fffffffffffffffffffffffffffffffff600194610cb2565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526012600452fd5b6fffffffffffffffffffffffffffffffff8188161615610d4e575b6effffffffffffffffffffffffffffff610d489160081c1691610b93565b90610c16565b92610d5883610b93565b9260031b7007fffffffffffffffffffffffffffffff86ffffffffffffffffffffffffffffffff88216911681036102a5576fffffffffffffffffffffffffffffffff83811690911b161792610d2a565b7f35405e3c0000000000000000000000000000000000000000000000000000000060005260046000fdfea264697066735822122051cde6e8ba62922ad92fd11aa9d1b1fd8a44b62804e0348088bde5c42fc0e6e464736f6c634300081c0033", + "nonce": "0x12", + "chainId": "0x8f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb214424e5e6649d5a9f2e82f0d7ffa3567bf18a5a405491e0cffc33eb7695118", + "transactionType": "CREATE", + "contractName": "Monad2048", + "contractAddress": "0x53748668642735cda45935716525e7dfbc8aaacc", + "function": null, + "arguments": null, + "transaction": { + "from": "0xcbc2d8fe511e38f99512bd41b06698628aa8e267", + "gas": "0xdc875", + "value": "0x0", + "input": "0x60808060405234601557610baf908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816325c09963146108545750806361d585da146107e457806379cbd2331461079a5780639a9874751461073c578063ac88036c146106ef578063bb9df307146102015763e51b891f1461006c57600080fd5b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc57604051610200906004356100af8383610aa3565b8236833780600052600060205260406000205460801c9060009173140fd93a53218f93ec8b0ecbfb05db73cf5c10d3925b60ff811660108110156101a157604051907f54c30fd90000000000000000000000000000000000000000000000000000000082528360048301526024820152602081604481885af490811561019557600091610152575b5060ff918260019216611fe08260051b1688015201166100e0565b6020813d821161018d575b8161016a60209383610aa3565b8101031261018957519060ff82168203610186575060ff610137565b80fd5b5080fd5b3d915061015d565b6040513d6000823e3d90fd5b85878560005260006020526effffffffffffffffffffffffffffff60406000205460081c1660405191826000905b601082106101e35750506102209350820152f35b60208060019260ff8951168152019601910190946101cf565b600080fd5b346101fc576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc576004353660a4116101fc5736610104116101fc578060601c33036106c55780600052600060205260406000205460801c61069b57604051602081019060006024835b60048310610669575050506080815261028d60a082610aa3565b51902080600052600160205260406000205461063f5773140fd93a53218f93ec8b0ecbfb05db73cf5c10d36024356fffffffffffffffffffffffffffffffff8116908181036101fc5750604051907f2b2f6a120000000000000000000000000000000000000000000000000000000082526004820152602081602481855af490811561019557600091610620575b50156105f65760015b6004811061042357505060005260016020528060406000205560e43560ff8116908181036101fc5750610355610b3d565b6040519161036283610a58565b825260208201600481526fffffffffffffffffffffffffffffffff60408401921682528360005260006020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff6040600020955116925160081b16925160801b1691171790556103e3610b3d565b6fffffffffffffffffffffffffffffffff604051911681527f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e360203392a3005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116105c75761045e61045982610afc565b610b5c565b600091600381101561059a5760051b60a4013560ff811681036105965760209061048a61045986610afc565b92610513604051848101908b8252886040820152604081526104ad606082610aa3565b51902060405195869485947f0be27a0400000000000000000000000000000000000000000000000000000000865260048601909493926fffffffffffffffffffffffffffffffff9060ff6060948360808601991685521660208401521660408201520152565b0381875af490811561058b57829161055d575b50156105355750600101610324565b807f2b977ce30000000000000000000000000000000000000000000000000000000060049252fd5b61057e915060203d8111610584575b6105768183610aa3565b810190610ae4565b86610526565b503d61056c565b6040513d84823e3d90fd5b8280fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f2b977ce30000000000000000000000000000000000000000000000000000000060005260046000fd5b610639915060203d602011610584576105768183610aa3565b8461031b565b7f6e3ca8050000000000000000000000000000000000000000000000000000000060005260046000fd5b8135906fffffffffffffffffffffffffffffffff82168092036101fc5760208160019382935201920192019190610273565b7f25434c830000000000000000000000000000000000000000000000000000000060005260046000fd5b7faed8b1cf0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc576004356000526000602052602060406000205460801c604051908152f35b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc57600435600052600060205260206effffffffffffffffffffffffffffff60406000205460081c16604051908152f35b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc5760043560005260016020526020604060002054604051908152f35b346101fc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc57600435600052600060205260606040600020546040519060ff811682526effffffffffffffffffffffffffffff8160081c16602083015260801c6040820152f35b346101fc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101fc576004359060243560ff8116918282036101fc576044356fffffffffffffffffffffffffffffffff8116928382036101fc578560601c33036106c55760209086600052600082526040610926816000206108db87610a58565b549560ff871681526effffffffffffffffffffffffffffff8760081c16908581019782895260801c9384910152604051858101918b83526040820152604081526104ad606082610aa3565b038173140fd93a53218f93ec8b0ecbfb05db73cf5c10d35af490811561019557600091610a39575b50156105f6576effffffffffffffffffffffffffffff6001915116016effffffffffffffffffffffffffffff81116105c7576040519061098d82610a58565b8382526effffffffffffffffffffffffffffff602083019116815260408201908382528560005260006020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff6040600020955116925160081b16925160801b16911717905560405191825260208201527f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84260403392a3005b610a52915060203d602011610584576105768183610aa3565b8561094e565b6060810190811067ffffffffffffffff821117610a7457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a7457604052565b908160209103126101fc575180151581036101fc5790565b6004811015610b0e5760051b60240190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6084356fffffffffffffffffffffffffffffffff811681036101fc5790565b356fffffffffffffffffffffffffffffffff811681036101fc579056fea264697066735822122072394165c674c3a78888db5a18fb970ca6b082cc30bbea93c0e25ba9f71a062f64736f6c634300081c0033", + "nonce": "0x13", + "chainId": "0x8f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x15d38a", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x7846172decf613bc039de94c6ca646bdfe4f5e2816f8264458bbed26cdaa5237", + "transactionIndex": "0x2", + "blockHash": "0x34305062ffc35ee4978cd23d87435aae58b59408ca27771395a3610d8d1eabcb", + "blockNumber": "0x3147450", + "gasUsed": "0x1176a1", + "effectiveGasPrice": "0x18904a3f00", + "from": "0xcbc2d8fe511e38f99512bd41b06698628aa8e267", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x239bff", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb214424e5e6649d5a9f2e82f0d7ffa3567bf18a5a405491e0cffc33eb7695118", + "transactionIndex": "0x3", + "blockHash": "0x34305062ffc35ee4978cd23d87435aae58b59408ca27771395a3610d8d1eabcb", + "blockNumber": "0x3147450", + "gasUsed": "0xdc875", + "effectiveGasPrice": "0x18904a3f00", + "from": "0xcbc2d8fe511e38f99512bd41b06698628aa8e267", + "to": null, + "contractAddress": "0x53748668642735cda45935716525e7dfbc8aaacc" + } + ], + "libraries": [ + "src/LibBoard.sol:Board:0x140fD93a53218F93Ec8b0ECbFB05db73cf5C10D3" + ], + "pending": [], + "returns": { + "gameContract": { + "internal_type": "address", + "value": "0x53748668642735CDa45935716525E7DFbC8aAACC" + } + }, + "timestamp": 1769605008553, + "chain": 143, + "commit": "11f3680" +} \ No newline at end of file diff --git a/packages/contracts/foundry.lock b/packages/contracts/foundry.lock new file mode 100644 index 0000000..eb556a9 --- /dev/null +++ b/packages/contracts/foundry.lock @@ -0,0 +1,8 @@ +{ + "lib/forge-std": { + "rev": "3b20d60d14b343ee4f908cb8079495c07f5e8981" + }, + "lib/solady": { + "rev": "c9e079c0ca836dcc52777a1fa7227ef28e3537b3" + } +} \ No newline at end of file diff --git a/packages/contracts/foundry.toml b/packages/contracts/foundry.toml new file mode 100644 index 0000000..bed7539 --- /dev/null +++ b/packages/contracts/foundry.toml @@ -0,0 +1,14 @@ +[profile.default] +src = "src" +out = "out" +libs = ["lib"] +solc_version = "0.8.28" +optimizer = true +optimizer_runs = 2000000 +via_ir = true +evm_version = "paris" + +[fmt] +line_length = 120 +tab_width = 4 +bracket_spacing = false diff --git a/packages/contracts/package.json b/packages/contracts/package.json new file mode 100644 index 0000000..bdf13fc --- /dev/null +++ b/packages/contracts/package.json @@ -0,0 +1,20 @@ +{ + "name": "contracts", + "version": "1.0.0", + "private": true, + "description": "Foundry smart contracts for 2048 game", + "scripts": { + "build": "forge build", + "test": "forge test -vvv", + "test:gas": "forge test --gas-report", + "lint": "forge fmt --check", + "format": "forge fmt", + "deploy": "forge script script/Deploy.s.sol --rpc-url $RPC_URL --broadcast --private-key $DEPLOYER_PRIVATE_KEY", + "deploy:testnet": "forge script script/Deploy.s.sol --rpc-url https://monad-testnet.g.alchemy.com/v2/vuj1yGtSbRRZJ_d8xTfeF --broadcast --chain-id 10143", + "deploy:mainnet": "forge script script/Deploy.s.sol --rpc-url https://monad-mainnet.g.alchemy.com/v2/vuj1yGtSbRRZJ_d8xTfeF --broadcast --chain-id 143", + "clean": "forge clean", + "install": "forge install" + }, + "keywords": ["foundry", "solidity", "smart-contracts", "2048", "monad"], + "devDependencies": {} +} diff --git a/packages/contracts/script/Deploy.s.sol b/packages/contracts/script/Deploy.s.sol new file mode 100644 index 0000000..01629bb --- /dev/null +++ b/packages/contracts/script/Deploy.s.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.8.28 <0.9.0; + +// Base +import {Script} from "lib/forge-std/src/Script.sol"; +import {StdUtils} from "lib/forge-std/src/StdUtils.sol"; + +// Targets +import {Monad2048} from "src/Monad2048.sol"; + +contract Deploy is StdUtils, Script { + uint256 internal deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); + + function run() public returns (address gameContract) { + address deployer = vm.addr(deployerPrivateKey); + + vm.startBroadcast(deployer); + gameContract = address(new Monad2048()); + vm.stopBroadcast(); + } +} diff --git a/packages/contracts/src/LibBoard.sol b/packages/contracts/src/LibBoard.sol new file mode 100644 index 0000000..a118ebb --- /dev/null +++ b/packages/contracts/src/LibBoard.sol @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {console} from "lib/forge-std/src/Test.sol"; + +library Board { + // =============================================================// + // ERRORS // + // =============================================================// + + error MoveInvalid(); + + // =============================================================// + // CONSTANTS // + // =============================================================// + + uint8 public constant UP = 0; + uint8 public constant DOWN = 1; + uint8 public constant LEFT = 2; + uint8 public constant RIGHT = 3; + + // =============================================================// + // START // + // =============================================================// + + function getStartPosition(bytes32 seed) public pure returns (uint128 position) { + // Generate pseudo-random seed and get first tile to populate. + uint256 rseed = uint256(keccak256(abi.encodePacked(seed))); + uint8 pos1 = uint8(rseed % 16); + rseed >>= 16; + + // Get second tile to populate. + uint8 pos2 = uint8(rseed % 15); + if (pos2 >= pos1) { + pos2++; + } + + position = setTile(setTile(position, pos2, (rseed % 100) > 90 ? 2 : 1), pos1, (rseed % 100) > 90 ? 2 : 1); + } + + // =============================================================// + // VALIDATIONS // + // =============================================================// + + function validateStartPosition(uint128 board) public pure returns (bool) { + uint128 mask = 0x03030303030303030303030303030303; + + // any bit except last two bits in a slot cannot be active + // also, both of the last two cannot be active at the same time + if (board & ~mask != 0 || board & (board >> 1) != 0) { + return false; + } + + uint256 count; + while (board != 0) { + // eliminate last active bit + board &= board - 1; + count++; + } + + return count == 2; + } + + function validateTransformation(uint128 prevBoard, uint8 move, uint128 nextBoard, uint256 seed) + public + pure + returns (bool) + { + return processMove(prevBoard, move, seed) == nextBoard; + } + + // =============================================================// + // TRANSFORMATIONS // + // =============================================================// + + function processMove(uint128 board, uint8 move, uint256 seed) public pure returns (uint128 result) { + // Check: the move is valid. + require(move < 4, MoveInvalid()); + + // Perform transformation on board to get resultant + result = processMove(board, move <= DOWN, move % 2 == 0); + + // Check: the move is playable. + require(board != result, MoveInvalid()); + + uint128 slotMask = 0xFF000000000000000000000000000000; + + uint128 emptyIndices; + uint128 emptySlots; + uint128 index; + + while (slotMask != 0) { + if (result & slotMask == 0) { + emptyIndices |= index << (8 * emptySlots++); + } + slotMask >>= 8; + index++; + } + + if (emptySlots > 0) { + // Set a 2 (90% probability) or a 4 (10% probability) on the randomly chosen tile. + uint8 tile = uint8((emptyIndices >> (8 * (seed % emptySlots))) & 0xFF); + result = setTile(result, tile, (seed % 100) > 90 ? 2 : 1); + } + } + + function processMove(uint128 board, bool isVertical, bool isLeft) public pure returns (uint128 result) { + uint128 shift = 0; + uint128 extractMask = isVertical ? 0x000000FF000000FF000000FF000000FF : 0xFFFFFFFF; + for (uint256 i = 0; i < 4; i++) { + uint128 compressed = compress(extractMask & board, isVertical, isLeft); + uint128 merged = merge(compressed, isVertical, isLeft); + + result |= (merged << shift); + shift += isVertical ? 8 : 32; + + board >>= isVertical ? 8 : 32; + } + } + + function compress(uint128 data, bool isVertical, bool isLeft) internal pure returns (uint128 compressed) { + uint128 shift = isVertical ? 32 : 8; + uint128 mask = isLeft ? (isVertical ? 0x000000FF000000000000000000000000 : 0xFF000000) : 0xFF; + uint128 reminderMask = isVertical ? 0x000000FF000000FF000000FF000000FF : 0xFFFFFFFF; + while (mask != 0 && data != 0) { + while (data & reminderMask > 0 && data & mask == 0) { + data = isLeft ? data << shift : data >> shift; + } + compressed |= data & mask; + mask = isLeft ? mask >> shift : mask << shift; + } + } + + function merge(uint128 compressed, bool isVertical, bool isLeft) internal pure returns (uint128 merged) { + uint128 shift = isVertical ? 32 : 8; + + uint128 mask = isLeft ? (isVertical ? 0x000000FF000000000000000000000000 : 0xFF000000) : 0xFF; + uint128 reminderMask = isVertical ? 0x000000FF000000FF000000FF000000FF : 0xFFFFFFFF; + uint128 frontMask = isLeft ? mask >> shift : mask << shift; + uint128 addition = isLeft ? (isVertical ? 0x00000001000000000000000000000000 : 0x01000000) : 0x01; + + while (reminderMask & compressed != 0) { + uint128 front = isLeft ? (compressed & frontMask) << shift : (compressed & frontMask) >> shift; + if (compressed & mask == front) { + compressed = isLeft ? compressed << shift : compressed >> shift; + compressed += addition; + } + merged |= (compressed & mask); + + mask = isLeft ? mask >> shift : mask << shift; + frontMask = isLeft ? frontMask >> shift : frontMask << shift; + addition = isLeft ? addition >> shift : addition << shift; + reminderMask = isLeft ? reminderMask >> shift : reminderMask << shift; + } + } + + function getTile(uint128 board, uint8 pos) public pure returns (uint8) { + return uint8((board >> ((15 - pos) * 8)) & 0xFF); + } + + function setTile(uint128 board, uint8 pos, uint8 value) public pure returns (uint128) { + uint128 mask = uint128(0xFF) << ((15 - pos) * 8); + uint128 tile = uint128(value) << ((15 - pos) * 8); + return (board & ~mask) | tile; + } +} diff --git a/packages/contracts/src/Monad2048.sol b/packages/contracts/src/Monad2048.sol new file mode 100644 index 0000000..99f84a5 --- /dev/null +++ b/packages/contracts/src/Monad2048.sol @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {Board} from "src/LibBoard.sol"; + +struct GameState { + uint8 move; + uint120 nextMove; + uint128 board; +} + +/** + * @title Monad 2048 + * @author Monad Foundation (github.com/monad-developers) + * @notice Play 2048 onchain! Also read: https://blog.monad.xyz + */ +contract Monad2048 { + // =============================================================// + // ERRORS // + // =============================================================// + + /// @dev Emitted when starting a game with a used ID. + error GameIdUsed(); + /// @dev Emitted when starting a game that has already been played. + error GamePlayed(); + /// @dev Emitted when submitting an invalid game board. + error GameBoardInvalid(); + /// @dev Emitted when someone other than a game's player makes a move. + error GamePlayerInvalid(); + + // =============================================================// + // EVENT // + // =============================================================// + + /// @dev Emitted when a game is started. + event NewGame(address indexed player, bytes32 indexed id, uint256 board); + /// @dev Emitted when a new valid move is played. + event NewMove(address indexed player, bytes32 indexed id, uint256 move, uint256 result); + + // =============================================================// + // STORAGE // + // =============================================================// + + /// @notice Mapping from game ID to the latest board state. + mapping(bytes32 gameId => GameState state) public state; + /// @notice Mapping from a hash of start position plus first 3 moves to game ID. + mapping(bytes32 gameHash => bytes32 gameId) public gameHashOf; + + // =============================================================// + // MODIFIERS // + // =============================================================// + + modifier correctGameId(address player, bytes32 gameId) { + require(player == address(uint160(uint256(gameId) >> 96)), GamePlayerInvalid()); + _; + } + + // =============================================================// + // VIEW // + // =============================================================// + + function nextMove(bytes32 gameId) public view returns (uint120) { + return state[gameId].nextMove; + } + + function latestBoard(bytes32 gameId) public view returns (uint128) { + return state[gameId].board; + } + + /** + * @notice Returns the latest board position of a game. + * @dev Each array position stores the log_2 of that tile's value. + * @param gameId The unique ID of a game. + */ + function getBoard(bytes32 gameId) external view returns (uint8[16] memory boardArr, uint256 nextMoveNumber) { + uint128 b = latestBoard(gameId); + for (uint8 i = 0; i < 16; i++) { + boardArr[i] = Board.getTile(b, i); + } + nextMoveNumber = nextMove(gameId); + } + + // =============================================================// + // EXTERNAL // + // =============================================================// + + /** + * @notice Starts a new game for a player. + * + * @param gameId The unique ID of the game. + * @param boards An ordered series of a start board and the result boards + * of the first three moves. + */ + function startGame(bytes32 gameId, uint128[4] calldata boards, uint8[3] calldata moves) + external + correctGameId(msg.sender, gameId) + { + require(state[gameId].board == 0, GameIdUsed()); + + // Check: this exact sequence of boards has not been played. + bytes32 hashedBoards = keccak256(abi.encodePacked(boards)); + require(gameHashOf[hashedBoards] == bytes32(0), GamePlayed()); + + // Check: game has a valid start board. + require(Board.validateStartPosition(boards[0]), GameBoardInvalid()); + + // Check: game has valid board transformations. + for (uint256 i = 1; i < 4; i++) { + require( + Board.validateTransformation( + boards[i - 1], moves[i - 1], boards[i], uint256(keccak256(abi.encodePacked(gameId, i))) + ), + GameBoardInvalid() + ); + } + + // Mark the game-start as played. + gameHashOf[hashedBoards] = gameId; + + state[gameId] = GameState({move: moves[2], nextMove: uint120(4), board: boards[3]}); + + emit NewGame(msg.sender, gameId, boards[3]); + } + + /** + * @notice Makes a new move in a game. + * @param gameId The unique ID of the game. + * @param resultBoard The result of applying a move on the latest board. + */ + function play(bytes32 gameId, uint8 move, uint128 resultBoard) external correctGameId(msg.sender, gameId) { + GameState memory latestState = state[gameId]; + + // Check: playing a valid move. + require( + Board.validateTransformation( + latestState.board, + move, + resultBoard, + uint256(keccak256(abi.encodePacked(gameId, uint256(latestState.nextMove)))) + ), + GameBoardInvalid() + ); + + // Update board. + state[gameId] = GameState({move: move, nextMove: latestState.nextMove + 1, board: resultBoard}); + + emit NewMove(msg.sender, gameId, move, resultBoard); + } +} diff --git a/packages/contracts/test/LibBoardTest.t.sol b/packages/contracts/test/LibBoardTest.t.sol new file mode 100644 index 0000000..6cd276c --- /dev/null +++ b/packages/contracts/test/LibBoardTest.t.sol @@ -0,0 +1,570 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {Test} from "lib/forge-std/src/Test.sol"; +import {Board} from "src/LibBoard.sol"; + +contract LibBoardTest is Test { + // Helper function to print values for debugging. + function boardBitsToArray(uint256 b) internal pure returns (uint8[16] memory boardArr) { + for (uint8 i = 0; i < 16; i++) { + boardArr[i] = uint8((b >> (120 - (i * 8))) & 0xFF); + } + } + + // Helper function to print values for debugging. + function boardArrayToBits(uint8[16] memory b) internal pure returns (uint128 result) { + for (uint8 i = 0; i < 16; i++) { + result <<= 8; + result |= b[i]; + } + } + + function testValidateStartBoard() public { + /** + * [0,0,0,0] + * [0,0,0,0] + * [0,2,0,0] + * [0,0,2,0] + */ + uint8[16] memory goodBoard1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0]; + + /** + * [0,0,4,0] + * [0,0,0,0] + * [0,2,0,0] + * [0,0,0,0] + */ + uint8[16] memory goodBoard2 = [0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]; + + /** + * [0,0,4,0] + * [0,0,0,0] + * [0,4,0,0] + * [0,0,0,0] + */ + uint8[16] memory goodBoard3 = [0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0]; + + assertTrue(Board.validateStartPosition(boardArrayToBits(goodBoard1))); + assertTrue(Board.validateStartPosition(boardArrayToBits(goodBoard2))); + assertTrue(Board.validateStartPosition(boardArrayToBits(goodBoard3))); + + /** + * [0,0,2,0] + * [0,0,0,0] + * [0,2,0,0] + * [0,0,2,0] + */ + uint8[16] memory badBoard1 = [0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0]; + + assertEq(Board.validateStartPosition(boardArrayToBits(badBoard1)), false); + + /** + * [0,0,0,0] + * [0,0,0,0] + * [0,0,0,0] + * [0,0,0,0] + */ + uint8[16] memory badBoard2 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + + assertEq(Board.validateStartPosition(boardArrayToBits(badBoard2)), false); + } + + function testValidateTransformation() public pure { + /** + * [0,0,1,1] + * [0,0,2,4] + * [2,1,3,2] + * [0,1,3,2] + */ + uint8[16] memory board = [0, 0, 1, 1, 0, 0, 2, 4, 2, 1, 3, 2, 0, 1, 3, 2]; + + /** + * [0,0,0,0] + * [0,0,1,1] + * [0,0,2,4] + * [2,2,4,3] + */ + uint8[16] memory expectedResultDown = [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 4, 2, 2, 4, 3]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](8); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultDown[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultDown[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + assertTrue( + Board.validateTransformation(boardArrayToBits(board), 0x01, boardArrayToBits(expectedResultDown), seed) + ); + } + + function testGameOver() public { + /** + * [1,2,3,4] + * [2,3,4,1] + * [3,4,1,2] + * [4,1,2,3] + */ + uint8[16] memory board = [1, 2, 3, 4, 2, 3, 4, 1, 3, 4, 1, 2, 4, 1, 2, 3]; + + vm.expectRevert(Board.MoveInvalid.selector); + Board.processMove(boardArrayToBits(board), Board.UP, uint256(keccak256("random"))); + + vm.expectRevert(Board.MoveInvalid.selector); + Board.processMove(boardArrayToBits(board), Board.DOWN, uint256(keccak256("random"))); + + vm.expectRevert(Board.MoveInvalid.selector); + Board.processMove(boardArrayToBits(board), Board.LEFT, uint256(keccak256("random"))); + + vm.expectRevert(Board.MoveInvalid.selector); + Board.processMove(boardArrayToBits(board), Board.RIGHT, uint256(keccak256("random"))); + } + + function testValidateProcessMovesUpSimple() public pure { + /** + * [0,0,0,0] + * [0,0,2,0] + * [0,0,2,0] + * [0,0,0,0] + */ + uint8[16] memory board1 = [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0]; + assertTrue(Board.validateStartPosition(boardArrayToBits(board1))); + + // Move: UP + /** + * [0,0,4,0] + * [0,0,0,0] + * [0,0,0,0] + * [0,0,0,0] + */ + uint8[16] memory expectedResultUp = [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](15); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultUp[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultUp[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint128 result = Board.processMove(boardArrayToBits(board1), Board.UP, seed); + assertEq(boardArrayToBits(expectedResultUp), result); + } + + function testValidateProcessMovesUpComplexMerges() public pure { + /** + * [2,4,1,0] + * [3,2,0,0] + * [1,2,1,0] + * [0,0,0,0] + */ + uint8[16] memory board1 = [2, 4, 1, 0, 3, 2, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0]; + + // Move: UP + /** + * [2,4,2,0] + * [3,3,0,0] + * [1,0,0,0] + * [0,0,0,0] + */ + uint8[16] memory expectedResultUp = [2, 4, 2, 0, 3, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](10); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultUp[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultUp[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.UP, seed); + assertEq(boardArrayToBits(expectedResultUp), result); + } + + function testValidateProcessMovesUpComplexNoMerges() public pure { + /** + * [0,0,0,0] + * [0,0,1,4] + * [0,0,3,2] + * [0,1,2,1] + */ + uint8[16] memory board1 = [0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 3, 2, 0, 1, 2, 1]; + + // Move: UP + /** + * [0,1,1,4] + * [0,0,3,2] + * [0,0,2,1] + * [0,0,0,0] + */ + uint8[16] memory expectedResultUp = [0, 1, 1, 4, 0, 0, 3, 2, 0, 0, 2, 1, 0, 0, 0, 0]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](9); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultUp[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultUp[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.UP, seed); + assertEq(boardArrayToBits(expectedResultUp), result); + } + + function testValidateProcessMovesDownSimple() public pure { + /** + * [0,0,0,0] + * [2,0,0,0] + * [0,0,2,0] + * [0,0,0,0] + */ + uint8[16] memory board1 = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]; + assertTrue(Board.validateStartPosition(boardArrayToBits(board1))); + + // Move: DOWN + /** + * [0,0,0,0] + * [0,0,0,0] + * [0,0,0,0] + * [2,0,2,0] + */ + uint8[16] memory expectedResultDown = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](14); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultDown[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultDown[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.DOWN, seed); + assertEq(boardArrayToBits(expectedResultDown), result); + } + + function testValidateProcessMovesDownComplexNoMerges() public pure { + /** + * [1,1,3,1] + * [0,2,0,2] + * [0,0,0,1] + * [0,0,0,0] + */ + uint8[16] memory board1 = [1, 1, 3, 1, 0, 2, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0]; + + // Move: DOWN + /** + * [0,0,0,0] + * [0,0,0,1] + * [0,1,0,2] + * [1,2,3,1] + */ + uint8[16] memory expectedResultDown = [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 1, 2, 3, 1]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](9); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultDown[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultDown[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.DOWN, seed); + assertEq(boardArrayToBits(expectedResultDown), result); + } + + function testValidateProcessMovesDownComplexMerges() public pure { + /** + * [0,0,1,1] + * [0,0,2,4] + * [2,1,3,2] + * [0,1,3,2] + */ + uint8[16] memory board1 = [0, 0, 1, 1, 0, 0, 2, 4, 2, 1, 3, 2, 0, 1, 3, 2]; + + // Move: DOWN + /** + * [0,0,0,0] + * [0,0,1,1] + * [0,0,2,4] + * [2,2,4,3] + */ + uint8[16] memory expectedResultDown = [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 4, 2, 2, 4, 3]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](8); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultDown[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultDown[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.DOWN, seed); + assertEq(boardArrayToBits(expectedResultDown), result); + } + + function testValidateProcessMovesRightSimple() public pure { + /** + * [0,0,0,0] + * [2,0,0,0] + * [0,0,2,0] + * [0,0,0,0] + */ + uint8[16] memory board1 = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]; + assertTrue(Board.validateStartPosition(boardArrayToBits(board1))); + + // Move: DOWN + /** + * [0,0,0,0] + * [0,0,0,2] + * [0,0,0,2] + * [0,0,0,0] + */ + uint8[16] memory expectedResultRight = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](14); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultRight[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultRight[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.RIGHT, seed); + assertEq(boardArrayToBits(expectedResultRight), result); + } + + function testValidateProcessMovesRightComplexNoMerges() public pure { + /** + * [1,2,0,1] + * [0,1,0,2] + * [0,0,0,1] + * [0,3,0,0] + */ + uint8[16] memory board1 = [1, 2, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0]; + + /** + * [0,1,2,1] + * [0,0,1,2] + * [0,0,0,1] + * [0,0,0,3] + */ + uint8[16] memory expectedResultRight = [0, 1, 2, 1, 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 3]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](9); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultRight[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultRight[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.RIGHT, seed); + assertEq(boardArrayToBits(expectedResultRight), result); + } + + function testValidateProcessMovesRightComplexMerges() public pure { + /** + * [1,1,3,1] + * [0,2,0,2] + * [0,0,0,1] + * [0,0,0,0] + */ + uint8[16] memory board1 = [1, 1, 3, 1, 0, 2, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0]; + + /** + * [0,2,3,1] + * [0,0,0,3] + * [0,0,0,1] + * [0,0,0,0] + */ + uint8[16] memory expectedResultRight = [0, 2, 3, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](11); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultRight[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultRight[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.RIGHT, seed); + assertEq(boardArrayToBits(expectedResultRight), result); + } + + function testValidateProcessMovesLeftSimple() public pure { + /** + * [0,0,0,0] + * [2,0,0,0] + * [0,0,2,0] + * [0,0,0,0] + */ + uint8[16] memory board1 = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]; + assertTrue(Board.validateStartPosition(boardArrayToBits(board1))); + + // Move: DOWN + /** + * [0,0,0,0] + * [2,0,0,0] + * [2,0,0,0] + * [0,0,0,0] + */ + uint8[16] memory expectedResultLeft = [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](14); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultLeft[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultLeft[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.LEFT, seed); + assertEq(boardArrayToBits(expectedResultLeft), result); + } + + function testValidateProcessMovesLeftComplexNoMerges() public pure { + /** + * [1,2,0,1] + * [0,1,0,2] + * [0,0,0,1] + * [0,3,0,0] + */ + uint8[16] memory board1 = [1, 2, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0]; + + /** + * [1,2,1,0] + * [1,2,0,0] + * [1,0,0,0] + * [3,0,0,0] + */ + uint8[16] memory expectedResultLeft = [1, 2, 1, 0, 1, 2, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](9); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultLeft[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultLeft[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.LEFT, seed); + assertEq(boardArrayToBits(expectedResultLeft), result); + } + + function testValidateProcessMovesLeftComplexMerges() public pure { + /** + * [1,1,3,1] + * [0,2,0,2] + * [0,0,0,1] + * [0,0,0,0] + */ + uint8[16] memory board1 = [1, 1, 3, 1, 0, 2, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0]; + + /** + * [2,3,1,0] + * [3,0,0,0] + * [1,0,0,0] + * [0,0,0,0] + */ + uint8[16] memory expectedResultLeft = [2, 3, 1, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]; + + // Populate random tile. + uint256 seed = uint256(keccak256("random")); + uint8[] memory emptyIndices = new uint8[](11); + uint256 idx = 0; + for (uint8 i = 0; i < 16; i++) { + if (expectedResultLeft[i] == 0) { + emptyIndices[idx] = i; + idx++; + } + } + expectedResultLeft[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; + + uint256 result = Board.processMove(boardArrayToBits(board1), Board.LEFT, seed); + assertEq(boardArrayToBits(expectedResultLeft), result); + } + + function testCompressRow() public pure { + assertEq(Board.compress(0x00010001, false, true), 0x01010000); + assertEq(Board.compress(0x00020101, false, true), 0x02010100); + assertEq(Board.compress(0x02010201, false, true), 0x02010201); + assertEq(Board.compress(0x00010001, false, false), 0x00000101); + assertEq(Board.compress(0x00020101, false, false), 0x00020101); + assertEq(Board.compress(0x02010201, false, false), 0x02010201); + assertEq(Board.compress(0, false, true), 0); + assertEq(Board.compress(0, false, false), 0); + } + + function testMergeRowTiles() public pure { + assertEq(Board.merge(0x01010000, false, true), 0x02000000); + assertEq(Board.merge(0x02010100, false, true), 0x02020000); + assertEq(Board.merge(0x01000000, false, true), 0x01000000); + assertEq(Board.merge(0x00000101, false, false), 0x00000002); + assertEq(Board.merge(0x00020101, false, false), 0x00000202); + assertEq(Board.merge(0x00000001, false, false), 0x00000001); + assertEq(Board.merge(0, false, true), 0); + assertEq(Board.merge(0, false, false), 0); + } + + function testCompressColumn() public pure { + assertEq(Board.compress(0x00000001000000000000000000000001, true, true), 0x00000001000000010000000000000000); + assertEq(Board.compress(0x00000001000000000000000100000000, true, false), 0x00000000000000000000000100000001); + } + + function testMergeColumnTiles() public pure { + assertEq(Board.merge(0x00000001000000010000000000000000, true, true), 0x00000002000000000000000000000000); + assertEq(Board.merge(0x00000000000000000000000100000001, true, false), 0x00000000000000000000000000000002); + } + + //0x000000FF000000FF000000FF000000FF +} diff --git a/packages/contracts/test/Monad2048Test.t.sol b/packages/contracts/test/Monad2048Test.t.sol new file mode 100644 index 0000000..dd3f106 --- /dev/null +++ b/packages/contracts/test/Monad2048Test.t.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {Test, console} from "lib/forge-std/src/Test.sol"; +import {Monad2048} from "src/Monad2048.sol"; +import {Board} from "src/LibBoard.sol"; + +contract Monad2048Test is Test { + // Target game contract. + Monad2048 internal game; + + // Game player + address player; + + function setUp() public { + // Setup actors. + player = makeAddr("Player"); + + // Deploy game. + game = new Monad2048(); + } + + function testShowcase() public { + // Come up with a game ID. + bytes32 gameId = + bytes32((uint256(uint160(player)) << 96) + (uint256(keccak256(abi.encodePacked(player, "random"))) >> 160)); + + uint8[3] memory moves = [Board.UP, Board.DOWN, Board.RIGHT]; + uint128[4] memory boards; + + // The new tile on every move uses the seed `uint256(keccak256(abi.encodePacked(gameId, moveNumber)))` where moveNumber starts at `1`. + boards[0] = Board.getStartPosition(bytes32("random")); + boards[1] = Board.processMove(boards[0], moves[0], uint256(keccak256(abi.encodePacked(gameId, uint256(1))))); + boards[2] = Board.processMove(boards[1], moves[1], uint256(keccak256(abi.encodePacked(gameId, uint256(2))))); + boards[3] = Board.processMove(boards[2], moves[2], uint256(keccak256(abi.encodePacked(gameId, uint256(3))))); + + bytes32 gameHash = keccak256(abi.encodePacked(boards)); + + assertEq(game.gameHashOf(gameHash), bytes32(0)); + + // Start game by revealing commited boards. + vm.prank(player); + game.startGame(gameId, boards, moves); + + assertEq(game.gameHashOf(gameHash), gameId); + + assertEq(game.latestBoard(gameId), boards[3]); + + // Play move. + uint128 board4 = + Board.processMove(boards[3], Board.LEFT, uint256(keccak256(abi.encodePacked(gameId, uint256(4))))); + + // Submit move for validation. + vm.prank(player); + game.play(gameId, Board.LEFT, board4); + + assertEq(game.latestBoard(gameId), board4); + } + + function testLongerGame() public { + // Come up with a game ID. + bytes32 gameId = + bytes32((uint256(uint160(player)) << 96) + (uint256(keccak256(abi.encodePacked(player, "random"))) >> 160)); + + uint8[3] memory moves = [Board.UP, Board.DOWN, Board.RIGHT]; + uint128[4] memory boards; + + // The new tile on every move uses the seed `uint256(keccak256(abi.encodePacked(gameId, moveNumber)))` where moveNumber starts at `1`. + boards[0] = Board.getStartPosition(bytes32("random")); + boards[1] = Board.processMove(boards[0], moves[0], uint256(keccak256(abi.encodePacked(gameId, uint256(1))))); + boards[2] = Board.processMove(boards[1], moves[1], uint256(keccak256(abi.encodePacked(gameId, uint256(2))))); + boards[3] = Board.processMove(boards[2], moves[2], uint256(keccak256(abi.encodePacked(gameId, uint256(3))))); + + bytes32 gameHash = keccak256(abi.encodePacked(boards)); + assertEq(game.gameHashOf(gameHash), bytes32(0)); + + // Start game by revealing committed boards. + vm.prank(player); + game.startGame(gameId, boards, moves); + + uint128 boardState = boards[3]; + uint256 movesTotal = 4; + uint8[4] memory playMoves = [Board.DOWN, Board.LEFT, Board.UP, Board.RIGHT]; + bool gameOver; + while (!gameOver) { + assertEq(game.latestBoard(gameId), boardState); + + uint256 i = 0; + + // find move + while ( + i < 4 && boardState == Board.processMove(boardState, playMoves[i] <= Board.DOWN, playMoves[i] % 2 == 0) + ) { + i++; + } + + if (i < 4) { + boardState = Board.processMove( + boardState, playMoves[i], uint256(keccak256(abi.encodePacked(gameId, movesTotal++))) + ); + vm.prank(player); + game.play(gameId, playMoves[i], boardState); + } else { + gameOver = true; + } + } + } +} diff --git a/.env.local.example b/packages/frontend/.env.local.example similarity index 100% rename from .env.local.example rename to packages/frontend/.env.local.example diff --git a/packages/frontend/.gitignore b/packages/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/packages/frontend/.gitignore @@ -0,0 +1,24 @@ +# 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? diff --git a/LICENSE b/packages/frontend/LICENSE similarity index 100% rename from LICENSE rename to packages/frontend/LICENSE diff --git a/packages/frontend/README.md b/packages/frontend/README.md new file mode 100644 index 0000000..4a2d38f --- /dev/null +++ b/packages/frontend/README.md @@ -0,0 +1,26 @@ +# Monad 2048 Frontend + +**Check out a full writeup of how we built this [here](https://blog.monad.xyz/blog/build-2048).** + +Credits: [2048](https://github.com/gabrielecirulli/2048) + +`Monad 2048` is a fully on-chain game implementation of the popular sliding puzzle game 2048. This game connects with a smart contract +on [Monad testnet](https://testnet.monad.xyz/) and records every game and every move on-chain. + +## Development + +Clone the repo and run the following to install dependencies: + +```bash +bun install +``` + +Set the environment variables in your `.env.local` file (see `.env.local.example`). Then run the following to run the game locally: + +```bash +bun dev +``` + +## Feedback + +Please open issues or PRs on this repository for any feedback. diff --git a/components.json b/packages/frontend/components.json similarity index 100% rename from components.json rename to packages/frontend/components.json diff --git a/eslint.config.js b/packages/frontend/eslint.config.js similarity index 100% rename from eslint.config.js rename to packages/frontend/eslint.config.js diff --git a/index.html b/packages/frontend/index.html similarity index 100% rename from index.html rename to packages/frontend/index.html diff --git a/packages/frontend/package.json b/packages/frontend/package.json new file mode 100644 index 0000000..26b476e --- /dev/null +++ b/packages/frontend/package.json @@ -0,0 +1,44 @@ +{ + "name": "frontend", + "private": true, + "version": "1.0.0", + "description": "Frontend for onchain 2048 game", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@privy-io/react-auth": "^2.8.2", + "@radix-ui/react-alert-dialog": "^1.1.11", + "@radix-ui/react-slot": "^1.2.0", + "@tailwindcss/vite": "^4.0.17", + "@types/node": "^22.13.14", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.484.0", + "next-themes": "^0.4.6", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "sonner": "^2.0.3", + "tailwind-merge": "^3.0.2", + "tailwindcss": "^4.0.17", + "tw-animate-css": "^1.2.4", + "viem": "2.43.0" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react-swc": "^3.8.0", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "typescript": "~5.7.2", + "typescript-eslint": "^8.24.1", + "vite": "^6.2.0" + } +} diff --git a/public/monad-logo.svg b/packages/frontend/public/monad-logo.svg similarity index 100% rename from public/monad-logo.svg rename to packages/frontend/public/monad-logo.svg diff --git a/src/App.tsx b/packages/frontend/src/App.tsx similarity index 100% rename from src/App.tsx rename to packages/frontend/src/App.tsx diff --git a/src/components/Board.tsx b/packages/frontend/src/components/Board.tsx similarity index 100% rename from src/components/Board.tsx rename to packages/frontend/src/components/Board.tsx diff --git a/src/components/Container.tsx b/packages/frontend/src/components/Container.tsx similarity index 100% rename from src/components/Container.tsx rename to packages/frontend/src/components/Container.tsx diff --git a/src/components/FaucetDialog.tsx b/packages/frontend/src/components/FaucetDialog.tsx similarity index 100% rename from src/components/FaucetDialog.tsx rename to packages/frontend/src/components/FaucetDialog.tsx diff --git a/src/components/FunPurpleButton.tsx b/packages/frontend/src/components/FunPurpleButton.tsx similarity index 100% rename from src/components/FunPurpleButton.tsx rename to packages/frontend/src/components/FunPurpleButton.tsx diff --git a/src/components/LoginButton.tsx b/packages/frontend/src/components/LoginButton.tsx similarity index 100% rename from src/components/LoginButton.tsx rename to packages/frontend/src/components/LoginButton.tsx diff --git a/src/components/NetworkToggle.tsx b/packages/frontend/src/components/NetworkToggle.tsx similarity index 100% rename from src/components/NetworkToggle.tsx rename to packages/frontend/src/components/NetworkToggle.tsx diff --git a/src/components/Scorecard.tsx b/packages/frontend/src/components/Scorecard.tsx similarity index 100% rename from src/components/Scorecard.tsx rename to packages/frontend/src/components/Scorecard.tsx diff --git a/src/components/ui/alert-dialog.tsx b/packages/frontend/src/components/ui/alert-dialog.tsx similarity index 100% rename from src/components/ui/alert-dialog.tsx rename to packages/frontend/src/components/ui/alert-dialog.tsx diff --git a/src/components/ui/alert.tsx b/packages/frontend/src/components/ui/alert.tsx similarity index 100% rename from src/components/ui/alert.tsx rename to packages/frontend/src/components/ui/alert.tsx diff --git a/src/components/ui/button.tsx b/packages/frontend/src/components/ui/button.tsx similarity index 100% rename from src/components/ui/button.tsx rename to packages/frontend/src/components/ui/button.tsx diff --git a/src/components/ui/card.tsx b/packages/frontend/src/components/ui/card.tsx similarity index 100% rename from src/components/ui/card.tsx rename to packages/frontend/src/components/ui/card.tsx diff --git a/src/components/ui/sonner.tsx b/packages/frontend/src/components/ui/sonner.tsx similarity index 100% rename from src/components/ui/sonner.tsx rename to packages/frontend/src/components/ui/sonner.tsx diff --git a/src/contexts/NetworkContext.tsx b/packages/frontend/src/contexts/NetworkContext.tsx similarity index 100% rename from src/contexts/NetworkContext.tsx rename to packages/frontend/src/contexts/NetworkContext.tsx diff --git a/src/hooks/useTransactions.tsx b/packages/frontend/src/hooks/useTransactions.tsx similarity index 100% rename from src/hooks/useTransactions.tsx rename to packages/frontend/src/hooks/useTransactions.tsx diff --git a/src/index.css b/packages/frontend/src/index.css similarity index 100% rename from src/index.css rename to packages/frontend/src/index.css diff --git a/src/main.tsx b/packages/frontend/src/main.tsx similarity index 100% rename from src/main.tsx rename to packages/frontend/src/main.tsx diff --git a/src/utils/client.ts b/packages/frontend/src/utils/client.ts similarity index 100% rename from src/utils/client.ts rename to packages/frontend/src/utils/client.ts diff --git a/src/utils/constants.ts b/packages/frontend/src/utils/constants.ts similarity index 100% rename from src/utils/constants.ts rename to packages/frontend/src/utils/constants.ts diff --git a/src/utils/fetch.ts b/packages/frontend/src/utils/fetch.ts similarity index 100% rename from src/utils/fetch.ts rename to packages/frontend/src/utils/fetch.ts diff --git a/src/vite-env.d.ts b/packages/frontend/src/vite-env.d.ts similarity index 100% rename from src/vite-env.d.ts rename to packages/frontend/src/vite-env.d.ts diff --git a/tsconfig.app.json b/packages/frontend/tsconfig.app.json similarity index 100% rename from tsconfig.app.json rename to packages/frontend/tsconfig.app.json diff --git a/tsconfig.json b/packages/frontend/tsconfig.json similarity index 100% rename from tsconfig.json rename to packages/frontend/tsconfig.json diff --git a/tsconfig.node.json b/packages/frontend/tsconfig.node.json similarity index 100% rename from tsconfig.node.json rename to packages/frontend/tsconfig.node.json diff --git a/vite.config.ts b/packages/frontend/vite.config.ts similarity index 100% rename from vite.config.ts rename to packages/frontend/vite.config.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4bf9f43..5275378 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,23 +6,27 @@ settings: importers: - .: + .: {} + + packages/contracts: {} + + packages/frontend: dependencies: '@privy-io/react-auth': specifier: ^2.8.2 - version: 2.25.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(@types/react@19.2.7)(bs58@6.0.0)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) + version: 2.25.0(@solana/kit@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(@types/react@19.2.9)(bs58@6.0.0)(bufferutil@4.1.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76) '@radix-ui/react-alert-dialog': specifier: ^1.1.11 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@radix-ui/react-slot': specifier: ^1.2.0 - version: 1.2.4(@types/react@19.2.7)(react@19.2.3) + version: 1.2.4(@types/react@19.2.9)(react@19.2.3) '@tailwindcss/vite': specifier: ^4.0.17 - version: 4.1.18(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)) + version: 4.1.18(vite@6.4.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)) '@types/node': specifier: ^22.13.14 - version: 22.19.3 + version: 22.19.7 class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -62,13 +66,13 @@ importers: version: 9.39.2 '@types/react': specifier: ^19.0.10 - version: 19.2.7 + version: 19.2.9 '@types/react-dom': specifier: ^19.0.4 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.9) '@vitejs/plugin-react-swc': specifier: ^3.8.0 - version: 3.11.0(@swc/helpers@0.5.18)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)) + version: 3.11.0(@swc/helpers@0.5.18)(vite@6.4.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2)) eslint: specifier: ^9.21.0 version: 9.39.2(jiti@2.6.1) @@ -86,18 +90,18 @@ importers: version: 5.7.3 typescript-eslint: specifier: ^8.24.1 - version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) + version: 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) vite: specifier: ^6.2.0 - version: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2) + version: 6.4.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2) packages: '@adraffy/ens-normalize@1.11.1': resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} '@base-org/account@1.1.1': @@ -106,20 +110,20 @@ packages: '@base-org/account@2.4.0': resolution: {integrity: sha512-A4Umpi8B9/pqR78D1Yoze4xHyQaujioVRqqO3d6xuDFw9VRtjg6tK3bPlwE0aW+nVH/ntllCpPa2PbI8Rnjcug==} - '@coinbase/cdp-sdk@1.40.1': - resolution: {integrity: sha512-VZxAUYvWbqM4gw/ZHyr9fKBlCAKdMbBQzJxpV9rMUNkdulHIrj0cko2Mw3dyVyw+gdT62jAVxzVkPuQTRnECLw==} + '@coinbase/cdp-sdk@1.43.1': + resolution: {integrity: sha512-3eXP24p5q68agRgu8grGlF+ASidf3xYSDQtdRuDOFCMZafbqANsjl/JxLwYDmUenRodhxBBJgYJ65nOALP58tA==} '@coinbase/wallet-sdk@4.3.2': resolution: {integrity: sha512-hOLA2YONq8Z9n8f6oVP6N//FEEHOen7nq+adG/cReol6juFTHUelVN5GnA5zTIxiLFMDcrhDwwgCA6Tdb5jubw==} - '@emotion/is-prop-valid@1.2.2': - resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} + '@emotion/is-prop-valid@1.4.0': + resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} - '@emotion/memoize@0.8.1': - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - '@emotion/unitless@0.8.1': - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} @@ -277,8 +281,8 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -468,8 +472,8 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@lit-labs/ssr-dom-shim@1.5.0': - resolution: {integrity: sha512-HLomZXMmrCFHSRKESF5vklAKsDY7/fsT/ZhqCu3V0UoW/Qbv8wxmO4W9bx4KnCCF2Zak4yuk+AGraK/bPmI4kA==} + '@lit-labs/ssr-dom-shim@1.5.1': + resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==} '@lit/react@1.0.8': resolution: {integrity: sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw==} @@ -841,182 +845,199 @@ packages: '@reown/appkit-common@1.7.8': resolution: {integrity: sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ==} - '@reown/appkit-common@1.8.15': - resolution: {integrity: sha512-swDeGli08KQWB2nkFB5a61IEAfaM5AeDwp5inzlsfW1lHOwS5uO052nacr6wQCCKEp9aWojdEScwnk3qiVFNjQ==} + '@reown/appkit-common@1.8.17': + resolution: {integrity: sha512-sccDeSyzP+Bttyp63Wir8Ark/BPi+eenw8/SY2KFkmKh4D/s3MLVTQMLi+zxZYQG2eFlOF1LcGJf2uYFvTXcgA==} '@reown/appkit-controllers@1.7.8': resolution: {integrity: sha512-IdXlJlivrlj6m63VsGLsjtPHHsTWvKGVzWIP1fXZHVqmK+rZCBDjCi9j267Rb9/nYRGHWBtlFQhO8dK35WfeDA==} - '@reown/appkit-controllers@1.8.15': - resolution: {integrity: sha512-aCzA8yGQbicLRjU62is+viuVFl2dvpZVnLPG0/2eQbFkCZsawCldbFPfviiTuDsBx7o1pG90Q5rC6LgYoVWA0w==} + '@reown/appkit-controllers@1.8.17': + resolution: {integrity: sha512-cUZitQRj/jmFKMxWoPnLPT2ki2SAyYMp4xSmPRKu6XO/OGKSbGa3qKkghDBJ+dJJSDXDywn6Vs98RG0o+V48UA==} '@reown/appkit-pay@1.7.8': resolution: {integrity: sha512-OSGQ+QJkXx0FEEjlpQqIhT8zGJKOoHzVnyy/0QFrl3WrQTjCzg0L6+i91Ad5Iy1zb6V5JjqtfIFpRVRWN4M3pw==} - '@reown/appkit-pay@1.8.15': - resolution: {integrity: sha512-4byUi+/TBLFbwvgtBjT01zyLo5sAmn8bcOvOp+NpI0UMTWgl2oNbRLVSzPGak3YXBLxiDCdxhnbbA0wqWFPM0A==} + '@reown/appkit-pay@1.8.17': + resolution: {integrity: sha512-+8XEysiNQqB4SVkCHCcoS2raUVPRMGbNMERTbbJLWY7mA/XzaX0PPSGoRm1omqQH5oUYhNwYFnHyEsM8K2t5KA==} '@reown/appkit-polyfills@1.7.8': resolution: {integrity: sha512-W/kq786dcHHAuJ3IV2prRLEgD/2iOey4ueMHf1sIFjhhCGMynMkhsOhQMUH0tzodPqUgAC494z4bpIDYjwWXaA==} - '@reown/appkit-polyfills@1.8.15': - resolution: {integrity: sha512-IDq57jf/a//meerJ7Zl7TG9jxpiQ3dJexv68SlzWWUow0DtDd0TMgykofUq5gzBLZBoFexbHyPZih/ylhScVPg==} + '@reown/appkit-polyfills@1.8.17': + resolution: {integrity: sha512-m46ybIDewkGN+1V+po4+OfxnMkzmBOOch58k8Xo0RuWzfAvDZp7XvXClJvdX4kHpW3Olsq1EgRJYoaW5zCDetQ==} '@reown/appkit-scaffold-ui@1.7.8': resolution: {integrity: sha512-RCeHhAwOrIgcvHwYlNWMcIDibdI91waaoEYBGw71inE0kDB8uZbE7tE6DAXJmDkvl0qPh+DqlC4QbJLF1FVYdQ==} - '@reown/appkit-scaffold-ui@1.8.15': - resolution: {integrity: sha512-fqsVbeoJfiTAAGYOkYzm3T//5HKgtX4gSa3GgYdw7nlJeEYEWtw59z3tZV2Wc0+ym+MhLQNsOBO+pllF6oBFgw==} + '@reown/appkit-scaffold-ui@1.8.17': + resolution: {integrity: sha512-+P+G1uo5k6psLp/U/JFijPRSgw6duECrvIVYS820+RcZvUg7qPa7Pq22sPfqp09oCXnzqO43ac1quM+paklZBA==} '@reown/appkit-ui@1.7.8': resolution: {integrity: sha512-1hjCKjf6FLMFzrulhl0Y9Vb9Fu4royE+SXCPSWh4VhZhWqlzUFc7kutnZKx8XZFVQH4pbBvY62SpRC93gqoHow==} - '@reown/appkit-ui@1.8.15': - resolution: {integrity: sha512-TDyv3Sn1LMumfbibPjoA8fYs2jeIrgSLQf9aVk6Nc5jc3gYFWW7wrtU5l1SLSlDJR/w8/13GUQuVQNfaGSfj4A==} + '@reown/appkit-ui@1.8.17': + resolution: {integrity: sha512-F8rcebyN0GQaUIKwpzziS0sFb4IARPVHZiRHugFkXAgZRop9LgvJ/4VvT70UJQCrwTbdZNVjmscR2tk98s1eDA==} '@reown/appkit-utils@1.7.8': resolution: {integrity: sha512-8X7UvmE8GiaoitCwNoB86pttHgQtzy4ryHZM9kQpvjQ0ULpiER44t1qpVLXNM4X35O0v18W0Dk60DnYRMH2WRw==} peerDependencies: valtio: 1.13.2 - '@reown/appkit-utils@1.8.15': - resolution: {integrity: sha512-T5MEg7aZ4rOFsKfIQKe83dRPalLtQr6AlsWokZmJpN/bq/sOB8kUvNlOju7drsMAcoWRYSVnXFMYNBqNVymMBg==} + '@reown/appkit-utils@1.8.17': + resolution: {integrity: sha512-Gmi5EjqB0VpvjMQSTsBcM9me+yADQap1OC8Hxhz353hgwti2PKDmmh0qQDUnKr1RMDljD6AHrqOd7U5hTPUi2g==} peerDependencies: valtio: 2.1.7 '@reown/appkit-wallet@1.7.8': resolution: {integrity: sha512-kspz32EwHIOT/eg/ZQbFPxgXq0B/olDOj3YMu7gvLEFz4xyOFd/wgzxxAXkp5LbG4Cp++s/elh79rVNmVFdB9A==} - '@reown/appkit-wallet@1.8.15': - resolution: {integrity: sha512-Ui6bfYU6ENDzR1dmKq3Oj+FhxKiFmLHFGTT915BWJrqOSqET4Kku4OIRLIqshzm8ohdsPTdyazZbaTRErYi3iA==} + '@reown/appkit-wallet@1.8.17': + resolution: {integrity: sha512-khuQqHGtCyKSTUlcCnB1Evy1ZLmrU5cUXjP6/zrFYW3m+THnNfr+w6Tp49OfnW1wYsoe53GHzlgTuGASwXYloQ==} '@reown/appkit@1.7.8': resolution: {integrity: sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA==} - '@reown/appkit@1.8.15': - resolution: {integrity: sha512-eO3lcZvXwkcBZqpV+7InlzbLddP/wIJjaqbzlyCJAb0PfQ6fY40etiVpK38eFEDX1WGEYOvhKVO6aMgZtaO2lg==} + '@reown/appkit@1.8.17': + resolution: {integrity: sha512-svov4ShvEi4YboVe+kXT8xGQvDrYsgQBrBmccOel9nT7/lOEDUimFu5Irna8g/8Zji9/XbRrYi49cLPJrzd45Q==} '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@rollup/rollup-android-arm-eabi@4.54.0': - resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} + '@rollup/rollup-android-arm-eabi@4.55.3': + resolution: {integrity: sha512-qyX8+93kK/7R5BEXPC2PjUt0+fS/VO2BVHjEHyIEWiYn88rcRBHmdLgoJjktBltgAf+NY7RfCGB1SoyKS/p9kg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.54.0': - resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} + '@rollup/rollup-android-arm64@4.55.3': + resolution: {integrity: sha512-6sHrL42bjt5dHQzJ12Q4vMKfN+kUnZ0atHHnv4V0Wd9JMTk7FDzSY35+7qbz3ypQYMBPANbpGK7JpnWNnhGt8g==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.54.0': - resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} + '@rollup/rollup-darwin-arm64@4.55.3': + resolution: {integrity: sha512-1ht2SpGIjEl2igJ9AbNpPIKzb1B5goXOcmtD0RFxnwNuMxqkR6AUaaErZz+4o+FKmzxcSNBOLrzsICZVNYa1Rw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.54.0': - resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} + '@rollup/rollup-darwin-x64@4.55.3': + resolution: {integrity: sha512-FYZ4iVunXxtT+CZqQoPVwPhH7549e/Gy7PIRRtq4t5f/vt54pX6eG9ebttRH6QSH7r/zxAFA4EZGlQ0h0FvXiA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.54.0': - resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} + '@rollup/rollup-freebsd-arm64@4.55.3': + resolution: {integrity: sha512-M/mwDCJ4wLsIgyxv2Lj7Len+UMHd4zAXu4GQ2UaCdksStglWhP61U3uowkaYBQBhVoNpwx5Hputo8eSqM7K82Q==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.54.0': - resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} + '@rollup/rollup-freebsd-x64@4.55.3': + resolution: {integrity: sha512-5jZT2c7jBCrMegKYTYTpni8mg8y3uY8gzeq2ndFOANwNuC/xJbVAoGKR9LhMDA0H3nIhvaqUoBEuJoICBudFrA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.54.0': - resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.55.3': + resolution: {integrity: sha512-YeGUhkN1oA+iSPzzhEjVPS29YbViOr8s4lSsFaZKLHswgqP911xx25fPOyE9+khmN6W4VeM0aevbDp4kkEoHiA==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.54.0': - resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} + '@rollup/rollup-linux-arm-musleabihf@4.55.3': + resolution: {integrity: sha512-eo0iOIOvcAlWB3Z3eh8pVM8hZ0oVkK3AjEM9nSrkSug2l15qHzF3TOwT0747omI6+CJJvl7drwZepT+re6Fy/w==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.54.0': - resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} + '@rollup/rollup-linux-arm64-gnu@4.55.3': + resolution: {integrity: sha512-DJay3ep76bKUDImmn//W5SvpjRN5LmK/ntWyeJs/dcnwiiHESd3N4uteK9FDLf0S0W8E6Y0sVRXpOCoQclQqNg==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.54.0': - resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} + '@rollup/rollup-linux-arm64-musl@4.55.3': + resolution: {integrity: sha512-BKKWQkY2WgJ5MC/ayvIJTHjy0JUGb5efaHCUiG/39sSUvAYRBaO3+/EK0AZT1RF3pSj86O24GLLik9mAYu0IJg==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.54.0': - resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} + '@rollup/rollup-linux-loong64-gnu@4.55.3': + resolution: {integrity: sha512-Q9nVlWtKAG7ISW80OiZGxTr6rYtyDSkauHUtvkQI6TNOJjFvpj4gcH+KaJihqYInnAzEEUetPQubRwHef4exVg==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.54.0': - resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} + '@rollup/rollup-linux-loong64-musl@4.55.3': + resolution: {integrity: sha512-2H5LmhzrpC4fFRNwknzmmTvvyJPHwESoJgyReXeFoYYuIDfBhP29TEXOkCJE/KxHi27mj7wDUClNq78ue3QEBQ==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.55.3': + resolution: {integrity: sha512-9S542V0ie9LCTznPYlvaeySwBeIEa7rDBgLHKZ5S9DBgcqdJYburabm8TqiqG6mrdTzfV5uttQRHcbKff9lWtA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.54.0': - resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} + '@rollup/rollup-linux-ppc64-musl@4.55.3': + resolution: {integrity: sha512-ukxw+YH3XXpcezLgbJeasgxyTbdpnNAkrIlFGDl7t+pgCxZ89/6n1a+MxlY7CegU+nDgrgdqDelPRNQ/47zs0g==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.55.3': + resolution: {integrity: sha512-Iauw9UsTTvlF++FhghFJjqYxyXdggXsOqGpFBylaRopVpcbfyIIsNvkf9oGwfgIcf57z3m8+/oSYTo6HutBFNw==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.54.0': - resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} + '@rollup/rollup-linux-riscv64-musl@4.55.3': + resolution: {integrity: sha512-3OqKAHSEQXKdq9mQ4eajqUgNIK27VZPW3I26EP8miIzuKzCJ3aW3oEn2pzF+4/Hj/Moc0YDsOtBgT5bZ56/vcA==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.54.0': - resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} + '@rollup/rollup-linux-s390x-gnu@4.55.3': + resolution: {integrity: sha512-0CM8dSVzVIaqMcXIFej8zZrSFLnGrAE8qlNbbHfTw1EEPnFTg1U1ekI0JdzjPyzSfUsHWtodilQQG/RA55berA==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.54.0': - resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} + '@rollup/rollup-linux-x64-gnu@4.55.3': + resolution: {integrity: sha512-+fgJE12FZMIgBaKIAGd45rxf+5ftcycANJRWk8Vz0NnMTM5rADPGuRFTYar+Mqs560xuART7XsX2lSACa1iOmQ==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.54.0': - resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} + '@rollup/rollup-linux-x64-musl@4.55.3': + resolution: {integrity: sha512-tMD7NnbAolWPzQlJQJjVFh/fNH3K/KnA7K8gv2dJWCwwnaK6DFCYST1QXYWfu5V0cDwarWC8Sf/cfMHniNq21A==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openharmony-arm64@4.54.0': - resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} + '@rollup/rollup-openbsd-x64@4.55.3': + resolution: {integrity: sha512-u5KsqxOxjEeIbn7bUK1MPM34jrnPwjeqgyin4/N6e/KzXKfpE9Mi0nCxcQjaM9lLmPcHmn/xx1yOjgTMtu1jWQ==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.55.3': + resolution: {integrity: sha512-vo54aXwjpTtsAnb3ca7Yxs9t2INZg7QdXN/7yaoG7nPGbOBXYXQY41Km+S1Ov26vzOAzLcAjmMdjyEqS1JkVhw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.54.0': - resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} + '@rollup/rollup-win32-arm64-msvc@4.55.3': + resolution: {integrity: sha512-HI+PIVZ+m+9AgpnY3pt6rinUdRYrGHvmVdsNQ4odNqQ/eRF78DVpMR7mOq7nW06QxpczibwBmeQzB68wJ+4W4A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.54.0': - resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} + '@rollup/rollup-win32-ia32-msvc@4.55.3': + resolution: {integrity: sha512-vRByotbdMo3Wdi+8oC2nVxtc3RkkFKrGaok+a62AT8lz/YBuQjaVYAS5Zcs3tPzW43Vsf9J0wehJbUY5xRSekA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.54.0': - resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} + '@rollup/rollup-win32-x64-gnu@4.55.3': + resolution: {integrity: sha512-POZHq7UeuzMJljC5NjKi8vKMFN6/5EOqcX1yGntNLp7rUTpBAXQ1hW8kWPFxYLv07QMcNM75xqVLGPWQq6TKFA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.54.0': - resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} + '@rollup/rollup-win32-x64-msvc@4.55.3': + resolution: {integrity: sha512-aPFONczE4fUFKNXszdvnd2GqKEYQdV5oEsIbKPujJmWlCI9zEsv1Otig8RKK+X9bed9gFUN6LAeN4ZcNuu4zjg==} cpu: [x64] os: [win32] @@ -1061,33 +1082,42 @@ packages: resolution: {integrity: sha512-tGSRP1QvsAvsJmnOlRQyw/mvK9gnPtjEc5fg2+m8n+QUa+D7rvrKkOYyfpy42GTs90X3RDOnqJgfHt+qO67/+w==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - '@solana-program/system@0.8.1': - resolution: {integrity: sha512-71U9Mzdpw8HQtfgfJSL5xKZbLMRnza2Llsfk7gGnmg2waqK+o8MMH4YNma8xXS1UmOBptXIiNvoZ3p7cmOVktg==} + '@solana-program/system@0.10.0': + resolution: {integrity: sha512-Go+LOEZmqmNlfr+Gjy5ZWAdY5HbYzk2RBewD9QinEU/bBSzpFfzqDRT55JjFRBGJUvMgf3C2vfXEGT4i8DSI4g==} peerDependencies: - '@solana/kit': ^3.0 + '@solana/kit': ^5.0 - '@solana-program/token@0.6.0': - resolution: {integrity: sha512-omkZh4Tt9rre4wzWHNOhOEHyenXQku3xyc/UrKvShexA/Qlhza67q7uRwmwEDUs4QqoDBidSZPooOmepnA/jig==} + '@solana-program/token@0.9.0': + resolution: {integrity: sha512-vnZxndd4ED4Fc56sw93cWZ2djEeeOFxtaPS8SPf5+a+JZjKA/EnKqzbE1y04FuMhIVrLERQ8uR8H2h72eZzlsA==} peerDependencies: - '@solana/kit': ^3.0 + '@solana/kit': ^5.0 - '@solana/accounts@3.0.3': - resolution: {integrity: sha512-KqlePrlZaHXfu8YQTCxN204ZuVm9o68CCcUr6l27MG2cuRUtEM1Ta0iR8JFkRUAEfZJC4Cu0ZDjK/v49loXjZQ==} + '@solana/accounts@5.4.0': + resolution: {integrity: sha512-qHtAtwCcCFTXcya6JOOG1nzYicivivN/JkcYNHr10qOp9b4MVRkfW1ZAAG1CNzjMe5+mwtEl60RwdsY9jXNb+Q==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/addresses@3.0.3': - resolution: {integrity: sha512-AuMwKhJI89ANqiuJ/fawcwxNKkSeHH9CApZd2xelQQLS7X8uxAOovpcmEgiObQuiVP944s9ScGUT62Bdul9qYg==} + '@solana/addresses@5.4.0': + resolution: {integrity: sha512-YRHiH30S8qDV4bZ+mtEk589PGfBuXHzD/fK2Z+YI5f/+s+yi/5le/fVw7PN6LxnnmVQKiRCDUiNF+WmFFKi6QQ==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/assertions@3.0.3': - resolution: {integrity: sha512-2qspxdbWp2y62dfCIlqeWQr4g+hE8FYSSwcaP6itwMwGRb8393yDGCJfI/znuzJh6m/XVWhMHIgFgsBwnevCmg==} + '@solana/assertions@5.4.0': + resolution: {integrity: sha512-8EP7mkdnrPc9y67FqWeAPzdWq2qAOkxsuo+ZBIXNWtIixDtXIdHrgjZ/wqbWxLgSTtXEfBCjpZU55Xw2Qfbwyg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true '@solana/buffer-layout@4.0.1': resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} @@ -1099,17 +1129,23 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-core@3.0.3': - resolution: {integrity: sha512-emKykJ3h1DmnDOY29Uv9eJXP8E/FHzvlUBJ6te+5EbKdFjj7vdlKYPfDxOI6iGdXTY+YC/ELtbNBh6QwF2uEDQ==} + '@solana/codecs-core@5.4.0': + resolution: {integrity: sha512-rQ5jXgiDe2vIU+mYCHDjgwMd9WdzZfh4sc5H6JgYleAUjeTUX6mx8hTV2+pcXvvn27LPrgrt9jfxswbDb8O8ww==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/codecs-data-structures@3.0.3': - resolution: {integrity: sha512-R15cLp8riJvToXziW8lP6AMSwsztGhEnwgyGmll32Mo0Yjq+hduW2/fJrA/TJs6tA/OgTzMQjlxgk009EqZHCw==} + '@solana/codecs-data-structures@5.4.0': + resolution: {integrity: sha512-LVssbdQ1GfY6upnxW3mufYsNfvTWKnHNk5Hx2gHuOYJhm3HZlp+Y8zvuoY65G1d1xAXkPz5YVGxaSeVIRWLGWg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true '@solana/codecs-numbers@2.3.0': resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} @@ -1117,24 +1153,35 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-numbers@3.0.3': - resolution: {integrity: sha512-pfXkH9J0glrM8qj6389GAn30+cJOxzXLR2FsPOHCUMXrqLhGjMMZAWhsQkpOQ37SGc/7EiQsT/gmyGC7gxHqJQ==} + '@solana/codecs-numbers@5.4.0': + resolution: {integrity: sha512-z6LMkY+kXWx1alrvIDSAxexY5QLhsso638CjM7XI1u6dB7drTLWKhifyjnm1vOQc1VPVFmbYxTgKKpds8TY8tg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/codecs-strings@3.0.3': - resolution: {integrity: sha512-VHBXnnTVtcQ1j+7Vrz+qSYo38no+jiHRdGnhFspRXEHNJbllzwKqgBE7YN3qoIXH+MKxgJUcwO5KHmdzf8Wn2A==} + '@solana/codecs-strings@5.4.0': + resolution: {integrity: sha512-w0trrjfQDhkCVz7O1GTmHBk9m+MkljKx2uNBbQAD3/yW2Qn9dYiTrZ1/jDVq0/+lPPAUkbT3s3Yo7HUZ2QFmHw==} engines: {node: '>=20.18.0'} peerDependencies: fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + fastestsmallesttextencoderdecoder: + optional: true + typescript: + optional: true - '@solana/codecs@3.0.3': - resolution: {integrity: sha512-GOHwTlIQsCoJx9Ryr6cEf0FHKAQ7pY4aO4xgncAftrv0lveTQ1rPP2inQ1QT0gJllsIa8nwbfXAADs9nNJxQDA==} + '@solana/codecs@5.4.0': + resolution: {integrity: sha512-IbDCUvNX0MrkQahxiXj9rHzkd/fYfp1F2nTJkHGH8v+vPfD+YPjl007ZBM38EnCeXj/Xn+hxqBBivPvIHP29dA==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true '@solana/errors@2.3.0': resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} @@ -1143,181 +1190,285 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/errors@3.0.3': - resolution: {integrity: sha512-1l84xJlHNva6io62PcYfUamwWlc0eM95nHgCrKX0g0cLoC6D6QHYPCEbEVkR+C5UtP9JDgyQM8MFiv+Ei5tO9Q==} + '@solana/errors@5.4.0': + resolution: {integrity: sha512-hNoAOmlZAszaVBrAy1Jf7amHJ8wnUnTU0BqhNQXknbSvirvsYr81yEud2iq18YiCqhyJ9SuQ5kWrSAT0x7S0oA==} engines: {node: '>=20.18.0'} hasBin: true peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/fast-stable-stringify@3.0.3': - resolution: {integrity: sha512-ED0pxB6lSEYvg+vOd5hcuQrgzEDnOrURFgp1ZOY+lQhJkQU6xo+P829NcJZQVP1rdU2/YQPAKJKEseyfe9VMIw==} + '@solana/fast-stable-stringify@5.4.0': + resolution: {integrity: sha512-KB7PUL7yalPvbWCezzyUDVRDp39eHLPH7OJ6S8VFT8YNIFUANwwj5ctui50Fim76kvSYDdYJOclXV45O2gfQ8Q==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/functional@3.0.3': - resolution: {integrity: sha512-2qX1kKANn8995vOOh5S9AmF4ItGZcfbny0w28Eqy8AFh+GMnSDN4gqpmV2LvxBI9HibXZptGH3RVOMk82h1Mpw==} + '@solana/functional@5.4.0': + resolution: {integrity: sha512-32ghHO0bg6GgX/7++0/7Lps6RgeXD2gKF1okiuyEGuVfKENIapgaQdcGhUwb3q6D6fv6MRAVn/Yve4jopGVNMQ==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/instruction-plans@3.0.3': - resolution: {integrity: sha512-eqoaPtWtmLTTpdvbt4BZF5H6FIlJtXi9H7qLOM1dLYonkOX2Ncezx5NDCZ9tMb2qxVMF4IocYsQnNSnMfjQF1w==} + '@solana/instruction-plans@5.4.0': + resolution: {integrity: sha512-5xbJ+I/pP2aWECmK75bEM1zCnIITlohAK83dVN+t5X2vBFrr6M9gifo8r4Opdnibsgo6QVVkKPxRo5zow5j0ig==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/instructions@3.0.3': - resolution: {integrity: sha512-4csIi8YUDb5j/J+gDzmYtOvq7ZWLbCxj4t0xKn+fPrBk/FD2pK29KVT3Fu7j4Lh1/ojunQUP9X4NHwUexY3PnA==} + '@solana/instructions@5.4.0': + resolution: {integrity: sha512-//a7jpHbNoAgTqy3YyqG1X6QhItJLKzJa6zuYJGCwaAAJye7BxS9pxJBgb2mUt7CGidhUksf+U8pmLlxCNWYyg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/keys@3.0.3': - resolution: {integrity: sha512-tp8oK9tMadtSIc4vF4aXXWkPd4oU5XPW8nf28NgrGDWGt25fUHIydKjkf2hPtMt9i1WfRyQZ33B5P3dnsNqcPQ==} + '@solana/keys@5.4.0': + resolution: {integrity: sha512-zQVbAwdoXorgXjlhlVTZaymFG6N8n1zn2NT+xI6S8HtbrKIB/42xPdXFh+zIihGzRw+9k8jzU7Axki/IPm6qWQ==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/kit@3.0.3': - resolution: {integrity: sha512-CEEhCDmkvztd1zbgADsEQhmj9GyWOOGeW1hZD+gtwbBSF5YN1uofS/pex5MIh/VIqKRj+A2UnYWI1V+9+q/lyQ==} + '@solana/kit@5.4.0': + resolution: {integrity: sha512-aVjN26jOEzJA6UBYxSTQciZPXgTxWnO/WysHrw+yeBL/5AaTZnXEgb4j5xV6cUFzOlVxhJBrx51xtoxSqJ0u3g==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/nominal-types@3.0.3': - resolution: {integrity: sha512-aZavCiexeUAoMHRQg4s1AHkH3wscbOb70diyfjhwZVgFz1uUsFez7csPp9tNFkNolnadVb2gky7yBk3IImQJ6A==} + '@solana/nominal-types@5.4.0': + resolution: {integrity: sha512-h4dTRQwTerzksE5B1WmObN6TvLo8dYUd7kpUUynGd8WJjK0zz3zkDhq0MkA3aF6A1C2C82BSGqSsN9EN0E6Exg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/options@3.0.3': - resolution: {integrity: sha512-jarsmnQ63RN0JPC5j9sgUat07NrL9PC71XU7pUItd6LOHtu4+wJMio3l5mT0DHVfkfbFLL6iI6+QmXSVhTNF3g==} + '@solana/offchain-messages@5.4.0': + resolution: {integrity: sha512-DjdlYJCcKfgh4dkdk+owH1bP+Q4BRqCs55mgWWp9PTwm/HHy/a5vcMtCi1GyIQXfhtNNvKBLbXrUE0Fxej8qlg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/programs@3.0.3': - resolution: {integrity: sha512-JZlVE3/AeSNDuH3aEzCZoDu8GTXkMpGXxf93zXLzbxfxhiQ/kHrReN4XE/JWZ/uGWbaFZGR5B3UtdN2QsoZL7w==} + '@solana/options@5.4.0': + resolution: {integrity: sha512-h4vTWRChEXPhaHo9i1pCyQBWWs+NqYPQRXSAApqpUYvHb9Kct/C6KbHjfyaRMyqNQnDHLcJCX7oW9tk0iRDzIg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/promises@3.0.3': - resolution: {integrity: sha512-K+UflGBVxj30XQMHTylHHZJdKH5QG3oj5k2s42GrZ/Wbu72oapVJySMBgpK45+p90t8/LEqV6rRPyTXlet9J+Q==} + '@solana/plugin-core@5.4.0': + resolution: {integrity: sha512-e1aLGLldW7C5113qTOjFYSGq95a4QC9TWb77iq+8l6h085DcNj+195r4E2zKaINrevQjQTwvxo00oUyHP7hSJA==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-api@3.0.3': - resolution: {integrity: sha512-Yym9/Ama62OY69rAZgbOCAy1QlqaWAyb0VlqFuwSaZV1pkFCCFSwWEJEsiN1n8pb2ZP+RtwNvmYixvWizx9yvA==} + '@solana/programs@5.4.0': + resolution: {integrity: sha512-Sc90WK9ZZ7MghOflIvkrIm08JwsFC99yqSJy28/K+hDP2tcx+1x+H6OFP9cumW9eUA1+JVRDeKAhA8ak7e/kUA==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-parsed-types@3.0.3': - resolution: {integrity: sha512-/koM05IM2fU91kYDQxXil3VBNlOfcP+gXE0js1sdGz8KonGuLsF61CiKB5xt6u1KEXhRyDdXYLjf63JarL4Ozg==} + '@solana/promises@5.4.0': + resolution: {integrity: sha512-23mfgNBbuP6Q+4vsixGy+GkyZ7wBLrxTBNXqrG/XWrJhjuuSkjEUGaK4Fx5o7LIrBi6KGqPknKxmTlvqnJhy2Q==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-spec-types@3.0.3': - resolution: {integrity: sha512-A6Jt8SRRetnN3CeGAvGJxigA9zYRslGgWcSjueAZGvPX+MesFxEUjSWZCfl+FogVFvwkqfkgQZQbPAGZQFJQ6Q==} + '@solana/rpc-api@5.4.0': + resolution: {integrity: sha512-FJL6KaAsQ4DhfhLKKMcqbTpToNFwHlABCemIpOunE3OSqJFDrmc/NbsEaLIoeHyIg3d1Imo49GIUOn2TEouFUA==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-spec@3.0.3': - resolution: {integrity: sha512-MZn5/8BebB6MQ4Gstw6zyfWsFAZYAyLzMK+AUf/rSfT8tPmWiJ/mcxnxqOXvFup/l6D67U8pyGpIoFqwCeZqqA==} + '@solana/rpc-parsed-types@5.4.0': + resolution: {integrity: sha512-IRQuSzx+Sj1A3XGiIzguNZlMjMMybXTTjV/RnTwBgnJQPd/H4us4pfPD94r+/yolWDVfGjJRm04hnKVMjJU8Rg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-subscriptions-api@3.0.3': - resolution: {integrity: sha512-MGgVK3PUS15qsjuhimpzGZrKD/CTTvS0mAlQ0Jw84zsr1RJVdQJK/F0igu07BVd172eTZL8d90NoAQ3dahW5pA==} + '@solana/rpc-spec-types@5.4.0': + resolution: {integrity: sha512-JU9hC5/iyJx30ym17gpoXDtT9rCbO6hLpB6UDhSFFoNeirxtTVb4OdnKtsjJDfXAiXsynJRsZRwfj3vGxRLgQw==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-subscriptions-channel-websocket@3.0.3': - resolution: {integrity: sha512-zUzUlb8Cwnw+SHlsLrSqyBRtOJKGc+FvSNJo/vWAkLShoV0wUDMPv7VvhTngJx3B/3ANfrOZ4i08i9QfYPAvpQ==} + '@solana/rpc-spec@5.4.0': + resolution: {integrity: sha512-XMhxBb1GuZ3Kaeu5WNHB5KteCQ/aVuMByZmUKPqaanD+gs5MQZr0g62CvN7iwRlFU7GC18Q73ROWR3/JjzbXTA==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' - ws: ^8.18.0 + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-subscriptions-spec@3.0.3': - resolution: {integrity: sha512-9KpQ32OBJWS85mn6q3gkM0AjQe1LKYlMU7gpJRrla/lvXxNLhI95tz5K6StctpUreVmRWTVkNamHE69uUQyY8A==} + '@solana/rpc-subscriptions-api@5.4.0': + resolution: {integrity: sha512-euAFIG6ruEsqK+MsrL1tGSMbbOumm8UAyGzlD/kmXsAqqhcVsSeZdv5+BMIHIBsQ93GHcloA8UYw1BTPhpgl9w==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-subscriptions@3.0.3': - resolution: {integrity: sha512-LRvz6NaqvtsYFd32KwZ+rwYQ9XCs+DWjV8BvBLsJpt9/NWSuHf/7Sy/vvP6qtKxut692H/TMvHnC4iulg0WmiQ==} + '@solana/rpc-subscriptions-channel-websocket@5.4.0': + resolution: {integrity: sha512-kWCmlW65MccxqXwKsIz+LkXUYQizgvBrrgYOkyclJHPa+zx4gqJjam87+wzvO9cfbDZRer3wtJBaRm61gTHNbw==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-transformers@3.0.3': - resolution: {integrity: sha512-lzdaZM/dG3s19Tsk4mkJA5JBoS1eX9DnD7z62gkDwrwJDkDBzkAJT9aLcsYFfTmwTfIp6uU2UPgGYc97i1wezw==} + '@solana/rpc-subscriptions-spec@5.4.0': + resolution: {integrity: sha512-ELaV9Z39GtKyUO0++he00ymWleb07QXYJhSfA0e1N5Q9hXu/Y366kgXHDcbZ/oUJkT3ylNgTupkrsdtiy8Ryow==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-transport-http@3.0.3': - resolution: {integrity: sha512-bIXFwr2LR5A97Z46dI661MJPbHnPfcShBjFzOS/8Rnr8P4ho3j/9EUtjDrsqoxGJT3SLWj5OlyXAlaDAvVTOUQ==} + '@solana/rpc-subscriptions@5.4.0': + resolution: {integrity: sha512-051t1CEjjAzM9ohjj2zb3ED70yeS3ZY8J5wSytL6tthTGImw/JB2a0D9DWMOKriFKt496n95IC+IdpJ35CpBWA==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc-types@3.0.3': - resolution: {integrity: sha512-petWQ5xSny9UfmC3Qp2owyhNU0w9SyBww4+v7tSVyXMcCC9v6j/XsqTeimH1S0qQUllnv0/FY83ohFaxofmZ6Q==} + '@solana/rpc-transformers@5.4.0': + resolution: {integrity: sha512-dZ8keYloLW+eRAwAPb471uWCFs58yHloLoI+QH0FulYpsSJ7F2BNWYcdnjSS/WiggsNcU6DhpWzYAzlEY66lGQ==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/rpc@3.0.3': - resolution: {integrity: sha512-3oukAaLK78GegkKcm6iNmRnO4mFeNz+BMvA8T56oizoBNKiRVEq/6DFzVX/LkmZ+wvD601pAB3uCdrTPcC0YKQ==} + '@solana/rpc-transport-http@5.4.0': + resolution: {integrity: sha512-vidA+Qtqrnqp3QSVumWHdWJ/986yCr5+qX3fbc9KPm9Ofoto88OMWB/oLJvi2Tfges1UBu/jl+lJdsVckCM1bA==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/signers@3.0.3': - resolution: {integrity: sha512-UwCd/uPYTZiwd283JKVyOWLLN5sIgMBqGDyUmNU3vo9hcmXKv5ZGm/9TvwMY2z35sXWuIOcj7etxJ8OoWc/ObQ==} + '@solana/rpc-types@5.4.0': + resolution: {integrity: sha512-+C4N4/5AYzBdt3Y2yzkScknScy/jTx6wfvuJIY9XjOXtdDyZ8TmrnMwdPMTZPGLdLuHplJwlwy1acu/4hqmrBQ==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/subscribable@3.0.3': - resolution: {integrity: sha512-FJ27LKGHLQ5GGttPvTOLQDLrrOZEgvaJhB7yYaHAhPk25+p+erBaQpjePhfkMyUbL1FQbxn1SUJmS6jUuaPjlQ==} + '@solana/rpc@5.4.0': + resolution: {integrity: sha512-S6GRG+usnubDs0JSpgc0ZWEh9IPL5KPWMuBoD8ggGVOIVWntp53FpvhYslNzbxWBXlTvJecr2todBipGVM/AqQ==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/sysvars@3.0.3': - resolution: {integrity: sha512-GnHew+QeKCs2f9ow+20swEJMH4mDfJA/QhtPgOPTYQx/z69J4IieYJ7fZenSHnA//lJ45fVdNdmy1trypvPLBQ==} + '@solana/signers@5.4.0': + resolution: {integrity: sha512-s+fZxpi6UPr6XNk2pH/R84WjNRoSktrgG8AGNfsj/V8MJ++eKX7hhIf4JsHZtnnQXXrHmS3ozB2oHlc8yEJvCQ==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/transaction-confirmation@3.0.3': - resolution: {integrity: sha512-dXx0OLtR95LMuARgi2dDQlL1QYmk56DOou5q9wKymmeV3JTvfDExeWXnOgjRBBq/dEfj4ugN1aZuTaS18UirFw==} + '@solana/subscribable@5.4.0': + resolution: {integrity: sha512-72LmfNX7UENgA24sn/xjlWpPAOsrxkWb9DQhuPZxly/gq8rl/rvr7Xu9qBkvFF2po9XpdUrKlccqY4awvfpltA==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/transaction-messages@3.0.3': - resolution: {integrity: sha512-s+6NWRnBhnnjFWV4x2tzBzoWa6e5LiIxIvJlWwVQBFkc8fMGY04w7jkFh0PM08t/QFKeXBEWkyBDa/TFYdkWug==} + '@solana/sysvars@5.4.0': + resolution: {integrity: sha512-A5NES7sOlFmpnsiEts5vgyL3NXrt/tGGVSEjlEGvsgwl5EDZNv+xWnNA400uMDqd9O3a5PmH7p/6NsgR+kUzSg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@solana/transactions@3.0.3': - resolution: {integrity: sha512-iMX+n9j4ON7H1nKlWEbMqMOpKYC6yVGxKKmWHT1KdLRG7v+03I4DnDeFoI+Zmw56FA+7Bbne8jwwX60Q1vk/MQ==} + '@solana/transaction-confirmation@5.4.0': + resolution: {integrity: sha512-EdSDgxs84/4gkjQw2r7N+Kgus8x9U+NFo0ufVG+48V8Hzy2t0rlBuXgIxwx0zZwUuTIgaKhpIutJgVncwZ5koA==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transaction-messages@5.4.0': + resolution: {integrity: sha512-qd/3kZDaPiHM0amhn3vXnupfcsFTVz6CYuHXvq9HFv/fq32+5Kp1FMLnmHwoSxQxdTMDghPdOhC4vhNhuWmuVQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@solana/transactions@5.4.0': + resolution: {integrity: sha512-OuY4M4x/xna8KZQIrz8tSrI9EEul9Od97XejqFmGGkEjbRsUOfJW8705TveTW8jU3bd5RGecFYscPgS2F+m7jQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true '@solana/wallet-adapter-base@0.9.23': resolution: {integrity: sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw==} @@ -1354,72 +1505,72 @@ packages: '@solana/web3.js@1.98.4': resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} - '@swc/core-darwin-arm64@1.15.7': - resolution: {integrity: sha512-+hNVUfezUid7LeSHqnhoC6Gh3BROABxjlDNInuZ/fie1RUxaEX4qzDwdTgozJELgHhvYxyPIg1ro8ibnKtgO4g==} + '@swc/core-darwin-arm64@1.15.10': + resolution: {integrity: sha512-U72pGqmJYbjrLhMndIemZ7u9Q9owcJczGxwtfJlz/WwMaGYAV/g4nkGiUVk/+QSX8sFCAjanovcU1IUsP2YulA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.7': - resolution: {integrity: sha512-ZAFuvtSYZTuXPcrhanaD5eyp27H8LlDzx2NAeVyH0FchYcuXf0h5/k3GL9ZU6Jw9eQ63R1E8KBgpXEJlgRwZUQ==} + '@swc/core-darwin-x64@1.15.10': + resolution: {integrity: sha512-NZpDXtwHH083L40xdyj1sY31MIwLgOxKfZEAGCI8xHXdHa+GWvEiVdGiu4qhkJctoHFzAEc7ZX3GN5phuJcPuQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.7': - resolution: {integrity: sha512-K3HTYocpqnOw8KcD8SBFxiDHjIma7G/X+bLdfWqf+qzETNBrzOub/IEkq9UaeupaJiZJkPptr/2EhEXXWryS/A==} + '@swc/core-linux-arm-gnueabihf@1.15.10': + resolution: {integrity: sha512-ioieF5iuRziUF1HkH1gg1r93e055dAdeBAPGAk40VjqpL5/igPJ/WxFHGvc6WMLhUubSJI4S0AiZAAhEAp1jDg==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.7': - resolution: {integrity: sha512-HCnVIlsLnCtQ3uXcXgWrvQ6SAraskLA9QJo9ykTnqTH6TvUYqEta+TdTdGjzngD6TOE7XjlAiUs/RBtU8Z0t+Q==} + '@swc/core-linux-arm64-gnu@1.15.10': + resolution: {integrity: sha512-tD6BClOrxSsNus9cJL7Gxdv7z7Y2hlyvZd9l0NQz+YXzmTWqnfzLpg16ovEI7gknH2AgDBB5ywOsqu8hUgSeEQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [glibc] - '@swc/core-linux-arm64-musl@1.15.7': - resolution: {integrity: sha512-/OOp9UZBg4v2q9+x/U21Jtld0Wb8ghzBScwhscI7YvoSh4E8RALaJ1msV8V8AKkBkZH7FUAFB7Vbv0oVzZsezA==} + '@swc/core-linux-arm64-musl@1.15.10': + resolution: {integrity: sha512-4uAHO3nbfbrTcmO/9YcVweTQdx5fN3l7ewwl5AEK4yoC4wXmoBTEPHAVdKNe4r9+xrTgd4BgyPsy0409OjjlMw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] libc: [musl] - '@swc/core-linux-x64-gnu@1.15.7': - resolution: {integrity: sha512-VBbs4gtD4XQxrHuQ2/2+TDZpPQQgrOHYRnS6SyJW+dw0Nj/OomRqH+n5Z4e/TgKRRbieufipeIGvADYC/90PYQ==} + '@swc/core-linux-x64-gnu@1.15.10': + resolution: {integrity: sha512-W0h9ONNw1pVIA0cN7wtboOSTl4Jk3tHq+w2cMPQudu9/+3xoCxpFb9ZdehwCAk29IsvdWzGzY6P7dDVTyFwoqg==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [glibc] - '@swc/core-linux-x64-musl@1.15.7': - resolution: {integrity: sha512-kVuy2unodso6p0rMauS2zby8/bhzoGRYxBDyD6i2tls/fEYAE74oP0VPFzxIyHaIjK1SN6u5TgvV9MpyJ5xVug==} + '@swc/core-linux-x64-musl@1.15.10': + resolution: {integrity: sha512-XQNZlLZB62S8nAbw7pqoqwy91Ldy2RpaMRqdRN3T+tAg6Xg6FywXRKCsLh6IQOadr4p1+lGnqM/Wn35z5a/0Vw==} engines: {node: '>=10'} cpu: [x64] os: [linux] libc: [musl] - '@swc/core-win32-arm64-msvc@1.15.7': - resolution: {integrity: sha512-uddYoo5Xmo1XKLhAnh4NBIyy5d0xk33x1sX3nIJboFySLNz878ksCFCZ3IBqrt1Za0gaoIWoOSSSk0eNhAc/sw==} + '@swc/core-win32-arm64-msvc@1.15.10': + resolution: {integrity: sha512-qnAGrRv5Nj/DATxAmCnJQRXXQqnJwR0trxLndhoHoxGci9MuguNIjWahS0gw8YZFjgTinbTxOwzatkoySihnmw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.7': - resolution: {integrity: sha512-rqq8JjNMLx3QNlh0aPTtN/4+BGLEHC94rj9mkH1stoNRf3ra6IksNHMHy+V1HUqElEgcZyx+0yeXx3eLOTcoFw==} + '@swc/core-win32-ia32-msvc@1.15.10': + resolution: {integrity: sha512-i4X/q8QSvzVlaRtv1xfnfl+hVKpCfiJ+9th484rh937fiEZKxZGf51C+uO0lfKDP1FfnT6C1yBYwHy7FLBVXFw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.7': - resolution: {integrity: sha512-4BK06EGdPnuplgcNhmSbOIiLdRgHYX3v1nl4HXo5uo4GZMfllXaCyBUes+0ePRfwbn9OFgVhCWPcYYjMT6hycQ==} + '@swc/core-win32-x64-msvc@1.15.10': + resolution: {integrity: sha512-HvY8XUFuoTXn6lSccDLYFlXv1SU/PzYi4PyUqGT++WfTnbw/68N/7BdUZqglGRwiSqr0qhYt/EhmBpULj0J9rA==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.15.7': - resolution: {integrity: sha512-kTGB8XI7P+pTKW83tnUEDVP4zduF951u3UAOn5eTi0vyW6MvL56A3+ggMdfuVFtDI0/DsbSzf5z34HVBbuScWw==} + '@swc/core@1.15.10': + resolution: {integrity: sha512-udNofxftduMUEv7nqahl2nvodCiCDQ4Ge0ebzsEm6P8s0RC2tBM0Hqx0nNF5J/6t9uagFJyWIDjXy3IIWMHDJw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -1530,14 +1681,14 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 - '@tanstack/react-virtual@3.13.13': - resolution: {integrity: sha512-4o6oPMDvQv+9gMi8rE6gWmsOjtUZUYIJHv7EB+GblyYdi8U6OqLl8rhHWIUZSL1dUU2dPwTdTgybCKf9EjIrQg==} + '@tanstack/react-virtual@3.13.18': + resolution: {integrity: sha512-dZkhyfahpvlaV0rIKnvQiVoWPyURppl6w4m9IwMDpuIjcJ1sD9YGWrt0wISvgU7ewACXx2Ct46WPgI6qAD4v6A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.13.13': - resolution: {integrity: sha512-uQFoSdKKf5S8k51W5t7b2qpfkyIbdHMzAn+AMQvHPxKUPeo1SsGaA4JRISQT87jm28b7z8OEqPcg1IOZagQHcA==} + '@tanstack/virtual-core@3.13.18': + resolution: {integrity: sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -1557,19 +1708,19 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.19.3': - resolution: {integrity: sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==} + '@types/node@22.19.7': + resolution: {integrity: sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.7': - resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} + '@types/react@19.2.9': + resolution: {integrity: sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==} - '@types/stylis@4.2.5': - resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} + '@types/stylis@4.2.7': + resolution: {integrity: sha512-VgDNokpBoKF+wrdvhAAfS55OMQpL6QRglwTwNC3kIgBrzZxA4WsFj+2eLfEA/uMUDzBcEhYmjSbwQakn/i3ajA==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1583,63 +1734,63 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.50.1': - resolution: {integrity: sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==} + '@typescript-eslint/eslint-plugin@8.53.1': + resolution: {integrity: sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.50.1 + '@typescript-eslint/parser': ^8.53.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.50.1': - resolution: {integrity: sha512-hM5faZwg7aVNa819m/5r7D0h0c9yC4DUlWAOvHAtISdFTc8xB86VmX5Xqabrama3wIPJ/q9RbGS1worb6JfnMg==} + '@typescript-eslint/parser@8.53.1': + resolution: {integrity: sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.50.1': - resolution: {integrity: sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==} + '@typescript-eslint/project-service@8.53.1': + resolution: {integrity: sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.50.1': - resolution: {integrity: sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==} + '@typescript-eslint/scope-manager@8.53.1': + resolution: {integrity: sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.50.1': - resolution: {integrity: sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==} + '@typescript-eslint/tsconfig-utils@8.53.1': + resolution: {integrity: sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.50.1': - resolution: {integrity: sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==} + '@typescript-eslint/type-utils@8.53.1': + resolution: {integrity: sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.50.1': - resolution: {integrity: sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==} + '@typescript-eslint/types@8.53.1': + resolution: {integrity: sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.50.1': - resolution: {integrity: sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==} + '@typescript-eslint/typescript-estree@8.53.1': + resolution: {integrity: sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.50.1': - resolution: {integrity: sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==} + '@typescript-eslint/utils@8.53.1': + resolution: {integrity: sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.50.1': - resolution: {integrity: sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==} + '@typescript-eslint/visitor-keys@8.53.1': + resolution: {integrity: sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitejs/plugin-react-swc@3.11.0': @@ -1671,8 +1822,8 @@ packages: resolution: {integrity: sha512-q/Au5Ne3g4R+q4GvHR5cvRd3+ha00QZCZiCs058lmy+eDbiZd0YsautvTPJ5a2guD6UaS1k/w5e1JHgixdcgLA==} engines: {node: '>=18'} - '@walletconnect/core@2.23.0': - resolution: {integrity: sha512-W++xuXf+AsMPrBWn1It8GheIbCTp1ynTQP+aoFB86eUwyCtSiK7UQsn/+vJZdwElrn+Ptp2A0RqQx2onTMVHjQ==} + '@walletconnect/core@2.23.2': + resolution: {integrity: sha512-KkaTELRu8t/mt3J9doCQ1fBGCbYsCNfpo2JpKdCwKQR7PVjVKeVpYQK/blVkA5m6uLPpBtVRbOMKjnHW1m7JLw==} engines: {node: '>=18.20.8'} '@walletconnect/environment@1.0.1': @@ -1714,8 +1865,8 @@ packages: '@walletconnect/logger@2.1.2': resolution: {integrity: sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==} - '@walletconnect/logger@3.0.0': - resolution: {integrity: sha512-DDktPBFdmt5d7U3sbp4e3fQHNS1b6amsR8FmtOnt6L2SnV7VfcZr8VmAGL12zetAR+4fndegbREmX0P8Mw6eDg==} + '@walletconnect/logger@3.0.2': + resolution: {integrity: sha512-7wR3wAwJTOmX4gbcUZcFMov8fjftY05+5cO/d4cpDD8wDzJ+cIlKdYOXaXfxHLSYeDazMXIsxMYjHYVDfkx+nA==} '@walletconnect/relay-api@1.0.11': resolution: {integrity: sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==} @@ -1734,8 +1885,8 @@ packages: resolution: {integrity: sha512-9k/JEl9copR6nXRhqnmzWz2Zk1hiWysH+o6bp6Cqo8TgDUrZoMLBZMZ6qbo+2HLI54V02kKf0Vg8M81nNFOpjQ==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' - '@walletconnect/sign-client@2.23.0': - resolution: {integrity: sha512-Nzf5x/LnQgC0Yjk0NmkT8kdrIMcScpALiFm9gP0n3CulL+dkf3HumqWzdoTmQSqGPxwHu/TNhGOaRKZLGQXSqw==} + '@walletconnect/sign-client@2.23.2': + resolution: {integrity: sha512-LL5KgmJHvY5NqQn+ZHQJLia1p6fpUWXHtiG97S5rNfyuPx6gT/Jkkwqc2LwdmAjFkr61t8zTagHC9ETq203mNA==} '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} @@ -1746,8 +1897,8 @@ packages: '@walletconnect/types@2.21.7': resolution: {integrity: sha512-kyGnFje4Iq+XGkZZcSoAIrJWBE4BeghVW4O7n9e1MhUyeOOtO55M/kcqceNGYrvwjHvdN+Kf+aoLnKC0zKlpbQ==} - '@walletconnect/types@2.23.0': - resolution: {integrity: sha512-9ZEOJyx/kNVCRncDHh3Qr9eH7Ih1dXBFB4k1J8iEudkv3t4GhYpXhqIt2kNdQWluPb1BBB4wEuckAT96yKuA8g==} + '@walletconnect/types@2.23.2': + resolution: {integrity: sha512-5dxBCdUM+4Dqe1/A7uqkm2tWPXce4UUGSr+ImfI0YjwEExQS8+TzdOlhMt3n32ncnBCllU5paG+fsndT06R0iw==} '@walletconnect/universal-provider@2.21.0': resolution: {integrity: sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg==} @@ -1757,8 +1908,8 @@ packages: resolution: {integrity: sha512-8PB+vA5VuR9PBqt5Y0xj4JC2doYNPlXLGQt3wJORVF9QC227Mm/8R1CAKpmneeLrUH02LkSRwx+wnN/pPnDiQA==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' - '@walletconnect/universal-provider@2.23.0': - resolution: {integrity: sha512-3ZEqAsbtCbk+CV0ZLpy7Qzc04KXEnrW4zCboZ+gkkC0ey4H62x9h23kBOIrU9qew6orjA7D5gg0ikRC2Up1lbw==} + '@walletconnect/universal-provider@2.23.2': + resolution: {integrity: sha512-vs9iorPUAiVesFJ95O6XvLjmRgF+B2TspxJNL90ZULbrkRw4JFsmaRdb965PZKc+s182k1MkS/MQ0o964xRcEw==} '@walletconnect/utils@2.21.0': resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==} @@ -1766,8 +1917,8 @@ packages: '@walletconnect/utils@2.21.7': resolution: {integrity: sha512-qyaclTgcFf9AwVuoV8CLLg8wfH3nX7yZdpylNkDqCpS7wawQL9zmFFTaGgma8sQrCsd3Sd9jUIymcpRvCJnSTw==} - '@walletconnect/utils@2.23.0': - resolution: {integrity: sha512-bVyv4Hl+/wVGueZ6rEO0eYgDy5deSBA4JjpJHAMOdaNoYs05NTE1HymV2lfPQQHuqc7suYexo9jwuW7i3JLuAA==} + '@walletconnect/utils@2.23.2': + resolution: {integrity: sha512-ReSjU3kX+3i3tYJQZbVfetY5SSUL+iM6uiIVVD1PJalePa/5A40VgLVRTF7sDCJTIFfpf3Mt4bFjeaYuoxWtIw==} '@walletconnect/window-getters@1.0.1': resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -1951,9 +2102,9 @@ packages: charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -1983,10 +2134,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@14.0.0: - resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} - engines: {node: '>=20'} - commander@14.0.2: resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} @@ -2025,9 +2172,6 @@ packages: css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -2193,8 +2337,8 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -2226,6 +2370,9 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -2259,9 +2406,6 @@ packages: fast-stable-stringify@1.0.0: resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2353,8 +2497,8 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - h3@1.15.4: - resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + h3@1.15.5: + resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -2512,8 +2656,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libphonenumber-js@1.12.33: - resolution: {integrity: sha512-r9kw4OA6oDO4dPXkOrXTkArQAafIKAU71hChInV4FxZ69dxCfbwQGDPzqR5/vea94wU705/3AZroEbSoeVWrQw==} + libphonenumber-js@1.12.35: + resolution: {integrity: sha512-T/Cz6iLcsZdb5jDncDcUNhSAJ0VlSC9TnsqtBNdpkaAmy24/R1RhErtNWVWBrcUZKs9hSgaVsBkc7HxYnazIfw==} lightningcss-android-arm64@1.30.2: resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} @@ -2612,8 +2756,9 @@ packages: lokijs@1.5.12: resolution: {integrity: sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==} - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} + engines: {node: 20 || >=22} lucide-react@0.383.0: resolution: {integrity: sha512-13xlG0CQCJtzjSQYwwJ3WRqMHtRj3EXmLlorrARt7y+IHnxUCp3XyFNL1DfaGySWxHObDvnu1u1dV+0VMKHUSg==} @@ -2738,6 +2883,14 @@ packages: typescript: optional: true + ox@0.11.3: + resolution: {integrity: sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + ox@0.6.7: resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} peerDependencies: @@ -2829,8 +2982,8 @@ packages: pino-std-serializers@4.0.0: resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} - pino-std-serializers@7.0.0: - resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} pino@10.0.0: resolution: {integrity: sha512-eI9pKwWEix40kfvSzqEP6ldqOoBIN7dwD/o91TY5z8vQI12sAffpR/pOqAD1IVVwIVHDpHjkq0joBPdJD0rafA==} @@ -2858,8 +3011,8 @@ packages: preact@10.24.2: resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} - preact@10.28.1: - resolution: {integrity: sha512-u1/ixq/lVQI0CakKNvLDEcW5zfCjUQfZdK9qqWuIJtsezuyG6pk9TWj75GMuI/EzRSZB/VAE43sNWWZfiy8psw==} + preact@10.28.2: + resolution: {integrity: sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -2964,9 +3117,9 @@ packages: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} real-require@0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} @@ -2987,8 +3140,8 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - rollup@4.54.0: - resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} + rollup@4.55.3: + resolution: {integrity: sha512-y9yUpfQvetAjiDLtNMf1hL9NXchIJgWt6zIKeoB+tCd3npX08Eqfzg60V9DhIGVMtQ0AlMkFw5xa+AQ37zxnAA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3103,15 +3256,15 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - styled-components@6.1.19: - resolution: {integrity: sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==} + styled-components@6.3.8: + resolution: {integrity: sha512-Kq/W41AKQloOqKM39zfaMdJ4BcYDw/N5CIq4/GTI0YjU6pKcZ1KKhk6b4du0a+6RA9pIfOP/eu94Ge7cu+PDCA==} engines: {node: '>= 16'} peerDependencies: react: '>= 16.8.0' react-dom: '>= 16.8.0' - - stylis@4.3.2: - resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} + peerDependenciesMeta: + react-dom: + optional: true stylis@4.3.6: resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} @@ -3128,8 +3281,8 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - tabbable@6.3.0: - resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==} + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} tailwind-merge@3.4.0: resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} @@ -3160,8 +3313,8 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - ts-api-utils@2.3.0: - resolution: {integrity: sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==} + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -3169,9 +3322,6 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3188,8 +3338,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.50.1: - resolution: {integrity: sha512-ytTHO+SoYSbhAH9CrYnMhiLx8To6PSSvqnvXyPUgPETCvB6eBKmTI9w6XMPS3HsBRGkwTVBX+urA8dYQx6bHfQ==} + typescript-eslint@8.53.1: + resolution: {integrity: sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3204,8 +3354,8 @@ packages: resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} hasBin: true - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} uint8arrays@3.1.0: resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==} @@ -3219,11 +3369,11 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.19.0: + resolution: {integrity: sha512-Rjk2OWDZf2eiXVQjY2HyE3XPjqW/wXnSZq0QkOsPKZEnaetNNBObTp91LYfGdB8hRbRZk4HFcM/cONw452B0AQ==} - unstorage@1.17.3: - resolution: {integrity: sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==} + unstorage@1.17.4: + resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==} peerDependencies: '@azure/app-configuration': ^1.8.0 '@azure/cosmos': ^4.2.0 @@ -3231,14 +3381,14 @@ packages: '@azure/identity': ^4.6.0 '@azure/keyvault-secrets': ^4.9.0 '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@capacitor/preferences': ^6 || ^7 || ^8 '@deno/kv': '>=0.9.0' '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 '@planetscale/database': ^1.19.0 '@upstash/redis': ^1.34.3 '@vercel/blob': '>=0.27.1' '@vercel/functions': ^2.2.12 || ^3.0.0 - '@vercel/kv': ^1.0.1 + '@vercel/kv': ^1 || ^2 || ^3 aws4fetch: ^1.0.20 db0: '>=0.2.1' idb-keyval: ^6.2.1 @@ -3380,6 +3530,14 @@ packages: typescript: optional: true + viem@2.44.4: + resolution: {integrity: sha512-sJDLVl2EsS5Fo7GSWZME5CXEV7QRYkUJPeBw7ac+4XI3D4ydvMw/gjulTsT5pgqcpu70BploFnOAC6DLpan1Yg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + vite@6.4.1: resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -3493,6 +3651,18 @@ packages: utf-8-validate: optional: true + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + 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 + y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -3514,8 +3684,8 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zustand@5.0.3: - resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} + zustand@5.0.10: + resolution: {integrity: sha512-U1AiltS1O9hSy3rul+Ub82ut2fqIAefiSuwECWt6jlMVUGejvf+5omLcRBSzqbRagSM3hQZbtzdeRc6QVScXTg==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -3532,8 +3702,8 @@ packages: use-sync-external-store: optional: true - zustand@5.0.9: - resolution: {integrity: sha512-ALBtUj0AfjJt3uNRQoL1tL2tMvj6Gp/6e39dnfT6uzpelGru8v1tPOGBzayOWbPJvujM8JojDk3E1LxeFisBNg==} + zustand@5.0.3: + resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -3554,9 +3724,9 @@ snapshots: '@adraffy/ens-normalize@1.11.1': {} - '@babel/runtime@7.28.4': {} + '@babel/runtime@7.28.6': {} - '@base-org/account@1.1.1(@types/react@19.2.7)(bufferutil@4.1.0)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76)': + '@base-org/account@1.1.1(@types/react@19.2.9)(bufferutil@4.1.0)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@noble/hashes': 1.4.0 clsx: 1.2.1 @@ -3565,7 +3735,7 @@ snapshots: ox: 0.6.9(typescript@5.7.3)(zod@3.25.76) preact: 10.24.2 viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.3(@types/react@19.2.7)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) + zustand: 5.0.3(@types/react@19.2.9)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) transitivePeerDependencies: - '@types/react' - bufferutil @@ -3576,9 +3746,9 @@ snapshots: - utf-8-validate - zod - '@base-org/account@2.4.0(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)': + '@base-org/account@2.4.0(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@coinbase/cdp-sdk': 1.40.1(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@coinbase/cdp-sdk': 1.43.1(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10) '@noble/hashes': 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 @@ -3586,7 +3756,7 @@ snapshots: ox: 0.6.9(typescript@5.7.3)(zod@3.25.76) preact: 10.24.2 viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.3(@types/react@19.2.7)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) + zustand: 5.0.3(@types/react@19.2.9)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) transitivePeerDependencies: - '@types/react' - bufferutil @@ -3598,15 +3768,14 @@ snapshots: - typescript - use-sync-external-store - utf-8-validate - - ws - zod optional: true - '@coinbase/cdp-sdk@1.40.1(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + '@coinbase/cdp-sdk@1.43.1(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)': dependencies: - '@solana-program/system': 0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))) - '@solana-program/token': 0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))) - '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@solana-program/system': 0.10.0(@solana/kit@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@solana-program/token': 0.9.0(@solana/kit@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@solana/kit': 5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10) abitype: 1.0.6(typescript@5.7.3)(zod@3.25.76) axios: 1.13.2 @@ -3623,23 +3792,22 @@ snapshots: - fastestsmallesttextencoderdecoder - typescript - utf-8-validate - - ws optional: true '@coinbase/wallet-sdk@4.3.2': dependencies: '@noble/hashes': 1.8.0 clsx: 1.2.1 - eventemitter3: 5.0.1 - preact: 10.28.1 + eventemitter3: 5.0.4 + preact: 10.28.2 - '@emotion/is-prop-valid@1.2.2': + '@emotion/is-prop-valid@1.4.0': dependencies: - '@emotion/memoize': 0.8.1 + '@emotion/memoize': 0.9.0 - '@emotion/memoize@0.8.1': {} + '@emotion/memoize@0.9.0': {} - '@emotion/unitless@0.8.1': {} + '@emotion/unitless@0.10.0': {} '@esbuild/aix-ppc64@0.25.12': optional: true @@ -3719,7 +3887,7 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': dependencies: eslint: 9.39.2(jiti@2.6.1) eslint-visitor-keys: 3.4.3 @@ -3990,7 +4158,7 @@ snapshots: '@floating-ui/utils': 0.2.10 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - tabbable: 6.3.0 + tabbable: 6.4.0 '@floating-ui/utils@0.2.10': {} @@ -3999,7 +4167,7 @@ snapshots: '@floating-ui/react': 0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@tanstack/react-virtual': 3.13.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@tanstack/react-virtual': 3.13.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) @@ -4038,16 +4206,16 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lit-labs/ssr-dom-shim@1.5.0': {} + '@lit-labs/ssr-dom-shim@1.5.1': {} - '@lit/react@1.0.8(@types/react@19.2.7)': + '@lit/react@1.0.8(@types/react@19.2.9)': dependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 optional: true '@lit/reactive-element@2.1.2': dependencies: - '@lit-labs/ssr-dom-shim': 1.5.0 + '@lit-labs/ssr-dom-shim': 1.5.1 '@marsidev/react-turnstile@0.4.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: @@ -4156,11 +4324,11 @@ snapshots: '@privy-io/chains': 0.0.2 '@privy-io/public-api': 2.45.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) canonicalize: 2.1.0 - eventemitter3: 5.0.1 + eventemitter3: 5.0.4 fetch-retry: 6.0.0 jose: 4.15.9 js-cookie: 3.0.5 - libphonenumber-js: 1.12.33 + libphonenumber-js: 1.12.35 set-cookie-parser: 2.7.2 uuid: 9.0.1 optionalDependencies: @@ -4174,7 +4342,7 @@ snapshots: dependencies: '@privy-io/api-base': 1.7.0 bs58: 5.0.0 - libphonenumber-js: 1.12.33 + libphonenumber-js: 1.12.35 viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: @@ -4182,9 +4350,9 @@ snapshots: - typescript - utf-8-validate - '@privy-io/react-auth@2.25.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(@types/react@19.2.7)(bs58@6.0.0)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)': + '@privy-io/react-auth@2.25.0(@solana/kit@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(@types/react@19.2.9)(bs58@6.0.0)(bufferutil@4.1.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@base-org/account': 1.1.1(@types/react@19.2.7)(bufferutil@4.1.0)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76) + '@base-org/account': 1.1.1(@types/react@19.2.9)(bufferutil@4.1.0)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76) '@coinbase/wallet-sdk': 4.3.2 '@floating-ui/react': 0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@headlessui/react': 2.2.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -4196,19 +4364,19 @@ snapshots: '@privy-io/ethereum': 0.0.2(viem@2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@privy-io/js-sdk-core': 0.55.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@privy-io/public-api': 2.45.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) - '@reown/appkit': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) + '@reown/appkit': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76) '@scure/base': 1.2.6 '@simplewebauthn/browser': 9.0.1 '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)) '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(bs58@6.0.0) '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.2.3) - '@tanstack/react-virtual': 3.13.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@tanstack/react-virtual': 3.13.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@wallet-standard/app': 1.1.0 - '@walletconnect/ethereum-provider': 2.21.7(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/ethereum-provider': 2.21.7(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) base64-js: 1.5.1 dotenv: 16.6.1 encoding: 0.1.13 - eventemitter3: 5.0.1 + eventemitter3: 5.0.4 fast-password-entropy: 1.1.1 jose: 4.15.9 js-cookie: 3.0.5 @@ -4223,14 +4391,14 @@ snapshots: react-device-detect: 2.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react-dom: 19.2.3(react@19.2.3) secure-password-utilities: 0.2.1 - styled-components: 6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + styled-components: 6.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) stylis: 4.3.6 tinycolor2: 1.6.0 uuid: 9.0.1 viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.9(@types/react@19.2.7)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) + zustand: 5.0.10(@types/react@19.2.9)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) optionalDependencies: - '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@solana/kit': 5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@azure/app-configuration' @@ -4262,172 +4430,171 @@ snapshots: - uploadthing - use-sync-external-store - utf-8-validate - - ws - zod '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.9)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-context@1.1.2(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.9)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3) aria-hidden: 1.2.6 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - react-remove-scroll: 2.7.2(@types/react@19.2.7)(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.9)(react@19.2.3) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.9)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) - '@radix-ui/react-id@1.1.1(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.9)(react@19.2.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) optionalDependencies: - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.9)(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-slot@1.2.4(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-slot@1.2.4(@types/react@19.2.9)(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.9)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.9)(react@19.2.3)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.7)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.9)(react@19.2.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.9)(react@19.2.3)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.7)(react@19.2.3)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.9)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 '@react-aria/focus@3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: @@ -4500,34 +4667,34 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-common@1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit-common@1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.44.4(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-common@1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-common@1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.44.4(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-controllers@1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 1.13.2(@types/react@19.2.7)(react@19.2.3) + valtio: 1.13.2(@types/react@19.2.9)(react@19.2.3) viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' @@ -4557,13 +4724,13 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-controllers@1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-wallet': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.23.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 2.1.7(@types/react@19.2.7)(react@19.2.3) - viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + valtio: 2.1.7(@types/react@19.2.9)(react@19.2.3) + viem: 2.44.4(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -4592,14 +4759,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-pay@1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.7)(react@19.2.3))(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76) lit: 3.3.0 - valtio: 1.13.2(@types/react@19.2.7)(react@19.2.3) + valtio: 1.13.2(@types/react@19.2.9)(react@19.2.3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -4628,14 +4795,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)': + '@reown/appkit-pay@1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.7)(react@19.2.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) + '@reown/appkit-common': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-ui': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76) lit: 3.3.0 - valtio: 2.1.7(@types/react@19.2.7)(react@19.2.3) + valtio: 2.1.7(@types/react@19.2.9)(react@19.2.3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -4666,23 +4833,22 @@ snapshots: - uploadthing - use-sync-external-store - utf-8-validate - - ws - zod '@reown/appkit-polyfills@1.7.8': dependencies: buffer: 6.0.3 - '@reown/appkit-polyfills@1.8.15': + '@reown/appkit-polyfills@1.8.17': dependencies: buffer: 6.0.3 - '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.7)(react@19.2.3))(zod@3.25.76)': + '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.7)(react@19.2.3))(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: @@ -4714,13 +4880,14 @@ snapshots: - valtio - zod - '@reown/appkit-scaffold-ui@1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.7)(react@19.2.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)': + '@reown/appkit-scaffold-ui@1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.7)(react@19.2.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) - '@reown/appkit-wallet': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-pay': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-ui': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76) + '@reown/appkit-wallet': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -4753,13 +4920,12 @@ snapshots: - use-sync-external-store - utf-8-validate - valtio - - ws - zod - '@reown/appkit-ui@1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-ui@1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 @@ -4791,12 +4957,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-ui@1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-ui@1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@phosphor-icons/webcomponents': 2.1.5 - '@reown/appkit-common': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-wallet': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 transitivePeerDependencies: @@ -4827,15 +4993,15 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.7)(react@19.2.3))(zod@3.25.76)': + '@reown/appkit-utils@1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-polyfills': 1.7.8 '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) '@walletconnect/logger': 2.1.2 '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 1.13.2(@types/react@19.2.7)(react@19.2.3) + valtio: 1.13.2(@types/react@19.2.9)(react@19.2.3) viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' @@ -4865,19 +5031,19 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.7)(react@19.2.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)': + '@reown/appkit-utils@1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-polyfills': 1.8.15 - '@reown/appkit-wallet': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.17 + '@reown/appkit-wallet': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) '@wallet-standard/wallet': 1.1.0 - '@walletconnect/logger': 3.0.0 - '@walletconnect/universal-provider': 2.23.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 2.1.7(@types/react@19.2.7)(react@19.2.3) - viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/logger': 3.0.2 + '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + valtio: 2.1.7(@types/react@19.2.9)(react@19.2.3) + viem: 2.44.4(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: - '@base-org/account': 2.4.0(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) + '@base-org/account': 2.4.0(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: @@ -4910,7 +5076,6 @@ snapshots: - uploadthing - use-sync-external-store - utf-8-validate - - ws - zod '@reown/appkit-wallet@1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)': @@ -4924,31 +5089,31 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit-wallet@1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)': + '@reown/appkit-wallet@1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)': dependencies: - '@reown/appkit-common': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-polyfills': 1.8.15 - '@walletconnect/logger': 3.0.0 + '@reown/appkit-common': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-polyfills': 1.8.17 + '@walletconnect/logger': 3.0.2 zod: 3.22.4 transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - '@reown/appkit@1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit@1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-pay': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-pay': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.7)(react@19.2.3))(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.7)(react@19.2.3))(zod@3.25.76) + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) '@walletconnect/types': 2.21.0 '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 - valtio: 1.13.2(@types/react@19.2.7)(react@19.2.3) + valtio: 1.13.2(@types/react@19.2.9)(react@19.2.3) viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' @@ -4978,23 +5143,23 @@ snapshots: - utf-8-validate - zod - '@reown/appkit@1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)': - dependencies: - '@reown/appkit-common': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-pay': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) - '@reown/appkit-polyfills': 1.8.15 - '@reown/appkit-scaffold-ui': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.7)(react@19.2.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) - '@reown/appkit-ui': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.8.15(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.7)(react@19.2.3))(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) - '@reown/appkit-wallet': 1.8.15(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.23.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit@1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76)': + dependencies: + '@reown/appkit-common': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-pay': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.17 + '@reown/appkit-scaffold-ui': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76) + '@reown/appkit-ui': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.8.17(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(use-sync-external-store@1.6.0(react@19.2.3))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.9)(react@19.2.3))(zod@3.25.76) + '@reown/appkit-wallet': 1.8.17(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 semver: 7.7.2 - valtio: 2.1.7(@types/react@19.2.7)(react@19.2.3) - viem: 2.43.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + valtio: 2.1.7(@types/react@19.2.9)(react@19.2.3) + viem: 2.44.4(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: - '@lit/react': 1.0.8(@types/react@19.2.7) + '@lit/react': 1.0.8(@types/react@19.2.9) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -5025,75 +5190,83 @@ snapshots: - uploadthing - use-sync-external-store - utf-8-validate - - ws - zod '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/rollup-android-arm-eabi@4.54.0': + '@rollup/rollup-android-arm-eabi@4.55.3': optional: true - '@rollup/rollup-android-arm64@4.54.0': + '@rollup/rollup-android-arm64@4.55.3': optional: true - '@rollup/rollup-darwin-arm64@4.54.0': + '@rollup/rollup-darwin-arm64@4.55.3': optional: true - '@rollup/rollup-darwin-x64@4.54.0': + '@rollup/rollup-darwin-x64@4.55.3': optional: true - '@rollup/rollup-freebsd-arm64@4.54.0': + '@rollup/rollup-freebsd-arm64@4.55.3': optional: true - '@rollup/rollup-freebsd-x64@4.54.0': + '@rollup/rollup-freebsd-x64@4.55.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + '@rollup/rollup-linux-arm-gnueabihf@4.55.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.54.0': + '@rollup/rollup-linux-arm-musleabihf@4.55.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.54.0': + '@rollup/rollup-linux-arm64-gnu@4.55.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.54.0': + '@rollup/rollup-linux-arm64-musl@4.55.3': optional: true - '@rollup/rollup-linux-loong64-gnu@4.54.0': + '@rollup/rollup-linux-loong64-gnu@4.55.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.54.0': + '@rollup/rollup-linux-loong64-musl@4.55.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.54.0': + '@rollup/rollup-linux-ppc64-gnu@4.55.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.54.0': + '@rollup/rollup-linux-ppc64-musl@4.55.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.54.0': + '@rollup/rollup-linux-riscv64-gnu@4.55.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.54.0': + '@rollup/rollup-linux-riscv64-musl@4.55.3': optional: true - '@rollup/rollup-linux-x64-musl@4.54.0': + '@rollup/rollup-linux-s390x-gnu@4.55.3': optional: true - '@rollup/rollup-openharmony-arm64@4.54.0': + '@rollup/rollup-linux-x64-gnu@4.55.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.54.0': + '@rollup/rollup-linux-x64-musl@4.55.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.54.0': + '@rollup/rollup-openbsd-x64@4.55.3': optional: true - '@rollup/rollup-win32-x64-gnu@4.54.0': + '@rollup/rollup-openharmony-arm64@4.55.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.54.0': + '@rollup/rollup-win32-arm64-msvc@4.55.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.55.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.55.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.55.3': optional: true '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': @@ -5164,44 +5337,47 @@ snapshots: '@simplewebauthn/types@9.0.1': {} - '@solana-program/system@0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': + '@solana-program/system@0.10.0(@solana/kit@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10))': dependencies: - '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@solana/kit': 5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) optional: true - '@solana-program/token@0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': + '@solana-program/token@0.9.0(@solana/kit@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10))': dependencies: - '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@solana/kit': 5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) optional: true - '@solana/accounts@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/accounts@5.4.0(typescript@5.7.3)': dependencies: - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec': 3.0.3(typescript@5.7.3) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec': 5.4.0(typescript@5.7.3) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/addresses@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/addresses@5.4.0(typescript@5.7.3)': dependencies: - '@solana/assertions': 3.0.3(typescript@5.7.3) - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/nominal-types': 3.0.3(typescript@5.7.3) + '@solana/assertions': 5.4.0(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/nominal-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/assertions@3.0.3(typescript@5.7.3)': + '@solana/assertions@5.4.0(typescript@5.7.3)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 optional: true @@ -5214,17 +5390,19 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.7.3) typescript: 5.7.3 - '@solana/codecs-core@3.0.3(typescript@5.7.3)': + '@solana/codecs-core@5.4.0(typescript@5.7.3)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/codecs-data-structures@3.0.3(typescript@5.7.3)': + '@solana/codecs-data-structures@5.4.0(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-numbers': 3.0.3(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-numbers': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 optional: true @@ -5234,29 +5412,31 @@ snapshots: '@solana/errors': 2.3.0(typescript@5.7.3) typescript: 5.7.3 - '@solana/codecs-numbers@3.0.3(typescript@5.7.3)': + '@solana/codecs-numbers@5.4.0(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/codecs-strings@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/codecs-strings@5.4.0(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-numbers': 3.0.3(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - fastestsmallesttextencoderdecoder: 1.0.22 + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-numbers': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/codecs@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/codecs@5.4.0(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-data-structures': 3.0.3(typescript@5.7.3) - '@solana/codecs-numbers': 3.0.3(typescript@5.7.3) - '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/options': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-data-structures': 5.4.0(typescript@5.7.3) + '@solana/codecs-numbers': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/options': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder @@ -5268,329 +5448,384 @@ snapshots: commander: 14.0.2 typescript: 5.7.3 - '@solana/errors@3.0.3(typescript@5.7.3)': + '@solana/errors@5.4.0(typescript@5.7.3)': dependencies: chalk: 5.6.2 - commander: 14.0.0 + commander: 14.0.2 + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/fast-stable-stringify@3.0.3(typescript@5.7.3)': - dependencies: + '@solana/fast-stable-stringify@5.4.0(typescript@5.7.3)': + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/functional@3.0.3(typescript@5.7.3)': - dependencies: + '@solana/functional@5.4.0(typescript@5.7.3)': + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/instruction-plans@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/instruction-plans@5.4.0(typescript@5.7.3)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/instructions': 3.0.3(typescript@5.7.3) - '@solana/promises': 3.0.3(typescript@5.7.3) - '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/instructions': 5.4.0(typescript@5.7.3) + '@solana/keys': 5.4.0(typescript@5.7.3) + '@solana/promises': 5.4.0(typescript@5.7.3) + '@solana/transaction-messages': 5.4.0(typescript@5.7.3) + '@solana/transactions': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/instructions@3.0.3(typescript@5.7.3)': + '@solana/instructions@5.4.0(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/keys@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/keys@5.4.0(typescript@5.7.3)': dependencies: - '@solana/assertions': 3.0.3(typescript@5.7.3) - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/nominal-types': 3.0.3(typescript@5.7.3) + '@solana/assertions': 5.4.0(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/nominal-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': - dependencies: - '@solana/accounts': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/codecs': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/functional': 3.0.3(typescript@5.7.3) - '@solana/instruction-plans': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/instructions': 3.0.3(typescript@5.7.3) - '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/programs': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-parsed-types': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec-types': 3.0.3(typescript@5.7.3) - '@solana/rpc-subscriptions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/signers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/sysvars': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transaction-confirmation': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/kit@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/accounts': 5.4.0(typescript@5.7.3) + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/codecs': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/functional': 5.4.0(typescript@5.7.3) + '@solana/instruction-plans': 5.4.0(typescript@5.7.3) + '@solana/instructions': 5.4.0(typescript@5.7.3) + '@solana/keys': 5.4.0(typescript@5.7.3) + '@solana/offchain-messages': 5.4.0(typescript@5.7.3) + '@solana/plugin-core': 5.4.0(typescript@5.7.3) + '@solana/programs': 5.4.0(typescript@5.7.3) + '@solana/rpc': 5.4.0(typescript@5.7.3) + '@solana/rpc-api': 5.4.0(typescript@5.7.3) + '@solana/rpc-parsed-types': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec-types': 5.4.0(typescript@5.7.3) + '@solana/rpc-subscriptions': 5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + '@solana/signers': 5.4.0(typescript@5.7.3) + '@solana/sysvars': 5.4.0(typescript@5.7.3) + '@solana/transaction-confirmation': 5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@solana/transaction-messages': 5.4.0(typescript@5.7.3) + '@solana/transactions': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: + - bufferutil - fastestsmallesttextencoderdecoder - - ws + - utf-8-validate optional: true - '@solana/nominal-types@3.0.3(typescript@5.7.3)': - dependencies: + '@solana/nominal-types@5.4.0(typescript@5.7.3)': + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/options@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/offchain-messages@5.4.0(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-data-structures': 3.0.3(typescript@5.7.3) - '@solana/codecs-numbers': 3.0.3(typescript@5.7.3) - '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-data-structures': 5.4.0(typescript@5.7.3) + '@solana/codecs-numbers': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/keys': 5.4.0(typescript@5.7.3) + '@solana/nominal-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/programs@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/options@5.4.0(typescript@5.7.3)': dependencies: - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-data-structures': 5.4.0(typescript@5.7.3) + '@solana/codecs-numbers': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/promises@3.0.3(typescript@5.7.3)': - dependencies: + '@solana/plugin-core@5.4.0(typescript@5.7.3)': + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/rpc-api@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/programs@5.4.0(typescript@5.7.3)': dependencies: - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-parsed-types': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec': 3.0.3(typescript@5.7.3) - '@solana/rpc-transformers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/rpc-parsed-types@3.0.3(typescript@5.7.3)': - dependencies: + '@solana/promises@5.4.0(typescript@5.7.3)': + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/rpc-spec-types@3.0.3(typescript@5.7.3)': + '@solana/rpc-api@5.4.0(typescript@5.7.3)': dependencies: + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/keys': 5.4.0(typescript@5.7.3) + '@solana/rpc-parsed-types': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec': 5.4.0(typescript@5.7.3) + '@solana/rpc-transformers': 5.4.0(typescript@5.7.3) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + '@solana/transaction-messages': 5.4.0(typescript@5.7.3) + '@solana/transactions': 5.4.0(typescript@5.7.3) + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + optional: true + + '@solana/rpc-parsed-types@5.4.0(typescript@5.7.3)': + optionalDependencies: + typescript: 5.7.3 + optional: true + + '@solana/rpc-spec-types@5.4.0(typescript@5.7.3)': + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/rpc-spec@3.0.3(typescript@5.7.3)': + '@solana/rpc-spec@5.4.0(typescript@5.7.3)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec-types': 3.0.3(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/rpc-subscriptions-api@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/rpc-subscriptions-api@5.4.0(typescript@5.7.3)': dependencies: - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-subscriptions-spec': 3.0.3(typescript@5.7.3) - '@solana/rpc-transformers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/keys': 5.4.0(typescript@5.7.3) + '@solana/rpc-subscriptions-spec': 5.4.0(typescript@5.7.3) + '@solana/rpc-transformers': 5.4.0(typescript@5.7.3) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + '@solana/transaction-messages': 5.4.0(typescript@5.7.3) + '@solana/transactions': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/rpc-subscriptions-channel-websocket@3.0.3(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + '@solana/rpc-subscriptions-channel-websocket@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/functional': 3.0.3(typescript@5.7.3) - '@solana/rpc-subscriptions-spec': 3.0.3(typescript@5.7.3) - '@solana/subscribable': 3.0.3(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/functional': 5.4.0(typescript@5.7.3) + '@solana/rpc-subscriptions-spec': 5.4.0(typescript@5.7.3) + '@solana/subscribable': 5.4.0(typescript@5.7.3) + ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + optionalDependencies: typescript: 5.7.3 - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate optional: true - '@solana/rpc-subscriptions-spec@3.0.3(typescript@5.7.3)': + '@solana/rpc-subscriptions-spec@5.4.0(typescript@5.7.3)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/promises': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec-types': 3.0.3(typescript@5.7.3) - '@solana/subscribable': 3.0.3(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/promises': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec-types': 5.4.0(typescript@5.7.3) + '@solana/subscribable': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/rpc-subscriptions@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + '@solana/rpc-subscriptions@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/fast-stable-stringify': 3.0.3(typescript@5.7.3) - '@solana/functional': 3.0.3(typescript@5.7.3) - '@solana/promises': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec-types': 3.0.3(typescript@5.7.3) - '@solana/rpc-subscriptions-api': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-subscriptions-channel-websocket': 3.0.3(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@solana/rpc-subscriptions-spec': 3.0.3(typescript@5.7.3) - '@solana/rpc-transformers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/subscribable': 3.0.3(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/fast-stable-stringify': 5.4.0(typescript@5.7.3) + '@solana/functional': 5.4.0(typescript@5.7.3) + '@solana/promises': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec-types': 5.4.0(typescript@5.7.3) + '@solana/rpc-subscriptions-api': 5.4.0(typescript@5.7.3) + '@solana/rpc-subscriptions-channel-websocket': 5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@solana/rpc-subscriptions-spec': 5.4.0(typescript@5.7.3) + '@solana/rpc-transformers': 5.4.0(typescript@5.7.3) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + '@solana/subscribable': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: + - bufferutil - fastestsmallesttextencoderdecoder - - ws + - utf-8-validate optional: true - '@solana/rpc-transformers@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/rpc-transformers@5.4.0(typescript@5.7.3)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/functional': 3.0.3(typescript@5.7.3) - '@solana/nominal-types': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec-types': 3.0.3(typescript@5.7.3) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/functional': 5.4.0(typescript@5.7.3) + '@solana/nominal-types': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec-types': 5.4.0(typescript@5.7.3) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/rpc-transport-http@3.0.3(typescript@5.7.3)': + '@solana/rpc-transport-http@5.4.0(typescript@5.7.3)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec-types': 3.0.3(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec-types': 5.4.0(typescript@5.7.3) + undici-types: 7.19.0 + optionalDependencies: typescript: 5.7.3 - undici-types: 7.16.0 optional: true - '@solana/rpc-types@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/rpc-types@5.4.0(typescript@5.7.3)': dependencies: - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-numbers': 3.0.3(typescript@5.7.3) - '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/nominal-types': 3.0.3(typescript@5.7.3) + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-numbers': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/nominal-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/rpc@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/rpc@5.4.0(typescript@5.7.3)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/fast-stable-stringify': 3.0.3(typescript@5.7.3) - '@solana/functional': 3.0.3(typescript@5.7.3) - '@solana/rpc-api': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-spec': 3.0.3(typescript@5.7.3) - '@solana/rpc-spec-types': 3.0.3(typescript@5.7.3) - '@solana/rpc-transformers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-transport-http': 3.0.3(typescript@5.7.3) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/fast-stable-stringify': 5.4.0(typescript@5.7.3) + '@solana/functional': 5.4.0(typescript@5.7.3) + '@solana/rpc-api': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec': 5.4.0(typescript@5.7.3) + '@solana/rpc-spec-types': 5.4.0(typescript@5.7.3) + '@solana/rpc-transformers': 5.4.0(typescript@5.7.3) + '@solana/rpc-transport-http': 5.4.0(typescript@5.7.3) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/signers@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/signers@5.4.0(typescript@5.7.3)': dependencies: - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/instructions': 3.0.3(typescript@5.7.3) - '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/nominal-types': 3.0.3(typescript@5.7.3) - '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/instructions': 5.4.0(typescript@5.7.3) + '@solana/keys': 5.4.0(typescript@5.7.3) + '@solana/nominal-types': 5.4.0(typescript@5.7.3) + '@solana/offchain-messages': 5.4.0(typescript@5.7.3) + '@solana/transaction-messages': 5.4.0(typescript@5.7.3) + '@solana/transactions': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/subscribable@3.0.3(typescript@5.7.3)': + '@solana/subscribable@5.4.0(typescript@5.7.3)': dependencies: - '@solana/errors': 3.0.3(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 optional: true - '@solana/sysvars@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/sysvars@5.4.0(typescript@5.7.3)': dependencies: - '@solana/accounts': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/codecs': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/accounts': 5.4.0(typescript@5.7.3) + '@solana/codecs': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/transaction-confirmation@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + '@solana/transaction-confirmation@5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)': dependencies: - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/promises': 3.0.3(typescript@5.7.3) - '@solana/rpc': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/rpc-subscriptions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/keys': 5.4.0(typescript@5.7.3) + '@solana/promises': 5.4.0(typescript@5.7.3) + '@solana/rpc': 5.4.0(typescript@5.7.3) + '@solana/rpc-subscriptions': 5.4.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + '@solana/transaction-messages': 5.4.0(typescript@5.7.3) + '@solana/transactions': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: + - bufferutil - fastestsmallesttextencoderdecoder - - ws + - utf-8-validate optional: true - '@solana/transaction-messages@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': + '@solana/transaction-messages@5.4.0(typescript@5.7.3)': dependencies: - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-data-structures': 3.0.3(typescript@5.7.3) - '@solana/codecs-numbers': 3.0.3(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/functional': 3.0.3(typescript@5.7.3) - '@solana/instructions': 3.0.3(typescript@5.7.3) - '@solana/nominal-types': 3.0.3(typescript@5.7.3) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-data-structures': 5.4.0(typescript@5.7.3) + '@solana/codecs-numbers': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/functional': 5.4.0(typescript@5.7.3) + '@solana/instructions': 5.4.0(typescript@5.7.3) + '@solana/nominal-types': 5.4.0(typescript@5.7.3) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder optional: true - '@solana/transactions@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': - dependencies: - '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/codecs-core': 3.0.3(typescript@5.7.3) - '@solana/codecs-data-structures': 3.0.3(typescript@5.7.3) - '@solana/codecs-numbers': 3.0.3(typescript@5.7.3) - '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/errors': 3.0.3(typescript@5.7.3) - '@solana/functional': 3.0.3(typescript@5.7.3) - '@solana/instructions': 3.0.3(typescript@5.7.3) - '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/nominal-types': 3.0.3(typescript@5.7.3) - '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) - '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) + '@solana/transactions@5.4.0(typescript@5.7.3)': + dependencies: + '@solana/addresses': 5.4.0(typescript@5.7.3) + '@solana/codecs-core': 5.4.0(typescript@5.7.3) + '@solana/codecs-data-structures': 5.4.0(typescript@5.7.3) + '@solana/codecs-numbers': 5.4.0(typescript@5.7.3) + '@solana/codecs-strings': 5.4.0(typescript@5.7.3) + '@solana/errors': 5.4.0(typescript@5.7.3) + '@solana/functional': 5.4.0(typescript@5.7.3) + '@solana/instructions': 5.4.0(typescript@5.7.3) + '@solana/keys': 5.4.0(typescript@5.7.3) + '@solana/nominal-types': 5.4.0(typescript@5.7.3) + '@solana/rpc-types': 5.4.0(typescript@5.7.3) + '@solana/transaction-messages': 5.4.0(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder @@ -5645,7 +5880,7 @@ snapshots: '@solana/web3.js@1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.6 '@noble/curves': 1.9.7 '@noble/hashes': 1.4.0 '@solana/buffer-layout': 4.0.1 @@ -5666,51 +5901,51 @@ snapshots: - typescript - utf-8-validate - '@swc/core-darwin-arm64@1.15.7': + '@swc/core-darwin-arm64@1.15.10': optional: true - '@swc/core-darwin-x64@1.15.7': + '@swc/core-darwin-x64@1.15.10': optional: true - '@swc/core-linux-arm-gnueabihf@1.15.7': + '@swc/core-linux-arm-gnueabihf@1.15.10': optional: true - '@swc/core-linux-arm64-gnu@1.15.7': + '@swc/core-linux-arm64-gnu@1.15.10': optional: true - '@swc/core-linux-arm64-musl@1.15.7': + '@swc/core-linux-arm64-musl@1.15.10': optional: true - '@swc/core-linux-x64-gnu@1.15.7': + '@swc/core-linux-x64-gnu@1.15.10': optional: true - '@swc/core-linux-x64-musl@1.15.7': + '@swc/core-linux-x64-musl@1.15.10': optional: true - '@swc/core-win32-arm64-msvc@1.15.7': + '@swc/core-win32-arm64-msvc@1.15.10': optional: true - '@swc/core-win32-ia32-msvc@1.15.7': + '@swc/core-win32-ia32-msvc@1.15.10': optional: true - '@swc/core-win32-x64-msvc@1.15.7': + '@swc/core-win32-x64-msvc@1.15.10': optional: true - '@swc/core@1.15.7(@swc/helpers@0.5.18)': + '@swc/core@1.15.10(@swc/helpers@0.5.18)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.25 optionalDependencies: - '@swc/core-darwin-arm64': 1.15.7 - '@swc/core-darwin-x64': 1.15.7 - '@swc/core-linux-arm-gnueabihf': 1.15.7 - '@swc/core-linux-arm64-gnu': 1.15.7 - '@swc/core-linux-arm64-musl': 1.15.7 - '@swc/core-linux-x64-gnu': 1.15.7 - '@swc/core-linux-x64-musl': 1.15.7 - '@swc/core-win32-arm64-msvc': 1.15.7 - '@swc/core-win32-ia32-msvc': 1.15.7 - '@swc/core-win32-x64-msvc': 1.15.7 + '@swc/core-darwin-arm64': 1.15.10 + '@swc/core-darwin-x64': 1.15.10 + '@swc/core-linux-arm-gnueabihf': 1.15.10 + '@swc/core-linux-arm64-gnu': 1.15.10 + '@swc/core-linux-arm64-musl': 1.15.10 + '@swc/core-linux-x64-gnu': 1.15.10 + '@swc/core-linux-x64-musl': 1.15.10 + '@swc/core-win32-arm64-msvc': 1.15.10 + '@swc/core-win32-ia32-msvc': 1.15.10 + '@swc/core-win32-x64-msvc': 1.15.10 '@swc/helpers': 0.5.18 '@swc/counter@0.1.3': {} @@ -5784,24 +6019,24 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - '@tailwindcss/vite@4.1.18(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2))': + '@tailwindcss/vite@4.1.18(vite@6.4.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 6.4.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2) - '@tanstack/react-virtual@3.13.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@tanstack/react-virtual@3.13.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@tanstack/virtual-core': 3.13.13 + '@tanstack/virtual-core': 3.13.18 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - '@tanstack/virtual-core@3.13.13': {} + '@tanstack/virtual-core@3.13.18': {} '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.3 + '@types/node': 22.19.7 '@types/debug@4.1.12': dependencies: @@ -5815,19 +6050,19 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.19.3': + '@types/node@22.19.7': dependencies: undici-types: 6.21.0 - '@types/react-dom@19.2.3(@types/react@19.2.7)': + '@types/react-dom@19.2.3(@types/react@19.2.9)': dependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - '@types/react@19.2.7': + '@types/react@19.2.9': dependencies: csstype: 3.2.3 - '@types/stylis@4.2.5': {} + '@types/stylis@4.2.7': {} '@types/trusted-types@2.0.7': {} @@ -5835,108 +6070,108 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 22.19.3 + '@types/node': 22.19.7 '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.3 + '@types/node': 22.19.7 - '@typescript-eslint/eslint-plugin@8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.50.1 - '@typescript-eslint/type-utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) - '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.50.1 + '@typescript-eslint/parser': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.53.1 + '@typescript-eslint/type-utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.53.1 eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.3.0(typescript@5.7.3) + ts-api-utils: 2.4.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3)': + '@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.50.1 - '@typescript-eslint/types': 8.50.1 - '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.50.1 + '@typescript-eslint/scope-manager': 8.53.1 + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.53.1 debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.50.1(typescript@5.7.3)': + '@typescript-eslint/project-service@8.53.1(typescript@5.7.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.7.3) - '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.7.3) + '@typescript-eslint/types': 8.53.1 debug: 4.4.3 typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.50.1': + '@typescript-eslint/scope-manager@8.53.1': dependencies: - '@typescript-eslint/types': 8.50.1 - '@typescript-eslint/visitor-keys': 8.50.1 + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/visitor-keys': 8.53.1 - '@typescript-eslint/tsconfig-utils@8.50.1(typescript@5.7.3)': + '@typescript-eslint/tsconfig-utils@8.53.1(typescript@5.7.3)': dependencies: typescript: 5.7.3 - '@typescript-eslint/type-utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.50.1 - '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.3.0(typescript@5.7.3) + ts-api-utils: 2.4.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.50.1': {} + '@typescript-eslint/types@8.53.1': {} - '@typescript-eslint/typescript-estree@8.50.1(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.53.1(typescript@5.7.3)': dependencies: - '@typescript-eslint/project-service': 8.50.1(typescript@5.7.3) - '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.7.3) - '@typescript-eslint/types': 8.50.1 - '@typescript-eslint/visitor-keys': 8.50.1 + '@typescript-eslint/project-service': 8.53.1(typescript@5.7.3) + '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.7.3) + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/visitor-keys': 8.53.1 debug: 4.4.3 minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 - ts-api-utils: 2.3.0(typescript@5.7.3) + ts-api-utils: 2.4.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3)': + '@typescript-eslint/utils@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.50.1 - '@typescript-eslint/types': 8.50.1 - '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.7.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.53.1 + '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.7.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.50.1': + '@typescript-eslint/visitor-keys@8.53.1': dependencies: - '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/types': 8.53.1 eslint-visitor-keys: 4.2.1 - '@vitejs/plugin-react-swc@3.11.0(@swc/helpers@0.5.18)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2))': + '@vitejs/plugin-react-swc@3.11.0(@swc/helpers@0.5.18)(vite@6.4.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.27 - '@swc/core': 1.15.7(@swc/helpers@0.5.18) - vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2) + '@swc/core': 1.15.10(@swc/helpers@0.5.18) + vite: 6.4.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2) transitivePeerDependencies: - '@swc/helpers' @@ -6042,7 +6277,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.23.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/core@2.23.2(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -6050,13 +6285,13 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 3.0.0 + '@walletconnect/logger': 3.0.2 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.0 - '@walletconnect/utils': 2.23.0(typescript@5.7.3)(zod@3.25.76) + '@walletconnect/types': 2.23.2 + '@walletconnect/utils': 2.23.2(typescript@5.7.3)(zod@3.25.76) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.39.3 events: 3.3.0 @@ -6090,9 +6325,9 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.21.7(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/ethereum-provider@2.21.7(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit': 1.7.8(@types/react@19.2.7)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit': 1.7.8(@types/react@19.2.9)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.3)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 @@ -6182,7 +6417,7 @@ snapshots: dependencies: '@walletconnect/safe-json': 1.0.2 idb-keyval: 6.2.2 - unstorage: 1.17.3(idb-keyval@6.2.2) + unstorage: 1.17.4(idb-keyval@6.2.2) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6208,7 +6443,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 pino: 7.11.0 - '@walletconnect/logger@3.0.0': + '@walletconnect/logger@3.0.2': dependencies: '@walletconnect/safe-json': 1.0.2 pino: 10.0.0 @@ -6301,16 +6536,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.23.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.23.2(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@walletconnect/core': 2.23.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.23.2(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/logger': 3.0.0 + '@walletconnect/logger': 3.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.0 - '@walletconnect/utils': 2.23.0(typescript@5.7.3)(zod@3.25.76) + '@walletconnect/types': 2.23.2 + '@walletconnect/utils': 2.23.2(typescript@5.7.3)(zod@3.25.76) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -6399,13 +6634,13 @@ snapshots: - ioredis - uploadthing - '@walletconnect/types@2.23.0': + '@walletconnect/types@2.23.2': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 3.0.0 + '@walletconnect/logger': 3.0.2 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -6508,7 +6743,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.23.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/universal-provider@2.23.2(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) @@ -6516,10 +6751,10 @@ snapshots: '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 3.0.0 - '@walletconnect/sign-client': 2.23.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@walletconnect/types': 2.23.0 - '@walletconnect/utils': 2.23.0(typescript@5.7.3)(zod@3.25.76) + '@walletconnect/logger': 3.0.2 + '@walletconnect/sign-client': 2.23.2(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/types': 2.23.2 + '@walletconnect/utils': 2.23.2(typescript@5.7.3)(zod@3.25.76) es-toolkit: 1.39.3 events: 3.3.0 transitivePeerDependencies: @@ -6639,7 +6874,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.23.0(typescript@5.7.3)(zod@3.25.76)': + '@walletconnect/utils@2.23.2(typescript@5.7.3)(zod@3.25.76)': dependencies: '@msgpack/msgpack': 3.1.2 '@noble/ciphers': 1.3.0 @@ -6648,12 +6883,12 @@ snapshots: '@scure/base': 1.2.6 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 3.0.0 + '@walletconnect/logger': 3.0.2 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.0 + '@walletconnect/types': 2.23.2 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 blakejs: 1.2.1 @@ -6856,9 +7091,9 @@ snapshots: charenc@0.0.2: {} - chokidar@4.0.3: + chokidar@5.0.0: dependencies: - readdirp: 4.1.2 + readdirp: 5.0.0 class-variance-authority@0.7.1: dependencies: @@ -6887,9 +7122,6 @@ snapshots: delayed-stream: 1.0.0 optional: true - commander@14.0.0: - optional: true - commander@14.0.2: {} commander@2.20.3: {} @@ -6926,8 +7158,6 @@ snapshots: css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 - csstype@3.1.3: {} - csstype@3.2.3: {} dateformat@4.6.3: {} @@ -6951,9 +7181,9 @@ snapshots: delayed-stream@1.0.0: optional: true - derive-valtio@0.1.0(valtio@1.13.2(@types/react@19.2.7)(react@19.2.3)): + derive-valtio@0.1.0(valtio@1.13.2(@types/react@19.2.9)(react@19.2.3)): dependencies: - valtio: 1.13.2(@types/react@19.2.7)(react@19.2.3) + valtio: 1.13.2(@types/react@19.2.9)(react@19.2.3) destr@2.0.5: {} @@ -7087,7 +7317,7 @@ snapshots: eslint@9.39.2(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 @@ -7107,7 +7337,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -7132,7 +7362,7 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -7162,6 +7392,8 @@ snapshots: eventemitter3@5.0.1: {} + eventemitter3@5.0.4: {} + events@3.3.0: {} eyes@0.1.8: {} @@ -7182,9 +7414,6 @@ snapshots: fast-stable-stringify@1.0.0: {} - fastestsmallesttextencoderdecoder@1.0.22: - optional: true - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -7269,7 +7498,7 @@ snapshots: graceful-fs@4.2.11: {} - h3@1.15.4: + h3@1.15.5: dependencies: cookie-es: 1.2.2 crossws: 0.3.5 @@ -7278,7 +7507,7 @@ snapshots: iron-webcrypto: 1.2.1 node-mock-http: 1.0.4 radix3: 1.1.2 - ufo: 1.6.1 + ufo: 1.6.3 uncrypto: 0.1.3 has-flag@4.0.0: {} @@ -7425,7 +7654,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libphonenumber-js@1.12.33: {} + libphonenumber-js@1.12.35: {} lightningcss-android-arm64@1.30.2: optional: true @@ -7478,7 +7707,7 @@ snapshots: lit-element@4.2.2: dependencies: - '@lit-labs/ssr-dom-shim': 1.5.0 + '@lit-labs/ssr-dom-shim': 1.5.1 '@lit/reactive-element': 2.1.2 lit-html: 3.3.2 @@ -7504,7 +7733,7 @@ snapshots: lokijs@1.5.12: {} - lru-cache@10.4.3: {} + lru-cache@11.2.4: {} lucide-react@0.383.0(react@19.2.3): dependencies: @@ -7587,7 +7816,7 @@ snapshots: dependencies: destr: 2.0.5 node-fetch-native: 1.6.7 - ufo: 1.6.1 + ufo: 1.6.3 on-exit-leak-free@0.2.0: {} @@ -7636,6 +7865,36 @@ snapshots: transitivePeerDependencies: - zod + ox@0.11.3(typescript@5.7.3)(zod@3.22.4): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@5.7.3)(zod@3.22.4) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - zod + + ox@0.11.3(typescript@5.7.3)(zod@3.25.76): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@5.7.3)(zod@3.25.76) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - zod + ox@0.6.7(typescript@5.7.3)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 @@ -7759,14 +8018,14 @@ snapshots: pino-std-serializers@4.0.0: {} - pino-std-serializers@7.0.0: {} + pino-std-serializers@7.1.0: {} pino@10.0.0: dependencies: atomic-sleep: 1.0.0 on-exit-leak-free: 2.1.2 pino-abstract-transport: 2.0.0 - pino-std-serializers: 7.0.0 + pino-std-serializers: 7.1.0 process-warning: 5.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 @@ -7807,7 +8066,7 @@ snapshots: preact@10.24.2: {} - preact@10.28.1: {} + preact@10.28.2: {} prelude-ls@1.2.1: {} @@ -7866,32 +8125,32 @@ snapshots: react: 19.2.3 scheduler: 0.27.0 - react-remove-scroll-bar@2.3.8(@types/react@19.2.7)(react@19.2.3): + react-remove-scroll-bar@2.3.8(@types/react@19.2.9)(react@19.2.3): dependencies: react: 19.2.3 - react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.9)(react@19.2.3) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - react-remove-scroll@2.7.2(@types/react@19.2.7)(react@19.2.3): + react-remove-scroll@2.7.2(@types/react@19.2.9)(react@19.2.3): dependencies: react: 19.2.3 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.7)(react@19.2.3) - react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.3) + react-remove-scroll-bar: 2.3.8(@types/react@19.2.9)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.9)(react@19.2.3) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.7)(react@19.2.3) - use-sidecar: 1.1.3(@types/react@19.2.7)(react@19.2.3) + use-callback-ref: 1.3.3(@types/react@19.2.9)(react@19.2.3) + use-sidecar: 1.1.3(@types/react@19.2.9)(react@19.2.3) optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - react-style-singleton@2.2.3(@types/react@19.2.7)(react@19.2.3): + react-style-singleton@2.2.3(@types/react@19.2.9)(react@19.2.3): dependencies: get-nonce: 1.0.1 react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 react@19.2.3: {} @@ -7909,7 +8168,7 @@ snapshots: process: 0.11.10 string_decoder: 1.3.0 - readdirp@4.1.2: {} + readdirp@5.0.0: {} real-require@0.1.0: {} @@ -7921,32 +8180,35 @@ snapshots: resolve-from@4.0.0: {} - rollup@4.54.0: + rollup@4.55.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.54.0 - '@rollup/rollup-android-arm64': 4.54.0 - '@rollup/rollup-darwin-arm64': 4.54.0 - '@rollup/rollup-darwin-x64': 4.54.0 - '@rollup/rollup-freebsd-arm64': 4.54.0 - '@rollup/rollup-freebsd-x64': 4.54.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 - '@rollup/rollup-linux-arm-musleabihf': 4.54.0 - '@rollup/rollup-linux-arm64-gnu': 4.54.0 - '@rollup/rollup-linux-arm64-musl': 4.54.0 - '@rollup/rollup-linux-loong64-gnu': 4.54.0 - '@rollup/rollup-linux-ppc64-gnu': 4.54.0 - '@rollup/rollup-linux-riscv64-gnu': 4.54.0 - '@rollup/rollup-linux-riscv64-musl': 4.54.0 - '@rollup/rollup-linux-s390x-gnu': 4.54.0 - '@rollup/rollup-linux-x64-gnu': 4.54.0 - '@rollup/rollup-linux-x64-musl': 4.54.0 - '@rollup/rollup-openharmony-arm64': 4.54.0 - '@rollup/rollup-win32-arm64-msvc': 4.54.0 - '@rollup/rollup-win32-ia32-msvc': 4.54.0 - '@rollup/rollup-win32-x64-gnu': 4.54.0 - '@rollup/rollup-win32-x64-msvc': 4.54.0 + '@rollup/rollup-android-arm-eabi': 4.55.3 + '@rollup/rollup-android-arm64': 4.55.3 + '@rollup/rollup-darwin-arm64': 4.55.3 + '@rollup/rollup-darwin-x64': 4.55.3 + '@rollup/rollup-freebsd-arm64': 4.55.3 + '@rollup/rollup-freebsd-x64': 4.55.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.55.3 + '@rollup/rollup-linux-arm-musleabihf': 4.55.3 + '@rollup/rollup-linux-arm64-gnu': 4.55.3 + '@rollup/rollup-linux-arm64-musl': 4.55.3 + '@rollup/rollup-linux-loong64-gnu': 4.55.3 + '@rollup/rollup-linux-loong64-musl': 4.55.3 + '@rollup/rollup-linux-ppc64-gnu': 4.55.3 + '@rollup/rollup-linux-ppc64-musl': 4.55.3 + '@rollup/rollup-linux-riscv64-gnu': 4.55.3 + '@rollup/rollup-linux-riscv64-musl': 4.55.3 + '@rollup/rollup-linux-s390x-gnu': 4.55.3 + '@rollup/rollup-linux-x64-gnu': 4.55.3 + '@rollup/rollup-linux-x64-musl': 4.55.3 + '@rollup/rollup-openbsd-x64': 4.55.3 + '@rollup/rollup-openharmony-arm64': 4.55.3 + '@rollup/rollup-win32-arm64-msvc': 4.55.3 + '@rollup/rollup-win32-ia32-msvc': 4.55.3 + '@rollup/rollup-win32-x64-gnu': 4.55.3 + '@rollup/rollup-win32-x64-msvc': 4.55.3 fsevents: 2.3.3 rpc-websockets@9.3.2: @@ -7955,9 +8217,9 @@ snapshots: '@types/uuid': 8.3.4 '@types/ws': 8.18.1 buffer: 6.0.3 - eventemitter3: 5.0.1 + eventemitter3: 5.0.4 uuid: 8.3.2 - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: bufferutil: 4.1.0 utf-8-validate: 5.0.10 @@ -8045,21 +8307,20 @@ snapshots: strip-json-comments@3.1.1: {} - styled-components@6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + styled-components@6.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - '@emotion/is-prop-valid': 1.2.2 - '@emotion/unitless': 0.8.1 - '@types/stylis': 4.2.5 + '@emotion/is-prop-valid': 1.4.0 + '@emotion/unitless': 0.10.0 + '@types/stylis': 4.2.7 css-to-react-native: 3.2.0 - csstype: 3.1.3 + csstype: 3.2.3 postcss: 8.4.49 react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) shallowequal: 1.1.0 - stylis: 4.3.2 - tslib: 2.6.2 - - stylis@4.3.2: {} + stylis: 4.3.6 + tslib: 2.8.1 + optionalDependencies: + react-dom: 19.2.3(react@19.2.3) stylis@4.3.6: {} @@ -8071,7 +8332,7 @@ snapshots: dependencies: has-flag: 4.0.0 - tabbable@6.3.0: {} + tabbable@6.4.0: {} tailwind-merge@3.4.0: {} @@ -8098,14 +8359,12 @@ snapshots: tr46@0.0.3: {} - ts-api-utils@2.3.0(typescript@5.7.3): + ts-api-utils@2.4.0(typescript@5.7.3): dependencies: typescript: 5.7.3 tslib@1.14.1: {} - tslib@2.6.2: {} - tslib@2.8.1: {} tw-animate-css@1.4.0: {} @@ -8118,12 +8377,12 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3): + typescript-eslint@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) - '@typescript-eslint/parser': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) - '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/parser': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.7.3 transitivePeerDependencies: @@ -8133,7 +8392,7 @@ snapshots: ua-parser-js@1.0.41: {} - ufo@1.6.1: {} + ufo@1.6.3: {} uint8arrays@3.1.0: dependencies: @@ -8147,19 +8406,19 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.16.0: + undici-types@7.19.0: optional: true - unstorage@1.17.3(idb-keyval@6.2.2): + unstorage@1.17.4(idb-keyval@6.2.2): dependencies: anymatch: 3.1.3 - chokidar: 4.0.3 + chokidar: 5.0.0 destr: 2.0.5 - h3: 1.15.4 - lru-cache: 10.4.3 + h3: 1.15.5 + lru-cache: 11.2.4 node-fetch-native: 1.6.7 ofetch: 1.5.1 - ufo: 1.6.1 + ufo: 1.6.3 optionalDependencies: idb-keyval: 6.2.2 @@ -8167,20 +8426,20 @@ snapshots: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.3(@types/react@19.2.7)(react@19.2.3): + use-callback-ref@1.3.3(@types/react@19.2.9)(react@19.2.3): dependencies: react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 - use-sidecar@1.1.3(@types/react@19.2.7)(react@19.2.3): + use-sidecar@1.1.3(@types/react@19.2.9)(react@19.2.3): dependencies: detect-node-es: 1.1.0 react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 use-sync-external-store@1.2.0(react@19.2.3): dependencies: @@ -8201,20 +8460,20 @@ snapshots: uuid@9.0.1: {} - valtio@1.13.2(@types/react@19.2.7)(react@19.2.3): + valtio@1.13.2(@types/react@19.2.9)(react@19.2.3): dependencies: - derive-valtio: 0.1.0(valtio@1.13.2(@types/react@19.2.7)(react@19.2.3)) + derive-valtio: 0.1.0(valtio@1.13.2(@types/react@19.2.9)(react@19.2.3)) proxy-compare: 2.6.0 use-sync-external-store: 1.2.0(react@19.2.3) optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 react: 19.2.3 - valtio@2.1.7(@types/react@19.2.7)(react@19.2.3): + valtio@2.1.7(@types/react@19.2.9)(react@19.2.3): dependencies: proxy-compare: 3.0.1 optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 react: 19.2.3 viem@2.23.2(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76): @@ -8285,16 +8544,50 @@ snapshots: - utf-8-validate - zod - vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2): + viem@2.44.4(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.22.4): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@5.7.3)(zod@3.22.4) + isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + ox: 0.11.3(typescript@5.7.3)(zod@3.22.4) + ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + viem@2.44.4(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@5.7.3)(zod@3.25.76) + isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + ox: 0.11.3(typescript@5.7.3)(zod@3.25.76) + ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + vite@6.4.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.54.0 + rollup: 4.55.3 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.19.3 + '@types/node': 22.19.7 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 @@ -8342,6 +8635,11 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 5.0.10 + ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 5.0.10 + y18n@4.0.3: {} yargs-parser@18.1.3: @@ -8369,14 +8667,14 @@ snapshots: zod@3.25.76: {} - zustand@5.0.3(@types/react@19.2.7)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)): + zustand@5.0.10(@types/react@19.2.9)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)): optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 react: 19.2.3 use-sync-external-store: 1.6.0(react@19.2.3) - zustand@5.0.9(@types/react@19.2.7)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)): + zustand@5.0.3(@types/react@19.2.9)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)): optionalDependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.9 react: 19.2.3 use-sync-external-store: 1.6.0(react@19.2.3) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7eaa1da..947e9c6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,5 @@ packages: - - . + - 'packages/*' minimumReleaseAge: 10080 diff --git a/src/lib/utils.ts b/src/lib/utils.ts deleted file mode 100644 index e6a8be0..0000000 --- a/src/lib/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { clsx, type ClassValue } from "clsx"; -import { twMerge } from "tailwind-merge"; - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)); -} From 7c5936132985135c83fcba5b77161d26a21f3908 Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 29 Jan 2026 11:54:56 +0530 Subject: [PATCH 05/18] refactor: default mainnet --- .../frontend/src/components/Container.tsx | 57 ++++++++++--------- .../frontend/src/contexts/NetworkContext.tsx | 4 +- packages/frontend/src/main.tsx | 2 +- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/packages/frontend/src/components/Container.tsx b/packages/frontend/src/components/Container.tsx index 181b82e..536d664 100644 --- a/packages/frontend/src/components/Container.tsx +++ b/packages/frontend/src/components/Container.tsx @@ -1,4 +1,5 @@ import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert"; +import { useNetwork } from "@/contexts/NetworkContext"; import { InfoIcon } from "lucide-react"; import React from "react"; @@ -7,6 +8,8 @@ type ContainerProps = { }; export default function Container({ children }: ContainerProps) { + const { network } = useNetwork(); + return (
@@ -18,32 +21,34 @@ export default function Container({ children }: ContainerProps) {
-
- - - - 2048 Faucet Has Ended - - -

- - The 2048 game will no longer be funding player addresses at this time. Please claim more tokens at{" "} - - - faucet.monad.xyz - {" "} - - and deposit to your player address here. - -

-
-
-
+ {network === "testnet" && ( +
+ + + + 2048 Faucet Has Ended + + +

+ + The 2048 game will no longer be funding player addresses at this time. Please claim more tokens at{" "} + + + faucet.monad.xyz + {" "} + + and deposit to your player address here. + +

+
+
+
+ )} {/* Main content area */}
diff --git a/packages/frontend/src/contexts/NetworkContext.tsx b/packages/frontend/src/contexts/NetworkContext.tsx index 5624290..28e7fcf 100644 --- a/packages/frontend/src/contexts/NetworkContext.tsx +++ b/packages/frontend/src/contexts/NetworkContext.tsx @@ -24,12 +24,12 @@ const NetworkContext = createContext(null); function getNetworkFromUrl(): Network { const params = new URLSearchParams(window.location.search); const network = params.get("network"); - return network === "mainnet" ? "mainnet" : "testnet"; + return network === "testnet" ? "testnet" : "mainnet"; } function updateUrlParam(network: Network) { const url = new URL(window.location.href); - if (network === "testnet") { + if (network === "mainnet") { url.searchParams.delete("network"); } else { url.searchParams.set("network", network); diff --git a/packages/frontend/src/main.tsx b/packages/frontend/src/main.tsx index e92e2b5..d1566e2 100644 --- a/packages/frontend/src/main.tsx +++ b/packages/frontend/src/main.tsx @@ -16,7 +16,7 @@ createRoot(document.getElementById("root")!).render( theme: "light", walletChainType: "ethereum-only", }, - defaultChain: monadTestnet, + defaultChain: monad, supportedChains: [monadTestnet, monad], loginMethods: ["google", "passkey", "wallet"], embeddedWallets: { From 34625231a4d61a6b373c85b49b173d843ea3db4a Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 29 Jan 2026 11:55:19 +0530 Subject: [PATCH 06/18] plan: add feature.md for realtime leaderboard --- FEATURE.md | 1564 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1564 insertions(+) create mode 100644 FEATURE.md diff --git a/FEATURE.md b/FEATURE.md new file mode 100644 index 0000000..c4cf185 --- /dev/null +++ b/FEATURE.md @@ -0,0 +1,1564 @@ +# Realtime Leaderboard Feature + +## Overview + +Add a realtime updating top-10 high score leaderboard to the 2048 on Monad game. The leaderboard displays the highest-scoring games across all players, updates in realtime as new high scores are achieved, and features animated entry effects for new leaderboard positions. + +**Key Requirements**: +- Primary ranking by **actual game score** (sum of merged tiles) +- Each entry shows: score, moves played, gas consumed, total MON burned +- Same player can appear multiple times (one entry per game) +- Handle all data pipeline states: empty, syncing, realtime + +--- + +## Architecture + +### Data Flow + +``` +┌─────────────────┐ Events + Txs ┌─────────────────┐ Index ┌─────────────────┐ +│ Monad2048 │ ─────────────▶ │ Envio │ ───────────▶ │ PostgreSQL │ +│ Smart Contract │ NewGame │ HyperIndex │ │ (Local/Hosted) │ +│ │ NewMove │ Indexer │ │ │ +└─────────────────┘ + Receipts └─────────────────┘ └────────┬────────┘ + │ + GraphQL API + │ + ▼ +┌─────────────────┐ Fetch ┌─────────────────┐ Query ┌─────────────────┐ +│ React │ ◀───────────── │ Leaderboard │ ◀────────── │ Hasura │ +│ Frontend │ Leaderboard │ Hook │ GraphQL │ GraphQL Engine │ +│ │ + Status │ + IndexerStatus│ │ │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ +``` + +### Why HyperIndex (Not Direct HyperSync) + +| Consideration | HyperSync Direct | HyperIndex | +|--------------|------------------|------------| +| Historical backfill | Client must process all events | Pre-indexed, instant queries | +| Score calculation | Must decode boards client-side | Computed in event handlers | +| Gas/MON tracking | Must fetch receipts separately | Indexed with transactions | +| Realtime updates | Must poll events + recompute | Automatic indexing + GraphQL | +| Infrastructure | API token in frontend (security risk) | Hosted service, secure endpoint | +| Query flexibility | Limited filtering | Full GraphQL with sorting/pagination | +| Local development | N/A | Docker-based local stack | + +**Decision**: Use **Envio HyperIndex** hosted service for production, with local Docker setup for development. + +--- + +## Monorepo Commands (Root-Level Scripts) + +### Package Scripts Configuration + +#### Root `package.json` additions + +```json +{ + "scripts": { + "dev": "pnpm run --parallel dev:frontend dev:indexer", + "dev:frontend": "pnpm --filter frontend dev", + "dev:indexer": "pnpm --filter indexer dev", + "build": "pnpm run --parallel build:frontend build:indexer", + "build:frontend": "pnpm --filter frontend build", + "build:indexer": "pnpm --filter indexer codegen", + "indexer:start": "pnpm --filter indexer dev", + "indexer:stop": "pnpm --filter indexer stop", + "indexer:codegen": "pnpm --filter indexer codegen", + "clean": "pnpm run --parallel clean:frontend clean:indexer", + "clean:frontend": "pnpm --filter frontend clean", + "clean:indexer": "pnpm --filter indexer stop" + } +} +``` + +### Command Reference + +| Command | Description | +|---------|-------------| +| `pnpm dev` | Run full stack (frontend + indexer) in parallel | +| `pnpm dev:frontend` | Run only the webapp | +| `pnpm dev:indexer` | Run only the data pipeline (indexer + Hasura + PostgreSQL) | +| `pnpm indexer:start` | Alias for starting the data pipeline | +| `pnpm indexer:stop` | Stop and clean up Docker containers | +| `pnpm indexer:codegen` | Regenerate types from GraphQL schema | +| `pnpm build` | Build all packages for production | + +### Prerequisites + +```bash +# Required for indexer +docker --version # Docker must be running + +# Install dependencies +pnpm install +``` + +--- + +## Technical Design + +### 1. Score Calculation Strategy + +The smart contract events emit board states as 128-bit encoded integers. **Actual game score** is calculated by detecting merges between consecutive board states. + +**Board Encoding** (from contract): +- 16 tiles × 8 bits each = 128 bits +- Each cell stores `log₂(tile_value)`: 0=empty, 1=2, 2=4, 3=8, ... 11=2048 + +**Score Calculation Algorithm**: + +```typescript +// Score = sum of all merged tile values +// When two 4s merge into an 8, score += 8 +// When two 8s merge into a 16, score += 16 + +function calculateScoreDelta(prevBoard: number[], newBoard: number[]): number { + const prevSum = prevBoard.reduce((a, b) => a + b, 0); + const newSum = newBoard.reduce((a, b) => a + b, 0); + + // New tile added is either 2 or 4 (90%/10% probability) + // Score delta = (newSum - prevSum) - newTileValue + // But we can simplify: merges double values, so: + // scoreDelta = sum of all tiles that appeared due to merges + + // A merge of two Xs creates one 2X, so net change = 2X - X - X + newTile = newTile + // But score gained = 2X (the merged value) + + // Precise calculation requires tracking which tiles merged + // Simplified: score delta = (tiles that disappeared) * their values + + const prevTiles = prevBoard.filter(t => t > 0).sort((a, b) => a - b); + const newTiles = newBoard.filter(t => t > 0).sort((a, b) => a - b); + + // Find merged tiles by comparing sorted arrays + let scoreDelta = 0; + // ... detailed merge detection logic + + return scoreDelta; +} +``` + +**For NewGame (first 3 moves)**: The contract receives `boards[4]` containing all intermediate states, so we calculate score from all 3 transitions. + +**For NewMove**: We store `previousBoard` in the Game entity and compare with `result`. + +### 2. Gas & MON Tracking + +**Gas Constants** (from contract analysis): +- `startGame()`: ~150,000 gas (includes validation of 3 moves) +- `play()`: ~100,000 gas per move + +**Data from Transaction Receipts**: +- `gasUsed`: Actual gas consumed +- `effectiveGasPrice`: Gas price in wei +- `MON burned = gasUsed × effectiveGasPrice` + +**Envio HyperIndex Configuration** for transaction data: + +```yaml +# config.yaml - enable transaction receipt indexing +field_selection: + transaction: + - hash + - from + - gasUsed + - effectiveGasPrice +``` + +### 3. Data Schema + +#### Envio HyperIndex Schema (`schema.graphql`) + +```graphql +# Tracks each move in a game (for score calculation) +type GameMove @entity { + id: ID! # txHash + gameId: String! @index # Reference to Game + moveNumber: Int! # 1, 2, 3, 4, 5... + direction: Int! # 0=UP, 1=DOWN, 2=LEFT, 3=RIGHT + boardBefore: String! # Board state before move (hex) + boardAfter: String! # Board state after move (hex) + scoreDelta: Int! # Score gained from this move + gasUsed: BigInt! # Gas consumed + gasPrice: BigInt! # Effective gas price (wei) + monBurned: BigInt! # gasUsed * gasPrice (wei) + timestamp: BigInt! # Block timestamp + txHash: String! # Transaction hash +} + +# Aggregated game data +type Game @entity { + id: ID! # gameId (bytes32) + player: String! @index # Player address (indexed for queries) + score: Int! # Actual game score (sum of merges) + highestTile: Int! # Highest tile value achieved + moveCount: Int! # Total moves played + latestBoard: String! # Current board state (hex) + + # Gas tracking + totalGasUsed: BigInt! # Sum of all gas used + totalMonBurned: BigInt! # Sum of all MON burned (wei) + + # Timestamps + startedAt: BigInt! # Block timestamp of NewGame + lastMoveAt: BigInt! # Block timestamp of last move + + # Status + isActive: Boolean! # True if game still has valid moves +} + +# Player aggregate stats (optional, for profile features) +type Player @entity { + id: ID! # Player address + totalGamesPlayed: Int! # Count of games + totalMovesPlayed: Int! # Sum of all moves + totalMonBurned: BigInt! # Total MON spent on games + bestScore: Int! # Highest score achieved + bestGameId: String # Reference to best game +} + +# Indexer status for frontend state management +type IndexerStatus @entity { + id: ID! # "status" (singleton) + chainId: Int! # Network chain ID + lastIndexedBlock: BigInt! # Most recent block processed + lastIndexedTimestamp: BigInt!# Timestamp of last block + totalGamesIndexed: Int! # Count of games in database + isBackfilling: Boolean! # True if still catching up +} +``` + +### 4. Event Handlers + +#### `src/handlers/index.ts` + +```typescript +import { + Monad2048, + Game, + GameMove, + Player, + IndexerStatus, + handlerContext +} from "generated"; + +// ============================================================ +// Board Decoding & Score Calculation +// ============================================================ + +function decodeBoard(boardBigInt: bigint): number[] { + const tiles: number[] = []; + for (let i = 0; i < 16; i++) { + const shift = BigInt((15 - i) * 8); + const cellLog = Number((boardBigInt >> shift) & 0xFFn); + tiles.push(cellLog > 0 ? Math.pow(2, cellLog) : 0); + } + return tiles; +} + +function encodeBoard(tiles: number[]): string { + let result = 0n; + for (let i = 0; i < 16; i++) { + const log = tiles[i] > 0 ? Math.log2(tiles[i]) : 0; + result |= BigInt(log) << BigInt((15 - i) * 8); + } + return result.toString(16).padStart(32, '0'); +} + +function getHighestTile(tiles: number[]): number { + return Math.max(...tiles, 0); +} + +function getBoardSum(tiles: number[]): number { + return tiles.reduce((a, b) => a + b, 0); +} + +/** + * Calculate score delta from a move by detecting merged tiles. + * + * Algorithm: + * 1. Count tile values in both boards + * 2. Tiles that decreased in count were merged + * 3. Score = sum of merged result values (2X for each pair of X) + */ +function calculateScoreDelta( + prevTiles: number[], + newTiles: number[] +): number { + // Count occurrences of each tile value + const prevCounts = new Map(); + const newCounts = new Map(); + + for (const tile of prevTiles) { + if (tile > 0) { + prevCounts.set(tile, (prevCounts.get(tile) || 0) + 1); + } + } + + for (const tile of newTiles) { + if (tile > 0) { + newCounts.set(tile, (newCounts.get(tile) || 0) + 1); + } + } + + let scoreDelta = 0; + + // For each tile value, check if count decreased (meaning merges happened) + // A merge of two Xs creates one 2X, score += 2X + for (const [value, prevCount] of prevCounts) { + const newCount = newCounts.get(value) || 0; + const newDoubleCount = newCounts.get(value * 2) || 0; + const prevDoubleCount = prevCounts.get(value * 2) || 0; + + // Number of merges = (prevCount - newCount) / 2 + // But also check that double value increased + const doubleIncrease = newDoubleCount - prevDoubleCount; + if (doubleIncrease > 0 && prevCount > newCount) { + // Each merge of two Xs gives score of 2X + scoreDelta += doubleIncrease * (value * 2); + } + } + + return scoreDelta; +} + +// ============================================================ +// NewGame Handler +// ============================================================ + +Monad2048.NewGame.handler(async ({ event, context }) => { + const { player, id: gameId, board } = event.args; + const txHash = event.transaction.hash; + const gasUsed = BigInt(event.transaction.gasUsed || 150000); + const gasPrice = BigInt(event.transaction.effectiveGasPrice || event.transaction.gasPrice || 0); + const monBurned = gasUsed * gasPrice; + + // Decode final board after move 3 + const tiles = decodeBoard(board); + const highestTile = getHighestTile(tiles); + + // For NewGame, we receive board state after move 3 + // The contract validates boards[0] -> boards[1] -> boards[2] -> boards[3] + // We don't have intermediate boards in the event, so we estimate initial score + // Based on board sum: score ≈ boardSum - initialTiles (rough estimate) + // For accurate score, we'd need to decode the calldata + + // Simplified: assume minimal merges in first 3 moves + // Real implementation would decode transaction input data + const boardSum = getBoardSum(tiles); + const estimatedScore = Math.max(0, boardSum - 4 - 4); // Subtract ~2 initial tiles + + // Create Game entity + context.Game.set({ + id: gameId, + player: player.toLowerCase(), + score: estimatedScore, + highestTile, + moveCount: 3, + latestBoard: encodeBoard(tiles), + totalGasUsed: gasUsed, + totalMonBurned: monBurned, + startedAt: BigInt(event.block.timestamp), + lastMoveAt: BigInt(event.block.timestamp), + isActive: true, + }); + + // Create initial GameMove entry (represents moves 1-3 batched) + context.GameMove.set({ + id: txHash, + gameId: gameId, + moveNumber: 3, + direction: 0, // Unknown for batched moves + boardBefore: "0".repeat(32), // Initial board unknown + boardAfter: encodeBoard(tiles), + scoreDelta: estimatedScore, + gasUsed: gasUsed, + gasPrice: gasPrice, + monBurned: monBurned, + timestamp: BigInt(event.block.timestamp), + txHash: txHash, + }); + + // Update or create Player + const existingPlayer = await context.Player.get(player.toLowerCase()); + if (existingPlayer) { + const isBetter = estimatedScore > existingPlayer.bestScore; + context.Player.set({ + ...existingPlayer, + totalGamesPlayed: existingPlayer.totalGamesPlayed + 1, + totalMovesPlayed: existingPlayer.totalMovesPlayed + 3, + totalMonBurned: existingPlayer.totalMonBurned + monBurned, + bestScore: isBetter ? estimatedScore : existingPlayer.bestScore, + bestGameId: isBetter ? gameId : existingPlayer.bestGameId, + }); + } else { + context.Player.set({ + id: player.toLowerCase(), + totalGamesPlayed: 1, + totalMovesPlayed: 3, + totalMonBurned: monBurned, + bestScore: estimatedScore, + bestGameId: gameId, + }); + } + + // Update indexer status + await updateIndexerStatus(context, event); +}); + +// ============================================================ +// NewMove Handler +// ============================================================ + +Monad2048.NewMove.handler(async ({ event, context }) => { + const { player, id: gameId, move, result } = event.args; + const txHash = event.transaction.hash; + const gasUsed = BigInt(event.transaction.gasUsed || 100000); + const gasPrice = BigInt(event.transaction.effectiveGasPrice || event.transaction.gasPrice || 0); + const monBurned = gasUsed * gasPrice; + + // Get existing game + const game = await context.Game.get(gameId); + if (!game) { + console.warn(`NewMove for unknown game: ${gameId}`); + return; + } + + // Decode boards + const prevTiles = decodeBoard(BigInt("0x" + game.latestBoard)); + const newTiles = decodeBoard(result); + + // Calculate score delta from this move + const scoreDelta = calculateScoreDelta(prevTiles, newTiles); + const newScore = game.score + scoreDelta; + const highestTile = getHighestTile(newTiles); + const newMoveCount = game.moveCount + 1; + + // Update Game entity + context.Game.set({ + ...game, + score: newScore, + highestTile: Math.max(game.highestTile, highestTile), + moveCount: newMoveCount, + latestBoard: encodeBoard(newTiles), + totalGasUsed: game.totalGasUsed + gasUsed, + totalMonBurned: game.totalMonBurned + monBurned, + lastMoveAt: BigInt(event.block.timestamp), + }); + + // Create GameMove entry + context.GameMove.set({ + id: txHash, + gameId: gameId, + moveNumber: newMoveCount, + direction: Number(move), + boardBefore: game.latestBoard, + boardAfter: encodeBoard(newTiles), + scoreDelta: scoreDelta, + gasUsed: gasUsed, + gasPrice: gasPrice, + monBurned: monBurned, + timestamp: BigInt(event.block.timestamp), + txHash: txHash, + }); + + // Update Player stats + const existingPlayer = await context.Player.get(player.toLowerCase()); + if (existingPlayer) { + const isBetter = newScore > existingPlayer.bestScore; + context.Player.set({ + ...existingPlayer, + totalMovesPlayed: existingPlayer.totalMovesPlayed + 1, + totalMonBurned: existingPlayer.totalMonBurned + monBurned, + bestScore: isBetter ? newScore : existingPlayer.bestScore, + bestGameId: isBetter ? gameId : existingPlayer.bestGameId, + }); + } + + // Update indexer status + await updateIndexerStatus(context, event); +}); + +// ============================================================ +// Indexer Status Helper +// ============================================================ + +async function updateIndexerStatus(context: handlerContext, event: any) { + const chainId = event.chainId; + const statusId = `status-${chainId}`; + + const existing = await context.IndexerStatus.get(statusId); + const totalGames = existing ? existing.totalGamesIndexed : 0; + + context.IndexerStatus.set({ + id: statusId, + chainId: chainId, + lastIndexedBlock: BigInt(event.block.number), + lastIndexedTimestamp: BigInt(event.block.timestamp), + totalGamesIndexed: totalGames + (event.eventName === "NewGame" ? 1 : 0), + isBackfilling: false, // Will be true during initial sync + }); +} +``` + +### 5. Configuration + +#### `config.yaml` + +```yaml +name: monad-2048-leaderboard +description: Indexes Monad 2048 game events for leaderboard with score and gas tracking +networks: + - id: 143 # Monad Mainnet + start_block: 0 # Or contract deployment block for faster sync + contracts: + - name: Monad2048 + address: "0x53748668642735CDa45935716525E7DFbC8aAACC" + handler: src/handlers/index.ts + events: + - event: NewGame(address indexed player, bytes32 indexed id, uint256 board) + - event: NewMove(address indexed player, bytes32 indexed id, uint256 move, uint256 result) + - id: 10143 # Monad Testnet + start_block: 0 + contracts: + - name: Monad2048 + address: "0xC52d29f79b2552801e95C8Dc7646f59125009904" + handler: src/handlers/index.ts + events: + - event: NewGame(address indexed player, bytes32 indexed id, uint256 board) + - event: NewMove(address indexed player, bytes32 indexed id, uint256 move, uint256 result) + +# Enable transaction data for gas tracking +field_selection: + transaction: + - hash + - from + - gasUsed + - effectiveGasPrice + - gasPrice +``` + +--- + +## Frontend Implementation + +### 1. Project Structure Changes + +``` +packages/frontend/src/ +├── components/ +│ ├── Leaderboard/ +│ │ ├── Leaderboard.tsx # Main leaderboard component +│ │ ├── LeaderboardEntry.tsx # Single entry with animation +│ │ ├── LeaderboardSkeleton.tsx # Loading skeleton +│ │ ├── LeaderboardEmpty.tsx # Empty state +│ │ ├── LeaderboardSyncing.tsx # Syncing/backfill state +│ │ ├── LeaderboardError.tsx # Error state +│ │ └── index.ts +│ └── ...existing components +├── hooks/ +│ ├── useLeaderboard.ts # Leaderboard data + polling +│ ├── useIndexerStatus.ts # Indexer sync status +│ └── ...existing hooks +├── lib/ +│ ├── graphql/ +│ │ ├── client.ts # GraphQL client setup +│ │ ├── queries.ts # Leaderboard queries +│ │ └── types.ts # Generated/manual types +│ ├── utils/ +│ │ └── format.ts # Formatting helpers +│ └── ... +└── ... +``` + +### 2. Dependencies to Add + +```json +{ + "dependencies": { + "framer-motion": "^11.x", + "graphql-request": "^6.x" + } +} +``` + +### 3. GraphQL Queries + +#### `lib/graphql/queries.ts` + +```typescript +import { gql } from 'graphql-request'; + +// Main leaderboard query - sorted by score (primary), then moves (secondary) +export const GET_LEADERBOARD = gql` + query GetLeaderboard($limit: Int = 10) { + Game( + order_by: [ + { score: desc }, + { moveCount: asc }, + { lastMoveAt: desc } + ] + limit: $limit + ) { + id + player + score + highestTile + moveCount + totalGasUsed + totalMonBurned + lastMoveAt + isActive + } + } +`; + +// Indexer status for sync state +export const GET_INDEXER_STATUS = gql` + query GetIndexerStatus($chainId: Int!) { + IndexerStatus(where: { chainId: { _eq: $chainId } }) { + lastIndexedBlock + lastIndexedTimestamp + totalGamesIndexed + isBackfilling + } + } +`; + +// Player's games for highlighting current player +export const GET_PLAYER_GAMES = gql` + query GetPlayerGames($player: String!, $limit: Int = 10) { + Game( + where: { player: { _eq: $player } } + order_by: { score: desc } + limit: $limit + ) { + id + score + highestTile + moveCount + } + } +`; + +// Get specific game details +export const GET_GAME_DETAILS = gql` + query GetGameDetails($gameId: ID!) { + Game_by_pk(id: $gameId) { + id + player + score + highestTile + moveCount + totalGasUsed + totalMonBurned + startedAt + lastMoveAt + isActive + } + GameMove( + where: { gameId: { _eq: $gameId } } + order_by: { moveNumber: asc } + ) { + moveNumber + direction + scoreDelta + gasUsed + monBurned + timestamp + } + } +`; +``` + +#### `lib/graphql/types.ts` + +```typescript +export interface LeaderboardEntry { + id: string; + player: string; + score: number; + highestTile: number; + moveCount: number; + totalGasUsed: string; // BigInt as string + totalMonBurned: string; // BigInt as string (wei) + lastMoveAt: string; // BigInt as string + isActive: boolean; + + // Computed client-side + rank?: number; + isNew?: boolean; + isCurrentPlayer?: boolean; +} + +export interface IndexerStatus { + lastIndexedBlock: string; + lastIndexedTimestamp: string; + totalGamesIndexed: number; + isBackfilling: boolean; +} + +export type LeaderboardState = + | 'loading' // Initial load + | 'empty' // No games indexed yet + | 'syncing' // Indexer is backfilling historical data + | 'ready' // Data available, realtime updates active + | 'error'; // Failed to fetch +``` + +### 4. Formatting Utilities + +#### `lib/utils/format.ts` + +```typescript +/** + * Format wei to MON with appropriate precision + */ +export function formatMonBurned(weiString: string): string { + const wei = BigInt(weiString); + const mon = Number(wei) / 1e18; + + if (mon < 0.0001) { + return '< 0.0001 MON'; + } else if (mon < 1) { + return `${mon.toFixed(4)} MON`; + } else if (mon < 100) { + return `${mon.toFixed(2)} MON`; + } else { + return `${Math.round(mon).toLocaleString()} MON`; + } +} + +/** + * Format gas used with K/M suffixes + */ +export function formatGas(gasString: string): string { + const gas = Number(gasString); + + if (gas >= 1_000_000) { + return `${(gas / 1_000_000).toFixed(1)}M`; + } else if (gas >= 1_000) { + return `${(gas / 1_000).toFixed(0)}K`; + } else { + return gas.toLocaleString(); + } +} + +/** + * Format address for display + */ +export function formatAddress(address: string): string { + return `${address.slice(0, 6)}...${address.slice(-4)}`; +} + +/** + * Format score with comma separators + */ +export function formatScore(score: number): string { + return score.toLocaleString(); +} + +/** + * Format relative time (e.g., "2m ago", "1h ago") + */ +export function formatRelativeTime(timestamp: string): string { + const now = Date.now(); + const then = Number(timestamp) * 1000; // Convert seconds to ms + const diff = now - then; + + const minutes = Math.floor(diff / 60000); + const hours = Math.floor(diff / 3600000); + const days = Math.floor(diff / 86400000); + + if (minutes < 1) return 'just now'; + if (minutes < 60) return `${minutes}m ago`; + if (hours < 24) return `${hours}h ago`; + return `${days}d ago`; +} +``` + +### 5. Hooks + +#### `hooks/useIndexerStatus.ts` + +```typescript +import { useState, useEffect, useCallback } from 'react'; +import { getGraphQLClient } from '@/lib/graphql/client'; +import { GET_INDEXER_STATUS } from '@/lib/graphql/queries'; +import { IndexerStatus } from '@/lib/graphql/types'; +import { useNetwork } from '@/contexts/NetworkContext'; + +const CHAIN_IDS = { mainnet: 143, testnet: 10143 }; + +export function useIndexerStatus() { + const { network } = useNetwork(); + const [status, setStatus] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + const fetchStatus = useCallback(async () => { + try { + const client = getGraphQLClient(network); + const data = await client.request<{ IndexerStatus: IndexerStatus[] }>( + GET_INDEXER_STATUS, + { chainId: CHAIN_IDS[network] } + ); + + setStatus(data.IndexerStatus[0] || null); + setError(null); + } catch (err) { + setError(err as Error); + } finally { + setLoading(false); + } + }, [network]); + + useEffect(() => { + fetchStatus(); + // Poll status less frequently than leaderboard + const interval = setInterval(fetchStatus, 30000); + return () => clearInterval(interval); + }, [fetchStatus]); + + return { status, loading, error, refetch: fetchStatus }; +} +``` + +#### `hooks/useLeaderboard.ts` + +```typescript +import { useState, useEffect, useCallback, useRef } from 'react'; +import { getGraphQLClient } from '@/lib/graphql/client'; +import { GET_LEADERBOARD } from '@/lib/graphql/queries'; +import { LeaderboardEntry, LeaderboardState } from '@/lib/graphql/types'; +import { useNetwork } from '@/contexts/NetworkContext'; +import { useIndexerStatus } from './useIndexerStatus'; + +const POLL_INTERVAL = 5000; // 5 seconds + +interface UseLeaderboardOptions { + currentPlayerAddress?: string; +} + +export function useLeaderboard(options: UseLeaderboardOptions = {}) { + const { currentPlayerAddress } = options; + const { network } = useNetwork(); + const { status: indexerStatus } = useIndexerStatus(); + + const [entries, setEntries] = useState([]); + const [state, setState] = useState('loading'); + const [error, setError] = useState(null); + const previousEntriesRef = useRef([]); + const isFirstFetch = useRef(true); + + const fetchLeaderboard = useCallback(async () => { + try { + const client = getGraphQLClient(network); + const data = await client.request<{ Game: LeaderboardEntry[] }>( + GET_LEADERBOARD, + { limit: 10 } + ); + + const games = data.Game || []; + + // Determine state based on data and indexer status + if (games.length === 0) { + if (indexerStatus?.isBackfilling) { + setState('syncing'); + } else if (indexerStatus?.totalGamesIndexed === 0) { + setState('empty'); + } else { + setState('ready'); // Has games but none in top 10 (unlikely) + } + setEntries([]); + return; + } + + // Enrich entries with computed fields + const enrichedEntries = games.map((game, index) => ({ + ...game, + rank: index + 1, + isNew: !isFirstFetch.current && + !previousEntriesRef.current.some(e => e.id === game.id), + isCurrentPlayer: currentPlayerAddress + ? game.player.toLowerCase() === currentPlayerAddress.toLowerCase() + : false, + })); + + previousEntriesRef.current = enrichedEntries; + isFirstFetch.current = false; + setEntries(enrichedEntries); + setState(indexerStatus?.isBackfilling ? 'syncing' : 'ready'); + setError(null); + } catch (err) { + setError(err as Error); + setState('error'); + } + }, [network, currentPlayerAddress, indexerStatus]); + + // Fetch on mount and when network changes + useEffect(() => { + isFirstFetch.current = true; + setState('loading'); + fetchLeaderboard(); + }, [network]); + + // Poll for updates (pause when tab hidden) + useEffect(() => { + const handleVisibilityChange = () => { + if (!document.hidden) { + fetchLeaderboard(); + } + }; + + document.addEventListener('visibilitychange', handleVisibilityChange); + + const interval = setInterval(() => { + if (!document.hidden) { + fetchLeaderboard(); + } + }, POLL_INTERVAL); + + return () => { + document.removeEventListener('visibilitychange', handleVisibilityChange); + clearInterval(interval); + }; + }, [fetchLeaderboard]); + + return { + entries, + state, + error, + refetch: fetchLeaderboard, + indexerStatus + }; +} +``` + +### 6. Leaderboard Components + +#### `components/Leaderboard/LeaderboardEmpty.tsx` + +```tsx +import { Gamepad2 } from 'lucide-react'; + +export function LeaderboardEmpty() { + return ( +
+ +

No Games Yet

+

+ Be the first to play and claim the #1 spot! +

+
+ ); +} +``` + +#### `components/Leaderboard/LeaderboardSyncing.tsx` + +```tsx +import { Loader2, Database } from 'lucide-react'; + +interface LeaderboardSyncingProps { + totalGamesIndexed?: number; + lastBlock?: string; +} + +export function LeaderboardSyncing({ + totalGamesIndexed = 0, + lastBlock +}: LeaderboardSyncingProps) { + return ( +
+
+ + +
+

Syncing Data

+

+ Indexing historical games... +

+
+

{totalGamesIndexed.toLocaleString()} games indexed

+ {lastBlock &&

Block #{Number(lastBlock).toLocaleString()}

} +
+
+ ); +} +``` + +#### `components/Leaderboard/LeaderboardError.tsx` + +```tsx +import { AlertTriangle, RefreshCw } from 'lucide-react'; + +interface LeaderboardErrorProps { + error: Error; + onRetry: () => void; +} + +export function LeaderboardError({ error, onRetry }: LeaderboardErrorProps) { + return ( +
+ +

Failed to Load

+

+ {error.message || 'Unable to fetch leaderboard data'} +

+ +
+ ); +} +``` + +#### `components/Leaderboard/LeaderboardSkeleton.tsx` + +```tsx +export function LeaderboardSkeleton() { + return ( +
+ {Array.from({ length: 5 }).map((_, i) => ( +
+
+
+
+
+
+
+
+ ))} +
+ ); +} +``` + +#### `components/Leaderboard/Leaderboard.tsx` + +```tsx +import { motion, AnimatePresence } from 'framer-motion'; +import { Trophy, Medal, Flame, Fuel, Zap, Loader2 } from 'lucide-react'; +import { useLeaderboard, LeaderboardEntry } from '@/hooks/useLeaderboard'; +import { LeaderboardSkeleton } from './LeaderboardSkeleton'; +import { LeaderboardEmpty } from './LeaderboardEmpty'; +import { LeaderboardSyncing } from './LeaderboardSyncing'; +import { LeaderboardError } from './LeaderboardError'; +import { + formatAddress, + formatScore, + formatGas, + formatMonBurned +} from '@/lib/utils/format'; + +interface LeaderboardProps { + currentPlayerAddress?: string; +} + +function getRankDisplay(rank: number) { + switch (rank) { + case 1: return ; + case 2: return ; + case 3: return ; + default: return ( + + {rank} + + ); + } +} + +function getTileColorClass(tile: number): string { + const colors: Record = { + 2: 'bg-purple-100 text-purple-800', + 4: 'bg-purple-200 text-purple-800', + 8: 'bg-purple-300 text-purple-900', + 16: 'bg-purple-400 text-white', + 32: 'bg-purple-500 text-white', + 64: 'bg-purple-600 text-white', + 128: 'bg-yellow-400 text-yellow-900', + 256: 'bg-yellow-500 text-white', + 512: 'bg-orange-500 text-white', + 1024: 'bg-orange-600 text-white', + 2048: 'bg-red-500 text-white', + 4096: 'bg-red-600 text-white', + 8192: 'bg-red-700 text-white', + }; + return colors[tile] || 'bg-purple-700 text-white'; +} + +export function Leaderboard({ currentPlayerAddress }: LeaderboardProps) { + const { entries, state, error, refetch, indexerStatus } = useLeaderboard({ + currentPlayerAddress, + }); + + return ( +
+ {/* Header */} +
+

+ + Top 10 High Scores +

+ {state === 'ready' && ( +
+ + Live +
+ )} + {state === 'syncing' && ( +
+ + Syncing +
+ )} +
+ + {/* Content based on state */} + {state === 'loading' && } + + {state === 'empty' && } + + {state === 'syncing' && entries.length === 0 && ( + + )} + + {state === 'error' && error && ( + + )} + + {/* Leaderboard entries */} + {(state === 'ready' || (state === 'syncing' && entries.length > 0)) && ( +
+ + {entries.map((entry) => ( + + {/* New entry badge */} + {entry.isNew && ( + + NEW + + )} + +
+ {/* Rank */} +
+ {getRankDisplay(entry.rank!)} +
+ + {/* Player info */} +
+
+ + {formatAddress(entry.player)} + + {entry.isCurrentPlayer && ( + + YOU + + )} +
+ + {/* Stats row */} +
+ + + {entry.moveCount} moves + + + + {formatGas(entry.totalGasUsed)} + + + + {formatMonBurned(entry.totalMonBurned)} + +
+
+ + {/* Score */} +
+ + {formatScore(entry.score)} + +
+ {entry.highestTile} +
+
+
+
+ ))} +
+
+ )} +
+ ); +} +``` + +### 7. Layout Integration + +#### Updated `Container.tsx` + +```tsx +import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert"; +import { useNetwork } from "@/contexts/NetworkContext"; +import { Leaderboard } from "@/components/Leaderboard"; +import { InfoIcon } from "lucide-react"; +import React from "react"; + +type ContainerProps = { + children: React.ReactNode; + playerAddress?: string; +}; + +export default function Container({ children, playerAddress }: ContainerProps) { + const { network } = useNetwork(); + + return ( +
+ {/* Header */} +
+

+ 2048 +

+

+ on MONAD +

+
+ + {/* Testnet Alert */} + {network === "testnet" && ( +
+ + + Testnet Mode + + Playing on Monad Testnet. Scores are tracked separately. + + +
+ )} + + {/* Main content area: Game + Leaderboard */} +
+ {/* Game board - fixed max width, never shrinks */} +
+ {children} +
+ + {/* Leaderboard - right side on desktop, below on mobile */} +
+ +
+
+
+ ); +} +``` + +--- + +## Local Development Setup + +### 1. Indexer Package Structure + +``` +packages/ +├── frontend/ # Existing React app +├── contracts/ # Existing Foundry contracts +└── indexer/ # NEW: Envio HyperIndex + ├── src/ + │ └── handlers/ + │ └── index.ts + ├── schema.graphql + ├── config.yaml + ├── package.json + ├── tsconfig.json + └── .env.example +``` + +### 2. Indexer Package Configuration + +#### `packages/indexer/package.json` + +```json +{ + "name": "indexer", + "version": "1.0.0", + "scripts": { + "dev": "envio dev", + "start": "envio start", + "stop": "envio stop", + "codegen": "envio codegen", + "test": "mocha" + }, + "dependencies": { + "envio": "^2.x" + }, + "devDependencies": { + "@types/node": "^20.x", + "typescript": "^5.x", + "mocha": "^10.x", + "@types/mocha": "^10.x" + } +} +``` + +### 3. Environment Variables + +#### `packages/indexer/.env.example` + +```env +# Envio API Token (get from envio.dev dashboard) +ENVIO_API_TOKEN=your_token_here +``` + +#### `packages/frontend/.env.local` + +```env +# Existing Privy config +VITE_PRIVY_APP_ID=your_privy_app_id + +# Local development (Docker Hasura) +VITE_ENVIO_GRAPHQL_MAINNET=http://localhost:8080/v1/graphql +VITE_ENVIO_GRAPHQL_TESTNET=http://localhost:8080/v1/graphql + +# Production (Envio hosted - uncomment when deployed) +# VITE_ENVIO_GRAPHQL_MAINNET=https://indexer.bigdevenergy.link/xxxxx/v1/graphql +# VITE_ENVIO_GRAPHQL_TESTNET=https://indexer.bigdevenergy.link/xxxxx/v1/graphql +``` + +### 4. Quick Start Commands + +```bash +# From project root + +# 1. Install all dependencies +pnpm install + +# 2. Start only the indexer (data pipeline) +pnpm dev:indexer +# → Starts Docker containers: PostgreSQL, Hasura, Indexer +# → Opens Hasura console at http://localhost:8080 (password: testing) +# → Begins indexing from configured start_block + +# 3. In another terminal, start the frontend +pnpm dev:frontend +# → Starts Vite dev server at http://localhost:5173 +# → Connects to local Hasura for leaderboard data + +# OR run both together +pnpm dev +# → Runs indexer and frontend in parallel + +# Stop the indexer and clean up Docker +pnpm indexer:stop +``` + +### 5. Verifying the Setup + +1. **Check Hasura Console**: Open http://localhost:8080 + - Login with password: `testing` + - Navigate to "Data" tab + - Verify tables: `Game`, `GameMove`, `Player`, `IndexerStatus` + +2. **Check Indexer Logs**: Watch the terminal running `pnpm dev:indexer` + - Should show blocks being processed + - Events being indexed + +3. **Test Frontend**: Open http://localhost:5173 + - Leaderboard should show "Syncing" state initially + - Play a game on testnet + - Verify new game appears in leaderboard within ~5 seconds + +--- + +## State Handling Matrix + +### Frontend States + +| State | Condition | UI Display | +|-------|-----------|------------| +| `loading` | Initial fetch in progress | Skeleton loader | +| `empty` | Indexer running but no games exist | "No Games Yet" with call-to-action | +| `syncing` | Indexer is backfilling, partial data available | Shows data + "Syncing" indicator | +| `ready` | Indexer caught up, realtime updates active | Full leaderboard + "Live" indicator | +| `error` | GraphQL request failed | Error message + retry button | + +### Indexer States + +| Phase | `isBackfilling` | `totalGamesIndexed` | Frontend Behavior | +|-------|-----------------|---------------------|-------------------| +| Starting | `true` | 0 | Show "Syncing" with progress | +| Backfilling | `true` | Increasing | Show partial data + "Syncing" | +| Caught up | `false` | Stable | Show "Live" indicator | +| Realtime | `false` | Increasing | Animate new entries | + +### Error Recovery + +```typescript +// Exponential backoff for failed requests +const INITIAL_RETRY_DELAY = 1000; +const MAX_RETRY_DELAY = 30000; + +let retryDelay = INITIAL_RETRY_DELAY; + +async function fetchWithRetry() { + try { + await fetchLeaderboard(); + retryDelay = INITIAL_RETRY_DELAY; // Reset on success + } catch (error) { + console.error('Fetch failed, retrying in', retryDelay); + setTimeout(fetchWithRetry, retryDelay); + retryDelay = Math.min(retryDelay * 2, MAX_RETRY_DELAY); + } +} +``` + +--- + +## Implementation Checklist + +### Phase 1: Indexer Setup + +- [ ] Create `packages/indexer` directory structure +- [ ] Add `indexer` to pnpm workspace (`pnpm-workspace.yaml`) +- [ ] Initialize Envio project: `cd packages/indexer && pnpm envio init` +- [ ] Define GraphQL schema with Game, GameMove, Player, IndexerStatus entities +- [ ] Configure `config.yaml` with both networks and transaction fields +- [ ] Implement board decoding utilities +- [ ] Implement score calculation from board transitions +- [ ] Implement NewGame handler with gas tracking +- [ ] Implement NewMove handler with gas tracking +- [ ] Implement IndexerStatus updates +- [ ] Add root-level scripts to `package.json` +- [ ] Test locally with `pnpm dev:indexer` +- [ ] Verify data in Hasura console + +### Phase 2: Frontend - GraphQL Integration + +- [ ] Install dependencies: `pnpm --filter frontend add framer-motion graphql-request` +- [ ] Create `lib/graphql/client.ts` with network-aware endpoints +- [ ] Create `lib/graphql/queries.ts` with all queries +- [ ] Create `lib/graphql/types.ts` with TypeScript interfaces +- [ ] Create `lib/utils/format.ts` with formatting helpers +- [ ] Implement `useIndexerStatus` hook +- [ ] Implement `useLeaderboard` hook with state management + +### Phase 3: Frontend - UI Components + +- [ ] Create `LeaderboardSkeleton` component +- [ ] Create `LeaderboardEmpty` component +- [ ] Create `LeaderboardSyncing` component +- [ ] Create `LeaderboardError` component +- [ ] Create main `Leaderboard` component with all states +- [ ] Add Framer Motion animations +- [ ] Test all state transitions + +### Phase 4: Layout Integration + +- [ ] Update `Container.tsx` for side-by-side desktop layout +- [ ] Pass `playerAddress` prop through component tree +- [ ] Ensure game board doesn't shrink on any viewport +- [ ] Make leaderboard sticky on desktop +- [ ] Test responsive behavior: mobile, tablet, desktop + +### Phase 5: Polish & Testing + +- [ ] Test empty state (fresh indexer) +- [ ] Test syncing state (during backfill) +- [ ] Test realtime updates (play a game, watch it appear) +- [ ] Test error recovery (stop Hasura, verify retry behavior) +- [ ] Test current player highlighting +- [ ] Test new entry animations +- [ ] Test same player multiple entries +- [ ] Performance test animations on mobile + +### Phase 6: Production Deployment + +- [ ] Deploy indexer to Envio hosted service +- [ ] Configure production GraphQL endpoints +- [ ] Update frontend environment variables +- [ ] Test production data flow +- [ ] Monitor indexer sync status +- [ ] Set up alerts for indexer issues + +--- + +## Gas Constants Reference + +| Transaction | Estimated Gas | Notes | +|-------------|---------------|-------| +| `startGame()` | ~150,000 | Validates first 3 moves | +| `play()` | ~100,000 | Single move validation | + +**MON Burned Calculation**: +``` +monBurned = gasUsed × effectiveGasPrice +monBurnedInMon = monBurned / 10^18 +``` + +--- + +## Contract Addresses Reference + +| Network | Chain ID | Contract Address | +|---------|----------|------------------| +| Monad Mainnet | 143 | `0x53748668642735CDa45935716525E7DFbC8aAACC` | +| Monad Testnet | 10143 | `0xC52d29f79b2552801e95C8Dc7646f59125009904` | + +## Envio Endpoints Reference + +| Network | HyperSync URL | +|---------|---------------| +| Monad Mainnet | `https://monad.hypersync.xyz` | +| Monad Testnet | `https://monad-testnet.hypersync.xyz` | From 89f215de4b7e3b703538d34089b24e6abb7e0eae Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 29 Jan 2026 12:09:06 +0530 Subject: [PATCH 07/18] refactor: remove testnet --- FEATURE.md | 59 ++------- packages/frontend/.env.local.example | 2 - packages/frontend/src/App.tsx | 22 +-- .../frontend/src/components/Container.tsx | 68 +++------- .../frontend/src/components/FaucetDialog.tsx | 12 +- .../frontend/src/components/NetworkToggle.tsx | 125 ------------------ .../frontend/src/contexts/NetworkContext.tsx | 53 +------- .../frontend/src/hooks/useTransactions.tsx | 9 +- packages/frontend/src/utils/client.ts | 23 +--- packages/frontend/src/utils/constants.ts | 8 +- 10 files changed, 56 insertions(+), 325 deletions(-) delete mode 100644 packages/frontend/src/components/NetworkToggle.tsx diff --git a/FEATURE.md b/FEATURE.md index c4cf185..5f5d2d3 100644 --- a/FEATURE.md +++ b/FEATURE.md @@ -521,15 +521,6 @@ networks: events: - event: NewGame(address indexed player, bytes32 indexed id, uint256 board) - event: NewMove(address indexed player, bytes32 indexed id, uint256 move, uint256 result) - - id: 10143 # Monad Testnet - start_block: 0 - contracts: - - name: Monad2048 - address: "0xC52d29f79b2552801e95C8Dc7646f59125009904" - handler: src/handlers/index.ts - events: - - event: NewGame(address indexed player, bytes32 indexed id, uint256 board) - - event: NewMove(address indexed player, bytes32 indexed id, uint256 move, uint256 result) # Enable transaction data for gas tracking field_selection: @@ -791,20 +782,19 @@ import { GET_INDEXER_STATUS } from '@/lib/graphql/queries'; import { IndexerStatus } from '@/lib/graphql/types'; import { useNetwork } from '@/contexts/NetworkContext'; -const CHAIN_IDS = { mainnet: 143, testnet: 10143 }; +const CHAIN_ID = 143; // Monad Mainnet export function useIndexerStatus() { - const { network } = useNetwork(); const [status, setStatus] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const fetchStatus = useCallback(async () => { try { - const client = getGraphQLClient(network); + const client = getGraphQLClient(); const data = await client.request<{ IndexerStatus: IndexerStatus[] }>( GET_INDEXER_STATUS, - { chainId: CHAIN_IDS[network] } + { chainId: CHAIN_ID } ); setStatus(data.IndexerStatus[0] || null); @@ -814,7 +804,7 @@ export function useIndexerStatus() { } finally { setLoading(false); } - }, [network]); + }, []); useEffect(() => { fetchStatus(); @@ -845,7 +835,6 @@ interface UseLeaderboardOptions { export function useLeaderboard(options: UseLeaderboardOptions = {}) { const { currentPlayerAddress } = options; - const { network } = useNetwork(); const { status: indexerStatus } = useIndexerStatus(); const [entries, setEntries] = useState([]); @@ -856,7 +845,7 @@ export function useLeaderboard(options: UseLeaderboardOptions = {}) { const fetchLeaderboard = useCallback(async () => { try { - const client = getGraphQLClient(network); + const client = getGraphQLClient(); const data = await client.request<{ Game: LeaderboardEntry[] }>( GET_LEADERBOARD, { limit: 10 } @@ -897,14 +886,14 @@ export function useLeaderboard(options: UseLeaderboardOptions = {}) { setError(err as Error); setState('error'); } - }, [network, currentPlayerAddress, indexerStatus]); + }, [currentPlayerAddress, indexerStatus]); - // Fetch on mount and when network changes + // Fetch on mount useEffect(() => { isFirstFetch.current = true; setState('loading'); fetchLeaderboard(); - }, [network]); + }, []); // Poll for updates (pause when tab hidden) useEffect(() => { @@ -1249,10 +1238,7 @@ export function Leaderboard({ currentPlayerAddress }: LeaderboardProps) { #### Updated `Container.tsx` ```tsx -import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert"; -import { useNetwork } from "@/contexts/NetworkContext"; import { Leaderboard } from "@/components/Leaderboard"; -import { InfoIcon } from "lucide-react"; import React from "react"; type ContainerProps = { @@ -1261,8 +1247,6 @@ type ContainerProps = { }; export default function Container({ children, playerAddress }: ContainerProps) { - const { network } = useNetwork(); - return (
{/* Header */} @@ -1275,19 +1259,6 @@ export default function Container({ children, playerAddress }: ContainerProps) {
- {/* Testnet Alert */} - {network === "testnet" && ( -
- - - Testnet Mode - - Playing on Monad Testnet. Scores are tracked separately. - - -
- )} - {/* Main content area: Game + Leaderboard */}
{/* Game board - fixed max width, never shrinks */} @@ -1369,12 +1340,10 @@ ENVIO_API_TOKEN=your_token_here VITE_PRIVY_APP_ID=your_privy_app_id # Local development (Docker Hasura) -VITE_ENVIO_GRAPHQL_MAINNET=http://localhost:8080/v1/graphql -VITE_ENVIO_GRAPHQL_TESTNET=http://localhost:8080/v1/graphql +VITE_ENVIO_GRAPHQL_URL=http://localhost:8080/v1/graphql # Production (Envio hosted - uncomment when deployed) -# VITE_ENVIO_GRAPHQL_MAINNET=https://indexer.bigdevenergy.link/xxxxx/v1/graphql -# VITE_ENVIO_GRAPHQL_TESTNET=https://indexer.bigdevenergy.link/xxxxx/v1/graphql +# VITE_ENVIO_GRAPHQL_URL=https://indexer.bigdevenergy.link/xxxxx/v1/graphql ``` ### 4. Quick Start Commands @@ -1417,7 +1386,7 @@ pnpm indexer:stop 3. **Test Frontend**: Open http://localhost:5173 - Leaderboard should show "Syncing" state initially - - Play a game on testnet + - Play a game - Verify new game appears in leaderboard within ~5 seconds --- @@ -1549,16 +1518,14 @@ monBurnedInMon = monBurned / 10^18 --- -## Contract Addresses Reference +## Contract Address Reference | Network | Chain ID | Contract Address | |---------|----------|------------------| | Monad Mainnet | 143 | `0x53748668642735CDa45935716525E7DFbC8aAACC` | -| Monad Testnet | 10143 | `0xC52d29f79b2552801e95C8Dc7646f59125009904` | -## Envio Endpoints Reference +## Envio Endpoint Reference | Network | HyperSync URL | |---------|---------------| | Monad Mainnet | `https://monad.hypersync.xyz` | -| Monad Testnet | `https://monad-testnet.hypersync.xyz` | diff --git a/packages/frontend/.env.local.example b/packages/frontend/.env.local.example index 7ce1fa2..b64868d 100644 --- a/packages/frontend/.env.local.example +++ b/packages/frontend/.env.local.example @@ -1,4 +1,2 @@ VITE_PRIVY_APP_ID= -VITE_MONAD_TESTNET_RPC_URL= VITE_MONAD_MAINNET_RPC_URL= -VITE_2048_FAUCET_URL= diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 6c9b97f..12bb110 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -14,7 +14,6 @@ import Board from "./components/Board"; import Container from "./components/Container"; import { FaucetDialog } from "./components/FaucetDialog"; import LoginButton, { PlayerInfo } from "./components/LoginButton"; -import NetworkToggle from "./components/NetworkToggle"; import Scorecard from "./components/Scorecard"; import { useTransactions } from "./hooks/useTransactions"; @@ -78,17 +77,6 @@ export default function Game2048() { const hasActiveGame = activeGameId !== "0x" && boardState.tiles.length > 0; - const handleNetworkChange = () => { - setActiveGameId("0x"); - setEncodedMoves([]); - setPlayedMovesCount(0); - setBoardState({ tiles: [], score: 0 }); - setResetBoards([]); - setGameOver(false); - setGameError(false); - setGameErrorText(""); - }; - // =============================================================// // Detect and execute moves // // =============================================================// @@ -721,15 +709,7 @@ export default function Game2048() {
- {user && ( - <> - - - - )} + {user && }
diff --git a/packages/frontend/src/components/Container.tsx b/packages/frontend/src/components/Container.tsx index 536d664..ee3285f 100644 --- a/packages/frontend/src/components/Container.tsx +++ b/packages/frontend/src/components/Container.tsx @@ -1,59 +1,25 @@ -import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert"; -import { useNetwork } from "@/contexts/NetworkContext"; -import { InfoIcon } from "lucide-react"; import React from "react"; type ContainerProps = { - children: React.ReactNode; // Accepts any valid React element(s) + children: React.ReactNode; }; export default function Container({ children }: ContainerProps) { - const { network } = useNetwork(); + return ( +
+
+

+ 2048 +

+

+ on MONAD +

+
- return ( -
-
-

- 2048 -

-

- on MONAD -

-
- - {network === "testnet" && ( -
- - - - 2048 Faucet Has Ended - - -

- - The 2048 game will no longer be funding player addresses at this time. Please claim more tokens at{" "} - - - faucet.monad.xyz - {" "} - - and deposit to your player address here. - -

-
-
-
- )} - - {/* Main content area */} -
- {children} -
-
- ); + {/* Main content area */} +
+ {children} +
+
+ ); } diff --git a/packages/frontend/src/components/FaucetDialog.tsx b/packages/frontend/src/components/FaucetDialog.tsx index 1d67014..1f0bff0 100644 --- a/packages/frontend/src/components/FaucetDialog.tsx +++ b/packages/frontend/src/components/FaucetDialog.tsx @@ -27,7 +27,7 @@ export function FaucetDialog({ resyncGame, }: FaucetDialogProps) { const { user } = usePrivy(); - const { publicClient, network } = useNetwork(); + const { publicClient } = useNetwork(); const [address, setAddress] = useState(""); const [balance, setBalance] = useState(0n); @@ -76,7 +76,7 @@ export function FaucetDialog({ useEffect(() => { if (!isOpen) return; setupUser(); - }, [user, isOpen, network]); + }, [user, isOpen]); const abbreviatedAddress = address ? `${address.slice(0, 4)}...${address.slice(-2)}` @@ -132,8 +132,8 @@ export function FaucetDialog({

- Fund your player address with testnet MON directly via your - external wallet, or get 0.5 MON from the game faucet. + Fund your player address with MON directly via your external + wallet.

@@ -154,12 +154,12 @@ export function FaucetDialog({ asChild > -

Fund via faucet

+

Get MON

diff --git a/packages/frontend/src/components/NetworkToggle.tsx b/packages/frontend/src/components/NetworkToggle.tsx deleted file mode 100644 index ec82928..0000000 --- a/packages/frontend/src/components/NetworkToggle.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { useState } from "react"; -import { - AlertDialog, - AlertDialogAction, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogTitle, -} from "@/components/ui/alert-dialog"; -import { type Network, useNetwork } from "@/contexts/NetworkContext"; - -type NetworkToggleProps = { - hasActiveGame: boolean; - onNetworkChange?: () => void; -}; - -export default function NetworkToggle({ - hasActiveGame, - onNetworkChange, -}: NetworkToggleProps) { - const { network, setNetwork } = useNetwork(); - const [pendingNetwork, setPendingNetwork] = useState(null); - - const handleToggle = (newNetwork: Network) => { - if (newNetwork === network) return; - - if (hasActiveGame) { - setPendingNetwork(newNetwork); - } else { - setNetwork(newNetwork); - onNetworkChange?.(); - } - }; - - const confirmSwitch = () => { - if (pendingNetwork) { - setNetwork(pendingNetwork); - onNetworkChange?.(); - setPendingNetwork(null); - } - }; - - return ( - <> -
- - -
- - !open && setPendingNetwork(null)} - > - - - - Switch Network? - - - Switching networks will end your current game. Your progress on - this network will not be saved. - - - - - Cancel - - - Switch to {pendingNetwork === "mainnet" ? "Mainnet" : "Testnet"} - - - - - - ); -} diff --git a/packages/frontend/src/contexts/NetworkContext.tsx b/packages/frontend/src/contexts/NetworkContext.tsx index 28e7fcf..82c209d 100644 --- a/packages/frontend/src/contexts/NetworkContext.tsx +++ b/packages/frontend/src/contexts/NetworkContext.tsx @@ -1,18 +1,9 @@ -import { createContext, type ReactNode, useContext, useState } from "react"; +import { createContext, type ReactNode, useContext } from "react"; import type { Chain, PublicClient } from "viem"; -import { monad, monadTestnet } from "viem/chains"; -import { - mainnetPublicClient, - mainnetRpc, - testnetPublicClient, - testnetRpc, -} from "@/utils/client"; - -export type Network = "mainnet" | "testnet"; +import { monad } from "viem/chains"; +import { mainnetPublicClient, mainnetRpc } from "@/utils/client"; type NetworkContextType = { - network: Network; - setNetwork: (network: Network) => void; chain: Chain; publicClient: PublicClient; rpcUrl: string; @@ -21,44 +12,14 @@ type NetworkContextType = { const NetworkContext = createContext(null); -function getNetworkFromUrl(): Network { - const params = new URLSearchParams(window.location.search); - const network = params.get("network"); - return network === "testnet" ? "testnet" : "mainnet"; -} - -function updateUrlParam(network: Network) { - const url = new URL(window.location.href); - if (network === "mainnet") { - url.searchParams.delete("network"); - } else { - url.searchParams.set("network", network); - } - window.history.replaceState({}, "", url.toString()); -} - export function NetworkProvider({ children }: { children: ReactNode }) { - const [network, setNetworkState] = useState(getNetworkFromUrl); - - const setNetwork = (newNetwork: Network) => { - setNetworkState(newNetwork); - updateUrlParam(newNetwork); - }; - - const chain = network === "mainnet" ? monad : monadTestnet; - const publicClient = - network === "mainnet" ? mainnetPublicClient : testnetPublicClient; - const rpcUrl = network === "mainnet" ? mainnetRpc : testnetRpc; - return ( {children} diff --git a/packages/frontend/src/hooks/useTransactions.tsx b/packages/frontend/src/hooks/useTransactions.tsx index 919a04b..cbb341f 100644 --- a/packages/frontend/src/hooks/useTransactions.tsx +++ b/packages/frontend/src/hooks/useTransactions.tsx @@ -29,7 +29,7 @@ const TRANSACTION_TIMEOUT_MS = 10_000; export function useTransactions() { const { user } = usePrivy(); const { ready, wallets } = useWallets(); - const { network, chain, publicClient, explorerUrl, rpcUrl } = useNetwork(); + const { chain, publicClient, explorerUrl, rpcUrl } = useNetwork(); const userNonce = useRef(0); const userBalance = useRef(0n); @@ -65,7 +65,7 @@ export function useTransactions() { useEffect(() => { resetNonceAndBalance(); - }, [user, network]); + }, [user]); const walletClient = useRef | null>(null); useEffect(() => { @@ -116,10 +116,9 @@ export function useTransactions() { const startTime = Date.now(); const { maxFeePerGas, maxPriorityFeePerGas } = await getEstimatedFees( publicClient, - network, ); const signedTransaction = await provider.signTransaction({ - to: GAME_CONTRACT_ADDRESS[network], + to: GAME_CONTRACT_ADDRESS, account: privyUserAddress as Address, data, nonce, @@ -209,7 +208,7 @@ export function useTransactions() { ] > { const [latestBoard, nextMoveNumber] = await publicClient.readContract({ - address: GAME_CONTRACT_ADDRESS[network], + address: GAME_CONTRACT_ADDRESS, abi: [ { type: "function", diff --git a/packages/frontend/src/utils/client.ts b/packages/frontend/src/utils/client.ts index cc06f17..09f6d63 100644 --- a/packages/frontend/src/utils/client.ts +++ b/packages/frontend/src/utils/client.ts @@ -1,39 +1,28 @@ import { createPublicClient, http, type PublicClient } from "viem"; -import { monad, monadTestnet } from "viem/chains"; +import { monad } from "viem/chains"; -export const testnetRpc = - import.meta.env.VITE_MONAD_TESTNET_RPC_URL || - monadTestnet.rpcUrls.default.http[0]; export const mainnetRpc = import.meta.env.VITE_MONAD_MAINNET_RPC_URL || monad.rpcUrls.default.http[0]; -export const testnetPublicClient = createPublicClient({ - chain: monadTestnet, - transport: http(testnetRpc), -}); export const mainnetPublicClient = createPublicClient({ chain: monad, transport: http(mainnetRpc), }); type FeeCache = { maxFeePerGas: bigint; maxPriorityFeePerGas: bigint }; -const cachedFees: { testnet: FeeCache | null; mainnet: FeeCache | null } = { - testnet: null, - mainnet: null, -}; +let cachedFees: FeeCache | null = null; export async function getEstimatedFees( publicClient: PublicClient, - network: "mainnet" | "testnet", ): Promise { - if (cachedFees[network]) { - return cachedFees[network]; + if (cachedFees) { + return cachedFees; } const fees = await publicClient.estimateFeesPerGas(); - cachedFees[network] = { + cachedFees = { maxFeePerGas: fees.maxFeePerGas, maxPriorityFeePerGas: fees.maxPriorityFeePerGas, }; - return cachedFees[network]; + return cachedFees; } diff --git a/packages/frontend/src/utils/constants.ts b/packages/frontend/src/utils/constants.ts index bdf3804..be13080 100644 --- a/packages/frontend/src/utils/constants.ts +++ b/packages/frontend/src/utils/constants.ts @@ -1,6 +1,2 @@ -import type { Network } from "@/contexts/NetworkContext"; - -export const GAME_CONTRACT_ADDRESS: Record = { - testnet: "0xC52d29f79b2552801e95C8Dc7646f59125009904", - mainnet: "0x53748668642735CDa45935716525E7DFbC8aAACC", -}; +export const GAME_CONTRACT_ADDRESS: `0x${string}` = + "0x53748668642735CDa45935716525E7DFbC8aAACC"; From 86660dd96600ff3e36e31890d8cc505af0ff6480 Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 29 Jan 2026 13:07:57 +0530 Subject: [PATCH 08/18] feat-wip: leaderboard --- package.json | 14 +- packages/frontend/.env.local.example | 5 + packages/frontend/package.json | 3 + packages/frontend/src/App.tsx | 4 +- .../frontend/src/components/Container.tsx | 21 +- .../components/Leaderboard/Leaderboard.tsx | 193 + .../Leaderboard/LeaderboardEmpty.tsx | 13 + .../Leaderboard/LeaderboardError.tsx | 25 + .../Leaderboard/LeaderboardSkeleton.tsx | 20 + .../Leaderboard/LeaderboardSyncing.tsx | 28 + .../src/components/Leaderboard/index.ts | 5 + .../frontend/src/hooks/useIndexerStatus.ts | 39 + packages/frontend/src/hooks/useLeaderboard.ts | 104 + packages/indexer/.env.example | 2 + packages/indexer/config.yaml | 21 + packages/indexer/generated/.gitignore | 32 + packages/indexer/generated/.npmrc | 1 + packages/indexer/generated/LICENSE.md | 67 + .../indexer/generated/docker-compose.yaml | 52 + packages/indexer/generated/index.d.ts | 21 + packages/indexer/generated/index.js | 13 + packages/indexer/generated/package-lock.json | 3206 +++++++++++++++++ packages/indexer/generated/package.json | 49 + .../generated/persisted_state.envio.json | 1 + packages/indexer/generated/rescript.json | 35 + packages/indexer/generated/src/Benchmark.res | 394 ++ .../indexer/generated/src/ConfigYAML.gen.ts | 38 + packages/indexer/generated/src/ConfigYAML.res | 74 + packages/indexer/generated/src/Env.res | 230 ++ .../indexer/generated/src/EventProcessing.res | 478 +++ packages/indexer/generated/src/Generated.res | 184 + .../generated/src/GqlDbCustomTypes.gen.ts | 8 + .../generated/src/GqlDbCustomTypes.res | 11 + .../indexer/generated/src/Handlers.gen.ts | 69 + packages/indexer/generated/src/Handlers.res | 13 + packages/indexer/generated/src/IO.res | 396 ++ packages/indexer/generated/src/Index.bs.js | 209 ++ packages/indexer/generated/src/Index.res | 337 ++ packages/indexer/generated/src/Js.shim.ts | 11 + packages/indexer/generated/src/LoadLayer.res | 444 +++ packages/indexer/generated/src/LoadLayer.resi | 32 + packages/indexer/generated/src/Path.res | 1 + .../indexer/generated/src/PersistedState.res | 25 + .../indexer/generated/src/TestHelpers.gen.ts | 80 + .../indexer/generated/src/TestHelpers.res | 244 ++ .../src/TestHelpers_MockAddresses.gen.ts | 12 + .../src/TestHelpers_MockAddresses.res | 30 + .../generated/src/TestHelpers_MockDb.gen.ts | 57 + .../generated/src/TestHelpers_MockDb.res | 670 ++++ packages/indexer/generated/src/Types.gen.ts | 244 ++ packages/indexer/generated/src/Types.res | 451 +++ packages/indexer/generated/src/Types.ts | 282 ++ .../indexer/generated/src/UserContext.res | 360 ++ .../indexer/generated/src/bindings/Dotenv.res | 17 + .../generated/src/bindings/Ethers.gen.ts | 15 + .../generated/src/bindings/OpaqueTypes.ts | 5 + .../generated/src/bindings/RescriptMocha.res | 123 + .../indexer/generated/src/bindings/Yargs.res | 8 + packages/indexer/generated/src/db/Db.res | 30 + .../indexer/generated/src/db/DbFunctions.res | 33 + .../generated/src/db/DbFunctionsEntities.res | 22 + .../src/db/DbFunctionsImplementation.js | 17 + .../indexer/generated/src/db/Entities.gen.ts | 67 + .../indexer/generated/src/db/Entities.res | 591 +++ .../indexer/generated/src/db/Enums.gen.ts | 13 + packages/indexer/generated/src/db/Enums.res | 36 + .../indexer/generated/src/db/Migrations.res | 57 + .../src/eventFetching/ChainFetcher.res | 464 +++ .../src/eventFetching/ChainManager.res | 174 + .../src/eventFetching/NetworkSources.res | 93 + .../generated/src/globalState/GlobalState.res | 1168 ++++++ .../src/globalState/GlobalStateManager.res | 76 + .../src/globalState/GlobalStateManager.resi | 7 + .../indexer/generated/src/ink/EnvioInkApp.res | 67 + .../generated/src/ink/bindings/DateFns.res | 71 + .../generated/src/ink/bindings/Ink.res | 355 ++ .../generated/src/ink/bindings/Style.res | 123 + .../ink/components/BufferedProgressBar.res | 40 + .../src/ink/components/ChainData.res | 161 + .../src/ink/components/CustomHooks.res | 115 + .../generated/src/ink/components/Messages.res | 41 + .../generated/src/ink/components/SyncETA.res | 198 + packages/indexer/package.json | 21 + packages/indexer/schema.graphql | 56 + packages/indexer/src/handlers/index.ts | 265 ++ packages/indexer/tsconfig.json | 18 + pnpm-lock.yaml | 867 ++++- 87 files changed, 14751 insertions(+), 21 deletions(-) create mode 100644 packages/frontend/src/components/Leaderboard/Leaderboard.tsx create mode 100644 packages/frontend/src/components/Leaderboard/LeaderboardEmpty.tsx create mode 100644 packages/frontend/src/components/Leaderboard/LeaderboardError.tsx create mode 100644 packages/frontend/src/components/Leaderboard/LeaderboardSkeleton.tsx create mode 100644 packages/frontend/src/components/Leaderboard/LeaderboardSyncing.tsx create mode 100644 packages/frontend/src/components/Leaderboard/index.ts create mode 100644 packages/frontend/src/hooks/useIndexerStatus.ts create mode 100644 packages/frontend/src/hooks/useLeaderboard.ts create mode 100644 packages/indexer/.env.example create mode 100644 packages/indexer/config.yaml create mode 100644 packages/indexer/generated/.gitignore create mode 100644 packages/indexer/generated/.npmrc create mode 100644 packages/indexer/generated/LICENSE.md create mode 100644 packages/indexer/generated/docker-compose.yaml create mode 100644 packages/indexer/generated/index.d.ts create mode 100644 packages/indexer/generated/index.js create mode 100644 packages/indexer/generated/package-lock.json create mode 100644 packages/indexer/generated/package.json create mode 100644 packages/indexer/generated/persisted_state.envio.json create mode 100644 packages/indexer/generated/rescript.json create mode 100644 packages/indexer/generated/src/Benchmark.res create mode 100644 packages/indexer/generated/src/ConfigYAML.gen.ts create mode 100644 packages/indexer/generated/src/ConfigYAML.res create mode 100644 packages/indexer/generated/src/Env.res create mode 100644 packages/indexer/generated/src/EventProcessing.res create mode 100644 packages/indexer/generated/src/Generated.res create mode 100644 packages/indexer/generated/src/GqlDbCustomTypes.gen.ts create mode 100644 packages/indexer/generated/src/GqlDbCustomTypes.res create mode 100644 packages/indexer/generated/src/Handlers.gen.ts create mode 100644 packages/indexer/generated/src/Handlers.res create mode 100644 packages/indexer/generated/src/IO.res create mode 100644 packages/indexer/generated/src/Index.bs.js create mode 100644 packages/indexer/generated/src/Index.res create mode 100644 packages/indexer/generated/src/Js.shim.ts create mode 100644 packages/indexer/generated/src/LoadLayer.res create mode 100644 packages/indexer/generated/src/LoadLayer.resi create mode 100644 packages/indexer/generated/src/Path.res create mode 100644 packages/indexer/generated/src/PersistedState.res create mode 100644 packages/indexer/generated/src/TestHelpers.gen.ts create mode 100644 packages/indexer/generated/src/TestHelpers.res create mode 100644 packages/indexer/generated/src/TestHelpers_MockAddresses.gen.ts create mode 100644 packages/indexer/generated/src/TestHelpers_MockAddresses.res create mode 100644 packages/indexer/generated/src/TestHelpers_MockDb.gen.ts create mode 100644 packages/indexer/generated/src/TestHelpers_MockDb.res create mode 100644 packages/indexer/generated/src/Types.gen.ts create mode 100644 packages/indexer/generated/src/Types.res create mode 100644 packages/indexer/generated/src/Types.ts create mode 100644 packages/indexer/generated/src/UserContext.res create mode 100644 packages/indexer/generated/src/bindings/Dotenv.res create mode 100644 packages/indexer/generated/src/bindings/Ethers.gen.ts create mode 100644 packages/indexer/generated/src/bindings/OpaqueTypes.ts create mode 100644 packages/indexer/generated/src/bindings/RescriptMocha.res create mode 100644 packages/indexer/generated/src/bindings/Yargs.res create mode 100644 packages/indexer/generated/src/db/Db.res create mode 100644 packages/indexer/generated/src/db/DbFunctions.res create mode 100644 packages/indexer/generated/src/db/DbFunctionsEntities.res create mode 100644 packages/indexer/generated/src/db/DbFunctionsImplementation.js create mode 100644 packages/indexer/generated/src/db/Entities.gen.ts create mode 100644 packages/indexer/generated/src/db/Entities.res create mode 100644 packages/indexer/generated/src/db/Enums.gen.ts create mode 100644 packages/indexer/generated/src/db/Enums.res create mode 100644 packages/indexer/generated/src/db/Migrations.res create mode 100644 packages/indexer/generated/src/eventFetching/ChainFetcher.res create mode 100644 packages/indexer/generated/src/eventFetching/ChainManager.res create mode 100644 packages/indexer/generated/src/eventFetching/NetworkSources.res create mode 100644 packages/indexer/generated/src/globalState/GlobalState.res create mode 100644 packages/indexer/generated/src/globalState/GlobalStateManager.res create mode 100644 packages/indexer/generated/src/globalState/GlobalStateManager.resi create mode 100644 packages/indexer/generated/src/ink/EnvioInkApp.res create mode 100644 packages/indexer/generated/src/ink/bindings/DateFns.res create mode 100644 packages/indexer/generated/src/ink/bindings/Ink.res create mode 100644 packages/indexer/generated/src/ink/bindings/Style.res create mode 100644 packages/indexer/generated/src/ink/components/BufferedProgressBar.res create mode 100644 packages/indexer/generated/src/ink/components/ChainData.res create mode 100644 packages/indexer/generated/src/ink/components/CustomHooks.res create mode 100644 packages/indexer/generated/src/ink/components/Messages.res create mode 100644 packages/indexer/generated/src/ink/components/SyncETA.res create mode 100644 packages/indexer/package.json create mode 100644 packages/indexer/schema.graphql create mode 100644 packages/indexer/src/handlers/index.ts create mode 100644 packages/indexer/tsconfig.json diff --git a/package.json b/package.json index 06af206..a96daf8 100644 --- a/package.json +++ b/package.json @@ -4,11 +4,16 @@ "private": true, "type": "module", "scripts": { - "dev": "pnpm --filter frontend dev", + "dev": "pnpm run --parallel dev:frontend dev:indexer", "dev:frontend": "pnpm --filter frontend dev", - "build": "pnpm -r build", + "dev:indexer": "pnpm --filter indexer dev", + "build": "pnpm run --parallel build:frontend build:indexer", "build:frontend": "pnpm --filter frontend build", "build:contracts": "pnpm --filter contracts build", + "build:indexer": "pnpm --filter indexer codegen", + "indexer:start": "pnpm --filter indexer dev", + "indexer:stop": "pnpm --filter indexer stop", + "indexer:codegen": "pnpm --filter indexer codegen", "test": "pnpm -r test", "test:frontend": "pnpm --filter frontend test", "test:contracts": "pnpm --filter contracts test", @@ -16,7 +21,10 @@ "lint:frontend": "pnpm --filter frontend lint", "lint:contracts": "pnpm --filter contracts lint", "preview": "pnpm --filter frontend preview", - "contracts:deploy": "pnpm --filter contracts deploy" + "contracts:deploy": "pnpm --filter contracts deploy", + "clean": "pnpm run --parallel clean:frontend clean:indexer", + "clean:frontend": "pnpm --filter frontend clean", + "clean:indexer": "pnpm --filter indexer stop" }, "engines": { "node": ">=18", diff --git a/packages/frontend/.env.local.example b/packages/frontend/.env.local.example index b64868d..9d95302 100644 --- a/packages/frontend/.env.local.example +++ b/packages/frontend/.env.local.example @@ -1,2 +1,7 @@ VITE_PRIVY_APP_ID= VITE_MONAD_MAINNET_RPC_URL= + +# Leaderboard GraphQL endpoint +# For local development (Docker Hasura): http://localhost:8080/v1/graphql +# For production (Envio hosted): https://indexer.bigdevenergy.link/xxxxx/v1/graphql +VITE_ENVIO_GRAPHQL_URL=http://localhost:8080/v1/graphql diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 26b476e..6c913a4 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -18,6 +18,9 @@ "@types/node": "^22.13.14", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "framer-motion": "^11.18.0", + "graphql": "^16.10.0", + "graphql-request": "^7.1.2", "lucide-react": "^0.484.0", "next-themes": "^0.4.6", "react": "^19.0.0", diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 12bb110..33ff05e 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -75,8 +75,6 @@ export default function Game2048() { }); const [resetBoards, setResetBoards] = useState([]); - const hasActiveGame = activeGameId !== "0x" && boardState.tiles.length > 0; - // =============================================================// // Detect and execute moves // // =============================================================// @@ -703,7 +701,7 @@ export default function Game2048() { }, []); return ( - +
diff --git a/packages/frontend/src/components/Container.tsx b/packages/frontend/src/components/Container.tsx index ee3285f..bdf4934 100644 --- a/packages/frontend/src/components/Container.tsx +++ b/packages/frontend/src/components/Container.tsx @@ -1,12 +1,15 @@ import React from "react"; +import { Leaderboard } from "@/components/Leaderboard"; type ContainerProps = { children: React.ReactNode; + playerAddress?: string; }; -export default function Container({ children }: ContainerProps) { +export default function Container({ children, playerAddress }: ContainerProps) { return ( -
+
+ {/* Header */}

2048 @@ -16,9 +19,17 @@ export default function Container({ children }: ContainerProps) {

- {/* Main content area */} -
- {children} + {/* Main content area: Game + Leaderboard */} +
+ {/* Game board - fixed max width, never shrinks */} +
+ {children} +
+ + {/* Leaderboard - right side on desktop, below on mobile */} +
+ +
); diff --git a/packages/frontend/src/components/Leaderboard/Leaderboard.tsx b/packages/frontend/src/components/Leaderboard/Leaderboard.tsx new file mode 100644 index 0000000..29246e0 --- /dev/null +++ b/packages/frontend/src/components/Leaderboard/Leaderboard.tsx @@ -0,0 +1,193 @@ +import { motion, AnimatePresence } from 'framer-motion'; +import { Trophy, Medal, Flame, Fuel, Zap, Loader2 } from 'lucide-react'; +import { useLeaderboard } from '@/hooks/useLeaderboard'; +import { LeaderboardSkeleton } from './LeaderboardSkeleton'; +import { LeaderboardEmpty } from './LeaderboardEmpty'; +import { LeaderboardSyncing } from './LeaderboardSyncing'; +import { LeaderboardError } from './LeaderboardError'; +import { + formatAddress, + formatScore, + formatGas, + formatMonBurned +} from '@/lib/format'; + +interface LeaderboardProps { + currentPlayerAddress?: string; +} + +function getRankDisplay(rank: number) { + switch (rank) { + case 1: return ; + case 2: return ; + case 3: return ; + default: return ( + + {rank} + + ); + } +} + +function getTileColorClass(tile: number): string { + const colors: Record = { + 2: 'bg-purple-100 text-purple-800', + 4: 'bg-purple-200 text-purple-800', + 8: 'bg-purple-300 text-purple-900', + 16: 'bg-purple-400 text-white', + 32: 'bg-purple-500 text-white', + 64: 'bg-purple-600 text-white', + 128: 'bg-yellow-400 text-yellow-900', + 256: 'bg-yellow-500 text-white', + 512: 'bg-orange-500 text-white', + 1024: 'bg-orange-600 text-white', + 2048: 'bg-red-500 text-white', + 4096: 'bg-red-600 text-white', + 8192: 'bg-red-700 text-white', + }; + return colors[tile] || 'bg-purple-700 text-white'; +} + +export function Leaderboard({ currentPlayerAddress }: LeaderboardProps) { + const { entries, state, error, refetch, indexerStatus } = useLeaderboard({ + currentPlayerAddress, + }); + + return ( +
+ {/* Header */} +
+

+ + Top 10 High Scores +

+ {state === 'ready' && ( +
+ + Live +
+ )} + {state === 'syncing' && ( +
+ + Syncing +
+ )} +
+ + {/* Content based on state */} + {state === 'loading' && } + + {state === 'empty' && } + + {state === 'syncing' && entries.length === 0 && ( + + )} + + {state === 'error' && error && ( + + )} + + {/* Leaderboard entries */} + {(state === 'ready' || (state === 'syncing' && entries.length > 0)) && ( +
+ + {entries.map((entry) => ( + + {/* New entry badge */} + {entry.isNew && ( + + NEW + + )} + +
+ {/* Rank */} +
+ {getRankDisplay(entry.rank!)} +
+ + {/* Player info */} +
+
+ + {formatAddress(entry.player)} + + {entry.isCurrentPlayer && ( + + YOU + + )} +
+ + {/* Stats row */} +
+ + + {entry.moveCount} moves + + + + {formatGas(entry.totalGasUsed)} + + + + {formatMonBurned(entry.totalMonBurned)} + +
+
+ + {/* Score */} +
+ + {formatScore(entry.score)} + +
+ {entry.highestTile} +
+
+
+
+ ))} +
+
+ )} +
+ ); +} diff --git a/packages/frontend/src/components/Leaderboard/LeaderboardEmpty.tsx b/packages/frontend/src/components/Leaderboard/LeaderboardEmpty.tsx new file mode 100644 index 0000000..98b3de1 --- /dev/null +++ b/packages/frontend/src/components/Leaderboard/LeaderboardEmpty.tsx @@ -0,0 +1,13 @@ +import { Gamepad2 } from 'lucide-react'; + +export function LeaderboardEmpty() { + return ( +
+ +

No Games Yet

+

+ Be the first to play and claim the #1 spot! +

+
+ ); +} diff --git a/packages/frontend/src/components/Leaderboard/LeaderboardError.tsx b/packages/frontend/src/components/Leaderboard/LeaderboardError.tsx new file mode 100644 index 0000000..ed1832d --- /dev/null +++ b/packages/frontend/src/components/Leaderboard/LeaderboardError.tsx @@ -0,0 +1,25 @@ +import { AlertTriangle, RefreshCw } from 'lucide-react'; + +interface LeaderboardErrorProps { + error: Error; + onRetry: () => void; +} + +export function LeaderboardError({ error, onRetry }: LeaderboardErrorProps) { + return ( +
+ +

Failed to Load

+

+ {error.message || 'Unable to fetch leaderboard data'} +

+ +
+ ); +} diff --git a/packages/frontend/src/components/Leaderboard/LeaderboardSkeleton.tsx b/packages/frontend/src/components/Leaderboard/LeaderboardSkeleton.tsx new file mode 100644 index 0000000..84cb66e --- /dev/null +++ b/packages/frontend/src/components/Leaderboard/LeaderboardSkeleton.tsx @@ -0,0 +1,20 @@ +export function LeaderboardSkeleton() { + return ( +
+ {Array.from({ length: 5 }).map((_, i) => ( +
+
+
+
+
+
+
+
+ ))} +
+ ); +} diff --git a/packages/frontend/src/components/Leaderboard/LeaderboardSyncing.tsx b/packages/frontend/src/components/Leaderboard/LeaderboardSyncing.tsx new file mode 100644 index 0000000..102ca8c --- /dev/null +++ b/packages/frontend/src/components/Leaderboard/LeaderboardSyncing.tsx @@ -0,0 +1,28 @@ +import { Loader2, Database } from 'lucide-react'; + +interface LeaderboardSyncingProps { + totalGamesIndexed?: number; + lastBlock?: string; +} + +export function LeaderboardSyncing({ + totalGamesIndexed = 0, + lastBlock +}: LeaderboardSyncingProps) { + return ( +
+
+ + +
+

Syncing Data

+

+ Indexing historical games... +

+
+

{totalGamesIndexed.toLocaleString()} games indexed

+ {lastBlock &&

Block #{Number(lastBlock).toLocaleString()}

} +
+
+ ); +} diff --git a/packages/frontend/src/components/Leaderboard/index.ts b/packages/frontend/src/components/Leaderboard/index.ts new file mode 100644 index 0000000..17321af --- /dev/null +++ b/packages/frontend/src/components/Leaderboard/index.ts @@ -0,0 +1,5 @@ +export { Leaderboard } from './Leaderboard'; +export { LeaderboardSkeleton } from './LeaderboardSkeleton'; +export { LeaderboardEmpty } from './LeaderboardEmpty'; +export { LeaderboardSyncing } from './LeaderboardSyncing'; +export { LeaderboardError } from './LeaderboardError'; diff --git a/packages/frontend/src/hooks/useIndexerStatus.ts b/packages/frontend/src/hooks/useIndexerStatus.ts new file mode 100644 index 0000000..70cf7d4 --- /dev/null +++ b/packages/frontend/src/hooks/useIndexerStatus.ts @@ -0,0 +1,39 @@ +import { useState, useEffect, useCallback } from 'react'; +import { getGraphQLClient } from '@/lib/graphql/client'; +import { GET_INDEXER_STATUS } from '@/lib/graphql/queries'; +import type { IndexerStatus, IndexerStatusQueryResponse } from '@/lib/graphql/types'; + +const CHAIN_ID = 143; // Monad Mainnet +const POLL_INTERVAL = 30000; // 30 seconds + +export function useIndexerStatus() { + const [status, setStatus] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + const fetchStatus = useCallback(async () => { + try { + const client = getGraphQLClient(); + const data = await client.request( + GET_INDEXER_STATUS, + { chainId: CHAIN_ID } + ); + + setStatus(data.IndexerStatus[0] || null); + setError(null); + } catch (err) { + setError(err as Error); + } finally { + setLoading(false); + } + }, []); + + useEffect(() => { + fetchStatus(); + // Poll status less frequently than leaderboard + const interval = setInterval(fetchStatus, POLL_INTERVAL); + return () => clearInterval(interval); + }, [fetchStatus]); + + return { status, loading, error, refetch: fetchStatus }; +} diff --git a/packages/frontend/src/hooks/useLeaderboard.ts b/packages/frontend/src/hooks/useLeaderboard.ts new file mode 100644 index 0000000..055a949 --- /dev/null +++ b/packages/frontend/src/hooks/useLeaderboard.ts @@ -0,0 +1,104 @@ +import { useState, useEffect, useCallback, useRef } from 'react'; +import { getGraphQLClient } from '@/lib/graphql/client'; +import { GET_LEADERBOARD } from '@/lib/graphql/queries'; +import type { LeaderboardEntry, LeaderboardState, LeaderboardQueryResponse } from '@/lib/graphql/types'; +import { useIndexerStatus } from './useIndexerStatus'; + +const POLL_INTERVAL = 5000; // 5 seconds + +interface UseLeaderboardOptions { + currentPlayerAddress?: string; +} + +export function useLeaderboard(options: UseLeaderboardOptions = {}) { + const { currentPlayerAddress } = options; + const { status: indexerStatus } = useIndexerStatus(); + + const [entries, setEntries] = useState([]); + const [state, setState] = useState('loading'); + const [error, setError] = useState(null); + const previousEntriesRef = useRef([]); + const isFirstFetch = useRef(true); + + const fetchLeaderboard = useCallback(async () => { + try { + const client = getGraphQLClient(); + const data = await client.request( + GET_LEADERBOARD, + { limit: 10 } + ); + + const games = data.Game || []; + + // Determine state based on data and indexer status + if (games.length === 0) { + if (indexerStatus?.isBackfilling) { + setState('syncing'); + } else if (indexerStatus?.totalGamesIndexed === 0) { + setState('empty'); + } else { + setState('ready'); // Has games but none in top 10 (unlikely) + } + setEntries([]); + return; + } + + // Enrich entries with computed fields + const enrichedEntries = games.map((game, index) => ({ + ...game, + rank: index + 1, + isNew: !isFirstFetch.current && + !previousEntriesRef.current.some(e => e.id === game.id), + isCurrentPlayer: currentPlayerAddress + ? game.player.toLowerCase() === currentPlayerAddress.toLowerCase() + : false, + })); + + previousEntriesRef.current = enrichedEntries; + isFirstFetch.current = false; + setEntries(enrichedEntries); + setState(indexerStatus?.isBackfilling ? 'syncing' : 'ready'); + setError(null); + } catch (err) { + setError(err as Error); + setState('error'); + } + }, [currentPlayerAddress, indexerStatus]); + + // Fetch on mount + useEffect(() => { + isFirstFetch.current = true; + setState('loading'); + fetchLeaderboard(); + }, []); + + // Poll for updates (pause when tab hidden) + useEffect(() => { + const handleVisibilityChange = () => { + if (!document.hidden) { + fetchLeaderboard(); + } + }; + + document.addEventListener('visibilitychange', handleVisibilityChange); + + const interval = setInterval(() => { + if (!document.hidden) { + fetchLeaderboard(); + } + }, POLL_INTERVAL); + + return () => { + document.removeEventListener('visibilitychange', handleVisibilityChange); + clearInterval(interval); + }; + }, [fetchLeaderboard]); + + return { + entries, + state, + error, + refetch: fetchLeaderboard, + indexerStatus + }; +} diff --git a/packages/indexer/.env.example b/packages/indexer/.env.example new file mode 100644 index 0000000..a708fbf --- /dev/null +++ b/packages/indexer/.env.example @@ -0,0 +1,2 @@ +# Envio API Token (get from envio.dev dashboard) +ENVIO_API_TOKEN=your_token_here diff --git a/packages/indexer/config.yaml b/packages/indexer/config.yaml new file mode 100644 index 0000000..daa961e --- /dev/null +++ b/packages/indexer/config.yaml @@ -0,0 +1,21 @@ +name: monad-2048-leaderboard +description: Indexes Monad 2048 game events for leaderboard with score and gas tracking +networks: + - id: 143 # Monad Mainnet + start_block: 0 # Or contract deployment block for faster sync + contracts: + - name: Monad2048 + address: "0x53748668642735CDa45935716525E7DFbC8aAACC" + handler: src/handlers/index.ts + events: + - event: NewGame(address indexed player, bytes32 indexed id, uint256 board) + - event: NewMove(address indexed player, bytes32 indexed id, uint256 move, uint256 result) + +# Enable transaction data for gas tracking +field_selection: + transaction_fields: + - hash + - from + - gasUsed + - effectiveGasPrice + - gasPrice diff --git a/packages/indexer/generated/.gitignore b/packages/indexer/generated/.gitignore new file mode 100644 index 0000000..69f7d54 --- /dev/null +++ b/packages/indexer/generated/.gitignore @@ -0,0 +1,32 @@ +*.exe +*.obj +*.out +*.compile +*.native +*.byte +*.cmo +*.annot +*.cmi +*.cmx +*.cmt +*.cmti +*.cma +*.a +*.cmxa +*.obj +*~ +*.annot +*.cmj +*.bak +/lib/ +*.mlast +*.mliast +.vscode +.merlin +.bsb.lock +/node_modules/ +/benchmarks/ +*.res.js +*.res.mjs +logs/* +*BenchmarkCache.json diff --git a/packages/indexer/generated/.npmrc b/packages/indexer/generated/.npmrc new file mode 100644 index 0000000..d3a714f --- /dev/null +++ b/packages/indexer/generated/.npmrc @@ -0,0 +1 @@ +save-exact=true # Since we want specific versions of envio to be completely stable. diff --git a/packages/indexer/generated/LICENSE.md b/packages/indexer/generated/LICENSE.md new file mode 100644 index 0000000..418103b --- /dev/null +++ b/packages/indexer/generated/LICENSE.md @@ -0,0 +1,67 @@ +## HyperIndex End-User License Agreement (EULA) + +This agreement describes the users' rights and the conditions upon which the Software and Generated Code may be used. The user should review the entire agreement, including any supplemental license terms that accompany the Software, since all of the terms are important and together create this agreement that applies to them. + +### 1. Definitions + +**Software:** HyperIndex, a copyrightable work created by Envio and licensed under this End User License Agreement (“EULA”). + +**Generated Code:** In the context of this license agreement, the term "generated code" refers to computer programming code that is produced automatically by the Software based on input provided by the user. + +**Licensed Material:** The Software and Generated Code defined here will be collectively referred to as “Licensed Material”. + +### 2. Installation and User Rights + +**License:** The Software is provided under this EULA. By agreeing to the EULA terms, you are granted the right to install and operate one instance of the Software on your device (referred to as the licensed device), for the use of one individual at a time, on the condition that you adhere to all terms outlined in this agreement. +The licensor provides you with a non-exclusive, royalty-free, worldwide license that is non-sublicensable and non-transferable. This license allows you to use the Software subject to the limitations and conditions outlined in this EULA. +With one license, the user can only use the Software on a single device. + +**Device:** In this agreement, "device" refers to a hardware system, whether physical or virtual, equipped with an internal storage device capable of executing the Software. This includes hardware partitions, which are considered as individual devices for the purposes of this agreement. Updates may be provided to the Software, and these updates may alter the minimum hardware requirements necessary for the Software. It is the responsibility of users to comply with any changing hardware requirements. + +**Updates:** The Software may be updated automatically. With each update, the EULA may be amended, and it is the users' responsibility to comply with the amendments. + +**Limitations:** Envio reserves all rights, including those under intellectual property laws, not expressly granted in this agreement. For instance, this license does not confer upon you the right to, and you are prohibited from: + +(i) Publishing, copying (other than the permitted backup copy), renting, leasing, or lending the Software; + +(ii) Transferring the Software (except as permitted by this agreement); + +(iii) Circumventing any technical restrictions or limitations in the Software; + +(iv) Using the Software as server Software, for commercial hosting, making the Software available for simultaneous use by multiple users over a network, installing the Software on a server and allowing users to access it remotely, or installing the Software on a device solely for remote user use; + +(v) Reverse engineering, decompiling, or disassembling the Software, or attempting to do so, except and only to the extent that the foregoing restriction is (a) permitted by applicable law; (b) permitted by licensing terms governing the use of open-source components that may be included with the Software and + +(vi) When using the Software, you may not use any features in any manner that could interfere with anyone else's use of them, or attempt to gain unauthorized access to or use of any service, data, account, or network. + +These limitations apply specifically to the Software and do not extend to the Generated Code. Details regarding the use of the Generated Code, including associated limitations, are provided below. + +### 3. Use of the Generated Code + +**Limitations:** Users can use, copy, distribute, make available, and create derivative works of the Generated Code freely, subject to the limitations and conditions specified below. + +(i) The user is prohibited from offering the Generated Code or any software that includes the Generated Code to third parties as a hosted or managed service, where the service grants users access to a significant portion of the Software's features or functionality. + +(ii) The user is not permitted to tamper with, alter, disable, or bypass the functionality of the license key in the Software. Additionally, the user may not eliminate or conceal any functionality within the Software that is safeguarded by the license key. + +(iii) Any modification, removal, or concealment of licensing, copyright, or other notices belonging to the licensor in the Software is strictly forbidden. The use of the licensor's trademarks is subject to relevant laws. + +**Credit:** If the user utilizes the Generated Code to develop and release a new software, product or service, the license agreement for said software, product or service must include proper credit to HyperIndex. + +**Liability:** Envio does not provide any assurance that the Generated Code functions correctly, nor does it assume any responsibility in this regard. + +Additionally, it will be the responsibility of the user to assess whether the Generated Code is suitable for the products and services provided by the user. Envio will not bear any responsibility if the Generated Code is found unsuitable for the products and services provided by the user. + +### 4. Additional Terms + +**Disclaimer of Warranties and Limitation of Liability:** + +(i) Unless expressly undertaken by the Licensor separately, the Licensed Material is provided on an as-is, as-available basis, and the Licensor makes no representations or warranties of any kind regarding the Licensed Material, whether express, implied, statutory, or otherwise. This encompasses, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether known or discoverable. If disclaimers of warranties are not permitted in whole or in part, this disclaimer may not apply to You. + +(ii) To the fullest extent permitted by law, under no circumstances shall the Licensor be liable to You under any legal theory (including, but not limited to, negligence) for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising from the use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. If limitations of liability are not permitted in whole or in part, this limitation may not apply to You. + +(iii) The disclaimers of warranties and limitations of liability outlined above shall be construed in a manner that most closely approximates an absolute disclaimer and waiver of all liability, to the fullest extent permitted by law. + +**Applicable Law and Competent Courts:** This EULA and shall be governed by and construed in accordance with the laws of England. The courts of England shall have exclusive jurisdiction to settle any dispute arising out of or in connection with this EULA. + +**Additional Agreements:** If the user chooses to use the Software, it may be required to agree to additional terms or agreements outside of this EULA. diff --git a/packages/indexer/generated/docker-compose.yaml b/packages/indexer/generated/docker-compose.yaml new file mode 100644 index 0000000..9ecc5fe --- /dev/null +++ b/packages/indexer/generated/docker-compose.yaml @@ -0,0 +1,52 @@ +services: + envio-postgres: + image: postgres:17.5 + restart: always + ports: + - "${ENVIO_PG_PORT:-5433}:5432" + volumes: + - db_data:/var/lib/postgresql/data + environment: + POSTGRES_PASSWORD: ${ENVIO_PG_PASSWORD:-testing} + POSTGRES_USER: ${ENVIO_PG_USER:-postgres} + POSTGRES_DB: ${ENVIO_PG_DATABASE:-envio-dev} + networks: + - my-proxy-net + graphql-engine: + image: hasura/graphql-engine:v2.43.0 + ports: + - "${HASURA_EXTERNAL_PORT:-8080}:8080" + user: 1001:1001 + depends_on: + - "envio-postgres" + restart: always + environment: + # TODO: refine migrations. For now we will run hasura setup via custom scripts, rather than standard migrations. + # See details of this image here: https://hasura.io/docs/latest/graphql/core/migrations/advanced/auto-apply-migrations.html + # HASURA_GRAPHQL_MIGRATIONS_DIR: /hasura-migrations + # HASURA_GRAPHQL_METADATA_DIR: /hasura-metadata + HASURA_GRAPHQL_DATABASE_URL: postgres://${ENVIO_PG_USER:-postgres}:${ENVIO_PG_PASSWORD:-testing}@envio-postgres:5432/${ENVIO_PG_DATABASE:-envio-dev} + HASURA_GRAPHQL_ENABLE_CONSOLE: ${HASURA_GRAPHQL_ENABLE_CONSOLE:-true} # can make this default to false once we are further in our development. + HASURA_GRAPHQL_ENABLED_LOG_TYPES: + startup, http-log, webhook-log, websocket-log, + query-log + HASURA_GRAPHQL_NO_OF_RETRIES: 10 + HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET:-testing} + HASURA_GRAPHQL_STRINGIFY_NUMERIC_TYPES: "true" + PORT: 8080 + HASURA_GRAPHQL_UNAUTHORIZED_ROLE: public + healthcheck: + # CMD from a GH issue thread, no curl or wget installed with image + # but hasura comes with a /healthz public endpoint for checking server health + test: timeout 1s bash -c ':> /dev/tcp/127.0.0.1/8080' || exit 1 + interval: 5s + timeout: 2s + retries: 50 + start_period: 5s + networks: + - my-proxy-net +volumes: + db_data: +networks: + my-proxy-net: + name: local_test_network diff --git a/packages/indexer/generated/index.d.ts b/packages/indexer/generated/index.d.ts new file mode 100644 index 0000000..83334e1 --- /dev/null +++ b/packages/indexer/generated/index.d.ts @@ -0,0 +1,21 @@ +export { + Monad2048, + onBlock +} from "./src/Handlers.gen"; +export type * from "./src/Types.gen"; +import { + Monad2048, + MockDb, + Addresses +} from "./src/TestHelpers.gen"; + +export const TestHelpers = { + Monad2048, + MockDb, + Addresses +}; + +export { +} from "./src/Enum.gen"; + +export {default as BigDecimal} from 'bignumber.js'; diff --git a/packages/indexer/generated/index.js b/packages/indexer/generated/index.js new file mode 100644 index 0000000..075fc54 --- /dev/null +++ b/packages/indexer/generated/index.js @@ -0,0 +1,13 @@ +/** + This file serves as an entry point when referencing generated as a node module + */ + +const handlers = require("./src/Handlers.res.js"); +const TestHelpers = require("./src/TestHelpers.res.js"); +const BigDecimal = require("bignumber.js"); + +module.exports = { + ...handlers, + BigDecimal, + TestHelpers, +}; diff --git a/packages/indexer/generated/package-lock.json b/packages/indexer/generated/package-lock.json new file mode 100644 index 0000000..2331725 --- /dev/null +++ b/packages/indexer/generated/package-lock.json @@ -0,0 +1,3206 @@ +{ + "name": "generated", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "generated", + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@rescript/react": "0.12.1", + "bignumber.js": "9.1.2", + "date-fns": "3.3.1", + "dotenv": "16.4.5", + "envio": "2.32.3", + "ethers": "6.8.0", + "express": "4.19.2", + "ink": "3.2.0", + "ink-big-text": "1.2.0", + "ink-spinner": "4.0.3", + "js-sdsl": "4.4.2", + "pino": "8.16.1", + "postgres": "3.4.1", + "prom-client": "15.0.0", + "react": "18.2.0", + "rescript": "11.1.3", + "rescript-envsafe": "5.0.0", + "rescript-schema": "9.3.0", + "ts-node": "10.9.1", + "viem": "2.21.0", + "yargs": "17.7.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==", + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@elastic/ecs-helpers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@elastic/ecs-helpers/-/ecs-helpers-1.1.0.tgz", + "integrity": "sha512-MDLb2aFeGjg46O5mLpdCzT5yOUDnXToJSrco2ShqGIXxNJaM8uJjX+4nd+hRYV4Vex8YJyDtOFEVBldQct6ndg==", + "license": "Apache-2.0", + "dependencies": { + "fast-json-stringify": "^2.4.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@elastic/ecs-pino-format": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@elastic/ecs-pino-format/-/ecs-pino-format-1.4.0.tgz", + "integrity": "sha512-eCSBUTgl8KbPyxky8cecDRLCYu2C1oFV4AZ72bEsI+TxXEvaljaL2kgttfzfu7gW+M89eCz55s49uF2t+YMTWA==", + "license": "Apache-2.0", + "dependencies": { + "@elastic/ecs-helpers": "^1.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@envio-dev/hyperfuel-client": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@envio-dev/hyperfuel-client/-/hyperfuel-client-1.2.2.tgz", + "integrity": "sha512-raKA6DshYSle0sAOHBV1OkSRFMN+Mkz8sFiMmS3k+m5nP6pP56E17CRRePBL5qmR6ZgSEvGOz/44QUiKNkK9Pg==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@envio-dev/hyperfuel-client-darwin-arm64": "1.2.2", + "@envio-dev/hyperfuel-client-darwin-x64": "1.2.2", + "@envio-dev/hyperfuel-client-linux-arm64-gnu": "1.2.2", + "@envio-dev/hyperfuel-client-linux-x64-gnu": "1.2.2", + "@envio-dev/hyperfuel-client-linux-x64-musl": "1.2.2", + "@envio-dev/hyperfuel-client-win32-x64-msvc": "1.2.2" + } + }, + "node_modules/@envio-dev/hyperfuel-client-darwin-arm64": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@envio-dev/hyperfuel-client-darwin-arm64/-/hyperfuel-client-darwin-arm64-1.2.2.tgz", + "integrity": "sha512-eQyd9kJCIz/4WCTjkjpQg80DA3pdneHP7qhJIVQ2ZG+Jew9o5XDG+uI0Y16AgGzZ6KGmJSJF6wyUaaAjJfbO1Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hyperfuel-client-darwin-x64": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@envio-dev/hyperfuel-client-darwin-x64/-/hyperfuel-client-darwin-x64-1.2.2.tgz", + "integrity": "sha512-l7lRMSoyIiIvKZgQPfgqg7H1xnrQ37A8yUp4S2ys47R8f/wSCSrmMaY1u7n6CxVYCpR9fajwy0/356UgwwhVKw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hyperfuel-client-linux-arm64-gnu": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@envio-dev/hyperfuel-client-linux-arm64-gnu/-/hyperfuel-client-linux-arm64-gnu-1.2.2.tgz", + "integrity": "sha512-kNiC/1fKuXnoSxp8yEsloDw4Ot/mIcNoYYGLl2CipSIpBtSuiBH5nb6eBcxnRZdKOwf5dKZtZ7MVPL9qJocNJw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hyperfuel-client-linux-x64-gnu": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@envio-dev/hyperfuel-client-linux-x64-gnu/-/hyperfuel-client-linux-x64-gnu-1.2.2.tgz", + "integrity": "sha512-XDkvkBG/frS+xiZkJdY4KqOaoAwyxPdi2MysDQgF8NmZdssi32SWch0r4LTqKWLLlCBg9/R55POeXL5UAjg2wQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hyperfuel-client-linux-x64-musl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@envio-dev/hyperfuel-client-linux-x64-musl/-/hyperfuel-client-linux-x64-musl-1.2.2.tgz", + "integrity": "sha512-DKnKJJSwsYtA7YT0EFGhFB5Eqoo42X0l0vZBv4lDuxngEXiiNjeLemXoKQVDzhcbILD7eyXNa5jWUc+2hpmkEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hyperfuel-client-win32-x64-msvc": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@envio-dev/hyperfuel-client-win32-x64-msvc/-/hyperfuel-client-win32-x64-msvc-1.2.2.tgz", + "integrity": "sha512-SwIgTAVM9QhCFPyHwL+e1yQ6o3paV6q25klESkXw+r/KW9QPhOOyA6Yr8nfnur3uqMTLJHAKHTLUnkyi/Nh7Aw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hypersync-client": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@envio-dev/hypersync-client/-/hypersync-client-0.6.6.tgz", + "integrity": "sha512-0r4lPFtk49zB94uvZiONV0SWdr9kigdNIYfYTYcSSuZ396E77tjskjMigDwimZsAA5Qf64x6MsIyzUYIzk/KPg==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@envio-dev/hypersync-client-darwin-arm64": "0.6.6", + "@envio-dev/hypersync-client-darwin-x64": "0.6.6", + "@envio-dev/hypersync-client-linux-arm64-gnu": "0.6.6", + "@envio-dev/hypersync-client-linux-x64-gnu": "0.6.6", + "@envio-dev/hypersync-client-linux-x64-musl": "0.6.6", + "@envio-dev/hypersync-client-win32-x64-msvc": "0.6.6" + } + }, + "node_modules/@envio-dev/hypersync-client-darwin-arm64": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@envio-dev/hypersync-client-darwin-arm64/-/hypersync-client-darwin-arm64-0.6.6.tgz", + "integrity": "sha512-5uAwSNrnekbHiZBLipUPM0blfO0TS2svyuMmDVE+xbT3M+ODuQl4BFoINd9VY6jC5EoKt8xKCO2K/DHHSeRV4A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hypersync-client-darwin-x64": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@envio-dev/hypersync-client-darwin-x64/-/hypersync-client-darwin-x64-0.6.6.tgz", + "integrity": "sha512-KFMXWpHbyA0q+sRQ6I8YcLIwZFbBjMEncTnRz6IWXNWAXOsIc1GOORz0j5c9I330bEa4cdQdVVWhgCR1gJiBBA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hypersync-client-linux-arm64-gnu": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@envio-dev/hypersync-client-linux-arm64-gnu/-/hypersync-client-linux-arm64-gnu-0.6.6.tgz", + "integrity": "sha512-Iiok/+YNtVft37KGWwDPC8yiN4rAZujYTiYiu+j+vfRpJT6DnYj/TbklZ/6LnSafg18BMPZ2fHT804jP0LndHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hypersync-client-linux-x64-gnu": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@envio-dev/hypersync-client-linux-x64-gnu/-/hypersync-client-linux-x64-gnu-0.6.6.tgz", + "integrity": "sha512-WgQRjJS1ncdP/f89dGBKD1luC/r+0EJZgvXSJ+8Jy4dnAeMHUgDFCpjJqIqQKxCWX0fmoiJ7a31SzBNV8Lwqbg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hypersync-client-linux-x64-musl": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@envio-dev/hypersync-client-linux-x64-musl/-/hypersync-client-linux-x64-musl-0.6.6.tgz", + "integrity": "sha512-upFn8FfcUP5pTdSiQAsEr06L2SwyxluMWMaeUCgAEYxDcKTxUkg0J2eDq37RGUQ0KVlLoWLthnSsg4lUz7NIXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@envio-dev/hypersync-client-win32-x64-msvc": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@envio-dev/hypersync-client-win32-x64-msvc/-/hypersync-client-win32-x64-msvc-0.6.6.tgz", + "integrity": "sha512-bVFDkyrddbMnNGYd6o/QwhrviHOa4th/aMjzMPRjXu48GI8xqlamQ6RBxDGy2lg+BoPhs5k3kwOWl/DY29RwUQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@rescript/react": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.12.1.tgz", + "integrity": "sha512-ZD7nhDr5FZgLYqRH9s4CNM+LRz/3IMuTb+LH12fd2Akk0xYkYUP+DZveB2VQUC2UohJnTf/c8yPSNsiFihVCCg==", + "license": "MIT", + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "license": "MIT" + }, + "node_modules/@types/yoga-layout": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz", + "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==", + "license": "MIT" + }, + "node_modules/abitype": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.5.tgz", + "integrity": "sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "license": "MIT" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/auto-bind": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", + "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bintrees": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cfonts": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/cfonts/-/cfonts-2.10.1.tgz", + "integrity": "sha512-l5IcLv4SaOdL/EGR6BpOF5SEro88VcGJJ6+xbvJb+wXi19YC6UeHE/brv7a4vIcLZopnt3Ys3zWeNnyfB04UPg==", + "license": "GPL-2.0", + "dependencies": { + "chalk": "^4", + "window-size": "^1.1.1" + }, + "bin": { + "cfonts": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT" + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/code-excerpt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz", + "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==", + "license": "MIT", + "dependencies": { + "convert-to-spaces": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-to-spaces": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz", + "integrity": "sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "license": "MIT" + }, + "node_modules/date-fns": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.3.1.tgz", + "integrity": "sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/envio": { + "version": "2.32.3", + "resolved": "https://registry.npmjs.org/envio/-/envio-2.32.3.tgz", + "integrity": "sha512-kTbBknbjuFit7vVBeKbXz79vzHM9bRdFo2LpsaZ6HRfT6voG0cC/MtWJMRko0CrHuBFNqik/UDWF6ghTqkv6rw==", + "license": "GPL-3.0", + "dependencies": { + "@elastic/ecs-pino-format": "1.4.0", + "@envio-dev/hyperfuel-client": "1.2.2", + "@envio-dev/hypersync-client": "0.6.6", + "bignumber.js": "9.1.2", + "pino": "8.16.1", + "pino-pretty": "10.2.3", + "prom-client": "15.0.0", + "rescript": "11.1.3", + "rescript-schema": "9.3.0", + "viem": "2.21.0" + }, + "bin": { + "envio": "bin.js" + }, + "optionalDependencies": { + "envio-darwin-arm64": "v2.32.3", + "envio-darwin-x64": "v2.32.3", + "envio-linux-arm64": "v2.32.3", + "envio-linux-x64": "v2.32.3" + } + }, + "node_modules/envio-darwin-arm64": { + "version": "2.32.3", + "resolved": "https://registry.npmjs.org/envio-darwin-arm64/-/envio-darwin-arm64-2.32.3.tgz", + "integrity": "sha512-taRiIvTNKoxWT/8XqJbbsQo4zLUckP00i87L+EtCXpUl/JmhhbZHrePsM6qSNo3pKZOvq0FFo8UMfHNO+34SsA==", + "cpu": [ + "arm64" + ], + "license": "GPL-3.0", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/envio-darwin-x64": { + "version": "2.32.3", + "resolved": "https://registry.npmjs.org/envio-darwin-x64/-/envio-darwin-x64-2.32.3.tgz", + "integrity": "sha512-o1YF+EDDLhJaxMXo7BAZ87nnsge8mMyiKVVkCN+Mf6qaB6dX5K0UTQejJfTwDVT7O8HZY7Mi3mSAGRupWBPlKg==", + "cpu": [ + "x64" + ], + "license": "GPL-3.0", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/envio-linux-arm64": { + "version": "2.32.3", + "resolved": "https://registry.npmjs.org/envio-linux-arm64/-/envio-linux-arm64-2.32.3.tgz", + "integrity": "sha512-YDAu9V6/CARh/ETuB3lSt7Gd7I2IYM3LHIoVlzxAYvDhSf6QwF3OA2c4K9mlF7NxyTLxSP168e6ZwIMDk0o2nw==", + "cpu": [ + "arm64" + ], + "license": "GPL-3.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/envio-linux-x64": { + "version": "2.32.3", + "resolved": "https://registry.npmjs.org/envio-linux-x64/-/envio-linux-x64-2.32.3.tgz", + "integrity": "sha512-V4H4R+p2jBkR4sP9Q0sbJe8Z80RyZN9bMvgoAEXLuFvtqtfMgluAPUMK0pON2zb/fUEXeEAVIs5JAlOFLm8D1Q==", + "cpu": [ + "x64" + ], + "license": "GPL-3.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ethers": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.8.0.tgz", + "integrity": "sha512-zrFbmQRlraM+cU5mE4CZTLBurZTs2gdp2ld0nG/f3ecBK+x6lZ69KSxBqZ4NjclxwfTxl5LeNufcBbMsTdY53Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-json-stringify": { + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.13.tgz", + "integrity": "sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==", + "license": "MIT", + "dependencies": { + "ajv": "^6.11.0", + "deepmerge": "^4.2.2", + "rfdc": "^1.2.0", + "string-similarity": "^4.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/help-me": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", + "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", + "license": "MIT", + "dependencies": { + "glob": "^8.0.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/help-me/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ink": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ink/-/ink-3.2.0.tgz", + "integrity": "sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "auto-bind": "4.0.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.0", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "code-excerpt": "^3.0.0", + "indent-string": "^4.0.0", + "is-ci": "^2.0.0", + "lodash": "^4.17.20", + "patch-console": "^1.0.0", + "react-devtools-core": "^4.19.1", + "react-reconciler": "^0.26.2", + "scheduler": "^0.20.2", + "signal-exit": "^3.0.2", + "slice-ansi": "^3.0.0", + "stack-utils": "^2.0.2", + "string-width": "^4.2.2", + "type-fest": "^0.12.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0", + "ws": "^7.5.5", + "yoga-layout-prebuilt": "^1.9.6" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": ">=16.8.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/ink-big-text": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ink-big-text/-/ink-big-text-1.2.0.tgz", + "integrity": "sha512-xDfn8oOhiji9c4wojTKSaBnEfgpTTd3KL7jsMYVht4SbpfLdSKvVZiMi3U5v45eSjLm1ycMmeMWAP1G99lWL5Q==", + "license": "MIT", + "dependencies": { + "cfonts": "^2.8.6", + "prop-types": "^15.7.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "peerDependencies": { + "ink": ">=2.0.0", + "react": ">=16.8.0" + } + }, + "node_modules/ink-spinner": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/ink-spinner/-/ink-spinner-4.0.3.tgz", + "integrity": "sha512-uJ4nbH00MM9fjTJ5xdw0zzvtXMkeGb0WV6dzSWvFv2/+ks6FIhpkt+Ge/eLdh0Ah6Vjw5pLMyNfoHQpRDRVFbQ==", + "license": "MIT", + "dependencies": { + "cli-spinners": "^2.3.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ink": ">=3.0.5", + "react": ">=16.8.2" + } + }, + "node_modules/ink/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isows": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.4.tgz", + "integrity": "sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-sdsl": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", + "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/patch-console": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-1.0.0.tgz", + "integrity": "sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "license": "MIT" + }, + "node_modules/pino": { + "version": "8.16.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.16.1.tgz", + "integrity": "sha512-3bKsVhBmgPjGV9pyn4fO/8RtoVDR8ssW1ev819FsRXlRNgW8gR/9Kx+gCK4UPWd4JjrRDLWpzd/pb1AyWm3MGA==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "v1.1.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^2.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", + "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", + "license": "MIT", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.2.3.tgz", + "integrity": "sha512-4jfIUc8TC1GPUfDyMSlW1STeORqkoxec71yhxIpLDQapUu8WOuoz2TTCoidrIssyz78LZC69whBMPIKCMbi3cw==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^4.0.1", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", + "license": "MIT" + }, + "node_modules/postgres": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.1.tgz", + "integrity": "sha512-Wasjv6WEzrZXbwKByR2RGD7MBfj7VBqco3hYWz8ifzSAp6tb2L6MlmcKFzkmgV1jT7/vKlcSa+lxXZeTdeVMzQ==", + "license": "Unlicense", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/porsager" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz", + "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==", + "license": "MIT" + }, + "node_modules/prom-client": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.0.0.tgz", + "integrity": "sha512-UocpgIrKyA2TKLVZDSfm8rGkL13C19YrQBAiG3xo3aDFWcHedxRxI3z+cIcucoxpSO0h5lff5iv/SXoxyeopeA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.4.0", + "tdigest": "^0.1.1" + }, + "engines": { + "node": "^16 || ^18 || >=20" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz", + "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==", + "license": "MIT", + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-reconciler": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.26.2.tgz", + "integrity": "sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^17.0.2" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rescript": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/rescript/-/rescript-11.1.3.tgz", + "integrity": "sha512-bI+yxDcwsv7qE34zLuXeO8Qkc2+1ng5ErlSjnUIZdrAWKoGzHXpJ6ZxiiRBUoYnoMsgRwhqvrugIFyNgWasmsw==", + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE", + "bin": { + "bsc": "bsc", + "bstracing": "lib/bstracing", + "rescript": "rescript" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rescript-envsafe": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rescript-envsafe/-/rescript-envsafe-5.0.0.tgz", + "integrity": "sha512-xSQbNsFSSQEynvLWUYtI7GJJhzicACLTq5aO1tjgK0N2Vcm9qlrkcLSmnU8tTohebEu9zgm1V/xYY+oGeQgLvA==", + "license": "MIT", + "peerDependencies": { + "rescript": "11.x", + "rescript-schema": "9.x" + } + }, + "node_modules/rescript-schema": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/rescript-schema/-/rescript-schema-9.3.0.tgz", + "integrity": "sha512-NiHAjlhFKZCmNhx/Ij40YltCEJJgVNhBWTN/ZfagTg5hdWWuvCiUacxZv+Q/QQolrAhTnHnCrL7RDvZBogHl5A==", + "license": "MIT", + "peerDependencies": { + "rescript": "11.x" + }, + "peerDependenciesMeta": { + "rescript": { + "optional": true + } + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sonic-boom": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", + "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "ISC" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tdigest": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "license": "MIT", + "dependencies": { + "bintrees": "1.0.2" + } + }, + "node_modules/thread-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", + "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/viem": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.21.0.tgz", + "integrity": "sha512-9g3Gw2nOU6t4bNuoDI5vwVExzIxseU0J7Jjx10gA2RNQVrytIrLxggW++tWEe3w4mnnm/pS1WgZFjQ/QKf/nHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.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", + "isows": "1.0.4", + "webauthn-p256": "0.0.5", + "ws": "8.17.1" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", + "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "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 + } + } + }, + "node_modules/webauthn-p256": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/webauthn-p256/-/webauthn-p256-0.0.5.tgz", + "integrity": "sha512-drMGNWKdaixZNobeORVIqq7k5DsRC9FnG201K2QjeOoQLmtSDaSsVZdkg6n5jUALJKcAG++zBPJXmv6hy0nWFg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/webauthn-p256/node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/webauthn-p256/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/window-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", + "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", + "license": "MIT", + "dependencies": { + "define-property": "^1.0.0", + "is-number": "^3.0.0" + }, + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "license": "MIT", + "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 + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yoga-layout-prebuilt": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.10.0.tgz", + "integrity": "sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==", + "license": "MIT", + "dependencies": { + "@types/yoga-layout": "1.9.2" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/packages/indexer/generated/package.json b/packages/indexer/generated/package.json new file mode 100644 index 0000000..ab02afe --- /dev/null +++ b/packages/indexer/generated/package.json @@ -0,0 +1,49 @@ +{ + "name": "generated", + "version": "0.1.0", + "main": "index.js", + "types": "index.d.ts", + "private": true, + "scripts": { + "clean": "rescript clean", + "build": "rescript", + "watch": "rescript -w", + "format": "rescript format -all", + "db-up": "node -e 'require(`./src/db/Migrations.res.js`).runUpMigrations(true)'", + "db-down": "node -e 'require(`./src/db/Migrations.res.js`).runDownMigrations(true)'", + "db-setup": "node -e 'require(`./src/db/Migrations.res.js`).runUpMigrations(true, true)'", + "print-benchmark-summary": "node -e 'require(`./src/Benchmark.res.js`).Summary.printSummary()'", + "start": "ts-node src/Index.res.js" + }, + "keywords": [ + "ReScript" + ], + "engines": { + "node": ">=18.0.0" + }, + "author": "", + "license": "MIT", + "dependencies": { + "ts-node": "10.9.1", + "@rescript/react": "0.12.1", + "bignumber.js": "9.1.2", + "date-fns": "3.3.1", + "dotenv": "16.4.5", + "ethers": "6.8.0", + "express": "4.19.2", + "ink": "3.2.0", + "ink-big-text": "1.2.0", + "ink-spinner": "4.0.3", + "js-sdsl": "4.4.2", + "pino": "8.16.1", + "postgres": "3.4.1", + "react": "18.2.0", + "rescript": "11.1.3", + "rescript-envsafe": "5.0.0", + "rescript-schema": "9.3.0", + "envio": "2.32.3", + "viem": "2.21.0", + "yargs": "17.7.2", + "prom-client": "15.0.0" + } +} diff --git a/packages/indexer/generated/persisted_state.envio.json b/packages/indexer/generated/persisted_state.envio.json new file mode 100644 index 0000000..ca3d9aa --- /dev/null +++ b/packages/indexer/generated/persisted_state.envio.json @@ -0,0 +1 @@ +{"envio_version":"2.32.3","config_hash":"[11, 81, 124, 190, 119, 187, 145, 110, 160, 60, 97, 11, 183, 142, 88, 3, 11, 63, 57, 42, 19, 167, 255, 14, 223, 230, 78, 11, 95, 208, 14, 198]","schema_hash":"3f071da5b5ef67a0f28077da7499c37ff3f6c195bec090d0eb4667514ac7c827","handler_files_hash":"984432ec69a6f61c3ec252cc6602b25149aa84b382dc17881c71d63a5537de95","abi_files_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/packages/indexer/generated/rescript.json b/packages/indexer/generated/rescript.json new file mode 100644 index 0000000..e99f4ea --- /dev/null +++ b/packages/indexer/generated/rescript.json @@ -0,0 +1,35 @@ +{ + "name": "generated", + "version": "0.1.0", + "sources": [ + { + "dir": "src", + "subdirs": true + } + ], + "gentypeconfig": { + "shims": { + "Js": "Js" + }, + "generatedFileExtension": ".gen.ts", + "debug": { + "all": false, + "basic": false + } + }, + "package-specs": { + "module": "commonjs", + "in-source": true + }, + "jsx": { + "version": 4 + }, + "suffix": ".res.js", + "bs-dependencies": [ + "rescript-envsafe", + "rescript-schema", + "@rescript/react", + "envio" + ], + "bsc-flags": ["-open RescriptSchema"] +} diff --git a/packages/indexer/generated/src/Benchmark.res b/packages/indexer/generated/src/Benchmark.res new file mode 100644 index 0000000..7dd91aa --- /dev/null +++ b/packages/indexer/generated/src/Benchmark.res @@ -0,0 +1,394 @@ +module MillisAccum = { + type millis = float + type t = {counters: dict, startTime: Js.Date.t, mutable endTime: Js.Date.t} + let schema: S.t = S.schema(s => { + counters: s.matches(S.dict(S.float)), + startTime: s.matches(S.string->S.datetime), + endTime: s.matches(S.string->S.datetime), + }) + let make: unit => t = () => { + counters: Js.Dict.empty(), + startTime: Js.Date.make(), + endTime: Js.Date.make(), + } + + let increment = (self: t, label, amount) => { + self.endTime = Js.Date.make() + let amount = amount->Belt.Float.fromInt + switch self.counters->Utils.Dict.dangerouslyGetNonOption(label) { + | None => + self.counters->Js.Dict.set(label, amount) + amount + | Some(current) => + let newAmount = current +. amount + self.counters->Js.Dict.set(label, newAmount) + newAmount + } + } +} + +module SummaryData = { + module DataSet = { + type t = { + count: float, + min: float, + max: float, + sum: BigDecimal.t, + sumOfSquares: option, + decimalPlaces: int, + } + + let schema = S.schema(s => { + count: s.matches(S.float), + min: s.matches(S.float), + max: s.matches(S.float), + sum: s.matches(BigDecimal.schema), + sumOfSquares: s.matches(S.option(BigDecimal.schema)), + decimalPlaces: s.matches(S.int), + }) + + let make = (val: float, ~decimalPlaces=2) => { + let bigDecimal = val->BigDecimal.fromFloat + { + count: 1., + min: val, + max: val, + sum: bigDecimal, + sumOfSquares: Env.Benchmark.shouldSaveStdDev + ? Some(bigDecimal->BigDecimal.times(bigDecimal)) + : None, + decimalPlaces, + } + } + + let add = (self: t, val: float) => { + let bigDecimal = val->BigDecimal.fromFloat + { + count: self.count +. 1., + min: Pervasives.min(self.min, val), + max: Pervasives.max(self.max, val), + sum: self.sum->BigDecimal.plus(bigDecimal), + sumOfSquares: self.sumOfSquares->Belt.Option.map(s => + s->BigDecimal.plus(bigDecimal->BigDecimal.times(bigDecimal)) + ), + decimalPlaces: self.decimalPlaces, + } + } + } + module Group = { + type t = dict + let schema: S.t = S.dict(DataSet.schema) + let make = (): t => Js.Dict.empty() + + /** + Adds a value to the data set for the given key. If the key does not exist, it will be created. + + Returns the updated data set. + */ + let add = (self: t, label, value: float, ~decimalPlaces=2) => { + switch self->Utils.Dict.dangerouslyGetNonOption(label) { + | None => + let new = DataSet.make(value, ~decimalPlaces) + self->Js.Dict.set(label, new) + new + | Some(dataSet) => + let updated = dataSet->DataSet.add(value) + self->Js.Dict.set(label, updated) + updated + } + } + } + + type t = dict + let schema = S.dict(Group.schema) + let make = (): t => Js.Dict.empty() + + let add = (self: t, ~group, ~label, ~value, ~decimalPlaces=2) => { + let group = switch self->Utils.Dict.dangerouslyGetNonOption(group) { + | None => + let newGroup = Group.make() + self->Js.Dict.set(group, newGroup) + newGroup + | Some(group) => group + } + + group->Group.add(label, value, ~decimalPlaces) + } +} + +module Stats = { + open Belt + type t = { + n: float, + mean: float, + @as("std-dev") stdDev: option, + min: float, + max: float, + sum: float, + } + + let round = (float, ~precision=2) => { + let factor = Js.Math.pow_float(~base=10.0, ~exp=precision->Int.toFloat) + Js.Math.round(float *. factor) /. factor + } + + let makeFromDataSet = (dataSet: SummaryData.DataSet.t) => { + let n = dataSet.count + let countBigDecimal = n->BigDecimal.fromFloat + let mean = dataSet.sum->BigDecimal.div(countBigDecimal) + + let roundBigDecimal = bd => + bd->BigDecimal.decimalPlaces(dataSet.decimalPlaces)->BigDecimal.toNumber + let roundFloat = float => float->round(~precision=dataSet.decimalPlaces) + + let stdDev = dataSet.sumOfSquares->Option.map(sumOfSquares => { + let variance = + sumOfSquares + ->BigDecimal.div(countBigDecimal) + ->BigDecimal.minus(mean->BigDecimal.times(mean)) + BigDecimal.sqrt(variance)->roundBigDecimal + }) + { + n, + mean: mean->roundBigDecimal, + stdDev, + min: dataSet.min->roundFloat, + max: dataSet.max->roundFloat, + sum: dataSet.sum->roundBigDecimal, + } + } +} + +module Data = { + type t = { + millisAccum: MillisAccum.t, + summaryData: SummaryData.t, + } + + let schema = S.schema(s => { + millisAccum: s.matches(MillisAccum.schema), + summaryData: s.matches(SummaryData.schema), + }) + + let make = () => { + millisAccum: MillisAccum.make(), + summaryData: SummaryData.make(), + } + + module LiveMetrics = { + let addDataSet = if ( + Env.Benchmark.saveDataStrategy->Env.Benchmark.SaveDataStrategy.shouldSavePrometheus + ) { + (dataSet: SummaryData.DataSet.t, ~group, ~label) => { + let {n, mean, stdDev, min, max, sum} = dataSet->Stats.makeFromDataSet + Prometheus.BenchmarkSummaryData.set(~group, ~label, ~n, ~mean, ~stdDev, ~min, ~max, ~sum) + } + } else { + (_dataSet, ~group as _, ~label as _) => () + } + let setCounterMillis = if ( + Env.Benchmark.saveDataStrategy->Env.Benchmark.SaveDataStrategy.shouldSavePrometheus + ) { + (millisAccum: MillisAccum.t, ~label, ~millis) => { + let totalRuntimeMillis = + millisAccum.endTime->Js.Date.getTime -. millisAccum.startTime->Js.Date.getTime + Prometheus.BenchmarkCounters.set(~label, ~millis, ~totalRuntimeMillis) + } + } else { + (_, ~label as _, ~millis as _) => () + } + } + + let incrementMillis = (self: t, ~label, ~amount) => { + let nextMillis = self.millisAccum->MillisAccum.increment(label, amount) + self.millisAccum->LiveMetrics.setCounterMillis(~label, ~millis=nextMillis) + } + + let addSummaryData = (self: t, ~group, ~label, ~value, ~decimalPlaces=2) => { + let updatedDataSet = self.summaryData->SummaryData.add(~group, ~label, ~value, ~decimalPlaces) + updatedDataSet->LiveMetrics.addDataSet(~group, ~label) + } +} + +let data = Data.make() +let throttler = Throttler.make( + ~intervalMillis=Env.ThrottleWrites.jsonFileBenchmarkIntervalMillis, + ~logger=Logging.createChild(~params={"context": "Benchmarking framework"}), +) +let cacheFileName = "BenchmarkCache.json" +let cacheFilePath = NodeJs.Path.join(NodeJs.Path.__dirname, cacheFileName) + +let saveToCacheFile = if ( + Env.Benchmark.saveDataStrategy->Env.Benchmark.SaveDataStrategy.shouldSaveJsonFile +) { + //Save to cache file only happens if the strategy is set to json-file + data => { + let write = () => { + let json = data->S.reverseConvertToJsonStringOrThrow(Data.schema) + NodeJs.Fs.Promises.writeFile(~filepath=cacheFilePath, ~content=json) + } + throttler->Throttler.schedule(write) + } +} else { + _ => () +} + +let readFromCacheFile = async () => { + switch await NodeJs.Fs.Promises.readFile(~filepath=cacheFilePath, ~encoding=Utf8) { + | exception _ => None + | content => + try content->S.parseJsonStringOrThrow(Data.schema)->Some catch { + | S.Raised(e) => + Logging.error( + "Failed to parse benchmark cache file, please delete it and rerun the benchmark", + ) + e->S.Error.raise + } + } +} + +let addSummaryData = (~group, ~label, ~value, ~decimalPlaces=2) => { + let _ = data->Data.addSummaryData(~group, ~label, ~value, ~decimalPlaces) + data->saveToCacheFile +} + +let incrementMillis = (~label, ~amount) => { + let _ = data->Data.incrementMillis(~label, ~amount) + data->saveToCacheFile +} + +let addBlockRangeFetched = ( + ~totalTimeElapsed: int, + ~parsingTimeElapsed: int, + ~pageFetchTime: int, + ~chainId, + ~fromBlock, + ~toBlock, + ~numEvents, + ~numAddresses, + ~queryName, +) => { + let group = `BlockRangeFetched Summary for Chain ${chainId->Belt.Int.toString} ${queryName}` + let add = (label, value) => data->Data.addSummaryData(~group, ~label, ~value=Utils.magic(value)) + + add("Total Time Elapsed (ms)", totalTimeElapsed) + add("Parsing Time Elapsed (ms)", parsingTimeElapsed) + add("Page Fetch Time (ms)", pageFetchTime) + add("Num Events", numEvents) + add("Num Addresses", numAddresses) + add("Block Range Size", toBlock - fromBlock) + + data->Data.incrementMillis( + ~label=`Total Time Fetching Chain ${chainId->Belt.Int.toString} ${queryName}`, + ~amount=totalTimeElapsed, + ) + + data->saveToCacheFile +} + +let eventProcessingGroup = "EventProcessing Summary" +let batchSizeLabel = "Batch Size" + +let addEventProcessing = ( + ~batchSize, + ~loadDuration, + ~handlerDuration, + ~dbWriteDuration, + ~totalTimeElapsed, +) => { + let add = (label, value) => + data->Data.addSummaryData(~group=eventProcessingGroup, ~label, ~value=value->Belt.Int.toFloat) + + add(batchSizeLabel, batchSize) + add("Load Duration (ms)", loadDuration) + add("Handler Duration (ms)", handlerDuration) + add("DB Write Duration (ms)", dbWriteDuration) + add("Total Time Elapsed (ms)", totalTimeElapsed) + + data->Data.incrementMillis(~label="Total Time Processing", ~amount=totalTimeElapsed) + + data->saveToCacheFile +} + +module Summary = { + open Belt + + type summaryTable = dict + + external logSummaryTable: summaryTable => unit = "console.table" + external logArrTable: array<'a> => unit = "console.table" + external logObjTable: {..} => unit = "console.table" + external logDictTable: dict<'a> => unit = "console.table" + + external arrayIntToFloat: array => array = "%identity" + + let printSummary = async () => { + let data = await readFromCacheFile() + switch data { + | None => + Logging.error( + "No benchmark cache file found, please use 'ENVIO_SAVE_BENCHMARK_DATA=true' and rerun the benchmark", + ) + | Some({summaryData, millisAccum}) => + Js.log("Time breakdown") + let timeBreakdown = [ + ( + "Total Runtime", + DateFns.intervalToDuration({ + start: millisAccum.startTime, + end: millisAccum.endTime, + }), + ), + ] + + millisAccum.counters + ->Js.Dict.entries + ->Array.forEach(((label, millis)) => + timeBreakdown + ->Js.Array2.push((label, DateFns.durationFromMillis(millis->Belt.Int.fromFloat))) + ->ignore + ) + + timeBreakdown + ->Js.Dict.fromArray + ->logDictTable + + Js.log("General") + let batchSizesSum = + summaryData + ->Js.Dict.get(eventProcessingGroup) + ->Option.flatMap(g => g->Js.Dict.get(batchSizeLabel)) + ->Option.map(data => data.sum) + ->Option.getWithDefault(BigDecimal.zero) + + let totalRuntimeMillis = + millisAccum.endTime->Js.Date.getTime -. millisAccum.startTime->Js.Date.getTime + + let totalRuntimeSeconds = totalRuntimeMillis /. 1000. + + let eventsPerSecond = + batchSizesSum + ->BigDecimal.div(BigDecimal.fromFloat(totalRuntimeSeconds)) + ->BigDecimal.decimalPlaces(2) + ->BigDecimal.toNumber + + logObjTable({ + "batch sizes sum": batchSizesSum->BigDecimal.toNumber, + "total runtime (sec)": totalRuntimeSeconds, + "events per second": eventsPerSecond, + }) + + summaryData + ->Js.Dict.entries + ->Js.Array2.sortInPlaceWith(((a, _), (b, _)) => a < b ? -1 : 1) + ->Array.forEach(((groupName, group)) => { + Js.log(groupName) + group + ->Js.Dict.entries + ->Array.map(((label, values)) => (label, values->Stats.makeFromDataSet)) + ->Js.Dict.fromArray + ->logDictTable + }) + } + } +} diff --git a/packages/indexer/generated/src/ConfigYAML.gen.ts b/packages/indexer/generated/src/ConfigYAML.gen.ts new file mode 100644 index 0000000..2b58001 --- /dev/null +++ b/packages/indexer/generated/src/ConfigYAML.gen.ts @@ -0,0 +1,38 @@ +/* TypeScript file generated from ConfigYAML.res by genType. */ + +/* eslint-disable */ +/* tslint:disable */ + +const ConfigYAMLJS = require('./ConfigYAML.res.js'); + +export type hyperSyncConfig = { readonly endpointUrl: string }; + +export type hyperFuelConfig = { readonly endpointUrl: string }; + +export abstract class rpcConfig { protected opaque!: any }; /* simulate opaque types */ + +export type syncSource = + { TAG: "HyperSync"; _0: hyperSyncConfig } + | { TAG: "HyperFuel"; _0: hyperFuelConfig } + | { TAG: "Rpc"; _0: rpcConfig }; + +export abstract class aliasAbi { protected opaque!: any }; /* simulate opaque types */ + +export type eventName = string; + +export type contract = { + readonly name: string; + readonly abi: aliasAbi; + readonly addresses: string[]; + readonly events: eventName[] +}; + +export type configYaml = { + readonly syncSource: syncSource; + readonly startBlock: number; + readonly confirmedBlockThreshold: number; + readonly contracts: {[id: string]: contract}; + readonly lowercaseAddresses: boolean +}; + +export const getGeneratedByChainId: (chainId:number) => configYaml = ConfigYAMLJS.getGeneratedByChainId as any; diff --git a/packages/indexer/generated/src/ConfigYAML.res b/packages/indexer/generated/src/ConfigYAML.res new file mode 100644 index 0000000..03c03c7 --- /dev/null +++ b/packages/indexer/generated/src/ConfigYAML.res @@ -0,0 +1,74 @@ + +type hyperSyncConfig = {endpointUrl: string} +type hyperFuelConfig = {endpointUrl: string} + +@genType.opaque +type rpcConfig = { + syncConfig: Config.sourceSync, +} + +@genType +type syncSource = HyperSync(hyperSyncConfig) | HyperFuel(hyperFuelConfig) | Rpc(rpcConfig) + +@genType.opaque +type aliasAbi = Ethers.abi + +type eventName = string + +type contract = { + name: string, + abi: aliasAbi, + addresses: array, + events: array, +} + +type configYaml = { + syncSource, + startBlock: int, + confirmedBlockThreshold: int, + contracts: dict, + lowercaseAddresses: bool, +} + +let publicConfig = ChainMap.fromArrayUnsafe([ + { + let contracts = Js.Dict.fromArray([ + ( + "Monad2048", + { + name: "Monad2048", + abi: Types.Monad2048.abi, + addresses: [ + "0x53748668642735CDa45935716525E7DFbC8aAACC", + ], + events: [ + Types.Monad2048.NewGame.name, + Types.Monad2048.NewMove.name, + ], + } + ), + ]) + let chain = ChainMap.Chain.makeUnsafe(~chainId=143) + ( + chain, + { + confirmedBlockThreshold: 200, + syncSource: HyperSync({endpointUrl: "https://143.hypersync.xyz"}), + startBlock: 0, + contracts, + lowercaseAddresses: false + } + ) + }, +]) + +@genType +let getGeneratedByChainId: int => configYaml = chainId => { + let chain = ChainMap.Chain.makeUnsafe(~chainId) + if !(publicConfig->ChainMap.has(chain)) { + Js.Exn.raiseError( + "No chain with id " ++ chain->ChainMap.Chain.toString ++ " found in config.yaml", + ) + } + publicConfig->ChainMap.get(chain) +} diff --git a/packages/indexer/generated/src/Env.res b/packages/indexer/generated/src/Env.res new file mode 100644 index 0000000..2ee6e7d --- /dev/null +++ b/packages/indexer/generated/src/Env.res @@ -0,0 +1,230 @@ +Dotenv.initialize() +%%private( + let envSafe = EnvSafe.make() + + let getLogLevelConfig = (name, ~default): Pino.logLevel => + envSafe->EnvSafe.get( + name, + S.enum([#trace, #debug, #info, #warn, #error, #fatal, #udebug, #uinfo, #uwarn, #uerror]), + ~fallback=default, + ) +) +// resets the timestampCaughtUpToHeadOrEndblock after a restart when true +let updateSyncTimeOnRestart = + envSafe->EnvSafe.get("UPDATE_SYNC_TIME_ON_RESTART", S.bool, ~fallback=true) +let batchSize = envSafe->EnvSafe.get("MAX_BATCH_SIZE", S.option(S.int)) +let targetBufferSize = envSafe->EnvSafe.get("ENVIO_INDEXING_MAX_BUFFER_SIZE", S.option(S.int)) +let maxAddrInPartition = envSafe->EnvSafe.get("MAX_PARTITION_SIZE", S.int, ~fallback=5_000) +let maxPartitionConcurrency = + envSafe->EnvSafe.get("ENVIO_MAX_PARTITION_CONCURRENCY", S.int, ~fallback=10) +let indexingBlockLag = envSafe->EnvSafe.get("ENVIO_INDEXING_BLOCK_LAG", S.option(S.int)) + +// FIXME: This broke HS grafana dashboard. Should investigate it later. Maybe we should use :: as a default value? +// We want to be able to set it to 0.0.0.0 +// to allow to passthrough the port from a Docker container +// let serverHost = envSafe->EnvSafe.get("ENVIO_INDEXER_HOST", S.string, ~fallback="localhost") +let serverPort = + envSafe->EnvSafe.get( + "ENVIO_INDEXER_PORT", + S.int->S.port, + ~fallback=envSafe->EnvSafe.get("METRICS_PORT", S.int->S.port, ~fallback=9898), + ) + +let tuiOffEnvVar = envSafe->EnvSafe.get("TUI_OFF", S.bool, ~fallback=false) + +let logFilePath = envSafe->EnvSafe.get("LOG_FILE", S.string, ~fallback="logs/envio.log") +let userLogLevel = getLogLevelConfig("LOG_LEVEL", ~default=#info) +let defaultFileLogLevel = getLogLevelConfig("FILE_LOG_LEVEL", ~default=#trace) + +let prodEnvioAppUrl = "https://envio.dev" +let envioAppUrl = envSafe->EnvSafe.get("ENVIO_APP", S.string, ~fallback=prodEnvioAppUrl) +let envioApiToken = envSafe->EnvSafe.get("ENVIO_API_TOKEN", S.option(S.string)) +let hyperSyncClientTimeoutMillis = + envSafe->EnvSafe.get("ENVIO_HYPERSYNC_CLIENT_TIMEOUT_MILLIS", S.int, ~fallback=120_000) + +/** +This is the number of retries that the binary client makes before rejecting the promise with an error +Default is 0 so that the indexer can handle retries internally +*/ +let hyperSyncClientMaxRetries = + envSafe->EnvSafe.get("ENVIO_HYPERSYNC_CLIENT_MAX_RETRIES", S.int, ~fallback=0) + +module Benchmark = { + module SaveDataStrategy: { + type t + let schema: S.t + let default: t + let shouldSaveJsonFile: t => bool + let shouldSavePrometheus: t => bool + let shouldSaveData: t => bool + } = { + @unboxed + type t = Bool(bool) | @as("json-file") JsonFile | @as("prometheus") Prometheus + + let schema = S.enum([Bool(true), Bool(false), JsonFile, Prometheus]) + let default = Bool(false) + + let shouldSaveJsonFile = self => + switch self { + | JsonFile | Bool(true) => true + | _ => false + } + + let shouldSavePrometheus = _ => true + + let shouldSaveData = self => self->shouldSavePrometheus || self->shouldSaveJsonFile + } + + let saveDataStrategy = + envSafe->EnvSafe.get( + "ENVIO_SAVE_BENCHMARK_DATA", + SaveDataStrategy.schema, + ~fallback=SaveDataStrategy.default, + ) + + let shouldSaveData = saveDataStrategy->SaveDataStrategy.shouldSaveData + + /** + StdDev involves saving sum of squares of data points, which could get very large. + + Currently only do this for local runs on json-file and not prometheus. + */ + let shouldSaveStdDev = + saveDataStrategy->SaveDataStrategy.shouldSaveJsonFile +} + +let logStrategy = + envSafe->EnvSafe.get( + "LOG_STRATEGY", + S.enum([ + Logging.EcsFile, + EcsConsole, + EcsConsoleMultistream, + FileOnly, + ConsoleRaw, + ConsolePretty, + Both, + ]), + ~fallback=ConsolePretty, + ) + +Logging.setLogger( + Logging.makeLogger(~logStrategy, ~logFilePath, ~defaultFileLogLevel, ~userLogLevel), +) + +module Db = { + let host = envSafe->EnvSafe.get("ENVIO_PG_HOST", S.string, ~devFallback="localhost") + let port = envSafe->EnvSafe.get("ENVIO_PG_PORT", S.int->S.port, ~devFallback=5433) + let user = envSafe->EnvSafe.get("ENVIO_PG_USER", S.string, ~devFallback="postgres") + let password = envSafe->EnvSafe.get( + "ENVIO_PG_PASSWORD", + S.string, + ~fallback={ + envSafe->EnvSafe.get("ENVIO_POSTGRES_PASSWORD", S.string, ~fallback="testing") + }, + ) + let database = envSafe->EnvSafe.get("ENVIO_PG_DATABASE", S.string, ~devFallback="envio-dev") + let publicSchema = envSafe->EnvSafe.get("ENVIO_PG_PUBLIC_SCHEMA", S.string, ~fallback="public") + let ssl = envSafe->EnvSafe.get( + "ENVIO_PG_SSL_MODE", + Postgres.sslOptionsSchema, + //this is a dev fallback option for local deployments, shouldn't run in the prod env + //the SSL modes should be provided as string otherwise as 'require' | 'allow' | 'prefer' | 'verify-full' + ~devFallback=Bool(false), + ) +} + +module Hasura = { + // Disable it on HS indexer run, since we don't have Hasura credentials anyways + // Also, it might be useful for some users who don't care about Hasura + let enabled = envSafe->EnvSafe.get("ENVIO_HASURA", S.bool, ~fallback=true) + + let responseLimit = switch envSafe->EnvSafe.get("ENVIO_HASURA_RESPONSE_LIMIT", S.option(S.int)) { + | Some(_) as s => s + | None => envSafe->EnvSafe.get("HASURA_RESPONSE_LIMIT", S.option(S.int)) + } + + let graphqlEndpoint = + envSafe->EnvSafe.get( + "HASURA_GRAPHQL_ENDPOINT", + S.string, + ~devFallback="http://localhost:8080/v1/metadata", + ) + + let url = graphqlEndpoint->Js.String2.slice(~from=0, ~to_=-("/v1/metadata"->Js.String2.length)) + + let role = envSafe->EnvSafe.get("HASURA_GRAPHQL_ROLE", S.string, ~devFallback="admin") + + let secret = envSafe->EnvSafe.get("HASURA_GRAPHQL_ADMIN_SECRET", S.string, ~devFallback="testing") + + let aggregateEntities = envSafe->EnvSafe.get( + "ENVIO_HASURA_PUBLIC_AGGREGATE", + S.union([ + S.array(S.string), + // Temporary workaround: Hosted Service can't use commas in env vars for multiple entities. + // Will be removed once comma support is added — don't rely on this. + S.string->S.transform(s => { + parser: string => + switch string->Js.String2.split("&") { + | [] + | [_] => + s.fail(`Provide an array of entities in the JSON format.`) + | entities => entities + }, + }), + ]), + ~fallback=[], + ) +} + +module Configurable = { + + /** + Used for backwards compatability + */ + let unstable__temp_unordered_head_mode = envSafe->EnvSafe.get( + "UNSTABLE__TEMP_UNORDERED_HEAD_MODE", + S.option(S.bool), + ) + + let isUnorderedMultichainMode = + envSafe->EnvSafe.get("UNORDERED_MULTICHAIN_MODE", S.option(S.bool)) + + module SyncConfig = { + let initialBlockInterval = + envSafe->EnvSafe.get("ENVIO_RPC_INITIAL_BLOCK_INTERVAL", S.option(S.int)) + let backoffMultiplicative = + envSafe->EnvSafe.get("ENVIO_RPC_BACKOFF_MULTIPLICATIVE", S.option(S.float)) + let accelerationAdditive = + envSafe->EnvSafe.get("ENVIO_RPC_ACCELERATION_ADDITIVE", S.option(S.int)) + let intervalCeiling = envSafe->EnvSafe.get("ENVIO_RPC_INTERVAL_CEILING", S.option(S.int)) + } +} + +module ThrottleWrites = { + let chainMetadataIntervalMillis = + envSafe->EnvSafe.get("ENVIO_THROTTLE_CHAIN_METADATA_INTERVAL_MILLIS", S.int, ~devFallback=500) + let pruneStaleDataIntervalMillis = + envSafe->EnvSafe.get( + "ENVIO_THROTTLE_PRUNE_STALE_DATA_INTERVAL_MILLIS", + S.int, + ~devFallback=30_000, + ) + + let liveMetricsBenchmarkIntervalMillis = + envSafe->EnvSafe.get( + "ENVIO_THROTTLE_LIVE_METRICS_BENCHMARK_INTERVAL_MILLIS", + S.int, + ~devFallback=1_000, + ) + + let jsonFileBenchmarkIntervalMillis = + envSafe->EnvSafe.get( + "ENVIO_THROTTLE_JSON_FILE_BENCHMARK_INTERVAL_MILLIS", + S.int, + ~devFallback=500, + ) +} + +// You need to close the envSafe after you're done with it so that it immediately tells you about your misconfigured environment on startup. +envSafe->EnvSafe.close diff --git a/packages/indexer/generated/src/EventProcessing.res b/packages/indexer/generated/src/EventProcessing.res new file mode 100644 index 0000000..bc394e2 --- /dev/null +++ b/packages/indexer/generated/src/EventProcessing.res @@ -0,0 +1,478 @@ +open Belt + +let allChainsEventsProcessedToEndblock = (chainFetchers: ChainMap.t) => { + chainFetchers + ->ChainMap.values + ->Array.every(cf => cf->ChainFetcher.hasProcessedToEndblock) +} + +let computeChainsState = (chainFetchers: ChainMap.t): Internal.chains => { + let chains = Js.Dict.empty() + + chainFetchers + ->ChainMap.entries + ->Array.forEach(((chain, chainFetcher)) => { + let chainId = chain->ChainMap.Chain.toChainId->Int.toString + let isReady = chainFetcher.timestampCaughtUpToHeadOrEndblock !== None + + chains->Js.Dict.set( + chainId, + { + Internal.isReady: isReady, + }, + ) + }) + + chains +} + +let convertFieldsToJson = (fields: option>) => { + switch fields { + | None => %raw(`{}`) + | Some(fields) => { + let keys = fields->Js.Dict.keys + let new = Js.Dict.empty() + for i in 0 to keys->Js.Array2.length - 1 { + let key = keys->Js.Array2.unsafe_get(i) + let value = fields->Js.Dict.unsafeGet(key) + // Skip `undefined` values and convert bigint fields to string + // There are not fields with nested bigints, so this is safe + new->Js.Dict.set( + key, + Js.typeof(value) === "bigint" ? value->Utils.magic->BigInt.toString->Utils.magic : value, + ) + } + new->(Utils.magic: dict => Js.Json.t) + } + } +} + +let addItemToRawEvents = (eventItem: Internal.eventItem, ~inMemoryStore: InMemoryStore.t) => { + let {event, eventConfig, chain, blockNumber, timestamp: blockTimestamp} = eventItem + let {block, transaction, params, logIndex, srcAddress} = event + let chainId = chain->ChainMap.Chain.toChainId + let eventId = EventUtils.packEventIndex(~logIndex, ~blockNumber) + let blockFields = + block + ->(Utils.magic: Internal.eventBlock => option>) + ->convertFieldsToJson + let transactionFields = + transaction + ->(Utils.magic: Internal.eventTransaction => option>) + ->convertFieldsToJson + + blockFields->Types.Block.cleanUpRawEventFieldsInPlace + + // Serialize to unknown, because serializing to Js.Json.t fails for Bytes Fuel type, since it has unknown schema + let params = + params + ->S.reverseConvertOrThrow(eventConfig.paramsRawEventSchema) + ->(Utils.magic: unknown => Js.Json.t) + let params = if params === %raw(`null`) { + // Should probably make the params field nullable + // But this is currently needed to make events + // with empty params work + %raw(`"null"`) + } else { + params + } + + let rawEvent: InternalTable.RawEvents.t = { + chainId, + eventId, + eventName: eventConfig.name, + contractName: eventConfig.contractName, + blockNumber, + logIndex, + srcAddress, + blockHash: block->Types.Block.getId, + blockTimestamp, + blockFields, + transactionFields, + params, + } + + let eventIdStr = eventId->BigInt.toString + + inMemoryStore.rawEvents->InMemoryTable.set({chainId, eventId: eventIdStr}, rawEvent) +} + +exception ProcessingError({message: string, exn: exn, item: Internal.item}) + +let runEventHandlerOrThrow = async ( + item: Internal.item, + ~checkpointId, + ~handler, + ~inMemoryStore, + ~loadManager, + ~persistence, + ~shouldSaveHistory, + ~shouldBenchmark, + ~chains: Internal.chains, +) => { + let eventItem = item->Internal.castUnsafeEventItem + + //Include the load in time before handler + let timeBeforeHandler = Hrtime.makeTimer() + + try { + let contextParams: UserContext.contextParams = { + item, + checkpointId, + inMemoryStore, + loadManager, + persistence, + shouldSaveHistory, + isPreload: false, + chains, + isResolved: false, + } + await handler( + ( + { + event: eventItem.event, + context: UserContext.getHandlerContext(contextParams), + }: Internal.handlerArgs + ), + ) + contextParams.isResolved = true + } catch { + | exn => + raise( + ProcessingError({ + message: "Unexpected error in the event handler. Please handle the error to keep the indexer running smoothly.", + item, + exn, + }), + ) + } + if shouldBenchmark { + let timeEnd = timeBeforeHandler->Hrtime.timeSince->Hrtime.toMillis->Hrtime.floatFromMillis + Benchmark.addSummaryData( + ~group="Handlers Per Event", + ~label=`${eventItem.eventConfig.contractName} ${eventItem.eventConfig.name} Handler (ms)`, + ~value=timeEnd, + ~decimalPlaces=4, + ) + } +} + +let runHandlerOrThrow = async ( + item: Internal.item, + ~checkpointId, + ~inMemoryStore, + ~loadManager, + ~indexer: Indexer.t, + ~shouldSaveHistory, + ~shouldBenchmark, + ~chains: Internal.chains, +) => { + switch item { + | Block({onBlockConfig: {handler, chainId}, blockNumber}) => + try { + let contextParams: UserContext.contextParams = { + item, + inMemoryStore, + loadManager, + persistence: indexer.persistence, + shouldSaveHistory, + checkpointId, + isPreload: false, + chains, + isResolved: false, + } + await handler( + ( + { + block: { + number: blockNumber, + chainId, + }, + context: UserContext.getHandlerContext(contextParams), + }: Internal.onBlockArgs + ), + ) + contextParams.isResolved = true + } catch { + | exn => + raise( + ProcessingError({ + message: "Unexpected error in the block handler. Please handle the error to keep the indexer running smoothly.", + item, + exn, + }), + ) + } + | Event({eventConfig}) => { + switch eventConfig.handler { + | Some(handler) => + await item->runEventHandlerOrThrow( + ~handler, + ~checkpointId, + ~inMemoryStore, + ~loadManager, + ~persistence=indexer.persistence, + ~shouldSaveHistory, + ~shouldBenchmark, + ~chains, + ) + | None => () + } + + if indexer.config.enableRawEvents { + item->Internal.castUnsafeEventItem->addItemToRawEvents(~inMemoryStore) + } + } + } +} + +let preloadBatchOrThrow = async ( + batch: Batch.t, + ~loadManager, + ~persistence, + ~inMemoryStore, + ~chains: Internal.chains, +) => { + // On the first run of loaders, we don't care about the result, + // whether it's an error or a return type. + // We'll rerun the loader again right before the handler run, + // to avoid having a stale data returned from the loader. + + let promises = [] + let itemIdx = ref(0) + + for checkpointIdx in 0 to batch.checkpointIds->Array.length - 1 { + let checkpointId = batch.checkpointIds->Js.Array2.unsafe_get(checkpointIdx) + let checkpointEventsProcessed = + batch.checkpointEventsProcessed->Js.Array2.unsafe_get(checkpointIdx) + + for idx in 0 to checkpointEventsProcessed - 1 { + let item = batch.items->Js.Array2.unsafe_get(itemIdx.contents + idx) + switch item { + | Event({eventConfig: {handler}, event}) => + switch handler { + | None => () + | Some(handler) => + try { + promises->Array.push( + handler({ + event, + context: UserContext.getHandlerContext({ + item, + inMemoryStore, + loadManager, + persistence, + checkpointId, + isPreload: true, + shouldSaveHistory: false, + chains, + isResolved: false, + }), + })->Promise.silentCatch, + // Must have Promise.catch as well as normal catch, + // because if user throws an error before await in the handler, + // it won't create a rejected promise + ) + } catch { + | _ => () + } + } + | Block({onBlockConfig: {handler, chainId}, blockNumber}) => + try { + promises->Array.push( + handler({ + block: { + number: blockNumber, + chainId, + }, + context: UserContext.getHandlerContext({ + item, + inMemoryStore, + loadManager, + persistence, + checkpointId, + isPreload: true, + shouldSaveHistory: false, + chains, + isResolved: false, + }), + })->Promise.silentCatch, + ) + } catch { + | _ => () + } + } + } + + itemIdx := itemIdx.contents + checkpointEventsProcessed + } + + let _ = await Promise.all(promises) +} + +let runBatchHandlersOrThrow = async ( + batch: Batch.t, + ~inMemoryStore, + ~loadManager, + ~indexer, + ~shouldSaveHistory, + ~shouldBenchmark, + ~chains: Internal.chains, +) => { + let itemIdx = ref(0) + + for checkpointIdx in 0 to batch.checkpointIds->Array.length - 1 { + let checkpointId = batch.checkpointIds->Js.Array2.unsafe_get(checkpointIdx) + let checkpointEventsProcessed = + batch.checkpointEventsProcessed->Js.Array2.unsafe_get(checkpointIdx) + + for idx in 0 to checkpointEventsProcessed - 1 { + let item = batch.items->Js.Array2.unsafe_get(itemIdx.contents + idx) + + await runHandlerOrThrow( + item, + ~checkpointId, + ~inMemoryStore, + ~loadManager, + ~indexer, + ~shouldSaveHistory, + ~shouldBenchmark, + ~chains, + ) + } + itemIdx := itemIdx.contents + checkpointEventsProcessed + } +} + +let registerProcessEventBatchMetrics = ( + ~logger, + ~loadDuration, + ~handlerDuration, + ~dbWriteDuration, +) => { + logger->Logging.childTrace({ + "msg": "Finished processing batch", + "loader_time_elapsed": loadDuration, + "handlers_time_elapsed": handlerDuration, + "write_time_elapsed": dbWriteDuration, + }) + + Prometheus.incrementLoadEntityDurationCounter(~duration=loadDuration) + Prometheus.incrementEventRouterDurationCounter(~duration=handlerDuration) + Prometheus.incrementExecuteBatchDurationCounter(~duration=dbWriteDuration) +} + +type logPartitionInfo = { + batchSize: int, + firstItemTimestamp: option, + firstItemBlockNumber?: int, + lastItemBlockNumber?: int, +} + +let processEventBatch = async ( + ~batch: Batch.t, + ~inMemoryStore: InMemoryStore.t, + ~isInReorgThreshold, + ~loadManager, + ~indexer: Indexer.t, + ~chainFetchers: ChainMap.t, +) => { + let totalBatchSize = batch.totalBatchSize + // Compute chains state for this batch + let chains: Internal.chains = chainFetchers->computeChainsState + + let logger = Logging.getLogger() + logger->Logging.childTrace({ + "msg": "Started processing batch", + "totalBatchSize": totalBatchSize, + "chains": batch.progressedChainsById->Utils.Dict.mapValues(chainAfterBatch => { + { + "batchSize": chainAfterBatch.batchSize, + "progress": chainAfterBatch.progressBlockNumber, + } + }), + }) + + try { + let timeRef = Hrtime.makeTimer() + + if batch.items->Utils.Array.notEmpty { + await batch->preloadBatchOrThrow( + ~loadManager, + ~persistence=indexer.persistence, + ~inMemoryStore, + ~chains, + ) + } + + let elapsedTimeAfterLoaders = timeRef->Hrtime.timeSince->Hrtime.toMillis->Hrtime.intFromMillis + + if batch.items->Utils.Array.notEmpty { + await batch->runBatchHandlersOrThrow( + ~inMemoryStore, + ~loadManager, + ~indexer, + ~shouldSaveHistory=indexer.config->Config.shouldSaveHistory(~isInReorgThreshold), + ~shouldBenchmark=Env.Benchmark.shouldSaveData, + ~chains, + ) + } + + let elapsedTimeAfterProcessing = + timeRef->Hrtime.timeSince->Hrtime.toMillis->Hrtime.intFromMillis + + let rec executeBatch = async (~escapeTables=?) => { + switch await indexer.persistence.sql->IO.executeBatch( + ~batch, + ~inMemoryStore, + ~isInReorgThreshold, + ~indexer, + ~escapeTables?, + ) { + | exception Persistence.StorageError({message, reason}) => + reason->ErrorHandling.make(~msg=message, ~logger)->Error + + | exception PgStorage.PgEncodingError({table}) => + let escapeTables = switch escapeTables { + | Some(set) => set + | None => Utils.Set.make() + } + let _ = escapeTables->Utils.Set.add(table) + // Retry with specifying which tables to escape. + await executeBatch(~escapeTables) + | exception exn => + exn->ErrorHandling.make(~msg="Failed writing batch to database", ~logger)->Error + | () => { + let elapsedTimeAfterDbWrite = + timeRef->Hrtime.timeSince->Hrtime.toMillis->Hrtime.intFromMillis + let loaderDuration = elapsedTimeAfterLoaders + let handlerDuration = elapsedTimeAfterProcessing - loaderDuration + let dbWriteDuration = elapsedTimeAfterDbWrite - elapsedTimeAfterProcessing + registerProcessEventBatchMetrics( + ~logger, + ~loadDuration=loaderDuration, + ~handlerDuration, + ~dbWriteDuration, + ) + if Env.Benchmark.shouldSaveData { + Benchmark.addEventProcessing( + ~batchSize=totalBatchSize, + ~loadDuration=loaderDuration, + ~handlerDuration, + ~dbWriteDuration, + ~totalTimeElapsed=elapsedTimeAfterDbWrite, + ) + } + Ok() + } + } + } + + await executeBatch() + } catch { + | ProcessingError({message, exn, item}) => + exn + ->ErrorHandling.make(~msg=message, ~logger=item->Logging.getItemLogger) + ->Error + } +} diff --git a/packages/indexer/generated/src/Generated.res b/packages/indexer/generated/src/Generated.res new file mode 100644 index 0000000..57bd1e2 --- /dev/null +++ b/packages/indexer/generated/src/Generated.res @@ -0,0 +1,184 @@ +@val external require: string => unit = "require" + +let registerContractHandlers = ( + ~contractName, + ~handlerPathRelativeToRoot, + ~handlerPathRelativeToConfig, +) => { + try { + require(`../${Path.relativePathToRootFromGenerated}/${handlerPathRelativeToRoot}`) + } catch { + | exn => + let params = { + "Contract Name": contractName, + "Expected Handler Path": handlerPathRelativeToConfig, + "Code": "EE500", + } + let logger = Logging.createChild(~params) + + let errHandler = exn->ErrorHandling.make(~msg="Failed to import handler file", ~logger) + errHandler->ErrorHandling.log + errHandler->ErrorHandling.raiseExn + } +} + +let makeGeneratedConfig = () => { + let chains = [ + { + let contracts = [ + { + Config.name: "Monad2048", + abi: Types.Monad2048.abi, + addresses: [ + "0x53748668642735CDa45935716525E7DFbC8aAACC"->Address.Evm.fromStringOrThrow +, + ], + events: [ + (Types.Monad2048.NewGame.register() :> Internal.eventConfig), + (Types.Monad2048.NewMove.register() :> Internal.eventConfig), + ], + startBlock: None, + }, + ] + let chain = ChainMap.Chain.makeUnsafe(~chainId=143) + { + Config.maxReorgDepth: 200, + startBlock: 0, + id: 143, + contracts, + sources: NetworkSources.evm(~chain, ~contracts=[{name: "Monad2048",events: [Types.Monad2048.NewGame.register(), Types.Monad2048.NewMove.register()],abi: Types.Monad2048.abi}], ~hyperSync=Some("https://143.hypersync.xyz"), ~allEventSignatures=[Types.Monad2048.eventSignatures]->Belt.Array.concatMany, ~shouldUseHypersyncClientDecoder=true, ~rpcs=[], ~lowercaseAddresses=false) + } + }, + ] + + Config.make( + ~shouldRollbackOnReorg=true, + ~shouldSaveFullHistory=false, + ~multichain=if ( + Env.Configurable.isUnorderedMultichainMode->Belt.Option.getWithDefault( + Env.Configurable.unstable__temp_unordered_head_mode->Belt.Option.getWithDefault( + false, + ), + ) + ) { + Unordered + } else { + Ordered + }, + ~chains, + ~enableRawEvents=false, + ~batchSize=?Env.batchSize, + ~preloadHandlers=false, + ~lowercaseAddresses=false, + ~shouldUseHypersyncClientDecoder=true, + ) +} + +let configWithoutRegistrations = makeGeneratedConfig() + +let registerAllHandlers = () => { + EventRegister.startRegistration( + ~ecosystem=configWithoutRegistrations.ecosystem, + ~multichain=configWithoutRegistrations.multichain, + ~preloadHandlers=configWithoutRegistrations.preloadHandlers, + ) + + registerContractHandlers( + ~contractName="Monad2048", + ~handlerPathRelativeToRoot="src/handlers/index.ts", + ~handlerPathRelativeToConfig="src/handlers/index.ts", + ) + + EventRegister.finishRegistration() +} + +let initialSql = Db.makeClient() +let storagePgSchema = Env.Db.publicSchema +let makeStorage = (~sql, ~pgSchema=storagePgSchema, ~isHasuraEnabled=Env.Hasura.enabled) => { + PgStorage.make( + ~sql, + ~pgSchema, + ~pgHost=Env.Db.host, + ~pgUser=Env.Db.user, + ~pgPort=Env.Db.port, + ~pgDatabase=Env.Db.database, + ~pgPassword=Env.Db.password, + ~onInitialize=?{ + if isHasuraEnabled { + Some( + () => { + Hasura.trackDatabase( + ~endpoint=Env.Hasura.graphqlEndpoint, + ~auth={ + role: Env.Hasura.role, + secret: Env.Hasura.secret, + }, + ~pgSchema=storagePgSchema, + ~userEntities=Entities.userEntities, + ~responseLimit=Env.Hasura.responseLimit, + ~schema=Db.schema, + ~aggregateEntities=Env.Hasura.aggregateEntities, + )->Promise.catch(err => { + Logging.errorWithExn( + err->Utils.prettifyExn, + `EE803: Error tracking tables`, + )->Promise.resolve + }) + }, + ) + } else { + None + } + }, + ~onNewTables=?{ + if isHasuraEnabled { + Some( + (~tableNames) => { + Hasura.trackTables( + ~endpoint=Env.Hasura.graphqlEndpoint, + ~auth={ + role: Env.Hasura.role, + secret: Env.Hasura.secret, + }, + ~pgSchema=storagePgSchema, + ~tableNames, + )->Promise.catch(err => { + Logging.errorWithExn( + err->Utils.prettifyExn, + `EE804: Error tracking new tables`, + )->Promise.resolve + }) + }, + ) + } else { + None + } + }, + ~isHasuraEnabled, + ) +} + +let codegenPersistence = Persistence.make( + ~userEntities=Entities.userEntities, + ~allEnums=Enums.allEnums, + ~storage=makeStorage(~sql=initialSql), + ~sql=initialSql, +) + +%%private(let indexer: ref> = ref(None)) +let getIndexer = () => { + switch indexer.contents { + | Some(indexer) => indexer + | None => + let i = { + Indexer.registrations: registerAllHandlers(), + // Need to recreate initial config one more time, + // since configWithoutRegistrations called register for event + // before they were ready + config: makeGeneratedConfig(), + persistence: codegenPersistence, + } + indexer := Some(i) + i + } +} diff --git a/packages/indexer/generated/src/GqlDbCustomTypes.gen.ts b/packages/indexer/generated/src/GqlDbCustomTypes.gen.ts new file mode 100644 index 0000000..f9f2cf2 --- /dev/null +++ b/packages/indexer/generated/src/GqlDbCustomTypes.gen.ts @@ -0,0 +1,8 @@ +/* TypeScript file generated from GqlDbCustomTypes.res by genType. */ + +/* eslint-disable */ +/* tslint:disable */ + +export type Float_t = number; + +export type Int_t = number; diff --git a/packages/indexer/generated/src/GqlDbCustomTypes.res b/packages/indexer/generated/src/GqlDbCustomTypes.res new file mode 100644 index 0000000..8915358 --- /dev/null +++ b/packages/indexer/generated/src/GqlDbCustomTypes.res @@ -0,0 +1,11 @@ +// Can be deleted on a breaking release (V3) + +module Float = { + @genType + type t = float +} + +module Int = { + @genType + type t = int +} diff --git a/packages/indexer/generated/src/Handlers.gen.ts b/packages/indexer/generated/src/Handlers.gen.ts new file mode 100644 index 0000000..1329144 --- /dev/null +++ b/packages/indexer/generated/src/Handlers.gen.ts @@ -0,0 +1,69 @@ +/* TypeScript file generated from Handlers.res by genType. */ + +/* eslint-disable */ +/* tslint:disable */ + +const HandlersJS = require('./Handlers.res.js'); + +import type {HandlerTypes_eventConfig as Types_HandlerTypes_eventConfig} from './Types.gen'; + +import type {Monad2048_NewGame_eventFilters as Types_Monad2048_NewGame_eventFilters} from './Types.gen'; + +import type {Monad2048_NewGame_event as Types_Monad2048_NewGame_event} from './Types.gen'; + +import type {Monad2048_NewMove_eventFilters as Types_Monad2048_NewMove_eventFilters} from './Types.gen'; + +import type {Monad2048_NewMove_event as Types_Monad2048_NewMove_event} from './Types.gen'; + +import type {chain as Types_chain} from './Types.gen'; + +import type {contractRegistrations as Types_contractRegistrations} from './Types.gen'; + +import type {fnWithEventConfig as Types_fnWithEventConfig} from './Types.gen'; + +import type {genericContractRegisterArgs as Internal_genericContractRegisterArgs} from 'envio/src/Internal.gen'; + +import type {genericContractRegister as Internal_genericContractRegister} from 'envio/src/Internal.gen'; + +import type {genericHandlerArgs as Internal_genericHandlerArgs} from 'envio/src/Internal.gen'; + +import type {genericHandlerWithLoader as Internal_genericHandlerWithLoader} from 'envio/src/Internal.gen'; + +import type {genericHandler as Internal_genericHandler} from 'envio/src/Internal.gen'; + +import type {genericLoaderArgs as Internal_genericLoaderArgs} from 'envio/src/Internal.gen'; + +import type {genericLoader as Internal_genericLoader} from 'envio/src/Internal.gen'; + +import type {handlerContext as Types_handlerContext} from './Types.gen'; + +import type {loaderContext as Types_loaderContext} from './Types.gen'; + +import type {onBlockArgs as Envio_onBlockArgs} from 'envio/src/Envio.gen'; + +import type {onBlockOptions as Envio_onBlockOptions} from 'envio/src/Envio.gen'; + +export const Monad2048_NewGame_contractRegister: Types_fnWithEventConfig>,Types_HandlerTypes_eventConfig> = HandlersJS.Monad2048.NewGame.contractRegister as any; + +export const Monad2048_NewGame_handler: Types_fnWithEventConfig>,Types_HandlerTypes_eventConfig> = HandlersJS.Monad2048.NewGame.handler as any; + +export const Monad2048_NewGame_handlerWithLoader: (_1:Internal_genericHandlerWithLoader,loaderReturn>,Internal_genericHandler>,Types_Monad2048_NewGame_eventFilters>) => void = HandlersJS.Monad2048.NewGame.handlerWithLoader as any; + +export const Monad2048_NewMove_contractRegister: Types_fnWithEventConfig>,Types_HandlerTypes_eventConfig> = HandlersJS.Monad2048.NewMove.contractRegister as any; + +export const Monad2048_NewMove_handler: Types_fnWithEventConfig>,Types_HandlerTypes_eventConfig> = HandlersJS.Monad2048.NewMove.handler as any; + +export const Monad2048_NewMove_handlerWithLoader: (_1:Internal_genericHandlerWithLoader,loaderReturn>,Internal_genericHandler>,Types_Monad2048_NewMove_eventFilters>) => void = HandlersJS.Monad2048.NewMove.handlerWithLoader as any; + +/** Register a Block Handler. It'll be called for every block by default. */ +export const onBlock: (_1:Envio_onBlockOptions, _2:((_1:Envio_onBlockArgs) => Promise)) => void = HandlersJS.onBlock as any; + +export const Monad2048: { NewGame: { + handlerWithLoader: (_1:Internal_genericHandlerWithLoader,loaderReturn>,Internal_genericHandler>,Types_Monad2048_NewGame_eventFilters>) => void; + handler: Types_fnWithEventConfig>,Types_HandlerTypes_eventConfig>; + contractRegister: Types_fnWithEventConfig>,Types_HandlerTypes_eventConfig> +}; NewMove: { + handlerWithLoader: (_1:Internal_genericHandlerWithLoader,loaderReturn>,Internal_genericHandler>,Types_Monad2048_NewMove_eventFilters>) => void; + handler: Types_fnWithEventConfig>,Types_HandlerTypes_eventConfig>; + contractRegister: Types_fnWithEventConfig>,Types_HandlerTypes_eventConfig> +} } = HandlersJS.Monad2048 as any; diff --git a/packages/indexer/generated/src/Handlers.res b/packages/indexer/generated/src/Handlers.res new file mode 100644 index 0000000..ffe508b --- /dev/null +++ b/packages/indexer/generated/src/Handlers.res @@ -0,0 +1,13 @@ + @genType +module Monad2048 = { + module NewGame = Types.MakeRegister(Types.Monad2048.NewGame) + module NewMove = Types.MakeRegister(Types.Monad2048.NewMove) +} + +@genType /** Register a Block Handler. It'll be called for every block by default. */ +let onBlock: ( + Envio.onBlockOptions, + Envio.onBlockArgs => promise, +) => unit = ( + EventRegister.onBlock: (unknown, Internal.onBlockArgs => promise) => unit +)->Utils.magic diff --git a/packages/indexer/generated/src/IO.res b/packages/indexer/generated/src/IO.res new file mode 100644 index 0000000..3b69a33 --- /dev/null +++ b/packages/indexer/generated/src/IO.res @@ -0,0 +1,396 @@ +open Belt + +let executeSet = ( + sql: Postgres.sql, + ~items: array<'a>, + ~dbFunction: (Postgres.sql, array<'a>) => promise, +) => { + if items->Array.length > 0 { + sql->dbFunction(items) + } else { + Promise.resolve() + } +} + +let executeBatch = async ( + sql, + ~batch: Batch.t, + ~inMemoryStore: InMemoryStore.t, + ~isInReorgThreshold, + ~indexer: Indexer.t, + ~escapeTables=?, +) => { + let shouldSaveHistory = indexer.config->Config.shouldSaveHistory(~isInReorgThreshold) + + let specificError = ref(None) + + let setRawEvents = executeSet( + _, + ~dbFunction=(sql, items) => { + sql->PgStorage.setOrThrow( + ~items, + ~table=InternalTable.RawEvents.table, + ~itemSchema=InternalTable.RawEvents.schema, + ~pgSchema=Generated.storagePgSchema, + ) + }, + ~items=inMemoryStore.rawEvents->InMemoryTable.values, + ) + + let setEntities = Entities.allEntities->Belt.Array.map(entityConfig => { + let entitiesToSet = [] + let idsToDelete = [] + + let rows = + inMemoryStore + ->InMemoryStore.getInMemTable(~entityConfig) + ->InMemoryTable.Entity.rows + + rows->Js.Array2.forEach(row => { + switch row { + | Updated({latest: {entityUpdateAction: Set(entity)}}) => entitiesToSet->Array.push(entity) + | Updated({latest: {entityUpdateAction: Delete, entityId}}) => + idsToDelete->Array.push(entityId) + | _ => () + } + }) + + let shouldRemoveInvalidUtf8 = switch escapeTables { + | Some(tables) if tables->Utils.Set.has(entityConfig.table) => true + | _ => false + } + + async sql => { + try { + let promises = [] + + if shouldSaveHistory { + let backfillHistoryIds = Utils.Set.make() + let batchSetUpdates = [] + // Use unnest approach + let batchDeleteCheckpointIds = [] + let batchDeleteEntityIds = [] + + rows->Js.Array2.forEach(row => { + switch row { + | Updated({history, containsRollbackDiffChange}) => + history->Js.Array2.forEach( + (entityUpdate: EntityHistory.entityUpdate<'a>) => { + if !containsRollbackDiffChange { + // For every update we want to make sure that there's an existing history item + // with the current entity state. So we backfill history with checkpoint id 0, + // before writing updates. Don't do this if the update has a rollback diff change. + backfillHistoryIds->Utils.Set.add(entityUpdate.entityId)->ignore + } + switch entityUpdate.entityUpdateAction { + | Delete => { + batchDeleteEntityIds->Array.push(entityUpdate.entityId)->ignore + batchDeleteCheckpointIds->Array.push(entityUpdate.checkpointId)->ignore + } + | Set(_) => batchSetUpdates->Js.Array2.push(entityUpdate)->ignore + } + }, + ) + | _ => () + } + }) + + if backfillHistoryIds->Utils.Set.size !== 0 { + // This must run before updating entity or entity history tables + await EntityHistory.backfillHistory( + sql, + ~pgSchema=Db.publicSchema, + ~entityName=entityConfig.name, + ~entityIndex=entityConfig.index, + ~ids=backfillHistoryIds->Utils.Set.toArray, + ) + } + + if batchDeleteCheckpointIds->Utils.Array.notEmpty { + promises->Array.push( + sql->EntityHistory.insertDeleteUpdates( + ~pgSchema=Db.publicSchema, + ~entityHistory=entityConfig.entityHistory, + ~batchDeleteEntityIds, + ~batchDeleteCheckpointIds, + ), + ) + } + + if batchSetUpdates->Utils.Array.notEmpty { + if shouldRemoveInvalidUtf8 { + let entities = batchSetUpdates->Js.Array2.map(batchSetUpdate => { + switch batchSetUpdate.entityUpdateAction { + | Set(entity) => entity + | _ => Js.Exn.raiseError("Expected Set action") + } + }) + entities->PgStorage.removeInvalidUtf8InPlace + } + + promises + ->Js.Array2.push( + sql->PgStorage.setOrThrow( + ~items=batchSetUpdates, + ~itemSchema=entityConfig.entityHistory.setUpdateSchema, + ~table=entityConfig.entityHistory.table, + ~pgSchema=Db.publicSchema, + ), + ) + ->ignore + } + } + + if entitiesToSet->Utils.Array.notEmpty { + if shouldRemoveInvalidUtf8 { + entitiesToSet->PgStorage.removeInvalidUtf8InPlace + } + promises->Array.push( + sql->PgStorage.setOrThrow( + ~items=entitiesToSet, + ~table=entityConfig.table, + ~itemSchema=entityConfig.schema, + ~pgSchema=Generated.storagePgSchema, + ), + ) + } + if idsToDelete->Utils.Array.notEmpty { + promises->Array.push(sql->DbFunctionsEntities.batchDelete(~entityConfig)(idsToDelete)) + } + + let _ = await promises->Promise.all + } catch { + // There's a race condition that sql->Postgres.beginSql + // might throw PG error, earlier, than the handled error + // from setOrThrow will be passed through. + // This is needed for the utf8 encoding fix. + | exn => { + /* Note: Entity History doesn't return StorageError yet, and directly throws JsError */ + let normalizedExn = switch exn { + | JsError(_) => exn + | Persistence.StorageError({reason: exn}) => exn + | _ => exn + }->Js.Exn.anyToExnInternal + + switch normalizedExn { + | JsError(error) => + // Workaround for https://github.com/enviodev/hyperindex/issues/446 + // We do escaping only when we actually got an error writing for the first time. + // This is not perfect, but an optimization to avoid escaping for every single item. + + switch error->S.parseOrThrow(PgStorage.pgErrorMessageSchema) { + | `current transaction is aborted, commands ignored until end of transaction block` => () + | `invalid byte sequence for encoding "UTF8": 0x00` => + // Since the transaction is aborted at this point, + // we can't simply retry the function with escaped items, + // so propagate the error, to restart the whole batch write. + // Also, pass the failing table, to escape only its items. + // TODO: Ideally all this should be done in the file, + // so it'll be easier to work on PG specific logic. + specificError.contents = Some(PgStorage.PgEncodingError({table: entityConfig.table})) + | _ => specificError.contents = Some(exn->Utils.prettifyExn) + | exception _ => () + } + | S.Raised(_) => raise(normalizedExn) // But rethrow this one, since it's not a PG error + | _ => () + } + + // Improtant: Don't rethrow here, since it'll result in + // an unhandled rejected promise error. + // That's fine not to throw, since sql->Postgres.beginSql + // will fail anyways. + } + } + } + }) + + //In the event of a rollback, rollback all meta tables based on the given + //valid event identifier, where all rows created after this eventIdentifier should + //be deleted + let rollbackTables = switch inMemoryStore { + | {rollbackTargetCheckpointId: Some(rollbackTargetCheckpointId)} => + Some( + sql => { + let promises = Entities.allEntities->Js.Array2.map(entityConfig => { + sql->EntityHistory.rollback( + ~pgSchema=Db.publicSchema, + ~entityName=entityConfig.name, + ~entityIndex=entityConfig.index, + ~rollbackTargetCheckpointId, + ) + }) + promises + ->Js.Array2.push( + sql->InternalTable.Checkpoints.rollback( + ~pgSchema=Db.publicSchema, + ~rollbackTargetCheckpointId, + ), + ) + ->ignore + Promise.all(promises) + }, + ) + | _ => None + } + + try { + let _ = await Promise.all2(( + sql->Postgres.beginSql(async sql => { + //Rollback tables need to happen first in the traction + switch rollbackTables { + | Some(rollbackTables) => + let _ = await rollbackTables(sql) + | None => () + } + + let setOperations = [ + sql => + sql->InternalTable.Chains.setProgressedChains( + ~pgSchema=Db.publicSchema, + ~progressedChains=batch.progressedChainsById->Utils.Dict.mapValuesToArray(( + chainAfterBatch + ): InternalTable.Chains.progressedChain => { + chainId: chainAfterBatch.fetchState.chainId, + progressBlockNumber: chainAfterBatch.progressBlockNumber, + totalEventsProcessed: chainAfterBatch.totalEventsProcessed, + }), + ), + setRawEvents, + ]->Belt.Array.concat(setEntities) + + if shouldSaveHistory { + setOperations->Array.push(sql => + sql->InternalTable.Checkpoints.insert( + ~pgSchema=Db.publicSchema, + ~checkpointIds=batch.checkpointIds, + ~checkpointChainIds=batch.checkpointChainIds, + ~checkpointBlockNumbers=batch.checkpointBlockNumbers, + ~checkpointBlockHashes=batch.checkpointBlockHashes, + ~checkpointEventsProcessed=batch.checkpointEventsProcessed, + ) + ) + } + + await setOperations + ->Belt.Array.map(dbFunc => sql->dbFunc) + ->Promise.all + }), + // Since effect cache currently doesn't support rollback, + // we can run it outside of the transaction for simplicity. + inMemoryStore.effects + ->Js.Dict.keys + ->Belt.Array.keepMapU(effectName => { + let inMemTable = inMemoryStore.effects->Js.Dict.unsafeGet(effectName) + let {idsToStore, dict, effect, invalidationsCount} = inMemTable + switch idsToStore { + | [] => None + | ids => { + let items = Belt.Array.makeUninitializedUnsafe(ids->Belt.Array.length) + ids->Belt.Array.forEachWithIndex((index, id) => { + items->Js.Array2.unsafe_set( + index, + ( + { + id, + output: dict->Js.Dict.unsafeGet(id), + }: Internal.effectCacheItem + ), + ) + }) + Some( + indexer.persistence->Persistence.setEffectCacheOrThrow( + ~effect, + ~items, + ~invalidationsCount, + ), + ) + } + } + }) + ->Promise.all, + )) + + // Just in case, if there's a not PG-specific error. + switch specificError.contents { + | Some(specificError) => raise(specificError) + | None => () + } + } catch { + | exn => + raise( + switch specificError.contents { + | Some(specificError) => specificError + | None => exn + }, + ) + } +} + +let prepareRollbackDiff = async (~persistence: Persistence.t, ~rollbackTargetCheckpointId) => { + let inMemStore = InMemoryStore.make(~entities=Entities.allEntities, ~rollbackTargetCheckpointId) + + let deletedEntities = Js.Dict.empty() + let setEntities = Js.Dict.empty() + + let _ = + await Entities.allEntities + ->Belt.Array.map(async entityConfig => { + let entityTable = inMemStore->InMemoryStore.getInMemTable(~entityConfig) + + let (removedIdsResult, restoredEntitiesResult) = await Promise.all2(( + // Get IDs of entities that should be deleted (created after rollback target with no prior history) + persistence.sql + ->Postgres.preparedUnsafe( + entityConfig.entityHistory.makeGetRollbackRemovedIdsQuery(~pgSchema=Db.publicSchema), + [rollbackTargetCheckpointId]->Utils.magic, + ) + ->(Utils.magic: promise => promise>), + // Get entities that should be restored to their state at or before rollback target + persistence.sql + ->Postgres.preparedUnsafe( + entityConfig.entityHistory.makeGetRollbackRestoredEntitiesQuery( + ~pgSchema=Db.publicSchema, + ), + [rollbackTargetCheckpointId]->Utils.magic, + ) + ->(Utils.magic: promise => promise>), + )) + + // Process removed IDs + removedIdsResult->Js.Array2.forEach(data => { + deletedEntities->Utils.Dict.push(entityConfig.name, data["id"]) + entityTable->InMemoryTable.Entity.set( + { + entityId: data["id"], + checkpointId: 0, + entityUpdateAction: Delete, + }, + ~shouldSaveHistory=false, + ~containsRollbackDiffChange=true, + ) + }) + + let restoredEntities = restoredEntitiesResult->S.parseOrThrow(entityConfig.rowsSchema) + + // Process restored entities + restoredEntities->Belt.Array.forEach((entity: Entities.internalEntity) => { + setEntities->Utils.Dict.push(entityConfig.name, entity.id) + entityTable->InMemoryTable.Entity.set( + { + entityId: entity.id, + checkpointId: 0, + entityUpdateAction: Set(entity), + }, + ~shouldSaveHistory=false, + ~containsRollbackDiffChange=true, + ) + }) + }) + ->Promise.all + + { + "inMemStore": inMemStore, + "deletedEntities": deletedEntities, + "setEntities": setEntities, + } +} diff --git a/packages/indexer/generated/src/Index.bs.js b/packages/indexer/generated/src/Index.bs.js new file mode 100644 index 0000000..5984392 --- /dev/null +++ b/packages/indexer/generated/src/Index.bs.js @@ -0,0 +1,209 @@ +#!/usr/bin/env node + +/* + * Migration script for Envio v2.22.0+ + * + * In version 2.22.0 we introduced a breaking change by changing ReScript generated + * files suffix from .bs.js to .res.js. This script helps users smoothly upgrade + * their indexers to the new version. + * + * Previously, users needed to run ReScript-generated files directly in their + * package.json scripts (e.g., "node generated/src/Index.bs.js"). Now, Envio + * provides a unified `envio start` command that handles this internally. + * + * This script: + * 1. Updates package.json scripts to use `envio start` instead of direct file execution + * 2. Runs the new envio start command + */ + +const fs = require("fs"); +const path = require("path"); +const readline = require("readline"); +const { spawn } = require("child_process"); + +// Function to update package.json +function updatePackageJson() { + try { + // Look for package.json in current directory and parent directories + let packageJsonPath = null; + let currentDir = process.cwd(); + + // Search up the directory tree for package.json + while (currentDir !== path.dirname(currentDir)) { + const potentialPath = path.join(currentDir, "package.json"); + if (fs.existsSync(potentialPath)) { + packageJsonPath = potentialPath; + break; + } + currentDir = path.dirname(currentDir); + } + + if (!packageJsonPath) { + console.log("❌ Could not find package.json file"); + return false; + } + + console.log(`📦 Found package.json at: ${packageJsonPath}`); + + // Read and parse package.json + const packageJsonContent = fs.readFileSync(packageJsonPath, "utf8"); + const packageJson = JSON.parse(packageJsonContent); + + // Check if scripts section exists + if (!packageJson.scripts) { + console.log("⚠️ No scripts section found in package.json"); + return false; + } + + // Update the start script + let updated = false; + if (packageJson.scripts.start) { + let originalScript = packageJson.scripts.start; + let newScript = originalScript; + + // Replace ts-node generated/src/Index.bs.js with envio start + newScript = newScript.replace( + /ts-node\s+generated\/src\/Index\.bs\.js/g, + "envio start" + ); + + // Replace node generated/src/Index.bs.js with envio start + newScript = newScript.replace( + /node\s+generated\/src\/Index\.bs\.js/g, + "envio start" + ); + + if (newScript !== originalScript) { + console.log("🔧 Updating start script..."); + console.log(` From: ${originalScript}`); + console.log(` To: ${newScript}`); + packageJson.scripts.start = newScript; + updated = true; + } + } + + if (updated) { + // Write back the updated package.json + fs.writeFileSync( + packageJsonPath, + JSON.stringify(packageJson, null, 2) + "\n" + ); + console.log("✅ Package.json updated successfully!"); + return true; + } else { + console.log("ℹ️ No scripts found that need updating"); + return false; + } + } catch (error) { + console.error("❌ Error updating package.json:", error.message); + return false; + } +} + +// Function to prompt user for migration +function promptUserForMigration() { + return new Promise((resolve) => { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + // Set up timeout to automatically skip after 30 seconds + const timeout = setTimeout(() => { + rl.close(); + console.log( + "\n⏱️ No response received in 30 seconds, skipping package.json migration." + ); + resolve(false); + }, 30000); + + rl.question( + "🤔 Would you like to automatically update your package.json scripts? (y/N): ", + (answer) => { + clearTimeout(timeout); + rl.close(); + const shouldMigrate = + answer.toLowerCase() === "y" || + answer.toLowerCase() === "yes" || + answer.trim() === ""; + resolve(shouldMigrate); + } + ); + }); +} + +// Function to run envio start +function runEnvioStart() { + console.log("🚀 Starting Envio..."); + + const envioProcess = spawn("envio", ["start"], { + stdio: "inherit", + cwd: process.cwd(), + }); + + envioProcess.on("error", (error) => { + if (error.code === "ENOENT") { + console.error( + '❌ Error: "envio" command not found. Please make sure Envio CLI is installed.' + ); + } else { + console.error("❌ Error running envio start:", error.message); + } + process.exit(1); + }); + + envioProcess.on("close", (code) => { + if (code !== 0) { + console.log(`❌ Envio start exited with code ${code}`); + process.exit(code); + } + }); +} + +// Main execution +async function main() { + console.log("🔄 Migrating to envio@2.22.0 or later..."); + console.log("📋 Migration steps:"); + console.log(" 1. Update package.json scripts (optional)"); + console.log(" 2. Run envio start"); + console.log(""); + + console.log( + "ℹ️ Note: In the new version, pnpm-workspaces.yaml and .npmrc files are no longer required." + ); + console.log( + " You can safely remove them if you don't need them for other purposes." + ); + console.log(""); + + // Prompt user for package.json migration + const shouldMigrate = await promptUserForMigration(); + + if (shouldMigrate) { + console.log(""); + const packageUpdated = updatePackageJson(); + + if (packageUpdated) { + console.log(""); + console.log( + "🎉 Migration completed! Your package.json has been updated." + ); + console.log( + ' From now on, you can use "npm start" or "envio start" directly.' + ); + console.log(""); + } + } else { + console.log("⏭️ Skipping package.json migration."); + console.log(""); + } + + // Run envio start + runEnvioStart(); +} + +// Start the main function +main().catch((error) => { + console.error("❌ Error during migration:", error.message); + process.exit(1); +}); diff --git a/packages/indexer/generated/src/Index.res b/packages/indexer/generated/src/Index.res new file mode 100644 index 0000000..4fafc0a --- /dev/null +++ b/packages/indexer/generated/src/Index.res @@ -0,0 +1,337 @@ +open Belt + +type chainData = { + chainId: float, + poweredByHyperSync: bool, + firstEventBlockNumber: option, + latestProcessedBlock: option, + timestampCaughtUpToHeadOrEndblock: option, + numEventsProcessed: int, + latestFetchedBlockNumber: int, + currentBlockHeight: int, + numBatchesFetched: int, + endBlock: option, + numAddresses: int, +} +@tag("status") +type state = + | @as("disabled") Disabled({}) + | @as("initializing") Initializing({}) + | @as("active") + Active({ + envioVersion: option, + chains: array, + indexerStartTime: Js.Date.t, + isPreRegisteringDynamicContracts: bool, + isUnorderedMultichainMode: bool, + rollbackOnReorg: bool, + }) + +let chainDataSchema = S.schema((s): chainData => { + chainId: s.matches(S.float), + poweredByHyperSync: s.matches(S.bool), + firstEventBlockNumber: s.matches(S.option(S.int)), + latestProcessedBlock: s.matches(S.option(S.int)), + timestampCaughtUpToHeadOrEndblock: s.matches(S.option(S.datetime(S.string))), + numEventsProcessed: s.matches(S.int), + latestFetchedBlockNumber: s.matches(S.int), + currentBlockHeight: s.matches(S.int), + numBatchesFetched: s.matches(S.int), + endBlock: s.matches(S.option(S.int)), + numAddresses: s.matches(S.int), +}) +let stateSchema = S.union([ + S.literal(Disabled({})), + S.literal(Initializing({})), + S.schema(s => Active({ + envioVersion: s.matches(S.option(S.string)), + chains: s.matches(S.array(chainDataSchema)), + indexerStartTime: s.matches(S.datetime(S.string)), + // Keep the field, since Dev Console expects it to be present + isPreRegisteringDynamicContracts: false, + isUnorderedMultichainMode: s.matches(S.bool), + rollbackOnReorg: s.matches(S.bool), + })), +]) + +let startServer = (~getState, ~indexer: Indexer.t, ~isDevelopmentMode: bool) => { + open Express + + let app = makeCjs() + + let consoleCorsMiddleware = (req, res, next) => { + switch req.headers->Js.Dict.get("origin") { + | Some(origin) if origin === Env.prodEnvioAppUrl || origin === Env.envioAppUrl => + res->setHeader("Access-Control-Allow-Origin", origin) + | _ => () + } + + res->setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") + res->setHeader( + "Access-Control-Allow-Headers", + "Origin, X-Requested-With, Content-Type, Accept", + ) + + if req.method === Options { + res->sendStatus(200) + } else { + next() + } + } + app->useFor("/console", consoleCorsMiddleware) + app->useFor("/metrics", consoleCorsMiddleware) + + app->get("/healthz", (_req, res) => { + // this is the machine readable port used in kubernetes to check the health of this service. + // aditional health information could be added in the future (info about errors, back-offs, etc). + res->sendStatus(200) + }) + + app->get("/console/state", (_req, res) => { + let state = if isDevelopmentMode { + getState() + } else { + Disabled({}) + } + + res->json(state->S.reverseConvertToJsonOrThrow(stateSchema)) + }) + + app->post("/console/syncCache", (_req, res) => { + if isDevelopmentMode { + (indexer.persistence->Persistence.getInitializedStorageOrThrow).dumpEffectCache() + ->Promise.thenResolve(_ => res->json(Boolean(true))) + ->Promise.done + } else { + res->json(Boolean(false)) + } + }) + + PromClient.collectDefaultMetrics() + + app->get("/metrics", (_req, res) => { + res->set("Content-Type", PromClient.defaultRegister->PromClient.getContentType) + let _ = + PromClient.defaultRegister + ->PromClient.metrics + ->Promise.thenResolve(metrics => res->endWithData(metrics)) + }) + + let _ = app->listen(Env.serverPort) +} + +type args = {@as("tui-off") tuiOff?: bool} + +type process +@val external process: process = "process" +@get external argv: process => 'a = "argv" + +type mainArgs = Yargs.parsedArgs + +let makeAppState = (globalState: GlobalState.t): EnvioInkApp.appState => { + let chains = + globalState.chainManager.chainFetchers + ->ChainMap.values + ->Array.map(cf => { + let {numEventsProcessed, fetchState, numBatchesFetched} = cf + let latestFetchedBlockNumber = Pervasives.max(fetchState->FetchState.bufferBlockNumber, 0) + let hasProcessedToEndblock = cf->ChainFetcher.hasProcessedToEndblock + let currentBlockHeight = + cf->ChainFetcher.hasProcessedToEndblock + ? cf.fetchState.endBlock->Option.getWithDefault(cf.currentBlockHeight) + : cf.currentBlockHeight + + let progress: ChainData.progress = if hasProcessedToEndblock { + // If the endblock has been reached then set the progress to synced. + // if there's chains that have no events in the block range start->end, + // it's possible there are no events in that block range (ie firstEventBlockNumber = None) + // This ensures TUI still displays synced in this case + let { + committedProgressBlockNumber, + timestampCaughtUpToHeadOrEndblock, + numEventsProcessed, + firstEventBlockNumber, + } = cf + + Synced({ + firstEventBlockNumber: firstEventBlockNumber->Option.getWithDefault(0), + latestProcessedBlock: committedProgressBlockNumber, + timestampCaughtUpToHeadOrEndblock: timestampCaughtUpToHeadOrEndblock->Option.getWithDefault( + Js.Date.now()->Js.Date.fromFloat, + ), + numEventsProcessed, + }) + } else { + switch cf { + | { + committedProgressBlockNumber, + timestampCaughtUpToHeadOrEndblock: Some(timestampCaughtUpToHeadOrEndblock), + firstEventBlockNumber: Some(firstEventBlockNumber), + } => + Synced({ + firstEventBlockNumber, + latestProcessedBlock: committedProgressBlockNumber, + timestampCaughtUpToHeadOrEndblock, + numEventsProcessed, + }) + | { + committedProgressBlockNumber, + timestampCaughtUpToHeadOrEndblock: None, + firstEventBlockNumber: Some(firstEventBlockNumber), + } => + Syncing({ + firstEventBlockNumber, + latestProcessedBlock: committedProgressBlockNumber, + numEventsProcessed, + }) + | {firstEventBlockNumber: None} => SearchingForEvents + } + } + + ( + { + progress, + currentBlockHeight, + latestFetchedBlockNumber, + numBatchesFetched, + chain: ChainMap.Chain.makeUnsafe(~chainId=cf.chainConfig.id), + endBlock: cf.fetchState.endBlock, + poweredByHyperSync: (cf.sourceManager->SourceManager.getActiveSource).poweredByHyperSync, + }: EnvioInkApp.chainData + ) + }) + { + config: globalState.indexer.config, + indexerStartTime: globalState.indexerStartTime, + chains, + } +} + +// Function to open the URL in the browser +// @module("child_process") +// external exec: (string, (Js.Nullable.t, 'a, 'b) => unit) => unit = "exec" +// @module("process") external platform: string = "platform" +// let openConsole = () => { +// let host = "https://envio.dev" +// let command = switch platform { +// | "win32" => "start" +// | "darwin" => "open" +// | _ => "xdg-open" +// } +// exec(`${command} ${host}/console`, (_, _, _) => ()) +// } + +let main = async () => { + try { + let mainArgs: mainArgs = process->argv->Yargs.hideBin->Yargs.yargs->Yargs.argv + let shouldUseTui = !(mainArgs.tuiOff->Belt.Option.getWithDefault(Env.tuiOffEnvVar)) + // The most simple check to verify whether we are running in development mode + // and prevent exposing the console to public, when creating a real deployment. + let isDevelopmentMode = Env.Db.password === "testing" + + let indexer = Generated.getIndexer() + + let gsManagerRef = ref(None) + + let envioVersion = + PersistedState.getPersistedState()->Result.mapWithDefault(None, p => Some(p.envioVersion)) + + switch envioVersion { + | Some(version) => Prometheus.Info.set(~version) + | None => () + } + Prometheus.RollbackEnabled.set(~enabled=indexer.config.shouldRollbackOnReorg) + + startServer( + ~indexer, + ~isDevelopmentMode, + ~getState=() => + switch gsManagerRef.contents { + | None => Initializing({}) + | Some(gsManager) => { + let state = gsManager->GlobalStateManager.getState + let appState = state->makeAppState + Active({ + envioVersion, + chains: appState.chains->Js.Array2.map(c => { + let cf = state.chainManager.chainFetchers->ChainMap.get(c.chain) + { + chainId: c.chain->ChainMap.Chain.toChainId->Js.Int.toFloat, + poweredByHyperSync: c.poweredByHyperSync, + latestFetchedBlockNumber: c.latestFetchedBlockNumber, + currentBlockHeight: c.currentBlockHeight, + numBatchesFetched: c.numBatchesFetched, + endBlock: c.endBlock, + firstEventBlockNumber: switch c.progress { + | SearchingForEvents => None + | Syncing({firstEventBlockNumber}) | Synced({firstEventBlockNumber}) => + Some(firstEventBlockNumber) + }, + latestProcessedBlock: switch c.progress { + | SearchingForEvents => None + | Syncing({latestProcessedBlock}) | Synced({latestProcessedBlock}) => + Some(latestProcessedBlock) + }, + timestampCaughtUpToHeadOrEndblock: switch c.progress { + | SearchingForEvents + | Syncing(_) => + None + | Synced({timestampCaughtUpToHeadOrEndblock}) => + Some(timestampCaughtUpToHeadOrEndblock) + }, + numEventsProcessed: switch c.progress { + | SearchingForEvents => 0 + | Syncing({numEventsProcessed}) + | Synced({numEventsProcessed}) => numEventsProcessed + }, + numAddresses: cf.fetchState->FetchState.numAddresses, + } + }), + indexerStartTime: appState.indexerStartTime, + isPreRegisteringDynamicContracts: false, + rollbackOnReorg: indexer.config.shouldRollbackOnReorg, + isUnorderedMultichainMode: switch indexer.config.multichain { + | Unordered => true + | Ordered => false + }, + }) + } + }, + ) + + await indexer.persistence->Persistence.init( + ~chainConfigs=indexer.config.chainMap->ChainMap.values, + ) + + let chainManager = await ChainManager.makeFromDbState( + ~initialState=indexer.persistence->Persistence.getInitializedState, + ~config=indexer.config, + ~registrations=indexer.registrations, + ~persistence=indexer.persistence, + ) + let globalState = GlobalState.make(~indexer, ~chainManager, ~isDevelopmentMode, ~shouldUseTui) + let stateUpdatedHook = if shouldUseTui { + let rerender = EnvioInkApp.startApp(makeAppState(globalState)) + Some(globalState => globalState->makeAppState->rerender) + } else { + None + } + let gsManager = globalState->GlobalStateManager.make(~stateUpdatedHook?) + gsManagerRef := Some(gsManager) + gsManager->GlobalStateManager.dispatchTask(NextQuery(CheckAllChains)) + /* + NOTE: + This `ProcessEventBatch` dispatch shouldn't be necessary but we are adding for safety, it should immediately return doing + nothing since there is no events on the queues. + */ + + gsManager->GlobalStateManager.dispatchTask(ProcessEventBatch) + } catch { + | e => { + e->ErrorHandling.make(~msg="Failed at initialization")->ErrorHandling.log + NodeJs.process->NodeJs.exitWithCode(Failure) + } + } +} + +main()->ignore diff --git a/packages/indexer/generated/src/Js.shim.ts b/packages/indexer/generated/src/Js.shim.ts new file mode 100644 index 0000000..51f44c5 --- /dev/null +++ b/packages/indexer/generated/src/Js.shim.ts @@ -0,0 +1,11 @@ +export type Json_t = + | string + | boolean + | number + | null + | { [key: string]: Json_t } + | Json_t[]; + +export type t = unknown; + +export type Exn_t = Error; diff --git a/packages/indexer/generated/src/LoadLayer.res b/packages/indexer/generated/src/LoadLayer.res new file mode 100644 index 0000000..5dab1f3 --- /dev/null +++ b/packages/indexer/generated/src/LoadLayer.res @@ -0,0 +1,444 @@ +open Belt + +let loadById = ( + ~loadManager, + ~persistence: Persistence.t, + ~entityConfig: Internal.entityConfig, + ~inMemoryStore, + ~shouldGroup, + ~item, + ~entityId, +) => { + let key = `${entityConfig.name}.get` + let inMemTable = inMemoryStore->InMemoryStore.getInMemTable(~entityConfig) + + let load = async (idsToLoad, ~onError as _) => { + let timerRef = Prometheus.StorageLoad.startOperation(~operation=key) + + // Since LoadManager.call prevents registerign entities already existing in the inMemoryStore, + // we can be sure that we load only the new ones. + let dbEntities = try { + await (persistence->Persistence.getInitializedStorageOrThrow).loadByIdsOrThrow( + ~table=entityConfig.table, + ~rowsSchema=entityConfig.rowsSchema, + ~ids=idsToLoad, + ) + } catch { + | Persistence.StorageError({message, reason}) => + reason->ErrorHandling.mkLogAndRaise(~logger=item->Logging.getItemLogger, ~msg=message) + } + + let entitiesMap = Js.Dict.empty() + for idx in 0 to dbEntities->Array.length - 1 { + let entity = dbEntities->Js.Array2.unsafe_get(idx) + entitiesMap->Js.Dict.set(entity.id, entity) + } + idsToLoad->Js.Array2.forEach(entityId => { + // Set the entity in the in memory store + // without overwriting existing values + // which might be newer than what we got from db + inMemTable->InMemoryTable.Entity.initValue( + ~allowOverWriteEntity=false, + ~key=entityId, + ~entity=entitiesMap->Utils.Dict.dangerouslyGetNonOption(entityId), + ) + }) + + timerRef->Prometheus.StorageLoad.endOperation( + ~operation=key, + ~whereSize=idsToLoad->Array.length, + ~size=dbEntities->Array.length, + ) + } + + loadManager->LoadManager.call( + ~key, + ~load, + ~shouldGroup, + ~hasher=LoadManager.noopHasher, + ~getUnsafeInMemory=inMemTable->InMemoryTable.Entity.getUnsafe, + ~hasInMemory=hash => inMemTable.table->InMemoryTable.hasByHash(hash), + ~input=entityId, + ) +} + +let callEffect = ( + ~effect: Internal.effect, + ~arg: Internal.effectArgs, + ~inMemTable: InMemoryStore.effectCacheInMemTable, + ~timerRef, + ~onError, +) => { + let effectName = effect.name + let hadActiveCalls = effect.activeCallsCount > 0 + effect.activeCallsCount = effect.activeCallsCount + 1 + Prometheus.EffectCalls.activeCallsCount->Prometheus.SafeGauge.handleInt( + ~labels=effectName, + ~value=effect.activeCallsCount, + ) + + if hadActiveCalls { + let elapsed = Hrtime.millisBetween(~from=effect.prevCallStartTimerRef, ~to=timerRef) + if elapsed > 0 { + Prometheus.EffectCalls.timeCounter->Prometheus.SafeCounter.incrementMany( + ~labels=effectName, + ~value=Hrtime.millisBetween(~from=effect.prevCallStartTimerRef, ~to=timerRef), + ) + } + } + effect.prevCallStartTimerRef = timerRef + + effect.handler(arg) + ->Promise.thenResolve(output => { + inMemTable.dict->Js.Dict.set(arg.cacheKey, output) + if arg.context.cache { + inMemTable.idsToStore->Array.push(arg.cacheKey)->ignore + } + }) + ->Promise.catchResolve(exn => { + onError(~inputKey=arg.cacheKey, ~exn) + }) + ->Promise.finally(() => { + effect.activeCallsCount = effect.activeCallsCount - 1 + Prometheus.EffectCalls.activeCallsCount->Prometheus.SafeGauge.handleInt( + ~labels=effectName, + ~value=effect.activeCallsCount, + ) + let newTimer = Hrtime.makeTimer() + Prometheus.EffectCalls.timeCounter->Prometheus.SafeCounter.incrementMany( + ~labels=effectName, + ~value=Hrtime.millisBetween(~from=effect.prevCallStartTimerRef, ~to=newTimer), + ) + effect.prevCallStartTimerRef = newTimer + + Prometheus.EffectCalls.totalCallsCount->Prometheus.SafeCounter.increment(~labels=effectName) + Prometheus.EffectCalls.sumTimeCounter->Prometheus.SafeCounter.incrementMany( + ~labels=effectName, + ~value=timerRef->Hrtime.timeSince->Hrtime.toMillis->Hrtime.intFromMillis, + ) + }) +} + +let rec executeWithRateLimit = ( + ~effect: Internal.effect, + ~effectArgs: array, + ~inMemTable, + ~onError, + ~isFromQueue: bool, +) => { + let effectName = effect.name + + let timerRef = Hrtime.makeTimer() + let promises = [] + + switch effect.rateLimit { + | None => + // No rate limiting - execute all immediately + for idx in 0 to effectArgs->Array.length - 1 { + promises + ->Array.push( + callEffect( + ~effect, + ~arg=effectArgs->Array.getUnsafe(idx), + ~inMemTable, + ~timerRef, + ~onError, + )->Promise.ignoreValue, + ) + ->ignore + } + + | Some(state) => + let now = Js.Date.now() + + // Check if we need to reset the window + if now >= state.windowStartTime +. state.durationMs->Int.toFloat { + state.availableCalls = state.callsPerDuration + state.windowStartTime = now + state.nextWindowPromise = None + } + + // Split into immediate and queued + let immediateCount = Js.Math.min_int(state.availableCalls, effectArgs->Array.length) + let immediateArgs = effectArgs->Array.slice(~offset=0, ~len=immediateCount) + let queuedArgs = effectArgs->Array.sliceToEnd(immediateCount) + + // Update available calls + state.availableCalls = state.availableCalls - immediateCount + + // Call immediate effects + for idx in 0 to immediateArgs->Array.length - 1 { + promises + ->Array.push( + callEffect( + ~effect, + ~arg=immediateArgs->Array.getUnsafe(idx), + ~inMemTable, + ~timerRef, + ~onError, + )->Promise.ignoreValue, + ) + ->ignore + } + + if immediateCount > 0 && isFromQueue { + // Update queue count metric + state.queueCount = state.queueCount - immediateCount + Prometheus.EffectQueueCount.set(~count=state.queueCount, ~effectName) + } + + // Handle queued items + if queuedArgs->Utils.Array.notEmpty { + if !isFromQueue { + // Update queue count metric + state.queueCount = state.queueCount + queuedArgs->Array.length + Prometheus.EffectQueueCount.set(~count=state.queueCount, ~effectName) + } + + let millisUntilReset = ref(0) + let nextWindowPromise = switch state.nextWindowPromise { + | Some(p) => p + | None => + millisUntilReset := + (state.windowStartTime +. state.durationMs->Int.toFloat -. now)->Float.toInt + let p = Utils.delay(millisUntilReset.contents) + state.nextWindowPromise = Some(p) + p + } + + // Wait for next window and recursively process queue + promises + ->Array.push( + nextWindowPromise + ->Promise.then(() => { + if millisUntilReset.contents > 0 { + Prometheus.EffectQueueCount.timeCounter->Prometheus.SafeCounter.incrementMany( + ~labels=effectName, + ~value=millisUntilReset.contents, + ) + } + executeWithRateLimit( + ~effect, + ~effectArgs=queuedArgs, + ~inMemTable, + ~onError, + ~isFromQueue=true, + ) + }) + ->Promise.ignoreValue, + ) + ->ignore + } + } + + // Wait for all to complete + promises->Promise.all +} + +let loadEffect = ( + ~loadManager, + ~persistence: Persistence.t, + ~effect: Internal.effect, + ~effectArgs, + ~inMemoryStore, + ~shouldGroup, + ~item, +) => { + let effectName = effect.name + let key = `${effectName}.effect` + let inMemTable = inMemoryStore->InMemoryStore.getEffectInMemTable(~effect) + + let load = async (args, ~onError) => { + let idsToLoad = args->Js.Array2.map((arg: Internal.effectArgs) => arg.cacheKey) + let idsFromCache = Utils.Set.make() + + if ( + switch persistence.storageStatus { + | Ready({cache}) => cache->Utils.Dict.has(effectName) + | _ => false + } + ) { + let timerRef = Prometheus.StorageLoad.startOperation(~operation=key) + let {table, outputSchema} = effect.storageMeta + + let dbEntities = try { + await (persistence->Persistence.getInitializedStorageOrThrow).loadByIdsOrThrow( + ~table, + ~rowsSchema=Internal.effectCacheItemRowsSchema, + ~ids=idsToLoad, + ) + } catch { + | exn => + item + ->Logging.getItemLogger + ->Logging.childWarn({ + "msg": `Failed to load cache effect cache. The indexer will continue working, but the effect will not be able to use the cache.`, + "err": exn->Utils.prettifyExn, + "effect": effectName, + }) + [] + } + + dbEntities->Js.Array2.forEach(dbEntity => { + try { + let output = dbEntity.output->S.parseOrThrow(outputSchema) + idsFromCache->Utils.Set.add(dbEntity.id)->ignore + inMemTable.dict->Js.Dict.set(dbEntity.id, output) + } catch { + | S.Raised(error) => + inMemTable.invalidationsCount = inMemTable.invalidationsCount + 1 + Prometheus.EffectCacheInvalidationsCount.increment(~effectName) + item + ->Logging.getItemLogger + ->Logging.childTrace({ + "msg": "Invalidated effect cache", + "input": dbEntity.id, + "effect": effectName, + "err": error->S.Error.message, + }) + } + }) + + timerRef->Prometheus.StorageLoad.endOperation( + ~operation=key, + ~whereSize=idsToLoad->Array.length, + ~size=dbEntities->Array.length, + ) + } + + let remainingCallsCount = idsToLoad->Array.length - idsFromCache->Utils.Set.size + if remainingCallsCount > 0 { + let argsToCall = [] + for idx in 0 to args->Array.length - 1 { + let arg = args->Array.getUnsafe(idx) + if !(idsFromCache->Utils.Set.has(arg.cacheKey)) { + argsToCall->Array.push(arg)->ignore + } + } + + if argsToCall->Utils.Array.notEmpty { + await executeWithRateLimit( + ~effect, + ~effectArgs=argsToCall, + ~inMemTable, + ~onError, + ~isFromQueue=false, + )->Promise.ignoreValue + } + } + } + + loadManager->LoadManager.call( + ~key, + ~load, + ~shouldGroup, + ~hasher=args => args.cacheKey, + ~getUnsafeInMemory=hash => inMemTable.dict->Js.Dict.unsafeGet(hash), + ~hasInMemory=hash => inMemTable.dict->Utils.Dict.has(hash), + ~input=effectArgs, + ) +} + +let loadByField = ( + ~loadManager, + ~persistence: Persistence.t, + ~operator: TableIndices.Operator.t, + ~entityConfig: Internal.entityConfig, + ~inMemoryStore, + ~fieldName, + ~fieldValueSchema, + ~shouldGroup, + ~item, + ~fieldValue, +) => { + let operatorCallName = switch operator { + | Eq => "eq" + | Gt => "gt" + | Lt => "lt" + } + let key = `${entityConfig.name}.getWhere.${fieldName}.${operatorCallName}` + let inMemTable = inMemoryStore->InMemoryStore.getInMemTable(~entityConfig) + + let load = async (fieldValues: array<'fieldValue>, ~onError as _) => { + let timerRef = Prometheus.StorageLoad.startOperation(~operation=key) + + let size = ref(0) + + let indiciesToLoad = fieldValues->Js.Array2.map((fieldValue): TableIndices.Index.t => { + Single({ + fieldName, + fieldValue: TableIndices.FieldValue.castFrom(fieldValue), + operator, + }) + }) + + let _ = + await indiciesToLoad + ->Js.Array2.map(async index => { + inMemTable->InMemoryTable.Entity.addEmptyIndex(~index) + try { + let entities = await ( + persistence->Persistence.getInitializedStorageOrThrow + ).loadByFieldOrThrow( + ~operator=switch index { + | Single({operator: Gt}) => #">" + | Single({operator: Eq}) => #"=" + | Single({operator: Lt}) => #"<" + }, + ~table=entityConfig.table, + ~rowsSchema=entityConfig.rowsSchema, + ~fieldName=index->TableIndices.Index.getFieldName, + ~fieldValue=switch index { + | Single({fieldValue}) => fieldValue + }, + ~fieldSchema=fieldValueSchema->( + Utils.magic: S.t<'fieldValue> => S.t + ), + ) + + entities->Array.forEach(entity => { + //Set the entity in the in memory store + inMemTable->InMemoryTable.Entity.initValue( + ~allowOverWriteEntity=false, + ~key=Entities.getEntityId(entity), + ~entity=Some(entity), + ) + }) + + size := size.contents + entities->Array.length + } catch { + | Persistence.StorageError({message, reason}) => + reason->ErrorHandling.mkLogAndRaise( + ~logger=Logging.createChildFrom( + ~logger=item->Logging.getItemLogger, + ~params={ + "operator": operatorCallName, + "tableName": entityConfig.table.tableName, + "fieldName": fieldName, + "fieldValue": fieldValue, + }, + ), + ~msg=message, + ) + } + }) + ->Promise.all + + timerRef->Prometheus.StorageLoad.endOperation( + ~operation=key, + ~whereSize=fieldValues->Array.length, + ~size=size.contents, + ) + } + + loadManager->LoadManager.call( + ~key, + ~load, + ~input=fieldValue, + ~shouldGroup, + ~hasher=fieldValue => + fieldValue->TableIndices.FieldValue.castFrom->TableIndices.FieldValue.toString, + ~getUnsafeInMemory=inMemTable->InMemoryTable.Entity.getUnsafeOnIndex(~fieldName, ~operator), + ~hasInMemory=inMemTable->InMemoryTable.Entity.hasIndex(~fieldName, ~operator), + ) +} diff --git a/packages/indexer/generated/src/LoadLayer.resi b/packages/indexer/generated/src/LoadLayer.resi new file mode 100644 index 0000000..b63c531 --- /dev/null +++ b/packages/indexer/generated/src/LoadLayer.resi @@ -0,0 +1,32 @@ +let loadById: ( + ~loadManager: LoadManager.t, + ~persistence: Persistence.t, + ~entityConfig: Internal.entityConfig, + ~inMemoryStore: InMemoryStore.t, + ~shouldGroup: bool, + ~item: Internal.item, + ~entityId: string, +) => promise> + +let loadByField: ( + ~loadManager: LoadManager.t, + ~persistence: Persistence.t, + ~operator: TableIndices.Operator.t, + ~entityConfig: Internal.entityConfig, + ~inMemoryStore: InMemoryStore.t, + ~fieldName: string, + ~fieldValueSchema: RescriptSchema.S.t<'fieldValue>, + ~shouldGroup: bool, + ~item: Internal.item, + ~fieldValue: 'fieldValue, +) => promise> + +let loadEffect: ( + ~loadManager: LoadManager.t, + ~persistence: Persistence.t, + ~effect: Internal.effect, + ~effectArgs: Internal.effectArgs, + ~inMemoryStore: InMemoryStore.t, + ~shouldGroup: bool, + ~item: Internal.item, +) => promise diff --git a/packages/indexer/generated/src/Path.res b/packages/indexer/generated/src/Path.res new file mode 100644 index 0000000..6f6efb5 --- /dev/null +++ b/packages/indexer/generated/src/Path.res @@ -0,0 +1 @@ +let relativePathToRootFromGenerated = "../." diff --git a/packages/indexer/generated/src/PersistedState.res b/packages/indexer/generated/src/PersistedState.res new file mode 100644 index 0000000..72673a5 --- /dev/null +++ b/packages/indexer/generated/src/PersistedState.res @@ -0,0 +1,25 @@ +type t = { + @as("envio_version") envioVersion: string, + @as("config_hash") configHash: string, + @as("schema_hash") schemaHash: string, + @as("handler_files_hash") handlerFilesHash: string, + @as("abi_files_hash") abiFilesHash: string, +} + +let schema = S.schema(s => { + envioVersion: s.matches(S.string), + configHash: s.matches(S.string), + schemaHash: s.matches(S.string), + handlerFilesHash: s.matches(S.string), + abiFilesHash: s.matches(S.string), +}) + +external requireJson: string => Js.Json.t = "require" +let getPersistedState = () => + try { + let json = requireJson("../persisted_state.envio.json") + let parsed = json->S.parseJsonOrThrow(schema) + Ok(parsed) + } catch { + | exn => Error(exn) + } diff --git a/packages/indexer/generated/src/TestHelpers.gen.ts b/packages/indexer/generated/src/TestHelpers.gen.ts new file mode 100644 index 0000000..f557ed8 --- /dev/null +++ b/packages/indexer/generated/src/TestHelpers.gen.ts @@ -0,0 +1,80 @@ +/* TypeScript file generated from TestHelpers.res by genType. */ + +/* eslint-disable */ +/* tslint:disable */ + +const TestHelpersJS = require('./TestHelpers.res.js'); + +import type {Monad2048_NewGame_event as Types_Monad2048_NewGame_event} from './Types.gen'; + +import type {Monad2048_NewMove_event as Types_Monad2048_NewMove_event} from './Types.gen'; + +import type {t as Address_t} from 'envio/src/Address.gen'; + +import type {t as TestHelpers_MockDb_t} from './TestHelpers_MockDb.gen'; + +/** The arguements that get passed to a "processEvent" helper function */ +export type EventFunctions_eventProcessorArgs = { + readonly event: event; + readonly mockDb: TestHelpers_MockDb_t; + readonly chainId?: number +}; + +export type EventFunctions_eventProcessor = (_1:EventFunctions_eventProcessorArgs) => Promise; + +export type EventFunctions_MockBlock_t = { + readonly hash?: string; + readonly number?: number; + readonly timestamp?: number +}; + +export type EventFunctions_MockTransaction_t = { + readonly effectiveGasPrice?: bigint; + readonly from?: (undefined | Address_t); + readonly gasPrice?: (undefined | bigint); + readonly gasUsed?: bigint; + readonly hash?: string +}; + +export type EventFunctions_mockEventData = { + readonly chainId?: number; + readonly srcAddress?: Address_t; + readonly logIndex?: number; + readonly block?: EventFunctions_MockBlock_t; + readonly transaction?: EventFunctions_MockTransaction_t +}; + +export type Monad2048_NewGame_createMockArgs = { + readonly player?: Address_t; + readonly id?: string; + readonly board?: bigint; + readonly mockEventData?: EventFunctions_mockEventData +}; + +export type Monad2048_NewMove_createMockArgs = { + readonly player?: Address_t; + readonly id?: string; + readonly move?: bigint; + readonly result?: bigint; + readonly mockEventData?: EventFunctions_mockEventData +}; + +export const MockDb_createMockDb: () => TestHelpers_MockDb_t = TestHelpersJS.MockDb.createMockDb as any; + +export const Addresses_mockAddresses: Address_t[] = TestHelpersJS.Addresses.mockAddresses as any; + +export const Addresses_defaultAddress: Address_t = TestHelpersJS.Addresses.defaultAddress as any; + +export const Monad2048_NewGame_processEvent: EventFunctions_eventProcessor = TestHelpersJS.Monad2048.NewGame.processEvent as any; + +export const Monad2048_NewGame_createMockEvent: (args:Monad2048_NewGame_createMockArgs) => Types_Monad2048_NewGame_event = TestHelpersJS.Monad2048.NewGame.createMockEvent as any; + +export const Monad2048_NewMove_processEvent: EventFunctions_eventProcessor = TestHelpersJS.Monad2048.NewMove.processEvent as any; + +export const Monad2048_NewMove_createMockEvent: (args:Monad2048_NewMove_createMockArgs) => Types_Monad2048_NewMove_event = TestHelpersJS.Monad2048.NewMove.createMockEvent as any; + +export const Addresses: { mockAddresses: Address_t[]; defaultAddress: Address_t } = TestHelpersJS.Addresses as any; + +export const Monad2048: { NewGame: { processEvent: EventFunctions_eventProcessor; createMockEvent: (args:Monad2048_NewGame_createMockArgs) => Types_Monad2048_NewGame_event }; NewMove: { processEvent: EventFunctions_eventProcessor; createMockEvent: (args:Monad2048_NewMove_createMockArgs) => Types_Monad2048_NewMove_event } } = TestHelpersJS.Monad2048 as any; + +export const MockDb: { createMockDb: () => TestHelpers_MockDb_t } = TestHelpersJS.MockDb as any; diff --git a/packages/indexer/generated/src/TestHelpers.res b/packages/indexer/generated/src/TestHelpers.res new file mode 100644 index 0000000..d728600 --- /dev/null +++ b/packages/indexer/generated/src/TestHelpers.res @@ -0,0 +1,244 @@ +/***** TAKE NOTE ****** +This is a hack to get genType to work! + +In order for genType to produce recursive types, it needs to be at the +root module of a file. If it's defined in a nested module it does not +work. So all the MockDb types and internal functions are defined in TestHelpers_MockDb +and only public functions are recreated and exported from this module. + +the following module: +```rescript +module MyModule = { + @genType + type rec a = {fieldB: b} + @genType and b = {fieldA: a} +} +``` + +produces the following in ts: +```ts +// tslint:disable-next-line:interface-over-type-literal +export type MyModule_a = { readonly fieldB: b }; + +// tslint:disable-next-line:interface-over-type-literal +export type MyModule_b = { readonly fieldA: MyModule_a }; +``` + +fieldB references type b which doesn't exist because it's defined +as MyModule_b +*/ + +module MockDb = { + @genType + let createMockDb = TestHelpers_MockDb.createMockDb +} + +@genType +module Addresses = { + include TestHelpers_MockAddresses +} + +module EventFunctions = { + //Note these are made into a record to make operate in the same way + //for Res, JS and TS. + + /** + The arguements that get passed to a "processEvent" helper function + */ + @genType + type eventProcessorArgs<'event> = { + event: 'event, + mockDb: TestHelpers_MockDb.t, + @deprecated("Set the chainId for the event instead") + chainId?: int, + } + + @genType + type eventProcessor<'event> = eventProcessorArgs<'event> => promise + + /** + A function composer to help create individual processEvent functions + */ + let makeEventProcessor = (~register) => args => { + let {event, mockDb, ?chainId} = + args->(Utils.magic: eventProcessorArgs<'event> => eventProcessorArgs) + + // Have the line here, just in case the function is called with + // a manually created event. We don't want to break the existing tests here. + let _ = + TestHelpers_MockDb.mockEventRegisters->Utils.WeakMap.set(event, register) + TestHelpers_MockDb.makeProcessEvents(mockDb, ~chainId=?chainId)([event->(Utils.magic: Internal.event => Types.eventLog)]) + } + + module MockBlock = { + @genType + type t = { + hash?: string, + number?: int, + timestamp?: int, + } + + let toBlock = (_mock: t) => { + hash: _mock.hash->Belt.Option.getWithDefault("foo"), + number: _mock.number->Belt.Option.getWithDefault(0), + timestamp: _mock.timestamp->Belt.Option.getWithDefault(0), + }->(Utils.magic: Types.AggregatedBlock.t => Internal.eventBlock) + } + + module MockTransaction = { + @genType + type t = { + effectiveGasPrice?: bigint, + from?: option, + gasPrice?: option, + gasUsed?: bigint, + hash?: string, + } + + let toTransaction = (_mock: t) => { + effectiveGasPrice: _mock.effectiveGasPrice->Belt.Option.getWithDefault(0n), + from: _mock.from->Belt.Option.getWithDefault(None), + gasPrice: _mock.gasPrice->Belt.Option.getWithDefault(None), + gasUsed: _mock.gasUsed->Belt.Option.getWithDefault(0n), + hash: _mock.hash->Belt.Option.getWithDefault("foo"), + }->(Utils.magic: Types.AggregatedTransaction.t => Internal.eventTransaction) + } + + @genType + type mockEventData = { + chainId?: int, + srcAddress?: Address.t, + logIndex?: int, + block?: MockBlock.t, + transaction?: MockTransaction.t, + } + + /** + Applies optional paramters with defaults for all common eventLog field + */ + let makeEventMocker = ( + ~params: Internal.eventParams, + ~mockEventData: option, + ~register: unit => Internal.eventConfig, + ): Internal.event => { + let {?block, ?transaction, ?srcAddress, ?chainId, ?logIndex} = + mockEventData->Belt.Option.getWithDefault({}) + let block = block->Belt.Option.getWithDefault({})->MockBlock.toBlock + let transaction = transaction->Belt.Option.getWithDefault({})->MockTransaction.toTransaction + let event: Internal.event = { + params, + transaction, + chainId: switch chainId { + | Some(chainId) => chainId + | None => + switch Generated.configWithoutRegistrations.defaultChain { + | Some(chainConfig) => chainConfig.id + | None => + Js.Exn.raiseError( + "No default chain Id found, please add at least 1 chain to your config.yaml", + ) + } + }, + block, + srcAddress: srcAddress->Belt.Option.getWithDefault(Addresses.defaultAddress), + logIndex: logIndex->Belt.Option.getWithDefault(0), + } + // Since currently it's not possible to figure out the event config from the event + // we store a reference to the register function by event in a weak map + let _ = TestHelpers_MockDb.mockEventRegisters->Utils.WeakMap.set(event, register) + event + } +} + + +module Monad2048 = { + module NewGame = { + @genType + let processEvent: EventFunctions.eventProcessor = EventFunctions.makeEventProcessor( + ~register=(Types.Monad2048.NewGame.register :> unit => Internal.eventConfig), + ) + + @genType + type createMockArgs = { + @as("player") + player?: Address.t, + @as("id") + id?: string, + @as("board") + board?: bigint, + mockEventData?: EventFunctions.mockEventData, + } + + @genType + let createMockEvent = args => { + let { + ?player, + ?id, + ?board, + ?mockEventData, + } = args + + let params = + { + player: player->Belt.Option.getWithDefault(TestHelpers_MockAddresses.defaultAddress), + id: id->Belt.Option.getWithDefault("foo"), + board: board->Belt.Option.getWithDefault(0n), + } +->(Utils.magic: Types.Monad2048.NewGame.eventArgs => Internal.eventParams) + + EventFunctions.makeEventMocker( + ~params, + ~mockEventData, + ~register=(Types.Monad2048.NewGame.register :> unit => Internal.eventConfig), + )->(Utils.magic: Internal.event => Types.Monad2048.NewGame.event) + } + } + + module NewMove = { + @genType + let processEvent: EventFunctions.eventProcessor = EventFunctions.makeEventProcessor( + ~register=(Types.Monad2048.NewMove.register :> unit => Internal.eventConfig), + ) + + @genType + type createMockArgs = { + @as("player") + player?: Address.t, + @as("id") + id?: string, + @as("move") + move?: bigint, + @as("result") + result?: bigint, + mockEventData?: EventFunctions.mockEventData, + } + + @genType + let createMockEvent = args => { + let { + ?player, + ?id, + ?move, + ?result, + ?mockEventData, + } = args + + let params = + { + player: player->Belt.Option.getWithDefault(TestHelpers_MockAddresses.defaultAddress), + id: id->Belt.Option.getWithDefault("foo"), + move: move->Belt.Option.getWithDefault(0n), + result: result->Belt.Option.getWithDefault(0n), + } +->(Utils.magic: Types.Monad2048.NewMove.eventArgs => Internal.eventParams) + + EventFunctions.makeEventMocker( + ~params, + ~mockEventData, + ~register=(Types.Monad2048.NewMove.register :> unit => Internal.eventConfig), + )->(Utils.magic: Internal.event => Types.Monad2048.NewMove.event) + } + } + +} + diff --git a/packages/indexer/generated/src/TestHelpers_MockAddresses.gen.ts b/packages/indexer/generated/src/TestHelpers_MockAddresses.gen.ts new file mode 100644 index 0000000..5670668 --- /dev/null +++ b/packages/indexer/generated/src/TestHelpers_MockAddresses.gen.ts @@ -0,0 +1,12 @@ +/* TypeScript file generated from TestHelpers_MockAddresses.res by genType. */ + +/* eslint-disable */ +/* tslint:disable */ + +const TestHelpers_MockAddressesJS = require('./TestHelpers_MockAddresses.res.js'); + +import type {t as Address_t} from 'envio/src/Address.gen'; + +export const mockAddresses: Address_t[] = TestHelpers_MockAddressesJS.mockAddresses as any; + +export const defaultAddress: Address_t = TestHelpers_MockAddressesJS.defaultAddress as any; diff --git a/packages/indexer/generated/src/TestHelpers_MockAddresses.res b/packages/indexer/generated/src/TestHelpers_MockAddresses.res new file mode 100644 index 0000000..81b0413 --- /dev/null +++ b/packages/indexer/generated/src/TestHelpers_MockAddresses.res @@ -0,0 +1,30 @@ +/* +Note this file should remain top level since there are default types +that can point to TestHelpers_MockAddresses.defaultAddress +*/ +@genType +let mockAddresses = [ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", + "0x90F79bf6EB2c4f870365E785982E1f101E93b906", + "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", + "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc", + "0x976EA74026E726554dB657fA54763abd0C3a0aa9", + "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", + "0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f", + "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720", + "0xBcd4042DE499D14e55001CcbB24a551F3b954096", + "0x71bE63f3384f5fb98995898A86B02Fb2426c5788", + "0xFABB0ac9d68B0B445fB7357272Ff202C5651694a", + "0x1CBd3b2770909D4e10f157cABC84C7264073C9Ec", + "0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097", + "0xcd3B766CCDd6AE721141F452C550Ca635964ce71", + "0x2546BcD3c84621e976D8185a91A922aE77ECEc30", + "0xbDA5747bFD65F08deb54cb465eB87D40e51B197E", + "0xdD2FD4581271e230360230F9337D5c0430Bf44C0", + "0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199", +]->Belt.Array.map(Address.Evm.fromStringOrThrow) +@genType +let defaultAddress = + mockAddresses[0] diff --git a/packages/indexer/generated/src/TestHelpers_MockDb.gen.ts b/packages/indexer/generated/src/TestHelpers_MockDb.gen.ts new file mode 100644 index 0000000..5970493 --- /dev/null +++ b/packages/indexer/generated/src/TestHelpers_MockDb.gen.ts @@ -0,0 +1,57 @@ +/* TypeScript file generated from TestHelpers_MockDb.res by genType. */ + +/* eslint-disable */ +/* tslint:disable */ + +const TestHelpers_MockDbJS = require('./TestHelpers_MockDb.res.js'); + +import type {DynamicContractRegistry_t as InternalTable_DynamicContractRegistry_t} from 'envio/src/db/InternalTable.gen'; + +import type {GameMove_t as Entities_GameMove_t} from '../src/db/Entities.gen'; + +import type {Game_t as Entities_Game_t} from '../src/db/Entities.gen'; + +import type {IndexerStatus_t as Entities_IndexerStatus_t} from '../src/db/Entities.gen'; + +import type {Player_t as Entities_Player_t} from '../src/db/Entities.gen'; + +import type {RawEvents_t as InternalTable_RawEvents_t} from 'envio/src/db/InternalTable.gen'; + +import type {eventLog as Types_eventLog} from './Types.gen'; + +import type {rawEventsKey as InMemoryStore_rawEventsKey} from 'envio/src/InMemoryStore.gen'; + +/** The mockDb type is simply an InMemoryStore internally. __dbInternal__ holds a reference +to an inMemoryStore and all the the accessor methods point to the reference of that inMemory +store */ +export abstract class inMemoryStore { protected opaque!: any }; /* simulate opaque types */ + +export type t = { + readonly __dbInternal__: inMemoryStore; + readonly entities: entities; + readonly rawEvents: storeOperations; + readonly dynamicContractRegistry: entityStoreOperations; + readonly processEvents: (_1:Types_eventLog[]) => Promise +}; + +export type entities = { + readonly Game: entityStoreOperations; + readonly GameMove: entityStoreOperations; + readonly IndexerStatus: entityStoreOperations; + readonly Player: entityStoreOperations +}; + +export type entityStoreOperations = storeOperations; + +export type storeOperations = { + readonly getAll: () => entity[]; + readonly get: (_1:entityKey) => (undefined | entity); + readonly set: (_1:entity) => t; + readonly delete: (_1:entityKey) => t +}; + +/** The constructor function for a mockDb. Call it and then set up the inital state by calling +any of the set functions it provides access to. A mockDb will be passed into a processEvent +helper. Note, process event helpers will not mutate the mockDb but return a new mockDb with +new state so you can compare states before and after. */ +export const createMockDb: () => t = TestHelpers_MockDbJS.createMockDb as any; diff --git a/packages/indexer/generated/src/TestHelpers_MockDb.res b/packages/indexer/generated/src/TestHelpers_MockDb.res new file mode 100644 index 0000000..66803f6 --- /dev/null +++ b/packages/indexer/generated/src/TestHelpers_MockDb.res @@ -0,0 +1,670 @@ + +/***** TAKE NOTE ****** +This file module is a hack to get genType to work! + +In order for genType to produce recursive types, it needs to be at the +root module of a file. If it's defined in a nested module it does not +work. So all the MockDb types and internal functions are defined here in TestHelpers_MockDb +and only public functions are recreated and exported from TestHelpers.MockDb module. + +the following module: +```rescript +module MyModule = { + @genType + type rec a = {fieldB: b} + @genType and b = {fieldA: a} +} +``` + +produces the following in ts: +```ts +// tslint:disable-next-line:interface-over-type-literal +export type MyModule_a = { readonly fieldB: b }; + +// tslint:disable-next-line:interface-over-type-literal +export type MyModule_b = { readonly fieldA: MyModule_a }; +``` + +fieldB references type b which doesn't exist because it's defined +as MyModule_b +*/ + +open Belt + +let mockEventRegisters = Utils.WeakMap.make() + +/** +A raw js binding to allow deleting from a dict. Used in store delete operation +*/ +let deleteDictKey: (dict<'a>, string) => unit = %raw(` + function(dict, key) { + delete dict[key] + } + `) + +let config = Generated.configWithoutRegistrations +EventRegister.startRegistration( + ~ecosystem=config.ecosystem, + ~multichain=config.multichain, + ~preloadHandlers=config.preloadHandlers, +) + +/** +The mockDb type is simply an InMemoryStore internally. __dbInternal__ holds a reference +to an inMemoryStore and all the the accessor methods point to the reference of that inMemory +store +*/ +@genType.opaque +type inMemoryStore = InMemoryStore.t + +@genType +type rec t = { + __dbInternal__: inMemoryStore, + entities: entities, + rawEvents: storeOperations, + dynamicContractRegistry: entityStoreOperations, + processEvents: array> => promise, +} + +// Each user defined entity will be in this record with all the store or "mockdb" operators +@genType +and entities = { + @as("Game") game: entityStoreOperations, + @as("GameMove") gameMove: entityStoreOperations, + @as("IndexerStatus") indexerStatus: entityStoreOperations, + @as("Player") player: entityStoreOperations, + } +// User defined entities always have a string for an id which is used as the +// key for entity stores +@genType +and entityStoreOperations<'entity> = storeOperations +// all the operator functions a user can access on an entity in the mock db +// stores refer to the the module that MakeStore functor outputs in IO.res +@genType +and storeOperations<'entityKey, 'entity> = { + getAll: unit => array<'entity>, + get: 'entityKey => option<'entity>, + set: 'entity => t, + delete: 'entityKey => t, +} + +/** +a composable function to make the "storeOperations" record to represent all the mock +db operations for each entity. +*/ +let makeStoreOperatorEntity = ( + ~inMemoryStore: InMemoryStore.t, + ~makeMockDb, + ~getStore: InMemoryStore.t => InMemoryTable.Entity.t<'entity>, + ~getKey: 'entity => Types.id, +): storeOperations => { + let {getUnsafe, values, set} = module(InMemoryTable.Entity) + + let get = id => { + let store = inMemoryStore->getStore + if store.table->InMemoryTable.hasByHash(id) { + getUnsafe(store)(id) + } else { + None + } + } + + let getAll = () => + inMemoryStore + ->getStore + ->values + + let delete = entityId => { + let cloned = inMemoryStore->InMemoryStore.clone + let table = cloned->getStore + + table->set( + { + entityId, + entityUpdateAction: Delete, + checkpointId: 0, + }, + ~shouldSaveHistory=false, + ) + + cloned->makeMockDb + } + + let set = entity => { + let cloned = inMemoryStore->InMemoryStore.clone + let table = cloned->getStore + let entityId = entity->getKey + + table->set( + { + entityId, + entityUpdateAction: Set(entity), + checkpointId: 0, + }, + ~shouldSaveHistory=false, + ) + + cloned->makeMockDb + } + + { + getAll, + get, + set, + delete, + } +} + +let makeStoreOperatorMeta = ( + ~inMemoryStore: InMemoryStore.t, + ~makeMockDb, + ~getStore: InMemoryStore.t => InMemoryTable.t<'key, 'value>, + ~getKey: 'value => 'key, +): storeOperations<'key, 'value> => { + let {get, values, set} = module(InMemoryTable) + + let get = id => get(inMemoryStore->getStore, id) + + let getAll = () => inMemoryStore->getStore->values->Array.map(row => row) + + let set = metaData => { + let cloned = inMemoryStore->InMemoryStore.clone + cloned->getStore->set(metaData->getKey, metaData) + cloned->makeMockDb + } + + // TODO: Remove. Is delete needed for meta data? + let delete = key => { + let cloned = inMemoryStore->InMemoryStore.clone + let store = cloned->getStore + store.dict->deleteDictKey(key->store.hash) + cloned->makeMockDb + } + + { + getAll, + get, + set, + delete, + } +} + +/** +Accessor function for getting the internal inMemoryStore in the mockDb +*/ +let getInternalDb = (self: t) => self.__dbInternal__ + +let getEntityOperations = (mockDb: t, ~entityName: string): entityStoreOperations< + Internal.entity, +> => { + mockDb.entities + ->Utils.magic + ->Utils.Dict.dangerouslyGetNonOption(entityName) + ->Utils.Option.getExn("Mocked operations for entity " ++ entityName ++ " not found") +} + +/** +A function composer for simulating the writing of an inMemoryStore to the external db with a mockDb. +Runs all set and delete operations currently cached in an inMemory store against the mockDb +*/ +let executeRowsEntity = ( + mockDb: t, + ~inMemoryStore: InMemoryStore.t, + ~entityConfig: Internal.entityConfig, +) => { + let getInMemTable = (inMemoryStore: InMemoryStore.t) => + inMemoryStore->InMemoryStore.getInMemTable(~entityConfig) + + let inMemTable = getInMemTable(inMemoryStore) + + inMemTable.table + ->InMemoryTable.values + ->Array.forEach(row => { + let mockDbTable = mockDb->getInternalDb->getInMemTable + switch row.entityRow { + | Updated({latest: {entityUpdateAction: Set(entity)}}) + | InitialReadFromDb(AlreadySet(entity)) => + let key = (entity: Internal.entity).id + mockDbTable->InMemoryTable.Entity.initValue( + ~allowOverWriteEntity=true, + ~key, + ~entity=Some(entity), + ) + | Updated({latest: {entityUpdateAction: Delete, entityId}}) => + mockDbTable.table.dict->deleteDictKey(entityId) + | InitialReadFromDb(NotSet) => () + } + }) +} + +let executeRowsMeta = ( + mockDb: t, + ~inMemoryStore: InMemoryStore.t, + ~getInMemTable: InMemoryStore.t => InMemoryTable.t<'key, 'entity>, + ~getKey: 'entity => 'key, +) => { + let mockDbTable = mockDb->getInternalDb->getInMemTable + inMemoryStore + ->getInMemTable + ->InMemoryTable.values + ->Array.forEach(row => { + mockDbTable->InMemoryTable.set(getKey(row), row) + }) +} + +/** +The internal make function which can be passed an in memory store and +instantiate a "MockDb". This is useful for cloning or making a MockDb +out of an existing inMemoryStore +*/ +let rec makeWithInMemoryStore: InMemoryStore.t => t = (inMemoryStore: InMemoryStore.t) => { + let rawEvents = makeStoreOperatorMeta( + ~inMemoryStore, + ~makeMockDb=makeWithInMemoryStore, + ~getStore=db => db.rawEvents, + ~getKey=({chainId, eventId}) => { + chainId, + eventId: eventId->BigInt.toString, + }, + ) + + let dynamicContractRegistry = makeStoreOperatorEntity( + ~inMemoryStore, + ~getStore=db => + db + ->InMemoryStore.getInMemTable( + ~entityConfig=InternalTable.DynamicContractRegistry.config, + ) + ->( + Utils.magic: InMemoryTable.Entity.t => InMemoryTable.Entity.t< + InternalTable.DynamicContractRegistry.t, + > + ), + ~makeMockDb=makeWithInMemoryStore, + ~getKey=({chainId, contractAddress}) => { + InternalTable.DynamicContractRegistry.makeId(~chainId, ~contractAddress) + }, + ) + + let entities = { + game: { + makeStoreOperatorEntity( + ~inMemoryStore, + ~makeMockDb=makeWithInMemoryStore, + ~getStore=db => db->InMemoryStore.getInMemTable( + ~entityConfig=module(Entities.Game)->Entities.entityModToInternal, + )->( + Utils.magic: InMemoryTable.Entity.t => InMemoryTable.Entity.t< + Entities.Game.t, + > + ), + ~getKey=({id}) => id, + ) + }, + gameMove: { + makeStoreOperatorEntity( + ~inMemoryStore, + ~makeMockDb=makeWithInMemoryStore, + ~getStore=db => db->InMemoryStore.getInMemTable( + ~entityConfig=module(Entities.GameMove)->Entities.entityModToInternal, + )->( + Utils.magic: InMemoryTable.Entity.t => InMemoryTable.Entity.t< + Entities.GameMove.t, + > + ), + ~getKey=({id}) => id, + ) + }, + indexerStatus: { + makeStoreOperatorEntity( + ~inMemoryStore, + ~makeMockDb=makeWithInMemoryStore, + ~getStore=db => db->InMemoryStore.getInMemTable( + ~entityConfig=module(Entities.IndexerStatus)->Entities.entityModToInternal, + )->( + Utils.magic: InMemoryTable.Entity.t => InMemoryTable.Entity.t< + Entities.IndexerStatus.t, + > + ), + ~getKey=({id}) => id, + ) + }, + player: { + makeStoreOperatorEntity( + ~inMemoryStore, + ~makeMockDb=makeWithInMemoryStore, + ~getStore=db => db->InMemoryStore.getInMemTable( + ~entityConfig=module(Entities.Player)->Entities.entityModToInternal, + )->( + Utils.magic: InMemoryTable.Entity.t => InMemoryTable.Entity.t< + Entities.Player.t, + > + ), + ~getKey=({id}) => id, + ) + }, + } + + let mockDb = { + __dbInternal__: inMemoryStore, + entities, + rawEvents, + dynamicContractRegistry, + processEvents: %raw(`null`), + } + (mockDb->Utils.magic)["processEvents"] = makeProcessEvents(mockDb, ~chainId=?None) + mockDb +} +and makeProcessEvents = (mockDb: t, ~chainId=?) => async ( + events: array>, +) => { + if events->Utils.Array.isEmpty { + mockDb + } else { + let itemsWithContractRegister = [] + + let registrations = EventRegister.finishRegistration() + let registrations = if ( + registrations.hasEvents || !(registrations.onBlockByChainId->Utils.Dict.isEmpty) + ) { + registrations + } else { + Generated.registerAllHandlers() + } + + let config = Generated.makeGeneratedConfig() + let indexer: Indexer.t = { + registrations, + config, + persistence: Generated.codegenPersistence, + } + + let processingChainId = ref(chainId) + let latestFetchedBlockNumber = ref(0) + let newItems = events->Array.map(event => { + let event = event->Internal.fromGenericEvent + let eventConfig = switch mockEventRegisters->Utils.WeakMap.get(event) { + | Some(register) => register() + | None => + Js.Exn.raiseError( + "Events must be created using the mock API (e.g. createMockEvent) to be processed by mockDb.processEvents", + ) + } + let chainId = switch chainId { + | Some(chainId) => chainId + | None => event.chainId + } + + switch processingChainId.contents { + | Some(prevItemChainId) => + if prevItemChainId !== chainId { + Js.Exn.raiseError( + `Processing events on multiple chains is not supported yet. Got chainId ${chainId->Belt.Int.toString} but expected ${prevItemChainId->Belt.Int.toString}`, + ) + } + | None => processingChainId.contents = Some(chainId) + } + + let chain = config->Config.getChain(~chainId) + let item = Internal.Event({ + eventConfig, + event, + chain, + logIndex: event.logIndex, + timestamp: event.block->Types.Block.getTimestamp, + blockNumber: event.block->Types.Block.getNumber, + }) + latestFetchedBlockNumber.contents = Pervasives.max( + latestFetchedBlockNumber.contents, + event.block->Types.Block.getNumber, + ) + if eventConfig.contractRegister->Option.isSome { + itemsWithContractRegister->Js.Array2.push(item)->ignore + } + item + }) + + let processingChainId = switch processingChainId.contents { + | Some(chainId) => chainId + | None => + Js.Exn.raiseError("No events provided to processEvents. Please provide at least one event.") + } + let processingChain = config->Config.getChain(~chainId=processingChainId) + + let chainFetcher = ChainFetcher.makeFromConfig( + config.chainMap->ChainMap.get(processingChain), + ~config, + ~registrations=indexer.registrations, + ~targetBufferSize=5000, + ) + + //Deep copy the data in mockDb, mutate the clone and return the clone + //So no side effects occur here and state can be compared between process + //steps + let mockDbClone = mockDb->cloneMockDb + + //Construct a new instance of an in memory store to run for the given event + let inMemoryStore = InMemoryStore.make(~entities=Entities.allEntities) + let loadManager = LoadManager.make() + let persistence = { + ...indexer.persistence, + storage: makeMockStorage(mockDb), + storageStatus: Ready({ + cleanRun: false, + cache: Js.Dict.empty(), + chains: [], + reorgCheckpoints: [], + checkpointId: 0, + }), + } + let indexer = { + ...indexer, + persistence, + } + + let newItemsWithDcs = if itemsWithContractRegister->Utils.Array.notEmpty { + await ChainFetcher.runContractRegistersOrThrow( + ~itemsWithContractRegister, + ~chain=processingChain, + ~config, + ) + } else { + itemsWithContractRegister + } + + let updatedFetchState = ref(chainFetcher.fetchState) + + switch newItemsWithDcs { + | [] => () + | _ => + updatedFetchState := + updatedFetchState.contents->FetchState.registerDynamicContracts(newItemsWithDcs) + } + + updatedFetchState := + updatedFetchState.contents + ->FetchState.handleQueryResult( + ~latestFetchedBlock={ + blockNumber: latestFetchedBlockNumber.contents, + blockTimestamp: 0, + }, + ~query={ + partitionId: (updatedFetchState.contents.partitions->Array.getUnsafe(0)).id, + fromBlock: 0, + selection: {eventConfigs: [], dependsOnAddresses: false}, + addressesByContractName: Js.Dict.empty(), + target: FetchState.Head, + indexingContracts: Js.Dict.empty(), + }, + ~newItems, + ) + ->Result.getExn + + // Handle query for the rest partitions without items + // to catch up the latest fully fetched block + for idx in 1 to updatedFetchState.contents.partitions->Array.length - 1 { + let partition = updatedFetchState.contents.partitions->Array.getUnsafe(idx) + updatedFetchState := + updatedFetchState.contents + ->FetchState.handleQueryResult( + ~latestFetchedBlock={ + blockNumber: latestFetchedBlockNumber.contents, + blockTimestamp: 0, + }, + ~query={ + partitionId: partition.id, + fromBlock: 0, + selection: {eventConfigs: [], dependsOnAddresses: false}, + addressesByContractName: Js.Dict.empty(), + target: FetchState.Head, + indexingContracts: Js.Dict.empty(), + }, + ~newItems=[], + ) + ->Result.getExn + } + + let batch = Batch.prepareUnorderedBatch( + ~checkpointIdBeforeBatch=0, + ~chainsBeforeBatch=ChainMap.fromArrayUnsafe([ + ( + processingChain, + ( + { + fetchState: updatedFetchState.contents, + reorgDetection: chainFetcher.reorgDetection, + progressBlockNumber: chainFetcher.committedProgressBlockNumber, + sourceBlockNumber: chainFetcher.currentBlockHeight, + totalEventsProcessed: chainFetcher.numEventsProcessed, + }: Batch.chainBeforeBatch + ), + ), + ]), + ~batchSizeTarget=newItems->Array.length, + ) + + inMemoryStore->InMemoryStore.setBatchDcs(~batch, ~shouldSaveHistory=false) + + // Create a mock chains state where the processing chain is ready (simulating "Live" mode) + let chains = Js.Dict.empty() + chains->Js.Dict.set(processingChainId->Int.toString, {Internal.isReady: true}) + + try { + await batch->EventProcessing.preloadBatchOrThrow( + ~loadManager, + ~persistence, + ~inMemoryStore, + ~chains, + ) + await batch->EventProcessing.runBatchHandlersOrThrow( + ~inMemoryStore, + ~loadManager, + ~indexer, + ~shouldSaveHistory=false, + ~shouldBenchmark=false, + ~chains, + ) + } catch { + | EventProcessing.ProcessingError({message, exn, item}) => + exn + ->ErrorHandling.make(~msg=message, ~logger=item->Logging.getItemLogger) + ->ErrorHandling.logAndRaise + } + + //In mem store can still contatin raw events and dynamic contracts for the + //testing framework in cases where either contract register or loaderHandler + //is None + mockDbClone->writeFromMemoryStore(~inMemoryStore) + mockDbClone + } +} +and makeMockStorage = (mockDb: t): Persistence.storage => { + { + isInitialized: () => Js.Exn.raiseError("Not used yet"), + initialize: (~chainConfigs as _=?, ~entities as _=?, ~enums as _=?) => + Js.Exn.raiseError("Not used yet"), + resumeInitialState: () => Js.Exn.raiseError("Not used yet"), + loadByIdsOrThrow: ( + type item, + ~ids, + ~table: Table.table, + ~rowsSchema as _: S.t>, + ) => { + let operations = mockDb->getEntityOperations(~entityName=table.tableName) + ids + ->Array.keepMap(id => operations.get(id)) + ->(Utils.magic: array => array) + ->Promise.resolve + }, + loadByFieldOrThrow: ( + ~fieldName, + ~fieldSchema as _, + ~fieldValue, + ~operator, + ~table, + ~rowsSchema as _, + ) => { + let mockDbTable = + mockDb.__dbInternal__.entities->InMemoryStore.EntityTables.get(~entityName=table.tableName) + let index = TableIndices.Index.makeSingle( + ~fieldName, + ~fieldValue, + ~operator=switch operator { + | #"=" => Eq + | #">" => Gt + | #"<" => Lt + }, + ) + mockDbTable + ->InMemoryTable.Entity.values + ->Array.keep(entity => { + index->TableIndices.Index.evaluate( + ~fieldName, + ~fieldValue=entity->Utils.magic->Js.Dict.unsafeGet(fieldName), + ) + }) + ->Promise.resolve + }, + setOrThrow: (~items as _, ~table as _, ~itemSchema as _) => Js.Exn.raiseError("Not used yet"), + setEffectCacheOrThrow: (~effect as _, ~items as _, ~initialize as _) => Promise.resolve(), + dumpEffectCache: () => Js.Exn.raiseError("Not used yet"), + } +} +and /** +Deep copies the in memory store data and returns a new mockDb with the same +state and no references to data from the passed in mockDb +*/ +cloneMockDb = (self: t) => { + let clonedInternalDb = self->getInternalDb->InMemoryStore.clone + clonedInternalDb->makeWithInMemoryStore +} +and /** +Simulates the writing of processed data in the inMemoryStore to a mockDb. This function +executes all the rows on each "store" (or pg table) in the inMemoryStore +*/ +writeFromMemoryStore = (mockDb: t, ~inMemoryStore: InMemoryStore.t) => { + //INTERNAL STORES/TABLES EXECUTION + mockDb->executeRowsMeta( + ~inMemoryStore, + ~getInMemTable=inMemStore => {inMemStore.rawEvents}, + ~getKey=(entity): InMemoryStore.rawEventsKey => { + chainId: entity.chainId, + eventId: entity.eventId->BigInt.toString, + }, + ) + + Generated.codegenPersistence.allEntities->Array.forEach(entityConfig => { + mockDb->executeRowsEntity(~inMemoryStore, ~entityConfig) + }) +} + +/** +The constructor function for a mockDb. Call it and then set up the inital state by calling +any of the set functions it provides access to. A mockDb will be passed into a processEvent +helper. Note, process event helpers will not mutate the mockDb but return a new mockDb with +new state so you can compare states before and after. +*/ +@genType +let //Note: It's called createMockDb over "make" to make it more intuitive in JS and TS + +createMockDb = () => makeWithInMemoryStore(InMemoryStore.make(~entities=Entities.allEntities)) diff --git a/packages/indexer/generated/src/Types.gen.ts b/packages/indexer/generated/src/Types.gen.ts new file mode 100644 index 0000000..14968d9 --- /dev/null +++ b/packages/indexer/generated/src/Types.gen.ts @@ -0,0 +1,244 @@ +/* TypeScript file generated from Types.res by genType. */ + +/* eslint-disable */ +/* tslint:disable */ + +import type {GameMove_t as Entities_GameMove_t} from '../src/db/Entities.gen'; + +import type {Game_t as Entities_Game_t} from '../src/db/Entities.gen'; + +import type {HandlerContext as $$handlerContext} from './Types.ts'; + +import type {HandlerWithOptions as $$fnWithEventConfig} from './bindings/OpaqueTypes.ts'; + +import type {IndexerStatus_t as Entities_IndexerStatus_t} from '../src/db/Entities.gen'; + +import type {LoaderContext as $$loaderContext} from './Types.ts'; + +import type {Player_t as Entities_Player_t} from '../src/db/Entities.gen'; + +import type {SingleOrMultiple as $$SingleOrMultiple_t} from './bindings/OpaqueTypes'; + +import type {entityHandlerContext as Internal_entityHandlerContext} from 'envio/src/Internal.gen'; + +import type {eventOptions as Internal_eventOptions} from 'envio/src/Internal.gen'; + +import type {genericContractRegisterArgs as Internal_genericContractRegisterArgs} from 'envio/src/Internal.gen'; + +import type {genericContractRegister as Internal_genericContractRegister} from 'envio/src/Internal.gen'; + +import type {genericEvent as Internal_genericEvent} from 'envio/src/Internal.gen'; + +import type {genericHandlerArgs as Internal_genericHandlerArgs} from 'envio/src/Internal.gen'; + +import type {genericHandlerWithLoader as Internal_genericHandlerWithLoader} from 'envio/src/Internal.gen'; + +import type {genericHandler as Internal_genericHandler} from 'envio/src/Internal.gen'; + +import type {genericLoaderArgs as Internal_genericLoaderArgs} from 'envio/src/Internal.gen'; + +import type {genericLoader as Internal_genericLoader} from 'envio/src/Internal.gen'; + +import type {logger as Envio_logger} from 'envio/src/Envio.gen'; + +import type {t as Address_t} from 'envio/src/Address.gen'; + +export type id = string; +export type Id = id; + +export type contractRegistrations = { readonly log: Envio_logger; readonly addMonad2048: (_1:Address_t) => void }; + +export type entityLoaderContext = { + readonly get: (_1:id) => Promise<(undefined | entity)>; + readonly getOrThrow: (_1:id, message:(undefined | string)) => Promise; + readonly getWhere: indexedFieldOperations; + readonly getOrCreate: (_1:entity) => Promise; + readonly set: (_1:entity) => void; + readonly deleteUnsafe: (_1:id) => void +}; + +export type loaderContext = $$loaderContext; + +export type entityHandlerContext = Internal_entityHandlerContext; + +export type handlerContext = $$handlerContext; + +export type game = Entities_Game_t; +export type Game = game; + +export type gameMove = Entities_GameMove_t; +export type GameMove = gameMove; + +export type indexerStatus = Entities_IndexerStatus_t; +export type IndexerStatus = indexerStatus; + +export type player = Entities_Player_t; +export type Player = player; + +export type Transaction_t = { + readonly hash: string; + readonly from: (undefined | Address_t); + readonly gasUsed: bigint; + readonly effectiveGasPrice: bigint; + readonly gasPrice: (undefined | bigint) +}; + +export type Block_t = { + readonly number: number; + readonly timestamp: number; + readonly hash: string +}; + +export type AggregatedBlock_t = { + readonly hash: string; + readonly number: number; + readonly timestamp: number +}; + +export type AggregatedTransaction_t = { + readonly effectiveGasPrice: bigint; + readonly from: (undefined | Address_t); + readonly gasPrice: (undefined | bigint); + readonly gasUsed: bigint; + readonly hash: string +}; + +export type eventLog = Internal_genericEvent; +export type EventLog = eventLog; + +export type SingleOrMultiple_t = $$SingleOrMultiple_t; + +export type HandlerTypes_args = { readonly event: eventLog; readonly context: context }; + +export type HandlerTypes_contractRegisterArgs = Internal_genericContractRegisterArgs,contractRegistrations>; + +export type HandlerTypes_contractRegister = Internal_genericContractRegister>; + +export type HandlerTypes_loaderArgs = Internal_genericLoaderArgs,loaderContext>; + +export type HandlerTypes_loader = Internal_genericLoader,loaderReturn>; + +export type HandlerTypes_handlerArgs = Internal_genericHandlerArgs,handlerContext,loaderReturn>; + +export type HandlerTypes_handler = Internal_genericHandler>; + +export type HandlerTypes_loaderHandler = Internal_genericHandlerWithLoader,HandlerTypes_handler,eventFilters>; + +export type HandlerTypes_eventConfig = Internal_eventOptions; + +export type fnWithEventConfig = $$fnWithEventConfig; + +export type handlerWithOptions = fnWithEventConfig,HandlerTypes_eventConfig>; + +export type contractRegisterWithOptions = fnWithEventConfig,HandlerTypes_eventConfig>; + +export type Monad2048_chainId = 143; + +export type Monad2048_NewGame_eventArgs = { + readonly player: Address_t; + readonly id: string; + readonly board: bigint +}; + +export type Monad2048_NewGame_block = Block_t; + +export type Monad2048_NewGame_transaction = Transaction_t; + +export type Monad2048_NewGame_event = { + /** The parameters or arguments associated with this event. */ + readonly params: Monad2048_NewGame_eventArgs; + /** The unique identifier of the blockchain network where this event occurred. */ + readonly chainId: Monad2048_chainId; + /** The address of the contract that emitted this event. */ + readonly srcAddress: Address_t; + /** The index of this event's log within the block. */ + readonly logIndex: number; + /** The transaction that triggered this event. Configurable in `config.yaml` via the `field_selection` option. */ + readonly transaction: Monad2048_NewGame_transaction; + /** The block in which this event was recorded. Configurable in `config.yaml` via the `field_selection` option. */ + readonly block: Monad2048_NewGame_block +}; + +export type Monad2048_NewGame_loaderArgs = Internal_genericLoaderArgs; + +export type Monad2048_NewGame_loader = Internal_genericLoader; + +export type Monad2048_NewGame_handlerArgs = Internal_genericHandlerArgs; + +export type Monad2048_NewGame_handler = Internal_genericHandler>; + +export type Monad2048_NewGame_contractRegister = Internal_genericContractRegister>; + +export type Monad2048_NewGame_eventFilter = { readonly player?: SingleOrMultiple_t; readonly id?: SingleOrMultiple_t }; + +export type Monad2048_NewGame_eventFiltersArgs = { +/** The unique identifier of the blockchain network where this event occurred. */ +readonly chainId: Monad2048_chainId; +/** Addresses of the contracts indexing the event. */ +readonly addresses: Address_t[] }; + +export type Monad2048_NewGame_eventFiltersDefinition = + Monad2048_NewGame_eventFilter + | Monad2048_NewGame_eventFilter[]; + +export type Monad2048_NewGame_eventFilters = + Monad2048_NewGame_eventFilter + | Monad2048_NewGame_eventFilter[] + | ((_1:Monad2048_NewGame_eventFiltersArgs) => Monad2048_NewGame_eventFiltersDefinition); + +export type Monad2048_NewMove_eventArgs = { + readonly player: Address_t; + readonly id: string; + readonly move: bigint; + readonly result: bigint +}; + +export type Monad2048_NewMove_block = Block_t; + +export type Monad2048_NewMove_transaction = Transaction_t; + +export type Monad2048_NewMove_event = { + /** The parameters or arguments associated with this event. */ + readonly params: Monad2048_NewMove_eventArgs; + /** The unique identifier of the blockchain network where this event occurred. */ + readonly chainId: Monad2048_chainId; + /** The address of the contract that emitted this event. */ + readonly srcAddress: Address_t; + /** The index of this event's log within the block. */ + readonly logIndex: number; + /** The transaction that triggered this event. Configurable in `config.yaml` via the `field_selection` option. */ + readonly transaction: Monad2048_NewMove_transaction; + /** The block in which this event was recorded. Configurable in `config.yaml` via the `field_selection` option. */ + readonly block: Monad2048_NewMove_block +}; + +export type Monad2048_NewMove_loaderArgs = Internal_genericLoaderArgs; + +export type Monad2048_NewMove_loader = Internal_genericLoader; + +export type Monad2048_NewMove_handlerArgs = Internal_genericHandlerArgs; + +export type Monad2048_NewMove_handler = Internal_genericHandler>; + +export type Monad2048_NewMove_contractRegister = Internal_genericContractRegister>; + +export type Monad2048_NewMove_eventFilter = { readonly player?: SingleOrMultiple_t; readonly id?: SingleOrMultiple_t }; + +export type Monad2048_NewMove_eventFiltersArgs = { +/** The unique identifier of the blockchain network where this event occurred. */ +readonly chainId: Monad2048_chainId; +/** Addresses of the contracts indexing the event. */ +readonly addresses: Address_t[] }; + +export type Monad2048_NewMove_eventFiltersDefinition = + Monad2048_NewMove_eventFilter + | Monad2048_NewMove_eventFilter[]; + +export type Monad2048_NewMove_eventFilters = + Monad2048_NewMove_eventFilter + | Monad2048_NewMove_eventFilter[] + | ((_1:Monad2048_NewMove_eventFiltersArgs) => Monad2048_NewMove_eventFiltersDefinition); + +export type chainId = number; + +export type chain = 143; diff --git a/packages/indexer/generated/src/Types.res b/packages/indexer/generated/src/Types.res new file mode 100644 index 0000000..df75cfb --- /dev/null +++ b/packages/indexer/generated/src/Types.res @@ -0,0 +1,451 @@ +//************* +//***ENTITIES** +//************* +@genType.as("Id") +type id = string + +@genType +type contractRegistrations = { + log: Envio.logger, + // TODO: only add contracts we've registered for the event in the config + addMonad2048: (Address.t) => unit, +} + +@genType +type entityLoaderContext<'entity, 'indexedFieldOperations> = { + get: id => promise>, + getOrThrow: (id, ~message: string=?) => promise<'entity>, + getWhere: 'indexedFieldOperations, + getOrCreate: ('entity) => promise<'entity>, + set: 'entity => unit, + deleteUnsafe: id => unit, +} + +@genType.import(("./Types.ts", "LoaderContext")) +type loaderContext = { + log: Envio.logger, + effect: 'input 'output. (Envio.effect<'input, 'output>, 'input) => promise<'output>, + isPreload: bool, + chains: Internal.chains, + @as("Game") game: entityLoaderContext, + @as("GameMove") gameMove: entityLoaderContext, + @as("IndexerStatus") indexerStatus: entityLoaderContext, + @as("Player") player: entityLoaderContext, +} + +@genType +type entityHandlerContext<'entity> = Internal.entityHandlerContext<'entity> + +@genType.import(("./Types.ts", "HandlerContext")) +type handlerContext = { + log: Envio.logger, + effect: 'input 'output. (Envio.effect<'input, 'output>, 'input) => promise<'output>, + chains: Internal.chains, + @as("Game") game: entityHandlerContext, + @as("GameMove") gameMove: entityHandlerContext, + @as("IndexerStatus") indexerStatus: entityHandlerContext, + @as("Player") player: entityHandlerContext, +} + +//Re-exporting types for backwards compatability +@genType.as("Game") +type game = Entities.Game.t +@genType.as("GameMove") +type gameMove = Entities.GameMove.t +@genType.as("IndexerStatus") +type indexerStatus = Entities.IndexerStatus.t +@genType.as("Player") +type player = Entities.Player.t + +//************* +//**CONTRACTS** +//************* + +module Transaction = { + @genType + type t = {hash: string, from: option, gasUsed: bigint, effectiveGasPrice: bigint, gasPrice: option} + + let schema = S.object((s): t => {hash: s.field("hash", S.string), from: s.field("from", S.nullable(Address.schema)), gasUsed: s.field("gasUsed", BigInt.nativeSchema), effectiveGasPrice: s.field("effectiveGasPrice", BigInt.nativeSchema), gasPrice: s.field("gasPrice", S.nullable(BigInt.nativeSchema))}) +} + +module Block = { + @genType + type t = {number: int, timestamp: int, hash: string} + + let schema = S.object((s): t => {number: s.field("number", S.int), timestamp: s.field("timestamp", S.int), hash: s.field("hash", S.string)}) + + @get + external getNumber: Internal.eventBlock => int = "number" + + @get + external getTimestamp: Internal.eventBlock => int = "timestamp" + + @get + external getId: Internal.eventBlock => string = "hash" + + let cleanUpRawEventFieldsInPlace: Js.Json.t => () = %raw(`fields => { + delete fields.hash + delete fields.number + delete fields.timestamp + }`) +} + +module AggregatedBlock = { + @genType + type t = {hash: string, number: int, timestamp: int} +} +module AggregatedTransaction = { + @genType + type t = {effectiveGasPrice: bigint, from: option, gasPrice: option, gasUsed: bigint, hash: string} +} + +@genType.as("EventLog") +type eventLog<'params> = Internal.genericEvent<'params, Block.t, Transaction.t> + +module SingleOrMultiple: { + @genType.import(("./bindings/OpaqueTypes", "SingleOrMultiple")) + type t<'a> + let normalizeOrThrow: (t<'a>, ~nestedArrayDepth: int=?) => array<'a> + let single: 'a => t<'a> + let multiple: array<'a> => t<'a> +} = { + type t<'a> = Js.Json.t + + external single: 'a => t<'a> = "%identity" + external multiple: array<'a> => t<'a> = "%identity" + external castMultiple: t<'a> => array<'a> = "%identity" + external castSingle: t<'a> => 'a = "%identity" + + exception AmbiguousEmptyNestedArray + + let rec isMultiple = (t: t<'a>, ~nestedArrayDepth): bool => + switch t->Js.Json.decodeArray { + | None => false + | Some(_arr) if nestedArrayDepth == 0 => true + | Some([]) if nestedArrayDepth > 0 => + AmbiguousEmptyNestedArray->ErrorHandling.mkLogAndRaise( + ~msg="The given empty array could be interperated as a flat array (value) or nested array. Since it's ambiguous, + please pass in a nested empty array if the intention is to provide an empty array as a value", + ) + | Some(arr) => arr->Js.Array2.unsafe_get(0)->isMultiple(~nestedArrayDepth=nestedArrayDepth - 1) + } + + let normalizeOrThrow = (t: t<'a>, ~nestedArrayDepth=0): array<'a> => { + if t->isMultiple(~nestedArrayDepth) { + t->castMultiple + } else { + [t->castSingle] + } + } +} + +module HandlerTypes = { + @genType + type args<'eventArgs, 'context> = { + event: eventLog<'eventArgs>, + context: 'context, + } + + @genType + type contractRegisterArgs<'eventArgs> = Internal.genericContractRegisterArgs, contractRegistrations> + @genType + type contractRegister<'eventArgs> = Internal.genericContractRegister> + + @genType + type loaderArgs<'eventArgs> = Internal.genericLoaderArgs, loaderContext> + @genType + type loader<'eventArgs, 'loaderReturn> = Internal.genericLoader, 'loaderReturn> + + @genType + type handlerArgs<'eventArgs, 'loaderReturn> = Internal.genericHandlerArgs, handlerContext, 'loaderReturn> + + @genType + type handler<'eventArgs, 'loaderReturn> = Internal.genericHandler> + + @genType + type loaderHandler<'eventArgs, 'loaderReturn, 'eventFilters> = Internal.genericHandlerWithLoader< + loader<'eventArgs, 'loaderReturn>, + handler<'eventArgs, 'loaderReturn>, + 'eventFilters + > + + @genType + type eventConfig<'eventFilters> = Internal.eventOptions<'eventFilters> +} + +module type Event = { + type event + + let handlerRegister: EventRegister.t + + type eventFilters +} + +@genType.import(("./bindings/OpaqueTypes.ts", "HandlerWithOptions")) +type fnWithEventConfig<'fn, 'eventConfig> = ('fn, ~eventConfig: 'eventConfig=?) => unit + +@genType +type handlerWithOptions<'eventArgs, 'loaderReturn, 'eventFilters> = fnWithEventConfig< + HandlerTypes.handler<'eventArgs, 'loaderReturn>, + HandlerTypes.eventConfig<'eventFilters>, +> + +@genType +type contractRegisterWithOptions<'eventArgs, 'eventFilters> = fnWithEventConfig< + HandlerTypes.contractRegister<'eventArgs>, + HandlerTypes.eventConfig<'eventFilters>, +> + +module MakeRegister = (Event: Event) => { + let contractRegister: fnWithEventConfig< + Internal.genericContractRegister< + Internal.genericContractRegisterArgs, + >, + HandlerTypes.eventConfig, + > = (contractRegister, ~eventConfig=?) => + Event.handlerRegister->EventRegister.setContractRegister( + contractRegister, + ~eventOptions=eventConfig, + ) + + let handler: fnWithEventConfig< + Internal.genericHandler>, + HandlerTypes.eventConfig, + > = (handler, ~eventConfig=?) => { + Event.handlerRegister->EventRegister.setHandler(args => { + if args.context.isPreload { + Promise.resolve() + } else { + handler( + args->( + Utils.magic: Internal.genericHandlerArgs< + Event.event, + Internal.handlerContext, + 'loaderReturn, + > => Internal.genericHandlerArgs + ), + ) + } + }, ~eventOptions=eventConfig) + } + + let handlerWithLoader = ( + eventConfig: Internal.genericHandlerWithLoader< + Internal.genericLoader, 'loaderReturn>, + Internal.genericHandler< + Internal.genericHandlerArgs, + >, + Event.eventFilters, + >, + ) => { + Event.handlerRegister->EventRegister.setHandler( + args => { + let promise = eventConfig.loader( + args->( + Utils.magic: Internal.genericHandlerArgs< + Event.event, + Internal.handlerContext, + 'loaderReturn, + > => Internal.genericLoaderArgs + ), + ) + if args.context.isPreload { + promise->Promise.ignoreValue + } else { + promise->Promise.then(loaderReturn => { + (args->Obj.magic)["loaderReturn"] = loaderReturn + eventConfig.handler( + args->( + Utils.magic: Internal.genericHandlerArgs< + Event.event, + Internal.handlerContext, + 'loaderReturn, + > => Internal.genericHandlerArgs + ), + ) + }) + } + }, + ~eventOptions=switch eventConfig { + | {wildcard: ?None, eventFilters: ?None} => None + | _ => + Some({ + wildcard: ?eventConfig.wildcard, + eventFilters: ?eventConfig.eventFilters, + preRegisterDynamicContracts: ?eventConfig.preRegisterDynamicContracts, + }) + }, + ) + } +} + +module Monad2048 = { +let abi = Ethers.makeAbi((%raw(`[{"type":"event","name":"NewGame","inputs":[{"name":"player","type":"address","indexed":true},{"name":"id","type":"bytes32","indexed":true},{"name":"board","type":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"NewMove","inputs":[{"name":"player","type":"address","indexed":true},{"name":"id","type":"bytes32","indexed":true},{"name":"move","type":"uint256","indexed":false},{"name":"result","type":"uint256","indexed":false}],"anonymous":false}]`): Js.Json.t)) +let eventSignatures = ["NewGame(address indexed player, bytes32 indexed id, uint256 board)", "NewMove(address indexed player, bytes32 indexed id, uint256 move, uint256 result)"] +@genType type chainId = [#143] +let contractName = "Monad2048" + +module NewGame = { + +let id = "0x3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e3_3" +let sighash = "0x3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e3" +let name = "NewGame" +let contractName = contractName + +@genType +type eventArgs = {player: Address.t, id: string, board: bigint} +@genType +type block = Block.t +@genType +type transaction = Transaction.t + +@genType +type event = { + /** The parameters or arguments associated with this event. */ + params: eventArgs, + /** The unique identifier of the blockchain network where this event occurred. */ + chainId: chainId, + /** The address of the contract that emitted this event. */ + srcAddress: Address.t, + /** The index of this event's log within the block. */ + logIndex: int, + /** The transaction that triggered this event. Configurable in `config.yaml` via the `field_selection` option. */ + transaction: transaction, + /** The block in which this event was recorded. Configurable in `config.yaml` via the `field_selection` option. */ + block: block, +} + +@genType +type loaderArgs = Internal.genericLoaderArgs +@genType +type loader<'loaderReturn> = Internal.genericLoader +@genType +type handlerArgs<'loaderReturn> = Internal.genericHandlerArgs +@genType +type handler<'loaderReturn> = Internal.genericHandler> +@genType +type contractRegister = Internal.genericContractRegister> + +let paramsRawEventSchema = S.object((s): eventArgs => {player: s.field("player", Address.schema), id: s.field("id", S.string), board: s.field("board", BigInt.schema)}) +let blockSchema = Block.schema +let transactionSchema = Transaction.schema + +let handlerRegister: EventRegister.t = EventRegister.make( + ~contractName, + ~eventName=name, +) + +@genType +type eventFilter = {@as("player") player?: SingleOrMultiple.t, @as("id") id?: SingleOrMultiple.t} + +@genType type eventFiltersArgs = {/** The unique identifier of the blockchain network where this event occurred. */ chainId: chainId, /** Addresses of the contracts indexing the event. */ addresses: array} + +@genType @unboxed type eventFiltersDefinition = Single(eventFilter) | Multiple(array) + +@genType @unboxed type eventFilters = | ...eventFiltersDefinition | Dynamic(eventFiltersArgs => eventFiltersDefinition) + +let register = (): Internal.evmEventConfig => { + let {getEventFiltersOrThrow, filterByAddresses} = LogSelection.parseEventFiltersOrThrow(~eventFilters=handlerRegister->EventRegister.getEventFilters, ~sighash, ~params=["player","id",], ~topic1=(_eventFilter) => _eventFilter->Utils.Dict.dangerouslyGetNonOption("player")->Belt.Option.mapWithDefault([], topicFilters => topicFilters->Obj.magic->SingleOrMultiple.normalizeOrThrow->Belt.Array.map(TopicFilter.fromAddress)), ~topic2=(_eventFilter) => _eventFilter->Utils.Dict.dangerouslyGetNonOption("id")->Belt.Option.mapWithDefault([], topicFilters => topicFilters->Obj.magic->SingleOrMultiple.normalizeOrThrow->Belt.Array.map(TopicFilter.castToHexUnsafe))) + { + getEventFiltersOrThrow, + filterByAddresses, + dependsOnAddresses: !(handlerRegister->EventRegister.isWildcard) || filterByAddresses, + blockSchema: blockSchema->(Utils.magic: S.t => S.t), + transactionSchema: transactionSchema->(Utils.magic: S.t => S.t), + convertHyperSyncEventArgs: (decodedEvent: HyperSyncClient.Decoder.decodedEvent) => {player: decodedEvent.indexed->Js.Array2.unsafe_get(0)->HyperSyncClient.Decoder.toUnderlying->Utils.magic, id: decodedEvent.indexed->Js.Array2.unsafe_get(1)->HyperSyncClient.Decoder.toUnderlying->Utils.magic, board: decodedEvent.body->Js.Array2.unsafe_get(0)->HyperSyncClient.Decoder.toUnderlying->Utils.magic, }->(Utils.magic: eventArgs => Internal.eventParams), + id, + name, + contractName, + isWildcard: (handlerRegister->EventRegister.isWildcard), + handler: handlerRegister->EventRegister.getHandler, + contractRegister: handlerRegister->EventRegister.getContractRegister, + paramsRawEventSchema: paramsRawEventSchema->(Utils.magic: S.t => S.t), + } +} +} + +module NewMove = { + +let id = "0x14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce842_3" +let sighash = "0x14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce842" +let name = "NewMove" +let contractName = contractName + +@genType +type eventArgs = {player: Address.t, id: string, move: bigint, result: bigint} +@genType +type block = Block.t +@genType +type transaction = Transaction.t + +@genType +type event = { + /** The parameters or arguments associated with this event. */ + params: eventArgs, + /** The unique identifier of the blockchain network where this event occurred. */ + chainId: chainId, + /** The address of the contract that emitted this event. */ + srcAddress: Address.t, + /** The index of this event's log within the block. */ + logIndex: int, + /** The transaction that triggered this event. Configurable in `config.yaml` via the `field_selection` option. */ + transaction: transaction, + /** The block in which this event was recorded. Configurable in `config.yaml` via the `field_selection` option. */ + block: block, +} + +@genType +type loaderArgs = Internal.genericLoaderArgs +@genType +type loader<'loaderReturn> = Internal.genericLoader +@genType +type handlerArgs<'loaderReturn> = Internal.genericHandlerArgs +@genType +type handler<'loaderReturn> = Internal.genericHandler> +@genType +type contractRegister = Internal.genericContractRegister> + +let paramsRawEventSchema = S.object((s): eventArgs => {player: s.field("player", Address.schema), id: s.field("id", S.string), move: s.field("move", BigInt.schema), result: s.field("result", BigInt.schema)}) +let blockSchema = Block.schema +let transactionSchema = Transaction.schema + +let handlerRegister: EventRegister.t = EventRegister.make( + ~contractName, + ~eventName=name, +) + +@genType +type eventFilter = {@as("player") player?: SingleOrMultiple.t, @as("id") id?: SingleOrMultiple.t} + +@genType type eventFiltersArgs = {/** The unique identifier of the blockchain network where this event occurred. */ chainId: chainId, /** Addresses of the contracts indexing the event. */ addresses: array} + +@genType @unboxed type eventFiltersDefinition = Single(eventFilter) | Multiple(array) + +@genType @unboxed type eventFilters = | ...eventFiltersDefinition | Dynamic(eventFiltersArgs => eventFiltersDefinition) + +let register = (): Internal.evmEventConfig => { + let {getEventFiltersOrThrow, filterByAddresses} = LogSelection.parseEventFiltersOrThrow(~eventFilters=handlerRegister->EventRegister.getEventFilters, ~sighash, ~params=["player","id",], ~topic1=(_eventFilter) => _eventFilter->Utils.Dict.dangerouslyGetNonOption("player")->Belt.Option.mapWithDefault([], topicFilters => topicFilters->Obj.magic->SingleOrMultiple.normalizeOrThrow->Belt.Array.map(TopicFilter.fromAddress)), ~topic2=(_eventFilter) => _eventFilter->Utils.Dict.dangerouslyGetNonOption("id")->Belt.Option.mapWithDefault([], topicFilters => topicFilters->Obj.magic->SingleOrMultiple.normalizeOrThrow->Belt.Array.map(TopicFilter.castToHexUnsafe))) + { + getEventFiltersOrThrow, + filterByAddresses, + dependsOnAddresses: !(handlerRegister->EventRegister.isWildcard) || filterByAddresses, + blockSchema: blockSchema->(Utils.magic: S.t => S.t), + transactionSchema: transactionSchema->(Utils.magic: S.t => S.t), + convertHyperSyncEventArgs: (decodedEvent: HyperSyncClient.Decoder.decodedEvent) => {player: decodedEvent.indexed->Js.Array2.unsafe_get(0)->HyperSyncClient.Decoder.toUnderlying->Utils.magic, id: decodedEvent.indexed->Js.Array2.unsafe_get(1)->HyperSyncClient.Decoder.toUnderlying->Utils.magic, move: decodedEvent.body->Js.Array2.unsafe_get(0)->HyperSyncClient.Decoder.toUnderlying->Utils.magic, result: decodedEvent.body->Js.Array2.unsafe_get(1)->HyperSyncClient.Decoder.toUnderlying->Utils.magic, }->(Utils.magic: eventArgs => Internal.eventParams), + id, + name, + contractName, + isWildcard: (handlerRegister->EventRegister.isWildcard), + handler: handlerRegister->EventRegister.getHandler, + contractRegister: handlerRegister->EventRegister.getContractRegister, + paramsRawEventSchema: paramsRawEventSchema->(Utils.magic: S.t => S.t), + } +} +} +} + +@genType +type chainId = int + +@genType +type chain = [#143] diff --git a/packages/indexer/generated/src/Types.ts b/packages/indexer/generated/src/Types.ts new file mode 100644 index 0000000..c388699 --- /dev/null +++ b/packages/indexer/generated/src/Types.ts @@ -0,0 +1,282 @@ +// This file is to dynamically generate TS types +// which we can't get using GenType +// Use @genType.import to link the types back to ReScript code + +import type { Logger, EffectCaller } from "envio"; +import type * as Entities from "./db/Entities.gen.ts"; + +export type LoaderContext = { + /** + * Access the logger instance with event as a context. The logs will be displayed in the console and Envio Hosted Service. + */ + readonly log: Logger; + /** + * Call the provided Effect with the given input. + * Effects are the best for external calls with automatic deduplication, error handling and caching. + * Define a new Effect using createEffect outside of the handler. + */ + readonly effect: EffectCaller; + /** + * True when the handlers run in preload mode - in parallel for the whole batch. + * Handlers run twice per batch of events, and the first time is the "preload" run + * During preload entities aren't set, logs are ignored and exceptions are silently swallowed. + * Preload mode is the best time to populate data to in-memory cache. + * After preload the handler will run for the second time in sequential order of events. + */ + readonly isPreload: boolean; + /** + * Per-chain state information accessible in event handlers and block handlers. + * Each chain ID maps to an object containing chain-specific state: + * - isReady: true when the chain has completed initial sync and is processing live events, + * false during historical synchronization + */ + readonly chains: { + [chainId: string]: { + readonly isReady: boolean; + }; + }; + readonly Game: { + /** + * Load the entity Game from the storage by ID. + * If the entity is not found, returns undefined. + */ + readonly get: (id: string) => Promise, + /** + * Load the entity Game from the storage by ID. + * If the entity is not found, throws an error. + */ + readonly getOrThrow: (id: string, message?: string) => Promise, + readonly getWhere: Entities.Game_indexedFieldOperations, + /** + * Returns the entity Game from the storage by ID. + * If the entity is not found, creates it using provided parameters and returns it. + */ + readonly getOrCreate: (entity: Entities.Game_t) => Promise, + /** + * Set the entity Game in the storage. + */ + readonly set: (entity: Entities.Game_t) => void, + /** + * Delete the entity Game from the storage. + * + * The 'deleteUnsafe' method is experimental and unsafe. You should manually handle all entity references after deletion to maintain database consistency. + */ + readonly deleteUnsafe: (id: string) => void, + } + readonly GameMove: { + /** + * Load the entity GameMove from the storage by ID. + * If the entity is not found, returns undefined. + */ + readonly get: (id: string) => Promise, + /** + * Load the entity GameMove from the storage by ID. + * If the entity is not found, throws an error. + */ + readonly getOrThrow: (id: string, message?: string) => Promise, + readonly getWhere: Entities.GameMove_indexedFieldOperations, + /** + * Returns the entity GameMove from the storage by ID. + * If the entity is not found, creates it using provided parameters and returns it. + */ + readonly getOrCreate: (entity: Entities.GameMove_t) => Promise, + /** + * Set the entity GameMove in the storage. + */ + readonly set: (entity: Entities.GameMove_t) => void, + /** + * Delete the entity GameMove from the storage. + * + * The 'deleteUnsafe' method is experimental and unsafe. You should manually handle all entity references after deletion to maintain database consistency. + */ + readonly deleteUnsafe: (id: string) => void, + } + readonly IndexerStatus: { + /** + * Load the entity IndexerStatus from the storage by ID. + * If the entity is not found, returns undefined. + */ + readonly get: (id: string) => Promise, + /** + * Load the entity IndexerStatus from the storage by ID. + * If the entity is not found, throws an error. + */ + readonly getOrThrow: (id: string, message?: string) => Promise, + readonly getWhere: Entities.IndexerStatus_indexedFieldOperations, + /** + * Returns the entity IndexerStatus from the storage by ID. + * If the entity is not found, creates it using provided parameters and returns it. + */ + readonly getOrCreate: (entity: Entities.IndexerStatus_t) => Promise, + /** + * Set the entity IndexerStatus in the storage. + */ + readonly set: (entity: Entities.IndexerStatus_t) => void, + /** + * Delete the entity IndexerStatus from the storage. + * + * The 'deleteUnsafe' method is experimental and unsafe. You should manually handle all entity references after deletion to maintain database consistency. + */ + readonly deleteUnsafe: (id: string) => void, + } + readonly Player: { + /** + * Load the entity Player from the storage by ID. + * If the entity is not found, returns undefined. + */ + readonly get: (id: string) => Promise, + /** + * Load the entity Player from the storage by ID. + * If the entity is not found, throws an error. + */ + readonly getOrThrow: (id: string, message?: string) => Promise, + readonly getWhere: Entities.Player_indexedFieldOperations, + /** + * Returns the entity Player from the storage by ID. + * If the entity is not found, creates it using provided parameters and returns it. + */ + readonly getOrCreate: (entity: Entities.Player_t) => Promise, + /** + * Set the entity Player in the storage. + */ + readonly set: (entity: Entities.Player_t) => void, + /** + * Delete the entity Player from the storage. + * + * The 'deleteUnsafe' method is experimental and unsafe. You should manually handle all entity references after deletion to maintain database consistency. + */ + readonly deleteUnsafe: (id: string) => void, + } +}; + +export type HandlerContext = { + /** + * Access the logger instance with event as a context. The logs will be displayed in the console and Envio Hosted Service. + */ + readonly log: Logger; + /** + * Call the provided Effect with the given input. + * Effects are the best for external calls with automatic deduplication, error handling and caching. + * Define a new Effect using createEffect outside of the handler. + */ + readonly effect: EffectCaller; + /** + * Per-chain state information accessible in event handlers and block handlers. + * Each chain ID maps to an object containing chain-specific state: + * - isReady: true when the chain has completed initial sync and is processing live events, + * false during historical synchronization + */ + readonly chains: { + [chainId: string]: { + readonly isReady: boolean; + }; + }; + readonly Game: { + /** + * Load the entity Game from the storage by ID. + * If the entity is not found, returns undefined. + */ + readonly get: (id: string) => Promise, + /** + * Load the entity Game from the storage by ID. + * If the entity is not found, throws an error. + */ + readonly getOrThrow: (id: string, message?: string) => Promise, + /** + * Returns the entity Game from the storage by ID. + * If the entity is not found, creates it using provided parameters and returns it. + */ + readonly getOrCreate: (entity: Entities.Game_t) => Promise, + /** + * Set the entity Game in the storage. + */ + readonly set: (entity: Entities.Game_t) => void, + /** + * Delete the entity Game from the storage. + * + * The 'deleteUnsafe' method is experimental and unsafe. You should manually handle all entity references after deletion to maintain database consistency. + */ + readonly deleteUnsafe: (id: string) => void, + } + readonly GameMove: { + /** + * Load the entity GameMove from the storage by ID. + * If the entity is not found, returns undefined. + */ + readonly get: (id: string) => Promise, + /** + * Load the entity GameMove from the storage by ID. + * If the entity is not found, throws an error. + */ + readonly getOrThrow: (id: string, message?: string) => Promise, + /** + * Returns the entity GameMove from the storage by ID. + * If the entity is not found, creates it using provided parameters and returns it. + */ + readonly getOrCreate: (entity: Entities.GameMove_t) => Promise, + /** + * Set the entity GameMove in the storage. + */ + readonly set: (entity: Entities.GameMove_t) => void, + /** + * Delete the entity GameMove from the storage. + * + * The 'deleteUnsafe' method is experimental and unsafe. You should manually handle all entity references after deletion to maintain database consistency. + */ + readonly deleteUnsafe: (id: string) => void, + } + readonly IndexerStatus: { + /** + * Load the entity IndexerStatus from the storage by ID. + * If the entity is not found, returns undefined. + */ + readonly get: (id: string) => Promise, + /** + * Load the entity IndexerStatus from the storage by ID. + * If the entity is not found, throws an error. + */ + readonly getOrThrow: (id: string, message?: string) => Promise, + /** + * Returns the entity IndexerStatus from the storage by ID. + * If the entity is not found, creates it using provided parameters and returns it. + */ + readonly getOrCreate: (entity: Entities.IndexerStatus_t) => Promise, + /** + * Set the entity IndexerStatus in the storage. + */ + readonly set: (entity: Entities.IndexerStatus_t) => void, + /** + * Delete the entity IndexerStatus from the storage. + * + * The 'deleteUnsafe' method is experimental and unsafe. You should manually handle all entity references after deletion to maintain database consistency. + */ + readonly deleteUnsafe: (id: string) => void, + } + readonly Player: { + /** + * Load the entity Player from the storage by ID. + * If the entity is not found, returns undefined. + */ + readonly get: (id: string) => Promise, + /** + * Load the entity Player from the storage by ID. + * If the entity is not found, throws an error. + */ + readonly getOrThrow: (id: string, message?: string) => Promise, + /** + * Returns the entity Player from the storage by ID. + * If the entity is not found, creates it using provided parameters and returns it. + */ + readonly getOrCreate: (entity: Entities.Player_t) => Promise, + /** + * Set the entity Player in the storage. + */ + readonly set: (entity: Entities.Player_t) => void, + /** + * Delete the entity Player from the storage. + * + * The 'deleteUnsafe' method is experimental and unsafe. You should manually handle all entity references after deletion to maintain database consistency. + */ + readonly deleteUnsafe: (id: string) => void, + } +}; diff --git a/packages/indexer/generated/src/UserContext.res b/packages/indexer/generated/src/UserContext.res new file mode 100644 index 0000000..3101e4e --- /dev/null +++ b/packages/indexer/generated/src/UserContext.res @@ -0,0 +1,360 @@ +let codegenHelpMessage = `Rerun 'pnpm dev' to update generated code after schema.graphql changes.` + +type contextParams = { + item: Internal.item, + checkpointId: int, + inMemoryStore: InMemoryStore.t, + loadManager: LoadManager.t, + persistence: Persistence.t, + isPreload: bool, + shouldSaveHistory: bool, + chains: Internal.chains, + mutable isResolved: bool, +} + +// We don't want to expose the params to the user +// so instead of storing _params on the context object, +// we use an external WeakMap +let paramsByThis: Utils.WeakMap.t = Utils.WeakMap.make() + +let effectContextPrototype = %raw(`Object.create(null)`) +Utils.Object.defineProperty( + effectContextPrototype, + "log", + { + get: () => { + (paramsByThis->Utils.WeakMap.unsafeGet(%raw(`this`))).item->Logging.getUserLogger + }, + }, +) +%%raw(` +var EffectContext = function(params, defaultShouldCache, callEffect) { + paramsByThis.set(this, params); + this.effect = callEffect; + this.cache = defaultShouldCache; +}; +EffectContext.prototype = effectContextPrototype; +`) + +@new +external makeEffectContext: ( + contextParams, + ~defaultShouldCache: bool, + ~callEffect: (Internal.effect, Internal.effectInput) => promise, +) => Internal.effectContext = "EffectContext" + +let initEffect = (params: contextParams) => { + let rec callEffect = (effect: Internal.effect, input: Internal.effectInput) => { + let effectContext = makeEffectContext( + params, + ~defaultShouldCache=effect.defaultShouldCache, + ~callEffect, + ) + let effectArgs: Internal.effectArgs = { + input, + context: effectContext, + cacheKey: input->S.reverseConvertOrThrow(effect.input)->Utils.Hash.makeOrThrow, + } + LoadLayer.loadEffect( + ~loadManager=params.loadManager, + ~persistence=params.persistence, + ~effect, + ~effectArgs, + ~inMemoryStore=params.inMemoryStore, + ~shouldGroup=params.isPreload, + ~item=params.item, + ) + } + callEffect +} + +type entityContextParams = { + ...contextParams, + entityConfig: Internal.entityConfig, +} + +let getWhereTraps: Utils.Proxy.traps = { + get: (~target as params, ~prop: unknown) => { + let entityConfig = params.entityConfig + if prop->Js.typeof !== "string" { + Js.Exn.raiseError( + `Invalid context.${entityConfig.name}.getWhere access by a non-string property.`, + ) + } else { + let dbFieldName = prop->(Utils.magic: unknown => string) + switch entityConfig.table->Table.getFieldByDbName(dbFieldName) { + | None => + Js.Exn.raiseError( + `Invalid context.${entityConfig.name}.getWhere.${dbFieldName} - the field doesn't exist. ${codegenHelpMessage}`, + ) + | Some(field) => + let fieldValueSchema = switch field { + | Field({fieldSchema}) => fieldSchema + | DerivedFrom(_) => S.string->S.toUnknown + } + { + Entities.eq: fieldValue => + LoadLayer.loadByField( + ~loadManager=params.loadManager, + ~persistence=params.persistence, + ~operator=Eq, + ~entityConfig, + ~fieldName=dbFieldName, + ~fieldValueSchema, + ~inMemoryStore=params.inMemoryStore, + ~shouldGroup=params.isPreload, + ~item=params.item, + ~fieldValue, + ), + gt: fieldValue => + LoadLayer.loadByField( + ~loadManager=params.loadManager, + ~persistence=params.persistence, + ~operator=Gt, + ~entityConfig, + ~fieldName=dbFieldName, + ~fieldValueSchema, + ~inMemoryStore=params.inMemoryStore, + ~shouldGroup=params.isPreload, + ~item=params.item, + ~fieldValue, + ), + lt: fieldValue => + LoadLayer.loadByField( + ~loadManager=params.loadManager, + ~persistence=params.persistence, + ~operator=Lt, + ~entityConfig, + ~fieldName=dbFieldName, + ~fieldValueSchema, + ~inMemoryStore=params.inMemoryStore, + ~shouldGroup=params.isPreload, + ~item=params.item, + ~fieldValue, + ), + }->Utils.magic + } + } + }, +} + +let noopSet = (_entity: Internal.entity) => () +let noopDeleteUnsafe = (_entityId: string) => () + +let entityTraps: Utils.Proxy.traps = { + get: (~target as params, ~prop: unknown) => { + let prop = prop->(Utils.magic: unknown => string) + + let set = params.isPreload + ? noopSet + : (entity: Internal.entity) => { + params.inMemoryStore + ->InMemoryStore.getInMemTable(~entityConfig=params.entityConfig) + ->InMemoryTable.Entity.set( + { + entityId: entity.id, + checkpointId: params.checkpointId, + entityUpdateAction: Set(entity), + }, + ~shouldSaveHistory=params.shouldSaveHistory, + ) + } + + switch prop { + | "get" => + ( + entityId => + LoadLayer.loadById( + ~loadManager=params.loadManager, + ~persistence=params.persistence, + ~entityConfig=params.entityConfig, + ~inMemoryStore=params.inMemoryStore, + ~shouldGroup=params.isPreload, + ~item=params.item, + ~entityId, + ) + )->Utils.magic + | "getWhere" => params->Utils.Proxy.make(getWhereTraps)->Utils.magic + | "getOrThrow" => + ( + (entityId, ~message=?) => + LoadLayer.loadById( + ~loadManager=params.loadManager, + ~persistence=params.persistence, + ~entityConfig=params.entityConfig, + ~inMemoryStore=params.inMemoryStore, + ~shouldGroup=params.isPreload, + ~item=params.item, + ~entityId, + )->Promise.thenResolve(entity => { + switch entity { + | Some(entity) => entity + | None => + Js.Exn.raiseError( + message->Belt.Option.getWithDefault( + `Entity '${params.entityConfig.name}' with ID '${entityId}' is expected to exist.`, + ), + ) + } + }) + )->Utils.magic + | "getOrCreate" => + ( + (entity: Internal.entity) => + LoadLayer.loadById( + ~loadManager=params.loadManager, + ~persistence=params.persistence, + ~entityConfig=params.entityConfig, + ~inMemoryStore=params.inMemoryStore, + ~shouldGroup=params.isPreload, + ~item=params.item, + ~entityId=entity.id, + )->Promise.thenResolve(storageEntity => { + switch storageEntity { + | Some(entity) => entity + | None => { + set(entity) + entity + } + } + }) + )->Utils.magic + | "set" => set->Utils.magic + | "deleteUnsafe" => + if params.isPreload { + noopDeleteUnsafe + } else { + entityId => { + params.inMemoryStore + ->InMemoryStore.getInMemTable(~entityConfig=params.entityConfig) + ->InMemoryTable.Entity.set( + { + entityId, + checkpointId: params.checkpointId, + entityUpdateAction: Delete, + }, + ~shouldSaveHistory=params.shouldSaveHistory, + ) + } + }->Utils.magic + | _ => Js.Exn.raiseError(`Invalid context.${params.entityConfig.name}.${prop} operation.`) + } + }, +} + +let handlerTraps: Utils.Proxy.traps = { + get: (~target as params, ~prop: unknown) => { + let prop = prop->(Utils.magic: unknown => string) + if params.isResolved { + Utils.Error.make( + `Impossible to access context.${prop} after the handler is resolved. Make sure you didn't miss an await in the handler.`, + )->ErrorHandling.mkLogAndRaise(~logger=params.item->Logging.getItemLogger) + } + switch prop { + | "log" => + (params.isPreload ? Logging.noopLogger : params.item->Logging.getUserLogger)->Utils.magic + | "effect" => + initEffect((params :> contextParams))->( + Utils.magic: ( + (Internal.effect, Internal.effectInput) => promise + ) => unknown + ) + + | "isPreload" => params.isPreload->Utils.magic + | "chains" => params.chains->Utils.magic + | _ => + switch Entities.byName->Utils.Dict.dangerouslyGetNonOption(prop) { + | Some(entityConfig) => + { + item: params.item, + isPreload: params.isPreload, + inMemoryStore: params.inMemoryStore, + loadManager: params.loadManager, + persistence: params.persistence, + shouldSaveHistory: params.shouldSaveHistory, + checkpointId: params.checkpointId, + chains: params.chains, + isResolved: params.isResolved, + entityConfig, + } + ->Utils.Proxy.make(entityTraps) + ->Utils.magic + | None => + Js.Exn.raiseError(`Invalid context access by '${prop}' property. ${codegenHelpMessage}`) + } + } + }, +} + +let getHandlerContext = (params: contextParams): Internal.handlerContext => { + params->Utils.Proxy.make(handlerTraps)->Utils.magic +} + +// Contract register context creation +type contractRegisterParams = { + item: Internal.item, + onRegister: ( + ~item: Internal.item, + ~contractAddress: Address.t, + ~contractName: Enums.ContractType.t, + ) => unit, + config: Config.t, + mutable isResolved: bool, +} + +let contractRegisterTraps: Utils.Proxy.traps = { + get: (~target as params, ~prop: unknown) => { + let prop = prop->(Utils.magic: unknown => string) + if params.isResolved { + Utils.Error.make( + `Impossible to access context.${prop} after the contract register is resolved. Make sure you didn't miss an await in the handler.`, + )->ErrorHandling.mkLogAndRaise(~logger=params.item->Logging.getItemLogger) + } + switch prop { + | "log" => params.item->Logging.getUserLogger->Utils.magic + | _ => + // Use the pre-built mapping for efficient lookup + switch params.config.addContractNameToContractNameMapping->Utils.Dict.dangerouslyGetNonOption( + prop, + ) { + | Some(contractName) => { + let addFunction = (contractAddress: Address.t) => { + let validatedAddress = if params.config.ecosystem === Evm { + // The value is passed from the user-land, + // so we need to validate and checksum/lowercase the address. + if params.config.lowercaseAddresses { + contractAddress->Address.Evm.fromAddressLowercaseOrThrow + } else { + contractAddress->Address.Evm.fromAddressOrThrow + } + } else { + // TODO: Ideally we should do the same for other ecosystems + contractAddress + } + + params.onRegister( + ~item=params.item, + ~contractAddress=validatedAddress, + ~contractName=contractName->(Utils.magic: string => Enums.ContractType.t), + ) + } + + addFunction->Utils.magic + } + | None => + Js.Exn.raiseError(`Invalid context access by '${prop}' property. ${codegenHelpMessage}`) + } + } + }, +} + +let getContractRegisterContext = (params: contractRegisterParams) => { + params + ->Utils.Proxy.make(contractRegisterTraps) + ->Utils.magic +} + +let getContractRegisterArgs = (params: contractRegisterParams): Internal.contractRegisterArgs => { + event: (params.item->Internal.castUnsafeEventItem).event, + context: getContractRegisterContext(params), +} diff --git a/packages/indexer/generated/src/bindings/Dotenv.res b/packages/indexer/generated/src/bindings/Dotenv.res new file mode 100644 index 0000000..dffee86 --- /dev/null +++ b/packages/indexer/generated/src/bindings/Dotenv.res @@ -0,0 +1,17 @@ +type config = {path?: string} +type envRes + +@module("dotenv") external config: config => envRes = "config" + +module Utils = { + type require = {resolve: string => string} + external require: require = "require" + + let getEnvFilePath = () => + switch require.resolve(`../../${Path.relativePathToRootFromGenerated}/.env`) { + | path => Some(path) + | exception _exn => None + } +} + +let initialize = () => config({path: ?Utils.getEnvFilePath()})->ignore diff --git a/packages/indexer/generated/src/bindings/Ethers.gen.ts b/packages/indexer/generated/src/bindings/Ethers.gen.ts new file mode 100644 index 0000000..abe9632 --- /dev/null +++ b/packages/indexer/generated/src/bindings/Ethers.gen.ts @@ -0,0 +1,15 @@ +/* +Reexport the types to keep backward compatibility +*/ + +/* eslint-disable */ +/* tslint:disable */ + +import type { t as Address_t } from "envio/src/Address.gen"; +export type { + Addresses_mockAddresses, + Addresses_defaultAddress, + Addresses, +} from "envio/src/bindings/Ethers.gen"; + +export type ethAddress = Address_t; diff --git a/packages/indexer/generated/src/bindings/OpaqueTypes.ts b/packages/indexer/generated/src/bindings/OpaqueTypes.ts new file mode 100644 index 0000000..285ec70 --- /dev/null +++ b/packages/indexer/generated/src/bindings/OpaqueTypes.ts @@ -0,0 +1,5 @@ +export type EthersAddress = string; +export type Address = string; +export type Nullable = null | T; +export type SingleOrMultiple = T | T[]; +export type HandlerWithOptions = (fn: Fn, opt?: Opts) => void; diff --git a/packages/indexer/generated/src/bindings/RescriptMocha.res b/packages/indexer/generated/src/bindings/RescriptMocha.res new file mode 100644 index 0000000..52f857d --- /dev/null +++ b/packages/indexer/generated/src/bindings/RescriptMocha.res @@ -0,0 +1,123 @@ +module Assert = { + type assertion<'a> = ('a, 'a, ~message: string=?) => unit + + @module("assert") external equal: assertion<'a> = "equal" + @module("assert") external notEqual: assertion<'a> = "notEqual" + + @module("assert") external deepEqual: assertion<'a> = "deepEqual" + @module("assert") + external notDeepEqual: assertion<'a> = "notDeepEqual" + + @module("assert") external strictEqual: assertion<'a> = "strictEqual" + @module("assert") + external notStrictEqual: assertion<'a> = "notStrictEqual" + + @module("assert") + external deepStrictEqual: assertion<'a> = "deepStrictEqual" + @module("assert") + external notDeepStrictEqual: assertion<'a> = "notDeepStrictEqual" + + @module("assert") external ifError: 'a => unit = "ifError" + + @module("assert") + external throws: (unit => 'a, ~error: 'error=?, ~message: string=?) => unit = "throws" + @module("assert") + external doesNotThrow: (unit => 'a, ~error: 'error=?, ~message: string=?) => unit = "doesNotThrow" + + @module("assert") + external rejects: (unit => promise<'a>, ~error: 'error=?, ~message: string=?) => promise = + "rejects" + + @module("assert") external ok: (bool, ~message: string=?) => unit = "ok" + @module("assert") external fail: string => 'a = "fail" +} + +/* Mocha bindings on `this` for `describe` and `it` functions */ +module This = { + @val external timeout: int => unit = "this.timeout" + @val external retries: int => unit = "this.retries" + @val external slow: int => unit = "this.slow" + @val external skip: unit => unit = "this.skip" +} + +@val +external describe: (string, unit => unit) => unit = "describe" +@val +external describe_only: (string, unit => unit) => unit = "describe.only" +@val +external describe_skip: (string, unit => unit) => unit = "describe.skip" + +@val +external it: (string, unit => unit) => unit = "it" +@val +external it_only: (string, unit => unit) => unit = "it.only" +@val +external it_skip: (string, unit => unit) => unit = "it.skip" +@val +external before: (unit => unit) => unit = "before" +@val +external after: (unit => unit) => unit = "after" +@val +external beforeEach: (unit => unit) => unit = "beforeEach" +@val +external afterEach: (unit => unit) => unit = "afterEach" +@val +external beforeWithTitle: (string, unit => unit) => unit = "before" +@val +external afterWithTitle: (string, unit => unit) => unit = "after" +@val +external beforeEachWithTitle: (string, unit => unit) => unit = "beforeEach" +@val +external afterEachWithTitle: (string, unit => unit) => unit = "afterEach" + +module Async = { + @val + external it: (string, unit => promise) => unit = "it" + @val + external it_only: (string, unit => promise) => unit = "it.only" + @val + external it_skip: (string, unit => promise) => unit = "it.skip" + @val + external before: (unit => promise) => unit = "before" + @val + external after: (unit => promise) => unit = "after" + @val + external beforeEach: (unit => promise) => unit = "beforeEach" + @val + external afterEach: (unit => promise) => unit = "afterEach" + @val + external beforeWithTitle: (string, unit => promise) => unit = "before" + @val + external afterWithTitle: (string, unit => promise) => unit = "after" + @val + external beforeEachWithTitle: (string, unit => promise) => unit = "beforeEach" + @val + external afterEachWithTitle: (string, unit => promise) => unit = "afterEach" +} + +module DoneCallback = { + type doneCallback = Js.Nullable.t => unit + + @val + external it: (string, doneCallback => unit) => unit = "it" + @val + external it_only: (string, doneCallback => unit) => unit = "it.only" + @val + external it_skip: (string, doneCallback => unit) => unit = "it.skip" + @val + external before: (doneCallback => unit) => unit = "before" + @val + external after: (doneCallback => unit) => unit = "after" + @val + external beforeEach: (doneCallback => unit) => unit = "beforeEach" + @val + external afterEach: (doneCallback => unit) => unit = "afterEach" + @val + external beforeWithTitle: (string, doneCallback => unit) => unit = "before" + @val + external afterWithTitle: (string, doneCallback => unit) => unit = "after" + @val + external beforeEachWithTitle: (string, doneCallback => unit) => unit = "beforeEach" + @val + external afterEachWithTitle: (string, doneCallback => unit) => unit = "afterEach" +} diff --git a/packages/indexer/generated/src/bindings/Yargs.res b/packages/indexer/generated/src/bindings/Yargs.res new file mode 100644 index 0000000..2df5064 --- /dev/null +++ b/packages/indexer/generated/src/bindings/Yargs.res @@ -0,0 +1,8 @@ +type arg = string + +type parsedArgs<'a> = 'a + +@module external yargs: array => parsedArgs<'a> = "yargs/yargs" +@module("yargs/helpers") external hideBin: array => array = "hideBin" + +@get external argv: parsedArgs<'a> => 'a = "argv" diff --git a/packages/indexer/generated/src/db/Db.res b/packages/indexer/generated/src/db/Db.res new file mode 100644 index 0000000..571ee1a --- /dev/null +++ b/packages/indexer/generated/src/db/Db.res @@ -0,0 +1,30 @@ +// This is a module with all the global configuration of the DB +// Ideally it should be moved to the config and passed with it + +let makeClient = () => { + Postgres.makeSql( + ~config={ + host: Env.Db.host, + port: Env.Db.port, + username: Env.Db.user, + password: Env.Db.password, + database: Env.Db.database, + ssl: Env.Db.ssl, + // TODO: think how we want to pipe these logs to pino. + onnotice: ?( + Env.userLogLevel == #warn || Env.userLogLevel == #error ? None : Some(_str => ()) + ), + transform: {undefined: Null}, + max: 2, + // debug: (~connection, ~query, ~params as _, ~types as _) => Js.log2(connection, query), + }, + ) +} + +let publicSchema = Env.Db.publicSchema + +let allEntityTables: array = Entities.allEntities->Belt.Array.map(entityConfig => { + entityConfig.table +}) + +let schema = Schema.make(allEntityTables) diff --git a/packages/indexer/generated/src/db/DbFunctions.res b/packages/indexer/generated/src/db/DbFunctions.res new file mode 100644 index 0000000..f4d6ab9 --- /dev/null +++ b/packages/indexer/generated/src/db/DbFunctions.res @@ -0,0 +1,33 @@ +module General = { + type existsRes = {exists: bool} + + let hasRows = async (sql, ~table: Table.table) => { + let query = `SELECT EXISTS(SELECT 1 FROM "${Env.Db.publicSchema}"."${table.tableName}");` + switch await sql->Postgres.unsafe(query) { + | [{exists}] => exists + | _ => Js.Exn.raiseError("Unexpected result from hasRows query: " ++ query) + } + } +} + +module EntityHistory = { + let hasRows = async sql => { + let all = + await Entities.allEntities + ->Belt.Array.map(async entityConfig => { + try await General.hasRows(sql, ~table=entityConfig.entityHistory.table) catch { + | exn => + exn->ErrorHandling.mkLogAndRaise( + ~msg=`Failed to check if entity history table has rows`, + ~logger=Logging.createChild( + ~params={ + "entityName": entityConfig.name, + }, + ), + ) + } + }) + ->Promise.all + all->Belt.Array.some(v => v) + } +} diff --git a/packages/indexer/generated/src/db/DbFunctionsEntities.res b/packages/indexer/generated/src/db/DbFunctionsEntities.res new file mode 100644 index 0000000..f4b1564 --- /dev/null +++ b/packages/indexer/generated/src/db/DbFunctionsEntities.res @@ -0,0 +1,22 @@ +type id = string + +@module("./DbFunctionsImplementation.js") +external batchDeleteItemsInTable: ( + ~table: Table.table, + ~sql: Postgres.sql, + ~ids: array, +) => promise = "batchDeleteItemsInTable" + +let makeBatchDelete = (~table) => async (~logger=?, sql, ids) => + switch await batchDeleteItemsInTable(~table, ~sql, ~ids) { + | exception exn => + exn->ErrorHandling.mkLogAndRaise( + ~logger?, + ~msg=`Failed during batch delete of entity ${table.tableName}`, + ) + | res => res + } + +let batchDelete = (~entityConfig: Internal.entityConfig) => { + makeBatchDelete(~table=entityConfig.table) +} \ No newline at end of file diff --git a/packages/indexer/generated/src/db/DbFunctionsImplementation.js b/packages/indexer/generated/src/db/DbFunctionsImplementation.js new file mode 100644 index 0000000..d36a669 --- /dev/null +++ b/packages/indexer/generated/src/db/DbFunctionsImplementation.js @@ -0,0 +1,17 @@ +const TableModule = require("envio/src/db/Table.res.js"); +const { publicSchema } = require("./Db.res.js"); + +module.exports.batchDeleteItemsInTable = (table, sql, pkArray) => { + const primaryKeyFieldNames = TableModule.getPrimaryKeyFieldNames(table); + + if (primaryKeyFieldNames.length === 1) { + return sql` + DELETE + FROM ${sql(publicSchema)}.${sql(table.tableName)} + WHERE ${sql(primaryKeyFieldNames[0])} IN ${sql(pkArray)}; + `; + } else { + //TODO, if needed create a delete query for multiple field matches + //May be best to make pkArray an array of objects with fieldName -> value + } +}; diff --git a/packages/indexer/generated/src/db/Entities.gen.ts b/packages/indexer/generated/src/db/Entities.gen.ts new file mode 100644 index 0000000..82ed20d --- /dev/null +++ b/packages/indexer/generated/src/db/Entities.gen.ts @@ -0,0 +1,67 @@ +/* TypeScript file generated from Entities.res by genType. */ + +/* eslint-disable */ +/* tslint:disable */ + +export type id = string; + +export type whereOperations = { + readonly eq: (_1:fieldType) => Promise; + readonly gt: (_1:fieldType) => Promise; + readonly lt: (_1:fieldType) => Promise +}; + +export type Game_t = { + readonly highestTile: number; + readonly id: id; + readonly isActive: boolean; + readonly lastMoveAt: bigint; + readonly latestBoard: string; + readonly moveCount: number; + readonly player: string; + readonly score: number; + readonly startedAt: bigint; + readonly totalGasUsed: bigint; + readonly totalMonBurned: bigint +}; + +export type Game_indexedFieldOperations = { readonly player: whereOperations }; + +export type GameMove_t = { + readonly boardAfter: string; + readonly boardBefore: string; + readonly direction: number; + readonly gameId: string; + readonly gasPrice: bigint; + readonly gasUsed: bigint; + readonly id: id; + readonly monBurned: bigint; + readonly moveNumber: number; + readonly scoreDelta: number; + readonly timestamp: bigint; + readonly txHash: string +}; + +export type GameMove_indexedFieldOperations = { readonly gameId: whereOperations }; + +export type IndexerStatus_t = { + readonly chainId: number; + readonly id: id; + readonly isBackfilling: boolean; + readonly lastIndexedBlock: bigint; + readonly lastIndexedTimestamp: bigint; + readonly totalGamesIndexed: number +}; + +export type IndexerStatus_indexedFieldOperations = {}; + +export type Player_t = { + readonly bestGameId: (undefined | string); + readonly bestScore: number; + readonly id: id; + readonly totalGamesPlayed: number; + readonly totalMonBurned: bigint; + readonly totalMovesPlayed: number +}; + +export type Player_indexedFieldOperations = {}; diff --git a/packages/indexer/generated/src/db/Entities.res b/packages/indexer/generated/src/db/Entities.res new file mode 100644 index 0000000..cc84685 --- /dev/null +++ b/packages/indexer/generated/src/db/Entities.res @@ -0,0 +1,591 @@ +open Table +open Enums.EntityType +type id = string + +type internalEntity = Internal.entity +module type Entity = { + type t + let index: int + let name: string + let schema: S.t + let rowsSchema: S.t> + let table: Table.table + let entityHistory: EntityHistory.t +} +external entityModToInternal: module(Entity with type t = 'a) => Internal.entityConfig = "%identity" +external entityModsToInternal: array => array = "%identity" +external entitiesToInternal: array<'a> => array = "%identity" + +@get +external getEntityId: internalEntity => string = "id" + +// Use InMemoryTable.Entity.getEntityIdUnsafe instead of duplicating the logic +let getEntityIdUnsafe = InMemoryTable.Entity.getEntityIdUnsafe + +//shorthand for punning +let isPrimaryKey = true +let isNullable = true +let isArray = true +let isIndex = true + +@genType +type whereOperations<'entity, 'fieldType> = { + eq: 'fieldType => promise>, + gt: 'fieldType => promise>, + lt: 'fieldType => promise> +} + +module Game = { + let name = (Game :> string) + let index = 0 + @genType + type t = { + highestTile: int, + id: id, + isActive: bool, + lastMoveAt: bigint, + latestBoard: string, + moveCount: int, + player: string, + score: int, + startedAt: bigint, + totalGasUsed: bigint, + totalMonBurned: bigint, + } + + let schema = S.object((s): t => { + highestTile: s.field("highestTile", S.int), + id: s.field("id", S.string), + isActive: s.field("isActive", S.bool), + lastMoveAt: s.field("lastMoveAt", BigInt.schema), + latestBoard: s.field("latestBoard", S.string), + moveCount: s.field("moveCount", S.int), + player: s.field("player", S.string), + score: s.field("score", S.int), + startedAt: s.field("startedAt", BigInt.schema), + totalGasUsed: s.field("totalGasUsed", BigInt.schema), + totalMonBurned: s.field("totalMonBurned", BigInt.schema), + }) + + let rowsSchema = S.array(schema) + + @genType + type indexedFieldOperations = { + + @as("player") player: whereOperations, + + } + + let table = mkTable( + (name :> string), + ~fields=[ + mkField( + "highestTile", + Integer, + ~fieldSchema=S.int, + + + + + + ), + mkField( + "id", + Text, + ~fieldSchema=S.string, + ~isPrimaryKey, + + + + + ), + mkField( + "isActive", + Boolean, + ~fieldSchema=S.bool, + + + + + + ), + mkField( + "lastMoveAt", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "latestBoard", + Text, + ~fieldSchema=S.string, + + + + + + ), + mkField( + "moveCount", + Integer, + ~fieldSchema=S.int, + + + + + + ), + mkField( + "player", + Text, + ~fieldSchema=S.string, + + + + ~isIndex, + + ), + mkField( + "score", + Integer, + ~fieldSchema=S.int, + + + + + + ), + mkField( + "startedAt", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "totalGasUsed", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "totalMonBurned", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + ], + ) + + let entityHistory = table->EntityHistory.fromTable(~schema, ~entityIndex=index) + + external castToInternal: t => Internal.entity = "%identity" +} + +module GameMove = { + let name = (GameMove :> string) + let index = 1 + @genType + type t = { + boardAfter: string, + boardBefore: string, + direction: int, + gameId: string, + gasPrice: bigint, + gasUsed: bigint, + id: id, + monBurned: bigint, + moveNumber: int, + scoreDelta: int, + timestamp: bigint, + txHash: string, + } + + let schema = S.object((s): t => { + boardAfter: s.field("boardAfter", S.string), + boardBefore: s.field("boardBefore", S.string), + direction: s.field("direction", S.int), + gameId: s.field("gameId", S.string), + gasPrice: s.field("gasPrice", BigInt.schema), + gasUsed: s.field("gasUsed", BigInt.schema), + id: s.field("id", S.string), + monBurned: s.field("monBurned", BigInt.schema), + moveNumber: s.field("moveNumber", S.int), + scoreDelta: s.field("scoreDelta", S.int), + timestamp: s.field("timestamp", BigInt.schema), + txHash: s.field("txHash", S.string), + }) + + let rowsSchema = S.array(schema) + + @genType + type indexedFieldOperations = { + + @as("gameId") gameId: whereOperations, + + } + + let table = mkTable( + (name :> string), + ~fields=[ + mkField( + "boardAfter", + Text, + ~fieldSchema=S.string, + + + + + + ), + mkField( + "boardBefore", + Text, + ~fieldSchema=S.string, + + + + + + ), + mkField( + "direction", + Integer, + ~fieldSchema=S.int, + + + + + + ), + mkField( + "gameId", + Text, + ~fieldSchema=S.string, + + + + ~isIndex, + + ), + mkField( + "gasPrice", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "gasUsed", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "id", + Text, + ~fieldSchema=S.string, + ~isPrimaryKey, + + + + + ), + mkField( + "monBurned", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "moveNumber", + Integer, + ~fieldSchema=S.int, + + + + + + ), + mkField( + "scoreDelta", + Integer, + ~fieldSchema=S.int, + + + + + + ), + mkField( + "timestamp", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "txHash", + Text, + ~fieldSchema=S.string, + + + + + + ), + ], + ) + + let entityHistory = table->EntityHistory.fromTable(~schema, ~entityIndex=index) + + external castToInternal: t => Internal.entity = "%identity" +} + +module IndexerStatus = { + let name = (IndexerStatus :> string) + let index = 2 + @genType + type t = { + chainId: int, + id: id, + isBackfilling: bool, + lastIndexedBlock: bigint, + lastIndexedTimestamp: bigint, + totalGamesIndexed: int, + } + + let schema = S.object((s): t => { + chainId: s.field("chainId", S.int), + id: s.field("id", S.string), + isBackfilling: s.field("isBackfilling", S.bool), + lastIndexedBlock: s.field("lastIndexedBlock", BigInt.schema), + lastIndexedTimestamp: s.field("lastIndexedTimestamp", BigInt.schema), + totalGamesIndexed: s.field("totalGamesIndexed", S.int), + }) + + let rowsSchema = S.array(schema) + + @genType + type indexedFieldOperations = { + + } + + let table = mkTable( + (name :> string), + ~fields=[ + mkField( + "chainId", + Integer, + ~fieldSchema=S.int, + + + + + + ), + mkField( + "id", + Text, + ~fieldSchema=S.string, + ~isPrimaryKey, + + + + + ), + mkField( + "isBackfilling", + Boolean, + ~fieldSchema=S.bool, + + + + + + ), + mkField( + "lastIndexedBlock", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "lastIndexedTimestamp", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "totalGamesIndexed", + Integer, + ~fieldSchema=S.int, + + + + + + ), + ], + ) + + let entityHistory = table->EntityHistory.fromTable(~schema, ~entityIndex=index) + + external castToInternal: t => Internal.entity = "%identity" +} + +module Player = { + let name = (Player :> string) + let index = 3 + @genType + type t = { + bestGameId: option, + bestScore: int, + id: id, + totalGamesPlayed: int, + totalMonBurned: bigint, + totalMovesPlayed: int, + } + + let schema = S.object((s): t => { + bestGameId: s.field("bestGameId", S.null(S.string)), + bestScore: s.field("bestScore", S.int), + id: s.field("id", S.string), + totalGamesPlayed: s.field("totalGamesPlayed", S.int), + totalMonBurned: s.field("totalMonBurned", BigInt.schema), + totalMovesPlayed: s.field("totalMovesPlayed", S.int), + }) + + let rowsSchema = S.array(schema) + + @genType + type indexedFieldOperations = { + + } + + let table = mkTable( + (name :> string), + ~fields=[ + mkField( + "bestGameId", + Text, + ~fieldSchema=S.null(S.string), + + ~isNullable, + + + + ), + mkField( + "bestScore", + Integer, + ~fieldSchema=S.int, + + + + + + ), + mkField( + "id", + Text, + ~fieldSchema=S.string, + ~isPrimaryKey, + + + + + ), + mkField( + "totalGamesPlayed", + Integer, + ~fieldSchema=S.int, + + + + + + ), + mkField( + "totalMonBurned", + Numeric, + ~fieldSchema=BigInt.schema, + + + + + + ), + mkField( + "totalMovesPlayed", + Integer, + ~fieldSchema=S.int, + + + + + + ), + ], + ) + + let entityHistory = table->EntityHistory.fromTable(~schema, ~entityIndex=index) + + external castToInternal: t => Internal.entity = "%identity" +} + +let userEntities = [ + module(Game), + module(GameMove), + module(IndexerStatus), + module(Player), +]->entityModsToInternal + +let allEntities = + userEntities->Js.Array2.concat( + [module(InternalTable.DynamicContractRegistry)]->entityModsToInternal, + ) + +let byName = + allEntities + ->Js.Array2.map(entityConfig => { + (entityConfig.name, entityConfig) + }) + ->Js.Dict.fromArray diff --git a/packages/indexer/generated/src/db/Enums.gen.ts b/packages/indexer/generated/src/db/Enums.gen.ts new file mode 100644 index 0000000..577e21f --- /dev/null +++ b/packages/indexer/generated/src/db/Enums.gen.ts @@ -0,0 +1,13 @@ +/* TypeScript file generated from Enums.res by genType. */ + +/* eslint-disable */ +/* tslint:disable */ + +export type ContractType_t = "Monad2048"; + +export type EntityType_t = + "Game" + | "GameMove" + | "IndexerStatus" + | "Player" + | "dynamic_contract_registry"; diff --git a/packages/indexer/generated/src/db/Enums.res b/packages/indexer/generated/src/db/Enums.res new file mode 100644 index 0000000..fa4fca1 --- /dev/null +++ b/packages/indexer/generated/src/db/Enums.res @@ -0,0 +1,36 @@ +module ContractType = { + @genType + type t = + | @as("Monad2048") Monad2048 + + let name = "CONTRACT_TYPE" + let variants = [ + Monad2048, + ] + let config = Internal.makeEnumConfig(~name, ~variants) +} + +module EntityType = { + @genType + type t = + | @as("Game") Game + | @as("GameMove") GameMove + | @as("IndexerStatus") IndexerStatus + | @as("Player") Player + | @as("dynamic_contract_registry") DynamicContractRegistry + + let name = "ENTITY_TYPE" + let variants = [ + Game, + GameMove, + IndexerStatus, + Player, + DynamicContractRegistry, + ] + let config = Internal.makeEnumConfig(~name, ~variants) +} + +let allEnums = ([ + ContractType.config->Internal.fromGenericEnumConfig, + EntityType.config->Internal.fromGenericEnumConfig, +]) diff --git a/packages/indexer/generated/src/db/Migrations.res b/packages/indexer/generated/src/db/Migrations.res new file mode 100644 index 0000000..a293165 --- /dev/null +++ b/packages/indexer/generated/src/db/Migrations.res @@ -0,0 +1,57 @@ +let unsafe = Postgres.unsafe + +let deleteAllTables: unit => promise = async () => { + Logging.trace("Dropping all tables") + let query = ` + DO $$ + BEGIN + DROP SCHEMA IF EXISTS ${Env.Db.publicSchema} CASCADE; + CREATE SCHEMA ${Env.Db.publicSchema}; + GRANT ALL ON SCHEMA ${Env.Db.publicSchema} TO "${Env.Db.user}"; + GRANT ALL ON SCHEMA ${Env.Db.publicSchema} TO public; + END $$;` + + await Generated.codegenPersistence.sql->unsafe(query) +} + +type t +@module external process: t = "process" + +type exitCode = | @as(0) Success | @as(1) Failure +@send external exit: (t, exitCode) => unit = "exit" + +let runUpMigrations = async ( + ~shouldExit, + // Reset is used for db-setup + ~reset=false, +) => { + let config = Generated.configWithoutRegistrations + let exitCode = try { + await Generated.codegenPersistence->Persistence.init( + ~reset, + ~chainConfigs=config.chainMap->ChainMap.values, + ) + Success + } catch { + | _ => Failure + } + if shouldExit { + process->exit(exitCode) + } + exitCode +} + +let runDownMigrations = async (~shouldExit) => { + let exitCode = ref(Success) + await deleteAllTables()->Promise.catch(err => { + exitCode := Failure + err + ->ErrorHandling.make(~msg="EE804: Error dropping entity tables") + ->ErrorHandling.log + Promise.resolve() + }) + if shouldExit { + process->exit(exitCode.contents) + } + exitCode.contents +} diff --git a/packages/indexer/generated/src/eventFetching/ChainFetcher.res b/packages/indexer/generated/src/eventFetching/ChainFetcher.res new file mode 100644 index 0000000..312cb2a --- /dev/null +++ b/packages/indexer/generated/src/eventFetching/ChainFetcher.res @@ -0,0 +1,464 @@ +open Belt + +//A filter should return true if the event should be kept and isValid should return +//false when the filter should be removed/cleaned up +type processingFilter = { + filter: Internal.item => bool, + isValid: (~fetchState: FetchState.t) => bool, +} + +type t = { + logger: Pino.t, + fetchState: FetchState.t, + sourceManager: SourceManager.t, + chainConfig: Config.chain, + //The latest known block of the chain + currentBlockHeight: int, + isProgressAtHead: bool, + timestampCaughtUpToHeadOrEndblock: option, + committedProgressBlockNumber: int, + firstEventBlockNumber: option, + numEventsProcessed: int, + numBatchesFetched: int, + reorgDetection: ReorgDetection.t, + safeCheckpointTracking: option, +} + +//CONSTRUCTION +let make = ( + ~chainConfig: Config.chain, + ~dynamicContracts: array, + ~startBlock, + ~endBlock, + ~firstEventBlockNumber, + ~progressBlockNumber, + ~config: Config.t, + ~registrations: EventRegister.registrations, + ~targetBufferSize, + ~logger, + ~timestampCaughtUpToHeadOrEndblock, + ~numEventsProcessed, + ~numBatchesFetched, + ~isInReorgThreshold, + ~reorgCheckpoints: array, + ~maxReorgDepth, +): t => { + // We don't need the router itself, but only validation logic, + // since now event router is created for selection of events + // and validation doesn't work correctly in routers. + // Ideally to split it into two different parts. + let eventRouter = EventRouter.empty() + + // Aggregate events we want to fetch + let contracts = [] + let eventConfigs: array = [] + + let notRegisteredEvents = [] + + chainConfig.contracts->Array.forEach(contract => { + let contractName = contract.name + + contract.events->Array.forEach(eventConfig => { + let {isWildcard} = eventConfig + let hasContractRegister = eventConfig.contractRegister->Option.isSome + + // Should validate the events + eventRouter->EventRouter.addOrThrow( + eventConfig.id, + (), + ~contractName, + ~chain=ChainMap.Chain.makeUnsafe(~chainId=chainConfig.id), + ~eventName=eventConfig.name, + ~isWildcard, + ) + + // Filter out non-preRegistration events on preRegistration phase + // so we don't care about it in fetch state and workers anymore + let shouldBeIncluded = if config.enableRawEvents { + true + } else { + let isRegistered = hasContractRegister || eventConfig.handler->Option.isSome + if !isRegistered { + notRegisteredEvents->Array.push(eventConfig) + } + isRegistered + } + + if shouldBeIncluded { + eventConfigs->Array.push(eventConfig) + } + }) + + switch contract.startBlock { + | Some(startBlock) if startBlock < chainConfig.startBlock => + Js.Exn.raiseError( + `The start block for contract "${contractName}" is less than the chain start block. This is not supported yet.`, + ) + | _ => () + } + + contract.addresses->Array.forEach(address => { + contracts->Array.push({ + Internal.address, + contractName: contract.name, + startBlock: switch contract.startBlock { + | Some(startBlock) => startBlock + | None => chainConfig.startBlock + }, + registrationBlock: None, + }) + }) + }) + + dynamicContracts->Array.forEach(dc => contracts->Array.push(dc)) + + if notRegisteredEvents->Utils.Array.notEmpty { + logger->Logging.childInfo( + `The event${if notRegisteredEvents->Array.length > 1 { + "s" + } else { + "" + }} ${notRegisteredEvents + ->Array.map(eventConfig => `${eventConfig.contractName}.${eventConfig.name}`) + ->Js.Array2.joinWith(", ")} don't have an event handler and skipped for indexing.`, + ) + } + + let onBlockConfigs = + registrations.onBlockByChainId->Utils.Dict.dangerouslyGetNonOption(chainConfig.id->Int.toString) + switch onBlockConfigs { + | Some(onBlockConfigs) => + // TODO: Move it to the EventRegister module + // so the error is thrown with better stack trace + onBlockConfigs->Array.forEach(onBlockConfig => { + if onBlockConfig.startBlock->Option.getWithDefault(startBlock) < startBlock { + Js.Exn.raiseError( + `The start block for onBlock handler "${onBlockConfig.name}" is less than the chain start block (${startBlock->Belt.Int.toString}). This is not supported yet.`, + ) + } + switch endBlock { + | Some(chainEndBlock) => + if onBlockConfig.endBlock->Option.getWithDefault(chainEndBlock) > chainEndBlock { + Js.Exn.raiseError( + `The end block for onBlock handler "${onBlockConfig.name}" is greater than the chain end block (${chainEndBlock->Belt.Int.toString}). This is not supported yet.`, + ) + } + | None => () + } + }) + | None => () + } + + let fetchState = FetchState.make( + ~maxAddrInPartition=config.maxAddrInPartition, + ~contracts, + ~progressBlockNumber, + ~startBlock, + ~endBlock, + ~eventConfigs, + ~targetBufferSize, + ~chainId=chainConfig.id, + // FIXME: Shouldn't set with full history + ~blockLag=Pervasives.max( + !config.shouldRollbackOnReorg || isInReorgThreshold ? 0 : chainConfig.maxReorgDepth, + Env.indexingBlockLag->Option.getWithDefault(0), + ), + ~onBlockConfigs?, + ) + + let chainReorgCheckpoints = reorgCheckpoints->Array.keepMapU(reorgCheckpoint => { + if reorgCheckpoint.chainId === chainConfig.id { + Some(reorgCheckpoint) + } else { + None + } + }) + + { + logger, + chainConfig, + sourceManager: SourceManager.make( + ~sources=chainConfig.sources, + ~maxPartitionConcurrency=Env.maxPartitionConcurrency, + ), + reorgDetection: ReorgDetection.make( + ~chainReorgCheckpoints, + ~maxReorgDepth, + ~shouldRollbackOnReorg=config.shouldRollbackOnReorg, + ), + safeCheckpointTracking: SafeCheckpointTracking.make( + ~maxReorgDepth, + ~shouldRollbackOnReorg=config.shouldRollbackOnReorg, + ~chainReorgCheckpoints, + ), + currentBlockHeight: 0, + isProgressAtHead: false, + fetchState, + firstEventBlockNumber, + committedProgressBlockNumber: progressBlockNumber, + timestampCaughtUpToHeadOrEndblock, + numEventsProcessed, + numBatchesFetched, + } +} + +let makeFromConfig = (chainConfig: Config.chain, ~config, ~registrations, ~targetBufferSize) => { + let logger = Logging.createChild(~params={"chainId": chainConfig.id}) + + make( + ~chainConfig, + ~config, + ~registrations, + ~startBlock=chainConfig.startBlock, + ~endBlock=chainConfig.endBlock, + ~reorgCheckpoints=[], + ~maxReorgDepth=chainConfig.maxReorgDepth, + ~firstEventBlockNumber=None, + ~progressBlockNumber=-1, + ~timestampCaughtUpToHeadOrEndblock=None, + ~numEventsProcessed=0, + ~numBatchesFetched=0, + ~targetBufferSize, + ~logger, + ~dynamicContracts=[], + ~isInReorgThreshold=false, + ) +} + +/** + * This function allows a chain fetcher to be created from metadata, in particular this is useful for restarting an indexer and making sure it fetches blocks from the same place. + */ +let makeFromDbState = async ( + chainConfig: Config.chain, + ~resumedChainState: Persistence.initialChainState, + ~reorgCheckpoints, + ~isInReorgThreshold, + ~config, + ~registrations, + ~targetBufferSize, +) => { + let chainId = chainConfig.id + let logger = Logging.createChild(~params={"chainId": chainId}) + + Prometheus.ProgressEventsCount.set(~processedCount=resumedChainState.numEventsProcessed, ~chainId) + + let progressBlockNumber = + // Can be -1 when not set + resumedChainState.progressBlockNumber >= 0 + ? resumedChainState.progressBlockNumber + : resumedChainState.startBlock - 1 + + make( + ~dynamicContracts=resumedChainState.dynamicContracts, + ~chainConfig, + ~startBlock=resumedChainState.startBlock, + ~endBlock=resumedChainState.endBlock, + ~config, + ~registrations, + ~reorgCheckpoints, + ~maxReorgDepth=resumedChainState.maxReorgDepth, + ~firstEventBlockNumber=resumedChainState.firstEventBlockNumber, + ~progressBlockNumber, + ~timestampCaughtUpToHeadOrEndblock=Env.updateSyncTimeOnRestart + ? None + : resumedChainState.timestampCaughtUpToHeadOrEndblock, + ~numEventsProcessed=resumedChainState.numEventsProcessed, + ~numBatchesFetched=0, + ~logger, + ~targetBufferSize, + ~isInReorgThreshold, + ) +} + +/** + * Helper function to get the configured start block for a contract from config + */ +let getContractStartBlock = ( + config: Config.t, + ~chain: ChainMap.Chain.t, + ~contractName: string, +): option => { + let chainConfig = config.chainMap->ChainMap.get(chain) + chainConfig.contracts + ->Js.Array2.find(contract => contract.name === contractName) + ->Option.flatMap(contract => contract.startBlock) +} + +let runContractRegistersOrThrow = async ( + ~itemsWithContractRegister: array, + ~chain: ChainMap.Chain.t, + ~config: Config.t, +) => { + let itemsWithDcs = [] + + let onRegister = (~item: Internal.item, ~contractAddress, ~contractName) => { + let eventItem = item->Internal.castUnsafeEventItem + let {blockNumber} = eventItem + + // Use contract-specific start block if configured, otherwise fall back to registration block + let contractStartBlock = switch getContractStartBlock( + config, + ~chain, + ~contractName=(contractName: Enums.ContractType.t :> string), + ) { + | Some(configuredStartBlock) => configuredStartBlock + | None => blockNumber + } + + let dc: Internal.indexingContract = { + address: contractAddress, + contractName: (contractName: Enums.ContractType.t :> string), + startBlock: contractStartBlock, + registrationBlock: Some(blockNumber), + } + + switch item->Internal.getItemDcs { + | None => { + item->Internal.setItemDcs([dc]) + itemsWithDcs->Array.push(item) + } + | Some(dcs) => dcs->Array.push(dc) + } + } + + let promises = [] + for idx in 0 to itemsWithContractRegister->Array.length - 1 { + let item = itemsWithContractRegister->Array.getUnsafe(idx) + let eventItem = item->Internal.castUnsafeEventItem + let contractRegister = switch eventItem { + | {eventConfig: {contractRegister: Some(contractRegister)}} => contractRegister + | {eventConfig: {contractRegister: None, name: eventName}} => + // Unexpected case, since we should pass only events with contract register to this function + Js.Exn.raiseError("Contract register is not set for event " ++ eventName) + } + + let errorMessage = "Event contractRegister failed, please fix the error to keep the indexer running smoothly" + + // Catch sync and async errors + try { + let params: UserContext.contractRegisterParams = { + item, + onRegister, + config, + isResolved: false, + } + let result = contractRegister(UserContext.getContractRegisterArgs(params)) + + // Even though `contractRegister` always returns a promise, + // in the ReScript type, but it might return a non-promise value for TS API. + if result->Promise.isCatchable { + promises->Array.push( + result + ->Promise.thenResolve(r => { + params.isResolved = true + r + }) + ->Promise.catch(exn => { + params.isResolved = true + exn->ErrorHandling.mkLogAndRaise(~msg=errorMessage, ~logger=item->Logging.getItemLogger) + }), + ) + } else { + params.isResolved = true + } + } catch { + | exn => + exn->ErrorHandling.mkLogAndRaise(~msg=errorMessage, ~logger=item->Logging.getItemLogger) + } + } + + if promises->Utils.Array.notEmpty { + let _ = await Promise.all(promises) + } + + itemsWithDcs +} + +let handleQueryResult = ( + chainFetcher: t, + ~query: FetchState.query, + ~newItems, + ~newItemsWithDcs, + ~latestFetchedBlock, +) => { + let fs = switch newItemsWithDcs { + | [] => chainFetcher.fetchState + | _ => chainFetcher.fetchState->FetchState.registerDynamicContracts(newItemsWithDcs) + } + + fs + ->FetchState.handleQueryResult(~query, ~latestFetchedBlock, ~newItems) + ->Result.map(fs => { + ...chainFetcher, + fetchState: fs, + }) +} + +/** +Gets the latest item on the front of the queue and returns updated fetcher +*/ +let hasProcessedToEndblock = (self: t) => { + let {committedProgressBlockNumber, fetchState} = self + switch fetchState.endBlock { + | Some(endBlock) => committedProgressBlockNumber >= endBlock + | None => false + } +} + +let hasNoMoreEventsToProcess = (self: t) => { + self.fetchState->FetchState.bufferSize === 0 +} + +let getHighestBlockBelowThreshold = (cf: t): int => { + let highestBlockBelowThreshold = cf.currentBlockHeight - cf.chainConfig.maxReorgDepth + highestBlockBelowThreshold < 0 ? 0 : highestBlockBelowThreshold +} + +/** +Finds the last known valid block number below the reorg block +If not found, returns the highest block below threshold +*/ +let getLastKnownValidBlock = async ( + chainFetcher: t, + ~reorgBlockNumber: int, + //Parameter used for dependency injecting in tests + ~getBlockHashes=(chainFetcher.sourceManager->SourceManager.getActiveSource).getBlockHashes, +) => { + // Improtant: It's important to not include the reorg detection block number + // because there might be different instances of the source + // with mismatching hashes between them. + // So we MUST always rollback the block number where we detected a reorg. + let scannedBlockNumbers = + chainFetcher.reorgDetection->ReorgDetection.getThresholdBlockNumbersBelowBlock( + ~blockNumber=reorgBlockNumber, + ~currentBlockHeight=chainFetcher.currentBlockHeight, + ) + + let getBlockHashes = blockNumbers => { + getBlockHashes(~blockNumbers, ~logger=chainFetcher.logger)->Promise.thenResolve(res => + switch res { + | Ok(v) => v + | Error(exn) => + exn->ErrorHandling.mkLogAndRaise( + ~msg="Failed to fetch blockHashes for given blockNumbers during rollback", + ) + } + ) + } + + switch scannedBlockNumbers { + | [] => chainFetcher->getHighestBlockBelowThreshold + | _ => { + let blockNumbersAndHashes = await getBlockHashes(scannedBlockNumbers) + + switch chainFetcher.reorgDetection->ReorgDetection.getLatestValidScannedBlock( + ~blockNumbersAndHashes, + ) { + | Some(blockNumber) => blockNumber + | None => chainFetcher->getHighestBlockBelowThreshold + } + } + } +} + +let isActivelyIndexing = (chainFetcher: t) => chainFetcher.fetchState->FetchState.isActivelyIndexing diff --git a/packages/indexer/generated/src/eventFetching/ChainManager.res b/packages/indexer/generated/src/eventFetching/ChainManager.res new file mode 100644 index 0000000..11bce6b --- /dev/null +++ b/packages/indexer/generated/src/eventFetching/ChainManager.res @@ -0,0 +1,174 @@ +open Belt + +type t = { + committedCheckpointId: int, + chainFetchers: ChainMap.t, + multichain: Config.multichain, + isInReorgThreshold: bool, +} + +let calculateTargetBufferSize = (~activeChainsCount, ~config: Config.t) => { + let targetBatchesInBuffer = 3 + switch Env.targetBufferSize { + | Some(size) => size + | None => + config.batchSize * (activeChainsCount > targetBatchesInBuffer ? 1 : targetBatchesInBuffer) + } +} + +let makeFromConfig = (~config: Config.t, ~registrations): t => { + let targetBufferSize = calculateTargetBufferSize( + ~activeChainsCount=config.chainMap->ChainMap.size, + ~config, + ) + let chainFetchers = + config.chainMap->ChainMap.map( + ChainFetcher.makeFromConfig(_, ~config, ~registrations, ~targetBufferSize), + ) + { + committedCheckpointId: 0, + chainFetchers, + multichain: config.multichain, + isInReorgThreshold: false, + } +} + +let makeFromDbState = async ( + ~initialState: Persistence.initialState, + ~config: Config.t, + ~registrations, + ~persistence: Persistence.t, +): t => { + let isInReorgThreshold = if initialState.cleanRun { + false + } else { + // TODO: Move to Persistence.initialState + // Since now it's possible not to have rows in the history table + // even after the indexer started saving history (entered reorg threshold), + // This rows check might incorrectly return false for recovering the isInReorgThreshold option. + // But this is not a problem. There's no history anyways, and the indexer will be able to + // correctly calculate isInReorgThreshold as it starts. + let hasStartedSavingHistory = await persistence.sql->DbFunctions.EntityHistory.hasRows + + //If we have started saving history, continue to save history + //as regardless of whether we are still in a reorg threshold + hasStartedSavingHistory + } + + let targetBufferSize = calculateTargetBufferSize( + ~activeChainsCount=initialState.chains->Array.length, + ~config, + ) + Prometheus.ProcessingMaxBatchSize.set(~maxBatchSize=config.batchSize) + Prometheus.IndexingTargetBufferSize.set(~targetBufferSize) + Prometheus.ReorgThreshold.set(~isInReorgThreshold) + initialState.cache->Utils.Dict.forEach(({effectName, count}) => { + Prometheus.EffectCacheCount.set(~count, ~effectName) + }) + + let chainFetchersArr = + await initialState.chains + ->Array.map(async (resumedChainState: Persistence.initialChainState) => { + let chain = Config.getChain(config, ~chainId=resumedChainState.id) + let chainConfig = config.chainMap->ChainMap.get(chain) + + ( + chain, + await chainConfig->ChainFetcher.makeFromDbState( + ~resumedChainState, + ~reorgCheckpoints=initialState.reorgCheckpoints, + ~isInReorgThreshold, + ~targetBufferSize, + ~config, + ~registrations, + ), + ) + }) + ->Promise.all + + let chainFetchers = ChainMap.fromArrayUnsafe(chainFetchersArr) + + { + committedCheckpointId: initialState.checkpointId, + multichain: config.multichain, + chainFetchers, + isInReorgThreshold, + } +} + +let getChainFetcher = (chainManager: t, ~chain: ChainMap.Chain.t): ChainFetcher.t => { + chainManager.chainFetchers->ChainMap.get(chain) +} + +let setChainFetcher = (chainManager: t, chainFetcher: ChainFetcher.t) => { + { + ...chainManager, + chainFetchers: chainManager.chainFetchers->ChainMap.set( + ChainMap.Chain.makeUnsafe(~chainId=chainFetcher.chainConfig.id), + chainFetcher, + ), + } +} + +let nextItemIsNone = (chainManager: t): bool => { + !Batch.hasMultichainReadyItem( + chainManager.chainFetchers->ChainMap.map(cf => { + cf.fetchState + }), + ~multichain=chainManager.multichain, + ) +} + +let createBatch = (chainManager: t, ~batchSizeTarget: int): Batch.t => { + Batch.make( + ~checkpointIdBeforeBatch=chainManager.committedCheckpointId, + ~chainsBeforeBatch=chainManager.chainFetchers->ChainMap.map((cf): Batch.chainBeforeBatch => { + fetchState: cf.fetchState, + progressBlockNumber: cf.committedProgressBlockNumber, + totalEventsProcessed: cf.numEventsProcessed, + sourceBlockNumber: cf.currentBlockHeight, + reorgDetection: cf.reorgDetection, + }), + ~multichain=chainManager.multichain, + ~batchSizeTarget, + ) +} + +let isProgressAtHead = chainManager => + chainManager.chainFetchers + ->ChainMap.values + ->Js.Array2.every(cf => cf.isProgressAtHead) + +let isActivelyIndexing = chainManager => + chainManager.chainFetchers + ->ChainMap.values + ->Js.Array2.every(ChainFetcher.isActivelyIndexing) + +let getSafeCheckpointId = (chainManager: t) => { + let chainFetchers = chainManager.chainFetchers->ChainMap.values + + let infinity = (%raw(`Infinity`): int) + let result = ref(infinity) + + for idx in 0 to chainFetchers->Array.length - 1 { + let chainFetcher = chainFetchers->Array.getUnsafe(idx) + switch chainFetcher.safeCheckpointTracking { + | None => () // Skip chains with maxReorgDepth = 0 + | Some(safeCheckpointTracking) => { + let safeCheckpointId = + safeCheckpointTracking->SafeCheckpointTracking.getSafeCheckpointId( + ~sourceBlockNumber=chainFetcher.currentBlockHeight, + ) + if safeCheckpointId < result.contents { + result := safeCheckpointId + } + } + } + } + + if result.contents === infinity || result.contents === 0 { + None // No safe checkpoint found + } else { + Some(result.contents) + } +} diff --git a/packages/indexer/generated/src/eventFetching/NetworkSources.res b/packages/indexer/generated/src/eventFetching/NetworkSources.res new file mode 100644 index 0000000..71756ae --- /dev/null +++ b/packages/indexer/generated/src/eventFetching/NetworkSources.res @@ -0,0 +1,93 @@ +open Belt + +type rpc = { + url: string, + sourceFor: Source.sourceFor, + syncConfig?: Config.sourceSyncOptions, +} + +let getSyncConfig = ( + { + ?initialBlockInterval, + ?backoffMultiplicative, + ?accelerationAdditive, + ?intervalCeiling, + ?backoffMillis, + ?queryTimeoutMillis, + ?fallbackStallTimeout, + }: Config.sourceSyncOptions, +): Config.sourceSync => { + let queryTimeoutMillis = queryTimeoutMillis->Option.getWithDefault(20_000) + { + initialBlockInterval: Env.Configurable.SyncConfig.initialBlockInterval->Option.getWithDefault( + initialBlockInterval->Option.getWithDefault(10_000), + ), + // After an RPC error, how much to scale back the number of blocks requested at once + backoffMultiplicative: Env.Configurable.SyncConfig.backoffMultiplicative->Option.getWithDefault( + backoffMultiplicative->Option.getWithDefault(0.8), + ), + // Without RPC errors or timeouts, how much to increase the number of blocks requested by for the next batch + accelerationAdditive: Env.Configurable.SyncConfig.accelerationAdditive->Option.getWithDefault( + accelerationAdditive->Option.getWithDefault(500), + ), + // Do not further increase the block interval past this limit + intervalCeiling: Env.Configurable.SyncConfig.intervalCeiling->Option.getWithDefault( + intervalCeiling->Option.getWithDefault(10_000), + ), + // After an error, how long to wait before retrying + backoffMillis: backoffMillis->Option.getWithDefault(5000), + // How long to wait before cancelling an RPC request + queryTimeoutMillis, + fallbackStallTimeout: fallbackStallTimeout->Option.getWithDefault(queryTimeoutMillis / 2), + } +} + +let evm = ( + ~chain, + ~contracts: array, + ~hyperSync, + ~allEventSignatures, + ~shouldUseHypersyncClientDecoder, + ~rpcs: array, + ~lowercaseAddresses, +) => { + let eventRouter = + contracts + ->Belt.Array.flatMap(contract => contract.events) + ->EventRouter.fromEvmEventModsOrThrow(~chain) + + let sources = switch hyperSync { + | Some(endpointUrl) => [ + HyperSyncSource.make({ + chain, + contracts, + endpointUrl, + allEventSignatures, + eventRouter, + shouldUseHypersyncClientDecoder, + apiToken: Env.envioApiToken, + clientMaxRetries: Env.hyperSyncClientMaxRetries, + clientTimeoutMillis: Env.hyperSyncClientTimeoutMillis, + lowercaseAddresses, + }), + ] + | _ => [] + } + rpcs->Js.Array2.forEach(({?syncConfig, url, sourceFor}) => { + let _ = sources->Js.Array2.push( + RpcSource.make({ + chain, + sourceFor, + contracts, + syncConfig: getSyncConfig(syncConfig->Option.getWithDefault({})), + url, + eventRouter, + allEventSignatures, + shouldUseHypersyncClientDecoder, + lowercaseAddresses, + }), + ) + }) + + sources +} diff --git a/packages/indexer/generated/src/globalState/GlobalState.res b/packages/indexer/generated/src/globalState/GlobalState.res new file mode 100644 index 0000000..5a0cdbd --- /dev/null +++ b/packages/indexer/generated/src/globalState/GlobalState.res @@ -0,0 +1,1168 @@ +open Belt + +type chain = ChainMap.Chain.t +type rollbackState = + | NoRollback + | ReorgDetected({chain: chain, blockNumber: int}) + | FindingReorgDepth + | FoundReorgDepth({chain: chain, rollbackTargetBlockNumber: int}) + | RollbackReady({diffInMemoryStore: InMemoryStore.t, eventsProcessedDiffByChain: dict}) + +module WriteThrottlers = { + type t = { + chainMetaData: Throttler.t, + pruneStaleEntityHistory: Throttler.t, + } + let make = (): t => { + let chainMetaData = { + let intervalMillis = Env.ThrottleWrites.chainMetadataIntervalMillis + let logger = Logging.createChild( + ~params={ + "context": "Throttler for chain metadata writes", + "intervalMillis": intervalMillis, + }, + ) + Throttler.make(~intervalMillis, ~logger) + } + + let pruneStaleEntityHistory = { + let intervalMillis = Env.ThrottleWrites.pruneStaleDataIntervalMillis + let logger = Logging.createChild( + ~params={ + "context": "Throttler for pruning stale entity history data", + "intervalMillis": intervalMillis, + }, + ) + Throttler.make(~intervalMillis, ~logger) + } + {chainMetaData, pruneStaleEntityHistory} + } +} + +type t = { + indexer: Indexer.t, + chainManager: ChainManager.t, + processedBatches: int, + currentlyProcessingBatch: bool, + rollbackState: rollbackState, + indexerStartTime: Js.Date.t, + writeThrottlers: WriteThrottlers.t, + loadManager: LoadManager.t, + keepProcessAlive: bool, + //Initialized as 0, increments, when rollbacks occur to invalidate + //responses based on the wrong stateId + id: int, +} + +let make = ( + ~indexer: Indexer.t, + ~chainManager: ChainManager.t, + ~isDevelopmentMode=false, + ~shouldUseTui=false, +) => { + { + indexer, + currentlyProcessingBatch: false, + processedBatches: 0, + chainManager, + indexerStartTime: Js.Date.make(), + rollbackState: NoRollback, + writeThrottlers: WriteThrottlers.make(), + loadManager: LoadManager.make(), + keepProcessAlive: isDevelopmentMode || shouldUseTui, + id: 0, + } +} + +let getId = self => self.id +let incrementId = self => {...self, id: self.id + 1} +let setChainManager = (self, chainManager) => { + ...self, + chainManager, +} + +let isPreparingRollback = state => + switch state.rollbackState { + | NoRollback + | // We already updated fetch states here + // so we treat it as not rolling back + RollbackReady(_) => false + | FindingReorgDepth + | ReorgDetected(_) + | FoundReorgDepth(_) => true + } + +type partitionQueryResponse = { + chain: chain, + response: Source.blockRangeFetchResponse, + query: FetchState.query, +} + +type shouldExit = ExitWithSuccess | NoExit + +// Need to dispatch an action for every async operation +// to get access to the latest state. +type action = + // After a response is received, we validate it with the new state + // if there's no reorg to continue processing the response. + | ValidatePartitionQueryResponse(partitionQueryResponse) + // This should be a separate action from ValidatePartitionQueryResponse + // because when processing the response, there might be an async contract registration. + // So after it's finished we dispatch the submit action to get the latest fetch state. + | SubmitPartitionQueryResponse({ + newItems: array, + newItemsWithDcs: array, + currentBlockHeight: int, + latestFetchedBlock: FetchState.blockNumberAndTimestamp, + query: FetchState.query, + chain: chain, + }) + | FinishWaitingForNewBlock({chain: chain, currentBlockHeight: int}) + | EventBatchProcessed({batch: Batch.t}) + | StartProcessingBatch + | StartFindingReorgDepth + | FindReorgDepth({chain: chain, rollbackTargetBlockNumber: int}) + | EnterReorgThreshold + | UpdateQueues({ + progressedChainsById: dict, + // Needed to prevent overwriting the blockLag + // set by EnterReorgThreshold + shouldEnterReorgThreshold: bool, + }) + | SuccessExit + | ErrorExit(ErrorHandling.t) + | SetRollbackState({ + diffInMemoryStore: InMemoryStore.t, + rollbackedChainManager: ChainManager.t, + eventsProcessedDiffByChain: dict, + }) + +type queryChain = CheckAllChains | Chain(chain) +type task = + | NextQuery(queryChain) + | ProcessPartitionQueryResponse(partitionQueryResponse) + | ProcessEventBatch + | UpdateChainMetaDataAndCheckForExit(shouldExit) + | Rollback + | PruneStaleEntityHistory + +let updateChainFetcherCurrentBlockHeight = (chainFetcher: ChainFetcher.t, ~currentBlockHeight) => { + if currentBlockHeight > chainFetcher.currentBlockHeight { + Prometheus.setSourceChainHeight( + ~blockNumber=currentBlockHeight, + ~chainId=chainFetcher.chainConfig.id, + ) + + { + ...chainFetcher, + currentBlockHeight, + } + } else { + chainFetcher + } +} + +let updateChainMetadataTable = ( + cm: ChainManager.t, + ~persistence: Persistence.t, + ~throttler: Throttler.t, +) => { + let chainsData: dict = Js.Dict.empty() + + cm.chainFetchers + ->ChainMap.values + ->Belt.Array.forEach(cf => { + chainsData->Js.Dict.set( + cf.chainConfig.id->Belt.Int.toString, + { + blockHeight: cf.currentBlockHeight, + firstEventBlockNumber: cf.firstEventBlockNumber->Js.Null.fromOption, + isHyperSync: (cf.sourceManager->SourceManager.getActiveSource).poweredByHyperSync, + latestFetchedBlockNumber: cf.fetchState->FetchState.bufferBlockNumber, + timestampCaughtUpToHeadOrEndblock: cf.timestampCaughtUpToHeadOrEndblock->Js.Null.fromOption, + numBatchesFetched: cf.numBatchesFetched, + }, + ) + }) + + //Don't await this set, it can happen in its own time + throttler->Throttler.schedule(() => + persistence.sql + ->InternalTable.Chains.setMeta(~pgSchema=Db.publicSchema, ~chainsData) + ->Promise.ignoreValue + ) +} + +/** +Takes in a chain manager and sets all chains timestamp caught up to head +when valid state lines up and returns an updated chain manager +*/ +let updateProgressedChains = (chainManager: ChainManager.t, ~batch: Batch.t) => { + Prometheus.ProgressBatchCount.increment() + + let nextQueueItemIsNone = chainManager->ChainManager.nextItemIsNone + + let allChainsAtHead = chainManager->ChainManager.isProgressAtHead + //Update the timestampCaughtUpToHeadOrEndblock values + let chainFetchers = chainManager.chainFetchers->ChainMap.map(cf => { + let chain = ChainMap.Chain.makeUnsafe(~chainId=cf.chainConfig.id) + + let maybeChainAfterBatch = + batch.progressedChainsById->Utils.Dict.dangerouslyGetByIntNonOption( + chain->ChainMap.Chain.toChainId, + ) + + let cf = switch maybeChainAfterBatch { + | Some(chainAfterBatch) => { + if cf.committedProgressBlockNumber !== chainAfterBatch.progressBlockNumber { + Prometheus.ProgressBlockNumber.set( + ~blockNumber=chainAfterBatch.progressBlockNumber, + ~chainId=chain->ChainMap.Chain.toChainId, + ) + } + if cf.numEventsProcessed !== chainAfterBatch.totalEventsProcessed { + Prometheus.ProgressEventsCount.set( + ~processedCount=chainAfterBatch.totalEventsProcessed, + ~chainId=chain->ChainMap.Chain.toChainId, + ) + } + + // Calculate and set latency metrics + switch batch->Batch.findLastEventItem(~chainId=chain->ChainMap.Chain.toChainId) { + | Some(eventItem) => { + let blockTimestamp = eventItem.event.block->Types.Block.getTimestamp + let currentTimeMs = Js.Date.now()->Float.toInt + let blockTimestampMs = blockTimestamp * 1000 + let latencyMs = currentTimeMs - blockTimestampMs + + Prometheus.ProgressLatency.set(~latencyMs, ~chainId=chain->ChainMap.Chain.toChainId) + } + | None => () + } + + { + ...cf, + // Since we process per chain always in order, + // we need to calculate it once, by using the first item in a batch + firstEventBlockNumber: switch cf.firstEventBlockNumber { + | Some(_) => cf.firstEventBlockNumber + | None => batch->Batch.findFirstEventBlockNumber(~chainId=chain->ChainMap.Chain.toChainId) + }, + committedProgressBlockNumber: chainAfterBatch.progressBlockNumber, + numEventsProcessed: chainAfterBatch.totalEventsProcessed, + isProgressAtHead: cf.isProgressAtHead || chainAfterBatch.isProgressAtHeadWhenBatchCreated, + safeCheckpointTracking: switch cf.safeCheckpointTracking { + | Some(safeCheckpointTracking) => + Some( + safeCheckpointTracking->SafeCheckpointTracking.updateOnNewBatch( + ~sourceBlockNumber=cf.currentBlockHeight, + ~chainId=chain->ChainMap.Chain.toChainId, + ~batchCheckpointIds=batch.checkpointIds, + ~batchCheckpointBlockNumbers=batch.checkpointBlockNumbers, + ~batchCheckpointChainIds=batch.checkpointChainIds, + ), + ) + | None => None + }, + } + } + | None => cf + } + + /* strategy for TUI synced status: + * Firstly -> only update synced status after batch is processed (not on batch creation). But also set when a batch tries to be created and there is no batch + * + * Secondly -> reset timestampCaughtUpToHead and isFetching at head when dynamic contracts get registered to a chain if they are not within 0.001 percent of the current block height + * + * New conditions for valid synced: + * + * CASE 1 (chains are being synchronised at the head) + * + * All chain fetchers are fetching at the head AND + * No events that can be processed on the queue (even if events still exist on the individual queues) + * CASE 2 (chain finishes earlier than any other chain) + * + * CASE 3 endblock has been reached and latest processed block is greater than or equal to endblock (both fields must be Some) + * + * The given chain fetcher is fetching at the head or latest processed block >= endblock + * The given chain has processed all events on the queue + * see https://github.com/Float-Capital/indexer/pull/1388 */ + if cf->ChainFetcher.hasProcessedToEndblock { + // in the case this is already set, don't reset and instead propagate the existing value + let timestampCaughtUpToHeadOrEndblock = + cf.timestampCaughtUpToHeadOrEndblock->Option.isSome + ? cf.timestampCaughtUpToHeadOrEndblock + : Js.Date.make()->Some + { + ...cf, + timestampCaughtUpToHeadOrEndblock, + } + } else if cf.timestampCaughtUpToHeadOrEndblock->Option.isNone && cf.isProgressAtHead { + //Only calculate and set timestampCaughtUpToHeadOrEndblock if chain fetcher is at the head and + //its not already set + //CASE1 + //All chains are caught up to head chainManager queue returns None + //Meaning we are busy synchronizing chains at the head + if nextQueueItemIsNone && allChainsAtHead { + { + ...cf, + timestampCaughtUpToHeadOrEndblock: Js.Date.make()->Some, + } + } else { + //CASE2 -> Only calculate if case1 fails + //All events have been processed on the chain fetchers queue + //Other chains may be busy syncing + let hasNoMoreEventsToProcess = cf->ChainFetcher.hasNoMoreEventsToProcess + + if hasNoMoreEventsToProcess { + { + ...cf, + timestampCaughtUpToHeadOrEndblock: Js.Date.make()->Some, + } + } else { + //Default to just returning cf + cf + } + } + } else { + //Default to just returning cf + cf + } + }) + + let allChainsSyncedAtHead = + chainFetchers + ->ChainMap.values + ->Array.every(cf => cf.timestampCaughtUpToHeadOrEndblock->Option.isSome) + + if allChainsSyncedAtHead { + Prometheus.setAllChainsSyncedToHead() + } + + { + ...chainManager, + committedCheckpointId: switch batch.checkpointIds->Utils.Array.last { + | Some(checkpointId) => checkpointId + | None => chainManager.committedCheckpointId + }, + chainFetchers, + } +} + +let validatePartitionQueryResponse = ( + state, + {chain, response, query} as partitionQueryResponse: partitionQueryResponse, +) => { + let chainFetcher = state.chainManager.chainFetchers->ChainMap.get(chain) + let { + parsedQueueItems, + latestFetchedBlockNumber, + stats, + currentBlockHeight, + reorgGuard, + fromBlockQueried, + } = response + + if currentBlockHeight > chainFetcher.currentBlockHeight { + Prometheus.SourceHeight.set( + ~blockNumber=currentBlockHeight, + ~chainId=chainFetcher.chainConfig.id, + // The currentBlockHeight from response won't necessarily + // belong to the currently active source. + // But for simplicity, assume it does. + ~sourceName=(chainFetcher.sourceManager->SourceManager.getActiveSource).name, + ) + } + + if Env.Benchmark.shouldSaveData { + Benchmark.addBlockRangeFetched( + ~totalTimeElapsed=stats.totalTimeElapsed, + ~parsingTimeElapsed=stats.parsingTimeElapsed->Belt.Option.getWithDefault(0), + ~pageFetchTime=stats.pageFetchTime->Belt.Option.getWithDefault(0), + ~chainId=chain->ChainMap.Chain.toChainId, + ~fromBlock=fromBlockQueried, + ~toBlock=latestFetchedBlockNumber, + ~numEvents=parsedQueueItems->Array.length, + ~numAddresses=query.addressesByContractName->FetchState.addressesByContractNameCount, + ~queryName=switch query { + | {target: Merge(_)} => `Merge Query` + | {selection: {dependsOnAddresses: false}} => `Wildcard Query` + | {selection: {dependsOnAddresses: true}} => `Normal Query` + }, + ) + } + + let (updatedReorgDetection, reorgResult: ReorgDetection.reorgResult) = + chainFetcher.reorgDetection->ReorgDetection.registerReorgGuard(~reorgGuard, ~currentBlockHeight) + + let updatedChainFetcher = { + ...chainFetcher, + reorgDetection: updatedReorgDetection, + } + + let nextState = { + ...state, + chainManager: { + ...state.chainManager, + chainFetchers: state.chainManager.chainFetchers->ChainMap.set(chain, updatedChainFetcher), + }, + } + + let rollbackWithReorgDetectedBlockNumber = switch reorgResult { + | ReorgDetected(reorgDetected) => { + chainFetcher.logger->Logging.childInfo( + reorgDetected->ReorgDetection.reorgDetectedToLogParams( + ~shouldRollbackOnReorg=state.indexer.config.shouldRollbackOnReorg, + ), + ) + Prometheus.ReorgCount.increment(~chain) + Prometheus.ReorgDetectionBlockNumber.set( + ~blockNumber=reorgDetected.scannedBlock.blockNumber, + ~chain, + ) + if state.indexer.config.shouldRollbackOnReorg { + Some(reorgDetected.scannedBlock.blockNumber) + } else { + None + } + } + | NoReorg => None + } + + switch rollbackWithReorgDetectedBlockNumber { + | None => (nextState, [ProcessPartitionQueryResponse(partitionQueryResponse)]) + | Some(reorgDetectedBlockNumber) => { + let chainManager = switch state.rollbackState { + | RollbackReady({eventsProcessedDiffByChain}) => { + ...state.chainManager, + chainFetchers: state.chainManager.chainFetchers->ChainMap.update(chain, chainFetcher => { + switch eventsProcessedDiffByChain->Utils.Dict.dangerouslyGetByIntNonOption( + chain->ChainMap.Chain.toChainId, + ) { + | Some(eventsProcessedDiff) => { + ...chainFetcher, + // Since we detected a reorg, until rollback wasn't completed in the db + // We return the events processed counter to the pre-rollback value, + // to decrease it once more for the new rollback. + numEventsProcessed: chainFetcher.numEventsProcessed + eventsProcessedDiff, + } + | None => chainFetcher + } + }), + } + | _ => state.chainManager + } + ( + { + ...nextState->incrementId, + chainManager, + rollbackState: ReorgDetected({ + chain, + blockNumber: reorgDetectedBlockNumber, + }), + }, + [Rollback], + ) + } + } +} + +let submitPartitionQueryResponse = ( + state, + ~newItems, + ~newItemsWithDcs, + ~currentBlockHeight, + ~latestFetchedBlock, + ~query, + ~chain, +) => { + let chainFetcher = state.chainManager.chainFetchers->ChainMap.get(chain) + + let updatedChainFetcher = + chainFetcher + ->ChainFetcher.handleQueryResult(~query, ~latestFetchedBlock, ~newItems, ~newItemsWithDcs) + ->Utils.unwrapResultExn + ->updateChainFetcherCurrentBlockHeight(~currentBlockHeight) + + let updatedChainFetcher = { + ...updatedChainFetcher, + numBatchesFetched: updatedChainFetcher.numBatchesFetched + 1, + } + + if !chainFetcher.isProgressAtHead && updatedChainFetcher.isProgressAtHead { + updatedChainFetcher.logger->Logging.childInfo("All events have been fetched") + } + + let nextState = { + ...state, + chainManager: { + ...state.chainManager, + chainFetchers: state.chainManager.chainFetchers->ChainMap.set(chain, updatedChainFetcher), + }, + } + + ( + nextState, + [UpdateChainMetaDataAndCheckForExit(NoExit), ProcessEventBatch, NextQuery(Chain(chain))], + ) +} + +let processPartitionQueryResponse = async ( + state, + {chain, response, query}: partitionQueryResponse, + ~dispatchAction, +) => { + let { + parsedQueueItems, + latestFetchedBlockNumber, + currentBlockHeight, + latestFetchedBlockTimestamp, + } = response + + let itemsWithContractRegister = [] + let newItems = [] + + for idx in 0 to parsedQueueItems->Array.length - 1 { + let item = parsedQueueItems->Array.getUnsafe(idx) + let eventItem = item->Internal.castUnsafeEventItem + if eventItem.eventConfig.contractRegister !== None { + itemsWithContractRegister->Array.push(item) + } + + // TODO: Don't really need to keep it in the queue + // when there's no handler (besides raw_events, processed counter, and dcsToStore consuming) + newItems->Array.push(item) + } + + let newItemsWithDcs = switch itemsWithContractRegister { + | [] as empty => empty + | _ => + await ChainFetcher.runContractRegistersOrThrow( + ~itemsWithContractRegister, + ~chain, + ~config=state.indexer.config, + ) + } + + dispatchAction( + SubmitPartitionQueryResponse({ + newItems, + newItemsWithDcs, + currentBlockHeight, + latestFetchedBlock: { + blockNumber: latestFetchedBlockNumber, + blockTimestamp: latestFetchedBlockTimestamp, + }, + chain, + query, + }), + ) +} + +let updateChainFetcher = (chainFetcherUpdate, ~state, ~chain) => { + ( + { + ...state, + chainManager: { + ...state.chainManager, + chainFetchers: state.chainManager.chainFetchers->ChainMap.update(chain, chainFetcherUpdate), + }, + }, + [], + ) +} + +let onEnterReorgThreshold = (~state: t) => { + Logging.info("Reorg threshold reached") + Prometheus.ReorgThreshold.set(~isInReorgThreshold=true) + + let chainFetchers = state.chainManager.chainFetchers->ChainMap.map(chainFetcher => { + { + ...chainFetcher, + fetchState: chainFetcher.fetchState->FetchState.updateInternal( + ~blockLag=Env.indexingBlockLag->Option.getWithDefault(0), + ), + } + }) + + { + ...state, + chainManager: { + ...state.chainManager, + chainFetchers, + isInReorgThreshold: true, + }, + } +} + +let actionReducer = (state: t, action: action) => { + switch action { + | FinishWaitingForNewBlock({chain, currentBlockHeight}) => { + let isBelowReorgThreshold = + !state.chainManager.isInReorgThreshold && state.indexer.config.shouldRollbackOnReorg + let shouldEnterReorgThreshold = + isBelowReorgThreshold && + state.chainManager.chainFetchers + ->ChainMap.values + ->Array.every(chainFetcher => { + chainFetcher.fetchState->FetchState.isReadyToEnterReorgThreshold(~currentBlockHeight) + }) + + let state = { + ...state, + chainManager: { + ...state.chainManager, + chainFetchers: state.chainManager.chainFetchers->ChainMap.update(chain, chainFetcher => { + chainFetcher->updateChainFetcherCurrentBlockHeight(~currentBlockHeight) + }), + }, + } + + if shouldEnterReorgThreshold { + (onEnterReorgThreshold(~state), [NextQuery(CheckAllChains)]) + } else { + (state, [NextQuery(Chain(chain))]) + } + } + | ValidatePartitionQueryResponse(partitionQueryResponse) => + state->validatePartitionQueryResponse(partitionQueryResponse) + | SubmitPartitionQueryResponse({ + newItems, + newItemsWithDcs, + currentBlockHeight, + latestFetchedBlock, + query, + chain, + }) => + state->submitPartitionQueryResponse( + ~newItems, + ~newItemsWithDcs, + ~currentBlockHeight, + ~latestFetchedBlock, + ~query, + ~chain, + ) + | EventBatchProcessed({batch}) => + let maybePruneEntityHistory = + state.indexer.config->Config.shouldPruneHistory( + ~isInReorgThreshold=state.chainManager.isInReorgThreshold, + ) + ? [PruneStaleEntityHistory] + : [] + + let state = { + ...state, + // Can safely reset rollback state, since overwrite is not possible. + // If rollback is pending, the EventBatchProcessed will be handled by the invalid action reducer instead. + rollbackState: NoRollback, + chainManager: state.chainManager->updateProgressedChains(~batch), + currentlyProcessingBatch: false, + processedBatches: state.processedBatches + 1, + } + + let shouldExit = EventProcessing.allChainsEventsProcessedToEndblock( + state.chainManager.chainFetchers, + ) + ? { + Logging.info("All chains are caught up to end blocks.") + + // Keep the indexer process running when in development mode (for Dev Console) + // or when TUI is enabled (for display) + if state.keepProcessAlive { + NoExit + } else { + ExitWithSuccess + } + } + : NoExit + + ( + state, + [UpdateChainMetaDataAndCheckForExit(shouldExit), ProcessEventBatch]->Array.concat( + maybePruneEntityHistory, + ), + ) + + | StartProcessingBatch => ({...state, currentlyProcessingBatch: true}, []) + | StartFindingReorgDepth => ({...state, rollbackState: FindingReorgDepth}, []) + | FindReorgDepth({chain, rollbackTargetBlockNumber}) => ( + { + ...state, + rollbackState: FoundReorgDepth({ + chain, + rollbackTargetBlockNumber, + }), + }, + [Rollback], + ) + | EnterReorgThreshold => (onEnterReorgThreshold(~state), [NextQuery(CheckAllChains)]) + | UpdateQueues({progressedChainsById, shouldEnterReorgThreshold}) => + let chainFetchers = state.chainManager.chainFetchers->ChainMap.mapWithKey((chain, cf) => { + let fs = switch progressedChainsById->Utils.Dict.dangerouslyGetByIntNonOption( + chain->ChainMap.Chain.toChainId, + ) { + | Some(chainAfterBatch) => chainAfterBatch.fetchState + | None => cf.fetchState + } + { + ...cf, + fetchState: shouldEnterReorgThreshold + ? fs->FetchState.updateInternal(~blockLag=Env.indexingBlockLag->Option.getWithDefault(0)) + : fs, + } + }) + + let chainManager = { + ...state.chainManager, + chainFetchers, + } + + ( + { + ...state, + chainManager, + }, + [NextQuery(CheckAllChains)], + ) + | SetRollbackState({diffInMemoryStore, rollbackedChainManager, eventsProcessedDiffByChain}) => ( + { + ...state, + rollbackState: RollbackReady({ + diffInMemoryStore, + eventsProcessedDiffByChain, + }), + chainManager: rollbackedChainManager, + }, + [NextQuery(CheckAllChains), ProcessEventBatch], + ) + | SuccessExit => { + Logging.info("Exiting with success") + NodeJs.process->NodeJs.exitWithCode(Success) + (state, []) + } + | ErrorExit(errHandler) => + errHandler->ErrorHandling.log + NodeJs.process->NodeJs.exitWithCode(Failure) + (state, []) + } +} + +let invalidatedActionReducer = (state: t, action: action) => + switch action { + | EventBatchProcessed({batch}) if state->isPreparingRollback => + Logging.info("Finished processing batch before rollback, actioning rollback") + ( + { + ...state, + chainManager: state.chainManager->updateProgressedChains(~batch), + currentlyProcessingBatch: false, + processedBatches: state.processedBatches + 1, + }, + [Rollback], + ) + | ErrorExit(_) => actionReducer(state, action) + | _ => + Logging.trace({ + "msg": "Invalidated action discarded", + "action": action->S.convertOrThrow(Utils.Schema.variantTag), + }) + (state, []) + } + +let checkAndFetchForChain = ( + //Used for dependency injection for tests + ~waitForNewBlock, + ~executeQuery, + //required args + ~state, + ~dispatchAction, +) => async chain => { + let chainFetcher = state.chainManager.chainFetchers->ChainMap.get(chain) + if !isPreparingRollback(state) { + let {currentBlockHeight, fetchState} = chainFetcher + + await chainFetcher.sourceManager->SourceManager.fetchNext( + ~fetchState, + ~waitForNewBlock=(~currentBlockHeight) => + chainFetcher.sourceManager->waitForNewBlock(~currentBlockHeight), + ~onNewBlock=(~currentBlockHeight) => + dispatchAction(FinishWaitingForNewBlock({chain, currentBlockHeight})), + ~currentBlockHeight, + ~executeQuery=async query => { + try { + let response = await chainFetcher.sourceManager->executeQuery(~query, ~currentBlockHeight) + dispatchAction(ValidatePartitionQueryResponse({chain, response, query})) + } catch { + | exn => dispatchAction(ErrorExit(exn->ErrorHandling.make)) + } + }, + ~stateId=state.id, + ) + } +} + +let injectedTaskReducer = ( + //Used for dependency injection for tests + ~waitForNewBlock, + ~executeQuery, + ~getLastKnownValidBlock, +) => async ( + //required args + state: t, + task: task, + ~dispatchAction, +) => { + switch task { + | ProcessPartitionQueryResponse(partitionQueryResponse) => + state->processPartitionQueryResponse(partitionQueryResponse, ~dispatchAction)->Promise.done + | PruneStaleEntityHistory => + let runPrune = async () => { + switch state.chainManager->ChainManager.getSafeCheckpointId { + | None => () + | Some(safeCheckpointId) => + await state.indexer.persistence.sql->InternalTable.Checkpoints.pruneStaleCheckpoints( + ~pgSchema=Env.Db.publicSchema, + ~safeCheckpointId, + ) + + for idx in 0 to Entities.allEntities->Array.length - 1 { + if idx !== 0 { + // Add some delay between entities + // To unblock the pg client if it's needed for something else + await Utils.delay(1000) + } + let entityConfig = Entities.allEntities->Array.getUnsafe(idx) + let timeRef = Hrtime.makeTimer() + try { + let () = + await state.indexer.persistence.sql->EntityHistory.pruneStaleEntityHistory( + ~entityName=entityConfig.name, + ~entityIndex=entityConfig.index, + ~pgSchema=Env.Db.publicSchema, + ~safeCheckpointId, + ) + } catch { + | exn => + exn->ErrorHandling.mkLogAndRaise( + ~msg=`Failed to prune stale entity history`, + ~logger=Logging.createChild( + ~params={ + "entityName": entityConfig.name, + "safeCheckpointId": safeCheckpointId, + }, + ), + ) + } + Prometheus.RollbackHistoryPrune.increment( + ~timeMillis=Hrtime.timeSince(timeRef)->Hrtime.toMillis, + ~entityName=entityConfig.name, + ) + } + } + } + state.writeThrottlers.pruneStaleEntityHistory->Throttler.schedule(runPrune) + + | UpdateChainMetaDataAndCheckForExit(shouldExit) => + let {chainManager, writeThrottlers} = state + switch shouldExit { + | ExitWithSuccess => + updateChainMetadataTable( + chainManager, + ~throttler=writeThrottlers.chainMetaData, + ~persistence=state.indexer.persistence, + ) + dispatchAction(SuccessExit) + | NoExit => + updateChainMetadataTable( + chainManager, + ~throttler=writeThrottlers.chainMetaData, + ~persistence=state.indexer.persistence, + )->ignore + } + | NextQuery(chainCheck) => + let fetchForChain = checkAndFetchForChain( + ~waitForNewBlock, + ~executeQuery, + ~state, + ~dispatchAction, + ) + + switch chainCheck { + | Chain(chain) => await chain->fetchForChain + | CheckAllChains => + //Mapping from the states chainManager so we can construct tests that don't use + //all chains + let _ = + await state.chainManager.chainFetchers + ->ChainMap.keys + ->Array.map(fetchForChain(_)) + ->Promise.all + } + | ProcessEventBatch => + if !state.currentlyProcessingBatch && !isPreparingRollback(state) { + let batch = + state.chainManager->ChainManager.createBatch( + ~batchSizeTarget=state.indexer.config.batchSize, + ) + + let progressedChainsById = batch.progressedChainsById + let totalBatchSize = batch.totalBatchSize + + let isInReorgThreshold = state.chainManager.isInReorgThreshold + let shouldSaveHistory = state.indexer.config->Config.shouldSaveHistory(~isInReorgThreshold) + + let isBelowReorgThreshold = + !state.chainManager.isInReorgThreshold && state.indexer.config.shouldRollbackOnReorg + let shouldEnterReorgThreshold = + isBelowReorgThreshold && + state.chainManager.chainFetchers + ->ChainMap.values + ->Array.every(chainFetcher => { + let fetchState = switch progressedChainsById->Utils.Dict.dangerouslyGetByIntNonOption( + chainFetcher.fetchState.chainId, + ) { + | Some(chainAfterBatch) => chainAfterBatch.fetchState + | None => chainFetcher.fetchState + } + fetchState->FetchState.isReadyToEnterReorgThreshold( + ~currentBlockHeight=chainFetcher.currentBlockHeight, + ) + }) + + if shouldEnterReorgThreshold { + dispatchAction(EnterReorgThreshold) + } + + if progressedChainsById->Utils.Dict.isEmpty { + () + } else { + if Env.Benchmark.shouldSaveData { + let group = "Other" + Benchmark.addSummaryData( + ~group, + ~label=`Batch Size`, + ~value=totalBatchSize->Belt.Int.toFloat, + ) + } + + dispatchAction(StartProcessingBatch) + dispatchAction(UpdateQueues({progressedChainsById, shouldEnterReorgThreshold})) + + //In the case of a rollback, use the provided in memory store + //With rolled back values + let rollbackInMemStore = switch state.rollbackState { + | RollbackReady({diffInMemoryStore}) => Some(diffInMemoryStore) + | _ => None + } + + let inMemoryStore = rollbackInMemStore->Option.getWithDefault(InMemoryStore.make(~entities=Entities.allEntities)) + + inMemoryStore->InMemoryStore.setBatchDcs(~batch, ~shouldSaveHistory) + + switch await EventProcessing.processEventBatch( + ~batch, + ~inMemoryStore, + ~isInReorgThreshold, + ~loadManager=state.loadManager, + ~indexer=state.indexer, + ~chainFetchers=state.chainManager.chainFetchers, + ) { + | exception exn => + //All casese should be handled/caught before this with better user messaging. + //This is just a safety in case something unexpected happens + let errHandler = + exn->ErrorHandling.make(~msg="A top level unexpected error occurred during processing") + dispatchAction(ErrorExit(errHandler)) + | res => + switch res { + | Ok() => dispatchAction(EventBatchProcessed({batch: batch})) + | Error(errHandler) => dispatchAction(ErrorExit(errHandler)) + } + } + } + } + | Rollback => + //If it isn't processing a batch currently continue with rollback otherwise wait for current batch to finish processing + switch state { + | {rollbackState: NoRollback | RollbackReady(_)} => + Js.Exn.raiseError("Internal error: Rollback initiated with invalid state") + | {rollbackState: ReorgDetected({chain, blockNumber: reorgBlockNumber})} => { + let chainFetcher = state.chainManager.chainFetchers->ChainMap.get(chain) + + dispatchAction(StartFindingReorgDepth) + let rollbackTargetBlockNumber = + await chainFetcher->getLastKnownValidBlock(~reorgBlockNumber) + + dispatchAction(FindReorgDepth({chain, rollbackTargetBlockNumber})) + } + // We can come to this case when event batch finished processing + // while we are still finding the reorg depth + // Do nothing here, just wait for reorg depth to be found + | {rollbackState: FindingReorgDepth} => () + | {rollbackState: FoundReorgDepth(_), currentlyProcessingBatch: true} => + Logging.info("Waiting for batch to finish processing before executing rollback") + | {rollbackState: FoundReorgDepth({chain: reorgChain, rollbackTargetBlockNumber})} => + let startTime = Hrtime.makeTimer() + + let chainFetcher = state.chainManager.chainFetchers->ChainMap.get(reorgChain) + + let logger = Logging.createChildFrom( + ~logger=chainFetcher.logger, + ~params={ + "action": "Rollback", + "reorgChain": reorgChain, + "targetBlockNumber": rollbackTargetBlockNumber, + }, + ) + logger->Logging.childInfo("Started rollback on reorg") + Prometheus.RollbackTargetBlockNumber.set( + ~blockNumber=rollbackTargetBlockNumber, + ~chain=reorgChain, + ) + + let reorgChainId = reorgChain->ChainMap.Chain.toChainId + + let rollbackTargetCheckpointId = { + switch await state.indexer.persistence.sql->InternalTable.Checkpoints.getRollbackTargetCheckpoint( + ~pgSchema=Env.Db.publicSchema, + ~reorgChainId, + ~lastKnownValidBlockNumber=rollbackTargetBlockNumber, + ) { + | [checkpoint] => checkpoint["id"] + | _ => 0 + } + } + + let eventsProcessedDiffByChain = Js.Dict.empty() + let newProgressBlockNumberPerChain = Js.Dict.empty() + let rollbackedProcessedEvents = ref(0) + + { + let rollbackProgressDiff = + await state.indexer.persistence.sql->InternalTable.Checkpoints.getRollbackProgressDiff( + ~pgSchema=Env.Db.publicSchema, + ~rollbackTargetCheckpointId, + ) + for idx in 0 to rollbackProgressDiff->Js.Array2.length - 1 { + let diff = rollbackProgressDiff->Js.Array2.unsafe_get(idx) + eventsProcessedDiffByChain->Utils.Dict.setByInt( + diff["chain_id"], + switch diff["events_processed_diff"]->Int.fromString { + | Some(eventsProcessedDiff) => { + rollbackedProcessedEvents := + rollbackedProcessedEvents.contents + eventsProcessedDiff + eventsProcessedDiff + } + | None => + Js.Exn.raiseError( + `Unexpedted case: Invalid events processed diff ${diff["events_processed_diff"]}`, + ) + }, + ) + newProgressBlockNumberPerChain->Utils.Dict.setByInt( + diff["chain_id"], + if rollbackTargetCheckpointId === 0 && diff["chain_id"] === reorgChainId { + Pervasives.min(diff["new_progress_block_number"], rollbackTargetBlockNumber) + } else { + diff["new_progress_block_number"] + }, + ) + } + } + + let chainFetchers = state.chainManager.chainFetchers->ChainMap.mapWithKey((chain, cf) => { + switch newProgressBlockNumberPerChain->Utils.Dict.dangerouslyGetByIntNonOption( + chain->ChainMap.Chain.toChainId, + ) { + | Some(newProgressBlockNumber) => + let fetchState = + cf.fetchState->FetchState.rollback(~targetBlockNumber=newProgressBlockNumber) + let newTotalEventsProcessed = + cf.numEventsProcessed - + eventsProcessedDiffByChain + ->Utils.Dict.dangerouslyGetByIntNonOption(chain->ChainMap.Chain.toChainId) + ->Option.getUnsafe + + if cf.committedProgressBlockNumber !== newProgressBlockNumber { + Prometheus.ProgressBlockNumber.set( + ~blockNumber=newProgressBlockNumber, + ~chainId=chain->ChainMap.Chain.toChainId, + ) + } + if cf.numEventsProcessed !== newTotalEventsProcessed { + Prometheus.ProgressEventsCount.set( + ~processedCount=newTotalEventsProcessed, + ~chainId=chain->ChainMap.Chain.toChainId, + ) + } + + { + ...cf, + reorgDetection: chain == reorgChain + ? cf.reorgDetection->ReorgDetection.rollbackToValidBlockNumber( + ~blockNumber=rollbackTargetBlockNumber, + ) + : cf.reorgDetection, + safeCheckpointTracking: switch cf.safeCheckpointTracking { + | Some(safeCheckpointTracking) => + Some( + safeCheckpointTracking->SafeCheckpointTracking.rollback( + ~targetBlockNumber=newProgressBlockNumber, + ), + ) + | None => None + }, + fetchState, + committedProgressBlockNumber: newProgressBlockNumber, + numEventsProcessed: newTotalEventsProcessed, + } + + | None => //If no change was produced on the given chain after the reorged chain, no need to rollback anything + cf + } + }) + + // Construct in Memory store with rollback diff + let diff = await IO.prepareRollbackDiff( + ~rollbackTargetCheckpointId, + ~persistence=state.indexer.persistence, + ) + + let chainManager = { + ...state.chainManager, + committedCheckpointId: rollbackTargetCheckpointId, + chainFetchers, + } + + logger->Logging.childTrace({ + "msg": "Finished rollback on reorg", + "entityChanges": { + "deleted": diff["deletedEntities"], + "upserted": diff["setEntities"], + }, + "rollbackedEvents": rollbackedProcessedEvents.contents, + "beforeCheckpointId": state.chainManager.committedCheckpointId, + "targetCheckpointId": rollbackTargetCheckpointId, + }) + Prometheus.RollbackSuccess.increment( + ~timeMillis=Hrtime.timeSince(startTime)->Hrtime.toMillis, + ~rollbackedProcessedEvents=rollbackedProcessedEvents.contents, + ) + + dispatchAction( + SetRollbackState({ + diffInMemoryStore: diff["inMemStore"], + rollbackedChainManager: chainManager, + eventsProcessedDiffByChain, + }), + ) + } + } +} + +let taskReducer = injectedTaskReducer( + ~waitForNewBlock=SourceManager.waitForNewBlock, + ~executeQuery=SourceManager.executeQuery, + ~getLastKnownValidBlock=(chainFetcher, ~reorgBlockNumber) => + chainFetcher->ChainFetcher.getLastKnownValidBlock(~reorgBlockNumber), +) diff --git a/packages/indexer/generated/src/globalState/GlobalStateManager.res b/packages/indexer/generated/src/globalState/GlobalStateManager.res new file mode 100644 index 0000000..11fcc78 --- /dev/null +++ b/packages/indexer/generated/src/globalState/GlobalStateManager.res @@ -0,0 +1,76 @@ +open Belt +module type State = { + type t + type action + type task + + let taskReducer: (t, task, ~dispatchAction: action => unit) => promise + let actionReducer: (t, action) => (t, array) + let invalidatedActionReducer: (t, action) => (t, array) + let getId: t => int +} + +module MakeManager = (S: State) => { + type t = {mutable state: S.t, stateUpdatedHook: option unit>, onError: exn => unit} + + let make = ( + state: S.t, + ~stateUpdatedHook: option unit>=?, + ~onError=e => { + e->ErrorHandling.make(~msg="Indexer has failed with an unexpected error")->ErrorHandling.log + NodeJs.process->NodeJs.exitWithCode(Failure) + }, + ) => { + state, + stateUpdatedHook, + onError, + } + + let rec dispatchAction = (~stateId=0, self: t, action: S.action) => { + try { + let reducer = if stateId == self.state->S.getId { + S.actionReducer + } else { + S.invalidatedActionReducer + } + let (nextState, nextTasks) = reducer(self.state, action) + switch self.stateUpdatedHook { + // In ReScript `!==` is shallow equality check rather than `!=` + // This is just a check to see if a new object reference was returned + | Some(hook) if self.state !== nextState => hook(nextState) + | _ => () + } + self.state = nextState + nextTasks->Array.forEach(task => dispatchTask(self, task)) + } catch { + | e => e->self.onError + } + } + and dispatchTask = (self, task: S.task) => { + let stateId = self.state->S.getId + Js.Global.setTimeout(() => { + if stateId !== self.state->S.getId { + Logging.info("Invalidated task discarded") + } else { + try { + S.taskReducer(self.state, task, ~dispatchAction=action => + dispatchAction(~stateId, self, action) + ) + ->Promise.catch(e => { + e->self.onError + Promise.resolve() + }) + ->ignore + } catch { + | e => e->self.onError + } + } + }, 0)->ignore + } + + let getState = self => self.state + let setState = (self: t, state: S.t) => self.state = state +} + +module Manager = MakeManager(GlobalState) +include Manager diff --git a/packages/indexer/generated/src/globalState/GlobalStateManager.resi b/packages/indexer/generated/src/globalState/GlobalStateManager.resi new file mode 100644 index 0000000..d9ff6d8 --- /dev/null +++ b/packages/indexer/generated/src/globalState/GlobalStateManager.resi @@ -0,0 +1,7 @@ +type t + +let make: (GlobalState.t, ~stateUpdatedHook: GlobalState.t => unit=?, ~onError: exn => unit=?) => t +let dispatchAction: (~stateId: int=?, t, GlobalState.action) => unit +let dispatchTask: (t, GlobalState.task) => unit +let getState: t => GlobalState.t +let setState: (t, GlobalState.t) => unit diff --git a/packages/indexer/generated/src/ink/EnvioInkApp.res b/packages/indexer/generated/src/ink/EnvioInkApp.res new file mode 100644 index 0000000..926dd28 --- /dev/null +++ b/packages/indexer/generated/src/ink/EnvioInkApp.res @@ -0,0 +1,67 @@ +open Ink +open Belt + +type chainData = ChainData.chainData +type appState = { + chains: array, + indexerStartTime: Js.Date.t, + config: Config.t, +} + +let getTotalNumEventsProcessed = (~chains: array) => { + chains->Array.reduce(0, (acc, chain) => { + acc + chain.progress->ChainData.getNumberOfEventsProccessed + }) +} + +module TotalEventsProcessed = { + @react.component + let make = (~totalEventsProcessed) => { + let label = "Total Events Processed: " + + {label->React.string} + + {`${totalEventsProcessed->ChainData.formatLocaleString}`->React.string} + + + } +} + +module App = { + @react.component + let make = (~appState: appState) => { + let {chains, indexerStartTime, config} = appState + let totalEventsProcessed = getTotalNumEventsProcessed(~chains) + + + {chains + ->Array.mapWithIndex((i, chainData) => { + Int.toString} chainData /> + }) + ->React.array} + + + + + + {"Development Console: "->React.string} + + {`${Env.envioAppUrl}/console`->React.string} + + + + {"GraphQL Endpoint: "->React.string} + + {`${Env.Hasura.url}/v1/graphql`->React.string} + + + + } +} + +let startApp = appState => { + let {rerender} = render() + appState => { + rerender() + } +} diff --git a/packages/indexer/generated/src/ink/bindings/DateFns.res b/packages/indexer/generated/src/ink/bindings/DateFns.res new file mode 100644 index 0000000..a628d14 --- /dev/null +++ b/packages/indexer/generated/src/ink/bindings/DateFns.res @@ -0,0 +1,71 @@ +/** +Formats: +hh:mm:ss | 00:00:00 +do MMM ''yy | 1st Jan '21 +ha do MMM ''yy | 8PM 1st Jan '21 +ha | 8PM +iii | Tues +iii MMM | Tues Jan +MMM | Jan +`) +*/ +type dateFormats = + | @as("HH:mm:ss") HoursMinSec + | @as("ha") Hour + | @as("do MMM ''yy") DayMonthYear + | @as("ha do MMM ''yy") HourDayMonthYear + | @as("h:mma do MMM ''yy") HourMinDayMonthYear + | @as("iii") DayName + | @as("iii MMM") DayNameMonth + | @as("do MMM") DayMonth + | @as("MMM") Month + | @as("h:mma") HourMin + +@module("date-fns") external format: (Js.Date.t, dateFormats) => string = "format" + +type formatDistanceToNowOptions = {includeSeconds: bool} +@module("date-fns") +external formatDistanceToNow: Js.Date.t => string = "formatDistanceToNow" + +@module("date-fns") +external formatDistance: (Js.Date.t, Js.Date.t) => string = "formatDistance" + +@module("date-fns") +external formatDistanceWithOptions: (Js.Date.t, Js.Date.t, formatDistanceToNowOptions) => string = + "formatDistance" + +@module("date-fns") +external formatDistanceToNowWithOptions: (Js.Date.t, formatDistanceToNowOptions) => string = + "formatDistanceToNow" + +let formatDistanceToNowWithSeconds = (date: Js.Date.t) => + date->formatDistanceToNowWithOptions({includeSeconds: true}) + +type durationTimeFormat = { + years: int, + months: int, + weeks: int, + days: int, + hours: int, + minutes: int, + seconds: int, +} + +@module("date-fns") +external formatRelative: (Js.Date.t, Js.Date.t) => string = "formatRelative" + +type durationFormatOutput = {format: array} + +@module("date-fns") +external formatDuration: (durationTimeFormat, durationFormatOutput) => string = "formatDuration" + +type interval = {start: Js_date.t, end: Js_date.t} + +@module("date-fns") +external intervalToDuration: interval => durationTimeFormat = "intervalToDuration" + +//helper to convert millis elapsed to duration object +let durationFromMillis = (millis: int) => + intervalToDuration({start: 0->Utils.magic, end: millis->Utils.magic}) + +@module("date-fns") external fromUnixTime: float => Js.Date.t = "fromUnixTime" diff --git a/packages/indexer/generated/src/ink/bindings/Ink.res b/packages/indexer/generated/src/ink/bindings/Ink.res new file mode 100644 index 0000000..6dad996 --- /dev/null +++ b/packages/indexer/generated/src/ink/bindings/Ink.res @@ -0,0 +1,355 @@ +open Style + +type instance = { + rerender: React.element => unit, + unmount: unit => unit, + waitUntilExit: unit => promise, + clear: unit => unit, +} +type readableStream +type writableStream +type options = { + stdout?: writableStream, + stdin?: readableStream, + exitOnCtrlC?: bool, + patchConsole?: bool, + debug?: bool, +} +@module("ink") +external renderInternal: (React.element, ~options: option) => instance = "render" + +let render = (~options=?, element) => { + renderInternal(element, ~options) +} +type measurement = {width: int, height: int} + +@module("ink") +external measureElement: React.ref<'a> => measurement = "measureElement" + +module Text = { + type wrapOptions = + | @as("wrap") Wrap + | @as("truncate") Truncate + | @as("truncate-start") TruncateStart + | @as("truncate-middle") TruncateMiddle + | @as("truncate-end") TruncateEnd + @module("ink") @react.component + external make: ( + ~children: React.element, + ~color: chalkTheme=?, + ~backgroundColor: chalkTheme=?, + ~dimColor: bool=?, + ~bold: bool=?, + ~italic: bool=?, + ~underline: bool=?, + ~strikethrough: bool=?, + ~inverse: bool=?, + ~wrap: wrapOptions=?, + ) => React.element = "Text" +} + +module Box = { + @module("ink") @react.component + external make: ( + ~children: React.element=?, + ~width: numOrStr=?, + ~height: numOrStr=?, + ~minWidth: int=?, + ~minHeight: int=?, + ~padding: int=?, + ~paddingTop: int=?, + ~paddingBottom: int=?, + ~paddingLeft: int=?, + ~paddingRight: int=?, + ~paddingX: int=?, + ~paddingY: int=?, + ~margin: int=?, + ~marginTop: int=?, + ~marginBottom: int=?, + ~marginLeft: int=?, + ~marginRight: int=?, + ~marginX: int=?, + ~marginY: int=?, + ~gap: int=?, + ~rowGap: int=?, + ~flexGrow: int=?, + ~flexShrink: int=?, + ~flexBasis: numOrStr=?, + ~flexDirection: flexDirection=?, + ~flexWrap: flexDirection=?, + ~alignItems: alignItems=?, + ~alignSelf: alignSelf=?, + ~justifyContent: justifyContent=?, + ~display: display=?, + ~overflow: overflow=?, + ~overflowX: overflow=?, + ~overflowY: overflow=?, + ~borderStyle: borderStyle=?, + ~borderColor: chalkTheme=?, + ~borderTopColor: chalkTheme=?, + ~borderRightColor: chalkTheme=?, + ~borderBottomColor: chalkTheme=?, + ~borderLeftColor: chalkTheme=?, + ~borderDimColor: bool=?, + ~borderTopDimColor: bool=?, + ~borderRightDimColor: bool=?, + ~borderBottomDimColor: bool=?, + ~borderLeftDimColor: bool=?, + ~borderTop: bool=?, + ~borderRight: bool=?, + ~borderBottom: bool=?, + ~borderLeft: bool=?, + ) => React.element = "Box" +} + +module Newline = { + /** + Adds one or more newline characters. Must be used within components. + + */ + @module("ink") + @react.component + external make: (~count: int=?) => React.element = "Newline" +} + +module Spacer = { + /** + A flexible space that expands along the major axis of its containing layout. It's useful as a shortcut for filling all the available spaces between elements. + + For example, using in a with default flex direction (row) will position "Left" on the left side and will push "Right" to the right side. + */ + @module("ink") + @react.component + external make: unit => React.element = "Spacer" +} + +module Static = { + /** + component permanently renders its output above everything else. It's useful for displaying activity like completed tasks or logs - things that are not changing after they're rendered (hence the name "Static"). + + It's preferred to use for use cases like these, when you can't know or control the amount of items that need to be rendered. + */ + @module("ink") + @react.component + external make: ( + ~children: ('a, int) => React.element, + ~items: array<'a>, + ~style: styles=?, + ) => React.element = "Static" +} + +module Transform = { + /** + Transform a string representation of React components before they are written to output. For example, you might want to apply a gradient to text, add a clickable link or create some text effects. These use cases can't accept React nodes as input, they are expecting a string. That's what component does, it gives you an output string of its child components and lets you transform it in any way. + + Note: must be applied only to children components and shouldn't change the dimensions of the output, otherwise layout will be incorrect. + */ + type outputLine = string + type index = int + @module("ink") @react.component + external make: ( + ~children: string, + ~tranform: (outputLine, index) => string, + ~index: int=?, + ) => React.element = "Transform" +} + +module Hooks = { + type key = { + leftArrow: bool, + rightArrow: bool, + upArrow: bool, + downArrow: bool, + return: bool, + escape: bool, + ctrl: bool, + shift: bool, + tab: bool, + backspace: bool, + delete: bool, + pageDown: bool, + pageUp: bool, + meta: bool, + enter: bool, + } + type input = string + type inputHandler = (input, key) => unit + type options = {isActive?: bool} + + @module("ink") external useInput: (inputHandler, ~options: options=?) => unit = "useInput" + + type app = {exit: (~err: exn=?) => unit} + @module("ink") external useApp: unit => app = "useApp" + + type stdin = { + stdin: readableStream, + isRawModeSupported: bool, + setRawMode: bool => unit, + } + + @module("ink") external useStdin: unit => stdin = "useStdin" + + type stdout = { + stdout: writableStream, + write: string => unit, + } + + @module("ink") external useStdout: unit => stdout = "useStdout" + + type stderr = { + stderr: writableStream, + write: string => unit, + } + + @module("ink") external useStderr: unit => stderr = "useStderr" + + type focusOptions = {autoFocus?: bool, isActive?: bool, id?: string} + type focus = {isFocused: bool} + @module("ink") external useFocus: (~options: focusOptions=?) => focus = "useFocus" + + type focusManager = { + enableFocus: unit => unit, + disableFocus: unit => unit, + focusNext: unit => unit, + focusPrevious: unit => unit, + focusId: string => unit, + } + @module("ink") + external useFocusManager: unit => focusManager = "useFocusManager" +} + +module BigText = { + type font = + | @as("block") Block + | @as("slick") Slick + | @as("tiny") Tiny + | @as("grid") Grid + | @as("pallet") Pallet + | @as("shade") Shade + | @as("simple") Simple + | @as("simpleBlock") SimpleBlock + | @as("3d") D3 + | @as("simple3d") Simple3D + | @as("chrome") Chrome + | @as("huge") Huge + type align = + | @as("left") Left + | @as("center") Center + | @as("right") Right + type backgroundColor = + | @as("transparent") Transparent + | @as("black") Black + | @as("red") Red + | @as("green") Green + | @as("yellow") Yellow + | @as("blue") Blue + | @as("magenta") Magenta + | @as("cyan") Cyan + | @as("white") White + + type color = | ...chalkTheme | @as("system") System + @module @react.component + external make: ( + ~text: string, + ~font: font=?, //default block + ~align: align=?, //default left + ~colors: array=?, //default [system] + ~backgroundColor: backgroundColor=?, //default transparent + ~letterSpacing: int=?, //default 1 + ~lineHeight: int=?, //default 1 + ~space: bool=?, //default true + ~maxLength: int=?, + ) => React.element = "ink-big-text" +} + +module Spinner = { + type typeOption = + | @as("dots") Dots + | @as("dots2") Dots2 + | @as("dots3") Dots3 + | @as("dots4") Dots4 + | @as("dots5") Dots5 + | @as("dots6") Dots6 + | @as("dots7") Dots7 + | @as("dots8") Dots8 + | @as("dots9") Dots9 + | @as("dots10") Dots10 + | @as("dots11") Dots11 + | @as("dots12") Dots12 + | @as("dots13") Dots13 + | @as("dots8Bit") Dots8Bit + | @as("sand") Sand + | @as("line") Line + | @as("line2") Line2 + | @as("pipe") Pipe + | @as("simpleDots") SimpleDots + | @as("simpleDotsScrolling") SimpleDotsScrolling + | @as("star") Star + | @as("star2") Star2 + | @as("flip") Flip + | @as("hamburger") Hamburger + | @as("growVertical") GrowVertical + | @as("growHorizontal") GrowHorizontal + | @as("balloon") Balloon + | @as("balloon2") Balloon2 + | @as("noise") Noise + | @as("bounce") Bounce + | @as("boxBounce") BoxBounce + | @as("boxBounce2") BoxBounce2 + | @as("triangle") Triangle + | @as("binary") Binary + | @as("arc") Arc + | @as("circle") Circle + | @as("squareCorners") SquareCorners + | @as("circleQuarters") CircleQuarters + | @as("circleHalves") CircleHalves + | @as("squish") Squish + | @as("toggle") Toggle + | @as("toggle2") Toggle2 + | @as("toggle3") Toggle3 + | @as("toggle4") Toggle4 + | @as("toggle5") Toggle5 + | @as("toggle6") Toggle6 + | @as("toggle7") Toggle7 + | @as("toggle8") Toggle8 + | @as("toggle9") Toggle9 + | @as("toggle10") Toggle10 + | @as("toggle11") Toggle11 + | @as("toggle12") Toggle12 + | @as("toggle13") Toggle13 + | @as("arrow") Arrow + | @as("arrow2") Arrow2 + | @as("arrow3") Arrow3 + | @as("bouncingBar") BouncingBar + | @as("bouncingBall") BouncingBall + | @as("smiley") Smiley + | @as("monkey") Monkey + | @as("hearts") Hearts + | @as("clock") Clock + | @as("earth") Earth + | @as("material") Material + | @as("moon") Moon + | @as("runner") Runner + | @as("pong") Pong + | @as("shark") Shark + | @as("dqpb") Dqpb + | @as("weather") Weather + | @as("christmas") Christmas + | @as("grenade") Grenade + | @as("point") Point + | @as("layer") Layer + | @as("betaWave") BetaWave + | @as("fingerDance") FingerDance + | @as("fistBump") FistBump + | @as("soccerHeader") SoccerHeader + | @as("mindblown") Mindblown + | @as("speaker") Speaker + | @as("orangePulse") OrangePulse + | @as("bluePulse") BluePulse + | @as("orangeBluePulse") OrangeBluePulse + | @as("timeTravel") TimeTravel + | @as("aesthetic") Aesthetic + | @as("dwarfFortress") DwarfFortress + @module("ink-spinner") @react.component + external make: (@as("type") ~type_: typeOption=?) => React.element = "default" +} diff --git a/packages/indexer/generated/src/ink/bindings/Style.res b/packages/indexer/generated/src/ink/bindings/Style.res new file mode 100644 index 0000000..8b3fc30 --- /dev/null +++ b/packages/indexer/generated/src/ink/bindings/Style.res @@ -0,0 +1,123 @@ +type chalkTheme = + | @as("#9860E5") Primary + | @as("#FFBB2F") Secondary + | @as("#6CBFEE") Info + | @as("#FF8269") Danger + | @as("#3B8C3D") Success + | @as("white") White + | @as("gray") Gray + +@unboxed type numOrStr = Num(int) | Str(string) + +type textWrap = + | @as("wrap") Wrap + | @as("end") End + | @as("middle") Middle + | @as("truncate-end") TruncateEnd + | @as("truncate") Truncate + | @as("truncate-middle") TruncateMiddle + | @as("truncate-start") TruncateStart + +type position = + | @as("absolute") Absolute + | @as("relative") Relative + +type flexDirection = + | @as("row") Row + | @as("column") Column + | @as("row-reverse") RowReverse + | @as("column-reverse") ColumnReverse + +type flexWrap = + | @as("nowrap") NoWrap + | @as("wrap") Wrap + | @as("wrap-reverse") WrapReverse + +type alignItems = + | @as("flex-start") FlexStart + | @as("center") Center + | @as("flex-end") FlexEnd + | @as("stretch") Stretch + +type alignSelf = + | @as("flex-start") FlexStartSelf + | @as("center") CenterSelf + | @as("flex-end") FlexEndSelf + | @as("auto") Auto + +type justifyContent = + | @as("flex-start") JustifyFlexStart + | @as("flex-end") JustifyFlexEnd + | @as("space-between") SpaceBetween + | @as("space-around") SpaceAround + | @as("center") JustifyCenter + +type display = + | @as("flex") Flex + | @as("none") None + +type overflow = + | @as("visible") Visible + | @as("hidden") Hidden + +type borderStyle = + | @as("single") Single + | @as("double") Double + | @as("round") Round + | @as("bold") Bold + | @as("singleDouble") SingleDouble + | @as("doubleSingle") DoubleSingle + | @as("classic") Classic + +type styles = { + textWrap?: textWrap, + position?: position, + columnGap?: int, + rowGap?: int, + gap?: int, + margin?: int, + marginX?: int, + marginY?: int, + marginTop?: int, + marginBottom?: int, + marginLeft?: int, + marginRight?: int, + padding?: int, + paddingX?: int, + paddingY?: int, + paddingTop?: int, + paddingBottom?: int, + paddingLeft?: int, + paddingRight?: int, + flexGrow?: int, + flexShrink?: int, + flexDirection?: flexDirection, + flexBasis?: numOrStr, + flexWrap?: flexWrap, + alignItems?: alignItems, + alignSelf?: alignSelf, + justifyContent?: justifyContent, + width?: numOrStr, + height?: numOrStr, + minWidth?: numOrStr, + minHeight?: numOrStr, + display?: display, + borderStyle?: borderStyle, + borderTop?: bool, + borderBottom?: bool, + borderLeft?: bool, + borderRight?: bool, + borderColor?: chalkTheme, + borderTopColor?: chalkTheme, + borderBottomColor?: chalkTheme, + borderLeftColor?: chalkTheme, + borderRightColor?: chalkTheme, + borderDimColor?: bool, + borderTopDimColor?: bool, + borderBottomDimColor?: bool, + borderLeftDimColor?: bool, + borderRightDimColor?: bool, + overflow?: overflow, + overflowX?: overflow, + overflowY?: overflow, +} diff --git a/packages/indexer/generated/src/ink/components/BufferedProgressBar.res b/packages/indexer/generated/src/ink/components/BufferedProgressBar.res new file mode 100644 index 0000000..72aed53 --- /dev/null +++ b/packages/indexer/generated/src/ink/components/BufferedProgressBar.res @@ -0,0 +1,40 @@ +open Ink +open Belt +@react.component +let make = (~loaded, ~buffered=?, ~outOf, ~barWidth=36, ~loadingColor=Style.Secondary) => { + let maxCount = barWidth + + let loadedFraction = loaded->Int.toFloat /. outOf->Int.toFloat + let loadedCount = Pervasives.min( + Js.Math.floor_float(maxCount->Js.Int.toFloat *. loadedFraction)->Belt.Float.toInt, + maxCount, + ) + + let bufferedCount = buffered->Option.mapWithDefault(loadedCount, buffered => { + let bufferedFraction = buffered->Int.toFloat /. outOf->Int.toFloat + Pervasives.min( + Js.Math.floor_float(maxCount->Js.Int.toFloat *. bufferedFraction)->Belt.Float.toInt, + maxCount, + ) + }) + let loadedFraction = loadedFraction > 0.0 ? loadedFraction : 0.0 + let loadedPercentageStr = (loadedFraction *. 100.)->Int.fromFloat->Int.toString ++ "% " + + let loadedPercentageStrCount = loadedPercentageStr->String.length + let loadedSpaces = Pervasives.max(loadedCount - loadedPercentageStrCount, 0) + let loadedCount = Pervasives.max(loadedCount, loadedPercentageStrCount) + let bufferedCount = Pervasives.max(bufferedCount, loadedCount) + + + + {" "->Js.String2.repeat(loadedSpaces)->React.string} + {loadedPercentageStr->React.string} + + + {" "->Js.String2.repeat(bufferedCount - loadedCount)->React.string} + + + {" "->Js.String2.repeat(maxCount - bufferedCount)->React.string} + + +} diff --git a/packages/indexer/generated/src/ink/components/ChainData.res b/packages/indexer/generated/src/ink/components/ChainData.res new file mode 100644 index 0000000..946e9a4 --- /dev/null +++ b/packages/indexer/generated/src/ink/components/ChainData.res @@ -0,0 +1,161 @@ +open Ink + +type syncing = { + firstEventBlockNumber: int, + latestProcessedBlock: int, + numEventsProcessed: int, +} +type synced = { + ...syncing, + timestampCaughtUpToHeadOrEndblock: Js.Date.t, +} + +type progress = SearchingForEvents | Syncing(syncing) | Synced(synced) + +let getNumberOfEventsProccessed = (progress: progress) => { + switch progress { + | SearchingForEvents => 0 + | Syncing(syncing) => syncing.numEventsProcessed + | Synced(synced) => synced.numEventsProcessed + } +} +type chainData = { + chain: ChainMap.Chain.t, + poweredByHyperSync: bool, + progress: progress, + latestFetchedBlockNumber: int, + currentBlockHeight: int, + numBatchesFetched: int, + endBlock: option, +} + +let minOfOption: (int, option) => int = (a: int, b: option) => { + switch (a, b) { + | (a, Some(b)) => min(a, b) + | (a, None) => a + } +} + +type number +@val external number: int => number = "Number" +@send external toLocaleString: number => string = "toLocaleString" +let formatLocaleString = n => n->number->toLocaleString + +module BlocksDisplay = { + @react.component + let make = (~latestProcessedBlock, ~currentBlockHeight) => { + + {"blocks: "->React.string} + + + {latestProcessedBlock->formatLocaleString->React.string} + + + {"/"->React.string} + {currentBlockHeight->formatLocaleString->React.string} + + + + } +} + +module SyncBar = { + @react.component + let make = ( + ~chainId, + ~loaded, + ~buffered=?, + ~outOf, + ~loadingColor, + ~poweredByHyperSync=true, + ~isSearching=false, + ) => { + + + {poweredByHyperSync ? {"⚡"->React.string} : React.null} + {"Chain ID: "->React.string} + {chainId->React.int} + {" "->React.string} + + {isSearching + ? + + + : } + + } +} + +@react.component +let make = (~chainData: chainData) => { + let { + chain, + progress, + poweredByHyperSync, + latestFetchedBlockNumber, + currentBlockHeight, + endBlock, + } = chainData + let chainId = chain->ChainMap.Chain.toChainId + + let toBlock = minOfOption(currentBlockHeight, endBlock) + + switch progress { + | SearchingForEvents => + + + {"Searching for events..."->React.string} + + + + + + | Syncing({firstEventBlockNumber, latestProcessedBlock, numEventsProcessed}) => + + + + + {"Events Processed: "->React.string} + + {numEventsProcessed->formatLocaleString->React.string} + + + + + + + | Synced({firstEventBlockNumber, latestProcessedBlock, numEventsProcessed}) => + + + + {"Events Processed: "->React.string} + {numEventsProcessed->React.int} + + + + + + + } +} diff --git a/packages/indexer/generated/src/ink/components/CustomHooks.res b/packages/indexer/generated/src/ink/components/CustomHooks.res new file mode 100644 index 0000000..2e6483d --- /dev/null +++ b/packages/indexer/generated/src/ink/components/CustomHooks.res @@ -0,0 +1,115 @@ +open Belt +module InitApi = { + type ecosystem = | @as("evm") Evm | @as("fuel") Fuel + type body = { + envioVersion: option, + envioApiToken: option, + ecosystem: ecosystem, + hyperSyncNetworks: array, + rpcNetworks: array, + } + + let bodySchema = S.object(s => { + envioVersion: s.field("envioVersion", S.option(S.string)), + envioApiToken: s.field("envioApiToken", S.option(S.string)), + ecosystem: s.field("ecosystem", S.enum([Evm, Fuel])), + hyperSyncNetworks: s.field("hyperSyncNetworks", S.array(S.int)), + rpcNetworks: s.field("rpcNetworks", S.array(S.int)), + }) + + let makeBody = (~envioVersion, ~envioApiToken, ~config: Config.t) => { + let hyperSyncNetworks = [] + let rpcNetworks = [] + config.chainMap + ->ChainMap.values + ->Array.forEach(({sources, id}) => { + switch sources->Js.Array2.some(s => s.poweredByHyperSync) { + | true => hyperSyncNetworks + | false => rpcNetworks + } + ->Js.Array2.push(id) + ->ignore + }) + + { + envioVersion, + envioApiToken, + ecosystem: (config.ecosystem :> ecosystem), + hyperSyncNetworks, + rpcNetworks, + } + } + + type messageColor = + | @as("primary") Primary + | @as("secondary") Secondary + | @as("info") Info + | @as("danger") Danger + | @as("success") Success + | @as("white") White + | @as("gray") Gray + + let toTheme = (color: messageColor): Style.chalkTheme => + switch color { + | Primary => Primary + | Secondary => Secondary + | Info => Info + | Danger => Danger + | Success => Success + | White => White + | Gray => Gray + } + + type message = { + color: messageColor, + content: string, + } + + let messageSchema = S.object(s => { + color: s.field("color", S.enum([Primary, Secondary, Info, Danger, Success, White, Gray])), + content: s.field("content", S.string), + }) + + let client = Rest.client(Env.envioAppUrl ++ "/api") + + let route = Rest.route(() => { + method: Post, + path: "/hyperindex/init", + input: s => s.body(bodySchema), + responses: [s => s.field("messages", S.array(messageSchema))], + }) + + let getMessages = async (~config) => { + let envioVersion = + PersistedState.getPersistedState()->Result.mapWithDefault(None, p => Some(p.envioVersion)) + let body = makeBody(~envioVersion, ~envioApiToken=Env.envioApiToken, ~config) + + switch await route->Rest.fetch(body, ~client) { + | exception exn => Error(exn->Obj.magic) + | messages => Ok(messages) + } + } +} + +type request<'ok, 'err> = Data('ok) | Loading | Err('err) + +let useMessages = (~config) => { + let (request, setRequest) = React.useState(_ => Loading) + React.useEffect0(() => { + InitApi.getMessages(~config) + ->Promise.thenResolve(res => + switch res { + | Ok(data) => setRequest(_ => Data(data)) + | Error(e) => + Logging.error({ + "msg": "Failed to load messages from envio server", + "err": e->Utils.prettifyExn, + }) + setRequest(_ => Err(e)) + } + ) + ->ignore + None + }) + request +} diff --git a/packages/indexer/generated/src/ink/components/Messages.res b/packages/indexer/generated/src/ink/components/Messages.res new file mode 100644 index 0000000..b7df3ff --- /dev/null +++ b/packages/indexer/generated/src/ink/components/Messages.res @@ -0,0 +1,41 @@ +open Belt +open Ink +module Message = { + @react.component + let make = (~message: CustomHooks.InitApi.message) => { + CustomHooks.InitApi.toTheme}> + {message.content->React.string} + + } +} + +module Notifications = { + @react.component + let make = (~children) => { + <> + + {"Notifications:"->React.string} + {children} + + } +} + +@react.component +let make = (~config) => { + let messages = CustomHooks.useMessages(~config) + <> + {switch messages { + | Data([]) | Loading => React.null //Don't show anything while loading or no messages + | Data(messages) => + + {messages + ->Array.mapWithIndex((i, message) => {Int.toString} message />}) + ->React.array} + + | Err(_) => + + + + }} + +} diff --git a/packages/indexer/generated/src/ink/components/SyncETA.res b/packages/indexer/generated/src/ink/components/SyncETA.res new file mode 100644 index 0000000..f3f83e0 --- /dev/null +++ b/packages/indexer/generated/src/ink/components/SyncETA.res @@ -0,0 +1,198 @@ +open Ink +open Belt + +let isIndexerFullySynced = (chains: array) => { + chains->Array.reduce(true, (accum, current) => { + switch current.progress { + | Synced(_) => accum + | _ => false + } + }) +} + +let getTotalRemainingBlocks = (chains: array) => { + chains->Array.reduce(0, (accum, {progress, currentBlockHeight, latestFetchedBlockNumber, endBlock}) => { + let finalBlock = switch endBlock { + | Some(endBlock) => endBlock + | None => currentBlockHeight + } + switch progress { + | Syncing({latestProcessedBlock}) + | Synced({latestProcessedBlock}) => + finalBlock - latestProcessedBlock + accum + | SearchingForEvents => finalBlock - latestFetchedBlockNumber + accum + } + }) +} + +let getLatestTimeCaughtUpToHead = ( + chains: array, + indexerStartTime: Js.Date.t, +) => { + let latesttimestampCaughtUpToHeadOrEndblockFloat = chains->Array.reduce(0.0, (accum, current) => { + switch current.progress { + | Synced({timestampCaughtUpToHeadOrEndblock}) => + timestampCaughtUpToHeadOrEndblock->Js.Date.valueOf > accum + ? timestampCaughtUpToHeadOrEndblock->Js.Date.valueOf + : accum + | Syncing(_) + | SearchingForEvents => accum + } + }) + + DateFns.formatDistanceWithOptions( + indexerStartTime, + latesttimestampCaughtUpToHeadOrEndblockFloat->Js.Date.fromFloat, + {includeSeconds: true}, + ) +} + +let getTotalBlocksProcessed = (chains: array) => { + chains->Array.reduce(0, (accum, {progress, latestFetchedBlockNumber}) => { + switch progress { + | Syncing({latestProcessedBlock, firstEventBlockNumber}) + | Synced({latestProcessedBlock, firstEventBlockNumber}) => + latestProcessedBlock - firstEventBlockNumber + accum + | SearchingForEvents => latestFetchedBlockNumber + accum + } + }) +} + +let useShouldDisplayEta = (~chains: array) => { + let (shouldDisplayEta, setShouldDisplayEta) = React.useState(_ => false) + React.useEffect(() => { + //Only compute this while it is not displaying eta + if !shouldDisplayEta { + //Each chain should have fetched at least one batch + let (allChainsHaveFetchedABatch, totalNumBatchesFetched) = chains->Array.reduce((true, 0), ( + (allChainsHaveFetchedABatch, totalNumBatchesFetched), + chain, + ) => { + ( + allChainsHaveFetchedABatch && chain.numBatchesFetched >= 1, + totalNumBatchesFetched + chain.numBatchesFetched, + ) + }) + + //Min num fetched batches is num of chains + 2. All + // Chains should have fetched at least 1 batch. (They + // could then be blocked from fetching if they are past + //the max queue size on first batch) + // Only display once an additinal 2 batches have been fetched to allow + // eta to realistically stabalize + let numChains = chains->Array.length + let minTotalBatches = numChains + 2 + let hasMinNumBatches = totalNumBatchesFetched >= minTotalBatches + + let shouldDisplayEta = allChainsHaveFetchedABatch && hasMinNumBatches + + if shouldDisplayEta { + setShouldDisplayEta(_ => true) + } + } + + None + }, [chains]) + + shouldDisplayEta +} + +let useEta = (~chains, ~indexerStartTime) => { + let shouldDisplayEta = useShouldDisplayEta(~chains) + let (secondsToSub, setSecondsToSub) = React.useState(_ => 0.) + let (timeSinceStart, setTimeSinceStart) = React.useState(_ => 0.) + + React.useEffect2(() => { + setTimeSinceStart(_ => Js.Date.now() -. indexerStartTime->Js.Date.valueOf) + setSecondsToSub(_ => 0.) + + let intervalId = Js.Global.setInterval(() => { + setSecondsToSub(prev => prev +. 1.) + }, 1000) + + Some(() => Js.Global.clearInterval(intervalId)) + }, (chains, indexerStartTime)) + + //blocksProcessed/remainingBlocks = timeSoFar/eta + //eta = (timeSoFar/blocksProcessed) * remainingBlocks + + let blocksProcessed = getTotalBlocksProcessed(chains)->Int.toFloat + if shouldDisplayEta && blocksProcessed > 0. { + let nowDate = Js.Date.now() + let remainingBlocks = getTotalRemainingBlocks(chains)->Int.toFloat + let etaFloat = timeSinceStart /. blocksProcessed *. remainingBlocks + let millisToSub = secondsToSub *. 1000. + let etaFloat = Pervasives.max(etaFloat -. millisToSub, 0.0) //template this + let eta = (etaFloat +. nowDate)->Js.Date.fromFloat + let interval: DateFns.interval = {start: nowDate->Js.Date.fromFloat, end: eta} + let duration = DateFns.intervalToDuration(interval) + let formattedDuration = DateFns.formatDuration( + duration, + {format: ["hours", "minutes", "seconds"]}, + ) + let outputString = switch formattedDuration { + | "" => "less than 1 second" + | formattedDuration => formattedDuration + } + Some(outputString) + } else { + None + } +} + +module Syncing = { + @react.component + let make = (~etaStr) => { + + + {"Sync Time ETA: "->React.string} + + {etaStr->React.string} + {" ("->React.string} + + + + {" in progress"->React.string} + {")"->React.string} + + } +} + +module Synced = { + @react.component + let make = (~latestTimeCaughtUpToHeadStr) => { + + {"Time Synced: "->React.string} + {`${latestTimeCaughtUpToHeadStr}`->React.string} + {" ("->React.string} + {"synced"->React.string} + {")"->React.string} + + } +} + +module Calculating = { + @react.component + let make = () => { + + + + + {" Calculating ETA..."->React.string} + + } +} + +@react.component +let make = (~chains, ~indexerStartTime) => { + let optEta = useEta(~chains, ~indexerStartTime) + if isIndexerFullySynced(chains) { + let latestTimeCaughtUpToHeadStr = getLatestTimeCaughtUpToHead(chains, indexerStartTime) + //TODO add real time + } else { + switch optEta { + | Some(etaStr) => + | None => + } + } +} diff --git a/packages/indexer/package.json b/packages/indexer/package.json new file mode 100644 index 0000000..980c4eb --- /dev/null +++ b/packages/indexer/package.json @@ -0,0 +1,21 @@ +{ + "name": "indexer", + "version": "1.0.0", + "description": "Envio HyperIndex indexer for Monad 2048 leaderboard", + "scripts": { + "dev": "envio dev", + "start": "envio start", + "stop": "envio stop", + "codegen": "envio codegen", + "test": "mocha" + }, + "dependencies": { + "envio": "^2.8.0" + }, + "devDependencies": { + "@types/node": "^20.x", + "typescript": "^5.x", + "mocha": "^10.x", + "@types/mocha": "^10.x" + } +} diff --git a/packages/indexer/schema.graphql b/packages/indexer/schema.graphql new file mode 100644 index 0000000..7cd2c65 --- /dev/null +++ b/packages/indexer/schema.graphql @@ -0,0 +1,56 @@ +# Tracks each move in a game (for score calculation) +type GameMove @entity { + id: ID! # txHash + gameId: String! @index # Reference to Game + moveNumber: Int! # 1, 2, 3, 4, 5... + direction: Int! # 0=UP, 1=DOWN, 2=LEFT, 3=RIGHT + boardBefore: String! # Board state before move (hex) + boardAfter: String! # Board state after move (hex) + scoreDelta: Int! # Score gained from this move + gasUsed: BigInt! # Gas consumed + gasPrice: BigInt! # Effective gas price (wei) + monBurned: BigInt! # gasUsed * gasPrice (wei) + timestamp: BigInt! # Block timestamp + txHash: String! # Transaction hash +} + +# Aggregated game data +type Game @entity { + id: ID! # gameId (bytes32) + player: String! @index # Player address (indexed for queries) + score: Int! # Actual game score (sum of merges) + highestTile: Int! # Highest tile value achieved + moveCount: Int! # Total moves played + latestBoard: String! # Current board state (hex) + + # Gas tracking + totalGasUsed: BigInt! # Sum of all gas used + totalMonBurned: BigInt! # Sum of all MON burned (wei) + + # Timestamps + startedAt: BigInt! # Block timestamp of NewGame + lastMoveAt: BigInt! # Block timestamp of last move + + # Status + isActive: Boolean! # True if game still has valid moves +} + +# Player aggregate stats (optional, for profile features) +type Player @entity { + id: ID! # Player address + totalGamesPlayed: Int! # Count of games + totalMovesPlayed: Int! # Sum of all moves + totalMonBurned: BigInt! # Total MON spent on games + bestScore: Int! # Highest score achieved + bestGameId: String # Reference to best game +} + +# Indexer status for frontend state management +type IndexerStatus @entity { + id: ID! # "status" (singleton) + chainId: Int! # Network chain ID + lastIndexedBlock: BigInt! # Most recent block processed + lastIndexedTimestamp: BigInt!# Timestamp of last block + totalGamesIndexed: Int! # Count of games in database + isBackfilling: Boolean! # True if still catching up +} diff --git a/packages/indexer/src/handlers/index.ts b/packages/indexer/src/handlers/index.ts new file mode 100644 index 0000000..a264afd --- /dev/null +++ b/packages/indexer/src/handlers/index.ts @@ -0,0 +1,265 @@ +import { + Monad2048, + Game, + GameMove, + Player, + IndexerStatus, +} from "generated"; + +// ============================================================ +// Board Decoding & Score Calculation +// ============================================================ + +function decodeBoard(boardBigInt: bigint): number[] { + const tiles: number[] = []; + for (let i = 0; i < 16; i++) { + const shift = BigInt((15 - i) * 8); + const cellLog = Number((boardBigInt >> shift) & 0xFFn); + tiles.push(cellLog > 0 ? Math.pow(2, cellLog) : 0); + } + return tiles; +} + +function encodeBoard(tiles: number[]): string { + let result = 0n; + for (let i = 0; i < 16; i++) { + const log = tiles[i] > 0 ? Math.log2(tiles[i]) : 0; + result |= BigInt(log) << BigInt((15 - i) * 8); + } + return result.toString(16).padStart(32, '0'); +} + +function getHighestTile(tiles: number[]): number { + return Math.max(...tiles, 0); +} + +function getBoardSum(tiles: number[]): number { + return tiles.reduce((a, b) => a + b, 0); +} + +/** + * Calculate score delta from a move by detecting merged tiles. + * + * Algorithm: + * 1. Count tile values in both boards + * 2. Tiles that decreased in count were merged + * 3. Score = sum of merged result values (2X for each pair of X) + */ +function calculateScoreDelta( + prevTiles: number[], + newTiles: number[] +): number { + // Count occurrences of each tile value + const prevCounts = new Map(); + const newCounts = new Map(); + + for (const tile of prevTiles) { + if (tile > 0) { + prevCounts.set(tile, (prevCounts.get(tile) || 0) + 1); + } + } + + for (const tile of newTiles) { + if (tile > 0) { + newCounts.set(tile, (newCounts.get(tile) || 0) + 1); + } + } + + let scoreDelta = 0; + + // For each tile value, check if count decreased (meaning merges happened) + // A merge of two Xs creates one 2X, score += 2X + for (const [value, prevCount] of prevCounts) { + const newCount = newCounts.get(value) || 0; + const newDoubleCount = newCounts.get(value * 2) || 0; + const prevDoubleCount = prevCounts.get(value * 2) || 0; + + // Number of merges = (prevCount - newCount) / 2 + // But also check that double value increased + const doubleIncrease = newDoubleCount - prevDoubleCount; + if (doubleIncrease > 0 && prevCount > newCount) { + // Each merge of two Xs gives score of 2X + scoreDelta += doubleIncrease * (value * 2); + } + } + + return scoreDelta; +} + +// ============================================================ +// NewGame Handler +// ============================================================ + +Monad2048.NewGame.handler(async ({ event, context }) => { + const { player, id: gameId, board } = event.args; + const txHash = event.transaction.hash; + const gasUsed = BigInt(event.transaction.gasUsed || 150000); + const gasPrice = BigInt(event.transaction.effectiveGasPrice || event.transaction.gasPrice || 0); + const monBurned = gasUsed * gasPrice; + + // Decode final board after move 3 + const tiles = decodeBoard(board); + const highestTile = getHighestTile(tiles); + + // For NewGame, we receive board state after move 3 + // The contract validates boards[0] -> boards[1] -> boards[2] -> boards[3] + // We don't have intermediate boards in the event, so we estimate initial score + // Based on board sum: score = boardSum - initialTiles (rough estimate) + // For accurate score, we'd need to decode the calldata + + // Simplified: assume minimal merges in first 3 moves + // Real implementation would decode transaction input data + const boardSum = getBoardSum(tiles); + const estimatedScore = Math.max(0, boardSum - 4 - 4); // Subtract ~2 initial tiles + + // Create Game entity + context.Game.set({ + id: gameId, + player: player.toLowerCase(), + score: estimatedScore, + highestTile, + moveCount: 3, + latestBoard: encodeBoard(tiles), + totalGasUsed: gasUsed, + totalMonBurned: monBurned, + startedAt: BigInt(event.block.timestamp), + lastMoveAt: BigInt(event.block.timestamp), + isActive: true, + }); + + // Create initial GameMove entry (represents moves 1-3 batched) + context.GameMove.set({ + id: txHash, + gameId: gameId, + moveNumber: 3, + direction: 0, // Unknown for batched moves + boardBefore: "0".repeat(32), // Initial board unknown + boardAfter: encodeBoard(tiles), + scoreDelta: estimatedScore, + gasUsed: gasUsed, + gasPrice: gasPrice, + monBurned: monBurned, + timestamp: BigInt(event.block.timestamp), + txHash: txHash, + }); + + // Update or create Player + const existingPlayer = await context.Player.get(player.toLowerCase()); + if (existingPlayer) { + const isBetter = estimatedScore > existingPlayer.bestScore; + context.Player.set({ + ...existingPlayer, + totalGamesPlayed: existingPlayer.totalGamesPlayed + 1, + totalMovesPlayed: existingPlayer.totalMovesPlayed + 3, + totalMonBurned: existingPlayer.totalMonBurned + monBurned, + bestScore: isBetter ? estimatedScore : existingPlayer.bestScore, + bestGameId: isBetter ? gameId : existingPlayer.bestGameId, + }); + } else { + context.Player.set({ + id: player.toLowerCase(), + totalGamesPlayed: 1, + totalMovesPlayed: 3, + totalMonBurned: monBurned, + bestScore: estimatedScore, + bestGameId: gameId, + }); + } + + // Update indexer status + await updateIndexerStatus(context, event, true); +}); + +// ============================================================ +// NewMove Handler +// ============================================================ + +Monad2048.NewMove.handler(async ({ event, context }) => { + const { player, id: gameId, move, result } = event.args; + const txHash = event.transaction.hash; + const gasUsed = BigInt(event.transaction.gasUsed || 100000); + const gasPrice = BigInt(event.transaction.effectiveGasPrice || event.transaction.gasPrice || 0); + const monBurned = gasUsed * gasPrice; + + // Get existing game + const game = await context.Game.get(gameId); + if (!game) { + console.warn(`NewMove for unknown game: ${gameId}`); + return; + } + + // Decode boards + const prevTiles = decodeBoard(BigInt("0x" + game.latestBoard)); + const newTiles = decodeBoard(result); + + // Calculate score delta from this move + const scoreDelta = calculateScoreDelta(prevTiles, newTiles); + const newScore = game.score + scoreDelta; + const highestTile = getHighestTile(newTiles); + const newMoveCount = game.moveCount + 1; + + // Update Game entity + context.Game.set({ + ...game, + score: newScore, + highestTile: Math.max(game.highestTile, highestTile), + moveCount: newMoveCount, + latestBoard: encodeBoard(newTiles), + totalGasUsed: game.totalGasUsed + gasUsed, + totalMonBurned: game.totalMonBurned + monBurned, + lastMoveAt: BigInt(event.block.timestamp), + }); + + // Create GameMove entry + context.GameMove.set({ + id: txHash, + gameId: gameId, + moveNumber: newMoveCount, + direction: Number(move), + boardBefore: game.latestBoard, + boardAfter: encodeBoard(newTiles), + scoreDelta: scoreDelta, + gasUsed: gasUsed, + gasPrice: gasPrice, + monBurned: monBurned, + timestamp: BigInt(event.block.timestamp), + txHash: txHash, + }); + + // Update Player stats + const existingPlayer = await context.Player.get(player.toLowerCase()); + if (existingPlayer) { + const isBetter = newScore > existingPlayer.bestScore; + context.Player.set({ + ...existingPlayer, + totalMovesPlayed: existingPlayer.totalMovesPlayed + 1, + totalMonBurned: existingPlayer.totalMonBurned + monBurned, + bestScore: isBetter ? newScore : existingPlayer.bestScore, + bestGameId: isBetter ? gameId : existingPlayer.bestGameId, + }); + } + + // Update indexer status + await updateIndexerStatus(context, event, false); +}); + +// ============================================================ +// Indexer Status Helper +// ============================================================ + +async function updateIndexerStatus(context: any, event: any, isNewGame: boolean) { + const chainId = event.chainId; + const statusId = `status-${chainId}`; + + const existing = await context.IndexerStatus.get(statusId); + const totalGames = existing ? existing.totalGamesIndexed : 0; + + context.IndexerStatus.set({ + id: statusId, + chainId: chainId, + lastIndexedBlock: BigInt(event.block.number), + lastIndexedTimestamp: BigInt(event.block.timestamp), + totalGamesIndexed: totalGames + (isNewGame ? 1 : 0), + isBackfilling: false, // Will be true during initial sync + }); +} diff --git a/packages/indexer/tsconfig.json b/packages/indexer/tsconfig.json new file mode 100644 index 0000000..4f7ff70 --- /dev/null +++ b/packages/indexer/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5275378..318cdfb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,6 +33,15 @@ importers: clsx: specifier: ^2.1.1 version: 2.1.1 + framer-motion: + specifier: ^11.18.0 + version: 11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + graphql: + specifier: ^16.10.0 + version: 16.12.0 + graphql-request: + specifier: ^7.1.2 + version: 7.4.0(graphql@16.12.0) lucide-react: specifier: ^0.484.0 version: 0.484.0(react@19.2.3) @@ -95,8 +104,30 @@ importers: specifier: ^6.2.0 version: 6.4.1(@types/node@22.19.7)(jiti@2.6.1)(lightningcss@1.30.2) + packages/indexer: + dependencies: + envio: + specifier: ^2.8.0 + version: 2.32.3(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + devDependencies: + '@types/mocha': + specifier: ^10.x + version: 10.0.10 + '@types/node': + specifier: ^20.x + version: 20.19.30 + mocha: + specifier: ^10.x + version: 10.8.2 + typescript: + specifier: ^5.x + version: 5.7.3 + packages: + '@adraffy/ens-normalize@1.10.0': + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + '@adraffy/ens-normalize@1.11.1': resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} @@ -116,6 +147,14 @@ packages: '@coinbase/wallet-sdk@4.3.2': resolution: {integrity: sha512-hOLA2YONq8Z9n8f6oVP6N//FEEHOen7nq+adG/cReol6juFTHUelVN5GnA5zTIxiLFMDcrhDwwgCA6Tdb5jubw==} + '@elastic/ecs-helpers@1.1.0': + resolution: {integrity: sha512-MDLb2aFeGjg46O5mLpdCzT5yOUDnXToJSrco2ShqGIXxNJaM8uJjX+4nd+hRYV4Vex8YJyDtOFEVBldQct6ndg==} + engines: {node: '>=10'} + + '@elastic/ecs-pino-format@1.4.0': + resolution: {integrity: sha512-eCSBUTgl8KbPyxky8cecDRLCYu2C1oFV4AZ72bEsI+TxXEvaljaL2kgttfzfu7gW+M89eCz55s49uF2t+YMTWA==} + engines: {node: '>=10'} + '@emotion/is-prop-valid@1.4.0': resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} @@ -125,6 +164,92 @@ packages: '@emotion/unitless@0.10.0': resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + '@envio-dev/hyperfuel-client-darwin-arm64@1.2.2': + resolution: {integrity: sha512-eQyd9kJCIz/4WCTjkjpQg80DA3pdneHP7qhJIVQ2ZG+Jew9o5XDG+uI0Y16AgGzZ6KGmJSJF6wyUaaAjJfbO1Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@envio-dev/hyperfuel-client-darwin-x64@1.2.2': + resolution: {integrity: sha512-l7lRMSoyIiIvKZgQPfgqg7H1xnrQ37A8yUp4S2ys47R8f/wSCSrmMaY1u7n6CxVYCpR9fajwy0/356UgwwhVKw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@envio-dev/hyperfuel-client-linux-arm64-gnu@1.2.2': + resolution: {integrity: sha512-kNiC/1fKuXnoSxp8yEsloDw4Ot/mIcNoYYGLl2CipSIpBtSuiBH5nb6eBcxnRZdKOwf5dKZtZ7MVPL9qJocNJw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@envio-dev/hyperfuel-client-linux-x64-gnu@1.2.2': + resolution: {integrity: sha512-XDkvkBG/frS+xiZkJdY4KqOaoAwyxPdi2MysDQgF8NmZdssi32SWch0r4LTqKWLLlCBg9/R55POeXL5UAjg2wQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@envio-dev/hyperfuel-client-linux-x64-musl@1.2.2': + resolution: {integrity: sha512-DKnKJJSwsYtA7YT0EFGhFB5Eqoo42X0l0vZBv4lDuxngEXiiNjeLemXoKQVDzhcbILD7eyXNa5jWUc+2hpmkEg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@envio-dev/hyperfuel-client-win32-x64-msvc@1.2.2': + resolution: {integrity: sha512-SwIgTAVM9QhCFPyHwL+e1yQ6o3paV6q25klESkXw+r/KW9QPhOOyA6Yr8nfnur3uqMTLJHAKHTLUnkyi/Nh7Aw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@envio-dev/hyperfuel-client@1.2.2': + resolution: {integrity: sha512-raKA6DshYSle0sAOHBV1OkSRFMN+Mkz8sFiMmS3k+m5nP6pP56E17CRRePBL5qmR6ZgSEvGOz/44QUiKNkK9Pg==} + engines: {node: '>= 10'} + + '@envio-dev/hypersync-client-darwin-arm64@0.6.6': + resolution: {integrity: sha512-5uAwSNrnekbHiZBLipUPM0blfO0TS2svyuMmDVE+xbT3M+ODuQl4BFoINd9VY6jC5EoKt8xKCO2K/DHHSeRV4A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@envio-dev/hypersync-client-darwin-x64@0.6.6': + resolution: {integrity: sha512-KFMXWpHbyA0q+sRQ6I8YcLIwZFbBjMEncTnRz6IWXNWAXOsIc1GOORz0j5c9I330bEa4cdQdVVWhgCR1gJiBBA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@envio-dev/hypersync-client-linux-arm64-gnu@0.6.6': + resolution: {integrity: sha512-Iiok/+YNtVft37KGWwDPC8yiN4rAZujYTiYiu+j+vfRpJT6DnYj/TbklZ/6LnSafg18BMPZ2fHT804jP0LndHg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@envio-dev/hypersync-client-linux-x64-gnu@0.6.6': + resolution: {integrity: sha512-WgQRjJS1ncdP/f89dGBKD1luC/r+0EJZgvXSJ+8Jy4dnAeMHUgDFCpjJqIqQKxCWX0fmoiJ7a31SzBNV8Lwqbg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@envio-dev/hypersync-client-linux-x64-musl@0.6.6': + resolution: {integrity: sha512-upFn8FfcUP5pTdSiQAsEr06L2SwyxluMWMaeUCgAEYxDcKTxUkg0J2eDq37RGUQ0KVlLoWLthnSsg4lUz7NIXg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@envio-dev/hypersync-client-win32-x64-msvc@0.6.6': + resolution: {integrity: sha512-bVFDkyrddbMnNGYd6o/QwhrviHOa4th/aMjzMPRjXu48GI8xqlamQ6RBxDGy2lg+BoPhs5k3kwOWl/DY29RwUQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@envio-dev/hypersync-client@0.6.6': + resolution: {integrity: sha512-0r4lPFtk49zB94uvZiONV0SWdr9kigdNIYfYTYcSSuZ396E77tjskjMigDwimZsAA5Qf64x6MsIyzUYIzk/KPg==} + engines: {node: '>= 10'} + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -428,6 +553,11 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@graphql-typed-document-node/core@3.2.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 + '@headlessui/react@2.2.9': resolution: {integrity: sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==} engines: {node: '>=10'} @@ -517,6 +647,9 @@ packages: resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + '@noble/curves@1.4.2': resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} @@ -556,6 +689,10 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + '@phosphor-icons/webcomponents@2.1.5': resolution: {integrity: sha512-JcvQkZxvcX2jK+QCclm8+e8HXqtdFW9xV4/kk2aL9Y3dJA2oQVt+pzbv1orkumz3rfx4K9mn9fDoMr1He1yr7Q==} @@ -1702,12 +1839,18 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mocha@10.0.10': + resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@20.19.30': + resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==} + '@types/node@22.19.7': resolution: {integrity: sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==} @@ -1926,6 +2069,17 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + abitype@1.0.5: + resolution: {integrity: sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + abitype@1.0.6: resolution: {integrity: sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==} peerDependencies: @@ -1980,6 +2134,10 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2035,6 +2193,16 @@ packages: big.js@6.2.2: resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bintrees@1.0.2: + resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} + blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} @@ -2053,9 +2221,16 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} @@ -2084,6 +2259,10 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} @@ -2102,6 +2281,10 @@ packages: charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} @@ -2112,6 +2295,9 @@ packages: cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} @@ -2194,6 +2380,10 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} @@ -2201,6 +2391,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -2230,6 +2424,10 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + diff@5.2.2: + resolution: {integrity: sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==} + engines: {node: '>=0.3.1'} + dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} @@ -2263,6 +2461,30 @@ packages: resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} engines: {node: '>=10.13.0'} + envio-darwin-arm64@2.32.3: + resolution: {integrity: sha512-taRiIvTNKoxWT/8XqJbbsQo4zLUckP00i87L+EtCXpUl/JmhhbZHrePsM6qSNo3pKZOvq0FFo8UMfHNO+34SsA==} + cpu: [arm64] + os: [darwin] + + envio-darwin-x64@2.32.3: + resolution: {integrity: sha512-o1YF+EDDLhJaxMXo7BAZ87nnsge8mMyiKVVkCN+Mf6qaB6dX5K0UTQejJfTwDVT7O8HZY7Mi3mSAGRupWBPlKg==} + cpu: [x64] + os: [darwin] + + envio-linux-arm64@2.32.3: + resolution: {integrity: sha512-YDAu9V6/CARh/ETuB3lSt7Gd7I2IYM3LHIoVlzxAYvDhSf6QwF3OA2c4K9mlF7NxyTLxSP168e6ZwIMDk0o2nw==} + cpu: [arm64] + os: [linux] + + envio-linux-x64@2.32.3: + resolution: {integrity: sha512-V4H4R+p2jBkR4sP9Q0sbJe8Z80RyZN9bMvgoAEXLuFvtqtfMgluAPUMK0pON2zb/fUEXeEAVIs5JAlOFLm8D1Q==} + cpu: [x64] + os: [linux] + + envio@2.32.3: + resolution: {integrity: sha512-kTbBknbjuFit7vVBeKbXz79vzHM9bRdFo2LpsaZ6HRfT6voG0cC/MtWJMRko0CrHuBFNqik/UDWF6ghTqkv6rw==} + hasBin: true + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2296,6 +2518,10 @@ packages: engines: {node: '>=18'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2390,6 +2616,10 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-json-stringify@2.7.13: + resolution: {integrity: sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==} + engines: {node: '>= 10.0.0'} + fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} @@ -2422,6 +2652,10 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} @@ -2438,6 +2672,10 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} @@ -2454,6 +2692,23 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} + framer-motion@11.18.2: + resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2478,10 +2733,19 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -2497,6 +2761,15 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphql-request@7.4.0: + resolution: {integrity: sha512-xfr+zFb/QYbs4l4ty0dltqiXIp07U6sl+tOKAb0t50/EnQek6CVVBLjETXi+FghElytvgaAWtIOt3EV7zLzIAQ==} + peerDependencies: + graphql: 14 - 16 + + graphql@16.12.0: + resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + h3@1.15.5: resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} @@ -2519,6 +2792,13 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + help-me@4.2.0: + resolution: {integrity: sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==} + help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} @@ -2557,12 +2837,20 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} @@ -2582,10 +2870,22 @@ packages: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} engines: {node: '>=6.5.0', npm: '>=3'} + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + is-retry-allowed@2.2.0: resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} engines: {node: '>=10'} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2594,6 +2894,11 @@ packages: peerDependencies: ws: '*' + isows@1.0.4: + resolution: {integrity: sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ==} + peerDependencies: + ws: '*' + isows@1.0.6: resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} peerDependencies: @@ -2753,6 +3058,10 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + lokijs@1.5.12: resolution: {integrity: sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==} @@ -2800,6 +3109,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -2815,6 +3128,17 @@ packages: typescript: optional: true + mocha@10.8.2: + resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} + engines: {node: '>= 14.0.0'} + hasBin: true + + motion-dom@11.18.1: + resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} + + motion-utils@11.18.1: + resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2969,12 +3293,19 @@ packages: pino-abstract-transport@0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + pino-abstract-transport@1.1.0: + resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} + pino-abstract-transport@1.2.0: resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} pino-abstract-transport@2.0.0: resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + pino-pretty@10.2.3: + resolution: {integrity: sha512-4jfIUc8TC1GPUfDyMSlW1STeORqkoxec71yhxIpLDQapUu8WOuoz2TTCoidrIssyz78LZC69whBMPIKCMbi3cw==} + hasBin: true + pino-pretty@10.3.1: resolution: {integrity: sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g==} hasBin: true @@ -2982,6 +3313,9 @@ packages: pino-std-serializers@4.0.0: resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + pino-std-serializers@7.1.0: resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} @@ -2993,6 +3327,10 @@ packages: resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} hasBin: true + pino@8.16.1: + resolution: {integrity: sha512-3bKsVhBmgPjGV9pyn4fO/8RtoVDR8ssW1ev819FsRXlRNgW8gR/9Kx+gCK4UPWd4JjrRDLWpzd/pb1AyWm3MGA==} + hasBin: true + pngjs@5.0.0: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} @@ -3021,6 +3359,9 @@ packages: process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + process-warning@2.3.2: + resolution: {integrity: sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==} + process-warning@5.0.0: resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} @@ -3028,6 +3369,10 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + prom-client@15.0.0: + resolution: {integrity: sha512-UocpgIrKyA2TKLVZDSfm8rGkL13C19YrQBAiG3xo3aDFWcHedxRxI3z+cIcucoxpSO0h5lff5iv/SXoxyeopeA==} + engines: {node: ^16 || ^18 || >=20} + proxy-compare@2.6.0: resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} @@ -3064,6 +3409,9 @@ packages: radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + react-device-detect@2.2.3: resolution: {integrity: sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw==} peerDependencies: @@ -3117,6 +3465,10 @@ packages: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + readdirp@5.0.0: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} @@ -3136,10 +3488,26 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + rescript-schema@9.3.0: + resolution: {integrity: sha512-NiHAjlhFKZCmNhx/Ij40YltCEJJgVNhBWTN/ZfagTg5hdWWuvCiUacxZv+Q/QQolrAhTnHnCrL7RDvZBogHl5A==} + peerDependencies: + rescript: 11.x + peerDependenciesMeta: + rescript: + optional: true + + rescript@11.1.3: + resolution: {integrity: sha512-bI+yxDcwsv7qE34zLuXeO8Qkc2+1ng5ErlSjnUIZdrAWKoGzHXpJ6ZxiiRBUoYnoMsgRwhqvrugIFyNgWasmsw==} + engines: {node: '>=10'} + hasBin: true + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rollup@4.55.3: resolution: {integrity: sha512-y9yUpfQvetAjiDLtNMf1hL9NXchIJgWt6zIKeoB+tCd3npX08Eqfzg60V9DhIGVMtQ0AlMkFw5xa+AQ37zxnAA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3177,6 +3545,9 @@ packages: engines: {node: '>=10'} hasBin: true + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -3237,6 +3608,10 @@ packages: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} + string-similarity@4.0.4: + resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3281,6 +3656,10 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + tabbable@6.4.0: resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} @@ -3294,12 +3673,18 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} + tdigest@0.1.2: + resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==} + text-encoding-utf-8@1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + thread-stream@2.7.0: + resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} @@ -3310,6 +3695,10 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -3506,6 +3895,14 @@ packages: react: optional: true + viem@2.21.0: + resolution: {integrity: sha512-9g3Gw2nOU6t4bNuoDI5vwVExzIxseU0J7Jjx10gA2RNQVrytIrLxggW++tWEe3w4mnnm/pS1WgZFjQ/QKf/nHw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + viem@2.23.2: resolution: {integrity: sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA==} peerDependencies: @@ -3578,6 +3975,9 @@ packages: yaml: optional: true + webauthn-p256@0.0.5: + resolution: {integrity: sha512-drMGNWKdaixZNobeORVIqq7k5DsRC9FnG201K2QjeOoQLmtSDaSsVZdkg6n5jUALJKcAG++zBPJXmv6hy0nWFg==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -3596,10 +3996,17 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -3615,6 +4022,18 @@ packages: utf-8-validate: optional: true + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + 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 + ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -3666,14 +4085,30 @@ packages: y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -3722,6 +4157,8 @@ packages: snapshots: + '@adraffy/ens-normalize@1.10.0': {} + '@adraffy/ens-normalize@1.11.1': {} '@babel/runtime@7.28.6': {} @@ -3801,6 +4238,14 @@ snapshots: eventemitter3: 5.0.4 preact: 10.28.2 + '@elastic/ecs-helpers@1.1.0': + dependencies: + fast-json-stringify: 2.7.13 + + '@elastic/ecs-pino-format@1.4.0': + dependencies: + '@elastic/ecs-helpers': 1.1.0 + '@emotion/is-prop-valid@1.4.0': dependencies: '@emotion/memoize': 0.9.0 @@ -3809,6 +4254,60 @@ snapshots: '@emotion/unitless@0.10.0': {} + '@envio-dev/hyperfuel-client-darwin-arm64@1.2.2': + optional: true + + '@envio-dev/hyperfuel-client-darwin-x64@1.2.2': + optional: true + + '@envio-dev/hyperfuel-client-linux-arm64-gnu@1.2.2': + optional: true + + '@envio-dev/hyperfuel-client-linux-x64-gnu@1.2.2': + optional: true + + '@envio-dev/hyperfuel-client-linux-x64-musl@1.2.2': + optional: true + + '@envio-dev/hyperfuel-client-win32-x64-msvc@1.2.2': + optional: true + + '@envio-dev/hyperfuel-client@1.2.2': + optionalDependencies: + '@envio-dev/hyperfuel-client-darwin-arm64': 1.2.2 + '@envio-dev/hyperfuel-client-darwin-x64': 1.2.2 + '@envio-dev/hyperfuel-client-linux-arm64-gnu': 1.2.2 + '@envio-dev/hyperfuel-client-linux-x64-gnu': 1.2.2 + '@envio-dev/hyperfuel-client-linux-x64-musl': 1.2.2 + '@envio-dev/hyperfuel-client-win32-x64-msvc': 1.2.2 + + '@envio-dev/hypersync-client-darwin-arm64@0.6.6': + optional: true + + '@envio-dev/hypersync-client-darwin-x64@0.6.6': + optional: true + + '@envio-dev/hypersync-client-linux-arm64-gnu@0.6.6': + optional: true + + '@envio-dev/hypersync-client-linux-x64-gnu@0.6.6': + optional: true + + '@envio-dev/hypersync-client-linux-x64-musl@0.6.6': + optional: true + + '@envio-dev/hypersync-client-win32-x64-msvc@0.6.6': + optional: true + + '@envio-dev/hypersync-client@0.6.6': + optionalDependencies: + '@envio-dev/hypersync-client-darwin-arm64': 0.6.6 + '@envio-dev/hypersync-client-darwin-x64': 0.6.6 + '@envio-dev/hypersync-client-linux-arm64-gnu': 0.6.6 + '@envio-dev/hypersync-client-linux-x64-gnu': 0.6.6 + '@envio-dev/hypersync-client-linux-x64-musl': 0.6.6 + '@envio-dev/hypersync-client-win32-x64-msvc': 0.6.6 + '@esbuild/aix-ppc64@0.25.12': optional: true @@ -3897,7 +4396,7 @@ snapshots: '@eslint/config-array@0.21.1': dependencies: '@eslint/object-schema': 2.1.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3913,7 +4412,7 @@ snapshots: '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -4162,6 +4661,10 @@ snapshots: '@floating-ui/utils@0.2.10': {} + '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': + dependencies: + graphql: 16.12.0 + '@headlessui/react@2.2.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@floating-ui/react': 0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -4244,7 +4747,7 @@ snapshots: '@metamask/utils@3.6.0': dependencies: '@types/debug': 4.1.12 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) semver: 7.7.3 superstruct: 1.0.4 transitivePeerDependencies: @@ -4254,7 +4757,7 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@types/debug': 4.1.12 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) semver: 7.7.3 superstruct: 1.0.4 transitivePeerDependencies: @@ -4266,6 +4769,10 @@ snapshots: '@noble/ciphers@1.3.0': {} + '@noble/curves@1.4.0': + dependencies: + '@noble/hashes': 1.4.0 + '@noble/curves@1.4.2': dependencies: '@noble/hashes': 1.4.0 @@ -4298,6 +4805,8 @@ snapshots: '@noble/hashes@1.8.0': {} + '@opentelemetry/api@1.9.0': {} + '@phosphor-icons/webcomponents@2.1.5': dependencies: lit: 3.3.0 @@ -6046,10 +6555,16 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/mocha@10.0.10': {} + '@types/ms@2.1.0': {} '@types/node@12.20.55': {} + '@types/node@20.19.30': + dependencies: + undici-types: 6.21.0 + '@types/node@22.19.7': dependencies: undici-types: 6.21.0 @@ -6098,7 +6613,7 @@ snapshots: '@typescript-eslint/types': 8.53.1 '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.53.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.2(jiti@2.6.1) typescript: 5.7.3 transitivePeerDependencies: @@ -6108,7 +6623,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.7.3) '@typescript-eslint/types': 8.53.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -6127,7 +6642,7 @@ snapshots: '@typescript-eslint/types': 8.53.1 '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.7.3) '@typescript-eslint/utils': 8.53.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.7.3) typescript: 5.7.3 @@ -6142,7 +6657,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.7.3) '@typescript-eslint/types': 8.53.1 '@typescript-eslint/visitor-keys': 8.53.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 @@ -6928,6 +7443,11 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 + abitype@1.0.5(typescript@5.7.3)(zod@3.25.76): + optionalDependencies: + typescript: 5.7.3 + zod: 3.25.76 + abitype@1.0.6(typescript@5.7.3)(zod@3.25.76): optionalDependencies: typescript: 5.7.3 @@ -6970,6 +7490,8 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ansi-colors@4.1.3: {} + ansi-regex@5.0.1: {} ansi-styles@4.3.0: @@ -7023,6 +7545,12 @@ snapshots: big.js@6.2.2: {} + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + bintrees@1.0.2: {} + blakejs@1.2.1: {} bn.js@4.12.2: {} @@ -7044,8 +7572,14 @@ snapshots: dependencies: balanced-match: 1.0.2 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + brorand@1.1.0: {} + browser-stdout@1.3.1: {} + bs58@4.0.1: dependencies: base-x: 3.0.11 @@ -7078,6 +7612,8 @@ snapshots: camelcase@5.3.1: {} + camelcase@6.3.0: {} + camelize@1.0.1: {} canonicalize@2.1.0: {} @@ -7091,6 +7627,18 @@ snapshots: charenc@0.0.2: {} + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + chokidar@5.0.0: dependencies: readdirp: 5.0.0 @@ -7105,6 +7653,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + clsx@1.2.1: {} clsx@2.1.1: {} @@ -7164,16 +7718,22 @@ snapshots: dayjs@1.11.13: {} - debug@4.4.3: + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 decamelize@1.2.0: {} + decamelize@4.0.0: {} + decode-uri-component@0.2.2: {} deep-is@0.1.4: {} + deepmerge@4.3.1: {} + defu@6.1.4: {} delay@5.0.0: {} @@ -7193,6 +7753,8 @@ snapshots: detect-node-es@1.1.0: {} + diff@5.2.2: {} + dijkstrajs@1.0.3: {} dotenv@16.6.1: {} @@ -7238,6 +7800,41 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.0 + envio-darwin-arm64@2.32.3: + optional: true + + envio-darwin-x64@2.32.3: + optional: true + + envio-linux-arm64@2.32.3: + optional: true + + envio-linux-x64@2.32.3: + optional: true + + envio@2.32.3(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76): + dependencies: + '@elastic/ecs-pino-format': 1.4.0 + '@envio-dev/hyperfuel-client': 1.2.2 + '@envio-dev/hypersync-client': 0.6.6 + bignumber.js: 9.1.2 + pino: 8.16.1 + pino-pretty: 10.2.3 + prom-client: 15.0.0 + rescript: 11.1.3 + rescript-schema: 9.3.0(rescript@11.1.3) + viem: 2.21.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76) + optionalDependencies: + envio-darwin-arm64: 2.32.3 + envio-darwin-x64: 2.32.3 + envio-linux-arm64: 2.32.3 + envio-linux-x64: 2.32.3 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + es-define-property@1.0.1: optional: true @@ -7296,6 +7893,8 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 + escalade@3.2.0: {} + escape-string-regexp@4.0.0: {} eslint-plugin-react-hooks@5.2.0(eslint@9.39.2(jiti@2.6.1)): @@ -7332,7 +7931,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -7404,6 +8003,13 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-json-stringify@2.7.13: + dependencies: + ajv: 6.12.6 + deepmerge: 4.3.1 + rfdc: 1.4.1 + string-similarity: 4.0.4 + fast-levenshtein@2.0.6: {} fast-password-entropy@1.1.1: {} @@ -7424,6 +8030,10 @@ snapshots: dependencies: flat-cache: 4.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + filter-obj@1.1.0: {} find-up@4.1.0: @@ -7441,6 +8051,8 @@ snapshots: flatted: 3.3.3 keyv: 4.5.4 + flat@5.0.2: {} + flatted@3.3.3: {} follow-redirects@1.15.11: @@ -7455,6 +8067,18 @@ snapshots: mime-types: 2.1.35 optional: true + framer-motion@11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + motion-dom: 11.18.1 + motion-utils: 11.18.1 + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 1.4.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true @@ -7485,10 +8109,22 @@ snapshots: es-object-atoms: 1.1.1 optional: true + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + globals@14.0.0: {} globals@15.15.0: {} @@ -7498,6 +8134,13 @@ snapshots: graceful-fs@4.2.11: {} + graphql-request@7.4.0(graphql@16.12.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + graphql: 16.12.0 + + graphql@16.12.0: {} + h3@1.15.5: dependencies: cookie-es: 1.2.2 @@ -7530,6 +8173,13 @@ snapshots: function-bind: 1.1.2 optional: true + he@1.2.0: {} + + help-me@4.2.0: + dependencies: + glob: 8.1.0 + readable-stream: 3.6.2 + help-me@5.0.0: {} hmac-drbg@1.0.1: @@ -7563,10 +8213,19 @@ snapshots: imurmurhash@0.1.4: {} + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + inherits@2.0.4: {} iron-webcrypto@1.2.1: {} + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-buffer@1.1.6: {} is-extglob@2.1.1: {} @@ -7579,15 +8238,25 @@ snapshots: is-hex-prefixed@1.0.0: {} + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + is-retry-allowed@2.2.0: optional: true + is-unicode-supported@0.1.0: {} + isexe@2.0.0: {} isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10) + isows@1.0.4(ws@8.17.1(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.17.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) + isows@1.0.6(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: ws: 8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) @@ -7731,6 +8400,11 @@ snapshots: lodash.merge@4.6.2: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + lokijs@1.5.12: {} lru-cache@11.2.4: {} @@ -7774,6 +8448,10 @@ snapshots: dependencies: brace-expansion: 1.1.12 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 @@ -7784,6 +8462,35 @@ snapshots: optionalDependencies: typescript: 5.7.3 + mocha@10.8.2: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.4.3(supports-color@8.1.1) + diff: 5.2.2 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 8.1.0 + he: 1.2.0 + js-yaml: 4.1.1 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + + motion-dom@11.18.1: + dependencies: + motion-utils: 11.18.1 + + motion-utils@11.18.1: {} + ms@2.1.3: {} multiformats@9.9.0: {} @@ -7990,6 +8697,11 @@ snapshots: duplexify: 4.1.3 split2: 4.2.0 + pino-abstract-transport@1.1.0: + dependencies: + readable-stream: 4.7.0 + split2: 4.2.0 + pino-abstract-transport@1.2.0: dependencies: readable-stream: 4.7.0 @@ -7999,6 +8711,23 @@ snapshots: dependencies: split2: 4.2.0 + pino-pretty@10.2.3: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 3.0.2 + fast-safe-stringify: 2.1.1 + help-me: 4.2.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pump: 3.0.3 + readable-stream: 4.7.0 + secure-json-parse: 2.7.0 + sonic-boom: 3.8.1 + strip-json-comments: 3.1.1 + pino-pretty@10.3.1: dependencies: colorette: 2.0.20 @@ -8018,6 +8747,8 @@ snapshots: pino-std-serializers@4.0.0: {} + pino-std-serializers@6.2.2: {} + pino-std-serializers@7.1.0: {} pino@10.0.0: @@ -8048,6 +8779,20 @@ snapshots: sonic-boom: 2.8.0 thread-stream: 0.15.2 + pino@8.16.1: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.1.0 + pino-std-serializers: 6.2.2 + process-warning: 2.3.2 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 3.8.1 + thread-stream: 2.7.0 + pngjs@5.0.0: {} postcss-value-parser@4.2.0: {} @@ -8072,10 +8817,17 @@ snapshots: process-warning@1.0.0: {} + process-warning@2.3.2: {} + process-warning@5.0.0: {} process@0.11.10: {} + prom-client@15.0.0: + dependencies: + '@opentelemetry/api': 1.9.0 + tdigest: 0.1.2 + proxy-compare@2.6.0: {} proxy-compare@3.0.1: {} @@ -8114,6 +8866,10 @@ snapshots: radix3@1.1.2: {} + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + react-device-detect@2.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 @@ -8168,6 +8924,10 @@ snapshots: process: 0.11.10 string_decoder: 1.3.0 + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + readdirp@5.0.0: {} real-require@0.1.0: {} @@ -8178,8 +8938,16 @@ snapshots: require-main-filename@2.0.0: {} + rescript-schema@9.3.0(rescript@11.1.3): + optionalDependencies: + rescript: 11.1.3 + + rescript@11.1.3: {} + resolve-from@4.0.0: {} + rfdc@1.4.1: {} + rollup@4.55.3: dependencies: '@types/estree': 1.0.8 @@ -8240,6 +9008,10 @@ snapshots: semver@7.7.3: {} + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + set-blocking@2.0.0: {} set-cookie-parser@2.7.2: {} @@ -8287,6 +9059,8 @@ snapshots: strict-uri-encode@2.0.0: {} + string-similarity@4.0.4: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -8332,6 +9106,10 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + tabbable@6.4.0: {} tailwind-merge@3.4.0: {} @@ -8340,12 +9118,20 @@ snapshots: tapable@2.3.0: {} + tdigest@0.1.2: + dependencies: + bintrees: 1.0.2 + text-encoding-utf-8@1.0.2: {} thread-stream@0.15.2: dependencies: real-require: 0.1.0 + thread-stream@2.7.0: + dependencies: + real-require: 0.2.0 + thread-stream@3.1.0: dependencies: real-require: 0.2.0 @@ -8357,6 +9143,10 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + tr46@0.0.3: {} ts-api-utils@2.4.0(typescript@5.7.3): @@ -8476,6 +9266,24 @@ snapshots: '@types/react': 19.2.9 react: 19.2.3 + viem@2.21.0(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76): + dependencies: + '@adraffy/ens-normalize': 1.10.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.7.3)(zod@3.25.76) + isows: 1.0.4(ws@8.17.1(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + webauthn-p256: 0.0.5 + ws: 8.17.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + viem@2.23.2(bufferutil@4.1.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.8.1 @@ -8592,6 +9400,11 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 + webauthn-p256@0.0.5: + dependencies: + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + webidl-conversions@3.0.1: {} whatwg-url@5.0.0: @@ -8607,12 +9420,20 @@ snapshots: word-wrap@1.2.5: {} + workerpool@6.5.1: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrappy@1.0.2: {} ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10): @@ -8620,6 +9441,11 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 5.0.10 + ws@8.17.1(bufferutil@4.1.0)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 5.0.10 + ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.1.0 @@ -8642,11 +9468,22 @@ snapshots: y18n@4.0.3: {} + y18n@5.0.8: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 + yargs-parser@20.2.9: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + yargs@15.4.1: dependencies: cliui: 6.0.0 @@ -8661,6 +9498,16 @@ snapshots: y18n: 4.0.3 yargs-parser: 18.1.3 + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + yocto-queue@0.1.0: {} zod@3.22.4: {} From c501d2b3e5754a47a59aefd9914b44225c211472 Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 29 Jan 2026 13:59:59 +0530 Subject: [PATCH 09/18] fix: run local setup --- packages/indexer/config.yaml | 2 +- .../generated/persisted_state.envio.json | 2 +- packages/indexer/generated/src/ConfigYAML.res | 2 +- packages/indexer/generated/src/Generated.res | 2 +- packages/indexer/generated/tsconfig.json | 18 ++++ packages/indexer/src/handlers/index.ts | 85 +++++++------------ 6 files changed, 51 insertions(+), 60 deletions(-) create mode 100644 packages/indexer/generated/tsconfig.json diff --git a/packages/indexer/config.yaml b/packages/indexer/config.yaml index daa961e..99a2225 100644 --- a/packages/indexer/config.yaml +++ b/packages/indexer/config.yaml @@ -2,7 +2,7 @@ name: monad-2048-leaderboard description: Indexes Monad 2048 game events for leaderboard with score and gas tracking networks: - id: 143 # Monad Mainnet - start_block: 0 # Or contract deployment block for faster sync + start_block: 50000000 # Recent block for faster initial sync contracts: - name: Monad2048 address: "0x53748668642735CDa45935716525E7DFbC8aAACC" diff --git a/packages/indexer/generated/persisted_state.envio.json b/packages/indexer/generated/persisted_state.envio.json index ca3d9aa..390fd95 100644 --- a/packages/indexer/generated/persisted_state.envio.json +++ b/packages/indexer/generated/persisted_state.envio.json @@ -1 +1 @@ -{"envio_version":"2.32.3","config_hash":"[11, 81, 124, 190, 119, 187, 145, 110, 160, 60, 97, 11, 183, 142, 88, 3, 11, 63, 57, 42, 19, 167, 255, 14, 223, 230, 78, 11, 95, 208, 14, 198]","schema_hash":"3f071da5b5ef67a0f28077da7499c37ff3f6c195bec090d0eb4667514ac7c827","handler_files_hash":"984432ec69a6f61c3ec252cc6602b25149aa84b382dc17881c71d63a5537de95","abi_files_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} +{"envio_version":"2.32.3","config_hash":"[96, 85, 178, 79, 1, 201, 200, 145, 217, 166, 34, 70, 100, 61, 180, 166, 64, 217, 222, 31, 111, 35, 89, 156, 16, 219, 253, 253, 203, 142, 9, 205]","schema_hash":"3f071da5b5ef67a0f28077da7499c37ff3f6c195bec090d0eb4667514ac7c827","handler_files_hash":"9da79151c65d9448c63af742609dbd8b701a82e69c703390c8f8702331426ef1","abi_files_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} diff --git a/packages/indexer/generated/src/ConfigYAML.res b/packages/indexer/generated/src/ConfigYAML.res index 03c03c7..2e309bd 100644 --- a/packages/indexer/generated/src/ConfigYAML.res +++ b/packages/indexer/generated/src/ConfigYAML.res @@ -54,7 +54,7 @@ let publicConfig = ChainMap.fromArrayUnsafe([ { confirmedBlockThreshold: 200, syncSource: HyperSync({endpointUrl: "https://143.hypersync.xyz"}), - startBlock: 0, + startBlock: 50000000, contracts, lowercaseAddresses: false } diff --git a/packages/indexer/generated/src/Generated.res b/packages/indexer/generated/src/Generated.res index 57bd1e2..1f8e02e 100644 --- a/packages/indexer/generated/src/Generated.res +++ b/packages/indexer/generated/src/Generated.res @@ -43,7 +43,7 @@ let makeGeneratedConfig = () => { let chain = ChainMap.Chain.makeUnsafe(~chainId=143) { Config.maxReorgDepth: 200, - startBlock: 0, + startBlock: 50000000, id: 143, contracts, sources: NetworkSources.evm(~chain, ~contracts=[{name: "Monad2048",events: [Types.Monad2048.NewGame.register(), Types.Monad2048.NewMove.register()],abi: Types.Monad2048.abi}], ~hyperSync=Some("https://143.hypersync.xyz"), ~allEventSignatures=[Types.Monad2048.eventSignatures]->Belt.Array.concatMany, ~shouldUseHypersyncClientDecoder=true, ~rpcs=[], ~lowercaseAddresses=false) diff --git a/packages/indexer/generated/tsconfig.json b/packages/indexer/generated/tsconfig.json new file mode 100644 index 0000000..1924f59 --- /dev/null +++ b/packages/indexer/generated/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "CommonJS", + "moduleResolution": "node", + "esModuleInterop": true, + "strict": false, + "skipLibCheck": true, + "resolveJsonModule": true, + "baseUrl": ".", + "paths": { + "generated": ["."], + "generated/*": ["./*"] + } + }, + "include": ["src/**/*", "../src/**/*"], + "exclude": ["node_modules"] +} diff --git a/packages/indexer/src/handlers/index.ts b/packages/indexer/src/handlers/index.ts index a264afd..50060f2 100644 --- a/packages/indexer/src/handlers/index.ts +++ b/packages/indexer/src/handlers/index.ts @@ -1,10 +1,9 @@ -import { - Monad2048, - Game, - GameMove, - Player, - IndexerStatus, -} from "generated"; +import { Monad2048 } from "../../generated"; +import type { + Monad2048_NewGame_event, + Monad2048_NewMove_event, + handlerContext, +} from "../../generated"; // ============================================================ // Board Decoding & Score Calculation @@ -39,17 +38,11 @@ function getBoardSum(tiles: number[]): number { /** * Calculate score delta from a move by detecting merged tiles. - * - * Algorithm: - * 1. Count tile values in both boards - * 2. Tiles that decreased in count were merged - * 3. Score = sum of merged result values (2X for each pair of X) */ function calculateScoreDelta( prevTiles: number[], newTiles: number[] ): number { - // Count occurrences of each tile value const prevCounts = new Map(); const newCounts = new Map(); @@ -67,18 +60,13 @@ function calculateScoreDelta( let scoreDelta = 0; - // For each tile value, check if count decreased (meaning merges happened) - // A merge of two Xs creates one 2X, score += 2X for (const [value, prevCount] of prevCounts) { const newCount = newCounts.get(value) || 0; const newDoubleCount = newCounts.get(value * 2) || 0; const prevDoubleCount = prevCounts.get(value * 2) || 0; - // Number of merges = (prevCount - newCount) / 2 - // But also check that double value increased const doubleIncrease = newDoubleCount - prevDoubleCount; if (doubleIncrease > 0 && prevCount > newCount) { - // Each merge of two Xs gives score of 2X scoreDelta += doubleIncrease * (value * 2); } } @@ -90,29 +78,19 @@ function calculateScoreDelta( // NewGame Handler // ============================================================ -Monad2048.NewGame.handler(async ({ event, context }) => { - const { player, id: gameId, board } = event.args; +Monad2048.NewGame.handler(async ({ event, context }: { event: Monad2048_NewGame_event; context: handlerContext }) => { + const { player, id: gameId, board } = event.params; const txHash = event.transaction.hash; - const gasUsed = BigInt(event.transaction.gasUsed || 150000); - const gasPrice = BigInt(event.transaction.effectiveGasPrice || event.transaction.gasPrice || 0); + const gasUsed = event.transaction.gasUsed ?? 150000n; + const gasPrice = event.transaction.effectiveGasPrice ?? event.transaction.gasPrice ?? 0n; const monBurned = gasUsed * gasPrice; - // Decode final board after move 3 const tiles = decodeBoard(board); const highestTile = getHighestTile(tiles); - // For NewGame, we receive board state after move 3 - // The contract validates boards[0] -> boards[1] -> boards[2] -> boards[3] - // We don't have intermediate boards in the event, so we estimate initial score - // Based on board sum: score = boardSum - initialTiles (rough estimate) - // For accurate score, we'd need to decode the calldata - - // Simplified: assume minimal merges in first 3 moves - // Real implementation would decode transaction input data const boardSum = getBoardSum(tiles); - const estimatedScore = Math.max(0, boardSum - 4 - 4); // Subtract ~2 initial tiles + const estimatedScore = Math.max(0, boardSum - 8); - // Create Game entity context.Game.set({ id: gameId, player: player.toLowerCase(), @@ -127,13 +105,12 @@ Monad2048.NewGame.handler(async ({ event, context }) => { isActive: true, }); - // Create initial GameMove entry (represents moves 1-3 batched) context.GameMove.set({ id: txHash, gameId: gameId, moveNumber: 3, - direction: 0, // Unknown for batched moves - boardBefore: "0".repeat(32), // Initial board unknown + direction: 0, + boardBefore: "0".repeat(32), boardAfter: encodeBoard(tiles), scoreDelta: estimatedScore, gasUsed: gasUsed, @@ -143,7 +120,6 @@ Monad2048.NewGame.handler(async ({ event, context }) => { txHash: txHash, }); - // Update or create Player const existingPlayer = await context.Player.get(player.toLowerCase()); if (existingPlayer) { const isBetter = estimatedScore > existingPlayer.bestScore; @@ -166,39 +142,34 @@ Monad2048.NewGame.handler(async ({ event, context }) => { }); } - // Update indexer status - await updateIndexerStatus(context, event, true); + await updateIndexerStatus(context, event.chainId, event.block.number, event.block.timestamp, true); }); // ============================================================ // NewMove Handler // ============================================================ -Monad2048.NewMove.handler(async ({ event, context }) => { - const { player, id: gameId, move, result } = event.args; +Monad2048.NewMove.handler(async ({ event, context }: { event: Monad2048_NewMove_event; context: handlerContext }) => { + const { player, id: gameId, move, result } = event.params; const txHash = event.transaction.hash; - const gasUsed = BigInt(event.transaction.gasUsed || 100000); - const gasPrice = BigInt(event.transaction.effectiveGasPrice || event.transaction.gasPrice || 0); + const gasUsed = event.transaction.gasUsed ?? 100000n; + const gasPrice = event.transaction.effectiveGasPrice ?? event.transaction.gasPrice ?? 0n; const monBurned = gasUsed * gasPrice; - // Get existing game const game = await context.Game.get(gameId); if (!game) { console.warn(`NewMove for unknown game: ${gameId}`); return; } - // Decode boards const prevTiles = decodeBoard(BigInt("0x" + game.latestBoard)); const newTiles = decodeBoard(result); - // Calculate score delta from this move const scoreDelta = calculateScoreDelta(prevTiles, newTiles); const newScore = game.score + scoreDelta; const highestTile = getHighestTile(newTiles); const newMoveCount = game.moveCount + 1; - // Update Game entity context.Game.set({ ...game, score: newScore, @@ -210,7 +181,6 @@ Monad2048.NewMove.handler(async ({ event, context }) => { lastMoveAt: BigInt(event.block.timestamp), }); - // Create GameMove entry context.GameMove.set({ id: txHash, gameId: gameId, @@ -226,7 +196,6 @@ Monad2048.NewMove.handler(async ({ event, context }) => { txHash: txHash, }); - // Update Player stats const existingPlayer = await context.Player.get(player.toLowerCase()); if (existingPlayer) { const isBetter = newScore > existingPlayer.bestScore; @@ -239,16 +208,20 @@ Monad2048.NewMove.handler(async ({ event, context }) => { }); } - // Update indexer status - await updateIndexerStatus(context, event, false); + await updateIndexerStatus(context, event.chainId, event.block.number, event.block.timestamp, false); }); // ============================================================ // Indexer Status Helper // ============================================================ -async function updateIndexerStatus(context: any, event: any, isNewGame: boolean) { - const chainId = event.chainId; +async function updateIndexerStatus( + context: handlerContext, + chainId: number, + blockNumber: number, + timestamp: number, + isNewGame: boolean +) { const statusId = `status-${chainId}`; const existing = await context.IndexerStatus.get(statusId); @@ -257,9 +230,9 @@ async function updateIndexerStatus(context: any, event: any, isNewGame: boolean) context.IndexerStatus.set({ id: statusId, chainId: chainId, - lastIndexedBlock: BigInt(event.block.number), - lastIndexedTimestamp: BigInt(event.block.timestamp), + lastIndexedBlock: BigInt(blockNumber), + lastIndexedTimestamp: BigInt(timestamp), totalGamesIndexed: totalGames + (isNewGame ? 1 : 0), - isBackfilling: false, // Will be true during initial sync + isBackfilling: false, }); } From 07893c9e1a3c0ff2c5e45746658162b32aaf948a Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 29 Jan 2026 14:17:03 +0530 Subject: [PATCH 10/18] fix: clear board on logout --- packages/frontend/src/App.tsx | 14 +++++++++++++- packages/frontend/src/components/LoginButton.tsx | 13 +++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 33ff05e..498b002 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -372,6 +372,18 @@ export default function Game2048() { setGameOver(false); }; + // Clear game state on logout + const clearGameState = () => { + setBoardState({ tiles: [], score: 0 }); + setActiveGameId("0x"); + setEncodedMoves([]); + setPlayedMovesCount(0); + setResetBoards([]); + setGameOver(false); + setGameError(false); + setGameErrorText(""); + }; + function randomIDForAddress(address: string): Hex { if (!isAddress(address)) { throw new Error("Invalid Ethereum address"); @@ -707,7 +719,7 @@ export default function Game2048() {
- {user && } + {user && }
diff --git a/packages/frontend/src/components/LoginButton.tsx b/packages/frontend/src/components/LoginButton.tsx index 273f1dc..c4c4015 100644 --- a/packages/frontend/src/components/LoginButton.tsx +++ b/packages/frontend/src/components/LoginButton.tsx @@ -45,10 +45,19 @@ export default function LoginButton({ resetGame }: LoginButtonProps) { ); } -export function PlayerInfo() { +type PlayerInfoProps = { + onLogout: () => void; +}; + +export function PlayerInfo({ onLogout }: PlayerInfoProps) { const { logout } = useLogout(); const { user } = usePrivy(); + const handleLogout = () => { + onLogout(); + logout(); + }; + const [address, setAddress] = useState(""); useEffect(() => { if (!user) { @@ -97,7 +106,7 @@ export function PlayerInfo() { From 15de2c2998a5c27f7174bbe3a39efa403ed0b5f0 Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 29 Jan 2026 14:33:43 +0530 Subject: [PATCH 11/18] fix: score calculation sync between local and indexer --- packages/frontend/src/App.tsx | 6 +- .../frontend/src/components/Scorecard.tsx | 34 ++++++++-- packages/indexer/src/handlers/index.ts | 62 ++++++++++++++----- 3 files changed, 78 insertions(+), 24 deletions(-) diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 498b002..4577580 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -241,8 +241,10 @@ export default function Game2048() { // Add the merged tile newBoardState.tiles.push(mergedTile); - // Update the score + // Only count score once the game has started on-chain (after move 3) + if (currentMove > 3) { newBoardState.score += mergedTile.value; + } moved = true; } @@ -716,7 +718,7 @@ export default function Game2048() {
- + 3} />
{user && } diff --git a/packages/frontend/src/components/Scorecard.tsx b/packages/frontend/src/components/Scorecard.tsx index d4a2f67..116ed01 100644 --- a/packages/frontend/src/components/Scorecard.tsx +++ b/packages/frontend/src/components/Scorecard.tsx @@ -6,12 +6,32 @@ import { Card } from "./ui/card"; type ScorecardProps = { score: number; + isGameStarted?: boolean; }; -export default function Scorecard({ score }: ScorecardProps) { +function LoadingIndicator() { + return ( +
+ {[0, 1, 2, 3].map((i) => ( +
+ ))} +
+ ); +} + +export default function Scorecard({ score, isGameStarted = true }: ScorecardProps) { const [displayScore, setDisplayScore] = useState(0); useEffect(() => { + if (!isGameStarted) return; + const targetScore = score; if (displayScore !== targetScore) { const duration = 150; // Total animation duration in ms @@ -36,14 +56,18 @@ export default function Scorecard({ score }: ScorecardProps) { requestAnimationFrame(animate); } - }, [score, displayScore]); + }, [score, displayScore, isGameStarted]); return (

SCORE

-

- {displayScore} -

+ {isGameStarted ? ( +

+ {displayScore} +

+ ) : ( + + )}