@gray-adeyi/korapay-sdk
Version:
A korapay client SDK for the javascript runtime.
250 lines (249 loc) • 9.5 kB
JavaScript
"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;