taxtank-core 2.0.38 → 2.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
 - package/fesm2022/taxtank-core-common.mjs +20 -20
 - package/fesm2022/taxtank-core-common.mjs.map +1 -1
 - package/fesm2022/taxtank-core.mjs +611 -621
 - package/fesm2022/taxtank-core.mjs.map +1 -1
 - package/index.d.ts +14 -16
 - package/package.json +1 -1
 - package/index.d.ts.map +0 -1
 
    
        package/README.md
    CHANGED
    
    | 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Core
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            TaxTank Core library with shared business logic. This logic should be shared between all TaxTank apps (Web/Native/future apps maybe).
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            Contains all models, services, validators, etc.
         
     | 
| 
      
 1 
     | 
    
         
            +
            # Core
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            TaxTank Core library with shared business logic. This logic should be shared between all TaxTank apps (Web/Native/future apps maybe).
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Contains all models, services, validators, etc.
         
     | 
| 
         @@ -53,10 +53,10 @@ class MixpanelService { 
     | 
|
| 
       53 
53 
     | 
    
         
             
                    }
         
     | 
| 
       54 
54 
     | 
    
         
             
                    mixpanel['track_pageview']();
         
     | 
| 
       55 
55 
     | 
    
         
             
                }
         
     | 
| 
       56 
     | 
    
         
            -
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20. 
     | 
| 
       57 
     | 
    
         
            -
                static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 56 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MixpanelService, deps: [{ token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
         
     | 
| 
      
 57 
     | 
    
         
            +
                static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MixpanelService, providedIn: 'root' }); }
         
     | 
| 
       58 
58 
     | 
    
         
             
            }
         
     | 
| 
       59 
     | 
    
         
            -
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 59 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MixpanelService, decorators: [{
         
     | 
| 
       60 
60 
     | 
    
         
             
                        type: Injectable,
         
     | 
| 
       61 
61 
     | 
    
         
             
                        args: [{
         
     | 
| 
       62 
62 
     | 
    
         
             
                                providedIn: 'root'
         
     | 
| 
         @@ -123,10 +123,10 @@ class JwtService extends JwtHelperService { 
     | 
|
| 
       123 
123 
     | 
    
         
             
                isMe(userId) {
         
     | 
| 
       124 
124 
     | 
    
         
             
                    return this.decode().id === userId;
         
     | 
| 
       125 
125 
     | 
    
         
             
                }
         
     | 
| 
       126 
     | 
    
         
            -
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20. 
     | 
| 
       127 
     | 
    
         
            -
                static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 126 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: JwtService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
         
     | 
| 
      
 127 
     | 
    
         
            +
                static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: JwtService, providedIn: 'root' }); }
         
     | 
| 
       128 
128 
     | 
    
         
             
            }
         
     | 
| 
       129 
     | 
    
         
            -
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 129 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: JwtService, decorators: [{
         
     | 
| 
       130 
130 
     | 
    
         
             
                        type: Injectable,
         
     | 
| 
       131 
131 
     | 
    
         
             
                        args: [{
         
     | 
| 
       132 
132 
     | 
    
         
             
                                providedIn: 'root'
         
     | 
| 
         @@ -167,10 +167,10 @@ class AuthService { 
     | 
|
| 
       167 
167 
     | 
    
         
             
                    this.jwtService.destroyTokens();
         
     | 
| 
       168 
168 
     | 
    
         
             
                    location.replace(url);
         
     | 
| 
       169 
169 
     | 
    
         
             
                }
         
     | 
| 
       170 
     | 
    
         
            -
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20. 
     | 
| 
       171 
     | 
    
         
            -
                static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 170 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AuthService, deps: [{ token: i1.HttpClient }, { token: JwtService }, { token: MixpanelService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
         
     | 
| 
      
 171 
     | 
    
         
            +
                static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AuthService, providedIn: 'root' }); }
         
     | 
| 
       172 
172 
     | 
    
         
             
            }
         
     | 
| 
       173 
     | 
    
         
            -
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 173 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AuthService, decorators: [{
         
     | 
| 
       174 
174 
     | 
    
         
             
                        type: Injectable,
         
     | 
| 
       175 
175 
     | 
    
         
             
                        args: [{
         
     | 
| 
       176 
176 
     | 
    
         
             
                                providedIn: 'root'
         
     | 
| 
         @@ -307,10 +307,10 @@ class JwtInterceptor { 
     | 
|
| 
       307 
307 
     | 
    
         
             
                        // });
         
     | 
| 
       308 
308 
     | 
    
         
             
                    });
         
     | 
| 
       309 
309 
     | 
    
         
             
                }
         
     | 
| 
       310 
     | 
    
         
            -
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20. 
     | 
| 
       311 
     | 
    
         
            -
                static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 310 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: JwtInterceptor, deps: [{ token: JwtService }, { token: AuthService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
         
     | 
| 
      
 311 
     | 
    
         
            +
                static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: JwtInterceptor }); }
         
     | 
| 
       312 
312 
     | 
    
         
             
            }
         
     | 
| 
       313 
     | 
    
         
            -
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 313 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: JwtInterceptor, decorators: [{
         
     | 
| 
       314 
314 
     | 
    
         
             
                        type: Injectable
         
     | 
| 
       315 
315 
     | 
    
         
             
                    }], ctorParameters: () => [{ type: JwtService }, { type: AuthService }, { type: undefined, decorators: [{
         
     | 
| 
       316 
316 
     | 
    
         
             
                                type: Inject,
         
     | 
| 
         @@ -318,9 +318,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImpor 
     | 
|
| 
       318 
318 
     | 
    
         
             
                            }] }] });
         
     | 
| 
       319 
319 
     | 
    
         | 
| 
       320 
320 
     | 
    
         
             
            class InterceptorsModule {
         
     | 
| 
       321 
     | 
    
         
            -
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20. 
     | 
| 
       322 
     | 
    
         
            -
                static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20. 
     | 
| 
       323 
     | 
    
         
            -
                static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 321 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: InterceptorsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
         
     | 
| 
      
 322 
     | 
    
         
            +
                static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.6", ngImport: i0, type: InterceptorsModule }); }
         
     | 
| 
      
 323 
     | 
    
         
            +
                static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: InterceptorsModule, providers: [
         
     | 
| 
       324 
324 
     | 
    
         
             
                        {
         
     | 
| 
       325 
325 
     | 
    
         
             
                            provide: HTTP_INTERCEPTORS,
         
     | 
| 
       326 
326 
     | 
    
         
             
                            useClass: JwtInterceptor,
         
     | 
| 
         @@ -328,7 +328,7 @@ class InterceptorsModule { 
     | 
|
| 
       328 
328 
     | 
    
         
             
                        }
         
     | 
| 
       329 
329 
     | 
    
         
             
                    ] }); }
         
     | 
| 
       330 
330 
     | 
    
         
             
            }
         
     | 
| 
       331 
     | 
    
         
            -
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 331 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: InterceptorsModule, decorators: [{
         
     | 
| 
       332 
332 
     | 
    
         
             
                        type: NgModule,
         
     | 
| 
       333 
333 
     | 
    
         
             
                        args: [{
         
     | 
| 
       334 
334 
     | 
    
         
             
                                providers: [
         
     | 
| 
         @@ -358,13 +358,13 @@ class CommonModule { 
     | 
|
| 
       358 
358 
     | 
    
         
             
                        ]
         
     | 
| 
       359 
359 
     | 
    
         
             
                    };
         
     | 
| 
       360 
360 
     | 
    
         
             
                }
         
     | 
| 
       361 
     | 
    
         
            -
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20. 
     | 
| 
       362 
     | 
    
         
            -
                static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20. 
     | 
| 
      
 361 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: CommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
         
     | 
| 
      
 362 
     | 
    
         
            +
                static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.6", ngImport: i0, type: CommonModule, imports: [CommonModule$1,
         
     | 
| 
       363 
363 
     | 
    
         
             
                        InterceptorsModule] }); }
         
     | 
| 
       364 
     | 
    
         
            -
                static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 364 
     | 
    
         
            +
                static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: CommonModule, imports: [CommonModule$1,
         
     | 
| 
       365 
365 
     | 
    
         
             
                        InterceptorsModule] }); }
         
     | 
| 
       366 
366 
     | 
    
         
             
            }
         
     | 
| 
       367 
     | 
    
         
            -
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20. 
     | 
| 
      
 367 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: CommonModule, decorators: [{
         
     | 
| 
       368 
368 
     | 
    
         
             
                        type: NgModule,
         
     | 
| 
       369 
369 
     | 
    
         
             
                        args: [{
         
     | 
| 
       370 
370 
     | 
    
         
             
                                declarations: [],
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"taxtank-core-common.mjs","sources":["../../../projects/tt-core/common/src/services/mixpanel.service.ts","../../../projects/tt-core/common/src/db/enums/user/user-roles.enum.ts","../../../projects/tt-core/common/src/services/auth/jwt.service.ts","../../../projects/tt-core/common/src/services/auth/auth.service.ts","../../../projects/tt-core/common/src/services/auth/auth-messages.enum.ts","../../../projects/tt-core/common/src/interceptors/jwt-interceptor.ts","../../../projects/tt-core/common/src/interceptors/interceptors.module.ts","../../../projects/tt-core/common/src/common.module.ts","../../../projects/tt-core/common/taxtank-core-common.ts"],"sourcesContent":["import { Inject, Injectable } from '@angular/core';\r\nimport mixpanel from 'mixpanel-browser';\r\n\r\n/**\r\n * Service to work with mixpanel https://docs.mixpanel.com/docs/tracking/reference/javascript\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class MixpanelService {\r\n  constructor(@Inject('environment') private environment: any) {}\r\n\r\n  init(): void {\r\n    if (!this.environment.enableMixpanel) {\r\n      return;\r\n    }\r\n\r\n    mixpanel.init(this.environment.mixpanelToken);\r\n  }\r\n\r\n  identify(id: string): void {\r\n    if (!this.environment.enableMixpanel) {\r\n      return;\r\n    }\r\n\r\n    mixpanel.identify(id);\r\n    mixpanel.people.set({ 'last seen': new Date(Date.now()).toLocaleString() })\r\n  }\r\n\r\n  reset(): void {\r\n    if (!this.environment.enableMixpanel) {\r\n      return;\r\n    }\r\n\r\n    mixpanel.reset();\r\n  }\r\n\r\n  track(event: string, properties: { [key: string]: any } = {}): void {\r\n    if (!this.environment.enableMixpanel) {\r\n      return;\r\n    }\r\n\r\n    console.log(event, properties);\r\n    mixpanel.track(event, properties);\r\n  }\r\n\r\n  trackLink(id: string, event: string, properties: { [key: string]: any } = {}): void {\r\n    if (!this.environment.enableMixpanel) {\r\n      return;\r\n    }\r\n\r\n    mixpanel.track_links(`#${id}`, event, properties);\r\n  }\r\n\r\n  trackPageView(): void {\r\n    if (!this.environment.enableMixpanel) {\r\n      return;\r\n    }\r\n\r\n    mixpanel['track_pageview']();\r\n  }\r\n}\r\n","export enum UserRolesEnum {\r\n  FIRM_OWNER = 'ROLE_FIRM_OWNER',\r\n  FIRM_MANAGER = 'ROLE_FIRM_MANAGER',\r\n  FIRM_TOP_MANAGER = 'ROLE_FIRM_TOP_MANAGER',\r\n  CLIENT = 'ROLE_CLIENT',\r\n  EMPLOYEE = 'ROLE_EMPLOYEE',\r\n  ACCOUNTANT = 'ROLE_ACCOUNTANT',\r\n  ADVISOR = 'ROLE_ADVISOR',\r\n  USER = 'ROLE_USER',\r\n  SUBSCRIPTION = 'ROLE_USER_SUBSCRIPTION',\r\n  WORK_TANK = 'ROLE_USER_WORK',\r\n  PROPERTY_TANK = 'ROLE_USER_PROPERTY',\r\n  SOLE_TANK = 'ROLE_USER_SOLE',\r\n  HOLDING_TANK = 'ROLE_USER_HOLDING',\r\n  MONEY_TANK = 'ROLE_USER_MONEY',\r\n  SWITCH_USER = 'IS_IMPERSONATOR',\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { MixpanelService } from '../mixpanel.service';\r\nimport { JwtDecodedInterface } from './jwt-decoded.interface';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { AuthTokenInterface } from './auth-tokens.interface';\r\nimport { UserRolesEnum } from '../../db';\r\n\r\nconst NAME_TOKEN = 'token';\r\nconst NAME_REFRESH_TOKEN = 'refreshToken';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class JwtService extends JwtHelperService {\r\n  private mpService: MixpanelService = inject(MixpanelService);\r\n  isLoggedInSubject = new BehaviorSubject(!this.isTokenExpired());\r\n\r\n  getToken(): string {\r\n    return localStorage[NAME_TOKEN];\r\n  }\r\n\r\n  getRefreshToken(): string {\r\n    return localStorage[NAME_REFRESH_TOKEN];\r\n  }\r\n\r\n  saveTokens(tokens: AuthTokenInterface): void {\r\n    localStorage[NAME_TOKEN] = tokens.token;\r\n    localStorage[NAME_REFRESH_TOKEN] = tokens.refreshToken;\r\n\r\n    this.mpService.identify(this.decode(tokens.token).id.toString());\r\n    this.isLoggedInSubject.next(true);\r\n  }\r\n\r\n  destroyTokens(): void {\r\n    localStorage.removeItem(NAME_TOKEN);\r\n    localStorage.removeItem(NAME_REFRESH_TOKEN);\r\n    localStorage.removeItem('userId');\r\n    localStorage.removeItem('_switch_user');\r\n\r\n    this.mpService.track('logout');\r\n    this.mpService.reset();\r\n    this.isLoggedInSubject.next(false);\r\n\r\n  }\r\n\r\n  decode(token?: string): JwtDecodedInterface {\r\n    return super.decodeToken(token) as JwtDecodedInterface;\r\n  }\r\n\r\n  isClient(): boolean {\r\n    return this.decode().roles.includes(UserRolesEnum.CLIENT);\r\n  }\r\n\r\n  isMe(userId: number): boolean {\r\n    return this.decode().id === userId;\r\n  }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { JwtService } from './jwt.service';\r\nimport { map } from 'rxjs/operators';\r\nimport { AuthTokenInterface } from './auth-tokens.interface';\r\nimport { MixpanelService } from '../mixpanel.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AuthService {\r\n  constructor(\r\n    private http: HttpClient,\r\n    private jwtService: JwtService,\r\n    private mpService: MixpanelService,\r\n    @Inject('environment') private environment: any\r\n  ) {\r\n\r\n  }\r\n\r\n  setAuth(response: AuthTokenInterface) {\r\n    this.jwtService.saveTokens(response);\r\n  }\r\n\r\n  login(username: string, password: string) {\r\n    return this.http.post(`${this.environment.apiV2}/login`, { username, password }).pipe(\r\n      map((response: any) => {\r\n        if (response.token) {\r\n          this.setAuth(response);\r\n        }\r\n\r\n        return response;\r\n      })\r\n    );\r\n  }\r\n\r\n  mfaLogin(otp: string) {\r\n    return this.http.post(`${this.environment.apiV2}/2fa_check`, { otp }).pipe(\r\n      map((response: any) => {\r\n        this.setAuth(response);\r\n\r\n        return response;\r\n      })\r\n    );\r\n  }\r\n\r\n  refresh(refreshToken: string) {\r\n    return this.http.post(`${this.environment.apiV2}/token/refresh`, { refreshToken }).pipe(\r\n      map((response: any) => {\r\n        this.setAuth(response);\r\n\r\n\r\n        return response;\r\n      })\r\n    );\r\n  }\r\n\r\n  logoutFront(url = '/login'): void {\r\n    this.jwtService.destroyTokens();\r\n\r\n    location.replace(url);\r\n  }\r\n}\r\n","export enum AuthMessagesEnum {\r\n  ERROR_401 = 'Email or password is incorrect'\r\n}\r\n","import { BehaviorSubject, Observable, throwError as observableThrowError } from 'rxjs';\r\nimport { catchError, filter, finalize, switchMap, take } from 'rxjs/operators';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { AuthService, JwtService } from '../services';\r\n\r\nconst MESSAGE_DEFAULT_500_ERROR = 'Unexpected error! Please try again later. You can send us via chat your questions.';\r\n\r\n/**\r\n * JWT Interceptor add jwt token to each request related with TaxTank API\r\n */\r\n@Injectable()\r\nexport class JwtInterceptor implements HttpInterceptor {\r\n  isRefreshingToken = false;\r\n  tokenSubject: BehaviorSubject<string> = new BehaviorSubject<string>(null);\r\n\r\n  constructor(\r\n    public jwtService: JwtService,\r\n    private authService: AuthService,\r\n    @Inject('environment') private environment: any\r\n  ) {}\r\n\r\n  addToken(req: HttpRequest<any>): HttpRequest<any> {\r\n    return req.clone({\r\n      setHeaders: { Authorization: 'Bearer ' + this.jwtService.getToken() },\r\n      withCredentials: true\r\n    });\r\n  }\r\n\r\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n    // skip third party requests\r\n    if (!request.url.includes(this.environment.apiV2)) {\r\n      return next.handle(request);\r\n    }\r\n\r\n    // add token to every api request\r\n    return next.handle(this.addToken(request)).pipe(\r\n      // handle errors\r\n      catchError((err: HttpErrorResponse) => {\r\n        if (err instanceof HttpErrorResponse) {\r\n          switch ((err as HttpErrorResponse).status) {\r\n            // unexpected errors\r\n            case 405:\r\n            case 500:\r\n              this.handle500Error();\r\n              break;\r\n            // expected errors\r\n            case 401:\r\n              return this.handle401Error(request, next, err);\r\n            case 400:\r\n            case 403:\r\n            // @TODO in most cases 404 is not an error, handle in components\r\n            // case 404:\r\n              this.showErrorMessages(err);\r\n              break;\r\n          }\r\n        }\r\n\r\n        return observableThrowError(err);\r\n      })\r\n    );\r\n  }\r\n\r\n  /**\r\n   * @TODO log\r\n   * @TODO waiting for backend to handle errors in a better way\r\n   */\r\n  handle400Error(err: HttpErrorResponse): void {\r\n    // this.snackBar.open(err.error['hydra:description'], '', {\r\n    //   panelClass: 'error'\r\n    // });\r\n  }\r\n\r\n  /**\r\n   * @TODO log\r\n   * @TODO waiting for backend to handle errors in a better way\r\n   */\r\n  handle403Error(err: HttpErrorResponse): void {\r\n    // this.snackBar.open(err.error['hydra:description'], '', {\r\n    //   panelClass: 'error'\r\n    // });\r\n  }\r\n\r\n  /**\r\n   * @TODO log\r\n   */\r\n  handle500Error(): void {\r\n    // this.snackBar.open(MESSAGE_DEFAULT_500_ERROR, '', {\r\n    //   panelClass: 'error'\r\n    // });\r\n  }\r\n\r\n  handle401Error(req: HttpRequest<any>, next: HttpHandler, err: HttpErrorResponse) {\r\n    // skip 401 errors not from JWT (basiq login case or other)\r\n    if (!err.error.message?.includes('JWT Token')) {\r\n      return observableThrowError(err);\r\n    }\r\n\r\n    if (req.url.includes('token/refresh') || req.url.includes('login')) {\r\n      if (req.url.includes('token/refresh')) {\r\n        this.authService.logoutFront();\r\n      }\r\n\r\n      return observableThrowError(err);\r\n    }\r\n\r\n    // refreshing token, wait until it's done and retry the request\r\n    if (this.isRefreshingToken) {\r\n      return this.tokenSubject.pipe(\r\n        filter(token => token != null),\r\n        take(1),\r\n        switchMap(token => next.handle(this.addToken(req)))\r\n      );\r\n    // refresh token\r\n    }\r\n    // subsequent requests should wait until refresh token is ready\r\n    this.isRefreshingToken = true;\r\n    this.tokenSubject.next(null);\r\n\r\n    return this.authService.refresh(this.jwtService.getRefreshToken()).pipe(\r\n      switchMap((tokens: { token: string, refreshToken: string }) => {\r\n        this.tokenSubject.next(tokens.token);\r\n        return next.handle(this.addToken(req));\r\n      }),\r\n      catchError(() => {\r\n        this.authService.logoutFront();\r\n        return observableThrowError(err);\r\n      }),\r\n      finalize(() => {\r\n        this.isRefreshingToken = false;\r\n      })\r\n    );\r\n\r\n  }\r\n\r\n  /**\r\n   * Handle error messages\r\n   * @param errorResponse from which messages should be taken\r\n   *\r\n   * @TODO move to separated interceptor\r\n   */\r\n  private showErrorMessages(errorResponse: HttpErrorResponse): void {\r\n    if (!errorResponse.error.violations) {\r\n      // this.snackBar.open('Something went wrong', '', {\r\n      //   panelClass: 'error'\r\n      // });\r\n\r\n      return;\r\n    }\r\n    errorResponse.error.violations.forEach((violation: object): void => {\r\n      // this.snackBar.open(violation['message'], '', {\r\n      //   panelClass: 'error'\r\n      // });\r\n    });\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { JwtInterceptor } from './jwt-interceptor';\r\n\r\n@NgModule({\r\n  providers: [\r\n    {\r\n      provide: HTTP_INTERCEPTORS,\r\n      useClass: JwtInterceptor,\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class InterceptorsModule {\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule as AngularCommonModule } from '@angular/common';\r\nimport { InterceptorsModule } from './interceptors/interceptors.module';\r\n\r\n/**\r\n * https://angular.io/guide/creating-libraries\r\n */\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    AngularCommonModule,\r\n    InterceptorsModule\r\n  ]\r\n})\r\nexport class CommonModule {\r\n  public static forRoot(environment: object): ModuleWithProviders<CommonModule> {\r\n    // @TODO remove when bank model refactored (the only use case)\r\n    localStorage.setItem('api_uri', environment['api_uri']);\r\n\r\n    return {\r\n      ngModule: CommonModule,\r\n      providers: [\r\n        {\r\n          provide: 'environment',\r\n          useValue: environment\r\n        }\r\n      ]\r\n    };\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableThrowError","AngularCommonModule"],"mappings":"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"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"taxtank-core-common.mjs","sources":["../../../projects/tt-core/common/src/services/mixpanel.service.ts","../../../projects/tt-core/common/src/db/enums/user/user-roles.enum.ts","../../../projects/tt-core/common/src/services/auth/jwt.service.ts","../../../projects/tt-core/common/src/services/auth/auth.service.ts","../../../projects/tt-core/common/src/services/auth/auth-messages.enum.ts","../../../projects/tt-core/common/src/interceptors/jwt-interceptor.ts","../../../projects/tt-core/common/src/interceptors/interceptors.module.ts","../../../projects/tt-core/common/src/common.module.ts","../../../projects/tt-core/common/taxtank-core-common.ts"],"sourcesContent":["import { Inject, Injectable } from '@angular/core';\nimport mixpanel from 'mixpanel-browser';\n\n/**\n * Service to work with mixpanel https://docs.mixpanel.com/docs/tracking/reference/javascript\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class MixpanelService {\n  constructor(@Inject('environment') private environment: any) {}\n\n  init(): void {\n    if (!this.environment.enableMixpanel) {\n      return;\n    }\n\n    mixpanel.init(this.environment.mixpanelToken);\n  }\n\n  identify(id: string): void {\n    if (!this.environment.enableMixpanel) {\n      return;\n    }\n\n    mixpanel.identify(id);\n    mixpanel.people.set({ 'last seen': new Date(Date.now()).toLocaleString() })\n  }\n\n  reset(): void {\n    if (!this.environment.enableMixpanel) {\n      return;\n    }\n\n    mixpanel.reset();\n  }\n\n  track(event: string, properties: { [key: string]: any } = {}): void {\n    if (!this.environment.enableMixpanel) {\n      return;\n    }\n\n    console.log(event, properties);\n    mixpanel.track(event, properties);\n  }\n\n  trackLink(id: string, event: string, properties: { [key: string]: any } = {}): void {\n    if (!this.environment.enableMixpanel) {\n      return;\n    }\n\n    mixpanel.track_links(`#${id}`, event, properties);\n  }\n\n  trackPageView(): void {\n    if (!this.environment.enableMixpanel) {\n      return;\n    }\n\n    mixpanel['track_pageview']();\n  }\n}\n","export enum UserRolesEnum {\n  FIRM_OWNER = 'ROLE_FIRM_OWNER',\n  FIRM_MANAGER = 'ROLE_FIRM_MANAGER',\n  FIRM_TOP_MANAGER = 'ROLE_FIRM_TOP_MANAGER',\n  CLIENT = 'ROLE_CLIENT',\n  EMPLOYEE = 'ROLE_EMPLOYEE',\n  ACCOUNTANT = 'ROLE_ACCOUNTANT',\n  ADVISOR = 'ROLE_ADVISOR',\n  USER = 'ROLE_USER',\n  SUBSCRIPTION = 'ROLE_USER_SUBSCRIPTION',\n  WORK_TANK = 'ROLE_USER_WORK',\n  PROPERTY_TANK = 'ROLE_USER_PROPERTY',\n  SOLE_TANK = 'ROLE_USER_SOLE',\n  HOLDING_TANK = 'ROLE_USER_HOLDING',\n  MONEY_TANK = 'ROLE_USER_MONEY',\n  SWITCH_USER = 'IS_IMPERSONATOR',\n}\n","import { Injectable, inject } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { MixpanelService } from '../mixpanel.service';\nimport { JwtDecodedInterface } from './jwt-decoded.interface';\nimport { BehaviorSubject } from 'rxjs';\nimport { AuthTokenInterface } from './auth-tokens.interface';\nimport { UserRolesEnum } from '../../db';\n\nconst NAME_TOKEN = 'token';\nconst NAME_REFRESH_TOKEN = 'refreshToken';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class JwtService extends JwtHelperService {\n  private mpService: MixpanelService = inject(MixpanelService);\n  isLoggedInSubject = new BehaviorSubject(!this.isTokenExpired());\n\n  getToken(): string {\n    return localStorage[NAME_TOKEN];\n  }\n\n  getRefreshToken(): string {\n    return localStorage[NAME_REFRESH_TOKEN];\n  }\n\n  saveTokens(tokens: AuthTokenInterface): void {\n    localStorage[NAME_TOKEN] = tokens.token;\n    localStorage[NAME_REFRESH_TOKEN] = tokens.refreshToken;\n\n    this.mpService.identify(this.decode(tokens.token).id.toString());\n    this.isLoggedInSubject.next(true);\n  }\n\n  destroyTokens(): void {\n    localStorage.removeItem(NAME_TOKEN);\n    localStorage.removeItem(NAME_REFRESH_TOKEN);\n    localStorage.removeItem('userId');\n    localStorage.removeItem('_switch_user');\n\n    this.mpService.track('logout');\n    this.mpService.reset();\n    this.isLoggedInSubject.next(false);\n\n  }\n\n  decode(token?: string): JwtDecodedInterface {\n    return super.decodeToken(token) as JwtDecodedInterface;\n  }\n\n  isClient(): boolean {\n    return this.decode().roles.includes(UserRolesEnum.CLIENT);\n  }\n\n  isMe(userId: number): boolean {\n    return this.decode().id === userId;\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { JwtService } from './jwt.service';\nimport { map } from 'rxjs/operators';\nimport { AuthTokenInterface } from './auth-tokens.interface';\nimport { MixpanelService } from '../mixpanel.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AuthService {\n  constructor(\n    private http: HttpClient,\n    private jwtService: JwtService,\n    private mpService: MixpanelService,\n    @Inject('environment') private environment: any\n  ) {\n\n  }\n\n  setAuth(response: AuthTokenInterface) {\n    this.jwtService.saveTokens(response);\n  }\n\n  login(username: string, password: string) {\n    return this.http.post(`${this.environment.apiV2}/login`, { username, password }).pipe(\n      map((response: any) => {\n        if (response.token) {\n          this.setAuth(response);\n        }\n\n        return response;\n      })\n    );\n  }\n\n  mfaLogin(otp: string) {\n    return this.http.post(`${this.environment.apiV2}/2fa_check`, { otp }).pipe(\n      map((response: any) => {\n        this.setAuth(response);\n\n        return response;\n      })\n    );\n  }\n\n  refresh(refreshToken: string) {\n    return this.http.post(`${this.environment.apiV2}/token/refresh`, { refreshToken }).pipe(\n      map((response: any) => {\n        this.setAuth(response);\n\n\n        return response;\n      })\n    );\n  }\n\n  logoutFront(url = '/login'): void {\n    this.jwtService.destroyTokens();\n\n    location.replace(url);\n  }\n}\n","export enum AuthMessagesEnum {\n  ERROR_401 = 'Email or password is incorrect'\n}\n","import { BehaviorSubject, Observable, throwError as observableThrowError } from 'rxjs';\nimport { catchError, filter, finalize, switchMap, take } from 'rxjs/operators';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { AuthService, JwtService } from '../services';\n\nconst MESSAGE_DEFAULT_500_ERROR = 'Unexpected error! Please try again later. You can send us via chat your questions.';\n\n/**\n * JWT Interceptor add jwt token to each request related with TaxTank API\n */\n@Injectable()\nexport class JwtInterceptor implements HttpInterceptor {\n  isRefreshingToken = false;\n  tokenSubject: BehaviorSubject<string> = new BehaviorSubject<string>(null);\n\n  constructor(\n    public jwtService: JwtService,\n    private authService: AuthService,\n    @Inject('environment') private environment: any\n  ) {}\n\n  addToken(req: HttpRequest<any>): HttpRequest<any> {\n    return req.clone({\n      setHeaders: { Authorization: 'Bearer ' + this.jwtService.getToken() },\n      withCredentials: true\n    });\n  }\n\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n    // skip third party requests\n    if (!request.url.includes(this.environment.apiV2)) {\n      return next.handle(request);\n    }\n\n    // add token to every api request\n    return next.handle(this.addToken(request)).pipe(\n      // handle errors\n      catchError((err: HttpErrorResponse) => {\n        if (err instanceof HttpErrorResponse) {\n          switch ((err as HttpErrorResponse).status) {\n            // unexpected errors\n            case 405:\n            case 500:\n              this.handle500Error();\n              break;\n            // expected errors\n            case 401:\n              return this.handle401Error(request, next, err);\n            case 400:\n            case 403:\n            // @TODO in most cases 404 is not an error, handle in components\n            // case 404:\n              this.showErrorMessages(err);\n              break;\n          }\n        }\n\n        return observableThrowError(err);\n      })\n    );\n  }\n\n  /**\n   * @TODO log\n   * @TODO waiting for backend to handle errors in a better way\n   */\n  handle400Error(err: HttpErrorResponse): void {\n    // this.snackBar.open(err.error['hydra:description'], '', {\n    //   panelClass: 'error'\n    // });\n  }\n\n  /**\n   * @TODO log\n   * @TODO waiting for backend to handle errors in a better way\n   */\n  handle403Error(err: HttpErrorResponse): void {\n    // this.snackBar.open(err.error['hydra:description'], '', {\n    //   panelClass: 'error'\n    // });\n  }\n\n  /**\n   * @TODO log\n   */\n  handle500Error(): void {\n    // this.snackBar.open(MESSAGE_DEFAULT_500_ERROR, '', {\n    //   panelClass: 'error'\n    // });\n  }\n\n  handle401Error(req: HttpRequest<any>, next: HttpHandler, err: HttpErrorResponse) {\n    // skip 401 errors not from JWT (basiq login case or other)\n    if (!err.error.message?.includes('JWT Token')) {\n      return observableThrowError(err);\n    }\n\n    if (req.url.includes('token/refresh') || req.url.includes('login')) {\n      if (req.url.includes('token/refresh')) {\n        this.authService.logoutFront();\n      }\n\n      return observableThrowError(err);\n    }\n\n    // refreshing token, wait until it's done and retry the request\n    if (this.isRefreshingToken) {\n      return this.tokenSubject.pipe(\n        filter(token => token != null),\n        take(1),\n        switchMap(token => next.handle(this.addToken(req)))\n      );\n    // refresh token\n    }\n    // subsequent requests should wait until refresh token is ready\n    this.isRefreshingToken = true;\n    this.tokenSubject.next(null);\n\n    return this.authService.refresh(this.jwtService.getRefreshToken()).pipe(\n      switchMap((tokens: { token: string, refreshToken: string }) => {\n        this.tokenSubject.next(tokens.token);\n        return next.handle(this.addToken(req));\n      }),\n      catchError(() => {\n        this.authService.logoutFront();\n        return observableThrowError(err);\n      }),\n      finalize(() => {\n        this.isRefreshingToken = false;\n      })\n    );\n\n  }\n\n  /**\n   * Handle error messages\n   * @param errorResponse from which messages should be taken\n   *\n   * @TODO move to separated interceptor\n   */\n  private showErrorMessages(errorResponse: HttpErrorResponse): void {\n    if (!errorResponse.error.violations) {\n      // this.snackBar.open('Something went wrong', '', {\n      //   panelClass: 'error'\n      // });\n\n      return;\n    }\n    errorResponse.error.violations.forEach((violation: object): void => {\n      // this.snackBar.open(violation['message'], '', {\n      //   panelClass: 'error'\n      // });\n    });\n  }\n}\n","import { NgModule } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { JwtInterceptor } from './jwt-interceptor';\r\n\r\n@NgModule({\r\n  providers: [\r\n    {\r\n      provide: HTTP_INTERCEPTORS,\r\n      useClass: JwtInterceptor,\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class InterceptorsModule {\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule as AngularCommonModule } from '@angular/common';\nimport { InterceptorsModule } from './interceptors/interceptors.module';\n\n/**\n * https://angular.io/guide/creating-libraries\n */\n@NgModule({\n  declarations: [],\n  imports: [\n    AngularCommonModule,\n    InterceptorsModule\n  ]\n})\nexport class CommonModule {\n  public static forRoot(environment: object): ModuleWithProviders<CommonModule> {\n    // @TODO remove when bank model refactored (the only use case)\n    localStorage.setItem('api_uri', environment['api_uri']);\n\n    return {\n      ngModule: CommonModule,\n      providers: [\n        {\n          provide: 'environment',\n          useValue: environment\n        }\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableThrowError","AngularCommonModule"],"mappings":"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"}
         
     |