taxtank-core 2.1.84 → 2.1.87

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 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.
@@ -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';\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 api_host: this.environment.mixpanelHost,\n });\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 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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"}
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 api_host: this.environment.mixpanelHost,\r\n });\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 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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"}
@@ -12344,8 +12344,20 @@ class HoldingTaxStatement extends AbstractModel {
12344
12344
  plainToClass(HoldingTaxStatementItem, { taxReturnItem: { id: 224, code: '20', subCode: 'O' } }),
12345
12345
  ];
12346
12346
  }
12347
+ get itemsCollection() {
12348
+ return new Collection(this.items);
12349
+ }
12347
12350
  get amount() {
12348
- return new Collection(this.items).sumBy('amount');
12351
+ return this.itemsCollection.sumBy('amount');
12352
+ }
12353
+ get cgt() {
12354
+ return this.itemsCollection.filterBy('taxReturnItem.id', 236).sumBy('amount');
12355
+ }
12356
+ get netCgt() {
12357
+ return new Collection(this.items).filterBy('taxReturnItem.id', 235).sumBy('amount');
12358
+ }
12359
+ get cgtDiscount() {
12360
+ return this.cgt - this.netCgt;
12349
12361
  }
12350
12362
  }
12351
12363
  __decorate([
@@ -23845,6 +23857,8 @@ class PdfFromHtmlTableService extends PdfFromTableService {
23845
23857
  tables.forEach((table) => {
23846
23858
  table.querySelectorAll('tbody .mat-mdc-row')
23847
23859
  .forEach(row => row.classList.contains('expandable-row') ? row.remove() : '');
23860
+ // removes mobile headers so they don't leak into the PDF cells
23861
+ table.querySelectorAll('.m-caption').forEach(node => node.remove());
23848
23862
  const captionText = this.getCaptionText(table.caption);
23849
23863
  this.addCaption(pdf, captionText, pageBreak);
23850
23864
  pdf.autoTable({
@@ -24235,6 +24249,8 @@ class XlsxService {
24235
24249
  return xlsx.write(workbook, { bookType: 'xlsx', type: 'array', compression: true });
24236
24250
  }
24237
24251
  htmlToXlsCell(cell) {
24252
+ // removes mobile headers from cell
24253
+ cell.querySelectorAll('.m-caption').forEach(node => node.remove());
24238
24254
  const cellValue = cell.innerText.trim();
24239
24255
  // regex to check currency value
24240
24256
  return /^-?\$/.test(cellValue) ? this.currencyToNumber(cellValue) : cellValue;
@@ -24832,13 +24848,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImpo
24832
24848
  }] }] });
24833
24849
 
24834
24850
  const ADBLOCK_ERROR_HTML = new InjectionToken('ADBLOCK_ERROR_HTML');
24835
- const ADBLOCK_ERROR_HTML_VALUE = `
24836
- <div class="text-center">
24837
- <strong>Action needed - Your adblocker is blocking CoreLogic</strong>
24838
- To add a property in TaxTank we need to fetch data from CoreLogic — but your ad blocker is getting in the way.
24839
- Please disable your adblocker or whitelist TaxTank to continue.
24840
- <a class="btn" target="_blank" href="https://support.taxtank.com.au/en/articles/10505609-how-to-ensure-seamless-functionality-while-using-ad-blockers-with-taxtank">Learn more</a>
24841
- </div>
24851
+ const ADBLOCK_ERROR_HTML_VALUE = `
24852
+ <div class="text-center">
24853
+ <strong>Action needed - Your adblocker is blocking CoreLogic</strong>
24854
+ To add a property in TaxTank we need to fetch data from CoreLogic — but your ad blocker is getting in the way.
24855
+ Please disable your adblocker or whitelist TaxTank to continue.
24856
+ <a class="btn" target="_blank" href="https://support.taxtank.com.au/en/articles/10505609-how-to-ensure-seamless-functionality-while-using-ad-blockers-with-taxtank">Learn more</a>
24857
+ </div>
24842
24858
  `;
24843
24859
 
24844
24860
  /**