kotanipay-sdk
Version:
Official Kotani Pay SDK for Node.js and Browser
117 lines • 4.25 kB
JavaScript
;
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