@coolio/auth-interceptor
Version:
Authentication interceptor for Coolio
46 lines • 2.7 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());
});
};
import { BodyCasing, bodyParser, bodySerializer, ContentType, HttpClient } from '@coolio/http';
import { createAuthInterceptor } from './authInterceptor';
import { AuthError } from './authError';
export const createOAuth2Interceptor = ({ oauth: { clientId, clientSecret, contentType, refreshTokenUrl, httpClientOptions, }, authStorage, canAuthorize, onAuthorizationFailure, }) => {
const authHttpClient = new HttpClient(Object.assign({ requestHandler: httpClientOptions.requestHandler, bodyParser: bodyParser({ bodyCasing: BodyCasing.CAMEL_CASE }), bodySerializer: bodySerializer({ bodyCasing: BodyCasing.SNAKE_CASE }) }, httpClientOptions));
const getAuthData = () => __awaiter(void 0, void 0, void 0, function* () {
const authData = yield Promise.resolve(authStorage.getData());
if (!authData) {
throw new AuthError('Data received from AuthStorage is undefined.');
}
return authData;
});
return createAuthInterceptor({
reauthorize: () => __awaiter(void 0, void 0, void 0, function* () {
const response = yield authHttpClient.post(refreshTokenUrl, {
headers: {
'Content-Type': contentType || ContentType.URL_ENCODED,
},
body: {
clientId,
clientSecret,
grantType: 'refresh_token',
refreshToken: (yield getAuthData()).refreshToken,
},
});
const oauth2Data = yield response.parsedBody();
yield Promise.resolve(authStorage.setData(oauth2Data));
}),
setAuthorizationData: (options) => __awaiter(void 0, void 0, void 0, function* () {
const { accessToken, tokenType } = yield getAuthData();
options.headers['Authorization'] = tokenType ? `${tokenType} ${accessToken}` : accessToken;
}),
onAuthorizationFailure,
canAuthorize,
});
};
//# sourceMappingURL=oauth2Interceptor.js.map