33 lines
1017 B
TypeScript
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;
|
|
}
|