UNPKG

@airwallex/node-sdk

Version:

Airwallex Node.js SDK

111 lines 4.57 kB
"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