diff --git a/config-overrides.js b/config-overrides.js new file mode 100644 index 0000000..62b24b0 --- /dev/null +++ b/config-overrides.js @@ -0,0 +1,18 @@ +const webpack = require('webpack'); + +module.exports = function override(config) { + config.resolve.fallback = { + ...config.resolve.fallback, + crypto: require.resolve('crypto-browserify'), + stream: require.resolve('stream-browserify'), + vm: require.resolve('vm-browserify'), + }; + + config.plugins = (config.plugins || []).concat([ + new webpack.ProvidePlugin({ + process: 'process/browser', + }), + ]); + + return config; +}; diff --git a/package-lock.json b/package-lock.json index dcbabd8..f7209e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "bch-wallet-web3-spa", + "name": "bch-dex-taker-v2", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "bch-wallet-web3-spa", + "name": "bch-dex-taker-v2", "version": "1.0.0", "dependencies": { "@chris.troutner/react-jdenticon": "1.0.1", @@ -14,8 +14,11 @@ "@fortawesome/free-solid-svg-icons": "6.7.2", "@fortawesome/react-fontawesome": "0.2.2", "axios": "0.27.2", + "bch-dex-lib": "2.0.2", "bch-message-lib": "2.2.1", "bootstrap": "5.2.0", + "crypto-browserify": "3.12.1", + "process": "^0.11.10", "qrcode.react": "4.2.0", "query-string": "7.1.1", "react": "19.0.0", @@ -23,11 +26,14 @@ "react-dom": "19.0.0", "react-router-dom": "7.1.3", "react-scripts": "5.0.1", + "stream-browserify": "^3.0.0", "use-local-storage-state": "19.5.0", - "use-query-params": "1.2.3" + "use-query-params": "1.2.3", + "vm-browserify": "1.1.2" }, "devDependencies": { "minimal-slp-wallet": "5.8.5", + "react-app-rewired": "^2.2.1", "standard": "17.0.0", "web3.storage": "4.3.0" } @@ -1770,6 +1776,23 @@ "node": ">=10.15.1" } }, + "node_modules/@chris.troutner/nostr-tools": { + "version": "2.10.4", + "resolved": "http://94.130.170.209:4873/@chris.troutner%2fnostr-tools/-/nostr-tools-2.10.4.tgz", + "integrity": "sha512-e8AYJ0yQ0O3bvnuXQUIdB+P3W7f06st+TXfmbpd6U7IpJ5jWhczoLGvF0NiCgKB6YHTaTGx4hoRLF2A744PzmQ==", + "license": "Unlicense", + "dependencies": { + "@noble/ciphers": "^0.5.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.1", + "@scure/base": "1.1.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + }, + "optionalDependencies": { + "nostr-wasm": "0.1.0" + } + }, "node_modules/@chris.troutner/react-jdenticon": { "version": "1.0.1", "resolved": "http://94.130.170.209:4873/@chris.troutner%2freact-jdenticon/-/react-jdenticon-1.0.1.tgz", @@ -1783,6 +1806,16 @@ "react": ">= 18" } }, + "node_modules/@chris.troutner/retry-queue": { + "version": "1.0.10", + "resolved": "http://94.130.170.209:4873/@chris.troutner%2fretry-queue/-/retry-queue-1.0.10.tgz", + "integrity": "sha512-iF+xQl3jyTATAKDVkwY85j4Npihh/MqG99bjrS0cNJDF0XQeUSMVGsdtXR6TFj8YcEgfPvgBdYGOtEFo6tTQpA==", + "license": "MIT", + "dependencies": { + "p-queue": "7.3.0", + "p-retry": "5.1.1" + } + }, "node_modules/@chris.troutner/retry-queue-commonjs": { "version": "1.0.8", "license": "MIT", @@ -1791,6 +1824,44 @@ "p-retry": "4.6.2" } }, + "node_modules/@chris.troutner/retry-queue/node_modules/@types/retry": { + "version": "0.12.1", + "resolved": "http://94.130.170.209:4873/@types%2fretry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "license": "MIT" + }, + "node_modules/@chris.troutner/retry-queue/node_modules/p-queue": { + "version": "7.3.0", + "resolved": "http://94.130.170.209:4873/p-queue/-/p-queue-7.3.0.tgz", + "integrity": "sha512-5fP+yVQ0qp0rEfZoDTlP2c3RYBgxvRsw30qO+VtPPc95lyvSG+x6USSh1TuLB4n96IO6I8/oXQGsTgtna4q2nQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.7", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@chris.troutner/retry-queue/node_modules/p-retry": { + "version": "5.1.1", + "resolved": "http://94.130.170.209:4873/p-retry/-/p-retry-5.1.1.tgz", + "integrity": "sha512-i69WkEU5ZAL8mrmdmVviWwU+DN+IUF8f4sSJThoJ3z5A7Nn5iuO5ROX3Boye0u+uYQLOSfgFl7SuFZCjlAVbQA==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.1", + "retry": "^0.13.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "license": "MIT", @@ -2849,6 +2920,39 @@ "murmurhash3js-revisited": "^3.0.0" } }, + "node_modules/@noble/ciphers": { + "version": "0.5.3", + "resolved": "http://94.130.170.209:4873/@noble%2fciphers/-/ciphers-0.5.3.tgz", + "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "http://94.130.170.209:4873/@noble%2fcurves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "http://94.130.170.209:4873/@noble%2fhashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@noble/ed25519": { "version": "1.6.0", "dev": true, @@ -2860,6 +2964,18 @@ ], "license": "MIT" }, + "node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "http://94.130.170.209:4873/@noble%2fhashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@noble/secp256k1": { "version": "1.6.0", "dev": true, @@ -3235,6 +3351,57 @@ "version": "1.1.3", "license": "MIT" }, + "node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "http://94.130.170.209:4873/@scure%2fbase/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "http://94.130.170.209:4873/@scure%2fbip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "http://94.130.170.209:4873/@noble%2fcurves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "http://94.130.170.209:4873/@scure%2fbip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@sinclair/typebox": { "version": "0.23.5", "license": "MIT" @@ -4603,6 +4770,17 @@ "version": "2.0.6", "license": "MIT" }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "http://94.130.170.209:4873/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/ast-types-flow": { "version": "0.0.7", "license": "ISC" @@ -4971,6 +5149,15 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/base58-js": { + "version": "2.0.0", + "resolved": "http://94.130.170.209:4873/base58-js/-/base58-js-2.0.0.tgz", + "integrity": "sha512-nAV5d32QXuGcGptSApkKpC1gGakWBnfJMNjKrYTBh4tb0szfZF+ooueFLy8T4VrY+o4SrE/TyrtUnRZcwZchaA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/base64-js": { "version": "1.5.1", "dev": true, @@ -5017,6 +5204,16 @@ "follow-redirects": "^1.14.7" } }, + "node_modules/bch-dex-lib": { + "version": "2.0.2", + "resolved": "http://94.130.170.209:4873/bch-dex-lib/-/bch-dex-lib-2.0.2.tgz", + "integrity": "sha512-x639TqYjRucvFrWzr9PMWN5Jdj2+lJkk1m4LC9Zlfm0QNe1PLD4WqyqH1dxMUdA/L9TVpPq1V/HbAiiQZmjV6Q==", + "license": "MIT", + "dependencies": { + "@chris.troutner/retry-queue": "1.0.10", + "bch-nostr": "1.3.4" + } + }, "node_modules/bch-donation": { "version": "1.1.2", "license": "MIT", @@ -5031,6 +5228,100 @@ "minimal-slp-wallet": ">= 4" } }, + "node_modules/bch-nostr": { + "version": "1.3.4", + "resolved": "http://94.130.170.209:4873/bch-nostr/-/bch-nostr-1.3.4.tgz", + "integrity": "sha512-5R6PtZsP1F+oDs7+sZ5d+DeM3XNhr+3QsyHmTbFdoyNcb3w0vFN3KYNvaXpfPYBUDncXPJBNSR5GOstEDRSCgg==", + "license": "MIT", + "dependencies": { + "@chris.troutner/nostr-tools": "2.10.4", + "apidoc": "0.53.0", + "base58-js": "2.0.0", + "bch-message-lib": "2.3.1", + "nostr": "0.2.8", + "ws": "8.18.0" + } + }, + "node_modules/bch-nostr/node_modules/apidoc": { + "version": "0.53.0", + "resolved": "http://94.130.170.209:4873/apidoc/-/apidoc-0.53.0.tgz", + "integrity": "sha512-H4hYToCrI6TgSksdVHxS7h5/Xoqr/rR9m9/IOQaYqXbX07cPVbg0O3RM4+bR4tJKG1aqBWKKm+xojQ8+4i7O5A==", + "license": "MIT", + "os": [ + "darwin", + "freebsd", + "linux", + "openbsd", + "win32" + ], + "dependencies": { + "bootstrap": "3.4.1", + "commander": "^8.3.0", + "diff-match-patch": "^1.0.5", + "esbuild-loader": "^2.16.0", + "expose-loader": "^3.1.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "handlebars": "^4.7.7", + "iconv-lite": "^0.6.3", + "jquery": "^3.6.0", + "klaw-sync": "^6.0.0", + "lodash": "^4.17.21", + "markdown-it": "^12.2.0", + "nodemon": "^2.0.15", + "prismjs": "^1.25.0", + "semver": "^7.3.5", + "style-loader": "^3.3.1", + "webpack": "^5.64.2", + "webpack-cli": "^4.9.1", + "winston": "^3.3.3" + }, + "bin": { + "apidoc": "bin/apidoc" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/bch-nostr/node_modules/bch-message-lib": { + "version": "2.3.1", + "resolved": "http://94.130.170.209:4873/bch-message-lib/-/bch-message-lib-2.3.1.tgz", + "integrity": "sha512-xAWMRvmcP2mYTdp9KgjSQfxlJF4DTloCJrjGx0TumD3HPF9mmYZ/CiCGUAFdQk3LBCavnK0AZi9v3+JTNSnrcA==", + "license": "MIT", + "peerDependencies": { + "minimal-slp-wallet": ">= 5" + } + }, + "node_modules/bch-nostr/node_modules/bootstrap": { + "version": "3.4.1", + "resolved": "http://94.130.170.209:4873/bootstrap/-/bootstrap-3.4.1.tgz", + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/bch-nostr/node_modules/ws": { + "version": "8.18.0", + "resolved": "http://94.130.170.209:4873/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/bchaddrjs-slp": { "version": "0.2.5", "license": "MIT", @@ -5322,6 +5613,165 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "http://94.130.170.209:4873/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "http://94.130.170.209:4873/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "http://94.130.170.209:4873/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "http://94.130.170.209:4873/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/browserify-rsa/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "http://94.130.170.209:4873/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "http://94.130.170.209:4873/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "http://94.130.170.209:4873/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.5", + "resolved": "http://94.130.170.209:4873/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "http://94.130.170.209:4873/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://94.130.170.209:4873/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "http://94.130.170.209:4873/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "http://94.130.170.209:4873/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://94.130.170.209:4873/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/browserslist": { "version": "4.20.4", "funding": [ @@ -5979,6 +6429,16 @@ "node": ">=10" } }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "http://94.130.170.209:4873/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, "node_modules/create-hash": { "version": "1.2.0", "license": "MIT", @@ -6014,6 +6474,65 @@ "node": ">= 8" } }, + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "http://94.130.170.209:4873/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/crypto-browserify/node_modules/hash-base": { + "version": "3.0.5", + "resolved": "http://94.130.170.209:4873/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crypto-browserify/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "http://94.130.170.209:4873/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/crypto-js": { "version": "4.0.0", "license": "MIT" @@ -6562,6 +7081,16 @@ "node": ">=6" } }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "http://94.130.170.209:4873/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/destroy": { "version": "1.2.0", "license": "MIT", @@ -6637,6 +7166,17 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "http://94.130.170.209:4873/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "license": "MIT", @@ -6864,7 +7404,9 @@ "license": "ISC" }, "node_modules/elliptic": { - "version": "6.5.4", + "version": "6.6.1", + "resolved": "http://94.130.170.209:4873/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", "dependencies": { "bn.js": "^4.11.9", @@ -12606,6 +13148,19 @@ "node": ">=8.6" } }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "http://94.130.170.209:4873/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, "node_modules/mime": { "version": "1.6.0", "license": "MIT", @@ -12894,6 +13449,13 @@ "tslib": "^2.0.3" } }, + "node_modules/noble-secp256k1": { + "version": "1.2.14", + "resolved": "http://94.130.170.209:4873/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz", + "integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==", + "deprecated": "Switch to namespaced @noble/secp256k1 for security and feature updates", + "license": "MIT" + }, "node_modules/node-addon-api": { "version": "2.0.2", "license": "MIT" @@ -13022,6 +13584,44 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nostr": { + "version": "0.2.8", + "resolved": "http://94.130.170.209:4873/nostr/-/nostr-0.2.8.tgz", + "integrity": "sha512-p25OQiEB5x8rWWoWLRRbxtxQiaQgypaQQakSKw5+cp/SW0DXea/soMzqmTXei1I6HrcARuyfvedGTdoEU471Ow==", + "license": "MIT", + "dependencies": { + "noble-secp256k1": "^1.2.14", + "ws": "^8.8.1" + } + }, + "node_modules/nostr-wasm": { + "version": "0.1.0", + "resolved": "http://94.130.170.209:4873/nostr-wasm/-/nostr-wasm-0.1.0.tgz", + "integrity": "sha512-78BTryCLcLYv96ONU8Ws3Q1JzjlAt+43pWQhIl86xZmWeegYCNLPml7yQ+gG3vR6V5h4XGj+TxO+SS5dsThQIA==", + "license": "MIT", + "optional": true + }, + "node_modules/nostr/node_modules/ws": { + "version": "8.18.0", + "resolved": "http://94.130.170.209:4873/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "license": "MIT", @@ -13319,6 +13919,18 @@ "node": ">=8" } }, + "node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "http://94.130.170.209:4873/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "license": "MIT", @@ -13344,6 +13956,56 @@ "node": ">=6" } }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "http://94.130.170.209:4873/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/hash-base": { + "version": "3.0.5", + "resolved": "http://94.130.170.209:4873/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "http://94.130.170.209:4873/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/parse-duration": { "version": "1.0.2", "dev": true, @@ -14781,6 +15443,15 @@ "node": ">=6" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "http://94.130.170.209:4873/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "license": "MIT" @@ -14874,6 +15545,20 @@ "version": "1.1.8", "license": "MIT" }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "http://94.130.170.209:4873/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "node_modules/punycode": { "version": "2.1.1", "license": "MIT", @@ -14996,6 +15681,16 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "http://94.130.170.209:4873/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "license": "MIT", @@ -15055,6 +15750,32 @@ "node": ">=14" } }, + "node_modules/react-app-rewired": { + "version": "2.2.1", + "resolved": "http://94.130.170.209:4873/react-app-rewired/-/react-app-rewired-2.2.1.tgz", + "integrity": "sha512-uFQWTErXeLDrMzOJHKp0h8P1z0LV9HzPGsJ6adOtGlA/B9WfT6Shh4j2tLTTGlXOfiVx6w6iWpp7SOC5pvk+gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.6.0" + }, + "bin": { + "react-app-rewired": "bin/index.js" + }, + "peerDependencies": { + "react-scripts": ">=2.1.3" + } + }, + "node_modules/react-app-rewired/node_modules/semver": { + "version": "5.7.2", + "resolved": "http://94.130.170.209:4873/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/react-bootstrap": { "version": "2.10.7", "license": "MIT", @@ -16570,6 +17291,16 @@ "node": ">= 0.4" } }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "http://94.130.170.209:4873/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, "node_modules/stream-to-it": { "version": "0.2.4", "dev": true, @@ -17641,6 +18372,12 @@ "node": ">= 0.8" } }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "http://94.130.170.209:4873/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "license": "MIT" + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "license": "MIT", diff --git a/package.json b/package.json index 7e86069..bc3f282 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,11 @@ "@fortawesome/free-solid-svg-icons": "6.7.2", "@fortawesome/react-fontawesome": "0.2.2", "axios": "0.27.2", + "bch-dex-lib": "2.0.2", "bch-message-lib": "2.2.1", "bootstrap": "5.2.0", + "crypto-browserify": "3.12.1", + "process": "^0.11.10", "qrcode.react": "4.2.0", "query-string": "7.1.1", "react": "19.0.0", @@ -17,14 +20,16 @@ "react-dom": "19.0.0", "react-router-dom": "7.1.3", "react-scripts": "5.0.1", + "stream-browserify": "^3.0.0", "use-local-storage-state": "19.5.0", - "use-query-params": "1.2.3" + "use-query-params": "1.2.3", + "vm-browserify": "1.1.2" }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject", + "start": "react-app-rewired start", + "build": "react-app-rewired build", + "test": "react-app-rewired test", + "eject": "react-app-rewired eject", "lint": "standard --env mocha --fix", "pub": "node deploy/publish-main.js", "pub:ghp": "./deploy/publish-gh-pages.sh" @@ -46,6 +51,7 @@ }, "devDependencies": { "minimal-slp-wallet": "5.8.5", + "react-app-rewired": "^2.2.1", "standard": "17.0.0", "web3.storage": "4.3.0" } diff --git a/src/components/app-body/nfts-for-sale/index.js b/src/components/app-body/nfts-for-sale/index.js index af1f055..becb772 100644 --- a/src/components/app-body/nfts-for-sale/index.js +++ b/src/components/app-body/nfts-for-sale/index.js @@ -9,6 +9,7 @@ import axios from 'axios' import Jdenticon from '@chris.troutner/react-jdenticon' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faRedo } from '@fortawesome/free-solid-svg-icons' +import BchDexLib from 'bch-dex-lib' // import RetryQueue from '@chris.troutner/retry-queue' // Local libraries @@ -38,6 +39,14 @@ function NftsForSale (props) { const rawOffers = result.data const bchjs = appData.wallet.bchjs + const wallet = appData.wallet + + // Instantiate the BchDexLib object. + const dexLib = new BchDexLib({bchWallet: wallet, p2wdbRead: {}, p2wdbWrite: {}}) + + const offerDataCallback = (offer) => { + console.log('offerDataCallback() offer: ', offer) + } // Add a default icon. for (let i = 0; i < rawOffers.length; i++) { @@ -57,6 +66,9 @@ function NftsForSale (props) { // console.log(`usdPrice: ${usdPrice}`) const priceStr = `$${usdPrice.toFixed(3)}` thisOffer.usdPrice = priceStr + + // Download token data + await dexLib.tokenData.getTokenData(thisOffer, offerDataCallback) } return rawOffers @@ -90,7 +102,7 @@ function NftsForSale (props) { // Load NFT data when the page loads from the server or from the cache. useEffect(() => { asyncStartup() - }, [offers]) + }, []) // This function generates a Token Card for each token in the wallet. function generateCards () { diff --git a/src/components/app-body/nfts-for-sale/info-button.js b/src/components/app-body/nfts-for-sale/info-button.js new file mode 100644 index 0000000..da71b68 --- /dev/null +++ b/src/components/app-body/nfts-for-sale/info-button.js @@ -0,0 +1,94 @@ +/* + This component renders as a button. When clicked, it opens a modal that + displays information about the token. + + This is a functional component with as little state as possible. +*/ + +// Global npm libraries +import React, { useState } from 'react' +import { Button, Modal, Container, Row, Col } from 'react-bootstrap' + +function InfoButton (props) { + const [show, setShow] = useState(false) + + const handleClose = () => { + console.log('handleClose()') + setShow(false) + // props.instance.setState({ showModal: false }) + } + + const handleOpen = () => { + console.log('handleOpen()') + setShow(true) + } + + console.log('props.token: ', props.token) + + // Replace with dummy button until token data is loaded. + if (!props.token.tokenData) { + return ( + <> + + + ) + } + + // Convert the url property of the token to a link, if it matches common patterns. + // let url = props.token.tokenurl + // url = linkIfUrl(props.token.url) + + // console.log('props.token: ', props.token) + + return ( + <> + + + + Token Information + + + + + Ticker: + {props.token.ticker} + + + + Name: + {props.token.tokenData.tokenStats.name} + + + + Token ID: + + + {props.token.tokenId} + + + + + + Decimals: + {props.token.tokenData.tokenStats.decimals} + + + + Token Type: + {props.token.tokenType} + + {/* + + URL: + {url} + + */} + + + + + + ) +} + +export default InfoButton \ No newline at end of file diff --git a/src/components/app-body/nfts-for-sale/token-card.js b/src/components/app-body/nfts-for-sale/token-card.js index ff1b0ef..2cb74a4 100644 --- a/src/components/app-body/nfts-for-sale/token-card.js +++ b/src/components/app-body/nfts-for-sale/token-card.js @@ -6,7 +6,7 @@ import React from 'react' import { Container, Row, Col, Card } from 'react-bootstrap' // import BuyNftButton from './buy-button' -// import InfoButton from './info-button' +import InfoButton from './info-button' // import FlagButton from './flag-button' // Local libraries @@ -24,6 +24,8 @@ function TokenCard (props) { } } + console.log('TokenCard props.token: ', props.token) + return ( <> @@ -52,8 +54,12 @@ function TokenCard (props) { -

buttons here

+ + + + +