import { HmacSHA1 } from 'crypto-js'; import * as Base64 from 'crypto-js/enc-base64'; import * as uuid from 'uuid'; /** * @export * @class Signer */ export class Signer { private _apiKey: string; private _privateKey: string; /** * Creates an instance of Signer. * @param {string} apiKey * @param {string} privateKey * * @memberOf Signer */ constructor(apiKey: string, privateKey: string) { this._apiKey = apiKey; this._privateKey = privateKey; } /** * @returns {string} * * @memberOf Signer */ generateNonce(): string { return uuid.v4(); } /** * @param {string} url * @param {string} data * @param {string} nonce * @returns {string} * * @memberOf Signer */ generateSignatureForRequest(url: string, data: string, nonce: string): string { var uri = this.stripServer(url); var dataPart = data ? data : ""; var message = this._apiKey + nonce + uri + dataPart; var decodedKey = Base64.parse(this._privateKey); var signature = HmacSHA1(message, decodedKey); signature = (signature).toString(Base64) return signature; } /** * @param {string} url * @param {string} data * @param {object} headers * * @memberOf Signer */ signRequest(url: string, data: string, headers: any): void { var nonce = this.generateNonce(); var signature = this.generateSignatureForRequest(url, data, nonce); //Add nonce and signature to headers headers["nonce"] = nonce; headers["signature"] = signature; } /** * @param {any} url * @returns {string} * * @memberOf Signer */ stripServer(url): string { var i, j; if ((i = url.indexOf('://')) > 0 && (j = url.substr(i + 3).indexOf('/')) > 0 && (j += i + 3) + 1 < url.length) { return url.substr(j) } else { return url; } } }