From 291e834d54307dfd15721e267204057723691e6a Mon Sep 17 00:00:00 2001 From: tmm Date: Tue, 28 Jul 2026 16:11:44 -0400 Subject: [PATCH 1/5] fix: prevent duplicate sponsor commitments --- package.json | 2 +- pnpm-lock.yaml | 120 ++++++++++++++++++++++++++++++++++--------------- src/chat.ts | 4 +- src/lib/tip.ts | 8 ++-- 4 files changed, 90 insertions(+), 44 deletions(-) diff --git a/package.json b/package.json index cebe1d5..477a10a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "react": "19.2.5", "react-dom": "19.2.5", "tapimo": "0.5.2", - "viem": "^2.50.4", + "viem": "^2.55.10", "wagmi": "^3.6.14", "zod": "4.4.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71fa195..a039d98 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,7 +64,7 @@ importers: version: 1.167.35(@tanstack/react-router@1.169.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@voidzero-dev/vite-plus-core@0.1.24) accounts: specifier: ^0.14.1 - version: 0.14.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.50.4(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14) + version: 0.14.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14) chat: specifier: 4.27.0 version: 4.27.0 @@ -90,11 +90,11 @@ importers: specifier: 0.5.2 version: 0.5.2(0a9fca14114bb98809b2b223454df2b6) viem: - specifier: ^2.50.4 - version: 2.50.4(typescript@6.0.3)(zod@4.4.3) + specifier: ^2.55.10 + version: 2.55.10(typescript@6.0.3)(zod@4.4.3) wagmi: specifier: ^3.6.14 - version: 3.6.14(@tanstack/query-core@5.100.10)(@tanstack/react-query@5.100.10(react@19.2.5))(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)) + version: 3.6.14(@tanstack/query-core@5.100.10)(@tanstack/react-query@5.100.10(react@19.2.5))(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) zod: specifier: 4.4.3 version: 4.4.3 @@ -2874,6 +2874,17 @@ packages: zod: optional: true + abitype@1.3.0: + resolution: {integrity: sha512-fk6Te+bojIFrMvMZrnOO+SxCB+RUksTGOzq/60ZRvs1L+BVzvi2bqt9L3W/17ZLdZsyM1FuYf65P5nlmoiH1Bg==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -4874,6 +4885,14 @@ packages: typescript: optional: true + ox@0.14.33: + resolution: {integrity: sha512-rooA/4o7bBof4Ge2VH/eovfNPb/AEEYyrNj03wggc55g5HZD8Pjs/OeWhttgjic3dDcqn0r29bDuvQEdTiUemQ==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + oxfmt@0.52.0: resolution: {integrity: sha512-nJlYM35F64zTDMecCNhoHNkf+D/eHv7xcjj9XDSj+bFAVtN93m7v8DQMdHd6nDG6Akf/kEYYHmDUBs2Dz27Sug==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5459,6 +5478,11 @@ packages: engines: {node: '>=20.16.0'} hasBin: true + srvx@0.11.22: + resolution: {integrity: sha512-LqZxxBDMKuMAZzFzJnDCkFOrs9MZQZr0LvHiO/SuSZVdQaXD7xQ5UWTUxheJrQPve1qk9MG2B/yttUvJxw8egQ==} + engines: {node: '>=20.16.0'} + hasBin: true + ssh-remote-port-forward@1.0.4: resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} @@ -5942,16 +5966,16 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - viem@2.50.4: - resolution: {integrity: sha512-rf98F4s3Vlb+uJZEKfay3IbBw3CNCbVtx5Y3UIljlO2tSX420g/J0WQSYsjzBSasUFgxgsXabji14O9kGbiqgg==} + viem@2.54.6: + resolution: {integrity: sha512-OfybECKJYVmhiNqz+SHhed+O2h6niQ+0Wjg9J0b4bV+/QrvLgjxhfKO7hZqsuK1YtZ/0BErBKy708Zp+cU5T0Q==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: typescript: optional: true - viem@2.54.6: - resolution: {integrity: sha512-OfybECKJYVmhiNqz+SHhed+O2h6niQ+0Wjg9J0b4bV+/QrvLgjxhfKO7hZqsuK1YtZ/0BErBKy708Zp+cU5T0Q==} + viem@2.55.10: + resolution: {integrity: sha512-Q9Ba+/ma81U2M5o5P2AQ7Ux8rTIwmCZvUcr8rKdQ22bV0IBFHllM2m5gWDP8hFaUN2nH2oW3QG44amRazflYNQ==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -8800,23 +8824,23 @@ snapshots: dependencies: vue: 3.5.40(typescript@6.0.3) - '@wagmi/connectors@8.0.13(@wagmi/core@3.4.11)(accounts@0.14.1)(typescript@6.0.3)(viem@2.50.4(typescript@6.0.3)(zod@4.4.3))': + '@wagmi/connectors@8.0.13(@wagmi/core@3.4.11)(accounts@0.14.1)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3))': dependencies: - '@wagmi/core': 3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)) - viem: 2.50.4(typescript@6.0.3)(zod@4.4.3) + '@wagmi/core': 3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) + viem: 2.55.10(typescript@6.0.3)(zod@4.4.3) optionalDependencies: - accounts: 0.14.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.50.4(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14) + accounts: 0.14.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14) typescript: 6.0.3 - '@wagmi/core@3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.50.4(typescript@6.0.3)(zod@4.4.3))': + '@wagmi/core@3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@6.0.3) - viem: 2.50.4(typescript@6.0.3)(zod@4.4.3) + viem: 2.55.10(typescript@6.0.3)(zod@4.4.3) zustand: 5.0.0(@types/react@19.2.14)(react@19.2.5)(use-sync-external-store@1.4.0(react@19.2.5)) optionalDependencies: '@tanstack/query-core': 5.100.10 - accounts: 0.14.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.50.4(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14) + accounts: 0.14.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14) typescript: 6.0.3 transitivePeerDependencies: - '@types/react' @@ -8831,6 +8855,11 @@ snapshots: typescript: 6.0.3 zod: 4.4.3 + abitype@1.3.0(typescript@6.0.3)(zod@4.4.3): + optionalDependencies: + typescript: 6.0.3 + zod: 4.4.3 + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -8840,21 +8869,21 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 - accounts@0.14.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.50.4(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14): + accounts@0.14.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14): dependencies: hono: 4.12.25 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@6.0.3) - mppx: 0.6.27(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.25)(typescript@6.0.3)(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)) + mppx: 0.6.27(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.25)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) ox: 0.14.20(typescript@6.0.3)(zod@4.4.3) webauthx: 0.1.2(typescript@6.0.3)(zod@4.4.3) zod: 4.4.3 zustand: 5.0.13(@types/react@19.2.14)(react@19.2.5)(use-sync-external-store@1.4.0(react@19.2.5)) optionalDependencies: - '@wagmi/core': 3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)) + '@wagmi/core': 3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) react: 19.2.5 - viem: 2.50.4(typescript@6.0.3)(zod@4.4.3) - wagmi: 3.6.14(@tanstack/query-core@5.100.10)(@tanstack/react-query@5.100.10(react@19.2.5))(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)) + viem: 2.55.10(typescript@6.0.3)(zod@4.4.3) + wagmi: 3.6.14(@tanstack/query-core@5.100.10)(@tanstack/react-query@5.100.10(react@19.2.5))(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) transitivePeerDependencies: - '@modelcontextprotocol/sdk' - '@types/react' @@ -8877,10 +8906,10 @@ snapshots: zod: 4.4.3 zustand: 5.0.13(@types/react@19.2.14)(react@19.2.5)(use-sync-external-store@1.4.0(react@19.2.5)) optionalDependencies: - '@wagmi/core': 3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)) + '@wagmi/core': 3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) react: 19.2.5 viem: 2.54.6(typescript@6.0.3)(zod@4.4.3) - wagmi: 3.6.14(@tanstack/query-core@5.100.10)(@tanstack/react-query@5.100.10(react@19.2.5))(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)) + wagmi: 3.6.14(@tanstack/query-core@5.100.10)(@tanstack/react-query@5.100.10(react@19.2.5))(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) transitivePeerDependencies: - '@modelcontextprotocol/sdk' - '@types/react' @@ -9834,7 +9863,7 @@ snapshots: h3@2.0.1-rc.20: dependencies: rou3: 0.8.1 - srvx: 0.11.15 + srvx: 0.11.22 has-symbols@1.1.0: {} @@ -10904,11 +10933,11 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.4 - mppx@0.6.27(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.25)(typescript@6.0.3)(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)): + mppx@0.6.27(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.25)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)): dependencies: incur: 0.4.5 ox: 0.14.22(typescript@6.0.3)(zod@4.4.3) - viem: 2.50.4(typescript@6.0.3)(zod@4.4.3) + viem: 2.55.10(typescript@6.0.3)(zod@4.4.3) zod: 4.4.3 optionalDependencies: '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3) @@ -11064,7 +11093,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@6.0.3)(zod@4.4.3) + abitype: 1.3.0(typescript@6.0.3)(zod@4.4.3) eventemitter3: 5.0.1 optionalDependencies: typescript: 6.0.3 @@ -11072,6 +11101,21 @@ snapshots: - zod ox@0.14.30(typescript@6.0.3)(zod@4.4.3): + 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.3.0(typescript@6.0.3)(zod@4.4.3) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 6.0.3 + transitivePeerDependencies: + - zod + + ox@0.14.33(typescript@6.0.3)(zod@4.4.3): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -11876,6 +11920,8 @@ snapshots: srvx@0.11.15: {} + srvx@0.11.22: {} + ssh-remote-port-forward@1.0.4: dependencies: '@types/ssh2': 0.5.52 @@ -12193,10 +12239,10 @@ snapshots: tidx.ts@0.1.2(typescript@6.0.3): dependencies: - abitype: 1.2.3(typescript@6.0.3)(zod@4.4.3) + abitype: 1.3.0(typescript@6.0.3)(zod@4.4.3) kysely: 0.28.17 mitt: 3.0.1 - ox: 0.14.20(typescript@6.0.3)(zod@4.4.3) + ox: 0.14.30(typescript@6.0.3)(zod@4.4.3) zod: 4.4.3 transitivePeerDependencies: - typescript @@ -12507,7 +12553,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - viem@2.50.4(typescript@6.0.3)(zod@4.4.3): + viem@2.54.6(typescript@6.0.3)(zod@4.4.3): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -12515,7 +12561,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@6.0.3)(zod@4.4.3) isows: 1.0.7(ws@8.21.0) - ox: 0.14.22(typescript@6.0.3)(zod@4.4.3) + ox: 0.14.30(typescript@6.0.3)(zod@4.4.3) ws: 8.21.0 optionalDependencies: typescript: 6.0.3 @@ -12524,7 +12570,7 @@ snapshots: - utf-8-validate - zod - viem@2.54.6(typescript@6.0.3)(zod@4.4.3): + viem@2.55.10(typescript@6.0.3)(zod@4.4.3): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -12532,7 +12578,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@6.0.3)(zod@4.4.3) isows: 1.0.7(ws@8.21.0) - ox: 0.14.30(typescript@6.0.3)(zod@4.4.3) + ox: 0.14.33(typescript@6.0.3)(zod@4.4.3) ws: 8.21.0 optionalDependencies: typescript: 6.0.3 @@ -12745,14 +12791,14 @@ snapshots: w3c-keyname@2.2.8: {} - wagmi@3.6.14(@tanstack/query-core@5.100.10)(@tanstack/react-query@5.100.10(react@19.2.5))(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)): + wagmi@3.6.14(@tanstack/query-core@5.100.10)(@tanstack/react-query@5.100.10(react@19.2.5))(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)): dependencies: '@tanstack/react-query': 5.100.10(react@19.2.5) - '@wagmi/connectors': 8.0.13(@wagmi/core@3.4.11)(accounts@0.14.1)(typescript@6.0.3)(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)) - '@wagmi/core': 3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.50.4(typescript@6.0.3)(zod@4.4.3)) + '@wagmi/connectors': 8.0.13(@wagmi/core@3.4.11)(accounts@0.14.1)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) + '@wagmi/core': 3.4.11(@tanstack/query-core@5.100.10)(@types/react@19.2.14)(accounts@0.14.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) react: 19.2.5 use-sync-external-store: 1.4.0(react@19.2.5) - viem: 2.50.4(typescript@6.0.3)(zod@4.4.3) + viem: 2.55.10(typescript@6.0.3)(zod@4.4.3) optionalDependencies: typescript: 6.0.3 transitivePeerDependencies: @@ -12774,7 +12820,7 @@ snapshots: '@noble/ciphers': 2.2.0 '@noble/hashes': 2.2.0 hono: 4.12.25 - ox: 0.14.20(typescript@6.0.3)(zod@4.4.3) + ox: 0.14.30(typescript@6.0.3)(zod@4.4.3) zod: 4.4.3 optionalDependencies: react: 19.2.5 diff --git a/src/chat.ts b/src/chat.ts index 3651edb..b056d50 100644 --- a/src/chat.ts +++ b/src/chat.ts @@ -1023,7 +1023,7 @@ const modalSubmits = { }), { account: creator.address as Address.Address, token: tokenAddress as Address.Address }, ) - if (BigInt(amount) > balance) { + if (BigInt(amount) > balance.amount) { await postConnectLink( { channel: getChat().channel(`slack:${metadata.channelId}`), @@ -1722,7 +1722,7 @@ const handlers = { account: member.account_address as Address.Address, token: token.address as Address.Address, }) - return { balance, label: token.label } + return { balance: balance.amount, label: token.label } } catch { return { balance: 0n, label: token.label } } diff --git a/src/lib/tip.ts b/src/lib/tip.ts index efd8801..cd1bda2 100644 --- a/src/lib/tip.ts +++ b/src/lib/tip.ts @@ -659,7 +659,7 @@ export async function checkReusableTipAccessKey( account: sender.account.address as Address.Address, token: tokenAddress as Address.Address, }) - if (balance < BigInt(input.amount)) return { code: 'insufficient_funds', ok: false } + if (balance.amount < BigInt(input.amount)) return { code: 'insufficient_funds', ok: false } return { memberId: sender.member.id, ok: true } } @@ -1990,7 +1990,7 @@ async function submitTipBatch( account: input.sender.account.address as Address.Address, token: input.tokenAddress as Address.Address, }) - if (balance < BigInt(totalAmount)) throw new InsufficientFundsError() + if (balance.amount < BigInt(totalAmount)) throw new InsufficientFundsError() const calls = input.connectedRecipients.map((recipient) => Actions.token.transfer.call({ @@ -2308,7 +2308,7 @@ async function submitSignedTipBatch( account: input.sender.account.address as Address.Address, token: input.tokenAddress as Address.Address, }) - if (balance < BigInt(input.payload.amount * input.connectedRecipients.length)) + if (balance.amount < BigInt(input.payload.amount * input.connectedRecipients.length)) throw new InsufficientFundsError() const receipt = (await client.request({ @@ -2479,7 +2479,7 @@ async function submitSignedTip( account: input.sender.account.address as Address.Address, token: input.tokenAddress as Address.Address, }) - if (balance < BigInt(input.payload.amount)) throw new InsufficientFundsError() + if (balance.amount < BigInt(input.payload.amount)) throw new InsufficientFundsError() const receipt = (await client.request({ method: 'eth_sendRawTransactionSync' as never, From 4bc5de5a915e0013268ced1c980b587302a4e350 Mon Sep 17 00:00:00 2001 From: tmm Date: Tue, 28 Jul 2026 16:50:21 -0400 Subject: [PATCH 2/5] fix: extend reusable access keys to 90 days --- src/api.workers.test.ts | 4 ++-- src/chat.ts | 4 +++- src/lib/accountLink.test.ts | 5 +++++ src/lib/accountLink.ts | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/api.workers.test.ts b/src/api.workers.test.ts index 170c393..d27eb74 100644 --- a/src/api.workers.test.ts +++ b/src/api.workers.test.ts @@ -1890,7 +1890,7 @@ describe('/api/confirm/:token', () => { const workspace = await ensureTwitterTestWorkspace() mockTwitterUser({ id: 'twitter-confirm-recipient', username: 'alice' }) const token = await Confirmation.encrypt(env, { - accessKeyExpiresAt: new Date(Date.now() + AccountLink.reusableAccessKeyTtlMs).toISOString(), // 30 days + accessKeyExpiresAt: new Date(Date.now() + AccountLink.reusableAccessKeyTtlMs).toISOString(), // 90 days amount: 5_000_000, chainId: workspace.chain_id, expiresAt: new Date(Date.now() + AccountLink.confirmationLinkTtlMs).toISOString(), // 10 minutes @@ -2611,7 +2611,7 @@ async function createConfirmationToken( ? { accessKeyExpiresAt: new Date( Date.now() + AccountLink.reusableAccessKeyTtlMs, - ).toISOString(), // 30 days + ).toISOString(), // 90 days } : {}), amount, diff --git a/src/chat.ts b/src/chat.ts index b056d50..34a5209 100644 --- a/src/chat.ts +++ b/src/chat.ts @@ -6072,7 +6072,9 @@ async function postConnectLink(event: TipEvent, ctx: HandlerContext) { const linkUrl = `https://${env.HOST}/connect/${token}` const linkText = `${accountId ? 'Refresh Tipbot connection' : 'Connect to Tipbot'}: ${linkUrl}\n${linkDescription}` const linkExpiresAt = new Date(now.getTime() + 10 * 60 * 1000).toISOString() // 10 minutes - const accessKeyExpiresAt = new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000).toISOString() // 30 days + const accessKeyExpiresAt = new Date( + now.getTime() + AccountLink.reusableAccessKeyTtlMs, + ).toISOString() await ctx.db .deleteFrom('account_link_token') .where('member_id', '=', member.id) diff --git a/src/lib/accountLink.test.ts b/src/lib/accountLink.test.ts index fde9a54..91c1503 100644 --- a/src/lib/accountLink.test.ts +++ b/src/lib/accountLink.test.ts @@ -21,6 +21,11 @@ test('hashes tokens deterministically', async () => { ) }) +test('keeps reusable access keys valid for 90 days', async () => { + const AccountLink = await import('#/lib/accountLink.ts') + expect(AccountLink.reusableAccessKeyTtlMs).toBe(90 * 24 * 60 * 60 * 1000) +}) + test('verifies key authorizations against Tipbot policy', async () => { const verifyHash = vi.fn(async () => true) vi.resetModules() diff --git a/src/lib/accountLink.ts b/src/lib/accountLink.ts index 5d0b13d..453234a 100644 --- a/src/lib/accountLink.ts +++ b/src/lib/accountLink.ts @@ -8,7 +8,7 @@ import * as Tempo from '#/lib/tempo.ts' export const reusableAccessKeyLimit = 10_000_000 export const reusableAccessKeyLimitText = '10' export const reusableAccessKeyPeriodSeconds = 24 * 60 * 60 // 1 day -export const reusableAccessKeyTtlMs = 30 * 24 * 60 * 60 * 1000 // 30 days +export const reusableAccessKeyTtlMs = 90 * 24 * 60 * 60 * 1000 // 90 days export const confirmationLinkTtlMs = 10 * 60 * 1000 // 10 minutes export async function hashToken(env: Pick, token: string) { From 542dcd5ad0238a003021639893d6e9de3471117f Mon Sep 17 00:00:00 2001 From: tmm Date: Tue, 28 Jul 2026 16:54:41 -0400 Subject: [PATCH 3/5] test: retry transient D1 OAuth failures --- test/e2e/connect.test.ts | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/test/e2e/connect.test.ts b/test/e2e/connect.test.ts index 5c3b413..ef560c9 100644 --- a/test/e2e/connect.test.ts +++ b/test/e2e/connect.test.ts @@ -1,4 +1,4 @@ -import type { APIRequestContext } from '@playwright/test' +import type { APIRequestContext, APIResponse } from '@playwright/test' import type { Kysely } from 'kysely' import { WebClient } from '@slack/web-api' import * as AccessKey from '#/lib/accessKey.ts' @@ -284,13 +284,25 @@ async function installSlack( if (!callbackLocation) throw new Error('Expected Slack OAuth callback redirect location.') const callbackUrl = new URL(callbackLocation) - const callbackResponse = await request.get( - app.url(`${callbackUrl.pathname}${callbackUrl.search}` as `/api/${string}`), - { - maxRedirects: 0, - }, - ) - expect(callbackResponse.status(), await callbackResponse.text()).toBe(302) + let callbackResponse: APIResponse | undefined + let callbackResponseText = '' + for (let attempt = 0; attempt < 3; attempt += 1) { + callbackResponse = await request.get( + app.url(`${callbackUrl.pathname}${callbackUrl.search}` as `/api/${string}`), + { + maxRedirects: 0, + }, + ) + callbackResponseText = await callbackResponse.text() + if (callbackResponse.status() === 302) break + if ( + !callbackResponseText.includes('D1_ERROR') || + !callbackResponseText.includes('internal error') + ) + break + await new Promise((resolve) => setTimeout(resolve, 100)) // 100 milliseconds + } + expect(callbackResponse?.status(), callbackResponseText).toBe(302) } async function postSlashCommand(app: { url: (path: `/api/${string}`) => string }, text: string) { From 9b6b4e5c8fba75518f5d666b152d3ec43216cf91 Mon Sep 17 00:00:00 2001 From: tmm Date: Tue, 28 Jul 2026 16:54:44 -0400 Subject: [PATCH 4/5] chore: resolve dependency advisories --- package.json | 2 +- pnpm-lock.yaml | 432 +++++++++++++++++++++++--------------------- pnpm-workspace.yaml | 16 +- 3 files changed, 239 insertions(+), 211 deletions(-) diff --git a/package.json b/package.json index 477a10a..779ea02 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@tanstack/router-plugin": "1.167.35", "accounts": "^0.14.1", "chat": "4.27.0", - "hono": "4.12.25", + "hono": "4.12.27", "kysely": "0.28.17", "nanoid": "^5.1.11", "ox": "0.14.20", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a039d98..47d2176 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,15 +8,18 @@ overrides: '@babel/core': 7.29.6 '@grpc/grpc-js': 1.14.4 axios: 1.18.0 - brace-expansion: 2.1.2 + '@hono/node-server@<2.0.5': 2.0.10 + brace-expansion: 5.0.8 esbuild: 0.28.1 form-data: 4.0.6 - hono: 4.12.25 + fast-uri: 3.1.4 + hono: 4.12.27 js-yaml: 4.3.0 launch-editor: 2.14.1 protobufjs: 7.6.5 shell-quote: 1.10.0 - tar: 7.5.20 + sharp: 0.35.0 + tar: 7.5.21 tmp: 0.2.7 undici: 7.28.0 uuid: 11.1.1 @@ -49,7 +52,7 @@ importers: version: 1.2.1 '@hono/zod-validator': specifier: ^0.8.0 - version: 0.8.0(hono@4.12.25)(zod@4.4.3) + version: 0.8.0(hono@4.12.27)(zod@4.4.3) '@tanstack/react-query': specifier: ^5.100.10 version: 5.100.10(react@19.2.5) @@ -69,8 +72,8 @@ importers: specifier: 4.27.0 version: 4.27.0 hono: - specifier: 4.12.25 - version: 4.12.25 + specifier: 4.12.27 + version: 4.12.27 kysely: specifier: 0.28.17 version: 0.28.17 @@ -149,7 +152,7 @@ importers: version: 12.9.0 emulate: specifier: 0.5.0 - version: 0.5.0(patch_hash=b2fb51af97ea1d50b418f6a8216cf9423b584f2f690e7d2beec2f6e10e5ca234)(hono@4.12.25) + version: 0.5.0(patch_hash=b2fb51af97ea1d50b418f6a8216cf9423b584f2f690e7d2beec2f6e10e5ca234)(hono@4.12.27) msw: specifier: 2.13.6 version: 2.13.6(@types/node@22.19.17)(typescript@6.0.3) @@ -490,8 +493,8 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} '@emoji-mart/data@1.2.1': resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==} @@ -702,28 +705,22 @@ packages: peerDependencies: vue: ^3.2.0 - '@hono/node-server@1.19.14': - resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} - engines: {node: '>=18.14.1'} - peerDependencies: - hono: 4.12.25 - '@hono/node-server@2.0.10': resolution: {integrity: sha512-ZcnNVhKTmyDJeg0UlnZjvM73JBsTAuhrH/J4fjwGOw59PwOW51r4J+p6CsKZWXdKSme4MFqU62CZMOsdDrU4CA==} engines: {node: '>=20'} peerDependencies: - hono: 4.12.25 + hono: 4.12.27 '@hono/standard-validator@0.2.3': resolution: {integrity: sha512-bp9vHu6Va6SfMHC3D4ZLBbT/woi+AZ9CRdTXQu3kLJuLh2W/Gb9UO4hijS+BQAGFXi4EGpXdetxpzwTAawSVeg==} peerDependencies: '@standard-schema/spec': ^1.0.0 - hono: 4.12.25 + hono: 4.12.27 '@hono/zod-validator@0.8.0': resolution: {integrity: sha512-5uS4S1/LKtZQYvD4BtpPUFkOv8d1wNxHHrChm26buMiEYc1FrHWvDUaKVBwkiVtvSExHSpLGDvcnpI2Copyj9w==} peerDependencies: - hono: 4.12.25 + hono: 4.12.27 zod: ^3.25.0 || ^4.0.0 '@iconify-json/lucide@1.2.117': @@ -748,152 +745,161 @@ packages: resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-darwin-arm64@0.35.0': + resolution: {integrity: sha512-ZgaYEwaj+lx/5n4W8GmZ2IYz0PQHjN5eqRcfijWGB+2Aq7ZInZGa0qJyAn6DEtyLuWHRSrmWOqT9q3qqTBvmUQ==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-darwin-x64@0.35.0': + resolution: {integrity: sha512-c1z9LFpKB0slQW3RchwBE8iSVzGp70TNjUUO9k4BZwwW4HH7JBGHeIy4b+kk4n/kcBASb9evKCE3/7Slmslgiw==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + '@img/sharp-freebsd-wasm32@0.35.0': + resolution: {integrity: sha512-Li2KTev0H90kEtnJHkI9xQojXt1AqWmFBMXiPw5kqd1jQgP7gi5HVK/qC5Rmh/59NuAwUuPzzPITmX22NomYYQ==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.0': + resolution: {integrity: sha512-EKbmBKtyTH+GPFDRw2TgK2oV6hyxxlJVIar4hoTYSNmIwipgMFdxPQqR392GmfdsPGWga0mCFN1cCKjRb9cljw==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + '@img/sharp-libvips-darwin-x64@1.3.0': + resolution: {integrity: sha512-Pl2OmOvrJ42adUllESxBsG54PfXLo1OYg9i3c5/5Ln/qJ0gZuTM9YMhQJPIbXqwidLRc/c2zuHt4RsrymmNv7A==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + '@img/sharp-libvips-linux-arm64@1.3.0': + resolution: {integrity: sha512-C0SqjoFKnszqa44EQ7xoaT48nnO0lOyXEULfXMWi8krrjOPGYkeK30Okzla6ATbBYsyZ0ySinK0FVkpv3DwzfQ==} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + '@img/sharp-libvips-linux-arm@1.3.0': + resolution: {integrity: sha512-A8UpHoUDW4DwnXoV6+q3C1s7QLRAHtPDEjWuNZjwHMyoCNZnm0GeNN8ls9f/bsEYTRQRW96C/n34XJQHJ2fT7A==} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + '@img/sharp-libvips-linux-ppc64@1.3.0': + resolution: {integrity: sha512-WOpkVxAjFd369iaIzEgNRreFD+gWdUMIGD5zplhNKNeqS6mm5dac3q2AFyCBmzYoAdouzZvRBgxy4z8QHZb4/A==} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + '@img/sharp-libvips-linux-riscv64@1.3.0': + resolution: {integrity: sha512-DRWw0mOHusrCCuw2rqP87oLg6PGlkomVDFqw2hIwsSfwWpu4k3XLcBPaKKl6ct/GtL/cwNkgwjV/tc0Mqht3VA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + '@img/sharp-libvips-linux-s390x@1.3.0': + resolution: {integrity: sha512-9APy+nFWhHS+kzLgWZfLcyrUd7YqnAQVa4BPOo4xkoHpdoktOAPG4cEr9+Jpl0TtqfVmcMJimNL5qNTyyOHZNA==} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + '@img/sharp-libvips-linux-x64@1.3.0': + resolution: {integrity: sha512-y9RNUYDe2A1UAdhLyfeOodGRszQdaEoe4nfOpp/sNVPl2CWIcUyFaDoCh4vPLPxu19803j2naLqZup2WxDXCLA==} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + '@img/sharp-libvips-linuxmusl-arm64@1.3.0': + resolution: {integrity: sha512-cC1wkC0Mlucd0KSiGrLkJnB/ZqPvZCntc/Lk7ZnYO5ZSbF2euNek4Xvxafojq+wN1q/W0eprdpUIjUr/EV2PBg==} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + '@img/sharp-libvips-linuxmusl-x64@1.3.0': + resolution: {integrity: sha512-LiYMhUZicB1QG//+RvmYZpXJO8fYRENfp+MZUCnG9aw+AKvGAy9gPaCnuwsPcBFs8EV66M0NNxj9VHcNklE8zw==} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-arm64@0.35.0': + resolution: {integrity: sha512-4+4XHLNT5wDT0roYlHTEmH9lDKt0acf9Tv+3hM3iceOirkxrR404/3WjAYZ9F9CkHrxeRcGLJXbi4vluMZ9O+A==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-arm@0.35.0': + resolution: {integrity: sha512-VVlpEWwizEFIOom0zdoeKuO5nuTswzVE5uHcBNvHzmeHUpNFajY3HFfbQ+zIH4E2kVaZ/yVxmsShW56TtEy4uA==} + engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-ppc64@0.35.0': + resolution: {integrity: sha512-N3hzbEpUTJC8pWpPVJvgzGxM+so/MAXc8O2s/53B0LL9ZGpfXpME7Wizkc5d/8fRBlBtkDjzoZGDCqqNDHqLEw==} + engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-riscv64@0.35.0': + resolution: {integrity: sha512-l6vmKVPnbS0RhVMbyxP5meAARsbhCnBN4fy31qz0+3a6Rv4jEqfzDrT89y6ZPkCi0AJGnwp2En528yXo401Hpw==} + engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-s390x@0.35.0': + resolution: {integrity: sha512-MYlMiPFiv/EKPAHnp3yNZ9AAWFsxga9c5Bkc6wkar6bqzHLlkGVJHRm0u1ei+VXnZxp3Mz9MG9ZIsI8vSOf3sQ==} + engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-x64@0.35.0': + resolution: {integrity: sha512-TYaItB5oj1ioXjhyn2xrR208vf+YuIIcHptQWRRaBmFhvIvL9D72DXN8w75xup0KXA8UdEAhQ9Qb2S49FD/9Cw==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-arm64@0.35.0': + resolution: {integrity: sha512-DSTb6ijQzqe6DdAaOBVqJ/SYf1vO8EW5bK6X6LRXufEBebf2722VCdvBUtZ3rtV0x2ApfPNDy/p7LrrjaWjiyQ==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-x64@0.35.0': + resolution: {integrity: sha512-K7ykQ+26Rt6+4BTU80AuGgTPIYX86UxiAKT4rcXX/WNTo7k1ZxpKz+TguHnwVpCqQK3B5PK0vZ0ZBe6nz/ib1w==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-wasm32@0.35.0': + resolution: {integrity: sha512-9woLIFORERCr+6cWu87dQ22J34EExkhc73U1kZW0c+RclQqWetoodByp4dWZ/hN8/KVmTRAx2HOnUwib8AwZdA==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.0': + resolution: {integrity: sha512-t+kie1TOyaDM6Dho+f+y0VqIUNhYQaKCUahuZVi0E0frgdiaOaPsDxDW3wfKacUdaNBCnK/ZDBMg33ydvHj8uA==} + engines: {node: '>=20.9.0'} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-arm64@0.35.0': + resolution: {integrity: sha512-M5eKxug0dabbaWgFKvPa3odNs2OpaP+81NASfGKkt4GcYXpNhSu7CaeYxWkLNV6vHmUp4hnCxnxrUyhUJhXbKA==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-ia32@0.35.0': + resolution: {integrity: sha512-z0+pZ03QCDvdVN0Ez9IX/yjWC19ikMlXrmdYMwYNLTh2BLPx3hXWPvyqWfquZ0BTO9O6GVOjIVoTcyyacMnWlQ==} + engines: {node: ^20.9.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-x64@0.35.0': + resolution: {integrity: sha512-feNnlz5ZHKr0MY1LPHvZQyJeBkbo4ctsn0D8FvA53VTw5TC63rfEL2UrWbkSBR19htSE7Mw78xYVwdJqoMWVHw==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] @@ -3069,8 +3075,9 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} @@ -3148,8 +3155,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@2.1.2: - resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} + brace-expansion@5.0.8: + resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==} + engines: {node: 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -3693,8 +3701,8 @@ packages: fast-string-width@3.0.2: resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-uri@3.1.3: - resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} + fast-uri@3.1.4: + resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==} fast-wrap-ansi@0.2.0: resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} @@ -3945,7 +3953,7 @@ packages: '@standard-community/standard-json': ^0.3.5 '@standard-community/standard-openapi': ^0.2.9 '@types/json-schema': ^7.0.15 - hono: 4.12.25 + hono: 4.12.27 openapi-types: ^12.1.3 peerDependenciesMeta: '@hono/standard-validator': @@ -3953,8 +3961,8 @@ packages: hono: optional: true - hono@4.12.25: - resolution: {integrity: sha512-2NFaIyNVgJmBs/ecmtGzlmluTFs5cHEWGTdu0t1HBwYzoGXOL5nUQBRMXsXWla5i4KkG//QMzVP88m1+I3fdAQ==} + hono@4.12.27: + resolution: {integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==} engines: {node: '>=16.9.0'} hookable@6.1.1: @@ -4587,7 +4595,7 @@ packages: '@modelcontextprotocol/sdk': '>=1.25.0' elysia: '>=1' express: '>=5' - hono: 4.12.25 + hono: 4.12.27 viem: '>=2.50.4' peerDependenciesMeta: '@modelcontextprotocol/sdk': @@ -4606,7 +4614,7 @@ packages: '@modelcontextprotocol/sdk': '>=1.25.0' elysia: '>=1' express: '>=5' - hono: 4.12.25 + hono: 4.12.27 viem: '>=2.54.0' peerDependenciesMeta: '@modelcontextprotocol/sdk': @@ -5376,6 +5384,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + send@1.2.1: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} @@ -5400,9 +5413,9 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.35.0: + resolution: {integrity: sha512-BqvG5XbwPZ4NV0DK90d86leEECMsoa8bO0nqnKWlBDYxri4GJ7c4EDInaF6q20lTh/mATmnDIKWJFfXnoVfH5g==} + engines: {node: '>=20.9.0'} shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -5625,8 +5638,8 @@ packages: tar-stream@3.2.0: resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} - tar@7.5.20: - resolution: {integrity: sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==} + tar@7.5.21: + resolution: {integrity: sha512-XdhtCvlMywwxpCW8YEq3lOXBJpUPTR2OHHcwLPO3HwsJqOHa2Ok/oJ7ruGzp+JrKoRPVCzJwAdEjqLW/vNRPHA==} engines: {node: '>=18'} teex@1.0.1: @@ -6652,7 +6665,7 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@emnapi/runtime@1.10.0': + '@emnapi/runtime@1.11.3': dependencies: tslib: 2.8.1 optional: true @@ -6802,22 +6815,18 @@ snapshots: '@tanstack/vue-virtual': 3.13.32(vue@3.5.40(typescript@6.0.3)) vue: 3.5.40(typescript@6.0.3) - '@hono/node-server@1.19.14(hono@4.12.25)': - dependencies: - hono: 4.12.25 - - '@hono/node-server@2.0.10(hono@4.12.25)': + '@hono/node-server@2.0.10(hono@4.12.27)': dependencies: - hono: 4.12.25 + hono: 4.12.27 - '@hono/standard-validator@0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.25)': + '@hono/standard-validator@0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.27)': dependencies: '@standard-schema/spec': 1.1.0 - hono: 4.12.25 + hono: 4.12.27 - '@hono/zod-validator@0.8.0(hono@4.12.25)(zod@4.4.3)': + '@hono/zod-validator@0.8.0(hono@4.12.27)(zod@4.4.3)': dependencies: - hono: 4.12.25 + hono: 4.12.27 zod: 4.4.3 '@iconify-json/lucide@1.2.117': @@ -6847,98 +6856,108 @@ snapshots: '@img/colour@1.1.0': {} - '@img/sharp-darwin-arm64@0.34.5': + '@img/sharp-darwin-arm64@0.35.0': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-arm64': 1.3.0 optional: true - '@img/sharp-darwin-x64@0.34.5': + '@img/sharp-darwin-x64@0.35.0': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.3.0 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': + '@img/sharp-freebsd-wasm32@0.35.0': + dependencies: + '@img/sharp-wasm32': 0.35.0 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.3.0': optional: true - '@img/sharp-libvips-darwin-x64@1.2.4': + '@img/sharp-libvips-darwin-x64@1.3.0': optional: true - '@img/sharp-libvips-linux-arm64@1.2.4': + '@img/sharp-libvips-linux-arm64@1.3.0': optional: true - '@img/sharp-libvips-linux-arm@1.2.4': + '@img/sharp-libvips-linux-arm@1.3.0': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.4': + '@img/sharp-libvips-linux-ppc64@1.3.0': optional: true - '@img/sharp-libvips-linux-riscv64@1.2.4': + '@img/sharp-libvips-linux-riscv64@1.3.0': optional: true - '@img/sharp-libvips-linux-s390x@1.2.4': + '@img/sharp-libvips-linux-s390x@1.3.0': optional: true - '@img/sharp-libvips-linux-x64@1.2.4': + '@img/sharp-libvips-linux-x64@1.3.0': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + '@img/sharp-libvips-linuxmusl-arm64@1.3.0': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.4': + '@img/sharp-libvips-linuxmusl-x64@1.3.0': optional: true - '@img/sharp-linux-arm64@0.34.5': + '@img/sharp-linux-arm64@0.35.0': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.3.0 optional: true - '@img/sharp-linux-arm@0.34.5': + '@img/sharp-linux-arm@0.35.0': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.3.0 optional: true - '@img/sharp-linux-ppc64@0.34.5': + '@img/sharp-linux-ppc64@0.35.0': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.3.0 optional: true - '@img/sharp-linux-riscv64@0.34.5': + '@img/sharp-linux-riscv64@0.35.0': optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.3.0 optional: true - '@img/sharp-linux-s390x@0.34.5': + '@img/sharp-linux-s390x@0.35.0': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.3.0 optional: true - '@img/sharp-linux-x64@0.34.5': + '@img/sharp-linux-x64@0.35.0': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.3.0 optional: true - '@img/sharp-linuxmusl-arm64@0.34.5': + '@img/sharp-linuxmusl-arm64@0.35.0': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.0 optional: true - '@img/sharp-linuxmusl-x64@0.34.5': + '@img/sharp-linuxmusl-x64@0.35.0': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.3.0 + optional: true + + '@img/sharp-wasm32@0.35.0': + dependencies: + '@emnapi/runtime': 1.11.3 optional: true - '@img/sharp-wasm32@0.34.5': + '@img/sharp-webcontainers-wasm32@0.35.0': dependencies: - '@emnapi/runtime': 1.10.0 + '@img/sharp-wasm32': 0.35.0 optional: true - '@img/sharp-win32-arm64@0.34.5': + '@img/sharp-win32-arm64@0.35.0': optional: true - '@img/sharp-win32-ia32@0.34.5': + '@img/sharp-win32-ia32@0.35.0': optional: true - '@img/sharp-win32-x64@0.34.5': + '@img/sharp-win32-x64@0.35.0': optional: true '@inquirer/ansi@2.0.5': {} @@ -7117,7 +7136,7 @@ snapshots: '@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3)': dependencies: - '@hono/node-server': 1.19.14(hono@4.12.25) + '@hono/node-server': 2.0.10(hono@4.12.27) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 @@ -7127,7 +7146,7 @@ snapshots: eventsource-parser: 3.1.0 express: 5.2.1 express-rate-limit: 8.5.2(express@5.2.1) - hono: 4.12.25 + hono: 4.12.27 jose: 6.2.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -8606,7 +8625,7 @@ snapshots: magic-string: 0.30.21 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - srvx: 0.11.15 + srvx: 0.11.22 strip-literal: 3.1.0 turbo-stream: 3.2.0 vite: '@voidzero-dev/vite-plus-core@0.1.24(@types/node@22.19.17)(@voidzero-dev/vite-plus-core@0.1.24)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)(typescript@6.0.3)(yaml@2.8.4)' @@ -8871,10 +8890,10 @@ snapshots: accounts@0.14.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.55.10(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14): dependencies: - hono: 4.12.25 + hono: 4.12.27 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@6.0.3) - mppx: 0.6.27(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.25)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) + mppx: 0.6.27(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.27)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)) ox: 0.14.20(typescript@6.0.3)(zod@4.4.3) webauthx: 0.1.2(typescript@6.0.3)(zod@4.4.3) zod: 4.4.3 @@ -8895,11 +8914,11 @@ snapshots: accounts@0.15.2(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.54.6(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14): dependencies: - hono: 4.12.25 + hono: 4.12.27 idb-keyval: 6.2.2 jose: 6.2.3 mipd: 0.0.7(typescript@6.0.3) - mppx: 0.8.9(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.25)(typescript@6.0.3)(viem@2.54.6(typescript@6.0.3)(zod@4.4.3)) + mppx: 0.8.9(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.27)(typescript@6.0.3)(viem@2.54.6(typescript@6.0.3)(zod@4.4.3)) ox: 0.14.30(typescript@6.0.3)(zod@4.4.3) wata: 0.4.0(react@19.2.5)(typescript@6.0.3) webauthx: 0.1.2(typescript@6.0.3)(zod@4.4.3) @@ -8943,7 +8962,7 @@ snapshots: ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.3 + fast-uri: 3.1.4 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -9035,7 +9054,7 @@ snapshots: bail@2.0.2: {} - balanced-match@1.0.2: {} + balanced-match@4.0.4: {} bare-events@2.8.2: {} @@ -9112,9 +9131,9 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@2.1.2: + brace-expansion@5.0.8: dependencies: - balanced-match: 1.0.2 + balanced-match: 4.0.4 braces@3.0.3: dependencies: @@ -9452,9 +9471,9 @@ snapshots: emoji-regex@9.2.2: {} - emulate@0.5.0(patch_hash=b2fb51af97ea1d50b418f6a8216cf9423b584f2f690e7d2beec2f6e10e5ca234)(hono@4.12.25): + emulate@0.5.0(patch_hash=b2fb51af97ea1d50b418f6a8216cf9423b584f2f690e7d2beec2f6e10e5ca234)(hono@4.12.27): dependencies: - '@hono/node-server': 1.19.14(hono@4.12.25) + '@hono/node-server': 2.0.10(hono@4.12.27) commander: 14.0.3 picocolors: 1.1.1 yaml: 2.8.4 @@ -9728,7 +9747,7 @@ snapshots: dependencies: fast-string-truncated-width: 3.0.3 - fast-uri@3.1.3: {} + fast-uri@3.1.4: {} fast-wrap-ansi@0.2.0: dependencies: @@ -10067,17 +10086,17 @@ snapshots: highlight.js@11.11.1: {} - hono-openapi@1.3.1(@hono/standard-validator@0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.25))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.4.3))(@types/json-schema@7.0.15)(hono@4.12.25)(openapi-types@12.1.3): + hono-openapi@1.3.1(@hono/standard-validator@0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.27))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.4.3))(@types/json-schema@7.0.15)(hono@4.12.27)(openapi-types@12.1.3): dependencies: '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3) '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.4.3) '@types/json-schema': 7.0.15 openapi-types: 12.1.3 optionalDependencies: - '@hono/standard-validator': 0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.25) - hono: 4.12.25 + '@hono/standard-validator': 0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.27) + hono: 4.12.27 - hono@4.12.25: {} + hono@4.12.27: {} hookable@6.1.1: {} @@ -10877,7 +10896,7 @@ snapshots: miniflare@4.20260507.1: dependencies: '@cspotcode/source-map-support': 0.8.1 - sharp: 0.34.5 + sharp: 0.35.0 undici: 7.28.0 workerd: 1.20260507.1 ws: 8.21.0 @@ -10889,7 +10908,7 @@ snapshots: miniflare@4.20260511.0: dependencies: '@cspotcode/source-map-support': 0.8.1 - sharp: 0.34.5 + sharp: 0.35.0 undici: 7.28.0 workerd: 1.20260511.1 ws: 8.21.0 @@ -10900,11 +10919,11 @@ snapshots: minimatch@5.1.9: dependencies: - brace-expansion: 2.1.2 + brace-expansion: 5.0.8 minimatch@9.0.9: dependencies: - brace-expansion: 2.1.2 + brace-expansion: 5.0.8 minimist@1.2.8: {} @@ -10933,7 +10952,7 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.4 - mppx@0.6.27(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.25)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)): + mppx@0.6.27(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.27)(typescript@6.0.3)(viem@2.55.10(typescript@6.0.3)(zod@4.4.3)): dependencies: incur: 0.4.5 ox: 0.14.22(typescript@6.0.3)(zod@4.4.3) @@ -10942,11 +10961,11 @@ snapshots: optionalDependencies: '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3) express: 5.2.1 - hono: 4.12.25 + hono: 4.12.27 transitivePeerDependencies: - typescript - mppx@0.8.9(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.25)(typescript@6.0.3)(viem@2.54.6(typescript@6.0.3)(zod@4.4.3)): + mppx@0.8.9(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.27)(typescript@6.0.3)(viem@2.54.6(typescript@6.0.3)(zod@4.4.3)): dependencies: '@stripe/stripe-js': 9.9.0 eventsource-parser: 3.1.0 @@ -10957,7 +10976,7 @@ snapshots: optionalDependencies: '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3) express: 5.2.1 - hono: 4.12.25 + hono: 4.12.27 transitivePeerDependencies: - typescript @@ -11390,7 +11409,7 @@ snapshots: execa: 9.6.1 get-port: 7.2.0 http-proxy: 1.18.1 - tar: 7.5.20 + tar: 7.5.21 optionalDependencies: testcontainers: 11.14.0 transitivePeerDependencies: @@ -11772,6 +11791,8 @@ snapshots: semver@7.7.4: {} + semver@7.8.5: {} + send@1.2.1: dependencies: debug: 4.4.3 @@ -11807,36 +11828,37 @@ snapshots: setprototypeof@1.2.0: {} - sharp@0.34.5: + sharp@0.35.0: dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.5 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 + '@img/sharp-darwin-arm64': 0.35.0 + '@img/sharp-darwin-x64': 0.35.0 + '@img/sharp-freebsd-wasm32': 0.35.0 + '@img/sharp-libvips-darwin-arm64': 1.3.0 + '@img/sharp-libvips-darwin-x64': 1.3.0 + '@img/sharp-libvips-linux-arm': 1.3.0 + '@img/sharp-libvips-linux-arm64': 1.3.0 + '@img/sharp-libvips-linux-ppc64': 1.3.0 + '@img/sharp-libvips-linux-riscv64': 1.3.0 + '@img/sharp-libvips-linux-s390x': 1.3.0 + '@img/sharp-libvips-linux-x64': 1.3.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.0 + '@img/sharp-libvips-linuxmusl-x64': 1.3.0 + '@img/sharp-linux-arm': 0.35.0 + '@img/sharp-linux-arm64': 0.35.0 + '@img/sharp-linux-ppc64': 0.35.0 + '@img/sharp-linux-riscv64': 0.35.0 + '@img/sharp-linux-s390x': 0.35.0 + '@img/sharp-linux-x64': 0.35.0 + '@img/sharp-linuxmusl-arm64': 0.35.0 + '@img/sharp-linuxmusl-x64': 0.35.0 + '@img/sharp-webcontainers-wasm32': 0.35.0 + '@img/sharp-win32-arm64': 0.35.0 + '@img/sharp-win32-ia32': 0.35.0 + '@img/sharp-win32-x64': 0.35.0 shebang-command@2.0.0: dependencies: @@ -12061,15 +12083,15 @@ snapshots: tapimo@0.5.2(0a9fca14114bb98809b2b223454df2b6): dependencies: - '@hono/node-server': 2.0.10(hono@4.12.25) - '@hono/standard-validator': 0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.25) + '@hono/node-server': 2.0.10(hono@4.12.27) + '@hono/standard-validator': 0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.27) accounts: 0.15.2(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(@types/react@19.2.14)(@wagmi/core@3.4.11)(express@5.2.1)(react@19.2.5)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.2.5))(viem@2.54.6(typescript@6.0.3)(zod@4.4.3))(wagmi@3.6.14) - hono: 4.12.25 - hono-openapi: 1.3.1(@hono/standard-validator@0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.25))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.4.3))(@types/json-schema@7.0.15)(hono@4.12.25)(openapi-types@12.1.3) + hono: 4.12.27 + hono-openapi: 1.3.1(@hono/standard-validator@0.2.3(@standard-schema/spec@1.1.0)(hono@4.12.27))(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.2(zod@4.4.3))(zod@4.4.3))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.4.3))(@types/json-schema@7.0.15)(hono@4.12.27)(openapi-types@12.1.3) incur: 0.4.19 jose: 6.2.3 kysely: 0.29.3 - mppx: 0.8.9(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.25)(typescript@6.0.3)(viem@2.54.6(typescript@6.0.3)(zod@4.4.3)) + mppx: 0.8.9(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.4.3))(express@5.2.1)(hono@4.12.27)(typescript@6.0.3)(viem@2.54.6(typescript@6.0.3)(zod@4.4.3)) nanoid: 5.1.11 ox: 0.14.30(typescript@6.0.3)(zod@4.4.3) pg: 8.22.0 @@ -12185,7 +12207,7 @@ snapshots: - bare-buffer - react-native-b4a - tar@7.5.20: + tar@7.5.21: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -12651,7 +12673,7 @@ snapshots: dependencies: '@base-ui/react': 1.4.1(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@codesandbox/sandpack-react': 2.20.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@hono/node-server': 2.0.10(hono@4.12.25) + '@hono/node-server': 2.0.10(hono@4.12.27) '@iconify-json/lucide': 1.2.117 '@iconify-json/simple-icons': 1.2.90 '@iconify-json/vscode-icons': 1.2.67 @@ -12686,7 +12708,7 @@ snapshots: estree-util-visit: 2.0.0 extend: 3.0.2 github-slugger: 2.0.0 - hono: 4.12.25 + hono: 4.12.27 image-size: 2.0.2 lz-string: 1.5.0 magic-string: 0.30.21 @@ -12816,10 +12838,10 @@ snapshots: wata@0.4.0(react@19.2.5)(typescript@6.0.3): dependencies: - '@hono/node-server': 1.19.14(hono@4.12.25) + '@hono/node-server': 2.0.10(hono@4.12.27) '@noble/ciphers': 2.2.0 '@noble/hashes': 2.2.0 - hono: 4.12.25 + hono: 4.12.27 ox: 0.14.30(typescript@6.0.3)(zod@4.4.3) zod: 4.4.3 optionalDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c74a937..abfb18b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -44,10 +44,13 @@ minimumReleaseAgeExclude: - esbuild@0.28.1 - protobufjs@7.6.5 - form-data@4.0.6 - - tar@7.5.20 - vite-plus@0.1.24 - launch-editor@2.14.1 - - hono@4.12.25 + - hono@4.12.27 + - fast-uri@3.1.4 + - sharp@0.35.0 + - brace-expansion@5.0.8 + - tar@7.5.21 - undici@7.28.0 - js-yaml@4.3.0 - ws@8.21.0 @@ -56,15 +59,18 @@ overrides: '@babel/core': 7.29.6 '@grpc/grpc-js': 1.14.4 axios: 1.18.0 - brace-expansion: 2.1.2 + '@hono/node-server@<2.0.5': 2.0.10 + brace-expansion: 5.0.8 esbuild: 0.28.1 form-data: 4.0.6 - hono: 4.12.25 + fast-uri: 3.1.4 + hono: 4.12.27 js-yaml: 4.3.0 launch-editor: 2.14.1 protobufjs: 7.6.5 shell-quote: 1.10.0 - tar: 7.5.20 + sharp: 0.35.0 + tar: 7.5.21 tmp: 0.2.7 undici: 7.28.0 uuid: 11.1.1 From d2b2e40e66fd6aede8d737f456b1b7a9c5ba3835 Mon Sep 17 00:00:00 2001 From: tmm Date: Tue, 28 Jul 2026 16:57:03 -0400 Subject: [PATCH 5/5] test: remove access key TTL assertion --- src/lib/accountLink.test.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/lib/accountLink.test.ts b/src/lib/accountLink.test.ts index 91c1503..fde9a54 100644 --- a/src/lib/accountLink.test.ts +++ b/src/lib/accountLink.test.ts @@ -21,11 +21,6 @@ test('hashes tokens deterministically', async () => { ) }) -test('keeps reusable access keys valid for 90 days', async () => { - const AccountLink = await import('#/lib/accountLink.ts') - expect(AccountLink.reusableAccessKeyTtlMs).toBe(90 * 24 * 60 * 60 * 1000) -}) - test('verifies key authorizations against Tipbot policy', async () => { const verifyHash = vi.fn(async () => true) vi.resetModules()