UNPKG

@splitsoftware/splitio-commons

Version:
40 lines (39 loc) 2.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.secureSplitHttpClientFactory = void 0; var tslib_1 = require("tslib"); var splitHttpClient_1 = require("./splitHttpClient"); var authProvider_1 = require("./authProvider"); /** * Factory of Secure HTTP client, which authenticates requests using a JWT token. * On 401 responses, invalidates the cached credential and retries once with a fresh token. * * @param settings - SDK settings * @param platform - object containing environment-specific dependencies * @param fetchAuth - function to fetch auth credentials from the /v2/auth endpoint */ function secureSplitHttpClientFactory(settings, platform, telemetryTracker) { var splitHttpClient = (0, splitHttpClient_1.splitHttpClientFactory)(settings, platform); var authProvider = (0, authProvider_1.authProviderFactory)(settings, splitHttpClient, telemetryTracker); function makeRequest(url, options, latencyTracker, logErrorsAsInfo, token) { return splitHttpClient(url, tslib_1.__assign(tslib_1.__assign({}, options), { headers: tslib_1.__assign(tslib_1.__assign({}, options === null || options === void 0 ? void 0 : options.headers), { Authorization: "Bearer ".concat(token) }) }), latencyTracker, logErrorsAsInfo, true); } var httpClient = function (url, options, latencyTracker, logErrorsAsInfo) { return authProvider.credential().then(function (credential) { return makeRequest(url, options, latencyTracker, logErrorsAsInfo, credential.token) .catch(function (error) { if (error.statusCode === 401) { // retry once for 401, in case the token has just expired authProvider.invalidate(); return authProvider.credential().then(function (newCredential) { return makeRequest(url, options, latencyTracker, logErrorsAsInfo, newCredential.token); }); } throw error; }); }); }; httpClient.stop = function () { return authProvider.stop(); }; return httpClient; } exports.secureSplitHttpClientFactory = secureSplitHttpClientFactory;