UNPKG

@gray-adeyi/korapay-sdk

Version:

A korapay client SDK for the javascript runtime.

250 lines (249 loc) 9.5 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const dntShim = __importStar(require("../_dnt.shims.js")); const errors_js_1 = require("./errors.js"); const axios_1 = __importDefault(require("axios")); const lodash_es_1 = require("lodash-es"); const utils_js_1 = require("./utils.js"); const enums_js_1 = require("./enums.js"); class RestClient { constructor(publicKey, secretKey, encryptionKey) { Object.defineProperty(this, "publicKey", { enumerable: true, configurable: true, writable: true, value: "" }); Object.defineProperty(this, "secretKey", { enumerable: true, configurable: true, writable: true, value: "" }); Object.defineProperty(this, "encryptionKey", { enumerable: true, configurable: true, writable: true, value: "" }); Object.defineProperty(this, "secureClient", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "openClient", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.loadKey("public key", RestClient.ENV_PUBLIC_KEY_NAME, publicKey); this.loadKey("secret key", RestClient.ENV_SECRET_KEY_NAME, secretKey); this.loadKey("encryption key", RestClient.ENV_ENCRYPTION_KEY_NAME, encryptionKey); this.secureClient = axios_1.default.create({ baseURL: RestClient.BASE_URL, headers: this.secureHeaders, }); this.secureClient.interceptors.request.use(this.requestPayloadTransformerInterceptor, this.handleRequestError); this.secureClient.interceptors.response.use(this.responsePayloadTransformerInterceptor, this.handleResponseError); this.openClient = axios_1.default.create({ baseURL: RestClient.BASE_URL, headers: this.openHeaders, }); this.openClient.interceptors.request.use(this.requestPayloadTransformerInterceptor, this.handleRequestError); this.openClient.interceptors.response.use(this.responsePayloadTransformerInterceptor, this.handleResponseError); } // deno-lint-ignore no-explicit-any async call(endpoint, method, // deno-lint-ignore no-explicit-any data, noAuth = false) { const handler = this.getMethodHandler(method, noAuth); let response; if ([enums_js_1.HTTPMethod.GET, enums_js_1.HTTPMethod.DELETE].includes(method)) { response = await handler(endpoint); } else { response = await handler(endpoint, data); } return this.deserializeResponse(response); } // deno-lint-ignore no-explicit-any encryptData(data) { return (0, utils_js_1.encryptAes256)(this.encryptionKey, data); } get baseHeaders() { return { "User-Agent": "@gray-adeyi/korapay-sdk 0.2.1", Accept: "application/json", "Content-Type": "application/json", }; } get openHeaders() { return { ...this.baseHeaders, Authorization: `Bearer ${this.publicKey}`, }; } get secureHeaders() { return { ...this.baseHeaders, Authorization: `Bearer ${this.secretKey}`, }; } getMethodHandler(method, noAuth) { // deno-lint-ignore no-explicit-any const secureClientHandlerMapping = { [enums_js_1.HTTPMethod.GET]: this.secureClient.get, [enums_js_1.HTTPMethod.POST]: this.secureClient.post, [enums_js_1.HTTPMethod.PATCH]: this.secureClient.patch, [enums_js_1.HTTPMethod.PUT]: this.secureClient.put, [enums_js_1.HTTPMethod.DELETE]: this.secureClient.delete, }; const openClientHandlerMapping = { [enums_js_1.HTTPMethod.GET]: this.openClient.get, [enums_js_1.HTTPMethod.POST]: this.openClient.post, [enums_js_1.HTTPMethod.PATCH]: this.openClient.patch, [enums_js_1.HTTPMethod.PUT]: this.openClient.put, [enums_js_1.HTTPMethod.DELETE]: this.openClient.delete, }; const mapping = noAuth ? openClientHandlerMapping : secureClientHandlerMapping; return mapping[method]; } deserializeResponse(response) { return { statusCode: response.status, status: response.data["status"] || false, message: response.data["message"], data: response.data["data"], }; } requestPayloadTransformerInterceptor(config) { config.data = RestClient.camelToSnakeCaseTransformer(config.data); return config; } responsePayloadTransformerInterceptor(response) { response.data = RestClient.snakeToCamelCaseTransformer(response.data); return response; } // deno-lint-ignore no-explicit-any static camelToSnakeCaseTransformer(data) { if (Array.isArray(data)) { return data.map(RestClient.camelToSnakeCaseTransformer); } else if (data !== null && typeof data === "object") { // deno-lint-ignore no-explicit-any return Object.keys(data).reduce((acc, key) => { const snakeKey = (0, lodash_es_1.snakeCase)(key); acc[snakeKey] = RestClient.camelToSnakeCaseTransformer(data[key]); return acc; }, {}); } return data; } // deno-lint-ignore no-explicit-any static snakeToCamelCaseTransformer(data) { if (Array.isArray(data)) { return data.map(RestClient.snakeToCamelCaseTransformer); } else if (data !== null && typeof data === "object") { // deno-lint-ignore no-explicit-any return Object.keys(data).reduce((acc, key) => { const camelKey = (0, lodash_es_1.camelCase)(key); acc[camelKey] = RestClient.snakeToCamelCaseTransformer(data[key]); return acc; }, {}); } return data; } handleRequestError(error) { return Promise.reject(new errors_js_1.KorapayClientError(error.message, error.status, error.code)); } handleResponseError(error) { return Promise.reject(new errors_js_1.KorapayClientError(error.message, error.status, error.code, error)); } loadKey(keyName, keyEnvName, value) { if (value) { switch (keyName) { case "public key": this.publicKey = value; break; case "secret key": this.secretKey = value; break; case "encryption key": this.encryptionKey = value; break; } return; } if (!dntShim.Deno.env.has(keyEnvName)) { throw new errors_js_1.KorapayClientError(`${keyName} was not provided on instantiation or set in environmental variables as ${keyEnvName}`); } const envValue = dntShim.Deno.env.get(keyEnvName); switch (keyName) { case "public key": this.publicKey = envValue; break; case "secret key": this.secretKey = envValue; break; case "encryption key": this.encryptionKey = envValue; break; } } } Object.defineProperty(RestClient, "BASE_URL", { enumerable: true, configurable: true, writable: true, value: "https://api.korapay.com" }); Object.defineProperty(RestClient, "ENV_PUBLIC_KEY_NAME", { enumerable: true, configurable: true, writable: true, value: "KORAPAY_PUBLIC_KEY" }); Object.defineProperty(RestClient, "ENV_SECRET_KEY_NAME", { enumerable: true, configurable: true, writable: true, value: "KORAPAY_SECRET_KEY" }); Object.defineProperty(RestClient, "ENV_ENCRYPTION_KEY_NAME", { enumerable: true, configurable: true, writable: true, value: "KORAPAY_ENCRYPTION_KEY" }); exports.default = RestClient;