diff --git a/contracts/RewardsManager.sol b/contracts/RewardsManager.sol index 350aecf..f4945f3 100644 --- a/contracts/RewardsManager.sol +++ b/contracts/RewardsManager.sol @@ -177,12 +177,17 @@ contract RewardsManager { return result; } + struct OrderDetails { + uint256 id; + uint256 pendingQuantity; + } + struct PendingOrderDto { address user; - uint256[] rewardsArray; - uint256[] pendingArray; + OrderDetails[] orders; } + function getAllPendingOrders() public view @@ -199,22 +204,21 @@ contract RewardsManager { if (paymentsManager.isCurrentEmployee(user)) { - uint256[] memory rewardsArray = new uint256[](rewardCount); - uint256[] memory pendingArray = new uint256[](rewardCount); + OrderDetails[] memory userOrders = new OrderDetails[](rewardCount); for (uint256 i = 0; i < rewardCount; i++) { - rewardsArray[i] = rewards[i].id; + OrderDetails memory order; + order.id = rewards[i].id; + if (orders[user][i] > 0) { - pendingArray[i] = orders[user][i] - collected[user][i]; - } else { - pendingArray[i] = 0; + order.pendingQuantity = orders[user][i] - collected[user][i]; } + userOrders[i] = order; } PendingOrderDto memory dto = PendingOrderDto( user, - rewardsArray, - pendingArray + userOrders ); dtos[dtoCounter] = dto; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 840ea4d..180c13e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -10,14 +10,19 @@ "dependencies": { "@chakra-ui/icons": "^2.0.16", "@chakra-ui/react": "^2.4.6", + "@radix-ui/react-scroll-area": "^1.0.2", "@tanstack/react-query": "^4.20.9", + "@tanstack/react-table": "^8.7.6", "@types/jest": "^29.2.5", "@types/node": "^18.11.18", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.10", "@typescript-eslint/eslint-plugin": "^5.48.0", "@vitejs/plugin-react": "^3.0.1", + "buffer": "^6.0.3", "ethers": "^5.4.7", + "ipfs-http-client": "^60.0.0", + "jazzicon-ts": "^2.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.6.1", @@ -2048,6 +2053,11 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@chainsafe/is-ip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz", + "integrity": "sha512-nqSJ8u2a1Rv9FYbyI8qpDhTYujaKEyLknNrTejLYoSWmdeg+2WB7R6BZqPZYfrJzDxVi3rl6ZQuoaEvpKRZWgQ==" + }, "node_modules/@chakra-ui/accordion": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-2.1.5.tgz", @@ -4424,6 +4434,44 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@ipld/dag-cbor": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.0.tgz", + "integrity": "sha512-zdsiSiYDEOIDW7mmWOYWC9gukjXO+F8wqxz/LfN7iSwTfIyipC8+UQrCbPupFMRb/33XQTZk8yl3My8vUQBRoA==", + "dependencies": { + "cborg": "^1.10.0", + "multiformats": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-json": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.0.1.tgz", + "integrity": "sha512-XE1Eqw3eNVrSfOhtqCM/gwCxEgYFBzkDlkwhEeMmMvhd0rLBfSyVzXbahZSlv97tiTPEIx5rt41gcFAda3W8zg==", + "dependencies": { + "cborg": "^1.10.0", + "multiformats": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-pb": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.0.0.tgz", + "integrity": "sha512-8FB/qTlNowCiszL9Sek8xH6xIQxIioXuzZ5B1jVPknQMVkd08nZUHzDjrn1Y6MqJ5PrXWLrBwNghGMWPPpvNVw==", + "dependencies": { + "multiformats": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -5230,6 +5278,115 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, + "node_modules/@libp2p/interface-connection": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-3.0.8.tgz", + "integrity": "sha512-JiI9xVPkiSgW9hkvHWA4e599OLPNSACrpgtx6UffHG9N+Jpt0IOmM4iLic8bSIYkZJBOQFG1Sv/gVNB98Uq0Nw==", + "dependencies": { + "@libp2p/interface-peer-id": "^2.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^11.0.0", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^2.1.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-keychain": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interface-keychain/-/interface-keychain-2.0.4.tgz", + "integrity": "sha512-RCH0PL9um/ejsPiWIOzxFzjPzL2nT2tRUtCDo1aBQqoBi7eYp4I4ya1KbzgWDPTmNuuFtCReRMQsZ7/KVirKPA==", + "dependencies": { + "@libp2p/interface-peer-id": "^2.0.0", + "multiformats": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-peer-id": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-id/-/interface-peer-id-2.0.1.tgz", + "integrity": "sha512-k01hKHTAZWMOiBC+yyFsmBguEMvhPkXnQtqLtFqga2fVZu8Zve7zFAtQYLhQjeJ4/apeFtO6ddTS8mCE6hl4OA==", + "dependencies": { + "multiformats": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-peer-info": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-info/-/interface-peer-info-1.0.8.tgz", + "integrity": "sha512-LRvZt/9bZFYW7seAwuSg2hZuPl+FRTAsij5HtyvVwmpfVxipm6yQrKjQ+LiK/SZhIDVsSJ+UjF0mluJj+jeAzQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^2.0.0", + "@multiformats/multiaddr": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-pubsub": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@libp2p/interface-pubsub/-/interface-pubsub-3.0.6.tgz", + "integrity": "sha512-c1aVHAhxmEh9IpLBgJyCsMscVDl7YUeP1Iq6ILEQoWiPJhNpQqdfmqyk7ZfrzuBU19VFe1EqH0bLuLDbtfysTQ==", + "dependencies": { + "@libp2p/interface-connection": "^3.0.0", + "@libp2p/interface-peer-id": "^2.0.0", + "@libp2p/interfaces": "^3.0.0", + "it-pushable": "^3.0.0", + "uint8arraylist": "^2.1.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interfaces": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-3.3.1.tgz", + "integrity": "sha512-3N+goQt74SmaVOjwpwMPKLNgh1uDQGw8GD12c40Kc86WOq0qvpm3NfACW+H8Su2X6KmWjCSMzk9JWs9+8FtUfg==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/logger": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.5.tgz", + "integrity": "sha512-WEhxsc7+gsfuTcljI4vSgW/H2f18aBaC+JiO01FcX841Wxe9szjzHdBLDh9eqygUlzoK0LEeIBfctN7ibzus5A==", + "dependencies": { + "@libp2p/interface-peer-id": "^2.0.0", + "debug": "^4.3.3", + "interface-datastore": "^7.0.0", + "multiformats": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-id": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-2.0.1.tgz", + "integrity": "sha512-uGIR4rS+j+IzzIu0kih4MonZEfRmjGNfXaSPMIFOeMxZItZT6TIpxoVNYxHl4YtneSFKzlLnf9yx9EhRcyfy8Q==", + "dependencies": { + "@libp2p/interface-peer-id": "^2.0.0", + "@libp2p/interfaces": "^3.2.0", + "multiformats": "^11.0.0", + "uint8arrays": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@motionone/animation": { "version": "10.15.1", "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.15.1.tgz", @@ -5294,6 +5451,35 @@ "tslib": "^2.3.1" } }, + "node_modules/@multiformats/multiaddr": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-11.4.0.tgz", + "integrity": "sha512-rLIhSOCKQhm/fCjg+5tVM9xrtjbZjZKJg6bb65YbFsNoPSYhweEohXO8Pkg2xbRy3NqVEVkS+8DB/+VhNvjd5Q==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "dns-over-http-resolver": "^2.1.0", + "err-code": "^3.0.1", + "multiformats": "^11.0.0", + "uint8arrays": "^4.0.2", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@multiformats/multiaddr-to-uri": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-9.0.2.tgz", + "integrity": "sha512-vrWmfFadmix5Ab9l//oRQdQ7O3J5bGJpJRMSm21bHlQB0XV4xtNU6vMZBVXeu3Su79LgflEp37cjTFE3yKf3Hw==", + "dependencies": { + "@multiformats/multiaddr": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -5567,6 +5753,191 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@radix-ui/number": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.2.tgz", + "integrity": "sha512-k8VseTxI26kcKJaX0HPwkvlNBPTs56JRdYzcZ/vzrNUkDlvXBy8sMc7WvCpYzZkHgb+hd72VW9MqkqecGtuNgg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@remix-run/router": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", @@ -5950,6 +6321,37 @@ } } }, + "node_modules/@tanstack/react-table": { + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.7.6.tgz", + "integrity": "sha512-/QijmMFeP7wDLBnr0MQ/5MlbXePbIL/1nOtkxBC9zvmBu4gDKJEDBqipUyM7Wc/iBpSd0IFyqBlvZvTPD9FYDA==", + "dependencies": { + "@tanstack/table-core": "8.7.6" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.7.6.tgz", + "integrity": "sha512-sqiNTMzB6cpyL8DFH6/VqW48SwiflLqxQqYpo2wNock7rdVGvlm0BLNI8vZUJbr1+fmmWmHwBvi5OMgZw8n1DA==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -6429,6 +6831,11 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, "node_modules/@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", @@ -7596,6 +8003,11 @@ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, + "node_modules/any-signal": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-3.0.1.tgz", + "integrity": "sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==" + }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -8214,8 +8626,26 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/batch": { "version": "0.6.1", @@ -8267,6 +8697,18 @@ "node": ">=8" } }, + "node_modules/blob-to-it": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/blob-to-it/-/blob-to-it-2.0.0.tgz", + "integrity": "sha512-O9P902MzxHg8fjIAzmK4HSo9WmcMn1ACJvSHJvIYWDr4na7GLyR5iQTf0i2EXlnM5EIWmWtk+vh38tTph9JiPA==", + "dependencies": { + "browser-readablestream-to-it": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -8360,7 +8802,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8388,6 +8829,15 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "node_modules/browser-readablestream-to-it": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.0.tgz", + "integrity": "sha512-x7L6NN0FF0LchYKA7D5x2/oJ+n6Y8A0gFaazIxH2AkHr+fjFJvsDUYLLQKAfIkpKiLjQEkbjF0DBw7HRT1ylNA==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/browserslist": { "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", @@ -8424,6 +8874,29 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -8442,6 +8915,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -8538,6 +9022,14 @@ "node": ">=4" } }, + "node_modules/cborg": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.0.tgz", + "integrity": "sha512-/eM0JCaL99HDHxjySNQJLaolZFVdl6VA0/hEKIoiQPcQzE5LrG5QHdml0HaBt31brgB9dNe1zMr3f8IVrpotRQ==", + "bin": { + "cborg": "cli.js" + } + }, "node_modules/chai": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", @@ -8848,8 +9340,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/confusing-browser-globals": { "version": "1.0.11", @@ -9447,6 +9938,15 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, + "node_modules/dag-jose": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dag-jose/-/dag-jose-4.0.0.tgz", + "integrity": "sha512-tw595L3UYoOUT9dSJPbBEG/qpRpw24kRZxa5SLRnlnr+g5L7O8oEs1d3W5TiVA1oJZbthVsf0Vi3zFN66qcEBA==", + "dependencies": { + "@ipld/dag-cbor": "^9.0.0", + "multiformats": "^11.0.0" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -9741,6 +10241,21 @@ "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", "dev": true }, + "node_modules/dns-over-http-resolver": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-2.1.1.tgz", + "integrity": "sha512-Lm/eXB7yAQLJ5WxlBGwYfBY7utduXPZykcSmcG6K7ozM0wrZFvxZavhT6PqI0kd/5CUTfev/RrEFQqyU4CGPew==", + "dependencies": { + "debug": "^4.3.1", + "native-fetch": "^4.0.2", + "receptacle": "^1.3.2", + "undici": "^5.12.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/dns-packet": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", @@ -9902,6 +10417,17 @@ "node": ">=0.10.0" } }, + "node_modules/electron-fetch": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz", + "integrity": "sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==", + "dependencies": { + "encoding": "^0.1.13" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", @@ -9962,6 +10488,14 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, "node_modules/enhanced-resolve": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", @@ -9984,6 +10518,11 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -11598,6 +12137,11 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, + "node_modules/fast-fifo": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.1.0.tgz", + "integrity": "sha512-Kl29QoNbNvn4nhDsLYjyIAaIqaJB6rBx5p3sL9VjaefJ+eMFBWVZiaoguaoZfzEKr5RhAti0UgM8703akGPJ6g==" + }, "node_modules/fast-glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", @@ -12247,6 +12791,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", + "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==" + }, "node_modules/get-nonce": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", @@ -12860,7 +13409,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -12898,6 +13446,25 @@ "node": ">=4" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -12989,6 +13556,40 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/interface-datastore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-7.0.4.tgz", + "integrity": "sha512-Q8LZS/jfFFHz6XyZazLTAc078SSCoa27ZPBOfobWdpDiFO7FqPA2yskitUJIhaCgxNK8C+/lMBUTBNfVIDvLiw==", + "dependencies": { + "interface-store": "^3.0.0", + "nanoid": "^4.0.0", + "uint8arrays": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/interface-datastore/node_modules/nanoid": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.1.tgz", + "integrity": "sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/interface-store": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-3.0.4.tgz", + "integrity": "sha512-OjHUuGXbH4eXSBx1TF1tTySvjLldPLzRSYYXJwrEQI+XfH5JWYZofr0gVMV4F8XTwC+4V7jomDYkvGRmDSRKqQ==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/internal-slot": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", @@ -13020,6 +13621,157 @@ "node": ">= 10" } }, + "node_modules/ipfs-core-types": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/ipfs-core-types/-/ipfs-core-types-0.14.0.tgz", + "integrity": "sha512-qO1xVO3n5m7scTXXtMz8hDTLdwXInnwqadIDQpXC446BIlaYyRWUvLcFQ2bOjQql9/CPNTaPHzjzr5Y1XxqpJw==", + "dependencies": { + "@ipld/dag-pb": "^4.0.0", + "@libp2p/interface-keychain": "^2.0.0", + "@libp2p/interface-peer-id": "^2.0.0", + "@libp2p/interface-peer-info": "^1.0.2", + "@libp2p/interface-pubsub": "^3.0.0", + "@multiformats/multiaddr": "^11.0.0", + "@types/node": "^18.0.0", + "interface-datastore": "^7.0.0", + "ipfs-unixfs": "^9.0.0", + "multiformats": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/ipfs-core-utils": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/ipfs-core-utils/-/ipfs-core-utils-0.18.0.tgz", + "integrity": "sha512-7N/KfsOPGJu9mwN8EQwrW9HXgS5RNM3WUyjIMWk49KlpYmsXectXuC9i6npI1vn1W/oUaIOZt3lHx37jecnepw==", + "dependencies": { + "@libp2p/logger": "^2.0.0", + "@multiformats/multiaddr": "^11.0.0", + "@multiformats/multiaddr-to-uri": "^9.0.1", + "any-signal": "^3.0.0", + "blob-to-it": "^2.0.0", + "browser-readablestream-to-it": "^2.0.0", + "err-code": "^3.0.1", + "ipfs-core-types": "^0.14.0", + "ipfs-unixfs": "^9.0.0", + "ipfs-utils": "^9.0.13", + "it-all": "^2.0.0", + "it-map": "^2.0.0", + "it-peekable": "^2.0.0", + "it-to-stream": "^1.0.0", + "merge-options": "^3.0.4", + "multiformats": "^11.0.0", + "nanoid": "^4.0.0", + "parse-duration": "^1.0.0", + "timeout-abort-controller": "^3.0.0", + "uint8arrays": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/ipfs-core-utils/node_modules/nanoid": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.1.tgz", + "integrity": "sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/ipfs-http-client": { + "version": "60.0.0", + "resolved": "https://registry.npmjs.org/ipfs-http-client/-/ipfs-http-client-60.0.0.tgz", + "integrity": "sha512-d6Rqc1UP5nWhp7j0PumK80CA5LvbTvskro+qGw7hgWvbfQ0rX/5ddig7ELvVYJbJM4YBxCJSaSHDEOGoSpzzKg==", + "dependencies": { + "@ipld/dag-cbor": "^9.0.0", + "@ipld/dag-json": "^10.0.0", + "@ipld/dag-pb": "^4.0.0", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^2.0.0", + "@multiformats/multiaddr": "^11.0.0", + "any-signal": "^3.0.0", + "dag-jose": "^4.0.0", + "err-code": "^3.0.1", + "ipfs-core-types": "^0.14.0", + "ipfs-core-utils": "^0.18.0", + "ipfs-utils": "^9.0.13", + "it-first": "^2.0.0", + "it-last": "^2.0.0", + "merge-options": "^3.0.4", + "multiformats": "^11.0.0", + "parse-duration": "^1.0.0", + "stream-to-it": "^0.2.2", + "uint8arrays": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/ipfs-unixfs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-9.0.1.tgz", + "integrity": "sha512-jh2CbXyxID+v3jLml9CqMwjdSS9ZRnsGfQGGPOfem0/hT/L48xUeTPvh7qLFWkZcIMhZtG+fnS1teei8x5uGBg==", + "dependencies": { + "err-code": "^3.0.1", + "protobufjs": "^7.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/ipfs-utils": { + "version": "9.0.14", + "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.14.tgz", + "integrity": "sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg==", + "dependencies": { + "any-signal": "^3.0.0", + "browser-readablestream-to-it": "^1.0.0", + "buffer": "^6.0.1", + "electron-fetch": "^1.7.2", + "err-code": "^3.0.1", + "is-electron": "^2.2.0", + "iso-url": "^1.1.5", + "it-all": "^1.0.4", + "it-glob": "^1.0.1", + "it-to-stream": "^1.0.0", + "merge-options": "^3.0.4", + "nanoid": "^3.1.20", + "native-fetch": "^3.0.0", + "node-fetch": "^2.6.8", + "react-native-fetch-api": "^3.0.0", + "stream-to-it": "^0.2.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/ipfs-utils/node_modules/browser-readablestream-to-it": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.3.tgz", + "integrity": "sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw==" + }, + "node_modules/ipfs-utils/node_modules/it-all": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz", + "integrity": "sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==" + }, + "node_modules/ipfs-utils/node_modules/native-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", + "integrity": "sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==", + "peerDependencies": { + "node-fetch": "*" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -13148,6 +13900,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-electron": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.1.tgz", + "integrity": "sha512-r8EEQQsqT+Gn0aXFx7lTFygYQhILLCB+wn0WCDL5LZRINeLH/Rvw1j2oKodELLXYNImQ3CRlVsY8wW4cGOsyuw==" + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -13462,6 +14219,14 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/iso-url": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", + "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", + "engines": { + "node": ">=12" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -13567,6 +14332,91 @@ "node": ">=8" } }, + "node_modules/it-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-2.0.0.tgz", + "integrity": "sha512-I/yi9ogTY59lFxtfsDSlI9w9QZtC/5KJt6g7CPPBJJh2xql2ZS7Ghcp9hoqDDbc4QfwQvtx8Loy0zlKQ8H5gFg==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-first": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-2.0.0.tgz", + "integrity": "sha512-fzZGzVf01exFyIZXNjkpSMFr1eW2+J1K0v018tYY26Dd4f/O3pWlBTdrOBfSQRZwtI8Pst6c7eKhYczWvFs6tA==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-glob": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-1.0.2.tgz", + "integrity": "sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==", + "dependencies": { + "@types/minimatch": "^3.0.4", + "minimatch": "^3.0.4" + } + }, + "node_modules/it-last": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-last/-/it-last-2.0.0.tgz", + "integrity": "sha512-u0GHZ01tWYtPvDkOaqZSLLWjFv3IJw9cPL9mbEV7wnE8DOsbVoXIuKpnz3U6pySl5RzPVjTzSHOc961ZYttBxg==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-2.0.0.tgz", + "integrity": "sha512-mLgtk/NZaN7NZ06iLrMXCA6jjhtZO0vZT5Ocsp31H+nsGI18RSPVmUbFyA1sWx7q+g92J22Sixya7T2QSSAwfA==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-peekable": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-2.0.0.tgz", + "integrity": "sha512-+eacms2jr2wQqIRxU25eqWPHaEeR4IurrS9hTScmCJpWagRkC8WHw7atciEA6KArOiyxHCAXg5Q5We7/RhvqAQ==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-pushable": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.1.2.tgz", + "integrity": "sha512-zU9FbeoGT0f+yobwm8agol2OTMXbq4ZSWLEi7hug6TEZx4qVhGhGyp31cayH04aBYsIoO2Nr5kgMjH/oWj2BJQ==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-stream-types": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-1.0.5.tgz", + "integrity": "sha512-I88Ka1nHgfX62e5mi5LLL+oueqz7Ltg0bUdtsUKDe9SoUqbQPf2Mp5kxDTe9pNhHQGs4pvYPAINwuZ1HAt42TA==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-to-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz", + "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", + "dependencies": { + "buffer": "^6.0.3", + "fast-fifo": "^1.0.0", + "get-iterator": "^1.0.2", + "p-defer": "^3.0.0", + "p-fifo": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, "node_modules/jake": { "version": "10.8.5", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", @@ -13655,6 +14505,14 @@ "node": ">=8" } }, + "node_modules/jazzicon-ts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jazzicon-ts/-/jazzicon-ts-2.0.0.tgz", + "integrity": "sha512-Yf+FyyrZDIiTaDfs/N+oBL4AKrhzWFjnqopHPJLWM2McIVRzc1D3EN11dwrftCoD1kLdhrAViCoThl9u7eqM+w==", + "engines": { + "node": ">=16" + } + }, "node_modules/jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", @@ -16008,6 +16866,11 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -16124,6 +16987,25 @@ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-options/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -16288,7 +17170,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16332,6 +17213,15 @@ "multicast-dns": "cli.js" } }, + "node_modules/multiformats": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.1.tgz", + "integrity": "sha512-atWruyH34YiknSdL5yeIir00EDlJRpHzELYQxG7Iy29eCyL+VrZHpPrX5yqlik3jnuqpLpRKVZ0SGVb9UzKaSA==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -16354,6 +17244,14 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/native-fetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz", + "integrity": "sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==", + "peerDependencies": { + "undici": "*" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -16392,10 +17290,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -16414,20 +17311,17 @@ "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -16746,6 +17640,23 @@ "node": ">= 0.8.0" } }, + "node_modules/p-defer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-fifo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz", + "integrity": "sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==", + "dependencies": { + "fast-fifo": "^1.0.0", + "p-defer": "^3.0.0" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -16819,6 +17730,11 @@ "node": ">=6" } }, + "node_modules/parse-duration": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-1.0.2.tgz", + "integrity": "sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg==" + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -18430,6 +19346,29 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/protobufjs": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.2.tgz", + "integrity": "sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -18803,6 +19742,14 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "node_modules/react-native-fetch-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz", + "integrity": "sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==", + "dependencies": { + "p-defer": "^3.0.0" + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -19032,7 +19979,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -19054,6 +20000,14 @@ "node": ">=8.10.0" } }, + "node_modules/receptacle": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", + "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/recrawl-sync": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.3.tgz", @@ -19360,6 +20314,11 @@ "node": ">=10" } }, + "node_modules/retimer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/retimer/-/retimer-3.0.0.tgz", + "integrity": "sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==" + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -19579,8 +20538,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sanitize.css": { "version": "13.0.0", @@ -20078,11 +21036,26 @@ "node": ">= 0.8" } }, + "node_modules/stream-to-it": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz", + "integrity": "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==", + "dependencies": { + "get-iterator": "^1.0.2" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -20091,7 +21064,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -20737,6 +21709,14 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "node_modules/timeout-abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz", + "integrity": "sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==", + "dependencies": { + "retimer": "^3.0.0" + } + }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -20997,6 +21977,30 @@ "node": ">=4.2.0" } }, + "node_modules/uint8arraylist": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.3.tgz", + "integrity": "sha512-oEVZr4/GrH87K0kjNce6z8pSCzLEPqHNLNR5sj8cJOySrTP8Vb/pMIbZKLJGhQKxm1TiZ31atNrpn820Pyqpow==", + "dependencies": { + "uint8arrays": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/uint8arrays": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.3.tgz", + "integrity": "sha512-b+aKlI2oTnxnfeSQWV1sMacqSNxqhtXySaH6bflvONGxF8V/fT3ZlYH7z2qgGfydsvpVo4JUgM/Ylyfl2YouCg==", + "dependencies": { + "multiformats": "^11.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -21012,6 +22016,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.19.0.tgz", + "integrity": "sha512-7XnhXXW0/AMTx17x1T3OOYY14FGiXbkyE/itv4jY1v8CnSQBMXW3yZ/Ppt7YlOv1D63tm9N4g5Au1Abe+gwpkw==", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -21190,8 +22205,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/util.promisify": { "version": "1.0.1", @@ -21246,6 +22260,11 @@ "node": ">=10.12.0" } }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -24435,6 +25454,11 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@chainsafe/is-ip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz", + "integrity": "sha512-nqSJ8u2a1Rv9FYbyI8qpDhTYujaKEyLknNrTejLYoSWmdeg+2WB7R6BZqPZYfrJzDxVi3rl6ZQuoaEvpKRZWgQ==" + }, "@chakra-ui/accordion": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-2.1.5.tgz", @@ -26042,6 +27066,32 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@ipld/dag-cbor": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.0.tgz", + "integrity": "sha512-zdsiSiYDEOIDW7mmWOYWC9gukjXO+F8wqxz/LfN7iSwTfIyipC8+UQrCbPupFMRb/33XQTZk8yl3My8vUQBRoA==", + "requires": { + "cborg": "^1.10.0", + "multiformats": "^11.0.0" + } + }, + "@ipld/dag-json": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.0.1.tgz", + "integrity": "sha512-XE1Eqw3eNVrSfOhtqCM/gwCxEgYFBzkDlkwhEeMmMvhd0rLBfSyVzXbahZSlv97tiTPEIx5rt41gcFAda3W8zg==", + "requires": { + "cborg": "^1.10.0", + "multiformats": "^11.0.0" + } + }, + "@ipld/dag-pb": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.0.0.tgz", + "integrity": "sha512-8FB/qTlNowCiszL9Sek8xH6xIQxIioXuzZ5B1jVPknQMVkd08nZUHzDjrn1Y6MqJ5PrXWLrBwNghGMWPPpvNVw==", + "requires": { + "multiformats": "^11.0.0" + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -26658,6 +27708,83 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, + "@libp2p/interface-connection": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-3.0.8.tgz", + "integrity": "sha512-JiI9xVPkiSgW9hkvHWA4e599OLPNSACrpgtx6UffHG9N+Jpt0IOmM4iLic8bSIYkZJBOQFG1Sv/gVNB98Uq0Nw==", + "requires": { + "@libp2p/interface-peer-id": "^2.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^11.0.0", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^2.1.2" + } + }, + "@libp2p/interface-keychain": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interface-keychain/-/interface-keychain-2.0.4.tgz", + "integrity": "sha512-RCH0PL9um/ejsPiWIOzxFzjPzL2nT2tRUtCDo1aBQqoBi7eYp4I4ya1KbzgWDPTmNuuFtCReRMQsZ7/KVirKPA==", + "requires": { + "@libp2p/interface-peer-id": "^2.0.0", + "multiformats": "^11.0.0" + } + }, + "@libp2p/interface-peer-id": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-id/-/interface-peer-id-2.0.1.tgz", + "integrity": "sha512-k01hKHTAZWMOiBC+yyFsmBguEMvhPkXnQtqLtFqga2fVZu8Zve7zFAtQYLhQjeJ4/apeFtO6ddTS8mCE6hl4OA==", + "requires": { + "multiformats": "^11.0.0" + } + }, + "@libp2p/interface-peer-info": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-info/-/interface-peer-info-1.0.8.tgz", + "integrity": "sha512-LRvZt/9bZFYW7seAwuSg2hZuPl+FRTAsij5HtyvVwmpfVxipm6yQrKjQ+LiK/SZhIDVsSJ+UjF0mluJj+jeAzQ==", + "requires": { + "@libp2p/interface-peer-id": "^2.0.0", + "@multiformats/multiaddr": "^11.0.0" + } + }, + "@libp2p/interface-pubsub": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@libp2p/interface-pubsub/-/interface-pubsub-3.0.6.tgz", + "integrity": "sha512-c1aVHAhxmEh9IpLBgJyCsMscVDl7YUeP1Iq6ILEQoWiPJhNpQqdfmqyk7ZfrzuBU19VFe1EqH0bLuLDbtfysTQ==", + "requires": { + "@libp2p/interface-connection": "^3.0.0", + "@libp2p/interface-peer-id": "^2.0.0", + "@libp2p/interfaces": "^3.0.0", + "it-pushable": "^3.0.0", + "uint8arraylist": "^2.1.2" + } + }, + "@libp2p/interfaces": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-3.3.1.tgz", + "integrity": "sha512-3N+goQt74SmaVOjwpwMPKLNgh1uDQGw8GD12c40Kc86WOq0qvpm3NfACW+H8Su2X6KmWjCSMzk9JWs9+8FtUfg==" + }, + "@libp2p/logger": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.5.tgz", + "integrity": "sha512-WEhxsc7+gsfuTcljI4vSgW/H2f18aBaC+JiO01FcX841Wxe9szjzHdBLDh9eqygUlzoK0LEeIBfctN7ibzus5A==", + "requires": { + "@libp2p/interface-peer-id": "^2.0.0", + "debug": "^4.3.3", + "interface-datastore": "^7.0.0", + "multiformats": "^11.0.0" + } + }, + "@libp2p/peer-id": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-2.0.1.tgz", + "integrity": "sha512-uGIR4rS+j+IzzIu0kih4MonZEfRmjGNfXaSPMIFOeMxZItZT6TIpxoVNYxHl4YtneSFKzlLnf9yx9EhRcyfy8Q==", + "requires": { + "@libp2p/interface-peer-id": "^2.0.0", + "@libp2p/interfaces": "^3.2.0", + "multiformats": "^11.0.0", + "uint8arrays": "^4.0.2" + } + }, "@motionone/animation": { "version": "10.15.1", "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.15.1.tgz", @@ -26722,6 +27849,27 @@ "tslib": "^2.3.1" } }, + "@multiformats/multiaddr": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-11.4.0.tgz", + "integrity": "sha512-rLIhSOCKQhm/fCjg+5tVM9xrtjbZjZKJg6bb65YbFsNoPSYhweEohXO8Pkg2xbRy3NqVEVkS+8DB/+VhNvjd5Q==", + "requires": { + "@chainsafe/is-ip": "^2.0.1", + "dns-over-http-resolver": "^2.1.0", + "err-code": "^3.0.1", + "multiformats": "^11.0.0", + "uint8arrays": "^4.0.2", + "varint": "^6.0.0" + } + }, + "@multiformats/multiaddr-to-uri": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-9.0.2.tgz", + "integrity": "sha512-vrWmfFadmix5Ab9l//oRQdQ7O3J5bGJpJRMSm21bHlQB0XV4xtNU6vMZBVXeu3Su79LgflEp37cjTFE3yKf3Hw==", + "requires": { + "@multiformats/multiaddr": "^11.0.0" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -26908,6 +28056,161 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@radix-ui/number": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + }, + "@radix-ui/react-scroll-area": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.2.tgz", + "integrity": "sha512-k8VseTxI26kcKJaX0HPwkvlNBPTs56JRdYzcZ/vzrNUkDlvXBy8sMc7WvCpYzZkHgb+hd72VW9MqkqecGtuNgg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + }, + "@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, "@remix-run/router": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", @@ -27143,6 +28446,19 @@ "use-sync-external-store": "^1.2.0" } }, + "@tanstack/react-table": { + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.7.6.tgz", + "integrity": "sha512-/QijmMFeP7wDLBnr0MQ/5MlbXePbIL/1nOtkxBC9zvmBu4gDKJEDBqipUyM7Wc/iBpSd0IFyqBlvZvTPD9FYDA==", + "requires": { + "@tanstack/table-core": "8.7.6" + } + }, + "@tanstack/table-core": { + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.7.6.tgz", + "integrity": "sha512-sqiNTMzB6cpyL8DFH6/VqW48SwiflLqxQqYpo2wNock7rdVGvlm0BLNI8vZUJbr1+fmmWmHwBvi5OMgZw8n1DA==" + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -27563,6 +28879,11 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, "@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", @@ -28428,6 +29749,11 @@ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, + "any-signal": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-3.0.1.tgz", + "integrity": "sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==" + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -28895,8 +30221,12 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "batch": { "version": "0.6.1", @@ -28939,6 +30269,14 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "blob-to-it": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/blob-to-it/-/blob-to-it-2.0.0.tgz", + "integrity": "sha512-O9P902MzxHg8fjIAzmK4HSo9WmcMn1ACJvSHJvIYWDr4na7GLyR5iQTf0i2EXlnM5EIWmWtk+vh38tTph9JiPA==", + "requires": { + "browser-readablestream-to-it": "^2.0.0" + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -29024,7 +30362,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -29049,6 +30386,11 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "browser-readablestream-to-it": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.0.tgz", + "integrity": "sha512-x7L6NN0FF0LchYKA7D5x2/oJ+n6Y8A0gFaazIxH2AkHr+fjFJvsDUYLLQKAfIkpKiLjQEkbjF0DBw7HRT1ylNA==" + }, "browserslist": { "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", @@ -29069,6 +30411,15 @@ "node-int64": "^0.4.0" } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -29081,6 +30432,14 @@ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "requires": { + "streamsearch": "^1.1.0" + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -29146,6 +30505,11 @@ "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true }, + "cborg": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.0.tgz", + "integrity": "sha512-/eM0JCaL99HDHxjySNQJLaolZFVdl6VA0/hEKIoiQPcQzE5LrG5QHdml0HaBt31brgB9dNe1zMr3f8IVrpotRQ==" + }, "chai": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", @@ -29402,8 +30766,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "confusing-browser-globals": { "version": "1.0.11", @@ -29821,6 +31184,15 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, + "dag-jose": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dag-jose/-/dag-jose-4.0.0.tgz", + "integrity": "sha512-tw595L3UYoOUT9dSJPbBEG/qpRpw24kRZxa5SLRnlnr+g5L7O8oEs1d3W5TiVA1oJZbthVsf0Vi3zFN66qcEBA==", + "requires": { + "@ipld/dag-cbor": "^9.0.0", + "multiformats": "^11.0.0" + } + }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -30055,6 +31427,17 @@ "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", "dev": true }, + "dns-over-http-resolver": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-2.1.1.tgz", + "integrity": "sha512-Lm/eXB7yAQLJ5WxlBGwYfBY7utduXPZykcSmcG6K7ozM0wrZFvxZavhT6PqI0kd/5CUTfev/RrEFQqyU4CGPew==", + "requires": { + "debug": "^4.3.1", + "native-fetch": "^4.0.2", + "receptacle": "^1.3.2", + "undici": "^5.12.0" + } + }, "dns-packet": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", @@ -30179,6 +31562,14 @@ "jake": "^10.8.5" } }, + "electron-fetch": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz", + "integrity": "sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==", + "requires": { + "encoding": "^0.1.13" + } + }, "electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", @@ -30229,6 +31620,14 @@ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + } + }, "enhanced-resolve": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", @@ -30245,6 +31644,11 @@ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, + "err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -31346,6 +32750,11 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, + "fast-fifo": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.1.0.tgz", + "integrity": "sha512-Kl29QoNbNvn4nhDsLYjyIAaIqaJB6rBx5p3sL9VjaefJ+eMFBWVZiaoguaoZfzEKr5RhAti0UgM8703akGPJ6g==" + }, "fast-glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", @@ -31831,6 +33240,11 @@ "has-symbols": "^1.0.3" } }, + "get-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", + "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==" + }, "get-nonce": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", @@ -32299,7 +33713,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -32326,6 +33739,11 @@ "harmony-reflect": "^1.4.6" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -32391,6 +33809,28 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "interface-datastore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-7.0.4.tgz", + "integrity": "sha512-Q8LZS/jfFFHz6XyZazLTAc078SSCoa27ZPBOfobWdpDiFO7FqPA2yskitUJIhaCgxNK8C+/lMBUTBNfVIDvLiw==", + "requires": { + "interface-store": "^3.0.0", + "nanoid": "^4.0.0", + "uint8arrays": "^4.0.2" + }, + "dependencies": { + "nanoid": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.1.tgz", + "integrity": "sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==" + } + } + }, + "interface-store": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-3.0.4.tgz", + "integrity": "sha512-OjHUuGXbH4eXSBx1TF1tTySvjLldPLzRSYYXJwrEQI+XfH5JWYZofr0gVMV4F8XTwC+4V7jomDYkvGRmDSRKqQ==" + }, "internal-slot": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", @@ -32416,6 +33856,133 @@ "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true }, + "ipfs-core-types": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/ipfs-core-types/-/ipfs-core-types-0.14.0.tgz", + "integrity": "sha512-qO1xVO3n5m7scTXXtMz8hDTLdwXInnwqadIDQpXC446BIlaYyRWUvLcFQ2bOjQql9/CPNTaPHzjzr5Y1XxqpJw==", + "requires": { + "@ipld/dag-pb": "^4.0.0", + "@libp2p/interface-keychain": "^2.0.0", + "@libp2p/interface-peer-id": "^2.0.0", + "@libp2p/interface-peer-info": "^1.0.2", + "@libp2p/interface-pubsub": "^3.0.0", + "@multiformats/multiaddr": "^11.0.0", + "@types/node": "^18.0.0", + "interface-datastore": "^7.0.0", + "ipfs-unixfs": "^9.0.0", + "multiformats": "^11.0.0" + } + }, + "ipfs-core-utils": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/ipfs-core-utils/-/ipfs-core-utils-0.18.0.tgz", + "integrity": "sha512-7N/KfsOPGJu9mwN8EQwrW9HXgS5RNM3WUyjIMWk49KlpYmsXectXuC9i6npI1vn1W/oUaIOZt3lHx37jecnepw==", + "requires": { + "@libp2p/logger": "^2.0.0", + "@multiformats/multiaddr": "^11.0.0", + "@multiformats/multiaddr-to-uri": "^9.0.1", + "any-signal": "^3.0.0", + "blob-to-it": "^2.0.0", + "browser-readablestream-to-it": "^2.0.0", + "err-code": "^3.0.1", + "ipfs-core-types": "^0.14.0", + "ipfs-unixfs": "^9.0.0", + "ipfs-utils": "^9.0.13", + "it-all": "^2.0.0", + "it-map": "^2.0.0", + "it-peekable": "^2.0.0", + "it-to-stream": "^1.0.0", + "merge-options": "^3.0.4", + "multiformats": "^11.0.0", + "nanoid": "^4.0.0", + "parse-duration": "^1.0.0", + "timeout-abort-controller": "^3.0.0", + "uint8arrays": "^4.0.2" + }, + "dependencies": { + "nanoid": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.1.tgz", + "integrity": "sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==" + } + } + }, + "ipfs-http-client": { + "version": "60.0.0", + "resolved": "https://registry.npmjs.org/ipfs-http-client/-/ipfs-http-client-60.0.0.tgz", + "integrity": "sha512-d6Rqc1UP5nWhp7j0PumK80CA5LvbTvskro+qGw7hgWvbfQ0rX/5ddig7ELvVYJbJM4YBxCJSaSHDEOGoSpzzKg==", + "requires": { + "@ipld/dag-cbor": "^9.0.0", + "@ipld/dag-json": "^10.0.0", + "@ipld/dag-pb": "^4.0.0", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^2.0.0", + "@multiformats/multiaddr": "^11.0.0", + "any-signal": "^3.0.0", + "dag-jose": "^4.0.0", + "err-code": "^3.0.1", + "ipfs-core-types": "^0.14.0", + "ipfs-core-utils": "^0.18.0", + "ipfs-utils": "^9.0.13", + "it-first": "^2.0.0", + "it-last": "^2.0.0", + "merge-options": "^3.0.4", + "multiformats": "^11.0.0", + "parse-duration": "^1.0.0", + "stream-to-it": "^0.2.2", + "uint8arrays": "^4.0.2" + } + }, + "ipfs-unixfs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-9.0.1.tgz", + "integrity": "sha512-jh2CbXyxID+v3jLml9CqMwjdSS9ZRnsGfQGGPOfem0/hT/L48xUeTPvh7qLFWkZcIMhZtG+fnS1teei8x5uGBg==", + "requires": { + "err-code": "^3.0.1", + "protobufjs": "^7.0.0" + } + }, + "ipfs-utils": { + "version": "9.0.14", + "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.14.tgz", + "integrity": "sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg==", + "requires": { + "any-signal": "^3.0.0", + "browser-readablestream-to-it": "^1.0.0", + "buffer": "^6.0.1", + "electron-fetch": "^1.7.2", + "err-code": "^3.0.1", + "is-electron": "^2.2.0", + "iso-url": "^1.1.5", + "it-all": "^1.0.4", + "it-glob": "^1.0.1", + "it-to-stream": "^1.0.0", + "merge-options": "^3.0.4", + "nanoid": "^3.1.20", + "native-fetch": "^3.0.0", + "node-fetch": "^2.6.8", + "react-native-fetch-api": "^3.0.0", + "stream-to-it": "^0.2.2" + }, + "dependencies": { + "browser-readablestream-to-it": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.3.tgz", + "integrity": "sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw==" + }, + "it-all": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz", + "integrity": "sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==" + }, + "native-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", + "integrity": "sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==", + "requires": {} + } + } + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -32499,6 +34066,11 @@ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, + "is-electron": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.1.tgz", + "integrity": "sha512-r8EEQQsqT+Gn0aXFx7lTFygYQhILLCB+wn0WCDL5LZRINeLH/Rvw1j2oKodELLXYNImQ3CRlVsY8wW4cGOsyuw==" + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -32714,6 +34286,11 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "iso-url": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", + "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" + }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -32798,6 +34375,63 @@ "istanbul-lib-report": "^3.0.0" } }, + "it-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-2.0.0.tgz", + "integrity": "sha512-I/yi9ogTY59lFxtfsDSlI9w9QZtC/5KJt6g7CPPBJJh2xql2ZS7Ghcp9hoqDDbc4QfwQvtx8Loy0zlKQ8H5gFg==" + }, + "it-first": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-2.0.0.tgz", + "integrity": "sha512-fzZGzVf01exFyIZXNjkpSMFr1eW2+J1K0v018tYY26Dd4f/O3pWlBTdrOBfSQRZwtI8Pst6c7eKhYczWvFs6tA==" + }, + "it-glob": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-1.0.2.tgz", + "integrity": "sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==", + "requires": { + "@types/minimatch": "^3.0.4", + "minimatch": "^3.0.4" + } + }, + "it-last": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-last/-/it-last-2.0.0.tgz", + "integrity": "sha512-u0GHZ01tWYtPvDkOaqZSLLWjFv3IJw9cPL9mbEV7wnE8DOsbVoXIuKpnz3U6pySl5RzPVjTzSHOc961ZYttBxg==" + }, + "it-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-2.0.0.tgz", + "integrity": "sha512-mLgtk/NZaN7NZ06iLrMXCA6jjhtZO0vZT5Ocsp31H+nsGI18RSPVmUbFyA1sWx7q+g92J22Sixya7T2QSSAwfA==" + }, + "it-peekable": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-2.0.0.tgz", + "integrity": "sha512-+eacms2jr2wQqIRxU25eqWPHaEeR4IurrS9hTScmCJpWagRkC8WHw7atciEA6KArOiyxHCAXg5Q5We7/RhvqAQ==" + }, + "it-pushable": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.1.2.tgz", + "integrity": "sha512-zU9FbeoGT0f+yobwm8agol2OTMXbq4ZSWLEi7hug6TEZx4qVhGhGyp31cayH04aBYsIoO2Nr5kgMjH/oWj2BJQ==" + }, + "it-stream-types": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-1.0.5.tgz", + "integrity": "sha512-I88Ka1nHgfX62e5mi5LLL+oueqz7Ltg0bUdtsUKDe9SoUqbQPf2Mp5kxDTe9pNhHQGs4pvYPAINwuZ1HAt42TA==" + }, + "it-to-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz", + "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", + "requires": { + "buffer": "^6.0.3", + "fast-fifo": "^1.0.0", + "get-iterator": "^1.0.2", + "p-defer": "^3.0.0", + "p-fifo": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, "jake": { "version": "10.8.5", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", @@ -32861,6 +34495,11 @@ } } }, + "jazzicon-ts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jazzicon-ts/-/jazzicon-ts-2.0.0.tgz", + "integrity": "sha512-Yf+FyyrZDIiTaDfs/N+oBL4AKrhzWFjnqopHPJLWM2McIVRzc1D3EN11dwrftCoD1kLdhrAViCoThl9u7eqM+w==" + }, "jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", @@ -34634,6 +36273,11 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -34731,6 +36375,21 @@ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true }, + "merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "requires": { + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + } + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -34849,7 +36508,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -34884,6 +36542,11 @@ "thunky": "^1.0.2" } }, + "multiformats": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.1.tgz", + "integrity": "sha512-atWruyH34YiknSdL5yeIir00EDlJRpHzELYQxG7Iy29eCyL+VrZHpPrX5yqlik3jnuqpLpRKVZ0SGVb9UzKaSA==" + }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -34900,6 +36563,12 @@ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, + "native-fetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz", + "integrity": "sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==", + "requires": {} + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -34935,10 +36604,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "requires": { "whatwg-url": "^5.0.0" }, @@ -34946,20 +36614,17 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -35190,6 +36855,20 @@ "word-wrap": "^1.2.3" } }, + "p-defer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==" + }, + "p-fifo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz", + "integrity": "sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==", + "requires": { + "fast-fifo": "^1.0.0", + "p-defer": "^3.0.0" + } + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -35242,6 +36921,11 @@ "callsites": "^3.0.0" } }, + "parse-duration": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-1.0.2.tgz", + "integrity": "sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg==" + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -36267,6 +37951,25 @@ } } }, + "protobufjs": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.2.tgz", + "integrity": "sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -36541,6 +38244,14 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "react-native-fetch-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz", + "integrity": "sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==", + "requires": { + "p-defer": "^3.0.0" + } + }, "react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -36689,7 +38400,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -36705,6 +38415,14 @@ "picomatch": "^2.2.1" } }, + "receptacle": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", + "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", + "requires": { + "ms": "^2.1.1" + } + }, "recrawl-sync": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.3.tgz", @@ -36940,6 +38658,11 @@ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, + "retimer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/retimer/-/retimer-3.0.0.tgz", + "integrity": "sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==" + }, "retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -37092,8 +38815,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sanitize.css": { "version": "13.0.0", @@ -37493,11 +39215,23 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, + "stream-to-it": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz", + "integrity": "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==", + "requires": { + "get-iterator": "^1.0.2" + } + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "requires": { "safe-buffer": "~5.2.0" }, @@ -37505,8 +39239,7 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -37985,6 +39718,14 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "timeout-abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz", + "integrity": "sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==", + "requires": { + "retimer": "^3.0.0" + } + }, "tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -38190,6 +39931,22 @@ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true }, + "uint8arraylist": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.3.tgz", + "integrity": "sha512-oEVZr4/GrH87K0kjNce6z8pSCzLEPqHNLNR5sj8cJOySrTP8Vb/pMIbZKLJGhQKxm1TiZ31atNrpn820Pyqpow==", + "requires": { + "uint8arrays": "^4.0.2" + } + }, + "uint8arrays": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.3.tgz", + "integrity": "sha512-b+aKlI2oTnxnfeSQWV1sMacqSNxqhtXySaH6bflvONGxF8V/fT3ZlYH7z2qgGfydsvpVo4JUgM/Ylyfl2YouCg==", + "requires": { + "multiformats": "^11.0.0" + } + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -38202,6 +39959,14 @@ "which-boxed-primitive": "^1.0.2" } }, + "undici": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.19.0.tgz", + "integrity": "sha512-7XnhXXW0/AMTx17x1T3OOYY14FGiXbkyE/itv4jY1v8CnSQBMXW3yZ/Ppt7YlOv1D63tm9N4g5Au1Abe+gwpkw==", + "requires": { + "busboy": "^1.6.0" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -38313,8 +40078,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "util.promisify": { "version": "1.0.1", @@ -38357,6 +40121,11 @@ "source-map": "^0.7.3" } }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index 68fbc58..bbae0c3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,14 +15,19 @@ "dependencies": { "@chakra-ui/icons": "^2.0.16", "@chakra-ui/react": "^2.4.6", + "@radix-ui/react-scroll-area": "^1.0.2", "@tanstack/react-query": "^4.20.9", + "@tanstack/react-table": "^8.7.6", "@types/jest": "^29.2.5", "@types/node": "^18.11.18", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.10", "@typescript-eslint/eslint-plugin": "^5.48.0", "@vitejs/plugin-react": "^3.0.1", + "buffer": "^6.0.3", "ethers": "^5.4.7", + "ipfs-http-client": "^60.0.0", + "jazzicon-ts": "^2.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.6.1", diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index bc3269e..adfc519 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,10 +1,13 @@ import { ChakraProvider, extendTheme } from "@chakra-ui/react"; import { Router } from "@routes/Router"; +import { PaymnetManagerServiceProvider } from "@services/PaymentManagerService"; +import { RewardManagerServiceProvider } from "@services/RewardManagerService"; import { WalletServiceProvider } from "@services/WalletService"; +import { rawTheme } from "@styles/theme"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ReactElement, useState } from "react"; -const theme = extendTheme(); +const theme = extendTheme(rawTheme); const App = (): ReactElement => { const [client] = useState(() => new QueryClient()); @@ -13,7 +16,11 @@ const App = (): ReactElement => { - + + + + + diff --git a/frontend/src/components/ConnectYourWallet/ConnectYourWallet.tsx b/frontend/src/components/ConnectYourWallet/ConnectYourWallet.tsx new file mode 100644 index 0000000..0b32998 --- /dev/null +++ b/frontend/src/components/ConnectYourWallet/ConnectYourWallet.tsx @@ -0,0 +1,16 @@ +import { Container, Flex, Heading } from "@chakra-ui/react"; +import { ReactElement } from "react"; + +export const ConnectYourWallet = (): ReactElement => { + return ( + + + Please connect your + + wallet + + to enjoy all the functionalities + + + ); +}; diff --git a/frontend/src/components/ScrollArea/ScrollArea.tsx b/frontend/src/components/ScrollArea/ScrollArea.tsx new file mode 100644 index 0000000..96dd8f0 --- /dev/null +++ b/frontend/src/components/ScrollArea/ScrollArea.tsx @@ -0,0 +1,36 @@ +import { BackgroundProps, chakra } from "@chakra-ui/react"; +import * as CustomScroll from "@radix-ui/react-scroll-area"; +import { ReactElement } from "react"; + +const Root = chakra(CustomScroll.Root); +const Viewport = chakra(CustomScroll.Viewport); +const Scrollbar = chakra(CustomScroll.Scrollbar); +const Thumb = chakra(CustomScroll.Thumb); + +type Props = { + children: ReactElement; + thumbColor: BackgroundProps["bg"]; +}; + +export const ScrollArea = ({ children, thumbColor }: Props): ReactElement => { + return ( + + + {children} + + + + + + ); +}; diff --git a/frontend/src/components/TableError/TableError.tsx b/frontend/src/components/TableError/TableError.tsx new file mode 100644 index 0000000..d0ab098 --- /dev/null +++ b/frontend/src/components/TableError/TableError.tsx @@ -0,0 +1,21 @@ +import { WarningIcon } from "@chakra-ui/icons"; +import { Flex, Text } from "@chakra-ui/react"; +import { ReactElement } from "react"; + +export const TableError = (): ReactElement => { + return ( + + + + An error has occurred please reload the page + + + ); +}; diff --git a/frontend/src/components/TableLoading/Loading/Loading.tsx b/frontend/src/components/TableLoading/Loading/Loading.tsx new file mode 100644 index 0000000..37deb9c --- /dev/null +++ b/frontend/src/components/TableLoading/Loading/Loading.tsx @@ -0,0 +1,20 @@ +import { Skeleton, Td, Tr } from "@chakra-ui/react"; +import { ReactElement } from "react"; + +type Props = { + columns: number; +}; + +export const Loading = ({ columns }: Props): ReactElement => { + return ( + + {[...Array(columns)].map((x, i) => { + return ( + + + + ); + })} + + ); +}; diff --git a/frontend/src/components/TableLoading/TableLoading.tsx b/frontend/src/components/TableLoading/TableLoading.tsx new file mode 100644 index 0000000..5665a73 --- /dev/null +++ b/frontend/src/components/TableLoading/TableLoading.tsx @@ -0,0 +1,38 @@ +import { Table, Tbody, Th, Thead, Tr } from "@chakra-ui/react"; +import { ReactElement } from "react"; +import { Loading } from "./Loading/Loading"; + +export const tableHead = { + transactionsHead: ["From", "Reward", "Quantity", "Manage"], + requestsHead: ["From", "Amount", "Status", "Manage"], + wwardsHead: ["Name", "Amount", "Price", "Manage"], + usersHead: ["Addres", "Role"], +}; + +type Props = { + columns: number; + tableHead: string[]; +}; + +export const TableLoading = ({ columns, tableHead }: Props): ReactElement => { + return ( + + + + {tableHead.map((head, i) => { + return ( + + ); + })} + + + + {[...Array(6)].map((x, i) => { + return ; + })} + +
+ {head} +
+ ); +}; diff --git a/frontend/src/routes/About/AboutPage.tsx b/frontend/src/routes/About/AboutPage.tsx index 6c9c6de..e984954 100644 --- a/frontend/src/routes/About/AboutPage.tsx +++ b/frontend/src/routes/About/AboutPage.tsx @@ -1,13 +1,13 @@ import { - Stack, - Text, Center, Container, + Divider, Flex, Heading, - Spacer, Image, - Divider, + Spacer, + Stack, + Text, } from "@chakra-ui/react"; import { ReactElement } from "react"; @@ -17,7 +17,7 @@ const AboutPage = (): ReactElement => {
The future of - + receiving rewards is here! diff --git a/frontend/src/routes/Admin/Admin.tsx b/frontend/src/routes/Admin/Admin.tsx index 04fbf57..d6df985 100644 --- a/frontend/src/routes/Admin/Admin.tsx +++ b/frontend/src/routes/Admin/Admin.tsx @@ -1,18 +1,16 @@ -import { NoWalletDetected } from "@components/NoWalletDetected"; -import { ReactElement } from "react"; -import ManagePage from "./ManagePage"; +import { WalletService } from "@services/WalletService"; +import { paths } from "@utils/paths"; +import { ReactElement, useContext } from "react"; +import { Navigate } from "react-router-dom"; +import { ManagePage } from "./ManagePage/ManagePage"; const Admin = (): ReactElement => { - if (window.ethereum === undefined) { - /* - - Maybe we should check for administrator permissions instead? - suggestion - - */ - return ; + const context = useContext(WalletService); + if (context.status === "auth" && context.wallet.isAdmin) { + return ; } - return ; + return ; }; export default Admin; diff --git a/frontend/src/routes/Admin/ManagePage.tsx b/frontend/src/routes/Admin/ManagePage.tsx deleted file mode 100644 index d107f31..0000000 --- a/frontend/src/routes/Admin/ManagePage.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { - Center, - Flex, - Grid, - GridItem, - Spacer, - Tab, - TabList, - TabPanel, - TabPanels, - Tabs, -} from "@chakra-ui/react"; -import { ReactElement } from "react"; -import AwardsPanel from "./panels/AwardsPanel"; -import RequestsPanel from "./panels/RequestsPanel"; -import TransactionsPanel from "./panels/TransactionsPanel"; -import UsersPanel from "./panels/UsersPanel"; - -const selectedTabStyle = { color: "blue.700", bg: "purple.200" }; - -const ManagePage = (): ReactElement => { - return ( - - - - -
- - - Transactions - - - Requests - - - Awards - - - Users - - -
-
- - - - - - - {" "} - - - - {" "} - - - - {" "} - - - - - -
-
-
- ); -}; - -export default ManagePage; diff --git a/frontend/src/routes/Admin/ManagePage/AwardsPanel/AddAward/AddAward.tsx b/frontend/src/routes/Admin/ManagePage/AwardsPanel/AddAward/AddAward.tsx new file mode 100644 index 0000000..501799e --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/AwardsPanel/AddAward/AddAward.tsx @@ -0,0 +1,157 @@ +import { + Button, + Flex, + Input, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + NumberInput, + NumberInputField, + Text, + useDisclosure, + useToast, +} from "@chakra-ui/react"; +import { Loading } from "@routes/ContentWraper/TopBar/ConnectWallet/Loading/Loading"; +import { useRewardManagerService } from "@services/RewardManagerService"; +import { useMutation } from "@tanstack/react-query"; +import { Buffer } from "buffer"; +import { ReactElement, useState } from "react"; + +export const AddAward = (): ReactElement => { + const { isOpen, onOpen, onClose } = useDisclosure(); + + const rewardManagerService = useRewardManagerService(); + + const [name, setName] = useState(""); + const [amount, setAmount] = useState(0); + const [price, setPrice] = useState(0); + const [image, setImage] = useState(); + const [isInvalid, setIsInvalid] = useState(false); + const handleImage = (file: FileList | null) => { + if (file === null) { + return; + } + const data = file[0]; + const reader = new window.FileReader(); + reader.readAsArrayBuffer(data); + reader.onloadend = () => { + if (reader.result && typeof reader.result != "string") { + setImage(Buffer.from(reader.result)); + } + }; + }; + const { mutate, isLoading } = useMutation(rewardManagerService._addReward); + const toast = useToast(); + const handleSubmit = () => { + if (name === "") { + setIsInvalid(true); + return; + } + mutate( + { + inStock: amount, + image: image, + name: name, + price: price, + }, + { + onError: () => { + onClose(); + toast({ + title: "Error", + description: "Failed to add the award", + status: "error", + duration: 5000, + isClosable: true, + }); + }, + onSuccess: () => { + onClose(); + toast({ + title: "Whooo", + description: "The award has been added", + status: "success", + duration: 5000, + isClosable: true, + }); + }, + } + ); + }; + + return ( + <> + + + + + + + + + + + {isLoading ? ( + + ) : ( + + + Name: + Amount: + Price: + Image: + + + setName(value.target.value)} + placeholder="Gift card" + value={name} + /> + setAmount(Number(value))} + value={amount} + > + + + setPrice(Number(value))} + precision={2} + step={0.01} + value={price} + > + + + + handleImage(value.target.files)} + type="file" + /> + + + )} + + {!isLoading && ( + + + + + )} + + + + ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/AwardsPanel/AwardsPanel.tsx b/frontend/src/routes/Admin/ManagePage/AwardsPanel/AwardsPanel.tsx new file mode 100644 index 0000000..5fdf789 --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/AwardsPanel/AwardsPanel.tsx @@ -0,0 +1,24 @@ +import { TableError } from "@components/TableError/TableError"; +import { tableHead, TableLoading } from "@components/TableLoading/TableLoading"; +import { useRewardManagerService } from "@services/RewardManagerService"; +import { useQuery } from "@tanstack/react-query"; +import { ReactElement } from "react"; +import { AwardsTable } from "./AwardsTable/AwardsTable"; + +const AwardsPanel = (): ReactElement => { + const rewardManagerService = useRewardManagerService(); + const quer = useQuery( + rewardManagerService.rewardKey(), + rewardManagerService._getAllRewards + ); + + if (quer.status === "loading") { + return ; + } + if (quer.status === "success") { + return ; + } + return ; +}; + +export default AwardsPanel; diff --git a/frontend/src/routes/Admin/ManagePage/AwardsPanel/AwardsTable/AwardsTable.tsx b/frontend/src/routes/Admin/ManagePage/AwardsPanel/AwardsTable/AwardsTable.tsx new file mode 100644 index 0000000..a56d8fc --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/AwardsPanel/AwardsTable/AwardsTable.tsx @@ -0,0 +1,88 @@ +import { Image, Table, Tbody, Td, Text, Th, Thead, Tr } from "@chakra-ui/react"; +import { ScrollArea } from "@components/ScrollArea/ScrollArea"; +import { Awards } from "@services/RewardManagerService"; +import { + ColumnDef, + flexRender, + getCoreRowModel, + useReactTable, +} from "@tanstack/react-table"; +import { ethers } from "ethers"; +import { Fragment, ReactElement } from "react"; +import { EditAward } from "./EditAward/EditAward"; + +type Props = { + data: Awards[]; +}; + +export const AwardsTable = ({ data }: Props): ReactElement => { + const columns: ColumnDef[] = [ + { accessorKey: "name", header: "Name" }, + { accessorKey: "inStock", header: "Amount" }, + { + accessorKey: "price", + header: "Price", + cell: ({ row }) => { + return ( + + {parseFloat(ethers.utils.formatEther(row.original.price))} + + ); + }, + }, + { + accessorKey: "imgHash", + header: "Image", + cell: ({ row }) => { + return ( + + ); + }, + }, + { + accessorKey: "manage", + header: "Manage", + cell: ({ row }) => { + return ; + }, + }, + ]; + const { getHeaderGroups, getRowModel } = useReactTable({ + columns, + data, + getCoreRowModel: getCoreRowModel(), + }); + return ( + + + + {getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + ))} + + ))} + + + {getRowModel().rows.map((row) => ( + + + {row.getVisibleCells().map((cell) => ( + + ))} + + + ))} + +
+ {flexRender( + header.column.columnDef.header, + header.getContext() + )} +
+ {flexRender(cell.column.columnDef.cell, cell.getContext())} +
+
+ ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/AwardsPanel/AwardsTable/EditAward/EditAward.tsx b/frontend/src/routes/Admin/ManagePage/AwardsPanel/AwardsTable/EditAward/EditAward.tsx new file mode 100644 index 0000000..5da05fb --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/AwardsPanel/AwardsTable/EditAward/EditAward.tsx @@ -0,0 +1,119 @@ +import { EditIcon } from "@chakra-ui/icons"; +import { + Button, + Flex, + IconButton, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + NumberInput, + NumberInputField, + Text, + useDisclosure, + useToast, +} from "@chakra-ui/react"; +import { Loading } from "@routes/ContentWraper/TopBar/ConnectWallet/Loading/Loading"; +import { + Awards, + useRewardManagerService, +} from "@services/RewardManagerService"; +import { useMutation } from "@tanstack/react-query"; +import { ReactElement, useState } from "react"; + +type Props = { + award: Awards; +}; + +export const EditAward = ({ award }: Props): ReactElement => { + const rewardManagerService = useRewardManagerService(); + + const [amount, setAmount] = useState(award.inStock); + const [price, setPrice] = useState(award.price); + + const { mutate, isLoading } = useMutation(rewardManagerService._editReward); + const toast = useToast(); + const handleSubmit = () => { + mutate( + { + oldAward: award, + newAward: { ...award, inStock: amount, price: price }, + }, + { + onError: () => { + toast({ + title: "Error", + description: "Failed to change the award", + status: "error", + duration: 5000, + isClosable: true, + }); + }, + onSuccess: () => { + toast({ + title: "Whooo", + description: "The award has been changed", + status: "success", + duration: 5000, + isClosable: true, + }); + }, + } + ); + }; + const { isOpen, onOpen, onClose } = useDisclosure(); + return ( + <> + } + onClick={onOpen} + variant="secondary" + /> + + + + + + + + + + {isLoading ? ( + + ) : ( + + + Amount: + + + setAmount(Number(value))} + placeholder="10" + value={amount} + > + + + + + )} + + + {!isLoading && ( + + + + + )} + + + + ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/ManagePage.tsx b/frontend/src/routes/Admin/ManagePage/ManagePage.tsx new file mode 100644 index 0000000..5b9fde0 --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/ManagePage.tsx @@ -0,0 +1,103 @@ +import { + Flex, + Tab, + TabList, + TabPanel, + TabPanels, + Tabs, +} from "@chakra-ui/react"; +import { ReactElement } from "react"; +import { AddAward } from "./AwardsPanel/AddAward/AddAward"; +import AwardsPanel from "./AwardsPanel/AwardsPanel"; +import RequestsPanel from "./RequestsPanel/RequestsPanel"; +import TransactionsPanel from "./TransactionsPanel/TransactionsPanel"; +import UsersPanel from "./UsersPanel/UsersPanel"; + +const selectedTabStyle = { color: "white" }; + +export const ManagePage = (): ReactElement => { + return ( + + + + + + Transactions + + + Requests + + + Awards + + + Users + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/RequestsPanel/RequestTable/EditRequest/EditRequest.tsx b/frontend/src/routes/Admin/ManagePage/RequestsPanel/RequestTable/EditRequest/EditRequest.tsx new file mode 100644 index 0000000..28d561f --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/RequestsPanel/RequestTable/EditRequest/EditRequest.tsx @@ -0,0 +1,128 @@ +import { EditIcon } from "@chakra-ui/icons"; +import { + Button, + Flex, + IconButton, + Input, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + Select, + Text, + useDisclosure, + useToast, +} from "@chakra-ui/react"; +import { + Requests, + usePaymnetManagerService, +} from "@services/PaymentManagerService"; +import { useMutation } from "@tanstack/react-query"; +import { ReactElement, useState } from "react"; + +type Props = { + request: Requests; +}; + +export const EditRequest = ({ request }: Props): ReactElement => { + const paymentManagerService = usePaymnetManagerService(); + + const [status, setStatus] = useState(request.status); + const [decisionReason, setDecisionReason] = useState(request.decisionReason); + + const handleStatusChange = (e: React.ChangeEvent) => { + if (e.target.value === "1") { + setStatus(1); + } else { + setStatus(2); + } + }; + + const { isOpen, onOpen, onClose } = useDisclosure(); + + const { mutate } = useMutation(paymentManagerService.changeRequestStatus); + const toast = useToast(); + const handleSubmit = () => { + mutate( + { + ...request, + status, + decisionReason, + }, + { + onError: () => { + onClose(); + toast({ + title: "Error", + description: "Failed to edit the request", + status: "error", + duration: 5000, + isClosable: true, + }); + }, + onSuccess: () => { + onClose(); + toast({ + title: "Whooo", + description: "The request has been edited", + status: "success", + duration: 5000, + isClosable: true, + }); + }, + } + ); + }; + return ( + <> + } + onClick={onOpen} + variant="secondary" + /> + + + + + + + + + + + + Status: + Decision Reason: + + + + + setDecisionReason(value.target.value)} + value={decisionReason} + /> + + + + + + + + + + + + ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/RequestsPanel/RequestTable/RequestTable.tsx b/frontend/src/routes/Admin/ManagePage/RequestsPanel/RequestTable/RequestTable.tsx new file mode 100644 index 0000000..16ea179 --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/RequestsPanel/RequestTable/RequestTable.tsx @@ -0,0 +1,85 @@ +import { Table, Tbody, Td, Text, Th, Thead, Tr } from "@chakra-ui/react"; +import { ScrollArea } from "@components/ScrollArea/ScrollArea"; +import { Requests } from "@services/PaymentManagerService"; +import { + ColumnDef, + flexRender, + getCoreRowModel, + useReactTable, +} from "@tanstack/react-table"; +import { ethers } from "ethers"; +import { Fragment, ReactElement } from "react"; +import { EditRequest } from "./EditRequest/EditRequest"; + +type Props = { + data: Requests[]; +}; + +export const RequestTable = ({ data }: Props): ReactElement => { + const columns: ColumnDef[] = [ + { + accessorKey: "amount", + header: "Amount", + cell: ({ row }) => { + return ( + + {parseFloat(ethers.utils.formatEther(row.original.amount))} + + ); + }, + }, + { accessorKey: "requestReason", header: "Request Reason" }, + { + accessorKey: "status", + header: "Status", + cell: () => { + return Pending; + }, + }, + { + accessorKey: "manage", + header: "Manage", + cell: ({ row }) => { + return ; + }, + }, + ]; + const { getHeaderGroups, getRowModel } = useReactTable({ + columns, + data, + getCoreRowModel: getCoreRowModel(), + }); + return ( + + + + {getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + ))} + + ))} + + + {getRowModel().rows.map((row) => ( + + + {row.getVisibleCells().map((cell) => ( + + ))} + + + ))} + +
+ {flexRender( + header.column.columnDef.header, + header.getContext() + )} +
+ {flexRender(cell.column.columnDef.cell, cell.getContext())} +
+
+ ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/RequestsPanel/RequestsPanel.tsx b/frontend/src/routes/Admin/ManagePage/RequestsPanel/RequestsPanel.tsx new file mode 100644 index 0000000..ef21c63 --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/RequestsPanel/RequestsPanel.tsx @@ -0,0 +1,24 @@ +import { TableError } from "@components/TableError/TableError"; +import { tableHead, TableLoading } from "@components/TableLoading/TableLoading"; +import { usePaymnetManagerService } from "@services/PaymentManagerService"; +import { useQuery } from "@tanstack/react-query"; +import { ReactElement } from "react"; +import { RequestTable } from "./RequestTable/RequestTable"; + +const RequestPanel = (): ReactElement => { + const paymentManagerService = usePaymnetManagerService(); + const quer = useQuery( + paymentManagerService.requestKey(), + paymentManagerService._getAllRequests + ); + + if (quer.status === "loading") { + return ; + } + if (quer.status === "success") { + return ; + } + return ; +}; + +export default RequestPanel; diff --git a/frontend/src/routes/Admin/ManagePage/TransactionsPanel/TransactionTable/Received/Received.tsx b/frontend/src/routes/Admin/ManagePage/TransactionsPanel/TransactionTable/Received/Received.tsx new file mode 100644 index 0000000..87dbb10 --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/TransactionsPanel/TransactionTable/Received/Received.tsx @@ -0,0 +1,123 @@ +import { + Button, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + NumberDecrementStepper, + NumberIncrementStepper, + NumberInput, + NumberInputField, + NumberInputStepper, + Text, + useDisclosure, + useToast, +} from "@chakra-ui/react"; +import { + RewardManagerServiceValue, + Transactions, +} from "@services/RewardManagerService"; +import { useMutation } from "@tanstack/react-query"; +import { ReactElement, useState } from "react"; + +type Props = { + rewardManagerService: RewardManagerServiceValue; + transaction: Transactions; +}; + +export const Received = ({ + transaction, + rewardManagerService, +}: Props): ReactElement => { + const [value, setValue] = useState(1); + const handleChange = (value: number) => { + setValue(value); + }; + const { mutate } = useMutation(rewardManagerService._markCollected); + const toast = useToast(); + const handleSubmit = () => { + mutate( + { + address: transaction.address, + quantity: Number(transaction.quantity), + id: transaction.id, + }, + { + onError: () => { + toast({ + title: "Error", + description: "Failed to collect the award", + status: "error", + duration: 5000, + isClosable: true, + }); + }, + onSuccess: () => { + toast({ + title: "Whooo", + description: "The award has been collected", + status: "success", + duration: 5000, + isClosable: true, + }); + }, + } + ); + }; + const { isOpen, onOpen, onClose } = useDisclosure(); + return ( + <> + + + + + + + + + + + + {"How many " + + transaction.rewardId + + " have you given out to " + + transaction.address + + "?"} + + + Quantity + + handleChange(Number(value))} + value={value} + > + + + + + + + + + + + + + + + + ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/TransactionsPanel/TransactionTable/TransactionTable.tsx b/frontend/src/routes/Admin/ManagePage/TransactionsPanel/TransactionTable/TransactionTable.tsx new file mode 100644 index 0000000..a3667cf --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/TransactionsPanel/TransactionTable/TransactionTable.tsx @@ -0,0 +1,78 @@ +import { Table, Tbody, Td, Th, Thead, Tr } from "@chakra-ui/react"; +import { ScrollArea } from "@components/ScrollArea/ScrollArea"; +import { + Transactions, + useRewardManagerService, +} from "@services/RewardManagerService"; +import { + ColumnDef, + flexRender, + getCoreRowModel, + useReactTable, +} from "@tanstack/react-table"; +import { Fragment, ReactElement } from "react"; +import { Received } from "./Received/Received"; + +type Props = { + data: Transactions[]; +}; + +export const TransactionTable = ({ data }: Props): ReactElement => { + const rewardManagerService = useRewardManagerService(); + + const columns: ColumnDef[] = [ + { accessorKey: "address", header: "From" }, + { accessorKey: "reward", header: "Reward" }, + { accessorKey: "quantity", header: "Quantity" }, + { + accessorKey: "manage", + header: "Manage", + cell: ({ row }) => { + return ( + + ); + }, + }, + ]; + const { getHeaderGroups, getRowModel } = useReactTable({ + columns, + data, + getCoreRowModel: getCoreRowModel(), + }); + return ( + + + + {getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + ))} + + ))} + + + {getRowModel().rows.map((row) => ( + + + {row.getVisibleCells().map((cell) => ( + + ))} + + + ))} + +
+ {flexRender( + header.column.columnDef.header, + header.getContext() + )} +
+ {flexRender(cell.column.columnDef.cell, cell.getContext())} +
+
+ ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/TransactionsPanel/TransactionsPanel.tsx b/frontend/src/routes/Admin/ManagePage/TransactionsPanel/TransactionsPanel.tsx new file mode 100644 index 0000000..a2afa77 --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/TransactionsPanel/TransactionsPanel.tsx @@ -0,0 +1,25 @@ +import { TableError } from "@components/TableError/TableError"; +import { tableHead, TableLoading } from "@components/TableLoading/TableLoading"; +import { useRewardManagerService } from "@services/RewardManagerService"; +import { useQuery } from "@tanstack/react-query"; +import { ReactElement } from "react"; +import { TransactionTable } from "./TransactionTable/TransactionTable"; + +const TransactionsPanel = (): ReactElement => { + const rewardManagerService = useRewardManagerService(); + const quer = useQuery( + rewardManagerService.listKey(), + rewardManagerService._getTransactionData, + { cacheTime: 10 * 60 * 1000 } + ); + + if (quer.status === "loading") { + return ; + } + if (quer.status === "success") { + return ; + } + return ; +}; + +export default TransactionsPanel; diff --git a/frontend/src/routes/Admin/ManagePage/UsersPanel/FireEmployee/FireEmployee.tsx b/frontend/src/routes/Admin/ManagePage/UsersPanel/FireEmployee/FireEmployee.tsx new file mode 100644 index 0000000..3a09710 --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/UsersPanel/FireEmployee/FireEmployee.tsx @@ -0,0 +1,47 @@ +import { Button, Flex, Input, Text, useToast } from "@chakra-ui/react"; +import { usePaymnetManagerService } from "@services/PaymentManagerService"; +import { useMutation } from "@tanstack/react-query"; +import { ReactElement, useState } from "react"; + +export const FireEmployee = (): ReactElement => { + const [address, setAddress] = useState(""); + const paymentManagerService = usePaymnetManagerService(); + const { mutate } = useMutation(paymentManagerService.fireEmployee); + const toast = useToast(); + const handleSubmit = () => { + mutate(address, { + onError: () => { + toast({ + title: "Error", + description: "Failed to collect the award", + status: "error", + duration: 5000, + isClosable: true, + }); + }, + onSuccess: () => { + toast({ + title: "Whooo", + description: "The award has been collected", + status: "success", + duration: 5000, + isClosable: true, + }); + }, + }); + }; + return ( + + Fire Employee + + setAddress(value.target.value)} + placeholder="0x46A4FA36a08e583f26Daf2eac9121d839E428Dfac" + value={address} + w="96" + /> + + + + ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/UsersPanel/HireEmployee/HireEmployee.tsx b/frontend/src/routes/Admin/ManagePage/UsersPanel/HireEmployee/HireEmployee.tsx new file mode 100644 index 0000000..b27681f --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/UsersPanel/HireEmployee/HireEmployee.tsx @@ -0,0 +1,47 @@ +import { Button, Flex, Input, Text, useToast } from "@chakra-ui/react"; +import { usePaymnetManagerService } from "@services/PaymentManagerService"; +import { useMutation } from "@tanstack/react-query"; +import { ReactElement, useState } from "react"; + +export const HireEmployee = (): ReactElement => { + const [address, setAddress] = useState(""); + const paymentManagerService = usePaymnetManagerService(); + const { mutate } = useMutation(paymentManagerService.hireEmployee); + const toast = useToast(); + const handleSubmit = () => { + mutate(address, { + onError: () => { + toast({ + title: "Error", + description: "Failed to collect the award", + status: "error", + duration: 5000, + isClosable: true, + }); + }, + onSuccess: () => { + toast({ + title: "Whooo", + description: "The award has been collected", + status: "success", + duration: 5000, + isClosable: true, + }); + }, + }); + }; + return ( + + Hire Employee + + setAddress(value.target.value)} + placeholder="0x46A4FA36a08e583f26Daf2eac9121d839E428Dfac" + value={address} + w="96" + /> + + + + ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/UsersPanel/HireEmployer/HireEmployer.tsx b/frontend/src/routes/Admin/ManagePage/UsersPanel/HireEmployer/HireEmployer.tsx new file mode 100644 index 0000000..59e2bf8 --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/UsersPanel/HireEmployer/HireEmployer.tsx @@ -0,0 +1,47 @@ +import { Button, Flex, Input, Text, useToast } from "@chakra-ui/react"; +import { usePaymnetManagerService } from "@services/PaymentManagerService"; +import { useMutation } from "@tanstack/react-query"; +import { ReactElement, useState } from "react"; + +export const HireEmployer = (): ReactElement => { + const [address, setAddress] = useState(""); + const paymentManagerService = usePaymnetManagerService(); + const { mutate } = useMutation(paymentManagerService.hireEmployer); + const toast = useToast(); + const handleSubmit = () => { + mutate(address, { + onError: () => { + toast({ + title: "Error", + description: "Failed to collect the award", + status: "error", + duration: 5000, + isClosable: true, + }); + }, + onSuccess: () => { + toast({ + title: "Whooo", + description: "The award has been collected", + status: "success", + duration: 5000, + isClosable: true, + }); + }, + }); + }; + return ( + + Hire Employer + + setAddress(value.target.value)} + placeholder="0x46A4FA36a08e583f26Daf2eac9121d839E428Dfac" + value={address} + w="96" + /> + + + + ); +}; diff --git a/frontend/src/routes/Admin/ManagePage/UsersPanel/UsersPanel.tsx b/frontend/src/routes/Admin/ManagePage/UsersPanel/UsersPanel.tsx new file mode 100644 index 0000000..696bf69 --- /dev/null +++ b/frontend/src/routes/Admin/ManagePage/UsersPanel/UsersPanel.tsx @@ -0,0 +1,23 @@ +import { Flex } from "@chakra-ui/react"; +import { ReactElement } from "react"; +import { FireEmployee } from "./FireEmployee/FireEmployee"; +import { HireEmployee } from "./HireEmployee/HireEmployee"; +import { HireEmployer } from "./HireEmployer/HireEmployer"; + +const UsersPanel = (): ReactElement => { + return ( + + + + + + ); +}; + +export default UsersPanel; diff --git a/frontend/src/routes/Admin/panels/AwardsPanel.tsx b/frontend/src/routes/Admin/panels/AwardsPanel.tsx deleted file mode 100644 index d93e05b..0000000 --- a/frontend/src/routes/Admin/panels/AwardsPanel.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Box } from "@chakra-ui/react"; -import { ReactElement } from "react"; - -const AwardsPanel = (): ReactElement => { - return ( - <> - - Awards - - - ); -}; - -export default AwardsPanel; diff --git a/frontend/src/routes/Admin/panels/RequestsPanel.tsx b/frontend/src/routes/Admin/panels/RequestsPanel.tsx deleted file mode 100644 index 9f7c0d7..0000000 --- a/frontend/src/routes/Admin/panels/RequestsPanel.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Box } from "@chakra-ui/react"; -import { ReactElement } from "react"; - -const RequestsPanel = (): ReactElement => { - return ( - <> - - Requests - - - ); -}; - -export default RequestsPanel; diff --git a/frontend/src/routes/Admin/panels/TransactionsPanel.tsx b/frontend/src/routes/Admin/panels/TransactionsPanel.tsx deleted file mode 100644 index cb242f2..0000000 --- a/frontend/src/routes/Admin/panels/TransactionsPanel.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Box } from "@chakra-ui/react"; -import { ReactElement } from "react"; - -const TransactionsPanel = (): ReactElement => { - return ( - <> - - Transactions - - - ); -}; - -export default TransactionsPanel; diff --git a/frontend/src/routes/Admin/panels/UsersPanel.tsx b/frontend/src/routes/Admin/panels/UsersPanel.tsx deleted file mode 100644 index 2809aff..0000000 --- a/frontend/src/routes/Admin/panels/UsersPanel.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Box } from "@chakra-ui/react"; -import { ReactElement } from "react"; - -const UsersPanel = (): ReactElement => { - return ( - <> - - Users - - - ); -}; - -export default UsersPanel; diff --git a/frontend/src/routes/ContentWraper/Menu/PopoverMenu/PopoverMenu.tsx b/frontend/src/routes/ContentWraper/Menu/PopoverMenu/PopoverMenu.tsx deleted file mode 100644 index a0e7236..0000000 --- a/frontend/src/routes/ContentWraper/Menu/PopoverMenu/PopoverMenu.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { CloseIcon, CopyIcon } from '@chakra-ui/icons'; -import { - Popover, - PopoverTrigger, - PopoverContent, - PopoverHeader, - PopoverBody, - Button, - Box, - Flex, - Spacer, - Text, -} from '@chakra-ui/react'; -import { ReactElement } from "react"; - -type Props = { - disconnectFunction: () => void; - walletAddress: string; -}; - -export const commonButtonWidth = '300px'; - -export const PopoverMenu = ({ disconnectFunction, walletAddress }: Props): ReactElement => { - - return ( - - - - - - - - - - {walletAddress} - - - - - - - - - - TTPSC Balance - {/* TODO: Set correct TTPSC Account balance */} - 0,00 - - - - ) -}; - -export default PopoverMenu; diff --git a/frontend/src/routes/ContentWraper/TopBar/ConnectWallet/ConnectWallet.tsx b/frontend/src/routes/ContentWraper/TopBar/ConnectWallet/ConnectWallet.tsx index f9daa40..df58e5b 100644 --- a/frontend/src/routes/ContentWraper/TopBar/ConnectWallet/ConnectWallet.tsx +++ b/frontend/src/routes/ContentWraper/TopBar/ConnectWallet/ConnectWallet.tsx @@ -9,7 +9,6 @@ import { import { useAnonWalletService } from "@services/WalletService"; import { useMutation } from "@tanstack/react-query"; import { ReactElement, useState } from "react"; -import { commonButtonWidth } from "../../Menu/PopoverMenu/PopoverMenu"; import { Error } from "./Error/Error"; import { Loading } from "./Loading/Loading"; @@ -29,12 +28,8 @@ export const ConnectWallet = (): ReactElement => { return ( <> + + + + + {avatarRef && } + + + + {walletAddress} + + + + + + + + + + + TTPSC Balance + + {/* TODO: Set correct TTPSC Account balance */} + + {balance} + + + + + ); +}; + +export default PopoverMenu; diff --git a/frontend/src/routes/ContentWraper/TopBar/TopBar.tsx b/frontend/src/routes/ContentWraper/TopBar/TopBar.tsx index 295acce..317943b 100644 --- a/frontend/src/routes/ContentWraper/TopBar/TopBar.tsx +++ b/frontend/src/routes/ContentWraper/TopBar/TopBar.tsx @@ -4,7 +4,7 @@ import { paths } from "@utils/paths"; import { ReactElement, useContext, useEffect, useState } from "react"; import { AdminLink } from "./AdminLink/AdminLink"; import { ConnectWallet } from "./ConnectWallet/ConnectWallet"; -import { DisconnectWallet } from "../Menu/Menu"; +import { Menu } from "./Menu/Menu"; import { TopBarLink } from "./TopBarLink/TopBarLink"; export const TopBar = (): ReactElement => { @@ -20,8 +20,9 @@ export const TopBar = (): ReactElement => { }, [context]); return ( { Awards Send About - {isAdmin && Menage} + {isAdmin && Manage} {status === "anon" ? ( @@ -41,7 +42,7 @@ export const TopBar = (): ReactElement => { ) : status === "auth" ? ( - + ) : undefined} diff --git a/frontend/src/routes/Root/MainBox/AwardCard.tsx b/frontend/src/routes/Root/MainBox/AwardCard.tsx index cf58799..30d2714 100644 --- a/frontend/src/routes/Root/MainBox/AwardCard.tsx +++ b/frontend/src/routes/Root/MainBox/AwardCard.tsx @@ -1,23 +1,33 @@ import { Box, Button, - ButtonGroup, Card, CardBody, Divider, Flex, Heading, Image, + Modal, + ModalBody, + ModalContent, + ModalOverlay, Spacer, + Spinner, Stack, Text, + useDisclosure, + useToast, } from "@chakra-ui/react"; +import { RewardManagerServiceValue } from "@services/RewardManagerService"; import { WalletService } from "@services/WalletService"; +import { useMutation } from "@tanstack/react-query"; +import { ethers } from "ethers"; import { ReactElement, useContext, useEffect, useState } from "react"; type Props = { - description: string; + id: number; image: string; + rewardManagerService: RewardManagerServiceValue; title: string; value: string; }; @@ -26,9 +36,10 @@ const currency = "TTPSC"; export const AwardCard = ({ title, - description, value, image, + rewardManagerService, + id, }: Props): ReactElement => { const context = useContext(WalletService); const [isDisabled, setIsDisabled] = useState(true); @@ -39,35 +50,93 @@ export const AwardCard = ({ setIsDisabled(true); } }, [context.status]); + const { mutate, isLoading } = useMutation(rewardManagerService.placeOrder); + const toast = useToast(); + const handleSubmit = () => { + mutate( + { id, value }, + { + onError: () => { + toast({ + title: "Error", + description: "Failed to collect the reward", + status: "error", + duration: 5000, + isClosable: true, + }); + }, + onSuccess: () => { + toast({ + title: "Whooo", + description: "The reward has been collected", + status: "success", + duration: 5000, + isClosable: true, + }); + }, + } + ); + }; + const { onClose } = useDisclosure(); + return ( - - - {`${description}, - - {title} - {description} - - - - - - - {value} {currency} - - - - - - - - - - + + + + ); }; diff --git a/frontend/src/routes/Root/MainBox/CardWrapper.tsx b/frontend/src/routes/Root/MainBox/CardWrapper.tsx index 2405e20..f17736f 100644 --- a/frontend/src/routes/Root/MainBox/CardWrapper.tsx +++ b/frontend/src/routes/Root/MainBox/CardWrapper.tsx @@ -1,61 +1,32 @@ import { Flex } from "@chakra-ui/react"; +import { + Awards, + useRewardManagerService, +} from "@services/RewardManagerService"; import { ReactElement } from "react"; import { AwardCard } from "./AwardCard"; -const cardData = { - title: "Allegro 50PLN", - value: "5,00", - description: "Allegro gift card", - image: - "https://a.allegroimg.com/s720/03444d/5fbfc8ff4da986b370a7d62997c3/Karta-Podarunkowa-Prezent-50-zl", +type Props = { + data: Awards[]; }; -export const CardWrapper = (): ReactElement => { - return ( - <> - - - - - - +export const CardWrapper = ({ data }: Props): ReactElement => { + const rewardManagerService = useRewardManagerService(); - - - - - - - + return ( + + {data.map((award) => { + return ( + + ); + })} + ); }; diff --git a/frontend/src/routes/Root/MainBox/MainBox.tsx b/frontend/src/routes/Root/MainBox/MainBox.tsx index efcea02..4b68227 100644 --- a/frontend/src/routes/Root/MainBox/MainBox.tsx +++ b/frontend/src/routes/Root/MainBox/MainBox.tsx @@ -1,24 +1,47 @@ -import { Center, Container, Flex, Heading, Spacer } from "@chakra-ui/react"; +import { Box, Container, Flex, Heading } from "@chakra-ui/react"; +import { useRewardManagerService } from "@services/RewardManagerService"; +import { useQuery } from "@tanstack/react-query"; import { ReactElement } from "react"; import { CardWrapper } from "./CardWrapper"; +import { MainLoading } from "./MainLoading/MainLoading"; export const MainBox = (): ReactElement => { + const rewardManagerService = useRewardManagerService(); + const quer = useQuery( + rewardManagerService.rewardKey(), + rewardManagerService._getAllRewards + ); return ( - <> -
- - Redeem - - TTPSC - - tokens for any rewards - -
- - - - + + + Redeem + + TTPSC + + tokens for any rewards + + + + {quer.status === "loading" ? ( + + + + + + + + + ) : quer.status === "success" ? ( + + ) : ( + Error + )} - + ); }; diff --git a/frontend/src/routes/Root/MainBox/MainLoading/MainLoading.tsx b/frontend/src/routes/Root/MainBox/MainLoading/MainLoading.tsx new file mode 100644 index 0000000..e9cb129 --- /dev/null +++ b/frontend/src/routes/Root/MainBox/MainLoading/MainLoading.tsx @@ -0,0 +1,35 @@ +import { + Box, + Card, + CardBody, + Divider, + Flex, + Skeleton, + SkeletonText, + Spacer, + Stack, +} from "@chakra-ui/react"; +import { ReactElement } from "react"; + +export const MainLoading = (): ReactElement => { + return ( + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/frontend/src/routes/Root/Root.tsx b/frontend/src/routes/Root/Root.tsx index 4a19fa7..8847aef 100644 --- a/frontend/src/routes/Root/Root.tsx +++ b/frontend/src/routes/Root/Root.tsx @@ -1,12 +1,19 @@ +import { ConnectYourWallet } from "@components/ConnectYourWallet/ConnectYourWallet"; import { NoWalletDetected } from "@components/NoWalletDetected"; import { MainBox } from "@routes/Root/MainBox/MainBox"; -import { ReactElement } from "react"; +import { WalletService } from "@services/WalletService"; +import { ReactElement, useContext } from "react"; const Root = (): ReactElement => { + const context = useContext(WalletService); if (window.ethereum === undefined) { return ; } - return ; + if (context.status === "auth" && context.wallet.isAdmin) { + return ; + } + + return ; }; export default Root; diff --git a/frontend/src/routes/Send/Send.tsx b/frontend/src/routes/Send/Send.tsx index 89debfe..571c3b3 100644 --- a/frontend/src/routes/Send/Send.tsx +++ b/frontend/src/routes/Send/Send.tsx @@ -1,4 +1,4 @@ -import { Flex, Heading } from "@chakra-ui/react"; +import { ConnectYourWallet } from "@components/ConnectYourWallet/ConnectYourWallet"; import { NoWalletDetected } from "@components/NoWalletDetected"; import { useWalletService } from "@services/WalletService"; import { ReactElement } from "react"; @@ -13,11 +13,7 @@ const Send = (): ReactElement => { if (status === "auth") { return ; } - return ( - - Wallet not connected - - ); + return ; }; export default Send; diff --git a/frontend/src/routes/Send/SendForm.tsx b/frontend/src/routes/Send/SendForm.tsx index e581101..268f8bd 100644 --- a/frontend/src/routes/Send/SendForm.tsx +++ b/frontend/src/routes/Send/SendForm.tsx @@ -1,27 +1,68 @@ import { - Stack, - InputGroup, - InputLeftElement, - Input, - InputRightElement, - CheckboxIcon, - Textarea, Button, Center, Container, Flex, Heading, + Input, + NumberDecrementStepper, + NumberIncrementStepper, + NumberInput, + NumberInputField, + NumberInputStepper, Spacer, + Stack, + Text, + Textarea, + useToast, } from "@chakra-ui/react"; -import { ReactElement } from "react"; +import { usePaymnetManagerService } from "@services/PaymentManagerService"; +import { useMutation } from "@tanstack/react-query"; +import { ReactElement, useState } from "react"; const SendForm = (): ReactElement => { + const [address, setAddress] = useState(""); + const [amount, setAmount] = useState(0); + const [paymentRequestReason, setPaymentRequestReason] = useState(""); + + const paymentManagerService = usePaymnetManagerService(); + const { mutate } = useMutation(paymentManagerService._createPaymentRequest); + const toast = useToast(); + const handleSubmit = () => { + mutate( + { + address, + amount, + paymentRequestReason, + }, + { + onError: () => { + toast({ + title: "Error", + description: "Failed to send the request", + status: "error", + duration: 5000, + isClosable: true, + }); + }, + onSuccess: () => { + toast({ + title: "Whooo", + description: "The request was sent", + status: "success", + duration: 5000, + isClosable: true, + }); + }, + } + ); + }; return ( <>
Send - + TTPSC tokens to anyone @@ -35,43 +76,40 @@ const SendForm = (): ReactElement => { > - - - @ - - - + Address + setAddress(value.target.value)} + placeholder="Recipient account address" + value={address} + /> + Amount + setAmount(Number(value))} + placeholder="Enter amount" + precision={2} + value={amount} + w="full" + > + + + + + + - - - $ - - - - - - - -