From 08c5df68c0eefd02b853eebe338090928e143f11 Mon Sep 17 00:00:00 2001 From: Brendan Ryan Date: Tue, 31 Mar 2026 14:35:20 -0700 Subject: [PATCH 1/8] feat: use accounts SDK for demo connectors Replace wagmi/tempo's webAuthn + KeyManager with accounts/wagmi's webAuthn connector for all interactive demos. This switches the docs site to use the official accounts SDK (tempoxyz/accounts) for wallet connection in demo components. - Add accounts@^0.4.7 dependency - Update wagmi.config.ts to import webAuthn from accounts/wagmi - Simplify connector config: authUrl replaces KeyManager.http, rpId is now server-side only - Add accounts to minimumReleaseAgeExclude in pnpm-workspace.yaml --- package.json | 1 + pnpm-lock.yaml | 409 ++++++++++++++++++++++++++++++++++++++++++-- pnpm-workspace.yaml | 2 + src/wagmi.config.ts | 14 +- 4 files changed, 403 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index cde841f3..6205b45b 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@vercel/analytics": "^1.6.1", "@vercel/speed-insights": "^1.3.1", "abitype": "^1.2.3", + "accounts": "^0.4.7", "cva": "1.0.0-beta.4", "mermaid": "^11.12.2", "monaco-editor": "^0.55.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58585b13..c57f9bde 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,6 +37,9 @@ importers: abitype: specifier: ^1.2.3 version: 1.2.3(typescript@5.9.3)(zod@4.3.5) + accounts: + specifier: ^0.4.7 + version: 0.4.7(@modelcontextprotocol/sdk@1.29.0(zod@4.3.5))(@types/react@19.2.9)(@wagmi/core@3.4.0(@tanstack/query-core@5.90.19)(@types/react@19.2.9)(ox@0.11.3(typescript@5.9.3)(zod@4.3.5))(react@19.2.3)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.3))(viem@2.47.5(typescript@5.9.3)(zod@4.3.5)))(express@5.2.1)(hono@4.11.5)(openapi-types@12.1.3)(react@19.2.3)(typescript@5.9.3)(use-sync-external-store@1.6.0(react@19.2.3))(viem@2.47.5(typescript@5.9.3)(zod@4.3.5)) cva: specifier: 1.0.0-beta.4 version: 1.0.0-beta.4(typescript@5.9.3) @@ -78,7 +81,7 @@ importers: version: 4.1.18 tempo.ts: specifier: ^0.14.0 - version: 0.14.0(@remix-run/headers@0.17.2)(@remix-run/route-pattern@0.15.3)(@remix-run/session@0.4.1)(typescript@5.9.3)(viem@2.47.5(typescript@5.9.3)(zod@4.3.5))(zod@4.3.5) + version: 0.14.0(@remix-run/headers@0.19.0)(@remix-run/route-pattern@0.19.0)(@remix-run/session@0.4.1)(typescript@5.9.3)(viem@2.47.5(typescript@5.9.3)(zod@4.3.5))(zod@4.3.5) unplugin-auto-import: specifier: ^21.0.0 version: 21.0.0 @@ -149,6 +152,12 @@ packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + '@apidevtools/json-schema-ref-parser@14.2.1': + resolution: {integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg==} + engines: {node: '>= 20'} + peerDependencies: + '@types/json-schema': ^7.0.15 + '@babel/code-frame@7.28.6': resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} engines: {node: '>=6.9.0'} @@ -279,24 +288,28 @@ packages: engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + libc: [musl] '@biomejs/cli-linux-arm64@2.3.11': resolution: {integrity: sha512-l4xkGa9E7Uc0/05qU2lMYfN1H+fzzkHgaJoy98wO+b/7Gl78srbCRRgwYSW+BTLixTBrM6Ede5NSBwt7rd/i6g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + libc: [glibc] '@biomejs/cli-linux-x64-musl@2.3.11': resolution: {integrity: sha512-vU7a8wLs5C9yJ4CB8a44r12aXYb8yYgBn+WeyzbMjaCMklzCv1oXr8x+VEyWodgJt9bDmhiaW/I0RHbn7rsNmw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + libc: [musl] '@biomejs/cli-linux-x64@2.3.11': resolution: {integrity: sha512-/1s9V/H3cSe0r0Mv/Z8JryF5x9ywRxywomqZVLHAoa/uN0eY7F8gEngWKNS5vbbN/BsfpCG5yeBT5ENh50Frxg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + libc: [glibc] '@biomejs/cli-win32-arm64@2.3.11': resolution: {integrity: sha512-PZQ6ElCOnkYapSsysiTy0+fYX+agXPlWugh6+eQ6uPKI3vKAqNp6TnMhoM3oY2NltSB89hz59o8xIfOdyhi9Iw==} @@ -544,6 +557,10 @@ packages: peerDependencies: hono: ^4 + '@humanwhocodes/momoa@2.0.4': + resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} + engines: {node: '>=10.10.0'} + '@iconify-json/lucide@1.2.86': resolution: {integrity: sha512-W/Jz7/gGOkI9u43r+UHmQtZtcyw2YLvMwiHa01WV6V4DYltrPNXiD+bCa+djV8LZB1uwF8CiympOMIbgiQ74nA==} @@ -630,6 +647,16 @@ packages: '@cfworker/json-schema': optional: true + '@modelcontextprotocol/sdk@1.29.0': + resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + '@monaco-editor/loader@1.7.0': resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} @@ -781,6 +808,25 @@ packages: peerDependencies: react: '>=16.8' + '@readme/better-ajv-errors@2.4.0': + resolution: {integrity: sha512-9WODaOAKSl/mU+MYNZ2aHCrkoRSvmQ+1YkLj589OEqqjOAhbn8j7Z+ilYoiTu/he6X63/clsxxAB4qny9/dDzg==} + engines: {node: '>=18'} + peerDependencies: + ajv: 4.11.8 - 8 + + '@readme/openapi-parser@6.0.0': + resolution: {integrity: sha512-PaTnrKlKgEJZzjJ77AAhGe28NiyLBdiKMx95rJ9xlLZ8QLqYitMpPBQAKhsuEGOWQQbsIMfBZEPavbXghACQHA==} + engines: {node: '>=20'} + peerDependencies: + openapi-types: '>=7' + + '@readme/openapi-schemas@3.1.0': + resolution: {integrity: sha512-9FC/6ho8uFa8fV50+FPy/ngWN53jaUu4GRXlAjcxIRrzhltJnpKkBG2Tp0IDraFJeWrOpk84RJ9EMEEYzaI1Bw==} + engines: {node: '>=18'} + + '@remix-run/fetch-proxy@0.7.1': + resolution: {integrity: sha512-rPLfOpAaCXtm1dLI45uIPKERNbXbrh0P9AJc1sliz8pWd/McaFYjdr5KzB4QrFSfPvEt/Wmy6F2521qB1kK0ug==} + '@remix-run/fetch-router@0.12.0': resolution: {integrity: sha512-BDG/VepZg2ZJ7wav3HDrB9ZJLpzZONHi9ItOkFMcKsrbm5g7jjrxW5Vdijbbebz12pbJQu6VKTwLVXp/LgFusA==} peerDependencies: @@ -788,14 +834,17 @@ packages: '@remix-run/route-pattern': ^0.15.3 '@remix-run/session': ^0.4.0 - '@remix-run/headers@0.17.2': - resolution: {integrity: sha512-IfHVCftsRKfk7kIQUxP9WDCe0OXj9X0lDRfFxk3CPcXJenBUEsYEPeBoW/YCZlKhdRWZjQlrofdk63lMSJmy8w==} + '@remix-run/fetch-router@0.17.0': + resolution: {integrity: sha512-3FeJGrTqrKKCvZdQWijbCXTEHKcdttkLFbI2ogfpZ+iDYSNZ9036wgDXuuoZqg6d+D0E8Unhk5ZwrLKDCd/hOw==} + + '@remix-run/headers@0.19.0': + resolution: {integrity: sha512-+62NbkXuXm9r/NdG6KfH9OCKofCWm8VjkrVPICiHKtRl8Gf2Vi6eFTN4mGgBlZRhd5mmEVRV4hTIn/JUSHDAOw==} '@remix-run/node-fetch-server@0.13.0': resolution: {integrity: sha512-1EsNo0ZpgXu/90AWoRZf/oE3RVTUS80tiTUpt+hv5pjtAkw7icN4WskDwz/KdAw5ARbJLMhZBrO1NqThmy/McA==} - '@remix-run/route-pattern@0.15.3': - resolution: {integrity: sha512-7s4Oy9q6Oz9Vfwg0iZscpmYVASNG9fLqbCa+YY0+SWKksDpvCRiW46xp3S3zEvT7zEP7G55FKA+JdrqqK2AOXw==} + '@remix-run/route-pattern@0.19.0': + resolution: {integrity: sha512-RXKaIJ2Lx01uyZc0iw+yLzowFCa1/NuB8jN7QTo4QUe2CaUGtvPGdhgrTUp75lyNNCSJIrM9SaAJ6c1pjZdmoA==} '@remix-run/session@0.4.1': resolution: {integrity: sha512-Bm6aKYgutb/raHZ3laloz8g/Qu7f3CeK3o4gUVDMxtEiAdWCzJamwHoTpGOc5+g1Kuy7z85v4M6nGrF06MFDSg==} @@ -849,66 +898,79 @@ packages: resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.56.0': resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.56.0': resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.56.0': resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.56.0': resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.56.0': resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.56.0': resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.56.0': resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.56.0': resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.56.0': resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.56.0': resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.56.0': resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.56.0': resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.56.0': resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==} @@ -1100,24 +1162,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-arm64-musl@4.1.18': resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@tailwindcss/oxide-linux-x64-gnu@4.1.18': resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-x64-musl@4.1.18': resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@tailwindcss/oxide-wasm32-wasi@4.1.18': resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} @@ -1169,24 +1235,28 @@ packages: engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@takumi-rs/core-linux-arm64-musl@0.62.8': resolution: {integrity: sha512-qR04H4DQfFsKmkl2kq/fh48zTC3QqBdvHjmHzJUckIktvJPKk1aK+jERIXeARkH6pfQuq+NI5Kbl1t9//qb8nQ==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@takumi-rs/core-linux-x64-gnu@0.62.8': resolution: {integrity: sha512-/LouBAUVqK5/H3pwzOnitRz4JEJNrGJEN/L3TU0375M+uXFewWAl2iSwFqgMt9vCtKPrKa/oK+Iy3pdvFAnX2w==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@takumi-rs/core-linux-x64-musl@0.62.8': resolution: {integrity: sha512-FIt0fpowyh9dse8F29cYBPVhrdc7Zzjz1pEyJunNzIzCIpC0yG3eUwFnK0wsoYoyzbgVZkbLRFRRAFmUORLvDg==} engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@takumi-rs/core-win32-arm64-msvc@0.62.8': resolution: {integrity: sha512-ucQmG2bp6yH+7oNQUev+0re+6FBHUOUcee4mwpQa+BKCtUSgkgQuw3ZAGdyXBQEfr3NrNsMqfc47b3Ljv3bIWA==} @@ -1221,6 +1291,9 @@ packages: peerDependencies: react: ^18 || ^19 + '@toon-format/toon@2.1.0': + resolution: {integrity: sha512-JwWptdF5eOA0HaQxbKAzkpQtR4wSWTEfDlEy/y3/4okmOAX1qwnpLZMmtEWr+ncAhTTY1raCKH0kteHhSXnQqg==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1604,6 +1677,20 @@ packages: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} + accounts@0.4.7: + resolution: {integrity: sha512-Blp1YJSFPCXHARZ1Glu+0itLeBWoL2QhVUGQBtCjjGiQ1fUIieEpiTQ4/dCo/zyMhNigNnUA0yiLBTH3SCl2+Q==} + peerDependencies: + '@wagmi/core': '>=2' + react: '>=18' + viem: '>=2.43.3' + peerDependenciesMeta: + '@wagmi/core': + optional: true + react: + optional: true + viem: + optional: true + acorn-import-phases@1.0.4: resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} engines: {node: '>=10.13.0'} @@ -1624,6 +1711,14 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -2217,6 +2312,12 @@ packages: peerDependencies: express: '>= 4.11' + express-rate-limit@8.3.2: + resolution: {integrity: sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + express@5.2.1: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} @@ -2392,6 +2493,9 @@ packages: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} + idb-keyval@6.2.2: + resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -2404,6 +2508,10 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + incur@0.3.13: + resolution: {integrity: sha512-ypjWHtDSS8h6TPz+elg9cmQMe7gZu6YpUSAcv4HGIppdQ47VYHXZdho7P4I08CPSzz9VV4tVsWej2pfzXl8jgg==} + hasBin: true + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -2421,6 +2529,10 @@ packages: resolution: {integrity: sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ==} deprecated: The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019. + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} + engines: {node: '>= 12'} + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -2506,6 +2618,10 @@ packages: engines: {node: '>=6'} hasBin: true + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + katex@0.16.28: resolution: {integrity: sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==} hasBin: true @@ -2523,6 +2639,10 @@ packages: layout-base@2.0.1: resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + lightningcss-android-arm64@1.30.2: resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} engines: {node: '>= 12.0.0'} @@ -2558,24 +2678,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.30.2: resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.30.2: resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.30.2: resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.30.2: resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} @@ -2878,6 +3002,25 @@ packages: moo@0.5.2: resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + mppx@0.4.12: + resolution: {integrity: sha512-qN84ijeWcm+agw+ne+xxcMJhEw3+LJGyNxTnOQePyOrubXdPiI6duMdwNL796FXjsLMm8HizATOZBWw+qBGaMA==} + hasBin: true + peerDependencies: + '@modelcontextprotocol/sdk': '>=1.25.0' + elysia: '>=1' + express: '>=5' + hono: '>=4' + viem: '>=2.47.5' + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + elysia: + optional: true + express: + optional: true + hono: + optional: true + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3048,6 +3191,9 @@ packages: oniguruma-to-es@4.3.4: resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + outvariant@1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} @@ -3059,6 +3205,14 @@ packages: typescript: optional: true + ox@0.14.10: + resolution: {integrity: sha512-PYsqEnSP7CrcxISS3uVBtw9yPy2gATAnWNptTI0pMnlrXLTiw0Xw/IIivJVHDFgGvKuRAtBSafhVjs+jis3CVA==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + ox@0.14.5: resolution: {integrity: sha512-HgmHmBveYO40H/R3K6TMrwYtHsx/u6TAB+GpZlgJCoW0Sq5Ttpjih0IZZiwGQw7T6vdW4IAyobYrE2mdAvyF8Q==} peerDependencies: @@ -3572,6 +3726,9 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + tokenx@1.3.0: + resolution: {integrity: sha512-NLdXTEZkKiO0gZuLtMoZKjCXTREXeZZt8nnnNeyoXtNZAfG/GKGSbQtLU5STspc0rMSwcA+UJfWZkbNU01iKmQ==} + toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} @@ -3889,6 +4046,9 @@ packages: web-vitals@4.2.4: resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + webauthx@0.1.0: + resolution: {integrity: sha512-Z43YHetVeXdV5/4+YqKSz+cAflpbMmxSMz//kXEb2u3ZUqVbPG1zrM+Zp7KaME/QgUFGhGkAE2XHwqCAXnU75g==} + webpack-sources@3.3.3: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} @@ -3953,6 +4113,9 @@ packages: zod@4.3.5: resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zustand@5.0.0: resolution: {integrity: sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==} engines: {node: '>=12.20.0'} @@ -3971,6 +4134,24 @@ packages: use-sync-external-store: optional: true + zustand@5.0.12: + resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -3983,6 +4164,11 @@ snapshots: package-manager-detector: 1.6.0 tinyexec: 1.0.2 + '@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)': + dependencies: + '@types/json-schema': 7.0.15 + js-yaml: 4.1.1 + '@babel/code-frame@7.28.6': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -4383,6 +4569,8 @@ snapshots: dependencies: hono: 4.11.5 + '@humanwhocodes/momoa@2.0.4': {} + '@iconify-json/lucide@1.2.86': dependencies: '@iconify/types': 2.0.0 @@ -4533,6 +4721,51 @@ snapshots: - hono - supports-color + '@modelcontextprotocol/sdk@1.29.0(zod@4.3.5)': + dependencies: + '@hono/node-server': 1.19.9(hono@4.11.5) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + express: 5.2.1 + express-rate-limit: 8.3.2(express@5.2.1) + hono: 4.11.5 + jose: 6.1.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.3.5 + zod-to-json-schema: 3.25.1(zod@4.3.5) + transitivePeerDependencies: + - supports-color + optional: true + + '@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)': + dependencies: + '@hono/node-server': 1.19.9(hono@4.11.5) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + express: 5.2.1 + express-rate-limit: 8.3.2(express@5.2.1) + hono: 4.11.5 + jose: 6.1.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.3.6 + zod-to-json-schema: 3.25.1(zod@4.3.6) + transitivePeerDependencies: + - supports-color + '@monaco-editor/loader@1.7.0': dependencies: state-local: 1.0.7 @@ -4677,17 +4910,48 @@ snapshots: dependencies: react: 19.2.3 - '@remix-run/fetch-router@0.12.0(@remix-run/headers@0.17.2)(@remix-run/route-pattern@0.15.3)(@remix-run/session@0.4.1)': + '@readme/better-ajv-errors@2.4.0(ajv@8.17.1)': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/runtime': 7.28.6 + '@humanwhocodes/momoa': 2.0.4 + ajv: 8.17.1 + jsonpointer: 5.0.1 + leven: 3.1.0 + picocolors: 1.1.1 + + '@readme/openapi-parser@6.0.0(openapi-types@12.1.3)': dependencies: - '@remix-run/headers': 0.17.2 - '@remix-run/route-pattern': 0.15.3 + '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15) + '@readme/better-ajv-errors': 2.4.0(ajv@8.17.1) + '@readme/openapi-schemas': 3.1.0 + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + openapi-types: 12.1.3 + + '@readme/openapi-schemas@3.1.0': {} + + '@remix-run/fetch-proxy@0.7.1': + dependencies: + '@remix-run/headers': 0.19.0 + + '@remix-run/fetch-router@0.12.0(@remix-run/headers@0.19.0)(@remix-run/route-pattern@0.19.0)(@remix-run/session@0.4.1)': + dependencies: + '@remix-run/headers': 0.19.0 + '@remix-run/route-pattern': 0.19.0 '@remix-run/session': 0.4.1 - '@remix-run/headers@0.17.2': {} + '@remix-run/fetch-router@0.17.0': + dependencies: + '@remix-run/route-pattern': 0.19.0 + '@remix-run/session': 0.4.1 + + '@remix-run/headers@0.19.0': {} '@remix-run/node-fetch-server@0.13.0': {} - '@remix-run/route-pattern@0.15.3': {} + '@remix-run/route-pattern@0.19.0': {} '@remix-run/session@0.4.1': {} @@ -5045,6 +5309,8 @@ snapshots: '@tanstack/query-core': 5.90.19 react: 19.2.3 + '@toon-format/toon@2.1.0': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.6 @@ -5423,11 +5689,44 @@ snapshots: typescript: 5.9.3 zod: 4.3.5 + abitype@1.2.3(typescript@5.9.3)(zod@4.3.6): + optionalDependencies: + typescript: 5.9.3 + zod: 4.3.6 + accepts@2.0.0: dependencies: mime-types: 3.0.2 negotiator: 1.0.0 + accounts@0.4.7(@modelcontextprotocol/sdk@1.29.0(zod@4.3.5))(@types/react@19.2.9)(@wagmi/core@3.4.0(@tanstack/query-core@5.90.19)(@types/react@19.2.9)(ox@0.11.3(typescript@5.9.3)(zod@4.3.5))(react@19.2.3)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.3))(viem@2.47.5(typescript@5.9.3)(zod@4.3.5)))(express@5.2.1)(hono@4.11.5)(openapi-types@12.1.3)(react@19.2.3)(typescript@5.9.3)(use-sync-external-store@1.6.0(react@19.2.3))(viem@2.47.5(typescript@5.9.3)(zod@4.3.5)): + dependencies: + '@remix-run/fetch-router': 0.17.0 + idb-keyval: 6.2.2 + mipd: 0.0.7(typescript@5.9.3) + mppx: 0.4.12(@modelcontextprotocol/sdk@1.29.0(zod@4.3.5))(express@5.2.1)(hono@4.11.5)(openapi-types@12.1.3)(typescript@5.9.3)(viem@2.47.5(typescript@5.9.3)(zod@4.3.5)) + ox: 0.14.10(typescript@5.9.3)(zod@4.3.6) + tsx: 4.21.0 + webauthx: 0.1.0(typescript@5.9.3)(zod@4.3.6) + zod: 4.3.6 + zustand: 5.0.12(@types/react@19.2.9)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) + optionalDependencies: + '@wagmi/core': 3.4.0(@tanstack/query-core@5.90.19)(@types/react@19.2.9)(ox@0.11.3(typescript@5.9.3)(zod@4.3.5))(react@19.2.3)(typescript@5.9.3)(use-sync-external-store@1.6.0(react@19.2.3))(viem@2.47.5(typescript@5.9.3)(zod@4.3.5)) + react: 19.2.3 + viem: 2.47.5(typescript@5.9.3)(zod@4.3.5) + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@modelcontextprotocol/sdk' + - '@types/react' + - elysia + - express + - hono + - immer + - openapi-types + - supports-color + - typescript + - use-sync-external-store + acorn-import-phases@1.0.4(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -5442,6 +5741,10 @@ snapshots: acorn@8.15.0: {} + ajv-draft-04@1.0.0(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -6062,6 +6365,11 @@ snapshots: dependencies: express: 5.2.1 + express-rate-limit@8.3.2(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.1.0 + express@5.2.1: dependencies: accepts: 2.0.0 @@ -6298,6 +6606,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + idb-keyval@6.2.2: {} + ieee754@1.2.1: {} image-size@2.0.2: {} @@ -6307,6 +6617,19 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + incur@0.3.13(openapi-types@12.1.3): + dependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) + '@readme/openapi-parser': 6.0.0(openapi-types@12.1.3) + '@toon-format/toon': 2.1.0 + tokenx: 1.3.0 + yaml: 2.8.2 + zod: 4.3.6 + transitivePeerDependencies: + - '@cfworker/json-schema' + - openapi-types + - supports-color + inherits@2.0.4: {} inline-style-parser@0.2.7: {} @@ -6317,6 +6640,8 @@ snapshots: intersection-observer@0.10.0: {} + ip-address@10.1.0: {} + ipaddr.js@1.9.1: {} is-alphabetical@2.0.1: {} @@ -6378,6 +6703,8 @@ snapshots: json5@2.2.3: {} + jsonpointer@5.0.1: {} + katex@0.16.28: dependencies: commander: 8.3.0 @@ -6396,6 +6723,8 @@ snapshots: layout-base@2.0.1: {} + leven@3.1.0: {} + lightningcss-android-arm64@1.30.2: optional: true @@ -7025,6 +7354,24 @@ snapshots: moo@0.5.2: {} + mppx@0.4.12(@modelcontextprotocol/sdk@1.29.0(zod@4.3.5))(express@5.2.1)(hono@4.11.5)(openapi-types@12.1.3)(typescript@5.9.3)(viem@2.47.5(typescript@5.9.3)(zod@4.3.5)): + dependencies: + '@remix-run/fetch-proxy': 0.7.1 + '@remix-run/node-fetch-server': 0.13.0 + incur: 0.3.13(openapi-types@12.1.3) + ox: 0.14.10(typescript@5.9.3)(zod@4.3.6) + viem: 2.47.5(typescript@5.9.3)(zod@4.3.5) + zod: 4.3.6 + optionalDependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.5) + express: 5.2.1 + hono: 4.11.5 + transitivePeerDependencies: + - '@cfworker/json-schema' + - openapi-types + - supports-color + - typescript + ms@2.1.3: {} mz@2.7.0: @@ -7089,6 +7436,8 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 + openapi-types@12.1.3: {} + outvariant@1.4.0: {} ox@0.11.3(typescript@5.9.3)(zod@4.3.5): @@ -7106,6 +7455,21 @@ snapshots: transitivePeerDependencies: - zod + ox@0.14.10(typescript@5.9.3)(zod@4.3.6): + 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.9.3)(zod@4.3.6) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - zod + ox@0.14.5(typescript@5.9.3)(zod@4.3.5): dependencies: '@adraffy/ens-normalize': 1.11.1 @@ -7724,9 +8088,9 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - tempo.ts@0.14.0(@remix-run/headers@0.17.2)(@remix-run/route-pattern@0.15.3)(@remix-run/session@0.4.1)(typescript@5.9.3)(viem@2.47.5(typescript@5.9.3)(zod@4.3.5))(zod@4.3.5): + tempo.ts@0.14.0(@remix-run/headers@0.19.0)(@remix-run/route-pattern@0.19.0)(@remix-run/session@0.4.1)(typescript@5.9.3)(viem@2.47.5(typescript@5.9.3)(zod@4.3.5))(zod@4.3.5): dependencies: - '@remix-run/fetch-router': 0.12.0(@remix-run/headers@0.17.2)(@remix-run/route-pattern@0.15.3)(@remix-run/session@0.4.1) + '@remix-run/fetch-router': 0.12.0(@remix-run/headers@0.19.0)(@remix-run/route-pattern@0.19.0)(@remix-run/session@0.4.1) ox: 0.11.3(typescript@5.9.3)(zod@4.3.5) optionalDependencies: viem: 2.47.5(typescript@5.9.3)(zod@4.3.5) @@ -7770,6 +8134,8 @@ snapshots: toidentifier@1.0.1: {} + tokenx@1.3.0: {} + toml@3.0.0: {} trim-lines@3.0.1: {} @@ -8172,6 +8538,13 @@ snapshots: web-vitals@4.2.4: {} + webauthx@0.1.0(typescript@5.9.3)(zod@4.3.6): + dependencies: + ox: 0.14.10(typescript@5.9.3)(zod@4.3.6) + transitivePeerDependencies: + - typescript + - zod + webpack-sources@3.3.3: {} webpack-virtual-modules@0.6.2: {} @@ -8230,12 +8603,24 @@ snapshots: dependencies: zod: 4.3.5 + zod-to-json-schema@3.25.1(zod@4.3.6): + dependencies: + zod: 4.3.6 + zod@4.3.5: {} + zod@4.3.6: {} + zustand@5.0.0(@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.9 react: 19.2.3 use-sync-external-store: 1.6.0(react@19.2.3) + zustand@5.0.12(@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.9 + react: 19.2.3 + use-sync-external-store: 1.6.0(react@19.2.3) + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 90eddccc..f3b4405e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,3 +3,5 @@ patchedDependencies: dayjs@1.11.19: patches/dayjs@1.11.19.patch minimumReleaseAge: 1440 +minimumReleaseAgeExclude: + - accounts diff --git a/src/wagmi.config.ts b/src/wagmi.config.ts index 02c77c1a..df8c4b3b 100644 --- a/src/wagmi.config.ts +++ b/src/wagmi.config.ts @@ -2,7 +2,7 @@ import { QueryClient } from '@tanstack/react-query' import { tempoDevnet, tempoLocalnet, tempoModerato } from 'viem/chains' import { withFeePayer } from 'viem/tempo' import { type CreateConfigParameters, createConfig, createStorage, http, webSocket } from 'wagmi' -import { KeyManager, webAuthn } from 'wagmi/tempo' +import { webAuthn } from 'accounts/wagmi' const feeToken = '0x20c0000000000000000000000000000000000001' @@ -13,13 +13,6 @@ const chain = ? tempoDevnet.extend({ feeToken }) : tempoModerato.extend({ feeToken }) -const rpId = (() => { - const hostname = globalThis.location?.hostname - if (!hostname) return undefined - const parts = hostname.split('.') - return parts.length > 2 ? parts.slice(-2).join('.') : hostname -})() - export function getConfig(options: getConfig.Options = {}) { const { multiInjectedProviderDiscovery = false } = options return createConfig({ @@ -29,9 +22,8 @@ export function getConfig(options: getConfig.Options = {}) { chains: [chain], connectors: [ webAuthn({ - grantAccessKey: { chainId: BigInt(chain.id) } as any, - keyManager: KeyManager.http('https://keys.tempo.xyz'), - rpId, + authUrl: 'https://keys.tempo.xyz', + rdns: 'webAuthn', }), ], multiInjectedProviderDiscovery, From 476a27eacd165af4ebe49fa80bad013750c141de Mon Sep 17 00:00:00 2001 From: Brendan Ryan Date: Tue, 31 Mar 2026 14:39:40 -0700 Subject: [PATCH 2/8] fix: update capabilities types for accounts SDK MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - type: 'sign-up' → method: 'register' - type: 'sign-in' → method: 'login' - label → name --- src/components/guides/CreatePasskeyAccount.tsx | 16 ++++++++-------- src/components/guides/Demo.tsx | 4 ++-- src/components/guides/EmbedPasskeys.tsx | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/components/guides/CreatePasskeyAccount.tsx b/src/components/guides/CreatePasskeyAccount.tsx index a5882cc4..72bd049f 100644 --- a/src/components/guides/CreatePasskeyAccount.tsx +++ b/src/components/guides/CreatePasskeyAccount.tsx @@ -6,11 +6,11 @@ export function Connect() { const connectors = useConnectors() const handleConnect = - ({ type }: { type: 'sign-in' | 'sign-up' }) => + ({ method }: { method?: 'register' | 'login' }) => () => { const connector = connectors.find((c) => c.id === 'webAuthn') if (connector) { - connect({ capabilities: { type }, connector }) + connect({ capabilities: { method }, connector }) } else { console.error('webauthn connector not found') } @@ -20,14 +20,14 @@ export function Connect() {
- -
- ) -} - -export function ConnectAndDisconnect() { - const { isConnected } = useAccount() - const { connect } = useConnect() - const connectors = useConnectors() - const { disconnect } = useDisconnect() - - const handleConnect = - ({ method }: { method?: 'register' | 'login' }) => - () => { - const connector = connectors.find((c) => c.id === TEMPO_CONNECTOR_ID) - if (connector) { - connect({ capabilities: { method }, connector }) - } else { - console.error('webauthn connector not found') - } - } - - const handleDisconnect = () => { - disconnect() - } - - if (!isConnected) { - return ( -
- - -
- ) - } - - return ( - - ) -} diff --git a/src/components/guides/Demo.tsx b/src/components/guides/Demo.tsx index 9a5a6000..7b94b16e 100644 --- a/src/components/guides/Demo.tsx +++ b/src/components/guides/Demo.tsx @@ -5,7 +5,7 @@ import * as React from 'react' import type { Address, BaseError } from 'viem' import { formatUnits } from 'viem' import { tempoModerato } from 'viem/chains' -import { useAccount, useConnect, useConnections, useConnectors, useDisconnect } from 'wagmi' +import { useAccount, useConnect, useConnections, useDisconnect } from 'wagmi' import { Hooks } from 'wagmi/tempo' import LucideCheck from '~icons/lucide/check' import LucideCopy from '~icons/lucide/copy' @@ -15,6 +15,7 @@ import LucideRotateCcw from '~icons/lucide/rotate-ccw' import LucideWalletCards from '~icons/lucide/wallet-cards' import { cva, cx } from '../../../cva.config' import { usePostHogTracking } from '../../lib/posthog' +import { useTempoWalletConnector } from '../../wagmi.config' import { Container as ParentContainer } from '../Container' import { alphaUsd } from './tokens' @@ -23,17 +24,6 @@ export { alphaUsd, betaUsd, pathUsd, thetaUsd } from './tokens' export const FAKE_RECIPIENT = '0xbeefcafe54750903ac1c8909323af7beb21ea2cb' export const FAKE_RECIPIENT_2 = '0xdeadbeef54750903ac1c8909323af7beb21ea2cb' -export const TEMPO_CONNECTOR_ID = 'xyz.tempo.webauthn' - -export function useTempoWalletConnector() { - const connectors = useConnectors() - return React.useMemo( - // biome-ignore lint/style/noNonNullAssertion: tempoWallet connector always defined in wagmi.config.ts - () => connectors.find((connector) => connector.id === TEMPO_CONNECTOR_ID)!, - [connectors], - ) -} - function getExplorerHost() { const { VITE_TEMPO_ENV, VITE_EXPLORER_OVERRIDE } = import.meta.env @@ -119,12 +109,16 @@ export function Container( if (!source) return address if (source === 'webAuthn') { - const webAuthnConnection = connections.find((c) => c.connector.id === TEMPO_CONNECTOR_ID) + const webAuthnConnection = connections.find( + (c) => c.connector.id === 'webAuthn' || c.connector.id === 'xyz.tempo', + ) return webAuthnConnection?.accounts[0] } if (source === 'wallet') { - const walletConnection = connections.find((c) => c.connector.id !== TEMPO_CONNECTOR_ID) + const walletConnection = connections.find( + (c) => c.connector.id !== 'webAuthn' && c.connector.id !== 'xyz.tempo', + ) return walletConnection?.accounts[0] } @@ -375,32 +369,14 @@ export function Login() { Check prompt ) : ( -
- - -
+ )} ) diff --git a/src/components/guides/EmbedPasskeys.tsx b/src/components/guides/EmbedPasskeys.tsx index 44d03372..ad3b1337 100644 --- a/src/components/guides/EmbedPasskeys.tsx +++ b/src/components/guides/EmbedPasskeys.tsx @@ -1,11 +1,12 @@ 'use client' import { useAccount, useConnect, useDisconnect } from 'wagmi' -import { Button, useTempoWalletConnector } from './Demo' +import { useWebAuthnConnector } from '../../wagmi.config' +import { Button } from './Demo' export function EmbedPasskeys() { const account = useAccount() const connect = useConnect() - const connector = useTempoWalletConnector() + const connector = useWebAuthnConnector() const disconnect = useDisconnect() if (account.address) @@ -28,7 +29,7 @@ export function EmbedPasskeys() { export function SignInButtons() { const connect = useConnect() - const connector = useTempoWalletConnector() + const connector = useWebAuthnConnector() const disconnect = useDisconnect() return ( @@ -40,8 +41,8 @@ export function SignInButtons() { connect.connect({ connector, capabilities: { - name: 'Tempo Docs', - method: 'register', + label: 'Tempo Docs', + type: 'sign-up', }, }) }} diff --git a/src/components/guides/steps/wallet/AddFundsToWallet.tsx b/src/components/guides/steps/wallet/AddFundsToWallet.tsx index 40b574a0..840497bc 100644 --- a/src/components/guides/steps/wallet/AddFundsToWallet.tsx +++ b/src/components/guides/steps/wallet/AddFundsToWallet.tsx @@ -7,14 +7,16 @@ import { mnemonicToAccount } from 'viem/accounts' import { Actions } from 'viem/tempo' import { useBlockNumber, useClient, useConnection } from 'wagmi' import { Hooks } from 'wagmi/tempo' -import { Button, Step, TEMPO_CONNECTOR_ID } from '../../Demo' +import { Button, Step } from '../../Demo' import { alphaUsd } from '../../tokens' import type { DemoStepProps } from '../types' export function AddFundsToWallet(props: DemoStepProps) { const { stepNumber = 2, last = false } = props const { address, connector } = useConnection() - const hasNonWebAuthnWallet = Boolean(address && connector?.id !== TEMPO_CONNECTOR_ID) + const hasNonWebAuthnWallet = Boolean( + address && connector?.id !== 'webAuthn' && connector?.id !== 'xyz.tempo', + ) const queryClient = useQueryClient() const { data: balance, refetch: balanceRefetch } = Hooks.token.useGetBalance({ diff --git a/src/components/guides/steps/wallet/AddTokensToWallet.tsx b/src/components/guides/steps/wallet/AddTokensToWallet.tsx index a5cfd573..308b697c 100644 --- a/src/components/guides/steps/wallet/AddTokensToWallet.tsx +++ b/src/components/guides/steps/wallet/AddTokensToWallet.tsx @@ -1,7 +1,7 @@ 'use client' import * as React from 'react' import { useConnection, useWatchAsset } from 'wagmi' -import { Button, Step, TEMPO_CONNECTOR_ID } from '../../Demo' +import { Button, Step } from '../../Demo' import { alphaUsd, betaUsd, pathUsd, thetaUsd } from '../../tokens' import type { DemoStepProps } from '../types' @@ -58,7 +58,9 @@ function AddTokenButton(props: { export function AddTokensToWallet(props: DemoStepProps) { const { stepNumber = 3, last = false } = props const { address, connector } = useConnection() - const hasNonWebAuthnWallet = Boolean(address && connector?.id !== TEMPO_CONNECTOR_ID) + const hasNonWebAuthnWallet = Boolean( + address && connector?.id !== 'webAuthn' && connector?.id !== 'xyz.tempo', + ) const [addedTokens, setAddedTokens] = React.useState>(new Set()) const [expanded, setExpanded] = React.useState(false) diff --git a/src/components/guides/steps/wallet/SetFeeToken.tsx b/src/components/guides/steps/wallet/SetFeeToken.tsx index e9f33d5e..59c90f61 100644 --- a/src/components/guides/steps/wallet/SetFeeToken.tsx +++ b/src/components/guides/steps/wallet/SetFeeToken.tsx @@ -3,7 +3,7 @@ import * as React from 'react' import { type Address, isAddress } from 'viem' import { useChainId, useConfig, useConnection } from 'wagmi' import { Hooks } from 'wagmi/tempo' -import { Button, ExplorerLink, Step, StringFormatter, TEMPO_CONNECTOR_ID } from '../../Demo' +import { Button, ExplorerLink, Step, StringFormatter } from '../../Demo' import { alphaUsd, betaUsd, thetaUsd } from '../../tokens' import type { DemoStepProps } from '../types' @@ -27,7 +27,9 @@ const DEFAULT_FEE_TOKEN_OPTION = FEE_TOKEN_OPTIONS[0] export function SetFeeToken(props: DemoStepProps) { const { stepNumber = 1 } = props const { address, connector } = useConnection() - const hasNonWebAuthnWallet = Boolean(address && connector?.id !== TEMPO_CONNECTOR_ID) + const hasNonWebAuthnWallet = Boolean( + address && connector?.id !== 'webAuthn' && connector?.id !== 'xyz.tempo', + ) const chainId = useChainId() const config = useConfig() diff --git a/src/wagmi.config.ts b/src/wagmi.config.ts index dfe6c4b3..7569b786 100644 --- a/src/wagmi.config.ts +++ b/src/wagmi.config.ts @@ -1,8 +1,20 @@ import { QueryClient } from '@tanstack/react-query' -import { webAuthn } from 'accounts/wagmi' +import { Expiry } from 'accounts' +import { tempoWallet } from 'accounts/wagmi' +import * as React from 'react' +import { parseUnits } from 'viem' import { tempoDevnet, tempoLocalnet, tempoModerato } from 'viem/chains' import { withFeePayer } from 'viem/tempo' -import { type CreateConfigParameters, createConfig, createStorage, http, webSocket } from 'wagmi' +import { + type CreateConfigParameters, + createConfig, + createStorage, + http, + useConnectors, + webSocket, +} from 'wagmi' +import { KeyManager, webAuthn } from 'wagmi/tempo' +import { alphaUsd, betaUsd, pathUsd, thetaUsd } from './components/guides/tokens' const feeToken = '0x20c0000000000000000000000000000000000001' @@ -13,6 +25,13 @@ const chain = ? tempoDevnet.extend({ feeToken }) : tempoModerato.extend({ feeToken }) +const rpId = (() => { + const hostname = globalThis.location?.hostname + if (!hostname) return undefined + const parts = hostname.split('.') + return parts.length > 2 ? parts.slice(-2).join('.') : hostname +})() + export function getConfig(options: getConfig.Options = {}) { const { multiInjectedProviderDiscovery = false } = options return createConfig({ @@ -21,9 +40,25 @@ export function getConfig(options: getConfig.Options = {}) { }, chains: [chain], connectors: [ + tempoWallet({ + authorizeAccessKey: () => ({ + expiry: Expiry.days(1), + limits: [ + { token: pathUsd, limit: parseUnits('100', 6) }, + { token: alphaUsd, limit: parseUnits('100', 6) }, + { token: betaUsd, limit: parseUnits('100', 6) }, + { token: thetaUsd, limit: parseUnits('100', 6) }, + ], + }), + feePayerUrl: 'https://sponsor.moderato.tempo.xyz', + }), webAuthn({ - authUrl: 'https://keys.tempo.xyz', - rdns: 'xyz.tempo.webauthn', + grantAccessKey: { + // @ts-expect-error - TODO: migrate to webAuthn on Accounts SDK + chainId: BigInt(chain.id), + }, + keyManager: KeyManager.http('https://keys.tempo.xyz'), + rpId, }), ], multiInjectedProviderDiscovery, @@ -59,6 +94,24 @@ export const config = getConfig() export const queryClient = new QueryClient() +export function useTempoWalletConnector() { + const connectors = useConnectors() + return React.useMemo( + // biome-ignore lint/style/noNonNullAssertion: _ + () => connectors.find((connector) => connector.id === 'xyz.tempo')!, + [connectors], + ) +} + +export function useWebAuthnConnector() { + const connectors = useConnectors() + return React.useMemo( + // biome-ignore lint/style/noNonNullAssertion: _ + () => connectors.find((connector) => connector.id === 'webAuthn')!, + [connectors], + ) +} + declare module 'wagmi' { interface Register { config: typeof config From e9d24b5f8a68701d11187206fdf50a017112f3d3 Mon Sep 17 00:00:00 2001 From: jxom <7336481+jxom@users.noreply.github.com> Date: Wed, 1 Apr 2026 16:32:22 +1300 Subject: [PATCH 8/8] chore: increase access key limits to 00 Amp-Thread-ID: https://ampcode.com/threads/T-019d46f2-d6ac-7116-b007-08719bee8aa9 Co-authored-by: Amp --- src/wagmi.config.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/wagmi.config.ts b/src/wagmi.config.ts index 7569b786..d36b8906 100644 --- a/src/wagmi.config.ts +++ b/src/wagmi.config.ts @@ -44,10 +44,10 @@ export function getConfig(options: getConfig.Options = {}) { authorizeAccessKey: () => ({ expiry: Expiry.days(1), limits: [ - { token: pathUsd, limit: parseUnits('100', 6) }, - { token: alphaUsd, limit: parseUnits('100', 6) }, - { token: betaUsd, limit: parseUnits('100', 6) }, - { token: thetaUsd, limit: parseUnits('100', 6) }, + { token: pathUsd, limit: parseUnits('500', 6) }, + { token: alphaUsd, limit: parseUnits('500', 6) }, + { token: betaUsd, limit: parseUnits('500', 6) }, + { token: thetaUsd, limit: parseUnits('500', 6) }, ], }), feePayerUrl: 'https://sponsor.moderato.tempo.xyz',