@airwallex/node-sdk
Version:
Airwallex Node.js SDK
111 lines • 4.57 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Airwallex = exports.analyticsClient = void 0;
const async_mutex_1 = require("async-mutex");
const analyticsClient_1 = require("./client/analyticsClient");
const authentication_1 = require("./api/authentication");
const accountCapability_1 = require("./api/accountCapability");
const issuing_1 = require("./api/issuing");
const confirmationLetter_1 = require("./api/confirmationLetter");
const coreResources_1 = require("./api/coreResources");
const finance_1 = require("./api/finance");
const paymentAcceptance_1 = require("./api/paymentAcceptance");
const payouts_1 = require("./api/payouts");
const risk_1 = require("./api/risk");
const scale_1 = require("./api/scale");
const simulation_1 = require("./api/simulation");
const transactionalFX_1 = require("./api/transactionalFX");
const apiClient_1 = require("./client/apiClient");
const apiConstants_1 = require("./constants/apiConstants");
class Airwallex {
constructor(config) {
this._loginMutex = new async_mutex_1.Mutex();
this._simulation = new simulation_1.Simulation();
this.accountCapability = new accountCapability_1.AccountCapability();
this.authentication = new authentication_1.Authentication();
this.confirmationLetter = new confirmationLetter_1.ConfirmationLetter();
this.coreResources = new coreResources_1.CoreResources();
this.finance = new finance_1.Finance();
this.issuing = new issuing_1.Issuing();
this.paymentAcceptance = new paymentAcceptance_1.PaymentAcceptance();
this.payouts = new payouts_1.Payouts();
this.risk = new risk_1.Risk();
this.scale = new scale_1.Scale();
this.transactionalFX = new transactionalFX_1.TransactionalFX();
this.TIMEOUT_REFRESH_TOKEN = 20 * 60 * 1000;
this.get = (url, options = {}) => apiClient_1.apiClient.get(url, options);
this.post = (url, data, options = {}) => apiClient_1.apiClient.post(url, options, data);
this.put = (url, data, options = {}) => apiClient_1.apiClient.put(url, options, data);
this.patch = (url, data, options = {}) => apiClient_1.apiClient.patch(url, options, data);
this.delete = (url, options = {}) => apiClient_1.apiClient.delete(url, options);
this.config = {
...config,
apiVersion: config.apiVersion || apiConstants_1.API_VERSION,
env: config.env || 'demo',
enableTelemetry: config.enableTelemetry !== false,
timeout: config.timeout || 30000,
retry: config.retry == undefined ? 1 : config.retry,
retryDelay: config.retryDelay || 300,
};
if (this.config.enableTelemetry) {
exports.analyticsClient = new analyticsClient_1.AnalyticsClient(this.metricsBasePath, {
...config,
env: this.config.env,
});
}
this._cleanup();
apiClient_1.apiClient.initialize(this);
}
_cleanup() {
this._clearToken();
this._clearTimeout();
}
get simulation() {
if (this.config.env !== 'demo') {
throw new Error('Simulation API is only available in demo environment');
}
return this._simulation;
}
get token() {
return this._token;
}
get basePath() {
if (this.config.env == 'prod') {
return `https://api.airwallex.com`;
}
return `https://api-${this.config.env}.airwallex.com`;
}
get metricsBasePath() {
if (this.config.env == 'prod') {
return `https://o11y.airwallex.com`;
}
return `https://o11y-${this.config.env}.airwallex.com`;
}
_clearToken() {
this._token = undefined;
}
_setTimeout() {
this._clearTokenTimer = setTimeout(() => this._clearToken(), this.TIMEOUT_REFRESH_TOKEN);
}
_clearTimeout() {
clearTimeout(this._clearTokenTimer);
}
async login(forceRefresh = false) {
const release = await this._loginMutex.acquire();
if (this._token && !forceRefresh) {
release();
return;
}
try {
const res = await this.authentication.authenticate(this.config.apiKey, this.config.clientId);
this._token = `Bearer ${res.token}`;
this._clearTimeout();
this._setTimeout();
}
finally {
release();
}
}
}
exports.Airwallex = Airwallex;
//# sourceMappingURL=airwallex.core.js.map