testnet-onboarding-api/src/utils.ts
2024-07-27 18:34:21 +05:30

33 lines
1017 B
TypeScript

import axios, { InternalAxiosRequestConfig } from 'axios';
import FormData from 'form-data';
import crypto from 'crypto';
import assert from 'assert';
const sumsubAxios = axios.create();
sumsubAxios.interceptors.request.use(createSignature, function (error) {
return Promise.reject(error);
})
export { sumsubAxios };
// This function creates signature for the request as described here: https://developers.sumsub.com/api-reference/#app-tokens
function createSignature(config: InternalAxiosRequestConfig) {
assert(config.method);
var ts = Math.floor(Date.now() / 1000);
const signature = crypto.createHmac('sha256', process.env.SUMSUB_SECRET_KEY || "");
signature.update(ts + config.method.toUpperCase() + config.url);
if (config.data instanceof FormData) {
signature.update(config.data.getBuffer());
} else if (config.data) {
signature.update(config.data);
}
config.headers['X-App-Access-Ts'] = ts;
config.headers['X-App-Access-Sig'] = signature.digest('hex');
return config;
}