UNPKG

paypal-rest-api

Version:

A typescript module for integrating with PayPal REST APIs.

73 lines (72 loc) 3.31 kB
"use strict"; 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;