taxtank-core 1.0.41 → 1.0.42
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';\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 mixpanel.track(event, properties);\r\n }\r\n\r\n trackLink(id: string, event: string): void {\r\n if (!this.environment.enableMixpanel) {\r\n return;\r\n }\r\n\r\n mixpanel['track_links'](`#${id}`, event);\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 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\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, HttpErrorResponse } 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\nimport { UserRolesEnum } from '../../db';\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, role: UserRolesEnum = null) {\r\n return this.http.post(`${this.environment.apiV2}/login`, { username, password }).pipe(\r\n map((response: any) => {\r\n if (!role || this.jwtService.decodeToken(response.token).roles.includes(role)) {\r\n this.setAuth(response);\r\n } else {\r\n throw new HttpErrorResponse({\r\n error: { code: 401, message: 'Your TaxTank subscription is expired. Please reactivate your account to link the widget.' },\r\n status: 401,\r\n statusText: 'Unauthorized',\r\n })\r\n }\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 return response;\r\n })\r\n );\r\n }\r\n\r\n logoutFront(url = '/login'): void {\r\n this.jwtService.destroyTokens();\r\n // localStorage.removeItem('userId');\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 mixpanel.track(event, properties);\n }\n\n trackLink(id: string, event: string): void {\n if (!this.environment.enableMixpanel) {\n return;\n }\n\n mixpanel['track_links'](`#${id}`, event);\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 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\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, HttpErrorResponse } 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';\nimport { UserRolesEnum } from '../../db';\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, role: UserRolesEnum = null) {\n return this.http.post(`${this.environment.apiV2}/login`, { username, password }).pipe(\n map((response: any) => {\n if (!role || this.jwtService.decodeToken(response.token).roles.includes(role)) {\n this.setAuth(response);\n } else {\n throw new HttpErrorResponse({\n error: { code: 401, message: 'Your TaxTank subscription is expired. Please reactivate your account to link the widget.' },\n status: 401,\n statusText: 'Unauthorized',\n })\n }\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 return response;\n })\n );\n }\n\n logoutFront(url = '/login'): void {\n this.jwtService.destroyTokens();\n // localStorage.removeItem('userId');\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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"}
|
@@ -5433,23 +5433,23 @@ var AccountSetupItemsEnum;
|
|
5433
5433
|
AccountSetupItemsEnum[AccountSetupItemsEnum["PROPERTY_RENT_INCOME"] = 18] = "PROPERTY_RENT_INCOME";
|
5434
5434
|
AccountSetupItemsEnum[AccountSetupItemsEnum["PROPERTY_DEPRECIATION"] = 19] = "PROPERTY_DEPRECIATION";
|
5435
5435
|
AccountSetupItemsEnum[AccountSetupItemsEnum["PROPERTY_CO_OWNER"] = 20] = "PROPERTY_CO_OWNER";
|
5436
|
-
//
|
5436
|
+
// businesses
|
5437
5437
|
AccountSetupItemsEnum[AccountSetupItemsEnum["SOLE_BUSINESS"] = 7] = "SOLE_BUSINESS";
|
5438
|
-
AccountSetupItemsEnum[AccountSetupItemsEnum["
|
5438
|
+
AccountSetupItemsEnum[AccountSetupItemsEnum["SOLE_BANK_ACCOUNT"] = 23] = "SOLE_BANK_ACCOUNT";
|
5439
|
+
// business
|
5439
5440
|
AccountSetupItemsEnum[AccountSetupItemsEnum["SOLE_VEHICLE_CLAIM"] = 12] = "SOLE_VEHICLE_CLAIM";
|
5441
|
+
AccountSetupItemsEnum[AccountSetupItemsEnum["SOLE_LOGO"] = 16] = "SOLE_LOGO";
|
5440
5442
|
AccountSetupItemsEnum[AccountSetupItemsEnum["SOLE_HOME_OFFICE"] = 21] = "SOLE_HOME_OFFICE";
|
5441
5443
|
AccountSetupItemsEnum[AccountSetupItemsEnum["SOLE_DEPRECIATION"] = 22] = "SOLE_DEPRECIATION";
|
5442
|
-
AccountSetupItemsEnum[AccountSetupItemsEnum["SOLE_BANK_ACCOUNT"] = 23] = "SOLE_BANK_ACCOUNT";
|
5443
|
-
AccountSetupItemsEnum[AccountSetupItemsEnum["SOLE_LOGO"] = 16] = "SOLE_LOGO";
|
5444
5444
|
// holding
|
5445
5445
|
AccountSetupItemsEnum[AccountSetupItemsEnum["HOLDING_TRADE"] = 8] = "HOLDING_TRADE";
|
5446
5446
|
AccountSetupItemsEnum[AccountSetupItemsEnum["HOLDING_INTEGRATION"] = 25] = "HOLDING_INTEGRATION";
|
5447
|
-
AccountSetupItemsEnum[AccountSetupItemsEnum["HOLDING_REPORTS"] = 36] = "HOLDING_REPORTS";
|
5448
5447
|
// bank accounts
|
5449
5448
|
AccountSetupItemsEnum[AccountSetupItemsEnum["BANK_CONNECTION"] = 4] = "BANK_CONNECTION";
|
5450
5449
|
AccountSetupItemsEnum[AccountSetupItemsEnum["BANK_ACCOUNT"] = 26] = "BANK_ACCOUNT";
|
5451
|
-
|
5450
|
+
// bank account
|
5452
5451
|
AccountSetupItemsEnum[AccountSetupItemsEnum["BANK_ALLOCATION"] = 6] = "BANK_ALLOCATION";
|
5452
|
+
AccountSetupItemsEnum[AccountSetupItemsEnum["BANK_TRANSACTION"] = 24] = "BANK_TRANSACTION";
|
5453
5453
|
AccountSetupItemsEnum[AccountSetupItemsEnum["BANK_RULE"] = 27] = "BANK_RULE";
|
5454
5454
|
AccountSetupItemsEnum[AccountSetupItemsEnum["BANK_BORROWING_EXPENSE"] = 28] = "BANK_BORROWING_EXPENSE";
|
5455
5455
|
})(AccountSetupItemsEnum || (AccountSetupItemsEnum = {}));
|
@@ -19373,7 +19373,7 @@ class AccountSetupService {
|
|
19373
19373
|
}
|
19374
19374
|
setItemsStatus(property, business, bankAccount) {
|
19375
19375
|
const itemsById = this.items.indexBy('id');
|
19376
|
-
|
19376
|
+
let requests = {
|
19377
19377
|
// firm
|
19378
19378
|
[AccountSetupItemsEnum.FIRM_DETAILS]: this.getFirms(),
|
19379
19379
|
[AccountSetupItemsEnum.FIRM_EMPLOYEES]: this.getEmployees(),
|
@@ -19391,7 +19391,6 @@ class AccountSetupService {
|
|
19391
19391
|
[AccountSetupItemsEnum.PROPERTIES_BANK_ACCOUNT]: this.getBankAccounts(TankTypeEnum.PROPERTY),
|
19392
19392
|
// businesses
|
19393
19393
|
[AccountSetupItemsEnum.SOLE_BUSINESS]: this.businessService.getArray(),
|
19394
|
-
[AccountSetupItemsEnum.SOLE_BUSINESSES]: this.businessService.getArray().pipe(map(businesses => businesses.slice(1))),
|
19395
19394
|
[AccountSetupItemsEnum.SOLE_BANK_ACCOUNT]: this.getBankAccounts(TankTypeEnum.SOLE),
|
19396
19395
|
// holdings
|
19397
19396
|
[AccountSetupItemsEnum.HOLDING_TRADE]: this.holdingService.getArray(),
|
@@ -19399,7 +19398,7 @@ class AccountSetupService {
|
|
19399
19398
|
// bankAccounts
|
19400
19399
|
[AccountSetupItemsEnum.BANK_CONNECTION]: this.bankConnectionService.getArray(),
|
19401
19400
|
[AccountSetupItemsEnum.BANK_ACCOUNT]: this.getBankAccounts(),
|
19402
|
-
}
|
19401
|
+
};
|
19403
19402
|
// property
|
19404
19403
|
if (property) {
|
19405
19404
|
requests[AccountSetupItemsEnum.PROPERTY_CAPITAL_COST] = this.propertyService.getBy('id', property.id).pipe(map(properties => properties.filter(property => !!property.capitalCosts)));
|
@@ -19423,6 +19422,7 @@ class AccountSetupService {
|
|
19423
19422
|
requests[AccountSetupItemsEnum.BANK_BORROWING_EXPENSE] = this.loanService.get().pipe(map(loans => loans.filterBy('bankAccount.id', bankAccount.id).filter(loan => !!loan.borrowingExpenses.length)));
|
19424
19423
|
}
|
19425
19424
|
}
|
19425
|
+
requests = pick(requests, this.items.getIds());
|
19426
19426
|
const batch = Object.keys(requests).map(id => this.setItemStatus(itemsById.get(id), requests[id]));
|
19427
19427
|
if (!batch.length) {
|
19428
19428
|
return of(new AccountSetupItemCollection([]));
|
@@ -20488,6 +20488,7 @@ const ENDPOINTS = {
|
|
20488
20488
|
ALLOCATION_RULES_POST: new Endpoint('POST', '\\/allocation-rules'),
|
20489
20489
|
ALLOCATION_RULES_PUT: new Endpoint('PUT', '\\/allocation-rules\\/\\d+'),
|
20490
20490
|
ALLOCATION_RULES_DELETE: new Endpoint('DELETE', '\\/allocation-rules\\/\\d+'),
|
20491
|
+
SETUP_ITEMS_GET: new Endpoint('GET', '\\/setup-items'),
|
20491
20492
|
BANKS_GET: new Endpoint('GET', '\\/banks'),
|
20492
20493
|
BANK_ACCOUNTS_GET: new Endpoint('GET', '\\/bank-accounts'),
|
20493
20494
|
BANK_ACCOUNTS_POST: new Endpoint('POST', '\\/bank-accounts'),
|
@@ -21743,7 +21744,7 @@ class AddressForm extends AbstractForm {
|
|
21743
21744
|
type: new UntypedFormControl(address?.type || AddressTypeEnum.STREET, Validators.required),
|
21744
21745
|
// corelogic fields (required for Australia and disabled for other countries)
|
21745
21746
|
corelogicLocId: new UntypedFormControl({ value: address?.corelogicLocId, disabled: true }, Validators.required),
|
21746
|
-
corelogicRefId: new UntypedFormControl({ value: address?.corelogicRefId, disabled: true },
|
21747
|
+
corelogicRefId: new UntypedFormControl({ value: address?.corelogicRefId, disabled: true }, [RxwebValidators.required({ message: 'The address is incomplete or incorrect. Please check and try again.' })]),
|
21747
21748
|
// manual fields (using when address not found in corelogic)
|
21748
21749
|
unitNumber: new UntypedFormControl({ value: address?.unitNumber, disabled: true }),
|
21749
21750
|
address: new UntypedFormControl({ value: address?.address, disabled: true }),
|