diff --git a/src/routes/v3/slp.js b/src/routes/v3/slp.js index 57dfa9a..f76925c 100644 --- a/src/routes/v3/slp.js +++ b/src/routes/v3/slp.js @@ -31,6 +31,10 @@ const BitboxHTTP = axios.create({ const username = process.env.RPC_USERNAME const password = process.env.RPC_PASSWORD +// Determine the Access password for a private instance of SLPDB. +// https://gist.github.com/christroutner/fc717ca704dec3dded8b52fae387eab2 +const SLPDB_PASS = process.env.SLPDB_PASS ? process.env.SLPDB_PASS : "BITBOX" + // Setup REST and TREST URLs used by slpjs // Dev note: this allows for unit tests to mock the URL. if (!process.env.REST_URL) process.env.REST_URL = `https://rest.bitcoin.com/v2/` @@ -160,40 +164,40 @@ const requestConfig = { } } -// function formatTokenOutput(token) { -// token.tokenDetails.id = token.tokenDetails.tokenIdHex -// delete token.tokenDetails.tokenIdHex -// token.tokenDetails.documentHash = token.tokenDetails.documentSha256Hex -// delete token.tokenDetails.documentSha256Hex -// token.tokenDetails.initialTokenQty = parseFloat( -// token.tokenDetails.genesisOrMintQuantity -// ) -// delete token.tokenDetails.genesisOrMintQuantity -// delete token.tokenDetails.transactionType -// delete token.tokenDetails.batonVout -// delete token.tokenDetails.sendOutputs -// -// token.tokenDetails.blockCreated = token.tokenStats.block_created -// token.tokenDetails.blockLastActiveSend = -// token.tokenStats.block_last_active_send -// token.tokenDetails.blockLastActiveMint = -// token.tokenStats.block_last_active_mint -// token.tokenDetails.txnsSinceGenesis = -// token.tokenStats.qty_valid_txns_since_genesis -// token.tokenDetails.validAddresses = token.tokenStats.qty_valid_token_addresses -// token.tokenDetails.totalMinted = parseFloat(token.tokenStats.qty_token_minted) -// token.tokenDetails.totalBurned = parseFloat(token.tokenStats.qty_token_burned) -// token.tokenDetails.circulatingSupply = parseFloat( -// token.tokenStats.qty_token_circulating_supply -// ) -// token.tokenDetails.mintingBatonStatus = token.tokenStats.minting_baton_status -// -// delete token.tokenStats.block_last_active_send -// delete token.tokenStats.block_last_active_mint -// delete token.tokenStats.qty_valid_txns_since_genesis -// delete token.tokenStats.qty_valid_token_addresses -// return token -// } +function formatTokenOutput(token) { + token.tokenDetails.id = token.tokenDetails.tokenIdHex + delete token.tokenDetails.tokenIdHex + token.tokenDetails.documentHash = token.tokenDetails.documentSha256Hex + delete token.tokenDetails.documentSha256Hex + token.tokenDetails.initialTokenQty = parseFloat( + token.tokenDetails.genesisOrMintQuantity + ) + delete token.tokenDetails.genesisOrMintQuantity + delete token.tokenDetails.transactionType + delete token.tokenDetails.batonVout + delete token.tokenDetails.sendOutputs + + token.tokenDetails.blockCreated = token.tokenStats.block_created + token.tokenDetails.blockLastActiveSend = + token.tokenStats.block_last_active_send + token.tokenDetails.blockLastActiveMint = + token.tokenStats.block_last_active_mint + token.tokenDetails.txnsSinceGenesis = + token.tokenStats.qty_valid_txns_since_genesis + token.tokenDetails.validAddresses = token.tokenStats.qty_valid_token_addresses + token.tokenDetails.totalMinted = parseFloat(token.tokenStats.qty_token_minted) + token.tokenDetails.totalBurned = parseFloat(token.tokenStats.qty_token_burned) + token.tokenDetails.circulatingSupply = parseFloat( + token.tokenStats.qty_token_circulating_supply + ) + token.tokenDetails.mintingBatonStatus = token.tokenStats.minting_baton_status + + delete token.tokenStats.block_last_active_send + delete token.tokenStats.block_last_active_mint + delete token.tokenStats.qty_valid_txns_since_genesis + delete token.tokenStats.qty_valid_token_addresses + return token +} function root(req, res, next) { return res.json({ status: "slp" }) @@ -1322,7 +1326,7 @@ async function txDetails(req, res, next) { } // Handle corner case of mis-typted txid - if (err.error.indexOf("Not found") > -1) { + if (err.error && err.error.indexOf("Not found") > -1) { res.status(400) return res.json({ error: "TXID not found" }) } diff --git a/test/v3/slp.js b/test/v3/slp.js index 5132941..b80260c 100644 --- a/test/v3/slp.js +++ b/test/v3/slp.js @@ -966,7 +966,7 @@ describe("#SLP", () => { }) describe("txDetails()", () => { - let txDetails = slpRoute.testableComponents.txDetails + const txDetails = slpRoute.testableComponents.txDetails it("should throw 400 if txid is empty", async () => { const result = await txDetails(req, res) @@ -1001,21 +1001,26 @@ describe("#SLP", () => { } }) - it("should get tx details with token info", async () => { - if (process.env.TEST === "unit") { - // Mock the slpjs library for unit tests. - pathStub.BitboxNetwork = slpjsMock.BitboxNetwork - txDetails = slpRouteStub.testableComponents.txDetails - } + if (process.env.TEST === "integration") { + it("should get tx details with token info", async () => { + // TODO: add mocking for unit testing. How do I mock reponse form SLPDB + // since it's not an object? - req.params.txid = - "497291b8a1dfe69c8daea50677a3d31a5ef0e9484d8bebb610dac64bbc202fb7" + // if (process.env.TEST === "unit") { + // // Mock the slpjs library for unit tests. + // pathStub.BitboxNetwork = slpjsMock.BitboxNetwork + // txDetails = slpRouteStub.testableComponents.txDetails + // } - const result = await txDetails(req, res) - //console.log(`result: ${JSON.stringify(result, null, 2)}`) + req.params.txid = + "497291b8a1dfe69c8daea50677a3d31a5ef0e9484d8bebb610dac64bbc202fb7" - assert.hasAnyKeys(result, ["tokenIsValid", "tokenInfo"]) - }) + const result = await txDetails(req, res) + console.log(`result: ${JSON.stringify(result, null, 2)}`) + + assert.hasAnyKeys(result, ["tokenIsValid", "tokenInfo"]) + }) + } }) describe("txsTokenIdAddressSingle()", () => {