agora-rest-client
Version:
Node.js REST client for Agora
50 lines (49 loc) • 2.22 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.retry = exports.base64 = void 0;
const error_1 = require("./error");
const constant_1 = require("./constant");
const types_1 = require("../types");
const base64 = (stringValue) => {
return Buffer.from(stringValue).toString('base64');
};
exports.base64 = base64;
function retry(target, operation, retryShouldStop, options) {
return __awaiter(this, void 0, void 0, function* () {
let retryCount = 0;
let stopRetry = retryShouldStop();
let error;
const delay = options && options.delay;
const onFailAttempt = options && options.onFailAttempt;
while (!stopRetry) {
try {
const result = yield operation.apply(target, [retryCount]);
return [undefined, result];
}
catch (e) {
error = error_1.GenericError.wrapError(constant_1.ERR_NAMESPACE_LIB, types_1.ErrorTypeEnum.UnknownError, e);
onFailAttempt && onFailAttempt(error);
if (error.options.immediateStopRetry) {
return [error, undefined];
}
}
stopRetry = retryShouldStop();
if (!stopRetry && delay) {
// only wait when there's next action
yield new Promise((resolve) => setTimeout(resolve, delay(retryCount)));
}
retryCount++;
}
return [error, undefined];
});
}
exports.retry = retry;