UNPKG

@coolio/auth-interceptor

Version:
46 lines 2.7 kB
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