@lifeready/core 1.0.13 → 1.0.15

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 (219) hide show
  1. package/README.md +62 -62
  2. package/bundles/lifeready-core.umd.js +14315 -14315
  3. package/bundles/lifeready-core.umd.js.map +1 -1
  4. package/bundles/lifeready-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/_common/ast.js +40 -40
  6. package/esm2015/lib/_common/deferred-promise.js +24 -24
  7. package/esm2015/lib/_common/exceptions.js +157 -157
  8. package/esm2015/lib/_common/queries.gql.js +190 -190
  9. package/esm2015/lib/_common/run-outside-angular.js +79 -79
  10. package/esm2015/lib/_common/types.js +1 -1
  11. package/esm2015/lib/_common/utils.js +52 -52
  12. package/esm2015/lib/api/contact-card.gql.js +79 -79
  13. package/esm2015/lib/api/contact-card.service.js +154 -154
  14. package/esm2015/lib/api/contact-card2.gql.js +60 -60
  15. package/esm2015/lib/api/contact-card2.service.js +103 -103
  16. package/esm2015/lib/api/file.service.js +74 -74
  17. package/esm2015/lib/api/key-exchange.gql.js +188 -188
  18. package/esm2015/lib/api/key-exchange.service.js +442 -442
  19. package/esm2015/lib/api/key-exchange.types.js +18 -18
  20. package/esm2015/lib/api/key-exchange2.gql.js +171 -171
  21. package/esm2015/lib/api/key-exchange2.service.js +479 -479
  22. package/esm2015/lib/api/lock.gql.js +40 -40
  23. package/esm2015/lib/api/lock.service.js +64 -64
  24. package/esm2015/lib/api/lr-apollo.service.js +46 -46
  25. package/esm2015/lib/api/lr-graphql/index.js +6 -6
  26. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
  27. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
  28. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
  29. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
  30. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
  31. package/esm2015/lib/api/message.service.js +138 -138
  32. package/esm2015/lib/api/persist.service.js +181 -181
  33. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
  34. package/esm2015/lib/api/query-processor/index.js +3 -3
  35. package/esm2015/lib/api/query-processor/query-processor.service.js +262 -262
  36. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
  37. package/esm2015/lib/api/shared-contact-card.service.js +119 -119
  38. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
  39. package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
  40. package/esm2015/lib/api/time.service.js +146 -146
  41. package/esm2015/lib/api/types/graphql.types.js +7 -7
  42. package/esm2015/lib/api/types/index.js +3 -3
  43. package/esm2015/lib/api/types/lr-graphql.types.js +101 -101
  44. package/esm2015/lib/auth/auth.config.js +57 -57
  45. package/esm2015/lib/auth/auth.gql.js +48 -48
  46. package/esm2015/lib/auth/auth.types.js +27 -27
  47. package/esm2015/lib/auth/idle.service.js +168 -168
  48. package/esm2015/lib/auth/idle.types.js +7 -7
  49. package/esm2015/lib/auth/lbop.service.js +355 -355
  50. package/esm2015/lib/auth/life-ready-auth.service.js +488 -488
  51. package/esm2015/lib/auth/password.service.js +320 -320
  52. package/esm2015/lib/auth/register.service.js +172 -172
  53. package/esm2015/lib/auth/two-factor.service.js +74 -74
  54. package/esm2015/lib/category/category-meta.service.js +99 -99
  55. package/esm2015/lib/category/category.gql.js +406 -406
  56. package/esm2015/lib/category/category.service.js +390 -390
  57. package/esm2015/lib/category/category.types.js +29 -29
  58. package/esm2015/lib/cryptography/cryptography.types.js +11 -11
  59. package/esm2015/lib/cryptography/encryption.service.js +189 -189
  60. package/esm2015/lib/cryptography/key-factory.service.js +237 -237
  61. package/esm2015/lib/cryptography/key-graph.service.js +299 -299
  62. package/esm2015/lib/cryptography/key-meta.service.js +200 -200
  63. package/esm2015/lib/cryptography/key.service.js +124 -124
  64. package/esm2015/lib/cryptography/slip39.service.js +169 -169
  65. package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
  66. package/esm2015/lib/items2/item2.gql.js +139 -139
  67. package/esm2015/lib/items2/item2.service.js +498 -498
  68. package/esm2015/lib/items2/item2.types.js +1 -1
  69. package/esm2015/lib/life-ready.config.js +84 -84
  70. package/esm2015/lib/life-ready.module.js +74 -74
  71. package/esm2015/lib/notification/notification.gql.js +43 -43
  72. package/esm2015/lib/notification/notification.service.js +118 -118
  73. package/esm2015/lib/plan/plan.gql.js +123 -123
  74. package/esm2015/lib/plan/plan.service.js +149 -149
  75. package/esm2015/lib/plan/plan.types.js +11 -11
  76. package/esm2015/lib/record/record-attachment.service.js +101 -101
  77. package/esm2015/lib/record/record.gql.js +179 -179
  78. package/esm2015/lib/record/record.service.js +206 -206
  79. package/esm2015/lib/record/record.types.js +15 -15
  80. package/esm2015/lib/record-type/record-type.service.js +75 -75
  81. package/esm2015/lib/record-type/record-type.types.js +28 -28
  82. package/esm2015/lib/scenario/scenario.constants.js +2 -2
  83. package/esm2015/lib/scenario/scenario.controller.js +34 -34
  84. package/esm2015/lib/scenario/scenario.gql.js +72 -72
  85. package/esm2015/lib/scenario/scenario.gql.private.js +198 -198
  86. package/esm2015/lib/scenario/scenario.service.js +538 -538
  87. package/esm2015/lib/scenario/scenario.types.js +1 -1
  88. package/esm2015/lib/trusted-parties/tp-assembly.gql.private.js +22 -22
  89. package/esm2015/lib/trusted-parties/tp-assembly.js +362 -362
  90. package/esm2015/lib/trusted-parties/tp-assembly.types.js +1 -1
  91. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +113 -113
  92. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
  93. package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
  94. package/esm2015/lib/trusted-parties/tp-password-reset.controller.js +34 -34
  95. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +236 -236
  96. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +95 -95
  97. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
  98. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
  99. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
  100. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
  101. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
  102. package/esm2015/lib/users/profile-details.service.js +214 -214
  103. package/esm2015/lib/users/profile.gql.js +97 -97
  104. package/esm2015/lib/users/profile.service.js +169 -169
  105. package/esm2015/lib/users/profile.types.js +34 -34
  106. package/esm2015/lib/users/user.gql.js +60 -60
  107. package/esm2015/lib/users/user.service.js +79 -79
  108. package/esm2015/lib/users/user.types.js +5 -5
  109. package/esm2015/lifeready-core.js +13 -13
  110. package/esm2015/public-api.js +71 -71
  111. package/fesm2015/lifeready-core.js +12258 -12258
  112. package/fesm2015/lifeready-core.js.map +1 -1
  113. package/lib/_common/ast.d.ts +11 -11
  114. package/lib/_common/deferred-promise.d.ts +12 -12
  115. package/lib/_common/exceptions.d.ts +109 -109
  116. package/lib/_common/queries.gql.d.ts +10 -10
  117. package/lib/_common/run-outside-angular.d.ts +14 -14
  118. package/lib/_common/types.d.ts +10 -10
  119. package/lib/_common/utils.d.ts +9 -9
  120. package/lib/api/contact-card.gql.d.ts +7 -7
  121. package/lib/api/contact-card.service.d.ts +52 -52
  122. package/lib/api/contact-card2.gql.d.ts +34 -34
  123. package/lib/api/contact-card2.service.d.ts +49 -49
  124. package/lib/api/file.service.d.ts +18 -18
  125. package/lib/api/key-exchange.gql.d.ts +9 -9
  126. package/lib/api/key-exchange.service.d.ts +39 -39
  127. package/lib/api/key-exchange.types.d.ts +196 -196
  128. package/lib/api/key-exchange2.gql.d.ts +125 -125
  129. package/lib/api/key-exchange2.service.d.ts +187 -187
  130. package/lib/api/lock.gql.d.ts +27 -27
  131. package/lib/api/lock.service.d.ts +34 -34
  132. package/lib/api/lr-apollo.service.d.ts +15 -15
  133. package/lib/api/lr-graphql/index.d.ts +5 -5
  134. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
  135. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +28 -28
  136. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
  137. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
  138. package/lib/api/lr-graphql/lr.service.d.ts +9 -9
  139. package/lib/api/message.service.d.ts +58 -58
  140. package/lib/api/persist.service.d.ts +31 -31
  141. package/lib/api/query-processor/common-processors.service.d.ts +36 -36
  142. package/lib/api/query-processor/index.d.ts +2 -2
  143. package/lib/api/query-processor/query-processor.service.d.ts +18 -18
  144. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
  145. package/lib/api/shared-contact-card.service.d.ts +33 -33
  146. package/lib/api/shared-contact-card2.gql.d.ts +36 -36
  147. package/lib/api/shared-contact-card2.service.d.ts +45 -45
  148. package/lib/api/time.service.d.ts +16 -16
  149. package/lib/api/types/graphql.types.d.ts +29 -29
  150. package/lib/api/types/index.d.ts +2 -2
  151. package/lib/api/types/lr-graphql.types.d.ts +502 -502
  152. package/lib/auth/auth.config.d.ts +5 -5
  153. package/lib/auth/auth.gql.d.ts +15 -15
  154. package/lib/auth/auth.types.d.ts +66 -66
  155. package/lib/auth/idle.service.d.ts +40 -40
  156. package/lib/auth/idle.types.d.ts +10 -10
  157. package/lib/auth/lbop.service.d.ts +91 -91
  158. package/lib/auth/life-ready-auth.service.d.ts +61 -61
  159. package/lib/auth/password.service.d.ts +78 -78
  160. package/lib/auth/register.service.d.ts +25 -25
  161. package/lib/auth/two-factor.service.d.ts +15 -15
  162. package/lib/category/category-meta.service.d.ts +23 -23
  163. package/lib/category/category.gql.d.ts +45 -45
  164. package/lib/category/category.service.d.ts +67 -67
  165. package/lib/category/category.types.d.ts +79 -79
  166. package/lib/cryptography/cryptography.types.d.ts +83 -83
  167. package/lib/cryptography/encryption.service.d.ts +41 -41
  168. package/lib/cryptography/key-factory.service.d.ts +38 -38
  169. package/lib/cryptography/key-graph.service.d.ts +41 -41
  170. package/lib/cryptography/key-meta.service.d.ts +44 -44
  171. package/lib/cryptography/key.service.d.ts +36 -36
  172. package/lib/cryptography/slip39.service.d.ts +43 -43
  173. package/lib/cryptography/web-crypto.service.d.ts +5 -5
  174. package/lib/items2/item2.gql.d.ts +123 -123
  175. package/lib/items2/item2.service.d.ts +203 -203
  176. package/lib/items2/item2.types.d.ts +70 -70
  177. package/lib/life-ready.config.d.ts +14 -14
  178. package/lib/life-ready.module.d.ts +5 -5
  179. package/lib/notification/notification.gql.d.ts +37 -37
  180. package/lib/notification/notification.service.d.ts +63 -63
  181. package/lib/plan/plan.gql.d.ts +11 -11
  182. package/lib/plan/plan.service.d.ts +33 -33
  183. package/lib/plan/plan.types.d.ts +31 -31
  184. package/lib/record/record-attachment.service.d.ts +16 -16
  185. package/lib/record/record.gql.d.ts +14 -14
  186. package/lib/record/record.service.d.ts +25 -25
  187. package/lib/record/record.types.d.ts +57 -57
  188. package/lib/record-type/record-type.service.d.ts +11 -11
  189. package/lib/record-type/record-type.types.d.ts +50 -50
  190. package/lib/scenario/scenario.constants.d.ts +1 -1
  191. package/lib/scenario/scenario.controller.d.ts +10 -10
  192. package/lib/scenario/scenario.gql.d.ts +62 -62
  193. package/lib/scenario/scenario.gql.private.d.ts +16 -16
  194. package/lib/scenario/scenario.service.d.ts +233 -233
  195. package/lib/scenario/scenario.types.d.ts +50 -50
  196. package/lib/trusted-parties/tp-assembly.d.ts +177 -177
  197. package/lib/trusted-parties/tp-assembly.gql.private.d.ts +5 -5
  198. package/lib/trusted-parties/tp-assembly.types.d.ts +38 -38
  199. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
  200. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
  201. package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
  202. package/lib/trusted-parties/tp-password-reset.controller.d.ts +10 -10
  203. package/lib/trusted-parties/tp-password-reset.gql.d.ts +223 -223
  204. package/lib/trusted-parties/tp-password-reset.service.d.ts +188 -188
  205. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
  206. package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
  207. package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
  208. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
  209. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
  210. package/lib/users/profile-details.service.d.ts +21 -21
  211. package/lib/users/profile.gql.d.ts +11 -11
  212. package/lib/users/profile.service.d.ts +35 -35
  213. package/lib/users/profile.types.d.ts +96 -96
  214. package/lib/users/user.gql.d.ts +9 -9
  215. package/lib/users/user.service.d.ts +12 -12
  216. package/lib/users/user.types.d.ts +23 -23
  217. package/lifeready-core.d.ts +12 -12
  218. package/package.json +1 -1
  219. package/public-api.d.ts +67 -67
@@ -1,27 +1,27 @@
1
- import { CognitoUser } from '@aws-amplify/auth';
2
- export class CognitoChallengeUser extends CognitoUser {
3
- constructor() {
4
- super(...arguments);
5
- this.isTpPasswordResetUser = false;
6
- }
7
- }
8
- export var FeatureAction;
9
- (function (FeatureAction) {
10
- // Just the one for now
11
- FeatureAction["ACCESS"] = "access";
12
- })(FeatureAction || (FeatureAction = {}));
13
- export class Features {
14
- }
15
- export class CurrentUser {
16
- }
17
- export class LoginResult {
18
- }
19
- export class RegisterResult {
20
- }
21
- export var RecoveryStatus;
22
- (function (RecoveryStatus) {
23
- RecoveryStatus["NONE"] = "none";
24
- RecoveryStatus["NEW_PASSWORD"] = "new-password";
25
- RecoveryStatus["OLD_PASSWORD"] = "old-password";
26
- })(RecoveryStatus || (RecoveryStatus = {}));
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXV0aC9hdXRoLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQW9CaEQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFdBQVc7SUFBckQ7O1FBSUUsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7Q0FBQTtBQUVELE1BQU0sQ0FBTixJQUFZLGFBR1g7QUFIRCxXQUFZLGFBQWE7SUFDdkIsdUJBQXVCO0lBQ3ZCLGtDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxhQUFhLEtBQWIsYUFBYSxRQUd4QjtBQUVELE1BQU0sT0FBTyxRQUFRO0NBSXBCO0FBRUQsTUFBTSxPQUFPLFdBQVc7Q0FnQnZCO0FBTUQsTUFBTSxPQUFPLFdBQVc7Q0FLdkI7QUFFRCxNQUFNLE9BQU8sY0FBYztDQUsxQjtBQUVELE1BQU0sQ0FBTixJQUFZLGNBSVg7QUFKRCxXQUFZLGNBQWM7SUFDeEIsK0JBQWEsQ0FBQTtJQUNiLCtDQUE2QixDQUFBO0lBQzdCLCtDQUE2QixDQUFBO0FBQy9CLENBQUMsRUFKVyxjQUFjLEtBQWQsY0FBYyxRQUl6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZ25pdG9Vc2VyIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgnO1xuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcbmltcG9ydCB7IFRwUGFzc3dvcmRSZXNldFVzZXJOb2RlIH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7XG4gIFBhc3NJZHBQYXJhbXMsXG4gIFBhc3NLZXlQYXJhbXMsXG59IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHkudHlwZXMnO1xuaW1wb3J0IHsgVXNlclBsYW4gfSBmcm9tICcuLi9wbGFuL3BsYW4udHlwZXMnO1xuaW1wb3J0IHsgQ3VycmVudFVzZXJLZXksIE1haW5Db250YWN0Q2FyZCB9IGZyb20gJy4uL3VzZXJzL3Byb2ZpbGUudHlwZXMnO1xuaW1wb3J0IHsgVXNlckRlbGV0ZSB9IGZyb20gJy4uL3VzZXJzL3VzZXIudHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3NLZXlCdW5kbGUge1xuICBwYXNzS2V5UGFyYW1zOiBQYXNzS2V5UGFyYW1zO1xuICBwYXNzS2V5OiBKV0suS2V5O1xuICBwYXNzSWRwUGFyYW1zOiBQYXNzSWRwUGFyYW1zO1xuICBwYXNzSWRwOiBKV0suS2V5O1xuICBwYXNzSWRwVmVyaWZpZXI6IEpXSy5LZXk7XG4gIHdyYXBwZWRQYXNzSWRwVmVyaWZpZXJQcms6IG9iamVjdDtcbn1cblxuZXhwb3J0IGNsYXNzIENvZ25pdG9DaGFsbGVuZ2VVc2VyIGV4dGVuZHMgQ29nbml0b1VzZXIge1xuICByZWNvdmVyeVN0YXR1czogUmVjb3ZlcnlTdGF0dXM7XG4gIGNoYWxsZW5nZU5hbWU6ICdTTVNfTUZBJyB8ICdTT0ZUV0FSRV9UT0tFTl9NRkEnO1xuICBjaGFsbGVuZ2VQYXJhbTogYW55O1xuICBpc1RwUGFzc3dvcmRSZXNldFVzZXIgPSBmYWxzZTtcbn1cblxuZXhwb3J0IGVudW0gRmVhdHVyZUFjdGlvbiB7XG4gIC8vIEp1c3QgdGhlIG9uZSBmb3Igbm93XG4gIEFDQ0VTUyA9ICdhY2Nlc3MnLFxufVxuXG5leHBvcnQgY2xhc3MgRmVhdHVyZXMge1xuICBteVZhdWx0OiBGZWF0dXJlQWN0aW9uW107XG4gIHRwVmF1bHQ6IEZlYXR1cmVBY3Rpb25bXTtcbiAgc2hhcmVWYXVsdDogRmVhdHVyZUFjdGlvbltdO1xufVxuXG5leHBvcnQgY2xhc3MgQ3VycmVudFVzZXIge1xuICBpZDogc3RyaW5nO1xuICBzdWI6IHN0cmluZztcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgY3VycmVudFVzZXJLZXk6IEN1cnJlbnRVc2VyS2V5O1xuICBlbWFpbDogc3RyaW5nO1xuICBlbWFpbFZlcmlmaWVkOiBib29sZWFuO1xuICBwaG9uZTogc3RyaW5nO1xuICBwaG9uZVZlcmlmaWVkOiBib29sZWFuO1xuICBnZXRBY2Nlc3NKd3RUb2tlbjogKCkgPT4gc3RyaW5nO1xuICBjb250YWN0Q2FyZDogTWFpbkNvbnRhY3RDYXJkO1xuICB1c2VyRGVsZXRlPzogVXNlckRlbGV0ZTtcbiAgdXNlclBsYW5zOiBVc2VyUGxhbltdO1xuICBmZWF0dXJlczogRmVhdHVyZXM7XG4gIGhhc1RQVmF1bHRBY2Nlc3M6IGJvb2xlYW47XG4gIHNlc3Npb25FbmNyeXB0aW9uS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHBQYXNzd29yZFJlc2V0VXNlciBleHRlbmRzIFRwUGFzc3dvcmRSZXNldFVzZXJOb2RlIHtcbiAgc3ViOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dpblJlc3VsdCB7XG4gIGhhc0NoYWxsZW5nZTogYm9vbGVhbjtcbiAgY2hhbGxlbmdlPzogQ29nbml0b0NoYWxsZW5nZVVzZXI7XG4gIHVzZXI/OiBDdXJyZW50VXNlcjtcbiAgcmVzZXRVc2VyPzogVHBQYXNzd29yZFJlc2V0VXNlck5vZGU7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWdpc3RlclJlc3VsdCB7XG4gIHVzZXJuYW1lOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBwcmVTaWduVXBUb2tlbjogc3RyaW5nO1xuICB1c2VyU3ViOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIFJlY292ZXJ5U3RhdHVzIHtcbiAgTk9ORSA9ICdub25lJyxcbiAgTkVXX1BBU1NXT1JEID0gJ25ldy1wYXNzd29yZCcsXG4gIE9MRF9QQVNTV09SRCA9ICdvbGQtcGFzc3dvcmQnLFxufVxuIl19
1
+ import { CognitoUser } from '@aws-amplify/auth';
2
+ export class CognitoChallengeUser extends CognitoUser {
3
+ constructor() {
4
+ super(...arguments);
5
+ this.isTpPasswordResetUser = false;
6
+ }
7
+ }
8
+ export var FeatureAction;
9
+ (function (FeatureAction) {
10
+ // Just the one for now
11
+ FeatureAction["ACCESS"] = "access";
12
+ })(FeatureAction || (FeatureAction = {}));
13
+ export class Features {
14
+ }
15
+ export class CurrentUser {
16
+ }
17
+ export class LoginResult {
18
+ }
19
+ export class RegisterResult {
20
+ }
21
+ export var RecoveryStatus;
22
+ (function (RecoveryStatus) {
23
+ RecoveryStatus["NONE"] = "none";
24
+ RecoveryStatus["NEW_PASSWORD"] = "new-password";
25
+ RecoveryStatus["OLD_PASSWORD"] = "old-password";
26
+ })(RecoveryStatus || (RecoveryStatus = {}));
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9rYy1jbGllbnQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXV0aC9hdXRoLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQW9CaEQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFdBQVc7SUFBckQ7O1FBSUUsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7Q0FBQTtBQUVELE1BQU0sQ0FBTixJQUFZLGFBR1g7QUFIRCxXQUFZLGFBQWE7SUFDdkIsdUJBQXVCO0lBQ3ZCLGtDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxhQUFhLEtBQWIsYUFBYSxRQUd4QjtBQUVELE1BQU0sT0FBTyxRQUFRO0NBSXBCO0FBRUQsTUFBTSxPQUFPLFdBQVc7Q0FnQnZCO0FBTUQsTUFBTSxPQUFPLFdBQVc7Q0FLdkI7QUFFRCxNQUFNLE9BQU8sY0FBYztDQUsxQjtBQUVELE1BQU0sQ0FBTixJQUFZLGNBSVg7QUFKRCxXQUFZLGNBQWM7SUFDeEIsK0JBQWEsQ0FBQTtJQUNiLCtDQUE2QixDQUFBO0lBQzdCLCtDQUE2QixDQUFBO0FBQy9CLENBQUMsRUFKVyxjQUFjLEtBQWQsY0FBYyxRQUl6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZ25pdG9Vc2VyIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgnO1xyXG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xyXG5pbXBvcnQgeyBUcFBhc3N3b3JkUmVzZXRVc2VyTm9kZSB9IGZyb20gJy4uL2FwaS90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgUGFzc0lkcFBhcmFtcyxcclxuICBQYXNzS2V5UGFyYW1zLFxyXG59IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHkudHlwZXMnO1xyXG5pbXBvcnQgeyBVc2VyUGxhbiB9IGZyb20gJy4uL3BsYW4vcGxhbi50eXBlcyc7XHJcbmltcG9ydCB7IEN1cnJlbnRVc2VyS2V5LCBNYWluQ29udGFjdENhcmQgfSBmcm9tICcuLi91c2Vycy9wcm9maWxlLnR5cGVzJztcclxuaW1wb3J0IHsgVXNlckRlbGV0ZSB9IGZyb20gJy4uL3VzZXJzL3VzZXIudHlwZXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXNzS2V5QnVuZGxlIHtcclxuICBwYXNzS2V5UGFyYW1zOiBQYXNzS2V5UGFyYW1zO1xyXG4gIHBhc3NLZXk6IEpXSy5LZXk7XHJcbiAgcGFzc0lkcFBhcmFtczogUGFzc0lkcFBhcmFtcztcclxuICBwYXNzSWRwOiBKV0suS2V5O1xyXG4gIHBhc3NJZHBWZXJpZmllcjogSldLLktleTtcclxuICB3cmFwcGVkUGFzc0lkcFZlcmlmaWVyUHJrOiBvYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb2duaXRvQ2hhbGxlbmdlVXNlciBleHRlbmRzIENvZ25pdG9Vc2VyIHtcclxuICByZWNvdmVyeVN0YXR1czogUmVjb3ZlcnlTdGF0dXM7XHJcbiAgY2hhbGxlbmdlTmFtZTogJ1NNU19NRkEnIHwgJ1NPRlRXQVJFX1RPS0VOX01GQSc7XHJcbiAgY2hhbGxlbmdlUGFyYW06IGFueTtcclxuICBpc1RwUGFzc3dvcmRSZXNldFVzZXIgPSBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRmVhdHVyZUFjdGlvbiB7XHJcbiAgLy8gSnVzdCB0aGUgb25lIGZvciBub3dcclxuICBBQ0NFU1MgPSAnYWNjZXNzJyxcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZlYXR1cmVzIHtcclxuICBteVZhdWx0OiBGZWF0dXJlQWN0aW9uW107XHJcbiAgdHBWYXVsdDogRmVhdHVyZUFjdGlvbltdO1xyXG4gIHNoYXJlVmF1bHQ6IEZlYXR1cmVBY3Rpb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEN1cnJlbnRVc2VyIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHN1Yjogc3RyaW5nO1xyXG4gIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgY3VycmVudFVzZXJLZXk6IEN1cnJlbnRVc2VyS2V5O1xyXG4gIGVtYWlsOiBzdHJpbmc7XHJcbiAgZW1haWxWZXJpZmllZDogYm9vbGVhbjtcclxuICBwaG9uZTogc3RyaW5nO1xyXG4gIHBob25lVmVyaWZpZWQ6IGJvb2xlYW47XHJcbiAgZ2V0QWNjZXNzSnd0VG9rZW46ICgpID0+IHN0cmluZztcclxuICBjb250YWN0Q2FyZDogTWFpbkNvbnRhY3RDYXJkO1xyXG4gIHVzZXJEZWxldGU/OiBVc2VyRGVsZXRlO1xyXG4gIHVzZXJQbGFuczogVXNlclBsYW5bXTtcclxuICBmZWF0dXJlczogRmVhdHVyZXM7XHJcbiAgaGFzVFBWYXVsdEFjY2VzczogYm9vbGVhbjtcclxuICBzZXNzaW9uRW5jcnlwdGlvbktleTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRwUGFzc3dvcmRSZXNldFVzZXIgZXh0ZW5kcyBUcFBhc3N3b3JkUmVzZXRVc2VyTm9kZSB7XHJcbiAgc3ViOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBMb2dpblJlc3VsdCB7XHJcbiAgaGFzQ2hhbGxlbmdlOiBib29sZWFuO1xyXG4gIGNoYWxsZW5nZT86IENvZ25pdG9DaGFsbGVuZ2VVc2VyO1xyXG4gIHVzZXI/OiBDdXJyZW50VXNlcjtcclxuICByZXNldFVzZXI/OiBUcFBhc3N3b3JkUmVzZXRVc2VyTm9kZTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyUmVzdWx0IHtcclxuICB1c2VybmFtZTogc3RyaW5nO1xyXG4gIHVzZXJJZDogc3RyaW5nO1xyXG4gIHByZVNpZ25VcFRva2VuOiBzdHJpbmc7XHJcbiAgdXNlclN1Yjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSZWNvdmVyeVN0YXR1cyB7XHJcbiAgTk9ORSA9ICdub25lJyxcclxuICBORVdfUEFTU1dPUkQgPSAnbmV3LXBhc3N3b3JkJyxcclxuICBPTERfUEFTU1dPUkQgPSAnb2xkLXBhc3N3b3JkJyxcclxufVxyXG4iXX0=
@@ -1,168 +1,168 @@
1
- import { __awaiter } from "tslib";
2
- import { Inject, Injectable } from '@angular/core';
3
- import { Idle, DEFAULT_INTERRUPTSOURCES } from '@ng-idle/core';
4
- import { Keepalive } from '@ng-idle/keepalive';
5
- import { KeyService } from '../cryptography/key.service';
6
- import { LrBadArgumentException, LrBadStateException, } from '../_common/exceptions';
7
- import { LR_CONFIG } from '../life-ready.config';
8
- import { HttpClient } from '@angular/common/http';
9
- import { Config } from './idle.types';
10
- import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "../life-ready.config";
13
- import * as i2 from "@angular/common/http";
14
- import * as i3 from "@ng-idle/core";
15
- import * as i4 from "@ng-idle/keepalive";
16
- import * as i5 from "../cryptography/key.service";
17
- import * as i6 from "@aws-amplify/auth/lib-esm/Auth";
18
- export class IdleService {
19
- constructor(config, http, idle, keepalive, keyService, auth) {
20
- this.config = config;
21
- this.http = http;
22
- this.idle = idle;
23
- this.keepalive = keepalive;
24
- this.keyService = keyService;
25
- this.auth = auth;
26
- this.IDLE_EXPIRY_KEY = 'ng2Idle.main.expiry';
27
- this.IDLING_KEY = 'ng2Idle.main.idling';
28
- this.initCalled = false;
29
- }
30
- assertInit() {
31
- if (!this.initCalled) {
32
- throw new LrBadStateException('Call IdleService.init() first.');
33
- }
34
- }
35
- init(params) {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- if (this.initCalled) {
38
- throw new LrBadStateException('IdleService.init() can only be called once. IdleService.start() calls init() with default values if init() has not been called yet.');
39
- }
40
- this.initCalled = true;
41
- // Defaults
42
- params = Object.assign({ onTimeout: null, onKeepalive: null, idleSec: Config.IDLE, timeoutSec: Config.TIMEOUT, keepAliveIntervalSec: Config.KEEP_ALIVE_INTERVAL }, params);
43
- // If timeoutSec == 0 then the onTimeout() callback is never called.
44
- if (params.timeoutSec < 0.01) {
45
- throw new LrBadArgumentException('Minimum value for IdleService.init({ timeoutSec }) is 0.01');
46
- }
47
- this.onTimeout = params.onTimeout;
48
- this.onKeepalive = params.onKeepalive;
49
- // ------------------------------------------------------------------------
50
- // Setup Idle
51
- // ------------------------------------------------------------------------
52
- // sets an idle timeout of 5 seconds, for testing purposes.
53
- this.idle.setIdle(params.idleSec);
54
- // sets a timeout period of 5 seconds. after 10 seconds of inactivity, the user will be considered timed out.
55
- this.idle.setTimeout(params.timeoutSec);
56
- // sets the default interrupts, in this case, things like clicks, scrolls, touches to the document
57
- this.idle.setInterrupts(DEFAULT_INTERRUPTSOURCES);
58
- this.idle.onIdleEnd.subscribe(() => console.log('Idle stopped'));
59
- this.idle.onIdleStart.subscribe(() => console.log('Idle started'));
60
- this.idle.onTimeout.subscribe(() => __awaiter(this, void 0, void 0, function* () {
61
- console.log('Idle timed out');
62
- this.reset();
63
- yield Promise.resolve(this.onTimeout && this.onTimeout());
64
- }));
65
- this.idle.onTimeoutWarning.subscribe((countdown) => console.log(`Will timeout in ${countdown} seconds!`));
66
- // ------------------------------------------------------------------------
67
- // Setup Keepalive
68
- // ------------------------------------------------------------------------
69
- // Ref: https://github.com/moribvndvs/ng2-idle#readme
70
- // ng-idle will instruct @ng-idle/keepalive to ping while the user is active, and stop once
71
- // they go idle or time out. When the user resumes activity or the idle state is reset, it will
72
- // ping immediately and then resume pinging.
73
- this.keepalive.interval(params.keepAliveIntervalSec);
74
- console.log(`Keep alive interval set at: ${Config.KEEP_ALIVE_INTERVAL} seconds`);
75
- this.keepalive.onPing.subscribe(() => this.onPing());
76
- // If the browser tab has been closed for a period longer thant the inactivity
77
- // period, then we should logout right from the start.
78
- const idleExpiry = localStorage.getItem(this.IDLE_EXPIRY_KEY);
79
- if (idleExpiry &&
80
- parseInt(idleExpiry, 10) + this.idle.getTimeout() * 1000 < Date.now()) {
81
- this.reset();
82
- yield Promise.resolve(this.onTimeout && this.onTimeout());
83
- }
84
- });
85
- }
86
- keepalivePost() {
87
- return __awaiter(this, void 0, void 0, function* () {
88
- // currentAuthenticatedUser() refreshes the access token if required.
89
- const cognitoUser = yield this.auth.currentAuthenticatedUser();
90
- const keepaliveResult = yield this.http
91
- .post(`${this.config.authUrl}auth/keepalive/`, null, {
92
- withCredentials: true,
93
- headers: {
94
- Authorization: `Bearer ${cognitoUser
95
- .getSignInUserSession()
96
- .getAccessToken()
97
- .getJwtToken()}`,
98
- },
99
- })
100
- .toPromise();
101
- return {
102
- keepaliveResult,
103
- expiresAfterSeconds: this.idle.getIdle() +
104
- this.idle.getTimeout() +
105
- this.keepalive.interval(),
106
- };
107
- });
108
- }
109
- persistMasterKey(masterKey) {
110
- return __awaiter(this, void 0, void 0, function* () {
111
- // The keepalive API call extends the server-side session, the session cookie expiry, refresh key cookie
112
- // expiry, and returns the session expiry.
113
- // NOTE Use time delta rather than absolute time, since client clock and server clock maybe
114
- // out of sync. We can't use the serverTime() functionality because the cookie expiry still
115
- // run on local clock.
116
- const { expiresAfterSeconds } = yield this.keepalivePost();
117
- // Persist the derived passKey
118
- yield this.keyService.persistMasterKey(masterKey, expiresAfterSeconds);
119
- console.log('setMasterKey() done');
120
- });
121
- }
122
- onPing() {
123
- return __awaiter(this, void 0, void 0, function* () {
124
- console.log(`Keep alive triggered at time: ${Date.now()}. Interval set at: ${this.keepalive.interval()} seconds`);
125
- // Keepalive API will extend the session expiry.
126
- const { expiresAfterSeconds } = yield this.keepalivePost();
127
- // Extend the expiry of the persisted key
128
- yield this.keyService.setMasterKeyExpiresAfterSeconds(expiresAfterSeconds);
129
- yield Promise.resolve(this.onKeepalive && this.onKeepalive());
130
- });
131
- }
132
- start() {
133
- return __awaiter(this, void 0, void 0, function* () {
134
- if (!this.initCalled) {
135
- yield this.init();
136
- }
137
- if (this.idle.isRunning()) {
138
- return;
139
- }
140
- // Ping does not seem to happen right at the start. So we call it explicitly
141
- yield this.onPing();
142
- this.idle.watch();
143
- });
144
- }
145
- stop() {
146
- this.idle.stop();
147
- this.reset();
148
- }
149
- reset() {
150
- localStorage.removeItem(this.IDLE_EXPIRY_KEY);
151
- localStorage.removeItem(this.IDLING_KEY);
152
- }
153
- }
154
- IdleService.ɵprov = i0.ɵɵdefineInjectable({ factory: function IdleService_Factory() { return new IdleService(i0.ɵɵinject(i1.LR_CONFIG), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.Idle), i0.ɵɵinject(i4.Keepalive), i0.ɵɵinject(i5.KeyService), i0.ɵɵinject(i6.AuthClass)); }, token: IdleService, providedIn: "root" });
155
- IdleService.decorators = [
156
- { type: Injectable, args: [{
157
- providedIn: 'root',
158
- },] }
159
- ];
160
- IdleService.ctorParameters = () => [
161
- { type: undefined, decorators: [{ type: Inject, args: [LR_CONFIG,] }] },
162
- { type: HttpClient },
163
- { type: Idle },
164
- { type: Keepalive },
165
- { type: KeyService },
166
- { type: AuthClass }
167
- ];
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hdXRoL2lkbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBbUIsTUFBTSxjQUFjLENBQUM7QUFHdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7OztBQWMzRCxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUM2QixNQUF1QixFQUMxQyxJQUFnQixFQUNoQixJQUFVLEVBQ1YsU0FBb0IsRUFDcEIsVUFBc0IsRUFDdEIsSUFBZTtRQUxJLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQzFDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUNWLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFXO1FBYlIsb0JBQWUsR0FBRyxxQkFBcUIsQ0FBQztRQUN4QyxlQUFVLEdBQUcscUJBQXFCLENBQUM7UUFFNUMsZUFBVSxHQUFHLEtBQUssQ0FBQztJQVd4QixDQUFDO0lBRUksVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixNQUFNLElBQUksbUJBQW1CLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFWSxJQUFJLENBQUMsTUFBd0I7O1lBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLG1CQUFtQixDQUMzQixxSUFBcUksQ0FDdEksQ0FBQzthQUNIO1lBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFdkIsV0FBVztZQUNYLE1BQU0sbUJBQ0osU0FBUyxFQUFFLElBQUksRUFDZixXQUFXLEVBQUUsSUFBSSxFQUNqQixPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksRUFDcEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQzFCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsSUFDN0MsTUFBTSxDQUNWLENBQUM7WUFFRixvRUFBb0U7WUFDcEUsSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRTtnQkFDNUIsTUFBTSxJQUFJLHNCQUFzQixDQUM5Qiw0REFBNEQsQ0FDN0QsQ0FBQzthQUNIO1lBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUV0QywyRUFBMkU7WUFDM0UsYUFBYTtZQUNiLDJFQUEyRTtZQUMzRSwyREFBMkQ7WUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLDZHQUE2RztZQUM3RyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsa0dBQWtHO1lBQ2xHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFFbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBRW5FLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFTLEVBQUU7Z0JBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNiLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUMsQ0FBQSxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFLENBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLFNBQVMsV0FBVyxDQUFDLENBQ3JELENBQUM7WUFFRiwyRUFBMkU7WUFDM0Usa0JBQWtCO1lBQ2xCLDJFQUEyRTtZQUMzRSxxREFBcUQ7WUFDckQsMkZBQTJGO1lBQzNGLCtGQUErRjtZQUMvRiw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FDVCwrQkFBK0IsTUFBTSxDQUFDLG1CQUFtQixVQUFVLENBQ3BFLENBQUM7WUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFckQsOEVBQThFO1lBQzlFLHNEQUFzRDtZQUN0RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM5RCxJQUNFLFVBQVU7Z0JBQ1YsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQ3JFO2dCQUNBLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQzthQUMzRDtRQUNILENBQUM7S0FBQTtJQUVZLGFBQWE7O1lBSXhCLHFFQUFxRTtZQUNyRSxNQUFNLFdBQVcsR0FBZ0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFFNUUsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSTtpQkFDcEMsSUFBSSxDQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxpQkFBaUIsRUFBRSxJQUFJLEVBQUU7Z0JBQ3BFLGVBQWUsRUFBRSxJQUFJO2dCQUNyQixPQUFPLEVBQUU7b0JBQ1AsYUFBYSxFQUFFLFVBQVUsV0FBVzt5QkFDakMsb0JBQW9CLEVBQUU7eUJBQ3RCLGNBQWMsRUFBRTt5QkFDaEIsV0FBVyxFQUFFLEVBQUU7aUJBQ25CO2FBQ0YsQ0FBQztpQkFDRCxTQUFTLEVBQUUsQ0FBQztZQUVmLE9BQU87Z0JBQ0wsZUFBZTtnQkFDZixtQkFBbUIsRUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTthQUM1QixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBRVksZ0JBQWdCLENBQUMsU0FBYzs7WUFDMUMsd0dBQXdHO1lBQ3hHLDBDQUEwQztZQUMxQywyRkFBMkY7WUFDM0YsMkZBQTJGO1lBQzNGLHNCQUFzQjtZQUN0QixNQUFNLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUUzRCw4QkFBOEI7WUFDOUIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBRXZFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyQyxDQUFDO0tBQUE7SUFFYSxNQUFNOztZQUNsQixPQUFPLENBQUMsR0FBRyxDQUNULGlDQUFpQyxJQUFJLENBQUMsR0FBRyxFQUFFLHNCQUFzQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQ3JHLENBQUM7WUFFRixnREFBZ0Q7WUFDaEQsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFM0QseUNBQXlDO1lBQ3pDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBRTNFLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7S0FBQTtJQUVZLEtBQUs7O1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNuQjtZQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDekIsT0FBTzthQUNSO1lBRUQsNEVBQTRFO1lBQzVFLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRXBCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsQ0FBQztLQUFBO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUs7UUFDWCxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxDQUFDOzs7O1lBdExGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQVVJLE1BQU0sU0FBQyxTQUFTO1lBM0JaLFVBQVU7WUFSVixJQUFJO1lBQ0osU0FBUztZQUNULFVBQVU7WUFVVixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZGxlLCBERUZBVUxUX0lOVEVSUlVQVFNPVVJDRVMgfSBmcm9tICdAbmctaWRsZS9jb3JlJztcbmltcG9ydCB7IEtlZXBhbGl2ZSB9IGZyb20gJ0BuZy1pZGxlL2tlZXBhbGl2ZSc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIExyQmFkQXJndW1lbnRFeGNlcHRpb24sXG4gIExyQmFkU3RhdGVFeGNlcHRpb24sXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBMaWZlUmVhZHlDb25maWcsIExSX0NPTkZJRyB9IGZyb20gJy4uL2xpZmUtcmVhZHkuY29uZmlnJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb25maWcsIEtlZXBhbGl2ZVJlc3VsdCB9IGZyb20gJy4vaWRsZS50eXBlcyc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5LnR5cGVzJztcbmltcG9ydCB7IENvZ25pdG9Vc2VyIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgnO1xuaW1wb3J0IHsgQXV0aENsYXNzIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgvbGliLWVzbS9BdXRoJztcblxuZXhwb3J0IGludGVyZmFjZSBJZGxlU2VydmljZUluaXQge1xuICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBFdmVudEVtaXR0ZXIgaW5zdGVhZCBvZiBhIGNhbGxiYWNrLlxuICBvblRpbWVvdXQ/OiAoKCkgPT4gYW55KSB8ICgoKSA9PiBQcm9taXNlPGFueT4pIHwgbnVsbDtcbiAgb25LZWVwYWxpdmU/OiAoKCkgPT4gYW55KSB8ICgoKSA9PiBQcm9taXNlPGFueT4pIHwgbnVsbDtcbiAgaWRsZVNlYz86IG51bWJlcjtcbiAgdGltZW91dFNlYz86IG51bWJlcjtcbiAga2VlcEFsaXZlSW50ZXJ2YWxTZWM/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJZGxlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgSURMRV9FWFBJUllfS0VZID0gJ25nMklkbGUubWFpbi5leHBpcnknO1xuICBwcml2YXRlIHJlYWRvbmx5IElETElOR19LRVkgPSAnbmcySWRsZS5tYWluLmlkbGluZyc7XG5cbiAgcHJpdmF0ZSBpbml0Q2FsbGVkID0gZmFsc2U7XG4gIHByaXZhdGUgb25UaW1lb3V0OiAoKCkgPT4gYW55KSB8ICgoKSA9PiBQcm9taXNlPGFueT4pIHwgbnVsbDtcbiAgcHJpdmF0ZSBvbktlZXBhbGl2ZTogKCgpID0+IGFueSkgfCAoKCkgPT4gUHJvbWlzZTxhbnk+KSB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMUl9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBMaWZlUmVhZHlDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgaWRsZTogSWRsZSxcbiAgICBwcml2YXRlIGtlZXBhbGl2ZTogS2VlcGFsaXZlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhDbGFzc1xuICApIHt9XG5cbiAgcHJpdmF0ZSBhc3NlcnRJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbml0Q2FsbGVkKSB7XG4gICAgICB0aHJvdyBuZXcgTHJCYWRTdGF0ZUV4Y2VwdGlvbignQ2FsbCBJZGxlU2VydmljZS5pbml0KCkgZmlyc3QuJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXQocGFyYW1zPzogSWRsZVNlcnZpY2VJbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaW5pdENhbGxlZCkge1xuICAgICAgdGhyb3cgbmV3IExyQmFkU3RhdGVFeGNlcHRpb24oXG4gICAgICAgICdJZGxlU2VydmljZS5pbml0KCkgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIElkbGVTZXJ2aWNlLnN0YXJ0KCkgY2FsbHMgaW5pdCgpIHdpdGggZGVmYXVsdCB2YWx1ZXMgaWYgaW5pdCgpIGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0Q2FsbGVkID0gdHJ1ZTtcblxuICAgIC8vIERlZmF1bHRzXG4gICAgcGFyYW1zID0ge1xuICAgICAgb25UaW1lb3V0OiBudWxsLFxuICAgICAgb25LZWVwYWxpdmU6IG51bGwsXG4gICAgICBpZGxlU2VjOiBDb25maWcuSURMRSxcbiAgICAgIHRpbWVvdXRTZWM6IENvbmZpZy5USU1FT1VULFxuICAgICAga2VlcEFsaXZlSW50ZXJ2YWxTZWM6IENvbmZpZy5LRUVQX0FMSVZFX0lOVEVSVkFMLFxuICAgICAgLi4ucGFyYW1zLFxuICAgIH07XG5cbiAgICAvLyBJZiB0aW1lb3V0U2VjID09IDAgdGhlbiB0aGUgb25UaW1lb3V0KCkgY2FsbGJhY2sgaXMgbmV2ZXIgY2FsbGVkLlxuICAgIGlmIChwYXJhbXMudGltZW91dFNlYyA8IDAuMDEpIHtcbiAgICAgIHRocm93IG5ldyBMckJhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICAgICAnTWluaW11bSB2YWx1ZSBmb3IgSWRsZVNlcnZpY2UuaW5pdCh7IHRpbWVvdXRTZWMgfSkgaXMgMC4wMSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vblRpbWVvdXQgPSBwYXJhbXMub25UaW1lb3V0O1xuICAgIHRoaXMub25LZWVwYWxpdmUgPSBwYXJhbXMub25LZWVwYWxpdmU7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTZXR1cCBJZGxlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gc2V0cyBhbiBpZGxlIHRpbWVvdXQgb2YgNSBzZWNvbmRzLCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICB0aGlzLmlkbGUuc2V0SWRsZShwYXJhbXMuaWRsZVNlYyk7XG4gICAgLy8gc2V0cyBhIHRpbWVvdXQgcGVyaW9kIG9mIDUgc2Vjb25kcy4gYWZ0ZXIgMTAgc2Vjb25kcyBvZiBpbmFjdGl2aXR5LCB0aGUgdXNlciB3aWxsIGJlIGNvbnNpZGVyZWQgdGltZWQgb3V0LlxuICAgIHRoaXMuaWRsZS5zZXRUaW1lb3V0KHBhcmFtcy50aW1lb3V0U2VjKTtcbiAgICAvLyBzZXRzIHRoZSBkZWZhdWx0IGludGVycnVwdHMsIGluIHRoaXMgY2FzZSwgdGhpbmdzIGxpa2UgY2xpY2tzLCBzY3JvbGxzLCB0b3VjaGVzIHRvIHRoZSBkb2N1bWVudFxuICAgIHRoaXMuaWRsZS5zZXRJbnRlcnJ1cHRzKERFRkFVTFRfSU5URVJSVVBUU09VUkNFUyk7XG5cbiAgICB0aGlzLmlkbGUub25JZGxlRW5kLnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZygnSWRsZSBzdG9wcGVkJykpO1xuICAgIHRoaXMuaWRsZS5vbklkbGVTdGFydC5zdWJzY3JpYmUoKCkgPT4gY29uc29sZS5sb2coJ0lkbGUgc3RhcnRlZCcpKTtcblxuICAgIHRoaXMuaWRsZS5vblRpbWVvdXQuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdJZGxlIHRpbWVkIG91dCcpO1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMub25UaW1lb3V0ICYmIHRoaXMub25UaW1lb3V0KCkpO1xuICAgIH0pO1xuICAgIHRoaXMuaWRsZS5vblRpbWVvdXRXYXJuaW5nLnN1YnNjcmliZSgoY291bnRkb3duOiBhbnkpID0+XG4gICAgICBjb25zb2xlLmxvZyhgV2lsbCB0aW1lb3V0IGluICR7Y291bnRkb3dufSBzZWNvbmRzIWApXG4gICAgKTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNldHVwIEtlZXBhbGl2ZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL21vcmlidm5kdnMvbmcyLWlkbGUjcmVhZG1lXG4gICAgLy8gbmctaWRsZSB3aWxsIGluc3RydWN0IEBuZy1pZGxlL2tlZXBhbGl2ZSB0byBwaW5nIHdoaWxlIHRoZSB1c2VyIGlzIGFjdGl2ZSwgYW5kIHN0b3Agb25jZVxuICAgIC8vIHRoZXkgZ28gaWRsZSBvciB0aW1lIG91dC4gV2hlbiB0aGUgdXNlciByZXN1bWVzIGFjdGl2aXR5IG9yIHRoZSBpZGxlIHN0YXRlIGlzIHJlc2V0LCBpdCB3aWxsXG4gICAgLy8gcGluZyBpbW1lZGlhdGVseSBhbmQgdGhlbiByZXN1bWUgcGluZ2luZy5cbiAgICB0aGlzLmtlZXBhbGl2ZS5pbnRlcnZhbChwYXJhbXMua2VlcEFsaXZlSW50ZXJ2YWxTZWMpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEtlZXAgYWxpdmUgaW50ZXJ2YWwgc2V0IGF0OiAke0NvbmZpZy5LRUVQX0FMSVZFX0lOVEVSVkFMfSBzZWNvbmRzYFxuICAgICk7XG5cbiAgICB0aGlzLmtlZXBhbGl2ZS5vblBpbmcuc3Vic2NyaWJlKCgpID0+IHRoaXMub25QaW5nKCkpO1xuXG4gICAgLy8gSWYgdGhlIGJyb3dzZXIgdGFiIGhhcyBiZWVuIGNsb3NlZCBmb3IgYSBwZXJpb2QgbG9uZ2VyIHRoYW50IHRoZSBpbmFjdGl2aXR5XG4gICAgLy8gcGVyaW9kLCB0aGVuIHdlIHNob3VsZCBsb2dvdXQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuXG4gICAgY29uc3QgaWRsZUV4cGlyeSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuSURMRV9FWFBJUllfS0VZKTtcbiAgICBpZiAoXG4gICAgICBpZGxlRXhwaXJ5ICYmXG4gICAgICBwYXJzZUludChpZGxlRXhwaXJ5LCAxMCkgKyB0aGlzLmlkbGUuZ2V0VGltZW91dCgpICogMTAwMCA8IERhdGUubm93KClcbiAgICApIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLm9uVGltZW91dCAmJiB0aGlzLm9uVGltZW91dCgpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMga2VlcGFsaXZlUG9zdCgpOiBQcm9taXNlPHtcbiAgICBleHBpcmVzQWZ0ZXJTZWNvbmRzOiBudW1iZXI7XG4gICAga2VlcGFsaXZlUmVzdWx0OiBLZWVwYWxpdmVSZXN1bHQ7XG4gIH0+IHtcbiAgICAvLyBjdXJyZW50QXV0aGVudGljYXRlZFVzZXIoKSByZWZyZXNoZXMgdGhlIGFjY2VzcyB0b2tlbiBpZiByZXF1aXJlZC5cbiAgICBjb25zdCBjb2duaXRvVXNlcjogQ29nbml0b1VzZXIgPSBhd2FpdCB0aGlzLmF1dGguY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyKCk7XG5cbiAgICBjb25zdCBrZWVwYWxpdmVSZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PEtlZXBhbGl2ZVJlc3VsdD4oYCR7dGhpcy5jb25maWcuYXV0aFVybH1hdXRoL2tlZXBhbGl2ZS9gLCBudWxsLCB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSwgLy8gL2F1dGgva2VlcGFsaXZlLyB3aWxsIGJlIGV4dGVuZGluZyB0aGUgc2Vzc2lvbnMgY29va2llLlxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvZ25pdG9Vc2VyXG4gICAgICAgICAgICAuZ2V0U2lnbkluVXNlclNlc3Npb24oKVxuICAgICAgICAgICAgLmdldEFjY2Vzc1Rva2VuKClcbiAgICAgICAgICAgIC5nZXRKd3RUb2tlbigpfWAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtlZXBhbGl2ZVJlc3VsdCxcbiAgICAgIGV4cGlyZXNBZnRlclNlY29uZHM6XG4gICAgICAgIHRoaXMuaWRsZS5nZXRJZGxlKCkgK1xuICAgICAgICB0aGlzLmlkbGUuZ2V0VGltZW91dCgpICtcbiAgICAgICAgdGhpcy5rZWVwYWxpdmUuaW50ZXJ2YWwoKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBlcnNpc3RNYXN0ZXJLZXkobWFzdGVyS2V5OiBLZXkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUaGUga2VlcGFsaXZlIEFQSSBjYWxsIGV4dGVuZHMgdGhlIHNlcnZlci1zaWRlIHNlc3Npb24sIHRoZSBzZXNzaW9uIGNvb2tpZSBleHBpcnksIHJlZnJlc2gga2V5IGNvb2tpZVxuICAgIC8vIGV4cGlyeSwgYW5kIHJldHVybnMgdGhlIHNlc3Npb24gZXhwaXJ5LlxuICAgIC8vIE5PVEUgVXNlIHRpbWUgZGVsdGEgcmF0aGVyIHRoYW4gYWJzb2x1dGUgdGltZSwgc2luY2UgY2xpZW50IGNsb2NrIGFuZCBzZXJ2ZXIgY2xvY2sgbWF5YmVcbiAgICAvLyBvdXQgb2Ygc3luYy4gV2UgY2FuJ3QgdXNlIHRoZSBzZXJ2ZXJUaW1lKCkgZnVuY3Rpb25hbGl0eSBiZWNhdXNlIHRoZSBjb29raWUgZXhwaXJ5IHN0aWxsXG4gICAgLy8gcnVuIG9uIGxvY2FsIGNsb2NrLlxuICAgIGNvbnN0IHsgZXhwaXJlc0FmdGVyU2Vjb25kcyB9ID0gYXdhaXQgdGhpcy5rZWVwYWxpdmVQb3N0KCk7XG5cbiAgICAvLyBQZXJzaXN0IHRoZSBkZXJpdmVkIHBhc3NLZXlcbiAgICBhd2FpdCB0aGlzLmtleVNlcnZpY2UucGVyc2lzdE1hc3RlcktleShtYXN0ZXJLZXksIGV4cGlyZXNBZnRlclNlY29uZHMpO1xuXG4gICAgY29uc29sZS5sb2coJ3NldE1hc3RlcktleSgpIGRvbmUnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25QaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEtlZXAgYWxpdmUgdHJpZ2dlcmVkIGF0IHRpbWU6ICR7RGF0ZS5ub3coKX0uIEludGVydmFsIHNldCBhdDogJHt0aGlzLmtlZXBhbGl2ZS5pbnRlcnZhbCgpfSBzZWNvbmRzYFxuICAgICk7XG5cbiAgICAvLyBLZWVwYWxpdmUgQVBJIHdpbGwgZXh0ZW5kIHRoZSBzZXNzaW9uIGV4cGlyeS5cbiAgICBjb25zdCB7IGV4cGlyZXNBZnRlclNlY29uZHMgfSA9IGF3YWl0IHRoaXMua2VlcGFsaXZlUG9zdCgpO1xuXG4gICAgLy8gRXh0ZW5kIHRoZSBleHBpcnkgb2YgdGhlIHBlcnNpc3RlZCBrZXlcbiAgICBhd2FpdCB0aGlzLmtleVNlcnZpY2Uuc2V0TWFzdGVyS2V5RXhwaXJlc0FmdGVyU2Vjb25kcyhleHBpcmVzQWZ0ZXJTZWNvbmRzKTtcblxuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLm9uS2VlcGFsaXZlICYmIHRoaXMub25LZWVwYWxpdmUoKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmluaXRDYWxsZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlkbGUuaXNSdW5uaW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQaW5nIGRvZXMgbm90IHNlZW0gdG8gaGFwcGVuIHJpZ2h0IGF0IHRoZSBzdGFydC4gU28gd2UgY2FsbCBpdCBleHBsaWNpdGx5XG4gICAgYXdhaXQgdGhpcy5vblBpbmcoKTtcblxuICAgIHRoaXMuaWRsZS53YXRjaCgpO1xuICB9XG5cbiAgcHVibGljIHN0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pZGxlLnN0b3AoKTtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0KCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuSURMRV9FWFBJUllfS0VZKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLklETElOR19LRVkpO1xuICB9XG59XG4iXX0=
1
+ import { __awaiter } from "tslib";
2
+ import { Inject, Injectable } from '@angular/core';
3
+ import { Idle, DEFAULT_INTERRUPTSOURCES } from '@ng-idle/core';
4
+ import { Keepalive } from '@ng-idle/keepalive';
5
+ import { KeyService } from '../cryptography/key.service';
6
+ import { LrBadArgumentException, LrBadStateException, } from '../_common/exceptions';
7
+ import { LR_CONFIG } from '../life-ready.config';
8
+ import { HttpClient } from '@angular/common/http';
9
+ import { Config } from './idle.types';
10
+ import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "../life-ready.config";
13
+ import * as i2 from "@angular/common/http";
14
+ import * as i3 from "@ng-idle/core";
15
+ import * as i4 from "@ng-idle/keepalive";
16
+ import * as i5 from "../cryptography/key.service";
17
+ import * as i6 from "@aws-amplify/auth/lib-esm/Auth";
18
+ export class IdleService {
19
+ constructor(config, http, idle, keepalive, keyService, auth) {
20
+ this.config = config;
21
+ this.http = http;
22
+ this.idle = idle;
23
+ this.keepalive = keepalive;
24
+ this.keyService = keyService;
25
+ this.auth = auth;
26
+ this.IDLE_EXPIRY_KEY = 'ng2Idle.main.expiry';
27
+ this.IDLING_KEY = 'ng2Idle.main.idling';
28
+ this.initCalled = false;
29
+ }
30
+ assertInit() {
31
+ if (!this.initCalled) {
32
+ throw new LrBadStateException('Call IdleService.init() first.');
33
+ }
34
+ }
35
+ init(params) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ if (this.initCalled) {
38
+ throw new LrBadStateException('IdleService.init() can only be called once. IdleService.start() calls init() with default values if init() has not been called yet.');
39
+ }
40
+ this.initCalled = true;
41
+ // Defaults
42
+ params = Object.assign({ onTimeout: null, onKeepalive: null, idleSec: Config.IDLE, timeoutSec: Config.TIMEOUT, keepAliveIntervalSec: Config.KEEP_ALIVE_INTERVAL }, params);
43
+ // If timeoutSec == 0 then the onTimeout() callback is never called.
44
+ if (params.timeoutSec < 0.01) {
45
+ throw new LrBadArgumentException('Minimum value for IdleService.init({ timeoutSec }) is 0.01');
46
+ }
47
+ this.onTimeout = params.onTimeout;
48
+ this.onKeepalive = params.onKeepalive;
49
+ // ------------------------------------------------------------------------
50
+ // Setup Idle
51
+ // ------------------------------------------------------------------------
52
+ // sets an idle timeout of 5 seconds, for testing purposes.
53
+ this.idle.setIdle(params.idleSec);
54
+ // sets a timeout period of 5 seconds. after 10 seconds of inactivity, the user will be considered timed out.
55
+ this.idle.setTimeout(params.timeoutSec);
56
+ // sets the default interrupts, in this case, things like clicks, scrolls, touches to the document
57
+ this.idle.setInterrupts(DEFAULT_INTERRUPTSOURCES);
58
+ this.idle.onIdleEnd.subscribe(() => console.log('Idle stopped'));
59
+ this.idle.onIdleStart.subscribe(() => console.log('Idle started'));
60
+ this.idle.onTimeout.subscribe(() => __awaiter(this, void 0, void 0, function* () {
61
+ console.log('Idle timed out');
62
+ this.reset();
63
+ yield Promise.resolve(this.onTimeout && this.onTimeout());
64
+ }));
65
+ this.idle.onTimeoutWarning.subscribe((countdown) => console.log(`Will timeout in ${countdown} seconds!`));
66
+ // ------------------------------------------------------------------------
67
+ // Setup Keepalive
68
+ // ------------------------------------------------------------------------
69
+ // Ref: https://github.com/moribvndvs/ng2-idle#readme
70
+ // ng-idle will instruct @ng-idle/keepalive to ping while the user is active, and stop once
71
+ // they go idle or time out. When the user resumes activity or the idle state is reset, it will
72
+ // ping immediately and then resume pinging.
73
+ this.keepalive.interval(params.keepAliveIntervalSec);
74
+ console.log(`Keep alive interval set at: ${Config.KEEP_ALIVE_INTERVAL} seconds`);
75
+ this.keepalive.onPing.subscribe(() => this.onPing());
76
+ // If the browser tab has been closed for a period longer thant the inactivity
77
+ // period, then we should logout right from the start.
78
+ const idleExpiry = localStorage.getItem(this.IDLE_EXPIRY_KEY);
79
+ if (idleExpiry &&
80
+ parseInt(idleExpiry, 10) + this.idle.getTimeout() * 1000 < Date.now()) {
81
+ this.reset();
82
+ yield Promise.resolve(this.onTimeout && this.onTimeout());
83
+ }
84
+ });
85
+ }
86
+ keepalivePost() {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ // currentAuthenticatedUser() refreshes the access token if required.
89
+ const cognitoUser = yield this.auth.currentAuthenticatedUser();
90
+ const keepaliveResult = yield this.http
91
+ .post(`${this.config.authUrl}auth/keepalive/`, null, {
92
+ withCredentials: true,
93
+ headers: {
94
+ Authorization: `Bearer ${cognitoUser
95
+ .getSignInUserSession()
96
+ .getAccessToken()
97
+ .getJwtToken()}`,
98
+ },
99
+ })
100
+ .toPromise();
101
+ return {
102
+ keepaliveResult,
103
+ expiresAfterSeconds: this.idle.getIdle() +
104
+ this.idle.getTimeout() +
105
+ this.keepalive.interval(),
106
+ };
107
+ });
108
+ }
109
+ persistMasterKey(masterKey) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ // The keepalive API call extends the server-side session, the session cookie expiry, refresh key cookie
112
+ // expiry, and returns the session expiry.
113
+ // NOTE Use time delta rather than absolute time, since client clock and server clock maybe
114
+ // out of sync. We can't use the serverTime() functionality because the cookie expiry still
115
+ // run on local clock.
116
+ const { expiresAfterSeconds } = yield this.keepalivePost();
117
+ // Persist the derived passKey
118
+ yield this.keyService.persistMasterKey(masterKey, expiresAfterSeconds);
119
+ console.log('setMasterKey() done');
120
+ });
121
+ }
122
+ onPing() {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ console.log(`Keep alive triggered at time: ${Date.now()}. Interval set at: ${this.keepalive.interval()} seconds`);
125
+ // Keepalive API will extend the session expiry.
126
+ const { expiresAfterSeconds } = yield this.keepalivePost();
127
+ // Extend the expiry of the persisted key
128
+ yield this.keyService.setMasterKeyExpiresAfterSeconds(expiresAfterSeconds);
129
+ yield Promise.resolve(this.onKeepalive && this.onKeepalive());
130
+ });
131
+ }
132
+ start() {
133
+ return __awaiter(this, void 0, void 0, function* () {
134
+ if (!this.initCalled) {
135
+ yield this.init();
136
+ }
137
+ if (this.idle.isRunning()) {
138
+ return;
139
+ }
140
+ // Ping does not seem to happen right at the start. So we call it explicitly
141
+ yield this.onPing();
142
+ this.idle.watch();
143
+ });
144
+ }
145
+ stop() {
146
+ this.idle.stop();
147
+ this.reset();
148
+ }
149
+ reset() {
150
+ localStorage.removeItem(this.IDLE_EXPIRY_KEY);
151
+ localStorage.removeItem(this.IDLING_KEY);
152
+ }
153
+ }
154
+ IdleService.ɵprov = i0.ɵɵdefineInjectable({ factory: function IdleService_Factory() { return new IdleService(i0.ɵɵinject(i1.LR_CONFIG), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.Idle), i0.ɵɵinject(i4.Keepalive), i0.ɵɵinject(i5.KeyService), i0.ɵɵinject(i6.AuthClass)); }, token: IdleService, providedIn: "root" });
155
+ IdleService.decorators = [
156
+ { type: Injectable, args: [{
157
+ providedIn: 'root',
158
+ },] }
159
+ ];
160
+ IdleService.ctorParameters = () => [
161
+ { type: undefined, decorators: [{ type: Inject, args: [LR_CONFIG,] }] },
162
+ { type: HttpClient },
163
+ { type: Idle },
164
+ { type: Keepalive },
165
+ { type: KeyService },
166
+ { type: AuthClass }
167
+ ];
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hdXRoL2lkbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBbUIsTUFBTSxjQUFjLENBQUM7QUFHdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7OztBQWMzRCxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUM2QixNQUF1QixFQUMxQyxJQUFnQixFQUNoQixJQUFVLEVBQ1YsU0FBb0IsRUFDcEIsVUFBc0IsRUFDdEIsSUFBZTtRQUxJLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQzFDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUNWLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFXO1FBYlIsb0JBQWUsR0FBRyxxQkFBcUIsQ0FBQztRQUN4QyxlQUFVLEdBQUcscUJBQXFCLENBQUM7UUFFNUMsZUFB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QUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUs7UUFDWCxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxDQUFDOzs7O1lBdExGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQVVJLE1BQU0sU0FBQyxTQUFTO1lBM0JaLFVBQVU7WUFSVixJQUFJO1lBQ0osU0FBUztZQUNULFVBQVU7WUFVVixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElkbGUsIERFRkFVTFRfSU5URVJSVVBUU09VUkNFUyB9IGZyb20gJ0BuZy1pZGxlL2NvcmUnO1xyXG5pbXBvcnQgeyBLZWVwYWxpdmUgfSBmcm9tICdAbmctaWRsZS9rZWVwYWxpdmUnO1xyXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBMckJhZEFyZ3VtZW50RXhjZXB0aW9uLFxyXG4gIExyQmFkU3RhdGVFeGNlcHRpb24sXHJcbn0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcclxuaW1wb3J0IHsgTGlmZVJlYWR5Q29uZmlnLCBMUl9DT05GSUcgfSBmcm9tICcuLi9saWZlLXJlYWR5LmNvbmZpZyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbmZpZywgS2VlcGFsaXZlUmVzdWx0IH0gZnJvbSAnLi9pZGxlLnR5cGVzJztcclxuaW1wb3J0IHsgS2V5IH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeS50eXBlcyc7XHJcbmltcG9ydCB7IENvZ25pdG9Vc2VyIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgnO1xyXG5pbXBvcnQgeyBBdXRoQ2xhc3MgfSBmcm9tICdAYXdzLWFtcGxpZnkvYXV0aC9saWItZXNtL0F1dGgnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJZGxlU2VydmljZUluaXQge1xyXG4gIC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIEV2ZW50RW1pdHRlciBpbnN0ZWFkIG9mIGEgY2FsbGJhY2suXHJcbiAgb25UaW1lb3V0PzogKCgpID0+IGFueSkgfCAoKCkgPT4gUHJvbWlzZTxhbnk+KSB8IG51bGw7XHJcbiAgb25LZWVwYWxpdmU/OiAoKCkgPT4gYW55KSB8ICgoKSA9PiBQcm9taXNlPGFueT4pIHwgbnVsbDtcclxuICBpZGxlU2VjPzogbnVtYmVyO1xyXG4gIHRpbWVvdXRTZWM/OiBudW1iZXI7XHJcbiAga2VlcEFsaXZlSW50ZXJ2YWxTZWM/OiBudW1iZXI7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJZGxlU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBJRExFX0VYUElSWV9LRVkgPSAnbmcySWRsZS5tYWluLmV4cGlyeSc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBJRExJTkdfS0VZID0gJ25nMklkbGUubWFpbi5pZGxpbmcnO1xyXG5cclxuICBwcml2YXRlIGluaXRDYWxsZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIG9uVGltZW91dDogKCgpID0+IGFueSkgfCAoKCkgPT4gUHJvbWlzZTxhbnk+KSB8IG51bGw7XHJcbiAgcHJpdmF0ZSBvbktlZXBhbGl2ZTogKCgpID0+IGFueSkgfCAoKCkgPT4gUHJvbWlzZTxhbnk+KSB8IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChMUl9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBMaWZlUmVhZHlDb25maWcsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGlkbGU6IElkbGUsXHJcbiAgICBwcml2YXRlIGtlZXBhbGl2ZTogS2VlcGFsaXZlLFxyXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoQ2xhc3NcclxuICApIHt9XHJcblxyXG4gIHByaXZhdGUgYXNzZXJ0SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbml0Q2FsbGVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBMckJhZFN0YXRlRXhjZXB0aW9uKCdDYWxsIElkbGVTZXJ2aWNlLmluaXQoKSBmaXJzdC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0KHBhcmFtcz86IElkbGVTZXJ2aWNlSW5pdCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuaW5pdENhbGxlZCkge1xyXG4gICAgICB0aHJvdyBuZXcgTHJCYWRTdGF0ZUV4Y2VwdGlvbihcclxuICAgICAgICAnSWRsZVNlcnZpY2UuaW5pdCgpIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiBJZGxlU2VydmljZS5zdGFydCgpIGNhbGxzIGluaXQoKSB3aXRoIGRlZmF1bHQgdmFsdWVzIGlmIGluaXQoKSBoYXMgbm90IGJlZW4gY2FsbGVkIHlldC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Q2FsbGVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBEZWZhdWx0c1xyXG4gICAgcGFyYW1zID0ge1xyXG4gICAgICBvblRpbWVvdXQ6IG51bGwsXHJcbiAgICAgIG9uS2VlcGFsaXZlOiBudWxsLFxyXG4gICAgICBpZGxlU2VjOiBDb25maWcuSURMRSxcclxuICAgICAgdGltZW91dFNlYzogQ29uZmlnLlRJTUVPVVQsXHJcbiAgICAgIGtlZXBBbGl2ZUludGVydmFsU2VjOiBDb25maWcuS0VFUF9BTElWRV9JTlRFUlZBTCxcclxuICAgICAgLi4ucGFyYW1zLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBJZiB0aW1lb3V0U2VjID09IDAgdGhlbiB0aGUgb25UaW1lb3V0KCkgY2FsbGJhY2sgaXMgbmV2ZXIgY2FsbGVkLlxyXG4gICAgaWYgKHBhcmFtcy50aW1lb3V0U2VjIDwgMC4wMSkge1xyXG4gICAgICB0aHJvdyBuZXcgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbihcclxuICAgICAgICAnTWluaW11bSB2YWx1ZSBmb3IgSWRsZVNlcnZpY2UuaW5pdCh7IHRpbWVvdXRTZWMgfSkgaXMgMC4wMSdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uVGltZW91dCA9IHBhcmFtcy5vblRpbWVvdXQ7XHJcbiAgICB0aGlzLm9uS2VlcGFsaXZlID0gcGFyYW1zLm9uS2VlcGFsaXZlO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gU2V0dXAgSWRsZVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBzZXRzIGFuIGlkbGUgdGltZW91dCBvZiA1IHNlY29uZHMsIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxyXG4gICAgdGhpcy5pZGxlLnNldElkbGUocGFyYW1zLmlkbGVTZWMpO1xyXG4gICAgLy8gc2V0cyBhIHRpbWVvdXQgcGVyaW9kIG9mIDUgc2Vjb25kcy4gYWZ0ZXIgMTAgc2Vjb25kcyBvZiBpbmFjdGl2aXR5LCB0aGUgdXNlciB3aWxsIGJlIGNvbnNpZGVyZWQgdGltZWQgb3V0LlxyXG4gICAgdGhpcy5pZGxlLnNldFRpbWVvdXQocGFyYW1zLnRpbWVvdXRTZWMpO1xyXG4gICAgLy8gc2V0cyB0aGUgZGVmYXVsdCBpbnRlcnJ1cHRzLCBpbiB0aGlzIGNhc2UsIHRoaW5ncyBsaWtlIGNsaWNrcywgc2Nyb2xscywgdG91Y2hlcyB0byB0aGUgZG9jdW1lbnRcclxuICAgIHRoaXMuaWRsZS5zZXRJbnRlcnJ1cHRzKERFRkFVTFRfSU5URVJSVVBUU09VUkNFUyk7XHJcblxyXG4gICAgdGhpcy5pZGxlLm9uSWRsZUVuZC5zdWJzY3JpYmUoKCkgPT4gY29uc29sZS5sb2coJ0lkbGUgc3RvcHBlZCcpKTtcclxuICAgIHRoaXMuaWRsZS5vbklkbGVTdGFydC5zdWJzY3JpYmUoKCkgPT4gY29uc29sZS5sb2coJ0lkbGUgc3RhcnRlZCcpKTtcclxuXHJcbiAgICB0aGlzLmlkbGUub25UaW1lb3V0LnN1YnNjcmliZShhc3luYyAoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdJZGxlIHRpbWVkIG91dCcpO1xyXG4gICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLm9uVGltZW91dCAmJiB0aGlzLm9uVGltZW91dCgpKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5pZGxlLm9uVGltZW91dFdhcm5pbmcuc3Vic2NyaWJlKChjb3VudGRvd246IGFueSkgPT5cclxuICAgICAgY29uc29sZS5sb2coYFdpbGwgdGltZW91dCBpbiAke2NvdW50ZG93bn0gc2Vjb25kcyFgKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFNldHVwIEtlZXBhbGl2ZVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3JpYnZuZHZzL25nMi1pZGxlI3JlYWRtZVxyXG4gICAgLy8gbmctaWRsZSB3aWxsIGluc3RydWN0IEBuZy1pZGxlL2tlZXBhbGl2ZSB0byBwaW5nIHdoaWxlIHRoZSB1c2VyIGlzIGFjdGl2ZSwgYW5kIHN0b3Agb25jZVxyXG4gICAgLy8gdGhleSBnbyBpZGxlIG9yIHRpbWUgb3V0LiBXaGVuIHRoZSB1c2VyIHJlc3VtZXMgYWN0aXZpdHkgb3IgdGhlIGlkbGUgc3RhdGUgaXMgcmVzZXQsIGl0IHdpbGxcclxuICAgIC8vIHBpbmcgaW1tZWRpYXRlbHkgYW5kIHRoZW4gcmVzdW1lIHBpbmdpbmcuXHJcbiAgICB0aGlzLmtlZXBhbGl2ZS5pbnRlcnZhbChwYXJhbXMua2VlcEFsaXZlSW50ZXJ2YWxTZWMpO1xyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgIGBLZWVwIGFsaXZlIGludGVydmFsIHNldCBhdDogJHtDb25maWcuS0VFUF9BTElWRV9JTlRFUlZBTH0gc2Vjb25kc2BcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5rZWVwYWxpdmUub25QaW5nLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uUGluZygpKTtcclxuXHJcbiAgICAvLyBJZiB0aGUgYnJvd3NlciB0YWIgaGFzIGJlZW4gY2xvc2VkIGZvciBhIHBlcmlvZCBsb25nZXIgdGhhbnQgdGhlIGluYWN0aXZpdHlcclxuICAgIC8vIHBlcmlvZCwgdGhlbiB3ZSBzaG91bGQgbG9nb3V0IHJpZ2h0IGZyb20gdGhlIHN0YXJ0LlxyXG4gICAgY29uc3QgaWRsZUV4cGlyeSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuSURMRV9FWFBJUllfS0VZKTtcclxuICAgIGlmIChcclxuICAgICAgaWRsZUV4cGlyeSAmJlxyXG4gICAgICBwYXJzZUludChpZGxlRXhwaXJ5LCAxMCkgKyB0aGlzLmlkbGUuZ2V0VGltZW91dCgpICogMTAwMCA8IERhdGUubm93KClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLm9uVGltZW91dCAmJiB0aGlzLm9uVGltZW91dCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBrZWVwYWxpdmVQb3N0KCk6IFByb21pc2U8e1xyXG4gICAgZXhwaXJlc0FmdGVyU2Vjb25kczogbnVtYmVyO1xyXG4gICAga2VlcGFsaXZlUmVzdWx0OiBLZWVwYWxpdmVSZXN1bHQ7XHJcbiAgfT4ge1xyXG4gICAgLy8gY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyKCkgcmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4gaWYgcmVxdWlyZWQuXHJcbiAgICBjb25zdCBjb2duaXRvVXNlcjogQ29nbml0b1VzZXIgPSBhd2FpdCB0aGlzLmF1dGguY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyKCk7XHJcblxyXG4gICAgY29uc3Qga2VlcGFsaXZlUmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0PEtlZXBhbGl2ZVJlc3VsdD4oYCR7dGhpcy5jb25maWcuYXV0aFVybH1hdXRoL2tlZXBhbGl2ZS9gLCBudWxsLCB7XHJcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLCAvLyAvYXV0aC9rZWVwYWxpdmUvIHdpbGwgYmUgZXh0ZW5kaW5nIHRoZSBzZXNzaW9ucyBjb29raWUuXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvZ25pdG9Vc2VyXHJcbiAgICAgICAgICAgIC5nZXRTaWduSW5Vc2VyU2Vzc2lvbigpXHJcbiAgICAgICAgICAgIC5nZXRBY2Nlc3NUb2tlbigpXHJcbiAgICAgICAgICAgIC5nZXRKd3RUb2tlbigpfWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGtlZXBhbGl2ZVJlc3VsdCxcclxuICAgICAgZXhwaXJlc0FmdGVyU2Vjb25kczpcclxuICAgICAgICB0aGlzLmlkbGUuZ2V0SWRsZSgpICtcclxuICAgICAgICB0aGlzLmlkbGUuZ2V0VGltZW91dCgpICtcclxuICAgICAgICB0aGlzLmtlZXBhbGl2ZS5pbnRlcnZhbCgpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZXJzaXN0TWFzdGVyS2V5KG1hc3RlcktleTogS2V5KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBUaGUga2VlcGFsaXZlIEFQSSBjYWxsIGV4dGVuZHMgdGhlIHNlcnZlci1zaWRlIHNlc3Npb24sIHRoZSBzZXNzaW9uIGNvb2tpZSBleHBpcnksIHJlZnJlc2gga2V5IGNvb2tpZVxyXG4gICAgLy8gZXhwaXJ5LCBhbmQgcmV0dXJucyB0aGUgc2Vzc2lvbiBleHBpcnkuXHJcbiAgICAvLyBOT1RFIFVzZSB0aW1lIGRlbHRhIHJhdGhlciB0aGFuIGFic29sdXRlIHRpbWUsIHNpbmNlIGNsaWVudCBjbG9jayBhbmQgc2VydmVyIGNsb2NrIG1heWJlXHJcbiAgICAvLyBvdXQgb2Ygc3luYy4gV2UgY2FuJ3QgdXNlIHRoZSBzZXJ2ZXJUaW1lKCkgZnVuY3Rpb25hbGl0eSBiZWNhdXNlIHRoZSBjb29raWUgZXhwaXJ5IHN0aWxsXHJcbiAgICAvLyBydW4gb24gbG9jYWwgY2xvY2suXHJcbiAgICBjb25zdCB7IGV4cGlyZXNBZnRlclNlY29uZHMgfSA9IGF3YWl0IHRoaXMua2VlcGFsaXZlUG9zdCgpO1xyXG5cclxuICAgIC8vIFBlcnNpc3QgdGhlIGRlcml2ZWQgcGFzc0tleVxyXG4gICAgYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLnBlcnNpc3RNYXN0ZXJLZXkobWFzdGVyS2V5LCBleHBpcmVzQWZ0ZXJTZWNvbmRzKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygnc2V0TWFzdGVyS2V5KCkgZG9uZScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblBpbmcoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zb2xlLmxvZyhcclxuICAgICAgYEtlZXAgYWxpdmUgdHJpZ2dlcmVkIGF0IHRpbWU6ICR7RGF0ZS5ub3coKX0uIEludGVydmFsIHNldCBhdDogJHt0aGlzLmtlZXBhbGl2ZS5pbnRlcnZhbCgpfSBzZWNvbmRzYFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBLZWVwYWxpdmUgQVBJIHdpbGwgZXh0ZW5kIHRoZSBzZXNzaW9uIGV4cGlyeS5cclxuICAgIGNvbnN0IHsgZXhwaXJlc0FmdGVyU2Vjb25kcyB9ID0gYXdhaXQgdGhpcy5rZWVwYWxpdmVQb3N0KCk7XHJcblxyXG4gICAgLy8gRXh0ZW5kIHRoZSBleHBpcnkgb2YgdGhlIHBlcnNpc3RlZCBrZXlcclxuICAgIGF3YWl0IHRoaXMua2V5U2VydmljZS5zZXRNYXN0ZXJLZXlFeHBpcmVzQWZ0ZXJTZWNvbmRzKGV4cGlyZXNBZnRlclNlY29uZHMpO1xyXG5cclxuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSh0aGlzLm9uS2VlcGFsaXZlICYmIHRoaXMub25LZWVwYWxpdmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdENhbGxlZCkge1xyXG4gICAgICBhd2FpdCB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pZGxlLmlzUnVubmluZygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQaW5nIGRvZXMgbm90IHNlZW0gdG8gaGFwcGVuIHJpZ2h0IGF0IHRoZSBzdGFydC4gU28gd2UgY2FsbCBpdCBleHBsaWNpdGx5XHJcbiAgICBhd2FpdCB0aGlzLm9uUGluZygpO1xyXG5cclxuICAgIHRoaXMuaWRsZS53YXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0b3AoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlkbGUuc3RvcCgpO1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldCgpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuSURMRV9FWFBJUllfS0VZKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuSURMSU5HX0tFWSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,7 +1,7 @@
1
- export var Config;
2
- (function (Config) {
3
- Config[Config["TIMEOUT"] = 0.01] = "TIMEOUT";
4
- Config[Config["IDLE"] = 1200] = "IDLE";
5
- Config[Config["KEEP_ALIVE_INTERVAL"] = 60] = "KEEP_ALIVE_INTERVAL";
6
- })(Config || (Config = {}));
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXV0aC9pZGxlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLE1BSVg7QUFKRCxXQUFZLE1BQU07SUFDaEIsNENBQWMsQ0FBQTtJQUNkLHNDQUFjLENBQUE7SUFDZCxrRUFBNEIsQ0FBQTtBQUM5QixDQUFDLEVBSlcsTUFBTSxLQUFOLE1BQU0sUUFJakIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBDb25maWcge1xuICBUSU1FT1VUID0gMC4wMSwgLy8gc2Vjb25kcywgbWluIHZhbHVlIDAuMDEsIGFmdGVyIHN0YXRlIGlzIGlkbGUsIHdhaXQgZm9yIFRJTUVPVVQgc2Vjb25kcyBiZWZvcmUgdGFraW5nIGFjdGlvblxuICBJRExFID0gNjAgKiAyMCwgLy8gc2Vjb25kcywgcGVyaW9kIG9mIGluYWN0aXZpdHkgdG8gY29uc2lkZXIgc3RhdGUgYXMgaWRsZVxuICBLRUVQX0FMSVZFX0lOVEVSVkFMID0gNjAgKiAxLCAvLyBzZWNvbmRzLCB0cmlnZ2VyZWQgb24gYSByZWd1bGFyIGJhc2lzIHdoaWxlIGFjdGl2ZSAoaS5lLiB3aGlsZSBub3QgaWRsaW5nKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtlZXBhbGl2ZVJlc3VsdCB7XG4gIHNlc3Npb246IHtcbiAgICBleHBpcmVzX2FmdGVyX3NlY29uZHM6IG51bWJlcjtcbiAgfTtcbn1cbiJdfQ==
1
+ export var Config;
2
+ (function (Config) {
3
+ Config[Config["TIMEOUT"] = 0.01] = "TIMEOUT";
4
+ Config[Config["IDLE"] = 1200] = "IDLE";
5
+ Config[Config["KEEP_ALIVE_INTERVAL"] = 60] = "KEEP_ALIVE_INTERVAL";
6
+ })(Config || (Config = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9rYy1jbGllbnQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXV0aC9pZGxlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLE1BSVg7QUFKRCxXQUFZLE1BQU07SUFDaEIsNENBQWMsQ0FBQTtJQUNkLHNDQUFjLENBQUE7SUFDZCxrRUFBNEIsQ0FBQTtBQUM5QixDQUFDLEVBSlcsTUFBTSxLQUFOLE1BQU0sUUFJakIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBDb25maWcge1xyXG4gIFRJTUVPVVQgPSAwLjAxLCAvLyBzZWNvbmRzLCBtaW4gdmFsdWUgMC4wMSwgYWZ0ZXIgc3RhdGUgaXMgaWRsZSwgd2FpdCBmb3IgVElNRU9VVCBzZWNvbmRzIGJlZm9yZSB0YWtpbmcgYWN0aW9uXHJcbiAgSURMRSA9IDYwICogMjAsIC8vIHNlY29uZHMsIHBlcmlvZCBvZiBpbmFjdGl2aXR5IHRvIGNvbnNpZGVyIHN0YXRlIGFzIGlkbGVcclxuICBLRUVQX0FMSVZFX0lOVEVSVkFMID0gNjAgKiAxLCAvLyBzZWNvbmRzLCB0cmlnZ2VyZWQgb24gYSByZWd1bGFyIGJhc2lzIHdoaWxlIGFjdGl2ZSAoaS5lLiB3aGlsZSBub3QgaWRsaW5nKVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEtlZXBhbGl2ZVJlc3VsdCB7XHJcbiAgc2Vzc2lvbjoge1xyXG4gICAgZXhwaXJlc19hZnRlcl9zZWNvbmRzOiBudW1iZXI7XHJcbiAgfTtcclxufVxyXG4iXX0=