flechette
Version:
A highly configurable wrapper for Fetch API that supports programmatic retries and completely obfuscates promise handling.
88 lines (87 loc) • 2.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const storage_deck_1 = require("storage-deck");
const senders_1 = require("./senders");
exports.reservedKeyName = "flechette";
const reservedStorageName = "appConfig";
const defaultTimeout = 30000;
const defaultTimeoutRetryCount = 2;
const defaultSuccessCodes = ["200-399"];
const defaultRetryActions = [
{
action: (response, successFunc, failureFunc) => {
senders_1.send(response.sent, successFunc, failureFunc);
},
code: 408
},
{
action: (response, successFunc, failureFunc) => {
senders_1.send(response.sent, successFunc, failureFunc);
},
code: 429
},
{
action: (response, successFunc, failureFunc) => {
senders_1.send(response.sent, successFunc, failureFunc);
},
code: 504
}
];
class FlechetteController {
constructor(props) {
this.successCodes = defaultSuccessCodes;
this.retryActions = defaultRetryActions;
this.timeout = defaultTimeout;
this.maxTimeoutRetryCount = defaultTimeoutRetryCount;
this.baseUrl = "";
this.instanceName = exports.reservedKeyName;
this.abortController = new AbortController();
if (props.successCodes) {
this.successCodes = props.successCodes;
}
if (props.retryActions) {
this.retryActions = props.retryActions;
}
if (props.timeout) {
this.timeout = props.timeout;
}
if (props.maxTimeoutRetryCount) {
this.maxTimeoutRetryCount = props.maxTimeoutRetryCount;
}
if (props.baseUrl) {
this.baseUrl = props.baseUrl;
}
if (props.headers) {
this.headers = props.headers;
}
if (props.instanceName) {
this.instanceName = props.instanceName;
}
}
abortCurrentFetch() {
this.abortController.abort();
}
}
exports.FlechetteController = FlechetteController;
exports.configureFlechette = (i) => {
const f = new FlechetteController(i ? i : {});
storage_deck_1.createNewStorage(reservedStorageName);
storage_deck_1.addToStorage({ key: f.instanceName, value: f }, reservedStorageName);
return f;
};
exports.getFlechetteInstance = (instanceName) => {
const i = instanceName ? instanceName : exports.reservedKeyName;
try {
const s = storage_deck_1.retrieveFromStorage(i, reservedStorageName);
if (s) {
return s;
}
else {
throw new Error("failed to find flechette instance");
}
}
catch (_a) {
console.warn("No active flechette instance found. Creating a new instance named " + i);
return exports.configureFlechette({ instanceName: i });
}
};