@picahq/authkit-node
Version:
Secure token generation for Pica AuthKit
71 lines • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createEventLinkTokenApi = void 0;
const tslib_1 = require("tslib");
const axios_1 = tslib_1.__importDefault(require("axios"));
function paginateAuthkitConnections(url, headers, payload, options = {}) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { limit = 100, maxConcurrentRequests = 3, maxRetries = 3 } = options;
const fetchAuthkitPage = (page, pageLimit) => tslib_1.__awaiter(this, void 0, void 0, function* () {
const response = yield axios_1.default.post(`${url}/v1/authkit?limit=${pageLimit}&page=${page}`, payload, { headers });
return response.data;
});
const firstResponse = yield fetchAuthkitPage(1, limit);
const { pages, total } = firstResponse;
if (pages <= 1) {
return firstResponse;
}
const remainingPages = Array.from({ length: pages - 1 }, (_, i) => i + 2);
const fetchPageWithRetry = (page) => tslib_1.__awaiter(this, void 0, void 0, function* () {
let lastError;
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
return yield fetchAuthkitPage(page, limit);
}
catch (error) {
lastError = error;
if (attempt < maxRetries) {
yield new Promise((resolve) => setTimeout(resolve, 1000 * Math.pow(2, attempt - 1)));
}
}
}
throw lastError;
});
const responses = [firstResponse];
for (let i = 0; i < remainingPages.length; i += maxConcurrentRequests) {
const batch = remainingPages.slice(i, i + maxConcurrentRequests);
const batchPromises = batch.map((page) => fetchPageWithRetry(page));
try {
const batchResults = yield Promise.all(batchPromises);
responses.push(...batchResults);
}
catch (error) {
console.error(`Failed to fetch authkit batch starting at page ${batch[0]}:`, error);
throw error;
}
}
const allRows = responses.flatMap((response) => response.rows);
const latestResponse = responses[responses.length - 1];
return {
rows: allRows,
page: 1,
pages: 1,
total,
requestId: latestResponse.requestId,
};
});
}
const createEventLinkTokenApi = (headers, url, payload) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
var _a;
try {
const authkitResponse = yield paginateAuthkitConnections(url, headers, payload, { limit: 100, maxConcurrentRequests: 3, maxRetries: 3 });
return authkitResponse;
}
catch (error) {
if (axios_1.default.isAxiosError(error)) {
return (_a = error.response) === null || _a === void 0 ? void 0 : _a.data;
}
}
});
exports.createEventLinkTokenApi = createEventLinkTokenApi;
//# sourceMappingURL=link.api.js.map