diff --git a/.jest/__fixtures__/prices.ts b/.jest/__fixtures__/prices.ts deleted file mode 100644 index dd5bc5967..000000000 --- a/.jest/__fixtures__/prices.ts +++ /dev/null @@ -1,64 +0,0 @@ -export default { - prices: { - h2o: { - btc: 0.00009013, - cad: 2.38, - cny: 12.36, - eth: 0.00132713, - eur: 1.78, - gbp: 1.55, - hkd: 13.53, - inr: 141.78, - jpy: 253.21, - link: 0.24050954, - rub: 109.81, - sgd: 2.47, - usd: 1.72 - }, - 'matic-network': { - btc: 0.0000414, - cad: 1.093, - cny: 5.67, - eth: 0.00061102, - eur: 0.816959, - gbp: 0.715112, - hkd: 6.21, - inr: 65.06, - jpy: 116.23, - link: 0.11072143, - rub: 50.4, - sgd: 1.14, - usd: 0.790922 - }, - ethereum: { - btc: 0.06775775, - cad: 1789.03, - cny: 9288.09, - eth: 1, - eur: 1337.1, - gbp: 1170.41, - hkd: 10161.71, - inr: 106490, - jpy: 190239, - link: 181.216, - rub: 82491, - sgd: 1859.58, - usd: 1294.49 - }, - 'ocean-protocol': { - btc: 0.00000809, - cad: 0.213554, - cny: 1.11, - eth: 0.00011937, - eur: 0.159608, - gbp: 0.13971, - hkd: 1.21, - inr: 12.71, - jpy: 22.71, - link: 0.02163146, - rub: 9.85, - sgd: 0.221976, - usd: 0.154521 - } - } -} diff --git a/.jest/__fixtures__/table.ts b/.jest/__fixtures__/table.ts deleted file mode 100644 index 203e17373..000000000 --- a/.jest/__fixtures__/table.ts +++ /dev/null @@ -1,41 +0,0 @@ -export const columns = [ - { - name: 'Name', - selector: (row: any) => row.name, - maxWidth: '45rem', - grow: 1 - }, - { - name: 'Symbol', - selector: (row: any) => row.symbol, - maxWidth: '10rem' - }, - { - name: 'Price', - selector: (row: any) => row.price, - right: true - } -] - -export const data = [ - { - name: 'Title asset', - symbol: 'DATA-70', - price: '1.011' - }, - { - name: 'Title asset Title asset Title asset Title asset Title asset', - symbol: 'DATA-71', - price: '1.011' - }, - { - name: 'Title asset', - symbol: 'DATA-72', - price: '1.011' - }, - { - name: 'Title asset Title asset Title asset Title asset Title asset Title asset Title asset Title asset Title asset Title asset', - symbol: 'DATA-71', - price: '1.011' - } -] diff --git a/.jest/__fixtures__/web3.ts b/.jest/__fixtures__/web3.ts deleted file mode 100644 index bd6fc8d9c..000000000 --- a/.jest/__fixtures__/web3.ts +++ /dev/null @@ -1,33 +0,0 @@ -export default { - accountEns: 'jellymcjellyfish.eth', - accountEnsAvatar: - 'https://metadata.ens.domains/mainnet/avatar/jellymcjellyfish.eth', - accountId: '0x99840Df5Cb42faBE0Feb8811Aaa4BC99cA6C84e0', - approvedBaseTokens: [ - { - address: '0xcfdda22c9837ae76e0faa845354f33c62e03653a', - symbol: 'OCEAN', - name: 'Ocean Token', - decimals: 18 - } - ], - balance: { eth: '0', ocean: '1000' }, - block: 7751969, - chainId: 5, - connect: jest.fn(), - isSupportedOceanNetwork: true, - isTestnet: true, - logout: jest.fn(), - networkData: { name: 'Görli', title: 'Ethereum Testnet Görli', chain: 'ETH' }, - networkDisplayName: 'ETH Görli', - networkId: 5, - web3: { currentProvider: {} }, - web3Loading: false, - web3Modal: { show: false, eventController: {}, connect: jest.fn() }, - web3Provider: {}, - web3ProviderInfo: { - id: 'injected', - name: 'MetaMask', - logo: '' - } -} diff --git a/content/pages/editService.json b/content/pages/editService.json index fa1d76c62..427ea0cd9 100644 --- a/content/pages/editService.json +++ b/content/pages/editService.json @@ -47,7 +47,7 @@ "label": "New Price", "type": "number", "min": "1", - "step": "0.01", + "step": "0.000001", "placeholder": "1", "help": "Enter a new price (minimum 1, maximum 1,000,000).", "required": true @@ -57,7 +57,7 @@ "label": "Price", "type": "number", "min": "0", - "step": "0.01", + "step": "0.000001", "placeholder": "0", "help": "Enter a price (minimum 0, maximum 1,000,000).", "required": true diff --git a/next.config.js b/next.config.js index c8fd603de..a2763d3c7 100644 --- a/next.config.js +++ b/next.config.js @@ -8,9 +8,9 @@ const nextConfig = () => { */ const config = { output: 'standalone', + serverExternalPackages: ['wagmi', 'viem', 'connectkit'], experimental: { - esmExternals: 'loose', - serverComponentsExternalPackages: ['wagmi', 'viem', 'connectkit'] + esmExternals: 'loose' }, webpack: (config, options) => { const { isServer } = options @@ -94,7 +94,7 @@ const nextConfig = () => { } } - return withTM(['@oceanprotocol/lib'])(config) + return withTM(['@oceanprotocol/lib', '@oceanprotocol/ddo-js'])(config) } export default nextConfig diff --git a/package-lock.json b/package-lock.json index 40c2f933c..03f25494c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,12 +18,10 @@ "@oceanprotocol/ddo-js": "^0.1.4", "@oceanprotocol/lib": "^5.1.2", "@oceanprotocol/typographies": "^0.1.0", - "@oceanprotocol/use-dark-mode": "^2.4.3", "@tanstack/react-query": "^5.90.11", "@tippyjs/react": "^4.2.6", "@uiw/codemirror-themes": "^4.21.12", "@uiw/react-codemirror": "^4.19.5", - "@urql/core": "3.2.2", "@urql/exchange-refocus": "1.0.0", "axios": "^1.2.0", "base64url": "^3.0.1", @@ -45,7 +43,6 @@ "myetherwallet-blockies": "^0.1.1", "next": "^15.5.11", "normalize-url": "^8.1.0", - "ohash": "^2.0.11", "query-string": "^8.1.0", "react": "^18.2.0", "react-data-table-component": "^7.5.3", @@ -68,7 +65,6 @@ "remove-markdown": "^0.5.0", "slugify": "^1.6.6", "styled-components": "^6.2.0", - "url-loader": "^4.1.1", "urql": "^3.0.3", "use-debounce": "^9.0.4", "wagmi": "^2.19.5", @@ -81,7 +77,7 @@ "@types/jest": "^29.5.3", "@types/js-cookie": "^3.0.3", "@types/loadable__component": "^5.13.4", - "@types/node": "^18.14.2", + "@types/node": "^18.19.130", "@types/react": "^18.0.25", "@types/react-dom": "^18.2.1", "@types/react-modal": "^3.16.2", @@ -102,19 +98,32 @@ "husky": "^8.0.3", "jest": "^29.6.2", "jest-environment-jsdom": "^29.3.1", + "knip": "^5.82.1", "next-transpile-modules": "^10.0.1", - "prettier": "^2.8.4", - "pretty-quick": "^3.1.3", - "process": "^0.11.10", + "prettier": "^2.8.8", + "pretty-quick": "^3.3.1", "serve": "^14.1.2", "stream-http": "^3.2.0", - "tsconfig-paths-webpack-plugin": "^4.1.0", - "typescript": "^5.2.2" + "typescript": "^5.9.3" }, "engines": { "node": "22" } }, + "node_modules/@0no-co/graphql.web": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.2.0.tgz", + "integrity": "sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==", + "license": "MIT", + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "graphql": { + "optional": true + } + } + }, "node_modules/@adobe/css-tools": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", @@ -129,9 +138,9 @@ "license": "MIT" }, "node_modules/@babel/code-frame": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", @@ -143,29 +152,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", - "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", - "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.28.6", + "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -182,13 +191,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", - "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.0.tgz", + "integrity": "sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -463,12 +472,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.6" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -847,15 +856,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz", - "integrity": "sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1037,9 +1046,9 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz", - "integrity": "sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "dev": true, "license": "MIT", "dependencies": { @@ -1252,16 +1261,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", - "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.5" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1288,14 +1297,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1575,9 +1584,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz", - "integrity": "sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "dev": true, "license": "MIT", "dependencies": { @@ -1792,13 +1801,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.6.tgz", - "integrity": "sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", + "@babel/compat-data": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", @@ -1812,7 +1821,7 @@ "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.6", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.6", @@ -1823,7 +1832,7 @@ "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.6", "@babel/plugin-transform-exponentiation-operator": "^7.28.6", @@ -1836,9 +1845,9 @@ "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", - "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-numeric-separator": "^7.28.6", @@ -1850,7 +1859,7 @@ "@babel/plugin-transform-private-methods": "^7.28.6", "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.6", + "@babel/plugin-transform-regenerator": "^7.29.0", "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1863,10 +1872,10 @@ "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1956,17 +1965,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", + "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -1975,18 +1984,18 @@ }, "node_modules/@babel/traverse--for-generate-function-map": { "name": "@babel/traverse", - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", + "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -1994,9 +2003,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -2244,9 +2253,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.39.11", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.11.tgz", - "integrity": "sha512-bWdeR8gWM87l4DB/kYSF9A+dVackzDb/V56Tq7QVrQ7rn86W0rgZFtlL3g3pem6AeGcb9NQNoy3ao4WpW4h5tQ==", + "version": "6.39.12", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.12.tgz", + "integrity": "sha512-f+/VsHVn/kOA9lltk/GFzuYwVVAKmOnNjxbrhkk3tPHntFqjWeI2TbIXx006YkBkqC10wZ4NsnWXCQiFPeAISQ==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.5.0", @@ -2256,9 +2265,9 @@ } }, "node_modules/@coinbase/cdp-sdk": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@coinbase/cdp-sdk/-/cdp-sdk-1.43.1.tgz", - "integrity": "sha512-3eXP24p5q68agRgu8grGlF+ASidf3xYSDQtdRuDOFCMZafbqANsjl/JxLwYDmUenRodhxBBJgYJ65nOALP58tA==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/@coinbase/cdp-sdk/-/cdp-sdk-1.44.0.tgz", + "integrity": "sha512-0I5O1DzbchR91GAYQAU8lxx6q9DBvN0no9IBwrTKLHW8t5bABMg8dzQ/jrGRd6lr/QFJJW4L0ZSLGae5jsxGWw==", "license": "MIT", "dependencies": { "@solana-program/system": "^0.10.0", @@ -2305,6 +2314,15 @@ "url": "https://github.com/sponsors/panva" } }, + "node_modules/@coinbase/cdp-sdk/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@coinbase/wallet-sdk": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-4.3.6.tgz", @@ -2465,6 +2483,18 @@ "@noble/ciphers": "^1.0.0" } }, + "node_modules/@emnapi/core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, "node_modules/@emnapi/runtime": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", @@ -2475,6 +2505,17 @@ "tslib": "^2.4.0" } }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.13.5", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", @@ -5140,6 +5181,23 @@ "uint8arrays": "^5.0.0" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, "node_modules/@next/env": { "version": "15.5.11", "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.11.tgz", @@ -5474,143 +5532,401 @@ "resolved": "https://registry.npmjs.org/@oceanprotocol/typographies/-/typographies-0.1.0.tgz", "integrity": "sha512-kMsZsqvzpz9KzVbVZzllwhPoIC3zbqsdRrClagZL/C2PHzgLrKGC1kYn3gPt0RMIFg9ZjrwieKaxlgIK9i9zzg==" }, - "node_modules/@oceanprotocol/use-dark-mode": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@oceanprotocol/use-dark-mode/-/use-dark-mode-2.4.3.tgz", - "integrity": "sha512-1ew0Xeom75ZFaMDhs6Bz0Vor59Mri++QWFA7vyc/SV4KwXPFV5pIw/G6H2x8hqW1JOUSrGZ3X+yCo5n7gv2gZg==", + "node_modules/@oxc-resolver/binding-android-arm-eabi": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.17.0.tgz", + "integrity": "sha512-kVnY21v0GyZ/+LG6EIO48wK3mE79BUuakHUYLIqobO/Qqq4mJsjuYXMSn3JtLcKZpN1HDVit4UHpGJHef1lrlw==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@use-it/event-listener": "^0.1.7", - "use-persisted-state": "^0.3.3" - }, - "peerDependencies": { - "react": ">=16.8.0" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@oceanprotocol/use-dark-mode/node_modules/use-persisted-state": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/use-persisted-state/-/use-persisted-state-0.3.3.tgz", - "integrity": "sha512-pCNlvYC8+XjRxwnIut4teGC9f2p9aD88R8OGseQGZa2dvqG/h1vEGk1vRE1IZG0Vf161UDpn+NlW4+UGubQflQ==", + "node_modules/@oxc-resolver/binding-android-arm64": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.17.0.tgz", + "integrity": "sha512-Pf8e3XcsK9a8RHInoAtEcrwf2vp7V9bSturyUUYxw9syW6E7cGi7z9+6ADXxm+8KAevVfLA7pfBg8NXTvz/HOw==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@use-it/event-listener": "^0.1.2" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@paulmillr/qr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@paulmillr/qr/-/qr-0.2.1.tgz", - "integrity": "sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==", - "deprecated": "The package is now available as \"qr\": npm install qr", - "license": "(MIT OR Apache-2.0)", - "funding": { - "url": "https://paulmillr.com/funding/" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "node_modules/@oxc-resolver/binding-darwin-arm64": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.17.0.tgz", + "integrity": "sha512-lVSgKt3biecofXVr8e1hnfX0IYMd4A6VCxmvOmHsFt5Zbmt0lkO4S2ap2bvQwYDYh5ghUNamC7M2L8K6vishhQ==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@rdfjs/data-model": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-2.1.1.tgz", - "integrity": "sha512-6mcOI4DjIPS6MOZw23H8oAdujHCk5gippVNQ7mKwliYTvTNh+uqRM91B9OLqhoAoNcQ3t49Dx2ooIMRG9/6ooA==", + "node_modules/@oxc-resolver/binding-darwin-x64": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.17.0.tgz", + "integrity": "sha512-+/raxVJE1bo7R4fA9Yp0wm3slaCOofTEeUzM01YqEGcRDLHB92WRGjRhagMG2wGlvqFuSiTp81DwSbBVo/g6AQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@rdfjs/dataset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-2.0.2.tgz", - "integrity": "sha512-6YJx+5n5Uxzq9dd9I0GGcIo6eopZOPfcsAfxSGX5d+YBzDgVa1cbtEBFnaPyPKiQsOm4+Cr3nwypjpg02YKPlA==", + "node_modules/@oxc-resolver/binding-freebsd-x64": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.17.0.tgz", + "integrity": "sha512-x9Ks56n+n8h0TLhzA6sJXa2tGh3uvMGpBppg6PWf8oF0s5S/3p/J6k1vJJ9lIUtTmenfCQEGKnFokpRP4fLTLg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "bin": { - "rdfjs-dataset-test": "bin/test.js" - } - }, - "node_modules/@rdfjs/environment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rdfjs/environment/-/environment-1.0.0.tgz", - "integrity": "sha512-+S5YjSvfoQR5r7YQCRCCVHvIEyrWia7FJv2gqM3s5EDfotoAQmFeBagApa9c/eQFi5EiNhmBECE5nB8LIxTaHg==", - "license": "MIT" + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@rdfjs/fetch-lite": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@rdfjs/fetch-lite/-/fetch-lite-3.3.0.tgz", - "integrity": "sha512-K3hZC4+Ch0UmYA1w0Xv/8cCVPD5ulKwRa6A/iTn3BFbZpVAb5KoBfOfnOhe6VJEa50raUvTHR1gp1YdvUnYt9g==", + "node_modules/@oxc-resolver/binding-linux-arm-gnueabihf": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.17.0.tgz", + "integrity": "sha512-Wf3w07Ow9kXVJrS0zmsaFHKOGhXKXE8j1tNyy+qIYDsQWQ4UQZVx5SjlDTcqBnFerlp3Z3Is0RjmVzgoLG3qkA==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "is-stream": "^4.0.1", - "nodeify-fetch": "^3.1.0", - "readable-stream": "^4.5.2" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rdfjs/formats": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/formats/-/formats-4.0.1.tgz", - "integrity": "sha512-Rg53vP+x1bnGAqJNKgEzJEUPDhj+tCpzb6wdmfLoVFq4XoZ589+cg2ScFDUMMyAVsgKXvSWjDhQ9f9ab254ZxA==", + "node_modules/@oxc-resolver/binding-linux-arm-musleabihf": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.17.0.tgz", + "integrity": "sha512-N0OKA1al1gQ5Gm7Fui1RWlXaHRNZlwMoBLn3TVtSXX+WbnlZoVyDqqOqFL8+pVEHhhxEA2LR8kmM0JO6FAk6dg==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@rdfjs/parser-jsonld": "^2.1.0", - "@rdfjs/parser-n3": "^2.0.1", - "@rdfjs/serializer-jsonld": "^2.0.0", - "@rdfjs/serializer-jsonld-ext": "^4.0.0", - "@rdfjs/serializer-ntriples": "^2.0.0", - "@rdfjs/serializer-turtle": "^1.1.1", - "@rdfjs/sink-map": "^2.0.0", - "rdfxml-streaming-parser": "^3.0.1" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rdfjs/formats-common": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rdfjs/formats-common/-/formats-common-3.1.0.tgz", - "integrity": "sha512-wgz5za/Uls+pttLdLl/aH0m0LQNgjqpWwk9exNs2Smmb2CosynRo4S0+CxeNOVZh4zeUm7oAlr1CK/tyg4Ff6g==", + "node_modules/@oxc-resolver/binding-linux-arm64-gnu": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.17.0.tgz", + "integrity": "sha512-wdcQ7Niad9JpjZIGEeqKJnTvczVunqlZ/C06QzR5zOQNeLVRScQ9S5IesKWUAPsJQDizV+teQX53nTK+Z5Iy+g==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@rdfjs/parser-jsonld": "^2.0.0", - "@rdfjs/parser-n3": "^2.0.0", - "@rdfjs/serializer-jsonld": "^2.0.0", - "@rdfjs/serializer-ntriples": "^2.0.0", - "@rdfjs/sink-map": "^2.0.0", - "rdfxml-streaming-parser": "^2.2.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rdfjs/formats/node_modules/rdfxml-streaming-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-3.2.0.tgz", - "integrity": "sha512-SgQGK0EkbXd0jQ1PZk7dEpfDxf4CZpezkO6cTuGWesa9twdWaaW5elMoNBcbMT+2tOZC1EYZjs0JaXx0HnifcQ==", + "node_modules/@oxc-resolver/binding-linux-arm64-musl": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.17.0.tgz", + "integrity": "sha512-65B2/t39HQN5AEhkLsC+9yBD1iRUkKOIhfmJEJ7g6wQ9kylra7JRmNmALFjbsj0VJsoSQkpM8K07kUZuNJ9Kxw==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@rubensworks/saxes": "^6.0.1", - "@types/readable-stream": "^4.0.18", - "buffer": "^6.0.3", - "rdf-data-factory": "^2.0.2", - "readable-stream": "^4.4.2", - "relative-to-absolute-iri": "^1.0.0", - "validate-iri": "^1.0.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/rubensworks/" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rdfjs/namespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-2.0.1.tgz", - "integrity": "sha512-U85NWVGnL3gWvOZ4eXwUcv3/bom7PAcutSBQqmVWvOaslPy+kDzAJCH1WYBLpdQd4yMmJ+bpJcDl9rcHtXeixg==", + "node_modules/@oxc-resolver/binding-linux-ppc64-gnu": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.17.0.tgz", + "integrity": "sha512-kExgm3TLK21dNMmcH+xiYGbc6BUWvT03PUZ2aYn8mUzGPeeORklBhg3iYcaBI3ZQHB25412X1Z6LLYNjt4aIaA==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2.0.1" - } + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-riscv64-gnu": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.17.0.tgz", + "integrity": "sha512-1utUJC714/ydykZQE8c7QhpEyM4SaslMfRXxN9G61KYazr6ndt85LaubK3EZCSD50vVEfF4PVwFysCSO7LN9uA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-riscv64-musl": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.17.0.tgz", + "integrity": "sha512-mayiYOl3LMmtO2CLn4I5lhanfxEo0LAqlT/EQyFbu1ZN3RS+Xa7Q3JEM0wBpVIyfO/pqFrjvC5LXw/mHNDEL7A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-s390x-gnu": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.17.0.tgz", + "integrity": "sha512-Ow/yI+CrUHxIIhn/Y1sP/xoRKbCC3x9O1giKr3G/pjMe+TCJ5ZmfqVWU61JWwh1naC8X5Xa7uyLnbzyYqPsHfg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-x64-gnu": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.17.0.tgz", + "integrity": "sha512-Z4J7XlPMQOLPANyu6y3B3V417Md4LKH5bV6bhqgaG99qLHmU5LV2k9ErV14fSqoRc/GU/qOpqMdotxiJqN/YWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-x64-musl": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.17.0.tgz", + "integrity": "sha512-0effK+8lhzXsgsh0Ny2ngdnTPF30v6QQzVFApJ1Ctk315YgpGkghkelvrLYYgtgeFJFrzwmOJ2nDvCrUFKsS2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-openharmony-arm64": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.17.0.tgz", + "integrity": "sha512-kFB48dRUW6RovAICZaxHKdtZe+e94fSTNA2OedXokzMctoU54NPZcv0vUX5PMqyikLIKJBIlW7laQidnAzNrDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@oxc-resolver/binding-wasm32-wasi": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.17.0.tgz", + "integrity": "sha512-a3elKSBLPT0OoRPxTkCIIc+4xnOELolEBkPyvdj01a6PSdSmyJ1NExWjWLaXnT6wBMblvKde5RmSwEi3j+jZpg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-resolver/binding-win32-arm64-msvc": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.17.0.tgz", + "integrity": "sha512-4eszUsSDb9YVx0RtYkPWkxxtSZIOgfeiX//nG5cwRRArg178w4RCqEF1kbKPud9HPrp1rXh7gE4x911OhvTnPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxc-resolver/binding-win32-ia32-msvc": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.17.0.tgz", + "integrity": "sha512-t946xTXMmR7yGH0KAe9rB055/X4EPIu93JUvjchl2cizR5QbuwkUV7vLS2BS6x6sfvDoQb6rWYnV1HCci6tBSg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxc-resolver/binding-win32-x64-msvc": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.17.0.tgz", + "integrity": "sha512-pX6s2kMXLQg+hlqKk5UqOW09iLLxnTkvn8ohpYp2Mhsm2yzDPCx9dyOHiB/CQixLzTkLQgWWJykN4Z3UfRKW4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@paulmillr/qr": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@paulmillr/qr/-/qr-0.2.1.tgz", + "integrity": "sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==", + "deprecated": "The package is now available as \"qr\": npm install qr", + "license": "(MIT OR Apache-2.0)", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rdfjs/data-model": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-2.1.1.tgz", + "integrity": "sha512-6mcOI4DjIPS6MOZw23H8oAdujHCk5gippVNQ7mKwliYTvTNh+uqRM91B9OLqhoAoNcQ3t49Dx2ooIMRG9/6ooA==", + "license": "MIT", + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } + }, + "node_modules/@rdfjs/dataset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-2.0.2.tgz", + "integrity": "sha512-6YJx+5n5Uxzq9dd9I0GGcIo6eopZOPfcsAfxSGX5d+YBzDgVa1cbtEBFnaPyPKiQsOm4+Cr3nwypjpg02YKPlA==", + "license": "MIT", + "bin": { + "rdfjs-dataset-test": "bin/test.js" + } + }, + "node_modules/@rdfjs/environment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/environment/-/environment-1.0.0.tgz", + "integrity": "sha512-+S5YjSvfoQR5r7YQCRCCVHvIEyrWia7FJv2gqM3s5EDfotoAQmFeBagApa9c/eQFi5EiNhmBECE5nB8LIxTaHg==", + "license": "MIT" + }, + "node_modules/@rdfjs/fetch-lite": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@rdfjs/fetch-lite/-/fetch-lite-3.3.0.tgz", + "integrity": "sha512-K3hZC4+Ch0UmYA1w0Xv/8cCVPD5ulKwRa6A/iTn3BFbZpVAb5KoBfOfnOhe6VJEa50raUvTHR1gp1YdvUnYt9g==", + "license": "MIT", + "dependencies": { + "is-stream": "^4.0.1", + "nodeify-fetch": "^3.1.0", + "readable-stream": "^4.5.2" + } + }, + "node_modules/@rdfjs/formats": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/formats/-/formats-4.0.1.tgz", + "integrity": "sha512-Rg53vP+x1bnGAqJNKgEzJEUPDhj+tCpzb6wdmfLoVFq4XoZ589+cg2ScFDUMMyAVsgKXvSWjDhQ9f9ab254ZxA==", + "license": "MIT", + "dependencies": { + "@rdfjs/parser-jsonld": "^2.1.0", + "@rdfjs/parser-n3": "^2.0.1", + "@rdfjs/serializer-jsonld": "^2.0.0", + "@rdfjs/serializer-jsonld-ext": "^4.0.0", + "@rdfjs/serializer-ntriples": "^2.0.0", + "@rdfjs/serializer-turtle": "^1.1.1", + "@rdfjs/sink-map": "^2.0.0", + "rdfxml-streaming-parser": "^3.0.1" + } + }, + "node_modules/@rdfjs/formats-common": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rdfjs/formats-common/-/formats-common-3.1.0.tgz", + "integrity": "sha512-wgz5za/Uls+pttLdLl/aH0m0LQNgjqpWwk9exNs2Smmb2CosynRo4S0+CxeNOVZh4zeUm7oAlr1CK/tyg4Ff6g==", + "license": "MIT", + "dependencies": { + "@rdfjs/parser-jsonld": "^2.0.0", + "@rdfjs/parser-n3": "^2.0.0", + "@rdfjs/serializer-jsonld": "^2.0.0", + "@rdfjs/serializer-ntriples": "^2.0.0", + "@rdfjs/sink-map": "^2.0.0", + "rdfxml-streaming-parser": "^2.2.0" + } + }, + "node_modules/@rdfjs/formats/node_modules/rdfxml-streaming-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-3.2.0.tgz", + "integrity": "sha512-SgQGK0EkbXd0jQ1PZk7dEpfDxf4CZpezkO6cTuGWesa9twdWaaW5elMoNBcbMT+2tOZC1EYZjs0JaXx0HnifcQ==", + "license": "MIT", + "dependencies": { + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^4.0.18", + "buffer": "^6.0.3", + "rdf-data-factory": "^2.0.2", + "readable-stream": "^4.4.2", + "relative-to-absolute-iri": "^1.0.0", + "validate-iri": "^1.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/@rdfjs/namespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-2.0.1.tgz", + "integrity": "sha512-U85NWVGnL3gWvOZ4eXwUcv3/bom7PAcutSBQqmVWvOaslPy+kDzAJCH1WYBLpdQd4yMmJ+bpJcDl9rcHtXeixg==", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^2.0.1" + } }, "node_modules/@rdfjs/parser-jsonld": { "version": "2.1.3", @@ -6040,19 +6356,6 @@ "viem": ">=2.29.0" } }, - "node_modules/@reown/appkit-common/node_modules/big.js": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", - "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bigjs" - } - }, "node_modules/@reown/appkit-controllers": { "version": "1.7.8", "resolved": "https://registry.npmjs.org/@reown/appkit-controllers/-/appkit-controllers-1.7.8.tgz", @@ -6538,6 +6841,17 @@ } } }, + "node_modules/@reown/appkit-controllers/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@reown/appkit-pay": { "version": "1.7.8", "resolved": "https://registry.npmjs.org/@reown/appkit-pay/-/appkit-pay-1.7.8.tgz", @@ -7244,6 +7558,17 @@ } } }, + "node_modules/@reown/appkit-utils/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@reown/appkit-wallet": { "version": "1.7.8", "resolved": "https://registry.npmjs.org/@reown/appkit-wallet/-/appkit-wallet-1.7.8.tgz", @@ -7737,6 +8062,17 @@ } } }, + "node_modules/@reown/appkit/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -8698,9 +9034,9 @@ } }, "node_modules/@solana/rpc-transport-http/node_modules/undici-types": { - "version": "7.19.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", - "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.20.0.tgz", + "integrity": "sha512-PZDAAlMkNw5ZzN/ebfyrwzrMWfIf7Jbn9iM/I6SF456OKrb2wnfqVowaxEY/cMAM8MjFu1zhdpJyA0L+rTYwNw==", "license": "MIT" }, "node_modules/@solana/rpc-types": { @@ -9000,9 +9336,9 @@ } }, "node_modules/@solana/web3.js/node_modules/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "license": "MIT", "engines": { "node": ">=20" @@ -9468,6 +9804,17 @@ "node": ">=10.13.0" } }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -9568,35 +9915,6 @@ "@types/ms": "*" } }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT", - "peer": true - }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -9736,6 +10054,7 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, "license": "MIT" }, "node_modules/@types/json5": { @@ -10494,15 +10813,13 @@ "license": "ISC" }, "node_modules/@urql/core": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@urql/core/-/core-3.2.2.tgz", - "integrity": "sha512-i046Cz8cZ4xIzGMTyHZrbdgzcFMcKD7+yhCAH5FwWBRjcKrc+RjEOuR9X5AMuBvr8c6IAaE92xAqa4wmlGfWTQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-6.0.1.tgz", + "integrity": "sha512-FZDiQk6jxbj5hixf2rEPv0jI+IZz0EqqGW8mJBEug68/zHTtT+f34guZDmyjJZyiWbj0vL165LoMr/TkeDHaug==", "license": "MIT", "dependencies": { - "wonka": "^6.1.2" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "@0no-co/graphql.web": "^1.0.13", + "wonka": "^6.3.2" } }, "node_modules/@urql/exchange-refocus": { @@ -10518,15 +10835,6 @@ "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@use-it/event-listener": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@use-it/event-listener/-/event-listener-0.1.7.tgz", - "integrity": "sha512-hgfExDzUU9uTRTPDCpw2s9jWTxcxmpJya3fK5ADpf5VDpSy8WYwY/kh28XE0tUcbsljeP8wfan48QvAQTSSa3Q==", - "license": "MIT", - "peerDependencies": { - "react": ">=16.8.0" - } - }, "node_modules/@vocabulary/sh": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@vocabulary/sh/-/sh-1.1.6.tgz", @@ -10690,15 +10998,6 @@ } } }, - "node_modules/@wagmi/connectors/node_modules/zod": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", - "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@wagmi/core": { "version": "2.22.1", "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-2.22.1.tgz", @@ -11981,6 +12280,17 @@ } } }, + "node_modules/@walletconnect/utils/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@walletconnect/window-getters": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", @@ -12012,181 +12322,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "license": "0BSD" }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0", - "peer": true - }, "node_modules/@zazuko/env": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/@zazuko/env/-/env-2.5.3.tgz", @@ -12376,19 +12511,6 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -12459,57 +12581,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/anser": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", @@ -13077,14 +13148,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -13252,12 +13323,16 @@ "peer": true }, "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", "license": "MIT", "engines": { "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" } }, "node_modules/bignumber.js": { @@ -13781,9 +13856,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001766", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", - "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "version": "1.0.30001767", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz", + "integrity": "sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==", "funding": [ { "type": "opencollective", @@ -14027,16 +14102,6 @@ "node": ">=12.13.0" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/chromium-edge-launcher": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", @@ -15674,9 +15739,9 @@ "peer": true }, "node_modules/electron-to-chromium": { - "version": "1.5.282", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.282.tgz", - "integrity": "sha512-FCPkJtpst28UmFzd903iU7PdeVTfY0KAeJy+Lk0GLZRwgwYHn/irRcaCbQQOmr5Vytc/7rcavsYLvTM8RiHYhQ==", + "version": "1.5.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", "license": "ISC" }, "node_modules/elliptic": { @@ -15722,15 +15787,6 @@ "dev": true, "license": "MIT" }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/encode-utf8": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", @@ -15782,6 +15838,7 @@ "version": "5.18.4", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -15959,13 +16016,6 @@ "node": ">= 0.4" } }, - "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "license": "MIT", - "peer": true - }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -17034,6 +17084,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -17046,6 +17097,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -17846,23 +17898,6 @@ "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", "license": "MIT" }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause", - "peer": true - }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -17895,6 +17930,16 @@ "bser": "2.1.1" } }, + "node_modules/fd-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fd-package-json/-/fd-package-json-2.0.0.tgz", + "integrity": "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "walk-up-path": "^4.0.0" + } + }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -18120,6 +18165,22 @@ "license": "MIT", "peer": true }, + "node_modules/formatly": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/formatly/-/formatly-0.3.0.tgz", + "integrity": "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fd-package-json": "^2.0.0" + }, + "bin": { + "formatly": "bin/index.mjs" + }, + "engines": { + "node": ">=18.3.0" + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -18445,13 +18506,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause", - "peer": true - }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -21319,6 +21373,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/jose": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", @@ -21737,6 +21801,74 @@ "node": ">=6" } }, + "node_modules/knip": { + "version": "5.82.1", + "resolved": "https://registry.npmjs.org/knip/-/knip-5.82.1.tgz", + "integrity": "sha512-1nQk+5AcnkqL40kGQXfouzAEXkTR+eSrgo/8m1d0BMei4eAzFwghoXC4gOKbACgBiCof7hE8wkBVDsEvznf85w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/webpro" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/knip" + } + ], + "license": "ISC", + "dependencies": { + "@nodelib/fs.walk": "^1.2.3", + "fast-glob": "^3.3.3", + "formatly": "^0.3.0", + "jiti": "^2.6.0", + "js-yaml": "^4.1.1", + "minimist": "^1.2.8", + "oxc-resolver": "^11.15.0", + "picocolors": "^1.1.1", + "picomatch": "^4.0.1", + "smol-toml": "^1.5.2", + "strip-json-comments": "5.0.3", + "zod": "^4.1.11" + }, + "bin": { + "knip": "bin/knip.js", + "knip-bun": "bin/knip-bun.js" + }, + "engines": { + "node": ">=18.18.0" + }, + "peerDependencies": { + "@types/node": ">=18", + "typescript": ">=5.0.4 <7" + } + }, + "node_modules/knip/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/knip/node_modules/strip-json-comments": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/konva": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/konva/-/konva-10.2.0.tgz", @@ -21858,34 +21990,6 @@ "@types/trusted-types": "^2.0.2" } }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -23780,13 +23884,6 @@ "node": ">= 0.6" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT", - "peer": true - }, "node_modules/next": { "version": "15.5.11", "resolved": "https://registry.npmjs.org/next/-/next-15.5.11.tgz", @@ -24313,12 +24410,6 @@ "ufo": "^1.6.1" } }, - "node_modules/ohash": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "license": "MIT" - }, "node_modules/on-exit-leak-free": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", @@ -24510,6 +24601,38 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, + "node_modules/oxc-resolver": { + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.17.0.tgz", + "integrity": "sha512-R5P2Tw6th+nQJdNcZGfuppBS/sM0x1EukqYffmlfX2xXLgLGCCPwu4ruEr9Sx29mrpkHgITc130Qps2JR90NdQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-resolver/binding-android-arm-eabi": "11.17.0", + "@oxc-resolver/binding-android-arm64": "11.17.0", + "@oxc-resolver/binding-darwin-arm64": "11.17.0", + "@oxc-resolver/binding-darwin-x64": "11.17.0", + "@oxc-resolver/binding-freebsd-x64": "11.17.0", + "@oxc-resolver/binding-linux-arm-gnueabihf": "11.17.0", + "@oxc-resolver/binding-linux-arm-musleabihf": "11.17.0", + "@oxc-resolver/binding-linux-arm64-gnu": "11.17.0", + "@oxc-resolver/binding-linux-arm64-musl": "11.17.0", + "@oxc-resolver/binding-linux-ppc64-gnu": "11.17.0", + "@oxc-resolver/binding-linux-riscv64-gnu": "11.17.0", + "@oxc-resolver/binding-linux-riscv64-musl": "11.17.0", + "@oxc-resolver/binding-linux-s390x-gnu": "11.17.0", + "@oxc-resolver/binding-linux-x64-gnu": "11.17.0", + "@oxc-resolver/binding-linux-x64-musl": "11.17.0", + "@oxc-resolver/binding-openharmony-arm64": "11.17.0", + "@oxc-resolver/binding-wasm32-wasi": "11.17.0", + "@oxc-resolver/binding-win32-arm64-msvc": "11.17.0", + "@oxc-resolver/binding-win32-ia32-msvc": "11.17.0", + "@oxc-resolver/binding-win32-x64-msvc": "11.17.0" + } + }, "node_modules/p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", @@ -26172,6 +26295,17 @@ "react": "^19.0.0" } }, + "node_modules/react-spring/node_modules/@types/react": { + "version": "19.2.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", + "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, "node_modules/react-spring/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -26881,6 +27015,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -27238,24 +27373,6 @@ "loose-envify": "^1.1.0" } }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", @@ -27406,16 +27523,6 @@ "node": ">=0.10.0" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/serve": { "version": "14.2.5", "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.5.tgz", @@ -27905,6 +28012,19 @@ "node": ">=8.0.0" } }, + "node_modules/smol-toml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, "node_modules/socket.io-client": { "version": "4.8.3", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz", @@ -28814,189 +28934,67 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tar": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", - "license": "BlueOak-1.0.0", - "peer": true, - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/terser": { - "version": "5.46.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", - "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } + "dev": true, + "license": "MIT" }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" + "engines": { + "node": ">=6" }, - "peerDependencies": { - "ajv": "^8.8.2" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", + "node_modules/tar": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", + "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "license": "BlueOak-1.0.0", "peer": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=18" } }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "license": "MIT", + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=18" } }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", + "node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/terser/node_modules/commander": { @@ -29104,22 +29102,22 @@ } }, "node_modules/tldts": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", - "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.21.tgz", + "integrity": "sha512-Plu6V8fF/XU6d2k8jPtlQf5F4Xx2hAin4r2C2ca7wR8NK5MbRTo9huLUWRe28f3Uk8bYZfg74tit/dSjc18xnw==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.19" + "tldts-core": "^7.0.21" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", - "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.21.tgz", + "integrity": "sha512-oVOMdHvgjqyzUZH1rOESgJP1uNe2bVrfK0jUHHmiM2rpEiRbf3j4BrsIc6JigJRbHGanQwuZv/R+LTcHsw+bLA==", "dev": true, "license": "MIT" }, @@ -29243,64 +29241,6 @@ "strip-bom": "^3.0.0" } }, - "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz", - "integrity": "sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tapable": "^2.2.1", - "tsconfig-paths": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -29795,33 +29735,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -29854,6 +29767,18 @@ "react": ">= 16.8.0" } }, + "node_modules/urql/node_modules/@urql/core": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-3.2.2.tgz", + "integrity": "sha512-i046Cz8cZ4xIzGMTyHZrbdgzcFMcKD7+yhCAH5FwWBRjcKrc+RjEOuR9X5AMuBvr8c6IAaE92xAqa4wmlGfWTQ==", + "license": "MIT", + "dependencies": { + "wonka": "^6.1.2" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/use-debounce": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-9.0.4.tgz", @@ -30076,9 +30001,9 @@ } }, "node_modules/viem": { - "version": "2.45.0", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.45.0.tgz", - "integrity": "sha512-iVA9qrAgRdtpWa80lCZ6Jri6XzmLOwwA1wagX2HnKejKeliFLpON0KOdyfqvcy+gUpBVP59LBxP2aKiL3aj8fg==", + "version": "2.45.1", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.45.1.tgz", + "integrity": "sha512-LN6Pp7vSfv50LgwhkfSbIXftAM5J89lP9x8TeDa8QM7o41IxlHrDh0F9X+FfnCWtsz11pEVV5sn+yBUoOHNqYA==", "funding": [ { "type": "github", @@ -30183,6 +30108,16 @@ } } }, + "node_modules/walk-up-path": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", + "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -30201,20 +30136,6 @@ "loose-envify": "^1.0.0" } }, - "node_modules/watchpack": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", - "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", - "license": "MIT", - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -30677,146 +30598,6 @@ "node": ">=12" } }, - "node_modules/webpack": { - "version": "5.104.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", - "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.28.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.4", - "es-module-lexer": "^2.0.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.3.1", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.16", - "watchpack": "^2.4.4", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/websocket": { "version": "1.0.35", "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", @@ -31366,9 +31147,9 @@ "peer": true }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 89e7f9bca..90d694da0 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "lint:fix": "eslint --ignore-path .gitignore --ext .ts,.tsx . --fix", "format": "prettier --ignore-path .gitignore './**/*.{css,yml,js,ts,tsx,json}' --write", "type-check": "tsc --noEmit", - "postinstall": "husky install" + "postinstall": "husky install", + "knip": "knip" }, "dependencies": { "@codemirror/lang-json": "^6.0.1", @@ -31,12 +32,10 @@ "@oceanprotocol/ddo-js": "^0.1.4", "@oceanprotocol/lib": "^5.1.2", "@oceanprotocol/typographies": "^0.1.0", - "@oceanprotocol/use-dark-mode": "^2.4.3", "@tanstack/react-query": "^5.90.11", "@tippyjs/react": "^4.2.6", "@uiw/codemirror-themes": "^4.21.12", "@uiw/react-codemirror": "^4.19.5", - "@urql/core": "3.2.2", "@urql/exchange-refocus": "1.0.0", "axios": "^1.2.0", "base64url": "^3.0.1", @@ -58,7 +57,6 @@ "myetherwallet-blockies": "^0.1.1", "next": "^15.5.11", "normalize-url": "^8.1.0", - "ohash": "^2.0.11", "query-string": "^8.1.0", "react": "^18.2.0", "react-data-table-component": "^7.5.3", @@ -81,7 +79,6 @@ "remove-markdown": "^0.5.0", "slugify": "^1.6.6", "styled-components": "^6.2.0", - "url-loader": "^4.1.1", "urql": "^3.0.3", "use-debounce": "^9.0.4", "wagmi": "^2.19.5", @@ -94,7 +91,7 @@ "@types/jest": "^29.5.3", "@types/js-cookie": "^3.0.3", "@types/loadable__component": "^5.13.4", - "@types/node": "^18.14.2", + "@types/node": "^18.19.130", "@types/react": "^18.0.25", "@types/react-dom": "^18.2.1", "@types/react-modal": "^3.16.2", @@ -115,14 +112,13 @@ "husky": "^8.0.3", "jest": "^29.6.2", "jest-environment-jsdom": "^29.3.1", + "knip": "^5.82.1", "next-transpile-modules": "^10.0.1", - "prettier": "^2.8.4", - "pretty-quick": "^3.1.3", - "process": "^0.11.10", + "prettier": "^2.8.8", + "pretty-quick": "^3.3.1", "serve": "^14.1.2", "stream-http": "^3.2.0", - "tsconfig-paths-webpack-plugin": "^4.1.0", - "typescript": "^5.2.2" + "typescript": "^5.9.3" }, "overrides": { "form-data": ">=4.0.0", diff --git a/scripts/write-networks-metadata.cjs b/scripts/write-networks-metadata.cjs index aabe3316a..b28483a75 100644 --- a/scripts/write-networks-metadata.cjs +++ b/scripts/write-networks-metadata.cjs @@ -22,13 +22,183 @@ const bargeNetwork = { } const axios = require('axios') +const fs = require('fs') +const path = require('path') + +const cachePath = path.join( + __dirname, + '..', + 'content', + 'networks-metadata.json' +) +const chainsConfigPath = path.join(__dirname, '..', 'chains.config.cjs') +const appConfigPath = path.join(__dirname, '..', 'app.config.cjs') // https://github.com/ethereum-lists/chains const chainDataUrl = 'https://chainid.network/chains.json' -axios(chainDataUrl).then((response) => { - const networkData = response.data - networkData.push(bargeNetwork) +const readCachedNetworks = () => { + try { + const cached = fs.readFileSync(cachePath, 'utf8').trim() + if (!cached) return null + return JSON.parse(cached) + } catch (error) { + return null + } +} + +const buildFallbackNetworks = () => { + const fallback = new Map() + + const defaultCurrency = { + name: 'Ether', + symbol: 'ETH', + decimals: 18 + } + + const addFallback = (chainId, data) => { + fallback.set(chainId, { + name: data.name, + chain: data.chain || 'ETH', + shortName: data.shortName || String(chainId), + chainId, + networkId: chainId, + nativeCurrency: data.nativeCurrency || defaultCurrency, + rpc: data.rpc || [], + infoURL: data.infoURL || '', + faucets: data.faucets || [], + explorers: data.explorers || [] + }) + } + + // Minimal known chains used by the app config. + addFallback(1, { + name: 'Ethereum Mainnet', + chain: 'ETH', + shortName: 'eth', + infoURL: 'https://ethereum.org' + }) + addFallback(10, { + name: 'OP Mainnet', + chain: 'OP', + shortName: 'op', + infoURL: 'https://optimism.io' + }) + addFallback(11155111, { + name: 'Sepolia Testnet', + chain: 'ETH', + shortName: 'sep', + infoURL: 'https://ethereum.org' + }) + addFallback(11155420, { + name: 'OP Sepolia Testnet', + chain: 'OP', + shortName: 'opsepolia', + infoURL: 'https://optimism.io' + }) + addFallback(8996, { + name: 'Development Testnet', + chain: 'ETH', + shortName: 'dev', + infoURL: 'https://ethereum.org' + }) + + try { + const { chains } = require(chainsConfigPath) + const titleize = (value) => + value + .split(/[-_]/) + .filter(Boolean) + .map((part) => part[0]?.toUpperCase() + part.slice(1)) + .join(' ') + + chains.forEach((chain) => { + const isTestnet = + typeof chain.network === 'string' && + (chain.network.includes('testnet') || chain.network.includes('devnet')) + const baseName = chain.network + ? titleize(chain.network) + : `Chain ${chain.chainId}` + const name = + isTestnet && !baseName.includes('Testnet') + ? `${baseName} Testnet` + : baseName + const explorers = chain.explorerUri + ? [ + { + name: 'Explorer', + url: chain.explorerUri, + standard: 'EIP3091' + } + ] + : [] + addFallback(chain.chainId, { + name, + chain: 'ETH', + shortName: chain.network + ? chain.network.slice(0, 10) + : String(chain.chainId), + rpc: chain.nodeUri ? [chain.nodeUri] : [], + infoURL: chain.explorerUri || '', + explorers + }) + }) + } catch (error) { + // Ignore if config can't be loaded. + } - process.stdout.write(JSON.stringify(networkData, null, ' ')) -}) + try { + const appConfig = require(appConfigPath) + if (Array.isArray(appConfig.chainIdsSupported)) { + appConfig.chainIdsSupported.forEach((chainId) => { + if (!fallback.has(chainId)) { + addFallback(chainId, { + name: `Chain ${chainId}`, + chain: 'ETH', + shortName: String(chainId) + }) + } + }) + } + } catch (error) { + // Ignore if config can't be loaded. + } + + return Array.from(fallback.values()) +} + +const shouldSkipFetch = + process.env.OFFLINE === 'true' || process.env.SKIP_NETWORK_METADATA === 'true' + +const writeNetworks = (networks) => { + process.stdout.write(JSON.stringify(networks, null, ' ')) +} + +const handleFallback = () => { + const cachedNetworks = readCachedNetworks() + if ( + cachedNetworks && + Array.isArray(cachedNetworks) && + cachedNetworks.length > 0 + ) { + writeNetworks(cachedNetworks) + return + } + + const fallbackNetworks = buildFallbackNetworks() + writeNetworks(fallbackNetworks) +} + +if (shouldSkipFetch) { + handleFallback() +} else { + axios(chainDataUrl, { timeout: 8000 }) + .then((response) => { + const networkData = response.data + networkData.push(bargeNetwork) + writeNetworks(networkData) + }) + .catch(() => { + handleFallback() + }) +} diff --git a/src/@context/Asset.tsx b/src/@context/Asset.tsx index e05a7dc7d..146a2b7ca 100644 --- a/src/@context/Asset.tsx +++ b/src/@context/Asset.tsx @@ -25,7 +25,7 @@ import { Service } from 'src/@types/ddo/Service' import { parseCredentialPolicies } from '@components/Publish/_utils' import { Purgatory } from '@oceanprotocol/ddo-js' -export interface AssetProviderValue { +interface AssetProviderValue { isInPurgatory: boolean purgatoryData: Purgatory asset: AssetExtended @@ -284,5 +284,5 @@ function AssetProvider({ // Helper hook to access the provider values const useAsset = (): AssetProviderValue => useContext(AssetContext) -export { AssetProvider, useAsset, AssetContext } +export { useAsset } export default AssetProvider diff --git a/src/@context/CookieConsent.tsx b/src/@context/CookieConsent.tsx index 3cb0c744c..bea278c65 100644 --- a/src/@context/CookieConsent.tsx +++ b/src/@context/CookieConsent.tsx @@ -16,7 +16,7 @@ export enum CookieConsentStatus { REJECTED = 1 } -export interface ConsentStatus { +interface ConsentStatus { [name: string]: CookieConsentStatus } @@ -137,5 +137,5 @@ function ConsentProvider({ children }: { children: ReactNode }): ReactElement { const useConsent = (): ConsentProviderValue => useContext(ConsentContext) -export { ConsentProvider, useConsent, ConsentContext } +export { useConsent } export default ConsentProvider diff --git a/src/@context/MarketMetadata/index.tsx b/src/@context/MarketMetadata/index.tsx index 809bbad2e..0cfe138d0 100644 --- a/src/@context/MarketMetadata/index.tsx +++ b/src/@context/MarketMetadata/index.tsx @@ -11,7 +11,6 @@ import { MarketMetadataProviderValue, OpcFee } from './_types' import siteContent from '../../../content/site.json' import appConfig from '../../../app.config.cjs' import { useConnect, useChainId } from 'wagmi' -import { getOceanConfig } from '@utils/ocean' import { getTokenInfo } from '@utils/wallet' import useEnterpriseFeeColletor from '@hooks/useEnterpriseFeeCollector' import { useEthersSigner } from '@hooks/useEthersSigner' @@ -34,8 +33,6 @@ function MarketMetadataProvider({ const [approvedBaseTokens, setApprovedBaseTokens] = useState() const envAllowedAddresses = useAllowedTokenAddresses(chainId) - const config = getOceanConfig(chainId) - // --------------------------- // Load OPC Fee Data // --------------------------- @@ -73,8 +70,6 @@ function MarketMetadataProvider({ // Load approved tokens metadata // --------------------------- - const tokenAddressesString = JSON.stringify(config?.tokenAddresses || []) - useEffect(() => { async function fetchTokenInfoSafe() { try { @@ -145,5 +140,5 @@ function MarketMetadataProvider({ const useMarketMetadata = (): MarketMetadataProviderValue => useContext(MarketMetadataContext) -export { MarketMetadataProvider, useMarketMetadata, MarketMetadataContext } +export { useMarketMetadata } export default MarketMetadataProvider diff --git a/src/@context/Profile/index.tsx b/src/@context/Profile/index.tsx index d6bc8d98c..a019464f1 100644 --- a/src/@context/Profile/index.tsx +++ b/src/@context/Profile/index.tsx @@ -452,5 +452,5 @@ function ProfileProvider({ // Helper hook to access the provider values const useProfile = (): ProfileProviderValue => useContext(ProfileContext) -export { ProfileProvider, useProfile, ProfileContext } +export { useProfile } export default ProfileProvider diff --git a/src/@context/UrqlProvider.tsx b/src/@context/UrqlProvider.tsx index 85cff9546..22cb3a749 100644 --- a/src/@context/UrqlProvider.tsx +++ b/src/@context/UrqlProvider.tsx @@ -5,7 +5,8 @@ import { Provider, Client, dedupExchange, - fetchExchange + fetchExchange, + Exchange } from 'urql' import { refocusExchange } from '@urql/exchange-refocus' import { useState, useEffect, ReactNode, ReactElement } from 'react' @@ -13,19 +14,15 @@ import { LoggerInstance } from '@oceanprotocol/lib' import { getOceanConfig } from '@utils/ocean' import { useChainId } from 'wagmi' -let urqlClient: Client - function createUrqlClient(subgraphUri: string) { + // Cast to the local Exchange type to avoid duplicate @urql/core instances in type checking. + const refocus = refocusExchange() as unknown as Exchange return createClient({ url: `${subgraphUri}/subgraphs/name/oceanprotocol/ocean-subgraph`, - exchanges: [dedupExchange, refocusExchange(), fetchExchange] + exchanges: [dedupExchange, refocus, fetchExchange] }) } -export function getUrqlClientInstance(): Client { - return urqlClient -} - export default function UrqlClientProvider({ children }: { @@ -48,11 +45,8 @@ export default function UrqlClientProvider({ } const newClient = createUrqlClient(oceanConfig.nodeUri) - urqlClient = newClient setClient(newClient) }, [chainId]) // re-run when chain changes return client ? {children} : <> } - -export { UrqlClientProvider } diff --git a/src/@hooks/useAbortController.ts b/src/@hooks/useAbortController.ts deleted file mode 100644 index 3a929f17e..000000000 --- a/src/@hooks/useAbortController.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { useRef, useEffect, useCallback } from 'react' -export const useAbortController = (): (() => AbortSignal) => { - const axiosSource = useRef(null) - const newAbortController = useCallback(() => { - axiosSource.current = new AbortController() - return axiosSource.current.signal - }, []) - - useEffect( - () => () => { - if (axiosSource.current) axiosSource.current.abort() - }, - [] - ) - - return newAbortController -} diff --git a/src/@hooks/useAccountPurgatory.ts b/src/@hooks/useAccountPurgatory.ts index e2b133c9b..cd4aa99ca 100644 --- a/src/@hooks/useAccountPurgatory.ts +++ b/src/@hooks/useAccountPurgatory.ts @@ -45,4 +45,3 @@ function useAccountPurgatory(accountId: string): UseAccountPurgatory { } export { useAccountPurgatory } -export default useAccountPurgatory diff --git a/src/@hooks/useCredentialValidation.ts b/src/@hooks/useCredentialValidation.ts deleted file mode 100644 index 29496fbfa..000000000 --- a/src/@hooks/useCredentialValidation.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { useState, useCallback } from 'react' -import { checkVerifierSessionId } from '@utils/wallet/policyServer' -import { useSsiWallet } from '@context/SsiWallet' - -export interface CredentialValidationState { - isValidating: boolean - isValid: boolean - error: string | null -} - -export interface UseCredentialValidationReturn { - validationState: CredentialValidationState - validateCredentials: (assetId: string, serviceId: string) => Promise - refreshCredentials: (assetId: string, serviceId: string) => Promise -} - -export function useCredentialValidation(): UseCredentialValidationReturn { - const [validationState, setValidationState] = - useState({ - isValidating: false, - isValid: false, - error: null - }) - - const { lookupVerifierSessionId, clearVerifierSessionCache } = useSsiWallet() - - const validateCredentials = useCallback( - async (assetId: string, serviceId: string): Promise => { - setValidationState({ - isValidating: true, - isValid: false, - error: null - }) - - try { - const sessionId = lookupVerifierSessionId(assetId, serviceId) - if (!sessionId) { - setValidationState({ - isValidating: false, - isValid: false, - error: 'No session found' - }) - return false - } - - const result = await checkVerifierSessionId(sessionId) - - if (result.success) { - setValidationState({ - isValidating: false, - isValid: true, - error: null - }) - return true - } else { - setValidationState({ - isValidating: false, - isValid: false, - error: 'Session expired' - }) - return false - } - } catch (error) { - const errorMessage = error?.message || 'Validation failed' - setValidationState({ - isValidating: false, - isValid: false, - error: errorMessage - }) - clearVerifierSessionCache() - return false - } - }, - [lookupVerifierSessionId, clearVerifierSessionCache] - ) - - const refreshCredentials = useCallback(async (): Promise => { - // Clear the session to force re-authentication - clearVerifierSessionCache() - - setValidationState({ - isValidating: true, - isValid: false, - error: null - }) - - // Return false to indicate credentials need to be re-verified - // The UI should trigger the credential check flow - setValidationState({ - isValidating: false, - isValid: false, - error: 'Credentials need to be re-verified' - }) - - return false - }, [clearVerifierSessionCache]) - - return { - validationState, - validateCredentials, - refreshCredentials - } -} diff --git a/src/@hooks/useCredentials.ts b/src/@hooks/useCredentials.ts index 7b3b177f8..524d0a8c8 100644 --- a/src/@hooks/useCredentials.ts +++ b/src/@hooks/useCredentials.ts @@ -20,7 +20,7 @@ export interface ExchangeStateData { poliyServerData: any } -export function newExchangeStateData(): ExchangeStateData { +function newExchangeStateData(): ExchangeStateData { return { openid4vp: '', verifiableCredentials: [], diff --git a/src/@hooks/useInterval.ts b/src/@hooks/useInterval.ts deleted file mode 100644 index cb119ed32..000000000 --- a/src/@hooks/useInterval.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { useEffect, useRef } from 'react' - -export const useInterval = ( - callback: () => Promise, - delay: number | null | false -) => { - const savedCallback = useRef<() => Promise>() - - useEffect(() => { - savedCallback.current = callback - }, [callback]) - - useEffect(() => { - const tick = () => { - savedCallback?.current() - } - - if (delay) { - const id = setInterval(tick, delay) - return () => { - clearInterval(id) - } - } - }, [callback, delay]) -} diff --git a/src/@hooks/useLocalStorage.ts b/src/@hooks/useLocalStorage.ts deleted file mode 100644 index e1cfa3fd2..000000000 --- a/src/@hooks/useLocalStorage.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { LoggerInstance } from '@oceanprotocol/lib' -import { useState } from 'react' - -function useLocalStorage(key: string, initialValue: T) { - // State to store our value - // Pass initial state function to useState so logic is only executed once - const [storedValue, setStoredValue] = useState(() => { - if (typeof window === 'undefined') { - return initialValue - } - try { - // Get from local storage by key - const item = window.localStorage.getItem(key) - // Parse stored json or if none return initialValue - return item ? JSON.parse(item) : initialValue - } catch (error) { - // If error also return initialValue - LoggerInstance.error(`[useLocalStorage] error: `, error) - return initialValue - } - }) - // Return a wrapped version of useState's setter function that ... - // ... persists the new value to localStorage. - const setValue = (value: T | ((val: T) => T)) => { - try { - // Allow value to be a function so we have same API as useState - const valueToStore = - value instanceof Function ? value(storedValue) : value - // Save state - setStoredValue(valueToStore) - // Save to local storage - if (typeof window !== 'undefined') { - window.localStorage.setItem(key, JSON.stringify(valueToStore)) - } - } catch (error) { - // A more advanced implementation would handle the error case - LoggerInstance.error(`[useLocalStorage] error: `, error) - } - } - return [storedValue, setValue] as const -} - -export default useLocalStorage diff --git a/src/@hooks/usePrevious.ts b/src/@hooks/usePrevious.ts deleted file mode 100644 index 9b5d89fe5..000000000 --- a/src/@hooks/usePrevious.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { useEffect, useRef } from 'react' - -function usePrevious(value: T): T { - // The ref object is a generic container whose current property is mutable ... - // ... and can hold any value, similar to an instance property on a class - const ref: any = useRef() - // Store current value in ref - useEffect(() => { - ref.current = value - }, [value]) // Only re-run if value changes - // Return previous value (happens before update in useEffect above) - return ref.current -} - -export default usePrevious diff --git a/src/@hooks/useTokenApproval.ts b/src/@hooks/useTokenApproval.ts index 63412e915..17ad2bfb0 100644 --- a/src/@hooks/useTokenApproval.ts +++ b/src/@hooks/useTokenApproval.ts @@ -6,7 +6,7 @@ import { EnterpriseFeeCollectorContract } from '@oceanprotocol/lib' * @param enterpriseFeeCollector - The initialized contract instance * @param tokenAddresses - List of token addresses to check */ -export function useTokenApproval( +function useTokenApproval( enterpriseFeeCollector: EnterpriseFeeCollectorContract | undefined, tokenAddresses: string[] | undefined ) { diff --git a/src/@types/Asset.ts b/src/@types/Asset.ts index 67703863a..544acd5d7 100644 --- a/src/@types/Asset.ts +++ b/src/@types/Asset.ts @@ -51,20 +51,6 @@ export interface AssetNft { tokenURI: string } -export interface Purgatory { - /** - * If `true`, asset is in purgatory. - * @type {boolean} - */ - state: boolean - - /** - * If asset is in purgatory, contains the reason for being there as defined in `list-purgatory`. - * @type {string} - */ - reason: string -} - export interface AssetDatatoken { /** * Contract address of the deployed Datatoken contract. @@ -111,34 +97,6 @@ export interface AssetPrice { tokenAddress?: string } -export interface Stats { - /** - * How often an asset was consumed, meaning how often it was either downloaded or used as part of a compute job. - * @type {number} - */ - orders: number - - /** - * Contains information about the price of this asset. - * @type {AssetPrice} - */ - price: AssetPrice - - /** - * Total amount of veOCEAN allocated on this asset. - * @type {number} - */ - allocated?: number -} - -export interface AssetLastEvent { - tx: string - block: number - from: string - contract: string - datetime: string -} - export interface Asset extends Credential { indexedMetadata: IndexedMetadata } diff --git a/src/@types/AssetExtended.ts b/src/@types/AssetExtended.ts index 5f7cdb5a4..e4cdc2691 100644 --- a/src/@types/AssetExtended.ts +++ b/src/@types/AssetExtended.ts @@ -1,6 +1,6 @@ import { Asset } from './Asset' -export interface ServicePrice { +interface ServicePrice { type: 'fixedrate' | 'dispenser' price: string contract: string @@ -8,7 +8,7 @@ export interface ServicePrice { exchangeId?: string } -export interface ServiceStat { +interface ServiceStat { datatokenAddress: string name: string symbol: string diff --git a/src/@types/PolicyServer.ts b/src/@types/PolicyServer.ts index 1157f398f..8177e0c12 100644 --- a/src/@types/PolicyServer.ts +++ b/src/@types/PolicyServer.ts @@ -37,28 +37,6 @@ export interface PolicyServerCheckSessionIdAction { sessionId: string } -export interface PolicyServerPresentationRequestAction { - action: PolicyServerActions.PRESENTATION_REQUEST - sessionId: string - vp_token: any - response: any - presentation_submission: any -} - -export interface PolicyServerDownloadAction { - action: PolicyServerActions.DOWNLOAD - policyServer: { - sessionId: string - } -} - -export interface PolicyServerPassthrough { - action: PolicyServerActions.PASSTHROUGH - url: string - httpMethod: 'GET' - body: any -} - export interface PolicyServerPresentationDefinition { input_descriptors: any[] } diff --git a/src/@types/Price.d.ts b/src/@types/Price.d.ts index 30eea1fec..c1c964fb6 100644 --- a/src/@types/Price.d.ts +++ b/src/@types/Price.d.ts @@ -51,7 +51,7 @@ declare global { validProviderFees?: ProviderFees paymentCollector: string } - interface PricePublishOptions { + export interface PricePublishOptions { price: number baseToken: TokenInfo type: 'fixed' | 'free' diff --git a/src/@types/SsiWallet.ts b/src/@types/SsiWallet.ts index d19fcb3f5..e0c39169e 100644 --- a/src/@types/SsiWallet.ts +++ b/src/@types/SsiWallet.ts @@ -34,13 +34,6 @@ export interface SsiVerifiableCredential { } } -export interface SsiWalletIssuer { - wallet: string - did: string - description: string - uiEndpoint: string -} - export interface SsiWalletDid { alias: string did: string diff --git a/src/@types/ddo/Credentials.ts b/src/@types/ddo/Credentials.ts index 445e12929..749112f56 100644 --- a/src/@types/ddo/Credentials.ts +++ b/src/@types/ddo/Credentials.ts @@ -30,7 +30,7 @@ export interface VPValue { args?: number | string | Record } -export type VC = string +type VC = string export type VP = string | VPValue export interface RequestCredential { type: string diff --git a/src/@types/ddo/Metadata.ts b/src/@types/ddo/Metadata.ts index e43cb2085..a590821c2 100644 --- a/src/@types/ddo/Metadata.ts +++ b/src/@types/ddo/Metadata.ts @@ -3,7 +3,7 @@ import { License } from './License' import { RemoteObject } from './RemoteObject' import { Option } from './Option' -export interface Container { +interface Container { entrypoint: string image: string tag: string @@ -37,16 +37,3 @@ export interface Metadata { // Required if asset type is algorithm algorithm?: Algorithm } - -export interface MetadataProof { - validatorAddress?: string - r?: string - s?: string - v?: number -} -export interface ValidateMetadata { - valid: boolean - errors?: any - hash?: string - proof?: MetadataProof -} diff --git a/src/@types/ddo/Proof.ts b/src/@types/ddo/Proof.ts deleted file mode 100644 index 85ac16d03..000000000 --- a/src/@types/ddo/Proof.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface Proof { - type: string - proofPurpose: string // assertionMethod - created: Date - verificationMethod: string - jws: string -} diff --git a/src/@types/ddo/ServiceCredentials.ts b/src/@types/ddo/ServiceCredentials.ts deleted file mode 100644 index d8b8aa5b4..000000000 --- a/src/@types/ddo/ServiceCredentials.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface ServiceCredentials { - verifiableCredential: EnvelopedVerifiableCredential[] -} - -export interface EnvelopedVerifiableCredential { - '@context': string - id: string // Unique identifier - type: 'EnvelopedVerifiableCredential' -} diff --git a/src/@types/ddo/VerifiableCredential.ts b/src/@types/ddo/VerifiableCredential.ts index 96a3953ae..576eed0da 100644 --- a/src/@types/ddo/VerifiableCredential.ts +++ b/src/@types/ddo/VerifiableCredential.ts @@ -1,6 +1,5 @@ import { AdditionalVerifiableCredentials } from './AdditionalVerifiableCredentials' import { CredentialSubject } from './CredentialSubject' -import { Proof } from './Proof' export interface Credential { type: string[] @@ -16,18 +15,6 @@ export interface Credential { * A credential that is verifiable. * @see https://www.w3.org/TR/vc-data-model */ -export type VerifiableCredential = - | VerifiableCredentialEmbeddedProof - | VerifiableCredentialJWT - -/** - * A verifiable credential with embedded proof. - * @see https://www.w3.org/TR/vc-data-model/#proofs-signatures - */ -export interface VerifiableCredentialEmbeddedProof extends Credential { - proof: Proof -} - /** * A verifiable credential may use the `external proof` mechanism to JWT usage, in which case the `proof` field is not embedded. * @see https://www.w3.org/TR/vc-data-model/#proofs-signatures diff --git a/src/@types/feeCollector/FeeCollector.type.ts b/src/@types/feeCollector/FeeCollector.type.ts index 91cbaf6d9..92b10a038 100644 --- a/src/@types/feeCollector/FeeCollector.type.ts +++ b/src/@types/feeCollector/FeeCollector.type.ts @@ -1,10 +1,3 @@ -export type TokenDetails = { - address: string - decimals: number - symbol: string - name: string -} - export type Fees = { approved: boolean feePercentage: string diff --git a/src/@types/invoice/InvoiceData.ts b/src/@types/invoice/InvoiceData.ts deleted file mode 100644 index 2036381ab..000000000 --- a/src/@types/invoice/InvoiceData.ts +++ /dev/null @@ -1,39 +0,0 @@ -export type InvoiceData = { - invoice_id: string - invoice_date: string - paid: boolean - issuer_address_blockchain: string - client_name: string - client_company: string - client_address: string - client_email: string - currencyToken: string - currencyAddress: string - items: { - name: string - price: number - }[] - tax: number - currencyTax: string - note: string - credentialSubject: { - name: string - url: string - logo: string - contactPoint: { - email: string - telephone: string - contactType: string - } - address: { - streetAddress: string - addressLocality: string - addressRegion: string - postalCode: string - } - globalLocationNumber: string - leiCode: string - vatID: string - taxID: string - } -} diff --git a/src/@types/invoice/buyInvoice.ts b/src/@types/invoice/buyInvoice.ts deleted file mode 100644 index 9cdf69cb5..000000000 --- a/src/@types/invoice/buyInvoice.ts +++ /dev/null @@ -1,778 +0,0 @@ -// import { Event, ethers } from 'ethers' -// import { TransactionResponse } from '@ethersproject/abstract-provider' -// import { InvoiceData } from '../../@types/invoice/InvoiceData' -// import ERC20TemplateEnterprise from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' -// import FixedRateExchange from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json' -// import { -// consumeMarketFixedSwapFee, -// consumeMarketOrderFee, -// marketCommunityFee -// } from 'app.config.cjs' -// import Decimal from 'decimal.js' -// import { getOceanConfig } from '@utils/ocean' - -// function createInvoices( -// events: Event[], -// tx: TransactionResponse, -// transactionFee: number, -// invoiceDate: Date, -// id: string, -// tokenSymbol: string, -// tokenAddress: string, -// price: number -// ): InvoiceData[] { -// try { -// const formattedInvoiceDate = invoiceDate.toLocaleDateString('en-US', { -// month: 'long', -// day: 'numeric', -// year: 'numeric' -// }) - -// const indexSeller = events.findIndex( -// (item) => item.event === 'TokenCollected' -// ) -// const indexOrder = events.findIndex((item) => item.event === 'OrderStarted') -// const indexProvider = events.findIndex( -// (item) => item.event === 'ProviderFee' -// ) -// let seller = 'Seller Name' -// if (indexSeller >= 0) { -// seller = events[indexSeller].args.to -// } else { -// seller = events[indexProvider].args.providerFeeAddress -// } -// const invoiceData: InvoiceData = { -// invoice_id: '1', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: seller, -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: tokenSymbol, -// currencyAddress: tokenAddress, -// items: [ -// { -// name: id, -// price -// } -// ], -// tax: transactionFee, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Example Organization', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } -// const invoiceData2: InvoiceData = { -// invoice_id: '2', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: events[indexOrder].args.publishMarketAddress, -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: tokenSymbol, -// currencyAddress: events[indexProvider].args.providerFeeToken, -// items: [ -// { -// name: `Fee to Market Operator for ${id}`, -// price: Number( -// new Decimal(consumeMarketFixedSwapFee).mul(price).div(100) -// ) -// } -// ], -// tax: 0, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Market Operator company', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } - -// const invoiceData3: InvoiceData = { -// invoice_id: '3', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: events[indexProvider].args.providerFeeAddress, -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: 'Ocean', -// currencyAddress: events[indexProvider].args.providerFeeToken, -// items: [ -// { -// name: `Provider fee for ${id}`, -// price: Number(events[indexProvider].args.providerFeeAmount) -// } -// ], -// tax: 0, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Provider organization', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } -// const invoiceData4: InvoiceData = { -// invoice_id: '4', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: 'Ocean Enterprise', -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: 'Ocean', -// currencyAddress: events[indexProvider].args.providerFeeToken, -// items: [ -// { -// name: `Ocean Community Fee`, -// price: Number(marketCommunityFee) -// } -// ], -// tax: 0, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Ocean Enterprise', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } -// return [invoiceData, invoiceData2, invoiceData3, invoiceData4] -// } catch (error) { -// console.error('Error in create invoice:', error) -// throw error -// } -// } - -// function createInvoicesComputeJobs( -// events: Event[], -// tx: TransactionResponse, -// transactionFee: number, -// invoiceDate: Date, -// assetId: string, -// algoId: string, -// tokenSymbolAsset: string, -// tokenSymbolAlgo: string, -// tokenAddressAsset: string, -// tokenAddressAlgo: string, -// priceAsset: number, -// priceAlgo: number, -// ownerAsset: string, -// ownerAlgo: string -// ): InvoiceData[] { -// try { -// const formattedInvoiceDate = invoiceDate.toLocaleDateString('en-US', { -// month: 'long', -// day: 'numeric', -// year: 'numeric' -// }) - -// const indexOrder = events.findIndex((item) => item.event === 'OrderStarted') -// const indexProvider = events.findIndex( -// (item) => item.event === 'ProviderFee' -// ) - -// tokenSymbolAsset = tokenSymbolAsset || 'Ocean' -// tokenAddressAsset = tokenAddressAsset || '' -// tokenSymbolAlgo = tokenSymbolAlgo || 'Ocean' -// tokenAddressAlgo = tokenAddressAlgo || '' -// const invoiceData: InvoiceData = { -// invoice_id: '1', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: ownerAsset, -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: tokenSymbolAsset, -// currencyAddress: tokenAddressAsset, -// items: [ -// { -// name: assetId, -// price: priceAsset -// } -// ], -// tax: transactionFee, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Example Organization', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } - -// const invoiceData2: InvoiceData = { -// invoice_id: '2', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: ownerAlgo, -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: tokenSymbolAlgo, -// currencyAddress: tokenAddressAlgo, -// items: [ -// { -// name: algoId, -// price: priceAlgo -// } -// ], -// tax: transactionFee, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Example Organization', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } -// const invoiceData3: InvoiceData = { -// invoice_id: '3', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: events[indexOrder].args.publishMarketAddress, -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: tokenSymbolAsset, -// currencyAddress: events[indexOrder].args.providerFeeToken, -// items: [ -// { -// name: `Fee to Market Operator for ${assetId}`, -// price: Number( -// new Decimal(consumeMarketOrderFee).mul(priceAsset).div(100) -// ) -// } -// ], -// tax: 0, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Market Operator company', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } -// const invoiceData4: InvoiceData = { -// invoice_id: '4', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: events[indexOrder].args.publishMarketAddress, -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: tokenSymbolAlgo, -// currencyAddress: events[indexOrder].args.providerFeeToken, -// items: [ -// { -// name: `Fee to Market Operator for ${algoId}`, -// price: Number( -// new Decimal(consumeMarketOrderFee).mul(priceAlgo).div(100) -// ) -// } -// ], -// tax: 0, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Market Operator company', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } -// const invoiceData5: InvoiceData = { -// invoice_id: '5', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: events[indexProvider].args.providerFeeAddress, -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: 'Ocean', -// currencyAddress: events[indexOrder].args.providerFeeToken, -// items: [ -// { -// name: `Provider fee for ${assetId}`, -// price: Number(events[indexProvider].args.providerFeeAmount) -// } -// ], -// tax: 0, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Provider Company', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } -// const invoiceData6: InvoiceData = { -// invoice_id: '6', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: 'Ocean Enterprise', -// client_name: tx.from, -// client_company: 'Buyer company', -// client_address: 'Buyer address', -// client_email: 'Buyer email', -// currencyToken: 'Ocean', -// currencyAddress: events[indexOrder].args.providerFeeToken, -// items: [ -// { -// name: `Ocean Community Fee`, -// price: Number(marketCommunityFee) -// } -// ], -// tax: 0, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Ocean Enterprise', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } -// return [ -// invoiceData, -// invoiceData2, -// invoiceData3, -// invoiceData4, -// invoiceData5, -// invoiceData6 -// ] -// } catch (error) { -// console.error('Error in create invoice:', error) -// throw error -// } -// } - -// export async function decodeBuyComputeJob( -// txHash: string, -// assetId: string, -// chainId: number, -// algoId: string, -// tokenSymbolAsset: string, -// tokenSymbolAlgo: string, -// tokenAddressAsset: string, -// tokenAddressAlgo: string, -// priceAsset: number, -// priceAlgo: number, -// ownerAsset: string, -// ownerAlgo: string, -// additionalFee: number = 0 -// ): Promise { -// try { -// const { nodeUri } = getOceanConfig(chainId) -// const provider = new ethers.providers.JsonRpcProvider(nodeUri) -// const transaction = await provider.getTransaction(txHash) -// const contractAddress = transaction.to // Extract contract address from transaction details -// const txReceipt = await provider.getTransactionReceipt(txHash) -// const gasPriceInGwei = Number(transaction.gasPrice) / 1e9 -// const gasUsed = Number(txReceipt.gasUsed) -// const transactionFee = (gasPriceInGwei * gasUsed) / 1e9 + additionalFee - -// const time = await provider.getBlock(transaction.blockNumber) -// const timestamp = Number(time.timestamp) -// const invoiceDate = new Date(timestamp * 1000) -// const contract = new ethers.Contract( -// contractAddress, -// ERC20TemplateEnterprise.abi, -// provider -// ) -// const events = await contract.queryFilter( -// '*', // all events -// transaction.blockNumber, -// transaction.blockNumber -// ) -// const reusedEvent = events.find((event) => event.event === 'OrderReused') - -// const decodedEvents = [] -// for (const event of events) { -// decodedEvents.push({ -// event: event.event, -// args: event.args -// }) -// } -// if (reusedEvent) { -// return decodeBuyComputeJob( -// reusedEvent.args.orderTxId, -// assetId, -// chainId, -// algoId, -// tokenSymbolAsset, -// tokenSymbolAlgo, -// tokenAddressAsset, -// tokenAddressAlgo, -// priceAsset, -// priceAlgo, -// ownerAsset, -// ownerAlgo, -// transactionFee -// ) -// } else { -// const { fixedRateExchangeAddress } = getOceanConfig(chainId) -// const contractFixedRateExchange = new ethers.Contract( -// fixedRateExchangeAddress, -// FixedRateExchange.abi, -// provider -// ) -// const eventsFixedRate = await contractFixedRateExchange.queryFilter( -// 'TokenCollected', -// transaction.blockNumber, -// transaction.blockNumber -// ) -// if (eventsFixedRate.length > 0) { -// decodedEvents.push({ -// event: eventsFixedRate[0].event, -// args: eventsFixedRate[0].args -// }) -// } -// } - -// return createInvoicesComputeJobs( -// decodedEvents, -// transaction, -// transactionFee, -// invoiceDate, -// assetId, -// algoId, -// tokenSymbolAsset, -// tokenSymbolAlgo, -// tokenAddressAsset, -// tokenAddressAlgo, -// priceAsset, -// priceAlgo, -// ownerAsset, -// ownerAlgo -// ) -// } catch (error) { -// console.error('Error decoding events buy:', error) -// throw error -// } -// } - -// export async function decodeBuy( -// provider: ethers.providers.JsonRpcProvider, -// txHash: string, -// chainId: number, -// id: string, -// tokenSymbol: string, -// tokenAddress: string, -// price: number, -// additionalFee: number = 0 -// ): Promise { -// try { -// const transaction = await provider.getTransaction(txHash) -// const contractAddress = transaction.to // Extract contract address from transaction details -// const txReceipt = await provider.getTransactionReceipt(txHash) -// const gasPriceInGwei = Number(transaction.gasPrice) / 1e9 -// const gasUsed = Number(txReceipt.gasUsed) -// const transactionFee = (gasPriceInGwei * gasUsed) / 1e9 + additionalFee - -// const time = await provider.getBlock(transaction.blockNumber) -// const timestamp = Number(time.timestamp) -// const invoiceDate = new Date(timestamp * 1000) -// const contract = new ethers.Contract( -// contractAddress, -// ERC20TemplateEnterprise.abi, -// provider -// ) -// const events = await contract.queryFilter( -// '*', // all events -// transaction.blockNumber, -// transaction.blockNumber -// ) -// const decodedEvents = [] -// for (const event of events) { -// decodedEvents.push({ -// event: event.event, -// args: event.args -// }) -// } - -// const { fixedRateExchangeAddress } = getOceanConfig(chainId) -// const contractFixedRateExchange = new ethers.Contract( -// fixedRateExchangeAddress, -// FixedRateExchange.abi, -// provider -// ) -// const eventsFixedRate = await contractFixedRateExchange.queryFilter( -// '*', -// transaction.blockNumber - 10, -// transaction.blockNumber + 10 -// ) -// if (eventsFixedRate.length > 0) { -// decodedEvents.push({ -// event: eventsFixedRate[0].event, -// args: eventsFixedRate[0].args -// }) -// } - -// return createInvoices( -// decodedEvents, -// transaction, -// transactionFee, -// invoiceDate, -// id, -// tokenSymbol, -// tokenAddress, -// price -// ) -// } catch (error) { -// console.error('Error decoding events buy:', error) -// throw error -// } -// } - -// async function getContractCreationBlock( -// provider: ethers.providers.Provider, -// contractAddress: string -// ): Promise { -// const latest = await provider.getBlockNumber() -// const step = 2000 - -// for (let from = latest; from >= 0; from -= step) { -// const to = from -// const fromBlock = Math.max(0, from - step + 1) - -// const logs = await provider.getLogs({ -// address: contractAddress, -// fromBlock, -// toBlock: to -// }) - -// if (logs.length > 0) { -// for (const log of logs) { -// if (log.blockNumber) return log.blockNumber -// } -// } - -// if (fromBlock === 0) break -// } - -// throw new Error('Could not determine contract creation block.') -// } - -// export async function decodeBuyDataSet( -// id: string, -// dataTokenAddress: string, -// chainId: number, -// tokenSymbol: string, -// tokenAddress: string, -// price: number, -// fromAddress: string, -// chunkSize: number = 2000 -// ): Promise { -// try { -// const { nodeUri } = getOceanConfig(chainId) -// const provider = new ethers.providers.JsonRpcProvider(nodeUri) -// const contract = new ethers.Contract( -// dataTokenAddress, -// ERC20TemplateEnterprise.abi, -// provider -// ) - -// const startBlock = await getContractCreationBlock( -// provider, -// contract.address -// ) -// const latestBlock = await provider.getBlockNumber() -// let fromBlock = startBlock - -// while (fromBlock <= latestBlock) { -// const toBlock = Math.min(fromBlock + chunkSize, latestBlock) -// const events = await contract.queryFilter( -// 'OrderStarted', -// fromBlock, -// toBlock -// ) - -// if (events) { -// return decodeBuy( -// provider, -// events[0].transactionHash, -// chainId, -// id, -// tokenSymbol, -// tokenAddress, -// price -// ) -// } - -// fromBlock += chunkSize + 1 -// } - -// throw new Error( -// `No OrderStarted event found for this address: ${dataTokenAddress}.` -// ) -// } catch (error) { -// console.error('Error in decodeBuyDataSet:', error) -// throw error -// } -// } diff --git a/src/@types/invoice/createInvoice.ts b/src/@types/invoice/createInvoice.ts deleted file mode 100644 index b58be8d58..000000000 --- a/src/@types/invoice/createInvoice.ts +++ /dev/null @@ -1,177 +0,0 @@ -// import { InvoiceData } from './InvoiceData' -// import JsPDF from 'jspdf' -// import html2canvas from 'html2canvas' - -// async function htmlToPdfBuffer(htmlContent: string) { -// const iframe = document.createElement('iframe') -// const iframeWidth = 800 -// const iframeHeight = 422 -// const pxPerMm = 3.7795275591 // Conversion factor from mm to pixels (72 DPI) - -// // Convert A4 dimensions to pixels -// const iframeWidthPx = iframeWidth * pxPerMm -// const iframeHeightPx = iframeHeight * pxPerMm -// iframe.style.visibility = 'hidden' -// iframe.style.width = `${iframeWidth}px` -// iframe.style.height = `${iframeHeight}px` - -// document.body.appendChild(iframe) -// const iframedoc = iframe.contentDocument || iframe.contentWindow.document -// iframedoc.body.innerHTML = htmlContent -// const scale = 4 -// const canvas = await html2canvas(iframedoc.body, { -// scale, -// useCORS: true, -// width: iframeWidthPx, -// height: iframeHeightPx -// }) - -// // Convert the iframe into a PNG image using canvas. -// const imgData = canvas.toDataURL('image/png') - -// // Create a PDF document and add the image as a page. -// const doc = new JsPDF({ -// format: 'a4', -// unit: 'mm', -// orientation: 'p' -// }) - -// doc.addImage(imgData, 'PNG', 0, 0, iframeWidth, iframeHeight) - -// // Get the file as blob output. -// const blob = doc.output('blob') - -// // Remove the iframe from the document when the file is generated. -// document.body.removeChild(iframe) - -// return blob -// } - -// export async function createInvoice(data: InvoiceData): Promise { -// const htmlTemplate = ` -// -// -// Invoice ${data.invoice_id} ${data.client_name} -// -// -// -//
-// PAID -//
- -//
-//
-//
-// -//
-//
-//
-// Invoice Number: -// ${data.invoice_id} -//
-//
-// Invoice Date: -// ${data.invoice_date} -//
-//
-//
-//
-//
-//
Wallet Address: ${data.issuer_address_blockchain}
-//
-// Company: ${data.credentialSubject.name} -//
-//
-// Address: ${data.credentialSubject.address.streetAddress}, ${data.credentialSubject.address.addressLocality} -//
-//
Email: ${data.credentialSubject.contactPoint.email}
-//
Telephone: ${data.credentialSubject.contactPoint.telephone}
-//
-//
- -//
-//
-//
BILL TO:
-//
Wallet Address: ${data.client_name}
-//
Company: ${data.client_company}
-//
Address: ${data.client_address}
-//
Email: ${data.client_email}
-//
-//
-//
-//
-// -// -// -// -// -// -// -// -// -// -// -// -// -//
ItemPrice
-// ${data.items[0].name} -// -// ${data.items[0].price} ${data.currencyToken} -//
-//
-//
- -//
-//
-//
-// Token address: -// ${data.currencyAddress} -//
-//
-// Transaction fee: -// ${data.tax} ${data.currencyTax} -//
- -// -//
-//
${data.note}
-//
-//
-//
-// -// -// -// ` -// return htmlToPdfBuffer(htmlTemplate) -// } - -// export async function getPdf(invoicesJson: InvoiceData[]): Promise { -// const promises = invoicesJson.map((invoiceData) => createInvoice(invoiceData)) - -// return Promise.all(promises) -// } diff --git a/src/@utils/aquarius/index.ts b/src/@utils/aquarius/index.ts index 97d48a4c0..494faebc2 100644 --- a/src/@utils/aquarius/index.ts +++ b/src/@utils/aquarius/index.ts @@ -20,11 +20,6 @@ import { Filters } from '@context/Filter' import { filterSets } from '@components/Search/Filter' import { Asset } from 'src/@types/Asset' -export interface UserSales { - id: string - totalSales: number -} - export const MAXIMUM_NUMBER_OF_PAGES_WITH_RESULTS = 476 export function escapeEsReservedCharacters(value: string): string { @@ -54,10 +49,7 @@ export function getFilterTerm( } } -export function getRangeFilterTerm( - filterField: string, - gteValue: string -): FilterTerm { +function getRangeFilterTerm(filterField: string, gteValue: string): FilterTerm { return { range: { [filterField]: { @@ -111,7 +103,7 @@ export function getWhitelistShould(): FilterTerm[] { const { whitelists } = addressConfig const whitelistFilterTerms = Object.entries(whitelists) - .filter(([field, whitelist]) => whitelist?.length > 0) + .filter(([, whitelist]) => whitelist?.length > 0) .map(([field, whitelist]) => whitelist.map((address) => getFilterTerm(field, address, 'match')) ) @@ -120,7 +112,7 @@ export function getWhitelistShould(): FilterTerm[] { return whitelistFilterTerms?.length > 0 ? whitelistFilterTerms : [] } -export function getDynamicPricingMustNot(): // eslint-disable-next-line camelcase +function getDynamicPricingMustNot(): // eslint-disable-next-line camelcase FilterTerm | undefined { return allowDynamicPricing === 'true' ? undefined @@ -207,11 +199,7 @@ export function generateBaseQuery( return generatedQuery } -export function transformQueryResult( - queryResult, - from = 0, - size = 21 -): PagedAssets { +function transformQueryResult(queryResult, from = 0, size = 21): PagedAssets { const result: PagedAssets = { results: [], page: 0, @@ -642,87 +630,6 @@ export async function getPublishedAssets( } } -async function getTopPublishers( - chainIds: number[], - cancelToken: CancelToken, - page?: number, - type?: string, - accesType?: string -): Promise { - const filters: FilterTerm[] = [] - - accesType !== undefined && - filters.push(getFilterTerm('credentialSubject.services.type', accesType)) - type !== undefined && - filters.push(getFilterTerm('credentialSubject.metadata.type', type)) - - const baseQueryParams = { - chainIds, - filters, - sortOptions: { - sortBy: SortTermOptions.Created, - sortDirection: SortDirectionOptions.Descending - }, - aggs: { - topPublishers: { - terms: { - field: 'indexedMetadata.nft.owner.keyword', - order: { totalSales: 'desc' } - }, - aggs: { - totalSales: { - sum: { - field: SortTermOptions.Orders - } - } - } - } - }, - esPaginationOptions: { - from: page || 0, - size: 9 - } - } as BaseQueryParams - - const query = generateBaseQuery(baseQueryParams) - - try { - const result = await queryMetadata(query, cancelToken) - return result - } catch (error) { - if (axios.isCancel(error)) { - LoggerInstance.log(error.message) - } else { - LoggerInstance.error(error.message) - } - } -} - -export async function getTopAssetsPublishers( - chainIds: number[], - nrItems = 9 -): Promise { - const publishers: UserSales[] = [] - - const result = await getTopPublishers(chainIds, null) - const { topPublishers } = result.aggregations - - if (!topPublishers?.buckets) { - return [] - } - - for (let i = 0; i < topPublishers.buckets?.length; i++) { - publishers.push({ - id: topPublishers.buckets[i].key, - totalSales: parseInt(topPublishers.buckets[i].totalSales.value) - }) - } - - publishers.sort((a, b) => b.totalSales - a.totalSales) - - return publishers.slice(0, nrItems) -} - export async function getUserSalesAndRevenue( accountId: string, chainIds: number[], diff --git a/src/@utils/compute.ts b/src/@utils/compute.ts index 1ec387f31..639173c1c 100644 --- a/src/@utils/compute.ts +++ b/src/@utils/compute.ts @@ -1,11 +1,10 @@ import { - getHash, LoggerInstance, ProviderInstance, - ComputeEnvironment, ComputeJob, getErrorMessage, - ComputeAlgorithm + ComputeAlgorithm, + getHash } from '@oceanprotocol/lib' import { CancelToken } from 'axios' import { @@ -114,31 +113,7 @@ export function getValidUntilTime( return Math.floor(mytime.getTime() / 1000) } -export async function getComputeEnvironment( - asset: Asset -): Promise { - if (asset?.credentialSubject?.services[0]?.type !== 'compute') return null - try { - const computeEnvs = await ProviderInstance.getComputeEnvironments( - asset.credentialSubject?.services[0].serviceEndpoint - ) - const computeEnv = Array.isArray(computeEnvs) - ? computeEnvs[0] - : computeEnvs[asset?.credentialSubject?.chainId][0] - - if (!computeEnv) return null - return computeEnv - } catch (e: any) { - const message = getErrorMessage(e.message) - LoggerInstance.error( - '[Compute to Data] Fetch compute environment:', - message - ) - toast.error(message) - } -} - -export function getQueryString( +function getQueryString( trustedAlgorithmList: PublisherTrustedAlgorithms[], trustedPublishersList: string[], chainId?: number, @@ -220,30 +195,6 @@ export async function getAlgorithmsForAsset( return algorithms } -export async function getAlgorithmAssetSelectionList( - service: Service, - algorithms: Asset[], - accountId: string, - tokenSymbolMap?: Record -): Promise { - if (!algorithms || algorithms?.length === 0) return [] - - let algorithmSelectionList: AssetSelectionAsset[] - if (!service.compute) { - algorithmSelectionList = [] - } else { - algorithmSelectionList = await transformAssetToAssetSelection( - service?.serviceEndpoint, - algorithms, - accountId, - service.compute.publisherTrustedAlgorithms, - undefined, - tokenSymbolMap - ) - } - return algorithmSelectionList -} - export async function getAlgorithmAssetSelectionListForComputeWizard( service: Service, algorithms: Asset[], @@ -273,7 +224,7 @@ async function getJobs( providerUrls: string[], accountId: string, assets?: Asset[], - cancelToken?: CancelToken + _cancelToken?: CancelToken ): Promise { const uniqueProviders = [...new Set(providerUrls)] const providersComputeJobsExtended: ComputeJobExtended[] = [] @@ -400,7 +351,7 @@ export async function getAllComputeJobs( return computeResult } -export async function createTrustedAlgorithmList( +async function createTrustedAlgorithmList( selectedAlgorithms: string[], assetChainId: number, cancelToken: CancelToken diff --git a/src/@utils/cookies.ts b/src/@utils/cookies.ts index 8437a7d30..ee182316e 100644 --- a/src/@utils/cookies.ts +++ b/src/@utils/cookies.ts @@ -1,17 +1,17 @@ import Cookies from 'js-cookie' -export enum SAME_SITE_OPTIONS { +enum SAME_SITE_OPTIONS { STRICT = 'strict', LAX = 'lax', NONE = 'none' } -export const DEFAULT_COOKIE_OPTIONS = { +const DEFAULT_COOKIE_OPTIONS = { expires: 365, sameSite: SAME_SITE_OPTIONS.STRICT } -export function getLegacyCookieName(cookieName: string): string { +function getLegacyCookieName(cookieName: string): string { return `${cookieName}-legacy` } diff --git a/src/@utils/ddo.ts b/src/@utils/ddo.ts index bf15b6d58..d02e1b283 100644 --- a/src/@utils/ddo.ts +++ b/src/@utils/ddo.ts @@ -107,7 +107,7 @@ interface FileExtended extends FileInfo { export function normalizeFile( storageType: string, file: FileExtended, - chainId: number + _chainId: number ) { let fileObj const headersProvider = {} @@ -193,7 +193,7 @@ export function parseConsumerParameters( }) } -export function findCredential( +function findCredential( credentials: (CredentialAddressBased | CredentialPolicyBased)[], consumerCredentials: CredentialAddressBased, type?: string @@ -228,7 +228,7 @@ export function findCredential( * @param credentials credentials * @param consumerAddress consumer address */ -export function checkCredentials( +function checkCredentials( credentials: Credential, consumerAddress: string, type?: string diff --git a/src/@utils/feeTooltips.ts b/src/@utils/feeTooltips.ts index 649ec420d..be3766169 100644 --- a/src/@utils/feeTooltips.ts +++ b/src/@utils/feeTooltips.ts @@ -1,4 +1,4 @@ -export const feeTooltipText = { +const feeTooltipText = { marketplace: 'For marketplace operation & maintenance', provider: 'For Ocean Node operator(s)', oec: 'For Ocean Enterprise Collective e.V. maintaining and developing the OE basecode' diff --git a/src/@utils/index.ts b/src/@utils/index.ts index ac7c82ad6..e5ec4c47f 100644 --- a/src/@utils/index.ts +++ b/src/@utils/index.ts @@ -18,7 +18,7 @@ export function sortAssets(items: Asset[], sorted: string[]) { return items } -export const isPlainObject = (object: any) => { +const isPlainObject = (object: any) => { return object !== null && typeof object === 'object' && !Array.isArray(object) } diff --git a/src/@utils/invoice/createInvoice.ts b/src/@utils/invoice/createInvoice.ts deleted file mode 100644 index f9a07ff56..000000000 --- a/src/@utils/invoice/createInvoice.ts +++ /dev/null @@ -1,177 +0,0 @@ -// import { InvoiceData } from '../../@types/invoice/InvoiceData' -// import JsPDF from 'jspdf' -// import html2canvas from 'html2canvas' - -// async function htmlToPdfBuffer(htmlContent: string) { -// const iframe = document.createElement('iframe') -// const iframeWidth = 800 -// const iframeHeight = 422 -// const pxPerMm = 3.7795275591 // Conversion factor from mm to pixels (72 DPI) - -// // Convert A4 dimensions to pixels -// const iframeWidthPx = iframeWidth * pxPerMm -// const iframeHeightPx = iframeHeight * pxPerMm -// iframe.style.visibility = 'hidden' -// iframe.style.width = `${iframeWidth}px` -// iframe.style.height = `${iframeHeight}px` - -// document.body.appendChild(iframe) -// const iframedoc = iframe.contentDocument || iframe.contentWindow.document -// iframedoc.body.innerHTML = htmlContent -// const scale = 4 -// const canvas = await html2canvas(iframedoc.body, { -// scale, -// useCORS: true, -// width: iframeWidthPx, -// height: iframeHeightPx -// }) - -// // Convert the iframe into a PNG image using canvas. -// const imgData = canvas.toDataURL('image/png') - -// // Create a PDF document and add the image as a page. -// const doc = new JsPDF({ -// format: 'a4', -// unit: 'mm', -// orientation: 'p' -// }) - -// doc.addImage(imgData, 'PNG', 0, 0, iframeWidth, iframeHeight) - -// // Get the file as blob output. -// const blob = doc.output('blob') - -// // Remove the iframe from the document when the file is generated. -// document.body.removeChild(iframe) - -// return blob -// } - -// export async function createInvoice(data: InvoiceData): Promise { -// const htmlTemplate = ` -// -// -// Invoice ${data.invoice_id} ${data.client_name} -// -// -// -//
-// PAID -//
- -//
-//
-//
-// -//
-//
-//
-// Invoice Number: -// ${data.invoice_id} -//
-//
-// Invoice Date: -// ${data.invoice_date} -//
-//
-//
-//
-//
-//
Wallet Address: ${data.issuer_address_blockchain}
-//
-// Company: ${data.credentialSubject.name} -//
-//
-// Address: ${data.credentialSubject.address.streetAddress}, ${data.credentialSubject.address.addressLocality} -//
-//
Email: ${data.credentialSubject.contactPoint.email}
-//
Telephone: ${data.credentialSubject.contactPoint.telephone}
-//
-//
- -//
-//
-//
BILL TO:
-//
Wallet Address: ${data.client_name}
-//
Company: ${data.client_company}
-//
Address: ${data.client_address}
-//
Email: ${data.client_email}
-//
-//
-//
-//
-// -// -// -// -// -// -// -// -// -// -// -// -// -//
ItemPrice
-// ${data.items[0].name} -// -// ${data.items[0].price} ${data.currencyToken} -//
-//
-//
- -//
-//
-//
-// Token address: -// ${data.currencyAddress} -//
-//
-// Transaction fee: -// ${data.tax} ${data.currencyTax} -//
- -// -//
-//
${data.note}
-//
-//
-//
-// -// -// -// ` -// return htmlToPdfBuffer(htmlTemplate) -// } - -// export async function getPdf(invoicesJson: InvoiceData[]): Promise { -// const promises = invoicesJson.map((invoiceData) => createInvoice(invoiceData)) - -// return Promise.all(promises) -// } diff --git a/src/@utils/invoice/publishInvoice.ts b/src/@utils/invoice/publishInvoice.ts deleted file mode 100644 index c4439acf7..000000000 --- a/src/@utils/invoice/publishInvoice.ts +++ /dev/null @@ -1,135 +0,0 @@ -// import { Event, ethers } from 'ethers' -// import { TransactionResponse } from '@ethersproject/abstract-provider' -// import { InvoiceData } from '../../@types/invoice/InvoiceData' -// import NftFactory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json' -// import ERC20TemplateEnterprise from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json' -// import { getOceanConfig } from '@utils/ocean' - -// function createInvoicePublish( -// txPublish: TransactionResponse, -// transactionFee: number, -// event: Event, -// invoiceDate: Date, -// invoiceId: string -// ): InvoiceData { -// const formattedInvoiceDate = invoiceDate.toLocaleDateString('en-US', { -// month: 'long', -// day: 'numeric', -// year: 'numeric' -// }) -// const invoiceData: InvoiceData = { -// invoice_id: 'PMF1', -// invoice_date: formattedInvoiceDate, -// paid: true, -// issuer_address_blockchain: event.args.PublishMarketFeeAddress, -// client_name: txPublish.from, -// client_company: 'Client company', -// client_address: 'Client address', -// client_email: 'Client email', -// currencyToken: 'Ocean', -// currencyAddress: event.args.PublishMarketFeeToken, -// items: [ -// { -// name: `Publish fee for ${invoiceId}`, -// price: Number(event.args.PublishMarketFeeAmount) / 10 ** 18 -// } -// ], -// tax: transactionFee, -// currencyTax: 'ETH', -// note: 'Thank You For Your Business!', -// credentialSubject: { -// name: 'Example Organization', -// url: 'http://www.example.com', -// logo: 'http://www.example.com/logo.png', -// contactPoint: { -// email: 'example@example.com', -// telephone: '+1-800-123-4567', -// contactType: 'customer service' -// }, -// address: { -// streetAddress: '20341 Whitworth Institute 405 N. Whitworth', -// addressLocality: 'Seattle', -// addressRegion: 'WA', -// postalCode: '98101' -// }, -// globalLocationNumber: '1234567890123', -// leiCode: '5493001KJTIIGC8Y1R12', -// vatID: 'GB123456789', -// taxID: '123-45-6789' -// } -// } -// return invoiceData -// // return createInvoice(invoiceData) -// } - -// export async function decodePublish( -// id: string, -// txHash: string, -// chainId: number -// ): Promise { -// try { -// const { nftFactoryAddress, nodeUri } = getOceanConfig(chainId) -// const provider = new ethers.providers.JsonRpcProvider(nodeUri) -// const transactionPublish = await provider.getTransaction(txHash) -// const txReceipt = await provider.getTransactionReceipt(txHash) - -// const gasPriceInGwei = Number(transactionPublish.gasPrice) / 1e9 -// const transactionFeeWei = (gasPriceInGwei * Number(txReceipt.gasUsed)) / 1e9 - -// const time = await provider.getBlock(transactionPublish.blockNumber) -// const timestamp = Number(time.timestamp) -// const invoiceDate = new Date(timestamp * 1000) - -// const contract = new ethers.Contract( -// nftFactoryAddress, -// NftFactory.abi, -// provider -// ) -// const eventInstance = await contract.queryFilter( -// 'InstanceDeployed', -// transactionPublish.blockNumber - 10, // fromBlockOrBlockhash -// transactionPublish.blockNumber // toBlock -// ) -// const filteredEvents = eventInstance.filter( -// (event) => event.args.instance === transactionPublish.to -// ) - -// if (filteredEvents.length === 0) { -// throw new Error('No events found') -// } - -// const transactionCreateNft = await provider.getTransaction( -// filteredEvents[0].transactionHash -// ) -// const txReceipt2 = await provider.getTransactionReceipt( -// filteredEvents[0].transactionHash -// ) -// const gasPriceInGwei2 = Number(transactionCreateNft.gasPrice) / 1e9 -// const transactionFeeWei2 = -// (gasPriceInGwei2 * Number(txReceipt2.gasUsed)) / 1e9 - -// const transactionFee = transactionFeeWei + transactionFeeWei2 - -// // Get past events emitted by the contract instance -// const contractInstance = new ethers.Contract( -// eventInstance[eventInstance.length - 1].args.instance, -// ERC20TemplateEnterprise.abi, -// provider -// ) - -// const events = await contractInstance.queryFilter( -// 'PublishMarketFeeChanged', -// transactionCreateNft.blockNumber, -// transactionCreateNft.blockNumber -// ) -// return createInvoicePublish( -// transactionPublish, -// transactionFee, -// events[0], -// invoiceDate, -// id -// ) -// } catch (error) { -// console.error('Error decoding events:', error) -// } -// } diff --git a/src/@utils/nft.ts b/src/@utils/nft.ts index 81da0412a..8d0714b48 100644 --- a/src/@utils/nft.ts +++ b/src/@utils/nft.ts @@ -9,7 +9,7 @@ import { } from '@oceanprotocol/lib' import { SvgWaves } from './SvgWaves' import { customProviderUrl } from '../../app.config.cjs' -import { Signer, ethers, TransactionResponse, hexlify } from 'ethers' +import { Signer, TransactionResponse } from 'ethers' import { toast } from 'react-toastify' import { Asset } from 'src/@types/Asset' diff --git a/src/@utils/ocean/index.ts b/src/@utils/ocean/index.ts index 9b9935126..8c6ecbc01 100644 --- a/src/@utils/ocean/index.ts +++ b/src/@utils/ocean/index.ts @@ -131,15 +131,3 @@ export function getOceanConfig(network: string | number): ConfigEnterprise { } return config as ConfigEnterprise } - -export function getDevelopmentConfig(): Config { - return { - // factoryAddress: contractAddresses.development?.DTFactory, - // poolFactoryAddress: contractAddresses.development?.BFactory, - // fixedRateExchangeAddress: contractAddresses.development?.FixedRateExchange, - // metadataContractAddress: contractAddresses.development?.Metadata, - // oceanTokenAddress: contractAddresses.development?.Ocean, - // There is no subgraph in barge so we hardcode the Sepolia one for now - nodeUri: 'https://v4.subgraph.sepolia.oceanprotocol.com' - } as Config -} diff --git a/src/@utils/order.ts b/src/@utils/order.ts index 598f533e9..ed2b10066 100644 --- a/src/@utils/order.ts +++ b/src/@utils/order.ts @@ -359,7 +359,7 @@ export async function order( * @param providerFees * @returns {TransactionReceipt} receipt of the order */ -export async function reuseOrder( +async function reuseOrder( signer: Signer, accessDetails: AccessDetails, validOrderTx: string, diff --git a/src/@utils/provider.ts b/src/@utils/provider.ts index c7cb677cc..f932836c1 100644 --- a/src/@utils/provider.ts +++ b/src/@utils/provider.ts @@ -1,13 +1,10 @@ import { Arweave, ComputeAlgorithm, - ComputeAsset, ComputeEnvironment, - downloadFileBrowser, FileInfo, Ipfs, LoggerInstance, - ProviderComputeInitializeResults, ProviderInstance, UrlFile, UserCustomParameters, @@ -126,86 +123,6 @@ export async function initializeProviderForComputeMulti( ) } -export async function initializeProviderForCompute( - dataset: AssetExtended, - datasetService: Service, - datasetAccessDetails: AccessDetails, - algorithm: AssetExtended, - accountId: Signer, - computeEnv: ComputeEnvironment = null, - selectedResources: ResourceType, - svcIndexAlgo: number, - datasetSessionId: string, - algoSessionId: string -): Promise { - const { oceanTokenAddress } = getOceanConfig( - algorithm.credentialSubject.chainId - ) - const computeAsset: ComputeAsset = { - documentId: dataset.id, - serviceId: datasetService.id, - transferTxId: datasetAccessDetails.validOrderTx - } - - const computeAlgo: ComputeAlgorithm = { - documentId: algorithm.id, - serviceId: algorithm.credentialSubject?.services[svcIndexAlgo].id, - transferTxId: algorithm.accessDetails?.[svcIndexAlgo]?.validOrderTx - } - - const validUntil = getValidUntilTime( - selectedResources?.jobDuration, - datasetService.timeout, - algorithm.credentialSubject.services[svcIndexAlgo].timeout - ) - - const policiesServer: PolicyServerInitiateComputeActionData[] = [ - { - sessionId: algoSessionId, - serviceId: algorithm.credentialSubject.services[svcIndexAlgo].id, - documentId: algorithm.id, - successRedirectUri: ``, - errorRedirectUri: ``, - responseRedirectUri: ``, - presentationDefinitionUri: `` - }, - { - sessionId: datasetSessionId, - serviceId: datasetService.id, - documentId: dataset.id, - successRedirectUri: ``, - errorRedirectUri: ``, - responseRedirectUri: ``, - presentationDefinitionUri: `` - } - ] - - try { - const resourceRequests = computeEnv.resources.map((res) => ({ - id: res.id, - amount: selectedResources?.[res.id] || res.min - })) - return await ProviderInstance.initializeCompute( - [computeAsset], - computeAlgo, - computeEnv?.id, - oceanTokenAddress, - validUntil, - customProviderUrl || datasetService.serviceEndpoint, - accountId, - resourceRequests, - dataset.credentialSubject?.chainId || - algorithm.credentialSubject?.chainId, - policiesServer - ) - } catch (error) { - const message = getErrorMessage(error.message) - LoggerInstance.error('[Initialize Provider] Error:', message) - toast.error(message) - return null - } -} - // TODO: Why do we have these one line functions ?!?!?! export async function getEncryptedFiles( files: any, diff --git a/src/@utils/throttle.ts b/src/@utils/throttle.ts deleted file mode 100644 index 0e9527b7a..000000000 --- a/src/@utils/throttle.ts +++ /dev/null @@ -1,24 +0,0 @@ -export function throttle( - fn: (...args: Args) => void, - cooldown: number -) { - let lastArgs: Args | undefined - - const run = () => { - if (lastArgs) { - fn(...lastArgs) - lastArgs = undefined - } - } - - const throttled = (...args: Args) => { - const isOnCooldown = !!lastArgs - lastArgs = args - if (isOnCooldown) { - return - } - window.setTimeout(run, cooldown) - } - - return throttled -} diff --git a/src/@utils/wallet/chains.ts b/src/@utils/wallet/chains.ts index 135b83eda..10443f7e7 100644 --- a/src/@utils/wallet/chains.ts +++ b/src/@utils/wallet/chains.ts @@ -3,7 +3,7 @@ import * as wagmiChains from 'wagmi/chains' import { getRuntimeConfig } from '../runtimeConfig' // Custom OP Sepolia chain -export const opSepolia: Chain = { +const opSepolia: Chain = { id: 11155420, name: 'OP Sepolia', nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, @@ -21,7 +21,7 @@ export const opSepolia: Chain = { } // Custom Ethereum Hoodi testnet -export const ethereumHoodi: Chain = { +const ethereumHoodi: Chain = { id: 560048, name: 'Ethereum Hoodi', nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, diff --git a/src/@utils/wallet/index.ts b/src/@utils/wallet/index.ts index 382bf7640..1cf1c7d2f 100644 --- a/src/@utils/wallet/index.ts +++ b/src/@utils/wallet/index.ts @@ -12,7 +12,6 @@ import { Provider, Wallet } from 'ethers' -import { getNetworkDisplayName } from '@hooks/useNetworkMetadata' import { getOceanConfig } from '../ocean' import { getSupportedChains } from './chains' import { chainIdsSupported } from '../../../app.config.cjs' @@ -48,30 +47,6 @@ function getWagmiChains(): readonly [Chain, ...Chain[]] { return baseChains as unknown as readonly [Chain, ...Chain[]] } -/* ----------------------------------------- - WAGMI CLIENT — SSR SAFE LAZY INITIALIZER ------------------------------------------- */ -const client: any = null - -export function getWagmiClient() { - if (client) return client - if (typeof window === 'undefined') return null - const chains = getWagmiChains() - - return createConfig({ - chains, - ssr: true, - storage: createStorage({ storage: cookieStorage }), - transports: chains.reduce( - (acc, chain) => ({ - ...acc, - [chain.id]: http() - }), - {} as Record> - ) - }) -} - export const wagmiConfig = (() => { const chains = getWagmiChains() @@ -151,61 +126,6 @@ export async function addTokenToWallet( ) } -export async function addCustomNetwork( - web3Provider: any, - network: EthereumListsChain -): Promise { - // Always add explorer URL from ocean.js first, as it's null sometimes - // in network data - const blockExplorerUrls = [ - getOceanConfig(network.networkId).explorerUri, - network.explorers && network.explorers[0].url - ] - - const newNetworkData = { - chainId: `0x${network.chainId.toString(16)}`, - chainName: getNetworkDisplayName(network), - nativeCurrency: network.nativeCurrency, - rpcUrls: network.rpc, - blockExplorerUrls - } - try { - await web3Provider.request({ - method: 'wallet_switchEthereumChain', - params: [{ chainId: newNetworkData.chainId }] - }) - } catch (switchError: any) { - if (switchError.code === 4902) { - await web3Provider.request( - { - method: 'wallet_addEthereumChain', - params: [newNetworkData] - }, - (err: string, added: any) => { - if (err || 'error' in added) { - LoggerInstance.error( - `Couldn't add ${network.name} (0x${ - network.chainId - }) network to MetaMask, error: ${err || added.error}` - ) - } else { - LoggerInstance.log( - `Added ${network.name} (0x${network.chainId}) network to MetaMask` - ) - } - } - ) - } else { - LoggerInstance.error( - `Couldn't add ${network.name} (0x${network.chainId}) network to MetaMask, error: ${switchError}` - ) - } - } - LoggerInstance.log( - `Added ${network.name} (0x${network.chainId}) network to MetaMask` - ) -} - export async function getTokenBalance( accountId: string, decimals: number, diff --git a/src/@utils/wallet/ssiWallet.ts b/src/@utils/wallet/ssiWallet.ts index 21e83edb8..d210cc541 100644 --- a/src/@utils/wallet/ssiWallet.ts +++ b/src/@utils/wallet/ssiWallet.ts @@ -1,13 +1,12 @@ import axios from 'axios' import { SsiKeyDesc, - SsiWalletIssuer, SsiVerifiableCredential, SsiWalletDesc, SsiWalletSession, SsiWalletDid } from 'src/@types/SsiWallet' -import { Signer, JsonRpcSigner } from 'ethers' +import { JsonRpcSigner } from 'ethers' import { ssiWalletApi } from 'app.config.cjs' import { LoggerInstance } from '@oceanprotocol/lib' @@ -141,32 +140,6 @@ export async function getWalletKeys( } } -export async function getWalletKey( - walletId: string, - keyId: string, - token: string -) { - const api = getSsiWalletApi() - if (!api) { - throw new Error('No SSI Wallet API configured') - } - try { - const response = await axios.get( - `${api}/wallet-api/wallet/${walletId}/keys/${keyId}/load`, - { - headers: { - Authorization: `Bearer ${token}` - }, - withCredentials: true - } - ) - - return response.data - } catch (error) { - throw error.response - } -} - export async function signMessage( walletId: string, keyId: string, @@ -195,31 +168,6 @@ export async function signMessage( } } -export async function getWalletIssuers( - walletId: string, - token: string -): Promise { - const api = getSsiWalletApi() - if (!api) { - throw new Error('No SSI Wallet API configured') - } - try { - const response = await axios.get( - `${api}/wallet-api/wallet/${walletId}/issuers`, - { - headers: { - Authorization: `Bearer ${token}` - }, - withCredentials: true - } - ) - - return response.data - } catch (error) { - throw error.response - } -} - export async function getWalletDids( walletId: string, token: string diff --git a/src/@utils/yup.ts b/src/@utils/yup.ts index 8e9741e36..952e0b6cc 100644 --- a/src/@utils/yup.ts +++ b/src/@utils/yup.ts @@ -1,10 +1,23 @@ import { isCID } from '@utils/ipfs' import isUrl from 'is-url-superb' import * as Yup from 'yup' -import { ethers, isAddress } from 'ethers' +import { isAddress } from 'ethers' import { isGoogleUrl } from './url/index' -export function testLinks(isEdit?: boolean) { +export type YupTestContext = Yup.TestContext> + +export function getOriginalValue( + ctx: YupTestContext, + fallback: unknown +): unknown { + const opts = ctx.options as unknown + if (opts && typeof opts === 'object' && 'originalValue' in opts) { + return (opts as { originalValue?: unknown }).originalValue + } + return fallback +} + +export function testLinks(_isEdit?: boolean) { return Yup.string().test((value, context) => { const { type } = context.parent let validField diff --git a/src/components/@shared/Accordion/index.module.css b/src/components/@shared/Accordion/index.module.css index 03c03db77..673eae42c 100644 --- a/src/components/@shared/Accordion/index.module.css +++ b/src/components/@shared/Accordion/index.module.css @@ -40,14 +40,14 @@ display: inline-flex; align-items: baseline; gap: calc(var(--spacer) / 4); - color: var(--publish-text); + color: var(--text-ink); font-weight: 600; font-size: 0.9rem; } .headerLeader { flex: 1; - border-bottom: 1px dotted var(--border-color-light, #e6e6e6); + border-bottom: 1px dotted var(--border-color-light, var(--neutral-165)); margin: 0 12px; align-self: center; } diff --git a/src/components/@shared/AddNetwork/index.tsx b/src/components/@shared/AddNetwork/index.tsx index 41565ea8d..77f1e23dc 100644 --- a/src/components/@shared/AddNetwork/index.tsx +++ b/src/components/@shared/AddNetwork/index.tsx @@ -5,7 +5,7 @@ import styles from './index.module.css' import EthIcon from '@images/eth.svg' import AddTokenStyles from '../AddToken/index.module.css' -export interface AddNetworkProps { +interface AddNetworkProps { chainId: number networkName: string logo?: ReactNode diff --git a/src/components/@shared/AddToken/index.module.css b/src/components/@shared/AddToken/index.module.css index 877c1a0c7..72b3fc00e 100644 --- a/src/components/@shared/AddToken/index.module.css +++ b/src/components/@shared/AddToken/index.module.css @@ -61,7 +61,7 @@ /* font-size: 8px; */ line-height: 100%; text-align: center; - color: rgba(48, 48, 49, 0.8); + color: var(--ink-alpha-80); } .symbol { diff --git a/src/components/@shared/AddToken/index.tsx b/src/components/@shared/AddToken/index.tsx index c3198299b..5de2d7102 100644 --- a/src/components/@shared/AddToken/index.tsx +++ b/src/components/@shared/AddToken/index.tsx @@ -7,7 +7,7 @@ import styles from './index.module.css' const cx = classNames.bind(styles) -export interface AddTokenProps { +interface AddTokenProps { address: string symbol: string decimals?: number diff --git a/src/components/@shared/AdditionalDdos/index.module.css b/src/components/@shared/AdditionalDdos/index.module.css index e4627ea92..d5e3ae4fc 100644 --- a/src/components/@shared/AdditionalDdos/index.module.css +++ b/src/components/@shared/AdditionalDdos/index.module.css @@ -21,9 +21,9 @@ } .title { - font-size: var(--publish-font-size-lg); - line-height: var(--publish-line-height-base); - color: var(--publish-text-secondary); + font-size: var(--text-lg); + line-height: var(--text-line-base); + color: var(--clr-slate-70); font-weight: 700; margin: 0; } diff --git a/src/components/@shared/AnchorNavigation/index.module.css b/src/components/@shared/AnchorNavigation/index.module.css index 1e733a36e..69c8f73a4 100644 --- a/src/components/@shared/AnchorNavigation/index.module.css +++ b/src/components/@shared/AnchorNavigation/index.module.css @@ -17,30 +17,30 @@ border: 1px solid var(--clr-navy); border-radius: 20px; color: var(--clr-navy); - font-size: var(--publish-font-size); - font-weight: var(--publish-font-weight-bold); - font-family: var(--publish-font-family); + font-size: var(--text-sm); + font-weight: var(--text-weight-bold); + font-family: var(--font-family-base); cursor: pointer; transition: all 0.3s ease; text-decoration: none; text-transform: none; - box-shadow: var(--publish-shadow-sm); + box-shadow: var(--shadow-sm); min-width: unset; } .button:hover, .button:focus { - border-color: var(--clr-navy-darker, #001f3f); - color: var(--clr-navy-darker, #001f3f); + border-color: var(--clr-navy-darker, var(--navy-900)); + color: var(--clr-navy-darker, var(--navy-900)); background: transparent; transform: scale(1.02); box-shadow: 1px 2px 8px var(--box-shadow-color); } .number { - font-weight: var(--publish-font-weight-bold); + font-weight: var(--text-weight-bold); } .label { - font-weight: var(--publish-font-weight-normal); + font-weight: var(--text-weight-regular); } diff --git a/src/components/@shared/AnnouncementBanner/index.tsx b/src/components/@shared/AnnouncementBanner/index.tsx index 5db1787f7..243e8761a 100644 --- a/src/components/@shared/AnnouncementBanner/index.tsx +++ b/src/components/@shared/AnnouncementBanner/index.tsx @@ -6,13 +6,13 @@ import styles from './index.module.css' const cx = classNames.bind(styles) -export interface AnnouncementAction { +interface AnnouncementAction { name: string style?: string handleAction: () => void } -export interface AnnouncementBannerProps { +interface AnnouncementBannerProps { text: string action?: AnnouncementAction state?: 'success' | 'warning' | 'error' diff --git a/src/components/@shared/AssetList/AssetViewSelector.tsx b/src/components/@shared/AssetList/AssetViewSelector.tsx index 4a700092a..fd27dddc6 100644 --- a/src/components/@shared/AssetList/AssetViewSelector.tsx +++ b/src/components/@shared/AssetList/AssetViewSelector.tsx @@ -1,47 +1,4 @@ -import { ReactElement } from 'react' -import classNames from 'classnames/bind' -import styles from './AssetViewSelector.module.css' -import Button from '../atoms/Button' -import GridViewIcon from '@images/grid-view-icon.svg' -import ListViewIcon from '@images/list-view-icon.svg' - -const cx = classNames.bind(styles) - export enum AssetViewOptions { Grid = 'grid', List = 'list' } - -const assetViews = [ - { value: AssetViewOptions.Grid, icon: }, - { value: AssetViewOptions.List, icon: } -] - -export default function AssetViewSelector({ - activeAssetView, - setActiveAssetView -}: { - activeAssetView: AssetViewOptions - setActiveAssetView: (activeView: AssetViewOptions) => void -}): ReactElement { - return ( -
- {assetViews.map((view) => { - const selectFilter = cx({ - [styles.selected]: view.value === activeAssetView, - [styles.viewSelector]: true - }) - return ( - - ) - })} -
- ) -} diff --git a/src/components/@shared/AssetList/index.tsx b/src/components/@shared/AssetList/index.tsx index 051a2ede0..ef08654b5 100644 --- a/src/components/@shared/AssetList/index.tsx +++ b/src/components/@shared/AssetList/index.tsx @@ -1,5 +1,5 @@ import AssetTeaser from '@shared/AssetTeaser' -import { ReactElement, useState } from 'react' +import { ReactElement } from 'react' import Pagination from '@shared/Pagination' import styles from './index.module.css' import AssetTitle from '@shared/AssetListTitle' @@ -82,7 +82,7 @@ const columns: TableOceanColumn[] = [ } ] -export declare type AssetListProps = { +declare type AssetListProps = { assets: AssetExtended[] showPagination: boolean page?: number @@ -108,12 +108,9 @@ export default function AssetList({ noPublisher, noDescription, noPrice, - showAssetViewSelector, defaultAssetView }: AssetListProps): ReactElement { - const [activeAssetView, setActiveAssetView] = useState( - defaultAssetView || AssetViewOptions.Grid - ) + const activeAssetView = defaultAssetView || AssetViewOptions.Grid // This changes the page field inside the query function handlePageChange(selected: number) { diff --git a/src/components/@shared/AssetTeaser/index.module.css b/src/components/@shared/AssetTeaser/index.module.css index 9320a45f9..622736863 100644 --- a/src/components/@shared/AssetTeaser/index.module.css +++ b/src/components/@shared/AssetTeaser/index.module.css @@ -11,8 +11,8 @@ background: var(--teaser-background); border-radius: 20px; /* border-radius: var(--teaser-border-radius); */ - border: var(--teaser-border-size) solid #eeeeee99; - box-shadow: 1px 4px 8px 0 rgba(0, 0, 0, 0.15); + border: var(--teaser-border-size) solid var(--overlay-light-60); + box-shadow: 1px 4px 8px 0 var(--black-alpha-15); /* box-shadow: var(--teaser-box-shadow); */ position: relative; padding-top: calc(var(--spacer) / 2); @@ -44,7 +44,7 @@ a.link:focus { font-family: var(--font-family); font-weight: 400; font-size: 12px; - color: var(--publish-text-secondary); + color: var(--clr-slate-70); margin-bottom: calc(var(--spacer) / 3); } @@ -79,7 +79,7 @@ a.link:focus { font-family: var(--font-family); font-weight: 400; font-size: 10px; - color: var(--publish-text-secondary); + color: var(--clr-slate-70); display: inline-block; border-left: 1px solid var(--border-color); padding-left: calc(var(--spacer) / 4); diff --git a/src/components/@shared/AssetTeaser/index.tsx b/src/components/@shared/AssetTeaser/index.tsx index 9c2887f36..30cca67c0 100644 --- a/src/components/@shared/AssetTeaser/index.tsx +++ b/src/components/@shared/AssetTeaser/index.tsx @@ -9,7 +9,7 @@ import styles from './index.module.css' import { getServiceByName } from '@utils/ddo' import { AssetExtended } from 'src/@types/AssetExtended' -export declare type AssetTeaserProps = { +declare type AssetTeaserProps = { asset: AssetExtended noPublisher?: boolean noDescription?: boolean diff --git a/src/components/@shared/ComputeJobSuccessModal/index.tsx b/src/components/@shared/ComputeJobSuccessModal/index.tsx deleted file mode 100644 index 6d22d4e81..000000000 --- a/src/components/@shared/ComputeJobSuccessModal/index.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { ReactElement } from 'react' -import { useRouter } from 'next/router' -import Modal from '@shared/atoms/Modal' -import Button from '@shared/atoms/Button' -import styles from './index.module.css' - -interface ComputeJobSuccessModalProps { - isOpen: boolean - onClose: () => void - jobId?: string - algorithmName?: string - datasetNames?: string[] - totalCost?: string - assetDid?: string -} - -export default function ComputeJobSuccessModal({ - isOpen, - onClose, - jobId, - algorithmName, - datasetNames, - totalCost, - assetDid -}: ComputeJobSuccessModalProps): ReactElement { - const router = useRouter() - - const handleClose = () => { - onClose() - // Navigate back to asset page with refresh trigger - if (assetDid) { - router.push(`/asset/${assetDid}?refreshJobs=true`) - } - } - - return ( - -
-
- Your compute job has been started successfully! Watch the progress - below or on your profile. -
- - {jobId && ( -
-
- Job ID: - {jobId} -
- - {algorithmName && ( -
- Algorithm: - {algorithmName} -
- )} - - {datasetNames && datasetNames.length > 0 && ( -
- Datasets: - {datasetNames.join(', ')} -
- )} - - {totalCost && ( -
- Total Cost: - {totalCost} -
- )} -
- )} - -
- -
-
-
- ) -} diff --git a/src/components/@shared/ComputeJobs/index.module.css b/src/components/@shared/ComputeJobs/index.module.css index 8315a2ceb..a3102f666 100644 --- a/src/components/@shared/ComputeJobs/index.module.css +++ b/src/components/@shared/ComputeJobs/index.module.css @@ -145,38 +145,10 @@ } .refreshButton { - background-color: var(--color-primary); - color: white; - border: none; - border-radius: 6px; - padding: 0.4rem 0.9rem; - font-size: 0.9rem; - cursor: pointer; - transition: all 0.2s ease-in-out; margin-right: 14px; margin-bottom: 16px; - user-select: none; } -.refreshButton:hover { - background-color: var(--color-primary); - opacity: 0.9; -} - -.refreshButton:active, -.refreshButton:focus, -.refreshButton:focus-visible, -.refreshButton:visited { - background-color: var(--color-primary) !important; - color: white !important; - outline: none !important; - box-shadow: none !important; -} -.refreshButton:disabled { - background-color: var(--color-primary) !important; - opacity: 0.7; - cursor: not-allowed; -} .refreshLoader { display: flex; align-items: center; diff --git a/src/components/@shared/ComputeJobs/index.tsx b/src/components/@shared/ComputeJobs/index.tsx index b7b8ea605..1e604e677 100644 --- a/src/components/@shared/ComputeJobs/index.tsx +++ b/src/components/@shared/ComputeJobs/index.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react' +import { useCallback, useEffect, useMemo, useState } from 'react' import styles from './index.module.css' import { getAllComputeJobs } from '@utils/compute' import { useAccount } from 'wagmi' @@ -25,63 +25,89 @@ const ComputeJobs = ({ const { address: accountId } = useAccount() const newCancelToken = useCancelToken() - async function fetchComputeJobs(type: string = 'init') { - if (!accountId) { - console.warn('No account ID available') - setIsLoading(false) - return - } - - try { - if (type === 'init') { - setIsLoading(true) - } else if (type === 'refresh') { - setIsRefreshing(true) + const fetchComputeJobs = useCallback( + async (type: string = 'init') => { + if (!accountId) { + console.warn('No account ID available') + setIsLoading(false) + return } - setError(null) - const response = await getAllComputeJobs(accountId, newCancelToken()) - - if (response?.computeJobs) { - const allJobs = response.computeJobs - - const matchingJobs = Object.entries(allJobs) - .filter(([jobId, job]: [string, ComputeJobMetaData]) => { - if (!job.assets || !Array.isArray(job.assets)) { - console.warn(`Job ${jobId} has no assets array.`) - return false - } - - const hasMatch = job.assets.some( - (assetObj: { documentId: string }) => - assetObj.documentId === asset?.id - ) - - const hasAlgorithmMatch = - job.algorithm && job.algorithm.documentId === asset?.id - - return hasMatch || hasAlgorithmMatch - }) - .map(([, job]) => job) - - setJobs(matchingJobs) - } else { - console.warn('No compute jobs found in response') + try { + if (type === 'init') { + setIsLoading(true) + } else if (type === 'refresh') { + setIsRefreshing(true) + } + + setError(null) + const response = await getAllComputeJobs(accountId, newCancelToken()) + + if (response?.computeJobs) { + const allJobs = response.computeJobs + + const matchingJobs = Object.entries(allJobs) + .filter(([jobId, job]: [string, ComputeJobMetaData]) => { + if (!job.assets || !Array.isArray(job.assets)) { + console.warn(`Job ${jobId} has no assets array.`) + return false + } + + const hasMatch = job.assets.some( + (assetObj: { documentId: string }) => + assetObj.documentId === asset?.id + ) + + const hasAlgorithmMatch = + job.algorithm && job.algorithm.documentId === asset?.id + + return hasMatch || hasAlgorithmMatch + }) + .map(([, job]) => job) + + setJobs(matchingJobs) + } else { + console.warn('No compute jobs found in response') + setJobs([]) + } + } catch (err) { + console.error('Error fetching compute jobs:', err) + setError('Failed to load compute jobs. Please try again.') setJobs([]) + } finally { + if (type === 'init') setIsLoading(false) + if (type === 'refresh') setIsRefreshing(false) } - } catch (err) { - console.error('Error fetching compute jobs:', err) - setError('Failed to load compute jobs. Please try again.') - setJobs([]) - } finally { - if (type === 'init') setIsLoading(false) - if (type === 'refresh') setIsRefreshing(false) - } - } + }, + [accountId, asset?.id, newCancelToken] + ) useEffect(() => { fetchComputeJobs('init') - }, [accountId, newCancelToken, refetchTrigger, asset?.id]) + }, [fetchComputeJobs, refetchTrigger]) + + const header = useMemo( + () => ( +
+

Your Compute Jobs

+ +
+ ), + [fetchComputeJobs, isRefreshing] + ) if (isLoading) { return ( @@ -106,22 +132,7 @@ const ComputeJobs = ({ if (jobs.length === 0) { return (
-
-

Your Compute Jobs

- -
+ {header}
No compute jobs found
) @@ -129,22 +140,7 @@ const ComputeJobs = ({ return (
-
-

Your Compute Jobs

- -
+ {header} {jobs.length === 0 ? (
No compute jobs found
diff --git a/src/components/@shared/ConsumerParametersSection/index.tsx b/src/components/@shared/ConsumerParametersSection/index.tsx index e15405fcd..ad692b857 100644 --- a/src/components/@shared/ConsumerParametersSection/index.tsx +++ b/src/components/@shared/ConsumerParametersSection/index.tsx @@ -10,7 +10,7 @@ import { FormPublishData } from '../../Publish/_types' interface ConsumerParametersSectionProps { title?: string fieldNamePrefix: string - type?: 'publishConsumerParameters' | 'consumerParameters' + type?: 'consumerParametersBuilder' | 'consumerParameters' help?: string } diff --git a/src/components/@shared/CopyToClipboard/index.module.css b/src/components/@shared/CopyToClipboard/index.module.css index aed7c941e..85ae9abaa 100644 --- a/src/components/@shared/CopyToClipboard/index.module.css +++ b/src/components/@shared/CopyToClipboard/index.module.css @@ -7,7 +7,7 @@ .textButton { border: none; background: transparent; - color: rgba(76, 163, 211, 0.9); + color: var(--ocean-bright-alpha-90); font-family: var(--font-family); font-size: 14px; cursor: pointer; @@ -39,11 +39,11 @@ } .copyButton:hover { - background: #ececec; + background: var(--neutral-150); } .badge { - color: #4caf50; + color: var(--green-600); font-size: 11px; display: inline-flex; align-items: center; @@ -58,7 +58,7 @@ .circle { fill: none; - stroke: #4caf50; + stroke: var(--green-600); stroke-width: 4px; stroke-dasharray: 62.83; stroke-dashoffset: 62.83; diff --git a/src/components/@shared/DebugOutput/index.module.css b/src/components/@shared/DebugOutput/index.module.css index 333252beb..4958a5497 100644 --- a/src/components/@shared/DebugOutput/index.module.css +++ b/src/components/@shared/DebugOutput/index.module.css @@ -19,8 +19,8 @@ overflow-y: auto; border-radius: 20px; background-color: var(--background-body); - border: 1px solid rgba(48, 48, 49, 0.24); - box-shadow: 1px 4px 8px 0 rgba(0, 0, 0, 0.15); + border: 1px solid var(--ink-alpha-24); + box-shadow: 1px 4px 8px 0 var(--black-alpha-15); font-family: 'Courier New', monospace; font-size: 0.875rem; line-height: 1.4; diff --git a/src/components/@shared/DeleteButton/DeleteButton.module.css b/src/components/@shared/DeleteButton/DeleteButton.module.css index fa617af5b..37777eb63 100644 --- a/src/components/@shared/DeleteButton/DeleteButton.module.css +++ b/src/components/@shared/DeleteButton/DeleteButton.module.css @@ -14,11 +14,11 @@ body .deleteButton { body .deleteButton:hover, body .deleteButton:focus { - border-color: var(--clr-navy-darker, #001f3f); - color: var(--clr-navy-darker, #001f3f); + border-color: var(--clr-navy-darker, var(--navy-900)); + color: var(--clr-navy-darker, var(--navy-900)); cursor: pointer; background: transparent; - fill: var(--clr-navy-darker, #001f3f); + fill: var(--clr-navy-darker, var(--navy-900)); cursor: pointer; transform: scale(1.02); box-shadow: 1px 2px 8px var(--box-shadow-color); diff --git a/src/components/@shared/FileDrop/index.tsx b/src/components/@shared/FileDrop/index.tsx deleted file mode 100644 index 8ed3441c7..000000000 --- a/src/components/@shared/FileDrop/index.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import { DragEvent, ReactElement, useState } from 'react' -import styles from './index.module.css' -import Button from '@shared/atoms/Button' -import { FileItem } from '@utils/fileItem' -import { hash } from 'ohash' - -export interface FileDropProps { - dropAreaLabel: string - onApply: ( - fileItems: FileItem[], - success: (message: string, msgDelay: number) => void, - error: (message: string, msgDelay: number) => void - ) => void - singleFile?: boolean - buttonLabel?: string - errorMessage?: string -} - -export function FileDrop({ - singleFile, - onApply, - dropAreaLabel, - buttonLabel, - errorMessage -}: FileDropProps): ReactElement { - const [dragIsOver, setDragIsOver] = useState(false) - const [files, setFiles] = useState([]) - const [message, setMessage] = useState('') - - function handleDragOver(event: DragEvent) { - event.preventDefault() - setDragIsOver(true) - setMessage('') - } - - function handleDragLeave(event: DragEvent) { - event.preventDefault() - setDragIsOver(false) - setMessage('') - } - - function handleDrop(event: DragEvent) { - event.preventDefault() - setDragIsOver(false) - - // Fetch the files - const droppedFiles = Array.from(event.dataTransfer.files) - - droppedFiles.forEach((file) => { - const reader = new FileReader() - - reader.onloadend = () => { - let content: string = '' - if (typeof reader.result === 'string') { - content = reader.result - } else { - const uint8Array = new Uint8Array(reader.result) - const decoder = new TextDecoder('utf-8') - content = decoder.decode(uint8Array) - } - - const newFileItem: FileItem = { - checksum: hash(content), - content, - size: content.length, - name: file.name - } - - if (singleFile) { - setFiles(() => [newFileItem]) - } else { - setFiles((prevList) => [...prevList, ...[newFileItem]]) - } - } - - reader.onerror = () => { - console.error( - `[FileDrop] There was an issue reading the file ${file.name}` - ) - } - - reader.readAsDataURL(file) - return reader - }) - - setMessage('') - } - - function handleApply() { - function success(message: string, msgDelay: number) { - setMessage(message) - - setTimeout(function () { - setMessage('') - }, msgDelay) - - setFiles([]) - } - - function error(message: string, msgDelay: number) { - setMessage(message) - - setTimeout(function () { - setMessage('') - }, msgDelay) - - setFiles([]) - } - - onApply(files, success, error) - } - - function handleRemove(itemToRemove: FileItem) { - const newList = files.filter((item) => { - return item !== itemToRemove - }) - setFiles(newList) - setMessage('') - } - - return ( -
-
-
- {message.length > 0 ? message : dropAreaLabel} -
- -
-
- {files.map((item: FileItem) => ( -
- - - {item.name} - -
- ))} -
- {errorMessage?.length > 0 ? ( -
{errorMessage}
- ) : ( - <> - )} -
- ) -} diff --git a/src/components/@shared/FormInput/InputElement/AssetSelection/index.module.css b/src/components/@shared/FormInput/InputElement/AssetSelection/index.module.css index 1fcfdf069..f629b64f0 100644 --- a/src/components/@shared/FormInput/InputElement/AssetSelection/index.module.css +++ b/src/components/@shared/FormInput/InputElement/AssetSelection/index.module.css @@ -36,8 +36,8 @@ } .row:hover { - background: var(--publish-background-hover); - border-radius: var(--publish-border-radius); + background: var(--surface-hover); + border-radius: var(--radius-xl); cursor: pointer; } @@ -85,10 +85,10 @@ } .didContainer { - font-family: var(--publish-font-family); + font-family: var(--font-family-base); font-style: normal; - font-weight: var(--publish-font-weight-normal); - font-size: var(--publish-font-size); + font-weight: var(--text-weight-regular); + font-size: var(--text-sm); color: var(--clr-did-text); } @@ -106,9 +106,9 @@ height: 16px; margin: 0; margin-right: 0; - border: 1px solid var(--publish-accent); - border-radius: var(--publish-border-radius-sm); - background: var(--publish-white); + border: 1px solid var(--clr-amber); + border-radius: var(--radius-compact); + background: var(--brand-white); cursor: pointer; position: relative; flex-shrink: 0; @@ -117,8 +117,8 @@ } .input:checked { - border-color: var(--publish-accent); - background: var(--publish-accent); + border-color: var(--clr-amber); + background: var(--clr-amber); } .input:checked::after { @@ -129,7 +129,7 @@ left: 50%; top: 50%; transform: translate(-50%, -60%) rotate(40deg); - border: 2px solid var(--publish-white); + border: 2px solid var(--brand-white); border-top: 0; border-left: 0; opacity: 1; @@ -148,7 +148,7 @@ top: 50%; left: 50%; transform: translate(-50%, -50%); - background: var(--publish-white); + background: var(--brand-white); border-radius: 50%; border: none; } @@ -158,12 +158,12 @@ } .title { - font-family: var(--publish-font-family); + font-family: var(--font-family-base); font-style: normal; - font-weight: var(--publish-font-weight-bold); - font-size: var(--publish-font-size); - line-height: var(--publish-line-height-base); - color: var(--publish-text); + font-weight: var(--text-weight-bold); + font-size: var(--text-sm); + line-height: var(--text-line-base); + color: var(--text-ink); margin: 0; display: flex; align-items: center; @@ -193,26 +193,26 @@ } .price { - font-family: var(--publish-font-family); + font-family: var(--font-family-base); font-style: normal; - font-weight: var(--publish-font-weight-bold); - font-size: var(--publish-font-size); - line-height: var(--publish-line-height-base); - color: var(--publish-text); + font-weight: var(--text-weight-bold); + font-size: var(--text-sm); + line-height: var(--text-line-base); + color: var(--text-ink); white-space: nowrap; } .price [class*='symbol'] { - font-size: var(--publish-font-size); + font-size: var(--text-sm); } .did { padding: 0; - font-family: var(--publish-font-family); + font-family: var(--font-family-base); font-style: normal; - font-weight: var(--publish-font-weight-normal); - font-size: var(--publish-font-size); - line-height: var(--publish-line-height-base); + font-weight: var(--text-weight-regular); + font-size: var(--text-sm); + line-height: var(--text-line-base); display: block; text-align: left; color: var(--font-color-did); diff --git a/src/components/@shared/FormInput/InputElement/AssetSelection/index.tsx b/src/components/@shared/FormInput/InputElement/AssetSelection/index.tsx index edc206709..85d54e034 100644 --- a/src/components/@shared/FormInput/InputElement/AssetSelection/index.tsx +++ b/src/components/@shared/FormInput/InputElement/AssetSelection/index.tsx @@ -39,7 +39,7 @@ export interface PublisherTrustedAlgorithmService { serviceId: string } -export function Empty({ message }: { message: string }) { +function Empty({ message }: { message: string }) { return
{message}
} diff --git a/src/components/@shared/FormInput/InputElement/BoxSelection/index.module.css b/src/components/@shared/FormInput/InputElement/BoxSelection/index.module.css index e0167a57f..8ea9cf3ed 100644 --- a/src/components/@shared/FormInput/InputElement/BoxSelection/index.module.css +++ b/src/components/@shared/FormInput/InputElement/BoxSelection/index.module.css @@ -13,11 +13,11 @@ display: block; flex: 1 1 0px; padding: 15px 25px; - border-radius: var(--publish-border-radius); - border: 1.5px solid var(--publish-border); + border-radius: var(--radius-xl); + border: 1.5px solid var(--border-navy-soft); color: var(--color-secondary); cursor: pointer; - box-shadow: -2px 0 8px 0 rgba(0, 0, 0, 0.15); + box-shadow: -2px 0 8px 0 var(--black-alpha-15); background: transparent; transition: all 0.2s ease-out; min-height: 90px; @@ -34,7 +34,7 @@ } :global(.publish) .title { - font-weight: var(--publish-font-weight-normal); + font-weight: var(--text-weight-regular); } .boxSelectionsWrapper input[type='radio'] { @@ -55,19 +55,19 @@ rgba(10, 75, 112, 0.8) 55.43%, #1e2e52 100% ); - box-shadow: 1px 4px 8px 0 rgba(0, 0, 0, 0.15); + box-shadow: 1px 4px 8px 0 var(--black-alpha-15); } .boxSelection svg { width: var(--font-size-h5); height: var(--font-size-h5); - fill: var(--publish-accent); + fill: var(--clr-amber); margin-bottom: calc(var(--spacer) / 5); transition: fill 0.2s ease-out, width 0.2s ease-out, height 0.2s ease-out; } .boxSelection svg path { - fill: var(--publish-accent); + fill: var(--clr-amber); } .boxSelectionsWrapper input[type='radio']:checked + label svg, @@ -126,7 +126,7 @@ min-height: 40px; max-height: 40px; padding: 8px 25px; - font-size: var(--publish-font-size); + font-size: var(--text-sm); display: flex; align-items: center; justify-content: center; @@ -134,7 +134,7 @@ } .small .boxSelection { - border: 1px solid var(--publish-input-border-color); + border: 1px solid var(--border-navy-soft); } .small .boxSelection svg { diff --git a/src/components/@shared/FormInput/InputElement/ComputeEnvSelection/ComputeEnvDetails.tsx b/src/components/@shared/FormInput/InputElement/ComputeEnvSelection/ComputeEnvDetails.tsx deleted file mode 100644 index bfd7fd16e..000000000 --- a/src/components/@shared/FormInput/InputElement/ComputeEnvSelection/ComputeEnvDetails.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import styles from './ComputeEnvDetails.module.css' -import CPU from '@images/cpu.svg' -import GPU from '@images/gpu.svg' - -function Row({ label, value }: { label: string; value: string | number }) { - return ( -
- {value} - {` ${label}`} -
- ) -} - -export default function ComputeEnvDetails({ - computeEnv -}: { - computeEnv: ComputeEnvironmentExtended -}) { - const { id, description, maxJobs } = computeEnv - - // ToDo: ComputeEnvironmentExtended - needs to be adapted for the new data structure - const gpuNumber = 0 - const gpuType = '' - const cpuNumber = 0 - const cpuType = '' - const ramGB = '' - const diskGB = '' - const currentJobs = 0 - return ( -
-
-
-

{description || id}

-
- {gpuNumber > 0 ? : } -
- -
-

{`${ - gpuNumber > 0 ? 'GPU' : 'CPU' - } Cluster`}

-

- {gpuNumber > 0 && gpuType - ? gpuType - : cpuNumber > 0 && cpuType - ? cpuType - : 'type: N/A'} -

-
-
- 0 ? gpuNumber || 'N/A' : cpuNumber || 'N/A'}`} - /> - - -
-
- -
-
- ) -} diff --git a/src/components/@shared/FormInput/InputElement/ComputeEnvSelection/index.tsx b/src/components/@shared/FormInput/InputElement/ComputeEnvSelection/index.tsx index 1c09580b3..718c4742a 100644 --- a/src/components/@shared/FormInput/InputElement/ComputeEnvSelection/index.tsx +++ b/src/components/@shared/FormInput/InputElement/ComputeEnvSelection/index.tsx @@ -133,7 +133,11 @@ export default function ComputeEnvSelection({ return (