taxtank-core 2.1.95 → 2.1.97

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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"}
@@ -552,8 +552,6 @@ var ChartAccountsListEnum;
552
552
  ChartAccountsListEnum[ChartAccountsListEnum["VEHICLE_LOAN_INTEREST"] = 37] = "VEHICLE_LOAN_INTEREST";
553
553
  ChartAccountsListEnum[ChartAccountsListEnum["VEHICLE_LOAN_PRINCIPAL"] = 38] = "VEHICLE_LOAN_PRINCIPAL";
554
554
  ChartAccountsListEnum[ChartAccountsListEnum["HOME_OFFICE_HOURS"] = 103] = "HOME_OFFICE_HOURS";
555
- ChartAccountsListEnum[ChartAccountsListEnum["PARTNERSHIP_EXPENSES"] = 156] = "PARTNERSHIP_EXPENSES";
556
- ChartAccountsListEnum[ChartAccountsListEnum["TRUST_EXPENSES"] = 157] = "TRUST_EXPENSES";
557
555
  ChartAccountsListEnum[ChartAccountsListEnum["INTEREST_CHARGED_BY_ATO"] = 278] = "INTEREST_CHARGED_BY_ATO";
558
556
  ChartAccountsListEnum[ChartAccountsListEnum["LITIGATION_COSTS"] = 280] = "LITIGATION_COSTS";
559
557
  ChartAccountsListEnum[ChartAccountsListEnum["ACCOUNTANT_TAX_AGENT_FEES"] = 282] = "ACCOUNTANT_TAX_AGENT_FEES";
@@ -599,6 +597,18 @@ var ChartAccountsListEnum;
599
597
  ChartAccountsListEnum[ChartAccountsListEnum["ELECTRICITY_AND_GAS"] = 234] = "ELECTRICITY_AND_GAS";
600
598
  ChartAccountsListEnum[ChartAccountsListEnum["TELEPHONE"] = 255] = "TELEPHONE";
601
599
  ChartAccountsListEnum[ChartAccountsListEnum["HOME_OFFICE_CLEANING"] = 11871] = "HOME_OFFICE_CLEANING";
600
+ ChartAccountsListEnum[ChartAccountsListEnum["PARTNERSHIP_EXPENSES"] = 609] = "PARTNERSHIP_EXPENSES";
601
+ ChartAccountsListEnum[ChartAccountsListEnum["TRUST_EXPENSES"] = 610] = "TRUST_EXPENSES";
602
+ ChartAccountsListEnum[ChartAccountsListEnum["LANDCARE_EXPENSES"] = 1019] = "LANDCARE_EXPENSES";
603
+ ChartAccountsListEnum[ChartAccountsListEnum["OTHER_DEDUCTIONS"] = 1020] = "OTHER_DEDUCTIONS";
604
+ ChartAccountsListEnum[ChartAccountsListEnum["LANDCARE_WATER"] = 1023] = "LANDCARE_WATER";
605
+ ChartAccountsListEnum[ChartAccountsListEnum["OTHER_DEDUCTIONS_PRIMARY"] = 1024] = "OTHER_DEDUCTIONS_PRIMARY";
606
+ ChartAccountsListEnum[ChartAccountsListEnum["OVERSEAS_WORK_EXPENSES"] = 1034] = "OVERSEAS_WORK_EXPENSES";
607
+ ChartAccountsListEnum[ChartAccountsListEnum["FOREIGN_TAX_WITHHELD_WORK"] = 1035] = "FOREIGN_TAX_WITHHELD_WORK";
608
+ ChartAccountsListEnum[ChartAccountsListEnum["OTHER_OVERSEAS_EXPENSES"] = 1045] = "OTHER_OVERSEAS_EXPENSES";
609
+ ChartAccountsListEnum[ChartAccountsListEnum["FOREIGN_PENSION_EXPENSES"] = 1054] = "FOREIGN_PENSION_EXPENSES";
610
+ ChartAccountsListEnum[ChartAccountsListEnum["ANNUITY_PURCHASE_PRICE"] = 1055] = "ANNUITY_PURCHASE_PRICE";
611
+ ChartAccountsListEnum[ChartAccountsListEnum["FOREIGN_TAX_WITHHELD_PENSION"] = 1056] = "FOREIGN_TAX_WITHHELD_PENSION";
602
612
  })(ChartAccountsListEnum || (ChartAccountsListEnum = {}));
603
613
 
604
614
  var BusinessChartAccountsEnum;
@@ -3920,6 +3930,9 @@ class ChartAccounts extends ChartAccounts$1 {
3920
3930
  isHoldingExpense() {
3921
3931
  return [ChartAccountsCategoryEnum.HOLDING_EXPENSE].includes(this.category);
3922
3932
  }
3933
+ isHoldingIncome() {
3934
+ return [ChartAccountsCategoryEnum.HOLDING_INCOME].includes(this.category);
3935
+ }
3923
3936
  /**
3924
3937
  * Check if chart accounts is property expense
3925
3938
  */
@@ -4078,6 +4091,22 @@ class ChartAccounts extends ChartAccounts$1 {
4078
4091
  isPersonalTank() {
4079
4092
  return CHART_ACCOUNTS_CATEGORIES.personal.includes(this.category);
4080
4093
  }
4094
+ hasWorkExpensePayer() {
4095
+ return [
4096
+ ChartAccountsListEnum.PARTNERSHIP_EXPENSES,
4097
+ ChartAccountsListEnum.TRUST_EXPENSES,
4098
+ ChartAccountsListEnum.LANDCARE_EXPENSES,
4099
+ ChartAccountsListEnum.OTHER_DEDUCTIONS,
4100
+ ChartAccountsListEnum.LANDCARE_WATER,
4101
+ ChartAccountsListEnum.OTHER_DEDUCTIONS_PRIMARY,
4102
+ ChartAccountsListEnum.OVERSEAS_WORK_EXPENSES,
4103
+ ChartAccountsListEnum.FOREIGN_TAX_WITHHELD_WORK,
4104
+ ChartAccountsListEnum.OTHER_OVERSEAS_EXPENSES,
4105
+ ChartAccountsListEnum.FOREIGN_PENSION_EXPENSES,
4106
+ ChartAccountsListEnum.ANNUITY_PURCHASE_PRICE,
4107
+ ChartAccountsListEnum.FOREIGN_TAX_WITHHELD_PENSION,
4108
+ ].includes(this.id);
4109
+ }
4081
4110
  }
4082
4111
  __decorate([
4083
4112
  Type(() => ChartAccountsHeading)
@@ -8764,14 +8793,14 @@ class MyTaxPartnershipsAndTrusts {
8764
8793
  constructor(transactions, incomeSources) {
8765
8794
  this.transactions = transactions;
8766
8795
  this.incomeSources = incomeSources;
8767
- this.partnershipsIncomes = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.PARTNERSHIP_INCOME);
8768
- this.partnershipsExpenses = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.PARTNERSHIP_EXPENSES);
8769
- this.trustsIncomes = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.TRUST_INCOME);
8770
- this.trustsExpenses = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.TRUST_EXPENSES);
8771
- this.partnershipsIncomeTotalAmount = this.partnershipsIncomes.sumBy('amount');
8772
- this.partnershipsExpenseTotalAmount = this.partnershipsExpenses.sumBy('amount');
8773
- this.trustsIncomeTotalAmount = this.trustsIncomes.sumBy('amount');
8774
- this.trustsExpenseTotalAmount = this.trustsExpenses.sumBy('amount');
8796
+ const partnershipsIncomes = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.PARTNERSHIP_INCOME);
8797
+ const partnershipsExpenses = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.PARTNERSHIP_EXPENSES);
8798
+ const trustsIncomes = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.TRUST_INCOME);
8799
+ const trustsExpenses = this.transactions.filterBy('chartAccounts.id', ChartAccountsListEnum.TRUST_EXPENSES);
8800
+ this.partnershipsIncomeTotalAmount = partnershipsIncomes.sumBy('amount');
8801
+ this.partnershipsExpenseTotalAmount = partnershipsExpenses.sumBy('amount');
8802
+ this.trustsIncomeTotalAmount = trustsIncomes.sumBy('amount');
8803
+ this.trustsExpenseTotalAmount = trustsExpenses.sumBy('amount');
8775
8804
  this.partnershipsNetNonPrimaryProductionAmount = this.partnershipsIncomeTotalAmount - this.partnershipsExpenseTotalAmount;
8776
8805
  this.trustsNetNonPrimaryProductionAmount = this.trustsIncomeTotalAmount - this.trustsExpenseTotalAmount;
8777
8806
  this.frankingCreditsTotal = this.transactions
@@ -8779,7 +8808,7 @@ class MyTaxPartnershipsAndTrusts {
8779
8808
  .getTransactionsMetaFields()
8780
8809
  .filterBy('chartAccountsMetaField.id', ChartAccountsMetaFieldListEnum.FRANKING_CREDIT)
8781
8810
  .sumBy('value');
8782
- this.trustsIncomeTotalTax = this.trustsIncomes.sumBy('tax');
8811
+ this.trustsIncomeTotalTax = trustsIncomes.sumBy('tax');
8783
8812
  this.frankingCreditsTotal = this.transactions
8784
8813
  .filterBy('chartAccounts.heading.id', ChartAccountsHeadingTaxableEnum.PARTNERSHIPS_AND_TRUSTS_INCOME)
8785
8814
  .getTransactionsMetaFields()
@@ -24985,13 +25014,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImpo
24985
25014
  }] }] });
24986
25015
 
24987
25016
  const ADBLOCK_ERROR_HTML = new InjectionToken('ADBLOCK_ERROR_HTML');
24988
- const ADBLOCK_ERROR_HTML_VALUE = `
24989
- <div class="text-center">
24990
- <strong>Action needed - Your adblocker is blocking CoreLogic</strong>
24991
- To add a property in TaxTank we need to fetch data from CoreLogic, however your ad blocker is getting in the way.
24992
- Please disable your adblocker or whitelist TaxTank to continue.
24993
- <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>
24994
- </div>
25017
+ const ADBLOCK_ERROR_HTML_VALUE = `
25018
+ <div class="text-center">
25019
+ <strong>Action needed - Your adblocker is blocking CoreLogic</strong>
25020
+ To add a property in TaxTank we need to fetch data from CoreLogic, however your ad blocker is getting in the way.
25021
+ Please disable your adblocker or whitelist TaxTank to continue.
25022
+ <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>
25023
+ </div>
24995
25024
  `;
24996
25025
 
24997
25026
  /**
@@ -28088,11 +28117,12 @@ class PropertyEditForm extends AbstractForm {
28088
28117
 
28089
28118
  class PropertyValuationForm extends AbstractForm {
28090
28119
  constructor(valuation = plainToClass(PropertyValuation, {}), property) {
28120
+ const marketValue = valuation.id ? valuation.marketValue ?? property?.marketValue : 0;
28091
28121
  super({
28092
28122
  // corelogic available only for new valuations if request cooldown has passed
28093
28123
  isCorelogic: new FormControl(property?.isCorelogicAvailable() && !valuation.id),
28094
28124
  growthPercent: new FormControl(property?.growthPercent),
28095
- marketValue: new FormControl(valuation.marketValue ?? property?.marketValue, Validators.required),
28125
+ marketValue: new FormControl(marketValue, Validators.required),
28096
28126
  date: new FormControl(valuation.date, Validators.required),
28097
28127
  document: new FormGroup({
28098
28128
  file: new FormControl(valuation.document?.file)
@@ -29475,7 +29505,8 @@ class WorkTransactionForm extends TransactionForm {
29475
29505
  metaFields: new FormArray((transaction.metaFields || []).map((transactionMetaField) => new FormGroup({
29476
29506
  value: new FormControl(transactionMetaField.value),
29477
29507
  chartAccountsMetaField: new FormControl(transactionMetaField.chartAccountsMetaField)
29478
- })))
29508
+ }))),
29509
+ incomeSource: new FormControl(transaction.incomeSource, [Validators.required, autocompleteValidator()]),
29479
29510
  }));
29480
29511
  // forbid to edit chartAccounts if it's in edit mode
29481
29512
  // if (transaction.id) {
@@ -29596,9 +29627,12 @@ class WorkIncomeForm extends WorkTransactionForm {
29596
29627
  }
29597
29628
 
29598
29629
  class WorkExpenseForm extends WorkTransactionForm {
29599
- constructor(transaction, registeredForGst, allocations, homeOfficeClaim, controls = {}) {
29600
- super(transaction, registeredForGst, allocations, controls);
29630
+ constructor(transaction, registeredForGst, allocations, homeOfficeClaim) {
29631
+ super(transaction, registeredForGst, allocations);
29601
29632
  this.homeOfficeClaim = homeOfficeClaim;
29633
+ if (!transaction.chartAccounts?.hasWorkExpensePayer()) {
29634
+ this.get('incomeSource').disable();
29635
+ }
29602
29636
  // amount set automatically for chartAccounts with hours meta field
29603
29637
  if (transaction.getMetaFieldValue(ChartAccountsMetaFieldListEnum.HOURS)) {
29604
29638
  this.get('amount').disable();
@@ -29628,12 +29662,17 @@ class WorkExpenseForm extends WorkTransactionForm {
29628
29662
  watchChartAccounts() {
29629
29663
  super.watchChartAccounts();
29630
29664
  this.get('chartAccounts').valueChanges.subscribe((chartAccounts) => {
29631
- if (!chartAccounts.isHomeOfficeExpense() || !this.homeOfficeClaim) {
29632
- return;
29665
+ if (chartAccounts.hasWorkExpensePayer()) {
29666
+ this.get('incomeSource').enable();
29667
+ }
29668
+ else {
29669
+ this.get('incomeSource').disable();
29670
+ }
29671
+ if (chartAccounts.isHomeOfficeExpense() && this.homeOfficeClaim) {
29672
+ const claims = this.homeOfficeClaim.getChartAccountsClaims();
29673
+ this.get('claimPercent').patchValue(claims.get(chartAccounts.id));
29674
+ this.get('claimPercent').disable();
29633
29675
  }
29634
- const claims = this.homeOfficeClaim.getChartAccountsClaims();
29635
- this.get('claimPercent').patchValue(claims.get(chartAccounts.id));
29636
- this.get('claimPercent').disable();
29637
29676
  });
29638
29677
  }
29639
29678
  }