From f667986c2ac8bbf9b27bafdbb92cbc4f6d76fef2 Mon Sep 17 00:00:00 2001 From: Micah Maphet Date: Thu, 30 Oct 2025 12:29:24 -0400 Subject: [PATCH 1/4] added fix to commands in package.json and fixed linting errors --- .../bws.example.config.js | 8 +- packages/bitcore-wallet-service/package.json | 5 +- .../scripts/checkCopayerIds.js | 20 +- .../scripts/fixAddressType.js | 8 +- .../scripts/migrateToNamedTestnets.js | 14 +- .../scripts/migrateWalletsNetwork.js | 26 +-- .../scripts/preview-email.js | 29 +-- .../scripts/purgeNotifications.js | 12 +- .../scripts/v8tool-list.ts | 16 +- .../bitcore-wallet-service/scripts/v8tool.ts | 2 +- packages/bitcore-wallet-service/src/config.ts | 6 +- .../src/externalservices/banxa.ts | 4 +- .../src/externalservices/changelly.ts | 2 +- .../src/externalservices/coingecko.ts | 5 +- .../src/externalservices/moonpay.ts | 16 +- .../src/externalservices/oneInch.ts | 8 +- .../src/externalservices/ramp.ts | 8 +- .../src/externalservices/simplex.ts | 2 +- .../src/externalservices/transak.ts | 6 +- .../src/lib/bchaddresstranslator.ts | 8 +- .../src/lib/blockchainexplorer.ts | 4 +- .../src/lib/blockchainexplorers/v8.ts | 17 +- .../src/lib/blockchainexplorers/v8/client.ts | 5 +- .../src/lib/blockchainmonitor.ts | 12 +- .../src/lib/chain/bch/index.ts | 6 +- .../src/lib/chain/btc/index.ts | 18 +- .../src/lib/chain/doge/index.ts | 4 +- .../src/lib/chain/eth/index.ts | 50 +++-- .../src/lib/chain/matic/index.ts | 2 +- .../src/lib/chain/sol/index.ts | 16 +- .../src/lib/chain/xrp/index.ts | 28 +-- .../src/lib/cleanfiatrates.ts | 14 +- .../src/lib/common/utils.ts | 18 +- .../src/lib/emailservice.ts | 30 ++- .../src/lib/expressapp.ts | 48 ++--- .../src/lib/fiatrateservice.ts | 4 +- .../src/lib/iconsconfig.ts | 4 +- .../bitcore-wallet-service/src/lib/lock.ts | 12 +- .../bitcore-wallet-service/src/lib/logger.ts | 5 - .../src/lib/model/address.ts | 6 +- .../src/lib/model/advertisement.ts | 3 +- .../src/lib/model/copayer.ts | 2 +- .../src/lib/model/email.ts | 20 +- .../src/lib/model/session.ts | 2 +- .../src/lib/model/txproposal.ts | 20 +- .../src/lib/model/txproposal_legacy.ts | 6 +- .../src/lib/model/wallet.ts | 6 +- .../src/lib/notificationbroadcaster.ts | 1 + .../src/lib/pushnotificationsservice.ts | 149 +++++++------ .../src/lib/routes/middleware/authRequest.ts | 2 +- .../lib/routes/middleware/authTssRequest.ts | 6 +- .../lib/routes/middleware/verifyTssMessage.ts | 4 +- .../bitcore-wallet-service/src/lib/server.ts | 142 +++++------- .../bitcore-wallet-service/src/lib/storage.ts | 15 +- .../bitcore-wallet-service/src/lib/tss.ts | 8 +- .../src/lib/updatestats.ts | 37 ++-- .../src/types/chain.d.ts | 4 +- .../src/updatestats/updatestats.ts | 2 +- .../test/bchaddresstranslator.test.ts | 4 +- .../test/blockchainexplorer.test.ts | 2 +- .../test/chain/bch.test.ts | 4 +- .../test/chain/btc.test.ts | 16 +- .../test/chain/ltc.test.ts | 2 +- .../test/expressapp.test.ts | 94 ++++---- .../test/integration/bcmonitor.test.ts | 2 +- .../integration/cashAddrMigration.test.ts | 10 +- .../integration/emailnotifications.test.ts | 70 +++--- .../externalservices/banxa.test.ts | 32 +-- .../externalservices/changelly.test.ts | 40 ++-- .../externalservices/coinGecko.test.ts | 16 +- .../externalservices/moonpay.test.ts | 40 ++-- .../externalservices/oneInch.test.ts | 16 +- .../integration/externalservices/ramp.test.ts | 30 +-- .../externalservices/sardine.test.ts | 26 +-- .../externalservices/simplex.test.ts | 36 ++-- .../externalservices/thorswap.test.ts | 24 +-- .../externalservices/transak.test.ts | 32 +-- .../integration/externalservices/wyre.test.ts | 24 +-- .../test/integration/fiatrateservice.test.ts | 16 +- .../test/integration/helpers.ts | 40 ++-- .../test/integration/history.test.ts | 48 ++--- .../integration/pushNotifications.test.ts | 204 +++++++++--------- .../test/integration/server.test.ts | 193 ++++++++--------- .../test/integration/tss.test.ts | 30 +-- .../bitcore-wallet-service/test/lock.test.ts | 30 +-- .../test/model/advertisement.test.ts | 4 +- .../test/model/txproposal.test.ts | 12 +- .../test/storage.test.ts | 20 +- .../bitcore-wallet-service/test/testdata.ts | 12 +- .../bitcore-wallet-service/test/utils.test.ts | 22 +- .../bitcore-wallet-service/test/v8.test.ts | 18 +- 91 files changed, 1019 insertions(+), 1087 deletions(-) diff --git a/packages/bitcore-wallet-service/bws.example.config.js b/packages/bitcore-wallet-service/bws.example.config.js index 2a7af6d10a9..98b9e43f018 100644 --- a/packages/bitcore-wallet-service/bws.example.config.js +++ b/packages/bitcore-wallet-service/bws.example.config.js @@ -13,9 +13,9 @@ module.exports = { // https: true, // privateKeyFile: 'private.pem', // certificateFile: 'cert.pem', - ////// The following is only for certs which are not - ////// trusted by nodejs 'https' by default - ////// CAs like Verisign do not require this + // //// The following is only for certs which are not + // //// trusted by nodejs 'https' by default + // //// CAs like Verisign do not require this // CAinter1: '', // ex. 'COMODORSADomainValidationSecureServerCA.crt' // CAinter2: '', // ex. 'COMODORSAAddTrustCA.crt' // CAroot: '', // ex. 'AddTrustExternalCARoot.crt' @@ -56,7 +56,7 @@ module.exports = { url: 'https://api.bitcore.io', regtestEnabled: false }, - testnet3:{ + testnet3: { url: 'https://api.bitcore.io' }, testnet4: { diff --git a/packages/bitcore-wallet-service/package.json b/packages/bitcore-wallet-service/package.json index f1449d2f126..1058eaac544 100644 --- a/packages/bitcore-wallet-service/package.json +++ b/packages/bitcore-wallet-service/package.json @@ -34,9 +34,10 @@ "clean": "rm -rf ./ts_build", "compile": "npm run clean && npm run build", "pub": "npm run build && npm publish", - "precommit": "echo 'TODO: npm run fix && npm run lint'", + "precommit": "npm run lint; npm run fix:errors", "lint": "eslint .", - "fix": "eslint --fix --quiet .", + "fix:errors": "eslint --fix --quiet .", + "fix:all": "eslint --fix .", "update:stats": "npm run clean && npm run build && chmod +x ./ts_build/updatestats/updatestats.js && ./ts_build/updatestats/updatestats.js", "clean:fiatrates": "npm run clean && npm run build && chmod +x ./ts_build/cleanfiatrates/cleanfiatrates.js && ./ts_build/cleanfiatrates/cleanfiatrates.js", "cp:templates": "cp -r ./templates ./ts_build/templates" diff --git a/packages/bitcore-wallet-service/scripts/checkCopayerIds.js b/packages/bitcore-wallet-service/scripts/checkCopayerIds.js index 5750e798f67..146c58fdf26 100755 --- a/packages/bitcore-wallet-service/scripts/checkCopayerIds.js +++ b/packages/bitcore-wallet-service/scripts/checkCopayerIds.js @@ -1,14 +1,14 @@ #!/usr/bin/env node -const config = require('../../ts_build/src/config').default; -const { Storage } = require('../../ts_build/src').default; -const rl = require('readline').createInterface({ input: process.stdin, output: process.stdout }); -const fs = require('fs'); -const os = require('os'); -const CWC = require('crypto-wallet-core'); +import fs from 'fs'; +import os from 'os'; +import readline from 'readline'; +import CWC from 'crypto-wallet-core'; +import pkg from '../../ts_build/src'; +import config from '../../ts_build/src/config'; -const startDate = new Date('2011-01-01T00:00:00.000Z'); -const endDate = new Date(); +const { Storage } = pkg; +const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); function usage(errMsg) { console.log('USAGE: ./checkCopayerIds.js [options]'); @@ -55,7 +55,7 @@ storage.connect(config.storageOpts, async (err) => { } function done(err) { - if (err) { console.log(err) } + if (err) { console.log(err); } rl.close(); storage.disconnect(() => { console.log('done'); }); } @@ -99,7 +99,7 @@ storage.connect(config.storageOpts, async (err) => { const str = chain === 'btc' ? xpub : (chain + xpub); const hash = CWC.BitcoreLib.crypto.Hash.sha256(Buffer.from(str)); - const computed = hash.toString('hex'); + const computed = hash.toString('hex'); if (copayerId !== computed) { mismatches++; fs.appendFileSync(outFile, `${wallet.id}:${copayerId} -> expected: ${computed}\n`); diff --git a/packages/bitcore-wallet-service/scripts/fixAddressType.js b/packages/bitcore-wallet-service/scripts/fixAddressType.js index 82e5d657735..1e24fa70010 100755 --- a/packages/bitcore-wallet-service/scripts/fixAddressType.js +++ b/packages/bitcore-wallet-service/scripts/fixAddressType.js @@ -1,7 +1,7 @@ #!/usr/bin/env node -const config = require('../../ts_build/src/config').default; -const { Storage } = require('../../ts_build/src').default; -const { ObjectId } = require('mongodb'); +import { ObjectId } from 'mongodb'; +import { Storage } from '../../ts_build/src'; +import config from '../../ts_build/src/config'; if (!process.argv[2]) { console.log('Usage: fixAddressType.js [--doit]'); @@ -38,7 +38,7 @@ storage.connect(config.storageOpts, async (err) => { } function done(err) { - if (err) { console.log(err) } + if (err) { console.log(err); } storage.disconnect(() => { console.log('done'); }); } diff --git a/packages/bitcore-wallet-service/scripts/migrateToNamedTestnets.js b/packages/bitcore-wallet-service/scripts/migrateToNamedTestnets.js index 8112020d3e7..4945f11e628 100755 --- a/packages/bitcore-wallet-service/scripts/migrateToNamedTestnets.js +++ b/packages/bitcore-wallet-service/scripts/migrateToNamedTestnets.js @@ -1,6 +1,8 @@ #!/usr/bin/env node -const config = require('../../ts_build/src/config').default; -const { Storage } = require('../../ts_build/src').default; +import pkg from '../../ts_build/src'; +import config from '../../ts_build/src/config'; + +const { Storage } = pkg; const startDate = new Date('2011-01-01T00:00:00.000Z'); const endDate = new Date(); @@ -52,7 +54,7 @@ storage.connect(config.storageOpts, async (err) => { } function done(err) { - if (err) { console.log(err) } + if (err) { console.log(err); } storage.disconnect(() => { console.log('done'); }); } @@ -100,7 +102,7 @@ storage.connect(config.storageOpts, async (err) => { if (resWallet?.result?.nModified > 0) { fixWalletsCount++; } else if (!resWallet?.result?.ok) { - console.log(JSON.stringify(res)); + console.log(JSON.stringify(resWallet)); } // Update Addresses collection @@ -115,7 +117,7 @@ storage.connect(config.storageOpts, async (err) => { if (resAddress?.result?.nModified > 0) { fixAddressCount++; } else if (!resAddress?.result?.ok) { - console.log(JSON.stringify(res)); + console.log(JSON.stringify(resAddress)); } // Update Wallets collection @@ -146,7 +148,7 @@ storage.connect(config.storageOpts, async (err) => { if (resTxs?.result?.nModified > 0) { fixTxsCount++; } else if (!resTxs?.result?.ok) { - console.log(JSON.stringify(res)); + console.log(JSON.stringify(resTxs)); } } else { // Update Wallets collection diff --git a/packages/bitcore-wallet-service/scripts/migrateWalletsNetwork.js b/packages/bitcore-wallet-service/scripts/migrateWalletsNetwork.js index 014f56b0186..6fd45946ae9 100755 --- a/packages/bitcore-wallet-service/scripts/migrateWalletsNetwork.js +++ b/packages/bitcore-wallet-service/scripts/migrateWalletsNetwork.js @@ -1,10 +1,12 @@ #!/usr/bin/env node -const config = require('../../ts_build/src/config').default; -const { Storage } = require('../../ts_build/src').default; -const rl = require('readline').createInterface({ input: process.stdin, output: process.stdout }); -const fs = require('fs'); -const os = require('os'); +import fs from 'fs'; +import os from 'os'; +import readline from 'readline'; +import config from '../ts_build/src/config'; +import { Storage } from '../ts_build/src/lib/storage'; + +const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); const startDate = new Date('2011-01-01T00:00:00.000Z'); const endDate = new Date(); @@ -76,7 +78,7 @@ storage.connect(config.storageOpts, async (err) => { } function done(err) { - if (err) { console.log(err) } + if (err) { console.log(err); } rl.close(); storage.disconnect(() => { console.log('done'); }); } @@ -89,7 +91,6 @@ storage.connect(config.storageOpts, async (err) => { let fixAddressCount = 0; let fixWalletsCount = 0; let fixTxsCount = 0; - let fixCacheCount = 0; let count = 0; console.log(` ${doit ? 'REAL:' : 'DRY RUN:'} Found ${Intl.NumberFormat().format(walletCnt)} total wallets to scan`); @@ -159,9 +160,7 @@ storage.connect(config.storageOpts, async (err) => { const resCache = await storage.db.collection(Storage.collections.CACHE).deleteMany({ walletId: wallet.id }); - if (resCache?.result?.n > 0) { - fixCacheCount++; - } else if (!resCache?.result?.ok) { + if (resCache?.result?.n <= 0 && !resCache?.result?.ok) { console.log(JSON.stringify(resTxs)); } } else { @@ -190,13 +189,6 @@ storage.connect(config.storageOpts, async (err) => { }); fixTxsCount += txsCount; - - // Delete Cache collection - const cacheCount = await storage.db.collection(Storage.collections.CACHE).countDocuments({ - walletId: wallet.id - }); - - fixCacheCount += cacheCount; } } process.stdout.write('\n'); diff --git a/packages/bitcore-wallet-service/scripts/preview-email.js b/packages/bitcore-wallet-service/scripts/preview-email.js index 14b0d93bf9b..a76d2933d50 100755 --- a/packages/bitcore-wallet-service/scripts/preview-email.js +++ b/packages/bitcore-wallet-service/scripts/preview-email.js @@ -1,14 +1,14 @@ #!/usr/bin/env node -require('ts-node/register'); -const config = require('../src/config'); -const fs = require('fs'); -const path = require('path'); -const Mustache = require('mustache'); -const os = require('os'); -const { exec } = require('child_process'); -const sgMail = require('@sendgrid/mail'); -const juice = require('juice'); +import 'ts-node/register'; +import { exec } from 'child_process'; +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import sgMail from '@sendgrid/mail'; +import juice from 'juice'; +import Mustache from 'mustache'; +import config from '../src/config'; const iconMap = { @@ -34,7 +34,7 @@ function getIconHtml (templateName) { const staticUrl = config.baseUrl || 'https://bws.bitpay.com'; const iconUrl = `${staticUrl}/bws/static/images/${iconFile}`; - return `${templateName} icon` + return `${templateName} icon`; }; // Parse command line arguments @@ -75,7 +75,9 @@ if (!templateName || !TEMPLATE_TYPES.includes(templateName)) { console.log(' - send: Set to "send" to send an actual email'); console.log(' - recipientEmail: Email address to send to (required if send=true)'); console.log('\nAvailable templates:'); - TEMPLATE_TYPES.forEach(type => console.log(`- ${type}`)); + for (const type of TEMPLATE_TYPES) { + console.log(`- ${type}`); + } process.exit(1); } @@ -110,8 +112,7 @@ const createSampleData = (templateName) => { if (firstLine && firstLine.startsWith('{{subjectPrefix}}')) { commonData.title = firstLine.replace('{{subjectPrefix}}', ''); } - } catch (err) { - } + } catch { /* ignore error */ } switch (templateName) { case 'new_copayer': @@ -227,7 +228,7 @@ function createBasicHtmlFromPlain(templateName) { .slice(2) // Skip the subject line and empty line .join('\n') .trim(); - } catch (err) { + } catch { plainContent = `This is a sample email template for ${templateName}`; } diff --git a/packages/bitcore-wallet-service/scripts/purgeNotifications.js b/packages/bitcore-wallet-service/scripts/purgeNotifications.js index 4656668ae25..c2efadc66a6 100755 --- a/packages/bitcore-wallet-service/scripts/purgeNotifications.js +++ b/packages/bitcore-wallet-service/scripts/purgeNotifications.js @@ -1,8 +1,10 @@ #!/usr/bin/env node -const config = require('../../ts_build/src/config').default; -const { Storage } = require('../../ts_build/src').default; -const rl = require('readline').createInterface({ input: process.stdin, output: process.stdout }); +import readline from 'readline'; +import { Storage } from '../../ts_build/src'; +import config from '../../ts_build/src/config'; + +const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); let stop = false; @@ -58,7 +60,7 @@ storage.connect(config.storageOpts, async (err) => { } function done(err) { - if (err) { console.log(err) } + if (err) { console.log(err); } rl.close(); storage.disconnect(() => { console.log('done'); }); } @@ -96,7 +98,7 @@ storage.connect(config.storageOpts, async (err) => { process.stdout.write('\n'); console.log(`\u2713 Purged ${Intl.NumberFormat().format(count)} notifications`); - stop && console.log('Stopped prematurely by user'); + if (stop) console.log('Stopped prematurely by user'); return done(); } catch (err) { diff --git a/packages/bitcore-wallet-service/scripts/v8tool-list.ts b/packages/bitcore-wallet-service/scripts/v8tool-list.ts index 9818371a86d..28b7664da27 100755 --- a/packages/bitcore-wallet-service/scripts/v8tool-list.ts +++ b/packages/bitcore-wallet-service/scripts/v8tool-list.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node -import _ from 'lodash'; import { BitcoreLib } from 'crypto-wallet-core'; +import _ from 'lodash'; import requestStream from 'request'; import { Client } from '../src/lib//blockchainexplorers/v8/client'; @@ -24,7 +24,7 @@ if (!authKey) throw new Error('provide authKey'); // const authKeyObj = BitcoreLib.PrivateKey(authKey); -let tmp = authKeyObj.toObject(); +const tmp = authKeyObj.toObject(); tmp.compressed = false; const pubKey = BitcoreLib.PrivateKey(tmp).toPublicKey(); @@ -41,9 +41,9 @@ const BASE = { LTC: `https://api.bitcore.io/api/${coin}/${network}` }; -let baseUrl = BASE[coin]; +const baseUrl = BASE[coin]; -let client = new Client({ +const client = new Client({ baseUrl, authKey: authKeyObj }); @@ -59,10 +59,9 @@ if (extra) { console.log('[v8tool.37:url:]', url); const signature = client.sign({ method: 'GET', url }); -const payload = {}; -var acum = ''; +let acum = ''; -let r = requestStream.get(url, { +const r = requestStream.get(url, { headers: { 'x-signature': signature }, json: true }); @@ -73,8 +72,7 @@ r.on('data', raw => { r.on('end', () => { let txs = [], - unconf = [], - err; + unconf = []; _.each(acum.split(/\r?\n/), rawTx => { if (!rawTx) return; diff --git a/packages/bitcore-wallet-service/scripts/v8tool.ts b/packages/bitcore-wallet-service/scripts/v8tool.ts index 7d351a2eeea..ed807c5cb0d 100755 --- a/packages/bitcore-wallet-service/scripts/v8tool.ts +++ b/packages/bitcore-wallet-service/scripts/v8tool.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node -import request from 'request'; import { BitcoreLib } from 'crypto-wallet-core'; +import request from 'request'; import { Client } from '../src/lib//blockchainexplorers/v8/client'; const coin = process.argv[2]; diff --git a/packages/bitcore-wallet-service/src/config.ts b/packages/bitcore-wallet-service/src/config.ts index a7c5dfd8884..f3fe0057c1a 100644 --- a/packages/bitcore-wallet-service/src/config.ts +++ b/packages/bitcore-wallet-service/src/config.ts @@ -16,9 +16,9 @@ const Config = (): any => { // https: true, // privateKeyFile: 'private.pem', // certificateFile: 'cert.pem', - ////// The following is only for certs which are not - ////// trusted by nodejs 'https' by default - ////// CAs like Verisign do not require this + // //// The following is only for certs which are not + // //// trusted by nodejs 'https' by default + // //// CAs like Verisign do not require this // CAinter1: '', // ex. 'COMODORSADomainValidationSecureServerCA.crt' // CAinter2: '', // ex. 'COMODORSAAddTrustCA.crt' // CAroot: '', // ex. 'AddTrustExternalCARoot.crt' diff --git a/packages/bitcore-wallet-service/src/externalservices/banxa.ts b/packages/bitcore-wallet-service/src/externalservices/banxa.ts index fff8b839c4f..0a1057d1084 100644 --- a/packages/bitcore-wallet-service/src/externalservices/banxa.ts +++ b/packages/bitcore-wallet-service/src/externalservices/banxa.ts @@ -34,7 +34,7 @@ export class BanxaService { } private getBanxaSignature(method: 'get' | 'post', endpoint: string, apiKey: string, secret: string, body?: string) { - let signature, auth: string + let signature, auth: string; const nonce = Date.now().toString(); switch (method) { @@ -51,7 +51,7 @@ export class BanxaService { } const localSignature = crypto.createHmac('sha256', secret).update(signature).digest('hex'); - auth = `${apiKey}:${localSignature}:${nonce}` + auth = `${apiKey}:${localSignature}:${nonce}`; return auth; } diff --git a/packages/bitcore-wallet-service/src/externalservices/changelly.ts b/packages/bitcore-wallet-service/src/externalservices/changelly.ts index ae9b77d3eaf..63339279e62 100644 --- a/packages/bitcore-wallet-service/src/externalservices/changelly.ts +++ b/packages/bitcore-wallet-service/src/externalservices/changelly.ts @@ -9,7 +9,7 @@ import { checkRequired } from '../lib/server'; export class ChangellyService { request: any = request; - private changellyGetKeysV2(req) { + private changellyGetKeysV2(_req) { if (!config.changelly) { logger.warn('Changelly missing credentials'); throw new Error('ClientError: Service not configured.'); diff --git a/packages/bitcore-wallet-service/src/externalservices/coingecko.ts b/packages/bitcore-wallet-service/src/externalservices/coingecko.ts index e1d41c6834c..adf89b78830 100644 --- a/packages/bitcore-wallet-service/src/externalservices/coingecko.ts +++ b/packages/bitcore-wallet-service/src/externalservices/coingecko.ts @@ -1,4 +1,3 @@ -import * as _ from 'lodash'; import * as request from 'request'; import config from '../config'; import { Defaults } from '../lib/common/defaults'; @@ -13,7 +12,7 @@ export class CoinGeckoService { this.storage = storage; } - private coinGeckoGetCredentials() { + private coinGeckoGetCredentials() { if (!config.coinGecko) throw new Error('coinGecko missing credentials'); const credentials = { @@ -98,7 +97,7 @@ export class CoinGeckoService { return resolve(updatedTokens); }); } - }); + }); }); }); } diff --git a/packages/bitcore-wallet-service/src/externalservices/moonpay.ts b/packages/bitcore-wallet-service/src/externalservices/moonpay.ts index cba9959ed9f..bf3bb3a7648 100644 --- a/packages/bitcore-wallet-service/src/externalservices/moonpay.ts +++ b/packages/bitcore-wallet-service/src/externalservices/moonpay.ts @@ -45,7 +45,7 @@ export class MoonpayService { 'Content-Type': 'application/json' }; - const URL = API + '/v3/currencies/' + const URL = API + '/v3/currencies/'; this.request.get( URL, @@ -167,7 +167,7 @@ export class MoonpayService { if (req.body.areFeesIncluded) qs.push('areFeesIncluded=' + encodeURIComponent(req.body.areFeesIncluded)); if (req.body.paymentMethod) qs.push('paymentMethod=' + encodeURIComponent(req.body.paymentMethod)); - const URL = API + `/v3/currencies/${req.body.currencyAbbreviation}/limits/?${qs.join('&')}` + const URL = API + `/v3/currencies/${req.body.currencyAbbreviation}/limits/?${qs.join('&')}`; this.request.get( URL, @@ -205,11 +205,7 @@ export class MoonpayService { throw new ClientError("Moonpay's request missing arguments"); } - const headers = { - 'Content-Type': 'application/json' - }; - - let qs: string[] = []; + const qs: string[] = []; qs.push('apiKey=' + API_KEY); qs.push('currencyCode=' + encodeURIComponent(req.body.currencyCode)); qs.push('walletAddress=' + encodeURIComponent(req.body.walletAddress)); @@ -252,11 +248,7 @@ export class MoonpayService { throw new ClientError("Moonpay's request missing arguments"); } - const headers = { - 'Content-Type': 'application/json' - }; - - let qs: string[] = []; + const qs: string[] = []; qs.push('apiKey=' + API_KEY); qs.push('baseCurrencyCode=' + encodeURIComponent(req.body.baseCurrencyCode)); qs.push('baseCurrencyAmount=' + encodeURIComponent(req.body.baseCurrencyAmount)); diff --git a/packages/bitcore-wallet-service/src/externalservices/oneInch.ts b/packages/bitcore-wallet-service/src/externalservices/oneInch.ts index aba8defdffc..e38b5ed5983 100644 --- a/packages/bitcore-wallet-service/src/externalservices/oneInch.ts +++ b/packages/bitcore-wallet-service/src/externalservices/oneInch.ts @@ -30,8 +30,8 @@ export class OneInchService { return credentials; } - oneInchGetReferrerFee(req): Promise { - return new Promise((resolve, reject) => { + oneInchGetReferrerFee(_req): Promise { + return new Promise((resolve) => { const credentials = this.oneInchGetCredentials(); const referrerFee: number = credentials.referrerFee; @@ -72,7 +72,9 @@ export class OneInchService { if (credentials.referrerFee) qs.push('fee=' + credentials.referrerFee); if (credentials.referrerAddress) qs.push('referrerAddress=' + credentials.referrerAddress); - const chainNetwork: string = `${req.params?.['chain']?.toUpperCase()}_mainnet` || 'eth_mainnet'; + const chainNetwork: string = req.params?.['chain'] + ? `${req.params['chain'].toUpperCase()}_mainnet` + : 'eth_mainnet'; const chainId: number = ConstantsCWC.EVM_CHAIN_NETWORK_TO_CHAIN_ID[chainNetwork]; const URL: string = `${credentials.API}/swap/v5.2/${chainId}/swap/?${qs.join('&')}`; diff --git a/packages/bitcore-wallet-service/src/externalservices/ramp.ts b/packages/bitcore-wallet-service/src/externalservices/ramp.ts index 3825768b8d9..5a92335c0fb 100644 --- a/packages/bitcore-wallet-service/src/externalservices/ramp.ts +++ b/packages/bitcore-wallet-service/src/externalservices/ramp.ts @@ -115,7 +115,7 @@ export class RampService { 'selectedCountryCode', 'defaultAsset', ]; - const extraRequiredParams = req.body.flow && req.body.flow === 'sell' ? ['offrampAsset'] : ['finalUrl', 'userAddress', 'swapAmount','swapAsset']; + const extraRequiredParams = req.body.flow && req.body.flow === 'sell' ? ['offrampAsset'] : ['finalUrl', 'userAddress', 'swapAmount', 'swapAsset']; appRequiredParams.concat(extraRequiredParams); const requiredParams = req.body.context === 'web' ? webRequiredParams : appRequiredParams; @@ -129,11 +129,7 @@ export class RampService { throw new ClientError("Ramp's request missing arguments"); } - const headers = { - 'Content-Type': 'application/json' - }; - - let qs: string[] = []; + const qs: string[] = []; qs.push('hostApiKey=' + API_KEY); qs.push('selectedCountryCode=' + encodeURIComponent(req.body.selectedCountryCode)); if (req.body.finalUrl) qs.push('finalUrl=' + encodeURIComponent(req.body.finalUrl)); diff --git a/packages/bitcore-wallet-service/src/externalservices/simplex.ts b/packages/bitcore-wallet-service/src/externalservices/simplex.ts index cc1d60bc128..eaae637e47f 100644 --- a/packages/bitcore-wallet-service/src/externalservices/simplex.ts +++ b/packages/bitcore-wallet-service/src/externalservices/simplex.ts @@ -1,9 +1,9 @@ import * as request from 'request'; +import Uuid from 'uuid'; import config from '../config'; import { Utils } from '../lib/common/utils'; import { ClientError } from '../lib/errors/clienterror'; import { checkRequired } from '../lib/server'; -const Uuid = require('uuid'); export class SimplexService { request: any = request; diff --git a/packages/bitcore-wallet-service/src/externalservices/transak.ts b/packages/bitcore-wallet-service/src/externalservices/transak.ts index 47342e5b881..a96303cad41 100644 --- a/packages/bitcore-wallet-service/src/externalservices/transak.ts +++ b/packages/bitcore-wallet-service/src/externalservices/transak.ts @@ -54,7 +54,7 @@ export class TransakService { const body = { apiKey: API_KEY - } + }; const URL: string = API + '/partners/api/v2/refresh-token'; @@ -261,11 +261,11 @@ export class TransakService { if (err) { return reject(err.body ? err.body : err); } else { - return resolve({urlWithSignature: data?.body?.data?.widgetUrl ?? data?.data?.widgetUrl}); + return resolve({ urlWithSignature: data?.body?.data?.widgetUrl ?? data?.data?.widgetUrl }); } } ); - }); + }); } transakGetOrderDetails(req): Promise { diff --git a/packages/bitcore-wallet-service/src/lib/bchaddresstranslator.ts b/packages/bitcore-wallet-service/src/lib/bchaddresstranslator.ts index f37d6d30f25..801ee47d7b2 100644 --- a/packages/bitcore-wallet-service/src/lib/bchaddresstranslator.ts +++ b/packages/bitcore-wallet-service/src/lib/bchaddresstranslator.ts @@ -10,12 +10,12 @@ export class BCHAddressTranslator { try { new Bitcore_['btc'].Address(address); return 'legacy'; - } catch (e) { + } catch { try { const a = new Bitcore_['bch'].Address(address); if (a.toLegacyAddress() == address) return 'copay'; return 'cashaddr'; - } catch (e) { + } catch { return; } } @@ -40,7 +40,7 @@ export class BCHAddressTranslator { try { orig = new bitcore.Address(x).toObject(); - } catch (e) { + } catch { return null; } @@ -51,7 +51,7 @@ export class BCHAddressTranslator { } else if (to == 'legacy') { return Bitcore_['btc'].Address.fromObject(orig).toString(); } - }).filter(x => !!x) + }).filter(x => !!x); } if (wasArray) return ret; else return ret[0]; diff --git a/packages/bitcore-wallet-service/src/lib/blockchainexplorer.ts b/packages/bitcore-wallet-service/src/lib/blockchainexplorer.ts index c7fe05dd512..d8bbfb80bb9 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainexplorer.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainexplorer.ts @@ -1,7 +1,9 @@ +import preconditions from 'preconditions'; import { V8 } from './blockchainexplorers/v8'; import { Common } from './common'; -const $ = require('preconditions').singleton(); +const $ = preconditions.singleton(); + const { Utils } = Common; const PROVIDERS = { diff --git a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts index 7e752369a38..1a993bdd18f 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts @@ -1,5 +1,5 @@ -import * as async from 'async'; import * as crypto from 'crypto'; +import * as async from 'async'; import { BitcoreLib as Bitcore, BitcoreLibCash, @@ -543,7 +543,7 @@ export class V8 { estimateFeeV2(opts, cb) { const txType = opts.txType; if (Number(txType) !== 2) { - return this.estimateFee(opts, cb); + return this.estimateFee(opts, cb); } const nbBlocks = Number(opts.nbBlocks) || 2; const url = this.baseUrl + `/fee/${nbBlocks}?txType=${txType}`; @@ -593,7 +593,7 @@ export class V8 { try { ret = JSON.parse(ret); return cb(null, ret.height, ret.hash); - } catch (err) { + } catch { return cb(new Error('Could not get height from block explorer')); } }) @@ -609,7 +609,7 @@ export class V8 { ret = JSON.parse(ret); const res = _.map(ret, 'txid'); return cb(null, res); - } catch (err) { + } catch { return cb(new Error('Could not get height from block explorer')); } }) @@ -724,15 +724,6 @@ export class V8 { } } -const _parseErr = (err, res) => { - if (err) { - logger.warn('[v8.js] V8 raw error: %o', err); - return 'V8 Error'; - } - logger.warn('[v8.js] ' + res.request.href + ' Returned Status: ' + res.statusCode); - return 'Error querying the blockchain'; -}; - const getPerformanceKey = (name: string) => { return name + '-' + crypto.randomBytes(5).toString('hex'); }; \ No newline at end of file diff --git a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8/client.ts b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8/client.ts index 0ee4781c048..cd9549ecaf3 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8/client.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8/client.ts @@ -1,9 +1,10 @@ +import { URL } from 'url'; import { BitcoreLib } from 'crypto-wallet-core'; import * as requestStream from 'request'; import * as request from 'request-promise-native'; import secp256k1 from 'secp256k1'; -import { URL } from 'url'; import logger from '../../logger'; + export class Client { authKey: { bn: { toBuffer: (arg) => Buffer } }; baseUrl: string; @@ -119,9 +120,7 @@ export class Client { const { pubKey, startBlock, - startDate, endBlock, - endDate, includeMempool, tokenAddress, multisigContractAddress diff --git a/packages/bitcore-wallet-service/src/lib/blockchainmonitor.ts b/packages/bitcore-wallet-service/src/lib/blockchainmonitor.ts index 138d30d83aa..70ccde57135 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainmonitor.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainmonitor.ts @@ -1,7 +1,7 @@ import * as async from 'async'; import _ from 'lodash'; import 'source-map-support/register'; - +import preconditions from 'preconditions'; import { BlockChainExplorer } from './blockchainexplorer'; import { ChainService } from './chain/index'; import { Common } from './common'; @@ -13,7 +13,9 @@ import { Notification, TxConfirmationSub } from './model'; import { WalletService } from './server'; import { Storage } from './storage'; -const $ = require('preconditions').singleton(); + +const $ = preconditions.singleton(); + const Constants = Common.Constants; const throttle = (fn: (bcmContext: any, chain: string, network: string, hash: string) => void) => { @@ -23,8 +25,8 @@ const throttle = (fn: (bcmContext: any, chain: string, network: string, hash: st chain = args[1], network = args[2], hash = args[3]; - let msDelay = bcmContext.getChainThrottleSetting(chain, network) * 1000; - let now = new Date().getTime(); + const msDelay = bcmContext.getChainThrottleSetting(chain, network) * 1000; + const now = new Date().getTime(); if (now - lastCalled < msDelay) { return; } @@ -226,7 +228,7 @@ export class BlockchainMonitor { _handleIncomingPayments(chain, network, data) { if (!data) return; - let out = data.out; + const out = data.out; if (!out || !out.address || out.address.length < 10) return; // For evm chains, amount = 0 is ok, repeating addr payments are ok (no change). diff --git a/packages/bitcore-wallet-service/src/lib/chain/bch/index.ts b/packages/bitcore-wallet-service/src/lib/chain/bch/index.ts index b6c9ac6e018..f1cc5532f3c 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/bch/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/bch/index.ts @@ -10,11 +10,11 @@ export class BchChain extends BtcChain implements IChain { this.sizeEstimationMargin = config.bch?.sizeEstimationMargin ?? 0.01; this.inputSizeEstimationMargin = config.bch?.inputSizeEstimationMargin ?? 2; } - getSizeSafetyMargin(opts: any): number { + getSizeSafetyMargin(_opts: any): number { return 0; } - getInputSizeSafetyMargin(opts: any): number { + getInputSizeSafetyMargin(_opts: any): number { return 0; } @@ -26,7 +26,7 @@ export class BchChain extends BtcChain implements IChain { } = {}; try { addr = new A(inaddr); - } catch (ex) { + } catch { throw Errors.INVALID_ADDRESS; } if (!this._isCorrectNetwork(wallet, addr)) { diff --git a/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts b/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts index 3b0325880c7..5971353cfdc 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts @@ -91,7 +91,7 @@ export class BtcChain implements IChain { }; let inputs = utxos.filter(utxo => !utxo.locked); - if (!!opts.excludeUnconfirmedUtxos) { + if (opts.excludeUnconfirmedUtxos) { inputs = inputs.filter(utxo => utxo.confirmations); } if (!inputs.length) return cb(null, info); @@ -197,7 +197,7 @@ export class BtcChain implements IChain { } }; - getChangeAddress(wallet, (err, address, isNew) => { + getChangeAddress(wallet, (err, address, _isNew) => { if (err) return reject(err); return resolve(address); }); @@ -905,9 +905,9 @@ export class BtcChain implements IChain { return false; } - addressFromStorageTransform(network, address) {} + addressFromStorageTransform(_network, _address) {} - addressToStorageTransform(network, address) {} + addressToStorageTransform(_network, _address) {} addSignaturesToBitcoreTx(tx, inputs, inputPaths, signatures, xpub, signingMethod) { signingMethod = signingMethod || 'ecdsa'; @@ -930,13 +930,13 @@ export class BtcChain implements IChain { }; tx.inputs[i].addSignature(tx, s, signingMethod); i++; - } catch (e) {} + } catch { /* ignore error */ } } if (i != tx.inputs.length) throw new Error('Wrong signatures'); } - validateAddress(wallet, inaddr, opts) { + validateAddress(wallet, inaddr, _opts) { const A = this.bitcoreLib.Address; let addr: { network?: string; @@ -944,7 +944,7 @@ export class BtcChain implements IChain { } = {}; try { addr = new A(inaddr); - } catch (ex) { + } catch { throw Errors.INVALID_ADDRESS; } if (!this._isCorrectNetwork(wallet, addr)) { @@ -954,7 +954,7 @@ export class BtcChain implements IChain { } protected _isCorrectNetwork(wallet, addr) { - const addrNetwork = Utils.getNetworkName(wallet.chain, addr.network.toString()) + const addrNetwork = Utils.getNetworkName(wallet.chain, addr.network.toString()); const walNetwork = wallet.network; if (Utils.getNetworkType(addrNetwork) === 'testnet' && walNetwork === 'regtest') { return !!config.allowRegtest; @@ -977,7 +977,7 @@ export class BtcChain implements IChain { } // Push notification handling - onTx(tx) { + onTx(_tx) { return null; } diff --git a/packages/bitcore-wallet-service/src/lib/chain/doge/index.ts b/packages/bitcore-wallet-service/src/lib/chain/doge/index.ts index 6187734feed..e6dce634672 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/doge/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/doge/index.ts @@ -95,7 +95,7 @@ export class DogeChain extends BtcChain implements IChain { } } - const bigInputs = Utils.sortAsc(partitions[0], 'satoshis') + const bigInputs = Utils.sortAsc(partitions[0], 'satoshis'); const smallInputs = Utils.sortDesc(partitions[1], 'satoshis'); logger.debug('Considering ' + bigInputs.length + ' big inputs (' + Utils.formatUtxos(bigInputs) + ')'); @@ -317,7 +317,7 @@ export class DogeChain extends BtcChain implements IChain { }; let inputs = utxos.filter(utxo => !utxo.locked); - if (!!opts.excludeUnconfirmedUtxos) { + if (opts.excludeUnconfirmedUtxos) { inputs = inputs.filter(input => input.confirmations); } inputs = Utils.sortDesc(inputs, 'satoshis'); diff --git a/packages/bitcore-wallet-service/src/lib/chain/eth/index.ts b/packages/bitcore-wallet-service/src/lib/chain/eth/index.ts index 71641442f7c..0266b66cc31 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/eth/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/eth/index.ts @@ -18,14 +18,12 @@ const Defaults = Common.Defaults; function requireUncached(module) { delete require.cache[require.resolve(module)]; + // eslint-disable-next-line @typescript-eslint/no-require-imports return require(module); } const Erc20Decoder = requireUncached('abi-decoder'); Erc20Decoder.addABI(ERC20Abi); -function getErc20Decoder() { - return Erc20Decoder; -} const InvoiceDecoder = requireUncached('abi-decoder'); InvoiceDecoder.addABI(InvoiceAbi); @@ -47,7 +45,7 @@ export class EthChain implements IChain { * @returns {Object} balance - Total amount & locked amount. */ private convertBitcoreBalance(bitcoreBalance, locked) { - const { unconfirmed, confirmed, balance } = bitcoreBalance; + const { confirmed, balance } = bitcoreBalance; // we ASUME all locked as confirmed, for ETH. const convertedBalance = { totalAmount: balance, @@ -98,12 +96,12 @@ export class EthChain implements IChain { return cb(err); } // getPendingTxs returns all txps when given a native currency - server.getPendingTxs(opts, (err, txps) => { + server.getPendingTxs(opts, (err, _txps) => { if (err) return cb(err); let fees = 0; let amounts = 0; - txps = txps.filter(txp => { + _txps.filter(txp => { // Add gas used for tokens when getting native balance if (!opts.tokenAddress) { fees += txp.fee || 0; @@ -140,8 +138,8 @@ export class EthChain implements IChain { getWalletSendMaxInfo(server, wallet, opts, cb) { server.getBalance({}, (err, balance) => { if (err) return cb(err); - const { totalAmount, availableAmount } = balance; - let fee = opts.feePerKb * Defaults.MIN_GAS_LIMIT; + const { availableAmount } = balance; + const fee = opts.feePerKb * Defaults.MIN_GAS_LIMIT; return cb(null, { utxosBelowFee: 0, amountBelowFee: 0, @@ -167,9 +165,9 @@ export class EthChain implements IChain { getChangeAddress() { } - checkDust(output, opts) { } + checkDust(_output, _opts) { } - checkScriptOutput(output) { } + checkScriptOutput(_output) { } getFee(server, wallet, opts) { return new Promise(resolve => { @@ -184,13 +182,13 @@ export class EthChain implements IChain { let gasLimit = 0; // Gas limit for all recepients. used for contract interactions that rollup recepients let fee = 0; const defaultGasLimit = this.getDefaultGasLimit(opts); - let outputAddresses = []; // Parameter for MuliSend contract - let outputAmounts = []; // Parameter for MuliSend contract + const outputAddresses = []; // Parameter for MuliSend contract + const outputAmounts = []; // Parameter for MuliSend contract let totalValue = toBN(0); // Parameter for MuliSend contract logger.info(`getFee for address ${from} on network ${network} and chain ${chain}`); logger.info('getFee.opts: %o', { from, txType, priorityFeePercentile, gasLimitBuffer }); logger.info(`[${from}] Add gas limit buffer?: ${!!gasLimitBuffer}`); - for (let output of opts.outputs) { + for (const output of opts.outputs) { // Multisend txs build contract fn parameters (addresses, amounts) and bypass output level gas estimations if (opts.multiSendContractAddress) { outputAddresses.push(output.toAddress); @@ -225,7 +223,7 @@ export class EthChain implements IChain { gasPrice }); output.gasLimit = gasLimitEstimate || defaultGasLimit; - } catch (err) { + } catch { output.gasLimit = defaultGasLimit; } } @@ -320,7 +318,7 @@ export class EthChain implements IChain { const unsignedTxs = []; if (multiSendContractAddress) { - let multiSendParams = { + const multiSendParams = { nonce: Number(txp.nonce), recipients, contractAddress: multiSendContractAddress @@ -330,7 +328,7 @@ export class EthChain implements IChain { } else { for (let index = 0; index < recipients.length; index++) { // Uses gas limit from the txp output level - let params = { + const params = { ...recipients[index], nonce: Number(txp.nonce) + Number(index), recipients: [recipients[index]] @@ -339,11 +337,11 @@ export class EthChain implements IChain { } } - let tx = { + const tx = { uncheckedSerialize: () => unsignedTxs, txid: () => txp.txid, toObject: () => { - let ret = _.clone(txp); + const ret = _.clone(txp); ret.outputs[0].satoshis = ret.outputs[0].amount; return ret; }, @@ -355,9 +353,9 @@ export class EthChain implements IChain { if (opts.signed) { const sigs = txp.getCurrentSignatures(); - sigs.forEach(x => { + for (const x of sigs ) { this.addSignaturesToBitcoreTx(tx, txp.inputs, txp.inputPaths, x.signatures, x.xpub); - }); + } } return tx; @@ -392,7 +390,7 @@ export class EthChain implements IChain { checkTx(txp) { try { - const tx = this.getBitcoreTx(txp); + this.getBitcoreTx(txp); } catch (ex) { logger.debug('Error building Bitcore transaction: %o', ex); return ex; @@ -432,13 +430,13 @@ export class EthChain implements IChain { ... ] } */ - txp.outputs.forEach(output => { + for (const output of txp.outputs) { // We use a custom contract call (pay) instead of the transfer ERC20 method const decodedData = getInvoiceDecoder().decodeMethod(output.data); if (decodedData && decodedData.name === 'pay') { totalAmount = decodedData.params[0].value; } - }); + } return totalAmount; }; @@ -522,7 +520,7 @@ export class EthChain implements IChain { ); } - checkUtxos(opts) { } + checkUtxos(_opts) { } checkValidTxAmount(output): boolean { try { @@ -561,7 +559,7 @@ export class EthChain implements IChain { if (network != 'livenet') address.address += ':' + network; } - addSignaturesToBitcoreTx(tx, inputs, inputPaths, signatures, xpub) { + addSignaturesToBitcoreTx(tx, _inputs, _inputPaths, signatures, _xpub) { if (signatures.length === 0) { throw new Error('Signatures Required'); } @@ -595,7 +593,7 @@ export class EthChain implements IChain { return; } - onCoin(coin) { + onCoin(_coin) { return null; } diff --git a/packages/bitcore-wallet-service/src/lib/chain/matic/index.ts b/packages/bitcore-wallet-service/src/lib/chain/matic/index.ts index 50782c835cb..6de6c79f1a0 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/matic/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/matic/index.ts @@ -3,6 +3,6 @@ import { EthChain } from '../eth'; export class MaticChain extends EthChain { constructor() { super(); - this.chain = 'MATIC' + this.chain = 'MATIC'; } } diff --git a/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts b/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts index ed6e8cea05e..7527f57032d 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/sol/index.ts @@ -148,7 +148,7 @@ export class SolChain implements IChain { return tx; } - addSignaturesToBitcoreTx(tx, inputs, inputPaths, signatures, xpub) { + addSignaturesToBitcoreTx(tx, _inputs, _inputPaths, signatures, _xpub) { if (signatures.length === 0) { throw new Error('Signatures Required'); } @@ -181,7 +181,7 @@ export class SolChain implements IChain { if (err) return cb(err); const { availableAmount } = balance; const sigs = opts.numSignatures || 1; - const fee = sigs * Defaults.SOL_BASE_FEE + const fee = sigs * Defaults.SOL_BASE_FEE; return cb(null, { utxosBelowFee: 0, amountBelowFee: 0, @@ -197,7 +197,7 @@ export class SolChain implements IChain { if ( output.amount == null || output.amount < 0 || - isNaN(output.amount) || + isNaN(output.amount) || Web3.utils.toBN(BigInt(output.amount).toString()).toString() !== BigInt(output.amount).toString() ) { logger.warn('output.amount is not a valid value: ' + output.amount); @@ -212,7 +212,7 @@ export class SolChain implements IChain { checkTx(txp) { try { - const tx = this.getBitcoreTx(txp); + this.getBitcoreTx(txp); } catch (ex) { logger.debug('Error building Bitcore transaction: %o', ex); return ex; @@ -327,9 +327,9 @@ export class SolChain implements IChain { checkDust(_output, _opts) { } - checkScriptOutput(output) { } + checkScriptOutput(_output) { } - onCoin(coin) { + onCoin(_coin) { return null; } @@ -341,9 +341,9 @@ export class SolChain implements IChain { return cb(); } - checkUtxos(opts) { } + checkUtxos(_opts) { } - onTx(tx) { + onTx(_tx) { return null; } } diff --git a/packages/bitcore-wallet-service/src/lib/chain/xrp/index.ts b/packages/bitcore-wallet-service/src/lib/chain/xrp/index.ts index 5e42c2aeed8..710ad048e69 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/xrp/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/xrp/index.ts @@ -18,7 +18,7 @@ export class XrpChain implements IChain { * @returns {Object} balance - Total amount & locked amount. */ private convertBitcoreBalance(bitcoreBalance, locked, reserve = Defaults.MIN_XRP_BALANCE) { - const { unconfirmed, confirmed, balance } = bitcoreBalance; + const { confirmed, balance } = bitcoreBalance; let activatedLocked = locked; // If XRP address has a min balance of X XRP, subtract activation fee for true spendable balance. if (balance > 0) { @@ -90,8 +90,8 @@ export class XrpChain implements IChain { getWalletSendMaxInfo(server, wallet, opts, cb) { server.getBalance({}, (err, balance) => { if (err) return cb(err); - const { totalAmount, availableAmount } = balance; - let fee = opts.feePerKb; + const { availableAmount } = balance; + const fee = opts.feePerKb; return cb(null, { utxosBelowFee: 0, amountBelowFee: 0, @@ -117,9 +117,9 @@ export class XrpChain implements IChain { getChangeAddress() { } - checkDust(output, opts) { } + checkDust(_output, _opts) { } - checkScriptOutput(output) { } + checkScriptOutput(_output) { } getFee(server, wallet, opts) { return new Promise((resolve, reject) => { @@ -131,7 +131,7 @@ export class XrpChain implements IChain { if (err) { return reject(err); } - let feePerKb = inFeePerKb; + const feePerKb = inFeePerKb; opts.fee = feePerKb; return resolve({ feePerKb }); }); @@ -155,7 +155,7 @@ export class XrpChain implements IChain { amount: outputs[outputIdx].amount, address: outputs[outputIdx].toAddress, tag: outputs[outputIdx].tag - } + }; const _tag = recepient?.tag || destinationTag; const rawTx = Transactions.create({ ...txp, @@ -183,9 +183,9 @@ export class XrpChain implements IChain { if (opts.signed) { const sigs = txp.getCurrentSignatures(); - sigs.forEach(x => { - this.addSignaturesToBitcoreTx(tx, txp.inputs, txp.inputPaths, x.signatures, x.xpub); - }); + for (const x of sigs) { + this.addSignaturesToBitcoreTx(tx, x.signatures); + } } return tx; @@ -223,7 +223,7 @@ export class XrpChain implements IChain { }); } - checkUtxos(opts) { } + checkUtxos(/* opts */) { } checkValidTxAmount(output): boolean { if (!Utils.isNumber(output.amount) || isNaN(output.amount) || output.amount < 0) { @@ -252,7 +252,7 @@ export class XrpChain implements IChain { if (network != 'livenet') address.address += ':' + network; } - addSignaturesToBitcoreTx(tx, inputs, inputPaths, signatures, xpub) { + addSignaturesToBitcoreTx(tx, signatures) { if (signatures.length === 0) { throw new Error('Signatures Required'); } @@ -295,10 +295,10 @@ export class XrpChain implements IChain { return; } - onCoin(coin) { + onCoin(_coin) { return null; } - onTx(tx) { + onTx(_tx) { // TODO // format tx to // {address, amount} diff --git a/packages/bitcore-wallet-service/src/lib/cleanfiatrates.ts b/packages/bitcore-wallet-service/src/lib/cleanfiatrates.ts index 475658f6c4f..4881e034cc7 100644 --- a/packages/bitcore-wallet-service/src/lib/cleanfiatrates.ts +++ b/packages/bitcore-wallet-service/src/lib/cleanfiatrates.ts @@ -8,7 +8,7 @@ import { Storage } from './storage'; const ObjectID = mongodb.ObjectID; -var objectIdDate = function(date) { +const objectIdDate = function(date) { return Math.floor(date.getTime() / 1000).toString(16) + '0000000000000000'; }; @@ -21,7 +21,7 @@ export class CleanFiatRates { constructor() {} run(cb) { - let dbConfig = config.storageOpts.mongoDb; + const dbConfig = config.storageOpts.mongoDb; let uri = dbConfig.uri; @@ -103,7 +103,7 @@ export class CleanFiatRates { const datesToKeep = []; // Timestamps grouped by coin avoiding duplicates. - let tsGruopedByCoin = _.reduce( + const tsGruopedByCoin = _.reduce( results, (r, a) => { r[a.coin] = _.uniq([...(r[a.coin] || []), a.ts]); @@ -113,12 +113,12 @@ export class CleanFiatRates { ); // keep one date every hour for each coin - _.forEach(tsGruopedByCoin, (tsGroup, key) => { + for (const [key, tsGroup] of Object.entries(tsGruopedByCoin)) { console.log(`\tFiltering times for ${key.toUpperCase()}`); let prevTime = null; let isSameHour; - _.forEach(tsGroup, (ts: number) => { + for (const ts of tsGroup as number[]) { if (prevTime > ts + 60 * 10000) return cb(new Error('Results not in order')); if (prevTime) { @@ -131,8 +131,8 @@ export class CleanFiatRates { datesToKeep.push(ts); } prevTime = ts; - }); - }); + } + } return cb(null, datesToKeep); }); } diff --git a/packages/bitcore-wallet-service/src/lib/common/utils.ts b/packages/bitcore-wallet-service/src/lib/common/utils.ts index da0eacd281d..c4d9d7b89d4 100644 --- a/packages/bitcore-wallet-service/src/lib/common/utils.ts +++ b/packages/bitcore-wallet-service/src/lib/common/utils.ts @@ -75,7 +75,7 @@ export const Utils = { args = args || []; if (!Array.isArray(args)) args = [args]; if (!Utils.isObject(obj)) return args; - const missing = args.filter(arg => !obj.hasOwnProperty(arg)); + const missing = args.filter(arg => !Object.hasOwn(obj, arg)); return missing; }, @@ -300,19 +300,19 @@ export const Utils = { try { new Bitcore_['btc'].Address(address); return 'btc'; - } catch (e) { + } catch { try { new Bitcore_['bch'].Address(address); return 'bch'; - } catch (e) { + } catch { try { new Bitcore_['doge'].Address(address); return 'doge'; - } catch (e) { + } catch { try { new Bitcore_['ltc'].Address(address); return 'ltc'; - } catch (e) { + } catch { return; } } @@ -360,7 +360,7 @@ export const Utils = { return 'mainnet'; } if (network === 'regtest') { - return 'regtest'; + return 'regtest'; } return 'testnet'; }, @@ -402,9 +402,9 @@ export const Utils = { }; if (!keys.length) { - return arr.sort((a, b) => { const [_a, _b] = transformVals(a, b); return _a.compare(_b) }); + return arr.sort((a, b) => { const [_a, _b] = transformVals(a, b); return _a.compare(_b); }); } else if (keys.length === 1 && !Array.isArray(keys[0])) { - return arr.sort((a, b) => { const [_a, _b] = transformVals(a[keys[0]], b[keys[0]]); return _a.compare(_b) }); + return arr.sort((a, b) => { const [_a, _b] = transformVals(a[keys[0]], b[keys[0]]); return _a.compare(_b); }); } return arr.sort((a, b) => { // compare concatenated strings for multiple key sorting @@ -457,7 +457,7 @@ export const Utils = { const retval: Partial = {}; if (!obj) return retval; for (const key of keys) { - if (obj.hasOwnProperty(key)) { + if (Object.hasOwn(obj as object, key)) { retval[key] = obj[key]; } } diff --git a/packages/bitcore-wallet-service/src/lib/emailservice.ts b/packages/bitcore-wallet-service/src/lib/emailservice.ts index 80c470fd708..2ef67af202b 100644 --- a/packages/bitcore-wallet-service/src/lib/emailservice.ts +++ b/packages/bitcore-wallet-service/src/lib/emailservice.ts @@ -1,14 +1,12 @@ +import fs from 'fs'; +import { IncomingMessage } from 'http'; +import path from 'path'; +import sgMail from '@sendgrid/mail'; import * as async from 'async'; import juice from 'juice'; import 'source-map-support/register'; - -import sgMail from '@sendgrid/mail'; -import { Constants as ConstantsCWC } from 'crypto-wallet-core'; -import fs from 'fs'; -import { IncomingMessage } from 'http'; import Mustache from 'mustache'; import * as nodemailer from 'nodemailer'; -import path from 'path'; import request from 'request'; import config from '../config'; import { Common } from './common'; @@ -202,9 +200,9 @@ export class EmailService { } return reject(data?.body || data); } - ) + ); }); - } + }; } else { throw new Error('Unknown emailOpts.mailer: ' + opts.emailOpts.mailer); } @@ -224,7 +222,7 @@ export class EmailService { } _getTemplateLanguages(templatePath) { - const contents = fs.readdirSync(templatePath, { withFileTypes: true}); + const contents = fs.readdirSync(templatePath, { withFileTypes: true }); const langs = contents.filter(item => item.isDirectory()).map(item => item.name); return langs; } @@ -325,7 +323,7 @@ export class EmailService { unit }; }) - .filter(p => !!p); // filter out falsy values (e.g. undefined) + .filter(p => !!p); // filter out falsy values (e.g. undefined) return cb(null, recipients); }); @@ -383,7 +381,7 @@ export class EmailService { if (firstLine && firstLine.startsWith('{{subjectPrefix}}')) { data.title = toTitleCase(firstLine.replace('{{subjectPrefix}}', '')); } - } catch (err) { + } catch { const templateName = EMAIL_TYPES[notification.type].filename; data.title = toTitleCase(templateName.split('_').join(' ')); } @@ -425,7 +423,7 @@ export class EmailService { try { customTokensData = await this.getTokenData(data.address.coin); tokenData = customTokensData.find(t => t.address === tokenAddress); - } catch (error) { + } catch { return cb(new Error('Could not get custom tokens data')); } if (tokenData) { @@ -512,7 +510,7 @@ export class EmailService { let errStr; try { errStr = err.toString(); - } catch (e) { } + } catch { /* ignore errors */ } logger.warn('An error occurred when trying to send email to %o %o', email.to, (errStr || err)); return cb(err); @@ -628,7 +626,7 @@ export class EmailService { this.storage.storeEmail(email, next); }); }, - err => { + () => { return next(); } ); @@ -639,7 +637,7 @@ export class EmailService { let errStr; try { errStr = err.toString(); - } catch (e) { } + } catch { /* ignore errors */ } logger.warn('An error ocurred generating email notification: %o', errStr || err); } @@ -736,7 +734,7 @@ export class EmailService { return resolve(updatedTokens); }); } - }); + }); }); }); } diff --git a/packages/bitcore-wallet-service/src/lib/expressapp.ts b/packages/bitcore-wallet-service/src/lib/expressapp.ts index a772e205e7c..2ddf4596c88 100644 --- a/packages/bitcore-wallet-service/src/lib/expressapp.ts +++ b/packages/bitcore-wallet-service/src/lib/expressapp.ts @@ -1,25 +1,25 @@ +import path from 'path'; import * as async from 'async'; import compression from 'compression'; import cors from 'cors'; import express from 'express'; import RateLimit from 'express-rate-limit'; import _ from 'lodash'; -import path from 'path'; import rp from 'request-promise-native'; import 'source-map-support/register'; import config from '../config'; import * as Types from '../types/expressapp'; -import type { GetAddressesOpts } from '../types/server'; import { Common } from './common'; import { ClientError } from './errors/clienterror'; import { Errors } from './errors/errordefinitions'; import { logger, transport } from './logger'; -import { error } from './routes/helpers' +import { error } from './routes/helpers'; import { createWalletLimiter } from './routes/middleware/createWalletLimiter'; import { LogMiddleware } from './routes/middleware/log'; import { TssRouter } from './routes/tss'; import { WalletService } from './server'; import { Stats } from './stats'; +import type { GetAddressesOpts } from '../types/server'; const Defaults = Common.Defaults; const Utils = Common.Utils; @@ -88,8 +88,8 @@ export class ExpressApp { this.app.use((req, res, next) => { if (config.maintenanceOpts.maintenanceMode === true) { // send a 503 error, with a message to the bitpay status page - let errorCode = 503; - let errorMessage = 'BWS down for maintenance'; + const errorCode = 503; + const errorMessage = 'BWS down for maintenance'; res.status(503).send({ code: errorCode, message: errorMessage }); } else { next(); @@ -137,7 +137,7 @@ export class ExpressApp { }; }; - const getServer: Types.GetServerFn = (req, res) => { + const getServer: Types.GetServerFn = (req, _res) => { const opts = { clientVersion: req.header('x-client-version'), userAgent: req.header('user-agent') @@ -261,7 +261,7 @@ export class ExpressApp { SetPublicCache(res, 10 * ONE_MINUTE); try { res.setHeader('User-Agent', 'copay'); - var options = { + const options = { uri: 'https://api.github.com/repos/bitpay/wallet/releases/latest', headers: { 'User-Agent': 'Copay' @@ -288,7 +288,7 @@ export class ExpressApp { try { const htmlString = await rp(options); if (htmlString['tag_name']) { - server.storage.storeGlobalCache('latest-copay-version', htmlString['tag_name'], err => { + server.storage.storeGlobalCache('latest-copay-version', htmlString['tag_name'], () => { res.json({ version: htmlString['tag_name'] }); }); } @@ -443,18 +443,18 @@ export class ExpressApp { promise.then( (server: WalletService) => new Promise(resolve => { - let options: any = buildOpts(req, server.copayerId); + const options: any = buildOpts(req, server.copayerId); if (options.tokenAddresses) { // add a null entry to array so we can get the chain balance options.tokenAddresses.unshift(null); return async.concat( options.tokenAddresses, (tokenAddress, cb) => { - let optsClone = JSON.parse(JSON.stringify(options)); + const optsClone = JSON.parse(JSON.stringify(options)); optsClone.tokenAddresses = null; optsClone.tokenAddress = tokenAddress; return server.getStatus(optsClone, (err, status) => { - let result: any = { + const result: any = { walletId: server.walletId, tokenAddress: optsClone.tokenAddress, success: true, @@ -488,11 +488,11 @@ export class ExpressApp { }), ({ message }) => Promise.resolve({ success: false, error: message }) ) - .catch(err => { - if (!silentFailure) { - returnError(err, res, req); - } - }) + .catch(err => { + if (!silentFailure) { + returnError(err, res, req); + } + }) ) ); } catch (err) { @@ -616,7 +616,7 @@ export class ExpressApp { router.get('/v1/advertisements/', (req, res) => { let server: WalletService; - let testing = req.query.testing; + const testing = req.query.testing; try { server = getServer(req, res); @@ -647,7 +647,7 @@ export class ExpressApp { return returnError(ex, res, req); } - let opts = { adId: req.params['adId'] }; + const opts = { adId: req.params['adId'] }; if (req.params['adId']) { server.getAdvert(opts, (err, ad) => { @@ -659,9 +659,9 @@ export class ExpressApp { router.get('/v1/advertisements/country/:country', (req, res) => { let server: WalletService; - let country = req.params['country']; + const country = req.params['country']; - let opts = { country }; + const opts = { country }; try { server = getServer(req, res); @@ -676,7 +676,7 @@ export class ExpressApp { }); router.post('/v1/advertisements/:adId/activate', (req, res) => { - let opts = { adId: req.params['adId'] }; + const opts = { adId: req.params['adId'] }; getServerWithAuth( req, @@ -686,7 +686,7 @@ export class ExpressApp { }, server => { if (req.params['adId']) { - server.activateAdvert(opts, (err, ad) => { + server.activateAdvert(opts, (err, _ad) => { if (err) returnError(err, res, req); res.json({ advertisementId: opts.adId, message: 'advert activated' }); }); @@ -696,7 +696,7 @@ export class ExpressApp { }); router.post('/v1/advertisements/:adId/deactivate', (req, res) => { - let opts = { adId: req.params['adId'] }; + const opts = { adId: req.params['adId'] }; getServerWithAuth( req, @@ -706,7 +706,7 @@ export class ExpressApp { }, server => { if (req.params['adId']) { - server.deactivateAdvert(opts, (err, ad) => { + server.deactivateAdvert(opts, (err, _ad) => { if (err) returnError(err, res, req); res.json({ advertisementId: opts.adId, message: 'advert deactivated' }); }); diff --git a/packages/bitcore-wallet-service/src/lib/fiatrateservice.ts b/packages/bitcore-wallet-service/src/lib/fiatrateservice.ts index 8c0947fa41f..b20d5c646e7 100644 --- a/packages/bitcore-wallet-service/src/lib/fiatrateservice.ts +++ b/packages/bitcore-wallet-service/src/lib/fiatrateservice.ts @@ -1,11 +1,13 @@ import * as async from 'async'; +import preconditions from 'preconditions'; import * as request from 'request'; import { Common } from './common'; import { providers } from './fiatrateproviders'; import logger from './logger'; import { Storage } from './storage'; -const $ = require('preconditions').singleton(); +const $ = preconditions.singleton(); + const Defaults = Common.Defaults; const Constants = Common.Constants; diff --git a/packages/bitcore-wallet-service/src/lib/iconsconfig.ts b/packages/bitcore-wallet-service/src/lib/iconsconfig.ts index 578b9f40c4c..67d89fab0f9 100644 --- a/packages/bitcore-wallet-service/src/lib/iconsconfig.ts +++ b/packages/bitcore-wallet-service/src/lib/iconsconfig.ts @@ -18,7 +18,7 @@ const iconMap: IconMap = { wallet_complete: 'green-check.png' }; -export const getIconHtml = (templateName: string, sendEmail?: boolean): string | null => { +export const getIconHtml = (templateName: string, _sendEmail?: boolean): string | null => { const iconFile = iconMap[templateName]; if (!iconFile) { return null; @@ -27,5 +27,5 @@ export const getIconHtml = (templateName: string, sendEmail?: boolean): string | const staticUrl = config.baseUrl || 'https://bws.bitpay.com'; const iconUrl = `${staticUrl}/bws/static/images/${iconFile}`; - return `${templateName} icon` + return `${templateName} icon`; }; \ No newline at end of file diff --git a/packages/bitcore-wallet-service/src/lib/lock.ts b/packages/bitcore-wallet-service/src/lib/lock.ts index b79f166e664..470f3daf79e 100644 --- a/packages/bitcore-wallet-service/src/lib/lock.ts +++ b/packages/bitcore-wallet-service/src/lib/lock.ts @@ -1,16 +1,18 @@ import _ from 'lodash'; +import preconditions from 'preconditions'; import { Common } from './common'; import { Errors } from './errors/errordefinitions'; import { Storage } from './storage'; -const $ = require('preconditions').singleton(); +const $ = preconditions.singleton(); + const Defaults = Common.Defaults; const ACQUIRE_RETRY_STEP = 50; // ms export class Lock { storage: Storage; - constructor(storage: Storage, opts = {}) { - opts = opts || {}; + constructor(storage: Storage, _opts = {}) { + _opts = _opts || {}; this.storage = storage; } @@ -61,8 +63,8 @@ export class Lock { if (err == 'LOCKED') return cb(Errors.WALLET_BUSY); if (err) return cb(err); - const _cb = function() { - cb.apply(null, arguments); + const _cb = function(...args) { + cb(...args); release(); }; task(_cb); diff --git a/packages/bitcore-wallet-service/src/lib/logger.ts b/packages/bitcore-wallet-service/src/lib/logger.ts index bae710b9bed..62e1e161484 100644 --- a/packages/bitcore-wallet-service/src/lib/logger.ts +++ b/packages/bitcore-wallet-service/src/lib/logger.ts @@ -23,11 +23,6 @@ export const logger = winston.createLogger({ transports: [transport] }); -const timezone = new Date() - .toLocaleString('en-US', { timeZoneName: 'short' }) - .split(' ') - .pop(); - export const formatTimestamp = (date: Date): string => `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date .getDate() diff --git a/packages/bitcore-wallet-service/src/lib/model/address.ts b/packages/bitcore-wallet-service/src/lib/model/address.ts index faad0eeefe3..1310645245c 100644 --- a/packages/bitcore-wallet-service/src/lib/model/address.ts +++ b/packages/bitcore-wallet-service/src/lib/model/address.ts @@ -11,7 +11,7 @@ import { Common } from '../common'; import { AddressManager } from './addressmanager'; const $ = singleton(); -const { Constants, Defaults, Utils } = Common; +const { Constants, Utils } = Common; export interface IAddress { version: string; @@ -104,7 +104,7 @@ export class Address { $.checkArgument(Utils.checkValueInCollection(scriptType, Constants.SCRIPT_TYPES)); const externSourcePublicKey = hardwareSourcePublicKey || clientDerivedPublicKey; if (externSourcePublicKey) { - let bitcoreAddress + let bitcoreAddress; try { bitcoreAddress = Deriver.deriveAddressWithPath(chain.toUpperCase(), network, externSourcePublicKey, path, scriptType); } catch { @@ -115,7 +115,7 @@ export class Address { address: bitcoreAddress.toString(), path, publicKeys: [externSourcePublicKey] - } + }; } let publicKeys = (publicKeyRing || []).map(item => { diff --git a/packages/bitcore-wallet-service/src/lib/model/advertisement.ts b/packages/bitcore-wallet-service/src/lib/model/advertisement.ts index 3bfc7bff091..bd6f6455c47 100644 --- a/packages/bitcore-wallet-service/src/lib/model/advertisement.ts +++ b/packages/bitcore-wallet-service/src/lib/model/advertisement.ts @@ -1,5 +1,4 @@ -const $ = require('preconditions').singleton(); -var _ = require('lodash'); +import _ from 'lodash'; export interface IAdvertisement { name: string; diff --git a/packages/bitcore-wallet-service/src/lib/model/copayer.ts b/packages/bitcore-wallet-service/src/lib/model/copayer.ts index d8b5125cb4e..d4581a1b0bc 100644 --- a/packages/bitcore-wallet-service/src/lib/model/copayer.ts +++ b/packages/bitcore-wallet-service/src/lib/model/copayer.ts @@ -62,7 +62,7 @@ export class Copayer { static create(opts) { opts = opts || {}; if (!opts.hardwareSourcePublicKey && !opts.clientDerivedPublicKey) { - $.checkArgument(opts.xPubKey, 'Missing copayer extended public key') + $.checkArgument(opts.xPubKey, 'Missing copayer extended public key'); } $.checkArgument(opts.requestPubKey, 'Missing copayer request public key') .checkArgument(opts.signature, 'Missing copayer request public key signature'); diff --git a/packages/bitcore-wallet-service/src/lib/model/email.ts b/packages/bitcore-wallet-service/src/lib/model/email.ts index baaa4ad656b..77ab08967a6 100644 --- a/packages/bitcore-wallet-service/src/lib/model/email.ts +++ b/packages/bitcore-wallet-service/src/lib/model/email.ts @@ -1,24 +1,6 @@ import _ from 'lodash'; +import Uuid from 'uuid'; -const Uuid = require('uuid'); - -interface IEmail { - version: number; - createdOn: number; - id: number; - walletId: string; - copayerId: string; - from: string; - to: string; - subject: string; - bodyPlain: string; - bodyHtml: string; - status: string; - attempts: number; - lastAttemptOn?: number; - notificationId: string; - language: string; -} export class Email { version: number; createdOn: number; diff --git a/packages/bitcore-wallet-service/src/lib/model/session.ts b/packages/bitcore-wallet-service/src/lib/model/session.ts index b9cbcacf989..13958d1b8f8 100644 --- a/packages/bitcore-wallet-service/src/lib/model/session.ts +++ b/packages/bitcore-wallet-service/src/lib/model/session.ts @@ -1,6 +1,6 @@ +import Uuid from 'uuid'; import { Common } from '../common'; -const Uuid = require('uuid'); const Defaults = Common.Defaults; export interface ISession { diff --git a/packages/bitcore-wallet-service/src/lib/model/txproposal.ts b/packages/bitcore-wallet-service/src/lib/model/txproposal.ts index 3eff2e424bc..2113b4e3062 100644 --- a/packages/bitcore-wallet-service/src/lib/model/txproposal.ts +++ b/packages/bitcore-wallet-service/src/lib/model/txproposal.ts @@ -214,14 +214,14 @@ export class TxProposal implements ITxProposal { x.instantAcceptanceEscrow = opts.instantAcceptanceEscrow; x.outputs = (opts.outputs || []).map(output => { const out: any = {}; - if (output.amount !== undefined) out.amount = output.amount; - if (output.toAddress !== undefined) out.toAddress = output.toAddress; - if (output.sourceAddress !== undefined) out.sourceAddress = output.sourceAddress; - if (output.message !== undefined) out.message = output.message; - if (output.data !== undefined) out.data = output.data; - if (output.gasLimit !== undefined) out.gasLimit = output.gasLimit; - if (output.script !== undefined) out.script = output.script; - if (output.tag !== undefined) out.tag = output.tag; + if (output.amount !== undefined) out.amount = output.amount; + if (output.toAddress !== undefined) out.toAddress = output.toAddress; + if (output.sourceAddress !== undefined) out.sourceAddress = output.sourceAddress; + if (output.message !== undefined) out.message = output.message; + if (output.data !== undefined) out.data = output.data; + if (output.gasLimit !== undefined) out.gasLimit = output.gasLimit; + if (output.script !== undefined) out.script = output.script; + if (output.tag !== undefined) out.tag = output.tag; return out; }); let numOutputs = x.outputs.length; @@ -383,7 +383,7 @@ export class TxProposal implements ITxProposal { x.nonceAddress = obj.nonceAddress; // account address mantaining latest nonce x.category = obj.category; // kind of transaction: transfer, account creation, nonce creation, etc x.computeUnits = obj.computeUnits; - x.memo = obj.memo; + x.memo = obj.memo; x.fromAta = obj.fromAta; x.decimals = obj.decimals; x.priorityFee = obj.priorityFee; @@ -528,7 +528,7 @@ export class TxProposal implements ITxProposal { } isRepublishEnabled() { - return !!this.refreshOnPublish + return !!this.refreshOnPublish; } isTemporary() { diff --git a/packages/bitcore-wallet-service/src/lib/model/txproposal_legacy.ts b/packages/bitcore-wallet-service/src/lib/model/txproposal_legacy.ts index b03f809f59f..8925a006511 100644 --- a/packages/bitcore-wallet-service/src/lib/model/txproposal_legacy.ts +++ b/packages/bitcore-wallet-service/src/lib/model/txproposal_legacy.ts @@ -1,11 +1,13 @@ import _ from 'lodash'; +import preconditions from 'preconditions'; import { Common } from '../common'; import logger from '../logger'; +import { TxProposalAction } from './txproposalaction'; + +const $ = preconditions.singleton(); -const $ = require('preconditions').singleton(); const Constants = Common.Constants; const Defaults = Common.Defaults; -import { TxProposalAction } from './txproposalaction'; function throwUnsupportedError() { const msg = 'Unsupported operation on this transaction proposal'; diff --git a/packages/bitcore-wallet-service/src/lib/model/wallet.ts b/packages/bitcore-wallet-service/src/lib/model/wallet.ts index 4bea3aa0ed5..b3f43ca24dc 100644 --- a/packages/bitcore-wallet-service/src/lib/model/wallet.ts +++ b/packages/bitcore-wallet-service/src/lib/model/wallet.ts @@ -253,8 +253,8 @@ export class Wallet implements IWallet<() => boolean> { const salt = config.BE_KEY_SALT || Defaults.BE_KEY_SALT; var seed = (this.copayers || []).map(c => c.xPubKey) - .sort() - .join('') + + .sort() + .join('') + Utils.getGenericName(this.network) + // Maintaining compatibility with previous versions this.coin + salt; @@ -337,7 +337,7 @@ export class Wallet implements IWallet<() => boolean> { ); } - /// Only for power scan + // / Only for power scan getSkippedAddress() { $.checkState(this.isComplete(), 'Failed state: this.isComplete() at '); diff --git a/packages/bitcore-wallet-service/src/lib/notificationbroadcaster.ts b/packages/bitcore-wallet-service/src/lib/notificationbroadcaster.ts index 31ee406a15e..85bd4ecde5b 100644 --- a/packages/bitcore-wallet-service/src/lib/notificationbroadcaster.ts +++ b/packages/bitcore-wallet-service/src/lib/notificationbroadcaster.ts @@ -1,4 +1,5 @@ import { EventEmitter } from 'events'; + let _instance; export class NotificationBroadcaster extends EventEmitter { diff --git a/packages/bitcore-wallet-service/src/lib/pushnotificationsservice.ts b/packages/bitcore-wallet-service/src/lib/pushnotificationsservice.ts index 73646c712ab..e05114187b3 100644 --- a/packages/bitcore-wallet-service/src/lib/pushnotificationsservice.ts +++ b/packages/bitcore-wallet-service/src/lib/pushnotificationsservice.ts @@ -1,9 +1,12 @@ -import * as async from 'async'; import * as fs from 'fs'; +import path from 'path'; +import * as async from 'async'; import _ from 'lodash'; import 'source-map-support/register'; - +import Mustache from 'mustache'; import request from 'request'; +import defaultRequest from 'request'; +import sjcl from 'sjcl'; import config from '../config'; import { Common } from './common'; import logger from './logger'; @@ -11,13 +14,9 @@ import { MessageBroker } from './messagebroker'; import { INotification, IPreferences, Preferences } from './model'; import { Storage } from './storage'; -const Mustache = require('mustache'); -const defaultRequest = require('request'); -const path = require('path'); const Utils = Common.Utils; const Defaults = Common.Defaults; const Constants = Common.Constants; -const sjcl = require('sjcl'); const PUSHNOTIFICATIONS_TYPES = { NewCopayer: { @@ -517,13 +516,13 @@ export class PushNotificationsService { } else if (Constants.SOL_TOKEN_OPTS[tokenAddress]) { unit = Constants.SOL_TOKEN_OPTS[tokenAddress].symbol.toLowerCase(); label = UNIT_LABELS[unit]; - }else { + } else { let customTokensData; let tokenData; try { customTokensData = await this.getTokenData(data.address.coin); tokenData = customTokensData.find(t => t.address === tokenAddress); - } catch (error) { + } catch { return cb(new Error('Could not get custom tokens data')); } if (tokenData) { @@ -712,16 +711,16 @@ export class PushNotificationsService { ); } - private coinGeckoGetCredentials() { - if (!config.coinGecko) throw new Error('coinGecko missing credentials'); + private coinGeckoGetCredentials() { + if (!config.coinGecko) throw new Error('coinGecko missing credentials'); - const credentials = { - API: config.coinGecko.api, - API_KEY: config.coinGecko.apiKey, - }; + const credentials = { + API: config.coinGecko.api, + API_KEY: config.coinGecko.apiKey, + }; - return credentials; - } + return credentials; + } getTokenData(chain: string): Promise> { - return new Promise((resolve, reject) => { - const cacheKey = `cgTokenList:${chain}`; - const credentials = this.coinGeckoGetCredentials(); + return new Promise((resolve, reject) => { + const cacheKey = `cgTokenList:${chain}`; + const credentials = this.coinGeckoGetCredentials(); - this.storage.checkAndUseGlobalCache(cacheKey, Defaults.COIN_GECKO_CACHE_DURATION, (err, values, oldvalues) => { - if (err) logger.warn('Cache check failed', err); - if (values) return resolve(values); + this.storage.checkAndUseGlobalCache(cacheKey, Defaults.COIN_GECKO_CACHE_DURATION, (err, values, oldvalues) => { + if (err) logger.warn('Cache check failed', err); + if (values) return resolve(values); - const assetPlatformMap = { - eth: 'ethereum', - matic: 'polygon-pos', - pol: 'polygon-pos', - arb: 'arbitrum-one', - base: 'base', - op: 'optimistic-ethereum', - sol: 'solana', - }; + const assetPlatformMap = { + eth: 'ethereum', + matic: 'polygon-pos', + pol: 'polygon-pos', + arb: 'arbitrum-one', + base: 'base', + op: 'optimistic-ethereum', + sol: 'solana', + }; - const assetId = assetPlatformMap[chain]; - if (!assetId) return reject(new Error(`Unsupported chain '${chain}'`)); + const assetId = assetPlatformMap[chain]; + if (!assetId) return reject(new Error(`Unsupported chain '${chain}'`)); - const URL: string = `${credentials.API}/v3/token_lists/${assetId}/all.json`; - const headers = { - 'Content-Type': 'application/json', - 'Accept': 'application/json', - 'x-cg-pro-api-key': credentials.API_KEY - }; + const URL: string = `${credentials.API}/v3/token_lists/${assetId}/all.json`; + const headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'x-cg-pro-api-key': credentials.API_KEY + }; - this.request.get( - URL, - { - headers, - json: true - }, - (err, data) => { - const tokens = data?.body?.tokens; - const status = data?.body?.status; - if (err) { - logger.warn('An error occured while retrieving the token list', err); - if (oldvalues) { - logger.warn('Using old cached values'); - return resolve(oldvalues); - } - return reject(err.body ?? err); - } else if (status?.error_code === 429 && oldvalues) { - return resolve(oldvalues); - } else { - if (!tokens) { - if (oldvalues) { - logger.warn('No token list available... using old cached values'); - return resolve(oldvalues); - } - return reject(new Error(`Could not get tokens list. Code: ${status?.error_code}. Error: ${status?.error_message || 'Unknown error'}`)); - } + this.request.get( + URL, + { + headers, + json: true + }, + (err, data) => { + const tokens = data?.body?.tokens; + const status = data?.body?.status; + if (err) { + logger.warn('An error occured while retrieving the token list', err); + if (oldvalues) { + logger.warn('Using old cached values'); + return resolve(oldvalues); + } + return reject(err.body ?? err); + } else if (status?.error_code === 429 && oldvalues) { + return resolve(oldvalues); + } else { + if (!tokens) { + if (oldvalues) { + logger.warn('No token list available... using old cached values'); + return resolve(oldvalues); + } + return reject(new Error(`Could not get tokens list. Code: ${status?.error_code}. Error: ${status?.error_message || 'Unknown error'}`)); + } const updatedTokens = tokens.map(token => { if (token.logoURI?.includes('/thumb/')) { token.logoURI = token.logoURI.replace('/thumb/', '/large/'); } return token; }); - this.storage.storeGlobalCache(cacheKey, updatedTokens, storeErr => { - if (storeErr) logger.warn('Could not cache token list', storeErr); - return resolve(updatedTokens); - }); - } - }); - }); - }); - } - } + this.storage.storeGlobalCache(cacheKey, updatedTokens, storeErr => { + if (storeErr) logger.warn('Could not cache token list', storeErr); + return resolve(updatedTokens); + }); + } + }); + }); + }); + } +} diff --git a/packages/bitcore-wallet-service/src/lib/routes/middleware/authRequest.ts b/packages/bitcore-wallet-service/src/lib/routes/middleware/authRequest.ts index d82b11cc103..8f834ebb986 100644 --- a/packages/bitcore-wallet-service/src/lib/routes/middleware/authRequest.ts +++ b/packages/bitcore-wallet-service/src/lib/routes/middleware/authRequest.ts @@ -4,7 +4,7 @@ import { Utils } from '../../common/utils'; import { ClientError } from '../../errors/clienterror'; import { Errors } from '../../errors/errordefinitions'; import { Copayer } from '../../model'; -import { checkRequired, WalletService } from '../../server'; +import { WalletService, checkRequired } from '../../server'; import { Storage } from '../../storage'; import { error } from '../helpers'; diff --git a/packages/bitcore-wallet-service/src/lib/routes/middleware/authTssRequest.ts b/packages/bitcore-wallet-service/src/lib/routes/middleware/authTssRequest.ts index e89cd712235..19317fed086 100644 --- a/packages/bitcore-wallet-service/src/lib/routes/middleware/authTssRequest.ts +++ b/packages/bitcore-wallet-service/src/lib/routes/middleware/authTssRequest.ts @@ -1,9 +1,8 @@ import express from 'express'; -import * as Types from '../../../types/expressapp'; import { Utils } from '../../common/utils'; import { ClientError } from '../../errors/clienterror'; import { Errors } from '../../errors/errordefinitions'; -import { checkRequired, WalletService } from '../../server'; +import { WalletService, checkRequired } from '../../server'; import { error } from '../helpers'; import { getCredentials, getMessage } from './authRequest'; @@ -13,8 +12,7 @@ import { getCredentials, getMessage } from './authRequest'; * It checks if the request has valid credentials, verifies the signature, * and retrieves the TSS session based on the request path. */ -export function authTssRequest(opts?: Types.AuthRequestOpts): express.RequestHandler { - opts = opts || {}; +export function authTssRequest(): express.RequestHandler { return async function(req, res, next) { try { diff --git a/packages/bitcore-wallet-service/src/lib/routes/middleware/verifyTssMessage.ts b/packages/bitcore-wallet-service/src/lib/routes/middleware/verifyTssMessage.ts index ca4ee10962b..15b1a2e9107 100644 --- a/packages/bitcore-wallet-service/src/lib/routes/middleware/verifyTssMessage.ts +++ b/packages/bitcore-wallet-service/src/lib/routes/middleware/verifyTssMessage.ts @@ -6,7 +6,7 @@ import { ITssSigMessageObject } from '../../model/tsssign'; export async function verifyTssMessage(req, res, next) { try { - const { message }: { message: ITssKeyMessageObject | ITssSigMessageObject } = req.body + const { message }: { message: ITssKeyMessageObject | ITssSigMessageObject } = req.body; const { publicKey } = message || {}; if (!publicKey) { return res.status(400).send(Errors.TSS_PUBKEY_MISSING); @@ -30,7 +30,7 @@ export async function verifyTssMessage(req, res, next) { } } return next(); - } catch (err) { + } catch { return res.status(400).send(Errors.TSS_INVALID_MESSAGE); } }; diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index f9031209805..03b26c8ed00 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -4,7 +4,6 @@ import { BitcoreLibCash as BitcoreCash, BitcoreLibDoge as BitcoreDoge, BitcoreLibLtc as BitcoreLtc, - Constants as ConstantsCWC, Validation } from 'crypto-wallet-core'; import EmailValidator from 'email-validator'; @@ -29,8 +28,6 @@ import { ThorswapService } from '../externalservices/thorswap'; import { TransakService } from '../externalservices/transak'; import { WyreService } from '../externalservices/wyre'; import { serverMessages } from '../serverMessages'; -import type { ExternalServicesConfig } from '../types/externalservices'; -import type { GetAddressesOpts, UpgradeCheckOpts } from '../types/server'; import { BCHAddressTranslator } from './bchaddresstranslator'; import { BlockChainExplorer } from './blockchainexplorer'; import { V8 } from './blockchainexplorers/v8'; @@ -58,6 +55,8 @@ import { Wallet } from './model'; import { Storage } from './storage'; +import type { ExternalServicesConfig } from '../types/externalservices'; +import type { GetAddressesOpts, UpgradeCheckOpts } from '../types/server'; let request = _request; const $ = singleton(); @@ -160,7 +159,7 @@ export class WalletService implements IWalletService { transak: TransakService; wyre: WyreService; coinGecko: CoinGeckoService, - } + }; constructor() { if (!initialized) { @@ -190,7 +189,7 @@ export class WalletService implements IWalletService { transak: new TransakService(), wyre: new WyreService(), coinGecko: new CoinGeckoService(this.storage), - } + }; } /** * Gets the current version of BWS @@ -564,7 +563,7 @@ export class WalletService implements IWalletService { ); } - logout(opts, cb) { + logout(_opts, _cb) { // this.storage.removeSession(this.copayerId, cb); } @@ -631,7 +630,7 @@ export class WalletService implements IWalletService { // NOTE: this is just a shared pub key as part of the multisig // join secret. It's NOT the wallet's main xPubKey. pubKey = new Bitcore.PublicKey.fromString(opts.pubKey); - } catch (ex) { + } catch { return cb(new ClientError('Invalid public key')); } @@ -1199,7 +1198,7 @@ export class WalletService implements IWalletService { if (!checkRequired(opts, ['xPubKey'], cb)) return; try { xPubKey = Bitcore_[opts.chain].HDPublicKey(opts.xPubKey); - } catch (ex) { + } catch { return cb(new ClientError('Invalid extended public key')); } if (xPubKey.network == null) { @@ -1544,7 +1543,7 @@ export class WalletService implements IWalletService { } _store(wallet, address, cb, checkSync = false, forceSync = false) { - let stoAddress = _.clone(address); + const stoAddress = _.clone(address); ChainService.addressToStorageTransform(wallet.chain, wallet.network, stoAddress); this.storage.storeAddressAndWallet(wallet, stoAddress, (err, isDuplicate) => { if (err) return cb(err); @@ -1745,12 +1744,11 @@ export class WalletService implements IWalletService { const utxoKey = utxo => utxo.txid + '|' + utxo.vout; let allAddresses, - allUtxos, - utxoIndex, - addressStrs: string[], - bc: V8, - wallet: Wallet, - blockchainHeight: number; + allUtxos, + utxoIndex, + bc: V8, + wallet: Wallet, + blockchainHeight: number; async.series( [ next => { @@ -1784,12 +1782,11 @@ export class WalletService implements IWalletService { }); }, next => { - addressStrs = allAddresses.map(a => a.address); return next(); }, next => { if (!wallet.isComplete()) return next(); - this._getBlockchainHeight(wallet.chain, wallet.network, (err, height, hash) => { + this._getBlockchainHeight(wallet.chain, wallet.network, (err, height, _hash) => { if (err) return next(err); blockchainHeight = height; next(); @@ -1961,14 +1958,14 @@ export class WalletService implements IWalletService { let addrObj: { network?: { name?: string } } = {}; try { addrObj = new A(address); - } catch (ex) { + } catch { return cb(null, []); } if (!Utils.compareNetworks(addrObj.network.name.toLowerCase(), wallet.network.toLowerCase(), wallet.chain)) { return cb(null, []); } - this._getBlockchainHeight(wallet.chain, wallet.network, (err, height, hash) => { + this._getBlockchainHeight(wallet.chain, wallet.network, (err, height, _hash) => { if (err) return cb(err); bc.getAddressUtxos(address, height, (err, utxos) => { if (err) return cb(err); @@ -2298,7 +2295,7 @@ export class WalletService implements IWalletService { }); } - _validateOutputs(opts, wallet, cb) { + _validateOutputs(opts, wallet) { if (_.isEmpty(opts.outputs)) return new ClientError('No outputs were specified'); for (let i = 0; i < opts.outputs.length; i++) { @@ -2392,7 +2389,7 @@ export class WalletService implements IWalletService { ); }, next => { - const validationError = this._validateOutputs(opts, wallet, next); + const validationError = this._validateOutputs(opts, wallet); if (validationError) { return next(validationError); } @@ -2623,7 +2620,7 @@ export class WalletService implements IWalletService { if (wallet.scanStatus == 'error') return cb(Errors.WALLET_NEED_SCAN); if (config.suspendedChains && config.suspendedChains.includes(wallet.chain)) { - let Err = Errors.NETWORK_SUSPENDED; + const Err = Errors.NETWORK_SUSPENDED; Err.message = Err.message.replace('$network', wallet.chain.toUpperCase()); return cb(Err); } @@ -2882,7 +2879,7 @@ export class WalletService implements IWalletService { if (err) return cb(err); if (config.suspendedChains && config.suspendedChains.includes(wallet.chain)) { - let Err = Errors.NETWORK_SUSPENDED; + const Err = Errors.NETWORK_SUSPENDED; Err.message = Err.message.replace('$network', wallet.chain.toUpperCase()); return cb(Err); } @@ -3163,7 +3160,7 @@ export class WalletService implements IWalletService { if (err) return cb(err); if (config.suspendedChains && config.suspendedChains.includes(wallet.chain)) { - let Err = Errors.NETWORK_SUSPENDED; + const Err = Errors.NETWORK_SUSPENDED; Err.message = Err.message.replace('$network', wallet.chain.toUpperCase()); return cb(Err); } @@ -3190,7 +3187,7 @@ export class WalletService implements IWalletService { if ([...Object.keys(Constants.EVM_CHAINS), 'XRP'].includes(wallet.chain.toUpperCase())) { try { const txps = await this.getPendingTxsPromise({}); - for (let t of txps) { + for (const t of txps) { if (t.id !== txp.id && t.nonce <= txp.nonce && t.status !== 'rejected') { return cb(Errors.TX_NONCE_CONFLICT); } @@ -3283,7 +3280,7 @@ export class WalletService implements IWalletService { if (err) return cb(err); if (config.suspendedChains && config.suspendedChains.includes(wallet.chain)) { - let Err = Errors.NETWORK_SUSPENDED; + const Err = Errors.NETWORK_SUSPENDED; Err.message = Err.message.replace('$network', wallet.chain.toUpperCase()); return cb(Err); } @@ -3486,7 +3483,7 @@ export class WalletService implements IWalletService { return new Promise((resolve, reject) => { this.getPendingTxs(opts, (err, txps) => { if (err) return reject(err); - return resolve(txps) + return resolve(txps); }); }); } @@ -3544,7 +3541,6 @@ export class WalletService implements IWalletService { if (!txs?.length) return cb(null, txs); // console.log('[server.js.2915:txs:] IN NORMALIZE',txs); //TODO - const now = Math.floor(Date.now() / 1000); // One fee per TXID const indexedFee: any = _.keyBy(txs.filter(tx => tx.category === 'fee'), 'txid'); @@ -3805,7 +3801,7 @@ export class WalletService implements IWalletService { return cb(null, isOK); } - this.storage.setWalletAddressChecked(wallet.id, totalAddresses, err => { + this.storage.setWalletAddressChecked(wallet.id, totalAddresses, () => { return cb(null, isOK); }); }); @@ -3864,7 +3860,7 @@ export class WalletService implements IWalletService { }, { reprocess: force }); }; - syncAddr(addresses, err => { + syncAddr(addresses, () => { if (skipCheck || doNotCheckV8) return cb(); this.checkWalletSync(bc, wallet, false, (err, isOK) => { @@ -3995,10 +3991,6 @@ export class WalletService implements IWalletService { return _.pick(action, ['createdOn', 'type', 'copayerId', 'copayerName', 'comment']); }); for (const output of tx.outputs || []) { - const query = { - toAddress: output.address, - amount: output.amount - }; if (proposal.outputs) { const txpOut = proposal.outputs.find(o => o.toAddress === output.address && o.amount === output.amount); output.message = txpOut ? txpOut.message : null; @@ -4046,7 +4038,7 @@ export class WalletService implements IWalletService { } if (!result) { - let x = new Advertisement(); + const x = new Advertisement(); x.advertisementId = opts.advertisementId || Uuid.v4(); x.name = opts.name; @@ -4074,11 +4066,7 @@ export class WalletService implements IWalletService { checkIfAdvertExistsAlready(opts.adId, (err, advert) => { if (err) throw err; if (advert) { - try { - this.storage.storeAdvert(advert, cb); - } catch (err) { - throw err; - } + this.storage.storeAdvert(advert, cb); } }); }, @@ -4170,20 +4158,16 @@ export class WalletService implements IWalletService { }); }; - try { - this._runLocked( - cb, - cb => { - checkIfAdvertExistsAlready(opts.adId, (err, adId) => { - if (err) throw err; - this.storage.removeAdvert(adId, cb); // TODO: add to errordefinitions Errors.ADVERTISEMENT already exists - }); - }, - 10 * 1000 - ); - } catch (err) { - throw err; - } + this._runLocked( + cb, + cb => { + checkIfAdvertExistsAlready(opts.adId, (err, adId) => { + if (err) throw err; + this.storage.removeAdvert(adId, cb); // TODO: add to errordefinitions Errors.ADVERTISEMENT already exists + }); + }, + 10 * 1000 + ); } activateAdvert(opts, cb) { @@ -4243,7 +4227,6 @@ export class WalletService implements IWalletService { getTxHistoryV8(bc: V8, wallet, opts, skip, limit, cb) { let bcHeight, bcHash, - sinceTx, lastTxs, cacheStatus, resultTxs = [], @@ -4691,11 +4674,9 @@ export class WalletService implements IWalletService { if (step > 1) { this.logd('Deriving addresses for scan steps gaps DERIVATOR:' + derivator.id); - let addr, - i = 0; + let addr; while ((addr = derivator.getSkippedAddress())) { addresses.push(addr); - i++; } // this.logi(i + ' addresses were added.'); } @@ -4926,7 +4907,7 @@ export class WalletService implements IWalletService { * @param {Object} opts.platform - (Optional) Operating system and version of the user's device. */ getServicesData(opts, cb) { - let externalServicesConfig: ExternalServicesConfig = _.cloneDeep(config.services); + const externalServicesConfig: ExternalServicesConfig = _.cloneDeep(config.services); const isLoggedIn = !!opts?.bitpayIdLocationCountry; @@ -5085,7 +5066,6 @@ export class WalletService implements IWalletService { paths = Array.isArray(paths) ? paths : [paths]; const chain = opts.chain?.toLowerCase(); const v = Utils.parseVersion(opts.clientVersion); - const a = Utils.parseAppVersion(opts.userAgent); let result: boolean | string = false; for (const path of paths) { @@ -5111,8 +5091,8 @@ export class WalletService implements IWalletService { (v.major == 8 && v?.minor < 3) ) ) - ? 'BWC clients < 8.3 are no longer supported for multisig BCH wallets.' - : false; + ? 'BWC clients < 8.3 are no longer supported for multisig BCH wallets.' + : false; break; case UPGRADES.bwc_$lt_8_4_multisig_purpose48: result = ( @@ -5141,8 +5121,8 @@ export class WalletService implements IWalletService { v?.agent === 'bwc' && (v?.major == 0 || (v?.major == 1 && v?.minor < 2)) ) - ? 'BWC clients < 1.2 are no longer supported.' - : false; + ? 'BWC clients < 1.2 are no longer supported.' + : false; break; default: throw new Error('Unknown upgrade path'); @@ -5165,7 +5145,7 @@ export class WalletService implements IWalletService { ...opts, clientVersion: this.clientVersion, userAgent: this.userAgent - } + }; return WalletService.upgradeNeeded(paths, _opts); } @@ -5190,7 +5170,11 @@ export class WalletService implements IWalletService { moralisGetTokenAllowance(req): Promise { return new Promise((resolve, reject) => { - let keys, headers; + const headers = { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'X-Api-Key': config.moralis.apiKey, + }; if (!config.moralis) return reject(new Error('Moralis missing credentials')); if (!checkRequired(req.body, ['address']) && !checkRequired(req.body, ['ownerAddress'])) { @@ -5199,7 +5183,7 @@ export class WalletService implements IWalletService { const walletAddress = req.body.ownerAddress ?? req.body.address; - let qs = []; + const qs = []; if (req.body.chain) { const chain = req.body.chain; const formattedChain = typeof chain === 'number' && Number.isInteger(chain) @@ -5211,13 +5195,7 @@ export class WalletService implements IWalletService { if (req.body.cursor) qs.push('cursor=' + req.body.cursor); if (req.body.limit) qs.push('limit=' + req.body.limit); - const URL: string = `https://deep-index.moralis.io/api/v2.2/wallets/${walletAddress}/approvals${qs.length > 0 ? '?' + qs.join('&') : ''}` - - headers = { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'X-Api-Key': config.moralis.apiKey, - }; + const URL: string = `https://deep-index.moralis.io/api/v2.2/wallets/${walletAddress}/approvals${qs.length > 0 ? '?' + qs.join('&') : ''}`; this.request.get( URL, @@ -5307,14 +5285,18 @@ export class WalletService implements IWalletService { moralisGetERC20TokenBalancesWithPricesByWallet(req): Promise { return new Promise((resolve, reject) => { - let keys, headers; + const headers = { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'X-Api-Key': config.moralis.apiKey, + }; if (!config.moralis) return reject(new Error('Moralis missing credentials')); if (!checkRequired(req.body, ['address'])) { return reject(new ClientError('moralisGetERC20TokenBalancesWithPricesByWallet request missing arguments')); } - let qs = []; + const qs = []; if (req.body.chain) qs.push('chain=' + req.body.chain); if (req.body.toBlock) qs.push('to_block=' + req.body.toBlock); if (req.body.tokenAddresses) qs.push('token_addresses=' + req.body.tokenAddresses); @@ -5323,13 +5305,7 @@ export class WalletService implements IWalletService { if (req.body.limit) qs.push('limit=' + req.body.limit); if (req.body.excludeNative) qs.push('exclude_native=' + req.body.excludeNative); - const URL: string = `https://deep-index.moralis.io/api/v2.2/wallets/${req.body.address}/tokens${qs.length > 0 ? '?' + qs.join('&') : ''}` - - headers = { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'X-Api-Key': config.moralis.apiKey, - }; + const URL: string = `https://deep-index.moralis.io/api/v2.2/wallets/${req.body.address}/tokens${qs.length > 0 ? '?' + qs.join('&') : ''}`; this.request.get( URL, diff --git a/packages/bitcore-wallet-service/src/lib/storage.ts b/packages/bitcore-wallet-service/src/lib/storage.ts index c540ad0c11b..17b20250e4b 100644 --- a/packages/bitcore-wallet-service/src/lib/storage.ts +++ b/packages/bitcore-wallet-service/src/lib/storage.ts @@ -2,6 +2,7 @@ import * as async from 'async'; import _ from 'lodash'; import { Db } from 'mongodb'; import * as mongodb from 'mongodb'; +import preconditions from 'preconditions'; import { BCHAddressTranslator } from './bchaddresstranslator'; // only for migration import { Common } from './common'; import logger from './logger'; @@ -21,7 +22,7 @@ import { import { ITssKeyMessageObject, TssKeyGenModel } from './model/tsskeygen'; import { ITssSigMessageObject, TssSigGenModel } from './model/tsssign'; -const $ = require('preconditions').singleton(); +const $ = preconditions.singleton(); const collections = { // Duplciated in helpers.. TODO @@ -49,7 +50,7 @@ const Utils = Common.Utils; const ObjectID = mongodb.ObjectID; -var objectIdDate = function(date) { +const objectIdDate = function(date) { return Math.floor(date / 1000).toString(16) + '0000000000000000'; }; export class Storage { @@ -402,11 +403,11 @@ export class Storage { } tx.status = 'pending'; tx.multisigTxId = multisigTxpsInfoByTransactionHash[tx.txid][0].transactionId; - tx.actions.forEach(action => { + for (const action of tx.actions) { if (_.some(multisigTxpsInfoByTransactionHash[tx.txid], { event: 'ExecutionFailure' })) { action.type = 'failed'; } - }); + } if (tx.amount === 0) { actionsById[tx.multisigTxId] = [...tx.actions, ...(actionsById[tx.multisigTxId] || [])]; return undefined; @@ -415,11 +416,11 @@ export class Storage { }) ); - txs.forEach((tx: TxProposal) => { + for (const tx of txs as TxProposal[]) { if (actionsById[tx.multisigTxId]) { tx.actions = [...tx.actions, ...(actionsById[tx.multisigTxId] || [])]; } - }); + } return resolve(txs); }); @@ -1697,7 +1698,7 @@ export class Storage { }); } - fetchAllAdverts(cb) { + fetchAllAdverts(_cb) { this.db.collection(collections.ADVERTISEMENTS).find({}); } diff --git a/packages/bitcore-wallet-service/src/lib/tss.ts b/packages/bitcore-wallet-service/src/lib/tss.ts index 077b4d67644..5196b7049e7 100644 --- a/packages/bitcore-wallet-service/src/lib/tss.ts +++ b/packages/bitcore-wallet-service/src/lib/tss.ts @@ -1,13 +1,13 @@ import { BitcoreLib } from 'crypto-wallet-core'; -import { Errors } from './errors/errordefinitions' +import { Errors } from './errors/errordefinitions'; import logger from './logger'; import { ITssKeyMessageObject, TssKeyGenModel } from './model/tsskeygen'; import { ITssSigMessageObject, TssSigGenModel } from './model/tsssign'; -import { checkRequired, WalletService } from './server'; +import { WalletService, checkRequired } from './server'; import { Storage } from './storage'; class TssKeyGenClass { - async getMessagesForParty(params: { + async getMessagesForParty(params: { id: string; round: number; copayerId: string; @@ -435,7 +435,7 @@ class TssSignClass { s: signature.s, v: signature.v, pubKey: signature.pubKey, - }}); + } }); if (!result.result.ok) { logger.error('Failed to store TSS signature %o %o', id, result); throw Errors.TSS_GENERIC_ERROR.withMessage('Failed to store TSS signature'); diff --git a/packages/bitcore-wallet-service/src/lib/updatestats.ts b/packages/bitcore-wallet-service/src/lib/updatestats.ts index 7e2755b5e38..522108f0b33 100644 --- a/packages/bitcore-wallet-service/src/lib/updatestats.ts +++ b/packages/bitcore-wallet-service/src/lib/updatestats.ts @@ -1,12 +1,13 @@ import * as async from 'async'; import moment from 'moment'; import * as mongodb from 'mongodb'; +import { Storage } from './storage'; + const ObjectID = mongodb.ObjectID; -const storage = require('./storage'); const LAST_DAY = '2019-12-01'; -var objectIdFromDate = function(date) { +const objectIdFromDate = function(date) { return Math.floor(date.getTime() / 1000).toString(16) + '0000000000000000'; }; @@ -19,7 +20,7 @@ export class UpdateStats { constructor() {} run(config, cb) { - let dbConfig = config.storageOpts.mongoDb; + const dbConfig = config.storageOpts.mongoDb; let uri = dbConfig.uri; @@ -61,17 +62,17 @@ export class UpdateStats { this._updateFiatRates(next); } ], - err => { + () => { return this.client.close(cb); } ); } async _updateNewWallets(cb) { - let lastDay = await this.lastRun('stats_wallets'); - let od = objectIdFromDate(new Date(lastDay)); + const lastDay = await this.lastRun('stats_wallets'); + const od = objectIdFromDate(new Date(lastDay)); this.db - .collection(storage.Storage.collections.WALLETS) + .collection(Storage.collections.WALLETS) .aggregate([ { $match: { @@ -114,7 +115,7 @@ export class UpdateStats { await this.db .collection('stats_wallets') .remove({ '_id.day': { $gte: lastDay } }) - .then(async err => { + .then(async () => { // rm day = null res = res.filter(x => x._id.day); console.log(`\tTrying to insert ${res.length} entries`); @@ -133,10 +134,10 @@ export class UpdateStats { } async _updateFiatRates(cb) { - let lastDay = await this.lastRun('stats_fiat_rates'); - let od = objectIdFromDate(new Date(lastDay)); + const lastDay = await this.lastRun('stats_fiat_rates'); + const od = objectIdFromDate(new Date(lastDay)); this.db - .collection(storage.Storage.collections.FIAT_RATES2) + .collection(Storage.collections.FIAT_RATES2) .aggregate([ { $match: { @@ -182,7 +183,7 @@ export class UpdateStats { await this.db .collection('stats_fiat_rates') .remove({ '_id.day': { $gte: lastDay } }) - .then(async err => { + .then(async () => { // rm day = null res = res.filter(x => x._id.day); @@ -203,13 +204,13 @@ export class UpdateStats { async lastRun(coll) { // Grab last run - let cursor = await this.db + const cursor = await this.db .collection(coll) .find({}) // , { _id: true }}) // not working on new mongo driver .sort({ _id: -1 }) .limit(1); - let last = await cursor.next(); + const last = await cursor.next(); let lastDay = LAST_DAY; if (last && last._id) { lastDay = last._id.day; @@ -221,10 +222,10 @@ export class UpdateStats { } async _updateTxProposals(cb) { - let lastDay = await this.lastRun('stats_txps'); - let od = objectIdFromDate(new Date(lastDay)); + const lastDay = await this.lastRun('stats_txps'); + const od = objectIdFromDate(new Date(lastDay)); this.db - .collection(storage.Storage.collections.TXS) + .collection(Storage.collections.TXS) .aggregate([ { $match: { @@ -270,7 +271,7 @@ export class UpdateStats { await this.db .collection('stats_txps') .remove({ '_id.day': { $gte: lastDay } }) - .then(async err => { + .then(async () => { // rm day = null res = res.filter(x => x._id.day); console.log(`\tTrying to insert ${res.length} entries`); diff --git a/packages/bitcore-wallet-service/src/types/chain.d.ts b/packages/bitcore-wallet-service/src/types/chain.d.ts index 60925342a46..481aaf4b36c 100644 --- a/packages/bitcore-wallet-service/src/types/chain.d.ts +++ b/packages/bitcore-wallet-service/src/types/chain.d.ts @@ -52,8 +52,8 @@ export interface IChain { xpub: string, signingMethod?: string ); - addressToStorageTransform(network: string, address: {}): void; - addressFromStorageTransform(network: string, address: {}): void; + addressToStorageTransform(network: string, address: object): void; + addressFromStorageTransform(network: string, address: object): void; validateAddress(wallet: IWallet, inaddr: string, opts: { noCashAddr: boolean } & any); onCoin(coin: any): INotificationData | null; onTx(tx: any): INotificationData | null; diff --git a/packages/bitcore-wallet-service/src/updatestats/updatestats.ts b/packages/bitcore-wallet-service/src/updatestats/updatestats.ts index 3bb68f7c4de..7dc1192d88d 100644 --- a/packages/bitcore-wallet-service/src/updatestats/updatestats.ts +++ b/packages/bitcore-wallet-service/src/updatestats/updatestats.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node +import config from '../config'; import { UpdateStats } from '../lib/updatestats'; -var config = require('../config'); const updateStatsScript = new UpdateStats(); updateStatsScript.run(config, err => { diff --git a/packages/bitcore-wallet-service/test/bchaddresstranslator.test.ts b/packages/bitcore-wallet-service/test/bchaddresstranslator.test.ts index 234be38ef71..1688648eebf 100644 --- a/packages/bitcore-wallet-service/test/bchaddresstranslator.test.ts +++ b/packages/bitcore-wallet-service/test/bchaddresstranslator.test.ts @@ -41,8 +41,8 @@ describe('BCH Address translator', function() { res.should.equal('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA'); }); it('should filter out broken addreseses', function() { - const res = BCHAddressTranslator.translate(['qq2qkh9gs99326ytdg334lvhh999ke9mwgv3w37rl0','pepe', 123,'qq2qkh9gs99326ytdg334lvhh999ke9mwgv3w37rl0', 'false' ], 'copay'); - res.should.deep.equal(['CJHshKVqXnUYRB51EeaXhGDPZ5dxtcDF3z','CJHshKVqXnUYRB51EeaXhGDPZ5dxtcDF3z']); + const res = BCHAddressTranslator.translate(['qq2qkh9gs99326ytdg334lvhh999ke9mwgv3w37rl0', 'pepe', 123, 'qq2qkh9gs99326ytdg334lvhh999ke9mwgv3w37rl0', 'false' ], 'copay'); + res.should.deep.equal(['CJHshKVqXnUYRB51EeaXhGDPZ5dxtcDF3z', 'CJHshKVqXnUYRB51EeaXhGDPZ5dxtcDF3z']); }); }); diff --git a/packages/bitcore-wallet-service/test/blockchainexplorer.test.ts b/packages/bitcore-wallet-service/test/blockchainexplorer.test.ts index 6c92593a5d8..7763ee0d098 100644 --- a/packages/bitcore-wallet-service/test/blockchainexplorer.test.ts +++ b/packages/bitcore-wallet-service/test/blockchainexplorer.test.ts @@ -60,7 +60,7 @@ describe('BlockChain explorer', function() { network: 'livenet', }); should.exist(exp); - exp.register //...TODO + exp.register; // ...TODO }); }); }); diff --git a/packages/bitcore-wallet-service/test/chain/bch.test.ts b/packages/bitcore-wallet-service/test/chain/bch.test.ts index 910892cad2a..8505d2f6c98 100644 --- a/packages/bitcore-wallet-service/test/chain/bch.test.ts +++ b/packages/bitcore-wallet-service/test/chain/bch.test.ts @@ -21,7 +21,7 @@ describe('Chain BCH', function() { let toAddress; let privateKey; - before(function() { + before(function() { fromAddress = 'qzydnyc75u7kp6hhu4n3alq922u39ygl9gc3t4e2ma'; toAddress = 'qped668nq9ltx2x0y85ls7mkp6xkxmg89y85s8lyla'; changeAddress = 'qqjuuqsjgamj3lj2a6jaje6wckm8qdkwyvq3quku7x2'; @@ -45,7 +45,7 @@ describe('Chain BCH', function() { // Create a similar TX. let tx = new BitcoreLibCash.Transaction(); tx.from(simpleUtxoWith1BTC) - .to([{address: toAddress, satoshis: 1e8-7000}]) + .to([{ address: toAddress, satoshis: 1e8-7000 }]) .sign(privateKey); const actualLength = tx.serialize().length/2; diff --git a/packages/bitcore-wallet-service/test/chain/btc.test.ts b/packages/bitcore-wallet-service/test/chain/btc.test.ts index 85817108be7..784f35314fd 100644 --- a/packages/bitcore-wallet-service/test/chain/btc.test.ts +++ b/packages/bitcore-wallet-service/test/chain/btc.test.ts @@ -12,7 +12,7 @@ import helpers from '../integration/helpers'; const should = chai.should(); const { Constants } = Common; -const segWitToAddress = 'BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4'; //'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; +const segWitToAddress = 'BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4'; // 'bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq'; describe('Chain BTC', function() { describe('#getBitcoreTx', function() { @@ -49,7 +49,7 @@ describe('Chain BTC', function() { const t = ChainService.getBitcoreTx(txp, { signed: false }); should.exist(t); - (function () { return t.serialize() }).should.throw('not been fully signed'); + (function () { return t.serialize(); }).should.throw('not been fully signed'); t.uncheckedSerialize().should.equal('0100000001c05c50d820b4cbb4432af783a0a0b81f50cbf7c890939e713a9f03fb01eb7f4e0500000000ffffffff0282233101000000001976a9149edd2399faccf4e57df08bef78962fa0228741cf88ac00b4c404000000001976a91451224bca38efcaa31d5340917c3f3f713b8b20e488ac00000000'); t.isFullySigned().should.equal(false); }); @@ -66,7 +66,7 @@ describe('Chain BTC', function() { let toAddress; let privateKey; - before(function() { + before(function() { btc = ChainService.get('btc') as BtcChain; fromAddress = 'mszYqVnqKoQx4jcTdJXxwKAissE3Jbrrc1'; toAddress = 'mrU9pEmAx26HcbKVrABvgL7AwA5fjNFoDc'; @@ -100,7 +100,7 @@ describe('Chain BTC', function() { // Create a similar TX. const tx = new BitcoreLib.Transaction(); tx.from(simpleUtxoWith1BTC) - .to([{address: toAddress, satoshis: 1e8-7000}]) + .to([{ address: toAddress, satoshis: 1e8-7000 }]) .sign(privateKey); const actualLength = tx.serialize().length/2; @@ -117,7 +117,7 @@ describe('Chain BTC', function() { // Create a similar TX. const tx = new BitcoreLib.Transaction(); tx.from(simpleUtxoWith1BTC) - .to([{address: toAddress, satoshis: 1e7}, {address: toAddress, satoshis: 1e6}]) + .to([{ address: toAddress, satoshis: 1e7 }, { address: toAddress, satoshis: 1e6 }]) .change(changeAddress) .sign(privateKey); @@ -165,7 +165,7 @@ describe('Chain BTC', function() { // Create a similar TX. const tx = new BitcoreLib.Transaction(); tx.from(p2shUtxoWith1BTC, [p2shPublicKey1, p2shPublicKey2], 2) - .to([{address: toAddress, satoshis: 1e7}, {address: toAddress, satoshis: 1e6}]) + .to([{ address: toAddress, satoshis: 1e7 }, { address: toAddress, satoshis: 1e6 }]) .change(changeAddress) .sign(p2shPrivateKey1) .sign(p2shPrivateKey2); @@ -193,7 +193,7 @@ describe('Chain BTC', function() { ((Math.abs(actualLength-estimatedLength))/actualLength).should.be.below(0.05); }); - it('2 input multisig p2wsh, 1 native segwit output', function() { + it('2 input multisig p2wsh, 1 native segwit output', function() { const x = TxProposal.fromObj(aTXP()); x.addressType = Constants.SCRIPT_TYPES.P2WSH; x.outputs[0].toAddress = toAddress; @@ -328,4 +328,4 @@ const aTXP = function() { return txp; }; -const signedTxp = {'actions':[{'version':'1.0.0','createdOn':1588099987,'copayerId':'671fee02a6c1c4de2e2609f9f9a6180dc03acfff6b759fe0b13a616ed4880065','type':'accept','signatures':['3045022100ace0efb22eaf21b77d5e4a31a491ad06fbcfe700ace5abe8453ec0328c714cba02205090a44975d4b65b5e2f4473da038e83875826b369fc79558a741268ed574bb0'],'xpub':'xpub6DVmxcjRgZdHNSEcXSiFtweVwMSTc3TMwRJ45nJYvyqvLbK1poPerupqh87rSoz27wvckb1CKnGZoLmLXSZyNGZtVd7neqSvdwJL6fceQpe','comment':null}],'version':3,'createdOn':1588099987,'id':'7cea0d95-3308-48e7-a4be-3f16d66e1f5a','walletId':'7eaf4d32-c2fd-4262-864a-4c42fc9236f8','creatorId':'671fee02a6c1c4de2e2609f9f9a6180dc03acfff6b759fe0b13a616ed4880065','coin':'bch','network':'livenet','outputs':[{'amount':80000000,'toAddress':'CPrtPWbp8cCftTQu5fzuLG5zPJNDHMMf8X'}],'amount':80000000,'message':'some message','payProUrl':null,'changeAddress':{'version':'1.0.0','createdOn':1588099987,'address':'CWwtFMy3GMr5qMEtvEdUDjePfShzkJXCnh','walletId':'7eaf4d32-c2fd-4262-864a-4c42fc9236f8','isChange':true,'path':'m/1/0','publicKeys':['02129acdcc600694b3ce55a2d05244186e806174eb0bafde20e5a6395ded647857'],'coin':'bch','network':'livenet','type':'P2PKH','hasActivity':null,'beRegistered':null},'inputs':[{'txid':'4e7feb01fb039f3a719e9390c8f7cb501fb8a0a083f72a43b4cbb420d8505cc0','vout':5,'satoshis':100000000,'scriptPubKey':'76a914d391e62337ed194a1e428f32d14838e5d848180a88ac','address':'qrfere3rxlk3jjs7g28n952g8rjasjqcpgx3axq70t','confirmations':44,'publicKeys':['024d27ca79a3ed27a143cb9d1dff01e4e6445294679a700ca404ca449211d08aa7'],'wallet':'7eaf4d32-c2fd-4262-864a-4c42fc9236f8','path':'m/0/1'}],'walletM':1,'walletN':1,'requiredSignatures':1,'requiredRejections':1,'status':'accepted','txid':'8541ed35ac43e07e362a00ebab9448eefa63840c75ca38edff6785c223503a29','broadcastedOn':null,'inputPaths':['m/0/1'],'outputOrder':[1,0],'fee':2430,'feeLevel':null,'feePerKb':10000,'excludeUnconfirmedUtxos':false,'addressType':'P2PKH','customData':null,'proposalSignature':'3045022100e8a1ac6eef882fb3e7311c725093317df99e5ed46f52fdee9064560bb757d1c902200b09f806a17d4c7950097b8714293725ce741c6de25914f81a8ca0ca1107fc4c','signingMethod':'ecdsa','proposalSignaturePubKey':null,'proposalSignaturePubKeySig':null,'lockUntilBlockHeight':null,'gasPrice':null,'from':null,'nonce':null,'gasLimit':null,'data':null,'tokenAddress':null,'destinationTag':null,'invoiceID':null,'derivationStrategy':'BIP44','creatorName':'copayer 1','raw':'0100000001c05c50d820b4cbb4432af783a0a0b81f50cbf7c890939e713a9f03fb01eb7f4e050000006b483045022100ace0efb22eaf21b77d5e4a31a491ad06fbcfe700ace5abe8453ec0328c714cba02205090a44975d4b65b5e2f4473da038e83875826b369fc79558a741268ed574bb04121024d27ca79a3ed27a143cb9d1dff01e4e6445294679a700ca404ca449211d08aa7ffffffff0282233101000000001976a9149edd2399faccf4e57df08bef78962fa0228741cf88ac00b4c404000000001976a91451224bca38efcaa31d5340917c3f3f713b8b20e488ac00000000','isPending':true} ; +const signedTxp = { 'actions': [{ 'version': '1.0.0', 'createdOn': 1588099987, 'copayerId': '671fee02a6c1c4de2e2609f9f9a6180dc03acfff6b759fe0b13a616ed4880065', 'type': 'accept', 'signatures': ['3045022100ace0efb22eaf21b77d5e4a31a491ad06fbcfe700ace5abe8453ec0328c714cba02205090a44975d4b65b5e2f4473da038e83875826b369fc79558a741268ed574bb0'], 'xpub': 'xpub6DVmxcjRgZdHNSEcXSiFtweVwMSTc3TMwRJ45nJYvyqvLbK1poPerupqh87rSoz27wvckb1CKnGZoLmLXSZyNGZtVd7neqSvdwJL6fceQpe', 'comment': null }], 'version': 3, 'createdOn': 1588099987, 'id': '7cea0d95-3308-48e7-a4be-3f16d66e1f5a', 'walletId': '7eaf4d32-c2fd-4262-864a-4c42fc9236f8', 'creatorId': '671fee02a6c1c4de2e2609f9f9a6180dc03acfff6b759fe0b13a616ed4880065', 'coin': 'bch', 'network': 'livenet', 'outputs': [{ 'amount': 80000000, 'toAddress': 'CPrtPWbp8cCftTQu5fzuLG5zPJNDHMMf8X' }], 'amount': 80000000, 'message': 'some message', 'payProUrl': null, 'changeAddress': { 'version': '1.0.0', 'createdOn': 1588099987, 'address': 'CWwtFMy3GMr5qMEtvEdUDjePfShzkJXCnh', 'walletId': '7eaf4d32-c2fd-4262-864a-4c42fc9236f8', 'isChange': true, 'path': 'm/1/0', 'publicKeys': ['02129acdcc600694b3ce55a2d05244186e806174eb0bafde20e5a6395ded647857'], 'coin': 'bch', 'network': 'livenet', 'type': 'P2PKH', 'hasActivity': null, 'beRegistered': null }, 'inputs': [{ 'txid': '4e7feb01fb039f3a719e9390c8f7cb501fb8a0a083f72a43b4cbb420d8505cc0', 'vout': 5, 'satoshis': 100000000, 'scriptPubKey': '76a914d391e62337ed194a1e428f32d14838e5d848180a88ac', 'address': 'qrfere3rxlk3jjs7g28n952g8rjasjqcpgx3axq70t', 'confirmations': 44, 'publicKeys': ['024d27ca79a3ed27a143cb9d1dff01e4e6445294679a700ca404ca449211d08aa7'], 'wallet': '7eaf4d32-c2fd-4262-864a-4c42fc9236f8', 'path': 'm/0/1' }], 'walletM': 1, 'walletN': 1, 'requiredSignatures': 1, 'requiredRejections': 1, 'status': 'accepted', 'txid': '8541ed35ac43e07e362a00ebab9448eefa63840c75ca38edff6785c223503a29', 'broadcastedOn': null, 'inputPaths': ['m/0/1'], 'outputOrder': [1, 0], 'fee': 2430, 'feeLevel': null, 'feePerKb': 10000, 'excludeUnconfirmedUtxos': false, 'addressType': 'P2PKH', 'customData': null, 'proposalSignature': '3045022100e8a1ac6eef882fb3e7311c725093317df99e5ed46f52fdee9064560bb757d1c902200b09f806a17d4c7950097b8714293725ce741c6de25914f81a8ca0ca1107fc4c', 'signingMethod': 'ecdsa', 'proposalSignaturePubKey': null, 'proposalSignaturePubKeySig': null, 'lockUntilBlockHeight': null, 'gasPrice': null, 'from': null, 'nonce': null, 'gasLimit': null, 'data': null, 'tokenAddress': null, 'destinationTag': null, 'invoiceID': null, 'derivationStrategy': 'BIP44', 'creatorName': 'copayer 1', 'raw': '0100000001c05c50d820b4cbb4432af783a0a0b81f50cbf7c890939e713a9f03fb01eb7f4e050000006b483045022100ace0efb22eaf21b77d5e4a31a491ad06fbcfe700ace5abe8453ec0328c714cba02205090a44975d4b65b5e2f4473da038e83875826b369fc79558a741268ed574bb04121024d27ca79a3ed27a143cb9d1dff01e4e6445294679a700ca404ca449211d08aa7ffffffff0282233101000000001976a9149edd2399faccf4e57df08bef78962fa0228741cf88ac00b4c404000000001976a91451224bca38efcaa31d5340917c3f3f713b8b20e488ac00000000', 'isPending': true } ; diff --git a/packages/bitcore-wallet-service/test/chain/ltc.test.ts b/packages/bitcore-wallet-service/test/chain/ltc.test.ts index 139f72fa3f5..80870f4200a 100644 --- a/packages/bitcore-wallet-service/test/chain/ltc.test.ts +++ b/packages/bitcore-wallet-service/test/chain/ltc.test.ts @@ -60,7 +60,7 @@ describe('Chain LTC', () => { let toAddress; let privateKey; - before(() => { + before(() => { ltc = ChainService.get('ltc') as LtcChain; fromAddress = 'LcA1gPGGxYEGL2FS1eErMnWKSCkPUJonxH'; toAddress = 'LYNk38CXCPavnf3wmhkymkC9HVrXj6zMQn'; diff --git a/packages/bitcore-wallet-service/test/expressapp.test.ts b/packages/bitcore-wallet-service/test/expressapp.test.ts index aa9d5031607..76d080b1e0b 100644 --- a/packages/bitcore-wallet-service/test/expressapp.test.ts +++ b/packages/bitcore-wallet-service/test/expressapp.test.ts @@ -9,7 +9,7 @@ import log from 'npmlog'; import config from '../src/config'; import { Common } from '../src/lib/common'; import { WalletService } from '../src/lib/server'; -import { ExpressApp } from '../src/lib/expressapp'; +import { ExpressApp } from '../src/lib/expressapp'; const Defaults = Common.Defaults; const should = chai.should(); @@ -141,45 +141,45 @@ describe('ExpressApp', function() { it('/latest-version', function(done) { const htmlString = { - "url": "https://api.github.com/repos/bitpay/wallet/releases/21158137", - "assets_url": "https://api.github.com/repos/bitpay/wallet/releases/21158137/assets", - "upload_url": "https://uploads.github.com/repos/bitpay/wallet/releases/21158137/assets{?name,label}", - "html_url": "https://github.com/bitpay/wallet/releases/tag/v8.2.2", - "id": 21158137, - "node_id": "MDc6UmVsZWFzZTIxMTU4MTM3", - "tag_name": "v8.2.2", - "target_commitish": "master", - "name": "v8.2.2", - "draft": false, - "author": { - "login": "cmgustavo", - "id": 237435, - "node_id": "MDQ6VXNlcjIzNzQzNQ==", - "avatar_url": "https://avatars3.githubusercontent.com/u/237435?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/cmgustavo", - "html_url": "https://github.com/cmgustavo", - "followers_url": "https://api.github.com/users/cmgustavo/followers", - "following_url": "https://api.github.com/users/cmgustavo/following{/other_user}", - "gists_url": "https://api.github.com/users/cmgustavo/gists{/gist_id}", - "starred_url": "https://api.github.com/users/cmgustavo/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/cmgustavo/subscriptions", - "organizations_url": "https://api.github.com/users/cmgustavo/orgs", - "repos_url": "https://api.github.com/users/cmgustavo/repos", - "events_url": "https://api.github.com/users/cmgustavo/events{/privacy}", - "received_events_url": "https://api.github.com/users/cmgustavo/received_events", - "type": "User", - "site_admin": false + 'url': 'https://api.github.com/repos/bitpay/wallet/releases/21158137', + 'assets_url': 'https://api.github.com/repos/bitpay/wallet/releases/21158137/assets', + 'upload_url': 'https://uploads.github.com/repos/bitpay/wallet/releases/21158137/assets{?name,label}', + 'html_url': 'https://github.com/bitpay/wallet/releases/tag/v8.2.2', + 'id': 21158137, + 'node_id': 'MDc6UmVsZWFzZTIxMTU4MTM3', + 'tag_name': 'v8.2.2', + 'target_commitish': 'master', + 'name': 'v8.2.2', + 'draft': false, + 'author': { + 'login': 'cmgustavo', + 'id': 237435, + 'node_id': 'MDQ6VXNlcjIzNzQzNQ==', + 'avatar_url': 'https://avatars3.githubusercontent.com/u/237435?v=4', + 'gravatar_id': '', + 'url': 'https://api.github.com/users/cmgustavo', + 'html_url': 'https://github.com/cmgustavo', + 'followers_url': 'https://api.github.com/users/cmgustavo/followers', + 'following_url': 'https://api.github.com/users/cmgustavo/following{/other_user}', + 'gists_url': 'https://api.github.com/users/cmgustavo/gists{/gist_id}', + 'starred_url': 'https://api.github.com/users/cmgustavo/starred{/owner}{/repo}', + 'subscriptions_url': 'https://api.github.com/users/cmgustavo/subscriptions', + 'organizations_url': 'https://api.github.com/users/cmgustavo/orgs', + 'repos_url': 'https://api.github.com/users/cmgustavo/repos', + 'events_url': 'https://api.github.com/users/cmgustavo/events{/privacy}', + 'received_events_url': 'https://api.github.com/users/cmgustavo/received_events', + 'type': 'User', + 'site_admin': false }, - "prerelease": false, - "created_at": "2019-10-29T14:09:01Z", - "published_at": "2019-11-01T19:50:37Z", - "assets": [ + 'prerelease': false, + 'created_at': '2019-10-29T14:09:01Z', + 'published_at': '2019-11-01T19:50:37Z', + 'assets': [ ], - "tarball_url": "https://api.github.com/repos/bitpay/wallet/tarball/v7.1.1", - "zipball_url": "https://api.github.com/repos/bitpay/wallet/zipball/v7.1.1", - "body": "### Changelog\r\n\r\nNEW\r\n\r\n* ETH Testnet support\r\n* EUR Gift Cards\r\n* Export Key to another wallet as QR code\r\n\r\nBUG FIXES\r\n\r\n* Open app from ETH link (only Desktop)\r\n* Clear badge of pending notification (iOS)\r\n* UI issues on Settings Page\r\n* Send-max for top up cards\r\n\r\n### Download\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
Appfor Mac OSfor Windowsfor Linux
\r\n\"BitPay\"\r\n\r\n\"mac\"\r\n\r\n\"windows\"\r\n\r\n\"linux\"\r\n
\r\n\"Copay\"\r\n\r\n\"mac\"\r\n\r\n\"windows\"\r\n\r\n\"linux\"\r\n
" + 'tarball_url': 'https://api.github.com/repos/bitpay/wallet/tarball/v7.1.1', + 'zipball_url': 'https://api.github.com/repos/bitpay/wallet/zipball/v7.1.1', + 'body': '### Changelog\r\n\r\nNEW\r\n\r\n* ETH Testnet support\r\n* EUR Gift Cards\r\n* Export Key to another wallet as QR code\r\n\r\nBUG FIXES\r\n\r\n* Open app from ETH link (only Desktop)\r\n* Clear badge of pending notification (iOS)\r\n* UI issues on Settings Page\r\n* Send-max for top up cards\r\n\r\n### Download\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
Appfor Mac OSfor Windowsfor Linux
\r\nBitPay\r\n\r\nmac\r\n\r\nwindows\r\n\r\nlinux\r\n
\r\nCopay\r\n\r\nmac\r\n\r\nwindows\r\n\r\nlinux\r\n
' }; const server = { @@ -205,7 +205,7 @@ describe('ExpressApp', function() { server.storage.checkAndUseGlobalCache.getCalls()[0].args[0].should.equal('latest-copay-version'); server.storage.checkAndUseGlobalCache.getCalls()[0].args[1].should.equal(360000); server.storage.checkAndUseGlobalCache.getCalls()[0].args[2].should.exist; - body.should.equal(JSON.stringify({"version":htmlString['tag_name']})); + body.should.equal(JSON.stringify({ 'version': htmlString['tag_name'] })); done(); }); }); @@ -420,9 +420,9 @@ describe('ExpressApp', function() { }); it('should limit minTs to Defaults.MAX_NOTIFICATIONS_TIMESPAN', function(done) { start(ExpressApp, function() { - const overLimit = Defaults.MAX_NOTIFICATIONS_TIMESPAN * 2; + const overLimit = Defaults.MAX_NOTIFICATIONS_TIMESPAN * 2; const requestOptions = { - url: testHost + ':' + testPort + config.basePath + '/v1/notifications' + '?timeSpan=' + overLimit , + url: testHost + ':' + testPort + config.basePath + '/v1/notifications' + '?timeSpan=' + overLimit, headers: { 'x-identity': 'identity', 'x-signature': 'signature' @@ -460,18 +460,18 @@ describe('ExpressApp', function() { sandbox.stub(WalletService, 'getInstanceWithAuth').callsArgWith(1, null, server); start(ExpressApp, function(err, data) { const requestOptions = { - //test link, for either a 503 or 200 code response - url: testHost + ':' + testPort + config.basePath + "/v2/wallets", + // test link, for either a 503 or 200 code response + url: testHost + ':' + testPort + config.basePath + '/v2/wallets', headers: { 'x-identity': 'identity', 'x-signature': 'signature' } }; - request(requestOptions, function(err,res,body){ - if(config.maintenanceOpts.maintenanceMode === true) { + request(requestOptions, function(err, res, body) { + if (config.maintenanceOpts.maintenanceMode === true) { should.not.exist(err); res.statusCode.should.equal(503); - body.should.equal(`{"code":503,"message":"Bitcore Wallet Service is currently under maintenance. Please periodically check https://status.bitpay.com/ to stay up to date with our current status."}`); + body.should.equal('{"code":503,"message":"Bitcore Wallet Service is currently under maintenance. Please periodically check https://status.bitpay.com/ to stay up to date with our current status."}'); } else { should.not.exist(err); res.statusCode.should.equal(200); @@ -484,7 +484,7 @@ describe('ExpressApp', function() { }); describe('Clear cache', function() { it('/v1/clearcache/', function(done) { - const resolveStub = sinon.stub().callsFake( () => { return Promise.resolve(true)}); + const resolveStub = sinon.stub().callsFake( () => { return Promise.resolve(true);}); const server = { clearWalletCache: resolveStub }; @@ -506,7 +506,7 @@ describe('ExpressApp', function() { }); }); }); - }) + }); }); }); }); diff --git a/packages/bitcore-wallet-service/test/integration/bcmonitor.test.ts b/packages/bitcore-wallet-service/test/integration/bcmonitor.test.ts index 8575a1354ee..8e9bcc1bd7f 100644 --- a/packages/bitcore-wallet-service/test/integration/bcmonitor.test.ts +++ b/packages/bitcore-wallet-service/test/integration/bcmonitor.test.ts @@ -62,7 +62,7 @@ describe('Blockchain monitor', function() { return callbacks.onIncomingPayments({ out, txid: tx.txid }); }; // no uses in eth, interferes with btc - //socket.handlers['block'] = callbacks.onBlock; + // socket.handlers['block'] = callbacks.onBlock; }; }); after(async function() { diff --git a/packages/bitcore-wallet-service/test/integration/cashAddrMigration.test.ts b/packages/bitcore-wallet-service/test/integration/cashAddrMigration.test.ts index 6973723a395..2dd8a9bea06 100644 --- a/packages/bitcore-wallet-service/test/integration/cashAddrMigration.test.ts +++ b/packages/bitcore-wallet-service/test/integration/cashAddrMigration.test.ts @@ -36,7 +36,7 @@ describe('Cash address migration', function() { describe('Migrate wallets', function() { it('new BCH wallets should be native cashAddr', function(done) { - helpers.createAndJoinWallet(1, 1, { coin:'bch', earlyRet: true }).then(({ server: s }) => { + helpers.createAndJoinWallet(1, 1, { coin: 'bch', earlyRet: true }).then(({ server: s }) => { const spy = sinon.spy(s.storage, 'migrateToCashAddr'); s.getWallet({}, function(err, w) { should.not.exist(err); @@ -55,7 +55,7 @@ describe('Cash address migration', function() { it('should create cashAddr addresses for new wallets', function(done) { - helpers.createAndJoinWallet(1, 1, { coin:'bch' }).then(({ server: s, wallet: w }) => { + helpers.createAndJoinWallet(1, 1, { coin: 'bch' }).then(({ server: s, wallet: w }) => { helpers.createAddresses(s, w, 1, 1).then(({ main, change }) => { helpers.stubUtxos(s, w, 1).then(() => { s.getAddresses({ noChange: true }, function(err, a) { @@ -70,7 +70,7 @@ describe('Cash address migration', function() { it('should migrate old wallets', function(done) { - helpers.createAndJoinWallet(1, 1, { coin:'bch', earlyRet: true, nativeCashAddr: false }).then(({ server: s }) => { + helpers.createAndJoinWallet(1, 1, { coin: 'bch', earlyRet: true, nativeCashAddr: false }).then(({ server: s }) => { const spy = sinon.spy(s.storage, 'migrateToCashAddr'); s.getWallet({}, function(err, w) { should.not.exist(err); @@ -84,7 +84,7 @@ describe('Cash address migration', function() { it('should create cashAddr in migrated wallets', function(done) { - helpers.createAndJoinWallet(1, 1, { coin:'bch', nativeCashAddr: false }).then(({ server: s, wallet: w }) => { + helpers.createAndJoinWallet(1, 1, { coin: 'bch', nativeCashAddr: false }).then(({ server: s, wallet: w }) => { helpers.createAddresses(s, w, 2, 2).then(({ main, change }) => { s.getAddresses({ noChange: true }, function(err, a) { should.not.exist(err); @@ -97,7 +97,7 @@ describe('Cash address migration', function() { it('should migrate old addresses', function(done) { - helpers.createAndJoinWallet(1, 1, { coin:'bch', earlyRet: true, nativeCashAddr: false }).then(({ server: s }) => { + helpers.createAndJoinWallet(1, 1, { coin: 'bch', earlyRet: true, nativeCashAddr: false }).then(({ server: s }) => { s.createAddress({ doNotMigrate: true }, function(err, address) { should.not.exist(err); address.address.should.equal('CbWsiNjh18ynQYc5jfYhhespEGrAaW8YUq'); diff --git a/packages/bitcore-wallet-service/test/integration/emailnotifications.test.ts b/packages/bitcore-wallet-service/test/integration/emailnotifications.test.ts index 91a676c5b23..0d168cf6a5c 100644 --- a/packages/bitcore-wallet-service/test/integration/emailnotifications.test.ts +++ b/packages/bitcore-wallet-service/test/integration/emailnotifications.test.ts @@ -78,7 +78,7 @@ describe('Email notifications', function() { mailerStub = sinon.stub(); mailerStub.send = sinon.stub(); mailerStub.send.returns(Promise.resolve('ok')); - //mailerStub.returns(Promise.reject('err')); + // mailerStub.returns(Promise.reject('err')); emailService = new EmailService(); await util.promisify(emailService.start).call(emailService, { @@ -550,7 +550,7 @@ describe('Email notifications', function() { describe('1-1 wallet', function() { beforeEach(async function() { - ({ server, wallet } = await helpers.createAndJoinWallet(1, 1, { coin:'bch' })); + ({ server, wallet } = await helpers.createAndJoinWallet(1, 1, { coin: 'bch' })); for (let i = 0; i < wallet.copayers.length; i++) { const copayer = wallet.copayers[i]; const s = await helpers.getAuthServer(copayer.id); @@ -563,7 +563,7 @@ describe('Email notifications', function() { mailerStub = sinon.stub(); mailerStub.send = sinon.stub(); mailerStub.send.returns(Promise.resolve('ok')); - //mailerStub.returns(Promise.reject('err')); + // mailerStub.returns(Promise.reject('err')); emailService = new EmailService(); await util.promisify(emailService.start).call(emailService, { @@ -627,7 +627,7 @@ describe('Email notifications', function() { describe('custom ERC20 wallet', () => { beforeEach(async () => { - ({ server, wallet } = await helpers.createAndJoinWallet(1, 1, {coin:'eth'})); + ({ server, wallet } = await helpers.createAndJoinWallet(1, 1, { coin: 'eth' })); for (let i = 0; i < wallet.copayers.length; i++) { const copayer = wallet.copayers[i]; const s = await helpers.getAuthServer(copayer.id); @@ -640,7 +640,7 @@ describe('Email notifications', function() { mailerStub = sinon.stub(); mailerStub.send = sinon.stub(); mailerStub.send.returns(Promise.resolve('ok')); - //mailerStub.returns(Promise.reject('err')); + // mailerStub.returns(Promise.reject('err')); emailService = new EmailService(); getTokenDataStub = sinon.stub(emailService, 'getTokenData').callsFake(() => TestData.CoinGecko_ETH_Tokens.tokens); @@ -675,44 +675,44 @@ describe('Email notifications', function() { }); it('should send notification if the tx is custom token', (done) => { - server.createAddress({}, (err, address) => { - should.not.exist(err); - - // Intercept the msg handler so we can run test assersions on callback - sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); - calls.length.should.equal(1); - var emails = calls.map(c => c.args[0]); - Utils.difference(['copayer1@domain.com'], emails.map(e => e.to)).should.be.empty; - var one = emails[0]; - one.from.should.equal('bws@dummy.net'); - one.subject.should.contain('New payment received'); - one.text.should.contain('4.00 BAT'); - server.storage.fetchUnsentEmails(function(err, unsent) { - should.not.exist(err); - unsent.should.be.empty; - done(); - }); - }); + server.createAddress({}, (err, address) => { + should.not.exist(err); - // Simulate incoming tx notification - server._notify('NewIncomingTx', { - txid: '999', - address: address, - amount: 4e18, - tokenAddress: CUSTOM_TOKENS[0] - }, { - isGlobal: true - }, (err) => { + // Intercept the msg handler so we can run test assersions on callback + sendEmailInterceptor(function() { + var calls = mailerStub.send.getCalls(); + calls.length.should.equal(1); + var emails = calls.map(c => c.args[0]); + Utils.difference(['copayer1@domain.com'], emails.map(e => e.to)).should.be.empty; + var one = emails[0]; + one.from.should.equal('bws@dummy.net'); + one.subject.should.contain('New payment received'); + one.text.should.contain('4.00 BAT'); + server.storage.fetchUnsentEmails(function(err, unsent) { should.not.exist(err); + unsent.should.be.empty; + done(); }); }); + + // Simulate incoming tx notification + server._notify('NewIncomingTx', { + txid: '999', + address: address, + amount: 4e18, + tokenAddress: CUSTOM_TOKENS[0] + }, { + isGlobal: true + }, (err) => { + should.not.exist(err); + }); + }); }); }); describe('ERC20 wallet', () => { beforeEach(async () => { - ({ server, wallet } = await helpers.createAndJoinWallet(1, 1, {coin:'eth'})); + ({ server, wallet } = await helpers.createAndJoinWallet(1, 1, { coin: 'eth' })); for (let i = 0; i < wallet.copayers.length; i++) { const copayer = wallet.copayers[i]; const s = await helpers.getAuthServer(copayer.id); @@ -725,7 +725,7 @@ describe('Email notifications', function() { mailerStub = sinon.stub(); mailerStub.send = sinon.stub(); mailerStub.send.returns(Promise.resolve('ok')); - //mailerStub.returns(Promise.reject('err')); + // mailerStub.returns(Promise.reject('err')); emailService = new EmailService(); await util.promisify(emailService.start).call(emailService, { diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/banxa.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/banxa.test.ts index 38ec5828c02..de9162217e4 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/banxa.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/banxa.test.ts @@ -42,11 +42,11 @@ describe('Banxa integration', () => { apiKey: 'apiKey4', secretKey: 'secretKey4', } - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -76,7 +76,7 @@ describe('Banxa integration', () => { body: { env: 'sandbox', } - } + }; server.externalServices.banxa.request = fakeRequest; }); @@ -93,7 +93,7 @@ describe('Banxa integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.banxa.request = fakeRequest2; @@ -124,7 +124,7 @@ describe('Banxa integration', () => { env: 'sandbox', orderType: 'buy' } - } + }; server.externalServices.banxa.request = fakeRequest; }); @@ -134,7 +134,7 @@ describe('Banxa integration', () => { }); it('should work properly if req is OK for sell', async () => { - req.body.orderType = 'sell' + req.body.orderType = 'sell'; const data = await server.externalServices.banxa.banxaGetCoins(req); should.exist(data); }); @@ -147,7 +147,7 @@ describe('Banxa integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.banxa.request = fakeRequest2; @@ -165,7 +165,7 @@ describe('Banxa integration', () => { await server.externalServices.banxa.banxaGetCoins(req); should.fail('should have thrown'); } catch (err) { - err.message.should.equal(`Banxa's 'orderType' property must be 'sell' or 'buy'`); + err.message.should.equal('Banxa\'s \'orderType\' property must be \'sell\' or \'buy\''); } }); @@ -175,7 +175,7 @@ describe('Banxa integration', () => { await server.externalServices.banxa.banxaGetCoins(req); should.fail('should have thrown'); } catch (err) { - err.message.should.equal(`Banxa's request missing arguments`); + err.message.should.equal('Banxa\'s request missing arguments'); } }); @@ -199,7 +199,7 @@ describe('Banxa integration', () => { source: 'USD', target: 'BTC' } - } + }; server.externalServices.banxa.request = fakeRequest; }); @@ -216,7 +216,7 @@ describe('Banxa integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.banxa.request = fakeRequest2; @@ -262,7 +262,7 @@ describe('Banxa integration', () => { wallet_address: 'wallet_address1', return_url_on_success: 'return_url_on_success1' } - } + }; server.externalServices.banxa.request = fakeRequest; }); @@ -279,7 +279,7 @@ describe('Banxa integration', () => { it('should return error if post returns error', async () => { const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.banxa.request = fakeRequest2; @@ -320,7 +320,7 @@ describe('Banxa integration', () => { env: 'sandbox', order_id: 'order_id1', } - } + }; server.externalServices.banxa.request = fakeRequest; }); @@ -337,7 +337,7 @@ describe('Banxa integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.banxa.request = fakeRequest2; diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/changelly.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/changelly.test.ts index d65eb1bd6b5..59243b16884 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/changelly.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/changelly.test.ts @@ -45,10 +45,10 @@ describe('Changelly integration', () => { secret: privateKey.toString('hex'), api: 'apiV2' } - } + }; fakeRequest = { - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data'}) }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -75,10 +75,10 @@ describe('Changelly integration', () => { req = { headers: {}, body: { - id: "test", + id: 'test', useV2: true } - } + }; server.externalServices.changelly.request = fakeRequest; }); @@ -100,7 +100,7 @@ describe('Changelly integration', () => { it('should return error if post returns error', async () => { req.body.id = 'test'; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.changelly.request = fakeRequest2; @@ -140,12 +140,12 @@ describe('Changelly integration', () => { req = { headers: {}, body: { - id: "test", + id: 'test', coinFrom: 'btc', coinTo: 'eth', useV2: true } - } + }; server.externalServices.changelly.request = fakeRequest; }); @@ -172,7 +172,7 @@ describe('Changelly integration', () => { it('should return error if post returns error', async () => { req.body.coinFrom = 'btc'; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.changelly.request = fakeRequest2; @@ -211,13 +211,13 @@ describe('Changelly integration', () => { req = { headers: {}, body: { - id: "test", + id: 'test', coinFrom: 'btc', coinTo: 'eth', amountFrom: '1.123', useV2: true } - } + }; server.externalServices.changelly.request = fakeRequest; }); @@ -244,7 +244,7 @@ describe('Changelly integration', () => { it('should return error if post returns error', async () => { req.body.coinFrom = 'btc'; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.changelly.request = fakeRequest2; @@ -283,7 +283,7 @@ describe('Changelly integration', () => { req = { headers: {}, body: { - id: "test", + id: 'test', coinFrom: 'btc', coinTo: 'eth', amountFrom: '1.123', @@ -292,7 +292,7 @@ describe('Changelly integration', () => { refundAddress: 'refundAddress', useV2: true } - } + }; server.externalServices.changelly.request = fakeRequest; }); @@ -315,7 +315,7 @@ describe('Changelly integration', () => { it('should return error if post returns error', async () => { req.body.coinFrom = 'btc'; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.changelly.request = fakeRequest2; @@ -354,11 +354,11 @@ describe('Changelly integration', () => { req = { headers: {}, body: { - id: "test", + id: 'test', exchangeTxId: 'exchangeTxId', useV2: true } - } + }; server.externalServices.changelly.request = fakeRequest; }); @@ -381,7 +381,7 @@ describe('Changelly integration', () => { it('should return error if post returns error', async() => { req.body.exchangeTxId = 'exchangeTxId'; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.changelly.request = fakeRequest2; @@ -420,11 +420,11 @@ describe('Changelly integration', () => { req = { headers: {}, body: { - id: "test", + id: 'test', exchangeTxId: 'exchangeTxId', useV2: true } - } + }; server.externalServices.changelly.request = fakeRequest; }); @@ -447,7 +447,7 @@ describe('Changelly integration', () => { it('should return error if post returns error', async () => { req.body.exchangeTxId = 'exchangeTxId'; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.changelly.request = fakeRequest2; diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/coinGecko.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/coinGecko.test.ts index 77726ed124b..a76c057a001 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/coinGecko.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/coinGecko.test.ts @@ -24,21 +24,21 @@ describe('CoinGecko integration', function() { beforeEach(async () => { config.coinGecko = { api: 'xxxx', - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: {tokens: [{ + get: (_url, _opts, _cb) => { return _cb(null, { body: { tokens: [{ chainId: 1, - address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - symbol: "USDC", - name: "USD Coin", + address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + symbol: 'USDC', + name: 'USD Coin', decimals: 6, - logoURI: "xxxxxx" - }]}}) }, + logoURI: 'xxxxxx' + }] } }); }, }; await helpers.beforeEach(); - ({ wallet} = await helpers.createAndJoinWallet(1, 1)); + ({ wallet } = await helpers.createAndJoinWallet(1, 1)); const priv = TestData.copayers[0].privKey_1H_0; const sig = helpers.signMessage('hello world', priv); diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/moonpay.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/moonpay.test.ts index 9cbeb1c2191..19ec2d3d6f0 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/moonpay.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/moonpay.test.ts @@ -50,12 +50,12 @@ describe('Moonpay integration', () => { sellWidgetApi: 'sellWidgetApi4', secretKey: 'secretKey4' } - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, - delete: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, + delete: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -88,7 +88,7 @@ describe('Moonpay integration', () => { extraFeePercentage: 5, baseCurrencyCode: 'usd' } - } + }; server.externalServices.moonpay.request = fakeRequest; }); @@ -105,7 +105,7 @@ describe('Moonpay integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.moonpay.request = fakeRequest2; @@ -148,7 +148,7 @@ describe('Moonpay integration', () => { quoteCurrencyCode: 'usd', baseCurrencyAmount: 1 } - } + }; server.externalServices.moonpay.request = fakeRequest; }); @@ -165,7 +165,7 @@ describe('Moonpay integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.moonpay.request = fakeRequest2; @@ -207,7 +207,7 @@ describe('Moonpay integration', () => { currencyAbbreviation: 'btc', baseCurrencyCode: 'usd' } - } + }; server.externalServices.moonpay.request = fakeRequest; }); @@ -224,7 +224,7 @@ describe('Moonpay integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.moonpay.request = fakeRequest2; @@ -270,7 +270,7 @@ describe('Moonpay integration', () => { externalTransactionId: '123123', redirectURL: 'bitpay://moonpay' } - } + }; server.externalServices.moonpay.request = fakeRequest; }); @@ -314,7 +314,7 @@ describe('Moonpay integration', () => { quoteCurrencyCode: 'usd', refundWalletAddress: 'bitcoin:123123', } - } + }; server.externalServices.moonpay.request = fakeRequest; }); @@ -354,7 +354,7 @@ describe('Moonpay integration', () => { env: 'sandbox', transactionId: 'transactionId1', } - } + }; server.externalServices.moonpay.request = fakeRequest; }); @@ -372,7 +372,7 @@ describe('Moonpay integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.moonpay.request = fakeRequest2; @@ -414,7 +414,7 @@ describe('Moonpay integration', () => { env: 'sandbox', transactionId: 'transactionId1', } - } + }; server.externalServices.moonpay.request = fakeRequest; }); @@ -432,7 +432,7 @@ describe('Moonpay integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.moonpay.request = fakeRequest2; @@ -473,7 +473,7 @@ describe('Moonpay integration', () => { body: { env: 'sandbox', } - } + }; server.externalServices.moonpay.request = fakeRequest; }); @@ -484,7 +484,7 @@ describe('Moonpay integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.moonpay.request = fakeRequest2; @@ -515,7 +515,7 @@ describe('Moonpay integration', () => { env: 'sandbox', transactionId: 'transactionId1', } - } + }; server.externalServices.moonpay.request = fakeRequest; }); @@ -533,7 +533,7 @@ describe('Moonpay integration', () => { it('should return error if delete returns error', async () => { const fakeRequest2 = { - delete: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + delete: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.moonpay.request = fakeRequest2; diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/oneInch.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/oneInch.test.ts index ee0b0b281b4..27cfb31bc7f 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/oneInch.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/oneInch.test.ts @@ -27,11 +27,11 @@ describe('OneInch integration', function() { api: 'xxxx', referrerAddress: 'referrerAddress', referrerFee: 'referrerFee1' - } + }; fakeRequest = { - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data'}) }, - get: (_url, _opts, _cb) => { return _cb(null, { body: 'data'}) }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, + get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -55,7 +55,7 @@ describe('OneInch integration', function() { describe('#oneInchGetReferrerFee', () => { beforeEach(() => { - req = {} + req = {}; server.externalServices.oneInch.request = fakeRequest; }); @@ -88,7 +88,7 @@ describe('OneInch integration', function() { slippage: 0.5, destReceiver: 'destReceiver1' } - } + }; server.externalServices.oneInch.request = fakeRequest; }); @@ -110,8 +110,8 @@ describe('OneInch integration', function() { it('should return error if request returns error', async () => { req.body.fromTokenAddress = 'fromTokenAddress1'; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, - get: (_url, _opts, _cb) => { return _cb(new Error('Error')) } + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error')); } }; server.externalServices.oneInch.request = fakeRequest2; @@ -139,7 +139,7 @@ describe('OneInch integration', function() { beforeEach(() => { req = {}; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: { tokens: 'data'}}) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: { tokens: 'data' } }); }, }; server.externalServices.oneInch.request = fakeRequest; }); diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/ramp.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/ramp.test.ts index 67454840467..5ddcaf0471b 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/ramp.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/ramp.test.ts @@ -42,11 +42,11 @@ describe('Ramp integration', () => { api: 'api4', widgetApi: 'widgetApi4', } - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -78,7 +78,7 @@ describe('Ramp integration', () => { fiatValue: 50, fiatCurrency: 'USD', } - } + }; server.externalServices.ramp.request = fakeRequest; }); @@ -95,7 +95,7 @@ describe('Ramp integration', () => { it('should return error if post returns error', async () => { const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.ramp.request = fakeRequest2; @@ -138,7 +138,7 @@ describe('Ramp integration', () => { cryptoAmount: '10000000', fiatCurrency: 'USD', } - } + }; server.externalServices.ramp.request = fakeRequest; }); @@ -155,7 +155,7 @@ describe('Ramp integration', () => { it('should return error if post returns error', async () => { const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.ramp.request = fakeRequest2; @@ -204,7 +204,7 @@ describe('Ramp integration', () => { defaultAsset: 'BTC_BTC', finalUrl: 'bitpay://ramp', } - } + }; server.externalServices.ramp.request = fakeRequest; }); @@ -223,7 +223,7 @@ describe('Ramp integration', () => { selectedCountryCode: 'US', defaultAsset: 'BTC_BTC', finalUrl: 'bitpay://ramp', - } + }; const data = server.externalServices.ramp.rampGetSignedPaymentUrl(req); should.exist(data.urlWithSignature); data.urlWithSignature.should.equal('widgetApi4?hostApiKey=apiKey4&selectedCountryCode=US&finalUrl=bitpay%3A%2F%2Framp&userAddress=bitcoin%3A123123&swapAsset=BTC_BTC&defaultAsset=BTC_BTC'); @@ -264,7 +264,7 @@ describe('Ramp integration', () => { useSendCryptoCallback: true, useSendCryptoCallbackVersion: 1, hideExitButton: false, - } + }; const data = server.externalServices.ramp.rampGetSignedPaymentUrl(req); should.exist(data.urlWithSignature); data.urlWithSignature.should.equal('widgetApi2?hostApiKey=apiKey2&selectedCountryCode=US&offrampAsset=BTC_BTC&enabledFlows=OFFRAMP&defaultFlow=OFFRAMP&swapAmount=1000000&defaultAsset=BTC_BTC&useSendCryptoCallback=true&variant=webview-mobile&useSendCryptoCallbackVersion=1'); @@ -285,7 +285,7 @@ describe('Ramp integration', () => { useSendCryptoCallback: true, useSendCryptoCallbackVersion: 1, hideExitButton: false, - } + }; const data = server.externalServices.ramp.rampGetSignedPaymentUrl(req); should.exist(data.urlWithSignature); data.urlWithSignature.should.equal('widgetApi4?hostApiKey=apiKey4&selectedCountryCode=US&offrampAsset=BTC_BTC&enabledFlows=OFFRAMP&defaultFlow=OFFRAMP&swapAmount=1000000&defaultAsset=BTC_BTC&useSendCryptoCallback=true&variant=webview-mobile&useSendCryptoCallbackVersion=1'); @@ -300,7 +300,7 @@ describe('Ramp integration', () => { env: 'sandbox', currencyCode: 'USD', } - } + }; server.externalServices.ramp.request = fakeRequest; }); @@ -318,7 +318,7 @@ describe('Ramp integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.ramp.request = fakeRequest2; @@ -350,7 +350,7 @@ describe('Ramp integration', () => { id: 'id1', saleViewToken: 'saleViewToken1', } - } + }; server.externalServices.ramp.request = fakeRequest; }); @@ -361,7 +361,7 @@ describe('Ramp integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.ramp.request = fakeRequest2; diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/sardine.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/sardine.test.ts index 285b6d1659e..0f1b8c906ee 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/sardine.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/sardine.test.ts @@ -42,11 +42,11 @@ describe('Sardine integration', () => { secretKey: 'secretKey4', clientId: 'clientId4', } - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -81,7 +81,7 @@ describe('Sardine integration', () => { paymentType: 'debit', quote_type: 'buy' } - } + }; server.externalServices.sardine.request = fakeRequest; }); @@ -98,7 +98,7 @@ describe('Sardine integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.sardine.request = fakeRequest2; @@ -138,7 +138,7 @@ describe('Sardine integration', () => { body: { env: 'sandbox', } - } + }; server.externalServices.sardine.request = fakeRequest; }); @@ -155,7 +155,7 @@ describe('Sardine integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.sardine.request = fakeRequest2; @@ -188,7 +188,7 @@ describe('Sardine integration', () => { externalUserId: 'externalUserId1', customerId: 'customerId1', } - } + }; server.externalServices.sardine.request = fakeRequest; }); @@ -205,7 +205,7 @@ describe('Sardine integration', () => { it('should return error if post returns error', async () => { const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.sardine.request = fakeRequest2; @@ -245,7 +245,7 @@ describe('Sardine integration', () => { body: { env: 'sandbox', } - } + }; server.externalServices.sardine.request = fakeRequest; }); @@ -262,7 +262,7 @@ describe('Sardine integration', () => { it('should return error if get returns error', async() => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.sardine.request = fakeRequest2; @@ -293,7 +293,7 @@ describe('Sardine integration', () => { env: 'sandbox', orderId: 'orderId1', } - } + }; server.externalServices.sardine.request = fakeRequest; }); @@ -310,7 +310,7 @@ describe('Sardine integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.sardine.request = fakeRequest2; diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/simplex.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/simplex.test.ts index a72a72b5f26..d7c62a7cb00 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/simplex.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/simplex.test.ts @@ -54,11 +54,11 @@ describe('Simplex integration', () => { appSellRefId: 'appSellRefId4', publicKey: 'publicKey4' } - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -87,7 +87,7 @@ describe('Simplex integration', () => { body: { env: 'sandbox' }, - } + }; server.externalServices.simplex.request = fakeRequest; }); @@ -104,7 +104,7 @@ describe('Simplex integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.simplex.request = fakeRequest2; @@ -135,7 +135,7 @@ describe('Simplex integration', () => { env: 'sandbox' }, ip: '1.2.3.4' - } + }; server.externalServices.simplex.request = fakeRequest; }); @@ -152,7 +152,7 @@ describe('Simplex integration', () => { it('should return error if post returns error', async () => { const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.simplex.request = fakeRequest2; @@ -189,7 +189,7 @@ describe('Simplex integration', () => { quote_currency: 'EUR', pp_payment_method: 'sepa' } - } + }; server.externalServices.simplex.request = fakeRequest; }); @@ -206,7 +206,7 @@ describe('Simplex integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.simplex.request = fakeRequest2; @@ -253,10 +253,10 @@ describe('Simplex integration', () => { } }, ip: '1.2.3.4' - } + }; fakeRequest = { - post: (_url, _opts, _cb) => { return _cb(null, { body: {} }) }, + post: (_url, _opts, _cb) => { return _cb(null, { body: {} }); }, }; server.externalServices.simplex.request = fakeRequest; }); @@ -268,7 +268,7 @@ describe('Simplex integration', () => { it('should return error if post returns error', async () => { const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.simplex.request = fakeRequest2; @@ -311,13 +311,13 @@ describe('Simplex integration', () => { userCountry: 'LT', referer_url: 'https://referer_url.com/', return_url: 'https://return_url.com/', - txn_details: {quote_id: 'quote_id_1'}, + txn_details: { quote_id: 'quote_id_1' }, }, ip: '1.2.3.4' - } + }; fakeRequest = { - post: (_url, _opts, _cb) => { return _cb(null, { body: {} }) }, + post: (_url, _opts, _cb) => { return _cb(null, { body: {} }); }, }; server.externalServices.simplex.request = fakeRequest; }); @@ -329,7 +329,7 @@ describe('Simplex integration', () => { it('should return error if post returns error', async () => { const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.simplex.request = fakeRequest2; @@ -368,10 +368,10 @@ describe('Simplex integration', () => { beforeEach(() => { req = { env: 'production' - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: {} }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: {} }); }, }; server.externalServices.simplex.request = fakeRequest; }); diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/thorswap.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/thorswap.test.ts index eb35eea0d82..3156a2d82b2 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/thorswap.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/thorswap.test.ts @@ -47,11 +47,11 @@ describe('Thorswap integration', () => { secretKey: 'thorswapSecretKey4', referer: 'thorswapReferer4' }, - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { data: 'data' }) }, - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data'}) }, + get: (_url, _opts, _cb) => { return _cb(null, { data: 'data' }); }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -81,7 +81,7 @@ describe('Thorswap integration', () => { env: 'sandbox', includeDetails: true, } - } + }; server.externalServices.thorswap.request = fakeRequest; }); @@ -104,7 +104,7 @@ describe('Thorswap integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.thorswap.request = fakeRequest2; @@ -136,7 +136,7 @@ describe('Thorswap integration', () => { includeDetails: true, categories: 'all', } - } + }; server.externalServices.thorswap.request = fakeRequest; }); @@ -165,7 +165,7 @@ describe('Thorswap integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.thorswap.request = fakeRequest2; @@ -195,11 +195,11 @@ describe('Thorswap integration', () => { headers: {}, body: { env: 'sandbox', - sellAsset: "btc", + sellAsset: 'btc', buyAsset: 'eth', sellAmount: '1.123' } - } + }; server.externalServices.thorswap.request = fakeRequest; }); @@ -222,7 +222,7 @@ describe('Thorswap integration', () => { it('should return error if get returns error', async () => { req.body.sellAmount = '1.123'; const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.thorswap.request = fakeRequest2; @@ -253,7 +253,7 @@ describe('Thorswap integration', () => { env: 'sandbox', txn: 'txn1' } - } + }; server.externalServices.thorswap.request = fakeRequest; }); @@ -284,7 +284,7 @@ describe('Thorswap integration', () => { it('should return error if post returns error', async() => { req.body.txn = 'txn1'; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.thorswap.request = fakeRequest2; diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/transak.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/transak.test.ts index 065248cf57f..06e71c85b99 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/transak.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/transak.test.ts @@ -46,11 +46,11 @@ describe('Transak integration', () => { secretKey: 'secretKey4', widgetApi: 'widgetApi4', } - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -79,7 +79,7 @@ describe('Transak integration', () => { body: { env: 'sandbox', } - } + }; server.externalServices.transak.request = fakeRequest; }); @@ -96,7 +96,7 @@ describe('Transak integration', () => { it('should return error if post returns error', async () => { const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.transak.request = fakeRequest2; @@ -127,7 +127,7 @@ describe('Transak integration', () => { body: { env: 'sandbox', } - } + }; server.externalServices.transak.request = fakeRequest; }); @@ -144,7 +144,7 @@ describe('Transak integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.transak.request = fakeRequest2; @@ -175,7 +175,7 @@ describe('Transak integration', () => { body: { env: 'sandbox', } - } + }; server.externalServices.transak.request = fakeRequest; }); @@ -192,7 +192,7 @@ describe('Transak integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.transak.request = fakeRequest2; @@ -227,7 +227,7 @@ describe('Transak integration', () => { network: 'mainnet', paymentMethod: 'credit_debit_card' } - } + }; server.externalServices.transak.request = fakeRequest; }); @@ -244,7 +244,7 @@ describe('Transak integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.transak.request = fakeRequest2; @@ -294,7 +294,7 @@ describe('Transak integration', () => { partnerOrderId: 'partnerOrderId1', partnerCustomerId: 'partnerCustomerId1', } - } + }; server.externalServices.transak.request = fakeRequest; }); @@ -316,7 +316,7 @@ describe('Transak integration', () => { cryptoCurrencyCode: 'BTC', partnerOrderId: 'partnerOrderId1', partnerCustomerId: 'partnerCustomerId1', - } + }; const data = await server.externalServices.transak.transakGetSignedPaymentUrl(req); should.exist(data); }); @@ -335,7 +335,7 @@ describe('Transak integration', () => { it('should return error if post returns error', async () => { const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.transak.request = fakeRequest2; @@ -368,7 +368,7 @@ describe('Transak integration', () => { orderId: 'orderId1', accessToken: 'accessToken1', } - } + }; server.externalServices.transak.request = fakeRequest; }); @@ -385,7 +385,7 @@ describe('Transak integration', () => { it('should return error if get returns error', async () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); }, }; server.externalServices.transak.request = fakeRequest2; diff --git a/packages/bitcore-wallet-service/test/integration/externalservices/wyre.test.ts b/packages/bitcore-wallet-service/test/integration/externalservices/wyre.test.ts index 61a604a29ab..47d5852a56d 100644 --- a/packages/bitcore-wallet-service/test/integration/externalservices/wyre.test.ts +++ b/packages/bitcore-wallet-service/test/integration/externalservices/wyre.test.ts @@ -36,11 +36,11 @@ describe('Wyre integration', () => { widgetUrl: 'xxxx', appProviderAccountId: 'xxxx' } - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, - post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, + post: (_url, _opts, _cb) => { return _cb(null, { body: 'data' }); }, }; await helpers.beforeEach(); @@ -74,7 +74,7 @@ describe('Wyre integration', () => { dest: 'bitcoin:123123123', country: 'US' } - } + }; server.externalServices.wyre.request = fakeRequest; }); @@ -97,7 +97,7 @@ describe('Wyre integration', () => { it('should return error if post returns error', async () => { req.body.amount = 50; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.wyre.request = fakeRequest2; @@ -133,7 +133,7 @@ describe('Wyre integration', () => { country: 'US', walletType: 'DEBIT_CARD' } - } + }; try { await server.externalServices.wyre.wyreWalletOrderQuotation(req); @@ -156,7 +156,7 @@ describe('Wyre integration', () => { country: 'US', walletType: 'DEBIT_CARD' } - } + }; const data = await server.externalServices.wyre.wyreWalletOrderQuotation(req); should.exist(data); @@ -175,10 +175,10 @@ describe('Wyre integration', () => { dest: 'bitcoin:123123123', paymentMethod: 'debit-card' } - } + }; fakeRequest = { - post: (_url, _opts, _cb) => { return _cb(null, { body: {} }) }, + post: (_url, _opts, _cb) => { return _cb(null, { body: {} }); }, }; server.externalServices.wyre.request = fakeRequest; }); @@ -202,7 +202,7 @@ describe('Wyre integration', () => { it('should return error if post returns error', async () => { req.body.amount = 50; const fakeRequest2 = { - post: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + post: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.externalServices.wyre.request = fakeRequest2; @@ -238,7 +238,7 @@ describe('Wyre integration', () => { country: 'US', paymentMethod: 'debit-card' } - } + }; try { await server.externalServices.wyre.wyreWalletOrderReservation(req); @@ -261,7 +261,7 @@ describe('Wyre integration', () => { country: 'US', paymentMethod: 'debit-card' } - } + }; const data = await server.externalServices.wyre.wyreWalletOrderReservation(req); should.exist(data); diff --git a/packages/bitcore-wallet-service/test/integration/fiatrateservice.test.ts b/packages/bitcore-wallet-service/test/integration/fiatrateservice.test.ts index bf960cc0c29..80a4a0ceaf5 100644 --- a/packages/bitcore-wallet-service/test/integration/fiatrateservice.test.ts +++ b/packages/bitcore-wallet-service/test/integration/fiatrateservice.test.ts @@ -734,16 +734,16 @@ describe('Fiat rate service', function() { it('should get the rates of each coin in all supported fiat currencies', function(done) { service.getRates({}, function(err, res) { should.not.exist(err); - Object.keys(res).forEach(key => { + for (const key of Object.keys(res)) { res[key].length.should.equal(Defaults.FIAT_CURRENCIES.length); - }); + } done(); }); }); it('should get the rates of all coins supported', function(done) { service.getRates({}, function(err, res) { should.not.exist(err); - Object.keys(res).length.should.equal( Object.keys(Constants.BITPAY_SUPPORTED_COINS).length) + Object.keys(res).length.should.equal( Object.keys(Constants.BITPAY_SUPPORTED_COINS).length); done(); }); }); @@ -754,10 +754,10 @@ describe('Fiat rate service', function() { }, function(err, res) { should.not.exist(err); - Object.keys(res).length.should.equal( Object.keys(Constants.BITPAY_SUPPORTED_COINS).length) - Object.keys(res).forEach(key=>{ + Object.keys(res).length.should.equal( Object.keys(Constants.BITPAY_SUPPORTED_COINS).length); + for (const key of Object.keys(res)) { res[key].length.should.equal(1); - }); + } done(); } ); @@ -806,9 +806,9 @@ describe('Fiat rate service', function() { }, function(err, res) { should.not.exist(err); - Object.keys(res).forEach(key => { + for (const key of Object.keys(res)) { res[key][0].ts.should.equal(50); - }); + } clock.restore(); done(); } diff --git a/packages/bitcore-wallet-service/test/integration/helpers.ts b/packages/bitcore-wallet-service/test/integration/helpers.ts index 0358d645429..fbbc413fc8a 100644 --- a/packages/bitcore-wallet-service/test/integration/helpers.ts +++ b/packages/bitcore-wallet-service/test/integration/helpers.ts @@ -1,11 +1,13 @@ 'use strict'; // Node >= 17 started attempting to resolve all dns listings by ipv6 first, these lines are required to make it check ipv4 first import { setDefaultResultOrder } from 'dns'; + setDefaultResultOrder('ipv4first'); import chai from 'chai'; import sinon from 'sinon'; import log from 'npmlog'; + log.debug = log.verbose; import config from '../test-config'; import { @@ -312,7 +314,7 @@ class Helpers { if (typeof str === 'number' || typeof str === 'bigint') str = str.toString(); - const re = /^((?:\d+c)|u)?\s*([\d\.]+)\s*(btc|bit|sat)?$/; + const re = /^((?:\d+c)|u)?\s*([\d.]+)\s*(btc|bit|sat)?$/; const match = str.match(re); if (!match) throw new Error('Could not parse amount ' + str); @@ -328,7 +330,7 @@ class Helpers { break; case 'bit': result.amount = Utils.strip(+match[2] * 1e2); - break + break; case 'sat': result.amount = Utils.strip(+match[2]); break; @@ -353,16 +355,16 @@ class Helpers { if (opts.tokenAddress) { return cb(null, { unconfirmed: 0, confirmed: 2e6, balance: 2e6 }); } - let conf = amounts.map(x => Number((x * 1e18).toFixed(0))).reduce((sum, x) => sum += x, 0); + let conf = amounts.map(x => Number((x * 1e18).toFixed(0))).reduce((sum, x) => sum += x, 0); return cb(null, { unconfirmed: 0, confirmed: conf, balance: conf }); - } + }; blockchainExplorer.estimateFee = sinon.stub().callsArgWith(1, null, 20000000000); return; } if (wallet.coin == 'eth') { amounts = Array.isArray(amounts) ? amounts : [amounts]; - let conf = amounts.map(x => Number((x * 1e18).toFixed(0))).reduce((sum, x) => sum += x, 0); + let conf = amounts.map(x => Number((x * 1e18).toFixed(0))).reduce((sum, x) => sum += x, 0); blockchainExplorer.getBalance = sinon.stub().callsArgWith(1, null, { unconfirmed: 0, confirmed: conf, balance: conf }); return; } @@ -494,7 +496,7 @@ class Helpers { if (cb) { throw new Error('USE PROMISES = stubCheckData'); // REMOVE ME } - const x = await server.storage.walletCheck({ walletId:server.walletId, bch: isBCH }); + const x = await server.storage.walletCheck({ walletId: server.walletId, bch: isBCH }); bc.getCheckData = sinon.stub().callsArgWith(1, null, { sum: x.sum }); } @@ -509,10 +511,10 @@ class Helpers { blockchainExplorer.estimateFee = function(nbBlocks, cb) { const result = nbBlocks.reduce((acc, n) => { - const fee = levels[n]; - acc[n] = fee > 0 ? fee / div : fee; - return acc; - }, {}); + const fee = levels[n]; + acc[n] = fee > 0 ? fee / div : fee; + return acc; + }, {}); if (fill) { let last; @@ -551,11 +553,11 @@ class Helpers { const xpriv = new BitcoreLib.HDPrivateKey(derivedXPrivKey, txp.network); let signatures; - switch(txp.coin) { + switch (txp.coin) { case 'eth': case 'xrp': // For eth => account, 0, change = 0 - const priv = xpriv.derive('m/0/0').privateKey; + const priv = xpriv.derive('m/0/0').privateKey; const privKey = priv.toString('hex'); let tx = ChainService.getBitcoreTx(txp).uncheckedSerialize(); const isERC20 = txp.tokenAddress && !txp.payProUrl; @@ -640,29 +642,29 @@ class Helpers { historyCacheTest(items) { const template = { - txid: "fad88682ccd2ff34cac6f7355fe9ecd8addd9ef167e3788455972010e0d9d0de", + txid: 'fad88682ccd2ff34cac6f7355fe9ecd8addd9ef167e3788455972010e0d9d0de', vin: [{ - txid: "0279ef7b21630f859deb723e28beac9e7011660bd1346c2da40321d2f7e34f04", + txid: '0279ef7b21630f859deb723e28beac9e7011660bd1346c2da40321d2f7e34f04', vout: 0, n: 0, - addr: "2NAVFnsHqy5JvqDJydbHPx393LFqFFBQ89V", + addr: '2NAVFnsHqy5JvqDJydbHPx393LFqFFBQ89V', valueSat: 45753, value: 0.00045753, }], vout: [{ - value: "0.00011454", + value: '0.00011454', n: 0, scriptPubKey: { addresses: [ - "2N7GT7XaN637eBFMmeczton2aZz5rfRdZso" + '2N7GT7XaN637eBFMmeczton2aZz5rfRdZso' ] } }, { - value: "0.00020000", + value: '0.00020000', n: 1, scriptPubKey: { addresses: [ - "mq4D3Va5mYHohMEHrgHNGzCjKhBKvuEhPE" + 'mq4D3Va5mYHohMEHrgHNGzCjKhBKvuEhPE' ] } }], diff --git a/packages/bitcore-wallet-service/test/integration/history.test.ts b/packages/bitcore-wallet-service/test/integration/history.test.ts index 6e6777e3dd1..4f08cbbbdf6 100644 --- a/packages/bitcore-wallet-service/test/integration/history.test.ts +++ b/packages/bitcore-wallet-service/test/integration/history.test.ts @@ -47,7 +47,7 @@ describe('History', function() { await helpers.after(); }); - const BCHEIGHT = 10000; + const BCHEIGHT = 10000; describe('#getTxHistory', function() { let server: WalletService; @@ -76,7 +76,7 @@ describe('History', function() { tx.confirmations.should.equal(i); if (i) { tx.blockheight.should.equal(BCHEIGHT - i + 1); - } else { + } else { // The first one is unconfirmed should.not.exist(tx.blockheight); } @@ -92,7 +92,7 @@ describe('History', function() { txs[25].satoshis=1; helpers.stubHistory(null, null, txs); - server.getTxHistory({limit: 50}, function(err, txs, fromCache) { + server.getTxHistory({ limit: 50 }, function(err, txs, fromCache) { should.not.exist(err); fromCache.should.equal(false); should.exist(txs); @@ -216,13 +216,13 @@ describe('History', function() { it('should handle moves, filtering change addresses in multisend', function(done) { const txs = helpers.createTxsV8(20, 1000); helpers.createAddresses(server, wallet, 2, 1).then(({ main, change }) => { - txs[0].txid = txs[1].txid = txs[2].txid = txs[3].txid; - txs[0].height = txs[1].height = txs[2].height = txs[3].height; - txs[0].category = txs[1].category = txs[2].category = txs[3].category = 'move'; - txs[0].address = main[0].address; - txs[1].address = main[0].address; - txs[2].address = change[0].address; - txs[3].address = main[1].address; + txs[0].txid = txs[1].txid = txs[2].txid = txs[3].txid; + txs[0].height = txs[1].height = txs[2].height = txs[3].height; + txs[0].category = txs[1].category = txs[2].category = txs[3].category = 'move'; + txs[0].address = main[0].address; + txs[1].address = main[0].address; + txs[2].address = change[0].address; + txs[3].address = main[1].address; helpers.stubHistory(null, null, txs); @@ -256,7 +256,7 @@ describe('History', function() { should.exist(txs); txs.length.should.equal(20); txs[0].id.should.equal('id0'); - server.getTxHistory({skip: 20, limit: 10}, function(err, txs, fromCache) { + server.getTxHistory({ skip: 20, limit: 10 }, function(err, txs, fromCache) { // first TX result should be: // txid: 19 // confirmations: 19 @@ -321,7 +321,7 @@ describe('History', function() { // remove bc tip cache. Defaults.BLOCKHEIGHT_CACHE_TIME = { default: 0 } as any; - helpers.stubHistory(50, BCHEIGHT); //(0->49) + helpers.stubHistory(50, BCHEIGHT); // (0->49) // this call is to fill the cache server.getTxHistory({ limit: 20 }, function(err, txs, fromCache) { @@ -431,7 +431,7 @@ describe('History', function() { do { const [txs, fromCache] = await new Promise((resolve, reject) => { - server.getTxHistory({skip: i, limit: limit}, function(err, txs, fromCache) { + server.getTxHistory({ skip: i, limit: limit }, function(err, txs, fromCache) { if (err) return reject(err); resolve([txs, fromCache]); }); @@ -459,13 +459,13 @@ describe('History', function() { this.timeout(10000); const _cache = Defaults.CONFIRMATIONS_TO_START_CACHING; Defaults.CONFIRMATIONS_TO_START_CACHING = 10; - helpers.stubHistory(997, 10000); //(0->49) + helpers.stubHistory(997, 10000); // (0->49) let limit = 17; let allTxs = []; // this call is to fill the cache const [txs, fromCache] = await new Promise((resolve, reject) => { - server.getTxHistory({limit: limit}, function(err, txs, fromCache) { + server.getTxHistory({ limit: limit }, function(err, txs, fromCache) { if (err) return reject(err); resolve([txs, fromCache]); }); @@ -482,7 +482,7 @@ describe('History', function() { do { const [txs, fromCache] = await new Promise((resolve, reject) => { - server.getTxHistory({skip: i, limit: limit}, function(err, txs, fromCache) { + server.getTxHistory({ skip: i, limit: limit }, function(err, txs, fromCache) { if (err) return reject(err); resolve([txs, fromCache]); }); @@ -534,7 +534,7 @@ describe('History', function() { do { const [txs, fromCache] = await new Promise((resolve, reject) => { - server.getTxHistory({skip: i, limit: limit}, function(err, txs, fromCache) { + server.getTxHistory({ skip: i, limit: limit }, function(err, txs, fromCache) { if (err) return reject(err); resolve([txs, fromCache]); }); @@ -563,13 +563,13 @@ describe('History', function() { it('should get tx history from insight, in 2 overlapping pages', function(done) { helpers.stubHistory(300, BCHEIGHT); - server.getTxHistory({limit: 25}, function(err, txs, fromCache) { + server.getTxHistory({ limit: 25 }, function(err, txs, fromCache) { should.not.exist(err); fromCache.should.equal(false); txs.length.should.equal(25); // no cache - server.getTxHistory({ skip:5, limit: 21 }, function(err, txs2, fromCache) { + server.getTxHistory({ skip: 5, limit: 21 }, function(err, txs2, fromCache) { should.not.exist(err); fromCache = !!fromCache; fromCache.should.equal(false); @@ -600,7 +600,7 @@ describe('History', function() { }], feePerKb: 100e2, customData: { - "test": true + 'test': true }, }; @@ -647,7 +647,7 @@ describe('History', function() { height: 1000, }]; - helpers.stubHistory(null, null,txs); + helpers.stubHistory(null, null, txs); helpers.stubCheckData(blockchainExplorer, server, wallet.coin == 'bch').then(() => { server.getTxHistory({ includeExtendedInfo: true }, function(err, txs) { should.not.exist(err); @@ -735,7 +735,7 @@ describe('History', function() { height: 1000, }]; - helpers.stubHistory(null, null,txs); + helpers.stubHistory(null, null, txs); helpers.stubCheckData(blockchainExplorer, server, wallet.coin == 'bch').then(() => { server.getTxHistory({}, function(err, txs) { should.not.exist(err); @@ -762,7 +762,7 @@ describe('History', function() { should.exist(tx.outputs[1].message); tx.outputs[1].message.should.equal('message #2'); should.exist(tx.customData); - should.exist(tx.customData["test"]); + should.exist(tx.customData['test']); done(); }); }); @@ -866,7 +866,7 @@ describe('History', function() { server.getTxHistory({}, function(err, txs) { should.not.exist(err); - should.exist(txs) + should.exist(txs); txs.length.should.equal(9); txs[2].should.deep.equal({ id: '5ddbf28d4ff191801711a948', diff --git a/packages/bitcore-wallet-service/test/integration/pushNotifications.test.ts b/packages/bitcore-wallet-service/test/integration/pushNotifications.test.ts index 3185b0a7e94..dfbd0901ce2 100644 --- a/packages/bitcore-wallet-service/test/integration/pushNotifications.test.ts +++ b/packages/bitcore-wallet-service/test/integration/pushNotifications.test.ts @@ -9,7 +9,7 @@ import sjcl from 'sjcl'; import { WalletService } from '../../src/lib/server'; import { PushNotificationsService } from '../../src/lib/pushnotificationsservice'; import { Storage } from '../../src/lib/storage'; -import { ObjectID } from 'mongodb'; +import { ObjectID } from 'mongodb'; import * as TestData from '../testdata'; import helpers from './helpers'; import { Common } from '../../src/lib/common'; @@ -988,14 +988,14 @@ describe('Push notifications', function() { it('should notify NewBlock to all devices subscribed in the last 10 minutes', function(done) { const collections = Storage.collections; const oldSubscription = { - _id : new ObjectID('5fb57ecde3de1d285042a551'), - version : '1.0.0', - createdOn : 1605729997, - copayerId : wallet.copayers[0].id, - token : 'DEVICE_TOKEN3', - packageName : 'com.my-other-wallet2', - platform : 'any', - walletId : '123' + _id: new ObjectID('5fb57ecde3de1d285042a551'), + version: '1.0.0', + createdOn: 1605729997, + copayerId: wallet.copayers[0].id, + token: 'DEVICE_TOKEN3', + packageName: 'com.my-other-wallet2', + platform: 'any', + walletId: '123' }; server.storage.db.collection(collections.PUSH_NOTIFICATION_SUBS).insertOne(oldSubscription, function(err) { @@ -1025,40 +1025,40 @@ describe('Push notifications', function() { it('should notify only one NewBlock push notification for each device', function(done) { const collections = Storage.collections; const subs = [{ - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - token : 'DEVICE_TOKEN', - packageName : 'com.my-other-wallet', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + token: 'DEVICE_TOKEN', + packageName: 'com.my-other-wallet', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - token : 'DEVICE_TOKEN2', - packageName : 'com.my-other-wallet2', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + token: 'DEVICE_TOKEN2', + packageName: 'com.my-other-wallet2', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - token : 'DEVICE_TOKEN2', - packageName : 'com.my-other-wallet2', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + token: 'DEVICE_TOKEN2', + packageName: 'com.my-other-wallet2', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - token : 'DEVICE_TOKEN3', - packageName : 'com.my-other-wallet3', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + token: 'DEVICE_TOKEN3', + packageName: 'com.my-other-wallet3', + platform: 'any', + walletId: '123' }]; server.storage.db.collection(collections.PUSH_NOTIFICATION_SUBS).insertMany(subs, function(err) { @@ -1340,14 +1340,14 @@ describe('Push notifications', function() { it('should notify NewBlock to all devices subscribed in the last 10 minutes', function(done) { const collections = Storage.collections; const oldSubscription = { - _id : new ObjectID('5fb57ecde3de1d285042a551'), - version : '1.0.0', - createdOn : 1605729997, - copayerId : wallet.copayers[0].id, - externalUserId : 'DEVICE_EXTERNAL_USER_ID3', - packageName : 'com.my-other-wallet2', - platform : 'any', - walletId : '123' + _id: new ObjectID('5fb57ecde3de1d285042a551'), + version: '1.0.0', + createdOn: 1605729997, + copayerId: wallet.copayers[0].id, + externalUserId: 'DEVICE_EXTERNAL_USER_ID3', + packageName: 'com.my-other-wallet2', + platform: 'any', + walletId: '123' }; server.storage.db.collection(collections.PUSH_NOTIFICATION_SUBS).insertOne(oldSubscription, function(err) { @@ -1395,76 +1395,76 @@ describe('Push notifications', function() { it('should notify only one NewBlock push notification for each device', function(done) { const collections = Storage.collections; const subs = [{ - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - token : 'DEVICE_TOKEN', - packageName : 'com.my-other-wallet', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + token: 'DEVICE_TOKEN', + packageName: 'com.my-other-wallet', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - token : 'DEVICE_TOKEN2', - packageName : 'com.my-other-wallet2', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + token: 'DEVICE_TOKEN2', + packageName: 'com.my-other-wallet2', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - token : 'DEVICE_TOKEN2', - packageName : 'com.my-other-wallet2', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + token: 'DEVICE_TOKEN2', + packageName: 'com.my-other-wallet2', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - token : 'DEVICE_TOKEN3', - packageName : 'com.my-other-wallet3', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + token: 'DEVICE_TOKEN3', + packageName: 'com.my-other-wallet3', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - externalUserId : 'DEVICE_EXTERNAL_USER_ID', - packageName : 'com.my-other-wallet', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + externalUserId: 'DEVICE_EXTERNAL_USER_ID', + packageName: 'com.my-other-wallet', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - externalUserId : 'DEVICE_EXTERNAL_USER_ID2', - packageName : 'com.my-other-wallet2', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + externalUserId: 'DEVICE_EXTERNAL_USER_ID2', + packageName: 'com.my-other-wallet2', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - externalUserId : 'DEVICE_EXTERNAL_USER_ID2', - packageName : 'com.my-other-wallet2', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + externalUserId: 'DEVICE_EXTERNAL_USER_ID2', + packageName: 'com.my-other-wallet2', + platform: 'any', + walletId: '123' }, { - version : '1.0.0', - createdOn : Math.floor(Date.now() / 1000), - copayerId : wallet.copayers[0].id, - externalUserId : 'DEVICE_EXTERNAL_USER_ID3', - packageName : 'com.my-other-wallet3', - platform : 'any', - walletId : '123' + version: '1.0.0', + createdOn: Math.floor(Date.now() / 1000), + copayerId: wallet.copayers[0].id, + externalUserId: 'DEVICE_EXTERNAL_USER_ID3', + packageName: 'com.my-other-wallet3', + platform: 'any', + walletId: '123' }]; server.storage.db.collection(collections.PUSH_NOTIFICATION_SUBS).insertMany(subs, function(err) { @@ -1513,7 +1513,7 @@ describe('Push notifications', function() { should.exist(args[2].body.messages.apple_push.extra); should.exist(args[2].body.messages.apple_push.custom_uri); should.exist(args[2].body.messages.android_push.extra); - should.exist(args[2].body.messages.android_push.custom_uri) + should.exist(args[2].body.messages.android_push.custom_uri); done(); }); }); diff --git a/packages/bitcore-wallet-service/test/integration/server.test.ts b/packages/bitcore-wallet-service/test/integration/server.test.ts index cdc6259757e..5eb95481d42 100644 --- a/packages/bitcore-wallet-service/test/integration/server.test.ts +++ b/packages/bitcore-wallet-service/test/integration/server.test.ts @@ -5,7 +5,6 @@ import 'chai/register-should'; import util from 'util'; import sinon from 'sinon'; import * as CWC from 'crypto-wallet-core'; -import { transport } from '../../src/lib/logger'; import { ChainService } from '../../src/lib/chain/index'; import config from '../../src/config'; import { WalletService, UPGRADES } from '../../src/lib/server'; @@ -95,7 +94,7 @@ describe('Wallet service', function() { it('should not get server instance for BWC lower than v1.2', function() { try { - WalletService.getInstance({ clientVersion: 'bwc-1.1.99'}); + WalletService.getInstance({ clientVersion: 'bwc-1.1.99' }); throw new Error('should have thrown'); } catch (err) { err.should.be.instanceof(ClientError); @@ -131,10 +130,10 @@ describe('Wallet service', function() { it('should get server instance for existing copayer', function(done) { helpers.createAndJoinWallet(1, 2).then(function({ wallet }) { // using copayer 0 data. - var xpriv = TestData.copayers[0].xPrivKey; - var priv = TestData.copayers[0].privKey_1H_0; + const xpriv = TestData.copayers[0].xPrivKey; + const priv = TestData.copayers[0].privKey_1H_0; - var sig = helpers.signMessage('hello world', priv); + const sig = helpers.signMessage('hello world', priv); WalletService.getInstanceWithAuth({ // test assumes wallet's copayer[0] is TestData's copayer[0] @@ -184,8 +183,8 @@ describe('Wallet service', function() { }); it('should get server instance for support staff', function(done) { - helpers.createAndJoinWallet(1, 1).then(function({ server: s , wallet }) { - var collections = Storage.collections; + helpers.createAndJoinWallet(1, 1).then(function({ server: s, wallet }) { + const collections = Storage.collections; s.storage.db.collection(collections.COPAYERS_LOOKUP).update({ copayerId: wallet.copayers[0].id }, { @@ -249,9 +248,7 @@ describe('Wallet service', function() { describe('Creating ads, retrieve ads, active/inactive', function() { let server; let wallet; - let adOpts; - - adOpts = { + const adOpts = { advertisementId: '123', name: 'name', title: 'title', @@ -2108,7 +2105,7 @@ describe('Wallet service', function() { address.address.should.equal('0xE299d49C2cf9BfaFb7C6E861E80bb8c83f961622'); server.syncWallet(wallet, function(err) { should.not.exist(err); - var calls = blockchainExplorer.addAddresses.getCalls(); + const calls = blockchainExplorer.addAddresses.getCalls(); calls[0].args[1].should.deep.equal(['0xE299d49C2cf9BfaFb7C6E861E80bb8c83f961622']); done(); }); @@ -2209,7 +2206,7 @@ describe('Wallet service', function() { address.address.should.equal('rLsz9LPd3arEWQ6CsvD839E8c9dkdBopUG'); server.syncWallet(wallet, function(err) { should.not.exist(err); - var calls = blockchainExplorer.addAddresses.getCalls(); + const calls = blockchainExplorer.addAddresses.getCalls(); calls[0].args[1].should.deep.equal(['rLsz9LPd3arEWQ6CsvD839E8c9dkdBopUG']); done(); }); @@ -2530,8 +2527,8 @@ describe('Wallet service', function() { utxos.length.should.equal(2); utxos.reduce((sum, u) => sum += u.satoshis, 0).should.equal(3 * 1e8); server.getAddresses({ noChange: true }, function(err, addresses) { - var utxo = utxos[0]; - var address = addresses.find(a => a.address === utxo.address); + const utxo = utxos[0]; + const address = addresses.find(a => a.address === utxo.address); should.exist(address); utxo.path.should.equal(address.path); utxo.publicKeys.should.deep.equal(address.publicKeys); @@ -2550,8 +2547,8 @@ describe('Wallet service', function() { utxos.length.should.equal(2); utxos.reduce((sum, u) => sum += u.satoshis, 0).should.equal(3 * 1e8); server.getAddresses({ noChange: true }, function(err, addresses) { - var utxo = utxos[0]; - var address = addresses.find(a => a.address === utxo.address); + const utxo = utxos[0]; + const address = addresses.find(a => a.address === utxo.address); should.exist(address); utxo.path.should.equal(address.path); utxo.publicKeys.should.deep.equal(address.publicKeys); @@ -2600,7 +2597,7 @@ describe('Wallet service', function() { }); it('should not fail when getting UTXOs for wallet with 0 UTXOs and pending txps', function(done) { helpers.stubUtxos(server, wallet, [1, 1]).then(function() { - const txOpts = { + const txOpts = { outputs: [{ toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 1e8, @@ -2630,8 +2627,8 @@ describe('Wallet service', function() { utxos.length.should.equal(2); utxos.reduce((sum, u) => sum += u.satoshis, 0).should.equal(2 * 1e8 + 1000); server.getAddresses({ noChange: true }, function(err, addresses) { - var utxo = utxos[0]; - var address = addresses.find(a => a.address === utxo.address); + const utxo = utxos[0]; + const address = addresses.find(a => a.address === utxo.address); should.exist(address); utxo.path.should.equal(address.path); utxo.publicKeys.should.deep.equal(address.publicKeys); @@ -2731,7 +2728,7 @@ describe('Wallet service', function() { should.not.exist(err); server.getBalance(res.wallet.walletId, function(err, bal) { should.not.exist(err); - var privKey = new Bitcore.PrivateKey(); + const privKey = new Bitcore.PrivateKey(); getAuthServer(opts.copayerId, privKey, function(err, server2) { err.should.be.instanceof(ClientError); err.code.should.equal('NOT_AUTHORIZED'); @@ -2745,7 +2742,7 @@ describe('Wallet service', function() { ws.addAccess(opts, function(err, res) { should.not.exist(err); getAuthServer(opts.copayerId, reqPrivKey, function(err, server2) { - const txOpts = { + const txOpts = { outputs: [{ toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 0.8e8 @@ -2788,7 +2785,7 @@ describe('Wallet service', function() { ws.addAccess(opts, function(err, res) { should.not.exist(err); getAuthServer(opts.copayerId, reqPrivKey, function(err, server2) { - const txOpts = { + const txOpts = { outputs: [{ toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 0.8e8 @@ -3363,7 +3360,7 @@ describe('Wallet service', function() { server.joinWallet(copayerOpts, function(err, result) { should.not.exist(err); helpers.getAuthServer(result.copayerId).then(function(server) { - const txOpts = { + const txOpts = { outputs: [{ toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 0.8e8 @@ -3413,7 +3410,7 @@ describe('Wallet service', function() { server.joinWallet(copayerOpts, function(err, result) { should.not.exist(err); helpers.getAuthServer(result.copayerId).then(function(server) { - const txOpts = { + const txOpts = { outputs: [{ toAddress: 'qz0d6gueltx0feta7z9777yk97sz9p6peu98mg5vac', amount: 0.8e8 @@ -3517,7 +3514,7 @@ describe('Wallet service', function() { xrp: 8000, doge: 1e8, ltc: 8000 - } + }; const amount = coinAmount[coin]; const txOpts = Object.assign({ outputs: [{ @@ -3569,7 +3566,7 @@ describe('Wallet service', function() { describe('Validations', function() { it('should fail to create a tx without outputs', function(done) { helpers.stubUtxos(server, wallet, [1, 2]).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [], feePerKb: 123e2, }, flags); @@ -3584,7 +3581,7 @@ describe('Wallet service', function() { it('should fail to create tx for invalid address', function(done) { helpers.stubUtxos(server, wallet, 1).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [{ toAddress: 'invalid address', amount: 1e8 @@ -3656,7 +3653,7 @@ describe('Wallet service', function() { }); it(`should fail to create ${coin} tx for invalid amount`, function(done) { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [{ toAddress: addressStr, amount: 0, @@ -3673,7 +3670,7 @@ describe('Wallet service', function() { it(`should fail to create ${coin} tx with a script other than OP_RETURN`, function(done) { helpers.stubUtxos(server, wallet, [1, 2], { coin }).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [ { toAddress: addressStr, @@ -3696,7 +3693,7 @@ describe('Wallet service', function() { it(`should fail to create ${coin} tx with OP_RETURN script and invalid amount`, function(done) { helpers.stubUtxos(server, wallet, [1, 2], { coin }).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [ { toAddress: addressStr, @@ -3719,7 +3716,7 @@ describe('Wallet service', function() { it(`should fail to create ${coin} tx with wrong data type of OP_RETURN script`, function(done) { helpers.stubUtxos(server, wallet, [1, 2], { coin }).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [ { toAddress: addressStr, @@ -3742,7 +3739,7 @@ describe('Wallet service', function() { it(`should fail to create ${coin} tx with an output with invalid script and valid data type`, function(done) { helpers.stubUtxos(server, wallet, [1, 2], { coin }).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [ { toAddress: addressStr, @@ -3764,7 +3761,7 @@ describe('Wallet service', function() { }); } else if (coin === 'eth') { it('should not fail to create ETH chain based tx for 0 amount', function(done) { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [{ toAddress: addressStr, amount: 0, @@ -3780,7 +3777,7 @@ describe('Wallet service', function() { } it('should fail to specify both feeLevel & feePerKb', function(done) { helpers.stubUtxos(server, wallet, 2).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [{ toAddress: addressStr, amount: 1e8, @@ -3801,7 +3798,7 @@ describe('Wallet service', function() { if (!flags.noUtxoTests) { it('should fail to create tx for address of different network', function(done) { helpers.stubUtxos(server, wallet, 1).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [{ toAddress: 'myE38JHdxmQcTJGP1ZiX4BiGhDxMJDvLJD', amount: 1e8 @@ -3846,7 +3843,7 @@ describe('Wallet service', function() { if (coin !== 'doge') { // TODO it('should be able to specify change address', function(done) { helpers.stubUtxos(server, wallet, [1, 2]).then(function(utxos) { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [{ toAddress: addressStr, amount: 0.8e8, @@ -3857,7 +3854,7 @@ describe('Wallet service', function() { server.createTx(txOpts, function(err, tx) { should.not.exist(err); should.exist(tx); - var t = ChainService.getBitcoreTx(tx); + const t = ChainService.getBitcoreTx(tx); t.getChangeOutput().script.toAddress().toString(true).should.equal(txOpts.changeAddress); done(); @@ -3887,7 +3884,7 @@ describe('Wallet service', function() { it('should be able to specify inputs & absolute fee', function(done) { helpers.stubUtxos(server, wallet, [1, 2]).then(function(utxos) { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [{ toAddress: addressStr, amount: 1e8, @@ -3901,7 +3898,7 @@ describe('Wallet service', function() { tx.amount.should.equal(helpers.toSatoshi(1)); should.not.exist(tx.feePerKb); tx.fee.should.equal(1000e2); - var t = ChainService.getBitcoreTx(tx); + const t = ChainService.getBitcoreTx(tx); t.getFee().should.equal(1000e2); t.getChangeOutput().satoshis.should.equal(3e8 - 1e8 - 1000e2); done(); @@ -3914,7 +3911,7 @@ describe('Wallet service', function() { describe('Foreign ID', function() { it('should create a tx with foreign ID', function(done) { helpers.stubUtxos(server, wallet, 2).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ txProposalId: '123', outputs: [{ toAddress: addressStr, @@ -3933,7 +3930,7 @@ describe('Wallet service', function() { }); it('should return already created tx if same foreign ID is specified and tx still unpublished', function(done) { helpers.stubUtxos(server, wallet, 2).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ txProposalId: '123', outputs: [{ toAddress: addressStr, @@ -3976,7 +3973,7 @@ describe('Wallet service', function() { should.not.exist(err); should.exist(tx); tx.id.should.equal('123'); - var publishOpts = helpers.getProposalSignatureOpts(tx, TestData.copayers[0].privKey_1H_0); + const publishOpts = helpers.getProposalSignatureOpts(tx, TestData.copayers[0].privKey_1H_0); server.publishTx(publishOpts, function(err, tx) { should.not.exist(err); should.exist(tx); @@ -4106,7 +4103,7 @@ describe('Wallet service', function() { }); it('should fail to publish tx proposal with wrong signature', function(done) { helpers.stubUtxos(server, wallet, [1, 2]).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [{ toAddress: addressStr, amount: 1 * ts, @@ -4131,7 +4128,7 @@ describe('Wallet service', function() { }); it('should fail to publish tx proposal not signed by the creator', function(done) { helpers.stubUtxos(server, wallet, [1, 2]).then(function() { - const txOpts = Object.assign({ + const txOpts = Object.assign({ outputs: [{ toAddress: addressStr, amount: 1 * ts, @@ -4472,7 +4469,7 @@ describe('Wallet service', function() { xrp: 8000, doge: 1e8, ltc: 8000 - } + }; const amount = coinAmount[coin]; helpers.stubUtxos(server, wallet, [1, 2]).then(function() { const txOpts = Object.assign({ @@ -4509,7 +4506,7 @@ describe('Wallet service', function() { eth: 210000000, doge: 1e6, ltc: 3800 - } + }; helpers.stubUtxos(server, wallet, [1, 2], { coin }).then(function() { const max = 3 * ts - coinFee[coin]; // Fees for this tx at 100bits/kB = 3740 sat const txOpts = Object.assign({ @@ -4540,7 +4537,7 @@ describe('Wallet service', function() { eth: 210000000, doge: 1e6, ltc: 3800 - } + }; helpers.stubUtxos(server, wallet, [1, 2], { coin }).then(function() { const amount = ts - coinFee[coin]; const txOpts = Object.assign({ @@ -4600,7 +4597,7 @@ describe('Wallet service', function() { xrp: 0.5, doge: 1, ltc: 0.5 - } + }; helpers.stubUtxos(server, wallet, 2, { coin }).then(function() { sinon.stub(CWC.Transactions, 'create').throws(new Error('dummy exception')); sinon.stub(CWC.BitcoreLib.default, 'Transaction').throws(new Error('dummy exception')); @@ -5719,7 +5716,7 @@ describe('Wallet service', function() { }); describe('cashAddr backwards compat', function() { - /// LEGACY MODE + // / LEGACY MODE it('should create a BCH tx proposal with cashaddr outputs (w/o prefix) and return Copay addr', function(done) { const copayAddr = 'CPrtPWbp8cCftTQu5fzuLG5zPJNDHMMf8X'; const cashAddr = BCHAddressTranslator.translate(copayAddr, 'cashaddr'); @@ -5773,7 +5770,7 @@ describe('Wallet service', function() { }); }); - /// CASHADDR MODE + // / CASHADDR MODE it('should create a BCH tx proposal with cashaddr outputs (w/o prefix) and return CASH addr', function(done) { const copayAddr = 'CPrtPWbp8cCftTQu5fzuLG5zPJNDHMMf8X'; const cashAddr = BCHAddressTranslator.translate(copayAddr, 'cashaddr'); @@ -6222,7 +6219,7 @@ describe('Wallet service', function() { it('should include the note in tx history listing', function(done) { helpers.createAddresses(server, wallet, 1, 1).then(function({ main: mainAddresses, change: changeAddress }) { blockchainExplorer.getBlockchainHeight = sinon.stub().callsArgWith(0, null, 1000); - server._normalizeTxHistory = function(a, b, c, e, d) { return d(null, b); } + server._normalizeTxHistory = function(a, b, c, e, d) { return d(null, b); }; const txs = [{ txid: '123', blockheight: 100, @@ -6463,7 +6460,7 @@ describe('Wallet service', function() { should.exist(info); info.inputs.length.should.equal(4); info.size.should.equal(1238); - info.fee.should.equal(info.size * 10000 / 1000.); + info.fee.should.equal(info.size * 10000 / 1000); info.amount.should.equal(1e8 - info.fee); info.utxosBelowFee.should.equal(0); info.amountBelowFee.should.equal(0); @@ -6520,7 +6517,7 @@ describe('Wallet service', function() { should.not.exist(err); should.exist(info); info.feePerKb.should.equal(180e2); - info.fee.should.equal(info.size * 180e2 / 1000.); + info.fee.should.equal(info.size * 180e2 / 1000); sendTx(info, done); }); }); @@ -6538,7 +6535,7 @@ describe('Wallet service', function() { should.not.exist(err); should.exist(info); info.feePerKb.should.equal(200e2); - info.fee.should.equal(info.size * 200e2 / 1000.); + info.fee.should.equal(info.size * 200e2 / 1000); done(); }); }); @@ -6590,7 +6587,7 @@ describe('Wallet service', function() { should.exist(info); info.inputs.length.should.equal(3); info.size.should.equal(942); - info.fee.should.equal(info.size * 10000 / 1000.); + info.fee.should.equal(info.size * 10000 / 1000); info.amount.should.equal(0.9e8 - info.fee); sendTx(info, done); }); @@ -6617,7 +6614,7 @@ describe('Wallet service', function() { should.exist(info); info.inputs.length.should.equal(2); info.size.should.equal(646); - info.fee.should.equal(info.size * 10000 / 1000.); + info.fee.should.equal(info.size * 10000 / 1000); info.amount.should.equal(0.2e8 - info.fee); sendTx(info, done); }); @@ -6636,7 +6633,7 @@ describe('Wallet service', function() { should.exist(info); info.inputs.length.should.equal(4); info.size.should.equal(1238); - info.fee.should.equal(info.size * 0.001e8 / 1000.); + info.fee.should.equal(info.size * 0.001e8 / 1000); info.amount.should.equal(1e8 - info.fee); info.utxosBelowFee.should.equal(3); info.amountBelowFee.should.equal(310e2); @@ -6648,7 +6645,7 @@ describe('Wallet service', function() { should.exist(info); info.inputs.length.should.equal(6); info.size.should.equal(1830); - info.fee.should.equal(info.size * 0.0001e8 / 1000.); + info.fee.should.equal(info.size * 0.0001e8 / 1000); info.amount.should.equal(1.0003e8 - info.fee); info.utxosBelowFee.should.equal(1); info.amountBelowFee.should.equal(1e3); @@ -6694,7 +6691,7 @@ describe('Wallet service', function() { }); }); }); - }) + }); describe('Check requiredFeeRate BTC', function() { let server; @@ -7057,7 +7054,7 @@ describe('Wallet service', function() { fromSegwit: true, segwitVersion: 1, utxos: [1], - outputs: [{ + outputs: [{ toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 10, // overwritten in sendMax }], @@ -7069,7 +7066,7 @@ describe('Wallet service', function() { fromSegwit: true, segwitVersion: 1, utxos: [0.1, 0.2, 0.3, 0.4], - outputs: [{ + outputs: [{ toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 10, // overwritten in sendMax }], @@ -7081,7 +7078,7 @@ describe('Wallet service', function() { fromSegwit: true, segwitVersion: 1, utxos: [0.1, 0.3, 0.4], - outputs: [{ + outputs: [{ toAddress: 'bc1q9ytgh0jywlxv0zr8w3ytd6z5rpgct6tuvmh4pl', amount: 10, // overwritten in sendMax }], @@ -7092,7 +7089,7 @@ describe('Wallet service', function() { fromSegwit: true, segwitVersion: 1, utxos: [1, 2], - outputs: [{ + outputs: [{ toAddress: 'bc1q9ytgh0jywlxv0zr8w3ytd6z5rpgct6tuvmh4pl', amount: 10000, }], @@ -7104,7 +7101,7 @@ describe('Wallet service', function() { fromSegwit: true, segwitVersion: 1, utxos: ['100000 sat', '20000 sat', 1], - outputs: [{ + outputs: [{ toAddress: 'bc1q9ytgh0jywlxv0zr8w3ytd6z5rpgct6tuvmh4pl', amount: 10000, }], @@ -7116,7 +7113,7 @@ describe('Wallet service', function() { fromSegwit: true, segwitVersion: 1, utxos: [1.2], - outputs: [{ + outputs: [{ toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 1e8, }], @@ -7128,7 +7125,7 @@ describe('Wallet service', function() { fromSegwit: true, segwitVersion: 1, utxos: [0.4, 0.4, 0.4], - outputs: [{ + outputs: [{ toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 1e8, }], @@ -7140,7 +7137,7 @@ describe('Wallet service', function() { fromSegwit: true, segwitVersion: 1, utxos: [0.2, 0.2, 0.1, 0.1, 0.3, 0.15], - outputs: [{ + outputs: [{ toAddress: 'bc1q9ytgh0jywlxv0zr8w3ytd6z5rpgct6tuvmh4pl', amount: 1e8, }], @@ -7192,7 +7189,7 @@ describe('Wallet service', function() { x.n = x.n || 1; it(`case ${i} : ${x.name} (${x.m}-of-${x.n})`, async function() { - ({ server, wallet } = await helpers.createAndJoinWallet(x.m, x.n, {useNativeSegwit: x.fromSegwit, segwitVersion: x.segwitVersion})); + ({ server, wallet } = await helpers.createAndJoinWallet(x.m, x.n, { useNativeSegwit: x.fromSegwit, segwitVersion: x.segwitVersion })); await helpers.stubUtxos(server, wallet, x.utxos); const info = await util.promisify(server.getSendMaxInfo).call(server, { feePerKb: x.requiredFeeRate, @@ -7435,7 +7432,7 @@ describe('Wallet service', function() { }); it('should fail to reject non-pending TX', async function() { - let pendingTxs = await util.promisify(server.getPendingTxs).call(server, {}) + let pendingTxs = await util.promisify(server.getPendingTxs).call(server, {}); pendingTxs[0].id.should.equal(txid); await util.promisify(server.rejectTx).call(server, { @@ -8214,7 +8211,7 @@ describe('Wallet service', function() { txp.isRejected().should.be.false; txp.isAccepted().should.be.false; txp.actions.length.should.equal(1); - let action = txp.getActionBy(wallet.copayers[0].id); + const action = txp.getActionBy(wallet.copayers[0].id); action.type.should.equal('reject'); action.comment.should.equal('just because'); @@ -8287,7 +8284,7 @@ describe('Wallet service', function() { should.exist(err); should.not.exist(txp); err.should.be.instanceof(ClientError); - err.code.should.equal('TX_NOT_FOUND') + err.code.should.equal('TX_NOT_FOUND'); err.message.should.equal('Transaction proposal not found'); done(); }); @@ -9176,7 +9173,7 @@ describe('Wallet service', function() { address.path.should.equal('m/0/3'); done(); }); - }) + }); }); } }); @@ -9328,7 +9325,7 @@ describe('Wallet service', function() { const s = subs[0]; s.token.should.equal('DEVICE_TOKEN'); s.packageName.should.equal('com.wallet'); - s.platform.should.equal('Android') + s.platform.should.equal('Android'); done(); }); }); @@ -9352,7 +9349,7 @@ describe('Wallet service', function() { const s = subs[0]; s.token.should.equal('DEVICE_TOKEN'); s.packageName.should.equal('com.wallet'); - s.platform.should.equal('Android') + s.platform.should.equal('Android'); done(); }); }); @@ -9718,8 +9715,8 @@ describe('Wallet service', function() { }); describe('BTC & BCH wallets with same seed', function() { - let server = { btc: null, bch: null }; - let wallet = { btc: null, bch: null }; + const server = { btc: null, bch: null }; + const wallet = { btc: null, bch: null }; beforeEach(async function() { const { server: s, wallet: w } = await helpers.createAndJoinWallet(1, 1); @@ -9770,7 +9767,7 @@ describe('Wallet service', function() { describe('ERC20 createTx (ETH)', function() { let server; let wallet; - let addressStr = '0x37d7B3bBD88EFdE6a93cF74D2F5b0385D3E3B08A'; + const addressStr = '0x37d7B3bBD88EFdE6a93cF74D2F5b0385D3E3B08A'; beforeEach(async function() { ({ server, wallet } = await helpers.createAndJoinWallet(1, 1, { coin: 'eth' })); @@ -9845,7 +9842,7 @@ describe('Wallet service', function() { describe('ERC20 createTx (MATIC)', function() { let server; let wallet; - let addressStr = '0x37d7B3bBD88EFdE6a93cF74D2F5b0385D3E3B08A'; + const addressStr = '0x37d7B3bBD88EFdE6a93cF74D2F5b0385D3E3B08A'; beforeEach(async function() { ({ server, wallet } = await helpers.createAndJoinWallet(1, 1, { coin: 'matic' })); @@ -9855,9 +9852,9 @@ describe('Wallet service', function() { const ts = TO_SAT['usdc']; server.createAddress({}, from => { helpers.stubUtxos(server, wallet, [1, 1], { tokenAddress: TOKENS[0] }).then(function() { - let txAmount = 1e6; + const txAmount = 1e6; const txOpts = { - chain: 'matic', + chain: 'matic', coin: 'usdc_m', outputs: [{ toAddress: addressStr, @@ -9951,7 +9948,7 @@ describe('Wallet service', function() { removed: false } }, - } + }; config.services = configServices; const opts = undefined; @@ -10002,7 +9999,7 @@ describe('Wallet service', function() { removed: false } }, - } + }; config.services = configServices; const opts = { currentLocationCountry: 'US', @@ -10027,7 +10024,7 @@ describe('Wallet service', function() { removed: false } }, - } + }; config.services = configServices; const opts = { currentLocationCountry: 'US', @@ -10099,7 +10096,7 @@ describe('Wallet service', function() { removed: false } } - } + }; }); describe('User logged out', () => { @@ -10448,10 +10445,10 @@ describe('Wallet service', function() { req = { headers: {}, body: {} - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: {} }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: {} }); }, }; }); @@ -10466,7 +10463,7 @@ describe('Wallet service', function() { it('should return error if get returns error', () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.request = fakeRequest2; @@ -10493,10 +10490,10 @@ describe('Wallet service', function() { domain: 'ematiu.sandbox.payid.org', handle: 'matias', } - } + }; fakeRequest = { - get: (_url, _opts, _cb) => { return _cb(null, { body: {} }) }, + get: (_url, _opts, _cb) => { return _cb(null, { body: {} }); }, }; }); @@ -10522,7 +10519,7 @@ describe('Wallet service', function() { it('should return error if get returns error', () => { const fakeRequest2 = { - get: (_url, _opts, _cb) => { return _cb(new Error('Error')) }, + get: (_url, _opts, _cb) => { return _cb(new Error('Error')); }, }; server.request = fakeRequest2; @@ -10546,15 +10543,15 @@ describe('Wallet service', function() { template: 'https://ematiu.sandbox.payid.org/payid/{acctpart}' }] } - }) + }); } }; server.request = fakeRequest2; - var spy = sinon.spy(server, 'getPayId'); + const spy = sinon.spy(server, 'getPayId'); const url = 'https://ematiu.sandbox.payid.org/payid/matias'; server.discoverPayId(req.body).then(data => { - var calls = spy.getCalls(); + const calls = spy.getCalls(); calls[0].args[0].should.equal(url); should.exist(data); }).catch(err => { @@ -10573,15 +10570,15 @@ describe('Wallet service', function() { href: 'https://xpring.io/portal/wallet/xrp/testnet/payto', }] } - }) + }); } }; const url = 'https://ematiu.sandbox.payid.org/matias'; server.request = fakeRequest2; - var spy = sinon.spy(server, 'getPayId'); + const spy = sinon.spy(server, 'getPayId'); server.discoverPayId(req.body).then(data => { - var calls = spy.getCalls(); + const calls = spy.getCalls(); calls[0].args[0].should.equal(url); should.exist(data); }).catch(err => { @@ -10614,7 +10611,7 @@ describe('Wallet service', function() { }); it('should do something', function() { - (true).should.equal(true) + (true).should.equal(true); }); describe(UPGRADES.SOL_bwc_$lt_10_10_12, function() { @@ -10892,4 +10889,4 @@ describe('Wallet service', function() { }).should.throw('Unknown upgrade path'); }); }); -}) +}); diff --git a/packages/bitcore-wallet-service/test/integration/tss.test.ts b/packages/bitcore-wallet-service/test/integration/tss.test.ts index c6e03ca36c2..148b15a1361 100644 --- a/packages/bitcore-wallet-service/test/integration/tss.test.ts +++ b/packages/bitcore-wallet-service/test/integration/tss.test.ts @@ -164,8 +164,8 @@ describe('TSS', function() { { from: 0, payload: { - message: "pGdmcm9tX2lkAGpwdWJsaWNfa2V5mCEDGLIYNRjfGDMYzhiCGOAY4wAY6hgnGBgYtBg9GEQYmhigGN4YXRiaGHoYrxikGI4YRBjRGJQYwhiZFhjyGENnYmlnX3NfaZghAxi9GJ8YmhiqGGcYIBj2GKUYhxjpGDQYohhYGIAYWwwYpBjHGFkYxBiaGMoY6BjUGPwY2hgmGP0YgBgiExibZXByb29momF0mCEDGMkYQRgkGEcYMRhxGP0Y4xigGJAYSRgpGJAYnBhGGKUYkBifGJkY8Rh+GCsYsxirGIcMGPAYiBjjGLEY9xhMYXOYIBhKGOMYnhi7ERjrGKYYTBIYPRiQGHIYURhLGOkYixicGJMJGLEY7xisGF8YeBicGE0IFwoIGC8YVA==", - signature: "3045022100e7d1209ab8463ba6af71d0df953eaecd7cf1cbb06f7a5f4f0bacde9cd555cf310220220251083ea1d6453ff376a5520f87b9f6fe2c1fa099d034453aa41b81e54f9c", + message: 'pGdmcm9tX2lkAGpwdWJsaWNfa2V5mCEDGLIYNRjfGDMYzhiCGOAY4wAY6hgnGBgYtBg9GEQYmhigGN4YXRiaGHoYrxikGI4YRBjRGJQYwhiZFhjyGENnYmlnX3NfaZghAxi9GJ8YmhiqGGcYIBj2GKUYhxjpGDQYohhYGIAYWwwYpBjHGFkYxBiaGMoY6BjUGPwY2hgmGP0YgBgiExibZXByb29momF0mCEDGMkYQRgkGEcYMRhxGP0Y4xigGJAYSRgpGJAYnBhGGKUYkBifGJkY8Rh+GCsYsxirGIcMGPAYiBjjGLEY9xhMYXOYIBhKGOMYnhi7ERjrGKYYTBIYPRiQGHIYURhLGOkYixicGJMJGLEY7xisGF8YeBicGE0IFwoIGC8YVA==', + signature: '3045022100e7d1209ab8463ba6af71d0df953eaecd7cf1cbb06f7a5f4f0bacde9cd555cf310220220251083ea1d6453ff376a5520f87b9f6fe2c1fa099d034453aa41b81e54f9c', }, signatureR: undefined, }, @@ -228,19 +228,19 @@ describe('TSS', function() { const blockchainExplorerMock = helpers.getBlockchainExplorer(); const expressApp = new BWS.ExpressApp(); - expressApp.start( - { - ignoreRateLimiter: true, - storage: storage, - blockchainExplorer: blockchainExplorerMock, - disableLogs: true, - doNotCheckV8: true - }, - () => { - app = request(expressApp.app); - done(); - } - ); + expressApp.start( + { + ignoreRateLimiter: true, + storage: storage, + blockchainExplorer: blockchainExplorerMock, + disableLogs: true, + doNotCheckV8: true + }, + () => { + app = request(expressApp.app); + done(); + } + ); }); afterEach(function() { diff --git a/packages/bitcore-wallet-service/test/lock.test.ts b/packages/bitcore-wallet-service/test/lock.test.ts index d5eb1a87e68..f052e180a67 100644 --- a/packages/bitcore-wallet-service/test/lock.test.ts +++ b/packages/bitcore-wallet-service/test/lock.test.ts @@ -54,9 +54,9 @@ describe('Locks', function() { pushEvent(3); setTimeout(function() { release(); - expect(order).to.deep.equal([0,4,1,5,2,6,3]); + expect(order).to.deep.equal([0, 4, 1, 5, 2, 6, 3]); done(); - },step); + }, step); }); pushEvent(6); }); @@ -141,7 +141,7 @@ describe('Locks', function() { lock.acquire('123', {}, function(err, release) { should.not.exist(err); pushEvent(1); - lock.acquire('123', {waitTime:1}, function(err, release2) { + lock.acquire('123', { waitTime: 1 }, function(err, release2) { release(); expect(err).to.contain('LOCKED'); done(); @@ -150,9 +150,9 @@ describe('Locks', function() { }); it('should release lock if acquired for a long time', function(done) { - lock.acquire('123', {lockTime:10}, function(err, release) { + lock.acquire('123', { lockTime: 10 }, function(err, release) { should.not.exist(err); - lock.acquire('123', {waitTime:1000}, function(err, release) { + lock.acquire('123', { waitTime: 1000 }, function(err, release) { should.not.exist(err); done(); }); @@ -161,18 +161,18 @@ describe('Locks', function() { it('should release lock if acquired for a long time (case 2)', function(done) { // no releases - lock.acquire('123', {lockTime:10}, function(err, release) { + lock.acquire('123', { lockTime: 10 }, function(err, release) { should.not.exist(err); }); - lock.acquire('123', {lockTime:20}, function(err, release) { + lock.acquire('123', { lockTime: 20 }, function(err, release) { should.not.exist(err); }); - lock.acquire('123', {lockTime:30}, function(err, release) { + lock.acquire('123', { lockTime: 30 }, function(err, release) { should.not.exist(err); - lock.acquire('123', {lockTime:30}, function(err, release) { + lock.acquire('123', { lockTime: 30 }, function(err, release) { should.not.exist(err); - lock.acquire('123', {waitTime:1000}, function(err, release) { + lock.acquire('123', { waitTime: 1000 }, function(err, release) { should.not.exist(err); done(); }); @@ -182,7 +182,7 @@ describe('Locks', function() { - describe("#runLocked", () => { + describe('#runLocked', () => { it('should run a locked function', function(done) { var called =0; @@ -194,7 +194,7 @@ describe('Locks', function() { setTimeout(() => { expect(called).to.equal(0); done(); - },200); + }, 200); } lock.runLocked('123', {}, end, task); @@ -211,11 +211,11 @@ describe('Locks', function() { } function task() { - lock.runLocked('123', {waitTime:100}, end, () => { + lock.runLocked('123', { waitTime: 100 }, end, () => { setTimeout(() => { - },200); + }, 200); }); - } + } lock.runLocked('123', {}, end, task); }); diff --git a/packages/bitcore-wallet-service/test/model/advertisement.test.ts b/packages/bitcore-wallet-service/test/model/advertisement.test.ts index 72d5105d1c6..472eefe92ff 100644 --- a/packages/bitcore-wallet-service/test/model/advertisement.test.ts +++ b/packages/bitcore-wallet-service/test/model/advertisement.test.ts @@ -9,13 +9,13 @@ const should = chai.should(); describe('#Advertisement', function() { describe('#create', function() { it('should create Advertisement', function() { - const x = Advertisement.create({ title: 'Test Title'}); + const x = Advertisement.create({ title: 'Test Title' }); should.exist(x); }); }); describe('#fromObj', function() { - it('should create Advertisement', function() { + it('should create Advertisement', function() { const x = Advertisement.fromObj({ title: 'Test Title' }); should.exist(x); }); diff --git a/packages/bitcore-wallet-service/test/model/txproposal.test.ts b/packages/bitcore-wallet-service/test/model/txproposal.test.ts index 75336090268..ac279bfad5b 100644 --- a/packages/bitcore-wallet-service/test/model/txproposal.test.ts +++ b/packages/bitcore-wallet-service/test/model/txproposal.test.ts @@ -25,7 +25,7 @@ describe('TxProposal', function() { }); it('should copy a TxProposal, with actions', function() { - let txpObj = aTXP(); + let txpObj = aTXP(); txpObj.version = 2; @@ -67,7 +67,7 @@ describe('TxProposal', function() { txp.isAccepted().should.equal(false); txp.isRejected().should.equal(false); txp.sign('2', theSignatures, theXPub); - txp.isAccepted().should.equal(true); //<=== + txp.isAccepted().should.equal(true); // <=== txp.isRejected().should.equal(false); }); }); @@ -114,13 +114,13 @@ const aTxpOpts = function() { network: 'livenet', message: 'some message', outputs: [{ - toAddress: "18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7", + toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 10000000, - message: "first message" + message: 'first message' }, { - toAddress: "18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7", + toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 20000000, - message: "second message" + message: 'second message' }] }; diff --git a/packages/bitcore-wallet-service/test/storage.test.ts b/packages/bitcore-wallet-service/test/storage.test.ts index 130dd0dc37c..32c6ac2a42a 100644 --- a/packages/bitcore-wallet-service/test/storage.test.ts +++ b/packages/bitcore-wallet-service/test/storage.test.ts @@ -14,7 +14,7 @@ const should = chai.should(); describe('Storage', function() { let client, storage; before(function(done) { - mongodb.MongoClient.connect(config.mongoDb.uri,{ useUnifiedTopology: true }, function(err, inclient) { + mongodb.MongoClient.connect(config.mongoDb.uri, { useUnifiedTopology: true }, function(err, inclient) { if (err) throw err; client = inclient; let db1 = client.db(config.mongoDb.dbname); @@ -58,7 +58,7 @@ describe('Storage', function() { w.m.should.equal(wallet.m); w.n.should.equal(wallet.n); done(); - }) + }); }); }); it('should not return error if wallet not found', function(done) { @@ -106,7 +106,7 @@ describe('Storage', function() { lookup.requestPubKeys[0].key.should.equal('requestPubKey 1'); lookup.requestPubKeys[0].signature.should.equal('xxx'); done(); - }) + }); }); }); it('should not return error if copayer not found', function(done) { @@ -261,7 +261,7 @@ describe('Storage', function() { it('should store a 5 txs on the cache and update status correctly', (done) => { let tipIndex = 80; // current cache tip let items = [ - { txid: '1234', blockheight: 803 }, /// <=== Latests + { txid: '1234', blockheight: 803 }, // / <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 801 }, @@ -284,7 +284,7 @@ describe('Storage', function() { it('should prevent to store txs on wrong order', (done) => { let tipIndex = 80; // current cache tip let items = [ - { txid: '1234', blockheight: 803 }, /// <=== Latests + { txid: '1234', blockheight: 803 }, // / <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 801 }, @@ -362,7 +362,7 @@ describe('Storage', function() { it('should store a 5 txs on the cache and retreive them correctly', (done) => { let tipIndex = 80; // current cache tip let items = [ - { txid: '1234', blockheight: 803 }, /// <=== Latests + { txid: '1234', blockheight: 803 }, // / <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 800 }, @@ -376,7 +376,7 @@ describe('Storage', function() { txs.length.should.equal(5); txs[0].blockheight.should.equal(803); txs[4].blockheight.should.equal(800); - txs[4].txid.should.equal('1238'); //should preserve order + txs[4].txid.should.equal('1238'); // should preserve order done(); }); }); @@ -386,7 +386,7 @@ describe('Storage', function() { it('should store a 10 txs on the cache and retreive them correctly', (done) => { let tipIndex = 80; // current cache tip let items = [ - { txid: '1234', blockheight: 803 }, /// <=== Latests + { txid: '1234', blockheight: 803 }, // / <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 800 }, @@ -399,7 +399,7 @@ describe('Storage', function() { // time passes updateHeight = 2000; let items2 = [ - { txid: '124', blockheight: 1803 }, /// <=== Latests + { txid: '124', blockheight: 1803 }, // / <=== Latests { txid: '125', blockheight: 1802 }, { txid: '126', blockheight: 1801 }, { txid: '127', blockheight: 1800 }, @@ -417,7 +417,7 @@ describe('Storage', function() { txs.length.should.equal(10); txs[0].blockheight.should.equal(1803); txs[9].blockheight.should.equal(800); - txs[9].txid.should.equal('1238'); //should preserve order + txs[9].txid.should.equal('1238'); // should preserve order done(); }); }); diff --git a/packages/bitcore-wallet-service/test/testdata.ts b/packages/bitcore-wallet-service/test/testdata.ts index de0bf899cf2..0c98afec384 100644 --- a/packages/bitcore-wallet-service/test/testdata.ts +++ b/packages/bitcore-wallet-service/test/testdata.ts @@ -378,11 +378,11 @@ export const historyETH = [ export const CoinGecko_ETH_Tokens = { tokens: [{ - symbol: 'BAT', - name: 'Basic Attention Token', - address: '0x0d8775f648430679a709e98d2b0cb6250d2887ef', - decimals: 18, - logoURI: 'https://tokens.1inch.io/0x0d8775f648430679a709e98d2b0cb6250d2887ef.png', - tags: ['tokens'] + symbol: 'BAT', + name: 'Basic Attention Token', + address: '0x0d8775f648430679a709e98d2b0cb6250d2887ef', + decimals: 18, + logoURI: 'https://tokens.1inch.io/0x0d8775f648430679a709e98d2b0cb6250d2887ef.png', + tags: ['tokens'] }] }; diff --git a/packages/bitcore-wallet-service/test/utils.test.ts b/packages/bitcore-wallet-service/test/utils.test.ts index bf6c09a7e78..31258271ca3 100644 --- a/packages/bitcore-wallet-service/test/utils.test.ts +++ b/packages/bitcore-wallet-service/test/utils.test.ts @@ -289,7 +289,7 @@ describe('Utils', function() { headers: { 'x-forwarded-for': '1.2.3.4' } - } + }; const ip = Utils.getIpFromReq(req); should.exist(ip); @@ -301,7 +301,7 @@ describe('Utils', function() { headers: { 'x-forwarded-for': '1.2.3.4, 5.6.7.8, 9.10.11.12' } - } + }; const ip = Utils.getIpFromReq(req); should.exist(ip); @@ -313,7 +313,7 @@ describe('Utils', function() { headers: { 'x-real-ip': '1.2.3.4' } - } + }; const ip = Utils.getIpFromReq(req); should.exist(ip); @@ -325,7 +325,7 @@ describe('Utils', function() { headers: { 'x-real-ip': '1.2.3.4, 5.6.7.8, 9.10.11.12' } - } + }; const ip = Utils.getIpFromReq(req); should.exist(ip); @@ -335,7 +335,7 @@ describe('Utils', function() { it('should get the ip if req.ip exists', function() { const req = { ip: '1.2.3.4' - } + }; const ip = Utils.getIpFromReq(req); should.exist(ip); @@ -347,7 +347,7 @@ describe('Utils', function() { connection: { remoteAddress: '1.2.3.4' } - } + }; const ip = Utils.getIpFromReq(req); should.exist(ip); @@ -355,7 +355,7 @@ describe('Utils', function() { }); it('should get an empty string if no case is met', function() { - const req = {} + const req = {}; const ip = Utils.getIpFromReq(req); ip.should.equal(''); @@ -407,11 +407,11 @@ describe('Utils', function() { }); it('should sort an array of objects with nested key', function() { - const res = Utils.sortAsc([{ a: { b: 3 }}, { a: { b: 1 }}, { a: { b: 2 }}], ['a', 'b']); + const res = Utils.sortAsc([{ a: { b: 3 } }, { a: { b: 1 } }, { a: { b: 2 } }], ['a', 'b']); res.should.deep.equal([ - { a: { b: 1 }}, - { a: { b: 2 }}, - { a: { b: 3 }} + { a: { b: 1 } }, + { a: { b: 2 } }, + { a: { b: 3 } } ]); }); }); diff --git a/packages/bitcore-wallet-service/test/v8.test.ts b/packages/bitcore-wallet-service/test/v8.test.ts index 2ee43066d09..952ccec25fa 100644 --- a/packages/bitcore-wallet-service/test/v8.test.ts +++ b/packages/bitcore-wallet-service/test/v8.test.ts @@ -11,9 +11,9 @@ import { Common } from '../src/lib/common'; const should = chai.should(); const { Defaults } = Common; const V8UTXOS = [ - {"_id":"5c1d4bc47adced963b3cddb9","chain":"BCH","network":"testnet","coinbase":false,"mintIndex":0,"spentTxid":"","mintTxid":"6e34d9b83631cd55ee09d907061332ba3c17246e3c1255543fb7a35e58c52e42","mintHeight":12,"spentHeight":-2,"address":"qrua7vsdmks4522wwv8rtamfph7g8s8vpq6a0g3veh","script":"76a914f9df320ddda15a294e730e35f7690dfc83c0ec0888ac","value":1000000,"confirmations":-1}, - {"_id":"5c1e33e17adced963b776bcf","chain":"BCH","network":"testnet","coinbase":false,"mintIndex":0,"spentTxid":"","mintTxid":"fb1340bae2431f71c5f14d0c5893cbfb09042dcb9602b858ccec43e0e1e2f1a1","mintHeight":15,"spentHeight":-2,"address":"qrua7vsdmks4522wwv8rtamfph7g8s8vpq6a0g3veh","script":"76a914f9df320ddda15a294e730e35f7690dfc83c0ec0888ac","value":2000000,"confirmations":-1}, - {"_id":"5c21088f7adced963b33eea2","chain":"BCH","network":"testnet","coinbase":false,"mintIndex":0,"spentTxid":"","mintTxid":"42eeb1d139521fa5206685ffec5df3b302cf85561201178680a0efe6bd23d449","mintHeight":-1,"spentHeight":-2,"address":"qrua7vsdmks4522wwv8rtamfph7g8s8vpq6a0g3veh","script":"76a914f9df320ddda15a294e730e35f7690dfc83c0ec0888ac","value":2000000,"confirmations":-1} + { '_id': '5c1d4bc47adced963b3cddb9', 'chain': 'BCH', 'network': 'testnet', 'coinbase': false, 'mintIndex': 0, 'spentTxid': '', 'mintTxid': '6e34d9b83631cd55ee09d907061332ba3c17246e3c1255543fb7a35e58c52e42', 'mintHeight': 12, 'spentHeight': -2, 'address': 'qrua7vsdmks4522wwv8rtamfph7g8s8vpq6a0g3veh', 'script': '76a914f9df320ddda15a294e730e35f7690dfc83c0ec0888ac', 'value': 1000000, 'confirmations': -1 }, + { '_id': '5c1e33e17adced963b776bcf', 'chain': 'BCH', 'network': 'testnet', 'coinbase': false, 'mintIndex': 0, 'spentTxid': '', 'mintTxid': 'fb1340bae2431f71c5f14d0c5893cbfb09042dcb9602b858ccec43e0e1e2f1a1', 'mintHeight': 15, 'spentHeight': -2, 'address': 'qrua7vsdmks4522wwv8rtamfph7g8s8vpq6a0g3veh', 'script': '76a914f9df320ddda15a294e730e35f7690dfc83c0ec0888ac', 'value': 2000000, 'confirmations': -1 }, + { '_id': '5c21088f7adced963b33eea2', 'chain': 'BCH', 'network': 'testnet', 'coinbase': false, 'mintIndex': 0, 'spentTxid': '', 'mintTxid': '42eeb1d139521fa5206685ffec5df3b302cf85561201178680a0efe6bd23d449', 'mintHeight': -1, 'spentHeight': -2, 'address': 'qrua7vsdmks4522wwv8rtamfph7g8s8vpq6a0g3veh', 'script': '76a914f9df320ddda15a294e730e35f7690dfc83c0ec0888ac', 'value': 2000000, 'confirmations': -1 } ]; const V8UTXOS2 = [ @@ -37,9 +37,9 @@ describe('V8', () => { class MyReadable extends Readable { constructor(options?) { super(options); - this.push(txsStr.substring(0, 10)); - this.push(txsStr.substring(10)); - this.push(null); + this.push(txsStr.substring(0, 10)); + this.push(txsStr.substring(10)); + this.push(null); } }; @@ -77,7 +77,7 @@ describe('V8', () => { this.push(txStr.substring(0, 10)); this.push(txStr.substring(10)); this.push(null); - } + } }; return new MyReadable(); @@ -109,7 +109,7 @@ describe('V8', () => { getAddressTxos(opts) { return new Promise(function (resolve) { resolve(V8UTXOS); - }) + }); }; }; @@ -208,7 +208,7 @@ describe('V8', () => { request: fakeRequest, }); - be.estimateFee([1,2,3,4,5], (err, levels) => { + be.estimateFee([1, 2, 3, 4, 5], (err, levels) => { should.not.exist(err); should.exist(levels); // should ignore non-matching results From 35a713cb17312f9a02800d61f3dbac7852651b0f Mon Sep 17 00:00:00 2001 From: Micah Maphet Date: Thu, 30 Oct 2025 13:26:09 -0400 Subject: [PATCH 2/4] implemented new merge eslint rule into bitcore wallet service --- .../src/lib/blockchainexplorers/v8.ts | 2 +- .../src/lib/blockchainmonitor.ts | 2 +- .../src/lib/fiatrateproviders/provider.d.ts | 2 +- .../src/lib/model/tsskeygen.ts | 6 ++-- .../src/lib/model/tsssign.ts | 6 ++-- .../src/lib/model/wallet.ts | 34 +++++++++---------- .../src/lib/routes/tss.ts | 2 +- .../bitcore-wallet-service/src/lib/server.ts | 4 +-- .../bitcore-wallet-service/src/lib/storage.ts | 24 ++++++------- .../bitcore-wallet-service/src/lib/tss.ts | 20 +++++------ .../src/types/chain.d.ts | 2 +- .../src/types/expressapp.d.ts | 2 +- .../test/integration/server.test.ts | 4 +-- .../bitcore-wallet-service/test/utils.test.ts | 2 +- 14 files changed, 56 insertions(+), 56 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts index 1a993bdd18f..98c18ee8d18 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts @@ -43,7 +43,7 @@ function v8network(bwsNetwork, chain = 'btc') { return bwsNetwork; } -export type WalletWithOpts = IWallet & { tokenAddress?: string; multisigContractAddress?: string; }; +export type WalletWithOpts = IWallet & { tokenAddress?: string; multisigContractAddress?: string }; export class V8 { chain: string; diff --git a/packages/bitcore-wallet-service/src/lib/blockchainmonitor.ts b/packages/bitcore-wallet-service/src/lib/blockchainmonitor.ts index 70ccde57135..cc7e0a66c62 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainmonitor.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainmonitor.ts @@ -98,7 +98,7 @@ export class BlockchainMonitor { ) { explorer = opts.blockchainExplorers[pair.chain][pair.network]; } else { - let config: { url?: string; provider?: any, regtestEnabled?: boolean } = {}; + let config: { url?: string; provider?: any; regtestEnabled?: boolean } = {}; if ( opts.blockchainExplorerOpts && opts.blockchainExplorerOpts[pair.chain] && diff --git a/packages/bitcore-wallet-service/src/lib/fiatrateproviders/provider.d.ts b/packages/bitcore-wallet-service/src/lib/fiatrateproviders/provider.d.ts index c791347a73d..698317e1672 100644 --- a/packages/bitcore-wallet-service/src/lib/fiatrateproviders/provider.d.ts +++ b/packages/bitcore-wallet-service/src/lib/fiatrateproviders/provider.d.ts @@ -1,7 +1,7 @@ export interface IProvider { name: string; getUrl: (code: string) => string; - parseFn: (raw: any) => Array + parseFn: (raw: any) => Array; } export interface IRates { diff --git a/packages/bitcore-wallet-service/src/lib/model/tsskeygen.ts b/packages/bitcore-wallet-service/src/lib/model/tsskeygen.ts index 2830d352419..2b561d2aac9 100644 --- a/packages/bitcore-wallet-service/src/lib/model/tsskeygen.ts +++ b/packages/bitcore-wallet-service/src/lib/model/tsskeygen.ts @@ -12,7 +12,7 @@ export interface ITssKeyMessageObject { payload: { message: string; signature: string; - } + }; }>; p2pMessages: Array<{ to: number; @@ -21,7 +21,7 @@ export interface ITssKeyMessageObject { payload: { encryptedMessage: string; signature: string; - } + }; }>; partyId: number; publicKey: string; @@ -126,7 +126,7 @@ export class TssKeyGenModel implements ITssKeyGenModel { return x; } - static fromObj(obj: ITssKeyGenModel & { __v: number; }): TssKeyGenModel { + static fromObj(obj: ITssKeyGenModel & { __v: number }): TssKeyGenModel { const x = new TssKeyGenModel(); x.id = obj.id; x.schemeVersion = obj.schemeVersion; diff --git a/packages/bitcore-wallet-service/src/lib/model/tsssign.ts b/packages/bitcore-wallet-service/src/lib/model/tsssign.ts index f7fa1e53f20..a63c9dd6a2f 100644 --- a/packages/bitcore-wallet-service/src/lib/model/tsssign.ts +++ b/packages/bitcore-wallet-service/src/lib/model/tsssign.ts @@ -9,7 +9,7 @@ export interface ITssSigMessageObject { payload: { message: string; signature: string; - } + }; }>; p2pMessages: Array<{ to: number; @@ -17,7 +17,7 @@ export interface ITssSigMessageObject { payload: { encryptedMessage: string; signature: string; - } + }; }>; partyId: number; publicKey: string; @@ -93,7 +93,7 @@ export class TssSigGenModel implements ITssSigGenModel { __v: number; - static create(params: { id: string; message: ITssSigMessageObject; m: number; copayerId: string; }): TssSigGenModel { + static create(params: { id: string; message: ITssSigMessageObject; m: number; copayerId: string }): TssSigGenModel { const { id, message, m, copayerId } = params; const { partyId } = message; diff --git a/packages/bitcore-wallet-service/src/lib/model/wallet.ts b/packages/bitcore-wallet-service/src/lib/model/wallet.ts index b3f43ca24dc..d5e746e3784 100644 --- a/packages/bitcore-wallet-service/src/lib/model/wallet.ts +++ b/packages/bitcore-wallet-service/src/lib/model/wallet.ts @@ -98,23 +98,23 @@ export class Wallet implements IWallet<() => boolean> { static COPAYER_PAIR_LIMITS = {}; static create(opts: { - id: string, - name: string, - m: number, - n: number, - coin: string, - chain: string, // chain === coin for stored wallets - network: string, - pubKey: string, - singleAddress: boolean, - derivationStrategy: string, - addressType: string, - nativeCashAddr?: boolean, - usePurpose48?: boolean, - hardwareSourcePublicKey?: string, - clientDerivedPublicKey?: string, - tssVersion?: number, - tssKeyId?: string, + id: string; + name: string; + m: number; + n: number; + coin: string; + chain: string; // chain === coin for stored wallets + network: string; + pubKey: string; + singleAddress: boolean; + derivationStrategy: string; + addressType: string; + nativeCashAddr?: boolean; + usePurpose48?: boolean; + hardwareSourcePublicKey?: string; + clientDerivedPublicKey?: string; + tssVersion?: number; + tssKeyId?: string; }) { opts = opts || {} as any; diff --git a/packages/bitcore-wallet-service/src/lib/routes/tss.ts b/packages/bitcore-wallet-service/src/lib/routes/tss.ts index 9897273937e..1ab0b08b059 100644 --- a/packages/bitcore-wallet-service/src/lib/routes/tss.ts +++ b/packages/bitcore-wallet-service/src/lib/routes/tss.ts @@ -11,7 +11,7 @@ interface TssRouterOpts { returnError: Types.ReturnErrorFn; opts: { ignoreRateLimiter?: boolean; - } + }; }; export class TssRouter { diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 03b26c8ed00..64ea045a1aa 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -158,7 +158,7 @@ export class WalletService implements IWalletService { thorswap: ThorswapService; transak: TransakService; wyre: WyreService; - coinGecko: CoinGeckoService, + coinGecko: CoinGeckoService; }; constructor() { @@ -5061,7 +5061,7 @@ export class WalletService implements IWalletService { static upgradeNeeded( paths: Upgrade | Upgrade[], - opts: UpgradeCheckOpts & { clientVersion: string; userAgent: string; } + opts: UpgradeCheckOpts & { clientVersion: string; userAgent: string } ) { paths = Array.isArray(paths) ? paths : [paths]; const chain = opts.chain?.toLowerCase(); diff --git a/packages/bitcore-wallet-service/src/lib/storage.ts b/packages/bitcore-wallet-service/src/lib/storage.ts index 17b20250e4b..5bbc94802ed 100644 --- a/packages/bitcore-wallet-service/src/lib/storage.ts +++ b/packages/bitcore-wallet-service/src/lib/storage.ts @@ -1769,7 +1769,7 @@ export class Storage { ); } - async fetchTssKeyGenSession({ id }: { id: string; }) { + async fetchTssKeyGenSession({ id }: { id: string }) { const doc = await this.db.collection(collections.TSS_KEYGEN).findOne({ id }); if (!doc) { return null; @@ -1777,11 +1777,11 @@ export class Storage { return TssKeyGenModel.fromObj(doc); } - async storeTssKeyGenSession({ doc }: { doc: TssKeyGenModel; }) { + async storeTssKeyGenSession({ doc }: { doc: TssKeyGenModel }) { return this.db.collection(collections.TSS_KEYGEN).insertOne(doc); } - async storeTssKeyGenParticipant({ id, partyId, copayerId }: { id: string; partyId: number; copayerId: string; }) { + async storeTssKeyGenParticipant({ id, partyId, copayerId }: { id: string; partyId: number; copayerId: string }) { return this.db.collection(collections.TSS_KEYGEN).updateOne( { id }, { @@ -1793,7 +1793,7 @@ export class Storage { ); } - async storeTssKeyGenMessage({ id, message, __v }: { id: string; message: ITssKeyMessageObject; __v: number; }) { + async storeTssKeyGenMessage({ id, message, __v }: { id: string; message: ITssKeyMessageObject; __v: number }) { const result = await this.db.collection(collections.TSS_KEYGEN).updateOne( { id, __v }, { @@ -1815,7 +1815,7 @@ export class Storage { return result; } - async storeTssKeySharedPubKey({ id, publicKey }: { id: string; publicKey: string; }) { + async storeTssKeySharedPubKey({ id, publicKey }: { id: string; publicKey: string }) { return this.db.collection(collections.TSS_KEYGEN).updateOne( { id }, { @@ -1827,7 +1827,7 @@ export class Storage { ); } - async storeTssKeyShare({ id, partyId, encryptedKeyChain }: { id: string; partyId: number; encryptedKeyChain: string; }) { + async storeTssKeyShare({ id, partyId, encryptedKeyChain }: { id: string; partyId: number; encryptedKeyChain: string }) { return this.db.collection(collections.TSS_KEYGEN).updateOne( { id }, { @@ -1839,7 +1839,7 @@ export class Storage { ); } - async storeTssKeyBwsJoinSecret({ id, secret }: { id: string; secret: string; }) { + async storeTssKeyBwsJoinSecret({ id, secret }: { id: string; secret: string }) { return this.db.collection(collections.TSS_KEYGEN).updateOne({ id }, @@ -1851,7 +1851,7 @@ export class Storage { { upsert: false }); } - async fetchTssSigSession({ id }: { id: string; }) { + async fetchTssSigSession({ id }: { id: string }) { const doc = await this.db.collection(collections.TSS_SIGN).findOne({ id }); if (!doc) { return null; @@ -1859,11 +1859,11 @@ export class Storage { return TssSigGenModel.fromObj(doc); } - async storeTssSigSession({ doc }: { doc: TssSigGenModel; }) { + async storeTssSigSession({ doc }: { doc: TssSigGenModel }) { return this.db.collection(collections.TSS_SIGN).insertOne(doc); } - async storeTssSigParticipant({ id, partyId, copayerId, __v }: { id: string; partyId: number; copayerId: string; __v: number; }) { + async storeTssSigParticipant({ id, partyId, copayerId, __v }: { id: string; partyId: number; copayerId: string; __v: number }) { const result = await this.db.collection(collections.TSS_SIGN).updateOne( { id, __v }, { @@ -1882,7 +1882,7 @@ export class Storage { return result; } - async storeTssSigMessage({ id, message, __v }: { id: string; message: ITssSigMessageObject; __v: number; }) { + async storeTssSigMessage({ id, message, __v }: { id: string; message: ITssSigMessageObject; __v: number }) { const result = await this.db.collection(collections.TSS_SIGN).updateOne( { id, __v }, { @@ -1904,7 +1904,7 @@ export class Storage { return result; } - async storeTssSignature({ id, signature }: { id: string; signature: ITssSigMessageObject['signature']; }) { + async storeTssSignature({ id, signature }: { id: string; signature: ITssSigMessageObject['signature'] }) { return this.db.collection(collections.TSS_SIGN).updateOne( { id }, { diff --git a/packages/bitcore-wallet-service/src/lib/tss.ts b/packages/bitcore-wallet-service/src/lib/tss.ts index 5196b7049e7..dccce9af8f1 100644 --- a/packages/bitcore-wallet-service/src/lib/tss.ts +++ b/packages/bitcore-wallet-service/src/lib/tss.ts @@ -48,7 +48,7 @@ class TssKeyGenClass { return { messages, publicKey: session.sharedPublicKey, hasKeyBackup: !!session.keyShares?.[partyId] }; } - async processMessage(params: { id: string; message: ITssKeyMessageObject; n?: string | number; password?: string; copayerId: string; }) { + async processMessage(params: { id: string; message: ITssKeyMessageObject; n?: string | number; password?: string; copayerId: string }) { const { id, message, n, password, copayerId } = params; if (!id || typeof id !== 'string') { throw Errors.TSS_GENERIC_ERROR.withMessage('Invalid id provided: ' + id); @@ -89,7 +89,7 @@ class TssKeyGenClass { } } - private _checkPassword(params: { session: TssKeyGenModel; password: string; }) { + private _checkPassword(params: { session: TssKeyGenModel; password: string }) { const { session, password } = params; if (!session.joinPassword) { return true; @@ -119,7 +119,7 @@ class TssKeyGenClass { private async _initSession(params: { id: string; - message: ITssKeyMessageObject, + message: ITssKeyMessageObject; n: number | string; password?: string; storage: Storage; @@ -150,7 +150,7 @@ class TssKeyGenClass { } } - private async _pushMessage(params: { id: string; session: TssKeyGenModel; message: ITssKeyMessageObject; storage: Storage; }) { + private async _pushMessage(params: { id: string; session: TssKeyGenModel; message: ITssKeyMessageObject; storage: Storage }) { const { id, session, message, storage } = params; const { round } = message; @@ -251,7 +251,7 @@ class TssKeyGenClass { } } - async getBwsJoinSecret(params: { id: string; copayerId: string; }) { + async getBwsJoinSecret(params: { id: string; copayerId: string }) { const { id, copayerId } = params; const storage = WalletService.getStorage(); const session = await storage.fetchTssKeyGenSession({ id }); @@ -271,7 +271,7 @@ class TssKeyGenClass { export const TssKeyGen = new TssKeyGenClass(); class TssSignClass { - async getMessagesForParty(params: { id: string; round: number; copayerId: string; }): Promise<{ messages?: ITssSigMessageObject[]; signature?: ITssSigMessageObject['signature']; }> { + async getMessagesForParty(params: { id: string; round: number; copayerId: string }): Promise<{ messages?: ITssSigMessageObject[]; signature?: ITssSigMessageObject['signature'] }> { const { id, round, copayerId } = params; const storage = WalletService.getStorage(); @@ -299,7 +299,7 @@ class TssSignClass { return {}; } - async processMessage(params: { id: string; message: ITssSigMessageObject; m?: string | number; copayerId: string; }) { + async processMessage(params: { id: string; message: ITssSigMessageObject; m?: string | number; copayerId: string }) { const { id, message, m, copayerId } = params; if (!id || typeof id !== 'string') { throw Errors.TSS_GENERIC_ERROR.withMessage('Invalid id provided: ' + id); @@ -365,7 +365,7 @@ class TssSignClass { typeof message?.p2pMessages?.[0]?.payload?.signature === 'string'; } - private async _initSession(params: { id: string; message: ITssSigMessageObject; m: number | string; storage: Storage; copayerId: string; }) { + private async _initSession(params: { id: string; message: ITssSigMessageObject; m: number | string; storage: Storage; copayerId: string }) { const { id, message, storage, copayerId } = params; const m = parseInt(params.m as string); if (!m || m < 1) { @@ -384,7 +384,7 @@ class TssSignClass { } } - private async _pushMessage(params: { id: string; session: TssSigGenModel; message: ITssSigMessageObject; storage: Storage; }) { + private async _pushMessage(params: { id: string; session: TssSigGenModel; message: ITssSigMessageObject; storage: Storage }) { const { id, session, message, storage } = params; const { round } = message; @@ -415,7 +415,7 @@ class TssSignClass { } } - async storeSignature(params: { id: string; signature: ITssSigMessageObject['signature']; }) { + async storeSignature(params: { id: string; signature: ITssSigMessageObject['signature'] }) { const { id, signature } = params; if (!signature) { throw Errors.TSS_NO_FINAL_SIGNATURE; diff --git a/packages/bitcore-wallet-service/src/types/chain.d.ts b/packages/bitcore-wallet-service/src/types/chain.d.ts index 481aaf4b36c..2354e937126 100644 --- a/packages/bitcore-wallet-service/src/types/chain.d.ts +++ b/packages/bitcore-wallet-service/src/types/chain.d.ts @@ -30,7 +30,7 @@ export interface IChain { getTransactionCount(server: WalletService, wallet: IWallet, from: string); getChangeAddress(server: WalletService, wallet: IWallet, opts: { changeAddress: string } & any); checkDust(output: { amount: number; toAddress: string; valid: boolean }, opts: { outputs: any[] } & any); - checkScriptOutput(output: { script: string; amount: number; }); + checkScriptOutput(output: { script: string; amount: number }); getFee(server: WalletService, wallet: IWallet, opts: { fee: number; feePerKb: number; signatures?: number } & any); getBitcoreTx(txp: TxProposal, opts: { signed: boolean }); convertFeePerKb(p: number, feePerKb: number); diff --git a/packages/bitcore-wallet-service/src/types/expressapp.d.ts b/packages/bitcore-wallet-service/src/types/expressapp.d.ts index 89cc9aad6a1..12dd0ee4070 100644 --- a/packages/bitcore-wallet-service/src/types/expressapp.d.ts +++ b/packages/bitcore-wallet-service/src/types/expressapp.d.ts @@ -1,7 +1,7 @@ import express from 'express'; import { WalletService } from 'src/lib/server'; -export interface ApiCredentials { copayerId: string; signature: string; session: string; } +export interface ApiCredentials { copayerId: string; signature: string; session: string } export interface ServerOpts { allowSession?: boolean; silentFailure?: boolean; onlySupportStaff?: boolean; onlyMarketingStaff?: boolean } export interface AuthRequestOpts { allowSession?: boolean; silentFailure?: boolean; onlySupportStaff?: boolean; onlyMarketingStaff?: boolean } diff --git a/packages/bitcore-wallet-service/test/integration/server.test.ts b/packages/bitcore-wallet-service/test/integration/server.test.ts index 5eb95481d42..41622aea692 100644 --- a/packages/bitcore-wallet-service/test/integration/server.test.ts +++ b/packages/bitcore-wallet-service/test/integration/server.test.ts @@ -6716,7 +6716,7 @@ describe('Wallet service', function() { sendMax?: boolean; fromSegwit: boolean; utxos: (number | string)[]; - outputs: { toAddress: string, amount: number }[]; + outputs: { toAddress: string; amount: number }[]; vSize?: number; n?: number; m?: number; @@ -7248,7 +7248,7 @@ describe('Wallet service', function() { name: string; requiredFeeRate: number; utxos: (number | string)[]; - outputs: { toAddress: string, amount?: number }[]; + outputs: { toAddress: string; amount?: number }[]; n?: number; sendMax?: boolean; fromSegwit?: boolean; diff --git a/packages/bitcore-wallet-service/test/utils.test.ts b/packages/bitcore-wallet-service/test/utils.test.ts index 31258271ca3..da9f03f047e 100644 --- a/packages/bitcore-wallet-service/test/utils.test.ts +++ b/packages/bitcore-wallet-service/test/utils.test.ts @@ -127,7 +127,7 @@ describe('Utils', function() { describe('#formatAmount', function() { it('should successfully format amount', function() { - const cases: Array<{ args: [number, string, any?], expected: string }> = [{ + const cases: Array<{ args: [number, string, any?]; expected: string }> = [{ args: [1, 'bit'], expected: '0', }, { From 80ed387053dd6413442d26690bb662b788f2066f Mon Sep 17 00:00:00 2001 From: Micah Maphet Date: Fri, 31 Oct 2025 11:07:55 -0400 Subject: [PATCH 3/4] fixed errors and missed linting in bws --- .../scripts/v8tool-list.ts | 2 +- .../bitcore-wallet-service/scripts/v8tool.ts | 6 +- packages/bitcore-wallet-service/src/app.ts | 6 +- packages/bitcore-wallet-service/src/bws.ts | 4 +- packages/bitcore-wallet-service/src/config.ts | 1 + .../src/externalservices/banxa.ts | 10 +-- .../src/externalservices/changelly.ts | 24 +++---- .../src/externalservices/moonpay.ts | 12 ++-- .../src/externalservices/oneInch.ts | 2 +- .../src/externalservices/ramp.ts | 10 ++- .../src/externalservices/sardine.ts | 4 +- .../src/externalservices/simplex.ts | 2 +- .../src/externalservices/thorswap.ts | 4 +- .../src/externalservices/transak.ts | 2 +- .../src/lib/blockchainexplorers/v8.ts | 1 + .../src/lib/blockchainexplorers/v8/client.ts | 2 +- .../src/lib/chain/btc/index.ts | 8 +-- .../src/lib/chain/index.ts | 2 +- .../src/lib/chain/xrp/index.ts | 12 ++-- .../src/lib/common/utils.ts | 6 +- .../src/lib/emailservice.ts | 2 +- .../src/lib/fiatrateservice.ts | 7 +- .../src/lib/model/address.ts | 2 +- .../src/lib/model/txproposalaction.ts | 4 +- .../src/lib/model/wallet.ts | 6 +- .../src/lib/pushnotificationsservice.ts | 2 +- .../bitcore-wallet-service/src/lib/server.ts | 2 +- .../bitcore-wallet-service/src/lib/stats.ts | 2 +- .../bitcore-wallet-service/src/lib/storage.ts | 2 +- .../test/chain/bch.test.ts | 4 +- .../test/expressapp.test.ts | 9 +-- .../test/integration/bcmonitor.test.ts | 4 +- .../integration/emailnotifications.test.ts | 66 +++++++++---------- .../test/integration/helpers.ts | 34 +++++----- .../test/integration/history.test.ts | 14 ++-- .../test/integration/server.test.ts | 1 + .../bitcore-wallet-service/test/lock.test.ts | 4 +- .../test/model/addressmanager.test.ts | 2 +- .../test/model/txproposal.test.ts | 22 +++---- .../test/storage.test.ts | 56 ++++++++-------- .../bitcore-wallet-service/test/utils.test.ts | 12 ++-- .../bitcore-wallet-service/test/v8.test.ts | 2 +- 42 files changed, 192 insertions(+), 187 deletions(-) diff --git a/packages/bitcore-wallet-service/scripts/v8tool-list.ts b/packages/bitcore-wallet-service/scripts/v8tool-list.ts index 28b7664da27..1e26d95cb6f 100755 --- a/packages/bitcore-wallet-service/scripts/v8tool-list.ts +++ b/packages/bitcore-wallet-service/scripts/v8tool-list.ts @@ -71,7 +71,7 @@ r.on('data', raw => { }); r.on('end', () => { - let txs = [], + const txs = [], unconf = []; _.each(acum.split(/\r?\n/), rawTx => { if (!rawTx) return; diff --git a/packages/bitcore-wallet-service/scripts/v8tool.ts b/packages/bitcore-wallet-service/scripts/v8tool.ts index ed807c5cb0d..39c8afe6b17 100755 --- a/packages/bitcore-wallet-service/scripts/v8tool.ts +++ b/packages/bitcore-wallet-service/scripts/v8tool.ts @@ -24,7 +24,7 @@ if (!authKey) throw new Error('provide authKey'); // const authKeyObj = BitcoreLib.PrivateKey(authKey); -let tmp = authKeyObj.toObject(); +const tmp = authKeyObj.toObject(); tmp.compressed = false; const pubKey = BitcoreLib.PrivateKey(tmp).toPublicKey(); @@ -40,10 +40,10 @@ const BASE = { DOGE: `https://api.bitcore.io/api/${coin}/${network}`, LTC: `https://api.bitcore.io/api/${coin}/${network}` }; -let baseUrl = BASE[coin]; +const baseUrl = BASE[coin]; console.log('[v8tool.ts.37:baseUrl:]', baseUrl); // TODO -let client = new Client({ +const client = new Client({ baseUrl, authKey: authKeyObj }); diff --git a/packages/bitcore-wallet-service/src/app.ts b/packages/bitcore-wallet-service/src/app.ts index da7adac41db..a5867798b34 100644 --- a/packages/bitcore-wallet-service/src/app.ts +++ b/packages/bitcore-wallet-service/src/app.ts @@ -1,9 +1,9 @@ #!/usr/bin/env node -var spawn = require('child_process').spawn; -var async = require('async'); +import { spawn } from 'child_process'; +import async from 'async'; -var scripts = [ +const scripts = [ 'locker/locker.js', 'messagebroker/messagebroker.js', 'bcmonitor/bcmonitor.js', diff --git a/packages/bitcore-wallet-service/src/bws.ts b/packages/bitcore-wallet-service/src/bws.ts index a171f7ce935..6eec71b872a 100755 --- a/packages/bitcore-wallet-service/src/bws.ts +++ b/packages/bitcore-wallet-service/src/bws.ts @@ -2,11 +2,13 @@ import cluster from 'cluster'; import * as fs from 'fs'; import 'source-map-support/register'; +import os from 'os'; import config from './config'; import { ExpressApp } from './lib/expressapp'; import logger from './lib/logger'; const port = process.env.BWS_PORT || config.port || 3232; +// eslint-disable-next-line @typescript-eslint/no-require-imports const serverModule = config.https ? require('https') : require('http'); const serverOpts: { @@ -61,7 +63,7 @@ function startInstance() { if (config.cluster && cluster.isMaster) { // Count the machine's CPUs - const instances = config.clusterInstances || require('os').cpus().length; + const instances = config.clusterInstances || os.cpus().length; logger.info('Starting ' + instances + ' instances'); diff --git a/packages/bitcore-wallet-service/src/config.ts b/packages/bitcore-wallet-service/src/config.ts index f3fe0057c1a..ada0d2b1aee 100644 --- a/packages/bitcore-wallet-service/src/config.ts +++ b/packages/bitcore-wallet-service/src/config.ts @@ -477,6 +477,7 @@ const Config = (): any => { // Override default values with bws.config.js' values, if present try { + // eslint-disable-next-line @typescript-eslint/no-require-imports const bwsConfig = require('../../bws.config'); defaultConfig = _.merge(defaultConfig, bwsConfig); } catch { diff --git a/packages/bitcore-wallet-service/src/externalservices/banxa.ts b/packages/bitcore-wallet-service/src/externalservices/banxa.ts index 0a1057d1084..8d7757c430d 100644 --- a/packages/bitcore-wallet-service/src/externalservices/banxa.ts +++ b/packages/bitcore-wallet-service/src/externalservices/banxa.ts @@ -34,7 +34,7 @@ export class BanxaService { } private getBanxaSignature(method: 'get' | 'post', endpoint: string, apiKey: string, secret: string, body?: string) { - let signature, auth: string; + let signature; const nonce = Date.now().toString(); switch (method) { @@ -51,7 +51,7 @@ export class BanxaService { } const localSignature = crypto.createHmac('sha256', secret).update(signature).digest('hex'); - auth = `${apiKey}:${localSignature}:${nonce}`; + const auth = `${apiKey}:${localSignature}:${nonce}`; return auth; } @@ -102,7 +102,7 @@ export class BanxaService { const API_KEY = keys.API_KEY; const SECRET_KEY = keys.SECRET_KEY; - let qs: string[] = []; + const qs: string[] = []; if (req.body.source) qs.push('source=' + req.body.source); if (req.body.target) qs.push('target=' + req.body.target); @@ -143,7 +143,7 @@ export class BanxaService { return reject(new ClientError("Banxa's request missing arguments")); } - let qs: string[] = []; + const qs: string[] = []; qs.push('source=' + req.body.source); qs.push('target=' + req.body.target); @@ -230,7 +230,7 @@ export class BanxaService { return reject(new ClientError("Banxa's request missing arguments")); } - let qs: string[] = []; + const qs: string[] = []; if (req.body.fx_currency) qs.push('fx_currency=' + req.body.fx_currency); const UriPath = `/orders/${req.body.order_id}${qs.length > 0 ? '?' + qs.join('&') : ''}`; diff --git a/packages/bitcore-wallet-service/src/externalservices/changelly.ts b/packages/bitcore-wallet-service/src/externalservices/changelly.ts index 63339279e62..cd0a371ffff 100644 --- a/packages/bitcore-wallet-service/src/externalservices/changelly.ts +++ b/packages/bitcore-wallet-service/src/externalservices/changelly.ts @@ -47,7 +47,7 @@ export class ChangellyService { changellyGetCurrencies(req): Promise { return new Promise((resolve, reject) => { - let keys, headers; + let keys; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { @@ -67,7 +67,7 @@ export class ChangellyService { const URL: string = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); - headers = { + const headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), @@ -93,7 +93,7 @@ export class ChangellyService { changellyGetPairsParams(req): Promise { return new Promise((resolve, reject) => { - let keys, headers; + let keys; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { @@ -118,7 +118,7 @@ export class ChangellyService { const URL: string = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); - headers = { + const headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), @@ -144,7 +144,7 @@ export class ChangellyService { changellyGetFixRateForAmount(req): Promise { return new Promise((resolve, reject) => { - let keys, headers; + let keys; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { @@ -170,7 +170,7 @@ export class ChangellyService { const URL: string = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); - headers = { + const headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), @@ -196,7 +196,7 @@ export class ChangellyService { changellyCreateFixTransaction(req): Promise { return new Promise((resolve, reject) => { - let keys, headers; + let keys; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { @@ -233,7 +233,7 @@ export class ChangellyService { const URL: string = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); - headers = { + const headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), @@ -259,7 +259,7 @@ export class ChangellyService { changellyGetTransactions(req): Promise { return new Promise((resolve, reject) => { - let keys, headers; + let keys; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { @@ -283,7 +283,7 @@ export class ChangellyService { const URL: string = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); - headers = { + const headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), @@ -309,7 +309,7 @@ export class ChangellyService { changellyGetStatus(req): Promise { return new Promise((resolve, reject) => { - let keys, headers; + let keys; if (req.body.useV2) { keys = this.changellyGetKeysV2(req); } else { @@ -331,7 +331,7 @@ export class ChangellyService { const URL: string = keys.API; const { signature, publicKey } = this.changellySignRequestsV2(message, keys.SECRET); - headers = { + const headers = { 'Content-Type': 'application/json', 'X-Api-Key': crypto.createHash('sha256').update(publicKey).digest('base64'), 'X-Api-Signature': signature.toString('base64'), diff --git a/packages/bitcore-wallet-service/src/externalservices/moonpay.ts b/packages/bitcore-wallet-service/src/externalservices/moonpay.ts index bf3bb3a7648..a498176c7db 100644 --- a/packages/bitcore-wallet-service/src/externalservices/moonpay.ts +++ b/packages/bitcore-wallet-service/src/externalservices/moonpay.ts @@ -78,7 +78,7 @@ export class MoonpayService { 'Content-Type': 'application/json' }; - let qs: string[] = []; + const qs: string[] = []; qs.push('apiKey=' + API_KEY); qs.push('baseCurrencyAmount=' + req.body.baseCurrencyAmount); qs.push('baseCurrencyCode=' + req.body.baseCurrencyCode); @@ -120,7 +120,7 @@ export class MoonpayService { 'Content-Type': 'application/json' }; - let qs: string[] = []; + const qs: string[] = []; qs.push('apiKey=' + API_KEY); qs.push('quoteCurrencyCode=' + req.body.quoteCurrencyCode); qs.push('baseCurrencyAmount=' + req.body.baseCurrencyAmount); @@ -161,7 +161,7 @@ export class MoonpayService { 'Content-Type': 'application/json' }; - let qs: string[] = []; + const qs: string[] = []; qs.push('apiKey=' + API_KEY); qs.push('baseCurrencyCode=' + encodeURIComponent(req.body.baseCurrencyCode)); if (req.body.areFeesIncluded) qs.push('areFeesIncluded=' + encodeURIComponent(req.body.areFeesIncluded)); @@ -297,7 +297,7 @@ export class MoonpayService { }; let URL: string = ''; - let qs: string[] = []; + const qs: string[] = []; qs.push('apiKey=' + API_KEY); if (req.body.transactionId) { URL = API + `/v1/transactions/${req.body.transactionId}?${qs.join('&')}`; @@ -337,7 +337,7 @@ export class MoonpayService { }; let URL: string = ''; - let qs: string[] = []; + const qs: string[] = []; qs.push('apiKey=' + API_KEY); if (req.body.transactionId) { URL = API + `/v3/sell_transactions/${req.body.transactionId}?${qs.join('&')}`; @@ -411,7 +411,7 @@ export class MoonpayService { 'Content-Type': 'application/json' }; - let qs: string[] = []; + const qs: string[] = []; qs.push('apiKey=' + API_KEY); const URL = API + `/v3/accounts/me?${qs.join('&')}`; diff --git a/packages/bitcore-wallet-service/src/externalservices/oneInch.ts b/packages/bitcore-wallet-service/src/externalservices/oneInch.ts index e38b5ed5983..103dc9181aa 100644 --- a/packages/bitcore-wallet-service/src/externalservices/oneInch.ts +++ b/packages/bitcore-wallet-service/src/externalservices/oneInch.ts @@ -61,7 +61,7 @@ export class OneInchService { 'Content-Type': 'application/json' }; - let qs: string[] = []; + const qs: string[] = []; qs.push('fromTokenAddress=' + req.body.fromTokenAddress); qs.push('toTokenAddress=' + req.body.toTokenAddress); qs.push('amount=' + req.body.amount); diff --git a/packages/bitcore-wallet-service/src/externalservices/ramp.ts b/packages/bitcore-wallet-service/src/externalservices/ramp.ts index 5a92335c0fb..132e7d457b1 100644 --- a/packages/bitcore-wallet-service/src/externalservices/ramp.ts +++ b/packages/bitcore-wallet-service/src/externalservices/ramp.ts @@ -167,9 +167,8 @@ export class RampService { const headers = { 'Content-Type': 'application/json' }; - let URL: string; - let qs: string[] = []; + const qs: string[] = []; // "Buy" and "Sell" features use the same properties. Use "flow" to target the correct endpoint qs.push('hostApiKey=' + API_KEY); if (req.body.currencyCode) qs.push('currencyCode=' + encodeURIComponent(req.body.currencyCode)); @@ -180,7 +179,7 @@ export class RampService { qs.push('userIp=' + encodeURIComponent(ip)); } - URL = API + `/host-api/v3${req.body.flow && req.body.flow === 'sell' ? '/offramp' : ''}/assets?${qs.join('&')}`; + const URL = API + `/host-api/v3${req.body.flow && req.body.flow === 'sell' ? '/offramp' : ''}/assets?${qs.join('&')}`; this.request.get( URL, @@ -211,12 +210,11 @@ export class RampService { const headers = { 'Content-Type': 'application/json' }; - let URL: string; - let qs: string[] = []; + const qs: string[] = []; qs.push('secret=' + req.body.saleViewToken); - URL = API + `/host-api/v3/offramp/sale/${req.body.id}?${qs.join('&')}`; + const URL = API + `/host-api/v3/offramp/sale/${req.body.id}?${qs.join('&')}`; this.request.get( URL, diff --git a/packages/bitcore-wallet-service/src/externalservices/sardine.ts b/packages/bitcore-wallet-service/src/externalservices/sardine.ts index b72fa0411b8..a6415b270c8 100644 --- a/packages/bitcore-wallet-service/src/externalservices/sardine.ts +++ b/packages/bitcore-wallet-service/src/externalservices/sardine.ts @@ -49,7 +49,7 @@ export class SardineService { Authorization: `Basic ${secretBase64}`, }; - let qs: string[] = []; + const qs: string[] = []; qs.push('asset_type=' + req.body.asset_type); qs.push('network=' + req.body.network); qs.push('total=' + req.body.total); @@ -203,7 +203,7 @@ export class SardineService { Authorization: `Basic ${secretBase64}`, }; - let qs: string[] = []; + const qs: string[] = []; let URL: string = ''; if (req.body.orderId) { diff --git a/packages/bitcore-wallet-service/src/externalservices/simplex.ts b/packages/bitcore-wallet-service/src/externalservices/simplex.ts index eaae637e47f..a207577e030 100644 --- a/packages/bitcore-wallet-service/src/externalservices/simplex.ts +++ b/packages/bitcore-wallet-service/src/externalservices/simplex.ts @@ -120,7 +120,7 @@ export class SimplexService { headers['x-country-code'] = req.body.userCountry.toUpperCase(); } - let qs: string[] = []; + const qs: string[] = []; qs.push('base_currency=' + req.body.base_currency); qs.push('base_amount=' + req.body.base_amount); qs.push('quote_currency=' + req.body.quote_currency); diff --git a/packages/bitcore-wallet-service/src/externalservices/thorswap.ts b/packages/bitcore-wallet-service/src/externalservices/thorswap.ts index 012deb2c893..0109be4379c 100644 --- a/packages/bitcore-wallet-service/src/externalservices/thorswap.ts +++ b/packages/bitcore-wallet-service/src/externalservices/thorswap.ts @@ -81,7 +81,7 @@ export class ThorswapService { 'x-api-key': API_KEY }; - let qs: string[] = []; + const qs: string[] = []; qs.push('categories=' + (req?.body?.categories ?? 'all')); const uriPath: string = req?.body?.includeDetails ? '/tokenlist/utils/currencies/details' : '/tokenlist/utils/currencies'; @@ -118,7 +118,7 @@ export class ThorswapService { 'x-api-key': API_KEY }; - let qs: string[] = []; + const qs: string[] = []; if (!checkRequired(req.body, ['sellAsset', 'buyAsset', 'sellAmount'])) { return reject(new ClientError("Thorswap's request missing arguments")); } diff --git a/packages/bitcore-wallet-service/src/externalservices/transak.ts b/packages/bitcore-wallet-service/src/externalservices/transak.ts index a96303cad41..aea2a9bd957 100644 --- a/packages/bitcore-wallet-service/src/externalservices/transak.ts +++ b/packages/bitcore-wallet-service/src/externalservices/transak.ts @@ -164,7 +164,7 @@ export class TransakService { Accept: 'application/json', }; - let qs: string[] = []; + const qs: string[] = []; qs.push('partnerApiKey=' + API_KEY); qs.push('fiatCurrency=' + req.body.fiatCurrency); qs.push('cryptoCurrency=' + req.body.cryptoCurrency); diff --git a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts index 98c18ee8d18..af01dfb4425 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts @@ -94,6 +94,7 @@ export class V8 { // for testing // this.request = opts.request || request; + // eslint-disable-next-line @typescript-eslint/no-require-imports this.Client = opts.client || Client || require('./v8/client'); } diff --git a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8/client.ts b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8/client.ts index cd9549ecaf3..605e39b2b86 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8/client.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8/client.ts @@ -93,7 +93,7 @@ export class Client { async getCoins(params) { const { payload, pubKey, includeSpent } = params; - var extra = ''; + let extra = ''; if (includeSpent) { extra = `?includeSpent=${includeSpent}`; } diff --git a/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts b/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts index 5971353cfdc..3ded2bd617a 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/btc/index.ts @@ -299,8 +299,8 @@ export class BtcChain implements IChain { const inputSize = this.getEstimatedSizeForSingleInput(txp, opts); const nbInputs = txp.inputs.length; let outputsSize = 0; - let outputs = Array.isArray(txp.outputs) ? txp.outputs : [txp.toAddress]; - let addresses = outputs.map(x => x.toAddress); + const outputs = Array.isArray(txp.outputs) ? txp.outputs : [txp.toAddress]; + const addresses = outputs.map(x => x.toAddress); if (txp.changeAddress) { addresses.push(txp.changeAddress.address); } @@ -368,7 +368,7 @@ export class BtcChain implements IChain { * txp.inputs clean txp.input * removes possible nSequence number (BIP68) */ - let inputs = txp.inputs.map(x => { + const inputs = txp.inputs.map(x => { return { address: x.address, txid: x.txid, @@ -464,7 +464,7 @@ export class BtcChain implements IChain { }; if (txp.outputs && Array.isArray(txp.outputs)) { - for (let output of txp.outputs) { + for (const output of txp.outputs) { if (output.script && output.script.startsWith('6a')) { // check OP_RETURN serializationOpts.disableDustOutputs = true; } diff --git a/packages/bitcore-wallet-service/src/lib/chain/index.ts b/packages/bitcore-wallet-service/src/lib/chain/index.ts index e8779dcc35c..0ab68fa815a 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/index.ts @@ -175,4 +175,4 @@ class ChainProxy { } } -export let ChainService = new ChainProxy(); +export const ChainService = new ChainProxy(); diff --git a/packages/bitcore-wallet-service/src/lib/chain/xrp/index.ts b/packages/bitcore-wallet-service/src/lib/chain/xrp/index.ts index 1c2f8b75c4e..357088ef62f 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/xrp/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/xrp/index.ts @@ -166,12 +166,12 @@ export class XrpChain implements IChain { }); unsignedTxs.push(rawTx); } - let tx = { + const tx = { uncheckedSerialize: () => unsignedTxs, txid: () => txp.txid, txids: () => txp.txid ? [txp.txid] : [], toObject: () => { - let ret = _.clone(txp); + const ret = _.clone(txp); ret.outputs[0].satoshis = ret.outputs[0].amount; return ret; }, @@ -184,7 +184,7 @@ export class XrpChain implements IChain { if (opts.signed) { const sigs = txp.getCurrentSignatures(); for (const x of sigs) { - this.addSignaturesToBitcoreTx(tx, x.signatures); + this.addSignaturesToBitcoreTx(tx, txp.inputs, txp.inputPaths, x.signatures, x.xpub); } } @@ -204,7 +204,7 @@ export class XrpChain implements IChain { } } - checkTxUTXOs(server, txp, opts, cb) { + checkTxUTXOs(_server, _txp, _opts, cb) { return cb(); } @@ -223,7 +223,7 @@ export class XrpChain implements IChain { }); } - checkUtxos(/* opts */) { } + checkUtxos(_opts) { } checkValidTxAmount(output): boolean { if (!Utils.isNumber(output.amount) || isNaN(output.amount) || output.amount < 0) { @@ -252,7 +252,7 @@ export class XrpChain implements IChain { if (network != 'livenet') address.address += ':' + network; } - addSignaturesToBitcoreTx(tx, signatures) { + addSignaturesToBitcoreTx(tx, inputs, inputPaths, signatures, xpub) { if (signatures.length === 0) { throw new Error('Signatures Required'); } diff --git a/packages/bitcore-wallet-service/src/lib/common/utils.ts b/packages/bitcore-wallet-service/src/lib/common/utils.ts index c4d9d7b89d4..61677f4695d 100644 --- a/packages/bitcore-wallet-service/src/lib/common/utils.ts +++ b/packages/bitcore-wallet-service/src/lib/common/utils.ts @@ -191,8 +191,8 @@ export const Utils = { } const u = Object.assign({}, UNITS[unit], opts); - var decimals = opts.decimals ? opts.decimals : u; - var toSatoshis = opts.toSatoshis ? opts.toSatoshis : u.toSatoshis; + const decimals = opts.decimals ? opts.decimals : u; + const toSatoshis = opts.toSatoshis ? opts.toSatoshis : u.toSatoshis; const amount = (satoshis / toSatoshis).toFixed(decimals.maxDecimals); return addSeparators(amount, opts.thousandsSeparator || ',', opts.decimalSeparator || '.', decimals.minDecimals); @@ -410,7 +410,7 @@ export const Utils = { // compare concatenated strings for multiple key sorting let aVal = ''; let bVal = ''; - for (let k of keys) { + for (const k of keys) { const [aTemp, bTemp] = transformVals( Array.isArray(k) ? k.reduce((val, key) => val[key], a) : a[k], Array.isArray(k) ? k.reduce((val, key) => val[key], b) : b[k] diff --git a/packages/bitcore-wallet-service/src/lib/emailservice.ts b/packages/bitcore-wallet-service/src/lib/emailservice.ts index 2ef67af202b..b343e3df4b3 100644 --- a/packages/bitcore-wallet-service/src/lib/emailservice.ts +++ b/packages/bitcore-wallet-service/src/lib/emailservice.ts @@ -396,7 +396,7 @@ export class EmailService { try { let unit = recipient.unit.toLowerCase(); let label = UNIT_LABELS[unit]; - let opts = {} as any; + const opts = {} as any; if (data.tokenAddress) { const tokenAddress = data.tokenAddress.toLowerCase(); if (Constants.ETH_TOKEN_OPTS[tokenAddress]) { diff --git a/packages/bitcore-wallet-service/src/lib/fiatrateservice.ts b/packages/bitcore-wallet-service/src/lib/fiatrateservice.ts index b20d5c646e7..fde8dcde30c 100644 --- a/packages/bitcore-wallet-service/src/lib/fiatrateservice.ts +++ b/packages/bitcore-wallet-service/src/lib/fiatrateservice.ts @@ -170,7 +170,7 @@ export class FiatRateService { const now = Date.now(); const ts = opts.ts ? opts.ts : now; let fiatFiltered = []; - let rates = []; + const rates = []; if (opts.code) { fiatFiltered = Defaults.FIAT_CURRENCIES.filter(c => c.code === opts.code); @@ -208,7 +208,7 @@ export class FiatRateService { }, (err, res: any) => { if (err) return cb(err); - var obj = {}; + const obj = {}; obj[coin] = res; return cb(null, obj); } @@ -224,7 +224,8 @@ export class FiatRateService { getRatesByCoin(opts, cb) { $.shouldBeFunction(cb, 'Failed state: type error (cb not a function) at '); - let { coin, code } = opts; + let { coin } = opts; + const { code } = opts; const ts = opts.ts || Date.now(); if (Constants.BITPAY_USD_STABLECOINS[coin.toUpperCase()]) { diff --git a/packages/bitcore-wallet-service/src/lib/model/address.ts b/packages/bitcore-wallet-service/src/lib/model/address.ts index 1310645245c..7fbc07f6060 100644 --- a/packages/bitcore-wallet-service/src/lib/model/address.ts +++ b/packages/bitcore-wallet-service/src/lib/model/address.ts @@ -139,7 +139,7 @@ export class Address { break; case Constants.SCRIPT_TYPES.P2SH: if (escrowInputs) { - var xpub = new Address.Bitcore[chain].HDPublicKey(publicKeyRing[0].xPubKey); + const xpub = new Address.Bitcore[chain].HDPublicKey(publicKeyRing[0].xPubKey); const inputPublicKeys = escrowInputs.map(input => xpub.deriveChild(input.path).publicKey); bitcoreAddress = Address.Bitcore[chain].Address.createEscrow(inputPublicKeys, publicKeys[0], network); publicKeys = [publicKeys[0], ...inputPublicKeys]; diff --git a/packages/bitcore-wallet-service/src/lib/model/txproposalaction.ts b/packages/bitcore-wallet-service/src/lib/model/txproposalaction.ts index d01a4cee511..5f1d29052d2 100644 --- a/packages/bitcore-wallet-service/src/lib/model/txproposalaction.ts +++ b/packages/bitcore-wallet-service/src/lib/model/txproposalaction.ts @@ -19,7 +19,7 @@ export class TxProposalAction { static create(opts) { opts = opts || {}; - let x = new TxProposalAction(); + const x = new TxProposalAction(); x.version = '1.0.0'; x.createdOn = Math.floor(Date.now() / 1000); @@ -33,7 +33,7 @@ export class TxProposalAction { } static fromObj(obj) { - let x = new TxProposalAction(); + const x = new TxProposalAction(); x.version = obj.version; x.createdOn = obj.createdOn; diff --git a/packages/bitcore-wallet-service/src/lib/model/wallet.ts b/packages/bitcore-wallet-service/src/lib/model/wallet.ts index d5e746e3784..e74b684d713 100644 --- a/packages/bitcore-wallet-service/src/lib/model/wallet.ts +++ b/packages/bitcore-wallet-service/src/lib/model/wallet.ts @@ -119,7 +119,7 @@ export class Wallet implements IWallet<() => boolean> { opts = opts || {} as any; const chain = opts.chain || opts.coin; - let x = new Wallet(); + const x = new Wallet(); $.shouldBeNumber(opts.m); $.shouldBeNumber(opts.n); @@ -172,7 +172,7 @@ export class Wallet implements IWallet<() => boolean> { } static fromObj(obj: IWallet) { - let x = new Wallet(); + const x = new Wallet(); $.shouldBeNumber(obj.m); $.shouldBeNumber(obj.n); @@ -252,7 +252,7 @@ export class Wallet implements IWallet<() => boolean> { const bitcore = Bitcore[chain]; const salt = config.BE_KEY_SALT || Defaults.BE_KEY_SALT; - var seed = (this.copayers || []).map(c => c.xPubKey) + let seed = (this.copayers || []).map(c => c.xPubKey) .sort() .join('') + Utils.getGenericName(this.network) + // Maintaining compatibility with previous versions diff --git a/packages/bitcore-wallet-service/src/lib/pushnotificationsservice.ts b/packages/bitcore-wallet-service/src/lib/pushnotificationsservice.ts index e05114187b3..a67992f9e4f 100644 --- a/packages/bitcore-wallet-service/src/lib/pushnotificationsservice.ts +++ b/packages/bitcore-wallet-service/src/lib/pushnotificationsservice.ts @@ -495,7 +495,7 @@ export class PushNotificationsService { try { let unit = recipient.unit.toLowerCase(); let label = UNIT_LABELS[unit]; - let opts = {} as any; + const opts = {} as any; if (data.tokenAddress) { const tokenAddress = data.tokenAddress.toLowerCase(); if (Constants.ETH_TOKEN_OPTS[tokenAddress]) { diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 750f1e90b58..192bfcc37bc 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -3305,7 +3305,7 @@ export class WalletService implements IWalletService { return cb(Err); } - this.getTx({ txProposalId: opts.txProposalId}, (err, txp) => { + this.getTx({ txProposalId: opts.txProposalId }, (err, txp) => { if (err) return cb(err); if (txp.status == 'broadcasted') return cb(Errors.TX_ALREADY_BROADCASTED); diff --git a/packages/bitcore-wallet-service/src/lib/stats.ts b/packages/bitcore-wallet-service/src/lib/stats.ts index a6a0fc9f42c..3c90186f23b 100644 --- a/packages/bitcore-wallet-service/src/lib/stats.ts +++ b/packages/bitcore-wallet-service/src/lib/stats.ts @@ -25,7 +25,7 @@ export class Stats { } run(cb) { - let dbConfig = config.storageOpts.mongoDb; + const dbConfig = config.storageOpts.mongoDb; let uri = dbConfig.uri; // Always for stats! diff --git a/packages/bitcore-wallet-service/src/lib/storage.ts b/packages/bitcore-wallet-service/src/lib/storage.ts index 5bbc94802ed..118837f219d 100644 --- a/packages/bitcore-wallet-service/src/lib/storage.ts +++ b/packages/bitcore-wallet-service/src/lib/storage.ts @@ -1226,7 +1226,7 @@ export class Storage { async.each( rates, (rate: { code: string; value: string }, next) => { - let i = { + const i = { ts: now, coin, code: rate.code, diff --git a/packages/bitcore-wallet-service/test/chain/bch.test.ts b/packages/bitcore-wallet-service/test/chain/bch.test.ts index 8505d2f6c98..85da84d13e9 100644 --- a/packages/bitcore-wallet-service/test/chain/bch.test.ts +++ b/packages/bitcore-wallet-service/test/chain/bch.test.ts @@ -36,14 +36,14 @@ describe('Chain BCH', function() { }); it('1 input p2pkh, 1 output p2pkh: Margin should be 10%', function() { - let x = TxProposal.fromObj(aTXP()); + const x = TxProposal.fromObj(aTXP()); delete x.changeAddress; x.outputs.pop(); x.addressType = Constants.SCRIPT_TYPES.P2PKH; const estimatedLength = bch.getEstimatedSize(x); // Create a similar TX. - let tx = new BitcoreLibCash.Transaction(); + const tx = new BitcoreLibCash.Transaction(); tx.from(simpleUtxoWith1BTC) .to([{ address: toAddress, satoshis: 1e8-7000 }]) .sign(privateKey); diff --git a/packages/bitcore-wallet-service/test/expressapp.test.ts b/packages/bitcore-wallet-service/test/expressapp.test.ts index 76d080b1e0b..f245bcefb04 100644 --- a/packages/bitcore-wallet-service/test/expressapp.test.ts +++ b/packages/bitcore-wallet-service/test/expressapp.test.ts @@ -43,12 +43,12 @@ describe('ExpressApp', function() { }); describe('Routes', function() { - var testPort = 3239; - var testHost = 'http://127.0.0.1'; - var httpServer; + const testPort = 3239; + const testHost = 'http://127.0.0.1'; + let httpServer; function start(ExpressApp, done) { - var app = new ExpressApp(); + const app = new ExpressApp(); httpServer = new http.Server(app.app); app.start(config, function(err) { @@ -79,6 +79,7 @@ describe('ExpressApp', function() { request(requestOptions, function(err, res, body) { should.not.exist(err); should.exist(res.headers['x-service-version']); + // eslint-disable-next-line @typescript-eslint/no-require-imports res.headers['x-service-version'].should.equal('bws-' + require('../package').version); res.statusCode.should.equal(200); body.should.equal('{}'); diff --git a/packages/bitcore-wallet-service/test/integration/bcmonitor.test.ts b/packages/bitcore-wallet-service/test/integration/bcmonitor.test.ts index 8e9bcc1bd7f..6034fbbcaf1 100644 --- a/packages/bitcore-wallet-service/test/integration/bcmonitor.test.ts +++ b/packages/bitcore-wallet-service/test/integration/bcmonitor.test.ts @@ -9,7 +9,7 @@ import { Constants } from '../../src/lib/common/constants'; import helpers from './helpers'; const should = chai.should(); -var storage, blockchainExplorer, blockchainExplorerEVM, bcmonitor; +let storage, blockchainExplorer, blockchainExplorerEVM, bcmonitor; const socket = { handlers: {}, @@ -21,7 +21,7 @@ socket.on = function(eventName, handler) { describe('Blockchain monitor', function() { this.timeout(5000); - var server, wallet; + let server, wallet; before(async function() { const res = await helpers.before(); diff --git a/packages/bitcore-wallet-service/test/integration/emailnotifications.test.ts b/packages/bitcore-wallet-service/test/integration/emailnotifications.test.ts index 0d168cf6a5c..10d47c0f50f 100644 --- a/packages/bitcore-wallet-service/test/integration/emailnotifications.test.ts +++ b/packages/bitcore-wallet-service/test/integration/emailnotifications.test.ts @@ -129,11 +129,11 @@ describe('Email notifications', function() { await helpers.createAndPublishTx(server, txOpts, TestData.copayers[0].privKey_1H_0); await sleep(100); // TODO refactor to avoid timeouts - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(2); - var emails = calls.map(c => c.args[0]); + const emails = calls.map(c => c.args[0]); Utils.difference(['copayer2@domain.com', 'copayer3@domain.com'], emails.map(e => e.to)).should.be.empty; - var one = emails[0]; + const one = emails[0]; one.from.should.equal('bws@dummy.net'); one.subject.should.contain('New payment proposal'); should.exist(one.html); @@ -277,11 +277,11 @@ describe('Email notifications', function() { should.not.exist(err); sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(3); - var emails = calls.map(c => c.args[0]); + const emails = calls.map(c => c.args[0]); Utils.difference(['copayer1@domain.com', 'copayer2@domain.com', 'copayer3@domain.com'], emails.map(e => e.to)).should.be.empty; - var one = emails[0]; + const one = emails[0]; one.from.should.equal('bws@dummy.net'); one.subject.should.contain('New payment received'); one.text.should.contain('123,000'); @@ -314,9 +314,9 @@ describe('Email notifications', function() { // Intercept the msg handler so we can run test assersions on callback sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(1); - var email = calls[0].args[0]; + const email = calls[0].args[0]; email.to.should.equal('copayer1@domain.com'); email.from.should.equal('bws@dummy.net'); email.subject.should.contain('Transaction confirmed'); @@ -346,11 +346,11 @@ describe('Email notifications', function() { should.not.exist(err); sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(2); - var emails = calls.map(c => c.args[0]); + const emails = calls.map(c => c.args[0]); Utils.difference(['copayer2@domain.com', 'copayer3@domain.com'], emails.map(e => e.to)).should.be.empty; - var one = emails[0]; + const one = emails[0]; one.from.should.equal('bws@dummy.net'); one.subject.should.contain('New payment received'); one.text.should.contain('123,000'); @@ -385,14 +385,14 @@ describe('Email notifications', function() { // Intercept the msg handler so we can run test assersions on callback sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(3); - var emails = calls.map(c => c.args[0]); - var spanish = emails.find(email => email.to === 'copayer1@domain.com'); + const emails = calls.map(c => c.args[0]); + const spanish = emails.find(email => email.to === 'copayer1@domain.com'); spanish.from.should.equal('bws@dummy.net'); spanish.subject.should.contain('Nuevo pago recibido'); spanish.text.should.contain('0.123 BTC'); - var english = emails.find(email => email.to === 'copayer2@domain.com'); + const english = emails.find(email => email.to === 'copayer2@domain.com'); english.from.should.equal('bws@dummy.net'); english.subject.should.contain('New payment received'); english.text.should.contain('123,000 bits'); @@ -427,7 +427,7 @@ describe('Email notifications', function() { emailService2.mailer = mailerStub; emailService2.sendMail = mailerStub.send; helpers.stubUtxos(server, wallet, 1).then(() => { - var txOpts = { + const txOpts = { outputs: [{ toAddress: '18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount: 0.8e8 @@ -436,7 +436,7 @@ describe('Email notifications', function() { }; helpers.createAndPublishTx(server, txOpts, TestData.copayers[0].privKey_1H_0).then((tx) => { setTimeout(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(2); server.storage.fetchUnsentEmails(function(err, unsent) { should.not.exist(err); @@ -458,11 +458,11 @@ describe('Email notifications', function() { // Intercept the msg handler so we can run test assersions on callback sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(3); - var emails = calls.map(c => c.args[0]); + const emails = calls.map(c => c.args[0]); Utils.difference(['copayer1@domain.com', 'copayer2@domain.com', 'copayer3@domain.com'], emails.map(e => e.to)).should.be.empty; - var one = emails[0]; + const one = emails[0]; one.from.should.equal('bws@dummy.net'); one.subject.should.contain('New payment received'); one.text.should.contain('123,000'); @@ -598,11 +598,11 @@ describe('Email notifications', function() { // Intercept the msg handler so we can run test assersions on callback sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(1); - var emails = calls.map(c => c.args[0]); + const emails = calls.map(c => c.args[0]); Utils.difference(['copayer1@domain.com'], emails.map(e => e.to)).should.be.empty; - var one = emails[0]; + const one = emails[0]; one.from.should.equal('bws@dummy.net'); one.subject.should.contain('New payment received'); one.text.should.contain('0.002213 BCH'); @@ -680,11 +680,11 @@ describe('Email notifications', function() { // Intercept the msg handler so we can run test assersions on callback sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(1); - var emails = calls.map(c => c.args[0]); + const emails = calls.map(c => c.args[0]); Utils.difference(['copayer1@domain.com'], emails.map(e => e.to)).should.be.empty; - var one = emails[0]; + const one = emails[0]; one.from.should.equal('bws@dummy.net'); one.subject.should.contain('New payment received'); one.text.should.contain('4.00 BAT'); @@ -764,11 +764,11 @@ describe('Email notifications', function() { // Intercept the msg handler so we can run test assersions on callback sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(1); - var emails = calls.map(c => c.args[0]); + const emails = calls.map(c => c.args[0]); Utils.difference(['copayer1@domain.com'], emails.map(e => e.to)).should.be.empty; - var one = emails[0]; + const one = emails[0]; one.from.should.equal('bws@dummy.net'); one.subject.should.contain('New payment received'); one.text.should.contain('4.00 USDC'); @@ -799,11 +799,11 @@ describe('Email notifications', function() { // Intercept the msg handler so we can run test assersions on callback sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(1); - var emails = calls.map(c => c.args[0]); + const emails = calls.map(c => c.args[0]); Utils.difference(['copayer1@domain.com'], emails.map(e => e.to)).should.be.empty; - var one = emails[0]; + const one = emails[0]; one.from.should.equal('bws@dummy.net'); one.subject.should.contain('New payment received'); one.text.should.contain('4.00 USDP'); @@ -838,7 +838,7 @@ describe('Email notifications', function() { // Intercept the msg handler so we can run test assersions on callback sendEmailInterceptor(function() { - var calls = mailerStub.send.getCalls(); + const calls = mailerStub.send.getCalls(); calls.length.should.equal(0); done(); }); diff --git a/packages/bitcore-wallet-service/test/integration/helpers.ts b/packages/bitcore-wallet-service/test/integration/helpers.ts index fbbc413fc8a..6d650591247 100644 --- a/packages/bitcore-wallet-service/test/integration/helpers.ts +++ b/packages/bitcore-wallet-service/test/integration/helpers.ts @@ -69,7 +69,7 @@ class Helpers { if (!storage.db) return; // Left overs to be initalized - let be = blockchainExplorer; + const be = blockchainExplorer; be.register = sinon.stub().callsArgWith(1, null, null); be.addAddresses = sinon.stub().callsArgWith(2, null, null); @@ -182,22 +182,22 @@ class Helpers { console.log('var copayers = ['); for (const xPrivKeyStr of xPrivKeys) { - var xpriv = BitcoreLib.HDPrivateKey(xPrivKeyStr); - var xpub = BitcoreLib.HDPublicKey(xpriv); + const xpriv = BitcoreLib.HDPrivateKey(xPrivKeyStr); + const xpub = BitcoreLib.HDPublicKey(xpriv); - var xpriv_45H = xpriv.deriveChild(45, true); - var xpub_45H = BitcoreLib.HDPublicKey(xpriv_45H); - var id45 = Model.Copayer.xPubToCopayerId('btc', xpub_45H.toString()); + const xpriv_45H = xpriv.deriveChild(45, true); + const xpub_45H = BitcoreLib.HDPublicKey(xpriv_45H); + const id45 = Model.Copayer.xPubToCopayerId('btc', xpub_45H.toString()); - var xpriv_44H_0H_0H = xpriv.deriveChild(44, true).deriveChild(0, true).deriveChild(0, true); - var xpub_44H_0H_0H = BitcoreLib.HDPublicKey(xpriv_44H_0H_0H); - var id44btc = Model.Copayer.xPubToCopayerId('btc', xpub_44H_0H_0H.toString()); - var id44bch = Model.Copayer.xPubToCopayerId('bch', xpub_44H_0H_0H.toString()); + const xpriv_44H_0H_0H = xpriv.deriveChild(44, true).deriveChild(0, true).deriveChild(0, true); + const xpub_44H_0H_0H = BitcoreLib.HDPublicKey(xpriv_44H_0H_0H); + const id44btc = Model.Copayer.xPubToCopayerId('btc', xpub_44H_0H_0H.toString()); + const id44bch = Model.Copayer.xPubToCopayerId('bch', xpub_44H_0H_0H.toString()); - var xpriv_1H = xpriv.deriveChild(1, true); - var xpub_1H = BitcoreLib.HDPublicKey(xpriv_1H); - var priv = xpriv_1H.deriveChild(0).privateKey; - var pub = xpub_1H.deriveChild(0).publicKey; + const xpriv_1H = xpriv.deriveChild(1, true); + const xpub_1H = BitcoreLib.HDPublicKey(xpriv_1H); + const priv = xpriv_1H.deriveChild(0).privateKey; + const pub = xpub_1H.deriveChild(0).publicKey; console.log('{id44btc: ', "'" + id44btc + "',"); console.log('id44bch: ', "'" + id44bch + "',"); @@ -355,7 +355,7 @@ class Helpers { if (opts.tokenAddress) { return cb(null, { unconfirmed: 0, confirmed: 2e6, balance: 2e6 }); } - let conf = amounts.map(x => Number((x * 1e18).toFixed(0))).reduce((sum, x) => sum += x, 0); + const conf = amounts.map(x => Number((x * 1e18).toFixed(0))).reduce((sum, x) => sum += x, 0); return cb(null, { unconfirmed: 0, confirmed: conf, balance: conf }); }; blockchainExplorer.estimateFee = sinon.stub().callsArgWith(1, null, 20000000000); @@ -364,7 +364,7 @@ class Helpers { if (wallet.coin == 'eth') { amounts = Array.isArray(amounts) ? amounts : [amounts]; - let conf = amounts.map(x => Number((x * 1e18).toFixed(0))).reduce((sum, x) => sum += x, 0); + const conf = amounts.map(x => Number((x * 1e18).toFixed(0))).reduce((sum, x) => sum += x, 0); blockchainExplorer.getBalance = sinon.stub().callsArgWith(1, null, { unconfirmed: 0, confirmed: conf, balance: conf }); return; } @@ -608,7 +608,7 @@ class Helpers { const mainAddresses = []; const changeAddresses = []; for (let i = 0; i < main + change; i++) { - let isChange = i >= main; + const isChange = i >= main; const address = wallet.createAddress(isChange); await util.promisify(server.storage.storeAddressAndWallet).call(server.storage, wallet, address); if (isChange) { diff --git a/packages/bitcore-wallet-service/test/integration/history.test.ts b/packages/bitcore-wallet-service/test/integration/history.test.ts index 4f08cbbbdf6..3ca7992e623 100644 --- a/packages/bitcore-wallet-service/test/integration/history.test.ts +++ b/packages/bitcore-wallet-service/test/integration/history.test.ts @@ -86,7 +86,7 @@ describe('History', function() { }); it('should filter out DUST amount', function(done) { - let txs= helpers.createTxsV8(50, BCHEIGHT); + const txs= helpers.createTxsV8(50, BCHEIGHT); txs[5].satoshis=100; txs[15].satoshis=10; txs[25].satoshis=1; @@ -352,7 +352,7 @@ describe('History', function() { const _cache = Defaults.CONFIRMATIONS_TO_START_CACHING; Defaults.CONFIRMATIONS_TO_START_CACHING = 10; helpers.stubHistory(100, 10000); - let limit = 20; + const limit = 20; let allTxs = []; // this call is to fill the cache @@ -409,7 +409,7 @@ describe('History', function() { const _cache = Defaults.CONFIRMATIONS_TO_START_CACHING; Defaults.CONFIRMATIONS_TO_START_CACHING = 10; helpers.stubHistory(1000, 10000); // (0->49) - let limit = 20; + const limit = 20; let allTxs = []; // this call is to fill the cache @@ -460,7 +460,7 @@ describe('History', function() { const _cache = Defaults.CONFIRMATIONS_TO_START_CACHING; Defaults.CONFIRMATIONS_TO_START_CACHING = 10; helpers.stubHistory(997, 10000); // (0->49) - let limit = 17; + const limit = 17; let allTxs = []; // this call is to fill the cache @@ -512,7 +512,7 @@ describe('History', function() { const _cache = Defaults.CONFIRMATIONS_TO_START_CACHING; Defaults.CONFIRMATIONS_TO_START_CACHING = 100; helpers.stubHistory(997, 10000); // (0->49) - let limit = 17; + const limit = 17; let allTxs = []; // this call is to fill the cache @@ -741,7 +741,7 @@ describe('History', function() { should.not.exist(err); should.exist(txs); txs.length.should.equal(1); - var tx = txs[0]; + const tx = txs[0]; tx.createdOn.should.equal(txp.createdOn); tx.action.should.equal('sent'); tx.amount.should.equal(0.8e8); @@ -1132,7 +1132,7 @@ describe('History', function() { }); should.exist(txs); txs.length.should.equal(5); - var s = h.slice(i, i + 5); + const s = h.slice(i, i + 5); txs.map(tx => tx.txid).should.deep.equal(s.map(tx => tx.txid)); fromCache.should.equal(i >= Defaults.CONFIRMATIONS_TO_START_CACHING && !reset); } diff --git a/packages/bitcore-wallet-service/test/integration/server.test.ts b/packages/bitcore-wallet-service/test/integration/server.test.ts index 41622aea692..c2f5ddf4f92 100644 --- a/packages/bitcore-wallet-service/test/integration/server.test.ts +++ b/packages/bitcore-wallet-service/test/integration/server.test.ts @@ -80,6 +80,7 @@ describe('Wallet service', function() { describe('#getServiceVersion', function() { it('should get version from package', function() { + // eslint-disable-next-line @typescript-eslint/no-require-imports WalletService.getServiceVersion().should.equal('bws-' + require('../../package').version); }); }); diff --git a/packages/bitcore-wallet-service/test/lock.test.ts b/packages/bitcore-wallet-service/test/lock.test.ts index f052e180a67..f181b818142 100644 --- a/packages/bitcore-wallet-service/test/lock.test.ts +++ b/packages/bitcore-wallet-service/test/lock.test.ts @@ -184,7 +184,7 @@ describe('Locks', function() { describe('#runLocked', () => { it('should run a locked function', function(done) { - var called =0; + let called = 0; function end() { called++; @@ -202,7 +202,7 @@ describe('Locks', function() { it('should lock locked functions', function(done) { - var called =0; + let called = 0; function end() { called++; diff --git a/packages/bitcore-wallet-service/test/model/addressmanager.test.ts b/packages/bitcore-wallet-service/test/model/addressmanager.test.ts index ebec2dc4952..cd763eb3b13 100644 --- a/packages/bitcore-wallet-service/test/model/addressmanager.test.ts +++ b/packages/bitcore-wallet-service/test/model/addressmanager.test.ts @@ -15,7 +15,7 @@ describe('AddressManager', function() { }); describe('#fromObj', function() { it('should assume legacy address manager uses BIP45', function() { - var obj = { + const obj = { version: '1.0.0', receiveAddressIndex: 2, changeAddressIndex: 0, diff --git a/packages/bitcore-wallet-service/test/model/txproposal.test.ts b/packages/bitcore-wallet-service/test/model/txproposal.test.ts index ac279bfad5b..79d0e103f79 100644 --- a/packages/bitcore-wallet-service/test/model/txproposal.test.ts +++ b/packages/bitcore-wallet-service/test/model/txproposal.test.ts @@ -9,7 +9,7 @@ const should = chai.should(); describe('TxProposal', function() { describe('#create', function() { it('should create a TxProposal', function() { - var txp = TxProposal.create(aTxpOpts()); + const txp = TxProposal.create(aTxpOpts()); should.exist(txp); txp.outputs.length.should.equal(2); txp.amount.should.equal(30000000); @@ -19,13 +19,13 @@ describe('TxProposal', function() { describe('#fromObj', function() { it('should copy a TxProposal', function() { - var txp = TxProposal.fromObj(aTXP()); + const txp = TxProposal.fromObj(aTXP()); should.exist(txp); txp.amount.should.equal(aTXP().amount); }); it('should copy a TxProposal, with actions', function() { - let txpObj = aTXP(); + const txpObj = aTXP(); txpObj.version = 2; @@ -38,7 +38,7 @@ describe('TxProposal', function() { xpub: 'xx', }]; - var txp = TxProposal.fromObj(txpObj); + const txp = TxProposal.fromObj(txpObj); should.exist(txp); txp.amount.should.equal(aTXP().amount); }); @@ -46,7 +46,7 @@ describe('TxProposal', function() { it('should default to BTC coin', function() { - var txp = TxProposal.fromObj(aTXP()); + const txp = TxProposal.fromObj(aTXP()); should.exist(txp); txp.coin.should.equal('btc'); }); @@ -54,15 +54,15 @@ describe('TxProposal', function() { describe('#getTotalAmount', function() { it('should compute total amount', function() { - var x = TxProposal.fromObj(aTXP()); - var total = x.getTotalAmount(); + const x = TxProposal.fromObj(aTXP()); + const total = x.getTotalAmount(); total.should.equal(x.amount); }); }); describe('#sign', function() { it('should sign 2-2 (txp version 3, btc tx version 1)', function() { - var txp = TxProposal.fromObj(aTXP()); + const txp = TxProposal.fromObj(aTXP()); txp.sign('1', theSignatures, theXPub); txp.isAccepted().should.equal(false); txp.isRejected().should.equal(false); @@ -74,7 +74,7 @@ describe('TxProposal', function() { describe('#getRawTx', function() { it('should generate correct raw transaction for signed 2-2, tx version 1', function() { - var txp = TxProposal.fromObj(aTXP()); + const txp = TxProposal.fromObj(aTXP()); txp.sign('1', theSignatures, theXPub); txp.getRawTx().should.equal(theRawTx); }); @@ -82,7 +82,7 @@ describe('TxProposal', function() { describe('#reject', function() { it('should reject 2-2', function() { - var txp = TxProposal.fromObj(aTXP()); + const txp = TxProposal.fromObj(aTXP()); txp.reject('1', 'comment'); txp.isAccepted().should.equal(false); txp.isRejected().should.equal(true); @@ -91,7 +91,7 @@ describe('TxProposal', function() { describe('#reject & #sign', function() { it('should finally reject', function() { - var txp = TxProposal.fromObj(aTXP()); + const txp = TxProposal.fromObj(aTXP()); txp.sign('1', theSignatures, theXPub); txp.isAccepted().should.equal(false); txp.isRejected().should.equal(false); diff --git a/packages/bitcore-wallet-service/test/storage.test.ts b/packages/bitcore-wallet-service/test/storage.test.ts index 32c6ac2a42a..b0aec55d332 100644 --- a/packages/bitcore-wallet-service/test/storage.test.ts +++ b/packages/bitcore-wallet-service/test/storage.test.ts @@ -17,7 +17,7 @@ describe('Storage', function() { mongodb.MongoClient.connect(config.mongoDb.uri, { useUnifiedTopology: true }, function(err, inclient) { if (err) throw err; client = inclient; - let db1 = client.db(config.mongoDb.dbname); + const db1 = client.db(config.mongoDb.dbname); storage = new Storage({ db: db1, }); @@ -230,9 +230,9 @@ describe('Storage', function() { }); describe('History Cache v8', () => { it('should fail is TX does not have blochchain height', (done) => { - let tipIndex = 80; // current cache tip - let items = [{ txid: '1234' }]; // a single tx. - let updateHeight = 1000; + const tipIndex = 80; // current cache tip + const items = [{ txid: '1234' }]; // a single tx. + const updateHeight = 1000; storage.storeTxHistoryCacheV8('xx', tipIndex, items, updateHeight, (err) => { err.toString().should.contain('missing blockheight'); done(); @@ -241,9 +241,9 @@ describe('Storage', function() { it('should store a single tx on the cache and update status correctly', (done) => { - let tipIndex = 80; // current cache tip - let items = [{ txid: '1234', blockheight: 800 }]; // a single tx. - let updateHeight = 1000; + const tipIndex = 80; // current cache tip + const items = [{ txid: '1234', blockheight: 800 }]; // a single tx. + const updateHeight = 1000; storage.storeTxHistoryCacheV8('xx', tipIndex, items, updateHeight, (err) => { should.not.exist(err); storage.getTxHistoryCacheStatusV8('xx', (err, inCacheStatus) => { @@ -259,15 +259,15 @@ describe('Storage', function() { it('should store a 5 txs on the cache and update status correctly', (done) => { - let tipIndex = 80; // current cache tip - let items = [ + const tipIndex = 80; // current cache tip + const items = [ { txid: '1234', blockheight: 803 }, // / <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 801 }, { txid: '1238', blockheight: 800 }, ]; - let updateHeight = 1000; + const updateHeight = 1000; storage.storeTxHistoryCacheV8('xx', tipIndex, items, updateHeight, (err) => { should.not.exist(err); storage.getTxHistoryCacheStatusV8('xx', (err, inCacheStatus) => { @@ -282,15 +282,15 @@ describe('Storage', function() { }); it('should prevent to store txs on wrong order', (done) => { - let tipIndex = 80; // current cache tip - let items = [ + const tipIndex = 80; // current cache tip + const items = [ { txid: '1234', blockheight: 803 }, // / <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 801 }, { txid: '1238', blockheight: 800 }, ]; - let updateHeight = 1000; + const updateHeight = 1000; storage.storeTxHistoryCacheV8('xx', tipIndex, items.reverse(), updateHeight, (err) => { err.toString().should.contain('wrong order'); done(); @@ -298,8 +298,8 @@ describe('Storage', function() { }); it('should store a 100 txs on the cache and update status correctly', (done) => { - let tipIndex = 80; // current cache tip - let items = helpers.createTxsV8(101, 1000); + const tipIndex = 80; // current cache tip + const items = helpers.createTxsV8(101, 1000); // this is done by _normalizeV8TxHistory for (const x of items) { @@ -309,7 +309,7 @@ describe('Storage', function() { // remove unconfirmed items.shift(); - let updateHeight = 50000; + const updateHeight = 50000; storage.storeTxHistoryCacheV8('xx', tipIndex, items, updateHeight, (err) => { should.not.exist(err); storage.getTxHistoryCacheStatusV8('xx', (err, inCacheStatus) => { @@ -324,9 +324,9 @@ describe('Storage', function() { }); it('should store a 1tx on the cache and retreive them correctly', (done) => { - let tipIndex = 80; // current cache tip - let items = [{ txid: '1234', blockheight: 800, amount: 100 }]; // a single tx. - let updateHeight = 1000; + const tipIndex = 80; // current cache tip + const items = [{ txid: '1234', blockheight: 800, amount: 100 }]; // a single tx. + const updateHeight = 1000; storage.storeTxHistoryCacheV8('xx', tipIndex, items, updateHeight, (err) => { should.not.exist(err); @@ -340,9 +340,9 @@ describe('Storage', function() { }); it('should clear all cache on deregistration', (done) => { - let tipIndex = 80; // current cache tip - let items = [{ txid: '1234', blockheight: 800, amount: 100 }]; // a single tx. - let updateHeight = 1000; + const tipIndex = 80; // current cache tip + const items = [{ txid: '1234', blockheight: 800, amount: 100 }]; // a single tx. + const updateHeight = 1000; storage.storeTxHistoryCacheV8('xx', tipIndex, items, updateHeight, (err) => { should.not.exist(err); @@ -360,15 +360,15 @@ describe('Storage', function() { it('should store a 5 txs on the cache and retreive them correctly', (done) => { - let tipIndex = 80; // current cache tip - let items = [ + const tipIndex = 80; // current cache tip + const items = [ { txid: '1234', blockheight: 803 }, // / <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 800 }, { txid: '1238', blockheight: 800 }, ]; - let updateHeight = 1000; + const updateHeight = 1000; storage.storeTxHistoryCacheV8('xx', tipIndex, items, updateHeight, (err) => { should.not.exist(err); storage.getTxHistoryCacheV8('xx', 0, 5, (err, txs) => { @@ -384,8 +384,8 @@ describe('Storage', function() { it('should store a 10 txs on the cache and retreive them correctly', (done) => { - let tipIndex = 80; // current cache tip - let items = [ + const tipIndex = 80; // current cache tip + const items = [ { txid: '1234', blockheight: 803 }, // / <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, @@ -398,7 +398,7 @@ describe('Storage', function() { // time passes updateHeight = 2000; - let items2 = [ + const items2 = [ { txid: '124', blockheight: 1803 }, // / <=== Latests { txid: '125', blockheight: 1802 }, { txid: '126', blockheight: 1801 }, diff --git a/packages/bitcore-wallet-service/test/utils.test.ts b/packages/bitcore-wallet-service/test/utils.test.ts index da9f03f047e..65d9bc29b1f 100644 --- a/packages/bitcore-wallet-service/test/utils.test.ts +++ b/packages/bitcore-wallet-service/test/utils.test.ts @@ -11,12 +11,12 @@ const should = chai.should(); describe('Utils', function() { describe('#getMissingFields', function() { it('should check required fields', function() { - var obj = { + const obj = { id: 'id', name: 'name', array: ['a', 'b'], }; - var fixtures = [{ + const fixtures = [{ args: 'id', check: [], }, { @@ -264,20 +264,20 @@ describe('Utils', function() { describe('#translateAddress', function() { it('should translate address from btc to bch', function() { - var res = Utils.translateAddress('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA', 'bch'); + const res = Utils.translateAddress('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA', 'bch'); res.should.equal('CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz'); }); it('should translate address from bch to btc', function() { - var res = Utils.translateAddress('HBf8isgS8EXG1r3X6GP89FmooUmiJ42wHS', 'btc'); + const res = Utils.translateAddress('HBf8isgS8EXG1r3X6GP89FmooUmiJ42wHS', 'btc'); res.should.equal('36q2G5FMGvJbPgAVEaiyAsFGmpkhPKwk2r'); }); it('should keep the address if there is nothing to do (bch)', function() { - var res = Utils.translateAddress('CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz', 'bch'); + const res = Utils.translateAddress('CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz', 'bch'); res.should.equal('CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz'); }); it('should keep the address if there is nothing to do (btc)', function() { - var res = Utils.translateAddress('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA', 'btc'); + const res = Utils.translateAddress('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA', 'btc'); should.exist(res); res.should.equal('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA'); }); diff --git a/packages/bitcore-wallet-service/test/v8.test.ts b/packages/bitcore-wallet-service/test/v8.test.ts index 952ccec25fa..96b0fd5cbe1 100644 --- a/packages/bitcore-wallet-service/test/v8.test.ts +++ b/packages/bitcore-wallet-service/test/v8.test.ts @@ -160,7 +160,7 @@ describe('V8', () => { be.getAddressUtxos('36pUaXzGouNdCqUDRWRXX9NJYungJEWJC2', 571920, (err, utxos) => { should.not.exist(err); should.exist(utxos); - let x = utxos[1]; + const x = utxos[1]; x.confirmations.should.equal(124); x.satoshis.should.equal(350000000); x.amount.should.equal(3.5); From 077003bce62a69582a602fa3b98bbafc6aea5b3a Mon Sep 17 00:00:00 2001 From: Micah Maphet Date: Mon, 3 Nov 2025 17:26:27 -0500 Subject: [PATCH 4/4] made kenny's linting suggestions to bws: code reordering, added back unused IEmail interface, removed a number of '/' in '// /' --- .../scripts/migrateWalletsNetwork.js | 2 +- .../src/lib/chain/eth/index.ts | 4 ++-- .../src/lib/model/email.ts | 19 +++++++++++++++ .../src/lib/model/wallet.ts | 2 +- .../bitcore-wallet-service/src/lib/server.ts | 23 +++++++++---------- .../test/integration/server.test.ts | 4 ++-- .../test/storage.test.ts | 10 ++++---- 7 files changed, 41 insertions(+), 23 deletions(-) diff --git a/packages/bitcore-wallet-service/scripts/migrateWalletsNetwork.js b/packages/bitcore-wallet-service/scripts/migrateWalletsNetwork.js index 6fd45946ae9..413e53c2876 100755 --- a/packages/bitcore-wallet-service/scripts/migrateWalletsNetwork.js +++ b/packages/bitcore-wallet-service/scripts/migrateWalletsNetwork.js @@ -160,7 +160,7 @@ storage.connect(config.storageOpts, async (err) => { const resCache = await storage.db.collection(Storage.collections.CACHE).deleteMany({ walletId: wallet.id }); - if (resCache?.result?.n <= 0 && !resCache?.result?.ok) { + if (!resCache?.result?.ok) { console.log(JSON.stringify(resTxs)); } } else { diff --git a/packages/bitcore-wallet-service/src/lib/chain/eth/index.ts b/packages/bitcore-wallet-service/src/lib/chain/eth/index.ts index 0266b66cc31..47840df3fb3 100644 --- a/packages/bitcore-wallet-service/src/lib/chain/eth/index.ts +++ b/packages/bitcore-wallet-service/src/lib/chain/eth/index.ts @@ -96,12 +96,12 @@ export class EthChain implements IChain { return cb(err); } // getPendingTxs returns all txps when given a native currency - server.getPendingTxs(opts, (err, _txps) => { + server.getPendingTxs(opts, (err, txps) => { if (err) return cb(err); let fees = 0; let amounts = 0; - _txps.filter(txp => { + txps.filter(txp => { // Add gas used for tokens when getting native balance if (!opts.tokenAddress) { fees += txp.fee || 0; diff --git a/packages/bitcore-wallet-service/src/lib/model/email.ts b/packages/bitcore-wallet-service/src/lib/model/email.ts index 77ab08967a6..968049703dd 100644 --- a/packages/bitcore-wallet-service/src/lib/model/email.ts +++ b/packages/bitcore-wallet-service/src/lib/model/email.ts @@ -1,6 +1,25 @@ import _ from 'lodash'; import Uuid from 'uuid'; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +interface IEmail { + version: number; + createdOn: number; + id: number; + walletId: string; + copayerId: string; + from: string; + to: string; + subject: string; + bodyPlain: string; + bodyHtml: string; + status: string; + attempts: number; + lastAttemptOn?: number; + notificationId: string; + language: string; +} + export class Email { version: number; createdOn: number; diff --git a/packages/bitcore-wallet-service/src/lib/model/wallet.ts b/packages/bitcore-wallet-service/src/lib/model/wallet.ts index e74b684d713..621c26de986 100644 --- a/packages/bitcore-wallet-service/src/lib/model/wallet.ts +++ b/packages/bitcore-wallet-service/src/lib/model/wallet.ts @@ -337,7 +337,7 @@ export class Wallet implements IWallet<() => boolean> { ); } - // / Only for power scan + // Only for power scan getSkippedAddress() { $.checkState(this.isComplete(), 'Failed state: this.isComplete() at '); diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 192bfcc37bc..4567f6712e8 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -5185,18 +5185,17 @@ export class WalletService implements IWalletService { moralisGetTokenAllowance(req): Promise { return new Promise((resolve, reject) => { - const headers = { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'X-Api-Key': config.moralis.apiKey, - }; - if (!config.moralis) return reject(new Error('Moralis missing credentials')); if (!checkRequired(req.body, ['address']) && !checkRequired(req.body, ['ownerAddress'])) { return reject(new ClientError('moralisGetTokenAllowance request missing arguments')); } - + const walletAddress = req.body.ownerAddress ?? req.body.address; + const headers = { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'X-Api-Key': config.moralis.apiKey, + }; const qs = []; if (req.body.chain) { @@ -5300,17 +5299,17 @@ export class WalletService implements IWalletService { moralisGetERC20TokenBalancesWithPricesByWallet(req): Promise { return new Promise((resolve, reject) => { + if (!config.moralis) return reject(new Error('Moralis missing credentials')); + if (!checkRequired(req.body, ['address'])) { + return reject(new ClientError('moralisGetERC20TokenBalancesWithPricesByWallet request missing arguments')); + } + const headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', 'X-Api-Key': config.moralis.apiKey, }; - if (!config.moralis) return reject(new Error('Moralis missing credentials')); - if (!checkRequired(req.body, ['address'])) { - return reject(new ClientError('moralisGetERC20TokenBalancesWithPricesByWallet request missing arguments')); - } - const qs = []; if (req.body.chain) qs.push('chain=' + req.body.chain); if (req.body.toBlock) qs.push('to_block=' + req.body.toBlock); diff --git a/packages/bitcore-wallet-service/test/integration/server.test.ts b/packages/bitcore-wallet-service/test/integration/server.test.ts index c2f5ddf4f92..626674a7a8e 100644 --- a/packages/bitcore-wallet-service/test/integration/server.test.ts +++ b/packages/bitcore-wallet-service/test/integration/server.test.ts @@ -5717,7 +5717,7 @@ describe('Wallet service', function() { }); describe('cashAddr backwards compat', function() { - // / LEGACY MODE + // LEGACY MODE it('should create a BCH tx proposal with cashaddr outputs (w/o prefix) and return Copay addr', function(done) { const copayAddr = 'CPrtPWbp8cCftTQu5fzuLG5zPJNDHMMf8X'; const cashAddr = BCHAddressTranslator.translate(copayAddr, 'cashaddr'); @@ -5771,7 +5771,7 @@ describe('Wallet service', function() { }); }); - // / CASHADDR MODE + // CASHADDR MODE it('should create a BCH tx proposal with cashaddr outputs (w/o prefix) and return CASH addr', function(done) { const copayAddr = 'CPrtPWbp8cCftTQu5fzuLG5zPJNDHMMf8X'; const cashAddr = BCHAddressTranslator.translate(copayAddr, 'cashaddr'); diff --git a/packages/bitcore-wallet-service/test/storage.test.ts b/packages/bitcore-wallet-service/test/storage.test.ts index b0aec55d332..47eeecc8971 100644 --- a/packages/bitcore-wallet-service/test/storage.test.ts +++ b/packages/bitcore-wallet-service/test/storage.test.ts @@ -261,7 +261,7 @@ describe('Storage', function() { it('should store a 5 txs on the cache and update status correctly', (done) => { const tipIndex = 80; // current cache tip const items = [ - { txid: '1234', blockheight: 803 }, // / <=== Latests + { txid: '1234', blockheight: 803 }, // <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 801 }, @@ -284,7 +284,7 @@ describe('Storage', function() { it('should prevent to store txs on wrong order', (done) => { const tipIndex = 80; // current cache tip const items = [ - { txid: '1234', blockheight: 803 }, // / <=== Latests + { txid: '1234', blockheight: 803 }, // <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 801 }, @@ -362,7 +362,7 @@ describe('Storage', function() { it('should store a 5 txs on the cache and retreive them correctly', (done) => { const tipIndex = 80; // current cache tip const items = [ - { txid: '1234', blockheight: 803 }, // / <=== Latests + { txid: '1234', blockheight: 803 }, // <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 800 }, @@ -386,7 +386,7 @@ describe('Storage', function() { it('should store a 10 txs on the cache and retreive them correctly', (done) => { const tipIndex = 80; // current cache tip const items = [ - { txid: '1234', blockheight: 803 }, // / <=== Latests + { txid: '1234', blockheight: 803 }, // <=== Latests { txid: '1235', blockheight: 802 }, { txid: '1236', blockheight: 801 }, { txid: '1237', blockheight: 800 }, @@ -399,7 +399,7 @@ describe('Storage', function() { // time passes updateHeight = 2000; const items2 = [ - { txid: '124', blockheight: 1803 }, // / <=== Latests + { txid: '124', blockheight: 1803 }, // <=== Latests { txid: '125', blockheight: 1802 }, { txid: '126', blockheight: 1801 }, { txid: '127', blockheight: 1800 },