lamassu-server/packages/server/lib/plugins/compliance/sumsub/request.js
2025-05-12 15:35:00 +01:00

37 lines
1 KiB
JavaScript

const axios = require('axios')
const crypto = require('crypto')
const _ = require('lodash/fp')
const FormData = require('form-data')
const axiosConfig = {
baseURL: 'https://api.sumsub.com',
}
const getSigBuilder = (apiToken, secretKey) => config => {
const timestamp = Math.floor(Date.now() / 1000)
const signature = crypto.createHmac('sha256', secretKey)
signature.update(`${timestamp}${_.toUpper(config.method)}${config.url}`)
if (config.data instanceof FormData) {
signature.update(config.data.getBuffer())
} else if (config.data) {
signature.update(JSON.stringify(config.data))
}
config.headers['X-App-Token'] = apiToken
config.headers['X-App-Access-Sig'] = signature.digest('hex')
config.headers['X-App-Access-Ts'] = timestamp
return config
}
const request = (account, config) => {
const instance = axios.create(axiosConfig)
instance.interceptors.request.use(
getSigBuilder(account.apiToken, account.secretKey),
Promise.reject,
)
return instance(config)
}
module.exports = request