@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
40 lines (39 loc) • 2.21 kB
JavaScript
;
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;