UNPKG

@picahq/authkit-node

Version:

Secure token generation for Pica AuthKit

71 lines 3.14 kB
"use strict"; 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