@nakedcreativity/membrs-angular-helper 0.0.15 → 0.0.18

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.
@@ -1,61 +1,293 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core')) :
3
- typeof define === 'function' && define.amd ? define('@nakedcreativity/membrs-angular-helper', ['exports', '@angular/core'], factory) :
4
- (global = global || self, factory((global.nakedcreativity = global.nakedcreativity || {}, global.nakedcreativity['membrs-angular-helper'] = {}), global.ng.core));
5
- }(this, (function (exports, i0) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@auth0/angular-jwt'), require('@angular/common/http'), require('@angular/common'), require('@uirouter/angular'), require('rxjs/operators')) :
3
+ typeof define === 'function' && define.amd ? define('@nakedcreativity/membrs-angular-helper', ['exports', '@angular/core', '@auth0/angular-jwt', '@angular/common/http', '@angular/common', '@uirouter/angular', 'rxjs/operators'], factory) :
4
+ (global = global || self, factory((global.nakedcreativity = global.nakedcreativity || {}, global.nakedcreativity['membrs-angular-helper'] = {}), global.ng.core, global.angularJwt, global.ng.common.http, global.ng.common, global.angular, global.rxjs.operators));
5
+ }(this, (function (exports, i0, angularJwt, i1, common, angular, operators) { 'use strict';
6
6
 
7
+ /**
8
+ * This is not a real service, but it looks like it from the outside.
9
+ * It's just an InjectionTToken used to import the config object, provided from the outside
10
+ */
11
+ var MembrsConfigService = new i0.InjectionToken("MembrsConfig");
12
+
13
+ var jwtService = new angularJwt.JwtHelperService();
7
14
  var MembrsService = /** @class */ (function () {
8
- function MembrsService() {
15
+ function MembrsService(http, config) {
16
+ this.http = http;
17
+ this.config = config;
18
+ this._lsKey = 'membrs';
19
+ console.log('membrs constructor');
20
+ // if the token exists in local storage, retrieve it back to the service
21
+ if (localStorage.getItem(this._lsKey)) {
22
+ this.token = localStorage.getItem(this._lsKey);
23
+ }
9
24
  }
25
+ MembrsService.prototype.reissue = function (token) {
26
+ var _this = this;
27
+ return new Promise(function (resolve, reject) {
28
+ if (!token && !_this._token) {
29
+ console.log('reject, not logged in');
30
+ reject('NOT_LOGGED_IN');
31
+ }
32
+ if (token)
33
+ _this.token = token;
34
+ // check stored token has not expired, or needs to be reissued soon
35
+ var reissueIn = _this._decoded.exp - Math.floor(Date.now() / 1000);
36
+ // token has expired
37
+ if (reissueIn < 0) {
38
+ reject('NOT_LOGGED_IN');
39
+ }
40
+ // token expiring soon
41
+ if (reissueIn < 300) {
42
+ console.log('expires less than 300');
43
+ console.log(_this.config);
44
+ _this.http.post(_this.config.apiProtocol + _this.config.api + '/token/' + _this._token, {}).subscribe(function (response) {
45
+ console.log('reissue response');
46
+ console.log(response);
47
+ if (response.token) {
48
+ _this.token = response.token;
49
+ resolve(_this._token);
50
+ }
51
+ else {
52
+ console.log('error');
53
+ console.log(response);
54
+ reject('NOT_LOGGED_IN');
55
+ }
56
+ }, function (error) {
57
+ console.log(error);
58
+ reject('NOT_LOGGED_IN');
59
+ });
60
+ }
61
+ else {
62
+ console.log('token ok');
63
+ resolve(_this._token);
64
+ }
65
+ });
66
+ };
67
+ Object.defineProperty(MembrsService.prototype, "token", {
68
+ get: function () {
69
+ return this._token;
70
+ },
71
+ set: function (token) {
72
+ this._token = token;
73
+ localStorage.setItem(this._lsKey, token);
74
+ this._decoded = jwtService.decodeToken(this._token);
75
+ },
76
+ enumerable: false,
77
+ configurable: true
78
+ });
79
+ MembrsService.prototype.deleteToken = function () {
80
+ localStorage.removeItem(this._lsKey);
81
+ };
82
+ MembrsService.prototype.isLoggedIn = function () {
83
+ return this.token ? true : false;
84
+ };
85
+ Object.defineProperty(MembrsService.prototype, "profile", {
86
+ get: function () {
87
+ return this._decoded;
88
+ },
89
+ enumerable: false,
90
+ configurable: true
91
+ });
92
+ Object.defineProperty(MembrsService.prototype, "admin", {
93
+ get: function () {
94
+ return this.profile.permission == 1;
95
+ },
96
+ enumerable: false,
97
+ configurable: true
98
+ });
99
+ MembrsService.prototype.logout = function () {
100
+ var _this = this;
101
+ return new Promise(function (resolve, reject) {
102
+ _this.http.post(_this.config.apiProtocol + _this.config.api + '/logout/' + _this._token, {}).subscribe(function (response) {
103
+ _this._token = null;
104
+ localStorage.removeItem(_this._lsKey);
105
+ resolve(_this.config.login);
106
+ //this.router.stateService.go('dashboard')
107
+ }, function (error) {
108
+ reject(error);
109
+ });
110
+ });
111
+ };
10
112
  return MembrsService;
11
113
  }());
12
- MembrsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MembrsService_Factory() { return new MembrsService(); }, token: MembrsService, providedIn: "root" });
114
+ MembrsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MembrsService_Factory() { return new MembrsService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(MembrsConfigService)); }, token: MembrsService, providedIn: "root" });
13
115
  MembrsService.decorators = [
14
116
  { type: i0.Injectable, args: [{
15
117
  providedIn: 'root'
16
118
  },] }
17
119
  ];
18
- MembrsService.ctorParameters = function () { return []; };
120
+ MembrsService.ctorParameters = function () { return [
121
+ { type: i1.HttpClient },
122
+ { type: undefined, decorators: [{ type: i0.Inject, args: [MembrsConfigService,] }] }
123
+ ]; };
19
124
 
20
- var MembrsComponent = /** @class */ (function () {
21
- function MembrsComponent() {
22
- }
23
- MembrsComponent.prototype.ngOnInit = function () {
125
+ function routerConfigFn(router, injector) {
126
+ var transitionService = router.transitionService;
127
+ var stateService = router.stateService;
128
+ var config = injector.get(MembrsConfigService);
129
+ var membrsService = injector.get(MembrsService);
130
+ stateService.defaultErrorHandler(function (error) {
131
+ console.log('Default error handler - Membrs Angular Helper');
132
+ console.log(error);
133
+ if (error.detail == 'NOT_LOGGED_IN') {
134
+ membrsService.deleteToken();
135
+ window.location.href = config.login;
136
+ }
137
+ if (error.detail == 'INSUFFICIENT_PERMISSIONS')
138
+ stateService.go(config.defaultState);
139
+ });
140
+ }
141
+
142
+ function retrieveToken() {
143
+ console.log('retrieve from ls');
144
+ return localStorage.getItem('membrs');
145
+ }
146
+
147
+ var validateResolve = {
148
+ token: 'reissue',
149
+ deps: [angular.Transition, angular.UIRouter, MembrsService, MembrsConfigService],
150
+ resolveFn: validateResolveFn
151
+ };
152
+ var reissueResolve = {
153
+ token: 'reissue',
154
+ deps: [angular.Transition, angular.UIRouter, MembrsService, MembrsConfigService],
155
+ resolveFn: reissueResolveFn
156
+ };
157
+ var reissueState = {
158
+ name: 'reissue',
159
+ url: '/reissue?token',
160
+ views: {},
161
+ resolve: [
162
+ reissueResolve
163
+ ]
164
+ };
165
+ function reissueResolveFn(transition, router, membrsService, membrsConfig) {
166
+ //console.log(membrsService)
167
+ return new Promise(function (resolve, reject) {
168
+ console.log('reissue promise resolve');
169
+ console.log(transition.params().token);
170
+ membrsService.reissue(transition.params().token).then(function (response) {
171
+ console.log('redirect to default state');
172
+ router.stateService.go(membrsConfig.defaultState, {}, { inherit: false });
173
+ reject();
174
+ }).catch(function (error) {
175
+ console.log('error in reissue resolve');
176
+ console.log(error);
177
+ //window.location.href = environment.login
178
+ reject(error);
179
+ });
180
+ });
181
+ }
182
+ function validateResolveFn(transition, router, membrsService, membrsConfig) {
183
+ //console.log(membrsService)
184
+ return new Promise(function (resolve, reject) {
185
+ console.log('validate promise resolve');
186
+ membrsService.reissue().then(function (response) {
187
+ resolve();
188
+ }).catch(function (error) {
189
+ console.log('error in validateResolveFn');
190
+ console.log(error);
191
+ //window.location.href = membrsConfig.login
192
+ reject(error);
193
+ });
194
+ });
195
+ }
196
+ function jwtOptionsFactory(config) {
197
+ console.log('jwt options factory');
198
+ console.log(config);
199
+ return {
200
+ tokenGetter: function () {
201
+ console.log('token getter', localStorage.getItem('membrs'));
202
+ return localStorage.getItem('membrs');
203
+ },
204
+ allowedDomains: [config.api]
24
205
  };
25
- return MembrsComponent;
26
- }());
27
- MembrsComponent.decorators = [
28
- { type: i0.Component, args: [{
29
- selector: 'lib-membrs',
30
- template: "\n <p>\n membrs works!\n </p>\n "
31
- },] }
206
+ }
207
+ /** The top level state(s) */
208
+ var STATES = [
209
+ reissueState
32
210
  ];
33
- MembrsComponent.ctorParameters = function () { return []; };
34
-
35
211
  var MembrsModule = /** @class */ (function () {
36
212
  function MembrsModule() {
37
213
  }
214
+ MembrsModule.forRoot = function (config) {
215
+ var moduleProviders = angular.UIRouterModule.forChild({
216
+ states: STATES,
217
+ config: routerConfigFn
218
+ }).providers;
219
+ moduleProviders.push(angularJwt.JwtModule.forRoot({
220
+ config: {
221
+ tokenGetter: retrieveToken,
222
+ allowedDomains: []
223
+ }
224
+ }).providers);
225
+ moduleProviders.push(MembrsService);
226
+ moduleProviders.push({ provide: MembrsConfigService, useValue: config });
227
+ return {
228
+ ngModule: MembrsModule,
229
+ providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]
230
+ };
231
+ };
38
232
  return MembrsModule;
39
233
  }());
40
234
  MembrsModule.decorators = [
41
235
  { type: i0.NgModule, args: [{
42
- declarations: [MembrsComponent],
43
- imports: [],
44
- exports: [MembrsComponent]
236
+ imports: [
237
+ common.CommonModule,
238
+ i1.HttpClientModule,
239
+ angularJwt.JwtModule
240
+ // JwtModule.forRoot({
241
+ // config: {
242
+ // tokenGetter: retrieveToken
243
+ // }
244
+ // })
245
+ // UIRouterModule.forChild({
246
+ // states: STATES,
247
+ // config: routerConfigFn,
248
+ // }),
249
+ // JwtModule.forRoot({})
250
+ ]
45
251
  },] }
46
252
  ];
47
253
 
48
- /*
49
- * Public API Surface of membrs
50
- */
254
+ var TokenInterceptor = /** @class */ (function () {
255
+ function TokenInterceptor() {
256
+ }
257
+ TokenInterceptor.prototype.intercept = function (request, next) {
258
+ //this.busyService.busy()
259
+ request = request.clone({
260
+ setHeaders: {
261
+ Authorization: localStorage.getItem('membrs')
262
+ }
263
+ });
264
+ return next.handle(request).pipe(operators.finalize(function () {
265
+ //this.busyService.finished()
266
+ }));
267
+ };
268
+ return TokenInterceptor;
269
+ }());
270
+ TokenInterceptor.decorators = [
271
+ { type: i0.Injectable }
272
+ ];
273
+ TokenInterceptor.ctorParameters = function () { return []; };
51
274
 
52
275
  /**
53
276
  * Generated bundle index. Do not edit.
54
277
  */
55
278
 
56
- exports.MembrsComponent = MembrsComponent;
57
279
  exports.MembrsModule = MembrsModule;
58
280
  exports.MembrsService = MembrsService;
281
+ exports.STATES = STATES;
282
+ exports.TokenInterceptor = TokenInterceptor;
283
+ exports.jwtOptionsFactory = jwtOptionsFactory;
284
+ exports.reissueResolve = reissueResolve;
285
+ exports.reissueResolveFn = reissueResolveFn;
286
+ exports.reissueState = reissueState;
287
+ exports.retrieveToken = retrieveToken;
288
+ exports.validateResolve = validateResolve;
289
+ exports.validateResolveFn = validateResolveFn;
290
+ exports.ɵa = MembrsConfigService;
59
291
 
60
292
  Object.defineProperty(exports, '__esModule', { value: true });
61
293
 
@@ -1 +1 @@
1
- {"version":3,"file":"nakedcreativity-membrs-angular-helper.umd.js","sources":["../../../projects/membrs/src/lib/membrs.service.ts","../../../projects/membrs/src/lib/membrs.component.ts","../../../projects/membrs/src/lib/membrs.module.ts","../../../projects/membrs/src/public-api.ts","../../../projects/membrs/src/nakedcreativity-membrs-angular-helper.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MembrsService {\n\n constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-membrs',\n template: `\n <p>\n membrs works!\n </p>\n `,\n styles: [\n ]\n})\nexport class MembrsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { MembrsComponent } from './membrs.component';\n\n\n\n@NgModule({\n declarations: [MembrsComponent],\n imports: [\n ],\n exports: [MembrsComponent]\n})\nexport class MembrsModule { }\n","/*\n * Public API Surface of membrs\n */\n\nexport * from './lib/membrs.service';\nexport * from './lib/membrs.component';\nexport * from './lib/membrs.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Injectable","Component","NgModule"],"mappings":";;;;;;;QAOE;SAAiB;;;;;gBALlBA,aAAU,SAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;;;QCUC;SAAiB;QAEjB,kCAAQ,GAAR;SACC;;;;gBAfFC,YAAS,SAAC;oBACT,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE,8CAIT;iBAGF;;;;;QCAD;;;;;gBANCC,WAAQ,SAAC;oBACR,YAAY,EAAE,CAAC,eAAe,CAAC;oBAC/B,OAAO,EAAE,EACR;oBACD,OAAO,EAAE,CAAC,eAAe,CAAC;iBAC3B;;;ICVD;;;;ICAA;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"nakedcreativity-membrs-angular-helper.umd.js","sources":["../../../projects/membrs/src/lib/config.service.ts","../../../projects/membrs/src/lib/membrs.service.ts","../../../projects/membrs/src/lib/router.config.ts","../../../projects/membrs/src/lib/token.ts","../../../projects/membrs/src/lib/membrs.module.ts","../../../projects/membrs/src/lib/auth.interceptor.ts","../../../projects/membrs/src/nakedcreativity-membrs-angular-helper.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { MembrsConfig } from './config.interface';\n\n/**\n * This is not a real service, but it looks like it from the outside.\n * It's just an InjectionTToken used to import the config object, provided from the outside\n */\nexport const MembrsConfigService = new InjectionToken<MembrsConfig>(\"MembrsConfig\");\n","import { Injectable, Inject } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { HttpClient } from '@angular/common/http'\nimport { MembrsConfigService } from './config.service'\nimport { MembrsConfig } from './config.interface';\nconst jwtService = new JwtHelperService()\n\n@Injectable({\n providedIn: 'root'\n})\n\n\nexport class MembrsService {\n\n _token: string;\n _decoded: any;\n _lsKey: string = 'membrs';\n\n constructor(private http: HttpClient, @Inject(MembrsConfigService) private config: MembrsConfig) {\n\n console.log('membrs constructor')\n // if the token exists in local storage, retrieve it back to the service\n if(localStorage.getItem(this._lsKey)){\n this.token = localStorage.getItem(this._lsKey)\n }\n \n }\n\n reissue(token?:string){\n\n return new Promise((resolve, reject)=>{\n\n if(!token && !this._token){\n console.log('reject, not logged in')\n reject('NOT_LOGGED_IN')\n }\n\n if(token)\n this.token = token\n\n // check stored token has not expired, or needs to be reissued soon\n var reissueIn = this._decoded.exp - Math.floor(Date.now()/1000)\n \n // token has expired\n if(reissueIn < 0){\n reject('NOT_LOGGED_IN')\n }\n \n // token expiring soon\n if(reissueIn < 300){\n \n console.log('expires less than 300')\n \n \n console.log(this.config)\n\n this.http.post(this.config.apiProtocol + this.config.api+'/token/'+this._token, {}).subscribe((response:any)=>{\n console.log('reissue response')\n console.log(response)\n if(response.token){\n this.token = response.token\n resolve(this._token)\n }else {\n console.log('error')\n console.log(response)\n reject('NOT_LOGGED_IN')\n }\n \n }, error=>{\n console.log(error)\n reject('NOT_LOGGED_IN')\n })\n\n }else {\n console.log('token ok')\n resolve(this._token)\n }\n \n })\n \n }\n\n set token(token){\n this._token = token\n localStorage.setItem(this._lsKey, token)\n this._decoded = jwtService.decodeToken(this._token)\n }\n\n deleteToken(){\n localStorage.removeItem(this._lsKey)\n }\n\n isLoggedIn(){\n return this.token ? true : false\n }\n\n get profile(){\n return this._decoded\n }\n\n get token(){\n return this._token\n }\n\n get admin (){\n return this.profile.permission == 1\n }\n\n logout(){\n return new Promise((resolve, reject)=>{\n this.http.post(this.config.apiProtocol+this.config.api+'/logout/'+this._token, {}).subscribe((response:any)=>{\n this._token = null;\n localStorage.removeItem(this._lsKey)\n resolve(this.config.login)\n //this.router.stateService.go('dashboard')\n }, error=>{\n reject(error)\n })\n })\n \n }\n\n\n}\n","import { UIRouter } from '@uirouter/core';\nimport { MembrsConfigService } from './config.service'\nimport { MembrsConfig } from './config.interface';\nimport { Injector } from '@angular/core';\nimport { MembrsService } from './membrs.service';\n\nexport function routerConfigFn(router: UIRouter, injector: Injector) {\n\n const transitionService = router.transitionService;\n const stateService = router.stateService\n const config:MembrsConfig = injector.get(MembrsConfigService)\n const membrsService = injector.get(MembrsService)\n\n \tstateService.defaultErrorHandler(function(error) {\n\t\t \n\t\tconsole.log('Default error handler - Membrs Angular Helper')\n\t\tconsole.log(error)\n\t\t\t\n\t\tif(error.detail == 'NOT_LOGGED_IN'){\n\t\t\tmembrsService.deleteToken()\n\t\t\twindow.location.href = config.login;\n\t\t}\n\n\t\tif(error.detail == 'INSUFFICIENT_PERMISSIONS')\n\t\t\tstateService.go(config.defaultState)\n\n\t});\n\t\n}","export function retrieveToken() {\n console.log('retrieve from ls')\n return localStorage.getItem('membrs');\n}","import { NgModule, ModuleWithProviders, Injector } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MembrsService } from './membrs.service';\nimport { JwtModule, JWT_OPTIONS } from \"@auth0/angular-jwt\";\nimport { HttpClientModule } from \"@angular/common/http\";\nimport { UIRouterModule } from '@uirouter/angular'\n\nimport { Ng2StateDeclaration } from '@uirouter/angular';\nimport { Transition, UIRouter } from '@uirouter/angular'\n\nimport { routerConfigFn } from './router.config';\nimport { MembrsConfig } from './config.interface';\nimport { MembrsConfigService } from './config.service';\nimport { retrieveToken } from './token';\n\nexport const validateResolve = {\n token: 'reissue',\n deps: [ Transition, UIRouter, MembrsService, MembrsConfigService ],\n resolveFn: validateResolveFn\n}\n\nexport const reissueResolve = {\n token: 'reissue',\n deps: [ Transition, UIRouter, MembrsService, MembrsConfigService ],\n resolveFn: reissueResolveFn\n}\n\nexport const reissueState:Ng2StateDeclaration = {\n\tname: 'reissue', \n\turl: '/reissue?token',\n\tviews: { },\n\tresolve: [\n reissueResolve\n\t]\n}\n\nexport function reissueResolveFn(transition, router, membrsService, membrsConfig:MembrsConfig) {\n \n //console.log(membrsService)\n return new Promise((resolve, reject) => {\n console.log('reissue promise resolve')\n console.log(transition.params().token)\n membrsService.reissue(transition.params().token).then((response)=>{\n console.log('redirect to default state')\n router.stateService.go(membrsConfig.defaultState, {}, {inherit:false})\n reject()\n }).catch(error=>{\n console.log('error in reissue resolve')\n console.log(error)\n //window.location.href = environment.login\n reject(error)\n })\n\n\t})\n}\n\nexport function validateResolveFn(transition, router, membrsService, membrsConfig:MembrsConfig) {\n \n //console.log(membrsService)\n return new Promise((resolve, reject) => {\n console.log('validate promise resolve')\n \n membrsService.reissue().then((response)=>{\n resolve()\n }).catch(error=>{\n console.log('error in validateResolveFn')\n console.log(error)\n //window.location.href = membrsConfig.login\n reject(error)\n })\n\n})\n}\n\nexport function jwtOptionsFactory(config) {\n console.log('jwt options factory')\n console.log(config)\n return {\n tokenGetter: () => {\n console.log('token getter', localStorage.getItem('membrs'))\n return localStorage.getItem('membrs');\n },\n allowedDomains: [config.api]\n }\n}\n\n\n/** The top level state(s) */\nexport const STATES = [\n reissueState\n]\n\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n JwtModule\n // JwtModule.forRoot({\n // config: {\n // tokenGetter: retrieveToken\n // }\n // })\n // UIRouterModule.forChild({\n // states: STATES,\n // config: routerConfigFn,\n // }),\n // JwtModule.forRoot({})\n ]\n})\n\n\n\nexport class MembrsModule { \n static forRoot(config: MembrsConfig): ModuleWithProviders<MembrsModule> {\n\n\n const moduleProviders = UIRouterModule.forChild({\n states: STATES,\n config: routerConfigFn\n }).providers\n\n moduleProviders.push(JwtModule.forRoot({\n config: {\n tokenGetter: retrieveToken,\n allowedDomains: []\n }\n }).providers)\n \n moduleProviders.push(MembrsService)\n moduleProviders.push({provide: MembrsConfigService,useValue: config});\n \n \n return {\n ngModule: MembrsModule, \n providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]\n };\n \n }\n\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\n//import { NgBusyService } from '@nakedcreativity/ng-busy';\nimport { finalize } from 'rxjs/operators';\n\n\n@Injectable()\nexport class TokenInterceptor implements HttpInterceptor {\n constructor() {}\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n \n //this.busyService.busy()\n request = request.clone({\n setHeaders: {\n Authorization: localStorage.getItem('membrs')\n }\n });\n return next.handle(request).pipe(finalize(()=>{\n //this.busyService.finished()\n }));\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MembrsConfig as ɵb} from './lib/config.interface';\nexport {MembrsConfigService as ɵa} from './lib/config.service';"],"names":["InjectionToken","JwtHelperService","Injectable","HttpClient","Inject","Transition","UIRouter","UIRouterModule","JwtModule","NgModule","CommonModule","HttpClientModule","finalize"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@angular/core")):"function"==typeof define&&define.amd?define("@nakedcreativity/membrs-angular-helper",["exports","@angular/core"],r):r(((e=e||self).nakedcreativity=e.nakedcreativity||{},e.nakedcreativity["membrs-angular-helper"]={}),e.ng.core)}(this,(function(e,r){"use strict";var t=function(){};t.ɵprov=r.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],t.ctorParameters=function(){return[]};var n=function(){function e(){}return e.prototype.ngOnInit=function(){},e}();n.decorators=[{type:r.Component,args:[{selector:"lib-membrs",template:"\n <p>\n membrs works!\n </p>\n "}]}],n.ctorParameters=function(){return[]};var o=function(){};o.decorators=[{type:r.NgModule,args:[{declarations:[n],imports:[],exports:[n]}]}],e.MembrsComponent=n,e.MembrsModule=o,e.MembrsService=t,Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@angular/core"),require("@auth0/angular-jwt"),require("@angular/common/http"),require("@angular/common"),require("@uirouter/angular"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@nakedcreativity/membrs-angular-helper",["exports","@angular/core","@auth0/angular-jwt","@angular/common/http","@angular/common","@uirouter/angular","rxjs/operators"],o):o(((e=e||self).nakedcreativity=e.nakedcreativity||{},e.nakedcreativity["membrs-angular-helper"]={}),e.ng.core,e.angularJwt,e.ng.common.http,e.ng.common,e.angular,e.rxjs.operators)}(this,(function(e,o,t,n,r,i,s){"use strict";var l=new o.InjectionToken("MembrsConfig"),a=new t.JwtHelperService,c=function(){function e(e,o){this.http=e,this.config=o,this._lsKey="membrs",console.log("membrs constructor"),localStorage.getItem(this._lsKey)&&(this.token=localStorage.getItem(this._lsKey))}return e.prototype.reissue=function(e){var o=this;return new Promise((function(t,n){e||o._token||(console.log("reject, not logged in"),n("NOT_LOGGED_IN")),e&&(o.token=e);var r=o._decoded.exp-Math.floor(Date.now()/1e3);r<0&&n("NOT_LOGGED_IN"),r<300?(console.log("expires less than 300"),console.log(o.config),o.http.post(o.config.apiProtocol+o.config.api+"/token/"+o._token,{}).subscribe((function(e){console.log("reissue response"),console.log(e),e.token?(o.token=e.token,t(o._token)):(console.log("error"),console.log(e),n("NOT_LOGGED_IN"))}),(function(e){console.log(e),n("NOT_LOGGED_IN")}))):(console.log("token ok"),t(o._token))}))},Object.defineProperty(e.prototype,"token",{get:function(){return this._token},set:function(e){this._token=e,localStorage.setItem(this._lsKey,e),this._decoded=a.decodeToken(this._token)},enumerable:!1,configurable:!0}),e.prototype.deleteToken=function(){localStorage.removeItem(this._lsKey)},e.prototype.isLoggedIn=function(){return!!this.token},Object.defineProperty(e.prototype,"profile",{get:function(){return this._decoded},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"admin",{get:function(){return 1==this.profile.permission},enumerable:!1,configurable:!0}),e.prototype.logout=function(){var e=this;return new Promise((function(o,t){e.http.post(e.config.apiProtocol+e.config.api+"/logout/"+e._token,{}).subscribe((function(t){e._token=null,localStorage.removeItem(e._lsKey),o(e.config.login)}),(function(e){t(e)}))}))},e}();function u(e,o){e.transitionService;var t=e.stateService,n=o.get(l),r=o.get(c);t.defaultErrorHandler((function(e){console.log("Default error handler - Membrs Angular Helper"),console.log(e),"NOT_LOGGED_IN"==e.detail&&(r.deleteToken(),window.location.href=n.login),"INSUFFICIENT_PERMISSIONS"==e.detail&&t.go(n.defaultState)}))}function g(){return console.log("retrieve from ls"),localStorage.getItem("membrs")}c.ɵprov=o.ɵɵdefineInjectable({factory:function(){return new c(o.ɵɵinject(n.HttpClient),o.ɵɵinject(l))},token:c,providedIn:"root"}),c.decorators=[{type:o.Injectable,args:[{providedIn:"root"}]}],c.ctorParameters=function(){return[{type:n.HttpClient},{type:void 0,decorators:[{type:o.Inject,args:[l]}]}]};var f={token:"reissue",deps:[i.Transition,i.UIRouter,c,l],resolveFn:v},p={token:"reissue",deps:[i.Transition,i.UIRouter,c,l],resolveFn:m},d={name:"reissue",url:"/reissue?token",views:{},resolve:[p]};function m(e,o,t,n){return new Promise((function(r,i){console.log("reissue promise resolve"),console.log(e.params().token),t.reissue(e.params().token).then((function(e){console.log("redirect to default state"),o.stateService.go(n.defaultState,{},{inherit:!1}),i()})).catch((function(e){console.log("error in reissue resolve"),console.log(e),i(e)}))}))}function v(e,o,t,n){return new Promise((function(e,o){console.log("validate promise resolve"),t.reissue().then((function(o){e()})).catch((function(e){console.log("error in validateResolveFn"),console.log(e),o(e)}))}))}var h=[d],k=function(){function e(){}return e.forRoot=function(o){var n=i.UIRouterModule.forChild({states:h,config:u}).providers;return n.push(t.JwtModule.forRoot({config:{tokenGetter:g,allowedDomains:[]}}).providers),n.push(c),n.push({provide:l,useValue:o}),{ngModule:e,providers:n}},e}();k.decorators=[{type:o.NgModule,args:[{imports:[r.CommonModule,n.HttpClientModule,t.JwtModule]}]}];var y=function(){function e(){}return e.prototype.intercept=function(e,o){return e=e.clone({setHeaders:{Authorization:localStorage.getItem("membrs")}}),o.handle(e).pipe(s.finalize((function(){})))},e}();y.decorators=[{type:o.Injectable}],y.ctorParameters=function(){return[]},e.MembrsModule=k,e.MembrsService=c,e.STATES=h,e.TokenInterceptor=y,e.jwtOptionsFactory=function(e){return console.log("jwt options factory"),console.log(e),{tokenGetter:function(){return console.log("token getter",localStorage.getItem("membrs")),localStorage.getItem("membrs")},allowedDomains:[e.api]}},e.reissueResolve=p,e.reissueResolveFn=m,e.reissueState=d,e.retrieveToken=g,e.validateResolve=f,e.validateResolveFn=v,e.ɵa=l,Object.defineProperty(e,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=nakedcreativity-membrs-angular-helper.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../projects/membrs/src/lib/membrs.service.ts","../../../projects/membrs/src/lib/membrs.component.ts","../../../projects/membrs/src/lib/membrs.module.ts"],"names":["Injectable","args","providedIn","MembrsComponent","prototype","ngOnInit","Component","selector","template","NgModule","declarations","imports","exports"],"mappings":"oXAOE,4HALDA,EAAAA,WAAUC,KAAA,CAAC,CACVC,WAAY,kECWZ,SAAAC,YAEAA,EAAAC,UAAAC,SAAA,sCAdDC,EAAAA,UAASL,KAAA,CAAC,CACTM,SAAU,aACVC,SAAU,+FCOZ,iCANCC,EAAAA,SAAQR,KAAA,CAAC,CACRS,aAAc,CAACP,GACfQ,QAAS,GAETC,QAAS,CAACT","sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MembrsService {\n\n constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-membrs',\n template: `\n <p>\n membrs works!\n </p>\n `,\n styles: [\n ]\n})\nexport class MembrsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { MembrsComponent } from './membrs.component';\n\n\n\n@NgModule({\n declarations: [MembrsComponent],\n imports: [\n ],\n exports: [MembrsComponent]\n})\nexport class MembrsModule { }\n"]}
1
+ {"version":3,"sources":["../../../projects/membrs/src/lib/config.service.ts","../../../projects/membrs/src/lib/membrs.service.ts","../../../projects/membrs/src/lib/router.config.ts","../../../projects/membrs/src/lib/token.ts","../../../projects/membrs/src/lib/membrs.module.ts","../../../projects/membrs/src/lib/auth.interceptor.ts"],"names":["MembrsConfigService","InjectionToken","jwtService","JwtHelperService","MembrsService","http","config","this","_lsKey","console","log","localStorage","getItem","token","prototype","reissue","_this","Promise","resolve","reject","_token","reissueIn","_decoded","exp","Math","floor","Date","now","post","apiProtocol","api","subscribe","response","error","Object","defineProperty","setItem","decodeToken","deleteToken","removeItem","isLoggedIn","profile","permission","logout","login","routerConfigFn","router","injector","transitionService","stateService","get","membrsService","defaultErrorHandler","detail","window","location","href","go","defaultState","retrieveToken","Injectable","args","providedIn","HttpClient","Inject","validateResolve","deps","Transition","UIRouter","resolveFn","validateResolveFn","reissueResolve","reissueResolveFn","reissueState","name","url","views","transition","membrsConfig","params","then","inherit","catch","STATES","MembrsModule","forRoot","moduleProviders","UIRouterModule","forChild","states","providers","push","JwtModule","tokenGetter","allowedDomains","provide","useValue","ngModule","NgModule","imports","CommonModule","HttpClientModule","TokenInterceptor","intercept","request","next","clone","setHeaders","Authorization","handle","pipe","finalize"],"mappings":"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","sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { MembrsConfig } from './config.interface';\n\n/**\n * This is not a real service, but it looks like it from the outside.\n * It's just an InjectionTToken used to import the config object, provided from the outside\n */\nexport const MembrsConfigService = new InjectionToken<MembrsConfig>(\"MembrsConfig\");\n","import { Injectable, Inject } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { HttpClient } from '@angular/common/http'\nimport { MembrsConfigService } from './config.service'\nimport { MembrsConfig } from './config.interface';\nconst jwtService = new JwtHelperService()\n\n@Injectable({\n providedIn: 'root'\n})\n\n\nexport class MembrsService {\n\n _token: string;\n _decoded: any;\n _lsKey: string = 'membrs';\n\n constructor(private http: HttpClient, @Inject(MembrsConfigService) private config: MembrsConfig) {\n\n console.log('membrs constructor')\n // if the token exists in local storage, retrieve it back to the service\n if(localStorage.getItem(this._lsKey)){\n this.token = localStorage.getItem(this._lsKey)\n }\n \n }\n\n reissue(token?:string){\n\n return new Promise((resolve, reject)=>{\n\n if(!token && !this._token){\n console.log('reject, not logged in')\n reject('NOT_LOGGED_IN')\n }\n\n if(token)\n this.token = token\n\n // check stored token has not expired, or needs to be reissued soon\n var reissueIn = this._decoded.exp - Math.floor(Date.now()/1000)\n \n // token has expired\n if(reissueIn < 0){\n reject('NOT_LOGGED_IN')\n }\n \n // token expiring soon\n if(reissueIn < 300){\n \n console.log('expires less than 300')\n \n \n console.log(this.config)\n\n this.http.post(this.config.apiProtocol + this.config.api+'/token/'+this._token, {}).subscribe((response:any)=>{\n console.log('reissue response')\n console.log(response)\n if(response.token){\n this.token = response.token\n resolve(this._token)\n }else {\n console.log('error')\n console.log(response)\n reject('NOT_LOGGED_IN')\n }\n \n }, error=>{\n console.log(error)\n reject('NOT_LOGGED_IN')\n })\n\n }else {\n console.log('token ok')\n resolve(this._token)\n }\n \n })\n \n }\n\n set token(token){\n this._token = token\n localStorage.setItem(this._lsKey, token)\n this._decoded = jwtService.decodeToken(this._token)\n }\n\n deleteToken(){\n localStorage.removeItem(this._lsKey)\n }\n\n isLoggedIn(){\n return this.token ? true : false\n }\n\n get profile(){\n return this._decoded\n }\n\n get token(){\n return this._token\n }\n\n get admin (){\n return this.profile.permission == 1\n }\n\n logout(){\n return new Promise((resolve, reject)=>{\n this.http.post(this.config.apiProtocol+this.config.api+'/logout/'+this._token, {}).subscribe((response:any)=>{\n this._token = null;\n localStorage.removeItem(this._lsKey)\n resolve(this.config.login)\n //this.router.stateService.go('dashboard')\n }, error=>{\n reject(error)\n })\n })\n \n }\n\n\n}\n","import { UIRouter } from '@uirouter/core';\nimport { MembrsConfigService } from './config.service'\nimport { MembrsConfig } from './config.interface';\nimport { Injector } from '@angular/core';\nimport { MembrsService } from './membrs.service';\n\nexport function routerConfigFn(router: UIRouter, injector: Injector) {\n\n const transitionService = router.transitionService;\n const stateService = router.stateService\n const config:MembrsConfig = injector.get(MembrsConfigService)\n const membrsService = injector.get(MembrsService)\n\n \tstateService.defaultErrorHandler(function(error) {\n\t\t \n\t\tconsole.log('Default error handler - Membrs Angular Helper')\n\t\tconsole.log(error)\n\t\t\t\n\t\tif(error.detail == 'NOT_LOGGED_IN'){\n\t\t\tmembrsService.deleteToken()\n\t\t\twindow.location.href = config.login;\n\t\t}\n\n\t\tif(error.detail == 'INSUFFICIENT_PERMISSIONS')\n\t\t\tstateService.go(config.defaultState)\n\n\t});\n\t\n}","export function retrieveToken() {\n console.log('retrieve from ls')\n return localStorage.getItem('membrs');\n}","import { NgModule, ModuleWithProviders, Injector } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MembrsService } from './membrs.service';\nimport { JwtModule, JWT_OPTIONS } from \"@auth0/angular-jwt\";\nimport { HttpClientModule } from \"@angular/common/http\";\nimport { UIRouterModule } from '@uirouter/angular'\n\nimport { Ng2StateDeclaration } from '@uirouter/angular';\nimport { Transition, UIRouter } from '@uirouter/angular'\n\nimport { routerConfigFn } from './router.config';\nimport { MembrsConfig } from './config.interface';\nimport { MembrsConfigService } from './config.service';\nimport { retrieveToken } from './token';\n\nexport const validateResolve = {\n token: 'reissue',\n deps: [ Transition, UIRouter, MembrsService, MembrsConfigService ],\n resolveFn: validateResolveFn\n}\n\nexport const reissueResolve = {\n token: 'reissue',\n deps: [ Transition, UIRouter, MembrsService, MembrsConfigService ],\n resolveFn: reissueResolveFn\n}\n\nexport const reissueState:Ng2StateDeclaration = {\n\tname: 'reissue', \n\turl: '/reissue?token',\n\tviews: { },\n\tresolve: [\n reissueResolve\n\t]\n}\n\nexport function reissueResolveFn(transition, router, membrsService, membrsConfig:MembrsConfig) {\n \n //console.log(membrsService)\n return new Promise((resolve, reject) => {\n console.log('reissue promise resolve')\n console.log(transition.params().token)\n membrsService.reissue(transition.params().token).then((response)=>{\n console.log('redirect to default state')\n router.stateService.go(membrsConfig.defaultState, {}, {inherit:false})\n reject()\n }).catch(error=>{\n console.log('error in reissue resolve')\n console.log(error)\n //window.location.href = environment.login\n reject(error)\n })\n\n\t})\n}\n\nexport function validateResolveFn(transition, router, membrsService, membrsConfig:MembrsConfig) {\n \n //console.log(membrsService)\n return new Promise((resolve, reject) => {\n console.log('validate promise resolve')\n \n membrsService.reissue().then((response)=>{\n resolve()\n }).catch(error=>{\n console.log('error in validateResolveFn')\n console.log(error)\n //window.location.href = membrsConfig.login\n reject(error)\n })\n\n})\n}\n\nexport function jwtOptionsFactory(config) {\n console.log('jwt options factory')\n console.log(config)\n return {\n tokenGetter: () => {\n console.log('token getter', localStorage.getItem('membrs'))\n return localStorage.getItem('membrs');\n },\n allowedDomains: [config.api]\n }\n}\n\n\n/** The top level state(s) */\nexport const STATES = [\n reissueState\n]\n\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n JwtModule\n // JwtModule.forRoot({\n // config: {\n // tokenGetter: retrieveToken\n // }\n // })\n // UIRouterModule.forChild({\n // states: STATES,\n // config: routerConfigFn,\n // }),\n // JwtModule.forRoot({})\n ]\n})\n\n\n\nexport class MembrsModule { \n static forRoot(config: MembrsConfig): ModuleWithProviders<MembrsModule> {\n\n\n const moduleProviders = UIRouterModule.forChild({\n states: STATES,\n config: routerConfigFn\n }).providers\n\n moduleProviders.push(JwtModule.forRoot({\n config: {\n tokenGetter: retrieveToken,\n allowedDomains: []\n }\n }).providers)\n \n moduleProviders.push(MembrsService)\n moduleProviders.push({provide: MembrsConfigService,useValue: config});\n \n \n return {\n ngModule: MembrsModule, \n providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]\n };\n \n }\n\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\n//import { NgBusyService } from '@nakedcreativity/ng-busy';\nimport { finalize } from 'rxjs/operators';\n\n\n@Injectable()\nexport class TokenInterceptor implements HttpInterceptor {\n constructor() {}\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n \n //this.busyService.busy()\n request = request.clone({\n setHeaders: {\n Authorization: localStorage.getItem('membrs')\n }\n });\n return next.handle(request).pipe(finalize(()=>{\n //this.busyService.finished()\n }));\n }\n}"]}
@@ -0,0 +1,22 @@
1
+ import { Injectable } from '@angular/core';
2
+ //import { NgBusyService } from '@nakedcreativity/ng-busy';
3
+ import { finalize } from 'rxjs/operators';
4
+ export class TokenInterceptor {
5
+ constructor() { }
6
+ intercept(request, next) {
7
+ //this.busyService.busy()
8
+ request = request.clone({
9
+ setHeaders: {
10
+ Authorization: localStorage.getItem('membrs')
11
+ }
12
+ });
13
+ return next.handle(request).pipe(finalize(() => {
14
+ //this.busyService.finished()
15
+ }));
16
+ }
17
+ }
18
+ TokenInterceptor.decorators = [
19
+ { type: Injectable }
20
+ ];
21
+ TokenInterceptor.ctorParameters = () => [];
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVEzQywyREFBMkQ7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTFDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsZ0JBQWUsQ0FBQztJQUNoQixTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUVwRCx5QkFBeUI7UUFDekIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDdEIsVUFBVSxFQUFFO2dCQUNWLGFBQWEsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQzthQUM5QztTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUUsRUFBRTtZQUM1Qyw2QkFBNkI7UUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7OztZQWRGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEludGVyY2VwdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbi8vaW1wb3J0IHsgTmdCdXN5U2VydmljZSB9IGZyb20gJ0BuYWtlZGNyZWF0aXZpdHkvbmctYnVzeSc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVG9rZW5JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIFxuICAgIC8vdGhpcy5idXN5U2VydmljZS5idXN5KClcbiAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XG4gICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZW1icnMnKVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKGZpbmFsaXplKCgpPT57XG4gICAgICAvL3RoaXMuYnVzeVNlcnZpY2UuZmluaXNoZWQoKVxuICAgIH0pKTtcbiAgfVxufSJdfQ==
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL2NvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTWVtYnJzQ29uZmlnIHtcbiAgICBncmFwaFFMOiBzdHJpbmcsXG4gICAgYXBpOiBzdHJpbmcsXG4gICAgYXBpUHJvdG9jb2w6IHN0cmluZyxcbiAgICBsb2dpbjogc3RyaW5nLFxuICAgIGRlZmF1bHRTdGF0ZTogc3RyaW5nXG59Il19
@@ -0,0 +1,7 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * This is not a real service, but it looks like it from the outside.
4
+ * It's just an InjectionTToken used to import the config object, provided from the outside
5
+ */
6
+ export const MembrsConfigService = new InjectionToken("MembrsConfig");
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZW1icnMvc3JjL2xpYi9jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFlLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lbWJyc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnLmludGVyZmFjZSc7XG5cbi8qKlxuICogVGhpcyBpcyBub3QgYSByZWFsIHNlcnZpY2UsIGJ1dCBpdCBsb29rcyBsaWtlIGl0IGZyb20gdGhlIG91dHNpZGUuXG4gKiBJdCdzIGp1c3QgYW4gSW5qZWN0aW9uVFRva2VuIHVzZWQgdG8gaW1wb3J0IHRoZSBjb25maWcgb2JqZWN0LCBwcm92aWRlZCBmcm9tIHRoZSBvdXRzaWRlXG4gKi9cbmV4cG9ydCBjb25zdCBNZW1icnNDb25maWdTZXJ2aWNlID0gbmV3IEluamVjdGlvblRva2VuPE1lbWJyc0NvbmZpZz4oXCJNZW1icnNDb25maWdcIik7XG4iXX0=
@@ -1,12 +1,114 @@
1
1
  import { NgModule } from '@angular/core';
2
- import { MembrsComponent } from './membrs.component';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MembrsService } from './membrs.service';
4
+ import { JwtModule } from "@auth0/angular-jwt";
5
+ import { HttpClientModule } from "@angular/common/http";
6
+ import { UIRouterModule } from '@uirouter/angular';
7
+ import { Transition, UIRouter } from '@uirouter/angular';
8
+ import { routerConfigFn } from './router.config';
9
+ import { MembrsConfigService } from './config.service';
10
+ import { retrieveToken } from './token';
11
+ export const validateResolve = {
12
+ token: 'reissue',
13
+ deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
14
+ resolveFn: validateResolveFn
15
+ };
16
+ export const reissueResolve = {
17
+ token: 'reissue',
18
+ deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
19
+ resolveFn: reissueResolveFn
20
+ };
21
+ export const reissueState = {
22
+ name: 'reissue',
23
+ url: '/reissue?token',
24
+ views: {},
25
+ resolve: [
26
+ reissueResolve
27
+ ]
28
+ };
29
+ export function reissueResolveFn(transition, router, membrsService, membrsConfig) {
30
+ //console.log(membrsService)
31
+ return new Promise((resolve, reject) => {
32
+ console.log('reissue promise resolve');
33
+ console.log(transition.params().token);
34
+ membrsService.reissue(transition.params().token).then((response) => {
35
+ console.log('redirect to default state');
36
+ router.stateService.go(membrsConfig.defaultState, {}, { inherit: false });
37
+ reject();
38
+ }).catch(error => {
39
+ console.log('error in reissue resolve');
40
+ console.log(error);
41
+ //window.location.href = environment.login
42
+ reject(error);
43
+ });
44
+ });
45
+ }
46
+ export function validateResolveFn(transition, router, membrsService, membrsConfig) {
47
+ //console.log(membrsService)
48
+ return new Promise((resolve, reject) => {
49
+ console.log('validate promise resolve');
50
+ membrsService.reissue().then((response) => {
51
+ resolve();
52
+ }).catch(error => {
53
+ console.log('error in validateResolveFn');
54
+ console.log(error);
55
+ //window.location.href = membrsConfig.login
56
+ reject(error);
57
+ });
58
+ });
59
+ }
60
+ export function jwtOptionsFactory(config) {
61
+ console.log('jwt options factory');
62
+ console.log(config);
63
+ return {
64
+ tokenGetter: () => {
65
+ console.log('token getter', localStorage.getItem('membrs'));
66
+ return localStorage.getItem('membrs');
67
+ },
68
+ allowedDomains: [config.api]
69
+ };
70
+ }
71
+ /** The top level state(s) */
72
+ export const STATES = [
73
+ reissueState
74
+ ];
3
75
  export class MembrsModule {
76
+ static forRoot(config) {
77
+ const moduleProviders = UIRouterModule.forChild({
78
+ states: STATES,
79
+ config: routerConfigFn
80
+ }).providers;
81
+ moduleProviders.push(JwtModule.forRoot({
82
+ config: {
83
+ tokenGetter: retrieveToken,
84
+ allowedDomains: []
85
+ }
86
+ }).providers);
87
+ moduleProviders.push(MembrsService);
88
+ moduleProviders.push({ provide: MembrsConfigService, useValue: config });
89
+ return {
90
+ ngModule: MembrsModule,
91
+ providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]
92
+ };
93
+ }
4
94
  }
5
95
  MembrsModule.decorators = [
6
96
  { type: NgModule, args: [{
7
- declarations: [MembrsComponent],
8
- imports: [],
9
- exports: [MembrsComponent]
97
+ imports: [
98
+ CommonModule,
99
+ HttpClientModule,
100
+ JwtModule
101
+ // JwtModule.forRoot({
102
+ // config: {
103
+ // tokenGetter: retrieveToken
104
+ // }
105
+ // })
106
+ // UIRouterModule.forChild({
107
+ // states: STATES,
108
+ // config: routerConfigFn,
109
+ // }),
110
+ // JwtModule.forRoot({})
111
+ ]
10
112
  },] }
11
113
  ];
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL21lbWJycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFVckQsTUFBTSxPQUFPLFlBQVk7OztZQU54QixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUMvQixPQUFPLEVBQUUsRUFDUjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7YUFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVtYnJzQ29tcG9uZW50IH0gZnJvbSAnLi9tZW1icnMuY29tcG9uZW50JztcblxuXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW01lbWJyc0NvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgXSxcbiAgZXhwb3J0czogW01lbWJyc0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTWVtYnJzTW9kdWxlIHsgfVxuIl19
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL21lbWJycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBR2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzNCLEtBQUssRUFBRSxTQUFTO0lBQ2hCLElBQUksRUFBRSxDQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixDQUFFO0lBQ2xFLFNBQVMsRUFBRSxpQkFBaUI7Q0FDL0IsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM1QixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsQ0FBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsQ0FBRTtJQUNsRSxTQUFTLEVBQUUsZ0JBQWdCO0NBQzVCLENBQUE7QUFFRCxNQUFNLENBQUMsTUFB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ZSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7WUFDOUMsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsY0FBYztTQUN2QixDQUFDLENBQUMsU0FBUyxDQUFBO1FBRVosZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3JDLE1BQU0sRUFBRTtnQkFDTixXQUFXLEVBQUUsYUFBYTtnQkFDMUIsY0FBYyxFQUFFLEVBQUU7YUFDbkI7U0FDRixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFYixlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ25DLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFHdEUsT0FBTztZQUNMLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFNBQVMsRUFBRSxlQUFlLENBQUMsbURBQW1EO1NBQy9FLENBQUM7SUFFSixDQUFDOzs7WUE3Q0YsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLGdCQUFnQjtvQkFDaEIsU0FBUztvQkFDVCxzQkFBc0I7b0JBQ3RCLGNBQWM7b0JBQ2QsaUNBQWlDO29CQUNqQyxNQUFNO29CQUNOLEtBQUs7b0JBQ0wsNEJBQTRCO29CQUM1QixvQkFBb0I7b0JBQ3BCLDRCQUE0QjtvQkFDNUIsTUFBTTtvQkFDTix3QkFBd0I7aUJBQ3pCO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZW1icnNTZXJ2aWNlIH0gZnJvbSAnLi9tZW1icnMuc2VydmljZSc7XG5pbXBvcnQgeyBKd3RNb2R1bGUsIEpXVF9PUFRJT05TIH0gZnJvbSBcIkBhdXRoMC9hbmd1bGFyLWp3dFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgVUlSb3V0ZXJNb2R1bGUgfSBmcm9tICdAdWlyb3V0ZXIvYW5ndWxhcidcblxuaW1wb3J0IHsgTmcyU3RhdGVEZWNsYXJhdGlvbiB9IGZyb20gJ0B1aXJvdXRlci9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zaXRpb24sIFVJUm91dGVyIH0gZnJvbSAnQHVpcm91dGVyL2FuZ3VsYXInXG5cbmltcG9ydCB7IHJvdXRlckNvbmZpZ0ZuIH0gZnJvbSAnLi9yb3V0ZXIuY29uZmlnJztcbmltcG9ydCB7IE1lbWJyc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNZW1icnNDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyByZXRyaWV2ZVRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVJlc29sdmUgPSB7XG4gICAgdG9rZW46ICdyZWlzc3VlJyxcbiAgICBkZXBzOiBbIFRyYW5zaXRpb24sIFVJUm91dGVyLCBNZW1icnNTZXJ2aWNlLCBNZW1icnNDb25maWdTZXJ2aWNlIF0sXG4gICAgcmVzb2x2ZUZuOiB2YWxpZGF0ZVJlc29sdmVGblxufVxuXG5leHBvcnQgY29uc3QgcmVpc3N1ZVJlc29sdmUgPSB7XG4gIHRva2VuOiAncmVpc3N1ZScsXG4gIGRlcHM6IFsgVHJhbnNpdGlvbiwgVUlSb3V0ZXIsIE1lbWJyc1NlcnZpY2UsIE1lbWJyc0NvbmZpZ1NlcnZpY2UgXSxcbiAgcmVzb2x2ZUZuOiByZWlzc3VlUmVzb2x2ZUZuXG59XG5cbmV4cG9ydCBjb25zdCByZWlzc3VlU3RhdGU6TmcyU3RhdGVEZWNsYXJhdGlvbiA9IHtcblx0bmFtZTogJ3JlaXNzdWUnLCBcblx0dXJsOiAnL3JlaXNzdWU/dG9rZW4nLFxuXHR2aWV3czogeyB9LFxuXHRyZXNvbHZlOiBbXG4gICAgcmVpc3N1ZVJlc29sdmVcblx0XVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVpc3N1ZVJlc29sdmVGbih0cmFuc2l0aW9uLCByb3V0ZXIsIG1lbWJyc1NlcnZpY2UsIG1lbWJyc0NvbmZpZzpNZW1icnNDb25maWcpIHtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKG1lbWJyc1NlcnZpY2UpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdyZWlzc3VlIHByb21pc2UgcmVzb2x2ZScpXG4gICAgICBjb25zb2xlLmxvZyh0cmFuc2l0aW9uLnBhcmFtcygpLnRva2VuKVxuICAgICAgbWVtYnJzU2VydmljZS5yZWlzc3VlKHRyYW5zaXRpb24ucGFyYW1zKCkudG9rZW4pLnRoZW4oKHJlc3BvbnNlKT0+e1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdyZWRpcmVjdCB0byBkZWZhdWx0IHN0YXRlJylcbiAgICAgICAgICByb3V0ZXIuc3RhdGVTZXJ2aWNlLmdvKG1lbWJyc0NvbmZpZy5kZWZhdWx0U3RhdGUsIHt9LCB7aW5oZXJpdDpmYWxzZX0pXG4gICAgICAgICAgcmVqZWN0KClcbiAgICAgIH0pLmNhdGNoKGVycm9yPT57XG4gICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGluIHJlaXNzdWUgcmVzb2x2ZScpXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICAgICAgLy93aW5kb3cubG9jYXRpb24uaHJlZiA9IGVudmlyb25tZW50LmxvZ2luXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgfSlcblxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSZXNvbHZlRm4odHJhbnNpdGlvbiwgcm91dGVyLCBtZW1icnNTZXJ2aWNlLCBtZW1icnNDb25maWc6TWVtYnJzQ29uZmlnKSB7XG4gIFxuICAvL2NvbnNvbGUubG9nKG1lbWJyc1NlcnZpY2UpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ3ZhbGlkYXRlIHByb21pc2UgcmVzb2x2ZScpXG4gICAgXG4gICAgbWVtYnJzU2VydmljZS5yZWlzc3VlKCkudGhlbigocmVzcG9uc2UpPT57XG4gICAgICAgIHJlc29sdmUoKVxuICAgIH0pLmNhdGNoKGVycm9yPT57XG4gICAgICBjb25zb2xlLmxvZygnZXJyb3IgaW4gdmFsaWRhdGVSZXNvbHZlRm4nKVxuICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICAgIC8vd2luZG93LmxvY2F0aW9uLmhyZWYgPSBtZW1icnNDb25maWcubG9naW5cbiAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgIH0pXG5cbn0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqd3RPcHRpb25zRmFjdG9yeShjb25maWcpIHtcbiAgY29uc29sZS5sb2coJ2p3dCBvcHRpb25zIGZhY3RvcnknKVxuICBjb25zb2xlLmxvZyhjb25maWcpXG4gIHJldHVybiB7XG4gICAgdG9rZW5HZXR0ZXI6ICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCd0b2tlbiBnZXR0ZXInLCAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lbWJycycpKVxuICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZW1icnMnKTtcbiAgICB9LFxuICAgIGFsbG93ZWREb21haW5zOiBbY29uZmlnLmFwaV1cbiAgfVxufVxuXG5cbi8qKiBUaGUgdG9wIGxldmVsIHN0YXRlKHMpICovXG5leHBvcnQgY29uc3QgU1RBVEVTID0gW1xuICAgIHJlaXNzdWVTdGF0ZVxuXVxuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICBKd3RNb2R1bGVcbiAgICAvLyBKd3RNb2R1bGUuZm9yUm9vdCh7XG4gICAgLy8gICBjb25maWc6IHtcbiAgICAvLyAgICAgdG9rZW5HZXR0ZXI6IHJldHJpZXZlVG9rZW5cbiAgICAvLyAgIH1cbiAgICAvLyB9KVxuICAgIC8vIFVJUm91dGVyTW9kdWxlLmZvckNoaWxkKHtcbiAgICAvLyAgIHN0YXRlczogU1RBVEVTLFxuICAgIC8vICAgY29uZmlnOiByb3V0ZXJDb25maWdGbixcbiAgICAvLyB9KSxcbiAgICAvLyBKd3RNb2R1bGUuZm9yUm9vdCh7fSlcbiAgXVxufSlcblxuXG5cbmV4cG9ydCBjbGFzcyBNZW1icnNNb2R1bGUgeyBcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBNZW1icnNDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE1lbWJyc01vZHVsZT4ge1xuXG5cbiAgICBjb25zdCBtb2R1bGVQcm92aWRlcnMgPSBVSVJvdXRlck1vZHVsZS5mb3JDaGlsZCh7XG4gICAgICBzdGF0ZXM6IFNUQVRFUyxcbiAgICAgIGNvbmZpZzogcm91dGVyQ29uZmlnRm5cbiAgICB9KS5wcm92aWRlcnNcblxuICAgIG1vZHVsZVByb3ZpZGVycy5wdXNoKEp3dE1vZHVsZS5mb3JSb290KHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICB0b2tlbkdldHRlcjogcmV0cmlldmVUb2tlbixcbiAgICAgICAgYWxsb3dlZERvbWFpbnM6IFtdXG4gICAgICB9XG4gICAgfSkucHJvdmlkZXJzKVxuICAgICAgXG4gICAgbW9kdWxlUHJvdmlkZXJzLnB1c2goTWVtYnJzU2VydmljZSlcbiAgICBtb2R1bGVQcm92aWRlcnMucHVzaCh7cHJvdmlkZTogTWVtYnJzQ29uZmlnU2VydmljZSx1c2VWYWx1ZTogY29uZmlnfSk7XG4gICAgXG4gICBcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IE1lbWJyc01vZHVsZSwgXG4gICAgICBwcm92aWRlcnM6IG1vZHVsZVByb3ZpZGVycyAvL1t7cHJvdmlkZTogTWVtYnJzQ29uZmlnU2VydmljZSx1c2VWYWx1ZTogY29uZmlnfV1cbiAgICB9O1xuICAgIFxuICB9XG5cbn1cbiJdfQ==