From 0aea21baed1189006464be5f635d05fe3b9d746c Mon Sep 17 00:00:00 2001 From: Roy Keene Date: Thu, 21 May 2026 13:27:38 -0500 Subject: [PATCH 1/4] Start of upgrade --- apps/server/npm-shrinkwrap.json | 119 +++++++++++++++++--------------- apps/server/package.json | 2 +- apps/server/src/api/token.ts | 24 +++++-- apps/web/npm-shrinkwrap.json | 115 +++++++++++++++--------------- apps/web/package.json | 2 +- 5 files changed, 144 insertions(+), 118 deletions(-) diff --git a/apps/server/npm-shrinkwrap.json b/apps/server/npm-shrinkwrap.json index f292a5a..ffae884 100644 --- a/apps/server/npm-shrinkwrap.json +++ b/apps/server/npm-shrinkwrap.json @@ -9,7 +9,7 @@ "dependencies": { "@hono/node-server": "1.14.2", "@hono/node-ws": "1.1.4", - "@keetanetwork/anchor": "0.0.20", + "@keetanetwork/anchor": "0.0.67", "@keetanetwork/asn1-napi-rs": "1.2.0", "@keetanetwork/web-ui-utils": "1.3.10", "hono": "4.7.10", @@ -535,9 +535,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", - "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.4.tgz", + "integrity": "sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -549,15 +549,15 @@ } }, "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", - "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.1.tgz", + "integrity": "sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==", "license": "Apache-2.0", "optional": true, "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", - "protobufjs": "^7.5.3", + "protobufjs": "^7.5.5", "yargs": "^17.7.2" }, "bin": { @@ -704,13 +704,13 @@ } }, "node_modules/@keetanetwork/anchor": { - "version": "0.0.20", - "resolved": "https://npm.pkg.github.com/download/@keetanetwork/anchor/0.0.20/3da5738150fc2912f8266b4f0fcffff84fb7dbdf", - "integrity": "sha512-Bg7RXK7hJ01YRjP/ndD9P0pqFeiY6Tra19GpX1bS3wNpqrqaKh6maM80JUWPQYQ+QKGP5zpmmFBao/iZicQCyQ==", + "version": "0.0.67", + "resolved": "https://npm.pkg.github.com/download/@keetanetwork/anchor/0.0.67/13c3eb92c187ac681ccf68f39865e0781b855049", + "integrity": "sha512-yAM4nNyjGN9nzQhAQ9o9mBCNVBYFa/EIC2zev41prZM+ChzYk4gwUCFQ8n9FIXDjYDyY7kowwjbse2PZOamSig==", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@keetanetwork/currency-info": "1.2.5", - "@keetanetwork/keetanet-client": "0.14.11", + "@keetanetwork/keetanet-client": "0.18.0", "typia": "9.5.0" }, "engines": { @@ -733,16 +733,26 @@ "license": "ISC" }, "node_modules/@keetanetwork/keetanet-client": { - "version": "0.14.11", - "resolved": "https://npm.pkg.github.com/download/@KeetaNetwork/keetanet-client/0.14.11/ef3c062540cec8ea9baac337979ab319cdee8be5", - "integrity": "sha512-y2W4T/MO5Z7vhIEvC1H9XVCkXv7vuQG4bP18qoX7b+34h5vcevHA9rPnqdkyVuxxAhyVskJ9j/XrmrizNxEU9A==", + "version": "0.18.0", + "resolved": "https://npm.pkg.github.com/download/@KeetaNetwork/keetanet-client/0.18.0/17d6a143eec0ca8801145bad06ef631b49c7b0d7", + "integrity": "sha512-WVUSOaWENdlQDCk1lMajrSesiU6ZW2SZthpWnB/petGbAeJ3kph2NU4pLr69DSwQde/OcbCmmOVneUfkXTAuqA==", "license": "see LICENSE", "dependencies": { "secp256k1": "5.0.1" }, "optionalDependencies": { "@google-cloud/logging": "11.2.0", - "@keetanetwork/asn1-napi-rs": "1.2.0" + "@keetanetwork/asn1-napi-rs": "1.2.2" + } + }, + "node_modules/@keetanetwork/keetanet-client/node_modules/@keetanetwork/asn1-napi-rs": { + "version": "1.2.2", + "resolved": "https://npm.pkg.github.com/download/@KeetaNetwork/asn1-napi-rs/1.2.2/d621a733767e2b44eaebcdbc63283a0b4e91f269", + "integrity": "sha512-kwxPBWHJv/VYKYpElhwWTbAlxAxFIQzyJmDxOEApKtqf2r4Lpiuq2RXd2lDkojGPLYVZfXrGTalm4e0b4DaYzA==", + "license": "SEE LICENSE IN LICENSE", + "optional": true, + "engines": { + "node": ">= 10" } }, "node_modules/@keetanetwork/web-ui-utils": { @@ -837,9 +847,9 @@ } }, "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", "license": "Apache-2.0", "optional": true, "engines": { @@ -900,9 +910,9 @@ "optional": true }, "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", "license": "BSD-3-Clause", "optional": true }, @@ -914,14 +924,13 @@ "optional": true }, "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", "license": "BSD-3-Clause", "optional": true, "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@protobufjs/aspromise": "^1.1.1" } }, "node_modules/@protobufjs/float": { @@ -932,9 +941,9 @@ "optional": true }, "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.2.tgz", + "integrity": "sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==", "license": "BSD-3-Clause", "optional": true }, @@ -953,9 +962,9 @@ "optional": true }, "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", "license": "BSD-3-Clause", "optional": true }, @@ -1347,9 +1356,9 @@ "license": "MIT" }, "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz", + "integrity": "sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==", "license": "MIT", "optional": true, "engines": { @@ -1650,9 +1659,9 @@ } }, "node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/brace-expansion": { @@ -2340,6 +2349,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", "optional": true, "bin": { @@ -3192,13 +3202,13 @@ } }, "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", "optional": true, "dependencies": { - "jwa": "^2.0.0", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -3817,34 +3827,34 @@ } }, "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.0.tgz", + "integrity": "sha512-LtESOsMPTZgyYtwxhvdgdjGL0HmXEaRA/hVD6sol4zA60hVXXXP/SGmxnqDbgGE8gy7pYex7cym+5vYPcmaXBQ==", "hasInstallScript": true, "license": "BSD-3-Clause", "optional": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", + "@protobufjs/codegen": "^2.0.5", "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", + "@protobufjs/fetch": "^1.1.1", "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", + "@protobufjs/inquire": "^1.1.2", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", - "long": "^5.0.0" + "long": "^5.3.2" }, "engines": { "node": ">=12.0.0" } }, "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "license": "MIT", "optional": true, "dependencies": { @@ -4802,6 +4812,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" diff --git a/apps/server/package.json b/apps/server/package.json index 0e36d17..2a6cee0 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -17,7 +17,7 @@ "dependencies": { "@hono/node-server": "1.14.2", "@hono/node-ws": "1.1.4", - "@keetanetwork/anchor": "0.0.20", + "@keetanetwork/anchor": "0.0.67", "@keetanetwork/asn1-napi-rs": "1.2.0", "@keetanetwork/web-ui-utils": "1.3.10", "hono": "4.7.10", diff --git a/apps/server/src/api/token.ts b/apps/server/src/api/token.ts index 30c4029..eb55909 100644 --- a/apps/server/src/api/token.ts +++ b/apps/server/src/api/token.ts @@ -25,7 +25,11 @@ export type TokenDetails = { type: "BASE" | "TRUSTABLE" | "RISKY" | "UNKNOWN"; }; -type AccountInfo = Awaited>[number]; +type KeetaNetLibType = typeof KeetaNetLib; +type AccountKeyAlgorithm = KeetaNetLibType['lib']['Account']['AccountKeyAlgorithm'][keyof KeetaNetLibType['lib']['Account']['AccountKeyAlgorithm']]; + +type AccountInfo = Awaited>> +type TokenAccountInfo = AccountInfo /** * Schema to validate query parameters for /token endpoint @@ -67,7 +71,7 @@ function parseTokenMetadata(metadata: string | undefined): { decimalPlaces: numb return({ decimalPlaces: 0 }); } - export function parseTokenDetails(token: AccountInfo, baseToken: GenericAccount): TokenDetails { + export function parseTokenDetails(token: TokenAccountInfo, baseToken: GenericAccount): TokenDetails { const metadata = parseTokenMetadata(token.info.metadata); return({ @@ -122,7 +126,15 @@ export async function getManyTokens(client: InstanceType data && data.account.isToken()) // Parse details for each token account - return Object.fromEntries(filteredInfos.map(([key, data]) => ([key, parseTokenDetails(data, baseToken)]))) + return Object.fromEntries(filteredInfos.map(function([key, data]) { + // XXX: TypeScript isn't narrowing the type based on this, sadly + if (!data.account.isToken()) { + throw(new Error('Expected token account')); + } + + // @ts-ignore + return([key, parseTokenDetails(data, baseToken)]); + })); } @@ -152,10 +164,12 @@ const token = new Hono() throw new NotFoundError('Invalid public key'); } - const info = await client.getAccountInfo(tokenPublicKey); + const tokenPublicKeyTyped = KeetaNetLib.lib.Account.fromPublicKeyString(tokenPublicKey).assertKeyType(KeetaNetLib.lib.Account.AccountKeyAlgorithm.TOKEN); + + const info = await client.getAccountInfo(tokenPublicKeyTyped); const token = parseTokenDetails(info, c.get('explorer').keetaNet.network.getBaseToken()); return jsonResponse(c, { token }) }) -export default token \ No newline at end of file +export default token diff --git a/apps/web/npm-shrinkwrap.json b/apps/web/npm-shrinkwrap.json index feda94d..a52fc7b 100644 --- a/apps/web/npm-shrinkwrap.json +++ b/apps/web/npm-shrinkwrap.json @@ -7,7 +7,7 @@ "": { "name": "web", "dependencies": { - "@keetanetwork/anchor": "0.0.20", + "@keetanetwork/anchor": "0.0.67", "@keetanetwork/web-ui": "1.3.18", "@modular-forms/preact": "0.12.1", "@preact-signals/query": "2.1.1", @@ -986,9 +986,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", - "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.4.tgz", + "integrity": "sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -1000,15 +1000,15 @@ } }, "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", - "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.1.tgz", + "integrity": "sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==", "license": "Apache-2.0", "optional": true, "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", - "protobufjs": "^7.5.3", + "protobufjs": "^7.5.5", "yargs": "^17.7.2" }, "bin": { @@ -1156,13 +1156,13 @@ } }, "node_modules/@keetanetwork/anchor": { - "version": "0.0.20", - "resolved": "https://npm.pkg.github.com/download/@keetanetwork/anchor/0.0.20/3da5738150fc2912f8266b4f0fcffff84fb7dbdf", - "integrity": "sha512-Bg7RXK7hJ01YRjP/ndD9P0pqFeiY6Tra19GpX1bS3wNpqrqaKh6maM80JUWPQYQ+QKGP5zpmmFBao/iZicQCyQ==", + "version": "0.0.67", + "resolved": "https://npm.pkg.github.com/download/@keetanetwork/anchor/0.0.67/13c3eb92c187ac681ccf68f39865e0781b855049", + "integrity": "sha512-yAM4nNyjGN9nzQhAQ9o9mBCNVBYFa/EIC2zev41prZM+ChzYk4gwUCFQ8n9FIXDjYDyY7kowwjbse2PZOamSig==", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@keetanetwork/currency-info": "1.2.5", - "@keetanetwork/keetanet-client": "0.14.11", + "@keetanetwork/keetanet-client": "0.18.0", "typia": "9.5.0" }, "engines": { @@ -1170,9 +1170,9 @@ } }, "node_modules/@keetanetwork/asn1-napi-rs": { - "version": "1.2.0", - "resolved": "https://npm.pkg.github.com/download/@KeetaNetwork/asn1-napi-rs/1.2.0/ae693d197df1c0faaf59ee55a695e0323efafa9f", - "integrity": "sha512-gg6IhT8aL4nO/VSPfX6uQXDdBNyB3USRO+RM/Letaz1e6F9kLHJcR7/PrOCXEgcVRK9QtZASw4M2jBE2/6hsgA==", + "version": "1.2.2", + "resolved": "https://npm.pkg.github.com/download/@KeetaNetwork/asn1-napi-rs/1.2.2/d621a733767e2b44eaebcdbc63283a0b4e91f269", + "integrity": "sha512-kwxPBWHJv/VYKYpElhwWTbAlxAxFIQzyJmDxOEApKtqf2r4Lpiuq2RXd2lDkojGPLYVZfXrGTalm4e0b4DaYzA==", "license": "SEE LICENSE IN LICENSE", "optional": true, "engines": { @@ -1186,16 +1186,16 @@ "license": "ISC" }, "node_modules/@keetanetwork/keetanet-client": { - "version": "0.14.11", - "resolved": "https://npm.pkg.github.com/download/@KeetaNetwork/keetanet-client/0.14.11/ef3c062540cec8ea9baac337979ab319cdee8be5", - "integrity": "sha512-y2W4T/MO5Z7vhIEvC1H9XVCkXv7vuQG4bP18qoX7b+34h5vcevHA9rPnqdkyVuxxAhyVskJ9j/XrmrizNxEU9A==", + "version": "0.18.0", + "resolved": "https://npm.pkg.github.com/download/@KeetaNetwork/keetanet-client/0.18.0/17d6a143eec0ca8801145bad06ef631b49c7b0d7", + "integrity": "sha512-WVUSOaWENdlQDCk1lMajrSesiU6ZW2SZthpWnB/petGbAeJ3kph2NU4pLr69DSwQde/OcbCmmOVneUfkXTAuqA==", "license": "see LICENSE", "dependencies": { "secp256k1": "5.0.1" }, "optionalDependencies": { "@google-cloud/logging": "11.2.0", - "@keetanetwork/asn1-napi-rs": "1.2.0" + "@keetanetwork/asn1-napi-rs": "1.2.2" } }, "node_modules/@keetanetwork/web-ui": { @@ -1348,9 +1348,9 @@ } }, "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", "license": "Apache-2.0", "optional": true, "engines": { @@ -1586,9 +1586,9 @@ "optional": true }, "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", "license": "BSD-3-Clause", "optional": true }, @@ -1600,14 +1600,13 @@ "optional": true }, "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", "license": "BSD-3-Clause", "optional": true, "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@protobufjs/aspromise": "^1.1.1" } }, "node_modules/@protobufjs/float": { @@ -1618,9 +1617,9 @@ "optional": true }, "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.2.tgz", + "integrity": "sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==", "license": "BSD-3-Clause", "optional": true }, @@ -1639,9 +1638,9 @@ "optional": true }, "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", "license": "BSD-3-Clause", "optional": true }, @@ -2423,9 +2422,9 @@ } }, "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz", + "integrity": "sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==", "license": "MIT", "optional": true, "engines": { @@ -3160,9 +3159,9 @@ } }, "node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/boolbase": { @@ -4556,6 +4555,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", "optional": true, "bin": { @@ -6060,13 +6060,13 @@ } }, "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", "optional": true, "dependencies": { - "jwa": "^2.0.0", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -7171,34 +7171,34 @@ } }, "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.0.tgz", + "integrity": "sha512-LtESOsMPTZgyYtwxhvdgdjGL0HmXEaRA/hVD6sol4zA60hVXXXP/SGmxnqDbgGE8gy7pYex7cym+5vYPcmaXBQ==", "hasInstallScript": true, "license": "BSD-3-Clause", "optional": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", + "@protobufjs/codegen": "^2.0.5", "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", + "@protobufjs/fetch": "^1.1.1", "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", + "@protobufjs/inquire": "^1.1.2", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", - "long": "^5.0.0" + "long": "^5.3.2" }, "engines": { "node": ">=12.0.0" } }, "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "license": "MIT", "optional": true, "dependencies": { @@ -8545,6 +8545,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" diff --git a/apps/web/package.json b/apps/web/package.json index 9b18227..36275b4 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -9,7 +9,7 @@ "preview": "make dist && vite preview --outDir ./dist" }, "dependencies": { - "@keetanetwork/anchor": "0.0.20", + "@keetanetwork/anchor": "0.0.67", "@keetanetwork/web-ui": "1.3.18", "@modular-forms/preact": "0.12.1", "@preact-signals/query": "2.1.1", From 9cd4d2d9a3953ddcd731a2a927b50650d3490754 Mon Sep 17 00:00:00 2001 From: ezra ripps Date: Thu, 21 May 2026 14:38:30 -0400 Subject: [PATCH 2/4] Update type error --- apps/server/src/api/storage.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/server/src/api/storage.ts b/apps/server/src/api/storage.ts index ce07f53..89f5147 100644 --- a/apps/server/src/api/storage.ts +++ b/apps/server/src/api/storage.ts @@ -6,6 +6,9 @@ import { Hono } from "hono"; import { NotFoundError } from "./errors"; import { KeetaNet } from "@keetanetwork/anchor"; import { getManyTokens } from "./token"; +import type { ToJSONSerializable } from "@keetanetwork/anchor/lib/utils/json"; + +type UserClientState = Awaited> const storage = new Hono() /** @@ -22,7 +25,7 @@ const storage = new Hono() throw new NotFoundError('Invalid public key'); } - const state = await userClient.state() + const state: UserClientState = await userClient.state() const balances = state.balances.map(function(balance) { return({ @@ -36,10 +39,12 @@ const storage = new Hono() }); const tokens = await getManyTokens(client, tokensPublicKey, explorer.keetaNet.network.getBaseToken()); + const info: ToJSONSerializable = KeetaNet.lib.Utils.Conversion.toJSONSerializable(state.info); + const account = { publicKey: accountPublicKey, headBlock: state.currentHeadBlock, - info: KeetaNet.lib.Utils.Conversion.toJSONSerializable(state.info), + info: info, tokens: balances.map(function({ balance, publicKey }) { return({ ...tokens[publicKey], From 329741dbb31ade39d778311e94e9e25f22f576d8 Mon Sep 17 00:00:00 2001 From: ezra ripps Date: Thu, 21 May 2026 16:00:07 -0400 Subject: [PATCH 3/4] update to fix linting issues --- apps/server/src/api/token.ts | 2 +- apps/web/npm-shrinkwrap.json | 603 ++++++++++++++---- apps/web/package.json | 6 +- .../app/account/[accountPublicKey]/page.tsx | 4 +- .../app/storage/[accountPublicKey]/page.tsx | 4 +- apps/web/src/components/OperationType.tsx | 107 ---- .../src/components/TextCertificateLink.tsx | 18 +- .../Transactions/TokenTransactionTable.tsx | 20 +- .../Transactions/TransactionsTable.tsx | 10 +- apps/web/src/hooks/useTransactions.ts | 4 +- apps/web/src/libs/explorer-sdk.ts | 50 +- apps/web/src/libs/token-batcher.ts | 6 +- 12 files changed, 559 insertions(+), 275 deletions(-) delete mode 100644 apps/web/src/components/OperationType.tsx diff --git a/apps/server/src/api/token.ts b/apps/server/src/api/token.ts index eb55909..87b6f75 100644 --- a/apps/server/src/api/token.ts +++ b/apps/server/src/api/token.ts @@ -8,7 +8,7 @@ import { validator } from "hono/validator"; import * as v from "valibot"; import { splitEvenly } from "@/utils/array"; import { Numeric } from "@keetanetwork/web-ui-utils/helpers/Numeric"; -import type { GenericAccount } from "@keetanetwork/web-ui-utils/helpers/keetanet-operations"; +import type { GenericAccount } from "@keetanetwork/keetanet-client/lib/account"; /** * Types diff --git a/apps/web/npm-shrinkwrap.json b/apps/web/npm-shrinkwrap.json index a52fc7b..f63efea 100644 --- a/apps/web/npm-shrinkwrap.json +++ b/apps/web/npm-shrinkwrap.json @@ -8,19 +8,19 @@ "name": "web", "dependencies": { "@keetanetwork/anchor": "0.0.67", - "@keetanetwork/web-ui": "1.3.18", + "@keetanetwork/web-ui": "^1.7.2", "@modular-forms/preact": "0.12.1", "@preact-signals/query": "2.1.1", "@preact/signals": "1.3.2", "dayjs": "1.11.13", "lightweight-charts": "5.0.7", - "motion": "12.12.1", + "motion": "^12.23.12", "preact": "^10.25.3", "preact-iso": "2.9.1", "react": "npm:@preact/compat", "react-dom": "npm:@preact/compat", "tailwind-merge": "3.3.0", - "tailwindcss": "4.1.5", + "tailwindcss": "^4.1.18", "valibot": "1.1.0" }, "devDependencies": { @@ -1110,6 +1110,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -1129,9 +1139,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -1199,62 +1209,346 @@ } }, "node_modules/@keetanetwork/web-ui": { - "version": "1.3.18", - "resolved": "https://npm.pkg.github.com/download/@keetanetwork/web-ui/1.3.18/939a5cfae72aaf617c31aa8228d59b6ad177b6ca", - "integrity": "sha512-RaJ0xDCyAbNFTcdX5LQ41lJIRwTTr+SXg0GWh++bguIL9Vg58x9S5V1SyKSl/S0EG9j2LuNxRTK/HRkZOuQopA==", + "version": "1.7.2", + "resolved": "https://npm.pkg.github.com/download/@keetanetwork/web-ui/1.7.2/7bf5203778473ee7babc73a2f7911ab412244680", + "integrity": "sha512-MEV85/8a6+l/DdSLJbzDWK7odAUj252aoPJ890wA4zU5Nz3uFE1wLuiU6BkzGHcQpUbFCEn80CyHqKgd3NaiuQ==", "dependencies": { "@modular-forms/preact": "0.12.1", - "@tailwindcss/node": "4.0.4", - "@tailwindcss/oxide": "4.0.4", - "@tailwindcss/postcss": "4.0.4", - "@tailwindcss/vite": "4.0.4", - "motion": "12.23.12", - "tailwind-merge": "3.3.1", - "vite-tsconfig-paths": "5.1.4" + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "@tailwindcss/postcss": "4.1.18", + "@tailwindcss/vite": "4.1.18", + "tailwind-merge": "3.4.0", + "vite-plugin-svgr": "4.5.0", + "vite-tsconfig-paths": "6.1.0" + }, + "engines": { + "node": "22.18.0" }, "peerDependencies": { - "@keetanetwork/anchor": ">= 0.0.3", + "@keetanetwork/anchor": "*", "@preact/signals": ">= 1.3.2", + "@preact/signals-react": ">= 2.0.0", + "motion": ">= 12.23.12", "preact": ">= 10.26.5", - "tailwindcss": ">= 4.1.5" + "react": ">= 18.0.0", + "react-dom": ">= 18.0.0", + "tailwindcss": ">= 4.1.18" } }, - "node_modules/@keetanetwork/web-ui/node_modules/motion": { - "version": "12.23.12", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.12.tgz", - "integrity": "sha512-8jCD8uW5GD1csOoqh1WhH1A6j5APHVE15nuBkFeRiMzYBdRwyAHmSP/oXSuW0WJPZRXTFdBoG4hY9TFWNhhwng==", + "node_modules/@keetanetwork/web-ui/node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "license": "MIT", "dependencies": { - "framer-motion": "^12.23.12", - "tslib": "^2.4.0" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { + "rollup": { "optional": true } } }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/node": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/postcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.18.tgz", + "integrity": "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "postcss": "^8.4.41", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/@tailwindcss/vite": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.18.tgz", + "integrity": "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "tailwindcss": "4.1.18" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@keetanetwork/web-ui/node_modules/tailwind-merge": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", - "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" } }, + "node_modules/@keetanetwork/web-ui/node_modules/vite-plugin-svgr": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.5.0.tgz", + "integrity": "sha512-W+uoSpmVkSmNOGPSsDCWVW/DDAyv+9fap9AZXBvWiQqrboJ08j2vh0tFxTD/LjwqwAd3yYSVJgm54S/1GhbdnA==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.2.0", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": ">=2.6.0" + } + }, + "node_modules/@keetanetwork/web-ui/node_modules/vite-tsconfig-paths": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.1.0.tgz", + "integrity": "sha512-kpd3sY9glHIDaq4V/Tlc1Y8WaKtutoc3B525GHxEVKWX42FKfQsXvjFOemu1I8VIN8pNbrMLWVTbW79JaRUxKg==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" + }, + "peerDependencies": { + "vite": "*" + } + }, "node_modules/@mdn/browser-compat-data": { "version": "5.7.6", "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.7.6.tgz", @@ -1934,7 +2228,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -1951,7 +2244,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -1968,7 +2260,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -1985,7 +2276,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -2002,7 +2292,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -2019,7 +2308,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -2036,7 +2324,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -2053,7 +2340,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2070,7 +2356,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "dev": true, "license": "MIT", "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", @@ -2097,7 +2382,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", @@ -2118,7 +2402,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.21.3", @@ -2136,7 +2419,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", @@ -2159,6 +2441,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.4.tgz", "integrity": "sha512-VLFq80IyoV1hsHPcCm1mmlyPyUT6NlovQLoO2y7PGm84mW94ZrNJ7ax5H6K4M7Aj/fdMfem5IX7Ka+LXWZpDGg==", + "dev": true, "license": "MIT", "dependencies": { "enhanced-resolve": "^5.18.0", @@ -2170,12 +2453,14 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.4.tgz", "integrity": "sha512-/ezDLEkOLf1lXkr9F2iI5BHJbexJpty5zkV2B8bGHCqAdbc9vk85Jgdkq+ZOvNkNPa3yAaqJ8DjRt584Bc84kw==", + "dev": true, "license": "MIT" }, "node_modules/@tailwindcss/oxide": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.4.tgz", "integrity": "sha512-vPpu30KFLiGyPOoElkYt8WRvzGKVrrOz49KpfiGGtnQGmyUpL8VCbJzzEEcpKT5BpaaQidhFok+OXscf6hHjOQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10" @@ -2201,6 +2486,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2217,6 +2503,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2233,6 +2520,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2249,6 +2537,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2265,6 +2554,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2281,6 +2571,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2297,6 +2588,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2313,6 +2605,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2329,6 +2622,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2338,6 +2632,35 @@ "node": ">= 10" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.4.tgz", @@ -2345,6 +2668,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2361,6 +2685,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2374,6 +2699,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.4.tgz", "integrity": "sha512-Up8fB+DUhy8qvDqlHgZAWaL5iVEbypcuOjzlW4K6EyU+aGEvXK0/wrcKBKOTvg3KKP5givJMexJ0aG1hDPOuRg==", + "dev": true, "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -2388,12 +2714,14 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.4.tgz", "integrity": "sha512-/ezDLEkOLf1lXkr9F2iI5BHJbexJpty5zkV2B8bGHCqAdbc9vk85Jgdkq+ZOvNkNPa3yAaqJ8DjRt584Bc84kw==", + "dev": true, "license": "MIT" }, "node_modules/@tailwindcss/vite": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.4.tgz", "integrity": "sha512-zrWGbluPeXeoetUQoDFmt1dQIeiOBThfznla7zPIqST69rMmiDD4SZwJrHVoL5CvXz06AYQXz/M/jELSakL7Rg==", + "dev": true, "license": "MIT", "dependencies": { "@tailwindcss/node": "^4.0.4", @@ -2409,6 +2737,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.4.tgz", "integrity": "sha512-/ezDLEkOLf1lXkr9F2iI5BHJbexJpty5zkV2B8bGHCqAdbc9vk85Jgdkq+ZOvNkNPa3yAaqJ8DjRt584Bc84kw==", + "dev": true, "license": "MIT" }, "node_modules/@tanstack/query-core": { @@ -2890,7 +3219,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { @@ -3315,7 +3643,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3325,7 +3652,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -3540,7 +3866,6 @@ "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, "license": "MIT", "dependencies": { "import-fresh": "^3.3.0", @@ -3833,7 +4158,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, "license": "MIT", "dependencies": { "no-case": "^3.0.4", @@ -3947,13 +4271,13 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "version": "5.21.6", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.6.tgz", + "integrity": "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" @@ -3963,7 +4287,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -3976,7 +4299,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -4515,7 +4837,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, "license": "MIT" }, "node_modules/esutils": { @@ -5351,7 +5672,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -5471,7 +5791,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, "license": "MIT" }, "node_modules/is-async-function": { @@ -5942,9 +6261,9 @@ } }, "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -5960,7 +6279,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -6002,7 +6320,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -6102,9 +6419,9 @@ } }, "node_modules/lightningcss": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", - "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" @@ -6117,22 +6434,43 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-darwin-arm64": "1.30.1", - "lightningcss-darwin-x64": "1.30.1", - "lightningcss-freebsd-x64": "1.30.1", - "lightningcss-linux-arm-gnueabihf": "1.30.1", - "lightningcss-linux-arm64-gnu": "1.30.1", - "lightningcss-linux-arm64-musl": "1.30.1", - "lightningcss-linux-x64-gnu": "1.30.1", - "lightningcss-linux-x64-musl": "1.30.1", - "lightningcss-win32-arm64-msvc": "1.30.1", - "lightningcss-win32-x64-msvc": "1.30.1" + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", - "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", "cpu": [ "arm64" ], @@ -6150,9 +6488,9 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", - "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", "cpu": [ "x64" ], @@ -6170,9 +6508,9 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", - "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", "cpu": [ "x64" ], @@ -6190,9 +6528,9 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", - "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", "cpu": [ "arm" ], @@ -6210,9 +6548,9 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", - "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", "cpu": [ "arm64" ], @@ -6230,9 +6568,9 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", - "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", "cpu": [ "arm64" ], @@ -6250,9 +6588,9 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", - "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", "cpu": [ "x64" ], @@ -6270,9 +6608,9 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", - "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", "cpu": [ "x64" ], @@ -6290,9 +6628,9 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", - "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", "cpu": [ "arm64" ], @@ -6310,9 +6648,9 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", - "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", "cpu": [ "x64" ], @@ -6342,7 +6680,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, "license": "MIT" }, "node_modules/locate-path": { @@ -6428,7 +6765,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.3" @@ -6444,13 +6780,12 @@ } }, "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/math-intrinsics": { @@ -6544,12 +6879,12 @@ } }, "node_modules/motion": { - "version": "12.12.1", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.12.1.tgz", - "integrity": "sha512-vN/3p++Ix0lVt9NH0ZqPrAy8QRTkff27t5z3z5+4BJ3cXPxtOia2EBZS4snM+JUTfl7J0JXP/5ERqu9GT/8IgA==", + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.12.tgz", + "integrity": "sha512-8jCD8uW5GD1csOoqh1WhH1A6j5APHVE15nuBkFeRiMzYBdRwyAHmSP/oXSuW0WJPZRXTFdBoG4hY9TFWNhhwng==", "license": "MIT", "dependencies": { - "framer-motion": "^12.12.1", + "framer-motion": "^12.23.12", "tslib": "^2.4.0" }, "peerDependencies": { @@ -6625,7 +6960,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, "license": "MIT", "dependencies": { "lower-case": "^2.0.2", @@ -6974,7 +7308,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -6987,7 +7320,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -7043,7 +7375,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7466,7 +7797,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -7889,7 +8219,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, "license": "MIT", "dependencies": { "dot-case": "^3.0.4", @@ -8124,7 +8453,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "dev": true, "license": "MIT" }, "node_modules/tailwind-merge": { @@ -8138,18 +8466,22 @@ } }, "node_modules/tailwindcss": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.5.tgz", - "integrity": "sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==", + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", "license": "MIT" }, "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/teeny-request": { @@ -8717,6 +9049,7 @@ "version": "5.1.4", "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz", "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1", diff --git a/apps/web/package.json b/apps/web/package.json index 36275b4..5592501 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -10,19 +10,19 @@ }, "dependencies": { "@keetanetwork/anchor": "0.0.67", - "@keetanetwork/web-ui": "1.3.18", + "@keetanetwork/web-ui": "^1.7.2", "@modular-forms/preact": "0.12.1", "@preact-signals/query": "2.1.1", "@preact/signals": "1.3.2", "dayjs": "1.11.13", "lightweight-charts": "5.0.7", - "motion": "12.12.1", + "motion": "^12.23.12", "preact": "^10.25.3", "preact-iso": "2.9.1", "react": "npm:@preact/compat", "react-dom": "npm:@preact/compat", "tailwind-merge": "3.3.0", - "tailwindcss": "4.1.5", + "tailwindcss": "^4.1.18", "valibot": "1.1.0" }, "devDependencies": { diff --git a/apps/web/src/app/account/[accountPublicKey]/page.tsx b/apps/web/src/app/account/[accountPublicKey]/page.tsx index 4fdd4d1..6961871 100644 --- a/apps/web/src/app/account/[accountPublicKey]/page.tsx +++ b/apps/web/src/app/account/[accountPublicKey]/page.tsx @@ -103,7 +103,9 @@ export default function AccountPage({ params: { accountPublicKey }}: { params: { { label: "Delegated to", type: "account", value: account.representative }, { label: "Name", value: account.info.name }, { label: "Description", value: account.info.description }, - { label: "Quorum", value: account.info.multisigQuorum }, + ...('multisigQuorum' in account.info ? [ + { label: "Quorum", value: account.info.multisigQuorum } + ] : []) ]} /> diff --git a/apps/web/src/app/storage/[accountPublicKey]/page.tsx b/apps/web/src/app/storage/[accountPublicKey]/page.tsx index 7088403..eb0d9d0 100644 --- a/apps/web/src/app/storage/[accountPublicKey]/page.tsx +++ b/apps/web/src/app/storage/[accountPublicKey]/page.tsx @@ -102,7 +102,9 @@ export default function AccountPage({ params: { accountPublicKey } }: { params: { label: "Delegated to", type: "account", value: account.representative }, { label: "Name", value: account.info.name }, { label: "Description", value: account.info.description }, - { label: "Quorum", value: account.info.multisigQuorum }, + ...('multisigQuorum' in account.info ? [ + { label: "Quorum", value: account.info.multisigQuorum } + ] : []), { label: "Owner", type: "account", value: account.owner }, ]} /> diff --git a/apps/web/src/components/OperationType.tsx b/apps/web/src/components/OperationType.tsx deleted file mode 100644 index 8d64e3d..0000000 --- a/apps/web/src/components/OperationType.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import type { ReactNode } from 'react'; -import { Fragment } from 'react'; - - -import { TableRowItem } from './Table'; -import { TextAccountLink } from './TextAccountLink'; -import { TextRepLink } from './TextRepLink'; -import { TextTokenLink } from './TextTokenLink'; -import TokenAmount from './TokenAmount'; -import { Typography } from '@keetanetwork/web-ui'; -import { TextCertificateLink } from './TextCertificateLink'; -import { ExplorerClientSDK } from '@/libs/explorer-sdk'; - -type ListTransactionResponse = Awaited> - -type AccountTransaction = ListTransactionResponse['transactions'][number]; - -export function OperationType({ transaction }: { transaction: AccountTransaction }): ReactNode { - switch (transaction.operationType) { - case 'SEND': { - return( - {transaction.operationType} - - - - ); - } - - case 'RECEIVE': { - return( - {transaction.operationType} - - - - ); - } - - case 'TOKEN_ADMIN_SUPPLY': - case 'TOKEN_ADMIN_MODIFY_BALANCE': { - return( - - {transaction.operationType} - - - - - - ); - } - - case 'SET_INFO': { - return( - {transaction.operationType} - - - - ); - } - - case 'SET_REP': { - return( - {transaction.operationType} - - - - ); - } - - case 'MODIFY_PERMISSIONS': - case 'CREATE_IDENTIFIER': { - return( - - {transaction.operationType} - - ); - } - - case 'MANAGE_CERTIFICATE': { - return( - - {transaction.operationType} - - - {transaction.method} - - - ); - } - - default: { - console.warn('Unknown transaction type:', transaction); - return; - } - } -} diff --git a/apps/web/src/components/TextCertificateLink.tsx b/apps/web/src/components/TextCertificateLink.tsx index e43f5c0..19c920f 100644 --- a/apps/web/src/components/TextCertificateLink.tsx +++ b/apps/web/src/components/TextCertificateLink.tsx @@ -1,12 +1,26 @@ +import { NormalizedOperationMANAGE_CERTIFICATE } from '@keetanetwork/web-ui/helpers/keetanet-operations'; import { TextLink } from './TextLink'; +import { KeetaNet } from '@keetanetwork/anchor'; +import type { ToJSONSerializable } from "@keetanetwork/anchor/lib/utils/json"; type TextCertificateLinkProps = { - hash: string + hash: string | NormalizedOperationMANAGE_CERTIFICATE['operation']['certificateOrHash'] | ToJSONSerializable; account: string className?: string truncateChars?: number | null }; export function TextCertificateLink({ hash, account, truncateChars = 4, ...props }: TextCertificateLinkProps) { - return(); + let normalizedHash; + if (typeof hash === 'string') { + normalizedHash = hash; + } else if (KeetaNet.lib.Utils.Certificate.CertificateHash.isInstance(hash)) { + normalizedHash = hash.toString(); + } else if (KeetaNet.lib.Utils.Certificate.Certificate.isCertificate(hash)) { + normalizedHash = hash.hash.toString(); + } else { + throw(new Error('Invalid certificate hash')); + } + + return(); } diff --git a/apps/web/src/components/Transactions/TokenTransactionTable.tsx b/apps/web/src/components/Transactions/TokenTransactionTable.tsx index a02ebf9..94bd92e 100644 --- a/apps/web/src/components/Transactions/TokenTransactionTable.tsx +++ b/apps/web/src/components/Transactions/TokenTransactionTable.tsx @@ -53,7 +53,7 @@ function renderRowRECEIVE(row: Operation & { type: "RECEIVE" }) { ) } -function renderRowSWAP(row: Operation & { type: "SWAP" }) { +function renderRowSWAP(_ignore_row: Operation & { type: "SWAP" }) { return ( <> @@ -63,7 +63,7 @@ function renderRowSWAP(row: Operation & { type: "SWAP" }) { ) } -function renderRowSWAP_FORWARD(row: Operation & { type: "SWAP_FORWARD" }) { +function renderRowSWAP_FORWARD(_ignore_row: Operation & { type: "SWAP_FORWARD" }) { return ( <> @@ -104,7 +104,7 @@ function renderRowTOKEN_ADMIN_MODIFY_BALANCE(row: Operation & { type: "TOKEN_ADM ) } -function renderRowCREATE_IDENTIFIER(row: Operation & { type: "CREATE_IDENTIFIER" }) { +function renderRowCREATE_IDENTIFIER(_ignore_row: Operation & { type: "CREATE_IDENTIFIER" }) { return ( <> @@ -114,7 +114,7 @@ function renderRowCREATE_IDENTIFIER(row: Operation & { type: "CREATE_IDENTIFIER" ) } -function renderRowSET_INFO(row: Operation & { type: "SET_INFO" }) { +function renderRowSET_INFO(_ignore_row: Operation & { type: "SET_INFO" }) { return ( <> @@ -124,7 +124,7 @@ function renderRowSET_INFO(row: Operation & { type: "SET_INFO" }) { ) } -function renderRowSET_REP(row: Operation & { type: "SET_REP" }) { +function renderRowSET_REP(_ignore_row: Operation & { type: "SET_REP" }) { return ( <> @@ -150,7 +150,13 @@ function renderRowMANAGE_CERTIFICATE(row: Operation & { type: "MANAGE_CERTIFICAT function renderRowMODIFY_PERMISSIONS(row: Operation & { type: "MODIFY_PERMISSIONS" }) { return ( <> - + { + typeof row.operation.principal === 'string' ? ( + + ) : ( + + ) + } {getAdjustMethodName(row.operation.method)} @@ -158,7 +164,7 @@ function renderRowMODIFY_PERMISSIONS(row: Operation & { type: "MODIFY_PERMISSION ) } -function renderRowUNKNOWN(row: Operation) { +function renderRowUNKNOWN(_ignore_row: Operation) { return ( <> diff --git a/apps/web/src/components/Transactions/TransactionsTable.tsx b/apps/web/src/components/Transactions/TransactionsTable.tsx index 102b979..7055b7b 100644 --- a/apps/web/src/components/Transactions/TransactionsTable.tsx +++ b/apps/web/src/components/Transactions/TransactionsTable.tsx @@ -241,7 +241,13 @@ function renderRowMODIFY_PERMISSIONS(row: Operation & { type: "MODIFY_PERMISSION return ( <> - + { + typeof row.operation.principal === 'string' ? ( + + ) : ( + + ) + } {getAdjustMethodName(row.operation.method)} @@ -249,7 +255,7 @@ function renderRowMODIFY_PERMISSIONS(row: Operation & { type: "MODIFY_PERMISSION ) } -function renderRowUNKNOWN(row: Operation) { +function renderRowUNKNOWN(_ignore_row: Operation) { return ( <> diff --git a/apps/web/src/hooks/useTransactions.ts b/apps/web/src/hooks/useTransactions.ts index 07ab495..d3781fb 100644 --- a/apps/web/src/hooks/useTransactions.ts +++ b/apps/web/src/hooks/useTransactions.ts @@ -3,7 +3,7 @@ import { useToast } from "@keetanetwork/web-ui"; import type { NormalizedOperation } from "@keetanetwork/web-ui/helpers/keetanet-operations"; import { useInfiniteQuery$, useQueryClient$ } from "@preact-signals/query"; import { useEffect, useRef, useState } from "preact/hooks"; -import type * as Anchor from "@keetanetwork/anchor"; +import type { ToJSONSerializable } from "@keetanetwork/anchor/lib/utils/json"; function scrollToAnchor() { const target = document.getElementById('results-container'); @@ -15,7 +15,7 @@ function scrollToAnchor() { }); } -export type Operation = ReturnType> +export type Operation = ToJSONSerializable; interface UseTransactionsProps { publicKey?: string diff --git a/apps/web/src/libs/explorer-sdk.ts b/apps/web/src/libs/explorer-sdk.ts index e4ea31a..136eb5c 100644 --- a/apps/web/src/libs/explorer-sdk.ts +++ b/apps/web/src/libs/explorer-sdk.ts @@ -1,11 +1,16 @@ import * as v from "valibot"; import * as Anchor from "@keetanetwork/anchor"; +import type { KeetaNet } from "@keetanetwork/anchor"; import { ClientNotFoundError, ExplorerSDK, type ExplorerSDKConfig, type NetworkConfig } from '@keetanetwork/explorer-client'; -import type { GenericAccount, NormalizedOperation, NormalizedOperationMANAGE_CERTIFICATE } from '@keetanetwork/web-ui/helpers/keetanet-operations'; +import type { NormalizedOperation, NormalizedOperationMANAGE_CERTIFICATE } from '@keetanetwork/web-ui/helpers/keetanet-operations'; +import type { GenericAccount } from "@keetanetwork/keetanet-client/lib/account"; import { getCertificateHash, normalizeOperations } from '@keetanetwork/web-ui/helpers/keetanet-operations'; // eslint-disable-line no-duplicate-imports import { TokenBatcher } from "./token-batcher"; import { Numeric } from "@keetanetwork/web-ui/helpers/Numeric"; import { networkConfig } from "./networkConfig"; +import type { Networks as NetworkAlias } from "@keetanetwork/keetanet-client/config"; +import type { ToJSONSerializable } from "@keetanetwork/anchor/lib/utils/json"; +import type { BlockHash } from "@keetanetwork/keetanet-client/lib/block"; const KeetaNetLib = Anchor.KeetaNet; @@ -22,20 +27,20 @@ type TransactionQuery = v.InferInput; /** * Helpers */ -function normalizedOperationToJSONSerializable(op: NormalizedOperation) { - const { block: { operations, ...block}, ...serialized } = KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(op); +function normalizedOperationToJSONSerializable(op: NormalizedOperation): ToJSONSerializable { + const serialized = KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(op); if (serialized.type === "MANAGE_CERTIFICATE") { const manageOperation = op as NormalizedOperationMANAGE_CERTIFICATE; return { ...serialized, - block, operation: { + type: manageOperation.operation.type, method: manageOperation.operation.method, certificateOrHash: getCertificateHash(manageOperation.operation) } } } - return { ...serialized, block }; + return(serialized) } function certificateToAPIResponse(certificate: Anchor.lib.Certificates.Certificate | typeof KeetaNetLib.lib.Utils.Certificate.Certificate.prototype) { @@ -78,6 +83,8 @@ function certificateToAPIResponse(certificate: Anchor.lib.Certificates.Certifica }) as const; } +type NormalizedAccountInfo = ToJSONSerializable>['info']>; + /** * Keeta Explorer SDK Client for the web application. */ @@ -179,19 +186,36 @@ export class ExplorerClientSDK { let owner = null if (accountInfo.isMultisig()) { const acls = await this.client.listACLsByEntity(accountPublicKey) - signers = acls.filter(a => a.permissions.has(['MULTISIG_SIGNER'])).map(a => a.principal.publicKeyString.get()) + signers = []; + for (const a of acls) { + if (a.principalType !== 'ACCOUNT') { + continue; + } + signers.push(a.principal.publicKeyString.get()); + } } else if (accountInfo.isStorage()) { const acls = await this.client.listACLsByEntity(accountPublicKey) - owner = acls.find(a => a.permissions.has(['OWNER']))?.principal.publicKeyString.get() ?? null + + for (const a of acls) { + if (a.principalType !== 'ACCOUNT') { + continue; + } + if (a.permissions.has(['OWNER'])) { + owner = a.principal.publicKeyString.get(); + break; + } + } } + const serializedInfo: NormalizedAccountInfo = KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(info); + const account = { type: (accountInfo.isMultisig() ? 'MULTISIG' : accountInfo.isStorage() ? 'STORAGE' : accountInfo.isToken() ? 'TOKEN' : accountInfo.isAccount() ? 'ACCOUNT' : 'UNKNOWN') as 'MULTISIG' | 'STORAGE' | 'TOKEN' | 'ACCOUNT' | 'UNKNOWN', signers, owner, publicKey: accountPublicKey, headBlock: currentHeadBlock, - info: KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(info), + info: serializedInfo, representative: representative ? KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(representative) : null, tokens: await Promise.all(balances.map(async ({ token, balance }) => { return { @@ -293,23 +317,23 @@ export class ExplorerClientSDK { throw new ClientNotFoundError('Block not found in vote staple'); } - const previousBlockHash = currentBlock.$opening === true ? undefined : currentBlock.previous; + const previousBlockHash: BlockHash | undefined = currentBlock.$opening === true ? undefined : currentBlock.previous; const nextBlockHash = (await this.client.getSuccessorBlock(blockhash))?.hash.toString(); const blocksHash = voteStaple.blocksHash; return ({ voteStaple: { - votes: KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(voteStaple.votes), + votes: KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(voteStaple.votes) as any, blocks: voteStaple.blocks.map(b => { const normalizedOperations = normalizeOperations([{ votes: [], blocks: [b], blocksHash } as any], null) const normalizedBlock = KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(b); return({ ...normalizedBlock, operations: normalizedOperations.map(normalizedOperationToJSONSerializable) - }); + } as any); }), - originalContent: JSON.stringify(KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(voteStaple), null, "\t") + originalContent: JSON.stringify(KeetaNetLib.lib.Utils.Conversion.toJSONSerializable(voteStaple), null, "\t") }, previousBlockHash, nextBlockHash @@ -319,7 +343,7 @@ export class ExplorerClientSDK { list: async () => { const envNetworks = ((import.meta.env.VITE_APP_AVAILABLE_NETWORKS as string) ?? "").split(",").map(n => n.trim()).filter(n => n.length > 0); const networks = envNetworks.map(networkAlias => ({ networkAlias })); - return({ networks }) + return({ networks } as { networks: { networkAlias: NetworkAlias }[] }) }, } } diff --git a/apps/web/src/libs/token-batcher.ts b/apps/web/src/libs/token-batcher.ts index dbc1958..8fd9acd 100644 --- a/apps/web/src/libs/token-batcher.ts +++ b/apps/web/src/libs/token-batcher.ts @@ -1,6 +1,6 @@ import type * as Anchor from "@keetanetwork/anchor"; -import type { GenericAccount } from "@keetanetwork/web-ui/helpers/keetanet-operations"; import { Numeric } from "@keetanetwork/web-ui/helpers/Numeric"; +import type { GenericAccount } from "@keetanetwork/keetanet-client/lib/account"; /** * Types @@ -61,6 +61,10 @@ function parseTokenMetadata(metadata: string | undefined): { decimalPlaces: numb export function parseTokenDetails(token: AccountInfo, baseToken: GenericAccount): TokenDetails { const metadata = parseTokenMetadata(token.info.metadata); + if (!('supply' in token.info) || !('defaultPermission' in token.info)) { + throw new Error('Invalid token account info: missing supply or defaultPermission'); + } + return({ headBlock: token.currentHeadBlock, currencyCode: token.info.name, From 38ac1eb72484de9a9d4c231547f863596542df3f Mon Sep 17 00:00:00 2001 From: Roy Keene Date: Thu, 21 May 2026 15:05:52 -0500 Subject: [PATCH 4/4] Explorer v0.1.3 --- npm-shrinkwrap.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index d16338e..c178612 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "explorer", - "version": "0.1.2", + "version": "0.1.3", "lockfileVersion": 3, "requires": true, "packages": { @@ -16,7 +16,7 @@ "node": ">=20.18.0", "npm": ">=9.8.1" }, - "version": "0.1.2" + "version": "0.1.3" }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.4", diff --git a/package.json b/package.json index dfe08a9..96ad99a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "explorer", - "version": "0.1.2", + "version": "0.1.3", "description": "", "author": "Keeta Token Genesis LLC", "private": true,