52 lines
1.7 KiB
JavaScript
52 lines
1.7 KiB
JavaScript
const axios = require('axios')
|
|
const _ = require('lodash/fp')
|
|
|
|
const { WALLET_SCORE_THRESHOLD } = require('../../../constants')
|
|
|
|
const NAME = 'CipherTrace'
|
|
const SUPPORTED_COINS = ['BTC', 'ETH', 'BCH', 'LTC', 'BNB', 'RSK']
|
|
|
|
function getClient(account) {
|
|
if (_.isNil(account) || !account.enabled) return null
|
|
|
|
const [ctv1, username, secretKey] = account.authorizationValue.split(':')
|
|
if (_.isNil(ctv1) || _.isNil(username) || _.isNil(secretKey)) {
|
|
throw new Error('Invalid CipherTrace configuration')
|
|
}
|
|
|
|
const apiVersion = ctv1.slice(-2)
|
|
const authHeader = {
|
|
"Authorization": account
|
|
}
|
|
return { apiVersion, authHeader }
|
|
}
|
|
|
|
function rateWallet(account, cryptoCode, address) {
|
|
const client = getClient(account)
|
|
console.log('client', client)
|
|
if (!_.includes(_.toUpper(cryptoCode), SUPPORTED_COINS) || _.isNil(client)) return Promise.resolve(null)
|
|
|
|
const { apiVersion, authHeader } = client
|
|
const score = Math.floor(Math.random() * (10 - 1 + 1)) + 1
|
|
const threshold = _.isNil(account.scoreThreshold) ? WALLET_SCORE_THRESHOLD : account.scoreThreshold
|
|
return Promise.resolve({ address, score, isValid: score < threshold })
|
|
|
|
// return axios.get(`https://rest.ciphertrace.com/aml/${apiVersion}/${_.toLower(cryptoCode)}/risk?address=${address}`, {
|
|
// headers: authHeader
|
|
// })
|
|
// .then(res => ({ address, score: res.risk, isValid: res.risk <= SCORE_THRESHOLD }))
|
|
}
|
|
|
|
function isValidWalletScore(account, score) {
|
|
const client = getClient(account)
|
|
if (_.isNil(client)) return Promise.resolve(true)
|
|
|
|
const threshold = _.isNil(account) ? WALLET_SCORE_THRESHOLD : account.scoreThreshold
|
|
return Promise.resolve(score < threshold)
|
|
}
|
|
|
|
module.exports = {
|
|
NAME,
|
|
rateWallet,
|
|
isValidWalletScore
|
|
}
|