gigya-node
Version:
Gigya SDK for NodeJS
59 lines (51 loc) • 1.69 kB
text/typescript
import request = require('request');
import ProxyHttpRequest from '../interfaces/proxy-http-request';
import GigyaResponse from '../interfaces/gigya-response';
import fs = require('fs');
import path = require('path');
let certificate: string;
let verboseHttpError = process.env['GIGYA_VERBOSE_HTTP_LOGGING'];
function getCertificate(): string {
if (!certificate) {
try {
certificate = fs.readFileSync(path.join(__dirname, '../../../assets/cacert.pem')).toString();
} catch (e) {
log(e);
}
}
return certificate;
}
function log(msg: any) : void {
if (verboseHttpError) {
console.log(msg);
}
}
export const httpMethod = 'post';
/**
* Make HTTP request to Gigya.
*/
export const httpRequest: ProxyHttpRequest = <R>(endpoint: string, host: string, requestParams: any, options?: request.CoreOptions | undefined) => {
let start = Date.now();
return new Promise<GigyaResponse & R>((resolve, reject) => {
const uri = `https://${host}/${endpoint}`;
request.post(uri, {
method: httpMethod,
form: requestParams,
ca: getCertificate(),
...options
}, (error, response, body) => {
log(`request to ${uri} took ${(new Date().getTime() - start) / 1000} seconds`);
if (error) {
log(error);
reject(error);
}
try {
resolve(JSON.parse(body));
} catch (ex) {
log(`failed to parse response body from request to ${uri}\n${body}`);
reject(ex);
}
});
});
}
export default httpRequest;