Compare commits

...
10 Commits
Author SHA1 Message Date
Chris Troutner 06b944f36a Merge pull request #85 from Permissionless-Software-Foundation/ct-unstable
feat(error handling): update to error handling to pass more information
2021-01-10 15:15:05 -08:00
Chris Troutner 9a8886121d feat(error handling): update to error handling to pass more information 2021-01-10 15:13:33 -08:00
Chris Troutner 89c6d48dfd fix(hydrateUtxos): Passing error message to bch-js 2021-01-09 20:48:10 -08:00
Chris Troutner 4525b99f33 Merge pull request #84 from Permissionless-Software-Foundation/ct-unstable
fix(generateSendOpReturn): Fixed poorly written integration test
2021-01-07 16:42:15 -08:00
Chris Troutner 3d04507948 fixing unit and integration test 2021-01-07 16:40:55 -08:00
Chris Troutner 7e3a447973 fix(generateSendOpReturn): Fixed poorly written integration test 2021-01-07 16:30:12 -08:00
Chris Troutner bdde3a271d Merge pull request #83 from Permissionless-Software-Foundation/ct-unstable
fix(bch-js): Updating to v4.5.2
2021-01-07 13:28:01 -08:00
Chris Troutner 9450c3969b fix(bch-js): Updating to v4.5.2 2021-01-07 13:26:38 -08:00
Chris Troutner 23d66da792 Merge pull request #82 from Permissionless-Software-Foundation/ct-unstable
fix(rate limits): Fixed bug with rate limits
2021-01-07 10:05:58 -08:00
Chris Troutner cb430c20e2 fix(rate limits): Fixed bug with rate limits 2021-01-07 10:04:25 -08:00
12 changed files with 3162 additions and 4635 deletions
+3114 -4611
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -22,16 +22,16 @@
"coverage": "nyc report --reporter=text-lcov | coveralls", "coverage": "nyc report --reporter=text-lcov | coveralls",
"coverage:report": "export NETWORK=mainnet && nyc --reporter=html mocha --timeout 25000 test/v4/", "coverage:report": "export NETWORK=mainnet && nyc --reporter=html mocha --timeout 25000 test/v4/",
"docs": "./node_modules/.bin/apidoc -i src/routes/v4 -o docs", "docs": "./node_modules/.bin/apidoc -i src/routes/v4 -o docs",
"test:temp1": "export NETWORK=mainnet && export TEST=integration && mocha --timeout 25000 test/v4/integration/price.js", "test:temp1": "export NETWORK=mainnet && export TEST=integration && mocha --timeout 25000 -g '#generateSendOpReturn()' test/v4/integration/",
"test:temp2": "mocha test/v4/rate-limits.js" "test:temp2": "mocha test/v4/rate-limits.js"
}, },
"engines": { "engines": {
"node": ">=10.15.1" "node": ">=10.15.1"
}, },
"dependencies": { "dependencies": {
"@psf/bch-js": "^4.2.5", "@psf/bch-js": "^4.5.2",
"apidoc": "^0.23.0", "apidoc": "^0.23.0",
"axios": "^0.19.0", "axios": "^0.21.1",
"bitcore-lib-cash": "^8.23.1", "bitcore-lib-cash": "^8.23.1",
"body-parser": "^1.18.3", "body-parser": "^1.18.3",
"cookie-parser": "~1.4.3", "cookie-parser": "~1.4.3",
+2 -2
View File
@@ -262,11 +262,11 @@ function onError (error) {
case 'EACCES': case 'EACCES':
console.error(`${bind} requires elevated privileges`) console.error(`${bind} requires elevated privileges`)
process.exit(1) process.exit(1)
break // break
case 'EADDRINUSE': case 'EADDRINUSE':
console.error(`${bind} is already in use`) console.error(`${bind} is already in use`)
process.exit(1) process.exit(1)
break // break
default: default:
throw error throw error
} }
+2 -1
View File
@@ -151,7 +151,8 @@ class RateLimits {
// apply paid-access rate limits. // apply paid-access rate limits.
// console.log(`origin: ${JSON.stringify(origin, null, 2)}`) // console.log(`origin: ${JSON.stringify(origin, null, 2)}`)
// console.log(`whitelist: ${JSON.stringify(WHITELIST_DOMAINS, null, 2)}`) // console.log(`whitelist: ${JSON.stringify(WHITELIST_DOMAINS, null, 2)}`)
if (this.isInWhitelist(origin)) { const isInWhitelist = _this.isInWhitelist(origin)
if (isInWhitelist) {
pointsToConsume = WHITELIST_RATE_LIMIT pointsToConsume = WHITELIST_RATE_LIMIT
res.locals.pointsToConsume = pointsToConsume // Feedback for tests. res.locals.pointsToConsume = pointsToConsume // Feedback for tests.
} }
+1 -1
View File
@@ -135,7 +135,7 @@ class Electrum {
const { msg, status } = _this.routeUtils.decodeError(err) const { msg, status } = _this.routeUtils.decodeError(err)
if (msg) { if (msg) {
res.status(status) res.status(status)
return res.json({ error: msg }) return res.json({ success: false, error: msg })
} }
// Handle error patterns specific to this route. // Handle error patterns specific to this route.
+1 -1
View File
@@ -45,7 +45,7 @@ class Encryption {
const { msg, status } = _this.routeUtils.decodeError(err) const { msg, status } = _this.routeUtils.decodeError(err)
if (msg) { if (msg) {
res.status(status) res.status(status)
return res.json({ error: msg }) return res.json({ success: false, error: msg })
} }
// Handle error patterns specific to this route. // Handle error patterns specific to this route.
+9
View File
@@ -175,8 +175,17 @@ function decodeError (err) {
} }
} }
// Handle general Error objects.
if (err.message) {
return {
message: err.message,
status: 422
}
}
return { msg: false, status: 500 } return { msg: false, status: 500 }
} catch (err) { } catch (err) {
console.error('unhandled error in route-utils.js/decodeError(): ', err)
wlogger.error('unhandled error in route-utils.js/decodeError(): ', err) wlogger.error('unhandled error in route-utils.js/decodeError(): ', err)
return { msg: false, status: 500 } return { msg: false, status: 500 }
} }
+6 -1
View File
@@ -1896,6 +1896,8 @@ class Slp {
}) })
} }
// console.log('sendQty: ', sendQty)
// console.log(`tokenUtxos: `, tokenUtxos)
const opReturn = await _this.bchjs.SLP.TokenType1.generateSendOpReturn( const opReturn = await _this.bchjs.SLP.TokenType1.generateSendOpReturn(
tokenUtxos, tokenUtxos,
sendQty sendQty
@@ -1907,6 +1909,7 @@ class Slp {
res.status(200) res.status(200)
return res.json({ script, outputs: opReturn.outputs }) return res.json({ script, outputs: opReturn.outputs })
} catch (err) { } catch (err) {
console.log('err: ', err)
wlogger.error('Error in slp.js/generateSendOpReturn().', err) wlogger.error('Error in slp.js/generateSendOpReturn().', err)
// Decode the error message. // Decode the error message.
@@ -1996,9 +1999,11 @@ class Slp {
// Decode the error message. // Decode the error message.
const { msg, status } = routeUtils.decodeError(err) const { msg, status } = routeUtils.decodeError(err)
console.log('msg: ', msg)
console.log('status: ', status)
if (msg) { if (msg) {
res.status(status) res.status(status)
return res.json({ error: msg }) return res.json({ error: msg, message: msg, success: false })
} }
res.status(500) res.status(500)
+9
View File
@@ -154,8 +154,17 @@ class RouteUtils {
} }
} }
// Handle general Error objects.
if (err.message) {
return {
msg: err.message,
status: 422
}
}
return { msg: false, status: 500 } return { msg: false, status: 500 }
} catch (err) { } catch (err) {
console.error('unhandled error in route-utils.js/decodeError(): ', err)
wlogger.error('unhandled error in route-utils.js/decodeError(): ', err) wlogger.error('unhandled error in route-utils.js/decodeError(): ', err)
return { msg: false, status: 500 } return { msg: false, status: 500 }
} }
+9 -9
View File
@@ -199,11 +199,11 @@ describe('#Electrumx', () => {
}) })
describe('#getUtxos', () => { describe('#getUtxos', () => {
it('should throw 400 if address is empty', async () => { it('should throw 422 if address is empty', async () => {
const result = await electrumxRoute.getUtxos(req, res) const result = await electrumxRoute.getUtxos(req, res)
// console.log(`result: ${util.inspect(result)}`) // console.log(`result: ${util.inspect(result)}`)
assert.equal(res.statusCode, 400, 'Expect 400 status code') assert.equal(res.statusCode, 422, 'Expect 422 status code')
assert.property(result, 'error') assert.property(result, 'error')
assert.include(result.error, 'Unsupported address format') assert.include(result.error, 'Unsupported address format')
@@ -233,7 +233,7 @@ describe('#Electrumx', () => {
const result = await electrumxRoute.getUtxos(req, res) const result = await electrumxRoute.getUtxos(req, res)
// console.log(`result: ${util.inspect(result)}`) // console.log(`result: ${util.inspect(result)}`)
assert.equal(res.statusCode, 400, 'Expect 400 status code') assert.equal(res.statusCode, 422, 'Expect 422 status code')
assert.property(result, 'error') assert.property(result, 'error')
assert.include(result.error, 'Unsupported address format') assert.include(result.error, 'Unsupported address format')
@@ -1063,7 +1063,7 @@ describe('#Electrumx', () => {
const result = await electrumxRoute.getBalance(req, res) const result = await electrumxRoute.getBalance(req, res)
// console.log(`result: ${util.inspect(result)}`) // console.log(`result: ${util.inspect(result)}`)
assert.equal(res.statusCode, 400, 'Expect 400 status code') assert.equal(res.statusCode, 422, 'Expect 422 status code')
assert.property(result, 'error') assert.property(result, 'error')
assert.include(result.error, 'Unsupported address format') assert.include(result.error, 'Unsupported address format')
@@ -1093,7 +1093,7 @@ describe('#Electrumx', () => {
const result = await electrumxRoute.getBalance(req, res) const result = await electrumxRoute.getBalance(req, res)
// console.log(`result: ${util.inspect(result)}`) // console.log(`result: ${util.inspect(result)}`)
assert.equal(res.statusCode, 400, 'Expect 400 status code') assert.equal(res.statusCode, 422, 'Expect 422 status code')
assert.property(result, 'error') assert.property(result, 'error')
assert.include(result.error, 'Unsupported address format') assert.include(result.error, 'Unsupported address format')
@@ -1350,7 +1350,7 @@ describe('#Electrumx', () => {
const result = await electrumxRoute.getTransactions(req, res) const result = await electrumxRoute.getTransactions(req, res)
// console.log(`result: ${util.inspect(result)}`) // console.log(`result: ${util.inspect(result)}`)
assert.equal(res.statusCode, 400, 'Expect 400 status code') assert.equal(res.statusCode, 422, 'Expect 422 status code')
assert.property(result, 'error') assert.property(result, 'error')
assert.include(result.error, 'Unsupported address format') assert.include(result.error, 'Unsupported address format')
@@ -1380,7 +1380,7 @@ describe('#Electrumx', () => {
const result = await electrumxRoute.getTransactions(req, res) const result = await electrumxRoute.getTransactions(req, res)
// console.log(`result: ${util.inspect(result)}`) // console.log(`result: ${util.inspect(result)}`)
assert.equal(res.statusCode, 400, 'Expect 400 status code') assert.equal(res.statusCode, 422, 'Expect 422 status code')
assert.property(result, 'error') assert.property(result, 'error')
assert.include(result.error, 'Unsupported address format') assert.include(result.error, 'Unsupported address format')
@@ -1645,7 +1645,7 @@ describe('#Electrumx', () => {
const result = await electrumxRoute.getMempool(req, res) const result = await electrumxRoute.getMempool(req, res)
// console.log(`result: ${util.inspect(result)}`) // console.log(`result: ${util.inspect(result)}`)
assert.equal(res.statusCode, 400, 'Expect 400 status code') assert.equal(res.statusCode, 422, 'Expect 422 status code')
assert.property(result, 'error') assert.property(result, 'error')
assert.include(result.error, 'Unsupported address format') assert.include(result.error, 'Unsupported address format')
@@ -1675,7 +1675,7 @@ describe('#Electrumx', () => {
const result = await electrumxRoute.getMempool(req, res) const result = await electrumxRoute.getMempool(req, res)
// console.log(`result: ${util.inspect(result)}`) // console.log(`result: ${util.inspect(result)}`)
assert.equal(res.statusCode, 400, 'Expect 400 status code') assert.equal(res.statusCode, 422, 'Expect 422 status code')
assert.property(result, 'error') assert.property(result, 'error')
assert.include(result.error, 'Unsupported address format') assert.include(result.error, 'Unsupported address format')
+2 -2
View File
@@ -110,8 +110,8 @@ describe('#slp', () => {
req.body.tokenUtxos = [ req.body.tokenUtxos = [
{ {
tokenId: tokenId:
'0a321bff9761f28e06a268b14711274bb77617410a16807bd0437ef234a072b1', '38e97c5d7d3585a2cbf3f9580c82ca33985f9cb0845d4dcce220cb709f9538b0',
decimals: 0, decimals: 8,
tokenQty: 2 tokenQty: 2
} }
] ]
+3 -3
View File
@@ -1287,7 +1287,7 @@ describe('#SLP', () => {
}) })
}) })
describe('generateSendOpReturn()', () => { describe('#generateSendOpReturn()', () => {
const generateSendOpReturn = slpRoute.generateSendOpReturn const generateSendOpReturn = slpRoute.generateSendOpReturn
// Validate tokenUtxos input // Validate tokenUtxos input
it('should throw 400 if tokenUtxos is missing', async () => { it('should throw 400 if tokenUtxos is missing', async () => {
@@ -1363,8 +1363,8 @@ describe('#SLP', () => {
req.body.tokenUtxos = [ req.body.tokenUtxos = [
{ {
tokenId: tokenId:
'0a321bff9761f28e06a268b14711274bb77617410a16807bd0437ef234a072b1', '38e97c5d7d3585a2cbf3f9580c82ca33985f9cb0845d4dcce220cb709f9538b0',
decimals: 0, decimals: 8,
tokenQty: 2 tokenQty: 2
} }
] ]