GSI - Employe Self Service Mobile
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

59 lines
2.1 KiB

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.pollOperation = exports.OperationPoller = void 0;
const apiv2_1 = require("./apiv2");
const error_1 = require("./error");
const queue_1 = require("./throttler/queue");
const DEFAULT_INITIAL_BACKOFF_DELAY_MILLIS = 250;
const DEFAULT_MASTER_TIMEOUT_MILLIS = 30000;
class OperationPoller {
async poll(options) {
const queue = new queue_1.Queue({
name: options.pollerName || "LRO Poller",
concurrency: 1,
retries: Number.MAX_SAFE_INTEGER,
maxBackoff: options.maxBackoff,
backoff: options.backoff || DEFAULT_INITIAL_BACKOFF_DELAY_MILLIS,
});
const masterTimeout = options.masterTimeout || DEFAULT_MASTER_TIMEOUT_MILLIS;
const { response, error } = await queue.run(this.getPollingTask(options), masterTimeout);
queue.close();
if (error) {
throw error instanceof error_1.FirebaseError
? error
: new error_1.FirebaseError(error.message, { status: error.code });
}
return response;
}
getPollingTask(options) {
const apiClient = new apiv2_1.Client({
urlPrefix: options.apiOrigin,
apiVersion: options.apiVersion,
auth: true,
});
return async () => {
let res;
try {
res = await apiClient.get(options.operationResourceName);
}
catch (err) {
if (err.status === 500 || err.status === 503) {
throw err;
}
return { error: err };
}
if (options.onPoll) {
options.onPoll(res.body);
}
if (!res.body.done) {
throw new Error("Polling incomplete, should trigger retry with backoff");
}
return res.body;
};
}
}
exports.OperationPoller = OperationPoller;
function pollOperation(options) {
return new OperationPoller().poll(options);
}
exports.pollOperation = pollOperation;