@smartbit4all/ng-client 1.1.23 → 1.1.25

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.
Files changed (259) hide show
  1. package/README.md +386 -386
  2. package/esm2020/lib/session/api/api/api.mjs +4 -4
  3. package/esm2020/lib/session/api/api/session.service.mjs +306 -306
  4. package/esm2020/lib/session/api/configuration.mjs +91 -91
  5. package/esm2020/lib/session/api/encoder.mjs +19 -19
  6. package/esm2020/lib/session/api/index.mjs +3 -3
  7. package/esm2020/lib/session/api/model/accountInfo.mjs +13 -13
  8. package/esm2020/lib/session/api/model/apiError.mjs +13 -13
  9. package/esm2020/lib/session/api/model/authenticationProviderData.mjs +13 -13
  10. package/esm2020/lib/session/api/model/getAuthenticationProvidersResponse.mjs +2 -2
  11. package/esm2020/lib/session/api/model/models.mjs +9 -9
  12. package/esm2020/lib/session/api/model/refreshSessionRequest.mjs +13 -13
  13. package/esm2020/lib/session/api/model/session.mjs +2 -2
  14. package/esm2020/lib/session/api/model/sessionInfoData.mjs +2 -2
  15. package/esm2020/lib/session/api/model/userActivityLog.mjs +13 -13
  16. package/esm2020/lib/session/api/param.mjs +2 -2
  17. package/esm2020/lib/session/api/variables.mjs +9 -9
  18. package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +225 -225
  19. package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.mjs +90 -90
  20. package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.mjs +43 -43
  21. package/esm2020/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.mjs +40 -40
  22. package/esm2020/lib/session/dev-tool/smart-dev-tool.interceptor.mjs +52 -52
  23. package/esm2020/lib/session/dev-tool/smart-dev-tool.service.mjs +161 -161
  24. package/esm2020/lib/session/projects.mjs +12 -12
  25. package/esm2020/lib/session/smart-error-catching.interceptor.mjs +71 -71
  26. package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +36 -36
  27. package/esm2020/lib/session/smart-session-handler.service.mjs +6 -6
  28. package/esm2020/lib/session/smart-session.module.mjs +74 -74
  29. package/esm2020/lib/session/smart-session.service.mjs +205 -205
  30. package/esm2020/lib/session/smart-timer/smart-session-timer.component.mjs +35 -35
  31. package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +51 -51
  32. package/esm2020/lib/smart-client/projects.mjs +6 -6
  33. package/esm2020/lib/smart-client/smart-authentication.service.mjs +15 -15
  34. package/esm2020/lib/smart-client/smart-component-api-client.mjs +316 -316
  35. package/esm2020/lib/smart-client/smart.component.mjs +30 -30
  36. package/esm2020/lib/smart-client/smart.service.mjs +30 -30
  37. package/esm2020/lib/smart-client/smart.subject.mjs +21 -21
  38. package/esm2020/lib/smart-ng-client.module.mjs +20 -20
  39. package/esm2020/lib/smart-ng-client.service.mjs +19 -19
  40. package/esm2020/lib/view-context/api/api/api.mjs +4 -4
  41. package/esm2020/lib/view-context/api/api/view.service.mjs +701 -701
  42. package/esm2020/lib/view-context/api/api.module.mjs +40 -40
  43. package/esm2020/lib/view-context/api/configuration.mjs +91 -91
  44. package/esm2020/lib/view-context/api/encoder.mjs +19 -19
  45. package/esm2020/lib/view-context/api/index.mjs +7 -7
  46. package/esm2020/lib/view-context/api/model/closeResult.mjs +17 -17
  47. package/esm2020/lib/view-context/api/model/componentConstraint.mjs +2 -2
  48. package/esm2020/lib/view-context/api/model/componentModel.mjs +2 -2
  49. package/esm2020/lib/view-context/api/model/componentModelChange.mjs +13 -13
  50. package/esm2020/lib/view-context/api/model/dataChange.mjs +2 -2
  51. package/esm2020/lib/view-context/api/model/dataChangeEvent.mjs +2 -2
  52. package/esm2020/lib/view-context/api/model/dataChangeKind.mjs +17 -17
  53. package/esm2020/lib/view-context/api/model/messageData.mjs +2 -2
  54. package/esm2020/lib/view-context/api/model/messageOption.mjs +2 -2
  55. package/esm2020/lib/view-context/api/model/messageOptionType.mjs +17 -17
  56. package/esm2020/lib/view-context/api/model/messageResult.mjs +2 -2
  57. package/esm2020/lib/view-context/api/model/messageType.mjs +18 -18
  58. package/esm2020/lib/view-context/api/model/models.mjs +37 -37
  59. package/esm2020/lib/view-context/api/model/openPendingData.mjs +2 -2
  60. package/esm2020/lib/view-context/api/model/smartLinkData.mjs +2 -2
  61. package/esm2020/lib/view-context/api/model/uiAction.mjs +2 -2
  62. package/esm2020/lib/view-context/api/model/uiActionButtonDescriptor.mjs +13 -13
  63. package/esm2020/lib/view-context/api/model/uiActionButtonIconPos.mjs +16 -16
  64. package/esm2020/lib/view-context/api/model/uiActionButtonType.mjs +21 -21
  65. package/esm2020/lib/view-context/api/model/uiActionDescriptor.mjs +2 -2
  66. package/esm2020/lib/view-context/api/model/uiActionDialogDescriptor.mjs +2 -2
  67. package/esm2020/lib/view-context/api/model/uiActionFeedbackType.mjs +16 -16
  68. package/esm2020/lib/view-context/api/model/uiActionInputType.mjs +18 -18
  69. package/esm2020/lib/view-context/api/model/uiActionRequest.mjs +13 -13
  70. package/esm2020/lib/view-context/api/model/valueSet.mjs +2 -2
  71. package/esm2020/lib/view-context/api/model/view.mjs +2 -2
  72. package/esm2020/lib/view-context/api/model/viewApiError.mjs +13 -13
  73. package/esm2020/lib/view-context/api/model/viewConstraint.mjs +2 -2
  74. package/esm2020/lib/view-context/api/model/viewContext.mjs +2 -2
  75. package/esm2020/lib/view-context/api/model/viewContextChange.mjs +2 -2
  76. package/esm2020/lib/view-context/api/model/viewContextData.mjs +2 -2
  77. package/esm2020/lib/view-context/api/model/viewContextUpdate.mjs +2 -2
  78. package/esm2020/lib/view-context/api/model/viewData.mjs +2 -2
  79. package/esm2020/lib/view-context/api/model/viewEventHandler.mjs +20 -20
  80. package/esm2020/lib/view-context/api/model/viewState.mjs +21 -21
  81. package/esm2020/lib/view-context/api/model/viewStateUpdate.mjs +2 -2
  82. package/esm2020/lib/view-context/api/model/viewType.mjs +17 -17
  83. package/esm2020/lib/view-context/api/param.mjs +2 -2
  84. package/esm2020/lib/view-context/api/variables.mjs +9 -9
  85. package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +63 -63
  86. package/esm2020/lib/view-context/projects.mjs +17 -17
  87. package/esm2020/lib/view-context/property-definition-data.mjs +2 -2
  88. package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +30 -30
  89. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +53 -53
  90. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +47 -47
  91. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +119 -119
  92. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +51 -51
  93. package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +109 -109
  94. package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +118 -118
  95. package/esm2020/lib/view-context/smart-ui-action/ui-action.model.mjs +7 -7
  96. package/esm2020/lib/view-context/smart-ui-action/ui-action.service.mjs +149 -149
  97. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +29 -24
  98. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +69 -49
  99. package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +39 -39
  100. package/esm2020/lib/view-context/smart-view-context.model.mjs +2 -2
  101. package/esm2020/lib/view-context/smart-view-context.module.mjs +84 -84
  102. package/esm2020/lib/view-context/smart-view-context.service.mjs +495 -477
  103. package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +33 -33
  104. package/esm2020/lib/view-context/value-api/api/api.mjs +4 -4
  105. package/esm2020/lib/view-context/value-api/api/value.service.mjs +138 -138
  106. package/esm2020/lib/view-context/value-api/api.module.mjs +40 -40
  107. package/esm2020/lib/view-context/value-api/configuration.mjs +91 -91
  108. package/esm2020/lib/view-context/value-api/encoder.mjs +19 -19
  109. package/esm2020/lib/view-context/value-api/index.mjs +7 -7
  110. package/esm2020/lib/view-context/value-api/model/models.mjs +9 -9
  111. package/esm2020/lib/view-context/value-api/model/value.mjs +13 -13
  112. package/esm2020/lib/view-context/value-api/model/valueSetData.mjs +13 -13
  113. package/esm2020/lib/view-context/value-api/model/valueSetDefinition.mjs +2 -2
  114. package/esm2020/lib/view-context/value-api/model/valueSetDefinitionData.mjs +2 -2
  115. package/esm2020/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +23 -23
  116. package/esm2020/lib/view-context/value-api/model/valueSetExpression.mjs +2 -2
  117. package/esm2020/lib/view-context/value-api/model/valueSetOperand.mjs +2 -2
  118. package/esm2020/lib/view-context/value-api/model/valueSetOperation.mjs +18 -18
  119. package/esm2020/lib/view-context/value-api/param.mjs +2 -2
  120. package/esm2020/lib/view-context/value-api/variables.mjs +9 -9
  121. package/esm2020/projects.mjs +9 -9
  122. package/esm2020/smartbit4all-ng-client.mjs +4 -4
  123. package/fesm2015/smartbit4all-ng-client.mjs +4301 -4255
  124. package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
  125. package/fesm2020/smartbit4all-ng-client.mjs +4256 -4215
  126. package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
  127. package/lib/session/api/api/api.d.ts +3 -3
  128. package/lib/session/api/api/session.service.d.ts +107 -107
  129. package/lib/session/api/configuration.d.ts +104 -104
  130. package/lib/session/api/encoder.d.ts +11 -11
  131. package/lib/session/api/index.d.ts +2 -2
  132. package/lib/session/api/model/accountInfo.d.ts +22 -22
  133. package/lib/session/api/model/apiError.d.ts +15 -15
  134. package/lib/session/api/model/authenticationProviderData.d.ts +17 -17
  135. package/lib/session/api/model/getAuthenticationProvidersResponse.d.ts +15 -15
  136. package/lib/session/api/model/models.d.ts +8 -8
  137. package/lib/session/api/model/refreshSessionRequest.d.ts +14 -14
  138. package/lib/session/api/model/session.d.ts +32 -32
  139. package/lib/session/api/model/sessionInfoData.d.ts +22 -22
  140. package/lib/session/api/model/userActivityLog.d.ts +33 -33
  141. package/lib/session/api/param.d.ts +37 -37
  142. package/lib/session/api/variables.d.ts +8 -8
  143. package/lib/session/cookie-service/smart-cookie.service.d.ts +129 -129
  144. package/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.d.ts +28 -28
  145. package/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.d.ts +18 -18
  146. package/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.d.ts +15 -15
  147. package/lib/session/dev-tool/smart-dev-tool.interceptor.d.ts +18 -18
  148. package/lib/session/dev-tool/smart-dev-tool.service.d.ts +55 -55
  149. package/lib/session/projects.d.ts +8 -8
  150. package/lib/session/smart-error-catching.interceptor.d.ts +13 -13
  151. package/lib/session/smart-header-maintainer.interceptor.d.ts +11 -11
  152. package/lib/session/smart-session-handler.service.d.ts +11 -11
  153. package/lib/session/smart-session.module.d.ts +15 -15
  154. package/lib/session/smart-session.service.d.ts +50 -50
  155. package/lib/session/smart-timer/smart-session-timer.component.d.ts +14 -14
  156. package/lib/session/smart-timer/smart-session-timer.service.d.ts +21 -21
  157. package/lib/smart-client/projects.d.ts +5 -5
  158. package/lib/smart-client/smart-authentication.service.d.ts +12 -12
  159. package/lib/smart-client/smart-component-api-client.d.ts +71 -71
  160. package/lib/smart-client/smart.component.d.ts +11 -11
  161. package/lib/smart-client/smart.service.d.ts +11 -11
  162. package/lib/smart-client/smart.subject.d.ts +6 -6
  163. package/lib/smart-ng-client.module.d.ts +8 -8
  164. package/lib/smart-ng-client.service.d.ts +10 -10
  165. package/lib/view-context/api/api/api.d.ts +3 -3
  166. package/lib/view-context/api/api/view.service.d.ts +266 -266
  167. package/lib/view-context/api/api.module.d.ts +11 -11
  168. package/lib/view-context/api/configuration.d.ts +104 -104
  169. package/lib/view-context/api/encoder.d.ts +11 -11
  170. package/lib/view-context/api/index.d.ts +6 -6
  171. package/lib/view-context/api/model/closeResult.d.ts +17 -17
  172. package/lib/view-context/api/model/componentConstraint.d.ts +25 -25
  173. package/lib/view-context/api/model/componentModel.d.ts +31 -31
  174. package/lib/view-context/api/model/componentModelChange.d.ts +29 -29
  175. package/lib/view-context/api/model/dataChange.d.ts +27 -27
  176. package/lib/view-context/api/model/dataChangeEvent.d.ts +33 -33
  177. package/lib/view-context/api/model/dataChangeKind.d.ts +20 -20
  178. package/lib/view-context/api/model/messageData.d.ts +29 -29
  179. package/lib/view-context/api/model/messageOption.d.ts +20 -20
  180. package/lib/view-context/api/model/messageOptionType.d.ts +17 -17
  181. package/lib/view-context/api/model/messageResult.d.ts +16 -16
  182. package/lib/view-context/api/model/messageType.d.ts +18 -18
  183. package/lib/view-context/api/model/models.d.ts +36 -36
  184. package/lib/view-context/api/model/openPendingData.d.ts +22 -22
  185. package/lib/view-context/api/model/smartLinkData.d.ts +21 -21
  186. package/lib/view-context/api/model/uiAction.d.ts +29 -29
  187. package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +18 -18
  188. package/lib/view-context/api/model/uiActionButtonIconPos.d.ts +19 -19
  189. package/lib/view-context/api/model/uiActionButtonType.d.ts +24 -24
  190. package/lib/view-context/api/model/uiActionDescriptor.d.ts +34 -34
  191. package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +23 -23
  192. package/lib/view-context/api/model/uiActionFeedbackType.d.ts +19 -19
  193. package/lib/view-context/api/model/uiActionInputType.d.ts +18 -18
  194. package/lib/view-context/api/model/uiActionRequest.d.ts +28 -28
  195. package/lib/view-context/api/model/valueSet.d.ts +20 -20
  196. package/lib/view-context/api/model/view.d.ts +68 -68
  197. package/lib/view-context/api/model/viewApiError.d.ts +18 -18
  198. package/lib/view-context/api/model/viewConstraint.d.ts +18 -18
  199. package/lib/view-context/api/model/viewContext.d.ts +22 -22
  200. package/lib/view-context/api/model/viewContextChange.d.ts +20 -20
  201. package/lib/view-context/api/model/viewContextData.d.ts +19 -19
  202. package/lib/view-context/api/model/viewContextUpdate.d.ts +22 -22
  203. package/lib/view-context/api/model/viewData.d.ts +27 -27
  204. package/lib/view-context/api/model/viewEventHandler.d.ts +30 -30
  205. package/lib/view-context/api/model/viewState.d.ts +21 -21
  206. package/lib/view-context/api/model/viewStateUpdate.d.ts +24 -24
  207. package/lib/view-context/api/model/viewType.d.ts +17 -17
  208. package/lib/view-context/api/param.d.ts +37 -37
  209. package/lib/view-context/api/variables.d.ts +8 -8
  210. package/lib/view-context/message-dialog/message-dialog.component.d.ts +17 -17
  211. package/lib/view-context/projects.d.ts +13 -13
  212. package/lib/view-context/property-definition-data.d.ts +5 -5
  213. package/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.d.ts +13 -13
  214. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +25 -25
  215. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +18 -18
  216. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +29 -29
  217. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +25 -25
  218. package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +30 -30
  219. package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +21 -21
  220. package/lib/view-context/smart-ui-action/ui-action.model.d.ts +32 -32
  221. package/lib/view-context/smart-ui-action/ui-action.service.d.ts +31 -31
  222. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.d.ts +13 -13
  223. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +19 -19
  224. package/lib/view-context/smart-view-context.interceptor.d.ts +13 -13
  225. package/lib/view-context/smart-view-context.model.d.ts +30 -30
  226. package/lib/view-context/smart-view-context.module.d.ts +20 -20
  227. package/lib/view-context/smart-view-context.service.d.ts +99 -96
  228. package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +14 -14
  229. package/lib/view-context/value-api/api/api.d.ts +3 -3
  230. package/lib/view-context/value-api/api/value.service.d.ts +35 -35
  231. package/lib/view-context/value-api/api.module.d.ts +11 -11
  232. package/lib/view-context/value-api/configuration.d.ts +104 -104
  233. package/lib/view-context/value-api/encoder.d.ts +11 -11
  234. package/lib/view-context/value-api/index.d.ts +6 -6
  235. package/lib/view-context/value-api/model/models.d.ts +8 -8
  236. package/lib/view-context/value-api/model/value.d.ts +29 -29
  237. package/lib/view-context/value-api/model/valueSetData.d.ts +41 -41
  238. package/lib/view-context/value-api/model/valueSetDefinition.d.ts +16 -16
  239. package/lib/view-context/value-api/model/valueSetDefinitionData.d.ts +55 -55
  240. package/lib/view-context/value-api/model/valueSetDefinitionKind.d.ts +23 -23
  241. package/lib/view-context/value-api/model/valueSetExpression.d.ts +20 -20
  242. package/lib/view-context/value-api/model/valueSetOperand.d.ts +25 -25
  243. package/lib/view-context/value-api/model/valueSetOperation.d.ts +18 -18
  244. package/lib/view-context/value-api/param.d.ts +37 -37
  245. package/lib/view-context/value-api/variables.d.ts +8 -8
  246. package/package.json +1 -1
  247. package/projects.d.ts +5 -5
  248. package/schematics/collection.json +11 -11
  249. package/schematics/smart-component/index.ts +26 -26
  250. package/schematics/smart-component/schema.json +20 -20
  251. package/schematics/smart-component/smart-component.schema.ts +4 -4
  252. package/schematics/smart-component/templates/__name@dasherize__.component.html.template +2 -2
  253. package/schematics/smart-component/templates/__name@dasherize__.component.ts.template +26 -26
  254. package/smartbit4all-ng-client-1.1.25.tgz +0 -0
  255. package/smartbit4all-ng-client.d.ts +5 -5
  256. package/src/lib/session/api/README.md +226 -226
  257. package/src/lib/view-context/api/README.md +226 -226
  258. package/src/lib/view-context/value-api/README.md +226 -226
  259. package/smartbit4all-ng-client-1.1.23.tgz +0 -0
@@ -1,205 +1,205 @@
1
- import { Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./api";
5
- import * as i2 from "./cookie-service/smart-cookie.service";
6
- export class SmartSessionService {
7
- constructor(apiService, cookieService) {
8
- this.apiService = apiService;
9
- this.cookieService = cookieService;
10
- this.isAuthenticated = false;
11
- this.authenticationStateChanged = new Subject();
12
- this.headerParams = new Array();
13
- this.headersUpdated = new Subject();
14
- // Locale
15
- this.localStorageLocaleName = 'locale';
16
- this.localeChanged = new Subject();
17
- this.sessionExpiracyChanged = new Subject();
18
- }
19
- get sessionInfoData() {
20
- return this._sessionInfoData;
21
- }
22
- set sessionInfoData(sessionInfoData) {
23
- let expiracyChanged = this.sessionInfoData?.expiration !== sessionInfoData?.expiration;
24
- this._sessionInfoData = sessionInfoData;
25
- if (expiracyChanged) {
26
- this.sessionExpiracyChanged.next();
27
- }
28
- }
29
- setSessionHandlerService(smartSessionHandlerService) {
30
- this.sessionHandlerService = smartSessionHandlerService;
31
- }
32
- async handleSessionError(sessionError) {
33
- if (this.sessionHandlerService) {
34
- await this.sessionHandlerService.handleSessionError(sessionError);
35
- }
36
- throw new Error(`sessionHandlerService was not initialized. Error: ${sessionError.code}`);
37
- }
38
- addHeaderParam(headerParam) {
39
- if (this.headerParams.find((h) => h.headerName === headerParam.headerName)) {
40
- let index = this.headerParams.findIndex((h) => h.headerName === headerParam.headerName);
41
- this.headerParams[index].value = headerParam.value;
42
- }
43
- else {
44
- this.headerParams.push(headerParam);
45
- }
46
- this.headersUpdated.next();
47
- }
48
- setUpTokenForSessionService() {
49
- this.addHeaderParam({
50
- headerName: 'Authorization',
51
- value: `Bearer ${this.token}`,
52
- });
53
- }
54
- setUrl(url) {
55
- this.basePath = url;
56
- }
57
- getBasePath() {
58
- if (!this.basePath) {
59
- throw new Error('BasePath has not been set in SmartSessionService!');
60
- }
61
- return this.basePath;
62
- }
63
- setCookieName(name) {
64
- this.cookieName = name;
65
- }
66
- saveTokenToLocalStorage() {
67
- if (this.sessionInfoData && this.cookieName) {
68
- localStorage.setItem('token', this.sessionInfoData.sid);
69
- if (this.sessionInfoData.refreshToken &&
70
- this.sessionInfoData.refreshToken !== localStorage.getItem('refreshToken')) {
71
- localStorage.setItem('refreshToken', this.sessionInfoData.refreshToken);
72
- }
73
- this.cookieService.set(this.cookieName, this.token);
74
- }
75
- }
76
- setAuthenticationStatus() {
77
- if (this.sessionInfoData && this.sessionInfoData.authentications) {
78
- this.isAuthenticated = this.sessionInfoData.authentications.length > 0;
79
- }
80
- this.authenticationStateChanged.next(this.isAuthenticated);
81
- }
82
- checkStatements() {
83
- if (!this.basePath) {
84
- throw new Error('The url of the backend api has not been set!');
85
- }
86
- else if (!this.cookieName) {
87
- throw new Error('The name of the cookie required by the backend has not been set!');
88
- }
89
- }
90
- async initialize() {
91
- this.checkStatements();
92
- let tokenFromLocalStorage = localStorage.getItem('token');
93
- let tokenFromCookies = this.cookieService.get(this.cookieName);
94
- if (tokenFromLocalStorage && tokenFromCookies && tokenFromLocalStorage === tokenFromCookies) {
95
- this.token = tokenFromLocalStorage;
96
- this.setUpTokenForSessionService();
97
- try {
98
- await this.getSession();
99
- }
100
- catch (err) {
101
- await this.startSession();
102
- }
103
- }
104
- else {
105
- await this.clearAndStartNewSession();
106
- }
107
- if (this.sessionInfoData && this.sessionInfoData.locale) {
108
- localStorage.setItem(this.localStorageLocaleName, this.sessionInfoData.locale);
109
- this.localeChanged.next();
110
- }
111
- }
112
- async startSession() {
113
- let sessionInfo = await this.apiService.startSession().toPromise();
114
- if (sessionInfo) {
115
- this.sessionInfoData = sessionInfo;
116
- this.token = sessionInfo.sid;
117
- this.saveTokenToLocalStorage();
118
- this.setAuthenticationStatus();
119
- this.setUpTokenForSessionService();
120
- }
121
- return this.sessionInfoData;
122
- }
123
- async getSession() {
124
- let sessionInfo = await this.apiService.getSession().toPromise();
125
- if (sessionInfo) {
126
- this.sessionInfoData = sessionInfo;
127
- this.token = sessionInfo.sid;
128
- this.saveTokenToLocalStorage();
129
- this.setAuthenticationStatus();
130
- }
131
- return this.sessionInfoData;
132
- }
133
- async refreshSession() {
134
- let refreshToken = localStorage.getItem('refreshToken');
135
- if (!refreshToken) {
136
- return await this.startSession();
137
- }
138
- let sessionInfo = await this.apiService
139
- .refreshSession({
140
- refreshToken,
141
- })
142
- .toPromise()
143
- .catch(async (error) => {
144
- if (error.error &&
145
- error.error.code &&
146
- error.error.code === 'session.refreshtoken.invalid') {
147
- await this.startSession();
148
- }
149
- });
150
- if (sessionInfo) {
151
- this.sessionInfoData = sessionInfo;
152
- this.token = sessionInfo.sid;
153
- this.saveTokenToLocalStorage();
154
- this.setAuthenticationStatus();
155
- this.setUpTokenForSessionService();
156
- }
157
- return this.sessionInfoData;
158
- }
159
- async getAuthenticationProviders() {
160
- let providers = await this.apiService
161
- .getAuthenticationProviders()
162
- .toPromise();
163
- this.providers = providers?.authenticationProviders;
164
- return this.providers;
165
- }
166
- async getIsAuthenticated() {
167
- if (this.sessionInfoData) {
168
- return this.isAuthenticated;
169
- }
170
- await this.getSession();
171
- return this.isAuthenticated;
172
- }
173
- async clearAndStartNewSession() {
174
- sessionStorage.clear();
175
- localStorage.clear();
176
- this.headerParams = [];
177
- this.cookieService.delete(this.cookieName);
178
- await this.startSession();
179
- }
180
- getLocale() {
181
- if (this.sessionInfoData && this.sessionInfoData.locale) {
182
- if (localStorage.getItem(this.localStorageLocaleName) !== this.sessionInfoData.locale) {
183
- localStorage.setItem(this.localStorageLocaleName, this.sessionInfoData.locale);
184
- }
185
- return this.sessionInfoData.locale;
186
- }
187
- throw new Error('There is no SessionInfoData or locale is undefined.');
188
- }
189
- async changeLocale(locale) {
190
- this.sessionInfoData = await this.apiService.setLocale(locale).toPromise();
191
- if (this.sessionInfoData && this.sessionInfoData.locale) {
192
- localStorage.setItem(this.localStorageLocaleName, this.sessionInfoData.locale);
193
- this.localeChanged.next();
194
- }
195
- }
196
- }
197
- SmartSessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionService, deps: [{ token: i1.SessionService }, { token: i2.SmartCookieService }], target: i0.ɵɵFactoryTarget.Injectable });
198
- SmartSessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionService, providedIn: 'root' });
199
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionService, decorators: [{
200
- type: Injectable,
201
- args: [{
202
- providedIn: 'root',
203
- }]
204
- }], ctorParameters: function () { return [{ type: i1.SessionService }, { type: i2.SmartCookieService }]; } });
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc2Vzc2lvbi9zbWFydC1zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBa0IvQixNQUFNLE9BQU8sbUJBQW1CO0lBbUM5QixZQUFvQixVQUEwQixFQUFVLGFBQWlDO1FBQXJFLGVBQVUsR0FBVixVQUFVLENBQWdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBZmxGLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLCtCQUEwQixHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTdELGlCQUFZLEdBQXVCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDL0MsbUJBQWMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVyRCxTQUFTO1FBQ0QsMkJBQXNCLEdBQVcsUUFBUSxDQUFDO1FBQzNDLGtCQUFhLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFN0MsMkJBQXNCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7SUFJK0IsQ0FBQztJQTlCN0YsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFZLGVBQWUsQ0FBQyxlQUE0QztRQUN0RSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsS0FBSyxlQUFlLEVBQUUsVUFBVSxDQUFDO1FBRXZGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFFeEMsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFD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RXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQXBpRXJyb3IsXHJcbiAgQXV0aGVudGljYXRpb25Qcm92aWRlckRhdGEsXHJcbiAgR2V0QXV0aGVudGljYXRpb25Qcm92aWRlcnNSZXNwb25zZSxcclxuICBTZXNzaW9uSW5mb0RhdGEsXHJcbiAgU2Vzc2lvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi9hcGknO1xyXG5pbXBvcnQgeyBTbWFydENvb2tpZVNlcnZpY2UgfSBmcm9tICcuL2Nvb2tpZS1zZXJ2aWNlL3NtYXJ0LWNvb2tpZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvbkVycm9yLCBTbWFydFNlc3Npb25IYW5kbGVyU2VydmljZSB9IGZyb20gJy4vc21hcnQtc2Vzc2lvbi1oYW5kbGVyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIZWFkZXJQYXJhbSB7XHJcbiAgaGVhZGVyTmFtZTogc3RyaW5nO1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0U2Vzc2lvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgYmFzZVBhdGg/OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB0b2tlbj86IHN0cmluZztcclxuICBwcml2YXRlIF9zZXNzaW9uSW5mb0RhdGE/OiBTZXNzaW9uSW5mb0RhdGE7XHJcblxyXG4gIHB1YmxpYyBnZXQgc2Vzc2lvbkluZm9EYXRhKCk6IFNlc3Npb25JbmZvRGF0YSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbkluZm9EYXRhO1xyXG4gIH1cclxuICBwcml2YXRlIHNldCBzZXNzaW9uSW5mb0RhdGEoc2Vzc2lvbkluZm9EYXRhOiBTZXNzaW9uSW5mb0RhdGEgfCB1bmRlZmluZWQpIHtcclxuICAgIGxldCBleHBpcmFjeUNoYW5nZWQgPSB0aGlzLnNlc3Npb25JbmZvRGF0YT8uZXhwaXJhdGlvbiAhPT0gc2Vzc2lvbkluZm9EYXRhPy5leHBpcmF0aW9uO1xyXG5cclxuICAgIHRoaXMuX3Nlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvRGF0YTtcclxuXHJcbiAgICBpZiAoZXhwaXJhY3lDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkV4cGlyYWN5Q2hhbmdlZC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb3ZpZGVycz86IEFycmF5PEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJEYXRhPjtcclxuICBwcml2YXRlIGNvb2tpZU5hbWU/OiBzdHJpbmc7XHJcbiAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYXV0aGVudGljYXRpb25TdGF0ZUNoYW5nZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwdWJsaWMgaGVhZGVyUGFyYW1zOiBBcnJheTxIZWFkZXJQYXJhbT4gPSBuZXcgQXJyYXkoKTtcclxuICBwdWJsaWMgaGVhZGVyc1VwZGF0ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvLyBMb2NhbGVcclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZUxvY2FsZU5hbWU6IHN0cmluZyA9ICdsb2NhbGUnO1xyXG4gIHB1YmxpYyBsb2NhbGVDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIHNlc3Npb25FeHBpcmFjeUNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIHNlc3Npb25IYW5kbGVyU2VydmljZT86IFNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVNlcnZpY2U6IFNlc3Npb25TZXJ2aWNlLCBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IFNtYXJ0Q29va2llU2VydmljZSkge31cclxuXHJcbiAgcHVibGljIHNldFNlc3Npb25IYW5kbGVyU2VydmljZShzbWFydFNlc3Npb25IYW5kbGVyU2VydmljZTogU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2UpOiB2b2lkIHtcclxuICAgIHRoaXMuc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlID0gc21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlU2Vzc2lvbkVycm9yKHNlc3Npb25FcnJvcjogU2Vzc2lvbkVycm9yKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSGFuZGxlclNlcnZpY2UpIHtcclxuICAgICAgYXdhaXQgdGhpcy5zZXNzaW9uSGFuZGxlclNlcnZpY2UuaGFuZGxlU2Vzc2lvbkVycm9yKHNlc3Npb25FcnJvcik7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNlc3Npb25IYW5kbGVyU2VydmljZSB3YXMgbm90IGluaXRpYWxpemVkLiBFcnJvcjogJHtzZXNzaW9uRXJyb3IuY29kZX1gKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRIZWFkZXJQYXJhbShoZWFkZXJQYXJhbTogSGVhZGVyUGFyYW0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmhlYWRlclBhcmFtcy5maW5kKChoOiBIZWFkZXJQYXJhbSkgPT4gaC5oZWFkZXJOYW1lID09PSBoZWFkZXJQYXJhbS5oZWFkZXJOYW1lKSkge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLmhlYWRlclBhcmFtcy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGg6IEhlYWRlclBhcmFtKSA9PiBoLmhlYWRlck5hbWUgPT09IGhlYWRlclBhcmFtLmhlYWRlck5hbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5oZWFkZXJQYXJhbXNbaW5kZXghXS52YWx1ZSA9IGhlYWRlclBhcmFtLnZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oZWFkZXJQYXJhbXMucHVzaChoZWFkZXJQYXJhbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlYWRlcnNVcGRhdGVkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXBUb2tlbkZvclNlc3Npb25TZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRIZWFkZXJQYXJhbSh7XHJcbiAgICAgIGhlYWRlck5hbWU6ICdBdXRob3JpemF0aW9uJyxcclxuICAgICAgdmFsdWU6IGBCZWFyZXIgJHt0aGlzLnRva2VuIX1gLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VXJsKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmJhc2VQYXRoID0gdXJsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0QmFzZVBhdGgoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5iYXNlUGF0aCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2VQYXRoIGhhcyBub3QgYmVlbiBzZXQgaW4gU21hcnRTZXNzaW9uU2VydmljZSEnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmJhc2VQYXRoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvb2tpZU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvb2tpZU5hbWUgPSBuYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlVG9rZW5Ub0xvY2FsU3RvcmFnZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLmNvb2tpZU5hbWUpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rva2VuJywgdGhpcy5zZXNzaW9uSW5mb0RhdGEuc2lkKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc2Vzc2lvbkluZm9EYXRhLnJlZnJlc2hUb2tlbiAmJlxyXG4gICAgICAgIHRoaXMuc2Vzc2lvbkluZm9EYXRhLnJlZnJlc2hUb2tlbiAhPT0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZnJlc2hUb2tlbicpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdyZWZyZXNoVG9rZW4nLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5yZWZyZXNoVG9rZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQodGhpcy5jb29raWVOYW1lLCB0aGlzLnRva2VuISk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEF1dGhlbnRpY2F0aW9uU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZm9EYXRhICYmIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmF1dGhlbnRpY2F0aW9ucykge1xyXG4gICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuc2Vzc2lvbkluZm9EYXRhLmF1dGhlbnRpY2F0aW9ucy5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHRoaXMuaXNBdXRoZW50aWNhdGVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tTdGF0ZW1lbnRzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJhc2VQYXRoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHVybCBvZiB0aGUgYmFja2VuZCBhcGkgaGFzIG5vdCBiZWVuIHNldCEnKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY29va2llTmFtZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuYW1lIG9mIHRoZSBjb29raWUgcmVxdWlyZWQgYnkgdGhlIGJhY2tlbmQgaGFzIG5vdCBiZWVuIHNldCEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jaGVja1N0YXRlbWVudHMoKTtcclxuXHJcbiAgICBsZXQgdG9rZW5Gcm9tTG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XHJcbiAgICBsZXQgdG9rZW5Gcm9tQ29va2llcyA9IHRoaXMuY29va2llU2VydmljZS5nZXQodGhpcy5jb29raWVOYW1lISk7XHJcblxyXG4gICAgaWYgKHRva2VuRnJvbUxvY2FsU3RvcmFnZSAmJiB0b2tlbkZyb21Db29raWVzICYmIHRva2VuRnJvbUxvY2FsU3RvcmFnZSA9PT0gdG9rZW5Gcm9tQ29va2llcykge1xyXG4gICAgICB0aGlzLnRva2VuID0gdG9rZW5Gcm9tTG9jYWxTdG9yYWdlO1xyXG4gICAgICB0aGlzLnNldFVwVG9rZW5Gb3JTZXNzaW9uU2VydmljZSgpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLmNsZWFyQW5kU3RhcnROZXdTZXNzaW9uKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTG9jYWxlTmFtZSwgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKTtcclxuICAgICAgdGhpcy5sb2NhbGVDaGFuZ2VkLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRTZXNzaW9uKCk6IFByb21pc2U8U2Vzc2lvbkluZm9EYXRhPiB7XHJcbiAgICBsZXQgc2Vzc2lvbkluZm8gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2Uuc3RhcnRTZXNzaW9uKCkudG9Qcm9taXNlKCk7XHJcbiAgICBpZiAoc2Vzc2lvbkluZm8pIHtcclxuICAgICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEgPSBzZXNzaW9uSW5mbztcclxuICAgICAgdGhpcy50b2tlbiA9IHNlc3Npb25JbmZvLnNpZDtcclxuICAgICAgdGhpcy5zYXZlVG9rZW5Ub0xvY2FsU3RvcmFnZSgpO1xyXG4gICAgICB0aGlzLnNldEF1dGhlbnRpY2F0aW9uU3RhdHVzKCk7XHJcbiAgICAgIHRoaXMuc2V0VXBUb2tlbkZvclNlc3Npb25TZXJ2aWNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkluZm9EYXRhITtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTZXNzaW9uKCk6IFByb21pc2U8U2Vzc2lvbkluZm9EYXRhPiB7XHJcbiAgICBsZXQgc2Vzc2lvbkluZm8gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UuZ2V0U2Vzc2lvbigpLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKHNlc3Npb25JbmZvKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkluZm9EYXRhID0gc2Vzc2lvbkluZm87XHJcbiAgICAgIHRoaXMudG9rZW4gPSBzZXNzaW9uSW5mby5zaWQ7XHJcbiAgICAgIHRoaXMuc2F2ZVRva2VuVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgdGhpcy5zZXRBdXRoZW50aWNhdGlvblN0YXR1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YSE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFNlc3Npb24oKTogUHJvbWlzZTxTZXNzaW9uSW5mb0RhdGE+IHtcclxuICAgIGxldCByZWZyZXNoVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmVmcmVzaFRva2VuJyk7XHJcbiAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zdGFydFNlc3Npb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2Vzc2lvbkluZm8gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLnJlZnJlc2hTZXNzaW9uKHtcclxuICAgICAgICByZWZyZXNoVG9rZW4sXHJcbiAgICAgIH0pXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAuY2F0Y2goYXN5bmMgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGVycm9yLmVycm9yICYmXHJcbiAgICAgICAgICAoZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3IpLmNvZGUgJiZcclxuICAgICAgICAgIChlcnJvci5lcnJvciBhcyBBcGlFcnJvcikuY29kZSA9PT0gJ3Nlc3Npb24ucmVmcmVzaHRva2VuLmludmFsaWQnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHNlc3Npb25JbmZvKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkluZm9EYXRhID0gc2Vzc2lvbkluZm87XHJcbiAgICAgIHRoaXMudG9rZW4gPSBzZXNzaW9uSW5mby5zaWQ7XHJcbiAgICAgIHRoaXMuc2F2ZVRva2VuVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgdGhpcy5zZXRBdXRoZW50aWNhdGlvblN0YXR1cygpO1xyXG4gICAgICB0aGlzLnNldFVwVG9rZW5Gb3JTZXNzaW9uU2VydmljZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YSE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXV0aGVudGljYXRpb25Qcm92aWRlcnMoKTogUHJvbWlzZTxBcnJheTxBdXRoZW50aWNhdGlvblByb3ZpZGVyRGF0YT4+IHtcclxuICAgIGxldCBwcm92aWRlcnM6IEdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzUmVzcG9uc2UgfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzKClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIHRoaXMucHJvdmlkZXJzID0gcHJvdmlkZXJzPy5hdXRoZW50aWNhdGlvblByb3ZpZGVycztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldElzQXV0aGVudGljYXRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLmdldFNlc3Npb24oKTtcclxuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjbGVhckFuZFN0YXJ0TmV3U2Vzc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XHJcbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcclxuICAgIHRoaXMuaGVhZGVyUGFyYW1zID0gW107XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2UuZGVsZXRlKHRoaXMuY29va2llTmFtZSEpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XHJcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUxvY2FsZU5hbWUpICE9PSB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUxvY2FsZU5hbWUsIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmxvY2FsZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmxvY2FsZTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gU2Vzc2lvbkluZm9EYXRhIG9yIGxvY2FsZSBpcyB1bmRlZmluZWQuJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlTG9jYWxlKGxvY2FsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5zZXRMb2NhbGUobG9jYWxlKS50b1Byb21pc2UoKTtcclxuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpO1xyXG4gICAgICB0aGlzLmxvY2FsZUNoYW5nZWQubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./api";
5
+ import * as i2 from "./cookie-service/smart-cookie.service";
6
+ export class SmartSessionService {
7
+ constructor(apiService, cookieService) {
8
+ this.apiService = apiService;
9
+ this.cookieService = cookieService;
10
+ this.isAuthenticated = false;
11
+ this.authenticationStateChanged = new Subject();
12
+ this.headerParams = new Array();
13
+ this.headersUpdated = new Subject();
14
+ // Locale
15
+ this.localStorageLocaleName = 'locale';
16
+ this.localeChanged = new Subject();
17
+ this.sessionExpiracyChanged = new Subject();
18
+ }
19
+ get sessionInfoData() {
20
+ return this._sessionInfoData;
21
+ }
22
+ set sessionInfoData(sessionInfoData) {
23
+ let expiracyChanged = this.sessionInfoData?.expiration !== sessionInfoData?.expiration;
24
+ this._sessionInfoData = sessionInfoData;
25
+ if (expiracyChanged) {
26
+ this.sessionExpiracyChanged.next();
27
+ }
28
+ }
29
+ setSessionHandlerService(smartSessionHandlerService) {
30
+ this.sessionHandlerService = smartSessionHandlerService;
31
+ }
32
+ async handleSessionError(sessionError) {
33
+ if (this.sessionHandlerService) {
34
+ await this.sessionHandlerService.handleSessionError(sessionError);
35
+ }
36
+ throw new Error(`sessionHandlerService was not initialized. Error: ${sessionError.code}`);
37
+ }
38
+ addHeaderParam(headerParam) {
39
+ if (this.headerParams.find((h) => h.headerName === headerParam.headerName)) {
40
+ let index = this.headerParams.findIndex((h) => h.headerName === headerParam.headerName);
41
+ this.headerParams[index].value = headerParam.value;
42
+ }
43
+ else {
44
+ this.headerParams.push(headerParam);
45
+ }
46
+ this.headersUpdated.next();
47
+ }
48
+ setUpTokenForSessionService() {
49
+ this.addHeaderParam({
50
+ headerName: 'Authorization',
51
+ value: `Bearer ${this.token}`,
52
+ });
53
+ }
54
+ setUrl(url) {
55
+ this.basePath = url;
56
+ }
57
+ getBasePath() {
58
+ if (!this.basePath) {
59
+ throw new Error('BasePath has not been set in SmartSessionService!');
60
+ }
61
+ return this.basePath;
62
+ }
63
+ setCookieName(name) {
64
+ this.cookieName = name;
65
+ }
66
+ saveTokenToLocalStorage() {
67
+ if (this.sessionInfoData && this.cookieName) {
68
+ localStorage.setItem('token', this.sessionInfoData.sid);
69
+ if (this.sessionInfoData.refreshToken &&
70
+ this.sessionInfoData.refreshToken !== localStorage.getItem('refreshToken')) {
71
+ localStorage.setItem('refreshToken', this.sessionInfoData.refreshToken);
72
+ }
73
+ this.cookieService.set(this.cookieName, this.token);
74
+ }
75
+ }
76
+ setAuthenticationStatus() {
77
+ if (this.sessionInfoData && this.sessionInfoData.authentications) {
78
+ this.isAuthenticated = this.sessionInfoData.authentications.length > 0;
79
+ }
80
+ this.authenticationStateChanged.next(this.isAuthenticated);
81
+ }
82
+ checkStatements() {
83
+ if (!this.basePath) {
84
+ throw new Error('The url of the backend api has not been set!');
85
+ }
86
+ else if (!this.cookieName) {
87
+ throw new Error('The name of the cookie required by the backend has not been set!');
88
+ }
89
+ }
90
+ async initialize() {
91
+ this.checkStatements();
92
+ let tokenFromLocalStorage = localStorage.getItem('token');
93
+ let tokenFromCookies = this.cookieService.get(this.cookieName);
94
+ if (tokenFromLocalStorage && tokenFromCookies && tokenFromLocalStorage === tokenFromCookies) {
95
+ this.token = tokenFromLocalStorage;
96
+ this.setUpTokenForSessionService();
97
+ try {
98
+ await this.getSession();
99
+ }
100
+ catch (err) {
101
+ await this.startSession();
102
+ }
103
+ }
104
+ else {
105
+ await this.clearAndStartNewSession();
106
+ }
107
+ if (this.sessionInfoData && this.sessionInfoData.locale) {
108
+ localStorage.setItem(this.localStorageLocaleName, this.sessionInfoData.locale);
109
+ this.localeChanged.next();
110
+ }
111
+ }
112
+ async startSession() {
113
+ let sessionInfo = await this.apiService.startSession().toPromise();
114
+ if (sessionInfo) {
115
+ this.sessionInfoData = sessionInfo;
116
+ this.token = sessionInfo.sid;
117
+ this.saveTokenToLocalStorage();
118
+ this.setAuthenticationStatus();
119
+ this.setUpTokenForSessionService();
120
+ }
121
+ return this.sessionInfoData;
122
+ }
123
+ async getSession() {
124
+ let sessionInfo = await this.apiService.getSession().toPromise();
125
+ if (sessionInfo) {
126
+ this.sessionInfoData = sessionInfo;
127
+ this.token = sessionInfo.sid;
128
+ this.saveTokenToLocalStorage();
129
+ this.setAuthenticationStatus();
130
+ }
131
+ return this.sessionInfoData;
132
+ }
133
+ async refreshSession() {
134
+ let refreshToken = localStorage.getItem('refreshToken');
135
+ if (!refreshToken) {
136
+ return await this.startSession();
137
+ }
138
+ let sessionInfo = await this.apiService
139
+ .refreshSession({
140
+ refreshToken,
141
+ })
142
+ .toPromise()
143
+ .catch(async (error) => {
144
+ if (error.error &&
145
+ error.error.code &&
146
+ error.error.code === 'session.refreshtoken.invalid') {
147
+ await this.startSession();
148
+ }
149
+ });
150
+ if (sessionInfo) {
151
+ this.sessionInfoData = sessionInfo;
152
+ this.token = sessionInfo.sid;
153
+ this.saveTokenToLocalStorage();
154
+ this.setAuthenticationStatus();
155
+ this.setUpTokenForSessionService();
156
+ }
157
+ return this.sessionInfoData;
158
+ }
159
+ async getAuthenticationProviders() {
160
+ let providers = await this.apiService
161
+ .getAuthenticationProviders()
162
+ .toPromise();
163
+ this.providers = providers?.authenticationProviders;
164
+ return this.providers;
165
+ }
166
+ async getIsAuthenticated() {
167
+ if (this.sessionInfoData) {
168
+ return this.isAuthenticated;
169
+ }
170
+ await this.getSession();
171
+ return this.isAuthenticated;
172
+ }
173
+ async clearAndStartNewSession() {
174
+ sessionStorage.clear();
175
+ localStorage.clear();
176
+ this.headerParams = [];
177
+ this.cookieService.delete(this.cookieName);
178
+ await this.startSession();
179
+ }
180
+ getLocale() {
181
+ if (this.sessionInfoData && this.sessionInfoData.locale) {
182
+ if (localStorage.getItem(this.localStorageLocaleName) !== this.sessionInfoData.locale) {
183
+ localStorage.setItem(this.localStorageLocaleName, this.sessionInfoData.locale);
184
+ }
185
+ return this.sessionInfoData.locale;
186
+ }
187
+ throw new Error('There is no SessionInfoData or locale is undefined.');
188
+ }
189
+ async changeLocale(locale) {
190
+ this.sessionInfoData = await this.apiService.setLocale(locale).toPromise();
191
+ if (this.sessionInfoData && this.sessionInfoData.locale) {
192
+ localStorage.setItem(this.localStorageLocaleName, this.sessionInfoData.locale);
193
+ this.localeChanged.next();
194
+ }
195
+ }
196
+ }
197
+ SmartSessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionService, deps: [{ token: i1.SessionService }, { token: i2.SmartCookieService }], target: i0.ɵɵFactoryTarget.Injectable });
198
+ SmartSessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionService, providedIn: 'root' });
199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionService, decorators: [{
200
+ type: Injectable,
201
+ args: [{
202
+ providedIn: 'root',
203
+ }]
204
+ }], ctorParameters: function () { return [{ type: i1.SessionService }, { type: i2.SmartCookieService }]; } });
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc2Vzc2lvbi9zbWFydC1zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBa0IvQixNQUFNLE9BQU8sbUJBQW1CO0lBbUM5QixZQUFvQixVQUEwQixFQUFVLGFBQWlDO1FBQXJFLGVBQVUsR0FBVixVQUFVLENBQWdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBZmxGLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLCtCQUEwQixHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTdELGlCQUFZLEdBQXVCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDL0MsbUJBQWMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVyRCxTQUFTO1FBQ0QsMkJBQXNCLEdBQVcsUUFBUSxDQUFDO1FBQzNDLGtCQUFhLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFN0MsMkJBQXNCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7SUFJK0IsQ0FBQztJQTlCN0YsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFZLGVBQWUsQ0FBQyxlQUE0QztRQUN0RSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsS0FBSyxlQUFlLEVBQUUsVUFBVSxDQUFDO1FBRXZGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFFeEMsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFD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RXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEFwaUVycm9yLFxuICBBdXRoZW50aWNhdGlvblByb3ZpZGVyRGF0YSxcbiAgR2V0QXV0aGVudGljYXRpb25Qcm92aWRlcnNSZXNwb25zZSxcbiAgU2Vzc2lvbkluZm9EYXRhLFxuICBTZXNzaW9uU2VydmljZSxcbn0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgU21hcnRDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi9jb29raWUtc2VydmljZS9zbWFydC1jb29raWUuc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uRXJyb3IsIFNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC1zZXNzaW9uLWhhbmRsZXIuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyUGFyYW0ge1xuICBoZWFkZXJOYW1lOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU21hcnRTZXNzaW9uU2VydmljZSB7XG4gIHByaXZhdGUgYmFzZVBhdGg/OiBzdHJpbmc7XG4gIHByaXZhdGUgdG9rZW4/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JbmZvRGF0YT86IFNlc3Npb25JbmZvRGF0YTtcblxuICBwdWJsaWMgZ2V0IHNlc3Npb25JbmZvRGF0YSgpOiBTZXNzaW9uSW5mb0RhdGEgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSW5mb0RhdGE7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgc2Vzc2lvbkluZm9EYXRhKHNlc3Npb25JbmZvRGF0YTogU2Vzc2lvbkluZm9EYXRhIHwgdW5kZWZpbmVkKSB7XG4gICAgbGV0IGV4cGlyYWN5Q2hhbmdlZCA9IHRoaXMuc2Vzc2lvbkluZm9EYXRhPy5leHBpcmF0aW9uICE9PSBzZXNzaW9uSW5mb0RhdGE/LmV4cGlyYXRpb247XG5cbiAgICB0aGlzLl9zZXNzaW9uSW5mb0RhdGEgPSBzZXNzaW9uSW5mb0RhdGE7XG5cbiAgICBpZiAoZXhwaXJhY3lDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnNlc3Npb25FeHBpcmFjeUNoYW5nZWQubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvdmlkZXJzPzogQXJyYXk8QXV0aGVudGljYXRpb25Qcm92aWRlckRhdGE+O1xuICBwcml2YXRlIGNvb2tpZU5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgYXV0aGVudGljYXRpb25TdGF0ZUNoYW5nZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBoZWFkZXJQYXJhbXM6IEFycmF5PEhlYWRlclBhcmFtPiA9IG5ldyBBcnJheSgpO1xuICBwdWJsaWMgaGVhZGVyc1VwZGF0ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8vIExvY2FsZVxuICBwcml2YXRlIGxvY2FsU3RvcmFnZUxvY2FsZU5hbWU6IHN0cmluZyA9ICdsb2NhbGUnO1xuICBwdWJsaWMgbG9jYWxlQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIHNlc3Npb25FeHBpcmFjeUNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlPzogU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlTZXJ2aWNlOiBTZXNzaW9uU2VydmljZSwgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBTbWFydENvb2tpZVNlcnZpY2UpIHt9XG5cbiAgcHVibGljIHNldFNlc3Npb25IYW5kbGVyU2VydmljZShzbWFydFNlc3Npb25IYW5kbGVyU2VydmljZTogU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb25IYW5kbGVyU2VydmljZSA9IHNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZVNlc3Npb25FcnJvcihzZXNzaW9uRXJyb3I6IFNlc3Npb25FcnJvcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnNlc3Npb25IYW5kbGVyU2VydmljZSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXNzaW9uSGFuZGxlclNlcnZpY2UuaGFuZGxlU2Vzc2lvbkVycm9yKHNlc3Npb25FcnJvcik7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlIHdhcyBub3QgaW5pdGlhbGl6ZWQuIEVycm9yOiAke3Nlc3Npb25FcnJvci5jb2RlfWApO1xuICB9XG5cbiAgcHVibGljIGFkZEhlYWRlclBhcmFtKGhlYWRlclBhcmFtOiBIZWFkZXJQYXJhbSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhlYWRlclBhcmFtcy5maW5kKChoOiBIZWFkZXJQYXJhbSkgPT4gaC5oZWFkZXJOYW1lID09PSBoZWFkZXJQYXJhbS5oZWFkZXJOYW1lKSkge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5oZWFkZXJQYXJhbXMuZmluZEluZGV4KFxuICAgICAgICAoaDogSGVhZGVyUGFyYW0pID0+IGguaGVhZGVyTmFtZSA9PT0gaGVhZGVyUGFyYW0uaGVhZGVyTmFtZVxuICAgICAgKTtcbiAgICAgIHRoaXMuaGVhZGVyUGFyYW1zW2luZGV4IV0udmFsdWUgPSBoZWFkZXJQYXJhbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJQYXJhbXMucHVzaChoZWFkZXJQYXJhbSk7XG4gICAgfVxuICAgIHRoaXMuaGVhZGVyc1VwZGF0ZWQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRVcFRva2VuRm9yU2Vzc2lvblNlcnZpY2UoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRIZWFkZXJQYXJhbSh7XG4gICAgICBoZWFkZXJOYW1lOiAnQXV0aG9yaXphdGlvbicsXG4gICAgICB2YWx1ZTogYEJlYXJlciAke3RoaXMudG9rZW4hfWAsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VXJsKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5iYXNlUGF0aCA9IHVybDtcbiAgfVxuICBwdWJsaWMgZ2V0QmFzZVBhdGgoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuYmFzZVBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmFzZVBhdGggaGFzIG5vdCBiZWVuIHNldCBpbiBTbWFydFNlc3Npb25TZXJ2aWNlIScpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb29raWVOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29va2llTmFtZSA9IG5hbWU7XG4gIH1cblxuICBwcml2YXRlIHNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLmNvb2tpZU5hbWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2tlbicsIHRoaXMuc2Vzc2lvbkluZm9EYXRhLnNpZCk7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2Vzc2lvbkluZm9EYXRhLnJlZnJlc2hUb2tlbiAmJlxuICAgICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YS5yZWZyZXNoVG9rZW4gIT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZWZyZXNoVG9rZW4nKVxuICAgICAgKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdyZWZyZXNoVG9rZW4nLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5yZWZyZXNoVG9rZW4pO1xuICAgICAgfVxuICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCh0aGlzLmNvb2tpZU5hbWUsIHRoaXMudG9rZW4hKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEF1dGhlbnRpY2F0aW9uU3RhdHVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLnNlc3Npb25JbmZvRGF0YS5hdXRoZW50aWNhdGlvbnMpIHtcbiAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5zZXNzaW9uSW5mb0RhdGEuYXV0aGVudGljYXRpb25zLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIHRoaXMuYXV0aGVudGljYXRpb25TdGF0ZUNoYW5nZWQubmV4dCh0aGlzLmlzQXV0aGVudGljYXRlZCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrU3RhdGVtZW50cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYmFzZVBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHVybCBvZiB0aGUgYmFja2VuZCBhcGkgaGFzIG5vdCBiZWVuIHNldCEnKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNvb2tpZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5hbWUgb2YgdGhlIGNvb2tpZSByZXF1aXJlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0IScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2hlY2tTdGF0ZW1lbnRzKCk7XG5cbiAgICBsZXQgdG9rZW5Gcm9tTG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XG4gICAgbGV0IHRva2VuRnJvbUNvb2tpZXMgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KHRoaXMuY29va2llTmFtZSEpO1xuXG4gICAgaWYgKHRva2VuRnJvbUxvY2FsU3RvcmFnZSAmJiB0b2tlbkZyb21Db29raWVzICYmIHRva2VuRnJvbUxvY2FsU3RvcmFnZSA9PT0gdG9rZW5Gcm9tQ29va2llcykge1xuICAgICAgdGhpcy50b2tlbiA9IHRva2VuRnJvbUxvY2FsU3RvcmFnZTtcbiAgICAgIHRoaXMuc2V0VXBUb2tlbkZvclNlc3Npb25TZXJ2aWNlKCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmdldFNlc3Npb24oKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmNsZWFyQW5kU3RhcnROZXdTZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTG9jYWxlTmFtZSwgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKTtcbiAgICAgIHRoaXMubG9jYWxlQ2hhbmdlZC5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydFNlc3Npb24oKTogUHJvbWlzZTxTZXNzaW9uSW5mb0RhdGE+IHtcbiAgICBsZXQgc2Vzc2lvbkluZm8gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2Uuc3RhcnRTZXNzaW9uKCkudG9Qcm9taXNlKCk7XG4gICAgaWYgKHNlc3Npb25JbmZvKSB7XG4gICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvO1xuICAgICAgdGhpcy50b2tlbiA9IHNlc3Npb25JbmZvLnNpZDtcbiAgICAgIHRoaXMuc2F2ZVRva2VuVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgIHRoaXMuc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTtcbiAgICAgIHRoaXMuc2V0VXBUb2tlbkZvclNlc3Npb25TZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkluZm9EYXRhITtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTZXNzaW9uKCk6IFByb21pc2U8U2Vzc2lvbkluZm9EYXRhPiB7XG4gICAgbGV0IHNlc3Npb25JbmZvID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldFNlc3Npb24oKS50b1Byb21pc2UoKTtcbiAgICBpZiAoc2Vzc2lvbkluZm8pIHtcbiAgICAgIHRoaXMuc2Vzc2lvbkluZm9EYXRhID0gc2Vzc2lvbkluZm87XG4gICAgICB0aGlzLnRva2VuID0gc2Vzc2lvbkluZm8uc2lkO1xuICAgICAgdGhpcy5zYXZlVG9rZW5Ub0xvY2FsU3RvcmFnZSgpO1xuICAgICAgdGhpcy5zZXRBdXRoZW50aWNhdGlvblN0YXR1cygpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YSE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFNlc3Npb24oKTogUHJvbWlzZTxTZXNzaW9uSW5mb0RhdGE+IHtcbiAgICBsZXQgcmVmcmVzaFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZnJlc2hUb2tlbicpO1xuICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zdGFydFNlc3Npb24oKTtcbiAgICB9XG5cbiAgICBsZXQgc2Vzc2lvbkluZm8gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5yZWZyZXNoU2Vzc2lvbih7XG4gICAgICAgIHJlZnJlc2hUb2tlbixcbiAgICAgIH0pXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC5jYXRjaChhc3luYyAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlcnJvci5lcnJvciAmJlxuICAgICAgICAgIChlcnJvci5lcnJvciBhcyBBcGlFcnJvcikuY29kZSAmJlxuICAgICAgICAgIChlcnJvci5lcnJvciBhcyBBcGlFcnJvcikuY29kZSA9PT0gJ3Nlc3Npb24ucmVmcmVzaHRva2VuLmludmFsaWQnXG4gICAgICAgICkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKHNlc3Npb25JbmZvKSB7XG4gICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvO1xuICAgICAgdGhpcy50b2tlbiA9IHNlc3Npb25JbmZvLnNpZDtcbiAgICAgIHRoaXMuc2F2ZVRva2VuVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgIHRoaXMuc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTtcbiAgICAgIHRoaXMuc2V0VXBUb2tlbkZvclNlc3Npb25TZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkluZm9EYXRhITtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBdXRoZW50aWNhdGlvblByb3ZpZGVycygpOiBQcm9taXNlPEFycmF5PEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJEYXRhPj4ge1xuICAgIGxldCBwcm92aWRlcnM6IEdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzUmVzcG9uc2UgfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRBdXRoZW50aWNhdGlvblByb3ZpZGVycygpXG4gICAgICAudG9Qcm9taXNlKCk7XG5cbiAgICB0aGlzLnByb3ZpZGVycyA9IHByb3ZpZGVycz8uYXV0aGVudGljYXRpb25Qcm92aWRlcnM7XG5cbiAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMhO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldElzQXV0aGVudGljYXRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZDtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5nZXRTZXNzaW9uKCk7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNsZWFyQW5kU3RhcnROZXdTZXNzaW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XG4gICAgdGhpcy5oZWFkZXJQYXJhbXMgPSBbXTtcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2UuZGVsZXRlKHRoaXMuY29va2llTmFtZSEpO1xuXG4gICAgYXdhaXQgdGhpcy5zdGFydFNlc3Npb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lKSAhPT0gdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTG9jYWxlTmFtZSwgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGU7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gU2Vzc2lvbkluZm9EYXRhIG9yIGxvY2FsZSBpcyB1bmRlZmluZWQuJyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlTG9jYWxlKGxvY2FsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2Uuc2V0TG9jYWxlKGxvY2FsZSkudG9Qcm9taXNlKCk7XG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZm9EYXRhICYmIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmxvY2FsZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpO1xuICAgICAgdGhpcy5sb2NhbGVDaGFuZ2VkLm5leHQoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,35 +1,35 @@
1
- import { Component } from "@angular/core";
2
- import { Subject, takeUntil } from "rxjs";
3
- import { SmartSessionTimerService } from "./smart-session-timer.service";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./smart-session-timer.service";
6
- import * as i2 from "@angular/common";
7
- export class SmartSessionTimerComponent {
8
- constructor(service) {
9
- this.service = service;
10
- this._destroy$ = new Subject();
11
- }
12
- ngOnInit() {
13
- this.service.startTimer();
14
- this.timeInSeconds = this.service.timeLeftInSeconds;
15
- this.service.timeChanged.pipe(takeUntil(this._destroy$)).subscribe(() => {
16
- this.timeInSeconds = this.service.timeLeftInSeconds;
17
- });
18
- }
19
- ngOnDestroy() {
20
- this._destroy$.next();
21
- this._destroy$.complete();
22
- }
23
- formatTime(seconds) {
24
- let minutes = Math.floor(seconds / 60);
25
- let remainingSeconds = seconds % 60;
26
- return `${minutes}:${remainingSeconds < 10 ? "0" : ""}${remainingSeconds}`;
27
- }
28
- }
29
- SmartSessionTimerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionTimerComponent, deps: [{ token: i1.SmartSessionTimerService }], target: i0.ɵɵFactoryTarget.Component });
30
- SmartSessionTimerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SmartSessionTimerComponent, selector: "smart-session-timer", providers: [SmartSessionTimerService], ngImport: i0, template: "<div class=\"smart-session-timer-container\">\r\n <span class=\"smart-session-timer\" *ngIf=\"timeInSeconds\">\r\n {{ formatTime(timeInSeconds!) }}\r\n </span>\r\n</div>\r\n", styles: [""], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionTimerComponent, decorators: [{
32
- type: Component,
33
- args: [{ selector: "smart-session-timer", providers: [SmartSessionTimerService], template: "<div class=\"smart-session-timer-container\">\r\n <span class=\"smart-session-timer\" *ngIf=\"timeInSeconds\">\r\n {{ formatTime(timeInSeconds!) }}\r\n </span>\r\n</div>\r\n", styles: [""] }]
34
- }], ctorParameters: function () { return [{ type: i1.SmartSessionTimerService }]; } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi10aW1lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LXRpbWVyL3NtYXJ0LXNlc3Npb24tdGltZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc2Vzc2lvbi9zbWFydC10aW1lci9zbWFydC1zZXNzaW9uLXRpbWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBUXpFLE1BQU0sT0FBTywwQkFBMEI7SUFLckMsWUFBbUIsT0FBaUM7UUFBakMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFKNUMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBSU0sQ0FBQztJQUV4RCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFFcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZTtRQUN4QixJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLGdCQUFnQixHQUFXLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDNUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDN0UsQ0FBQzs7d0hBekJVLDBCQUEwQjs0R0FBMUIsMEJBQTBCLDhDQUYxQixDQUFDLHdCQUF3QixDQUFDLDBCQ1R2Qyw0TEFLQTs0RkRNYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0UscUJBQXFCLGFBR3BCLENBQUMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNtYXJ0U2Vzc2lvblRpbWVyU2VydmljZSB9IGZyb20gXCIuL3NtYXJ0LXNlc3Npb24tdGltZXIuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwic21hcnQtc2Vzc2lvbi10aW1lclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc21hcnQtc2Vzc2lvbi10aW1lci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9zbWFydC1zZXNzaW9uLXRpbWVyLmNvbXBvbmVudC5jc3NcIl0sXHJcbiAgcHJvdmlkZXJzOiBbU21hcnRTZXNzaW9uVGltZXJTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0U2Vzc2lvblRpbWVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdGltZUluU2Vjb25kcz86IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHNlcnZpY2U6IFNtYXJ0U2Vzc2lvblRpbWVyU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlcnZpY2Uuc3RhcnRUaW1lcigpO1xyXG4gICAgdGhpcy50aW1lSW5TZWNvbmRzID0gdGhpcy5zZXJ2aWNlLnRpbWVMZWZ0SW5TZWNvbmRzO1xyXG5cclxuICAgIHRoaXMuc2VydmljZS50aW1lQ2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMudGltZUluU2Vjb25kcyA9IHRoaXMuc2VydmljZS50aW1lTGVmdEluU2Vjb25kcztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGltZShzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1pbnV0ZXM6IG51bWJlciA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTtcclxuICAgIGxldCByZW1haW5pbmdTZWNvbmRzOiBudW1iZXIgPSBzZWNvbmRzICUgNjA7XHJcbiAgICByZXR1cm4gYCR7bWludXRlc306JHtyZW1haW5pbmdTZWNvbmRzIDwgMTAgPyBcIjBcIiA6IFwiXCJ9JHtyZW1haW5pbmdTZWNvbmRzfWA7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWFydC1zZXNzaW9uLXRpbWVyLWNvbnRhaW5lclwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzbWFydC1zZXNzaW9uLXRpbWVyXCIgKm5nSWY9XCJ0aW1lSW5TZWNvbmRzXCI+XHJcbiAgICAgICAge3sgZm9ybWF0VGltZSh0aW1lSW5TZWNvbmRzISkgfX1cclxuICAgIDwvc3Bhbj5cclxuPC9kaXY+XHJcbiJdfQ==
1
+ import { Component } from "@angular/core";
2
+ import { Subject, takeUntil } from "rxjs";
3
+ import { SmartSessionTimerService } from "./smart-session-timer.service";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./smart-session-timer.service";
6
+ import * as i2 from "@angular/common";
7
+ export class SmartSessionTimerComponent {
8
+ constructor(service) {
9
+ this.service = service;
10
+ this._destroy$ = new Subject();
11
+ }
12
+ ngOnInit() {
13
+ this.service.startTimer();
14
+ this.timeInSeconds = this.service.timeLeftInSeconds;
15
+ this.service.timeChanged.pipe(takeUntil(this._destroy$)).subscribe(() => {
16
+ this.timeInSeconds = this.service.timeLeftInSeconds;
17
+ });
18
+ }
19
+ ngOnDestroy() {
20
+ this._destroy$.next();
21
+ this._destroy$.complete();
22
+ }
23
+ formatTime(seconds) {
24
+ let minutes = Math.floor(seconds / 60);
25
+ let remainingSeconds = seconds % 60;
26
+ return `${minutes}:${remainingSeconds < 10 ? "0" : ""}${remainingSeconds}`;
27
+ }
28
+ }
29
+ SmartSessionTimerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionTimerComponent, deps: [{ token: i1.SmartSessionTimerService }], target: i0.ɵɵFactoryTarget.Component });
30
+ SmartSessionTimerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SmartSessionTimerComponent, selector: "smart-session-timer", providers: [SmartSessionTimerService], ngImport: i0, template: "<div class=\"smart-session-timer-container\">\n <span class=\"smart-session-timer\" *ngIf=\"timeInSeconds\">\n {{ formatTime(timeInSeconds!) }}\n </span>\n</div>\n", styles: [""], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionTimerComponent, decorators: [{
32
+ type: Component,
33
+ args: [{ selector: "smart-session-timer", providers: [SmartSessionTimerService], template: "<div class=\"smart-session-timer-container\">\n <span class=\"smart-session-timer\" *ngIf=\"timeInSeconds\">\n {{ formatTime(timeInSeconds!) }}\n </span>\n</div>\n", styles: [""] }]
34
+ }], ctorParameters: function () { return [{ type: i1.SmartSessionTimerService }]; } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi10aW1lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LXRpbWVyL3NtYXJ0LXNlc3Npb24tdGltZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc2Vzc2lvbi9zbWFydC10aW1lci9zbWFydC1zZXNzaW9uLXRpbWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBUXpFLE1BQU0sT0FBTywwQkFBMEI7SUFLckMsWUFBbUIsT0FBaUM7UUFBakMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFKNUMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBSU0sQ0FBQztJQUV4RCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFFcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZTtRQUN4QixJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLGdCQUFnQixHQUFXLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDNUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDN0UsQ0FBQzs7d0hBekJVLDBCQUEwQjs0R0FBMUIsMEJBQTBCLDhDQUYxQixDQUFDLHdCQUF3QixDQUFDLDBCQ1R2QyxrTEFLQTs0RkRNYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0UscUJBQXFCLGFBR3BCLENBQUMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFNtYXJ0U2Vzc2lvblRpbWVyU2VydmljZSB9IGZyb20gXCIuL3NtYXJ0LXNlc3Npb24tdGltZXIuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic21hcnQtc2Vzc2lvbi10aW1lclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3NtYXJ0LXNlc3Npb24tdGltZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3NtYXJ0LXNlc3Npb24tdGltZXIuY29tcG9uZW50LmNzc1wiXSxcbiAgcHJvdmlkZXJzOiBbU21hcnRTZXNzaW9uVGltZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgU21hcnRTZXNzaW9uVGltZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICB0aW1lSW5TZWNvbmRzPzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzZXJ2aWNlOiBTbWFydFNlc3Npb25UaW1lclNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXJ2aWNlLnN0YXJ0VGltZXIoKTtcbiAgICB0aGlzLnRpbWVJblNlY29uZHMgPSB0aGlzLnNlcnZpY2UudGltZUxlZnRJblNlY29uZHM7XG5cbiAgICB0aGlzLnNlcnZpY2UudGltZUNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy50aW1lSW5TZWNvbmRzID0gdGhpcy5zZXJ2aWNlLnRpbWVMZWZ0SW5TZWNvbmRzO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBmb3JtYXRUaW1lKHNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IG1pbnV0ZXM6IG51bWJlciA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICBsZXQgcmVtYWluaW5nU2Vjb25kczogbnVtYmVyID0gc2Vjb25kcyAlIDYwO1xuICAgIHJldHVybiBgJHttaW51dGVzfToke3JlbWFpbmluZ1NlY29uZHMgPCAxMCA/IFwiMFwiIDogXCJcIn0ke3JlbWFpbmluZ1NlY29uZHN9YDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNtYXJ0LXNlc3Npb24tdGltZXItY29udGFpbmVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJzbWFydC1zZXNzaW9uLXRpbWVyXCIgKm5nSWY9XCJ0aW1lSW5TZWNvbmRzXCI+XG4gICAgICAgIHt7IGZvcm1hdFRpbWUodGltZUluU2Vjb25kcyEpIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=