@nakedcreativity/membrs-angular-helper 0.1.4 → 0.1.5

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,25 +1,63 @@
1
- import { Injectable } from '@angular/core';
2
- //import { NgBusyService } from '@nakedcreativity/ng-busy';
3
- import { finalize } from 'rxjs/operators';
1
+ import { Injectable } from "@angular/core";
2
+ import { from, throwError } from "rxjs";
3
+ import { switchMap, catchError, finalize, tap } from "rxjs/operators";
4
4
  import * as i0 from "@angular/core";
5
+ import * as i1 from "@auth0/angular-jwt";
6
+ import * as i2 from "./membrs.service";
7
+ import * as i3 from "@uirouter/angular";
5
8
  export class TokenInterceptor {
6
- constructor() { }
9
+ constructor(jwtHelper, membrsService, stateService) {
10
+ this.jwtHelper = jwtHelper;
11
+ this.membrsService = membrsService;
12
+ this.stateService = stateService;
13
+ }
7
14
  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')
15
+ const token = localStorage.getItem("membrs");
16
+ if (token && this.jwtHelper.isTokenExpired(token)) {
17
+ console.log("Token expired. Attempting to reissue.");
18
+ return from(this.membrsService.reissue()).pipe(switchMap(() => {
19
+ const refreshedToken = localStorage.getItem("membrs");
20
+ if (refreshedToken && !this.jwtHelper.isTokenExpired(refreshedToken)) {
21
+ console.log("Token successfully reissued.");
22
+ request = request.clone({
23
+ setHeaders: {
24
+ Authorization: refreshedToken,
25
+ },
26
+ });
27
+ }
28
+ return next.handle(request);
29
+ }), catchError((err) => {
30
+ console.warn("Token refresh failed. Logging out.");
31
+ this.membrsService.logout();
32
+ this.stateService.go("");
33
+ return throwError(() => err);
34
+ }), finalize(() => {
35
+ // this.busyService.finished()
36
+ }));
37
+ }
38
+ if (token && !this.jwtHelper.isTokenExpired(token)) {
39
+ request = request.clone({
40
+ setHeaders: {
41
+ Authorization: token,
42
+ },
43
+ });
44
+ }
45
+ return next.handle(request).pipe(tap((event) => {
46
+ // If this is an HttpResponse, check for x-new-token header
47
+ if (event && event.type === 4 && event.headers) {
48
+ const newToken = event.headers.get('x-new-token');
49
+ if (newToken) {
50
+ localStorage.setItem('membrs', newToken);
51
+ }
13
52
  }
14
- });
15
- return next.handle(request).pipe(finalize(() => {
16
- //this.busyService.finished()
53
+ }), finalize(() => {
54
+ // this.busyService.finished()
17
55
  }));
18
56
  }
19
57
  }
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: [{
58
+ TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1.JwtHelperService }, { token: i2.MembrsService }, { token: i3.StateService }], target: i0.ɵɵFactoryTarget.Injectable });
59
+ TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor });
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, decorators: [{
23
61
  type: Injectable
24
- }], ctorParameters: function () { return []; } });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVEzQywyREFBMkQ7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUkxQyxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLGdCQUFlLENBQUM7SUFDaEIsU0FBUyxDQUFDLE9BQXlCLEVBQUUsSUFBaUI7UUFFcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDaEUseUJBQXlCO1FBQ3pCLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3RCLFVBQVUsRUFBRTtnQkFDVixhQUFhLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7YUFDOUM7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFFLEVBQUU7WUFDNUMsNkJBQTZCO1FBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDOzs2R0FkVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBJbnRlcmNlcHRvclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG4vL2ltcG9ydCB7IE5nQnVzeVNlcnZpY2UgfSBmcm9tICdAbmFrZWRjcmVhdGl2aXR5L25nLWJ1c3knO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICBcbiAgICBjb25zb2xlLmxvZygnaW50ZXJjZXB0IHJlcXVlc3QnLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVtYnJzJykpXG4gICAgLy90aGlzLmJ1c3lTZXJ2aWNlLmJ1c3koKVxuICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lbWJycycpXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoZmluYWxpemUoKCk9PntcbiAgICAgIC8vdGhpcy5idXN5U2VydmljZS5maW5pc2hlZCgpXG4gICAgfSkpO1xuICB9XG59Il19
62
+ }], ctorParameters: function () { return [{ type: i1.JwtHelperService }, { type: i2.MembrsService }, { type: i3.StateService }]; } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBS3RFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFBb0IsU0FBMkIsRUFBVSxhQUE0QixFQUFVLFlBQTBCO1FBQXJHLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUFHLENBQUM7SUFFN0gsU0FBUyxDQUFDLE9BQXlCLEVBQUUsSUFBaUI7UUFDcEQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3QyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO29CQUNwRSxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7b0JBQzVDLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO3dCQUN0QixVQUFVLEVBQUU7NEJBQ1YsYUFBYSxFQUFFLGNBQWM7eUJBQzlCO3FCQUNGLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osOEJBQThCO1lBQ2hDLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3RCLFVBQVUsRUFBRTtvQkFDVixhQUFhLEVBQUUsS0FBSztpQkFDckI7YUFDRixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzlCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osMkRBQTJEO1lBQzNELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQzlDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLFFBQVEsRUFBRTtvQkFDWixZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDMUM7YUFDRjtRQUNILENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWiw4QkFBOEI7UUFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7OzhHQXZEVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSnd0SGVscGVyU2VydmljZSB9IGZyb20gXCJAYXV0aDAvYW5ndWxhci1qd3RcIjtcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSHR0cFJlcXVlc3QsIEh0dHBIYW5kbGVyLCBIdHRwRXZlbnQsIEh0dHBJbnRlcmNlcHRvciB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIGNhdGNoRXJyb3IsIGZpbmFsaXplLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IE1lbWJyc1NlcnZpY2UgfSBmcm9tIFwiLi9tZW1icnMuc2VydmljZVwiO1xuaW1wb3J0IHsgU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIkB1aXJvdXRlci9hbmd1bGFyXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUb2tlbkludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBqd3RIZWxwZXI6IEp3dEhlbHBlclNlcnZpY2UsIHByaXZhdGUgbWVtYnJzU2VydmljZTogTWVtYnJzU2VydmljZSwgcHJpdmF0ZSBzdGF0ZVNlcnZpY2U6IFN0YXRlU2VydmljZSkge31cblxuICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm1lbWJyc1wiKTtcblxuICAgIGlmICh0b2tlbiAmJiB0aGlzLmp3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCh0b2tlbikpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiVG9rZW4gZXhwaXJlZC4gQXR0ZW1wdGluZyB0byByZWlzc3VlLlwiKTtcbiAgICAgIHJldHVybiBmcm9tKHRoaXMubWVtYnJzU2VydmljZS5yZWlzc3VlKCkpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVmcmVzaGVkVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm1lbWJyc1wiKTtcbiAgICAgICAgICBpZiAocmVmcmVzaGVkVG9rZW4gJiYgIXRoaXMuand0SGVscGVyLmlzVG9rZW5FeHBpcmVkKHJlZnJlc2hlZFRva2VuKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJUb2tlbiBzdWNjZXNzZnVsbHkgcmVpc3N1ZWQuXCIpO1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogcmVmcmVzaGVkVG9rZW4sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiVG9rZW4gcmVmcmVzaCBmYWlsZWQuIExvZ2dpbmcgb3V0LlwiKTtcbiAgICAgICAgICB0aGlzLm1lbWJyc1NlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UuZ28oXCJcIik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAvLyB0aGlzLmJ1c3lTZXJ2aWNlLmZpbmlzaGVkKClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuICYmICF0aGlzLmp3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCh0b2tlbikpIHtcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IHRva2VuLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gSHR0cFJlc3BvbnNlLCBjaGVjayBmb3IgeC1uZXctdG9rZW4gaGVhZGVyXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSA0ICYmIGV2ZW50LmhlYWRlcnMpIHtcbiAgICAgICAgICBjb25zdCBuZXdUb2tlbiA9IGV2ZW50LmhlYWRlcnMuZ2V0KCd4LW5ldy10b2tlbicpO1xuICAgICAgICAgIGlmIChuZXdUb2tlbikge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lbWJycycsIG5ld1Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAvLyB0aGlzLmJ1c3lTZXJ2aWNlLmZpbmlzaGVkKClcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -55,6 +55,11 @@ export function validateResolveFn(transition, router, membrsService, membrsConfi
55
55
  return new Promise((resolve, reject) => {
56
56
  // console.log('validate promise resolve')
57
57
  membrsService.reissue().then((response) => {
58
+ if (localStorage.getItem('redirectUrlAfterLogin')) {
59
+ const redirect = localStorage.getItem('redirectUrlAfterLogin');
60
+ localStorage.removeItem('redirectUrlAfterLogin');
61
+ window.location.pathname = redirect;
62
+ }
58
63
  resolve(null);
59
64
  }).catch(error => {
60
65
  localStorage.setItem('redirectUrlAfterLogin', window.location.pathname);
@@ -98,8 +103,8 @@ export class MembrsModule {
98
103
  };
99
104
  }
100
105
  }
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,
106
+ MembrsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
107
+ MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, imports: [CommonModule,
103
108
  HttpClientModule,
104
109
  JwtModule
105
110
  // JwtModule.forRoot({
@@ -113,7 +118,7 @@ MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
113
118
  // }),
114
119
  // JwtModule.forRoot({})
115
120
  ] });
116
- MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, imports: [CommonModule,
121
+ MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, imports: [CommonModule,
117
122
  HttpClientModule,
118
123
  JwtModule
119
124
  // JwtModule.forRoot({
@@ -127,7 +132,7 @@ MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
127
132
  // }),
128
133
  // JwtModule.forRoot({})
129
134
  ] });
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, decorators: [{
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, decorators: [{
131
136
  type: NgModule,
132
137
  args: [{
133
138
  imports: [
@@ -147,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
147
152
  ]
148
153
  }]
149
154
  }] });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL21lbWJycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBR2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBRXhDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUMzQixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsQ0FBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsQ0FBRTtJQUNsRSxTQUFTLEVBQUUsaUJBQWlCO0NBQy9CLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsSUFBSSxFQUFFLENBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUU7SUFDbEUsU0FBUyxFQUFFLGdCQUFnQjtDQUM1QixDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUF1QjtJQUMvQyxJQUFJLEVBQUUsU0FBUztJQUNmLEdBQUcsRUFBRSxnQkFBZ0I7SUFDckIsS0FBSyxFQUFFLEVBQUc7SUFDVixPQUFPLEVBQUU7UUFDTixjQUFjO0tBQ2hCO0NBQ0QsQ0FBQTtBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxZQUF5QjtJQUV6Riw0QkFBNEI7SUFDNUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyx5Q0FBeUM7UUFDekMseUNBQXlDO1FBQ3pDLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBQyxFQUFFO1lBQzlELElBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFDO2dCQUMvQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUE7Z0JBQzlELFlBQVksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtnQkFDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO2FBQ3BDO2lCQUFLO2dCQUNKLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUMsT0FBTyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUE7YUFDdkU7WUFDRCxNQUFNLEVBQUUsQ0FBQTtRQUNaLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUEsRUFBRTtZQUNaLHlDQUF5QztZQUN6QyxvQkFBb0I7WUFDcEIsMENBQTBDO1lBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNqQixDQUFDLENBQUMsQ0FBQTtJQUVQLENBQUMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxZQUF5QjtJQUU1Riw0QkFBNEI7SUFDNUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQywwQ0FBMEM7UUFFMUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBQyxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUEsRUFBRTtZQUNkLFlBQVksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUN2RSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFBO1lBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNmLENBQUMsQ0FBQyxDQUFBO0lBRU4sQ0FBQyxDQUFDLENBQUE7QUFDRixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQU07SUFDdEMscUNBQXFDO0lBQ3JDLHNCQUFzQjtJQUN0QixPQUFPO1FBQ0wsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDNUQsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0tBQzdCLENBQUE7QUFDSCxDQUFDO0FBR0QsNkJBQTZCO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNsQixZQUFZO0NBQ2YsQ0FBQTtBQXVCRCxNQUFNLE9BQU8sWUFBWTtJQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQW9CO1FBR2pDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7WUFDOUMsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsY0FBYztTQUN2QixDQUFDLENBQUMsU0FBUyxDQUFBO1FBRVosZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3JDLE1BQU0sRUFBRTtnQkFDTixXQUFXLEVBQUUsYUFBYTtnQkFDMUIsY0FBYyxFQUFFLEVBQUU7YUFDbkI7U0FDRixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFYixlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ25DLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFHdEUsT0FBTztZQUNMLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFNBQVMsRUFBRSxlQUFlLENBQUMsbURBQW1EO1NBQy9FLENBQUM7SUFFSixDQUFDOzt5R0F6QlUsWUFBWTswR0FBWixZQUFZLFlBbEJyQixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLFNBQVM7UUFDVCxzQkFBc0I7UUFDdEIsY0FBYztRQUNkLGlDQUFpQztRQUNqQyxNQUFNO1FBQ04sS0FBSztRQUNMLDRCQUE0QjtRQUM1QixvQkFBb0I7UUFDcEIsNEJBQTRCO1FBQzVCLE1BQU07UUFDTix3QkFBd0I7OzBHQU1mLFlBQVksWUFsQnJCLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsU0FBUztRQUNULHNCQUFzQjtRQUN0QixjQUFjO1FBQ2QsaUNBQWlDO1FBQ2pDLE1BQU07UUFDTixLQUFLO1FBQ0wsNEJBQTRCO1FBQzVCLG9CQUFvQjtRQUNwQiw0QkFBNEI7UUFDNUIsTUFBTTtRQUNOLHdCQUF3Qjs7MkZBTWYsWUFBWTtrQkFwQnhCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixTQUFTO3dCQUNULHNCQUFzQjt3QkFDdEIsY0FBYzt3QkFDZCxpQ0FBaUM7d0JBQ2pDLE1BQU07d0JBQ04sS0FBSzt3QkFDTCw0QkFBNEI7d0JBQzVCLG9CQUFvQjt3QkFDcEIsNEJBQTRCO3dCQUM1QixNQUFNO3dCQUNOLHdCQUF3QjtxQkFDekI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZW1icnNTZXJ2aWNlIH0gZnJvbSAnLi9tZW1icnMuc2VydmljZSc7XG5pbXBvcnQgeyBKd3RNb2R1bGUsIEpXVF9PUFRJT05TIH0gZnJvbSBcIkBhdXRoMC9hbmd1bGFyLWp3dFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgVUlSb3V0ZXJNb2R1bGUgfSBmcm9tICdAdWlyb3V0ZXIvYW5ndWxhcidcblxuaW1wb3J0IHsgTmcyU3RhdGVEZWNsYXJhdGlvbiB9IGZyb20gJ0B1aXJvdXRlci9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zaXRpb24sIFVJUm91dGVyIH0gZnJvbSAnQHVpcm91dGVyL2FuZ3VsYXInXG5cbmltcG9ydCB7IHJvdXRlckNvbmZpZ0ZuIH0gZnJvbSAnLi9yb3V0ZXIuY29uZmlnJztcbmltcG9ydCB7IE1lbWJyc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNZW1icnNDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyByZXRyaWV2ZVRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVJlc29sdmUgPSB7XG4gICAgdG9rZW46ICdyZWlzc3VlJyxcbiAgICBkZXBzOiBbIFRyYW5zaXRpb24sIFVJUm91dGVyLCBNZW1icnNTZXJ2aWNlLCBNZW1icnNDb25maWdTZXJ2aWNlIF0sXG4gICAgcmVzb2x2ZUZuOiB2YWxpZGF0ZVJlc29sdmVGblxufVxuXG5leHBvcnQgY29uc3QgcmVpc3N1ZVJlc29sdmUgPSB7XG4gIHRva2VuOiAncmVpc3N1ZScsXG4gIGRlcHM6IFsgVHJhbnNpdGlvbiwgVUlSb3V0ZXIsIE1lbWJyc1NlcnZpY2UsIE1lbWJyc0NvbmZpZ1NlcnZpY2UgXSxcbiAgcmVzb2x2ZUZuOiByZWlzc3VlUmVzb2x2ZUZuXG59XG5cbmV4cG9ydCBjb25zdCByZWlzc3VlU3RhdGU6TmcyU3RhdGVEZWNsYXJhdGlvbiA9IHtcblx0bmFtZTogJ3JlaXNzdWUnLCBcblx0dXJsOiAnL3JlaXNzdWU/dG9rZW4nLFxuXHR2aWV3czogeyB9LFxuXHRyZXNvbHZlOiBbXG4gICAgcmVpc3N1ZVJlc29sdmVcblx0XVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVpc3N1ZVJlc29sdmVGbih0cmFuc2l0aW9uLCByb3V0ZXIsIG1lbWJyc1NlcnZpY2UsIG1lbWJyc0NvbmZpZzpNZW1icnNDb25maWcpIHtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKG1lbWJyc1NlcnZpY2UpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdyZWlzc3VlIHByb21pc2UgcmVzb2x2ZScpXG4gICAgICAvLyBjb25zb2xlLmxvZyh0cmFuc2l0aW9uLnBhcmFtcygpLnRva2VuKVxuICAgICAgbWVtYnJzU2VydmljZS5yZWlzc3VlKHRyYW5zaXRpb24ucGFyYW1zKCkudG9rZW4pLnRoZW4oKHJlc3BvbnNlKT0+e1xuICAgICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZWRpcmVjdFVybEFmdGVyTG9naW4nKSl7XG4gICAgICAgICAgICBjb25zdCByZWRpcmVjdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZWRpcmVjdFVybEFmdGVyTG9naW4nKVxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3JlZGlyZWN0VXJsQWZ0ZXJMb2dpbicpXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPSByZWRpcmVjdFxuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5zdGF0ZVNlcnZpY2UuZ28obWVtYnJzQ29uZmlnLmRlZmF1bHRTdGF0ZSwge30sIHtpbmhlcml0OmZhbHNlfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVqZWN0KClcbiAgICAgIH0pLmNhdGNoKGVycm9yPT57XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnZXJyb3IgaW4gcmVpc3N1ZSByZXNvbHZlJylcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGVycm9yKVxuICAgICAgICAgIC8vd2luZG93LmxvY2F0aW9uLmhyZWYgPSBlbnZpcm9ubWVudC5sb2dpblxuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0pXG5cblx0fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUmVzb2x2ZUZuKHRyYW5zaXRpb24sIHJvdXRlciwgbWVtYnJzU2VydmljZSwgbWVtYnJzQ29uZmlnOk1lbWJyc0NvbmZpZykge1xuICBcbiAgLy9jb25zb2xlLmxvZyhtZW1icnNTZXJ2aWNlKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZSBwcm9taXNlIHJlc29sdmUnKVxuICAgIFxuICAgIG1lbWJyc1NlcnZpY2UucmVpc3N1ZSgpLnRoZW4oKHJlc3BvbnNlKT0+e1xuICAgICAgcmVzb2x2ZShudWxsKVxuICAgIH0pLmNhdGNoKGVycm9yPT57XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncmVkaXJlY3RVcmxBZnRlckxvZ2luJywgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKVxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBtZW1icnNDb25maWcubG9naW5cbiAgICAgIHJlamVjdChlcnJvcilcbiAgICB9KVxuXG59KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gand0T3B0aW9uc0ZhY3RvcnkoY29uZmlnKSB7XG4gIC8vIGNvbnNvbGUubG9nKCdqd3Qgb3B0aW9ucyBmYWN0b3J5JylcbiAgLy8gY29uc29sZS5sb2coY29uZmlnKVxuICByZXR1cm4ge1xuICAgIHRva2VuR2V0dGVyOiAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygndG9rZW4gZ2V0dGVyJywgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZW1icnMnKSlcbiAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVtYnJzJyk7XG4gICAgfSxcbiAgICBhbGxvd2VkRG9tYWluczogW2NvbmZpZy5hcGldXG4gIH1cbn1cblxuXG4vKiogVGhlIHRvcCBsZXZlbCBzdGF0ZShzKSAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFUyA9IFtcbiAgICByZWlzc3VlU3RhdGVcbl1cblxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gICAgSnd0TW9kdWxlXG4gICAgLy8gSnd0TW9kdWxlLmZvclJvb3Qoe1xuICAgIC8vICAgY29uZmlnOiB7XG4gICAgLy8gICAgIHRva2VuR2V0dGVyOiByZXRyaWV2ZVRva2VuXG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgICAvLyBVSVJvdXRlck1vZHVsZS5mb3JDaGlsZCh7XG4gICAgLy8gICBzdGF0ZXM6IFNUQVRFUyxcbiAgICAvLyAgIGNvbmZpZzogcm91dGVyQ29uZmlnRm4sXG4gICAgLy8gfSksXG4gICAgLy8gSnd0TW9kdWxlLmZvclJvb3Qoe30pXG4gIF1cbn0pXG5cblxuXG5leHBvcnQgY2xhc3MgTWVtYnJzTW9kdWxlIHsgXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogTWVtYnJzQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxNZW1icnNNb2R1bGU+IHtcblxuXG4gICAgY29uc3QgbW9kdWxlUHJvdmlkZXJzID0gVUlSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoe1xuICAgICAgc3RhdGVzOiBTVEFURVMsXG4gICAgICBjb25maWc6IHJvdXRlckNvbmZpZ0ZuXG4gICAgfSkucHJvdmlkZXJzXG5cbiAgICBtb2R1bGVQcm92aWRlcnMucHVzaChKd3RNb2R1bGUuZm9yUm9vdCh7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgdG9rZW5HZXR0ZXI6IHJldHJpZXZlVG9rZW4sXG4gICAgICAgIGFsbG93ZWREb21haW5zOiBbXVxuICAgICAgfVxuICAgIH0pLnByb3ZpZGVycylcbiAgICAgIFxuICAgIG1vZHVsZVByb3ZpZGVycy5wdXNoKE1lbWJyc1NlcnZpY2UpXG4gICAgbW9kdWxlUHJvdmlkZXJzLnB1c2goe3Byb3ZpZGU6IE1lbWJyc0NvbmZpZ1NlcnZpY2UsdXNlVmFsdWU6IGNvbmZpZ30pO1xuICAgIFxuICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBNZW1icnNNb2R1bGUsIFxuICAgICAgcHJvdmlkZXJzOiBtb2R1bGVQcm92aWRlcnMgLy9be3Byb3ZpZGU6IE1lbWJyc0NvbmZpZ1NlcnZpY2UsdXNlVmFsdWU6IGNvbmZpZ31dXG4gICAgfTtcbiAgICBcbiAgfVxuXG59XG4iXX0=
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL21lbWJycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBR2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBRXhDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUMzQixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsQ0FBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsQ0FBRTtJQUNsRSxTQUFTLEVBQUUsaUJBQWlCO0NBQy9CLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsSUFBSSxFQUFFLENBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUU7SUFDbEUsU0FBUyxFQUFFLGdCQUFnQjtDQUM1QixDQUFBO0FBRUQsTUFBTSxDQUFDLE1B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QUNOLEtBQUs7UUFDTCw0QkFBNEI7UUFDNUIsb0JBQW9CO1FBQ3BCLDRCQUE0QjtRQUM1QixNQUFNO1FBQ04sd0JBQXdCOzs0RkFNZixZQUFZO2tCQXBCeEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1Qsc0JBQXNCO3dCQUN0QixjQUFjO3dCQUNkLGlDQUFpQzt3QkFDakMsTUFBTTt3QkFDTixLQUFLO3dCQUNMLDRCQUE0Qjt3QkFDNUIsb0JBQW9CO3dCQUNwQiw0QkFBNEI7d0JBQzVCLE1BQU07d0JBQ04sd0JBQXdCO3FCQUN6QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1lbWJyc1NlcnZpY2UgfSBmcm9tICcuL21lbWJycy5zZXJ2aWNlJztcbmltcG9ydCB7IEp3dE1vZHVsZSwgSldUX09QVElPTlMgfSBmcm9tIFwiQGF1dGgwL2FuZ3VsYXItand0XCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBVSVJvdXRlck1vZHVsZSB9IGZyb20gJ0B1aXJvdXRlci9hbmd1bGFyJ1xuXG5pbXBvcnQgeyBOZzJTdGF0ZURlY2xhcmF0aW9uIH0gZnJvbSAnQHVpcm91dGVyL2FuZ3VsYXInO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiwgVUlSb3V0ZXIgfSBmcm9tICdAdWlyb3V0ZXIvYW5ndWxhcidcblxuaW1wb3J0IHsgcm91dGVyQ29uZmlnRm4gfSBmcm9tICcuL3JvdXRlci5jb25maWcnO1xuaW1wb3J0IHsgTWVtYnJzQ29uZmlnIH0gZnJvbSAnLi9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1lbWJyc0NvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IHJldHJpZXZlVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUmVzb2x2ZSA9IHtcbiAgICB0b2tlbjogJ3JlaXNzdWUnLFxuICAgIGRlcHM6IFsgVHJhbnNpdGlvbiwgVUlSb3V0ZXIsIE1lbWJyc1NlcnZpY2UsIE1lbWJyc0NvbmZpZ1NlcnZpY2UgXSxcbiAgICByZXNvbHZlRm46IHZhbGlkYXRlUmVzb2x2ZUZuXG59XG5cbmV4cG9ydCBjb25zdCByZWlzc3VlUmVzb2x2ZSA9IHtcbiAgdG9rZW46ICdyZWlzc3VlJyxcbiAgZGVwczogWyBUcmFuc2l0aW9uLCBVSVJvdXRlciwgTWVtYnJzU2VydmljZSwgTWVtYnJzQ29uZmlnU2VydmljZSBdLFxuICByZXNvbHZlRm46IHJlaXNzdWVSZXNvbHZlRm5cbn1cblxuZXhwb3J0IGNvbnN0IHJlaXNzdWVTdGF0ZTpOZzJTdGF0ZURlY2xhcmF0aW9uID0ge1xuXHRuYW1lOiAncmVpc3N1ZScsIFxuXHR1cmw6ICcvcmVpc3N1ZT90b2tlbicsXG5cdHZpZXdzOiB7IH0sXG5cdHJlc29sdmU6IFtcbiAgICByZWlzc3VlUmVzb2x2ZVxuXHRdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWlzc3VlUmVzb2x2ZUZuKHRyYW5zaXRpb24sIHJvdXRlciwgbWVtYnJzU2VydmljZSwgbWVtYnJzQ29uZmlnOk1lbWJyc0NvbmZpZykge1xuICAgIFxuICAgIC8vY29uc29sZS5sb2cobWVtYnJzU2VydmljZSlcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coJ3JlaXNzdWUgcHJvbWlzZSByZXNvbHZlJylcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRyYW5zaXRpb24ucGFyYW1zKCkudG9rZW4pXG4gICAgICBtZW1icnNTZXJ2aWNlLnJlaXNzdWUodHJhbnNpdGlvbi5wYXJhbXMoKS50b2tlbikudGhlbigocmVzcG9uc2UpPT57XG4gICAgICAgICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZGlyZWN0VXJsQWZ0ZXJMb2dpbicpKXtcbiAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZGlyZWN0VXJsQWZ0ZXJMb2dpbicpXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncmVkaXJlY3RVcmxBZnRlckxvZ2luJylcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9IHJlZGlyZWN0XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgcm91dGVyLnN0YXRlU2VydmljZS5nbyhtZW1icnNDb25maWcuZGVmYXVsdFN0YXRlLCB7fSwge2luaGVyaXQ6ZmFsc2V9KVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoKVxuICAgICAgfSkuY2F0Y2goZXJyb3I9PntcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdlcnJvciBpbiByZWlzc3VlIHJlc29sdmUnKVxuICAgICAgICAgIC8vY29uc29sZS5sb2coZXJyb3IpXG4gICAgICAgICAgLy93aW5kb3cubG9jYXRpb24uaHJlZiA9IGVudmlyb25tZW50LmxvZ2luXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgfSlcblxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSZXNvbHZlRm4odHJhbnNpdGlvbiwgcm91dGVyLCBtZW1icnNTZXJ2aWNlLCBtZW1icnNDb25maWc6TWVtYnJzQ29uZmlnKSB7XG4gIFxuICAvL2NvbnNvbGUubG9nKG1lbWJyc1NlcnZpY2UpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlIHByb21pc2UgcmVzb2x2ZScpXG4gICAgXG4gICAgbWVtYnJzU2VydmljZS5yZWlzc3VlKCkudGhlbigocmVzcG9uc2UpPT57XG4gICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmVkaXJlY3RVcmxBZnRlckxvZ2luJykpe1xuICAgICAgICBjb25zdCByZWRpcmVjdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZWRpcmVjdFVybEFmdGVyTG9naW4nKVxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncmVkaXJlY3RVcmxBZnRlckxvZ2luJylcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID0gcmVkaXJlY3RcbiAgICAgIH1cbiAgICAgIHJlc29sdmUobnVsbClcbiAgICB9KS5jYXRjaChlcnJvcj0+e1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3JlZGlyZWN0VXJsQWZ0ZXJMb2dpbicsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbWVtYnJzQ29uZmlnLmxvZ2luXG4gICAgICByZWplY3QoZXJyb3IpXG4gICAgfSlcblxufSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp3dE9wdGlvbnNGYWN0b3J5KGNvbmZpZykge1xuICAvLyBjb25zb2xlLmxvZygnand0IG9wdGlvbnMgZmFjdG9yeScpXG4gIC8vIGNvbnNvbGUubG9nKGNvbmZpZylcbiAgcmV0dXJuIHtcbiAgICB0b2tlbkdldHRlcjogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ3Rva2VuIGdldHRlcicsICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVtYnJzJykpXG4gICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lbWJycycpO1xuICAgIH0sXG4gICAgYWxsb3dlZERvbWFpbnM6IFtjb25maWcuYXBpXVxuICB9XG59XG5cblxuLyoqIFRoZSB0b3AgbGV2ZWwgc3RhdGUocykgKi9cbmV4cG9ydCBjb25zdCBTVEFURVMgPSBbXG4gICAgcmVpc3N1ZVN0YXRlXG5dXG5cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgIEp3dE1vZHVsZVxuICAgIC8vIEp3dE1vZHVsZS5mb3JSb290KHtcbiAgICAvLyAgIGNvbmZpZzoge1xuICAgIC8vICAgICB0b2tlbkdldHRlcjogcmV0cmlldmVUb2tlblxuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gICAgLy8gVUlSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoe1xuICAgIC8vICAgc3RhdGVzOiBTVEFURVMsXG4gICAgLy8gICBjb25maWc6IHJvdXRlckNvbmZpZ0ZuLFxuICAgIC8vIH0pLFxuICAgIC8vIEp3dE1vZHVsZS5mb3JSb290KHt9KVxuICBdXG59KVxuXG5cblxuZXhwb3J0IGNsYXNzIE1lbWJyc01vZHVsZSB7IFxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE1lbWJyc0NvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TWVtYnJzTW9kdWxlPiB7XG5cblxuICAgIGNvbnN0IG1vZHVsZVByb3ZpZGVycyA9IFVJUm91dGVyTW9kdWxlLmZvckNoaWxkKHtcbiAgICAgIHN0YXRlczogU1RBVEVTLFxuICAgICAgY29uZmlnOiByb3V0ZXJDb25maWdGblxuICAgIH0pLnByb3ZpZGVyc1xuXG4gICAgbW9kdWxlUHJvdmlkZXJzLnB1c2goSnd0TW9kdWxlLmZvclJvb3Qoe1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIHRva2VuR2V0dGVyOiByZXRyaWV2ZVRva2VuLFxuICAgICAgICBhbGxvd2VkRG9tYWluczogW11cbiAgICAgIH1cbiAgICB9KS5wcm92aWRlcnMpXG4gICAgICBcbiAgICBtb2R1bGVQcm92aWRlcnMucHVzaChNZW1icnNTZXJ2aWNlKVxuICAgIG1vZHVsZVByb3ZpZGVycy5wdXNoKHtwcm92aWRlOiBNZW1icnNDb25maWdTZXJ2aWNlLHVzZVZhbHVlOiBjb25maWd9KTtcbiAgICBcbiAgIFxuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTWVtYnJzTW9kdWxlLCBcbiAgICAgIHByb3ZpZGVyczogbW9kdWxlUHJvdmlkZXJzIC8vW3twcm92aWRlOiBNZW1icnNDb25maWdTZXJ2aWNlLHVzZVZhbHVlOiBjb25maWd9XVxuICAgIH07XG4gICAgXG4gIH1cblxufVxuIl19
@@ -9,6 +9,7 @@ export class MembrsService {
9
9
  constructor(http, config) {
10
10
  this.http = http;
11
11
  this.config = config;
12
+ this.decodedReady = new BehaviorSubject(null);
12
13
  this._lsKey = 'membrs';
13
14
  this._loggedInObservable = new BehaviorSubject(false);
14
15
  // console.log('membrs constructor')
@@ -18,41 +19,52 @@ export class MembrsService {
18
19
  }
19
20
  }
20
21
  reissue(token) {
22
+ console.log('Reissuing token...'); // Log function entry
21
23
  return new Promise((resolve, reject) => {
22
24
  if (!token && !this._token) {
25
+ console.log('No token provided and no token found.'); // Log missing token
23
26
  reject('NOT_LOGGED_IN');
24
27
  }
25
- if (token)
28
+ if (token) {
29
+ console.log(`Token provided: ${token}`); // Log provided token
26
30
  this.token = token;
31
+ }
27
32
  // check stored token has not expired, or needs to be reissued soon
28
33
  var reissueIn = this._decoded.exp - Math.floor(Date.now() / 1000);
29
34
  // token has expired
30
35
  if (reissueIn < 0) {
36
+ console.log('Token has expired.'); // Log expired token
31
37
  reject('NOT_LOGGED_IN');
32
38
  }
33
39
  // token expiring soon
34
40
  if (reissueIn < 300) {
41
+ console.log('Token expiring soon. Reissuing...'); // Log imminent expiration
35
42
  this.http.post(this.config.apiProtocol + this.config.api + '/token/' + this._token, {}).subscribe((response) => {
36
43
  if (response.token) {
37
44
  this.token = response.token;
38
45
  this._loggedInObservable.next(true);
46
+ console.log('Token successfully reissued.'); // Log success
39
47
  resolve(this._token);
40
48
  }
41
49
  else {
50
+ console.log('Failed to reissue token.'); // Log failure
42
51
  reject('NOT_LOGGED_IN');
43
52
  }
44
- }, error => {
53
+ }, (error) => {
54
+ console.log('Error reissuing token:', error); // Log error details
45
55
  reject('NOT_LOGGED_IN');
46
56
  });
47
57
  }
48
58
  else {
49
59
  this._loggedInObservable.next(true);
60
+ console.log('Token is valid. No need to reissue.'); // Log valid token
50
61
  resolve(this._token);
51
62
  }
52
63
  });
53
64
  }
54
65
  set token(token) {
55
66
  this._token = token;
67
+ console.log('Token set.');
56
68
  localStorage.setItem(this._lsKey, token);
57
69
  this._decoded = jwtService.decodeToken(this._token);
58
70
  }
@@ -65,6 +77,14 @@ export class MembrsService {
65
77
  get profile() {
66
78
  return this._decoded;
67
79
  }
80
+ setProfile(decodedData) {
81
+ this._decoded = decodedData;
82
+ this.decodedReady.next(decodedData); // Emit the new value when profile is set
83
+ console.log(this.decodedReady);
84
+ }
85
+ get decodedReady$() {
86
+ return this.decodedReady.asObservable();
87
+ }
68
88
  get token() {
69
89
  return this._token;
70
90
  }
@@ -80,16 +100,19 @@ export class MembrsService {
80
100
  this._token = null;
81
101
  localStorage.removeItem(this._lsKey);
82
102
  resolve(this.config.login);
83
- //this.router.stateService.go('dashboard')
84
103
  }, error => {
85
- reject(error);
104
+ // If the API call fails (e.g. token already invalid/expired), still clear local state
105
+ console.warn('Logout API call failed, clearing local token anyway', error);
106
+ this._token = null;
107
+ localStorage.removeItem(this._lsKey);
108
+ resolve(this.config.login);
86
109
  });
87
110
  });
88
111
  }
89
112
  }
90
- MembrsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
91
- MembrsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsService, providedIn: 'root' });
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsService, decorators: [{
113
+ MembrsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
114
+ MembrsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, providedIn: 'root' });
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, decorators: [{
93
116
  type: Injectable,
94
117
  args: [{
95
118
  providedIn: 'root'
@@ -98,4 +121,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
98
121
  type: Inject,
99
122
  args: [MembrsConfigService]
100
123
  }] }]; } });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZW1icnMvc3JjL2xpYi9tZW1icnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFBO0FBT3pDLE1BQU0sT0FBTyxhQUFhO0lBT3hCLFlBQW9CLElBQWdCLEVBQXVDLE1BQW9CO1FBQTNFLFNBQUksR0FBSixJQUFJLENBQVk7UUFBdUMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUgvRixXQUFNLEdBQVcsUUFBUSxDQUFDO1FBQzFCLHdCQUFtQixHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUl4RSxvQ0FBb0M7UUFDcEMsd0VBQXdFO1FBQ3hFLElBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUMvQztJQUVILENBQUM7SUFFRCxPQUFPLENBQUMsS0FBYTtRQUVuQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxFQUFFO1lBRXBDLElBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO2dCQUN4QixNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7YUFDeEI7WUFFRCxJQUFHLEtBQUs7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QyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDMUIsMENBQTBDO1lBQzVDLENBQUMsRUFBRSxLQUFLLENBQUEsRUFBRTtnQkFDUixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDZixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQzs7MEdBeEdVLGFBQWEsNENBT3NCLG1CQUFtQjs4R0FQdEQsYUFBYSxjQUpaLE1BQU07MkZBSVAsYUFBYTtrQkFMekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVV3QyxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSnd0SGVscGVyU2VydmljZSB9IGZyb20gJ0BhdXRoMC9hbmd1bGFyLWp3dCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBNZW1icnNDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWcuc2VydmljZSdcbmltcG9ydCB7IE1lbWJyc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmNvbnN0IGp3dFNlcnZpY2UgPSBuZXcgSnd0SGVscGVyU2VydmljZSgpXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuXG5cbmV4cG9ydCBjbGFzcyBNZW1icnNTZXJ2aWNlIHtcblxuICBfdG9rZW46IHN0cmluZztcbiAgX2RlY29kZWQ6IGFueTtcbiAgX2xzS2V5OiBzdHJpbmcgPSAnbWVtYnJzJztcbiAgX2xvZ2dlZEluT2JzZXJ2YWJsZTogQmVoYXZpb3JTdWJqZWN0PEJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSlcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIEBJbmplY3QoTWVtYnJzQ29uZmlnU2VydmljZSkgcHJpdmF0ZSBjb25maWc6IE1lbWJyc0NvbmZpZykge1xuXG4gICAgLy8gY29uc29sZS5sb2coJ21lbWJycyBjb25zdHJ1Y3RvcicpXG4gICAgLy8gaWYgdGhlIHRva2VuIGV4aXN0cyBpbiBsb2NhbCBzdG9yYWdlLCByZXRyaWV2ZSBpdCBiYWNrIHRvIHRoZSBzZXJ2aWNlXG4gICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fbHNLZXkpKXtcbiAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9sc0tleSlcbiAgICB9XG4gIFxuICB9XG5cbiAgcmVpc3N1ZSh0b2tlbj86c3RyaW5nKXtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xuXG4gICAgICBpZighdG9rZW4gJiYgIXRoaXMuX3Rva2VuKXtcbiAgICAgICAgcmVqZWN0KCdOT1RfTE9HR0VEX0lOJylcbiAgICAgIH1cblxuICAgICAgaWYodG9rZW4pXG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlblxuXG4gICAgICAvLyBjaGVjayBzdG9yZWQgdG9rZW4gaGFzIG5vdCBleHBpcmVkLCBvciBuZWVkcyB0byBiZSByZWlzc3VlZCBzb29uXG4gICAgICB2YXIgcmVpc3N1ZUluID0gdGhpcy5fZGVjb2RlZC5leHAgLSBNYXRoLmZsb29yKERhdGUubm93KCkvMTAwMClcblxuICAgICAgLy8gdG9rZW4gaGFzIGV4cGlyZWRcbiAgICAgIGlmKHJlaXNzdWVJbiA8IDApe1xuICAgICAgICByZWplY3QoJ05PVF9MT0dHRURfSU4nKVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyB0b2tlbiBleHBpcmluZyBzb29uXG4gICAgICBpZihyZWlzc3VlSW4gPCAzMDApe1xuXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMuY29uZmlnLmFwaVByb3RvY29sICsgdGhpcy5jb25maWcuYXBpKycvdG9rZW4vJyt0aGlzLl90b2tlbiwge30pLnN1YnNjcmliZSgocmVzcG9uc2U6YW55KT0+e1xuXG4gICAgICAgICAgaWYocmVzcG9uc2UudG9rZW4pe1xuICAgICAgICAgICAgdGhpcy50b2tlbiA9IHJlc3BvbnNlLnRva2VuXG4gICAgICAgICAgICB0aGlzLl9sb2dnZWRJbk9ic2VydmFibGUubmV4dCh0cnVlKVxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl90b2tlbilcbiAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICByZWplY3QoJ05PVF9MT0dHRURfSU4nKVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgfSwgZXJyb3I9PntcbiAgICAgICAgICByZWplY3QoJ05PVF9MT0dHRURfSU4nKVxuICAgICAgICB9KVxuXG4gICAgICB9ZWxzZSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlZEluT2JzZXJ2YWJsZS5uZXh0KHRydWUpXG4gICAgICAgIHJlc29sdmUodGhpcy5fdG9rZW4pXG4gICAgICB9XG4gICAgICBcbiAgICB9KVxuICAgIFxuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuKXtcbiAgICB0aGlzLl90b2tlbiA9IHRva2VuXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5fbHNLZXksIHRva2VuKVxuICAgIHRoaXMuX2RlY29kZWQgPSBqd3RTZXJ2aWNlLmRlY29kZVRva2VuKHRoaXMuX3Rva2VuKVxuICB9XG5cbiAgZGVsZXRlVG9rZW4oKXtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9sc0tleSlcbiAgfVxuXG4gIGlzTG9nZ2VkSW4oKXtcbiAgICByZXR1cm4gdGhpcy50b2tlbiA/IHRydWUgOiBmYWxzZVxuICB9XG5cbiAgZ2V0IHByb2ZpbGUoKXtcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlZFxuICB9XG5cbiAgZ2V0IHRva2VuKCl7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuXG4gIH1cblxuICBnZXQgYWRtaW4gKCl7XG4gICAgcmV0dXJuIHRoaXMucHJvZmlsZS5wZXJtaXNzaW9uID09IDFcbiAgfVxuXG4gIGdldCBpc0xvZ2dlZEluT2JzZXJ2YWJsZSgpe1xuICAgIHJldHVybiB0aGlzLl9sb2dnZWRJbk9ic2VydmFibGVcbiAgfVxuICBcbiAgbG9nb3V0KCl7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICB0aGlzLmh0dHAuZGVsZXRlKHRoaXMuY29uZmlnLmFwaVByb3RvY29sK3RoaXMuY29uZmlnLmFwaSsnL3Rva2VuLycrdGhpcy5fdG9rZW4pLnN1YnNjcmliZSgocmVzcG9uc2U6YW55KT0+e1xuICAgICAgICB0aGlzLl90b2tlbiA9IG51bGw7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuX2xzS2V5KVxuICAgICAgICByZXNvbHZlKHRoaXMuY29uZmlnLmxvZ2luKVxuICAgICAgICAvL3RoaXMucm91dGVyLnN0YXRlU2VydmljZS5nbygnZGFzaGJvYXJkJylcbiAgICAgIH0sIGVycm9yPT57XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0pXG4gICAgfSlcbiAgICBcbiAgfVxuXG5cbn1cbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZW1icnMvc3JjL2xpYi9tZW1icnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFBO0FBT3pDLE1BQU0sT0FBTyxhQUFhO0lBVXhCLFlBQW9CLElBQWdCLEVBQXVDLE1BQW9CO1FBQTNFLFNBQUksR0FBSixJQUFJLENBQVk7UUFBdUMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUx4RixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO1FBRXJELFdBQU0sR0FBVyxRQUFRLENBQUM7UUFDMUIsd0JBQW1CLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBSXhFLG9DQUFvQztRQUNwQyx3RUFBd0U7UUFDeEUsSUFBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQy9DO0lBRUgsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFjO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtRQUV4RCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lB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QU0sQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1Qsc0ZBQXNGO2dCQUN0RixPQUFPLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzsyR0EvSFUsYUFBYSw0Q0FVc0IsbUJBQW1COytHQVZ0RCxhQUFhLGNBSlosTUFBTTs0RkFJUCxhQUFhO2tCQUx6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBYXdDLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQGF1dGgwL2FuZ3VsYXItand0JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IE1lbWJyc0NvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJ1xuaW1wb3J0IHsgTWVtYnJzQ29uZmlnIH0gZnJvbSAnLi9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuY29uc3Qgand0U2VydmljZSA9IG5ldyBKd3RIZWxwZXJTZXJ2aWNlKClcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cblxuZXhwb3J0IGNsYXNzIE1lbWJyc1NlcnZpY2Uge1xuXG4gIF90b2tlbjogc3RyaW5nO1xuICBfZGVjb2RlZDogYW55O1xuXG4gIHB1YmxpYyBkZWNvZGVkUmVhZHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgX2xzS2V5OiBzdHJpbmcgPSAnbWVtYnJzJztcbiAgX2xvZ2dlZEluT2JzZXJ2YWJsZTogQmVoYXZpb3JTdWJqZWN0PEJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSlcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIEBJbmplY3QoTWVtYnJzQ29uZmlnU2VydmljZSkgcHJpdmF0ZSBjb25maWc6IE1lbWJyc0NvbmZpZykge1xuXG4gICAgLy8gY29uc29sZS5sb2coJ21lbWJycyBjb25zdHJ1Y3RvcicpXG4gICAgLy8gaWYgdGhlIHRva2VuIGV4aXN0cyBpbiBsb2NhbCBzdG9yYWdlLCByZXRyaWV2ZSBpdCBiYWNrIHRvIHRoZSBzZXJ2aWNlXG4gICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fbHNLZXkpKXtcbiAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9sc0tleSlcbiAgICB9XG4gIFxuICB9XG5cbiAgcmVpc3N1ZSh0b2tlbj86IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKCdSZWlzc3VpbmcgdG9rZW4uLi4nKTsgLy8gTG9nIGZ1bmN0aW9uIGVudHJ5XG4gICAgXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghdG9rZW4gJiYgIXRoaXMuX3Rva2VuKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyB0b2tlbiBwcm92aWRlZCBhbmQgbm8gdG9rZW4gZm91bmQuJyk7IC8vIExvZyBtaXNzaW5nIHRva2VuXG4gICAgICAgIHJlamVjdCgnTk9UX0xPR0dFRF9JTicpO1xuICAgICAgfVxuICBcbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVG9rZW4gcHJvdmlkZWQ6ICR7dG9rZW59YCk7IC8vIExvZyBwcm92aWRlZCB0b2tlblxuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgICB9XG4gIFxuICAgICAgLy8gY2hlY2sgc3RvcmVkIHRva2VuIGhhcyBub3QgZXhwaXJlZCwgb3IgbmVlZHMgdG8gYmUgcmVpc3N1ZWQgc29vblxuICAgICAgdmFyIHJlaXNzdWVJbiA9IHRoaXMuX2RlY29kZWQuZXhwIC0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIFxuICAgICAgLy8gdG9rZW4gaGFzIGV4cGlyZWRcbiAgICAgIGlmIChyZWlzc3VlSW4gPCAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdUb2tlbiBoYXMgZXhwaXJlZC4nKTsgLy8gTG9nIGV4cGlyZWQgdG9rZW5cbiAgICAgICAgcmVqZWN0KCdOT1RfTE9HR0VEX0lOJyk7XG4gICAgICB9XG4gIFxuICAgICAgLy8gdG9rZW4gZXhwaXJpbmcgc29vblxuICAgICAgaWYgKHJlaXNzdWVJbiA8IDMwMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnVG9rZW4gZXhwaXJpbmcgc29vbi4gUmVpc3N1aW5nLi4uJyk7IC8vIExvZyBpbW1pbmVudCBleHBpcmF0aW9uXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMuY29uZmlnLmFwaVByb3RvY29sICsgdGhpcy5jb25maWcuYXBpICsgJy90b2tlbi8nICsgdGhpcy5fdG9rZW4sIHt9KS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50b2tlbikge1xuICAgICAgICAgICAgICB0aGlzLnRva2VuID0gcmVzcG9uc2UudG9rZW47XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlZEluT2JzZXJ2YWJsZS5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVG9rZW4gc3VjY2Vzc2Z1bGx5IHJlaXNzdWVkLicpOyAvLyBMb2cgc3VjY2Vzc1xuICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuX3Rva2VuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gcmVpc3N1ZSB0b2tlbi4nKTsgLy8gTG9nIGZhaWx1cmVcbiAgICAgICAgICAgICAgcmVqZWN0KCdOT1RfTE9HR0VEX0lOJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciByZWlzc3VpbmcgdG9rZW46JywgZXJyb3IpOyAvLyBMb2cgZXJyb3IgZGV0YWlsc1xuICAgICAgICAgICAgcmVqZWN0KCdOT1RfTE9HR0VEX0lOJyk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VkSW5PYnNlcnZhYmxlLm5leHQodHJ1ZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdUb2tlbiBpcyB2YWxpZC4gTm8gbmVlZCB0byByZWlzc3VlLicpOyAvLyBMb2cgdmFsaWQgdG9rZW5cbiAgICAgICAgcmVzb2x2ZSh0aGlzLl90b2tlbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgXG5cbiAgc2V0IHRva2VuKHRva2VuKXtcbiAgICB0aGlzLl90b2tlbiA9IHRva2VuXG4gICAgY29uc29sZS5sb2coJ1Rva2VuIHNldC4nKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9sc0tleSwgdG9rZW4pXG4gICAgdGhpcy5fZGVjb2RlZCA9IGp3dFNlcnZpY2UuZGVjb2RlVG9rZW4odGhpcy5fdG9rZW4pXG4gIH1cblxuICBkZWxldGVUb2tlbigpe1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuX2xzS2V5KVxuICB9XG5cbiAgaXNMb2dnZWRJbigpe1xuICAgIHJldHVybiB0aGlzLnRva2VuID8gdHJ1ZSA6IGZhbHNlXG4gIH1cblxuICBnZXQgcHJvZmlsZSgpe1xuICAgIHJldHVybiB0aGlzLl9kZWNvZGVkXG4gIH1cblxuICBzZXRQcm9maWxlKGRlY29kZWREYXRhKSB7XG4gICAgdGhpcy5fZGVjb2RlZCA9IGRlY29kZWREYXRhO1xuICAgIHRoaXMuZGVjb2RlZFJlYWR5Lm5leHQoZGVjb2RlZERhdGEpOyAvLyBFbWl0IHRoZSBuZXcgdmFsdWUgd2hlbiBwcm9maWxlIGlzIHNldFxuICAgIGNvbnNvbGUubG9nKHRoaXMuZGVjb2RlZFJlYWR5KTtcbiAgfVxuXG4gIGdldCBkZWNvZGVkUmVhZHkkKCkge1xuICAgIHJldHVybiB0aGlzLmRlY29kZWRSZWFkeS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB0b2tlbigpe1xuICAgIHJldHVybiB0aGlzLl90b2tlblxuICB9XG5cbiAgZ2V0IGFkbWluICgpe1xuICAgIHJldHVybiB0aGlzLnByb2ZpbGUucGVybWlzc2lvbiA9PSAxXG4gIH1cblxuICBnZXQgaXNMb2dnZWRJbk9ic2VydmFibGUoKXtcbiAgICByZXR1cm4gdGhpcy5fbG9nZ2VkSW5PYnNlcnZhYmxlXG4gIH1cbiAgXG4gIGxvZ291dCgpe1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgdGhpcy5odHRwLmRlbGV0ZSh0aGlzLmNvbmZpZy5hcGlQcm90b2NvbCArIHRoaXMuY29uZmlnLmFwaSArICcvdG9rZW4vJyArIHRoaXMuX3Rva2VuKS5zdWJzY3JpYmUoKHJlc3BvbnNlOmFueSk9PntcbiAgICAgICAgdGhpcy5fdG9rZW4gPSBudWxsO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9sc0tleSk7XG4gICAgICAgIHJlc29sdmUodGhpcy5jb25maWcubG9naW4pO1xuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAvLyBJZiB0aGUgQVBJIGNhbGwgZmFpbHMgKGUuZy4gdG9rZW4gYWxyZWFkeSBpbnZhbGlkL2V4cGlyZWQpLCBzdGlsbCBjbGVhciBsb2NhbCBzdGF0ZVxuICAgICAgICBjb25zb2xlLndhcm4oJ0xvZ291dCBBUEkgY2FsbCBmYWlsZWQsIGNsZWFyaW5nIGxvY2FsIHRva2VuIGFueXdheScsIGVycm9yKTtcbiAgICAgICAgdGhpcy5fdG9rZW4gPSBudWxsO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9sc0tleSk7XG4gICAgICAgIHJlc29sdmUodGhpcy5jb25maWcubG9naW4pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG59XG4iXX0=
@@ -1,12 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Inject, 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.
@@ -19,6 +21,7 @@ class MembrsService {
19
21
  constructor(http, config) {
20
22
  this.http = http;
21
23
  this.config = config;
24
+ this.decodedReady = new BehaviorSubject(null);
22
25
  this._lsKey = 'membrs';
23
26
  this._loggedInObservable = new BehaviorSubject(false);
24
27
  // console.log('membrs constructor')
@@ -28,41 +31,52 @@ class MembrsService {
28
31
  }
29
32
  }
30
33
  reissue(token) {
34
+ console.log('Reissuing token...'); // Log function entry
31
35
  return new Promise((resolve, reject) => {
32
36
  if (!token && !this._token) {
37
+ console.log('No token provided and no token found.'); // Log missing token
33
38
  reject('NOT_LOGGED_IN');
34
39
  }
35
- if (token)
40
+ if (token) {
41
+ console.log(`Token provided: ${token}`); // Log provided token
36
42
  this.token = token;
43
+ }
37
44
  // check stored token has not expired, or needs to be reissued soon
38
45
  var reissueIn = this._decoded.exp - Math.floor(Date.now() / 1000);
39
46
  // token has expired
40
47
  if (reissueIn < 0) {
48
+ console.log('Token has expired.'); // Log expired token
41
49
  reject('NOT_LOGGED_IN');
42
50
  }
43
51
  // token expiring soon
44
52
  if (reissueIn < 300) {
53
+ console.log('Token expiring soon. Reissuing...'); // Log imminent expiration
45
54
  this.http.post(this.config.apiProtocol + this.config.api + '/token/' + this._token, {}).subscribe((response) => {
46
55
  if (response.token) {
47
56
  this.token = response.token;
48
57
  this._loggedInObservable.next(true);
58
+ console.log('Token successfully reissued.'); // Log success
49
59
  resolve(this._token);
50
60
  }
51
61
  else {
62
+ console.log('Failed to reissue token.'); // Log failure
52
63
  reject('NOT_LOGGED_IN');
53
64
  }
54
- }, error => {
65
+ }, (error) => {
66
+ console.log('Error reissuing token:', error); // Log error details
55
67
  reject('NOT_LOGGED_IN');
56
68
  });
57
69
  }
58
70
  else {
59
71
  this._loggedInObservable.next(true);
72
+ console.log('Token is valid. No need to reissue.'); // Log valid token
60
73
  resolve(this._token);
61
74
  }
62
75
  });
63
76
  }
64
77
  set token(token) {
65
78
  this._token = token;
79
+ console.log('Token set.');
66
80
  localStorage.setItem(this._lsKey, token);
67
81
  this._decoded = jwtService.decodeToken(this._token);
68
82
  }
@@ -75,6 +89,14 @@ class MembrsService {
75
89
  get profile() {
76
90
  return this._decoded;
77
91
  }
92
+ setProfile(decodedData) {
93
+ this._decoded = decodedData;
94
+ this.decodedReady.next(decodedData); // Emit the new value when profile is set
95
+ console.log(this.decodedReady);
96
+ }
97
+ get decodedReady$() {
98
+ return this.decodedReady.asObservable();
99
+ }
78
100
  get token() {
79
101
  return this._token;
80
102
  }
@@ -90,16 +112,19 @@ class MembrsService {
90
112
  this._token = null;
91
113
  localStorage.removeItem(this._lsKey);
92
114
  resolve(this.config.login);
93
- //this.router.stateService.go('dashboard')
94
115
  }, error => {
95
- reject(error);
116
+ // If the API call fails (e.g. token already invalid/expired), still clear local state
117
+ console.warn('Logout API call failed, clearing local token anyway', error);
118
+ this._token = null;
119
+ localStorage.removeItem(this._lsKey);
120
+ resolve(this.config.login);
96
121
  });
97
122
  });
98
123
  }
99
124
  }
100
- MembrsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
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: [{
125
+ MembrsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
126
+ MembrsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, providedIn: 'root' });
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, decorators: [{
103
128
  type: Injectable,
104
129
  args: [{
105
130
  providedIn: 'root'
@@ -177,6 +202,11 @@ function validateResolveFn(transition, router, membrsService, membrsConfig) {
177
202
  return new Promise((resolve, reject) => {
178
203
  // console.log('validate promise resolve')
179
204
  membrsService.reissue().then((response) => {
205
+ if (localStorage.getItem('redirectUrlAfterLogin')) {
206
+ const redirect = localStorage.getItem('redirectUrlAfterLogin');
207
+ localStorage.removeItem('redirectUrlAfterLogin');
208
+ window.location.pathname = redirect;
209
+ }
180
210
  resolve(null);
181
211
  }).catch(error => {
182
212
  localStorage.setItem('redirectUrlAfterLogin', window.location.pathname);
@@ -220,8 +250,8 @@ class MembrsModule {
220
250
  };
221
251
  }
222
252
  }
223
- MembrsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
224
- MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, imports: [CommonModule,
253
+ MembrsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
254
+ MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, imports: [CommonModule,
225
255
  HttpClientModule,
226
256
  JwtModule
227
257
  // JwtModule.forRoot({
@@ -235,7 +265,7 @@ MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
235
265
  // }),
236
266
  // JwtModule.forRoot({})
237
267
  ] });
238
- MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, imports: [CommonModule,
268
+ MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, imports: [CommonModule,
239
269
  HttpClientModule,
240
270
  JwtModule
241
271
  // JwtModule.forRoot({
@@ -249,7 +279,7 @@ MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
249
279
  // }),
250
280
  // JwtModule.forRoot({})
251
281
  ] });
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, decorators: [{
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, decorators: [{
253
283
  type: NgModule,
254
284
  args: [{
255
285
  imports: [
@@ -271,25 +301,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
271
301
  }] });
272
302
 
273
303
  class TokenInterceptor {
274
- constructor() { }
304
+ constructor(jwtHelper, membrsService, stateService) {
305
+ this.jwtHelper = jwtHelper;
306
+ this.membrsService = membrsService;
307
+ this.stateService = stateService;
308
+ }
275
309
  intercept(request, next) {
276
- console.log('intercept request', localStorage.getItem('membrs'));
277
- //this.busyService.busy()
278
- request = request.clone({
279
- setHeaders: {
280
- Authorization: localStorage.getItem('membrs')
310
+ const token = localStorage.getItem("membrs");
311
+ if (token && this.jwtHelper.isTokenExpired(token)) {
312
+ console.log("Token expired. Attempting to reissue.");
313
+ return from(this.membrsService.reissue()).pipe(switchMap(() => {
314
+ const refreshedToken = localStorage.getItem("membrs");
315
+ if (refreshedToken && !this.jwtHelper.isTokenExpired(refreshedToken)) {
316
+ console.log("Token successfully reissued.");
317
+ request = request.clone({
318
+ setHeaders: {
319
+ Authorization: refreshedToken,
320
+ },
321
+ });
322
+ }
323
+ return next.handle(request);
324
+ }), catchError((err) => {
325
+ console.warn("Token refresh failed. Logging out.");
326
+ this.membrsService.logout();
327
+ this.stateService.go("");
328
+ return throwError(() => err);
329
+ }), finalize(() => {
330
+ // this.busyService.finished()
331
+ }));
332
+ }
333
+ if (token && !this.jwtHelper.isTokenExpired(token)) {
334
+ request = request.clone({
335
+ setHeaders: {
336
+ Authorization: token,
337
+ },
338
+ });
339
+ }
340
+ return next.handle(request).pipe(tap((event) => {
341
+ // If this is an HttpResponse, check for x-new-token header
342
+ if (event && event.type === 4 && event.headers) {
343
+ const newToken = event.headers.get('x-new-token');
344
+ if (newToken) {
345
+ localStorage.setItem('membrs', newToken);
346
+ }
281
347
  }
282
- });
283
- return next.handle(request).pipe(finalize(() => {
284
- //this.busyService.finished()
348
+ }), finalize(() => {
349
+ // this.busyService.finished()
285
350
  }));
286
351
  }
287
352
  }
288
- TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TokenInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
289
- TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TokenInterceptor });
290
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TokenInterceptor, decorators: [{
353
+ TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1$1.JwtHelperService }, { token: MembrsService }, { token: i3.StateService }], target: i0.ɵɵFactoryTarget.Injectable });
354
+ TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor });
355
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, decorators: [{
291
356
  type: Injectable
292
- }], ctorParameters: function () { return []; } });
357
+ }], ctorParameters: function () { return [{ type: i1$1.JwtHelperService }, { type: MembrsService }, { type: i3.StateService }]; } });
293
358
 
294
359
  /**
295
360
  * Generated bundle index. Do not edit.
@@ -1 +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 _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\n return new Promise((resolve, reject)=>{\n\n if(!token && !this._token){\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 this.http.post(this.config.apiProtocol + this.config.api+'/token/'+this._token, {}).subscribe((response:any)=>{\n\n if(response.token){\n this.token = response.token\n this._loggedInObservable.next(true)\n resolve(this._token)\n }else {\n reject('NOT_LOGGED_IN')\n }\n \n }, error=>{\n reject('NOT_LOGGED_IN')\n })\n\n }else {\n this._loggedInObservable.next(true)\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 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 //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 \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 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 { 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 console.log('intercept request', localStorage.getItem('membrs'))\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"],"names":[],"mappings":"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"}
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,12 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Inject, 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.
@@ -19,6 +21,7 @@ class MembrsService {
19
21
  constructor(http, config) {
20
22
  this.http = http;
21
23
  this.config = config;
24
+ this.decodedReady = new BehaviorSubject(null);
22
25
  this._lsKey = 'membrs';
23
26
  this._loggedInObservable = new BehaviorSubject(false);
24
27
  // console.log('membrs constructor')
@@ -28,41 +31,52 @@ class MembrsService {
28
31
  }
29
32
  }
30
33
  reissue(token) {
34
+ console.log('Reissuing token...'); // Log function entry
31
35
  return new Promise((resolve, reject) => {
32
36
  if (!token && !this._token) {
37
+ console.log('No token provided and no token found.'); // Log missing token
33
38
  reject('NOT_LOGGED_IN');
34
39
  }
35
- if (token)
40
+ if (token) {
41
+ console.log(`Token provided: ${token}`); // Log provided token
36
42
  this.token = token;
43
+ }
37
44
  // check stored token has not expired, or needs to be reissued soon
38
45
  var reissueIn = this._decoded.exp - Math.floor(Date.now() / 1000);
39
46
  // token has expired
40
47
  if (reissueIn < 0) {
48
+ console.log('Token has expired.'); // Log expired token
41
49
  reject('NOT_LOGGED_IN');
42
50
  }
43
51
  // token expiring soon
44
52
  if (reissueIn < 300) {
53
+ console.log('Token expiring soon. Reissuing...'); // Log imminent expiration
45
54
  this.http.post(this.config.apiProtocol + this.config.api + '/token/' + this._token, {}).subscribe((response) => {
46
55
  if (response.token) {
47
56
  this.token = response.token;
48
57
  this._loggedInObservable.next(true);
58
+ console.log('Token successfully reissued.'); // Log success
49
59
  resolve(this._token);
50
60
  }
51
61
  else {
62
+ console.log('Failed to reissue token.'); // Log failure
52
63
  reject('NOT_LOGGED_IN');
53
64
  }
54
- }, error => {
65
+ }, (error) => {
66
+ console.log('Error reissuing token:', error); // Log error details
55
67
  reject('NOT_LOGGED_IN');
56
68
  });
57
69
  }
58
70
  else {
59
71
  this._loggedInObservable.next(true);
72
+ console.log('Token is valid. No need to reissue.'); // Log valid token
60
73
  resolve(this._token);
61
74
  }
62
75
  });
63
76
  }
64
77
  set token(token) {
65
78
  this._token = token;
79
+ console.log('Token set.');
66
80
  localStorage.setItem(this._lsKey, token);
67
81
  this._decoded = jwtService.decodeToken(this._token);
68
82
  }
@@ -75,6 +89,14 @@ class MembrsService {
75
89
  get profile() {
76
90
  return this._decoded;
77
91
  }
92
+ setProfile(decodedData) {
93
+ this._decoded = decodedData;
94
+ this.decodedReady.next(decodedData); // Emit the new value when profile is set
95
+ console.log(this.decodedReady);
96
+ }
97
+ get decodedReady$() {
98
+ return this.decodedReady.asObservable();
99
+ }
78
100
  get token() {
79
101
  return this._token;
80
102
  }
@@ -90,16 +112,19 @@ class MembrsService {
90
112
  this._token = null;
91
113
  localStorage.removeItem(this._lsKey);
92
114
  resolve(this.config.login);
93
- //this.router.stateService.go('dashboard')
94
115
  }, error => {
95
- reject(error);
116
+ // If the API call fails (e.g. token already invalid/expired), still clear local state
117
+ console.warn('Logout API call failed, clearing local token anyway', error);
118
+ this._token = null;
119
+ localStorage.removeItem(this._lsKey);
120
+ resolve(this.config.login);
96
121
  });
97
122
  });
98
123
  }
99
124
  }
100
- MembrsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
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: [{
125
+ MembrsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
126
+ MembrsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, providedIn: 'root' });
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsService, decorators: [{
103
128
  type: Injectable,
104
129
  args: [{
105
130
  providedIn: 'root'
@@ -175,6 +200,11 @@ function validateResolveFn(transition, router, membrsService, membrsConfig) {
175
200
  return new Promise((resolve, reject) => {
176
201
  // console.log('validate promise resolve')
177
202
  membrsService.reissue().then((response) => {
203
+ if (localStorage.getItem('redirectUrlAfterLogin')) {
204
+ const redirect = localStorage.getItem('redirectUrlAfterLogin');
205
+ localStorage.removeItem('redirectUrlAfterLogin');
206
+ window.location.pathname = redirect;
207
+ }
178
208
  resolve(null);
179
209
  }).catch(error => {
180
210
  localStorage.setItem('redirectUrlAfterLogin', window.location.pathname);
@@ -218,8 +248,8 @@ class MembrsModule {
218
248
  };
219
249
  }
220
250
  }
221
- MembrsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
222
- MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, imports: [CommonModule,
251
+ MembrsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
252
+ MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, imports: [CommonModule,
223
253
  HttpClientModule,
224
254
  JwtModule
225
255
  // JwtModule.forRoot({
@@ -233,7 +263,7 @@ MembrsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
233
263
  // }),
234
264
  // JwtModule.forRoot({})
235
265
  ] });
236
- MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, imports: [CommonModule,
266
+ MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, imports: [CommonModule,
237
267
  HttpClientModule,
238
268
  JwtModule
239
269
  // JwtModule.forRoot({
@@ -247,7 +277,7 @@ MembrsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
247
277
  // }),
248
278
  // JwtModule.forRoot({})
249
279
  ] });
250
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MembrsModule, decorators: [{
280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MembrsModule, decorators: [{
251
281
  type: NgModule,
252
282
  args: [{
253
283
  imports: [
@@ -269,25 +299,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
269
299
  }] });
270
300
 
271
301
  class TokenInterceptor {
272
- constructor() { }
302
+ constructor(jwtHelper, membrsService, stateService) {
303
+ this.jwtHelper = jwtHelper;
304
+ this.membrsService = membrsService;
305
+ this.stateService = stateService;
306
+ }
273
307
  intercept(request, next) {
274
- console.log('intercept request', localStorage.getItem('membrs'));
275
- //this.busyService.busy()
276
- request = request.clone({
277
- setHeaders: {
278
- Authorization: localStorage.getItem('membrs')
308
+ const token = localStorage.getItem("membrs");
309
+ if (token && this.jwtHelper.isTokenExpired(token)) {
310
+ console.log("Token expired. Attempting to reissue.");
311
+ return from(this.membrsService.reissue()).pipe(switchMap(() => {
312
+ const refreshedToken = localStorage.getItem("membrs");
313
+ if (refreshedToken && !this.jwtHelper.isTokenExpired(refreshedToken)) {
314
+ console.log("Token successfully reissued.");
315
+ request = request.clone({
316
+ setHeaders: {
317
+ Authorization: refreshedToken,
318
+ },
319
+ });
320
+ }
321
+ return next.handle(request);
322
+ }), catchError((err) => {
323
+ console.warn("Token refresh failed. Logging out.");
324
+ this.membrsService.logout();
325
+ this.stateService.go("");
326
+ return throwError(() => err);
327
+ }), finalize(() => {
328
+ // this.busyService.finished()
329
+ }));
330
+ }
331
+ if (token && !this.jwtHelper.isTokenExpired(token)) {
332
+ request = request.clone({
333
+ setHeaders: {
334
+ Authorization: token,
335
+ },
336
+ });
337
+ }
338
+ return next.handle(request).pipe(tap((event) => {
339
+ // If this is an HttpResponse, check for x-new-token header
340
+ if (event && event.type === 4 && event.headers) {
341
+ const newToken = event.headers.get('x-new-token');
342
+ if (newToken) {
343
+ localStorage.setItem('membrs', newToken);
344
+ }
279
345
  }
280
- });
281
- return next.handle(request).pipe(finalize(() => {
282
- //this.busyService.finished()
346
+ }), finalize(() => {
347
+ // this.busyService.finished()
283
348
  }));
284
349
  }
285
350
  }
286
- TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TokenInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
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: [{
351
+ TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1$1.JwtHelperService }, { token: MembrsService }, { token: i3.StateService }], target: i0.ɵɵFactoryTarget.Injectable });
352
+ TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor });
353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TokenInterceptor, decorators: [{
289
354
  type: Injectable
290
- }], ctorParameters: function () { return []; } });
355
+ }], ctorParameters: function () { return [{ type: i1$1.JwtHelperService }, { type: MembrsService }, { type: i3.StateService }]; } });
291
356
 
292
357
  /**
293
358
  * Generated bundle index. Do not edit.
@@ -1 +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 _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\n return new Promise((resolve, reject)=>{\n\n if(!token && !this._token){\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 this.http.post(this.config.apiProtocol + this.config.api+'/token/'+this._token, {}).subscribe((response:any)=>{\n\n if(response.token){\n this.token = response.token\n this._loggedInObservable.next(true)\n resolve(this._token)\n }else {\n reject('NOT_LOGGED_IN')\n }\n \n }, error=>{\n reject('NOT_LOGGED_IN')\n })\n\n }else {\n this._loggedInObservable.next(true)\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 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 //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 \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 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 { 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 console.log('intercept request', localStorage.getItem('membrs'))\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"],"names":[],"mappings":"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"}
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 { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
2
- import { Observable } from 'rxjs';
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
- constructor();
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>;
@@ -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,9 +1,9 @@
1
1
  {
2
2
  "name": "@nakedcreativity/membrs-angular-helper",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "peerDependencies": {
5
- "@angular/common": "^15.x",
6
- "@angular/core": "^15.x",
5
+ "@angular/common": ">=15.0.0",
6
+ "@angular/core": ">=15.0.0",
7
7
  "@uirouter/angular": "^11.x",
8
8
  "@auth0/angular-jwt": "^5.x"
9
9
  },