@nakedcreativity/membrs-angular-helper 0.1.4 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,66 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { from, throwError } from "rxjs";
3
+ import { switchMap, catchError, finalize, tap } from "rxjs/operators";
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";
8
+ export class TokenInterceptor {
9
+ jwtHelper;
10
+ membrsService;
11
+ stateService;
12
+ constructor(jwtHelper, membrsService, stateService) {
13
+ this.jwtHelper = jwtHelper;
14
+ this.membrsService = membrsService;
15
+ this.stateService = stateService;
16
+ }
17
+ intercept(request, next) {
18
+ const token = localStorage.getItem("membrs");
19
+ if (token && this.jwtHelper.isTokenExpired(token)) {
20
+ console.log("Token expired. Attempting to reissue.");
21
+ return from(this.membrsService.reissue()).pipe(switchMap(() => {
22
+ const refreshedToken = localStorage.getItem("membrs");
23
+ if (refreshedToken && !this.jwtHelper.isTokenExpired(refreshedToken)) {
24
+ console.log("Token successfully reissued.");
25
+ request = request.clone({
26
+ setHeaders: {
27
+ Authorization: refreshedToken,
28
+ },
29
+ });
30
+ }
31
+ return next.handle(request);
32
+ }), catchError((err) => {
33
+ console.warn("Token refresh failed. Logging out.");
34
+ this.membrsService.logout();
35
+ this.stateService.go("");
36
+ return throwError(() => err);
37
+ }), finalize(() => {
38
+ // this.busyService.finished()
39
+ }));
40
+ }
41
+ if (token && !this.jwtHelper.isTokenExpired(token)) {
42
+ request = request.clone({
43
+ setHeaders: {
44
+ Authorization: token,
45
+ },
46
+ });
47
+ }
48
+ return next.handle(request).pipe(tap((event) => {
49
+ // If this is an HttpResponse, check for x-new-token header
50
+ if (event && event.type === 4 && event.headers) {
51
+ const newToken = event.headers.get('x-new-token');
52
+ if (newToken) {
53
+ localStorage.setItem('membrs', newToken);
54
+ }
55
+ }
56
+ }), finalize(() => {
57
+ // this.busyService.finished()
58
+ }));
59
+ }
60
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1.JwtHelperService }, { token: i2.MembrsService }, { token: i3.StateService }], target: i0.ɵɵFactoryTarget.Injectable });
61
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TokenInterceptor });
62
+ }
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TokenInterceptor, decorators: [{
64
+ type: Injectable
65
+ }], ctorParameters: () => [{ type: i1.JwtHelperService }, { type: i2.MembrsService }, { type: i3.StateService }] });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBS3RFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDUDtJQUFxQztJQUFzQztJQUEvRixZQUFvQixTQUEyQixFQUFVLGFBQTRCLEVBQVUsWUFBMEI7UUFBckcsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQUcsQ0FBQztJQUU3SCxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUNwRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM1QyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RELElBQUksY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUU7b0JBQ3BFLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztvQkFDNUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0JBQ3RCLFVBQVUsRUFBRTs0QkFDVixhQUFhLEVBQUUsY0FBYzt5QkFDOUI7cUJBQ0YsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDWiw4QkFBOEI7WUFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNIO1FBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDdEIsVUFBVSxFQUFFO29CQUNWLGFBQWEsRUFBRSxLQUFLO2lCQUNyQjthQUNGLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDOUIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWiwyREFBMkQ7WUFDM0QsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDOUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xELElBQUksUUFBUSxFQUFFO29CQUNaLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUMxQzthQUNGO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNaLDhCQUE4QjtRQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt3R0F2RFUsZ0JBQWdCOzRHQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIkBhdXRoMC9hbmd1bGFyLWp3dFwiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBIdHRwUmVxdWVzdCwgSHR0cEhhbmRsZXIsIEh0dHBFdmVudCwgSHR0cEludGVyY2VwdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHN3aXRjaE1hcCwgY2F0Y2hFcnJvciwgZmluYWxpemUsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgTWVtYnJzU2VydmljZSB9IGZyb20gXCIuL21lbWJycy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiQHVpcm91dGVyL2FuZ3VsYXJcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGp3dEhlbHBlcjogSnd0SGVscGVyU2VydmljZSwgcHJpdmF0ZSBtZW1icnNTZXJ2aWNlOiBNZW1icnNTZXJ2aWNlLCBwcml2YXRlIHN0YXRlU2VydmljZTogU3RhdGVTZXJ2aWNlKSB7fVxuXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibWVtYnJzXCIpO1xuXG4gICAgaWYgKHRva2VuICYmIHRoaXMuand0SGVscGVyLmlzVG9rZW5FeHBpcmVkKHRva2VuKSkge1xuICAgICAgY29uc29sZS5sb2coXCJUb2tlbiBleHBpcmVkLiBBdHRlbXB0aW5nIHRvIHJlaXNzdWUuXCIpO1xuICAgICAgcmV0dXJuIGZyb20odGhpcy5tZW1icnNTZXJ2aWNlLnJlaXNzdWUoKSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCByZWZyZXNoZWRUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibWVtYnJzXCIpO1xuICAgICAgICAgIGlmIChyZWZyZXNoZWRUb2tlbiAmJiAhdGhpcy5qd3RIZWxwZXIuaXNUb2tlbkV4cGlyZWQocmVmcmVzaGVkVG9rZW4pKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRva2VuIHN1Y2Nlc3NmdWxseSByZWlzc3VlZC5cIik7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XG4gICAgICAgICAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiByZWZyZXNoZWRUb2tlbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJUb2tlbiByZWZyZXNoIGZhaWxlZC4gTG9nZ2luZyBvdXQuXCIpO1xuICAgICAgICAgIHRoaXMubWVtYnJzU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5nbyhcIlwiKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIC8vIHRoaXMuYnVzeVNlcnZpY2UuZmluaXNoZWQoKVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4gJiYgIXRoaXMuand0SGVscGVyLmlzVG9rZW5FeHBpcmVkKHRva2VuKSkge1xuICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogdG9rZW4sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcbiAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBIdHRwUmVzcG9uc2UsIGNoZWNrIGZvciB4LW5ldy10b2tlbiBoZWFkZXJcbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09IDQgJiYgZXZlbnQuaGVhZGVycykge1xuICAgICAgICAgIGNvbnN0IG5ld1Rva2VuID0gZXZlbnQuaGVhZGVycy5nZXQoJ3gtbmV3LXRva2VuJyk7XG4gICAgICAgICAgaWYgKG5ld1Rva2VuKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVtYnJzJywgbmV3VG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIC8vIHRoaXMuYnVzeVNlcnZpY2UuZmluaXNoZWQoKVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,155 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MembrsService } from './membrs.service';
4
+ import { JwtModule } from "@auth0/angular-jwt";
5
+ import { HttpClientModule } from "@angular/common/http";
6
+ import { UIRouterModule } from '@uirouter/angular';
7
+ import { Transition, UIRouter } from '@uirouter/angular';
8
+ import { routerConfigFn } from './router.config';
9
+ import { MembrsConfigService } from './config.service';
10
+ import { retrieveToken } from './token';
11
+ import * as i0 from "@angular/core";
12
+ export const validateResolve = {
13
+ token: 'reissue',
14
+ deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
15
+ resolveFn: validateResolveFn
16
+ };
17
+ export const reissueResolve = {
18
+ token: 'reissue',
19
+ deps: [Transition, UIRouter, MembrsService, MembrsConfigService],
20
+ resolveFn: reissueResolveFn
21
+ };
22
+ export const reissueState = {
23
+ name: 'reissue',
24
+ url: '/reissue?token',
25
+ views: {},
26
+ resolve: [
27
+ reissueResolve
28
+ ]
29
+ };
30
+ export function reissueResolveFn(transition, router, membrsService, membrsConfig) {
31
+ //console.log(membrsService)
32
+ return new Promise((resolve, reject) => {
33
+ // console.log('reissue promise resolve')
34
+ // console.log(transition.params().token)
35
+ membrsService.reissue(transition.params().token).then((response) => {
36
+ if (localStorage.getItem('redirectUrlAfterLogin')) {
37
+ const redirect = localStorage.getItem('redirectUrlAfterLogin');
38
+ localStorage.removeItem('redirectUrlAfterLogin');
39
+ window.location.pathname = redirect;
40
+ }
41
+ else {
42
+ router.stateService.go(membrsConfig.defaultState, {}, { inherit: false });
43
+ }
44
+ reject();
45
+ }).catch(error => {
46
+ //console.log('error in reissue resolve')
47
+ //console.log(error)
48
+ //window.location.href = environment.login
49
+ reject(error);
50
+ });
51
+ });
52
+ }
53
+ export function validateResolveFn(transition, router, membrsService, membrsConfig) {
54
+ //console.log(membrsService)
55
+ return new Promise((resolve, reject) => {
56
+ // console.log('validate promise resolve')
57
+ membrsService.reissue().then((response) => {
58
+ if (localStorage.getItem('redirectUrlAfterLogin')) {
59
+ const redirect = localStorage.getItem('redirectUrlAfterLogin');
60
+ localStorage.removeItem('redirectUrlAfterLogin');
61
+ window.location.pathname = redirect;
62
+ }
63
+ resolve(null);
64
+ }).catch(error => {
65
+ localStorage.setItem('redirectUrlAfterLogin', window.location.pathname);
66
+ window.location.href = membrsConfig.login;
67
+ reject(error);
68
+ });
69
+ });
70
+ }
71
+ export function jwtOptionsFactory(config) {
72
+ // console.log('jwt options factory')
73
+ // console.log(config)
74
+ return {
75
+ tokenGetter: () => {
76
+ console.log('token getter', localStorage.getItem('membrs'));
77
+ return localStorage.getItem('membrs');
78
+ },
79
+ allowedDomains: [config.api]
80
+ };
81
+ }
82
+ /** The top level state(s) */
83
+ export const STATES = [
84
+ reissueState
85
+ ];
86
+ export class MembrsModule {
87
+ static forRoot(config) {
88
+ const moduleProviders = UIRouterModule.forChild({
89
+ states: STATES,
90
+ config: routerConfigFn
91
+ }).providers;
92
+ moduleProviders.push(JwtModule.forRoot({
93
+ config: {
94
+ tokenGetter: retrieveToken,
95
+ allowedDomains: []
96
+ }
97
+ }).providers);
98
+ moduleProviders.push(MembrsService);
99
+ moduleProviders.push({ provide: MembrsConfigService, useValue: config });
100
+ return {
101
+ ngModule: MembrsModule,
102
+ providers: moduleProviders //[{provide: MembrsConfigService,useValue: config}]
103
+ };
104
+ }
105
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
106
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: MembrsModule, imports: [CommonModule,
107
+ HttpClientModule,
108
+ JwtModule
109
+ // JwtModule.forRoot({
110
+ // config: {
111
+ // tokenGetter: retrieveToken
112
+ // }
113
+ // })
114
+ // UIRouterModule.forChild({
115
+ // states: STATES,
116
+ // config: routerConfigFn,
117
+ // }),
118
+ // JwtModule.forRoot({})
119
+ ] });
120
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsModule, imports: [CommonModule,
121
+ HttpClientModule,
122
+ JwtModule
123
+ // JwtModule.forRoot({
124
+ // config: {
125
+ // tokenGetter: retrieveToken
126
+ // }
127
+ // })
128
+ // UIRouterModule.forChild({
129
+ // states: STATES,
130
+ // config: routerConfigFn,
131
+ // }),
132
+ // JwtModule.forRoot({})
133
+ ] });
134
+ }
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsModule, decorators: [{
136
+ type: NgModule,
137
+ args: [{
138
+ imports: [
139
+ CommonModule,
140
+ HttpClientModule,
141
+ JwtModule
142
+ // JwtModule.forRoot({
143
+ // config: {
144
+ // tokenGetter: retrieveToken
145
+ // }
146
+ // })
147
+ // UIRouterModule.forChild({
148
+ // states: STATES,
149
+ // config: routerConfigFn,
150
+ // }),
151
+ // JwtModule.forRoot({})
152
+ ]
153
+ }]
154
+ }] });
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lbWJycy9zcmMvbGliL21lbWJycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBR2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBRXhDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUMzQixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsQ0FBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsQ0FBRTtJQUNsRSxTQUFTLEVBQUUsaUJBQWlCO0NBQy9CLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsSUFBSSxFQUFFLENBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUU7SUFDbEUsU0FBUyxFQUFFLGdCQUFnQjtDQUM1QixDQUFBO0FBRUQsTUFBTSxDQUFDLE1B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Q04sS0FBSztZQUNMLDRCQUE0QjtZQUM1QixvQkFBb0I7WUFDcEIsNEJBQTRCO1lBQzVCLE1BQU07WUFDTix3QkFBd0I7Ozs0RkFNZixZQUFZO2tCQXBCeEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1Qsc0JBQXNCO3dCQUN0QixjQUFjO3dCQUNkLGlDQUFpQzt3QkFDakMsTUFBTTt3QkFDTixLQUFLO3dCQUNMLDRCQUE0Qjt3QkFDNUIsb0JBQW9CO3dCQUNwQiw0QkFBNEI7d0JBQzVCLE1BQU07d0JBQ04sd0JBQXdCO3FCQUN6QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1lbWJyc1NlcnZpY2UgfSBmcm9tICcuL21lbWJycy5zZXJ2aWNlJztcbmltcG9ydCB7IEp3dE1vZHVsZSwgSldUX09QVElPTlMgfSBmcm9tIFwiQGF1dGgwL2FuZ3VsYXItand0XCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBVSVJvdXRlck1vZHVsZSB9IGZyb20gJ0B1aXJvdXRlci9hbmd1bGFyJ1xuXG5pbXBvcnQgeyBOZzJTdGF0ZURlY2xhcmF0aW9uIH0gZnJvbSAnQHVpcm91dGVyL2FuZ3VsYXInO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiwgVUlSb3V0ZXIgfSBmcm9tICdAdWlyb3V0ZXIvYW5ndWxhcidcblxuaW1wb3J0IHsgcm91dGVyQ29uZmlnRm4gfSBmcm9tICcuL3JvdXRlci5jb25maWcnO1xuaW1wb3J0IHsgTWVtYnJzQ29uZmlnIH0gZnJvbSAnLi9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1lbWJyc0NvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IHJldHJpZXZlVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUmVzb2x2ZSA9IHtcbiAgICB0b2tlbjogJ3JlaXNzdWUnLFxuICAgIGRlcHM6IFsgVHJhbnNpdGlvbiwgVUlSb3V0ZXIsIE1lbWJyc1NlcnZpY2UsIE1lbWJyc0NvbmZpZ1NlcnZpY2UgXSxcbiAgICByZXNvbHZlRm46IHZhbGlkYXRlUmVzb2x2ZUZuXG59XG5cbmV4cG9ydCBjb25zdCByZWlzc3VlUmVzb2x2ZSA9IHtcbiAgdG9rZW46ICdyZWlzc3VlJyxcbiAgZGVwczogWyBUcmFuc2l0aW9uLCBVSVJvdXRlciwgTWVtYnJzU2VydmljZSwgTWVtYnJzQ29uZmlnU2VydmljZSBdLFxuICByZXNvbHZlRm46IHJlaXNzdWVSZXNvbHZlRm5cbn1cblxuZXhwb3J0IGNvbnN0IHJlaXNzdWVTdGF0ZTpOZzJTdGF0ZURlY2xhcmF0aW9uID0ge1xuXHRuYW1lOiAncmVpc3N1ZScsIFxuXHR1cmw6ICcvcmVpc3N1ZT90b2tlbicsXG5cdHZpZXdzOiB7IH0sXG5cdHJlc29sdmU6IFtcbiAgICByZWlzc3VlUmVzb2x2ZVxuXHRdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWlzc3VlUmVzb2x2ZUZuKHRyYW5zaXRpb24sIHJvdXRlciwgbWVtYnJzU2VydmljZSwgbWVtYnJzQ29uZmlnOk1lbWJyc0NvbmZpZykge1xuICAgIFxuICAgIC8vY29uc29sZS5sb2cobWVtYnJzU2VydmljZSlcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coJ3JlaXNzdWUgcHJvbWlzZSByZXNvbHZlJylcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRyYW5zaXRpb24ucGFyYW1zKCkudG9rZW4pXG4gICAgICBtZW1icnNTZXJ2aWNlLnJlaXNzdWUodHJhbnNpdGlvbi5wYXJhbXMoKS50b2tlbikudGhlbigocmVzcG9uc2UpPT57XG4gICAgICAgICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZGlyZWN0VXJsQWZ0ZXJMb2dpbicpKXtcbiAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZGlyZWN0VXJsQWZ0ZXJMb2dpbicpXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncmVkaXJlY3RVcmxBZnRlckxvZ2luJylcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9IHJlZGlyZWN0XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgcm91dGVyLnN0YXRlU2VydmljZS5nbyhtZW1icnNDb25maWcuZGVmYXVsdFN0YXRlLCB7fSwge2luaGVyaXQ6ZmFsc2V9KVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoKVxuICAgICAgfSkuY2F0Y2goZXJyb3I9PntcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdlcnJvciBpbiByZWlzc3VlIHJlc29sdmUnKVxuICAgICAgICAgIC8vY29uc29sZS5sb2coZXJyb3IpXG4gICAgICAgICAgLy93aW5kb3cubG9jYXRpb24uaHJlZiA9IGVudmlyb25tZW50LmxvZ2luXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgfSlcblxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSZXNvbHZlRm4odHJhbnNpdGlvbiwgcm91dGVyLCBtZW1icnNTZXJ2aWNlLCBtZW1icnNDb25maWc6TWVtYnJzQ29uZmlnKSB7XG4gIFxuICAvL2NvbnNvbGUubG9nKG1lbWJyc1NlcnZpY2UpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlIHByb21pc2UgcmVzb2x2ZScpXG4gICAgXG4gICAgbWVtYnJzU2VydmljZS5yZWlzc3VlKCkudGhlbigocmVzcG9uc2UpPT57XG4gICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmVkaXJlY3RVcmxBZnRlckxvZ2luJykpe1xuICAgICAgICBjb25zdCByZWRpcmVjdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZWRpcmVjdFVybEFmdGVyTG9naW4nKVxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncmVkaXJlY3RVcmxBZnRlckxvZ2luJylcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID0gcmVkaXJlY3RcbiAgICAgIH1cbiAgICAgIHJlc29sdmUobnVsbClcbiAgICB9KS5jYXRjaChlcnJvcj0+e1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3JlZGlyZWN0VXJsQWZ0ZXJMb2dpbicsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbWVtYnJzQ29uZmlnLmxvZ2luXG4gICAgICByZWplY3QoZXJyb3IpXG4gICAgfSlcblxufSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp3dE9wdGlvbnNGYWN0b3J5KGNvbmZpZykge1xuICAvLyBjb25zb2xlLmxvZygnand0IG9wdGlvbnMgZmFjdG9yeScpXG4gIC8vIGNvbnNvbGUubG9nKGNvbmZpZylcbiAgcmV0dXJuIHtcbiAgICB0b2tlbkdldHRlcjogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ3Rva2VuIGdldHRlcicsICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVtYnJzJykpXG4gICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lbWJycycpO1xuICAgIH0sXG4gICAgYWxsb3dlZERvbWFpbnM6IFtjb25maWcuYXBpXVxuICB9XG59XG5cblxuLyoqIFRoZSB0b3AgbGV2ZWwgc3RhdGUocykgKi9cbmV4cG9ydCBjb25zdCBTVEFURVMgPSBbXG4gICAgcmVpc3N1ZVN0YXRlXG5dXG5cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgIEp3dE1vZHVsZVxuICAgIC8vIEp3dE1vZHVsZS5mb3JSb290KHtcbiAgICAvLyAgIGNvbmZpZzoge1xuICAgIC8vICAgICB0b2tlbkdldHRlcjogcmV0cmlldmVUb2tlblxuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gICAgLy8gVUlSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoe1xuICAgIC8vICAgc3RhdGVzOiBTVEFURVMsXG4gICAgLy8gICBjb25maWc6IHJvdXRlckNvbmZpZ0ZuLFxuICAgIC8vIH0pLFxuICAgIC8vIEp3dE1vZHVsZS5mb3JSb290KHt9KVxuICBdXG59KVxuXG5cblxuZXhwb3J0IGNsYXNzIE1lbWJyc01vZHVsZSB7IFxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE1lbWJyc0NvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TWVtYnJzTW9kdWxlPiB7XG5cblxuICAgIGNvbnN0IG1vZHVsZVByb3ZpZGVycyA9IFVJUm91dGVyTW9kdWxlLmZvckNoaWxkKHtcbiAgICAgIHN0YXRlczogU1RBVEVTLFxuICAgICAgY29uZmlnOiByb3V0ZXJDb25maWdGblxuICAgIH0pLnByb3ZpZGVyc1xuXG4gICAgbW9kdWxlUHJvdmlkZXJzLnB1c2goSnd0TW9kdWxlLmZvclJvb3Qoe1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIHRva2VuR2V0dGVyOiByZXRyaWV2ZVRva2VuLFxuICAgICAgICBhbGxvd2VkRG9tYWluczogW11cbiAgICAgIH1cbiAgICB9KS5wcm92aWRlcnMpXG4gICAgICBcbiAgICBtb2R1bGVQcm92aWRlcnMucHVzaChNZW1icnNTZXJ2aWNlKVxuICAgIG1vZHVsZVByb3ZpZGVycy5wdXNoKHtwcm92aWRlOiBNZW1icnNDb25maWdTZXJ2aWNlLHVzZVZhbHVlOiBjb25maWd9KTtcbiAgICBcbiAgIFxuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTWVtYnJzTW9kdWxlLCBcbiAgICAgIHByb3ZpZGVyczogbW9kdWxlUHJvdmlkZXJzIC8vW3twcm92aWRlOiBNZW1icnNDb25maWdTZXJ2aWNlLHVzZVZhbHVlOiBjb25maWd9XVxuICAgIH07XG4gICAgXG4gIH1cblxufVxuIl19
@@ -0,0 +1,128 @@
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import { JwtHelperService } from '@auth0/angular-jwt';
3
+ import { MembrsConfigService } from './config.service';
4
+ import { BehaviorSubject } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ const jwtService = new JwtHelperService();
8
+ export class MembrsService {
9
+ http;
10
+ config;
11
+ _token;
12
+ _decoded;
13
+ decodedReady = new BehaviorSubject(null);
14
+ _lsKey = 'membrs';
15
+ _loggedInObservable = new BehaviorSubject(false);
16
+ constructor(http, config) {
17
+ this.http = http;
18
+ this.config = config;
19
+ // console.log('membrs constructor')
20
+ // if the token exists in local storage, retrieve it back to the service
21
+ if (localStorage.getItem(this._lsKey)) {
22
+ this.token = localStorage.getItem(this._lsKey);
23
+ }
24
+ }
25
+ reissue(token) {
26
+ console.log('Reissuing token...'); // Log function entry
27
+ return new Promise((resolve, reject) => {
28
+ if (!token && !this._token) {
29
+ console.log('No token provided and no token found.'); // Log missing token
30
+ reject('NOT_LOGGED_IN');
31
+ }
32
+ if (token) {
33
+ console.log(`Token provided: ${token}`); // Log provided token
34
+ this.token = token;
35
+ }
36
+ // check stored token has not expired, or needs to be reissued soon
37
+ var reissueIn = this._decoded.exp - Math.floor(Date.now() / 1000);
38
+ // token has expired
39
+ if (reissueIn < 0) {
40
+ console.log('Token has expired.'); // Log expired token
41
+ reject('NOT_LOGGED_IN');
42
+ }
43
+ // token expiring soon
44
+ if (reissueIn < 300) {
45
+ console.log('Token expiring soon. Reissuing...'); // Log imminent expiration
46
+ this.http.post(this.config.apiProtocol + this.config.api + '/token/' + this._token, {}).subscribe((response) => {
47
+ if (response.token) {
48
+ this.token = response.token;
49
+ this._loggedInObservable.next(true);
50
+ console.log('Token successfully reissued.'); // Log success
51
+ resolve(this._token);
52
+ }
53
+ else {
54
+ console.log('Failed to reissue token.'); // Log failure
55
+ reject('NOT_LOGGED_IN');
56
+ }
57
+ }, (error) => {
58
+ console.log('Error reissuing token:', error); // Log error details
59
+ reject('NOT_LOGGED_IN');
60
+ });
61
+ }
62
+ else {
63
+ this._loggedInObservable.next(true);
64
+ console.log('Token is valid. No need to reissue.'); // Log valid token
65
+ resolve(this._token);
66
+ }
67
+ });
68
+ }
69
+ set token(token) {
70
+ this._token = token;
71
+ console.log('Token set.');
72
+ localStorage.setItem(this._lsKey, token);
73
+ this._decoded = jwtService.decodeToken(this._token);
74
+ }
75
+ deleteToken() {
76
+ localStorage.removeItem(this._lsKey);
77
+ }
78
+ isLoggedIn() {
79
+ return this.token ? true : false;
80
+ }
81
+ get profile() {
82
+ return this._decoded;
83
+ }
84
+ setProfile(decodedData) {
85
+ this._decoded = decodedData;
86
+ this.decodedReady.next(decodedData); // Emit the new value when profile is set
87
+ console.log(this.decodedReady);
88
+ }
89
+ get decodedReady$() {
90
+ return this.decodedReady.asObservable();
91
+ }
92
+ get token() {
93
+ return this._token;
94
+ }
95
+ get admin() {
96
+ return this.profile.permission == 1;
97
+ }
98
+ get isLoggedInObservable() {
99
+ return this._loggedInObservable;
100
+ }
101
+ logout() {
102
+ return new Promise((resolve, reject) => {
103
+ this.http.delete(this.config.apiProtocol + this.config.api + '/token/' + this._token).subscribe((response) => {
104
+ this._token = null;
105
+ localStorage.removeItem(this._lsKey);
106
+ resolve(this.config.login);
107
+ }, error => {
108
+ // If the API call fails (e.g. token already invalid/expired), still clear local state
109
+ console.warn('Logout API call failed, clearing local token anyway', error);
110
+ this._token = null;
111
+ localStorage.removeItem(this._lsKey);
112
+ resolve(this.config.login);
113
+ });
114
+ });
115
+ }
116
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsService, deps: [{ token: i1.HttpClient }, { token: MembrsConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
117
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsService, providedIn: 'root' });
118
+ }
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MembrsService, decorators: [{
120
+ type: Injectable,
121
+ args: [{
122
+ providedIn: 'root'
123
+ }]
124
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
125
+ type: Inject,
126
+ args: [MembrsConfigService]
127
+ }] }] });
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYnJzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZW1icnMvc3JjL2xpYi9tZW1icnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFBO0FBT3pDLE1BQU0sT0FBTyxhQUFhO0lBVUo7SUFBdUQ7SUFSM0UsTUFBTSxDQUFTO0lBQ2YsUUFBUSxDQUFNO0lBRVAsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBRXJELE1BQU0sR0FBVyxRQUFRLENBQUM7SUFDMUIsbUJBQW1CLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTFFLFlBQW9CLElBQWdCLEVBQXVDLE1BQW9CO1FBQTNFLFNBQUksR0FBSixJQUFJLENBQVk7UUFBdUMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUU3RixvQ0FBb0M7UUFDcEMsd0VBQXdFO1FBQ3hFLElBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUMvQztJQUVILENBQUM7SUFFRCxPQUFPLENBQUMsS0FBYztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxxQkFBcUI7UUFFeEQsT0FBTyxJQUFJLE9B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O2dCQUNuQixZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNULHNGQUFzRjtnQkFDdEYsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0EvSFUsYUFBYSw0Q0FVc0IsbUJBQW1COzRHQVZ0RCxhQUFhLGNBSlosTUFBTTs7NEZBSVAsYUFBYTtrQkFMekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWF3QyxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSnd0SGVscGVyU2VydmljZSB9IGZyb20gJ0BhdXRoMC9hbmd1bGFyLWp3dCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBNZW1icnNDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWcuc2VydmljZSdcbmltcG9ydCB7IE1lbWJyc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmNvbnN0IGp3dFNlcnZpY2UgPSBuZXcgSnd0SGVscGVyU2VydmljZSgpXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuXG5cbmV4cG9ydCBjbGFzcyBNZW1icnNTZXJ2aWNlIHtcblxuICBfdG9rZW46IHN0cmluZztcbiAgX2RlY29kZWQ6IGFueTtcblxuICBwdWJsaWMgZGVjb2RlZFJlYWR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXG4gIF9sc0tleTogc3RyaW5nID0gJ21lbWJycyc7XG4gIF9sb2dnZWRJbk9ic2VydmFibGU6IEJlaGF2aW9yU3ViamVjdDxCb29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBASW5qZWN0KE1lbWJyc0NvbmZpZ1NlcnZpY2UpIHByaXZhdGUgY29uZmlnOiBNZW1icnNDb25maWcpIHtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdtZW1icnMgY29uc3RydWN0b3InKVxuICAgIC8vIGlmIHRoZSB0b2tlbiBleGlzdHMgaW4gbG9jYWwgc3RvcmFnZSwgcmV0cmlldmUgaXQgYmFjayB0byB0aGUgc2VydmljZVxuICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2xzS2V5KSl7XG4gICAgICB0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fbHNLZXkpXG4gICAgfVxuICBcbiAgfVxuXG4gIHJlaXNzdWUodG9rZW4/OiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZygnUmVpc3N1aW5nIHRva2VuLi4uJyk7IC8vIExvZyBmdW5jdGlvbiBlbnRyeVxuICAgIFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIXRva2VuICYmICF0aGlzLl90b2tlbikge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gdG9rZW4gcHJvdmlkZWQgYW5kIG5vIHRva2VuIGZvdW5kLicpOyAvLyBMb2cgbWlzc2luZyB0b2tlblxuICAgICAgICByZWplY3QoJ05PVF9MT0dHRURfSU4nKTtcbiAgICAgIH1cbiAgXG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgY29uc29sZS5sb2coYFRva2VuIHByb3ZpZGVkOiAke3Rva2VufWApOyAvLyBMb2cgcHJvdmlkZWQgdG9rZW5cbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgICAgfVxuICBcbiAgICAgIC8vIGNoZWNrIHN0b3JlZCB0b2tlbiBoYXMgbm90IGV4cGlyZWQsIG9yIG5lZWRzIHRvIGJlIHJlaXNzdWVkIHNvb25cbiAgICAgIHZhciByZWlzc3VlSW4gPSB0aGlzLl9kZWNvZGVkLmV4cCAtIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBcbiAgICAgIC8vIHRva2VuIGhhcyBleHBpcmVkXG4gICAgICBpZiAocmVpc3N1ZUluIDwgMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnVG9rZW4gaGFzIGV4cGlyZWQuJyk7IC8vIExvZyBleHBpcmVkIHRva2VuXG4gICAgICAgIHJlamVjdCgnTk9UX0xPR0dFRF9JTicpO1xuICAgICAgfVxuICBcbiAgICAgIC8vIHRva2VuIGV4cGlyaW5nIHNvb25cbiAgICAgIGlmIChyZWlzc3VlSW4gPCAzMDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1Rva2VuIGV4cGlyaW5nIHNvb24uIFJlaXNzdWluZy4uLicpOyAvLyBMb2cgaW1taW5lbnQgZXhwaXJhdGlvblxuICAgICAgICB0aGlzLmh0dHAucG9zdCh0aGlzLmNvbmZpZy5hcGlQcm90b2NvbCArIHRoaXMuY29uZmlnLmFwaSArICcvdG9rZW4vJyArIHRoaXMuX3Rva2VuLCB7fSkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UudG9rZW4pIHtcbiAgICAgICAgICAgICAgdGhpcy50b2tlbiA9IHJlc3BvbnNlLnRva2VuO1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZWRJbk9ic2VydmFibGUubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1Rva2VuIHN1Y2Nlc3NmdWxseSByZWlzc3VlZC4nKTsgLy8gTG9nIHN1Y2Nlc3NcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl90b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHJlaXNzdWUgdG9rZW4uJyk7IC8vIExvZyBmYWlsdXJlXG4gICAgICAgICAgICAgIHJlamVjdCgnTk9UX0xPR0dFRF9JTicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgcmVpc3N1aW5nIHRva2VuOicsIGVycm9yKTsgLy8gTG9nIGVycm9yIGRldGFpbHNcbiAgICAgICAgICAgIHJlamVjdCgnTk9UX0xPR0dFRF9JTicpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlZEluT2JzZXJ2YWJsZS5uZXh0KHRydWUpO1xuICAgICAgICBjb25zb2xlLmxvZygnVG9rZW4gaXMgdmFsaWQuIE5vIG5lZWQgdG8gcmVpc3N1ZS4nKTsgLy8gTG9nIHZhbGlkIHRva2VuXG4gICAgICAgIHJlc29sdmUodGhpcy5fdG9rZW4pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuXG4gIHNldCB0b2tlbih0b2tlbil7XG4gICAgdGhpcy5fdG9rZW4gPSB0b2tlblxuICAgIGNvbnNvbGUubG9nKCdUb2tlbiBzZXQuJyk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5fbHNLZXksIHRva2VuKVxuICAgIHRoaXMuX2RlY29kZWQgPSBqd3RTZXJ2aWNlLmRlY29kZVRva2VuKHRoaXMuX3Rva2VuKVxuICB9XG5cbiAgZGVsZXRlVG9rZW4oKXtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9sc0tleSlcbiAgfVxuXG4gIGlzTG9nZ2VkSW4oKXtcbiAgICByZXR1cm4gdGhpcy50b2tlbiA/IHRydWUgOiBmYWxzZVxuICB9XG5cbiAgZ2V0IHByb2ZpbGUoKXtcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlZFxuICB9XG5cbiAgc2V0UHJvZmlsZShkZWNvZGVkRGF0YSkge1xuICAgIHRoaXMuX2RlY29kZWQgPSBkZWNvZGVkRGF0YTtcbiAgICB0aGlzLmRlY29kZWRSZWFkeS5uZXh0KGRlY29kZWREYXRhKTsgLy8gRW1pdCB0aGUgbmV3IHZhbHVlIHdoZW4gcHJvZmlsZSBpcyBzZXRcbiAgICBjb25zb2xlLmxvZyh0aGlzLmRlY29kZWRSZWFkeSk7XG4gIH1cblxuICBnZXQgZGVjb2RlZFJlYWR5JCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVkUmVhZHkuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgdG9rZW4oKXtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5cbiAgfVxuXG4gIGdldCBhZG1pbiAoKXtcbiAgICByZXR1cm4gdGhpcy5wcm9maWxlLnBlcm1pc3Npb24gPT0gMVxuICB9XG5cbiAgZ2V0IGlzTG9nZ2VkSW5PYnNlcnZhYmxlKCl7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ2dlZEluT2JzZXJ2YWJsZVxuICB9XG4gIFxuICBsb2dvdXQoKXtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PntcbiAgICAgIHRoaXMuaHR0cC5kZWxldGUodGhpcy5jb25maWcuYXBpUHJvdG9jb2wgKyB0aGlzLmNvbmZpZy5hcGkgKyAnL3Rva2VuLycgKyB0aGlzLl90b2tlbikuc3Vic2NyaWJlKChyZXNwb25zZTphbnkpPT57XG4gICAgICAgIHRoaXMuX3Rva2VuID0gbnVsbDtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5fbHNLZXkpO1xuICAgICAgICByZXNvbHZlKHRoaXMuY29uZmlnLmxvZ2luKTtcbiAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgLy8gSWYgdGhlIEFQSSBjYWxsIGZhaWxzIChlLmcuIHRva2VuIGFscmVhZHkgaW52YWxpZC9leHBpcmVkKSwgc3RpbGwgY2xlYXIgbG9jYWwgc3RhdGVcbiAgICAgICAgY29uc29sZS53YXJuKCdMb2dvdXQgQVBJIGNhbGwgZmFpbGVkLCBjbGVhcmluZyBsb2NhbCB0b2tlbiBhbnl3YXknLCBlcnJvcik7XG4gICAgICAgIHRoaXMuX3Rva2VuID0gbnVsbDtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5fbHNLZXkpO1xuICAgICAgICByZXNvbHZlKHRoaXMuY29uZmlnLmxvZ2luKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxufVxuIl19