@nakedcreativity/membrs-angular-helper 0.1.4 → 0.1.7
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.
- package/esm2022/lib/auth.interceptor.mjs +66 -0
- package/esm2022/lib/membrs.module.mjs +155 -0
- package/esm2022/lib/membrs.service.mjs +128 -0
- package/{fesm2020 → fesm2022}/nakedcreativity-membrs-angular-helper.mjs +129 -57
- package/fesm2022/nakedcreativity-membrs-angular-helper.mjs.map +1 -0
- package/lib/auth.interceptor.d.ts +9 -3
- package/lib/membrs.service.d.ts +3 -0
- package/package.json +8 -14
- package/esm2020/lib/auth.interceptor.mjs +0 -25
- package/esm2020/lib/membrs.module.mjs +0 -150
- package/esm2020/lib/membrs.service.mjs +0 -101
- package/fesm2015/nakedcreativity-membrs-angular-helper.mjs +0 -299
- package/fesm2015/nakedcreativity-membrs-angular-helper.mjs.map +0 -1
- package/fesm2020/nakedcreativity-membrs-angular-helper.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/config.service.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/router.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/token.mjs +0 -0
- /package/{esm2020 → esm2022}/nakedcreativity-membrs-angular-helper.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken,
|
|
2
|
+
import { InjectionToken, Inject, Injectable, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1$1 from '@auth0/angular-jwt';
|
|
3
4
|
import { JwtHelperService, JwtModule } from '@auth0/angular-jwt';
|
|
4
|
-
import { BehaviorSubject } from 'rxjs';
|
|
5
|
+
import { BehaviorSubject, from, throwError } from 'rxjs';
|
|
5
6
|
import * as i1 from '@angular/common/http';
|
|
6
7
|
import { HttpClientModule } from '@angular/common/http';
|
|
7
8
|
import { CommonModule } from '@angular/common';
|
|
9
|
+
import * as i3 from '@uirouter/angular';
|
|
8
10
|
import { Transition, UIRouter, UIRouterModule } from '@uirouter/angular';
|
|
9
|
-
import { finalize } from 'rxjs/operators';
|
|
11
|
+
import { switchMap, catchError, finalize, tap } from 'rxjs/operators';
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
14
|
* This is not a real service, but it looks like it from the outside.
|
|
@@ -16,11 +18,16 @@ const MembrsConfigService = new InjectionToken("MembrsConfig");
|
|
|
16
18
|
|
|
17
19
|
const jwtService = new JwtHelperService();
|
|
18
20
|
class MembrsService {
|
|
21
|
+
http;
|
|
22
|
+
config;
|
|
23
|
+
_token;
|
|
24
|
+
_decoded;
|
|
25
|
+
decodedReady = new BehaviorSubject(null);
|
|
26
|
+
_lsKey = 'membrs';
|
|
27
|
+
_loggedInObservable = new BehaviorSubject(false);
|
|
19
28
|
constructor(http, config) {
|
|
20
29
|
this.http = http;
|
|
21
30
|
this.config = config;
|
|
22
|
-
this._lsKey = 'membrs';
|
|
23
|
-
this._loggedInObservable = new BehaviorSubject(false);
|
|
24
31
|
// console.log('membrs constructor')
|
|
25
32
|
// if the token exists in local storage, retrieve it back to the service
|
|
26
33
|
if (localStorage.getItem(this._lsKey)) {
|
|
@@ -28,41 +35,52 @@ class MembrsService {
|
|
|
28
35
|
}
|
|
29
36
|
}
|
|
30
37
|
reissue(token) {
|
|
38
|
+
console.log('Reissuing token...'); // Log function entry
|
|
31
39
|
return new Promise((resolve, reject) => {
|
|
32
40
|
if (!token && !this._token) {
|
|
41
|
+
console.log('No token provided and no token found.'); // Log missing token
|
|
33
42
|
reject('NOT_LOGGED_IN');
|
|
34
43
|
}
|
|
35
|
-
if (token)
|
|
44
|
+
if (token) {
|
|
45
|
+
console.log(`Token provided: ${token}`); // Log provided token
|
|
36
46
|
this.token = token;
|
|
47
|
+
}
|
|
37
48
|
// check stored token has not expired, or needs to be reissued soon
|
|
38
49
|
var reissueIn = this._decoded.exp - Math.floor(Date.now() / 1000);
|
|
39
50
|
// token has expired
|
|
40
51
|
if (reissueIn < 0) {
|
|
52
|
+
console.log('Token has expired.'); // Log expired token
|
|
41
53
|
reject('NOT_LOGGED_IN');
|
|
42
54
|
}
|
|
43
55
|
// token expiring soon
|
|
44
56
|
if (reissueIn < 300) {
|
|
57
|
+
console.log('Token expiring soon. Reissuing...'); // Log imminent expiration
|
|
45
58
|
this.http.post(this.config.apiProtocol + this.config.api + '/token/' + this._token, {}).subscribe((response) => {
|
|
46
59
|
if (response.token) {
|
|
47
60
|
this.token = response.token;
|
|
48
61
|
this._loggedInObservable.next(true);
|
|
62
|
+
console.log('Token successfully reissued.'); // Log success
|
|
49
63
|
resolve(this._token);
|
|
50
64
|
}
|
|
51
65
|
else {
|
|
66
|
+
console.log('Failed to reissue token.'); // Log failure
|
|
52
67
|
reject('NOT_LOGGED_IN');
|
|
53
68
|
}
|
|
54
|
-
}, error => {
|
|
69
|
+
}, (error) => {
|
|
70
|
+
console.log('Error reissuing token:', error); // Log error details
|
|
55
71
|
reject('NOT_LOGGED_IN');
|
|
56
72
|
});
|
|
57
73
|
}
|
|
58
74
|
else {
|
|
59
75
|
this._loggedInObservable.next(true);
|
|
76
|
+
console.log('Token is valid. No need to reissue.'); // Log valid token
|
|
60
77
|
resolve(this._token);
|
|
61
78
|
}
|
|
62
79
|
});
|
|
63
80
|
}
|
|
64
81
|
set token(token) {
|
|
65
82
|
this._token = token;
|
|
83
|
+
console.log('Token set.');
|
|
66
84
|
localStorage.setItem(this._lsKey, token);
|
|
67
85
|
this._decoded = jwtService.decodeToken(this._token);
|
|
68
86
|
}
|
|
@@ -75,6 +93,14 @@ class MembrsService {
|
|
|
75
93
|
get profile() {
|
|
76
94
|
return this._decoded;
|
|
77
95
|
}
|
|
96
|
+
setProfile(decodedData) {
|
|
97
|
+
this._decoded = decodedData;
|
|
98
|
+
this.decodedReady.next(decodedData); // Emit the new value when profile is set
|
|
99
|
+
console.log(this.decodedReady);
|
|
100
|
+
}
|
|
101
|
+
get decodedReady$() {
|
|
102
|
+
return this.decodedReady.asObservable();
|
|
103
|
+
}
|
|
78
104
|
get token() {
|
|
79
105
|
return this._token;
|
|
80
106
|
}
|
|
@@ -90,24 +116,27 @@ class MembrsService {
|
|
|
90
116
|
this._token = null;
|
|
91
117
|
localStorage.removeItem(this._lsKey);
|
|
92
118
|
resolve(this.config.login);
|
|
93
|
-
//this.router.stateService.go('dashboard')
|
|
94
119
|
}, error => {
|
|
95
|
-
|
|
120
|
+
// If the API call fails (e.g. token already invalid/expired), still clear local state
|
|
121
|
+
console.warn('Logout API call failed, clearing local token anyway', error);
|
|
122
|
+
this._token = null;
|
|
123
|
+
localStorage.removeItem(this._lsKey);
|
|
124
|
+
resolve(this.config.login);
|
|
96
125
|
});
|
|
97
126
|
});
|
|
98
127
|
}
|
|
128
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
129
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsService, providedIn: 'root' });
|
|
99
130
|
}
|
|
100
|
-
|
|
101
|
-
MembrsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsService, providedIn: 'root' });
|
|
102
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsService, decorators: [{
|
|
131
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsService, decorators: [{
|
|
103
132
|
type: Injectable,
|
|
104
133
|
args: [{
|
|
105
134
|
providedIn: 'root'
|
|
106
135
|
}]
|
|
107
|
-
}], ctorParameters:
|
|
136
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
108
137
|
type: Inject,
|
|
109
138
|
args: [MembrsConfigService]
|
|
110
|
-
}] }]
|
|
139
|
+
}] }] });
|
|
111
140
|
|
|
112
141
|
function routerConfigFn(router, injector) {
|
|
113
142
|
const transitionService = router.transitionService;
|
|
@@ -175,6 +204,11 @@ function validateResolveFn(transition, router, membrsService, membrsConfig) {
|
|
|
175
204
|
return new Promise((resolve, reject) => {
|
|
176
205
|
// console.log('validate promise resolve')
|
|
177
206
|
membrsService.reissue().then((response) => {
|
|
207
|
+
if (localStorage.getItem('redirectUrlAfterLogin')) {
|
|
208
|
+
const redirect = localStorage.getItem('redirectUrlAfterLogin');
|
|
209
|
+
localStorage.removeItem('redirectUrlAfterLogin');
|
|
210
|
+
window.location.pathname = redirect;
|
|
211
|
+
}
|
|
178
212
|
resolve(null);
|
|
179
213
|
}).catch(error => {
|
|
180
214
|
localStorage.setItem('redirectUrlAfterLogin', window.location.pathname);
|
|
@@ -217,37 +251,37 @@ class MembrsModule {
|
|
|
217
251
|
providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]
|
|
218
252
|
};
|
|
219
253
|
}
|
|
254
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
255
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: MembrsModule, imports: [CommonModule,
|
|
256
|
+
HttpClientModule,
|
|
257
|
+
JwtModule
|
|
258
|
+
// JwtModule.forRoot({
|
|
259
|
+
// config: {
|
|
260
|
+
// tokenGetter: retrieveToken
|
|
261
|
+
// }
|
|
262
|
+
// })
|
|
263
|
+
// UIRouterModule.forChild({
|
|
264
|
+
// states: STATES,
|
|
265
|
+
// config: routerConfigFn,
|
|
266
|
+
// }),
|
|
267
|
+
// JwtModule.forRoot({})
|
|
268
|
+
] });
|
|
269
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsModule, imports: [CommonModule,
|
|
270
|
+
HttpClientModule,
|
|
271
|
+
JwtModule
|
|
272
|
+
// JwtModule.forRoot({
|
|
273
|
+
// config: {
|
|
274
|
+
// tokenGetter: retrieveToken
|
|
275
|
+
// }
|
|
276
|
+
// })
|
|
277
|
+
// UIRouterModule.forChild({
|
|
278
|
+
// states: STATES,
|
|
279
|
+
// config: routerConfigFn,
|
|
280
|
+
// }),
|
|
281
|
+
// JwtModule.forRoot({})
|
|
282
|
+
] });
|
|
220
283
|
}
|
|
221
|
-
|
|
222
|
-
MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, imports: [CommonModule,
|
|
223
|
-
HttpClientModule,
|
|
224
|
-
JwtModule
|
|
225
|
-
// JwtModule.forRoot({
|
|
226
|
-
// config: {
|
|
227
|
-
// tokenGetter: retrieveToken
|
|
228
|
-
// }
|
|
229
|
-
// })
|
|
230
|
-
// UIRouterModule.forChild({
|
|
231
|
-
// states: STATES,
|
|
232
|
-
// config: routerConfigFn,
|
|
233
|
-
// }),
|
|
234
|
-
// JwtModule.forRoot({})
|
|
235
|
-
] });
|
|
236
|
-
MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, imports: [CommonModule,
|
|
237
|
-
HttpClientModule,
|
|
238
|
-
JwtModule
|
|
239
|
-
// JwtModule.forRoot({
|
|
240
|
-
// config: {
|
|
241
|
-
// tokenGetter: retrieveToken
|
|
242
|
-
// }
|
|
243
|
-
// })
|
|
244
|
-
// UIRouterModule.forChild({
|
|
245
|
-
// states: STATES,
|
|
246
|
-
// config: routerConfigFn,
|
|
247
|
-
// }),
|
|
248
|
-
// JwtModule.forRoot({})
|
|
249
|
-
] });
|
|
250
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, decorators: [{
|
|
284
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsModule, decorators: [{
|
|
251
285
|
type: NgModule,
|
|
252
286
|
args: [{
|
|
253
287
|
imports: [
|
|
@@ -269,25 +303,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
269
303
|
}] });
|
|
270
304
|
|
|
271
305
|
class TokenInterceptor {
|
|
272
|
-
|
|
306
|
+
jwtHelper;
|
|
307
|
+
membrsService;
|
|
308
|
+
stateService;
|
|
309
|
+
constructor(jwtHelper, membrsService, stateService) {
|
|
310
|
+
this.jwtHelper = jwtHelper;
|
|
311
|
+
this.membrsService = membrsService;
|
|
312
|
+
this.stateService = stateService;
|
|
313
|
+
}
|
|
273
314
|
intercept(request, next) {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
315
|
+
const token = localStorage.getItem("membrs");
|
|
316
|
+
if (token && this.jwtHelper.isTokenExpired(token)) {
|
|
317
|
+
console.log("Token expired. Attempting to reissue.");
|
|
318
|
+
return from(this.membrsService.reissue()).pipe(switchMap(() => {
|
|
319
|
+
const refreshedToken = localStorage.getItem("membrs");
|
|
320
|
+
if (refreshedToken && !this.jwtHelper.isTokenExpired(refreshedToken)) {
|
|
321
|
+
console.log("Token successfully reissued.");
|
|
322
|
+
request = request.clone({
|
|
323
|
+
setHeaders: {
|
|
324
|
+
Authorization: refreshedToken,
|
|
325
|
+
},
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
return next.handle(request);
|
|
329
|
+
}), catchError((err) => {
|
|
330
|
+
console.warn("Token refresh failed. Logging out.");
|
|
331
|
+
this.membrsService.logout();
|
|
332
|
+
this.stateService.go("");
|
|
333
|
+
return throwError(() => err);
|
|
334
|
+
}), finalize(() => {
|
|
335
|
+
// this.busyService.finished()
|
|
336
|
+
}));
|
|
337
|
+
}
|
|
338
|
+
if (token && !this.jwtHelper.isTokenExpired(token)) {
|
|
339
|
+
request = request.clone({
|
|
340
|
+
setHeaders: {
|
|
341
|
+
Authorization: token,
|
|
342
|
+
},
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
return next.handle(request).pipe(tap((event) => {
|
|
346
|
+
// If this is an HttpResponse, check for x-new-token header
|
|
347
|
+
if (event && event.type === 4 && event.headers) {
|
|
348
|
+
const newToken = event.headers.get('x-new-token');
|
|
349
|
+
if (newToken) {
|
|
350
|
+
localStorage.setItem('membrs', newToken);
|
|
351
|
+
}
|
|
279
352
|
}
|
|
280
|
-
})
|
|
281
|
-
|
|
282
|
-
//this.busyService.finished()
|
|
353
|
+
}), finalize(() => {
|
|
354
|
+
// this.busyService.finished()
|
|
283
355
|
}));
|
|
284
356
|
}
|
|
357
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1$1.JwtHelperService }, { token: MembrsService }, { token: i3.StateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
358
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TokenInterceptor });
|
|
285
359
|
}
|
|
286
|
-
|
|
287
|
-
TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TokenInterceptor });
|
|
288
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TokenInterceptor, decorators: [{
|
|
360
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TokenInterceptor, decorators: [{
|
|
289
361
|
type: Injectable
|
|
290
|
-
}], ctorParameters:
|
|
362
|
+
}], ctorParameters: () => [{ type: i1$1.JwtHelperService }, { type: MembrsService }, { type: i3.StateService }] });
|
|
291
363
|
|
|
292
364
|
/**
|
|
293
365
|
* Generated bundle index. Do not edit.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nakedcreativity-membrs-angular-helper.mjs","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';\nimport { BehaviorSubject } from 'rxjs';\nconst jwtService = new JwtHelperService()\n\n@Injectable({\n providedIn: 'root'\n})\n\n\nexport class MembrsService {\n\n _token: string;\n _decoded: any;\n\n public decodedReady = new BehaviorSubject<any>(null);\n\n _lsKey: string = 'membrs';\n _loggedInObservable: BehaviorSubject<Boolean> = new BehaviorSubject(false)\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 console.log('Reissuing token...'); // Log function entry\n \n return new Promise((resolve, reject) => {\n if (!token && !this._token) {\n console.log('No token provided and no token found.'); // Log missing token\n reject('NOT_LOGGED_IN');\n }\n \n if (token) {\n console.log(`Token provided: ${token}`); // Log provided token\n this.token = token;\n }\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 console.log('Token has expired.'); // Log expired token\n reject('NOT_LOGGED_IN');\n }\n \n // token expiring soon\n if (reissueIn < 300) {\n console.log('Token expiring soon. Reissuing...'); // Log imminent expiration\n this.http.post(this.config.apiProtocol + this.config.api + '/token/' + this._token, {}).subscribe(\n (response: any) => {\n if (response.token) {\n this.token = response.token;\n this._loggedInObservable.next(true);\n console.log('Token successfully reissued.'); // Log success\n resolve(this._token);\n } else {\n console.log('Failed to reissue token.'); // Log failure\n reject('NOT_LOGGED_IN');\n }\n },\n (error) => {\n console.log('Error reissuing token:', error); // Log error details\n reject('NOT_LOGGED_IN');\n }\n );\n } else {\n this._loggedInObservable.next(true);\n console.log('Token is valid. No need to reissue.'); // Log valid token\n resolve(this._token);\n }\n });\n }\n \n\n set token(token){\n this._token = token\n console.log('Token set.');\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 setProfile(decodedData) {\n this._decoded = decodedData;\n this.decodedReady.next(decodedData); // Emit the new value when profile is set\n console.log(this.decodedReady);\n }\n\n get decodedReady$() {\n return this.decodedReady.asObservable();\n }\n\n get token(){\n return this._token\n }\n\n get admin (){\n return this.profile.permission == 1\n }\n\n get isLoggedInObservable(){\n return this._loggedInObservable\n }\n \n logout(){\n return new Promise((resolve, reject)=>{\n this.http.delete(this.config.apiProtocol + this.config.api + '/token/' + this._token).subscribe((response:any)=>{\n this._token = null;\n localStorage.removeItem(this._lsKey);\n resolve(this.config.login);\n }, error => {\n // If the API call fails (e.g. token already invalid/expired), still clear local state\n console.warn('Logout API call failed, clearing local token anyway', error);\n this._token = null;\n localStorage.removeItem(this._lsKey);\n resolve(this.config.login);\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 \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 if(localStorage.getItem('redirectUrlAfterLogin')){\n const redirect = localStorage.getItem('redirectUrlAfterLogin')\n localStorage.removeItem('redirectUrlAfterLogin')\n window.location.pathname = redirect\n }else {\n router.stateService.go(membrsConfig.defaultState, {}, {inherit:false})\n }\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 if(localStorage.getItem('redirectUrlAfterLogin')){\n const redirect = localStorage.getItem('redirectUrlAfterLogin')\n localStorage.removeItem('redirectUrlAfterLogin')\n window.location.pathname = redirect\n }\n resolve(null)\n }).catch(error=>{\n localStorage.setItem('redirectUrlAfterLogin', window.location.pathname)\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 { JwtHelperService } from \"@auth0/angular-jwt\";\nimport { Injectable } from \"@angular/core\";\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from \"@angular/common/http\";\nimport { Observable, from, throwError } from \"rxjs\";\nimport { switchMap, catchError, finalize, tap } from \"rxjs/operators\";\nimport { MembrsService } from \"./membrs.service\";\nimport { StateService } from \"@uirouter/angular\";\n\n@Injectable()\nexport class TokenInterceptor implements HttpInterceptor {\n constructor(private jwtHelper: JwtHelperService, private membrsService: MembrsService, private stateService: StateService) {}\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const token = localStorage.getItem(\"membrs\");\n\n if (token && this.jwtHelper.isTokenExpired(token)) {\n console.log(\"Token expired. Attempting to reissue.\");\n return from(this.membrsService.reissue()).pipe(\n switchMap(() => {\n const refreshedToken = localStorage.getItem(\"membrs\");\n if (refreshedToken && !this.jwtHelper.isTokenExpired(refreshedToken)) {\n console.log(\"Token successfully reissued.\");\n request = request.clone({\n setHeaders: {\n Authorization: refreshedToken,\n },\n });\n }\n return next.handle(request);\n }),\n catchError((err) => {\n console.warn(\"Token refresh failed. Logging out.\");\n this.membrsService.logout();\n this.stateService.go(\"\");\n return throwError(() => err);\n }),\n finalize(() => {\n // this.busyService.finished()\n })\n );\n }\n\n if (token && !this.jwtHelper.isTokenExpired(token)) {\n request = request.clone({\n setHeaders: {\n Authorization: token,\n },\n });\n }\n\n return next.handle(request).pipe(\n tap((event) => {\n // If this is an HttpResponse, check for x-new-token header\n if (event && event.type === 4 && event.headers) {\n const newToken = event.headers.get('x-new-token');\n if (newToken) {\n localStorage.setItem('membrs', newToken);\n }\n }\n }),\n finalize(() => {\n // this.busyService.finished()\n })\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.MembrsService"],"mappings":"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"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { JwtHelperService } from "@auth0/angular-jwt";
|
|
2
|
+
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from "@angular/common/http";
|
|
3
|
+
import { Observable } from "rxjs";
|
|
4
|
+
import { MembrsService } from "./membrs.service";
|
|
5
|
+
import { StateService } from "@uirouter/angular";
|
|
3
6
|
import * as i0 from "@angular/core";
|
|
4
7
|
export declare class TokenInterceptor implements HttpInterceptor {
|
|
5
|
-
|
|
8
|
+
private jwtHelper;
|
|
9
|
+
private membrsService;
|
|
10
|
+
private stateService;
|
|
11
|
+
constructor(jwtHelper: JwtHelperService, membrsService: MembrsService, stateService: StateService);
|
|
6
12
|
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
|
|
7
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<TokenInterceptor, never>;
|
|
8
14
|
static ɵprov: i0.ɵɵInjectableDeclaration<TokenInterceptor>;
|
package/lib/membrs.service.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export declare class MembrsService {
|
|
|
7
7
|
private config;
|
|
8
8
|
_token: string;
|
|
9
9
|
_decoded: any;
|
|
10
|
+
decodedReady: BehaviorSubject<any>;
|
|
10
11
|
_lsKey: string;
|
|
11
12
|
_loggedInObservable: BehaviorSubject<Boolean>;
|
|
12
13
|
constructor(http: HttpClient, config: MembrsConfig);
|
|
@@ -15,6 +16,8 @@ export declare class MembrsService {
|
|
|
15
16
|
deleteToken(): void;
|
|
16
17
|
isLoggedIn(): boolean;
|
|
17
18
|
get profile(): any;
|
|
19
|
+
setProfile(decodedData: any): void;
|
|
20
|
+
get decodedReady$(): import("rxjs").Observable<any>;
|
|
18
21
|
get token(): string;
|
|
19
22
|
get admin(): boolean;
|
|
20
23
|
get isLoggedInObservable(): BehaviorSubject<Boolean>;
|
package/package.json
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nakedcreativity/membrs-angular-helper",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "
|
|
6
|
-
"@angular/core": "
|
|
7
|
-
"@uirouter/angular": "
|
|
5
|
+
"@angular/common": ">=15.0.0",
|
|
6
|
+
"@angular/core": ">=15.0.0",
|
|
7
|
+
"@uirouter/angular": ">=11.0.0",
|
|
8
8
|
"@auth0/angular-jwt": "^5.x"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"tslib": "^2.0.0"
|
|
12
12
|
},
|
|
13
|
-
"module": "
|
|
14
|
-
"es2020": "fesm2020/nakedcreativity-membrs-angular-helper.mjs",
|
|
15
|
-
"esm2020": "esm2020/nakedcreativity-membrs-angular-helper.mjs",
|
|
16
|
-
"fesm2020": "fesm2020/nakedcreativity-membrs-angular-helper.mjs",
|
|
17
|
-
"fesm2015": "fesm2015/nakedcreativity-membrs-angular-helper.mjs",
|
|
13
|
+
"module": "fesm2022/nakedcreativity-membrs-angular-helper.mjs",
|
|
18
14
|
"typings": "index.d.ts",
|
|
19
15
|
"exports": {
|
|
20
16
|
"./package.json": {
|
|
@@ -22,11 +18,9 @@
|
|
|
22
18
|
},
|
|
23
19
|
".": {
|
|
24
20
|
"types": "./index.d.ts",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"node": "./fesm2015/nakedcreativity-membrs-angular-helper.mjs",
|
|
29
|
-
"default": "./fesm2020/nakedcreativity-membrs-angular-helper.mjs"
|
|
21
|
+
"esm2022": "./esm2022/nakedcreativity-membrs-angular-helper.mjs",
|
|
22
|
+
"esm": "./esm2022/nakedcreativity-membrs-angular-helper.mjs",
|
|
23
|
+
"default": "./fesm2022/nakedcreativity-membrs-angular-helper.mjs"
|
|
30
24
|
}
|
|
31
25
|
},
|
|
32
26
|
"sideEffects": false
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
//import { NgBusyService } from '@nakedcreativity/ng-busy';
|
|
3
|
-
import { finalize } from 'rxjs/operators';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class TokenInterceptor {
|
|
6
|
-
constructor() { }
|
|
7
|
-
intercept(request, next) {
|
|
8
|
-
console.log('intercept request', localStorage.getItem('membrs'));
|
|
9
|
-
//this.busyService.busy()
|
|
10
|
-
request = request.clone({
|
|
11
|
-
setHeaders: {
|
|
12
|
-
Authorization: localStorage.getItem('membrs')
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
return next.handle(request).pipe(finalize(() => {
|
|
16
|
-
//this.busyService.finished()
|
|
17
|
-
}));
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TokenInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
21
|
-
TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TokenInterceptor });
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TokenInterceptor, decorators: [{
|
|
23
|
-
type: Injectable
|
|
24
|
-
}], ctorParameters: function () { return []; } });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVEzQywyREFBMkQ7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUkxQyxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLGdCQUFlLENBQUM7SUFDaEIsU0FBUyxDQUFDLE9BQXlCLEVBQUUsSUFBaUI7UUFFcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDaEUseUJBQXlCO1FBQ3pCLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3RCLFVBQVUsRUFBRTtnQkFDVixhQUFhLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7YUFDOUM7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFFLEVBQUU7WUFDNUMsNkJBQTZCO1FBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDOzs2R0FkVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBJbnRlcmNlcHRvclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG4vL2ltcG9ydCB7IE5nQnVzeVNlcnZpY2UgfSBmcm9tICdAbmFrZWRjcmVhdGl2aXR5L25nLWJ1c3knO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICBcbiAgICBjb25zb2xlLmxvZygnaW50ZXJjZXB0IHJlcXVlc3QnLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVtYnJzJykpXG4gICAgLy90aGlzLmJ1c3lTZXJ2aWNlLmJ1c3koKVxuICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lbWJycycpXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoZmluYWxpemUoKCk9PntcbiAgICAgIC8vdGhpcy5idXN5U2VydmljZS5maW5pc2hlZCgpXG4gICAgfSkpO1xuICB9XG59Il19
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
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
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
export const validateResolve = {
|
|
13
|
-
token: 'reissue',
|
|
14
|
-
deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
|
|
15
|
-
resolveFn: validateResolveFn
|
|
16
|
-
};
|
|
17
|
-
export const reissueResolve = {
|
|
18
|
-
token: 'reissue',
|
|
19
|
-
deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
|
|
20
|
-
resolveFn: reissueResolveFn
|
|
21
|
-
};
|
|
22
|
-
export const reissueState = {
|
|
23
|
-
name: 'reissue',
|
|
24
|
-
url: '/reissue?token',
|
|
25
|
-
views: {},
|
|
26
|
-
resolve: [
|
|
27
|
-
reissueResolve
|
|
28
|
-
]
|
|
29
|
-
};
|
|
30
|
-
export function reissueResolveFn(transition, router, membrsService, membrsConfig) {
|
|
31
|
-
//console.log(membrsService)
|
|
32
|
-
return new Promise((resolve, reject) => {
|
|
33
|
-
// console.log('reissue promise resolve')
|
|
34
|
-
// console.log(transition.params().token)
|
|
35
|
-
membrsService.reissue(transition.params().token).then((response) => {
|
|
36
|
-
if (localStorage.getItem('redirectUrlAfterLogin')) {
|
|
37
|
-
const redirect = localStorage.getItem('redirectUrlAfterLogin');
|
|
38
|
-
localStorage.removeItem('redirectUrlAfterLogin');
|
|
39
|
-
window.location.pathname = redirect;
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
router.stateService.go(membrsConfig.defaultState, {}, { inherit: false });
|
|
43
|
-
}
|
|
44
|
-
reject();
|
|
45
|
-
}).catch(error => {
|
|
46
|
-
//console.log('error in reissue resolve')
|
|
47
|
-
//console.log(error)
|
|
48
|
-
//window.location.href = environment.login
|
|
49
|
-
reject(error);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
export function validateResolveFn(transition, router, membrsService, membrsConfig) {
|
|
54
|
-
//console.log(membrsService)
|
|
55
|
-
return new Promise((resolve, reject) => {
|
|
56
|
-
// console.log('validate promise resolve')
|
|
57
|
-
membrsService.reissue().then((response) => {
|
|
58
|
-
resolve(null);
|
|
59
|
-
}).catch(error => {
|
|
60
|
-
localStorage.setItem('redirectUrlAfterLogin', window.location.pathname);
|
|
61
|
-
window.location.href = membrsConfig.login;
|
|
62
|
-
reject(error);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
export function jwtOptionsFactory(config) {
|
|
67
|
-
// console.log('jwt options factory')
|
|
68
|
-
// console.log(config)
|
|
69
|
-
return {
|
|
70
|
-
tokenGetter: () => {
|
|
71
|
-
console.log('token getter', localStorage.getItem('membrs'));
|
|
72
|
-
return localStorage.getItem('membrs');
|
|
73
|
-
},
|
|
74
|
-
allowedDomains: [config.api]
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
/** The top level state(s) */
|
|
78
|
-
export const STATES = [
|
|
79
|
-
reissueState
|
|
80
|
-
];
|
|
81
|
-
export class MembrsModule {
|
|
82
|
-
static forRoot(config) {
|
|
83
|
-
const moduleProviders = UIRouterModule.forChild({
|
|
84
|
-
states: STATES,
|
|
85
|
-
config: routerConfigFn
|
|
86
|
-
}).providers;
|
|
87
|
-
moduleProviders.push(JwtModule.forRoot({
|
|
88
|
-
config: {
|
|
89
|
-
tokenGetter: retrieveToken,
|
|
90
|
-
allowedDomains: []
|
|
91
|
-
}
|
|
92
|
-
}).providers);
|
|
93
|
-
moduleProviders.push(MembrsService);
|
|
94
|
-
moduleProviders.push({ provide: MembrsConfigService, useValue: config });
|
|
95
|
-
return {
|
|
96
|
-
ngModule: MembrsModule,
|
|
97
|
-
providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
MembrsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
102
|
-
MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, imports: [CommonModule,
|
|
103
|
-
HttpClientModule,
|
|
104
|
-
JwtModule
|
|
105
|
-
// JwtModule.forRoot({
|
|
106
|
-
// config: {
|
|
107
|
-
// tokenGetter: retrieveToken
|
|
108
|
-
// }
|
|
109
|
-
// })
|
|
110
|
-
// UIRouterModule.forChild({
|
|
111
|
-
// states: STATES,
|
|
112
|
-
// config: routerConfigFn,
|
|
113
|
-
// }),
|
|
114
|
-
// JwtModule.forRoot({})
|
|
115
|
-
] });
|
|
116
|
-
MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, imports: [CommonModule,
|
|
117
|
-
HttpClientModule,
|
|
118
|
-
JwtModule
|
|
119
|
-
// JwtModule.forRoot({
|
|
120
|
-
// config: {
|
|
121
|
-
// tokenGetter: retrieveToken
|
|
122
|
-
// }
|
|
123
|
-
// })
|
|
124
|
-
// UIRouterModule.forChild({
|
|
125
|
-
// states: STATES,
|
|
126
|
-
// config: routerConfigFn,
|
|
127
|
-
// }),
|
|
128
|
-
// JwtModule.forRoot({})
|
|
129
|
-
] });
|
|
130
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, decorators: [{
|
|
131
|
-
type: NgModule,
|
|
132
|
-
args: [{
|
|
133
|
-
imports: [
|
|
134
|
-
CommonModule,
|
|
135
|
-
HttpClientModule,
|
|
136
|
-
JwtModule
|
|
137
|
-
// JwtModule.forRoot({
|
|
138
|
-
// config: {
|
|
139
|
-
// tokenGetter: retrieveToken
|
|
140
|
-
// }
|
|
141
|
-
// })
|
|
142
|
-
// UIRouterModule.forChild({
|
|
143
|
-
// states: STATES,
|
|
144
|
-
// config: routerConfigFn,
|
|
145
|
-
// }),
|
|
146
|
-
// JwtModule.forRoot({})
|
|
147
|
-
]
|
|
148
|
-
}]
|
|
149
|
-
}] });
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL21lbWJycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBR2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBRXhDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUMzQixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsQ0FBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsQ0FBRTtJQUNsRSxTQUFTLEVBQUUsaUJBQWlCO0NBQy9CLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsSUFBSSxFQUFFLENBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUU7SUFDbEUsU0FBUyxFQUFFLGdCQUFnQjtDQUM1QixDQUFBO0FBRUQsTUFBTSxDQUFDLE1B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d0JBQ04sS0FBSzt3QkFDTCw0QkFBNEI7d0JBQzVCLG9CQUFvQjt3QkFDcEIsNEJBQTRCO3dCQUM1QixNQUFNO3dCQUNOLHdCQUF3QjtxQkFDekI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZW1icnNTZXJ2aWNlIH0gZnJvbSAnLi9tZW1icnMuc2VydmljZSc7XG5pbXBvcnQgeyBKd3RNb2R1bGUsIEpXVF9PUFRJT05TIH0gZnJvbSBcIkBhdXRoMC9hbmd1bGFyLWp3dFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgVUlSb3V0ZXJNb2R1bGUgfSBmcm9tICdAdWlyb3V0ZXIvYW5ndWxhcidcblxuaW1wb3J0IHsgTmcyU3RhdGVEZWNsYXJhdGlvbiB9IGZyb20gJ0B1aXJvdXRlci9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zaXRpb24sIFVJUm91dGVyIH0gZnJvbSAnQHVpcm91dGVyL2FuZ3VsYXInXG5cbmltcG9ydCB7IHJvdXRlckNvbmZpZ0ZuIH0gZnJvbSAnLi9yb3V0ZXIuY29uZmlnJztcbmltcG9ydCB7IE1lbWJyc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNZW1icnNDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyByZXRyaWV2ZVRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVJlc29sdmUgPSB7XG4gICAgdG9rZW46ICdyZWlzc3VlJyxcbiAgICBkZXBzOiBbIFRyYW5zaXRpb24sIFVJUm91dGVyLCBNZW1icnNTZXJ2aWNlLCBNZW1icnNDb25maWdTZXJ2aWNlIF0sXG4gICAgcmVzb2x2ZUZuOiB2YWxpZGF0ZVJlc29sdmVGblxufVxuXG5leHBvcnQgY29uc3QgcmVpc3N1ZVJlc29sdmUgPSB7XG4gIHRva2VuOiAncmVpc3N1ZScsXG4gIGRlcHM6IFsgVHJhbnNpdGlvbiwgVUlSb3V0ZXIsIE1lbWJyc1NlcnZpY2UsIE1lbWJyc0NvbmZpZ1NlcnZpY2UgXSxcbiAgcmVzb2x2ZUZuOiByZWlzc3VlUmVzb2x2ZUZuXG59XG5cbmV4cG9ydCBjb25zdCByZWlzc3VlU3RhdGU6TmcyU3RhdGVEZWNsYXJhdGlvbiA9IHtcblx0bmFtZTogJ3JlaXNzdWUnLCBcblx0dXJsOiAnL3JlaXNzdWU/dG9rZW4nLFxuXHR2aWV3czogeyB9LFxuXHRyZXNvbHZlOiBbXG4gICAgcmVpc3N1ZVJlc29sdmVcblx0XVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVpc3N1ZVJlc29sdmVGbih0cmFuc2l0aW9uLCByb3V0ZXIsIG1lbWJyc1NlcnZpY2UsIG1lbWJyc0NvbmZpZzpNZW1icnNDb25maWcpIHtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKG1lbWJyc1NlcnZpY2UpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdyZWlzc3VlIHByb21pc2UgcmVzb2x2ZScpXG4gICAgICAvLyBjb25zb2xlLmxvZyh0cmFuc2l0aW9uLnBhcmFtcygpLnRva2VuKVxuICAgICAgbWVtYnJzU2VydmljZS5yZWlzc3VlKHRyYW5zaXRpb24ucGFyYW1zKCkudG9rZW4pLnRoZW4oKHJlc3BvbnNlKT0+e1xuICAgICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZWRpcmVjdFVybEFmdGVyTG9naW4nKSl7XG4gICAgICAgICAgICBjb25zdCByZWRpcmVjdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZWRpcmVjdFVybEFmdGVyTG9naW4nKVxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3JlZGlyZWN0VXJsQWZ0ZXJMb2dpbicpXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPSByZWRpcmVjdFxuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5zdGF0ZVNlcnZpY2UuZ28obWVtYnJzQ29uZmlnLmRlZmF1bHRTdGF0ZSwge30sIHtpbmhlcml0OmZhbHNlfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVqZWN0KClcbiAgICAgIH0pLmNhdGNoKGVycm9yPT57XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnZXJyb3IgaW4gcmVpc3N1ZSByZXNvbHZlJylcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGVycm9yKVxuICAgICAgICAgIC8vd2luZG93LmxvY2F0aW9uLmhyZWYgPSBlbnZpcm9ubWVudC5sb2dpblxuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0pXG5cblx0fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUmVzb2x2ZUZuKHRyYW5zaXRpb24sIHJvdXRlciwgbWVtYnJzU2VydmljZSwgbWVtYnJzQ29uZmlnOk1lbWJyc0NvbmZpZykge1xuICBcbiAgLy9jb25zb2xlLmxvZyhtZW1icnNTZXJ2aWNlKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZSBwcm9taXNlIHJlc29sdmUnKVxuICAgIFxuICAgIG1lbWJyc1NlcnZpY2UucmVpc3N1ZSgpLnRoZW4oKHJlc3BvbnNlKT0+e1xuICAgICAgcmVzb2x2ZShudWxsKVxuICAgIH0pLmNhdGNoKGVycm9yPT57XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncmVkaXJlY3RVcmxBZnRlckxvZ2luJywgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKVxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBtZW1icnNDb25maWcubG9naW5cbiAgICAgIHJlamVjdChlcnJvcilcbiAgICB9KVxuXG59KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gand0T3B0aW9uc0ZhY3RvcnkoY29uZmlnKSB7XG4gIC8vIGNvbnNvbGUubG9nKCdqd3Qgb3B0aW9ucyBmYWN0b3J5JylcbiAgLy8gY29uc29sZS5sb2coY29uZmlnKVxuICByZXR1cm4ge1xuICAgIHRva2VuR2V0dGVyOiAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygndG9rZW4gZ2V0dGVyJywgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZW1icnMnKSlcbiAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVtYnJzJyk7XG4gICAgfSxcbiAgICBhbGxvd2VkRG9tYWluczogW2NvbmZpZy5hcGldXG4gIH1cbn1cblxuXG4vKiogVGhlIHRvcCBsZXZlbCBzdGF0ZShzKSAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFUyA9IFtcbiAgICByZWlzc3VlU3RhdGVcbl1cblxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gICAgSnd0TW9kdWxlXG4gICAgLy8gSnd0TW9kdWxlLmZvclJvb3Qoe1xuICAgIC8vICAgY29uZmlnOiB7XG4gICAgLy8gICAgIHRva2VuR2V0dGVyOiByZXRyaWV2ZVRva2VuXG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgICAvLyBVSVJvdXRlck1vZHVsZS5mb3JDaGlsZCh7XG4gICAgLy8gICBzdGF0ZXM6IFNUQVRFUyxcbiAgICAvLyAgIGNvbmZpZzogcm91dGVyQ29uZmlnRm4sXG4gICAgLy8gfSksXG4gICAgLy8gSnd0TW9kdWxlLmZvclJvb3Qoe30pXG4gIF1cbn0pXG5cblxuXG5leHBvcnQgY2xhc3MgTWVtYnJzTW9kdWxlIHsgXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogTWVtYnJzQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxNZW1icnNNb2R1bGU+IHtcblxuXG4gICAgY29uc3QgbW9kdWxlUHJvdmlkZXJzID0gVUlSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoe1xuICAgICAgc3RhdGVzOiBTVEFURVMsXG4gICAgICBjb25maWc6IHJvdXRlckNvbmZpZ0ZuXG4gICAgfSkucHJvdmlkZXJzXG5cbiAgICBtb2R1bGVQcm92aWRlcnMucHVzaChKd3RNb2R1bGUuZm9yUm9vdCh7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgdG9rZW5HZXR0ZXI6IHJldHJpZXZlVG9rZW4sXG4gICAgICAgIGFsbG93ZWREb21haW5zOiBbXVxuICAgICAgfVxuICAgIH0pLnByb3ZpZGVycylcbiAgICAgIFxuICAgIG1vZHVsZVByb3ZpZGVycy5wdXNoKE1lbWJyc1NlcnZpY2UpXG4gICAgbW9kdWxlUHJvdmlkZXJzLnB1c2goe3Byb3ZpZGU6IE1lbWJyc0NvbmZpZ1NlcnZpY2UsdXNlVmFsdWU6IGNvbmZpZ30pO1xuICAgIFxuICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBNZW1icnNNb2R1bGUsIFxuICAgICAgcHJvdmlkZXJzOiBtb2R1bGVQcm92aWRlcnMgLy9be3Byb3ZpZGU6IE1lbWJyc0NvbmZpZ1NlcnZpY2UsdXNlVmFsdWU6IGNvbmZpZ31dXG4gICAgfTtcbiAgICBcbiAgfVxuXG59XG4iXX0=
|