From 48d13ed6bccf4af156a8b3dc17d0df8d5fd94b3b Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Fri, 7 Oct 2022 06:01:23 -0700 Subject: [PATCH] feat(getTokenData2): Adding token icon and media retrieval --- package-lock.json | 43 +++++++++++++------------- package.json | 6 ++-- src/adapters/bch/index.js | 43 ++++++++++++++++++++++++++ test/unit/adapters/bch.adapter.unit.js | 30 ++++++++++++++++++ 4 files changed, 97 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 92f7b15..091561b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,12 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@psf/bch-js": "6.4.5", + "@psf/bch-js": "6.5.1", "axios": "0.27.2", "bcryptjs": "2.4.3", "glob": "7.1.6", "ipfs": "0.62.3", - "ipfs-coord": "8.0.4", + "ipfs-coord": "8.0.5", "ipfs-http-client": "55.0.0", "jsonrpc-lite": "2.2.0", "jsonwebtoken": "8.5.1", @@ -36,7 +36,7 @@ "nodemailer": "6.7.5", "passport-local": "1.0.0", "public-ip": "4.0.4", - "semver": "^7.3.5", + "semver": "7.3.5", "winston": "3.3.3", "winston-daily-rotate-file": "4.5.0" }, @@ -1481,9 +1481,9 @@ "license": "BSD-3-Clause" }, "node_modules/@psf/bch-js": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-6.4.5.tgz", - "integrity": "sha512-sH72zbJJI5oe9EUMczFQb0jCaNQb8rc3/86E6xXKl3325HCwBqE80BX7JFvZ97Qv1gGxwp/3WROp59v6Dz2NKA==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-6.5.1.tgz", + "integrity": "sha512-W52V6NCte/LJZ2TMJwXorq2FdwMMzjS94sh4slebrcUp6oHiAG+/NouQ4ID/I1DEJQlQnQpf2j3zxveCimDERQ==", "dependencies": { "@chris.troutner/bip32-utils": "1.0.5", "@psf/bip21": "2.0.1", @@ -8839,9 +8839,9 @@ } }, "node_modules/ipfs-coord": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/ipfs-coord/-/ipfs-coord-8.0.4.tgz", - "integrity": "sha512-jwZsrDlEWSHMnAde8PdyUScTzRlTCIvPAziChoczj5ZOZJIUbxLNkGphBI0xDj2G/LzjPrU1Ko/QZrU+oLFUnw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/ipfs-coord/-/ipfs-coord-8.0.5.tgz", + "integrity": "sha512-V4pqR+MU290ZxFRE+Rx/7JuxR7LsOFBLuL0av3eVU5ZQWqeF/Zi9vh52zCqpp1IBCXi4QXNZGlysvm16xFDXww==", "dependencies": { "axios": "0.21.4", "bch-encrypt-lib": "2.0.0", @@ -18620,10 +18620,9 @@ } }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "http://94.130.170.209:4873/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "license": "ISC", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -23176,9 +23175,9 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@psf/bch-js": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-6.4.5.tgz", - "integrity": "sha512-sH72zbJJI5oe9EUMczFQb0jCaNQb8rc3/86E6xXKl3325HCwBqE80BX7JFvZ97Qv1gGxwp/3WROp59v6Dz2NKA==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-6.5.1.tgz", + "integrity": "sha512-W52V6NCte/LJZ2TMJwXorq2FdwMMzjS94sh4slebrcUp6oHiAG+/NouQ4ID/I1DEJQlQnQpf2j3zxveCimDERQ==", "requires": { "@chris.troutner/bip32-utils": "1.0.5", "@psf/bip21": "2.0.1", @@ -28416,9 +28415,9 @@ } }, "ipfs-coord": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/ipfs-coord/-/ipfs-coord-8.0.4.tgz", - "integrity": "sha512-jwZsrDlEWSHMnAde8PdyUScTzRlTCIvPAziChoczj5ZOZJIUbxLNkGphBI0xDj2G/LzjPrU1Ko/QZrU+oLFUnw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/ipfs-coord/-/ipfs-coord-8.0.5.tgz", + "integrity": "sha512-V4pqR+MU290ZxFRE+Rx/7JuxR7LsOFBLuL0av3eVU5ZQWqeF/Zi9vh52zCqpp1IBCXi4QXNZGlysvm16xFDXww==", "requires": { "axios": "0.21.4", "bch-encrypt-lib": "2.0.0", @@ -35492,9 +35491,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "http://94.130.170.209:4873/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "requires": { "lru-cache": "^6.0.0" } diff --git a/package.json b/package.json index 197654f..6dd345e 100644 --- a/package.json +++ b/package.json @@ -23,12 +23,12 @@ }, "repository": "Permissionless-Software-Foundation/ipfs-bch-wallet-consumer", "dependencies": { - "@psf/bch-js": "6.4.5", + "@psf/bch-js": "6.5.1", "axios": "0.27.2", "bcryptjs": "2.4.3", "glob": "7.1.6", "ipfs": "0.62.3", - "ipfs-coord": "8.0.4", + "ipfs-coord": "8.0.5", "ipfs-http-client": "55.0.0", "jsonrpc-lite": "2.2.0", "jsonwebtoken": "8.5.1", @@ -50,7 +50,7 @@ "nodemailer": "6.7.5", "passport-local": "1.0.0", "public-ip": "4.0.4", - "semver": "^7.3.5", + "semver": "7.3.5", "winston": "3.3.3", "winston-daily-rotate-file": "4.5.0" }, diff --git a/src/adapters/bch/index.js b/src/adapters/bch/index.js index 3507fd5..0bc6685 100644 --- a/src/adapters/bch/index.js +++ b/src/adapters/bch/index.js @@ -472,6 +472,49 @@ class BchAdapter { } } + // Get token icon and other media associated with the token. + async getTokenData2 (tokenId) { + try { + // Throw an error if this IPFS node has not yet made a connection to a + // wallet service provider. + const selectedProvider = + this.ipfs.ipfsCoordAdapter.state.selectedServiceProvider + if (!selectedProvider) { + throw new Error('No BCH Wallet Service provider available yet.') + } + + const rpcData = { + endpoint: 'getTokenData2', + tokenId + } + + // Generate a UUID for the call. + const rpcId = this.uid() + + // Generate a JSON RPC command. + const cmd = this.jsonrpc.request(rpcId, 'bch', rpcData) + const cmdStr = JSON.stringify(cmd) + console.log('cmdStr: ', cmdStr) + + // Send the RPC command to selected wallet service. + const thisNode = this.ipfs.ipfsCoordAdapter.ipfsCoord.thisNode + await this.ipfs.ipfsCoordAdapter.ipfsCoord.useCases.peer.sendPrivateMessage( + selectedProvider, + cmdStr, + thisNode + ) + + // Wait for data to come back from the wallet service. + const data = await this.waitForRPCResponse(rpcId) + + return data + } catch (err) { + console.log('getTokenData2() error: ', err) + wlogger.error('Error in adapters/bch.js/getTokenData2()') + throw err + } + } + // Returns a promise that resolves to data when the RPC response is recieved. async waitForRPCResponse (rpcId) { try { diff --git a/test/unit/adapters/bch.adapter.unit.js b/test/unit/adapters/bch.adapter.unit.js index c2ef701..c348f46 100644 --- a/test/unit/adapters/bch.adapter.unit.js +++ b/test/unit/adapters/bch.adapter.unit.js @@ -344,4 +344,34 @@ describe('#bch-use-case', () => { } }) }) + + describe('#getTokenData2', () => { + it('should validate a utxo', async () => { + // Force connection to a wallet service + uut.ipfs.ipfsCoordAdapter.state = { + selectedServiceProvider: 'abc123' + } + + // Mock depenencies + sandbox.stub(uut, 'waitForRPCResponse').resolves({ key: 'value' }) + + const tokenId = 'blah' + + const result = await uut.getTokenData2(tokenId) + // console.log('result: ', result) + + assert.equal(result.key, 'value') + }) + + it('should catch and throw an error', async () => { + try { + await uut.getTokenData2() + + assert.fail('Unexpected code path') + } catch (err) { + // console.log(err) + assert.equal(err.message, 'test error') + } + }) + }) })