shipstation-node
Version:
Unofficial Node.js wrapper for the ShipStation API
41 lines (40 loc) • 1.35 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const axios_retry_1 = __importDefault(require("axios-retry"));
const limiter_1 = require("limiter");
class BaseAPI {
type;
baseURL;
requestConfig;
limiter;
authHeaders;
constructor(type, baseUrl, rateLimitOpts, options) {
this.type = type;
this.baseURL = baseUrl;
// Initialize rate limiter
this.limiter = new limiter_1.RateLimiter(rateLimitOpts);
// Retry failed requests
if (options.retryConfig) {
(0, axios_retry_1.default)(axios_1.default, options.retryConfig);
}
}
request = async (requestData) => {
if (!this.authHeaders) {
throw new Error(`Credentials are not set for the ${this.type} API`);
}
// Wait for rate limit token
await this.limiter.removeTokens(1);
const response = await axios_1.default.request({
baseURL: this.baseURL,
headers: this.authHeaders,
...this.requestConfig,
...requestData
});
return response.data;
};
}
exports.default = BaseAPI;