paypal-rest-api
Version:
A typescript module for integrating with PayPal REST APIs.
73 lines (72 loc) • 3.31 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const joi = require("joi");
const retry = require("requestretry");
const uuid = require("uuid/v1");
const oauth_1 = require("../oauth");
const schemas_1 = require("./schemas");
class Client {
constructor(_config) {
this._config = _config;
this.oauth = new oauth_1.Oauth(this, this.config.client_id, this.config.client_secret);
}
get config() {
return this._config;
}
set config(config) {
this._config = config;
}
request(options) {
return __awaiter(this, void 0, void 0, function* () {
if (options.uri !== oauth_1.Oauth.paths.access) {
const token = yield this.oauth.getAccessToken();
options.headers = Object.assign({}, options.headers, { Authorization: `Bearer ${token.access_token}` });
}
options = Object.assign({}, this.config.requestOptions, options);
if (!options.headers["PAYPAL-REQUEST-ID"]) {
options.headers["PAYPAL-REQUEST-ID"] = uuid();
}
const validateRequest = joi.validate(options, schemas_1.requestOptionsSchema, { allowUnknown: true });
if (validateRequest.error) {
throw validateRequest.error;
}
options = validateRequest.value;
let response;
if (options.method === "POST") {
response = yield retry.post(options);
}
else if (options.method === "GET") {
response = yield retry.get(options);
}
else if (options.method === "PATCH") {
response = yield retry.patch(options);
}
else if (options.method === "DELETE") {
response = yield retry.delete(options);
}
else if (options.method === "PUT") {
response = yield retry.put(options);
}
else {
throw new Error(`Method ${options.method} is not configured.`);
}
if (process.env.PAYPAL_DEBUG) {
console.log(response.toJSON());
console.log(`curl -X ${response.request.method.toUpperCase()} -v -H "Content-Type:application/json" -H "Authorization: ${response.request.headers.Authorization}" -d '${typeof response.request.body === "string" ? response.request.body : JSON.stringify(response.request.body)}' ${response.request.href}`);
}
if (response.statusCode > 299) {
throw new Error(JSON.stringify(response.body));
}
return response;
});
}
}
exports.Client = Client;