UNPKG

pluggy-js

Version:

Client-side JavaScript toolkit for Pluggy's API.

120 lines (119 loc) 4.96 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 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) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseApi = void 0; const axios_1 = require("axios"); const utils_1 = require("./utils"); const version_1 = require("./version"); /** * Helper function for JSON.parse(), * to parse ISO date string values to Date objects. */ function jsonParseDateReviver(_key, value) { return (0, utils_1.isIsoDateString)(value) ? (0, utils_1.parseIsoDate)(value) : value; } class BaseApi { constructor(accessToken, baseUrl = 'https://api.pluggy.ai') { if (!accessToken) { throw new Error('Missing authorization for API communication'); } this.apiKey = accessToken; this.baseUrl = baseUrl; } getServiceInstance() { if (!this.service) { const config = { headers: { 'Pluggy-User-Agent': `PluggyJs/${version_1.PLUGGY_JS_VERSION}`, 'X-API-KEY': this.apiKey, 'Content-Type': 'application/json', }, transformResponse: data => { // transform ISO string dates to Date return JSON.parse(data, jsonParseDateReviver); }, }; this.service = axios_1.default.create(config); } return this.service; } createGetRequest(endpoint, params) { return __awaiter(this, void 0, void 0, function* () { const url = `${this.baseUrl}/${endpoint}${this.mapToQueryString(params)}`; return this.getServiceInstance() .get(url) .then((response) => __awaiter(this, void 0, void 0, function* () { try { const { data, status } = response; if (status !== 200) { return Promise.reject(data); } else { return Promise.resolve(data); } } catch (_a) { const { statusText } = response; return Promise.reject({ statusText }); } })) .catch(error => { console.warn(`[API] HTTP request failed: ${error.message || ''}`, error); return Promise.reject(error); }); }); } createPostRequest(endpoint, params, body) { return this.createMutationRequest('post', endpoint, params, body); } createPutRequest(endpoint, params, body) { return this.createMutationRequest('put', endpoint, params, body); } createPatchRequest(endpoint, params, body) { return this.createMutationRequest('patch', endpoint, params, body); } createDeleteRequest(endpoint, params, body) { return this.createMutationRequest('delete', endpoint, params, body); } createMutationRequest(method, endpoint, params, body) { return __awaiter(this, void 0, void 0, function* () { const url = `${this.baseUrl}/${endpoint}${this.mapToQueryString(params)}`; if (body) { Object.keys(body).forEach(key => body[key] === undefined ? delete body[key] : {}); } const serviceMethod = this.getServiceInstance()[method]; return serviceMethod(url, body).then((response) => __awaiter(this, void 0, void 0, function* () { try { const { data, status } = response; if (status < 200 || status >= 300) { return Promise.reject(data); } return Promise.resolve(data); } catch (_a) { const { statusText } = response; return Promise.reject({ statusText }); } })); }); } mapToQueryString(params) { if (!params || Object.keys(params).length === 0) { return ''; } const query = Object.keys(params) .filter(key => params[key] !== undefined && params[key] !== null) .map(key => key + '=' + params[key]) .join('&'); return `?${query}`; } } exports.BaseApi = BaseApi;