UNPKG

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
"use strict"; 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 }); } };