UNPKG

kotanipay-sdk

Version:

Official Kotani Pay SDK for Node.js and Browser

117 lines 4.25 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpClientUtil = void 0; const axios_1 = __importDefault(require("axios")); const error_types_1 = require("../types/error.types"); class HttpClientUtil { constructor(config) { this.config = config; const baseURL = config.baseUrl || (config.environment === 'production' ? 'https://api.kotanipay.io' : 'https://sandbox-api.kotanipay.io'); this.client = axios_1.default.create({ baseURL, timeout: config.timeout || 30000, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': '@kotani-pay/sdk/1.0.0', }, }); // Set initial auth token if provided (for API key usage) if (config.apiKey) { this.setAuthToken(config.apiKey, 'Bearer'); } this.setupInterceptors(); } /** * Set authentication token (JWT or API Key) */ setAuthToken(token, type = 'Bearer') { this.authToken = token; this.client.defaults.headers.common['Authorization'] = `${type} ${token}`; } /** * Clear authentication token */ clearAuthToken() { this.authToken = undefined; delete this.client.defaults.headers.common['Authorization']; } /** * Get current auth token */ getAuthToken() { return this.authToken; } setupInterceptors() { this.client.interceptors.request.use((config) => { console.debug(`Making request: ${config.method?.toUpperCase()} ${config.url}`); return config; }, (error) => { console.error('Request error:', error); return Promise.reject(error); }); this.client.interceptors.response.use((response) => { console.debug(`Response: ${response.status} ${response.statusText}`); return response; }, (error) => { return Promise.reject(this.handleError(error)); }); } async request(config) { try { const response = await this.client.request(config); return response.data; } catch (error) { throw this.handleError(error); } } async get(url, config) { return this.request({ ...config, method: 'GET', url }); } async post(url, data, config) { return this.request({ ...config, method: 'POST', url, data }); } async put(url, data, config) { return this.request({ ...config, method: 'PUT', url, data }); } async delete(url, config) { return this.request({ ...config, method: 'DELETE', url }); } getConfig() { return { environment: this.config.environment, baseURL: this.client.defaults.baseURL || '' }; } handleError(error) { console.error('HTTP Error:', error); if (error.response) { const { status, data } = error.response; const message = data?.message || data?.error || error.message; switch (status) { case 400: return new error_types_1.ValidationError(message); case 401: return new error_types_1.AuthenticationError(message); case 403: return new error_types_1.KotaniPayError(message, status, 'FORBIDDEN'); case 404: return new error_types_1.KotaniPayError(message, status, 'NOT_FOUND'); default: return new error_types_1.KotaniPayError(message, status, data?.code); } } if (error.code === 'ECONNABORTED') { return new error_types_1.KotaniPayError('Request timeout', 408, 'TIMEOUT'); } return new error_types_1.KotaniPayError(error.message || 'An unexpected error occurred', 500, 'NETWORK_ERROR'); } } exports.HttpClientUtil = HttpClientUtil; //# sourceMappingURL=http-client.util.js.map