{ "version": 3, "sources": ["src/app/security/shared/seat-tracker.service.ts"], "sourcesContent": ["import moment from 'moment';\r\nimport { AppConfig } from '@app/app.config';\r\nimport { AuthenticationService } from '@app/security/shared/authentication.service';\r\nimport { HttpService } from '@app/security/shared/http.service';\r\nimport { Injectable } from '@angular/core';\r\nimport { Logger } from '@app/logger/logger';\r\nimport { LocalStorageRefService } from '@app/shared/services/browser/local-storage-ref.service';\r\nimport { StringResult } from '@app/shared/models/string-result.model';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nconst lgSfx = '\\t(seat-tracker.service)';\r\n\r\n// SEAT_TOKEN_PING_INTERVAL is expected in Seconds\r\nconst SEAT_TOKEN_PING_INTERVAL = 60;\r\n\r\n// TODO look into web locks api https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API\r\n@Injectable({ providedIn: 'root' })\r\nexport class SeatTrackerService {\r\n private _seatTokenRetrieved = new Subject();\r\n\r\n public SeatTokenRetrievedObs = this._seatTokenRetrieved.asObservable();\r\n\r\n public get seatToken(): string {\r\n return this.localStorageService.seatToken;\r\n }\r\n\r\n public get seatTokenTimeStamp(): string {\r\n return this.localStorageService.seatTokenTimeStamp;\r\n }\r\n\r\n constructor(\r\n private authService: AuthenticationService,\r\n private config: AppConfig,\r\n private http: HttpService,\r\n private localStorageService: LocalStorageRefService,\r\n private logger: Logger\r\n ) {\r\n this.authService.retryAuth.subscribe(() => {\r\n this.localStorageService.seatTokenTimeStamp = moment().format();\r\n this.runKeepAlive(true);\r\n });\r\n }\r\n\r\n public checkSeatToken(): void {\r\n try {\r\n const currentTimeStamp = this.seatTokenTimeStamp;\r\n if (!currentTimeStamp || !this.seatToken) {\r\n this.localStorageService.seatTokenTimeStamp = moment().format();\r\n this.runKeepAlive();\r\n } else {\r\n if (\r\n currentTimeStamp &&\r\n moment.duration(moment().diff(moment(currentTimeStamp))).asSeconds() >\r\n SEAT_TOKEN_PING_INTERVAL\r\n ) {\r\n this.localStorageService.seatTokenTimeStamp = moment().format();\r\n this.runKeepAlive();\r\n }\r\n }\r\n } finally {\r\n setTimeout(() => {\r\n this.checkSeatToken();\r\n }, SEAT_TOKEN_PING_INTERVAL * 1000);\r\n }\r\n }\r\n\r\n public runKeepAlive(sendRetryLoginMsg?: boolean): void {\r\n this.keepAlive().subscribe(\r\n (result: StringResult) => {\r\n this.logger.log(\r\n 'Keep alive request returned with token',\r\n result,\r\n moment().format('LTS'),\r\n lgSfx\r\n );\r\n if (result.result) {\r\n this.localStorageService.seatToken = result.result;\r\n if (sendRetryLoginMsg) {\r\n this._seatTokenRetrieved.next();\r\n }\r\n } else {\r\n this.logger.error(`Keep alive returned invalid token:`, result);\r\n }\r\n },\r\n (error) => {\r\n this.logger.error(`Keep alive failed:`, error.message, error.description);\r\n }\r\n );\r\n }\r\n\r\n public KeepDbSessionAlive(): void {\r\n // Note: this interval timing may need to be adjusted\r\n setInterval(() => this.keepAliveDb(), 45000);\r\n }\r\n\r\n private keepAliveDb(): void {\r\n this.logger.log('Keep alive db interval');\r\n if (this.authService.token) {\r\n this.logger.log('Calling keep db session alive', moment().format('LTS'));\r\n\r\n const API_ENDPOINT = `/api/v1/auth/keepalive-db/`;\r\n const endpoint = this.config.getServerUri() + API_ENDPOINT;\r\n\r\n this.http.postAny(endpoint, undefined, undefined, true).subscribe((resp) => {\r\n this.logger.log('Keep alive db response', resp);\r\n });\r\n }\r\n }\r\n\r\n private keepAlive(): Observable {\r\n const seatToken = this.localStorageService.seatToken;\r\n this.logger.log('Sending keep alive request with token', seatToken, lgSfx);\r\n\r\n const API_ENDPOINT = `/api/v1/auth/keepalive/`;\r\n const endpoint = this.config.getServerUri() + API_ENDPOINT;\r\n\r\n return this.http\r\n .post(endpoint, undefined, StringResult, undefined, true)\r\n .pipe(map((resp) => resp));\r\n }\r\n}\r\n"], "mappings": "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", "names": ["import_moment", "lgSfx", "SEAT_TOKEN_PING_INTERVAL", "SeatTrackerService", "authService", "config", "http", "localStorageService", "logger", "_seatTokenRetrieved", "Subject", "SeatTokenRetrievedObs", "asObservable", "seatToken", "seatTokenTimeStamp", "constructor", "retryAuth", "subscribe", "moment", "format", "runKeepAlive", "checkSeatToken", "currentTimeStamp", "duration", "diff", "asSeconds", "setTimeout", "sendRetryLoginMsg", "keepAlive", "result", "log", "next", "error", "message", "description", "KeepDbSessionAlive", "setInterval", "keepAliveDb", "token", "endpoint", "getServerUri", "postAny", "undefined", "resp", "post", "StringResult", "pipe", "map", "\u0275\u0275inject", "AuthenticationService", "AppConfig", "HttpService", "LocalStorageRefService", "Logger", "factory", "\u0275fac", "providedIn"] }