UNPKG

173 kBSource Map (JSON)View Raw
1{
2 "version": 3,
3 "file": "angular-oauth2-oidc.umd.js",
4 "sources": [
5 "ng://angular-oauth2-oidc/out/tokens.ts",
6 "ng://angular-oauth2-oidc/out/token-validation/jwks-validation-handler.ts",
7 "ng://angular-oauth2-oidc/out/angular-oauth-oidic.module.ts",
8 "ng://angular-oauth2-oidc/out/factories.ts",
9 "ng://angular-oauth2-oidc/out/token-validation/null-validation-handler.ts",
10 "ng://angular-oauth2-oidc/out/interceptors/default-oauth.interceptor.ts",
11 "ng://angular-oauth2-oidc/out/interceptors/resource-server-error-handler.ts",
12 "ng://angular-oauth2-oidc/out/oauth-module.config.ts",
13 "ng://angular-oauth2-oidc/out/oauth-service.ts",
14 "ng://angular-oauth2-oidc/out/encoder.ts",
15 "ng://angular-oauth2-oidc/out/auth.config.ts",
16 "ng://angular-oauth2-oidc/out/base64-helper.ts",
17 "ng://angular-oauth2-oidc/out/events.ts",
18 "ng://angular-oauth2-oidc/out/url-helper.service.ts",
19 "ng://angular-oauth2-oidc/out/token-validation/validation-handler.ts",
20 "ng://angular-oauth2-oidc/out/types.ts",
21 "ng://angular-oauth2-oidc/node_modules/tslib/tslib.es6.js"
22 ],
23 "sourcesContent": [
24 "import { InjectionToken } from '@angular/core';\r\nimport { AuthConfig } from './auth.config';\r\n\r\nexport const AUTH_CONFIG = new InjectionToken<AuthConfig>('AUTH_CONFIG');\r\n",
25 "import {\r\n AbstractValidationHandler,\r\n ValidationParams\r\n} from './validation-handler';\r\n\r\n// declare var require: any;\r\n// let rs = require('jsrsasign');\r\n\r\nimport * as rs from 'jsrsasign';\r\n\r\n/**\r\n * Validates the signature of an id_token against one\r\n * of the keys of an JSON Web Key Set (jwks).\r\n *\r\n * This jwks can be provided by the discovery document.\r\n */\r\nexport class JwksValidationHandler extends AbstractValidationHandler {\r\n /**\r\n * Allowed algorithms\r\n */\r\n allowedAlgorithms: string[] = [\r\n 'HS256',\r\n 'HS384',\r\n 'HS512',\r\n 'RS256',\r\n 'RS384',\r\n 'RS512',\r\n 'ES256',\r\n 'ES384',\r\n 'PS256',\r\n 'PS384',\r\n 'PS512'\r\n ];\r\n\r\n /**\r\n * Time period in seconds the timestamp in the signature can\r\n * differ from the current time.\r\n */\r\n gracePeriodInSec = 600;\r\n\r\n validateSignature(params: ValidationParams, retry = false): Promise<any> {\r\n if (!params.idToken) throw new Error('Parameter idToken expected!');\r\n if (!params.idTokenHeader)\r\n throw new Error('Parameter idTokenHandler expected.');\r\n if (!params.jwks) throw new Error('Parameter jwks expected!');\r\n\r\n if (\r\n !params.jwks['keys'] ||\r\n !Array.isArray(params.jwks['keys']) ||\r\n params.jwks['keys'].length === 0\r\n ) {\r\n throw new Error('Array keys in jwks missing!');\r\n }\r\n\r\n // console.debug('validateSignature: retry', retry);\r\n\r\n let kid: string = params.idTokenHeader['kid'];\r\n let keys: object[] = params.jwks['keys'];\r\n let key: object;\r\n\r\n let alg = params.idTokenHeader['alg'];\r\n\r\n if (kid) {\r\n key = keys.find(k => k['kid'] === kid /* && k['use'] === 'sig' */);\r\n } else {\r\n let kty = this.alg2kty(alg);\r\n let matchingKeys = keys.filter(\r\n k => k['kty'] === kty && k['use'] === 'sig'\r\n );\r\n\r\n /*\r\n if (matchingKeys.length == 0) {\r\n let error = 'No matching key found.';\r\n console.error(error);\r\n return Promise.reject(error);\r\n }*/\r\n if (matchingKeys.length > 1) {\r\n let error =\r\n 'More than one matching key found. Please specify a kid in the id_token header.';\r\n console.error(error);\r\n return Promise.reject(error);\r\n } else if (matchingKeys.length === 1) {\r\n key = matchingKeys[0];\r\n }\r\n }\r\n\r\n if (!key && !retry && params.loadKeys) {\r\n return params\r\n .loadKeys()\r\n .then(loadedKeys => (params.jwks = loadedKeys))\r\n .then(_ => this.validateSignature(params, true));\r\n }\r\n\r\n if (!key && retry && !kid) {\r\n let error = 'No matching key found.';\r\n console.error(error);\r\n return Promise.reject(error);\r\n }\r\n\r\n if (!key && retry && kid) {\r\n let error =\r\n 'expected key not found in property jwks. ' +\r\n 'This property is most likely loaded with the ' +\r\n 'discovery document. ' +\r\n 'Expected key id (kid): ' +\r\n kid;\r\n\r\n console.error(error);\r\n return Promise.reject(error);\r\n }\r\n\r\n let keyObj = rs.KEYUTIL.getKey(key);\r\n let validationOptions = {\r\n alg: this.allowedAlgorithms,\r\n gracePeriod: this.gracePeriodInSec\r\n };\r\n let isValid = rs.KJUR.jws.JWS.verifyJWT(\r\n params.idToken,\r\n keyObj,\r\n validationOptions\r\n );\r\n\r\n if (isValid) {\r\n return Promise.resolve();\r\n } else {\r\n return Promise.reject('Signature not valid');\r\n }\r\n }\r\n\r\n private alg2kty(alg: string) {\r\n switch (alg.charAt(0)) {\r\n case 'R':\r\n return 'RSA';\r\n case 'E':\r\n return 'EC';\r\n default:\r\n throw new Error('Cannot infer kty from alg: ' + alg);\r\n }\r\n }\r\n\r\n calcHash(valueToHash: string, algorithm: string): Promise<string> {\r\n let hashAlg = new rs.KJUR.crypto.MessageDigest({ alg: algorithm });\r\n let result = hashAlg.digestString(valueToHash);\r\n let byteArrayAsString = this.toByteArrayAsString(result);\r\n return Promise.resolve(byteArrayAsString);\r\n }\r\n\r\n toByteArrayAsString(hexString: string) {\r\n let result = '';\r\n for (let i = 0; i < hexString.length; i += 2) {\r\n let hexDigit = hexString.charAt(i) + hexString.charAt(i + 1);\r\n let num = parseInt(hexDigit, 16);\r\n result += String.fromCharCode(num);\r\n }\r\n return result;\r\n }\r\n}",
26 "import { OAuthStorage, OAuthLogger } from './types';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\n\r\nimport { OAuthService } from './oauth-service';\r\nimport { UrlHelperService } from './url-helper.service';\r\n\r\nimport { OAuthModuleConfig } from './oauth-module.config';\r\nimport {\r\n OAuthResourceServerErrorHandler,\r\n OAuthNoopResourceServerErrorHandler\r\n} from './interceptors/resource-server-error-handler';\r\nimport { DefaultOAuthInterceptor } from './interceptors/default-oauth.interceptor';\r\nimport { ValidationHandler } from './token-validation/validation-handler';\r\nimport { NullValidationHandler } from './token-validation/null-validation-handler';\r\nimport { createDefaultLogger, createDefaultStorage } from './factories';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [],\r\n exports: []\r\n})\r\nexport class OAuthModule {\r\n static forRoot(\r\n config: OAuthModuleConfig = null,\r\n validationHandlerClass = NullValidationHandler\r\n ): ModuleWithProviders {\r\n return {\r\n ngModule: OAuthModule,\r\n providers: [\r\n OAuthService,\r\n UrlHelperService,\r\n { provide: OAuthLogger, useFactory: createDefaultLogger },\r\n { provide: OAuthStorage, useFactory: createDefaultStorage },\r\n { provide: ValidationHandler, useClass: validationHandlerClass},\r\n {\r\n provide: OAuthResourceServerErrorHandler,\r\n useClass: OAuthNoopResourceServerErrorHandler\r\n },\r\n { provide: OAuthModuleConfig, useValue: config },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: DefaultOAuthInterceptor,\r\n multi: true\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n",
27 "export function createDefaultLogger() {\r\n return console;\r\n}\r\n\r\nexport function createDefaultStorage() {\r\n return typeof sessionStorage !== 'undefined' ? sessionStorage : null;\r\n}",
28 "import { ValidationHandler, ValidationParams } from './validation-handler';\r\n\r\n/**\r\n * A validation handler that isn't validating nothing.\r\n * Can be used to skip validation (at your own risk).\r\n */\r\nexport class NullValidationHandler implements ValidationHandler {\r\n validateSignature(validationParams: ValidationParams): Promise<any> {\r\n return Promise.resolve(null);\r\n }\r\n validateAtHash(validationParams: ValidationParams): Promise<boolean> {\r\n return Promise.resolve(true);\r\n }\r\n}\r\n",
29 "import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { OAuthService } from '../oauth-service';\r\nimport { OAuthStorage } from '../types';\r\nimport {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n HttpResponse,\r\n HttpErrorResponse\r\n} from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { OAuthResourceServerErrorHandler } from './resource-server-error-handler';\r\nimport { OAuthModuleConfig } from '../oauth-module.config';\r\n\r\n@Injectable()\r\nexport class DefaultOAuthInterceptor implements HttpInterceptor {\r\n constructor(\r\n private authStorage: OAuthStorage,\r\n private errorHandler: OAuthResourceServerErrorHandler,\r\n @Optional() private moduleConfig: OAuthModuleConfig\r\n ) { }\r\n\r\n private checkUrl(url: string): boolean {\r\n const found = this.moduleConfig.resourceServer.allowedUrls.find(u => url.startsWith(u));\r\n return !!found;\r\n }\r\n\r\n public intercept(\r\n req: HttpRequest<any>,\r\n next: HttpHandler\r\n ): Observable<HttpEvent<any>> {\r\n const url = req.url.toLowerCase();\r\n\r\n if (!this.moduleConfig) {\r\n return next.handle(req);\r\n }\r\n if (!this.moduleConfig.resourceServer) {\r\n return next.handle(req);\r\n }\r\n if (this.moduleConfig.resourceServer.allowedUrls && !this.checkUrl(url)) {\r\n return next.handle(req);\r\n }\r\n\r\n const sendAccessToken = this.moduleConfig.resourceServer.sendAccessToken;\r\n\r\n if (sendAccessToken && this.authStorage.getItem('access_token')) {\r\n const token = this.authStorage.getItem('access_token');\r\n const header = 'Bearer ' + token;\r\n\r\n const headers = req.headers.set('Authorization', header);\r\n\r\n req = req.clone({ headers });\r\n }\r\n\r\n return next\r\n .handle(req)\r\n .pipe(catchError(err => this.errorHandler.handleError(err)));\r\n }\r\n}\r\n",
30 "import { HttpResponse } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\n\r\nexport abstract class OAuthResourceServerErrorHandler {\r\n abstract handleError(err: HttpResponse<any>): Observable<any>;\r\n}\r\n\r\nexport class OAuthNoopResourceServerErrorHandler\r\n implements OAuthResourceServerErrorHandler {\r\n handleError(err: HttpResponse<any>): Observable<any> {\r\n return throwError(err);\r\n }\r\n}\r\n",
31 "export abstract class OAuthModuleConfig {\r\n resourceServer: OAuthResourceServerConfig;\r\n}\r\n\r\nexport abstract class OAuthResourceServerConfig {\r\n /**\r\n * Urls for which calls should be intercepted.\r\n * If there is an ResourceServerErrorHandler registered, it is used for them.\r\n * If sendAccessToken is set to true, the access_token is send to them too.\r\n */\r\n allowedUrls?: Array<string>;\r\n sendAccessToken: boolean;\r\n}\r\n",
32 "import { Injectable, NgZone, Optional } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Observable, Subject, Subscription, of, race } from 'rxjs';\r\nimport { filter, take, delay, first, tap, map } from 'rxjs/operators';\r\n\r\nimport {\r\n ValidationHandler,\r\n ValidationParams\r\n} from './token-validation/validation-handler';\r\nimport { UrlHelperService } from './url-helper.service';\r\nimport {\r\n OAuthEvent,\r\n OAuthInfoEvent,\r\n OAuthErrorEvent,\r\n OAuthSuccessEvent\r\n} from './events';\r\nimport {\r\n OAuthLogger,\r\n OAuthStorage,\r\n LoginOptions,\r\n ParsedIdToken,\r\n OidcDiscoveryDoc,\r\n TokenResponse,\r\n UserInfo\r\n} from './types';\r\nimport { b64DecodeUnicode } from './base64-helper';\r\nimport { AuthConfig } from './auth.config';\r\nimport { WebHttpUrlEncodingCodec } from './encoder';\r\n\r\n/**\r\n * Service for logging in and logging out with\r\n * OIDC and OAuth2. Supports implicit flow and\r\n * password flow.\r\n */\r\n@Injectable()\r\nexport class OAuthService extends AuthConfig {\r\n // Extending AuthConfig ist just for LEGACY reasons\r\n // to not break existing code.\r\n\r\n /**\r\n * The ValidationHandler used to validate received\r\n * id_tokens.\r\n */\r\n public tokenValidationHandler: ValidationHandler;\r\n\r\n /**\r\n * @internal\r\n * Deprecated: use property events instead\r\n */\r\n public discoveryDocumentLoaded = false;\r\n\r\n /**\r\n * @internal\r\n * Deprecated: use property events instead\r\n */\r\n public discoveryDocumentLoaded$: Observable<object>;\r\n\r\n /**\r\n * Informs about events, like token_received or token_expires.\r\n * See the string enum EventType for a full list of event types.\r\n */\r\n public events: Observable<OAuthEvent>;\r\n\r\n /**\r\n * The received (passed around) state, when logging\r\n * in with implicit flow.\r\n */\r\n public state? = '';\r\n\r\n protected eventsSubject: Subject<OAuthEvent> = new Subject<OAuthEvent>();\r\n protected discoveryDocumentLoadedSubject: Subject<object> = new Subject<object>();\r\n protected silentRefreshPostMessageEventListener: EventListener;\r\n protected grantTypesSupported: Array<string> = [];\r\n protected _storage: OAuthStorage;\r\n protected accessTokenTimeoutSubscription: Subscription;\r\n protected idTokenTimeoutSubscription: Subscription;\r\n protected sessionCheckEventListener: EventListener;\r\n protected jwksUri: string;\r\n protected sessionCheckTimer: any;\r\n protected silentRefreshSubject: string;\r\n protected inImplicitFlow = false;\r\n\r\n constructor(\r\n protected ngZone: NgZone,\r\n protected http: HttpClient,\r\n @Optional() storage: OAuthStorage,\r\n @Optional() tokenValidationHandler: ValidationHandler,\r\n @Optional() protected config: AuthConfig,\r\n protected urlHelper: UrlHelperService,\r\n protected logger: OAuthLogger,\r\n ) {\r\n super();\r\n\r\n this.discoveryDocumentLoaded$ = this.discoveryDocumentLoadedSubject.asObservable();\r\n this.events = this.eventsSubject.asObservable();\r\n\r\n if (tokenValidationHandler) {\r\n this.tokenValidationHandler = tokenValidationHandler;\r\n }\r\n\r\n if (config) {\r\n this.configure(config);\r\n }\r\n\r\n try {\r\n if (storage) {\r\n this.setStorage(storage);\r\n } else if (typeof sessionStorage !== 'undefined') {\r\n this.setStorage(sessionStorage);\r\n }\r\n } catch (e) {\r\n\r\n console.error(\r\n 'No OAuthStorage provided and cannot access default (sessionStorage).'\r\n + 'Consider providing a custom OAuthStorage implementation in your module.',\r\n e\r\n );\r\n }\r\n\r\n this.setupRefreshTimer();\r\n }\r\n\r\n /**\r\n * Use this method to configure the service\r\n * @param config the configuration\r\n */\r\n public configure(config: AuthConfig) {\r\n // For the sake of downward compatibility with\r\n // original configuration API\r\n Object.assign(this, new AuthConfig(), config);\r\n\r\n this.config = Object.assign({} as AuthConfig, new AuthConfig(), config);\r\n\r\n if (this.sessionChecksEnabled) {\r\n this.setupSessionCheck();\r\n }\r\n\r\n this.configChanged();\r\n }\r\n\r\n protected configChanged(): void { }\r\n\r\n public restartSessionChecksIfStillLoggedIn(): void {\r\n if (this.hasValidIdToken()) {\r\n this.initSessionCheck();\r\n }\r\n }\r\n\r\n protected restartRefreshTimerIfStillLoggedIn(): void {\r\n this.setupExpirationTimers();\r\n }\r\n\r\n protected setupSessionCheck() {\r\n this.events.pipe(filter(e => e.type === 'token_received')).subscribe(e => {\r\n this.initSessionCheck();\r\n });\r\n }\r\n\r\n /**\r\n * Will setup up silent refreshing for when the token is\r\n * about to expire.\r\n * @param params Additional parameter to pass\r\n */\r\n public setupAutomaticSilentRefresh(params: object = {}) {\r\n this.events.pipe(filter(e => e.type === 'token_expires')).subscribe(e => {\r\n this.silentRefresh(params).catch(_ => {\r\n this.debug('Automatic silent refresh did not work');\r\n });\r\n });\r\n\r\n this.restartRefreshTimerIfStillLoggedIn();\r\n }\r\n\r\n\r\n /**\r\n * Convenience method that first calls `loadDiscoveryDocument(...)` and\r\n * directly chains using the `then(...)` part of the promise to call\r\n * the `tryLogin(...)` method.\r\n *\r\n * @param options LoginOptions to pass through to `tryLogin(...)`\r\n */\r\n public loadDiscoveryDocumentAndTryLogin(options: LoginOptions = null): Promise<boolean> {\r\n return this.loadDiscoveryDocument().then(doc => {\r\n return this.tryLogin(options);\r\n });\r\n }\r\n\r\n /**\r\n * Convenience method that first calls `loadDiscoveryDocumentAndTryLogin(...)`\r\n * and if then chains to `initImplicitFlow()`, but only if there is no valid\r\n * IdToken or no valid AccessToken.\r\n *\r\n * @param options LoginOptions to pass through to `tryLogin(...)`\r\n */\r\n public loadDiscoveryDocumentAndLogin(options: LoginOptions = null): Promise<boolean> {\r\n return this.loadDiscoveryDocumentAndTryLogin(options).then(_ => {\r\n if (!this.hasValidIdToken() || !this.hasValidAccessToken()) {\r\n this.initImplicitFlow();\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n protected debug(...args): void {\r\n if (this.showDebugInformation) {\r\n this.logger.debug.apply(console, args);\r\n }\r\n }\r\n\r\n protected validateUrlFromDiscoveryDocument(url: string): string[] {\r\n const errors: string[] = [];\r\n const httpsCheck = this.validateUrlForHttps(url);\r\n const issuerCheck = this.validateUrlAgainstIssuer(url);\r\n\r\n if (!httpsCheck) {\r\n errors.push(\r\n 'https for all urls required. Also for urls received by discovery.'\r\n );\r\n }\r\n\r\n if (!issuerCheck) {\r\n errors.push(\r\n 'Every url in discovery document has to start with the issuer url.' +\r\n 'Also see property strictDiscoveryDocumentValidation.'\r\n );\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n protected validateUrlForHttps(url: string): boolean {\r\n if (!url) {\r\n return true;\r\n }\r\n\r\n const lcUrl = url.toLowerCase();\r\n\r\n if (this.requireHttps === false) {\r\n return true;\r\n }\r\n\r\n if (\r\n (lcUrl.match(/^http:\\/\\/localhost($|[:\\/])/) ||\r\n lcUrl.match(/^http:\\/\\/localhost($|[:\\/])/)) &&\r\n this.requireHttps === 'remoteOnly'\r\n ) {\r\n return true;\r\n }\r\n\r\n return lcUrl.startsWith('https://');\r\n }\r\n\r\n protected validateUrlAgainstIssuer(url: string) {\r\n if (!this.strictDiscoveryDocumentValidation) {\r\n return true;\r\n }\r\n if (!url) {\r\n return true;\r\n }\r\n return url.toLowerCase().startsWith(this.issuer.toLowerCase());\r\n }\r\n\r\n protected setupRefreshTimer(): void {\r\n if (typeof window === 'undefined') {\r\n this.debug('timer not supported on this plattform');\r\n return;\r\n }\r\n\r\n if (this.hasValidIdToken()) {\r\n this.clearAccessTokenTimer();\r\n this.clearIdTokenTimer();\r\n this.setupExpirationTimers();\r\n }\r\n\r\n this.events.pipe(filter(e => e.type === 'token_received')).subscribe(_ => {\r\n this.clearAccessTokenTimer();\r\n this.clearIdTokenTimer();\r\n this.setupExpirationTimers();\r\n });\r\n }\r\n\r\n protected setupExpirationTimers(): void {\r\n const idTokenExp = this.getIdTokenExpiration() || Number.MAX_VALUE;\r\n const accessTokenExp = this.getAccessTokenExpiration() || Number.MAX_VALUE;\r\n const useAccessTokenExp = accessTokenExp <= idTokenExp;\r\n\r\n if (this.hasValidAccessToken() && useAccessTokenExp) {\r\n this.setupAccessTokenTimer();\r\n }\r\n\r\n if (this.hasValidIdToken() && !useAccessTokenExp) {\r\n this.setupIdTokenTimer();\r\n }\r\n }\r\n\r\n protected setupAccessTokenTimer(): void {\r\n const expiration = this.getAccessTokenExpiration();\r\n const storedAt = this.getAccessTokenStoredAt();\r\n const timeout = this.calcTimeout(storedAt, expiration);\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.accessTokenTimeoutSubscription = of(\r\n new OAuthInfoEvent('token_expires', 'access_token')\r\n )\r\n .pipe(delay(timeout))\r\n .subscribe(e => {\r\n this.ngZone.run(() => {\r\n this.eventsSubject.next(e);\r\n });\r\n });\r\n });\r\n }\r\n\r\n protected setupIdTokenTimer(): void {\r\n const expiration = this.getIdTokenExpiration();\r\n const storedAt = this.getIdTokenStoredAt();\r\n const timeout = this.calcTimeout(storedAt, expiration);\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.idTokenTimeoutSubscription = of(\r\n new OAuthInfoEvent('token_expires', 'id_token')\r\n )\r\n .pipe(delay(timeout))\r\n .subscribe(e => {\r\n this.ngZone.run(() => {\r\n this.eventsSubject.next(e);\r\n });\r\n });\r\n });\r\n }\r\n\r\n protected clearAccessTokenTimer(): void {\r\n if (this.accessTokenTimeoutSubscription) {\r\n this.accessTokenTimeoutSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n protected clearIdTokenTimer(): void {\r\n if (this.idTokenTimeoutSubscription) {\r\n this.idTokenTimeoutSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n protected calcTimeout(storedAt: number, expiration: number): number {\r\n const delta = (expiration - storedAt) * this.timeoutFactor;\r\n return delta;\r\n }\r\n\r\n /**\r\n * DEPRECATED. Use a provider for OAuthStorage instead:\r\n *\r\n * { provide: OAuthStorage, useValue: localStorage }\r\n *\r\n * Sets a custom storage used to store the received\r\n * tokens on client side. By default, the browser's\r\n * sessionStorage is used.\r\n * @ignore\r\n *\r\n * @param storage\r\n */\r\n public setStorage(storage: OAuthStorage): void {\r\n this._storage = storage;\r\n this.configChanged();\r\n }\r\n\r\n /**\r\n * Loads the discovery document to configure most\r\n * properties of this service. The url of the discovery\r\n * document is infered from the issuer's url according\r\n * to the OpenId Connect spec. To use another url you\r\n * can pass it to to optional parameter fullUrl.\r\n *\r\n * @param fullUrl\r\n */\r\n public loadDiscoveryDocument(fullUrl: string = null): Promise<object> {\r\n return new Promise((resolve, reject) => {\r\n if (!fullUrl) {\r\n fullUrl = this.issuer || '';\r\n if (!fullUrl.endsWith('/')) {\r\n fullUrl += '/';\r\n }\r\n fullUrl += '.well-known/openid-configuration';\r\n }\r\n\r\n if (!this.validateUrlForHttps(fullUrl)) {\r\n reject('issuer must use https, or config value for property requireHttps must allow http');\r\n return;\r\n }\r\n\r\n this.http.get<OidcDiscoveryDoc>(fullUrl).subscribe(\r\n doc => {\r\n if (!this.validateDiscoveryDocument(doc)) {\r\n this.eventsSubject.next(\r\n new OAuthErrorEvent('discovery_document_validation_error', null)\r\n );\r\n reject('discovery_document_validation_error');\r\n return;\r\n }\r\n\r\n this.loginUrl = doc.authorization_endpoint;\r\n this.logoutUrl = doc.end_session_endpoint || this.logoutUrl;\r\n this.grantTypesSupported = doc.grant_types_supported;\r\n this.issuer = doc.issuer;\r\n this.tokenEndpoint = doc.token_endpoint;\r\n this.userinfoEndpoint = doc.userinfo_endpoint;\r\n this.jwksUri = doc.jwks_uri;\r\n this.sessionCheckIFrameUrl = doc.check_session_iframe || this.sessionCheckIFrameUrl;\r\n\r\n this.discoveryDocumentLoaded = true;\r\n this.discoveryDocumentLoadedSubject.next(doc);\r\n\r\n if (this.sessionChecksEnabled) {\r\n this.restartSessionChecksIfStillLoggedIn();\r\n }\r\n\r\n this.loadJwks()\r\n .then(jwks => {\r\n const result: object = {\r\n discoveryDocument: doc,\r\n jwks: jwks\r\n };\r\n\r\n const event = new OAuthSuccessEvent(\r\n 'discovery_document_loaded',\r\n result\r\n );\r\n this.eventsSubject.next(event);\r\n resolve(event);\r\n return;\r\n })\r\n .catch(err => {\r\n this.eventsSubject.next(\r\n new OAuthErrorEvent('discovery_document_load_error', err)\r\n );\r\n reject(err);\r\n return;\r\n });\r\n },\r\n err => {\r\n this.logger.error('error loading discovery document', err);\r\n this.eventsSubject.next(\r\n new OAuthErrorEvent('discovery_document_load_error', err)\r\n );\r\n reject(err);\r\n }\r\n );\r\n });\r\n }\r\n\r\n protected loadJwks(): Promise<object> {\r\n return new Promise<object>((resolve, reject) => {\r\n if (this.jwksUri) {\r\n this.http.get(this.jwksUri).subscribe(\r\n jwks => {\r\n this.jwks = jwks;\r\n this.eventsSubject.next(\r\n new OAuthSuccessEvent('discovery_document_loaded')\r\n );\r\n resolve(jwks);\r\n },\r\n err => {\r\n this.logger.error('error loading jwks', err);\r\n this.eventsSubject.next(\r\n new OAuthErrorEvent('jwks_load_error', err)\r\n );\r\n reject(err);\r\n }\r\n );\r\n } else {\r\n resolve(null);\r\n }\r\n });\r\n }\r\n\r\n protected validateDiscoveryDocument(doc: OidcDiscoveryDoc): boolean {\r\n let errors: string[];\r\n\r\n if (!this.skipIssuerCheck && doc.issuer !== this.issuer) {\r\n this.logger.error(\r\n 'invalid issuer in discovery document',\r\n 'expected: ' + this.issuer,\r\n 'current: ' + doc.issuer\r\n );\r\n return false;\r\n }\r\n\r\n errors = this.validateUrlFromDiscoveryDocument(doc.authorization_endpoint);\r\n if (errors.length > 0) {\r\n this.logger.error(\r\n 'error validating authorization_endpoint in discovery document',\r\n errors\r\n );\r\n return false;\r\n }\r\n\r\n errors = this.validateUrlFromDiscoveryDocument(doc.end_session_endpoint);\r\n if (errors.length > 0) {\r\n this.logger.error(\r\n 'error validating end_session_endpoint in discovery document',\r\n errors\r\n );\r\n return false;\r\n }\r\n\r\n errors = this.validateUrlFromDiscoveryDocument(doc.token_endpoint);\r\n if (errors.length > 0) {\r\n this.logger.error(\r\n 'error validating token_endpoint in discovery document',\r\n errors\r\n );\r\n }\r\n\r\n errors = this.validateUrlFromDiscoveryDocument(doc.userinfo_endpoint);\r\n if (errors.length > 0) {\r\n this.logger.error(\r\n 'error validating userinfo_endpoint in discovery document',\r\n errors\r\n );\r\n return false;\r\n }\r\n\r\n errors = this.validateUrlFromDiscoveryDocument(doc.jwks_uri);\r\n if (errors.length > 0) {\r\n this.logger.error('error validating jwks_uri in discovery document', errors);\r\n return false;\r\n }\r\n\r\n if (this.sessionChecksEnabled && !doc.check_session_iframe) {\r\n this.logger.warn(\r\n 'sessionChecksEnabled is activated but discovery document' +\r\n ' does not contain a check_session_iframe field'\r\n );\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Uses password flow to exchange userName and password for an\r\n * access_token. After receiving the access_token, this method\r\n * uses it to query the userinfo endpoint in order to get information\r\n * about the user in question.\r\n *\r\n * When using this, make sure that the property oidc is set to false.\r\n * Otherwise stricter validations take place that make this operation\r\n * fail.\r\n *\r\n * @param userName\r\n * @param password\r\n * @param headers Optional additional http-headers.\r\n */\r\n public fetchTokenUsingPasswordFlowAndLoadUserProfile(\r\n userName: string,\r\n password: string,\r\n headers: HttpHeaders = new HttpHeaders()\r\n ): Promise<object> {\r\n return this.fetchTokenUsingPasswordFlow(userName, password, headers).then(\r\n () => this.loadUserProfile()\r\n );\r\n }\r\n\r\n /**\r\n * Loads the user profile by accessing the user info endpoint defined by OpenId Connect.\r\n *\r\n * When using this with OAuth2 password flow, make sure that the property oidc is set to false.\r\n * Otherwise stricter validations take place that make this operation fail.\r\n */\r\n public loadUserProfile(): Promise<object> {\r\n if (!this.hasValidAccessToken()) {\r\n throw new Error('Can not load User Profile without access_token');\r\n }\r\n if (!this.validateUrlForHttps(this.userinfoEndpoint)) {\r\n throw new Error(\r\n 'userinfoEndpoint must use http, or config value for property requireHttps must allow http'\r\n );\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const headers = new HttpHeaders().set(\r\n 'Authorization',\r\n 'Bearer ' + this.getAccessToken()\r\n );\r\n\r\n this.http.get<UserInfo>(this.userinfoEndpoint, { headers }).subscribe(\r\n info => {\r\n this.debug('userinfo received', info);\r\n\r\n const existingClaims = this.getIdentityClaims() || {};\r\n\r\n if (!this.skipSubjectCheck) {\r\n if (\r\n this.oidc &&\r\n (!existingClaims['sub'] || info.sub !== existingClaims['sub'])\r\n ) {\r\n const err =\r\n 'if property oidc is true, the received user-id (sub) has to be the user-id ' +\r\n 'of the user that has logged in with oidc.\\n' +\r\n 'if you are not using oidc but just oauth2 password flow set oidc to false';\r\n\r\n reject(err);\r\n return;\r\n }\r\n }\r\n\r\n info = Object.assign({}, existingClaims, info);\r\n\r\n this._storage.setItem('id_token_claims_obj', JSON.stringify(info));\r\n this.eventsSubject.next(new OAuthSuccessEvent('user_profile_loaded'));\r\n resolve(info);\r\n },\r\n err => {\r\n this.logger.error('error loading user info', err);\r\n this.eventsSubject.next(\r\n new OAuthErrorEvent('user_profile_load_error', err)\r\n );\r\n reject(err);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Uses password flow to exchange userName and password for an access_token.\r\n * @param userName\r\n * @param password\r\n * @param headers Optional additional http-headers.\r\n */\r\n public fetchTokenUsingPasswordFlow(\r\n userName: string,\r\n password: string,\r\n headers: HttpHeaders = new HttpHeaders()\r\n ): Promise<object> {\r\n if (!this.validateUrlForHttps(this.tokenEndpoint)) {\r\n throw new Error(\r\n 'tokenEndpoint must use http, or config value for property requireHttps must allow http'\r\n );\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n /**\r\n * A `HttpParameterCodec` that uses `encodeURIComponent` and `decodeURIComponent` to\r\n * serialize and parse URL parameter keys and values.\r\n *\r\n * @stable\r\n */\r\n let params = new HttpParams({ encoder: new WebHttpUrlEncodingCodec() })\r\n .set('grant_type', 'password')\r\n .set('scope', this.scope)\r\n .set('username', userName)\r\n .set('password', password);\r\n\r\n if (this.useHttpBasicAuthForPasswordFlow) {\r\n const header = btoa(`${this.clientId}:${this.dummyClientSecret}`);\r\n headers = headers.set(\r\n 'Authorization',\r\n 'Basic ' + header);\r\n }\r\n\r\n if (!this.useHttpBasicAuthForPasswordFlow) {\r\n params = params.set('client_id', this.clientId);\r\n }\r\n\r\n if (!this.useHttpBasicAuthForPasswordFlow && this.dummyClientSecret) {\r\n params = params.set('client_secret', this.dummyClientSecret);\r\n }\r\n\r\n if (this.customQueryParams) {\r\n for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {\r\n params = params.set(key, this.customQueryParams[key]);\r\n }\r\n }\r\n\r\n headers = headers.set(\r\n 'Content-Type',\r\n 'application/x-www-form-urlencoded'\r\n );\r\n\r\n this.http\r\n .post<TokenResponse>(this.tokenEndpoint, params, { headers })\r\n .subscribe(\r\n tokenResponse => {\r\n this.debug('tokenResponse', tokenResponse);\r\n this.storeAccessTokenResponse(\r\n tokenResponse.access_token,\r\n tokenResponse.refresh_token,\r\n tokenResponse.expires_in,\r\n tokenResponse.scope\r\n );\r\n\r\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\r\n resolve(tokenResponse);\r\n },\r\n err => {\r\n this.logger.error('Error performing password flow', err);\r\n this.eventsSubject.next(new OAuthErrorEvent('token_error', err));\r\n reject(err);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Refreshes the token using a refresh_token.\r\n * This does not work for implicit flow, b/c\r\n * there is no refresh_token in this flow.\r\n * A solution for this is provided by the\r\n * method silentRefresh.\r\n */\r\n public refreshToken(): Promise<object> {\r\n if (!this.validateUrlForHttps(this.tokenEndpoint)) {\r\n throw new Error(\r\n 'tokenEndpoint must use http, or config value for property requireHttps must allow http'\r\n );\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let params = new HttpParams()\r\n .set('grant_type', 'refresh_token')\r\n .set('client_id', this.clientId)\r\n .set('scope', this.scope)\r\n .set('refresh_token', this._storage.getItem('refresh_token'));\r\n\r\n if (this.dummyClientSecret) {\r\n params = params.set('client_secret', this.dummyClientSecret);\r\n }\r\n\r\n if (this.customQueryParams) {\r\n for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {\r\n params = params.set(key, this.customQueryParams[key]);\r\n }\r\n }\r\n\r\n const headers = new HttpHeaders().set(\r\n 'Content-Type',\r\n 'application/x-www-form-urlencoded'\r\n );\r\n\r\n this.http\r\n .post<TokenResponse>(this.tokenEndpoint, params, { headers })\r\n .subscribe(\r\n tokenResponse => {\r\n this.debug('refresh tokenResponse', tokenResponse);\r\n this.storeAccessTokenResponse(\r\n tokenResponse.access_token,\r\n tokenResponse.refresh_token,\r\n tokenResponse.expires_in,\r\n tokenResponse.scope\r\n );\r\n\r\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\r\n this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed'));\r\n resolve(tokenResponse);\r\n },\r\n err => {\r\n this.logger.error('Error performing password flow', err);\r\n this.eventsSubject.next(\r\n new OAuthErrorEvent('token_refresh_error', err)\r\n );\r\n reject(err);\r\n }\r\n );\r\n });\r\n }\r\n\r\n protected removeSilentRefreshEventListener(): void {\r\n if (this.silentRefreshPostMessageEventListener) {\r\n window.removeEventListener(\r\n 'message',\r\n this.silentRefreshPostMessageEventListener\r\n );\r\n this.silentRefreshPostMessageEventListener = null;\r\n }\r\n }\r\n\r\n protected setupSilentRefreshEventListener(): void {\r\n this.removeSilentRefreshEventListener();\r\n\r\n this.silentRefreshPostMessageEventListener = (e: MessageEvent) => {\r\n let expectedPrefix = '#';\r\n\r\n if (this.silentRefreshMessagePrefix) {\r\n expectedPrefix += this.silentRefreshMessagePrefix;\r\n }\r\n\r\n if (!e || !e.data || typeof e.data !== 'string') {\r\n return;\r\n }\r\n\r\n const prefixedMessage: string = e.data;\r\n\r\n if (!prefixedMessage.startsWith(expectedPrefix)) {\r\n return;\r\n }\r\n\r\n const message = '#' + prefixedMessage.substr(expectedPrefix.length);\r\n\r\n this.tryLogin({\r\n customHashFragment: message,\r\n preventClearHashAfterLogin: true,\r\n onLoginError: err => {\r\n this.eventsSubject.next(\r\n new OAuthErrorEvent('silent_refresh_error', err)\r\n );\r\n },\r\n onTokenReceived: () => {\r\n this.eventsSubject.next(new OAuthSuccessEvent('silently_refreshed'));\r\n }\r\n }).catch(err => this.debug('tryLogin during silent refresh failed', err));\r\n };\r\n\r\n window.addEventListener(\r\n 'message',\r\n this.silentRefreshPostMessageEventListener\r\n );\r\n }\r\n\r\n /**\r\n * Performs a silent refresh for implicit flow.\r\n * Use this method to get new tokens when/before\r\n * the existing tokens expire.\r\n */\r\n public silentRefresh(params: object = {}, noPrompt = true): Promise<OAuthEvent> {\r\n const claims: object = this.getIdentityClaims() || {};\r\n\r\n if (this.useIdTokenHintForSilentRefresh && this.hasValidIdToken()) {\r\n params['id_token_hint'] = this.getIdToken();\r\n }\r\n\r\n if (!this.validateUrlForHttps(this.loginUrl)) {\r\n throw new Error(\r\n 'tokenEndpoint must use https, or config value for property requireHttps must allow http'\r\n );\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n throw new Error('silent refresh is not supported on this platform');\r\n }\r\n\r\n const existingIframe = document.getElementById(\r\n this.silentRefreshIFrameName\r\n );\r\n\r\n if (existingIframe) {\r\n document.body.removeChild(existingIframe);\r\n }\r\n\r\n this.silentRefreshSubject = claims['sub'];\r\n\r\n const iframe = document.createElement('iframe');\r\n iframe.id = this.silentRefreshIFrameName;\r\n\r\n this.setupSilentRefreshEventListener();\r\n\r\n const redirectUri = this.silentRefreshRedirectUri || this.redirectUri;\r\n this.createLoginUrl(null, null, redirectUri, noPrompt, params).then(url => {\r\n iframe.setAttribute('src', url);\r\n\r\n if (!this.silentRefreshShowIFrame) {\r\n iframe.style['display'] = 'none';\r\n }\r\n document.body.appendChild(iframe);\r\n });\r\n\r\n const errors = this.events.pipe(\r\n filter(e => e instanceof OAuthErrorEvent),\r\n first()\r\n );\r\n const success = this.events.pipe(\r\n filter(e => e.type === 'silently_refreshed'),\r\n first()\r\n );\r\n const timeout = of(\r\n new OAuthErrorEvent('silent_refresh_timeout', null)\r\n ).pipe(delay(this.silentRefreshTimeout));\r\n\r\n return race([errors, success, timeout])\r\n .pipe(\r\n tap(e => {\r\n if (e.type === 'silent_refresh_timeout') {\r\n this.eventsSubject.next(e);\r\n }\r\n }),\r\n map(e => {\r\n if (e instanceof OAuthErrorEvent) {\r\n throw e;\r\n }\r\n return e;\r\n })\r\n )\r\n .toPromise();\r\n }\r\n\r\n protected canPerformSessionCheck(): boolean {\r\n if (!this.sessionChecksEnabled) {\r\n return false;\r\n }\r\n if (!this.sessionCheckIFrameUrl) {\r\n console.warn(\r\n 'sessionChecksEnabled is activated but there is no sessionCheckIFrameUrl'\r\n );\r\n return false;\r\n }\r\n const sessionState = this.getSessionState();\r\n if (!sessionState) {\r\n console.warn(\r\n 'sessionChecksEnabled is activated but there is no session_state'\r\n );\r\n return false;\r\n }\r\n if (typeof document === 'undefined') {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected setupSessionCheckEventListener(): void {\r\n this.removeSessionCheckEventListener();\r\n\r\n this.sessionCheckEventListener = (e: MessageEvent) => {\r\n const origin = e.origin.toLowerCase();\r\n const issuer = this.issuer.toLowerCase();\r\n\r\n this.debug('sessionCheckEventListener');\r\n\r\n if (!issuer.startsWith(origin)) {\r\n this.debug(\r\n 'sessionCheckEventListener',\r\n 'wrong origin',\r\n origin,\r\n 'expected',\r\n issuer\r\n );\r\n }\r\n\r\n // only run in Angular zone if it is 'changed' or 'error'\r\n switch (e.data) {\r\n case 'unchanged':\r\n this.handleSessionUnchanged();\r\n break;\r\n case 'changed':\r\n this.ngZone.run(() => {\r\n this.handleSessionChange() \r\n });\r\n break;\r\n case 'error':\r\n this.ngZone.run(() => { \r\n this.handleSessionError()\r\n });\r\n break;\r\n }\r\n\r\n this.debug('got info from session check inframe', e);\r\n };\r\n\r\n // prevent Angular from refreshing the view on every message (runs in intervals)\r\n this.ngZone.runOutsideAngular(() => {\r\n window.addEventListener('message', this.sessionCheckEventListener);\r\n });\r\n }\r\n\r\n protected handleSessionUnchanged(): void {\r\n this.debug('session check', 'session unchanged');\r\n }\r\n\r\n protected handleSessionChange(): void {\r\n /* events: session_changed, relogin, stopTimer, logged_out*/\r\n this.eventsSubject.next(new OAuthInfoEvent('session_changed'));\r\n this.stopSessionCheckTimer();\r\n if (this.silentRefreshRedirectUri) {\r\n this.silentRefresh().catch(_ =>\r\n this.debug('silent refresh failed after session changed')\r\n );\r\n this.waitForSilentRefreshAfterSessionChange();\r\n } else {\r\n this.eventsSubject.next(new OAuthInfoEvent('session_terminated'));\r\n this.logOut(true);\r\n }\r\n }\r\n\r\n protected waitForSilentRefreshAfterSessionChange() {\r\n this.events\r\n .pipe(\r\n filter(\r\n (e: OAuthEvent) =>\r\n e.type === 'silently_refreshed' ||\r\n e.type === 'silent_refresh_timeout' ||\r\n e.type === 'silent_refresh_error'\r\n ),\r\n first()\r\n )\r\n .subscribe(e => {\r\n if (e.type !== 'silently_refreshed') {\r\n this.debug('silent refresh did not work after session changed');\r\n this.eventsSubject.next(new OAuthInfoEvent('session_terminated'));\r\n this.logOut(true);\r\n }\r\n });\r\n }\r\n\r\n protected handleSessionError(): void {\r\n this.stopSessionCheckTimer();\r\n this.eventsSubject.next(new OAuthInfoEvent('session_error'));\r\n }\r\n\r\n protected removeSessionCheckEventListener(): void {\r\n if (this.sessionCheckEventListener) {\r\n window.removeEventListener('message', this.sessionCheckEventListener);\r\n this.sessionCheckEventListener = null;\r\n }\r\n }\r\n\r\n protected initSessionCheck(): void {\r\n if (!this.canPerformSessionCheck()) {\r\n return;\r\n }\r\n\r\n const existingIframe = document.getElementById(this.sessionCheckIFrameName);\r\n if (existingIframe) {\r\n document.body.removeChild(existingIframe);\r\n }\r\n\r\n const iframe = document.createElement('iframe');\r\n iframe.id = this.sessionCheckIFrameName;\r\n\r\n this.setupSessionCheckEventListener();\r\n\r\n const url = this.sessionCheckIFrameUrl;\r\n iframe.setAttribute('src', url);\r\n iframe.style.display = 'none';\r\n document.body.appendChild(iframe);\r\n\r\n this.startSessionCheckTimer();\r\n }\r\n\r\n protected startSessionCheckTimer(): void {\r\n this.stopSessionCheckTimer();\r\n this.ngZone.runOutsideAngular(() => {\r\n this.sessionCheckTimer = setInterval(\r\n this.checkSession.bind(this),\r\n this.sessionCheckIntervall\r\n );\r\n });\r\n }\r\n\r\n protected stopSessionCheckTimer(): void {\r\n if (this.sessionCheckTimer) {\r\n clearInterval(this.sessionCheckTimer);\r\n this.sessionCheckTimer = null;\r\n }\r\n }\r\n\r\n protected checkSession(): void {\r\n const iframe: any = document.getElementById(this.sessionCheckIFrameName);\r\n\r\n if (!iframe) {\r\n this.logger.warn(\r\n 'checkSession did not find iframe',\r\n this.sessionCheckIFrameName\r\n );\r\n }\r\n\r\n const sessionState = this.getSessionState();\r\n\r\n if (!sessionState) {\r\n this.stopSessionCheckTimer();\r\n }\r\n\r\n const message = this.clientId + ' ' + sessionState;\r\n iframe.contentWindow.postMessage(message, this.issuer);\r\n }\r\n\r\n protected createLoginUrl(\r\n state = '',\r\n loginHint = '',\r\n customRedirectUri = '',\r\n noPrompt = false,\r\n params: object = {}\r\n ) {\r\n const that = this;\r\n\r\n let redirectUri: string;\r\n\r\n if (customRedirectUri) {\r\n redirectUri = customRedirectUri;\r\n } else {\r\n redirectUri = this.redirectUri;\r\n }\r\n\r\n return this.createAndSaveNonce().then((nonce: any) => {\r\n if (state) {\r\n state = nonce + this.config.nonceStateSeparator + state;\r\n } else {\r\n state = nonce;\r\n }\r\n\r\n if (!this.requestAccessToken && !this.oidc) {\r\n throw new Error(\r\n 'Either requestAccessToken or oidc or both must be true'\r\n );\r\n }\r\n\r\n if (this.config.responseType) {\r\n this.responseType = this.config.responseType;\r\n } else {\r\n if (this.oidc && this.requestAccessToken) {\r\n this.responseType = 'id_token token';\r\n } else if (this.oidc && !this.requestAccessToken) {\r\n this.responseType = 'id_token';\r\n } else {\r\n this.responseType = 'token';\r\n }\r\n }\r\n\r\n const seperationChar = that.loginUrl.indexOf('?') > -1 ? '&' : '?';\r\n\r\n let scope = that.scope;\r\n\r\n if (this.oidc && !scope.match(/(^|\\s)openid($|\\s)/)) {\r\n scope = 'openid ' + scope;\r\n }\r\n\r\n let url =\r\n that.loginUrl +\r\n seperationChar +\r\n 'response_type=' +\r\n encodeURIComponent(that.responseType) +\r\n '&client_id=' +\r\n encodeURIComponent(that.clientId) +\r\n '&state=' +\r\n encodeURIComponent(state) +\r\n '&redirect_uri=' +\r\n encodeURIComponent(redirectUri) +\r\n '&scope=' +\r\n encodeURIComponent(scope);\r\n\r\n if (loginHint) {\r\n url += '&login_hint=' + encodeURIComponent(loginHint);\r\n }\r\n\r\n if (that.resource) {\r\n url += '&resource=' + encodeURIComponent(that.resource);\r\n }\r\n\r\n if (that.oidc) {\r\n url += '&nonce=' + encodeURIComponent(nonce);\r\n }\r\n\r\n if (noPrompt) {\r\n url += '&prompt=none';\r\n }\r\n\r\n for (const key of Object.keys(params)) {\r\n url +=\r\n '&' + encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\r\n }\r\n\r\n if (this.customQueryParams) {\r\n for (const key of Object.getOwnPropertyNames(this.customQueryParams)) {\r\n url +=\r\n '&' + key + '=' + encodeURIComponent(this.customQueryParams[key]);\r\n }\r\n }\r\n\r\n return url;\r\n });\r\n }\r\n\r\n initImplicitFlowInternal(\r\n additionalState = '',\r\n params: string | object = ''\r\n ): void {\r\n if (this.inImplicitFlow) {\r\n return;\r\n }\r\n\r\n this.inImplicitFlow = true;\r\n\r\n if (!this.validateUrlForHttps(this.loginUrl)) {\r\n throw new Error(\r\n 'loginUrl must use http, or config value for property requireHttps must allow http'\r\n );\r\n }\r\n\r\n let addParams: object = {};\r\n let loginHint: string = null;\r\n\r\n if (typeof params === 'string') {\r\n loginHint = params;\r\n } else if (typeof params === 'object') {\r\n addParams = params;\r\n }\r\n\r\n this.createLoginUrl(additionalState, loginHint, null, false, addParams)\r\n .then(function (url) {\r\n location.href = url;\r\n })\r\n .catch(error => {\r\n console.error('Error in initImplicitFlow', error);\r\n this.inImplicitFlow = false;\r\n });\r\n }\r\n\r\n /**\r\n * Starts the implicit flow and redirects to user to\r\n * the auth servers' login url.\r\n *\r\n * @param additionalState Optional state that is passed around.\r\n * You'll find this state in the property `state` after `tryLogin` logged in the user.\r\n * @param params Hash with additional parameter. If it is a string, it is used for the\r\n * parameter loginHint (for the sake of compatibility with former versions)\r\n */\r\n public initImplicitFlow(\r\n additionalState = '',\r\n params: string | object = ''\r\n ): void {\r\n if (this.loginUrl !== '') {\r\n this.initImplicitFlowInternal(additionalState, params);\r\n } else {\r\n this.events\r\n .pipe(filter(e => e.type === 'discovery_document_loaded'))\r\n .subscribe(_ => this.initImplicitFlowInternal(additionalState, params));\r\n }\r\n }\r\n\r\n protected callOnTokenReceivedIfExists(options: LoginOptions): void {\r\n const that = this;\r\n if (options.onTokenReceived) {\r\n const tokenParams = {\r\n idClaims: that.getIdentityClaims(),\r\n idToken: that.getIdToken(),\r\n accessToken: that.getAccessToken(),\r\n state: that.state\r\n };\r\n options.onTokenReceived(tokenParams);\r\n }\r\n }\r\n\r\n protected storeAccessTokenResponse(\r\n accessToken: string,\r\n refreshToken: string,\r\n expiresIn: number,\r\n grantedScopes: String\r\n ): void {\r\n this._storage.setItem('access_token', accessToken);\r\n if (grantedScopes) {\r\n this._storage.setItem('granted_scopes', JSON.stringify(grantedScopes.split('+')));\r\n }\r\n this._storage.setItem('access_token_stored_at', '' + Date.now());\r\n if (expiresIn) {\r\n const expiresInMilliSeconds = expiresIn * 1000;\r\n const now = new Date();\r\n const expiresAt = now.getTime() + expiresInMilliSeconds;\r\n this._storage.setItem('expires_at', '' + expiresAt);\r\n }\r\n\r\n if (refreshToken) {\r\n this._storage.setItem('refresh_token', refreshToken);\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether there are tokens in the hash fragment\r\n * as a result of the implicit flow. These tokens are\r\n * parsed, validated and used to sign the user in to the\r\n * current client.\r\n *\r\n * @param options Optional options.\r\n */\r\n public tryLogin(options: LoginOptions = null): Promise<boolean> {\r\n options = options || {};\r\n\r\n let parts: object;\r\n\r\n if (options.customHashFragment) {\r\n parts = this.urlHelper.getHashFragmentParams(options.customHashFragment);\r\n } else {\r\n parts = this.urlHelper.getHashFragmentParams();\r\n }\r\n\r\n this.debug('parsed url', parts);\r\n\r\n const state = parts['state'];\r\n let nonceInState = state;\r\n\r\n if (state) {\r\n const idx = state.indexOf(this.config.nonceStateSeparator);\r\n\r\n if (idx > -1) {\r\n nonceInState = state.substr(0, idx);\r\n this.state = state.substr(idx + this.config.nonceStateSeparator.length);\r\n }\r\n }\r\n\r\n if (parts['error']) {\r\n this.debug('error trying to login');\r\n this.handleLoginError(options, parts);\r\n const err = new OAuthErrorEvent('token_error', {}, parts);\r\n this.eventsSubject.next(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n const accessToken = parts['access_token'];\r\n const idToken = parts['id_token'];\r\n const sessionState = parts['session_state'];\r\n const grantedScopes = parts['scope'];\r\n\r\n if (!this.requestAccessToken && !this.oidc) {\r\n return Promise.reject(\r\n 'Either requestAccessToken or oidc (or both) must be true.'\r\n );\r\n }\r\n\r\n if (this.requestAccessToken && !accessToken) {\r\n return Promise.resolve(false);\r\n }\r\n if (this.requestAccessToken && !options.disableOAuth2StateCheck && !state) {\r\n return Promise.resolve(false);\r\n }\r\n if (this.oidc && !idToken) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n if (this.sessionChecksEnabled && !sessionState) {\r\n this.logger.warn(\r\n 'session checks (Session Status Change Notification) ' +\r\n 'were activated in the configuration but the id_token ' +\r\n 'does not contain a session_state claim'\r\n );\r\n }\r\n\r\n if (this.requestAccessToken && !options.disableOAuth2StateCheck) {\r\n const success = this.validateNonceForAccessToken(\r\n accessToken,\r\n nonceInState\r\n );\r\n if (!success) {\r\n const event = new OAuthErrorEvent('invalid_nonce_in_state', null);\r\n this.eventsSubject.next(event);\r\n return Promise.reject(event);\r\n }\r\n }\r\n\r\n if (this.requestAccessToken) {\r\n this.storeAccessTokenResponse(\r\n accessToken,\r\n null,\r\n parts['expires_in'] || this.fallbackAccessTokenExpirationTimeInSec,\r\n grantedScopes\r\n );\r\n }\r\n\r\n if (!this.oidc) {\r\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\r\n if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) {\r\n location.hash = '';\r\n }\r\n\r\n this.callOnTokenReceivedIfExists(options);\r\n return Promise.resolve(true);\r\n\r\n }\r\n\r\n return this.processIdToken(idToken, accessToken)\r\n .then(result => {\r\n if (options.validationHandler) {\r\n return options\r\n .validationHandler({\r\n accessToken: accessToken,\r\n idClaims: result.idTokenClaims,\r\n idToken: result.idToken,\r\n state: state\r\n })\r\n .then(_ => result);\r\n }\r\n return result;\r\n })\r\n .then(result => {\r\n this.storeIdToken(result);\r\n this.storeSessionState(sessionState);\r\n if (this.clearHashAfterLogin) {\r\n location.hash = '';\r\n }\r\n this.eventsSubject.next(new OAuthSuccessEvent('token_received'));\r\n this.callOnTokenReceivedIfExists(options);\r\n this.inImplicitFlow = false;\r\n return true;\r\n })\r\n .catch(reason => {\r\n this.eventsSubject.next(\r\n new OAuthErrorEvent('token_validation_error', reason)\r\n );\r\n this.logger.error('Error validating tokens');\r\n this.logger.error(reason);\r\n return Promise.reject(reason);\r\n });\r\n }\r\n\r\n protected validateNonceForAccessToken(\r\n accessToken: string,\r\n nonceInState: string\r\n ): boolean {\r\n const savedNonce = this._storage.getItem('nonce');\r\n if (savedNonce !== nonceInState) {\r\n const err = 'Validating access_token failed, wrong state/nonce.';\r\n console.error(err, savedNonce, nonceInState);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n protected storeIdToken(idToken: ParsedIdToken) {\r\n this._storage.setItem('id_token', idToken.idToken);\r\n this._storage.setItem('id_token_claims_obj', idToken.idTokenClaimsJson);\r\n this._storage.setItem('id_token_expires_at', '' + idToken.idTokenExpiresAt);\r\n this._storage.setItem('id_token_stored_at', '' + Date.now());\r\n }\r\n\r\n protected storeSessionState(sessionState: string): void {\r\n this._storage.setItem('session_state', sessionState);\r\n }\r\n\r\n protected getSessionState(): string {\r\n return this._storage.getItem('session_state');\r\n }\r\n\r\n protected handleLoginError(options: LoginOptions, parts: object): void {\r\n if (options.onLoginError) {\r\n options.onLoginError(parts);\r\n }\r\n if (this.clearHashAfterLogin) {\r\n location.hash = '';\r\n }\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n public processIdToken(\r\n idToken: string,\r\n accessToken: string\r\n ): Promise<ParsedIdToken> {\r\n const tokenParts = idToken.split('.');\r\n const headerBase64 = this.padBase64(tokenParts[0]);\r\n const headerJson = b64DecodeUnicode(headerBase64);\r\n const header = JSON.parse(headerJson);\r\n const claimsBase64 = this.padBase64(tokenParts[1]);\r\n const claimsJson = b64DecodeUnicode(claimsBase64);\r\n const claims = JSON.parse(claimsJson);\r\n const savedNonce = this._storage.getItem('nonce');\r\n\r\n if (Array.isArray(claims.aud)) {\r\n if (claims.aud.every(v => v !== this.clientId)) {\r\n const err = 'Wrong audience: ' + claims.aud.join(',');\r\n this.logger.warn(err);\r\n return Promise.reject(err);\r\n }\r\n } else {\r\n if (claims.aud !== this.clientId) {\r\n const err = 'Wrong audience: ' + claims.aud;\r\n this.logger.warn(err);\r\n return Promise.reject(err);\r\n }\r\n }\r\n\r\n if (!claims.sub) {\r\n const err = 'No sub claim in id_token';\r\n this.logger.warn(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n /* For now, we only check whether the sub against\r\n * silentRefreshSubject when sessionChecksEnabled is on\r\n * We will reconsider in a later version to do this\r\n * in every other case too.\r\n */\r\n if (\r\n this.sessionChecksEnabled &&\r\n this.silentRefreshSubject &&\r\n this.silentRefreshSubject !== claims['sub']\r\n ) {\r\n const err =\r\n 'After refreshing, we got an id_token for another user (sub). ' +\r\n `Expected sub: ${this.silentRefreshSubject}, received sub: ${\r\n claims['sub']\r\n }`;\r\n\r\n this.logger.warn(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n if (!claims.iat) {\r\n const err = 'No iat claim in id_token';\r\n this.logger.warn(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n if (claims.iss !== this.issuer) {\r\n const err = 'Wrong issuer: ' + claims.iss;\r\n this.logger.warn(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n if (claims.nonce !== savedNonce) {\r\n const err = 'Wrong nonce: ' + claims.nonce;\r\n this.logger.warn(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n if (\r\n !this.disableAtHashCheck &&\r\n this.requestAccessToken &&\r\n !claims['at_hash']\r\n ) {\r\n const err = 'An at_hash is needed!';\r\n this.logger.warn(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n const now = Date.now();\r\n const issuedAtMSec = claims.iat * 1000;\r\n const expiresAtMSec = claims.exp * 1000;\r\n const tenMinutesInMsec = 1000 * 60 * 10;\r\n\r\n if (\r\n issuedAtMSec - tenMinutesInMsec >= now ||\r\n expiresAtMSec + tenMinutesInMsec <= now\r\n ) {\r\n const err = 'Token has expired';\r\n console.error(err);\r\n console.error({\r\n now: now,\r\n issuedAtMSec: issuedAtMSec,\r\n expiresAtMSec: expiresAtMSec\r\n });\r\n return Promise.reject(err);\r\n }\r\n\r\n const validationParams: ValidationParams = {\r\n accessToken: accessToken,\r\n idToken: idToken,\r\n jwks: this.jwks,\r\n idTokenClaims: claims,\r\n idTokenHeader: header,\r\n loadKeys: () => this.loadJwks()\r\n };\r\n\r\n\r\n return this.checkAtHash(validationParams)\r\n .then(atHashValid => {\r\n if (\r\n !this.disableAtHashCheck &&\r\n this.requestAccessToken &&\r\n !atHashValid\r\n ) {\r\n const err = 'Wrong at_hash';\r\n this.logger.warn(err);\r\n return Promise.reject(err);\r\n }\r\n\r\n return this.checkSignature(validationParams).then(_ => {\r\n const result: ParsedIdToken = {\r\n idToken: idToken,\r\n idTokenClaims: claims,\r\n idTokenClaimsJson: claimsJson,\r\n idTokenHeader: header,\r\n idTokenHeaderJson: headerJson,\r\n idTokenExpiresAt: expiresAtMSec\r\n };\r\n return result;\r\n });\r\n\r\n });\r\n }\r\n\r\n /**\r\n * Returns the received claims about the user.\r\n */\r\n public getIdentityClaims(): object {\r\n const claims = this._storage.getItem('id_token_claims_obj');\r\n if (!claims) {\r\n return null;\r\n }\r\n return JSON.parse(claims);\r\n }\r\n\r\n /**\r\n * Returns the granted scopes from the server.\r\n */\r\n public getGrantedScopes(): object {\r\n const scopes = this._storage.getItem('granted_scopes');\r\n if (!scopes) {\r\n return null;\r\n }\r\n return JSON.parse(scopes);\r\n }\r\n\r\n /**\r\n * Returns the current id_token.\r\n */\r\n public getIdToken(): string {\r\n return this._storage\r\n ? this._storage.getItem('id_token')\r\n : null;\r\n }\r\n\r\n protected padBase64(base64data): string {\r\n while (base64data.length % 4 !== 0) {\r\n base64data += '=';\r\n }\r\n return base64data;\r\n }\r\n\r\n /**\r\n * Returns the current access_token.\r\n */\r\n public getAccessToken(): string {\r\n return this._storage.getItem('access_token');\r\n }\r\n\r\n public getRefreshToken(): string {\r\n return this._storage.getItem('refresh_token');\r\n }\r\n\r\n /**\r\n * Returns the expiration date of the access_token\r\n * as milliseconds since 1970.\r\n */\r\n public getAccessTokenExpiration(): number {\r\n if (!this._storage.getItem('expires_at')) {\r\n return null;\r\n }\r\n return parseInt(this._storage.getItem('expires_at'), 10);\r\n }\r\n\r\n protected getAccessTokenStoredAt(): number {\r\n return parseInt(this._storage.getItem('access_token_stored_at'), 10);\r\n }\r\n\r\n protected getIdTokenStoredAt(): number {\r\n return parseInt(this._storage.getItem('id_token_stored_at'), 10);\r\n }\r\n\r\n /**\r\n * Returns the expiration date of the id_token\r\n * as milliseconds since 1970.\r\n */\r\n public getIdTokenExpiration(): number {\r\n if (!this._storage.getItem('id_token_expires_at')) {\r\n return null;\r\n }\r\n\r\n return parseInt(this._storage.getItem('id_token_expires_at'), 10);\r\n }\r\n\r\n /**\r\n * Checkes, whether there is a valid access_token.\r\n */\r\n public hasValidAccessToken(): boolean {\r\n if (this.getAccessToken()) {\r\n const expiresAt = this._storage.getItem('expires_at');\r\n const now = new Date();\r\n if (expiresAt && parseInt(expiresAt, 10) < now.getTime()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks whether there is a valid id_token.\r\n */\r\n public hasValidIdToken(): boolean {\r\n if (this.getIdToken()) {\r\n const expiresAt = this._storage.getItem('id_token_expires_at');\r\n const now = new Date();\r\n if (expiresAt && parseInt(expiresAt, 10) < now.getTime()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Returns the auth-header that can be used\r\n * to transmit the access_token to a service\r\n */\r\n public authorizationHeader(): string {\r\n return 'Bearer ' + this.getAccessToken();\r\n }\r\n\r\n /**\r\n * Removes all tokens and logs the user out.\r\n * If a logout url is configured, the user is\r\n * redirected to it.\r\n * @param noRedirectToLogoutUrl\r\n */\r\n public logOut(noRedirectToLogoutUrl = false): void {\r\n const id_token = this.getIdToken();\r\n this._storage.removeItem('access_token');\r\n this._storage.removeItem('id_token');\r\n this._storage.removeItem('refresh_token');\r\n this._storage.removeItem('nonce');\r\n this._storage.removeItem('expires_at');\r\n this._storage.removeItem('id_token_claims_obj');\r\n this._storage.removeItem('id_token_expires_at');\r\n this._storage.removeItem('id_token_stored_at');\r\n this._storage.removeItem('access_token_stored_at');\r\n this._storage.removeItem('granted_scopes');\r\n this._storage.removeItem('session_state');\r\n\r\n this.silentRefreshSubject = null;\r\n\r\n this.eventsSubject.next(new OAuthInfoEvent('logout'));\r\n\r\n if (!this.logoutUrl) {\r\n return;\r\n }\r\n if (noRedirectToLogoutUrl) {\r\n return;\r\n }\r\n\r\n if (!id_token && !this.postLogoutRedirectUri) {\r\n return;\r\n }\r\n\r\n let logoutUrl: string;\r\n\r\n if (!this.validateUrlForHttps(this.logoutUrl)) {\r\n throw new Error(\r\n 'logoutUrl must use http, or config value for property requireHttps must allow http'\r\n );\r\n }\r\n\r\n // For backward compatibility\r\n if (this.logoutUrl.indexOf('{{') > -1) {\r\n logoutUrl = this.logoutUrl\r\n .replace(/\\{\\{id_token\\}\\}/, id_token)\r\n .replace(/\\{\\{client_id\\}\\}/, this.clientId);\r\n } else {\r\n\r\n let params = new HttpParams();\r\n\r\n if (id_token) {\r\n params = params.set('id_token_hint', id_token);\r\n }\r\n\r\n const postLogoutUrl = this.postLogoutRedirectUri || this.redirectUri;\r\n if (postLogoutUrl) {\r\n params = params.set('post_logout_redirect_uri', postLogoutUrl);\r\n }\r\n\r\n logoutUrl =\r\n this.logoutUrl +\r\n (this.logoutUrl.indexOf('?') > -1 ? '&' : '?') +\r\n params.toString()\r\n }\r\n location.href = logoutUrl;\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n public createAndSaveNonce(): Promise<string> {\r\n const that = this;\r\n return this.createNonce().then(function (nonce: any) {\r\n that._storage.setItem('nonce', nonce);\r\n return nonce;\r\n });\r\n }\r\n\r\n protected createNonce(): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n if (this.rngUrl) {\r\n throw new Error(\r\n 'createNonce with rng-web-api has not been implemented so far'\r\n );\r\n } else {\r\n let text = '';\r\n const possible =\r\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n\r\n for (let i = 0; i < 40; i++) {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n resolve(text);\r\n }\r\n });\r\n }\r\n\r\n protected async checkAtHash(params: ValidationParams): Promise<boolean> {\r\n if (!this.tokenValidationHandler) {\r\n this.logger.warn(\r\n 'No tokenValidationHandler configured. Cannot check at_hash.'\r\n );\r\n return true;\r\n }\r\n return this.tokenValidationHandler.validateAtHash(params);\r\n }\r\n\r\n protected checkSignature(params: ValidationParams): Promise<any> {\r\n if (!this.tokenValidationHandler) {\r\n this.logger.warn(\r\n 'No tokenValidationHandler configured. Cannot check signature.'\r\n );\r\n return Promise.resolve(null);\r\n }\r\n return this.tokenValidationHandler.validateSignature(params);\r\n }\r\n}\r\n",
33 "import { HttpParameterCodec } from '@angular/common/http';\r\n/**\r\n * This custom encoder allows charactes like +, % and / to be used in passwords\r\n */\r\nexport class WebHttpUrlEncodingCodec implements HttpParameterCodec {\r\n encodeKey(k: string): string {\r\n return encodeURIComponent(k);\r\n }\r\n\r\n encodeValue(v: string): string {\r\n return encodeURIComponent(v);\r\n }\r\n\r\n decodeKey(k: string): string {\r\n return decodeURIComponent(k);\r\n }\r\n\r\n decodeValue(v: string) {\r\n return decodeURIComponent(v);\r\n }\r\n}\r\n",
34 "export class AuthConfig {\r\n /**\r\n * The client's id as registered with the auth server\r\n */\r\n public clientId? = '';\r\n\r\n /**\r\n * The client's redirectUri as registered with the auth server\r\n */\r\n public redirectUri? = '';\r\n\r\n /**\r\n * An optional second redirectUri where the auth server\r\n * redirects the user to after logging out.\r\n */\r\n public postLogoutRedirectUri? = '';\r\n\r\n /**\r\n * The auth server's endpoint that allows to log\r\n * the user in when using implicit flow.\r\n */\r\n public loginUrl? = '';\r\n\r\n /**\r\n * The requested scopes\r\n */\r\n public scope? = 'openid profile';\r\n\r\n public resource? = '';\r\n\r\n public rngUrl? = '';\r\n\r\n /**\r\n * Defines whether to use OpenId Connect during\r\n * implicit flow.\r\n */\r\n public oidc? = true;\r\n\r\n /**\r\n * Defines whether to request an access token during\r\n * implicit flow.\r\n */\r\n public requestAccessToken? = true;\r\n\r\n public options?: any = null;\r\n\r\n /**\r\n * The issuer's uri.\r\n */\r\n public issuer? = '';\r\n\r\n /**\r\n * The logout url.\r\n */\r\n public logoutUrl? = '';\r\n\r\n /**\r\n * Defines whether to clear the hash fragment after logging in.\r\n */\r\n public clearHashAfterLogin? = true;\r\n\r\n /**\r\n * Url of the token endpoint as defined by OpenId Connect and OAuth 2.\r\n */\r\n public tokenEndpoint?: string = null;\r\n\r\n /**\r\n * Url of the userinfo endpoint as defined by OpenId Connect.\r\n */\r\n public userinfoEndpoint?: string = null;\r\n\r\n public responseType? = '';\r\n\r\n /**\r\n * Defines whether additional debug information should\r\n * be shown at the console. Note that in certain browsers\r\n * the verbosity of the console needs to be explicitly set\r\n * to include Debug level messages.\r\n */\r\n public showDebugInformation? = false;\r\n\r\n /**\r\n * The redirect uri used when doing silent refresh.\r\n */\r\n public silentRefreshRedirectUri? = '';\r\n\r\n public silentRefreshMessagePrefix? = '';\r\n\r\n /**\r\n * Set this to true to display the iframe used for\r\n * silent refresh for debugging.\r\n */\r\n public silentRefreshShowIFrame? = false;\r\n\r\n /**\r\n * Timeout for silent refresh.\r\n * @internal\r\n * depreacted b/c of typo, see silentRefreshTimeout\r\n */\r\n public siletRefreshTimeout?: number = 1000 * 20;\r\n\r\n /**\r\n * Timeout for silent refresh.\r\n */\r\n public silentRefreshTimeout?: number = 1000 * 20;\r\n\r\n /**\r\n * Some auth servers don't allow using password flow\r\n * w/o a client secret while the standards do not\r\n * demand for it. In this case, you can set a password\r\n * here. As this password is exposed to the public\r\n * it does not bring additional security and is therefore\r\n * as good as using no password.\r\n */\r\n public dummyClientSecret?: string = null;\r\n\r\n /**\r\n * Defines whether https is required.\r\n * The default value is remoteOnly which only allows\r\n * http for localhost, while every other domains need\r\n * to be used with https.\r\n */\r\n public requireHttps?: boolean | 'remoteOnly' = 'remoteOnly';\r\n\r\n /**\r\n * Defines whether every url provided by the discovery\r\n * document has to start with the issuer's url.\r\n */\r\n public strictDiscoveryDocumentValidation? = true;\r\n\r\n /**\r\n * JSON Web Key Set (https://tools.ietf.org/html/rfc7517)\r\n * with keys used to validate received id_tokens.\r\n * This is taken out of the disovery document. Can be set manually too.\r\n */\r\n public jwks?: object = null;\r\n\r\n /**\r\n * Map with additional query parameter that are appended to\r\n * the request when initializing implicit flow.\r\n */\r\n public customQueryParams?: object = null;\r\n\r\n public silentRefreshIFrameName? = 'angular-oauth-oidc-silent-refresh-iframe';\r\n\r\n /**\r\n * Defines when the token_timeout event should be raised.\r\n * If you set this to the default value 0.75, the event\r\n * is triggered after 75% of the token's life time.\r\n */\r\n public timeoutFactor? = 0.75;\r\n\r\n /**\r\n * If true, the lib will try to check whether the user\r\n * is still logged in on a regular basis as described\r\n * in http://openid.net/specs/openid-connect-session-1_0.html#ChangeNotification\r\n */\r\n public sessionChecksEnabled? = false;\r\n\r\n /**\r\n * Interval in msec for checking the session\r\n * according to http://openid.net/specs/openid-connect-session-1_0.html#ChangeNotification\r\n */\r\n public sessionCheckIntervall? = 3 * 1000;\r\n\r\n /**\r\n * Url for the iframe used for session checks\r\n */\r\n public sessionCheckIFrameUrl?: string = null;\r\n\r\n /**\r\n * Name of the iframe to use for session checks\r\n */\r\n public sessionCheckIFrameName? = 'angular-oauth-oidc-check-session-iframe';\r\n\r\n /**\r\n * This property has been introduced to disable at_hash checks\r\n * and is indented for Identity Provider that does not deliver\r\n * an at_hash EVEN THOUGH its recommended by the OIDC specs.\r\n * Of course, when disabling these checks the we are bypassing\r\n * a security check which means we are more vulnerable.\r\n */\r\n public disableAtHashCheck? = false;\r\n\r\n /**\r\n * Defines wether to check the subject of a refreshed token after silent refresh.\r\n * Normally, it should be the same as before.\r\n */\r\n public skipSubjectCheck? = false;\r\n\r\n public useIdTokenHintForSilentRefresh? = false;\r\n\r\n /**\r\n * Defined whether to skip the validation of the issuer in the discovery document.\r\n * Normally, the discovey document's url starts with the url of the issuer.\r\n */\r\n public skipIssuerCheck? = false;\r\n\r\n /**\r\n * According to rfc6749 it is recommended (but not required) that the auth\r\n * server exposes the access_token's life time in seconds.\r\n * This is a fallback value for the case this value is not exposed.\r\n */\r\n public fallbackAccessTokenExpirationTimeInSec?: number;\r\n\r\n /**\r\n * final state sent to issuer is built as follows:\r\n * state = nonce + nonceStateSeparator + additional state\r\n * Default separator is ';' (encoded %3B).\r\n * In rare cases, this character might be forbidden or inconvenient to use by the issuer so it can be customized.\r\n */\r\n public nonceStateSeparator? = ';';\r\n\r\n /**\r\n * Set this to true to use HTTP BASIC auth for password flow\r\n */\r\n public useHttpBasicAuthForPasswordFlow? = false;\r\n\r\n constructor(json?: Partial<AuthConfig>) {\r\n if (json) {\r\n Object.assign(this, json);\r\n }\r\n }\r\n\r\n /**\r\n * This property allows you to override the method that is used to open the login url,\r\n * allowing a way for implementations to specify their own method of routing to new\r\n * urls.\r\n */\r\n public openUri?: ((uri: string) => void) = uri => {\r\n location.href = uri;\r\n }\r\n}\r\n",
35 "// see: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22\r\nexport function b64DecodeUnicode(str) {\r\n const base64 = str.replace(/\\-/g, '+').replace(/\\_/g, '/');\r\n\r\n return decodeURIComponent(\r\n atob(base64)\r\n .split('')\r\n .map(function(c) {\r\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n })\r\n .join('')\r\n );\r\n}\r\n",
36 "export type EventType =\r\n | 'discovery_document_loaded'\r\n | 'received_first_token'\r\n | 'jwks_load_error'\r\n | 'invalid_nonce_in_state'\r\n | 'discovery_document_load_error'\r\n | 'discovery_document_validation_error'\r\n | 'user_profile_loaded'\r\n | 'user_profile_load_error'\r\n | 'token_received'\r\n | 'token_error'\r\n | 'token_refreshed'\r\n | 'token_refresh_error'\r\n | 'silent_refresh_error'\r\n | 'silently_refreshed'\r\n | 'silent_refresh_timeout'\r\n | 'token_validation_error'\r\n | 'token_expires'\r\n | 'session_changed'\r\n | 'session_error'\r\n | 'session_terminated'\r\n | 'logout';\r\n\r\nexport abstract class OAuthEvent {\r\n constructor(readonly type: EventType) {}\r\n}\r\n\r\nexport class OAuthSuccessEvent extends OAuthEvent {\r\n constructor(type: EventType, readonly info: any = null) {\r\n super(type);\r\n }\r\n}\r\n\r\nexport class OAuthInfoEvent extends OAuthEvent {\r\n constructor(type: EventType, readonly info: any = null) {\r\n super(type);\r\n }\r\n}\r\n\r\nexport class OAuthErrorEvent extends OAuthEvent {\r\n constructor(\r\n type: EventType,\r\n readonly reason: object,\r\n readonly params: object = null\r\n ) {\r\n super(type);\r\n }\r\n}\r\n",
37 "import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class UrlHelperService {\r\n public getHashFragmentParams(customHashFragment?: string): object {\r\n let hash = customHashFragment || window.location.hash;\r\n\r\n hash = decodeURIComponent(hash);\r\n\r\n if (hash.indexOf('#') !== 0) {\r\n return {};\r\n }\r\n\r\n const questionMarkPosition = hash.indexOf('?');\r\n\r\n if (questionMarkPosition > -1) {\r\n hash = hash.substr(questionMarkPosition + 1);\r\n } else {\r\n hash = hash.substr(1);\r\n }\r\n\r\n return this.parseQueryString(hash);\r\n }\r\n\r\n public parseQueryString(queryString: string): object {\r\n const data = {};\r\n let\r\n pairs,\r\n pair,\r\n separatorIndex,\r\n escapedKey,\r\n escapedValue,\r\n key,\r\n value;\r\n\r\n if (queryString === null) {\r\n return data;\r\n }\r\n\r\n pairs = queryString.split('&');\r\n\r\n for (let i = 0; i < pairs.length; i++) {\r\n pair = pairs[i];\r\n separatorIndex = pair.indexOf('=');\r\n\r\n if (separatorIndex === -1) {\r\n escapedKey = pair;\r\n escapedValue = null;\r\n } else {\r\n escapedKey = pair.substr(0, separatorIndex);\r\n escapedValue = pair.substr(separatorIndex + 1);\r\n }\r\n\r\n key = decodeURIComponent(escapedKey);\r\n value = decodeURIComponent(escapedValue);\r\n\r\n if (key.substr(0, 1) === '/') { key = key.substr(1); }\r\n\r\n data[key] = value;\r\n }\r\n\r\n return data;\r\n }\r\n}\r\n",
38 "export interface ValidationParams {\r\n idToken: string;\r\n accessToken: string;\r\n idTokenHeader: object;\r\n idTokenClaims: object;\r\n jwks: object;\r\n loadKeys: () => Promise<object>;\r\n}\r\n\r\n/**\r\n * Interface for Handlers that are hooked in to\r\n * validate tokens.\r\n */\r\nexport abstract class ValidationHandler {\r\n /**\r\n * Validates the signature of an id_token.\r\n */\r\n public abstract validateSignature(\r\n validationParams: ValidationParams\r\n ): Promise<any>;\r\n\r\n /**\r\n * Validates the at_hash in an id_token against the received access_token.\r\n */\r\n public abstract validateAtHash(validationParams: ValidationParams): Promise<boolean>;\r\n}\r\n\r\n/**\r\n * This abstract implementation of ValidationHandler already implements\r\n * the method validateAtHash. However, to make use of it,\r\n * you have to override the method calcHash.\r\n */\r\nexport abstract class AbstractValidationHandler implements ValidationHandler {\r\n /**\r\n * Validates the signature of an id_token.\r\n */\r\n abstract validateSignature(validationParams: ValidationParams): Promise<any>;\r\n\r\n /**\r\n * Validates the at_hash in an id_token against the received access_token.\r\n */\r\n async validateAtHash(params: ValidationParams): Promise<boolean> {\r\n let hashAlg = this.inferHashAlgorithm(params.idTokenHeader);\r\n\r\n let tokenHash = await this.calcHash(params.accessToken, hashAlg); // sha256(accessToken, { asString: true });\r\n\r\n let leftMostHalf = tokenHash.substr(0, tokenHash.length / 2);\r\n\r\n let tokenHashBase64 = btoa(leftMostHalf);\r\n\r\n let atHash = tokenHashBase64\r\n .replace(/\\+/g, '-')\r\n .replace(/\\//g, '_')\r\n .replace(/=/g, '');\r\n let claimsAtHash = params.idTokenClaims['at_hash'].replace(/=/g, '');\r\n\r\n if (atHash !== claimsAtHash) {\r\n console.error('exptected at_hash: ' + atHash);\r\n console.error('actual at_hash: ' + claimsAtHash);\r\n }\r\n\r\n return atHash === claimsAtHash;\r\n }\r\n\r\n /**\r\n * Infers the name of the hash algorithm to use\r\n * from the alg field of an id_token.\r\n *\r\n * @param jwtHeader the id_token's parsed header\r\n */\r\n protected inferHashAlgorithm(jwtHeader: object): string {\r\n let alg: string = jwtHeader['alg'];\r\n \r\n if (!alg.match(/^.S[0-9]{3}$/)) {\r\n throw new Error('Algorithm not supported: ' + alg);\r\n }\r\n\r\n return 'sha-' + alg.substr(2);\r\n }\r\n\r\n /**\r\n * Calculates the hash for the passed value by using\r\n * the passed hash algorithm.\r\n *\r\n * @param valueToHash\r\n * @param algorithm\r\n */\r\n protected abstract calcHash(valueToHash: string, algorithm: string): Promise<string>;\r\n}\r\n",
39 "/**\r\n * Additional options that can be passt to tryLogin.\r\n */\r\nexport class LoginOptions {\r\n /**\r\n * Is called, after a token has been received and\r\n * successfully validated.\r\n *\r\n * Deprecated: Use property ``events`` on OAuthService instead.\r\n */\r\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\r\n\r\n /**\r\n * Hook, to validate the received tokens.\r\n *\r\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\r\n */\r\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise<any>;\r\n\r\n /**\r\n * Called when tryLogin detects that the auth server\r\n * included an error message into the hash fragment.\r\n *\r\n * Deprecated: Use property ``events`` on OAuthService instead.\r\n */\r\n onLoginError?: (params: object) => void;\r\n\r\n /**\r\n * A custom hash fragment to be used instead of the\r\n * actual one. This is used for silent refreshes, to\r\n * pass the iframes hash fragment to this method.\r\n */\r\n customHashFragment?: string;\r\n\r\n /**\r\n * Set this to true to disable the oauth2 state\r\n * check which is a best practice to avoid\r\n * security attacks.\r\n * As OIDC defines a nonce check that includes\r\n * this, this can be set to true when only doing\r\n * OIDC.\r\n */\r\n disableOAuth2StateCheck?: boolean;\r\n\r\n /**\r\n * Normally, you want to clear your hash fragment after\r\n * the lib read the token(s) so that they are not displayed\r\n * anymore in the url. If not, set this to true.\r\n */\r\n preventClearHashAfterLogin? = false;\r\n}\r\n\r\n/**\r\n * Defines the logging interface the OAuthService uses\r\n * internally. Is compatible with the `console` object,\r\n * but you can provide your own implementation as well\r\n * through dependency injection.\r\n */\r\nexport abstract class OAuthLogger {\r\n abstract debug(message?: any, ...optionalParams: any[]): void;\r\n abstract info(message?: any, ...optionalParams: any[]): void;\r\n abstract log(message?: any, ...optionalParams: any[]): void;\r\n abstract warn(message?: any, ...optionalParams: any[]): void;\r\n abstract error(message?: any, ...optionalParams: any[]): void;\r\n}\r\n\r\n/**\r\n * Defines a simple storage that can be used for\r\n * storing the tokens at client side.\r\n * Is compatible to localStorage and sessionStorage,\r\n * but you can also create your own implementations.\r\n */\r\nexport abstract class OAuthStorage {\r\n abstract getItem(key: string): string | null;\r\n abstract removeItem(key: string): void;\r\n abstract setItem(key: string, data: string): void;\r\n}\r\n\r\n/**\r\n * Represents the received tokens, the received state\r\n * and the parsed claims from the id-token.\r\n */\r\nexport class ReceivedTokens {\r\n idToken: string;\r\n accessToken: string;\r\n idClaims?: object;\r\n state?: string;\r\n}\r\n\r\n/**\r\n * Represents the parsed and validated id_token.\r\n */\r\nexport interface ParsedIdToken {\r\n idToken: string;\r\n idTokenClaims: object;\r\n idTokenHeader: object;\r\n idTokenClaimsJson: string;\r\n idTokenHeaderJson: string;\r\n idTokenExpiresAt: number;\r\n}\r\n\r\n/**\r\n * Represents the response from the token endpoint\r\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\r\n */\r\nexport interface TokenResponse {\r\n access_token: string;\r\n token_type: string;\r\n expires_in: number;\r\n refresh_token: string;\r\n scope: string;\r\n state?: string;\r\n}\r\n\r\n/**\r\n * Represents the response from the user info endpoint\r\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\r\n */\r\nexport interface UserInfo {\r\n sub: string;\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Represents an OpenID Connect discovery document\r\n */\r\nexport interface OidcDiscoveryDoc {\r\n issuer: string;\r\n authorization_endpoint: string;\r\n token_endpoint: string;\r\n token_endpoint_auth_methods_supported: string[];\r\n token_endpoint_auth_signing_alg_values_supported: string[];\r\n userinfo_endpoint: string;\r\n check_session_iframe: string;\r\n end_session_endpoint: string;\r\n jwks_uri: string;\r\n registration_endpoint: string;\r\n scopes_supported: string[];\r\n response_types_supported: string[];\r\n acr_values_supported: string[];\r\n response_modes_supported: string[];\r\n grant_types_supported: string[];\r\n subject_types_supported: string[];\r\n userinfo_signing_alg_values_supported: string[];\r\n userinfo_encryption_alg_values_supported: string[];\r\n userinfo_encryption_enc_values_supported: string[];\r\n id_token_signing_alg_values_supported: string[];\r\n id_token_encryption_alg_values_supported: string[];\r\n id_token_encryption_enc_values_supported: string[];\r\n request_object_signing_alg_values_supported: string[];\r\n display_values_supported: string[];\r\n claim_types_supported: string[];\r\n claims_supported: string[];\r\n claims_parameter_supported: boolean;\r\n service_documentation: string;\r\n ui_locales_supported: string[];\r\n}\r\n",
40 "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"
41 ],
42 "names": [
43 "InjectionToken",
44 "rs.KJUR",
45 "rs.KEYUTIL",
46 "tslib_1.__extends",
47 "CommonModule",
48 "NgModule",
49 "HTTP_INTERCEPTORS",
50 "Optional",
51 "Injectable",
52 "catchError",
53 "throwError",
54 "HttpClient",
55 "NgZone",
56 "HttpParams",
57 "filter",
58 "tslib_1.__values",
59 "first",
60 "map",
61 "tap",
62 "race",
63 "of",
64 "delay",
65 "HttpHeaders",
66 "Subject",
67 "http"
68 ],
69 "mappings": "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"
70}