ngx-oauth 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -387,7 +387,7 @@
387
387
  }
388
388
  OAuthService.prototype.init = function () {
389
389
  var _this = this;
390
- var _b = this.locationService, hash = _b.hash, search = _b.search, origin = _b.origin;
390
+ var _b = this.locationService, hash = _b.hash, search = _b.search, origin = _b.origin, pathname = _b.pathname;
391
391
  var isImplicitRedirect = hash && new RegExp('(#access_token=)|(#error=)').test(hash);
392
392
  var isAuthCodeRedirect = search && new RegExp('(code=)|(error=)').test(search);
393
393
  var storageKey = this.authConfig.storageKey;
@@ -414,16 +414,16 @@
414
414
  var _c = this.authConfig.config, clientId_1 = _c.clientId, clientSecret_1 = _c.clientSecret, tokenPath_1 = _c.tokenPath, scope_1 = _c.scope, codeVerifier_1 = _c.codeVerifier;
415
415
  setTimeout(function () {
416
416
  _this.http.post(tokenPath_1, new http.HttpParams({
417
- fromObject: Object.assign(Object.assign({ code: parameters_1.code, client_id: clientId_1, client_secret: clientSecret_1, redirect_uri: origin + "/" + newParametersString_1, grant_type: 'authorization_code' }, scope_1 ? { scope: scope_1 } : {}), codeVerifier_1 ? { code_verifier: codeVerifier_1 } : {})
417
+ fromObject: Object.assign(Object.assign({ code: parameters_1.code, client_id: clientId_1, client_secret: clientSecret_1, redirect_uri: "" + origin + pathname + newParametersString_1, grant_type: 'authorization_code' }, scope_1 ? { scope: scope_1 } : {}), codeVerifier_1 ? { code_verifier: codeVerifier_1 } : {})
418
418
  }), { headers: REQUEST_HEADER }).pipe(operators.catchError(function () {
419
419
  _this.token = { error: 'error' };
420
420
  _this.status = exports.OAuthStatus.DENIED;
421
- _this.locationService.href = origin + "/" + newParametersString_1;
421
+ _this.locationService.href = "" + origin + pathname + newParametersString_1;
422
422
  return rxjs.EMPTY;
423
423
  })).subscribe(function (token) {
424
424
  _this.token = token;
425
425
  // authorized event will be triggered after redirect
426
- _this.locationService.href = origin + "/" + newParametersString_1;
426
+ _this.locationService.href = "" + origin + pathname + newParametersString_1;
427
427
  });
428
428
  });
429
429
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-oauth.umd.js","sources":["../../../projects/ngx-oauth/src/lib/models/index.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/ngx-oauth/src/lib/services/oauth.service.ts","../../../projects/ngx-oauth/src/lib/services/oauth.interceptor.ts","../../../projects/ngx-oauth/src/lib/components/login/oauth-login.component.ts","../../../projects/ngx-oauth/src/lib/oauth.module.ts","../../../projects/ngx-oauth/src/index.ts","../../../projects/ngx-oauth/src/ngx-oauth.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const SERVER_HOST = new InjectionToken<string>('SERVER_HOST');\nexport const SERVER_PATH = new InjectionToken<string>('SERVER_PATH');\nexport const LOCATION = new InjectionToken<Location>('Location');\nexport const STORAGE = new InjectionToken<Storage>('Storage');\nexport const OAUTH_CONFIG = new InjectionToken<OAuthConfig>('OAuthConfig');\n\nexport enum OAuthType {\n RESOURCE = 'password',\n AUTHORIZATION_CODE = 'code',\n IMPLICIT = 'token',\n CLIENT_CREDENTIAL = 'client_credentials'\n}\n\nexport interface OAuthConfig {\n type: OAuthType;\n config: OAuthTypeConfig;\n storageKey?: string;\n storage?: Storage;\n ignorePaths?: RegExp[];\n}\n\nexport interface ClientCredentialConfig {\n tokenPath: string;\n revokePath?: string;\n clientId: string;\n clientSecret: string;\n scope?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface ResourceConfig extends ClientCredentialConfig {\n}\n\nexport interface ImplicitConfig {\n authorizePath: string;\n revokePath?: string;\n clientId: string;\n scope?: string;\n}\n\nexport interface AuthorizationCodeConfig extends ResourceConfig {\n authorizePath: string;\n}\n\nexport interface AuthorizationCodePKCEConfig extends AuthorizationCodeConfig {\n codeVerifier: string;\n}\n\nexport interface ResourceParameters {\n username: string;\n password: string;\n}\n\nexport interface ImplicitParameters {\n redirectUri: string;\n state?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface AuthorizationCodeParameters extends ImplicitParameters {\n}\n\nexport type OAuthParameters = ResourceParameters | AuthorizationCodeParameters | ImplicitParameters;\nexport type OAuthTypeConfig =\n AuthorizationCodePKCEConfig\n | AuthorizationCodeConfig\n | ImplicitConfig\n | ResourceConfig\n | ClientCredentialConfig;\n\nexport interface OAuthToken {\n id_token?: string;\n access_token?: string;\n refresh_token?: string;\n token_type?: string;\n state?: string;\n error?: string;\n expires_in?: number | string;\n refresh_expires_in?: number;\n scope?: string;\n}\n\nexport enum OAuthStatus {\n NOT_AUTHORIZED = 'NOT_AUTHORIZED',\n AUTHORIZED = 'AUTHORIZED',\n DENIED = 'DENIED'\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\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 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") 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 throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\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\n/** @deprecated */\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\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import {Inject, Injectable, NgZone} from '@angular/core';\nimport {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {catchError, concatMap, delay, switchMap} from 'rxjs/operators';\nimport {EMPTY, from, noop, of, ReplaySubject} from 'rxjs';\nimport {\n AuthorizationCodeParameters,\n ImplicitParameters,\n LOCATION,\n OAUTH_CONFIG,\n OAuthConfig,\n OAuthParameters,\n OAuthStatus,\n OAuthToken,\n OAuthType,\n OAuthTypeConfig,\n ResourceParameters\n} from '../models';\n\nconst base64url = (str: string) => btoa(str)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n\nconst pkce = async (value: string) => {\n const buff = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));\n return base64url(new Uint8Array(buff).reduce((s, b) => s + String.fromCharCode(b), ''));\n};\n\nconst REQUEST_HEADER = new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'});\n\nconst parseOauthUri = (hash: string): Record<string, string> | null => {\n const regex = /([^&=]+)=([^&]*)/g;\n const params: Record<string, string> = {};\n let m;\n // tslint:disable-next-line:no-conditional-assignment\n while ((m = regex.exec(hash)) !== null) {\n params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);\n }\n if (Object.keys(params).length) {\n return params;\n }\n return null;\n};\n\n@Injectable()\nexport class OAuthService {\n\n private _token: OAuthToken | null = null;\n private _status = OAuthStatus.NOT_AUTHORIZED;\n private timer: any;\n state$: ReplaySubject<string> = new ReplaySubject(1);\n status$: ReplaySubject<OAuthStatus> = new ReplaySubject(1);\n\n constructor(private http: HttpClient,\n private zone: NgZone,\n @Inject(OAUTH_CONFIG) private authConfig: OAuthConfig,\n @Inject(LOCATION) private locationService: Location) {\n this.init();\n }\n\n protected init(): void {\n const {hash, search, origin} = this.locationService;\n const isImplicitRedirect = hash && new RegExp('(#access_token=)|(#error=)').test(hash);\n const isAuthCodeRedirect = search && new RegExp('(code=)|(error=)').test(search);\n const {storageKey} = this.authConfig;\n const savedToken = storageKey && this.authConfig.storage && this.authConfig.storage[storageKey] &&\n JSON.parse(this.authConfig.storage[storageKey]);\n if (isImplicitRedirect) {\n const parameters = parseOauthUri(hash.substr(1));\n this.emitState(parameters);\n this.cleanLocationHash();\n if (!parameters || parameters.error) {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n } else {\n this.token = parameters;\n this.status = OAuthStatus.AUTHORIZED;\n }\n } else if (isAuthCodeRedirect) {\n const parameters = parseOauthUri(search.substr(1));\n this.emitState(parameters);\n const newParametersString = this.getCleanedUnSearchParameters();\n if (parameters && parameters.code) {\n const {clientId, clientSecret, tokenPath, scope, codeVerifier} = this.authConfig.config as any;\n setTimeout(() => {\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n code: parameters.code,\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: `${origin}/${newParametersString}`,\n grant_type: 'authorization_code',\n ...scope ? {scope} : {},\n ...codeVerifier ? {code_verifier: codeVerifier} : {}\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = {error: 'error'};\n this.status = OAuthStatus.DENIED;\n this.locationService.href = `${origin}/${newParametersString}`;\n return EMPTY;\n })\n ).subscribe(token => {\n this.token = token;\n // authorized event will be triggered after redirect\n this.locationService.href = `${origin}/${newParametersString}`;\n });\n });\n } else {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n }\n } else if (savedToken) {\n const {access_token, refresh_token, error} = savedToken;\n if (error) {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n } else if (access_token) {\n this.token = savedToken;\n if (refresh_token) {\n setTimeout(() => {\n this.refreshToken();\n });\n } else {\n this.status = OAuthStatus.AUTHORIZED;\n }\n }\n } else {\n this.status = OAuthStatus.NOT_AUTHORIZED;\n }\n }\n\n login(parameters?: OAuthParameters) {\n if (this.isResourceType(parameters as ResourceParameters)) {\n this.resourceLogin(parameters as ResourceParameters);\n } else if (this.isAuthorizationCodeType(parameters as AuthorizationCodeParameters)) {\n this.authorizationCodeLogin(parameters as AuthorizationCodeParameters).then();\n } else if (this.isImplicitType(parameters as ImplicitParameters)) {\n this.implicitLogin(parameters as ImplicitParameters).then();\n } else if (this.isClientCredentialType()) {\n this.clientCredentialLogin();\n }\n }\n\n logout() {\n this.revoke();\n this.token = null;\n this.status = OAuthStatus.NOT_AUTHORIZED;\n }\n\n revoke() {\n const {revokePath, clientId, clientSecret} = this.authConfig.config as any;\n if (revokePath) {\n const {access_token, refresh_token} = this.token as OAuthToken;\n const toRevoke = [];\n if (access_token) {\n toRevoke.push({\n ...clientId ? {client_id: clientId} : {},\n ...clientSecret ? {client_secret: clientSecret} : {},\n token: access_token,\n token_type_hint: 'access_token'\n });\n }\n if (refresh_token) {\n toRevoke.push({\n ...clientId ? {client_id: clientId} : {},\n ...clientSecret ? {client_secret: clientSecret} : {},\n token: refresh_token,\n token_type_hint: 'refresh_token'\n });\n }\n from(toRevoke).pipe(\n concatMap(o => of(o).pipe(delay(300))), // space request to avoid cancellation\n switchMap(o => this.http.post(revokePath, new HttpParams({fromObject: o}))),\n ).subscribe(noop);\n }\n }\n\n get status(): OAuthStatus {\n return this._status;\n }\n\n set status(status) {\n this._status = status;\n this.status$.next(status);\n }\n\n set(type: OAuthType, config?: OAuthTypeConfig): void {\n this.authConfig.type = type;\n if (config) {\n this.authConfig.config = {\n ...this.authConfig.config,\n ...config\n };\n }\n }\n\n get type(): OAuthType {\n return this.authConfig.type;\n }\n\n get ignorePaths(): RegExp[] {\n return this.authConfig.ignorePaths || [];\n }\n\n private resourceLogin(parameters: ResourceParameters) {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n const {username, password} = parameters;\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.RESOURCE,\n ...scope ? {scope} : {},\n username,\n password\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = params;\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n\n private async authorizationCodeLogin(parameters: AuthorizationCodeParameters) {\n const authUrl = await this.toAuthorizationUrl(parameters, OAuthType.AUTHORIZATION_CODE);\n this.locationService.replace(authUrl);\n }\n\n private async implicitLogin(parameters: ImplicitParameters) {\n const authUrl = await this.toAuthorizationUrl(parameters, OAuthType.IMPLICIT);\n this.locationService.replace(authUrl);\n }\n\n private clientCredentialLogin() {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.CLIENT_CREDENTIAL,\n ...scope ? {scope} : {},\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = params;\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n\n private isClientCredentialType(): boolean {\n return this.authConfig.type === OAuthType.CLIENT_CREDENTIAL;\n }\n\n private isResourceType(parameters?: ResourceParameters): boolean {\n return this.authConfig.type === OAuthType.RESOURCE && !!parameters?.password;\n }\n\n private isImplicitType(parameters?: ImplicitParameters): boolean {\n return this.authConfig.type === OAuthType.IMPLICIT && !!parameters?.redirectUri;\n }\n\n private isAuthorizationCodeType(parameters?: AuthorizationCodeParameters): boolean {\n return this.authConfig.type === OAuthType.AUTHORIZATION_CODE && !!parameters?.redirectUri;\n }\n\n private async toAuthorizationUrl(parameters: AuthorizationCodeParameters | ImplicitParameters, responseType: OAuthType): Promise<string> {\n const {config} = this.authConfig as any;\n const appendChar = config.authorizePath.includes('?') ? '&' : '?';\n const clientId = `${appendChar}client_id=${config.clientId}`;\n const redirectUri = `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`;\n const responseTypeString = `&response_type=${responseType}`;\n const scope = `&scope=${encodeURIComponent(config.scope || '')}`;\n const state = `&state=${encodeURIComponent(parameters.state || '')}`;\n const {codeVerifier} = config;\n const codeChallenge = codeVerifier ? `&code_challenge=${await pkce(codeVerifier)}&code_challenge_method=S256` : '';\n const parametersString = `${clientId}${redirectUri}${responseTypeString}${scope}${state}${codeChallenge}`;\n return `${config.authorizePath}${parametersString}`;\n }\n\n set token(token: OAuthToken | null) {\n this._token = token;\n const {storageKey} = this.authConfig;\n if (token) {\n // @ts-ignore\n this.authConfig.storage[storageKey] = JSON.stringify(this.token);\n clearTimeout(this.timer);\n if (this.token && this.token.expires_in) {\n this.zone.runOutsideAngular(() => {\n this.timer = setTimeout(() => {\n this.zone.run(() => {\n this.refreshToken();\n });\n }, Number(this.token?.expires_in) * 1000);\n });\n }\n } else {\n // @ts-ignore\n delete this.authConfig.storage[storageKey];\n }\n }\n\n get token() {\n return this._token;\n }\n\n private refreshToken() {\n const {tokenPath, clientId, clientSecret, scope} = this.authConfig.config as any;\n const {refresh_token} = this.token as OAuthToken;\n if (tokenPath && refresh_token) {\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: 'refresh_token',\n refresh_token,\n ...scope ? {scope} : {},\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.logout();\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = {\n ...this.token,\n ...params\n };\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n }\n\n private getCleanedUnSearchParameters(): string {\n const {search} = this.locationService;\n let searchString = search.substr(1);\n const hashKeys = ['code', 'state', 'error', 'error_description', 'session_state'];\n hashKeys.forEach((hashKey) => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n searchString = searchString.replace(re, '');\n });\n return searchString.length ? `?${searchString}` : '';\n }\n\n private cleanLocationHash() {\n const {hash} = this.locationService;\n let curHash = hash.substr(1);\n const hashKeys = ['access_token', 'token_type', 'expires_in', 'scope', 'state', 'error', 'error_description', 'session_state'];\n hashKeys.forEach((hashKey) => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n curHash = curHash.replace(re, '');\n });\n this.locationService.hash = curHash;\n }\n\n private emitState(parameters: Record<string, string> | null) {\n const {state} = parameters as any;\n if (state) {\n this.state$.next(state);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {EMPTY, Observable, throwError} from 'rxjs';\nimport {catchError} from 'rxjs/operators';\nimport {OAuthService} from './oauth.service';\nimport {OAuthStatus} from '../models';\n\n@Injectable()\nexport class OAuthInterceptor implements HttpInterceptor {\n\n constructor(private oauthService: OAuthService) {\n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (this.oauthService) {\n if (!this.isPathExcepted(req)) {\n const token = this.oauthService.token;\n if (token && token.access_token) {\n req = req.clone({\n setHeaders: {\n Authorization: `${token.token_type} ${token.access_token}`\n }\n });\n }\n }\n return next.handle(req).pipe(\n catchError((err) => {\n if (err.status === 401) {\n this.oauthService.token = null;\n this.oauthService.status = OAuthStatus.DENIED;\n return EMPTY;\n }\n return throwError(() => new Error(err));\n })\n );\n } else {\n return next.handle(req);\n }\n }\n\n private isPathExcepted(req: HttpRequest<any>) {\n for (const ignorePath of this.oauthService.ignorePaths) {\n try {\n if (req.url.match(ignorePath)) {\n return true;\n }\n } catch (err) {\n }\n }\n return false;\n }\n}\n","import {Component, ContentChild, EventEmitter, HostListener, Inject, Input, OnDestroy, Output, TemplateRef} from '@angular/core';\r\nimport {Observable, Subscription} from 'rxjs';\r\nimport {LOCATION, OAuthParameters, OAuthStatus, OAuthType} from '../../models';\r\nimport {tap} from 'rxjs/operators';\r\nimport {OAuthService} from '../../services/oauth.service';\r\n\r\nexport interface OAuthLoginI18n {\r\n username?: string;\r\n password?: string;\r\n submit?: string;\r\n notAuthorized?: string;\r\n authorized?: string;\r\n denied?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'oauth-login',\r\n templateUrl: 'oauth-login.component.html',\r\n styleUrls: ['oauth-login.component.scss']\r\n})\r\nexport class OAuthLoginComponent implements OnDestroy {\r\n\r\n private subscription = new Subscription();\r\n private _i18n: OAuthLoginI18n = {\r\n username: 'Username',\r\n password: 'Password',\r\n submit: 'Sign in',\r\n notAuthorized: 'Sign in',\r\n authorized: 'Welcome',\r\n denied: 'Access Denied. Try again!'\r\n };\r\n\r\n get i18n() {\r\n return this._i18n;\r\n }\r\n\r\n @Input()\r\n set i18n(i18n) {\r\n this._i18n = {\r\n ...this._i18n,\r\n ...i18n\r\n };\r\n }\r\n\r\n @Input()\r\n state = '';\r\n @Output()\r\n stateChange: EventEmitter<string> = new EventEmitter();\r\n @Input()\r\n profileName$: Observable<string> | undefined;\r\n @ContentChild('login', {static: false})\r\n loginTemplate: TemplateRef<any> | undefined;\r\n username = '';\r\n password = '';\r\n profileName: string | undefined;\r\n OAuthStatus = OAuthStatus;\r\n OAuthType = OAuthType;\r\n collapse = false;\r\n type = this.oauthService.type;\r\n redirectUri = this.location.href;\r\n state$ = this.oauthService.state$.pipe(\r\n tap(s => this.stateChange.emit(s))\r\n );\r\n status$ = this.oauthService.status$.pipe(\r\n tap(s => {\r\n if (s === OAuthStatus.AUTHORIZED && this.profileName$) {\r\n this.subscription.add(this.profileName$.subscribe(n => this.profileName = n));\r\n } else {\r\n this.profileName = '';\r\n }\r\n })\r\n );\r\n loginFunction = (p: OAuthParameters) => this.login(p);\r\n logoutFunction = () => this.logout();\r\n\r\n constructor(private oauthService: OAuthService,\r\n @Inject(LOCATION) private location: Location) {\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n logout() {\r\n this.oauthService.logout();\r\n }\r\n\r\n login(parameters: OAuthParameters) {\r\n this.oauthService.login(parameters);\r\n this.collapse = false;\r\n }\r\n\r\n toggleCollapse() {\r\n this.collapse = !this.collapse;\r\n }\r\n\r\n @HostListener('window:keydown.escape')\r\n keyboardEvent() {\r\n this.collapse = false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule, Optional, PLATFORM_ID} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\nimport {RouterModule} from '@angular/router';\nimport {OAuthConfig, OAUTH_CONFIG, LOCATION, SERVER_HOST, SERVER_PATH, STORAGE} from './models';\nimport {OAuthService} from './services/oauth.service';\nimport {OAuthLoginComponent} from './components/login/oauth-login.component';\nimport {CommonModule, isPlatformBrowser} from '@angular/common';\nimport {OAuthInterceptor} from './services/oauth.interceptor';\n\nconst mockLocation = (serverHost: string, serverPath: string): Location => {\n const url = new URL(serverHost && serverPath ? `${serverHost}${serverPath}` : 'http://localhost');\n const {href, origin, protocol, host, hostname, port, pathname, search, hash} = url;\n return {\n href, origin, protocol, host, hostname, port, pathname, search, hash,\n reload() {\n },\n assign(u: string) {\n },\n ancestorOrigins: {} as any,\n replace(u: string) {\n }\n };\n};\n\nconst LocationService = {\n provide: LOCATION,\n useFactory(platformId: Object, serverHost: string, serverPath: string) {\n return isPlatformBrowser(platformId) ? location : mockLocation(serverHost, serverPath);\n },\n deps: [\n PLATFORM_ID,\n [new Optional(), SERVER_HOST],\n [new Optional(), SERVER_PATH]\n ]\n};\n\nconst mockStorage: Storage = {\n clear() {\n },\n getItem(key: string) {\n return null;\n },\n key(index: number) {\n return null;\n },\n removeItem(key: string) {\n },\n setItem(key: string, value: string) {\n },\n length: 0\n};\n\nconst StorageService = {\n provide: STORAGE,\n useFactory(platformId: Object) {\n return isPlatformBrowser(platformId) ? localStorage : mockStorage;\n },\n deps: [PLATFORM_ID]\n};\n\nconst OAuthInterceptorService = {\n provide: HTTP_INTERCEPTORS,\n useClass: OAuthInterceptor,\n multi: true,\n};\n\nconst defaultConfig = (storage: Storage) => {\n return {\n storage,\n storageKey: 'token',\n ignorePaths: []\n };\n};\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n RouterModule,\n ],\n declarations: [OAuthLoginComponent],\n exports: [OAuthLoginComponent],\n providers: [\n LocationService,\n StorageService,\n OAuthService,\n OAuthInterceptorService,\n ]\n})\nexport class OAuthModule {\n\n static forRoot(config: OAuthConfig): ModuleWithProviders<OAuthModule> {\n return {\n ngModule: OAuthModule,\n providers: [\n LocationService,\n StorageService,\n OAuthService,\n OAuthInterceptorService,\n {\n provide: OAUTH_CONFIG,\n useFactory(storage: Storage) {\n return {\n ...defaultConfig(storage),\n ...config,\n };\n },\n deps: [\n STORAGE\n ]\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-oauth\n */\nexport * from './lib/models';\nexport * from './lib/services/oauth.service';\nexport * from './lib/services/oauth.interceptor';\nexport * from './lib/components/login/oauth-login.component';\nexport * from './lib/oauth.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["InjectionToken","OAuthType","OAuthStatus","HttpHeaders","ReplaySubject","HttpParams","catchError","EMPTY","from","concatMap","of","delay","switchMap","noop","Injectable","HttpClient","NgZone","Inject","throwError","Subscription","EventEmitter","tap","Component","Input","Output","ContentChild","HostListener","isPlatformBrowser","PLATFORM_ID","Optional","HTTP_INTERCEPTORS","NgModule","CommonModule","FormsModule","HttpClientModule","RouterModule"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-oauth.umd.js","sources":["../../../projects/ngx-oauth/src/lib/models/index.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/ngx-oauth/src/lib/services/oauth.service.ts","../../../projects/ngx-oauth/src/lib/services/oauth.interceptor.ts","../../../projects/ngx-oauth/src/lib/components/login/oauth-login.component.ts","../../../projects/ngx-oauth/src/lib/oauth.module.ts","../../../projects/ngx-oauth/src/index.ts","../../../projects/ngx-oauth/src/ngx-oauth.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const SERVER_HOST = new InjectionToken<string>('SERVER_HOST');\nexport const SERVER_PATH = new InjectionToken<string>('SERVER_PATH');\nexport const LOCATION = new InjectionToken<Location>('Location');\nexport const STORAGE = new InjectionToken<Storage>('Storage');\nexport const OAUTH_CONFIG = new InjectionToken<OAuthConfig>('OAuthConfig');\n\nexport enum OAuthType {\n RESOURCE = 'password',\n AUTHORIZATION_CODE = 'code',\n IMPLICIT = 'token',\n CLIENT_CREDENTIAL = 'client_credentials'\n}\n\nexport interface OAuthConfig {\n type: OAuthType;\n config: OAuthTypeConfig;\n storageKey?: string;\n storage?: Storage;\n ignorePaths?: RegExp[];\n}\n\nexport interface ClientCredentialConfig {\n tokenPath: string;\n revokePath?: string;\n clientId: string;\n clientSecret: string;\n scope?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface ResourceConfig extends ClientCredentialConfig {\n}\n\nexport interface ImplicitConfig {\n authorizePath: string;\n revokePath?: string;\n clientId: string;\n scope?: string;\n}\n\nexport interface AuthorizationCodeConfig extends ResourceConfig {\n authorizePath: string;\n}\n\nexport interface AuthorizationCodePKCEConfig extends AuthorizationCodeConfig {\n codeVerifier: string;\n}\n\nexport interface ResourceParameters {\n username: string;\n password: string;\n}\n\nexport interface ImplicitParameters {\n redirectUri: string;\n state?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface AuthorizationCodeParameters extends ImplicitParameters {\n}\n\nexport type OAuthParameters = ResourceParameters | AuthorizationCodeParameters | ImplicitParameters;\nexport type OAuthTypeConfig =\n AuthorizationCodePKCEConfig\n | AuthorizationCodeConfig\n | ImplicitConfig\n | ResourceConfig\n | ClientCredentialConfig;\n\nexport interface OAuthToken {\n id_token?: string;\n access_token?: string;\n refresh_token?: string;\n token_type?: string;\n state?: string;\n error?: string;\n expires_in?: number | string;\n refresh_expires_in?: number;\n scope?: string;\n}\n\nexport enum OAuthStatus {\n NOT_AUTHORIZED = 'NOT_AUTHORIZED',\n AUTHORIZED = 'AUTHORIZED',\n DENIED = 'DENIED'\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\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 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") 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 throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\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\n/** @deprecated */\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\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import {Inject, Injectable, NgZone} from '@angular/core';\nimport {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {catchError, concatMap, delay, switchMap} from 'rxjs/operators';\nimport {EMPTY, from, noop, of, ReplaySubject} from 'rxjs';\nimport {\n AuthorizationCodeParameters,\n ImplicitParameters,\n LOCATION,\n OAUTH_CONFIG,\n OAuthConfig,\n OAuthParameters,\n OAuthStatus,\n OAuthToken,\n OAuthType,\n OAuthTypeConfig,\n ResourceParameters\n} from '../models';\n\nconst base64url = (str: string) => btoa(str)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n\nconst pkce = async (value: string) => {\n const buff = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));\n return base64url(new Uint8Array(buff).reduce((s, b) => s + String.fromCharCode(b), ''));\n};\n\nconst REQUEST_HEADER = new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'});\n\nconst parseOauthUri = (hash: string): Record<string, string> | null => {\n const regex = /([^&=]+)=([^&]*)/g;\n const params: Record<string, string> = {};\n let m;\n // tslint:disable-next-line:no-conditional-assignment\n while ((m = regex.exec(hash)) !== null) {\n params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);\n }\n if (Object.keys(params).length) {\n return params;\n }\n return null;\n};\n\n@Injectable()\nexport class OAuthService {\n\n private _token: OAuthToken | null = null;\n private _status = OAuthStatus.NOT_AUTHORIZED;\n private timer: any;\n state$: ReplaySubject<string> = new ReplaySubject(1);\n status$: ReplaySubject<OAuthStatus> = new ReplaySubject(1);\n\n constructor(private http: HttpClient,\n private zone: NgZone,\n @Inject(OAUTH_CONFIG) private authConfig: OAuthConfig,\n @Inject(LOCATION) private locationService: Location) {\n this.init();\n }\n\n protected init(): void {\n const {hash, search, origin, pathname} = this.locationService;\n const isImplicitRedirect = hash && new RegExp('(#access_token=)|(#error=)').test(hash);\n const isAuthCodeRedirect = search && new RegExp('(code=)|(error=)').test(search);\n const {storageKey} = this.authConfig;\n const savedToken = storageKey && this.authConfig.storage && this.authConfig.storage[storageKey] &&\n JSON.parse(this.authConfig.storage[storageKey]);\n if (isImplicitRedirect) {\n const parameters = parseOauthUri(hash.substr(1));\n this.emitState(parameters);\n this.cleanLocationHash();\n if (!parameters || parameters.error) {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n } else {\n this.token = parameters;\n this.status = OAuthStatus.AUTHORIZED;\n }\n } else if (isAuthCodeRedirect) {\n const parameters = parseOauthUri(search.substr(1));\n this.emitState(parameters);\n const newParametersString = this.getCleanedUnSearchParameters();\n if (parameters && parameters.code) {\n const {clientId, clientSecret, tokenPath, scope, codeVerifier} = this.authConfig.config as any;\n setTimeout(() => {\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n code: parameters.code,\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: `${origin}${pathname}${newParametersString}`,\n grant_type: 'authorization_code',\n ...scope ? {scope} : {},\n ...codeVerifier ? {code_verifier: codeVerifier} : {}\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = {error: 'error'};\n this.status = OAuthStatus.DENIED;\n this.locationService.href = `${origin}${pathname}${newParametersString}`;\n return EMPTY;\n })\n ).subscribe(token => {\n this.token = token;\n // authorized event will be triggered after redirect\n this.locationService.href = `${origin}${pathname}${newParametersString}`;\n });\n });\n } else {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n }\n } else if (savedToken) {\n const {access_token, refresh_token, error} = savedToken;\n if (error) {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n } else if (access_token) {\n this.token = savedToken;\n if (refresh_token) {\n setTimeout(() => {\n this.refreshToken();\n });\n } else {\n this.status = OAuthStatus.AUTHORIZED;\n }\n }\n } else {\n this.status = OAuthStatus.NOT_AUTHORIZED;\n }\n }\n\n login(parameters?: OAuthParameters) {\n if (this.isResourceType(parameters as ResourceParameters)) {\n this.resourceLogin(parameters as ResourceParameters);\n } else if (this.isAuthorizationCodeType(parameters as AuthorizationCodeParameters)) {\n this.authorizationCodeLogin(parameters as AuthorizationCodeParameters).then();\n } else if (this.isImplicitType(parameters as ImplicitParameters)) {\n this.implicitLogin(parameters as ImplicitParameters).then();\n } else if (this.isClientCredentialType()) {\n this.clientCredentialLogin();\n }\n }\n\n logout() {\n this.revoke();\n this.token = null;\n this.status = OAuthStatus.NOT_AUTHORIZED;\n }\n\n revoke() {\n const {revokePath, clientId, clientSecret} = this.authConfig.config as any;\n if (revokePath) {\n const {access_token, refresh_token} = this.token as OAuthToken;\n const toRevoke = [];\n if (access_token) {\n toRevoke.push({\n ...clientId ? {client_id: clientId} : {},\n ...clientSecret ? {client_secret: clientSecret} : {},\n token: access_token,\n token_type_hint: 'access_token'\n });\n }\n if (refresh_token) {\n toRevoke.push({\n ...clientId ? {client_id: clientId} : {},\n ...clientSecret ? {client_secret: clientSecret} : {},\n token: refresh_token,\n token_type_hint: 'refresh_token'\n });\n }\n from(toRevoke).pipe(\n concatMap(o => of(o).pipe(delay(300))), // space request to avoid cancellation\n switchMap(o => this.http.post(revokePath, new HttpParams({fromObject: o}))),\n ).subscribe(noop);\n }\n }\n\n get status(): OAuthStatus {\n return this._status;\n }\n\n set status(status) {\n this._status = status;\n this.status$.next(status);\n }\n\n set(type: OAuthType, config?: OAuthTypeConfig): void {\n this.authConfig.type = type;\n if (config) {\n this.authConfig.config = {\n ...this.authConfig.config,\n ...config\n };\n }\n }\n\n get type(): OAuthType {\n return this.authConfig.type;\n }\n\n get ignorePaths(): RegExp[] {\n return this.authConfig.ignorePaths || [];\n }\n\n private resourceLogin(parameters: ResourceParameters) {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n const {username, password} = parameters;\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.RESOURCE,\n ...scope ? {scope} : {},\n username,\n password\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = params;\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n\n private async authorizationCodeLogin(parameters: AuthorizationCodeParameters) {\n const authUrl = await this.toAuthorizationUrl(parameters, OAuthType.AUTHORIZATION_CODE);\n this.locationService.replace(authUrl);\n }\n\n private async implicitLogin(parameters: ImplicitParameters) {\n const authUrl = await this.toAuthorizationUrl(parameters, OAuthType.IMPLICIT);\n this.locationService.replace(authUrl);\n }\n\n private clientCredentialLogin() {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.CLIENT_CREDENTIAL,\n ...scope ? {scope} : {},\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = params;\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n\n private isClientCredentialType(): boolean {\n return this.authConfig.type === OAuthType.CLIENT_CREDENTIAL;\n }\n\n private isResourceType(parameters?: ResourceParameters): boolean {\n return this.authConfig.type === OAuthType.RESOURCE && !!parameters?.password;\n }\n\n private isImplicitType(parameters?: ImplicitParameters): boolean {\n return this.authConfig.type === OAuthType.IMPLICIT && !!parameters?.redirectUri;\n }\n\n private isAuthorizationCodeType(parameters?: AuthorizationCodeParameters): boolean {\n return this.authConfig.type === OAuthType.AUTHORIZATION_CODE && !!parameters?.redirectUri;\n }\n\n private async toAuthorizationUrl(parameters: AuthorizationCodeParameters | ImplicitParameters, responseType: OAuthType): Promise<string> {\n const {config} = this.authConfig as any;\n const appendChar = config.authorizePath.includes('?') ? '&' : '?';\n const clientId = `${appendChar}client_id=${config.clientId}`;\n const redirectUri = `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`;\n const responseTypeString = `&response_type=${responseType}`;\n const scope = `&scope=${encodeURIComponent(config.scope || '')}`;\n const state = `&state=${encodeURIComponent(parameters.state || '')}`;\n const {codeVerifier} = config;\n const codeChallenge = codeVerifier ? `&code_challenge=${await pkce(codeVerifier)}&code_challenge_method=S256` : '';\n const parametersString = `${clientId}${redirectUri}${responseTypeString}${scope}${state}${codeChallenge}`;\n return `${config.authorizePath}${parametersString}`;\n }\n\n set token(token: OAuthToken | null) {\n this._token = token;\n const {storageKey} = this.authConfig;\n if (token) {\n // @ts-ignore\n this.authConfig.storage[storageKey] = JSON.stringify(this.token);\n clearTimeout(this.timer);\n if (this.token && this.token.expires_in) {\n this.zone.runOutsideAngular(() => {\n this.timer = setTimeout(() => {\n this.zone.run(() => {\n this.refreshToken();\n });\n }, Number(this.token?.expires_in) * 1000);\n });\n }\n } else {\n // @ts-ignore\n delete this.authConfig.storage[storageKey];\n }\n }\n\n get token() {\n return this._token;\n }\n\n private refreshToken() {\n const {tokenPath, clientId, clientSecret, scope} = this.authConfig.config as any;\n const {refresh_token} = this.token as OAuthToken;\n if (tokenPath && refresh_token) {\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: 'refresh_token',\n refresh_token,\n ...scope ? {scope} : {},\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.logout();\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = {\n ...this.token,\n ...params\n };\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n }\n\n private getCleanedUnSearchParameters(): string {\n const {search} = this.locationService;\n let searchString = search.substr(1);\n const hashKeys = ['code', 'state', 'error', 'error_description', 'session_state'];\n hashKeys.forEach((hashKey) => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n searchString = searchString.replace(re, '');\n });\n return searchString.length ? `?${searchString}` : '';\n }\n\n private cleanLocationHash() {\n const {hash} = this.locationService;\n let curHash = hash.substr(1);\n const hashKeys = ['access_token', 'token_type', 'expires_in', 'scope', 'state', 'error', 'error_description', 'session_state'];\n hashKeys.forEach((hashKey) => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n curHash = curHash.replace(re, '');\n });\n this.locationService.hash = curHash;\n }\n\n private emitState(parameters: Record<string, string> | null) {\n const {state} = parameters as any;\n if (state) {\n this.state$.next(state);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {EMPTY, Observable, throwError} from 'rxjs';\nimport {catchError} from 'rxjs/operators';\nimport {OAuthService} from './oauth.service';\nimport {OAuthStatus} from '../models';\n\n@Injectable()\nexport class OAuthInterceptor implements HttpInterceptor {\n\n constructor(private oauthService: OAuthService) {\n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (this.oauthService) {\n if (!this.isPathExcepted(req)) {\n const token = this.oauthService.token;\n if (token && token.access_token) {\n req = req.clone({\n setHeaders: {\n Authorization: `${token.token_type} ${token.access_token}`\n }\n });\n }\n }\n return next.handle(req).pipe(\n catchError((err) => {\n if (err.status === 401) {\n this.oauthService.token = null;\n this.oauthService.status = OAuthStatus.DENIED;\n return EMPTY;\n }\n return throwError(() => new Error(err));\n })\n );\n } else {\n return next.handle(req);\n }\n }\n\n private isPathExcepted(req: HttpRequest<any>) {\n for (const ignorePath of this.oauthService.ignorePaths) {\n try {\n if (req.url.match(ignorePath)) {\n return true;\n }\n } catch (err) {\n }\n }\n return false;\n }\n}\n","import {Component, ContentChild, EventEmitter, HostListener, Inject, Input, OnDestroy, Output, TemplateRef} from '@angular/core';\r\nimport {Observable, Subscription} from 'rxjs';\r\nimport {LOCATION, OAuthParameters, OAuthStatus, OAuthType} from '../../models';\r\nimport {tap} from 'rxjs/operators';\r\nimport {OAuthService} from '../../services/oauth.service';\r\n\r\nexport interface OAuthLoginI18n {\r\n username?: string;\r\n password?: string;\r\n submit?: string;\r\n notAuthorized?: string;\r\n authorized?: string;\r\n denied?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'oauth-login',\r\n templateUrl: 'oauth-login.component.html',\r\n styleUrls: ['oauth-login.component.scss']\r\n})\r\nexport class OAuthLoginComponent implements OnDestroy {\r\n\r\n private subscription = new Subscription();\r\n private _i18n: OAuthLoginI18n = {\r\n username: 'Username',\r\n password: 'Password',\r\n submit: 'Sign in',\r\n notAuthorized: 'Sign in',\r\n authorized: 'Welcome',\r\n denied: 'Access Denied. Try again!'\r\n };\r\n\r\n get i18n() {\r\n return this._i18n;\r\n }\r\n\r\n @Input()\r\n set i18n(i18n) {\r\n this._i18n = {\r\n ...this._i18n,\r\n ...i18n\r\n };\r\n }\r\n\r\n @Input()\r\n state = '';\r\n @Output()\r\n stateChange: EventEmitter<string> = new EventEmitter();\r\n @Input()\r\n profileName$: Observable<string> | undefined;\r\n @ContentChild('login', {static: false})\r\n loginTemplate: TemplateRef<any> | undefined;\r\n username = '';\r\n password = '';\r\n profileName: string | undefined;\r\n OAuthStatus = OAuthStatus;\r\n OAuthType = OAuthType;\r\n collapse = false;\r\n type = this.oauthService.type;\r\n redirectUri = this.location.href;\r\n state$ = this.oauthService.state$.pipe(\r\n tap(s => this.stateChange.emit(s))\r\n );\r\n status$ = this.oauthService.status$.pipe(\r\n tap(s => {\r\n if (s === OAuthStatus.AUTHORIZED && this.profileName$) {\r\n this.subscription.add(this.profileName$.subscribe(n => this.profileName = n));\r\n } else {\r\n this.profileName = '';\r\n }\r\n })\r\n );\r\n loginFunction = (p: OAuthParameters) => this.login(p);\r\n logoutFunction = () => this.logout();\r\n\r\n constructor(private oauthService: OAuthService,\r\n @Inject(LOCATION) private location: Location) {\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n logout() {\r\n this.oauthService.logout();\r\n }\r\n\r\n login(parameters: OAuthParameters) {\r\n this.oauthService.login(parameters);\r\n this.collapse = false;\r\n }\r\n\r\n toggleCollapse() {\r\n this.collapse = !this.collapse;\r\n }\r\n\r\n @HostListener('window:keydown.escape')\r\n keyboardEvent() {\r\n this.collapse = false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule, Optional, PLATFORM_ID} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\nimport {RouterModule} from '@angular/router';\nimport {OAuthConfig, OAUTH_CONFIG, LOCATION, SERVER_HOST, SERVER_PATH, STORAGE} from './models';\nimport {OAuthService} from './services/oauth.service';\nimport {OAuthLoginComponent} from './components/login/oauth-login.component';\nimport {CommonModule, isPlatformBrowser} from '@angular/common';\nimport {OAuthInterceptor} from './services/oauth.interceptor';\n\nconst mockLocation = (serverHost: string, serverPath: string): Location => {\n const url = new URL(serverHost && serverPath ? `${serverHost}${serverPath}` : 'http://localhost');\n const {href, origin, protocol, host, hostname, port, pathname, search, hash} = url;\n return {\n href, origin, protocol, host, hostname, port, pathname, search, hash,\n reload() {\n },\n assign(u: string) {\n },\n ancestorOrigins: {} as any,\n replace(u: string) {\n }\n };\n};\n\nconst LocationService = {\n provide: LOCATION,\n useFactory(platformId: Object, serverHost: string, serverPath: string) {\n return isPlatformBrowser(platformId) ? location : mockLocation(serverHost, serverPath);\n },\n deps: [\n PLATFORM_ID,\n [new Optional(), SERVER_HOST],\n [new Optional(), SERVER_PATH]\n ]\n};\n\nconst mockStorage: Storage = {\n clear() {\n },\n getItem(key: string) {\n return null;\n },\n key(index: number) {\n return null;\n },\n removeItem(key: string) {\n },\n setItem(key: string, value: string) {\n },\n length: 0\n};\n\nconst StorageService = {\n provide: STORAGE,\n useFactory(platformId: Object) {\n return isPlatformBrowser(platformId) ? localStorage : mockStorage;\n },\n deps: [PLATFORM_ID]\n};\n\nconst OAuthInterceptorService = {\n provide: HTTP_INTERCEPTORS,\n useClass: OAuthInterceptor,\n multi: true,\n};\n\nconst defaultConfig = (storage: Storage) => {\n return {\n storage,\n storageKey: 'token',\n ignorePaths: []\n };\n};\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n RouterModule,\n ],\n declarations: [OAuthLoginComponent],\n exports: [OAuthLoginComponent],\n providers: [\n LocationService,\n StorageService,\n OAuthService,\n OAuthInterceptorService,\n ]\n})\nexport class OAuthModule {\n\n static forRoot(config: OAuthConfig): ModuleWithProviders<OAuthModule> {\n return {\n ngModule: OAuthModule,\n providers: [\n LocationService,\n StorageService,\n OAuthService,\n OAuthInterceptorService,\n {\n provide: OAUTH_CONFIG,\n useFactory(storage: Storage) {\n return {\n ...defaultConfig(storage),\n ...config,\n };\n },\n deps: [\n STORAGE\n ]\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-oauth\n */\nexport * from './lib/models';\nexport * from './lib/services/oauth.service';\nexport * from './lib/services/oauth.interceptor';\nexport * from './lib/components/login/oauth-login.component';\nexport * from './lib/oauth.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["InjectionToken","OAuthType","OAuthStatus","HttpHeaders","ReplaySubject","HttpParams","catchError","EMPTY","from","concatMap","of","delay","switchMap","noop","Injectable","HttpClient","NgZone","Inject","throwError","Subscription","EventEmitter","tap","Component","Input","Output","ContentChild","HostListener","isPlatformBrowser","PLATFORM_ID","Optional","HTTP_INTERCEPTORS","NgModule","CommonModule","FormsModule","HttpClientModule","RouterModule"],"mappings":"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"}
@@ -42,7 +42,7 @@ export class OAuthService {
42
42
  this.init();
43
43
  }
44
44
  init() {
45
- const { hash, search, origin } = this.locationService;
45
+ const { hash, search, origin, pathname } = this.locationService;
46
46
  const isImplicitRedirect = hash && new RegExp('(#access_token=)|(#error=)').test(hash);
47
47
  const isAuthCodeRedirect = search && new RegExp('(code=)|(error=)').test(search);
48
48
  const { storageKey } = this.authConfig;
@@ -69,16 +69,16 @@ export class OAuthService {
69
69
  const { clientId, clientSecret, tokenPath, scope, codeVerifier } = this.authConfig.config;
70
70
  setTimeout(() => {
71
71
  this.http.post(tokenPath, new HttpParams({
72
- fromObject: Object.assign(Object.assign({ code: parameters.code, client_id: clientId, client_secret: clientSecret, redirect_uri: `${origin}/${newParametersString}`, grant_type: 'authorization_code' }, scope ? { scope } : {}), codeVerifier ? { code_verifier: codeVerifier } : {})
72
+ fromObject: Object.assign(Object.assign({ code: parameters.code, client_id: clientId, client_secret: clientSecret, redirect_uri: `${origin}${pathname}${newParametersString}`, grant_type: 'authorization_code' }, scope ? { scope } : {}), codeVerifier ? { code_verifier: codeVerifier } : {})
73
73
  }), { headers: REQUEST_HEADER }).pipe(catchError(() => {
74
74
  this.token = { error: 'error' };
75
75
  this.status = OAuthStatus.DENIED;
76
- this.locationService.href = `${origin}/${newParametersString}`;
76
+ this.locationService.href = `${origin}${pathname}${newParametersString}`;
77
77
  return EMPTY;
78
78
  })).subscribe(token => {
79
79
  this.token = token;
80
80
  // authorized event will be triggered after redirect
81
- this.locationService.href = `${origin}/${newParametersString}`;
81
+ this.locationService.href = `${origin}${pathname}${newParametersString}`;
82
82
  });
83
83
  });
84
84
  }
@@ -307,4 +307,4 @@ OAuthService.ctorParameters = () => [
307
307
  { type: Location, decorators: [{ type: Inject, args: [LOCATION,] }] }
308
308
  ];
309
309
  export { ɵ0, ɵ1, ɵ2 };
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vYXV0aC9zcmMvbGliL3NlcnZpY2VzL29hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUdMLFFBQVEsRUFDUixZQUFZLEVBR1osV0FBVyxFQUVYLFNBQVMsRUFHVixNQUFNLFdBQVcsQ0FBQztBQUVuQixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztLQUN6QyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztLQUNuQixPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztLQUNuQixPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDOztBQUVyQixNQUFNLElBQUksR0FBRyxDQUFPLEtBQWEsRUFBRSxFQUFFO0lBQ25DLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsT0FBTyxTQUFTLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFB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QUFNLFNBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBjb25jYXRNYXAsIGRlbGF5LCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RU1QVFksIGZyb20sIG5vb3AsIG9mLCBSZXBsYXlTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEF1dGhvcml6YXRpb25Db2RlUGFyYW1ldGVycyxcbiAgSW1wbGljaXRQYXJhbWV0ZXJzLFxuICBMT0NBVElPTixcbiAgT0FVVEhfQ09ORklHLFxuICBPQXV0aENvbmZpZyxcbiAgT0F1dGhQYXJhbWV0ZXJzLFxuICBPQXV0aFN0YXR1cyxcbiAgT0F1dGhUb2tlbixcbiAgT0F1dGhUeXBlLFxuICBPQXV0aFR5cGVDb25maWcsXG4gIFJlc291cmNlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9tb2RlbHMnO1xuXG5jb25zdCBiYXNlNjR1cmwgPSAoc3RyOiBzdHJpbmcpID0+IGJ0b2Eoc3RyKVxuICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gIC5yZXBsYWNlKC89L2csICcnKTtcblxuY29uc3QgcGtjZSA9IGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGJ1ZmYgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh2YWx1ZSkpO1xuICByZXR1cm4gYmFzZTY0dXJsKG5ldyBVaW50OEFycmF5KGJ1ZmYpLnJlZHVjZSgocywgYikgPT4gcyArIFN0cmluZy5mcm9tQ2hhckNvZGUoYiksICcnKSk7XG59O1xuXG5jb25zdCBSRVFVRVNUX0hFQURFUiA9IG5ldyBIdHRwSGVhZGVycyh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSk7XG5cbmNvbnN0IHBhcnNlT2F1dGhVcmkgPSAoaGFzaDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGwgPT4ge1xuICBjb25zdCByZWdleCA9IC8oW14mPV0rKT0oW14mXSopL2c7XG4gIGNvbnN0IHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBsZXQgbTtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbmRpdGlvbmFsLWFzc2lnbm1lbnRcbiAgd2hpbGUgKChtID0gcmVnZXguZXhlYyhoYXNoKSkgIT09IG51bGwpIHtcbiAgICBwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChtWzJdKTtcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9BdXRoU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfdG9rZW46IE9BdXRoVG9rZW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfc3RhdHVzID0gT0F1dGhTdGF0dXMuTk9UX0FVVEhPUklaRUQ7XG4gIHByaXZhdGUgdGltZXI6IGFueTtcbiAgc3RhdGUkOiBSZXBsYXlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgc3RhdHVzJDogUmVwbGF5U3ViamVjdDxPQXV0aFN0YXR1cz4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgICAgICAgICAgICBASW5qZWN0KE9BVVRIX0NPTkZJRykgcHJpdmF0ZSBhdXRoQ29uZmlnOiBPQXV0aENvbmZpZyxcbiAgICAgICAgICAgICAgQEluamVjdChMT0NBVElPTikgcHJpdmF0ZSBsb2NhdGlvblNlcnZpY2U6IExvY2F0aW9uKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCB7aGFzaCwgc2VhcmNoLCBvcmlnaW59ID0gdGhpcy5sb2NhdGlvblNlcnZpY2U7XG4gICAgY29uc3QgaXNJbXBsaWNpdFJlZGlyZWN0ID0gaGFzaCAmJiBuZXcgUmVnRXhwKCcoI2FjY2Vzc190b2tlbj0pfCgjZXJyb3I9KScpLnRlc3QoaGFzaCk7XG4gICAgY29uc3QgaXNBdXRoQ29kZVJlZGlyZWN0ID0gc2VhcmNoICYmIG5ldyBSZWdFeHAoJyhjb2RlPSl8KGVycm9yPSknKS50ZXN0KHNlYXJjaCk7XG4gICAgY29uc3Qge3N0b3JhZ2VLZXl9ID0gdGhpcy5hdXRoQ29uZmlnO1xuICAgIGNvbnN0IHNhdmVkVG9rZW4gPSBzdG9yYWdlS2V5ICYmIHRoaXMuYXV0aENvbmZpZy5zdG9yYWdlICYmIHRoaXMuYXV0aENvbmZpZy5zdG9yYWdlW3N0b3JhZ2VLZXldICYmXG4gICAgICBKU09OLnBhcnNlKHRoaXMuYXV0aENvbmZpZy5zdG9yYWdlW3N0b3JhZ2VLZXldKTtcbiAgICBpZiAoaXNJbXBsaWNpdFJlZGlyZWN0KSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyc2VPYXV0aFVyaShoYXNoLnN1YnN0cigxKSk7XG4gICAgICB0aGlzLmVtaXRTdGF0ZShwYXJhbWV0ZXJzKTtcbiAgICAgIHRoaXMuY2xlYW5Mb2NhdGlvbkhhc2goKTtcbiAgICAgIGlmICghcGFyYW1ldGVycyB8fCBwYXJhbWV0ZXJzLmVycm9yKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkRFTklFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBwYXJhbWV0ZXJzO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkFVVEhPUklaRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0F1dGhDb2RlUmVkaXJlY3QpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJzZU9hdXRoVXJpKHNlYXJjaC5zdWJzdHIoMSkpO1xuICAgICAgdGhpcy5lbWl0U3RhdGUocGFyYW1ldGVycyk7XG4gICAgICBjb25zdCBuZXdQYXJhbWV0ZXJzU3RyaW5nID0gdGhpcy5nZXRDbGVhbmVkVW5TZWFyY2hQYXJhbWV0ZXJzKCk7XG4gICAgICBpZiAocGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLmNvZGUpIHtcbiAgICAgICAgY29uc3Qge2NsaWVudElkLCBjbGllbnRTZWNyZXQsIHRva2VuUGF0aCwgc2NvcGUsIGNvZGVWZXJpZmllcn0gPSB0aGlzLmF1dGhDb25maWcuY29uZmlnIGFzIGFueTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5odHRwLnBvc3QodG9rZW5QYXRoLCBuZXcgSHR0cFBhcmFtcyh7XG4gICAgICAgICAgICBmcm9tT2JqZWN0OiB7XG4gICAgICAgICAgICAgIGNvZGU6IHBhcmFtZXRlcnMuY29kZSxcbiAgICAgICAgICAgICAgY2xpZW50X2lkOiBjbGllbnRJZCxcbiAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogY2xpZW50U2VjcmV0LFxuICAgICAgICAgICAgICByZWRpcmVjdF91cmk6IGAke29yaWdpbn0vJHtuZXdQYXJhbWV0ZXJzU3RyaW5nfWAsXG4gICAgICAgICAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICAgICAgICAuLi5zY29wZSA/IHtzY29wZX0gOiB7fSxcbiAgICAgICAgICAgICAgLi4uY29kZVZlcmlmaWVyID8ge2NvZGVfdmVyaWZpZXI6IGNvZGVWZXJpZmllcn0gOiB7fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLCB7aGVhZGVyczogUkVRVUVTVF9IRUFERVJ9KS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudG9rZW4gPSB7ZXJyb3I6ICdlcnJvcid9O1xuICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkRFTklFRDtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvblNlcnZpY2UuaHJlZiA9IGAke29yaWdpbn0vJHtuZXdQYXJhbWV0ZXJzU3RyaW5nfWA7XG4gICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS5zdWJzY3JpYmUodG9rZW4gPT4ge1xuICAgICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgICAgICAgICAgLy8gYXV0aG9yaXplZCBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciByZWRpcmVjdFxuICAgICAgICAgICAgdGhpcy5sb2NhdGlvblNlcnZpY2UuaHJlZiA9IGAke29yaWdpbn0vJHtuZXdQYXJhbWV0ZXJzU3RyaW5nfWA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gT0F1dGhTdGF0dXMuREVOSUVEO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2F2ZWRUb2tlbikge1xuICAgICAgY29uc3Qge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgZXJyb3J9ID0gc2F2ZWRUb2tlbjtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aGlzLnRva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBPQXV0aFN0YXR1cy5ERU5JRUQ7XG4gICAgICB9IGVsc2UgaWYgKGFjY2Vzc190b2tlbikge1xuICAgICAgICB0aGlzLnRva2VuID0gc2F2ZWRUb2tlbjtcbiAgICAgICAgaWYgKHJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gT0F1dGhTdGF0dXMuTk9UX0FVVEhPUklaRUQ7XG4gICAgfVxuICB9XG5cbiAgbG9naW4ocGFyYW1ldGVycz86IE9BdXRoUGFyYW1ldGVycykge1xuICAgIGlmICh0aGlzLmlzUmVzb3VyY2VUeXBlKHBhcmFtZXRlcnMgYXMgUmVzb3VyY2VQYXJhbWV0ZXJzKSkge1xuICAgICAgdGhpcy5yZXNvdXJjZUxvZ2luKHBhcmFtZXRlcnMgYXMgUmVzb3VyY2VQYXJhbWV0ZXJzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNBdXRob3JpemF0aW9uQ29kZVR5cGUocGFyYW1ldGVycyBhcyBBdXRob3JpemF0aW9uQ29kZVBhcmFtZXRlcnMpKSB7XG4gICAgICB0aGlzLmF1dGhvcml6YXRpb25Db2RlTG9naW4ocGFyYW1ldGVycyBhcyBBdXRob3JpemF0aW9uQ29kZVBhcmFtZXRlcnMpLnRoZW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbXBsaWNpdFR5cGUocGFyYW1ldGVycyBhcyBJbXBsaWNpdFBhcmFtZXRlcnMpKSB7XG4gICAgICB0aGlzLmltcGxpY2l0TG9naW4ocGFyYW1ldGVycyBhcyBJbXBsaWNpdFBhcmFtZXRlcnMpLnRoZW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDbGllbnRDcmVkZW50aWFsVHlwZSgpKSB7XG4gICAgICB0aGlzLmNsaWVudENyZWRlbnRpYWxMb2dpbigpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ291dCgpIHtcbiAgICB0aGlzLnJldm9rZSgpO1xuICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgIHRoaXMuc3RhdHVzID0gT0F1dGhTdGF0dXMuTk9UX0FVVEhPUklaRUQ7XG4gIH1cblxuICByZXZva2UoKSB7XG4gICAgY29uc3Qge3Jldm9rZVBhdGgsIGNsaWVudElkLCBjbGllbnRTZWNyZXR9ID0gdGhpcy5hdXRoQ29uZmlnLmNvbmZpZyBhcyBhbnk7XG4gICAgaWYgKHJldm9rZVBhdGgpIHtcbiAgICAgIGNvbnN0IHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW59ID0gdGhpcy50b2tlbiBhcyBPQXV0aFRva2VuO1xuICAgICAgY29uc3QgdG9SZXZva2UgPSBbXTtcbiAgICAgIGlmIChhY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgdG9SZXZva2UucHVzaCh7XG4gICAgICAgICAgLi4uY2xpZW50SWQgPyB7Y2xpZW50X2lkOiBjbGllbnRJZH0gOiB7fSxcbiAgICAgICAgICAuLi5jbGllbnRTZWNyZXQgPyB7Y2xpZW50X3NlY3JldDogY2xpZW50U2VjcmV0fSA6IHt9LFxuICAgICAgICAgIHRva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgdG9rZW5fdHlwZV9oaW50OiAnYWNjZXNzX3Rva2VuJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgIHRvUmV2b2tlLnB1c2goe1xuICAgICAgICAgIC4uLmNsaWVudElkID8ge2NsaWVudF9pZDogY2xpZW50SWR9IDoge30sXG4gICAgICAgICAgLi4uY2xpZW50U2VjcmV0ID8ge2NsaWVudF9zZWNyZXQ6IGNsaWVudFNlY3JldH0gOiB7fSxcbiAgICAgICAgICB0b2tlbjogcmVmcmVzaF90b2tlbixcbiAgICAgICAgICB0b2tlbl90eXBlX2hpbnQ6ICdyZWZyZXNoX3Rva2VuJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZyb20odG9SZXZva2UpLnBpcGUoXG4gICAgICAgIGNvbmNhdE1hcChvID0+IG9mKG8pLnBpcGUoZGVsYXkoMzAwKSkpLCAvLyBzcGFjZSByZXF1ZXN0IHRvIGF2b2lkIGNhbmNlbGxhdGlvblxuICAgICAgICBzd2l0Y2hNYXAobyA9PiB0aGlzLmh0dHAucG9zdChyZXZva2VQYXRoLCBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogb30pKSksXG4gICAgICApLnN1YnNjcmliZShub29wKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc3RhdHVzKCk6IE9BdXRoU3RhdHVzIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICB9XG5cbiAgc2V0IHN0YXR1cyhzdGF0dXMpIHtcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXM7XG4gICAgdGhpcy5zdGF0dXMkLm5leHQoc3RhdHVzKTtcbiAgfVxuXG4gIHNldCh0eXBlOiBPQXV0aFR5cGUsIGNvbmZpZz86IE9BdXRoVHlwZUNvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuYXV0aENvbmZpZy50eXBlID0gdHlwZTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmF1dGhDb25maWcuY29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLmF1dGhDb25maWcuY29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZ2V0IHR5cGUoKTogT0F1dGhUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoQ29uZmlnLnR5cGU7XG4gIH1cblxuICBnZXQgaWdub3JlUGF0aHMoKTogUmVnRXhwW10ge1xuICAgIHJldHVybiB0aGlzLmF1dGhDb25maWcuaWdub3JlUGF0aHMgfHwgW107XG4gIH1cblxuICBwcml2YXRlIHJlc291cmNlTG9naW4ocGFyYW1ldGVyczogUmVzb3VyY2VQYXJhbWV0ZXJzKSB7XG4gICAgY29uc3Qge2NsaWVudElkLCBjbGllbnRTZWNyZXQsIHRva2VuUGF0aCwgc2NvcGV9ID0gdGhpcy5hdXRoQ29uZmlnLmNvbmZpZyBhcyBhbnk7XG4gICAgY29uc3Qge3VzZXJuYW1lLCBwYXNzd29yZH0gPSBwYXJhbWV0ZXJzO1xuICAgIHRoaXMuaHR0cC5wb3N0KHRva2VuUGF0aCwgbmV3IEh0dHBQYXJhbXMoe1xuICAgICAgZnJvbU9iamVjdDoge1xuICAgICAgICBjbGllbnRfaWQ6IGNsaWVudElkLFxuICAgICAgICBjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXQsXG4gICAgICAgIGdyYW50X3R5cGU6IE9BdXRoVHlwZS5SRVNPVVJDRSxcbiAgICAgICAgLi4uc2NvcGUgPyB7c2NvcGV9IDoge30sXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBwYXNzd29yZFxuICAgICAgfVxuICAgIH0pLCB7aGVhZGVyczogUkVRVUVTVF9IRUFERVJ9KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkRFTklFRDtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSlcbiAgICApLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgdGhpcy50b2tlbiA9IHBhcmFtcztcbiAgICAgIHRoaXMuc3RhdHVzID0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXV0aG9yaXphdGlvbkNvZGVMb2dpbihwYXJhbWV0ZXJzOiBBdXRob3JpemF0aW9uQ29kZVBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBhdXRoVXJsID0gYXdhaXQgdGhpcy50b0F1dGhvcml6YXRpb25VcmwocGFyYW1ldGVycywgT0F1dGhUeXBlLkFVVEhPUklaQVRJT05fQ09ERSk7XG4gICAgdGhpcy5sb2NhdGlvblNlcnZpY2UucmVwbGFjZShhdXRoVXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW1wbGljaXRMb2dpbihwYXJhbWV0ZXJzOiBJbXBsaWNpdFBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBhdXRoVXJsID0gYXdhaXQgdGhpcy50b0F1dGhvcml6YXRpb25VcmwocGFyYW1ldGVycywgT0F1dGhUeXBlLklNUExJQ0lUKTtcbiAgICB0aGlzLmxvY2F0aW9uU2VydmljZS5yZXBsYWNlKGF1dGhVcmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGllbnRDcmVkZW50aWFsTG9naW4oKSB7XG4gICAgY29uc3Qge2NsaWVudElkLCBjbGllbnRTZWNyZXQsIHRva2VuUGF0aCwgc2NvcGV9ID0gdGhpcy5hdXRoQ29uZmlnLmNvbmZpZyBhcyBhbnk7XG4gICAgdGhpcy5odHRwLnBvc3QodG9rZW5QYXRoLCBuZXcgSHR0cFBhcmFtcyh7XG4gICAgICBmcm9tT2JqZWN0OiB7XG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50SWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IGNsaWVudFNlY3JldCxcbiAgICAgICAgZ3JhbnRfdHlwZTogT0F1dGhUeXBlLkNMSUVOVF9DUkVERU5USUFMLFxuICAgICAgICAuLi5zY29wZSA/IHtzY29wZX0gOiB7fSxcbiAgICAgIH1cbiAgICB9KSwge2hlYWRlcnM6IFJFUVVFU1RfSEVBREVSfSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICB0aGlzLnRva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBPQXV0aFN0YXR1cy5ERU5JRUQ7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHRoaXMudG9rZW4gPSBwYXJhbXM7XG4gICAgICB0aGlzLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkFVVEhPUklaRUQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzQ2xpZW50Q3JlZGVudGlhbFR5cGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aENvbmZpZy50eXBlID09PSBPQXV0aFR5cGUuQ0xJRU5UX0NSRURFTlRJQUw7XG4gIH1cblxuICBwcml2YXRlIGlzUmVzb3VyY2VUeXBlKHBhcmFtZXRlcnM/OiBSZXNvdXJjZVBhcmFtZXRlcnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoQ29uZmlnLnR5cGUgPT09IE9BdXRoVHlwZS5SRVNPVVJDRSAmJiAhIXBhcmFtZXRlcnM/LnBhc3N3b3JkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ltcGxpY2l0VHlwZShwYXJhbWV0ZXJzPzogSW1wbGljaXRQYXJhbWV0ZXJzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aENvbmZpZy50eXBlID09PSBPQXV0aFR5cGUuSU1QTElDSVQgJiYgISFwYXJhbWV0ZXJzPy5yZWRpcmVjdFVyaTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBdXRob3JpemF0aW9uQ29kZVR5cGUocGFyYW1ldGVycz86IEF1dGhvcml6YXRpb25Db2RlUGFyYW1ldGVycyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dGhDb25maWcudHlwZSA9PT0gT0F1dGhUeXBlLkFVVEhPUklaQVRJT05fQ09ERSAmJiAhIXBhcmFtZXRlcnM/LnJlZGlyZWN0VXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0b0F1dGhvcml6YXRpb25VcmwocGFyYW1ldGVyczogQXV0aG9yaXphdGlvbkNvZGVQYXJhbWV0ZXJzIHwgSW1wbGljaXRQYXJhbWV0ZXJzLCByZXNwb25zZVR5cGU6IE9BdXRoVHlwZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0aGlzLmF1dGhDb25maWcgYXMgYW55O1xuICAgIGNvbnN0IGFwcGVuZENoYXIgPSBjb25maWcuYXV0aG9yaXplUGF0aC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xuICAgIGNvbnN0IGNsaWVudElkID0gYCR7YXBwZW5kQ2hhcn1jbGllbnRfaWQ9JHtjb25maWcuY2xpZW50SWR9YDtcbiAgICBjb25zdCByZWRpcmVjdFVyaSA9IGAmcmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnMucmVkaXJlY3RVcmkpfWA7XG4gICAgY29uc3QgcmVzcG9uc2VUeXBlU3RyaW5nID0gYCZyZXNwb25zZV90eXBlPSR7cmVzcG9uc2VUeXBlfWA7XG4gICAgY29uc3Qgc2NvcGUgPSBgJnNjb3BlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5zY29wZSB8fCAnJyl9YDtcbiAgICBjb25zdCBzdGF0ZSA9IGAmc3RhdGU9JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVycy5zdGF0ZSB8fCAnJyl9YDtcbiAgICBjb25zdCB7Y29kZVZlcmlmaWVyfSA9IGNvbmZpZztcbiAgICBjb25zdCBjb2RlQ2hhbGxlbmdlID0gY29kZVZlcmlmaWVyID8gYCZjb2RlX2NoYWxsZW5nZT0ke2F3YWl0IHBrY2UoY29kZVZlcmlmaWVyKX0mY29kZV9jaGFsbGVuZ2VfbWV0aG9kPVMyNTZgIDogJyc7XG4gICAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IGAke2NsaWVudElkfSR7cmVkaXJlY3RVcml9JHtyZXNwb25zZVR5cGVTdHJpbmd9JHtzY29wZX0ke3N0YXRlfSR7Y29kZUNoYWxsZW5nZX1gO1xuICAgIHJldHVybiBgJHtjb25maWcuYXV0aG9yaXplUGF0aH0ke3BhcmFtZXRlcnNTdHJpbmd9YDtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogT0F1dGhUb2tlbiB8IG51bGwpIHtcbiAgICB0aGlzLl90b2tlbiA9IHRva2VuO1xuICAgIGNvbnN0IHtzdG9yYWdlS2V5fSA9IHRoaXMuYXV0aENvbmZpZztcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuYXV0aENvbmZpZy5zdG9yYWdlW3N0b3JhZ2VLZXldID0gSlNPTi5zdHJpbmdpZnkodGhpcy50b2tlbik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICBpZiAodGhpcy50b2tlbiAmJiB0aGlzLnRva2VuLmV4cGlyZXNfaW4pIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIE51bWJlcih0aGlzLnRva2VuPy5leHBpcmVzX2luKSAqIDEwMDApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZGVsZXRlIHRoaXMuYXV0aENvbmZpZy5zdG9yYWdlW3N0b3JhZ2VLZXldO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW47XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hUb2tlbigpIHtcbiAgICBjb25zdCB7dG9rZW5QYXRoLCBjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBzY29wZX0gPSB0aGlzLmF1dGhDb25maWcuY29uZmlnIGFzIGFueTtcbiAgICBjb25zdCB7cmVmcmVzaF90b2tlbn0gPSB0aGlzLnRva2VuIGFzIE9BdXRoVG9rZW47XG4gICAgaWYgKHRva2VuUGF0aCAmJiByZWZyZXNoX3Rva2VuKSB7XG4gICAgICB0aGlzLmh0dHAucG9zdCh0b2tlblBhdGgsIG5ldyBIdHRwUGFyYW1zKHtcbiAgICAgICAgZnJvbU9iamVjdDoge1xuICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50SWQsXG4gICAgICAgICAgY2xpZW50X3NlY3JldDogY2xpZW50U2VjcmV0LFxuICAgICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICByZWZyZXNoX3Rva2VuLFxuICAgICAgICAgIC4uLnNjb3BlID8ge3Njb3BlfSA6IHt9LFxuICAgICAgICB9XG4gICAgICB9KSwge2hlYWRlcnM6IFJFUVVFU1RfSEVBREVSfSkucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICB0aGlzLnRva2VuID0ge1xuICAgICAgICAgIC4uLnRoaXMudG9rZW4sXG4gICAgICAgICAgLi4ucGFyYW1zXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc3RhdHVzID0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xlYW5lZFVuU2VhcmNoUGFyYW1ldGVycygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHtzZWFyY2h9ID0gdGhpcy5sb2NhdGlvblNlcnZpY2U7XG4gICAgbGV0IHNlYXJjaFN0cmluZyA9IHNlYXJjaC5zdWJzdHIoMSk7XG4gICAgY29uc3QgaGFzaEtleXMgPSBbJ2NvZGUnLCAnc3RhdGUnLCAnZXJyb3InLCAnZXJyb3JfZGVzY3JpcHRpb24nLCAnc2Vzc2lvbl9zdGF0ZSddO1xuICAgIGhhc2hLZXlzLmZvckVhY2goKGhhc2hLZXkpID0+IHtcbiAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCgnJicgKyBoYXNoS2V5ICsgJyg9W14mXSopP3xeJyArIGhhc2hLZXkgKyAnKD1bXiZdKik/Jj8nKTtcbiAgICAgIHNlYXJjaFN0cmluZyA9IHNlYXJjaFN0cmluZy5yZXBsYWNlKHJlLCAnJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlYXJjaFN0cmluZy5sZW5ndGggPyBgPyR7c2VhcmNoU3RyaW5nfWAgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5Mb2NhdGlvbkhhc2goKSB7XG4gICAgY29uc3Qge2hhc2h9ID0gdGhpcy5sb2NhdGlvblNlcnZpY2U7XG4gICAgbGV0IGN1ckhhc2ggPSBoYXNoLnN1YnN0cigxKTtcbiAgICBjb25zdCBoYXNoS2V5cyA9IFsnYWNjZXNzX3Rva2VuJywgJ3Rva2VuX3R5cGUnLCAnZXhwaXJlc19pbicsICdzY29wZScsICdzdGF0ZScsICdlcnJvcicsICdlcnJvcl9kZXNjcmlwdGlvbicsICdzZXNzaW9uX3N0YXRlJ107XG4gICAgaGFzaEtleXMuZm9yRWFjaCgoaGFzaEtleSkgPT4ge1xuICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKCcmJyArIGhhc2hLZXkgKyAnKD1bXiZdKik/fF4nICsgaGFzaEtleSArICcoPVteJl0qKT8mPycpO1xuICAgICAgY3VySGFzaCA9IGN1ckhhc2gucmVwbGFjZShyZSwgJycpO1xuICAgIH0pO1xuICAgIHRoaXMubG9jYXRpb25TZXJ2aWNlLmhhc2ggPSBjdXJIYXNoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3RhdGUocGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGwpIHtcbiAgICBjb25zdCB7c3RhdGV9ID0gcGFyYW1ldGVycyBhcyBhbnk7XG4gICAgaWYgKHN0YXRlKSB7XG4gICAgICB0aGlzLnN0YXRlJC5uZXh0KHN0YXRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vYXV0aC9zcmMvbGliL3NlcnZpY2VzL29hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUdMLFFBQVEsRUFDUixZQUFZLEVBR1osV0FBVyxFQUVYLFNBQVMsRUFHVixNQUFNLFdBQVcsQ0FBQztBQUVuQixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztLQUN6QyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztLQUNuQixPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztLQUNuQixPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDOztBQUVyQixNQUFNLElBQUksR0FBRyxDQUFPLEtBQWEsRUFBRSxFQUFFO0lBQ25DLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsT0FBTyxTQUFTLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFB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QXVEbkIsTUFBTSxTQUFDLFlBQVk7WUFDdUIsUUFBUSx1QkFBbEQsTUFBTSxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgTmdab25lfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgY29uY2F0TWFwLCBkZWxheSwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VNUFRZLCBmcm9tLCBub29wLCBvZiwgUmVwbGF5U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBdXRob3JpemF0aW9uQ29kZVBhcmFtZXRlcnMsXG4gIEltcGxpY2l0UGFyYW1ldGVycyxcbiAgTE9DQVRJT04sXG4gIE9BVVRIX0NPTkZJRyxcbiAgT0F1dGhDb25maWcsXG4gIE9BdXRoUGFyYW1ldGVycyxcbiAgT0F1dGhTdGF0dXMsXG4gIE9BdXRoVG9rZW4sXG4gIE9BdXRoVHlwZSxcbiAgT0F1dGhUeXBlQ29uZmlnLFxuICBSZXNvdXJjZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vbW9kZWxzJztcblxuY29uc3QgYmFzZTY0dXJsID0gKHN0cjogc3RyaW5nKSA9PiBidG9hKHN0cilcbiAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAucmVwbGFjZSgvPS9nLCAnJyk7XG5cbmNvbnN0IHBrY2UgPSBhc3luYyAodmFsdWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBidWZmID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKTtcbiAgcmV0dXJuIGJhc2U2NHVybChuZXcgVWludDhBcnJheShidWZmKS5yZWR1Y2UoKHMsIGIpID0+IHMgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpLCAnJykpO1xufTtcblxuY29uc3QgUkVRVUVTVF9IRUFERVIgPSBuZXcgSHR0cEhlYWRlcnMoeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30pO1xuXG5jb25zdCBwYXJzZU9hdXRoVXJpID0gKGhhc2g6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBudWxsID0+IHtcbiAgY29uc3QgcmVnZXggPSAvKFteJj1dKyk9KFteJl0qKS9nO1xuICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgbGV0IG07XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25kaXRpb25hbC1hc3NpZ25tZW50XG4gIHdoaWxlICgobSA9IHJlZ2V4LmV4ZWMoaGFzaCkpICE9PSBudWxsKSB7XG4gICAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChtWzFdKV0gPSBkZWNvZGVVUklDb21wb25lbnQobVsyXSk7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPQXV0aFNlcnZpY2Uge1xuXG4gIHByaXZhdGUgX3Rva2VuOiBPQXV0aFRva2VuIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3N0YXR1cyA9IE9BdXRoU3RhdHVzLk5PVF9BVVRIT1JJWkVEO1xuICBwcml2YXRlIHRpbWVyOiBhbnk7XG4gIHN0YXRlJDogUmVwbGF5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gIHN0YXR1cyQ6IFJlcGxheVN1YmplY3Q8T0F1dGhTdGF0dXM+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgICAgICAgQEluamVjdChPQVVUSF9DT05GSUcpIHByaXZhdGUgYXV0aENvbmZpZzogT0F1dGhDb25maWcsXG4gICAgICAgICAgICAgIEBJbmplY3QoTE9DQVRJT04pIHByaXZhdGUgbG9jYXRpb25TZXJ2aWNlOiBMb2NhdGlvbikge1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXQoKTogdm9pZCB7XG4gICAgY29uc3Qge2hhc2gsIHNlYXJjaCwgb3JpZ2luLCBwYXRobmFtZX0gPSB0aGlzLmxvY2F0aW9uU2VydmljZTtcbiAgICBjb25zdCBpc0ltcGxpY2l0UmVkaXJlY3QgPSBoYXNoICYmIG5ldyBSZWdFeHAoJygjYWNjZXNzX3Rva2VuPSl8KCNlcnJvcj0pJykudGVzdChoYXNoKTtcbiAgICBjb25zdCBpc0F1dGhDb2RlUmVkaXJlY3QgPSBzZWFyY2ggJiYgbmV3IFJlZ0V4cCgnKGNvZGU9KXwoZXJyb3I9KScpLnRlc3Qoc2VhcmNoKTtcbiAgICBjb25zdCB7c3RvcmFnZUtleX0gPSB0aGlzLmF1dGhDb25maWc7XG4gICAgY29uc3Qgc2F2ZWRUb2tlbiA9IHN0b3JhZ2VLZXkgJiYgdGhpcy5hdXRoQ29uZmlnLnN0b3JhZ2UgJiYgdGhpcy5hdXRoQ29uZmlnLnN0b3JhZ2Vbc3RvcmFnZUtleV0gJiZcbiAgICAgIEpTT04ucGFyc2UodGhpcy5hdXRoQ29uZmlnLnN0b3JhZ2Vbc3RvcmFnZUtleV0pO1xuICAgIGlmIChpc0ltcGxpY2l0UmVkaXJlY3QpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJzZU9hdXRoVXJpKGhhc2guc3Vic3RyKDEpKTtcbiAgICAgIHRoaXMuZW1pdFN0YXRlKHBhcmFtZXRlcnMpO1xuICAgICAgdGhpcy5jbGVhbkxvY2F0aW9uSGFzaCgpO1xuICAgICAgaWYgKCFwYXJhbWV0ZXJzIHx8IHBhcmFtZXRlcnMuZXJyb3IpIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gT0F1dGhTdGF0dXMuREVOSUVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHBhcmFtZXRlcnM7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQXV0aENvZGVSZWRpcmVjdCkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHBhcnNlT2F1dGhVcmkoc2VhcmNoLnN1YnN0cigxKSk7XG4gICAgICB0aGlzLmVtaXRTdGF0ZShwYXJhbWV0ZXJzKTtcbiAgICAgIGNvbnN0IG5ld1BhcmFtZXRlcnNTdHJpbmcgPSB0aGlzLmdldENsZWFuZWRVblNlYXJjaFBhcmFtZXRlcnMoKTtcbiAgICAgIGlmIChwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMuY29kZSkge1xuICAgICAgICBjb25zdCB7Y2xpZW50SWQsIGNsaWVudFNlY3JldCwgdG9rZW5QYXRoLCBzY29wZSwgY29kZVZlcmlmaWVyfSA9IHRoaXMuYXV0aENvbmZpZy5jb25maWcgYXMgYW55O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmh0dHAucG9zdCh0b2tlblBhdGgsIG5ldyBIdHRwUGFyYW1zKHtcbiAgICAgICAgICAgIGZyb21PYmplY3Q6IHtcbiAgICAgICAgICAgICAgY29kZTogcGFyYW1ldGVycy5jb2RlLFxuICAgICAgICAgICAgICBjbGllbnRfaWQ6IGNsaWVudElkLFxuICAgICAgICAgICAgICBjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXQsXG4gICAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogYCR7b3JpZ2lufSR7cGF0aG5hbWV9JHtuZXdQYXJhbWV0ZXJzU3RyaW5nfWAsXG4gICAgICAgICAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICAgICAgICAuLi5zY29wZSA/IHtzY29wZX0gOiB7fSxcbiAgICAgICAgICAgICAgLi4uY29kZVZlcmlmaWVyID8ge2NvZGVfdmVyaWZpZXI6IGNvZGVWZXJpZmllcn0gOiB7fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLCB7aGVhZGVyczogUkVRVUVTVF9IRUFERVJ9KS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudG9rZW4gPSB7ZXJyb3I6ICdlcnJvcid9O1xuICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkRFTklFRDtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvblNlcnZpY2UuaHJlZiA9IGAke29yaWdpbn0ke3BhdGhuYW1lfSR7bmV3UGFyYW1ldGVyc1N0cmluZ31gO1xuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkuc3Vic2NyaWJlKHRva2VuID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgIC8vIGF1dGhvcml6ZWQgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYWZ0ZXIgcmVkaXJlY3RcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25TZXJ2aWNlLmhyZWYgPSBgJHtvcmlnaW59JHtwYXRobmFtZX0ke25ld1BhcmFtZXRlcnNTdHJpbmd9YDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBPQXV0aFN0YXR1cy5ERU5JRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzYXZlZFRva2VuKSB7XG4gICAgICBjb25zdCB7YWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCBlcnJvcn0gPSBzYXZlZFRva2VuO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkRFTklFRDtcbiAgICAgIH0gZWxzZSBpZiAoYWNjZXNzX3Rva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBzYXZlZFRva2VuO1xuICAgICAgICBpZiAocmVmcmVzaF90b2tlbikge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkFVVEhPUklaRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0dXMgPSBPQXV0aFN0YXR1cy5OT1RfQVVUSE9SSVpFRDtcbiAgICB9XG4gIH1cblxuICBsb2dpbihwYXJhbWV0ZXJzPzogT0F1dGhQYXJhbWV0ZXJzKSB7XG4gICAgaWYgKHRoaXMuaXNSZXNvdXJjZVR5cGUocGFyYW1ldGVycyBhcyBSZXNvdXJjZVBhcmFtZXRlcnMpKSB7XG4gICAgICB0aGlzLnJlc291cmNlTG9naW4ocGFyYW1ldGVycyBhcyBSZXNvdXJjZVBhcmFtZXRlcnMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0F1dGhvcml6YXRpb25Db2RlVHlwZShwYXJhbWV0ZXJzIGFzIEF1dGhvcml6YXRpb25Db2RlUGFyYW1ldGVycykpIHtcbiAgICAgIHRoaXMuYXV0aG9yaXphdGlvbkNvZGVMb2dpbihwYXJhbWV0ZXJzIGFzIEF1dGhvcml6YXRpb25Db2RlUGFyYW1ldGVycykudGhlbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0ltcGxpY2l0VHlwZShwYXJhbWV0ZXJzIGFzIEltcGxpY2l0UGFyYW1ldGVycykpIHtcbiAgICAgIHRoaXMuaW1wbGljaXRMb2dpbihwYXJhbWV0ZXJzIGFzIEltcGxpY2l0UGFyYW1ldGVycykudGhlbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NsaWVudENyZWRlbnRpYWxUeXBlKCkpIHtcbiAgICAgIHRoaXMuY2xpZW50Q3JlZGVudGlhbExvZ2luKCk7XG4gICAgfVxuICB9XG5cbiAgbG9nb3V0KCkge1xuICAgIHRoaXMucmV2b2tlKCk7XG4gICAgdGhpcy50b2tlbiA9IG51bGw7XG4gICAgdGhpcy5zdGF0dXMgPSBPQXV0aFN0YXR1cy5OT1RfQVVUSE9SSVpFRDtcbiAgfVxuXG4gIHJldm9rZSgpIHtcbiAgICBjb25zdCB7cmV2b2tlUGF0aCwgY2xpZW50SWQsIGNsaWVudFNlY3JldH0gPSB0aGlzLmF1dGhDb25maWcuY29uZmlnIGFzIGFueTtcbiAgICBpZiAocmV2b2tlUGF0aCkge1xuICAgICAgY29uc3Qge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbn0gPSB0aGlzLnRva2VuIGFzIE9BdXRoVG9rZW47XG4gICAgICBjb25zdCB0b1Jldm9rZSA9IFtdO1xuICAgICAgaWYgKGFjY2Vzc190b2tlbikge1xuICAgICAgICB0b1Jldm9rZS5wdXNoKHtcbiAgICAgICAgICAuLi5jbGllbnRJZCA/IHtjbGllbnRfaWQ6IGNsaWVudElkfSA6IHt9LFxuICAgICAgICAgIC4uLmNsaWVudFNlY3JldCA/IHtjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXR9IDoge30sXG4gICAgICAgICAgdG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICB0b2tlbl90eXBlX2hpbnQ6ICdhY2Nlc3NfdG9rZW4nXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgdG9SZXZva2UucHVzaCh7XG4gICAgICAgICAgLi4uY2xpZW50SWQgPyB7Y2xpZW50X2lkOiBjbGllbnRJZH0gOiB7fSxcbiAgICAgICAgICAuLi5jbGllbnRTZWNyZXQgPyB7Y2xpZW50X3NlY3JldDogY2xpZW50U2VjcmV0fSA6IHt9LFxuICAgICAgICAgIHRva2VuOiByZWZyZXNoX3Rva2VuLFxuICAgICAgICAgIHRva2VuX3R5cGVfaGludDogJ3JlZnJlc2hfdG9rZW4nXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnJvbSh0b1Jldm9rZSkucGlwZShcbiAgICAgICAgY29uY2F0TWFwKG8gPT4gb2YobykucGlwZShkZWxheSgzMDApKSksIC8vIHNwYWNlIHJlcXVlc3QgdG8gYXZvaWQgY2FuY2VsbGF0aW9uXG4gICAgICAgIHN3aXRjaE1hcChvID0+IHRoaXMuaHR0cC5wb3N0KHJldm9rZVBhdGgsIG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBvfSkpKSxcbiAgICAgICkuc3Vic2NyaWJlKG5vb3ApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzdGF0dXMoKTogT0F1dGhTdGF0dXMge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XG4gIH1cblxuICBzZXQgc3RhdHVzKHN0YXR1cykge1xuICAgIHRoaXMuX3N0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLnN0YXR1cyQubmV4dChzdGF0dXMpO1xuICB9XG5cbiAgc2V0KHR5cGU6IE9BdXRoVHlwZSwgY29uZmlnPzogT0F1dGhUeXBlQ29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5hdXRoQ29uZmlnLnR5cGUgPSB0eXBlO1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuYXV0aENvbmZpZy5jb25maWcgPSB7XG4gICAgICAgIC4uLnRoaXMuYXV0aENvbmZpZy5jb25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZSgpOiBPQXV0aFR5cGUge1xuICAgIHJldHVybiB0aGlzLmF1dGhDb25maWcudHlwZTtcbiAgfVxuXG4gIGdldCBpZ25vcmVQYXRocygpOiBSZWdFeHBbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aENvbmZpZy5pZ25vcmVQYXRocyB8fCBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb3VyY2VMb2dpbihwYXJhbWV0ZXJzOiBSZXNvdXJjZVBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCB7Y2xpZW50SWQsIGNsaWVudFNlY3JldCwgdG9rZW5QYXRoLCBzY29wZX0gPSB0aGlzLmF1dGhDb25maWcuY29uZmlnIGFzIGFueTtcbiAgICBjb25zdCB7dXNlcm5hbWUsIHBhc3N3b3JkfSA9IHBhcmFtZXRlcnM7XG4gICAgdGhpcy5odHRwLnBvc3QodG9rZW5QYXRoLCBuZXcgSHR0cFBhcmFtcyh7XG4gICAgICBmcm9tT2JqZWN0OiB7XG4gICAgICAgIGNsaWVudF9pZDogY2xpZW50SWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IGNsaWVudFNlY3JldCxcbiAgICAgICAgZ3JhbnRfdHlwZTogT0F1dGhUeXBlLlJFU09VUkNFLFxuICAgICAgICAuLi5zY29wZSA/IHtzY29wZX0gOiB7fSxcbiAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkXG4gICAgICB9XG4gICAgfSksIHtoZWFkZXJzOiBSRVFVRVNUX0hFQURFUn0pLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgdGhpcy50b2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gT0F1dGhTdGF0dXMuREVOSUVEO1xuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICB0aGlzLnRva2VuID0gcGFyYW1zO1xuICAgICAgdGhpcy5zdGF0dXMgPSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhdXRob3JpemF0aW9uQ29kZUxvZ2luKHBhcmFtZXRlcnM6IEF1dGhvcml6YXRpb25Db2RlUGFyYW1ldGVycykge1xuICAgIGNvbnN0IGF1dGhVcmwgPSBhd2FpdCB0aGlzLnRvQXV0aG9yaXphdGlvblVybChwYXJhbWV0ZXJzLCBPQXV0aFR5cGUuQVVUSE9SSVpBVElPTl9DT0RFKTtcbiAgICB0aGlzLmxvY2F0aW9uU2VydmljZS5yZXBsYWNlKGF1dGhVcmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbXBsaWNpdExvZ2luKHBhcmFtZXRlcnM6IEltcGxpY2l0UGFyYW1ldGVycykge1xuICAgIGNvbnN0IGF1dGhVcmwgPSBhd2FpdCB0aGlzLnRvQXV0aG9yaXphdGlvblVybChwYXJhbWV0ZXJzLCBPQXV0aFR5cGUuSU1QTElDSVQpO1xuICAgIHRoaXMubG9jYXRpb25TZXJ2aWNlLnJlcGxhY2UoYXV0aFVybCk7XG4gIH1cblxuICBwcml2YXRlIGNsaWVudENyZWRlbnRpYWxMb2dpbigpIHtcbiAgICBjb25zdCB7Y2xpZW50SWQsIGNsaWVudFNlY3JldCwgdG9rZW5QYXRoLCBzY29wZX0gPSB0aGlzLmF1dGhDb25maWcuY29uZmlnIGFzIGFueTtcbiAgICB0aGlzLmh0dHAucG9zdCh0b2tlblBhdGgsIG5ldyBIdHRwUGFyYW1zKHtcbiAgICAgIGZyb21PYmplY3Q6IHtcbiAgICAgICAgY2xpZW50X2lkOiBjbGllbnRJZCxcbiAgICAgICAgY2xpZW50X3NlY3JldDogY2xpZW50U2VjcmV0LFxuICAgICAgICBncmFudF90eXBlOiBPQXV0aFR5cGUuQ0xJRU5UX0NSRURFTlRJQUwsXG4gICAgICAgIC4uLnNjb3BlID8ge3Njb3BlfSA6IHt9LFxuICAgICAgfVxuICAgIH0pLCB7aGVhZGVyczogUkVRVUVTVF9IRUFERVJ9KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IE9BdXRoU3RhdHVzLkRFTklFRDtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSlcbiAgICApLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgdGhpcy50b2tlbiA9IHBhcmFtcztcbiAgICAgIHRoaXMuc3RhdHVzID0gT0F1dGhTdGF0dXMuQVVUSE9SSVpFRDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDbGllbnRDcmVkZW50aWFsVHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoQ29uZmlnLnR5cGUgPT09IE9BdXRoVHlwZS5DTElFTlRfQ1JFREVOVElBTDtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZXNvdXJjZVR5cGUocGFyYW1ldGVycz86IFJlc291cmNlUGFyYW1ldGVycyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dGhDb25maWcudHlwZSA9PT0gT0F1dGhUeXBlLlJFU09VUkNFICYmICEhcGFyYW1ldGVycz8ucGFzc3dvcmQ7XG4gIH1cblxuICBwcml2YXRlIGlzSW1wbGljaXRUeXBlKHBhcmFtZXRlcnM/OiBJbXBsaWNpdFBhcmFtZXRlcnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoQ29uZmlnLnR5cGUgPT09IE9BdXRoVHlwZS5JTVBMSUNJVCAmJiAhIXBhcmFtZXRlcnM/LnJlZGlyZWN0VXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0F1dGhvcml6YXRpb25Db2RlVHlwZShwYXJhbWV0ZXJzPzogQXV0aG9yaXphdGlvbkNvZGVQYXJhbWV0ZXJzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aENvbmZpZy50eXBlID09PSBPQXV0aFR5cGUuQVVUSE9SSVpBVElPTl9DT0RFICYmICEhcGFyYW1ldGVycz8ucmVkaXJlY3RVcmk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRvQXV0aG9yaXphdGlvblVybChwYXJhbWV0ZXJzOiBBdXRob3JpemF0aW9uQ29kZVBhcmFtZXRlcnMgfCBJbXBsaWNpdFBhcmFtZXRlcnMsIHJlc3BvbnNlVHlwZTogT0F1dGhUeXBlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRoaXMuYXV0aENvbmZpZyBhcyBhbnk7XG4gICAgY29uc3QgYXBwZW5kQ2hhciA9IGNvbmZpZy5hdXRob3JpemVQYXRoLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyc7XG4gICAgY29uc3QgY2xpZW50SWQgPSBgJHthcHBlbmRDaGFyfWNsaWVudF9pZD0ke2NvbmZpZy5jbGllbnRJZH1gO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gYCZyZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVycy5yZWRpcmVjdFVyaSl9YDtcbiAgICBjb25zdCByZXNwb25zZVR5cGVTdHJpbmcgPSBgJnJlc3BvbnNlX3R5cGU9JHtyZXNwb25zZVR5cGV9YDtcbiAgICBjb25zdCBzY29wZSA9IGAmc2NvcGU9JHtlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLnNjb3BlIHx8ICcnKX1gO1xuICAgIGNvbnN0IHN0YXRlID0gYCZzdGF0ZT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzLnN0YXRlIHx8ICcnKX1gO1xuICAgIGNvbnN0IHtjb2RlVmVyaWZpZXJ9ID0gY29uZmlnO1xuICAgIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSBjb2RlVmVyaWZpZXIgPyBgJmNvZGVfY2hhbGxlbmdlPSR7YXdhaXQgcGtjZShjb2RlVmVyaWZpZXIpfSZjb2RlX2NoYWxsZW5nZV9tZXRob2Q9UzI1NmAgOiAnJztcbiAgICBjb25zdCBwYXJhbWV0ZXJzU3RyaW5nID0gYCR7Y2xpZW50SWR9JHtyZWRpcmVjdFVyaX0ke3Jlc3BvbnNlVHlwZVN0cmluZ30ke3Njb3BlfSR7c3RhdGV9JHtjb2RlQ2hhbGxlbmdlfWA7XG4gICAgcmV0dXJuIGAke2NvbmZpZy5hdXRob3JpemVQYXRofSR7cGFyYW1ldGVyc1N0cmluZ31gO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBPQXV0aFRva2VuIHwgbnVsbCkge1xuICAgIHRoaXMuX3Rva2VuID0gdG9rZW47XG4gICAgY29uc3Qge3N0b3JhZ2VLZXl9ID0gdGhpcy5hdXRoQ29uZmlnO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5hdXRoQ29uZmlnLnN0b3JhZ2Vbc3RvcmFnZUtleV0gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnRva2VuKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgIGlmICh0aGlzLnRva2VuICYmIHRoaXMudG9rZW4uZXhwaXJlc19pbikge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgTnVtYmVyKHRoaXMudG9rZW4/LmV4cGlyZXNfaW4pICogMTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWxldGUgdGhpcy5hdXRoQ29uZmlnLnN0b3JhZ2Vbc3RvcmFnZUtleV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLl90b2tlbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFRva2VuKCkge1xuICAgIGNvbnN0IHt0b2tlblBhdGgsIGNsaWVudElkLCBjbGllbnRTZWNyZXQsIHNjb3BlfSA9IHRoaXMuYXV0aENvbmZpZy5jb25maWcgYXMgYW55O1xuICAgIGNvbnN0IHtyZWZyZXNoX3Rva2VufSA9IHRoaXMudG9rZW4gYXMgT0F1dGhUb2tlbjtcbiAgICBpZiAodG9rZW5QYXRoICYmIHJlZnJlc2hfdG9rZW4pIHtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KHRva2VuUGF0aCwgbmV3IEh0dHBQYXJhbXMoe1xuICAgICAgICBmcm9tT2JqZWN0OiB7XG4gICAgICAgICAgY2xpZW50X2lkOiBjbGllbnRJZCxcbiAgICAgICAgICBjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXQsXG4gICAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAgIHJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgLi4uc2NvcGUgPyB7c2NvcGV9IDoge30sXG4gICAgICAgIH1cbiAgICAgIH0pLCB7aGVhZGVyczogUkVRVUVTVF9IRUFERVJ9KS5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB7XG4gICAgICAgICAgLi4udGhpcy50b2tlbixcbiAgICAgICAgICAuLi5wYXJhbXNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBPQXV0aFN0YXR1cy5BVVRIT1JJWkVEO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGVhbmVkVW5TZWFyY2hQYXJhbWV0ZXJzKCk6IHN0cmluZyB7XG4gICAgY29uc3Qge3NlYXJjaH0gPSB0aGlzLmxvY2F0aW9uU2VydmljZTtcbiAgICBsZXQgc2VhcmNoU3RyaW5nID0gc2VhcmNoLnN1YnN0cigxKTtcbiAgICBjb25zdCBoYXNoS2V5cyA9IFsnY29kZScsICdzdGF0ZScsICdlcnJvcicsICdlcnJvcl9kZXNjcmlwdGlvbicsICdzZXNzaW9uX3N0YXRlJ107XG4gICAgaGFzaEtleXMuZm9yRWFjaCgoaGFzaEtleSkgPT4ge1xuICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKCcmJyArIGhhc2hLZXkgKyAnKD1bXiZdKik/fF4nICsgaGFzaEtleSArICcoPVteJl0qKT8mPycpO1xuICAgICAgc2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyaW5nLnJlcGxhY2UocmUsICcnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VhcmNoU3RyaW5nLmxlbmd0aCA/IGA/JHtzZWFyY2hTdHJpbmd9YCA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbkxvY2F0aW9uSGFzaCgpIHtcbiAgICBjb25zdCB7aGFzaH0gPSB0aGlzLmxvY2F0aW9uU2VydmljZTtcbiAgICBsZXQgY3VySGFzaCA9IGhhc2guc3Vic3RyKDEpO1xuICAgIGNvbnN0IGhhc2hLZXlzID0gWydhY2Nlc3NfdG9rZW4nLCAndG9rZW5fdHlwZScsICdleHBpcmVzX2luJywgJ3Njb3BlJywgJ3N0YXRlJywgJ2Vycm9yJywgJ2Vycm9yX2Rlc2NyaXB0aW9uJywgJ3Nlc3Npb25fc3RhdGUnXTtcbiAgICBoYXNoS2V5cy5mb3JFYWNoKChoYXNoS2V5KSA9PiB7XG4gICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoJyYnICsgaGFzaEtleSArICcoPVteJl0qKT98XicgKyBoYXNoS2V5ICsgJyg9W14mXSopPyY/Jyk7XG4gICAgICBjdXJIYXNoID0gY3VySGFzaC5yZXBsYWNlKHJlLCAnJyk7XG4gICAgfSk7XG4gICAgdGhpcy5sb2NhdGlvblNlcnZpY2UuaGFzaCA9IGN1ckhhc2g7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTdGF0ZShwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCkge1xuICAgIGNvbnN0IHtzdGF0ZX0gPSBwYXJhbWV0ZXJzIGFzIGFueTtcbiAgICBpZiAoc3RhdGUpIHtcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQoc3RhdGUpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -64,7 +64,7 @@ class OAuthService {
64
64
  this.init();
65
65
  }
66
66
  init() {
67
- const { hash, search, origin } = this.locationService;
67
+ const { hash, search, origin, pathname } = this.locationService;
68
68
  const isImplicitRedirect = hash && new RegExp('(#access_token=)|(#error=)').test(hash);
69
69
  const isAuthCodeRedirect = search && new RegExp('(code=)|(error=)').test(search);
70
70
  const { storageKey } = this.authConfig;
@@ -91,16 +91,16 @@ class OAuthService {
91
91
  const { clientId, clientSecret, tokenPath, scope, codeVerifier } = this.authConfig.config;
92
92
  setTimeout(() => {
93
93
  this.http.post(tokenPath, new HttpParams({
94
- fromObject: Object.assign(Object.assign({ code: parameters.code, client_id: clientId, client_secret: clientSecret, redirect_uri: `${origin}/${newParametersString}`, grant_type: 'authorization_code' }, scope ? { scope } : {}), codeVerifier ? { code_verifier: codeVerifier } : {})
94
+ fromObject: Object.assign(Object.assign({ code: parameters.code, client_id: clientId, client_secret: clientSecret, redirect_uri: `${origin}${pathname}${newParametersString}`, grant_type: 'authorization_code' }, scope ? { scope } : {}), codeVerifier ? { code_verifier: codeVerifier } : {})
95
95
  }), { headers: REQUEST_HEADER }).pipe(catchError(() => {
96
96
  this.token = { error: 'error' };
97
97
  this.status = OAuthStatus.DENIED;
98
- this.locationService.href = `${origin}/${newParametersString}`;
98
+ this.locationService.href = `${origin}${pathname}${newParametersString}`;
99
99
  return EMPTY;
100
100
  })).subscribe(token => {
101
101
  this.token = token;
102
102
  // authorized event will be triggered after redirect
103
- this.locationService.href = `${origin}/${newParametersString}`;
103
+ this.locationService.href = `${origin}${pathname}${newParametersString}`;
104
104
  });
105
105
  });
106
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-oauth.js","sources":["../../../projects/ngx-oauth/src/lib/models/index.ts","../../../projects/ngx-oauth/src/lib/services/oauth.service.ts","../../../projects/ngx-oauth/src/lib/services/oauth.interceptor.ts","../../../projects/ngx-oauth/src/lib/components/login/oauth-login.component.ts","../../../projects/ngx-oauth/src/lib/oauth.module.ts","../../../projects/ngx-oauth/src/index.ts","../../../projects/ngx-oauth/src/ngx-oauth.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const SERVER_HOST = new InjectionToken<string>('SERVER_HOST');\nexport const SERVER_PATH = new InjectionToken<string>('SERVER_PATH');\nexport const LOCATION = new InjectionToken<Location>('Location');\nexport const STORAGE = new InjectionToken<Storage>('Storage');\nexport const OAUTH_CONFIG = new InjectionToken<OAuthConfig>('OAuthConfig');\n\nexport enum OAuthType {\n RESOURCE = 'password',\n AUTHORIZATION_CODE = 'code',\n IMPLICIT = 'token',\n CLIENT_CREDENTIAL = 'client_credentials'\n}\n\nexport interface OAuthConfig {\n type: OAuthType;\n config: OAuthTypeConfig;\n storageKey?: string;\n storage?: Storage;\n ignorePaths?: RegExp[];\n}\n\nexport interface ClientCredentialConfig {\n tokenPath: string;\n revokePath?: string;\n clientId: string;\n clientSecret: string;\n scope?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface ResourceConfig extends ClientCredentialConfig {\n}\n\nexport interface ImplicitConfig {\n authorizePath: string;\n revokePath?: string;\n clientId: string;\n scope?: string;\n}\n\nexport interface AuthorizationCodeConfig extends ResourceConfig {\n authorizePath: string;\n}\n\nexport interface AuthorizationCodePKCEConfig extends AuthorizationCodeConfig {\n codeVerifier: string;\n}\n\nexport interface ResourceParameters {\n username: string;\n password: string;\n}\n\nexport interface ImplicitParameters {\n redirectUri: string;\n state?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface AuthorizationCodeParameters extends ImplicitParameters {\n}\n\nexport type OAuthParameters = ResourceParameters | AuthorizationCodeParameters | ImplicitParameters;\nexport type OAuthTypeConfig =\n AuthorizationCodePKCEConfig\n | AuthorizationCodeConfig\n | ImplicitConfig\n | ResourceConfig\n | ClientCredentialConfig;\n\nexport interface OAuthToken {\n id_token?: string;\n access_token?: string;\n refresh_token?: string;\n token_type?: string;\n state?: string;\n error?: string;\n expires_in?: number | string;\n refresh_expires_in?: number;\n scope?: string;\n}\n\nexport enum OAuthStatus {\n NOT_AUTHORIZED = 'NOT_AUTHORIZED',\n AUTHORIZED = 'AUTHORIZED',\n DENIED = 'DENIED'\n}\n","import {Inject, Injectable, NgZone} from '@angular/core';\nimport {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {catchError, concatMap, delay, switchMap} from 'rxjs/operators';\nimport {EMPTY, from, noop, of, ReplaySubject} from 'rxjs';\nimport {\n AuthorizationCodeParameters,\n ImplicitParameters,\n LOCATION,\n OAUTH_CONFIG,\n OAuthConfig,\n OAuthParameters,\n OAuthStatus,\n OAuthToken,\n OAuthType,\n OAuthTypeConfig,\n ResourceParameters\n} from '../models';\n\nconst base64url = (str: string) => btoa(str)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n\nconst pkce = async (value: string) => {\n const buff = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));\n return base64url(new Uint8Array(buff).reduce((s, b) => s + String.fromCharCode(b), ''));\n};\n\nconst REQUEST_HEADER = new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'});\n\nconst parseOauthUri = (hash: string): Record<string, string> | null => {\n const regex = /([^&=]+)=([^&]*)/g;\n const params: Record<string, string> = {};\n let m;\n // tslint:disable-next-line:no-conditional-assignment\n while ((m = regex.exec(hash)) !== null) {\n params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);\n }\n if (Object.keys(params).length) {\n return params;\n }\n return null;\n};\n\n@Injectable()\nexport class OAuthService {\n\n private _token: OAuthToken | null = null;\n private _status = OAuthStatus.NOT_AUTHORIZED;\n private timer: any;\n state$: ReplaySubject<string> = new ReplaySubject(1);\n status$: ReplaySubject<OAuthStatus> = new ReplaySubject(1);\n\n constructor(private http: HttpClient,\n private zone: NgZone,\n @Inject(OAUTH_CONFIG) private authConfig: OAuthConfig,\n @Inject(LOCATION) private locationService: Location) {\n this.init();\n }\n\n protected init(): void {\n const {hash, search, origin} = this.locationService;\n const isImplicitRedirect = hash && new RegExp('(#access_token=)|(#error=)').test(hash);\n const isAuthCodeRedirect = search && new RegExp('(code=)|(error=)').test(search);\n const {storageKey} = this.authConfig;\n const savedToken = storageKey && this.authConfig.storage && this.authConfig.storage[storageKey] &&\n JSON.parse(this.authConfig.storage[storageKey]);\n if (isImplicitRedirect) {\n const parameters = parseOauthUri(hash.substr(1));\n this.emitState(parameters);\n this.cleanLocationHash();\n if (!parameters || parameters.error) {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n } else {\n this.token = parameters;\n this.status = OAuthStatus.AUTHORIZED;\n }\n } else if (isAuthCodeRedirect) {\n const parameters = parseOauthUri(search.substr(1));\n this.emitState(parameters);\n const newParametersString = this.getCleanedUnSearchParameters();\n if (parameters && parameters.code) {\n const {clientId, clientSecret, tokenPath, scope, codeVerifier} = this.authConfig.config as any;\n setTimeout(() => {\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n code: parameters.code,\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: `${origin}/${newParametersString}`,\n grant_type: 'authorization_code',\n ...scope ? {scope} : {},\n ...codeVerifier ? {code_verifier: codeVerifier} : {}\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = {error: 'error'};\n this.status = OAuthStatus.DENIED;\n this.locationService.href = `${origin}/${newParametersString}`;\n return EMPTY;\n })\n ).subscribe(token => {\n this.token = token;\n // authorized event will be triggered after redirect\n this.locationService.href = `${origin}/${newParametersString}`;\n });\n });\n } else {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n }\n } else if (savedToken) {\n const {access_token, refresh_token, error} = savedToken;\n if (error) {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n } else if (access_token) {\n this.token = savedToken;\n if (refresh_token) {\n setTimeout(() => {\n this.refreshToken();\n });\n } else {\n this.status = OAuthStatus.AUTHORIZED;\n }\n }\n } else {\n this.status = OAuthStatus.NOT_AUTHORIZED;\n }\n }\n\n login(parameters?: OAuthParameters) {\n if (this.isResourceType(parameters as ResourceParameters)) {\n this.resourceLogin(parameters as ResourceParameters);\n } else if (this.isAuthorizationCodeType(parameters as AuthorizationCodeParameters)) {\n this.authorizationCodeLogin(parameters as AuthorizationCodeParameters).then();\n } else if (this.isImplicitType(parameters as ImplicitParameters)) {\n this.implicitLogin(parameters as ImplicitParameters).then();\n } else if (this.isClientCredentialType()) {\n this.clientCredentialLogin();\n }\n }\n\n logout() {\n this.revoke();\n this.token = null;\n this.status = OAuthStatus.NOT_AUTHORIZED;\n }\n\n revoke() {\n const {revokePath, clientId, clientSecret} = this.authConfig.config as any;\n if (revokePath) {\n const {access_token, refresh_token} = this.token as OAuthToken;\n const toRevoke = [];\n if (access_token) {\n toRevoke.push({\n ...clientId ? {client_id: clientId} : {},\n ...clientSecret ? {client_secret: clientSecret} : {},\n token: access_token,\n token_type_hint: 'access_token'\n });\n }\n if (refresh_token) {\n toRevoke.push({\n ...clientId ? {client_id: clientId} : {},\n ...clientSecret ? {client_secret: clientSecret} : {},\n token: refresh_token,\n token_type_hint: 'refresh_token'\n });\n }\n from(toRevoke).pipe(\n concatMap(o => of(o).pipe(delay(300))), // space request to avoid cancellation\n switchMap(o => this.http.post(revokePath, new HttpParams({fromObject: o}))),\n ).subscribe(noop);\n }\n }\n\n get status(): OAuthStatus {\n return this._status;\n }\n\n set status(status) {\n this._status = status;\n this.status$.next(status);\n }\n\n set(type: OAuthType, config?: OAuthTypeConfig): void {\n this.authConfig.type = type;\n if (config) {\n this.authConfig.config = {\n ...this.authConfig.config,\n ...config\n };\n }\n }\n\n get type(): OAuthType {\n return this.authConfig.type;\n }\n\n get ignorePaths(): RegExp[] {\n return this.authConfig.ignorePaths || [];\n }\n\n private resourceLogin(parameters: ResourceParameters) {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n const {username, password} = parameters;\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.RESOURCE,\n ...scope ? {scope} : {},\n username,\n password\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = params;\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n\n private async authorizationCodeLogin(parameters: AuthorizationCodeParameters) {\n const authUrl = await this.toAuthorizationUrl(parameters, OAuthType.AUTHORIZATION_CODE);\n this.locationService.replace(authUrl);\n }\n\n private async implicitLogin(parameters: ImplicitParameters) {\n const authUrl = await this.toAuthorizationUrl(parameters, OAuthType.IMPLICIT);\n this.locationService.replace(authUrl);\n }\n\n private clientCredentialLogin() {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.CLIENT_CREDENTIAL,\n ...scope ? {scope} : {},\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = params;\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n\n private isClientCredentialType(): boolean {\n return this.authConfig.type === OAuthType.CLIENT_CREDENTIAL;\n }\n\n private isResourceType(parameters?: ResourceParameters): boolean {\n return this.authConfig.type === OAuthType.RESOURCE && !!parameters?.password;\n }\n\n private isImplicitType(parameters?: ImplicitParameters): boolean {\n return this.authConfig.type === OAuthType.IMPLICIT && !!parameters?.redirectUri;\n }\n\n private isAuthorizationCodeType(parameters?: AuthorizationCodeParameters): boolean {\n return this.authConfig.type === OAuthType.AUTHORIZATION_CODE && !!parameters?.redirectUri;\n }\n\n private async toAuthorizationUrl(parameters: AuthorizationCodeParameters | ImplicitParameters, responseType: OAuthType): Promise<string> {\n const {config} = this.authConfig as any;\n const appendChar = config.authorizePath.includes('?') ? '&' : '?';\n const clientId = `${appendChar}client_id=${config.clientId}`;\n const redirectUri = `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`;\n const responseTypeString = `&response_type=${responseType}`;\n const scope = `&scope=${encodeURIComponent(config.scope || '')}`;\n const state = `&state=${encodeURIComponent(parameters.state || '')}`;\n const {codeVerifier} = config;\n const codeChallenge = codeVerifier ? `&code_challenge=${await pkce(codeVerifier)}&code_challenge_method=S256` : '';\n const parametersString = `${clientId}${redirectUri}${responseTypeString}${scope}${state}${codeChallenge}`;\n return `${config.authorizePath}${parametersString}`;\n }\n\n set token(token: OAuthToken | null) {\n this._token = token;\n const {storageKey} = this.authConfig;\n if (token) {\n // @ts-ignore\n this.authConfig.storage[storageKey] = JSON.stringify(this.token);\n clearTimeout(this.timer);\n if (this.token && this.token.expires_in) {\n this.zone.runOutsideAngular(() => {\n this.timer = setTimeout(() => {\n this.zone.run(() => {\n this.refreshToken();\n });\n }, Number(this.token?.expires_in) * 1000);\n });\n }\n } else {\n // @ts-ignore\n delete this.authConfig.storage[storageKey];\n }\n }\n\n get token() {\n return this._token;\n }\n\n private refreshToken() {\n const {tokenPath, clientId, clientSecret, scope} = this.authConfig.config as any;\n const {refresh_token} = this.token as OAuthToken;\n if (tokenPath && refresh_token) {\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: 'refresh_token',\n refresh_token,\n ...scope ? {scope} : {},\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.logout();\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = {\n ...this.token,\n ...params\n };\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n }\n\n private getCleanedUnSearchParameters(): string {\n const {search} = this.locationService;\n let searchString = search.substr(1);\n const hashKeys = ['code', 'state', 'error', 'error_description', 'session_state'];\n hashKeys.forEach((hashKey) => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n searchString = searchString.replace(re, '');\n });\n return searchString.length ? `?${searchString}` : '';\n }\n\n private cleanLocationHash() {\n const {hash} = this.locationService;\n let curHash = hash.substr(1);\n const hashKeys = ['access_token', 'token_type', 'expires_in', 'scope', 'state', 'error', 'error_description', 'session_state'];\n hashKeys.forEach((hashKey) => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n curHash = curHash.replace(re, '');\n });\n this.locationService.hash = curHash;\n }\n\n private emitState(parameters: Record<string, string> | null) {\n const {state} = parameters as any;\n if (state) {\n this.state$.next(state);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {EMPTY, Observable, throwError} from 'rxjs';\nimport {catchError} from 'rxjs/operators';\nimport {OAuthService} from './oauth.service';\nimport {OAuthStatus} from '../models';\n\n@Injectable()\nexport class OAuthInterceptor implements HttpInterceptor {\n\n constructor(private oauthService: OAuthService) {\n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (this.oauthService) {\n if (!this.isPathExcepted(req)) {\n const token = this.oauthService.token;\n if (token && token.access_token) {\n req = req.clone({\n setHeaders: {\n Authorization: `${token.token_type} ${token.access_token}`\n }\n });\n }\n }\n return next.handle(req).pipe(\n catchError((err) => {\n if (err.status === 401) {\n this.oauthService.token = null;\n this.oauthService.status = OAuthStatus.DENIED;\n return EMPTY;\n }\n return throwError(() => new Error(err));\n })\n );\n } else {\n return next.handle(req);\n }\n }\n\n private isPathExcepted(req: HttpRequest<any>) {\n for (const ignorePath of this.oauthService.ignorePaths) {\n try {\n if (req.url.match(ignorePath)) {\n return true;\n }\n } catch (err) {\n }\n }\n return false;\n }\n}\n","import {Component, ContentChild, EventEmitter, HostListener, Inject, Input, OnDestroy, Output, TemplateRef} from '@angular/core';\r\nimport {Observable, Subscription} from 'rxjs';\r\nimport {LOCATION, OAuthParameters, OAuthStatus, OAuthType} from '../../models';\r\nimport {tap} from 'rxjs/operators';\r\nimport {OAuthService} from '../../services/oauth.service';\r\n\r\nexport interface OAuthLoginI18n {\r\n username?: string;\r\n password?: string;\r\n submit?: string;\r\n notAuthorized?: string;\r\n authorized?: string;\r\n denied?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'oauth-login',\r\n templateUrl: 'oauth-login.component.html',\r\n styleUrls: ['oauth-login.component.scss']\r\n})\r\nexport class OAuthLoginComponent implements OnDestroy {\r\n\r\n private subscription = new Subscription();\r\n private _i18n: OAuthLoginI18n = {\r\n username: 'Username',\r\n password: 'Password',\r\n submit: 'Sign in',\r\n notAuthorized: 'Sign in',\r\n authorized: 'Welcome',\r\n denied: 'Access Denied. Try again!'\r\n };\r\n\r\n get i18n() {\r\n return this._i18n;\r\n }\r\n\r\n @Input()\r\n set i18n(i18n) {\r\n this._i18n = {\r\n ...this._i18n,\r\n ...i18n\r\n };\r\n }\r\n\r\n @Input()\r\n state = '';\r\n @Output()\r\n stateChange: EventEmitter<string> = new EventEmitter();\r\n @Input()\r\n profileName$: Observable<string> | undefined;\r\n @ContentChild('login', {static: false})\r\n loginTemplate: TemplateRef<any> | undefined;\r\n username = '';\r\n password = '';\r\n profileName: string | undefined;\r\n OAuthStatus = OAuthStatus;\r\n OAuthType = OAuthType;\r\n collapse = false;\r\n type = this.oauthService.type;\r\n redirectUri = this.location.href;\r\n state$ = this.oauthService.state$.pipe(\r\n tap(s => this.stateChange.emit(s))\r\n );\r\n status$ = this.oauthService.status$.pipe(\r\n tap(s => {\r\n if (s === OAuthStatus.AUTHORIZED && this.profileName$) {\r\n this.subscription.add(this.profileName$.subscribe(n => this.profileName = n));\r\n } else {\r\n this.profileName = '';\r\n }\r\n })\r\n );\r\n loginFunction = (p: OAuthParameters) => this.login(p);\r\n logoutFunction = () => this.logout();\r\n\r\n constructor(private oauthService: OAuthService,\r\n @Inject(LOCATION) private location: Location) {\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n logout() {\r\n this.oauthService.logout();\r\n }\r\n\r\n login(parameters: OAuthParameters) {\r\n this.oauthService.login(parameters);\r\n this.collapse = false;\r\n }\r\n\r\n toggleCollapse() {\r\n this.collapse = !this.collapse;\r\n }\r\n\r\n @HostListener('window:keydown.escape')\r\n keyboardEvent() {\r\n this.collapse = false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule, Optional, PLATFORM_ID} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\nimport {RouterModule} from '@angular/router';\nimport {OAuthConfig, OAUTH_CONFIG, LOCATION, SERVER_HOST, SERVER_PATH, STORAGE} from './models';\nimport {OAuthService} from './services/oauth.service';\nimport {OAuthLoginComponent} from './components/login/oauth-login.component';\nimport {CommonModule, isPlatformBrowser} from '@angular/common';\nimport {OAuthInterceptor} from './services/oauth.interceptor';\n\nconst mockLocation = (serverHost: string, serverPath: string): Location => {\n const url = new URL(serverHost && serverPath ? `${serverHost}${serverPath}` : 'http://localhost');\n const {href, origin, protocol, host, hostname, port, pathname, search, hash} = url;\n return {\n href, origin, protocol, host, hostname, port, pathname, search, hash,\n reload() {\n },\n assign(u: string) {\n },\n ancestorOrigins: {} as any,\n replace(u: string) {\n }\n };\n};\n\nconst LocationService = {\n provide: LOCATION,\n useFactory(platformId: Object, serverHost: string, serverPath: string) {\n return isPlatformBrowser(platformId) ? location : mockLocation(serverHost, serverPath);\n },\n deps: [\n PLATFORM_ID,\n [new Optional(), SERVER_HOST],\n [new Optional(), SERVER_PATH]\n ]\n};\n\nconst mockStorage: Storage = {\n clear() {\n },\n getItem(key: string) {\n return null;\n },\n key(index: number) {\n return null;\n },\n removeItem(key: string) {\n },\n setItem(key: string, value: string) {\n },\n length: 0\n};\n\nconst StorageService = {\n provide: STORAGE,\n useFactory(platformId: Object) {\n return isPlatformBrowser(platformId) ? localStorage : mockStorage;\n },\n deps: [PLATFORM_ID]\n};\n\nconst OAuthInterceptorService = {\n provide: HTTP_INTERCEPTORS,\n useClass: OAuthInterceptor,\n multi: true,\n};\n\nconst defaultConfig = (storage: Storage) => {\n return {\n storage,\n storageKey: 'token',\n ignorePaths: []\n };\n};\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n RouterModule,\n ],\n declarations: [OAuthLoginComponent],\n exports: [OAuthLoginComponent],\n providers: [\n LocationService,\n StorageService,\n OAuthService,\n OAuthInterceptorService,\n ]\n})\nexport class OAuthModule {\n\n static forRoot(config: OAuthConfig): ModuleWithProviders<OAuthModule> {\n return {\n ngModule: OAuthModule,\n providers: [\n LocationService,\n StorageService,\n OAuthService,\n OAuthInterceptorService,\n {\n provide: OAUTH_CONFIG,\n useFactory(storage: Storage) {\n return {\n ...defaultConfig(storage),\n ...config,\n };\n },\n deps: [\n STORAGE\n ]\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-oauth\n */\nexport * from './lib/models';\nexport * from './lib/services/oauth.service';\nexport * from './lib/services/oauth.interceptor';\nexport * from './lib/components/login/oauth-login.component';\nexport * from './lib/oauth.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-oauth.js","sources":["../../../projects/ngx-oauth/src/lib/models/index.ts","../../../projects/ngx-oauth/src/lib/services/oauth.service.ts","../../../projects/ngx-oauth/src/lib/services/oauth.interceptor.ts","../../../projects/ngx-oauth/src/lib/components/login/oauth-login.component.ts","../../../projects/ngx-oauth/src/lib/oauth.module.ts","../../../projects/ngx-oauth/src/index.ts","../../../projects/ngx-oauth/src/ngx-oauth.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const SERVER_HOST = new InjectionToken<string>('SERVER_HOST');\nexport const SERVER_PATH = new InjectionToken<string>('SERVER_PATH');\nexport const LOCATION = new InjectionToken<Location>('Location');\nexport const STORAGE = new InjectionToken<Storage>('Storage');\nexport const OAUTH_CONFIG = new InjectionToken<OAuthConfig>('OAuthConfig');\n\nexport enum OAuthType {\n RESOURCE = 'password',\n AUTHORIZATION_CODE = 'code',\n IMPLICIT = 'token',\n CLIENT_CREDENTIAL = 'client_credentials'\n}\n\nexport interface OAuthConfig {\n type: OAuthType;\n config: OAuthTypeConfig;\n storageKey?: string;\n storage?: Storage;\n ignorePaths?: RegExp[];\n}\n\nexport interface ClientCredentialConfig {\n tokenPath: string;\n revokePath?: string;\n clientId: string;\n clientSecret: string;\n scope?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface ResourceConfig extends ClientCredentialConfig {\n}\n\nexport interface ImplicitConfig {\n authorizePath: string;\n revokePath?: string;\n clientId: string;\n scope?: string;\n}\n\nexport interface AuthorizationCodeConfig extends ResourceConfig {\n authorizePath: string;\n}\n\nexport interface AuthorizationCodePKCEConfig extends AuthorizationCodeConfig {\n codeVerifier: string;\n}\n\nexport interface ResourceParameters {\n username: string;\n password: string;\n}\n\nexport interface ImplicitParameters {\n redirectUri: string;\n state?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface AuthorizationCodeParameters extends ImplicitParameters {\n}\n\nexport type OAuthParameters = ResourceParameters | AuthorizationCodeParameters | ImplicitParameters;\nexport type OAuthTypeConfig =\n AuthorizationCodePKCEConfig\n | AuthorizationCodeConfig\n | ImplicitConfig\n | ResourceConfig\n | ClientCredentialConfig;\n\nexport interface OAuthToken {\n id_token?: string;\n access_token?: string;\n refresh_token?: string;\n token_type?: string;\n state?: string;\n error?: string;\n expires_in?: number | string;\n refresh_expires_in?: number;\n scope?: string;\n}\n\nexport enum OAuthStatus {\n NOT_AUTHORIZED = 'NOT_AUTHORIZED',\n AUTHORIZED = 'AUTHORIZED',\n DENIED = 'DENIED'\n}\n","import {Inject, Injectable, NgZone} from '@angular/core';\nimport {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {catchError, concatMap, delay, switchMap} from 'rxjs/operators';\nimport {EMPTY, from, noop, of, ReplaySubject} from 'rxjs';\nimport {\n AuthorizationCodeParameters,\n ImplicitParameters,\n LOCATION,\n OAUTH_CONFIG,\n OAuthConfig,\n OAuthParameters,\n OAuthStatus,\n OAuthToken,\n OAuthType,\n OAuthTypeConfig,\n ResourceParameters\n} from '../models';\n\nconst base64url = (str: string) => btoa(str)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n\nconst pkce = async (value: string) => {\n const buff = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));\n return base64url(new Uint8Array(buff).reduce((s, b) => s + String.fromCharCode(b), ''));\n};\n\nconst REQUEST_HEADER = new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'});\n\nconst parseOauthUri = (hash: string): Record<string, string> | null => {\n const regex = /([^&=]+)=([^&]*)/g;\n const params: Record<string, string> = {};\n let m;\n // tslint:disable-next-line:no-conditional-assignment\n while ((m = regex.exec(hash)) !== null) {\n params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);\n }\n if (Object.keys(params).length) {\n return params;\n }\n return null;\n};\n\n@Injectable()\nexport class OAuthService {\n\n private _token: OAuthToken | null = null;\n private _status = OAuthStatus.NOT_AUTHORIZED;\n private timer: any;\n state$: ReplaySubject<string> = new ReplaySubject(1);\n status$: ReplaySubject<OAuthStatus> = new ReplaySubject(1);\n\n constructor(private http: HttpClient,\n private zone: NgZone,\n @Inject(OAUTH_CONFIG) private authConfig: OAuthConfig,\n @Inject(LOCATION) private locationService: Location) {\n this.init();\n }\n\n protected init(): void {\n const {hash, search, origin, pathname} = this.locationService;\n const isImplicitRedirect = hash && new RegExp('(#access_token=)|(#error=)').test(hash);\n const isAuthCodeRedirect = search && new RegExp('(code=)|(error=)').test(search);\n const {storageKey} = this.authConfig;\n const savedToken = storageKey && this.authConfig.storage && this.authConfig.storage[storageKey] &&\n JSON.parse(this.authConfig.storage[storageKey]);\n if (isImplicitRedirect) {\n const parameters = parseOauthUri(hash.substr(1));\n this.emitState(parameters);\n this.cleanLocationHash();\n if (!parameters || parameters.error) {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n } else {\n this.token = parameters;\n this.status = OAuthStatus.AUTHORIZED;\n }\n } else if (isAuthCodeRedirect) {\n const parameters = parseOauthUri(search.substr(1));\n this.emitState(parameters);\n const newParametersString = this.getCleanedUnSearchParameters();\n if (parameters && parameters.code) {\n const {clientId, clientSecret, tokenPath, scope, codeVerifier} = this.authConfig.config as any;\n setTimeout(() => {\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n code: parameters.code,\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: `${origin}${pathname}${newParametersString}`,\n grant_type: 'authorization_code',\n ...scope ? {scope} : {},\n ...codeVerifier ? {code_verifier: codeVerifier} : {}\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = {error: 'error'};\n this.status = OAuthStatus.DENIED;\n this.locationService.href = `${origin}${pathname}${newParametersString}`;\n return EMPTY;\n })\n ).subscribe(token => {\n this.token = token;\n // authorized event will be triggered after redirect\n this.locationService.href = `${origin}${pathname}${newParametersString}`;\n });\n });\n } else {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n }\n } else if (savedToken) {\n const {access_token, refresh_token, error} = savedToken;\n if (error) {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n } else if (access_token) {\n this.token = savedToken;\n if (refresh_token) {\n setTimeout(() => {\n this.refreshToken();\n });\n } else {\n this.status = OAuthStatus.AUTHORIZED;\n }\n }\n } else {\n this.status = OAuthStatus.NOT_AUTHORIZED;\n }\n }\n\n login(parameters?: OAuthParameters) {\n if (this.isResourceType(parameters as ResourceParameters)) {\n this.resourceLogin(parameters as ResourceParameters);\n } else if (this.isAuthorizationCodeType(parameters as AuthorizationCodeParameters)) {\n this.authorizationCodeLogin(parameters as AuthorizationCodeParameters).then();\n } else if (this.isImplicitType(parameters as ImplicitParameters)) {\n this.implicitLogin(parameters as ImplicitParameters).then();\n } else if (this.isClientCredentialType()) {\n this.clientCredentialLogin();\n }\n }\n\n logout() {\n this.revoke();\n this.token = null;\n this.status = OAuthStatus.NOT_AUTHORIZED;\n }\n\n revoke() {\n const {revokePath, clientId, clientSecret} = this.authConfig.config as any;\n if (revokePath) {\n const {access_token, refresh_token} = this.token as OAuthToken;\n const toRevoke = [];\n if (access_token) {\n toRevoke.push({\n ...clientId ? {client_id: clientId} : {},\n ...clientSecret ? {client_secret: clientSecret} : {},\n token: access_token,\n token_type_hint: 'access_token'\n });\n }\n if (refresh_token) {\n toRevoke.push({\n ...clientId ? {client_id: clientId} : {},\n ...clientSecret ? {client_secret: clientSecret} : {},\n token: refresh_token,\n token_type_hint: 'refresh_token'\n });\n }\n from(toRevoke).pipe(\n concatMap(o => of(o).pipe(delay(300))), // space request to avoid cancellation\n switchMap(o => this.http.post(revokePath, new HttpParams({fromObject: o}))),\n ).subscribe(noop);\n }\n }\n\n get status(): OAuthStatus {\n return this._status;\n }\n\n set status(status) {\n this._status = status;\n this.status$.next(status);\n }\n\n set(type: OAuthType, config?: OAuthTypeConfig): void {\n this.authConfig.type = type;\n if (config) {\n this.authConfig.config = {\n ...this.authConfig.config,\n ...config\n };\n }\n }\n\n get type(): OAuthType {\n return this.authConfig.type;\n }\n\n get ignorePaths(): RegExp[] {\n return this.authConfig.ignorePaths || [];\n }\n\n private resourceLogin(parameters: ResourceParameters) {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n const {username, password} = parameters;\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.RESOURCE,\n ...scope ? {scope} : {},\n username,\n password\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = params;\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n\n private async authorizationCodeLogin(parameters: AuthorizationCodeParameters) {\n const authUrl = await this.toAuthorizationUrl(parameters, OAuthType.AUTHORIZATION_CODE);\n this.locationService.replace(authUrl);\n }\n\n private async implicitLogin(parameters: ImplicitParameters) {\n const authUrl = await this.toAuthorizationUrl(parameters, OAuthType.IMPLICIT);\n this.locationService.replace(authUrl);\n }\n\n private clientCredentialLogin() {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.CLIENT_CREDENTIAL,\n ...scope ? {scope} : {},\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.token = null;\n this.status = OAuthStatus.DENIED;\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = params;\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n\n private isClientCredentialType(): boolean {\n return this.authConfig.type === OAuthType.CLIENT_CREDENTIAL;\n }\n\n private isResourceType(parameters?: ResourceParameters): boolean {\n return this.authConfig.type === OAuthType.RESOURCE && !!parameters?.password;\n }\n\n private isImplicitType(parameters?: ImplicitParameters): boolean {\n return this.authConfig.type === OAuthType.IMPLICIT && !!parameters?.redirectUri;\n }\n\n private isAuthorizationCodeType(parameters?: AuthorizationCodeParameters): boolean {\n return this.authConfig.type === OAuthType.AUTHORIZATION_CODE && !!parameters?.redirectUri;\n }\n\n private async toAuthorizationUrl(parameters: AuthorizationCodeParameters | ImplicitParameters, responseType: OAuthType): Promise<string> {\n const {config} = this.authConfig as any;\n const appendChar = config.authorizePath.includes('?') ? '&' : '?';\n const clientId = `${appendChar}client_id=${config.clientId}`;\n const redirectUri = `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`;\n const responseTypeString = `&response_type=${responseType}`;\n const scope = `&scope=${encodeURIComponent(config.scope || '')}`;\n const state = `&state=${encodeURIComponent(parameters.state || '')}`;\n const {codeVerifier} = config;\n const codeChallenge = codeVerifier ? `&code_challenge=${await pkce(codeVerifier)}&code_challenge_method=S256` : '';\n const parametersString = `${clientId}${redirectUri}${responseTypeString}${scope}${state}${codeChallenge}`;\n return `${config.authorizePath}${parametersString}`;\n }\n\n set token(token: OAuthToken | null) {\n this._token = token;\n const {storageKey} = this.authConfig;\n if (token) {\n // @ts-ignore\n this.authConfig.storage[storageKey] = JSON.stringify(this.token);\n clearTimeout(this.timer);\n if (this.token && this.token.expires_in) {\n this.zone.runOutsideAngular(() => {\n this.timer = setTimeout(() => {\n this.zone.run(() => {\n this.refreshToken();\n });\n }, Number(this.token?.expires_in) * 1000);\n });\n }\n } else {\n // @ts-ignore\n delete this.authConfig.storage[storageKey];\n }\n }\n\n get token() {\n return this._token;\n }\n\n private refreshToken() {\n const {tokenPath, clientId, clientSecret, scope} = this.authConfig.config as any;\n const {refresh_token} = this.token as OAuthToken;\n if (tokenPath && refresh_token) {\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: 'refresh_token',\n refresh_token,\n ...scope ? {scope} : {},\n }\n }), {headers: REQUEST_HEADER}).pipe(\n catchError(() => {\n this.logout();\n return EMPTY;\n })\n ).subscribe(params => {\n this.token = {\n ...this.token,\n ...params\n };\n this.status = OAuthStatus.AUTHORIZED;\n });\n }\n }\n\n private getCleanedUnSearchParameters(): string {\n const {search} = this.locationService;\n let searchString = search.substr(1);\n const hashKeys = ['code', 'state', 'error', 'error_description', 'session_state'];\n hashKeys.forEach((hashKey) => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n searchString = searchString.replace(re, '');\n });\n return searchString.length ? `?${searchString}` : '';\n }\n\n private cleanLocationHash() {\n const {hash} = this.locationService;\n let curHash = hash.substr(1);\n const hashKeys = ['access_token', 'token_type', 'expires_in', 'scope', 'state', 'error', 'error_description', 'session_state'];\n hashKeys.forEach((hashKey) => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n curHash = curHash.replace(re, '');\n });\n this.locationService.hash = curHash;\n }\n\n private emitState(parameters: Record<string, string> | null) {\n const {state} = parameters as any;\n if (state) {\n this.state$.next(state);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {EMPTY, Observable, throwError} from 'rxjs';\nimport {catchError} from 'rxjs/operators';\nimport {OAuthService} from './oauth.service';\nimport {OAuthStatus} from '../models';\n\n@Injectable()\nexport class OAuthInterceptor implements HttpInterceptor {\n\n constructor(private oauthService: OAuthService) {\n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (this.oauthService) {\n if (!this.isPathExcepted(req)) {\n const token = this.oauthService.token;\n if (token && token.access_token) {\n req = req.clone({\n setHeaders: {\n Authorization: `${token.token_type} ${token.access_token}`\n }\n });\n }\n }\n return next.handle(req).pipe(\n catchError((err) => {\n if (err.status === 401) {\n this.oauthService.token = null;\n this.oauthService.status = OAuthStatus.DENIED;\n return EMPTY;\n }\n return throwError(() => new Error(err));\n })\n );\n } else {\n return next.handle(req);\n }\n }\n\n private isPathExcepted(req: HttpRequest<any>) {\n for (const ignorePath of this.oauthService.ignorePaths) {\n try {\n if (req.url.match(ignorePath)) {\n return true;\n }\n } catch (err) {\n }\n }\n return false;\n }\n}\n","import {Component, ContentChild, EventEmitter, HostListener, Inject, Input, OnDestroy, Output, TemplateRef} from '@angular/core';\r\nimport {Observable, Subscription} from 'rxjs';\r\nimport {LOCATION, OAuthParameters, OAuthStatus, OAuthType} from '../../models';\r\nimport {tap} from 'rxjs/operators';\r\nimport {OAuthService} from '../../services/oauth.service';\r\n\r\nexport interface OAuthLoginI18n {\r\n username?: string;\r\n password?: string;\r\n submit?: string;\r\n notAuthorized?: string;\r\n authorized?: string;\r\n denied?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'oauth-login',\r\n templateUrl: 'oauth-login.component.html',\r\n styleUrls: ['oauth-login.component.scss']\r\n})\r\nexport class OAuthLoginComponent implements OnDestroy {\r\n\r\n private subscription = new Subscription();\r\n private _i18n: OAuthLoginI18n = {\r\n username: 'Username',\r\n password: 'Password',\r\n submit: 'Sign in',\r\n notAuthorized: 'Sign in',\r\n authorized: 'Welcome',\r\n denied: 'Access Denied. Try again!'\r\n };\r\n\r\n get i18n() {\r\n return this._i18n;\r\n }\r\n\r\n @Input()\r\n set i18n(i18n) {\r\n this._i18n = {\r\n ...this._i18n,\r\n ...i18n\r\n };\r\n }\r\n\r\n @Input()\r\n state = '';\r\n @Output()\r\n stateChange: EventEmitter<string> = new EventEmitter();\r\n @Input()\r\n profileName$: Observable<string> | undefined;\r\n @ContentChild('login', {static: false})\r\n loginTemplate: TemplateRef<any> | undefined;\r\n username = '';\r\n password = '';\r\n profileName: string | undefined;\r\n OAuthStatus = OAuthStatus;\r\n OAuthType = OAuthType;\r\n collapse = false;\r\n type = this.oauthService.type;\r\n redirectUri = this.location.href;\r\n state$ = this.oauthService.state$.pipe(\r\n tap(s => this.stateChange.emit(s))\r\n );\r\n status$ = this.oauthService.status$.pipe(\r\n tap(s => {\r\n if (s === OAuthStatus.AUTHORIZED && this.profileName$) {\r\n this.subscription.add(this.profileName$.subscribe(n => this.profileName = n));\r\n } else {\r\n this.profileName = '';\r\n }\r\n })\r\n );\r\n loginFunction = (p: OAuthParameters) => this.login(p);\r\n logoutFunction = () => this.logout();\r\n\r\n constructor(private oauthService: OAuthService,\r\n @Inject(LOCATION) private location: Location) {\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n logout() {\r\n this.oauthService.logout();\r\n }\r\n\r\n login(parameters: OAuthParameters) {\r\n this.oauthService.login(parameters);\r\n this.collapse = false;\r\n }\r\n\r\n toggleCollapse() {\r\n this.collapse = !this.collapse;\r\n }\r\n\r\n @HostListener('window:keydown.escape')\r\n keyboardEvent() {\r\n this.collapse = false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule, Optional, PLATFORM_ID} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\nimport {RouterModule} from '@angular/router';\nimport {OAuthConfig, OAUTH_CONFIG, LOCATION, SERVER_HOST, SERVER_PATH, STORAGE} from './models';\nimport {OAuthService} from './services/oauth.service';\nimport {OAuthLoginComponent} from './components/login/oauth-login.component';\nimport {CommonModule, isPlatformBrowser} from '@angular/common';\nimport {OAuthInterceptor} from './services/oauth.interceptor';\n\nconst mockLocation = (serverHost: string, serverPath: string): Location => {\n const url = new URL(serverHost && serverPath ? `${serverHost}${serverPath}` : 'http://localhost');\n const {href, origin, protocol, host, hostname, port, pathname, search, hash} = url;\n return {\n href, origin, protocol, host, hostname, port, pathname, search, hash,\n reload() {\n },\n assign(u: string) {\n },\n ancestorOrigins: {} as any,\n replace(u: string) {\n }\n };\n};\n\nconst LocationService = {\n provide: LOCATION,\n useFactory(platformId: Object, serverHost: string, serverPath: string) {\n return isPlatformBrowser(platformId) ? location : mockLocation(serverHost, serverPath);\n },\n deps: [\n PLATFORM_ID,\n [new Optional(), SERVER_HOST],\n [new Optional(), SERVER_PATH]\n ]\n};\n\nconst mockStorage: Storage = {\n clear() {\n },\n getItem(key: string) {\n return null;\n },\n key(index: number) {\n return null;\n },\n removeItem(key: string) {\n },\n setItem(key: string, value: string) {\n },\n length: 0\n};\n\nconst StorageService = {\n provide: STORAGE,\n useFactory(platformId: Object) {\n return isPlatformBrowser(platformId) ? localStorage : mockStorage;\n },\n deps: [PLATFORM_ID]\n};\n\nconst OAuthInterceptorService = {\n provide: HTTP_INTERCEPTORS,\n useClass: OAuthInterceptor,\n multi: true,\n};\n\nconst defaultConfig = (storage: Storage) => {\n return {\n storage,\n storageKey: 'token',\n ignorePaths: []\n };\n};\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n RouterModule,\n ],\n declarations: [OAuthLoginComponent],\n exports: [OAuthLoginComponent],\n providers: [\n LocationService,\n StorageService,\n OAuthService,\n OAuthInterceptorService,\n ]\n})\nexport class OAuthModule {\n\n static forRoot(config: OAuthConfig): ModuleWithProviders<OAuthModule> {\n return {\n ngModule: OAuthModule,\n providers: [\n LocationService,\n StorageService,\n OAuthService,\n OAuthInterceptorService,\n {\n provide: OAUTH_CONFIG,\n useFactory(storage: Storage) {\n return {\n ...defaultConfig(storage),\n ...config,\n };\n },\n deps: [\n STORAGE\n ]\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-oauth\n */\nexport * from './lib/models';\nexport * from './lib/services/oauth.service';\nexport * from './lib/services/oauth.interceptor';\nexport * from './lib/components/login/oauth-login.component';\nexport * from './lib/oauth.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-oauth",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^12.0.0",
6
6
  "@angular/core": "^12.0.0"