@lifeready/core 1.0.2 → 1.0.4

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 (225) hide show
  1. package/README.md +62 -62
  2. package/bundles/lifeready-core.umd.js +15445 -15445
  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 +44 -44
  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/item2.gql.js +110 -110
  18. package/esm2015/lib/api/item2.service.js +311 -311
  19. package/esm2015/lib/api/key-exchange.gql.js +188 -188
  20. package/esm2015/lib/api/key-exchange.service.js +442 -442
  21. package/esm2015/lib/api/key-exchange.types.js +18 -18
  22. package/esm2015/lib/api/key-exchange2.gql.js +171 -171
  23. package/esm2015/lib/api/key-exchange2.service.js +479 -479
  24. package/esm2015/lib/api/lock.gql.js +40 -40
  25. package/esm2015/lib/api/lock.service.js +64 -64
  26. package/esm2015/lib/api/lr-apollo.service.js +46 -46
  27. package/esm2015/lib/api/lr-graphql/index.js +6 -6
  28. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
  29. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
  30. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
  31. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
  32. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
  33. package/esm2015/lib/api/message.service.js +138 -138
  34. package/esm2015/lib/api/persist.service.js +181 -181
  35. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
  36. package/esm2015/lib/api/query-processor/index.js +3 -3
  37. package/esm2015/lib/api/query-processor/query-processor.service.js +192 -192
  38. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
  39. package/esm2015/lib/api/shared-contact-card.service.js +119 -119
  40. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
  41. package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
  42. package/esm2015/lib/api/time.service.js +146 -146
  43. package/esm2015/lib/api/types/graphql.types.js +7 -7
  44. package/esm2015/lib/api/types/index.js +3 -3
  45. package/esm2015/lib/api/types/lr-graphql.types.js +71 -71
  46. package/esm2015/lib/auth/auth.config.js +57 -57
  47. package/esm2015/lib/auth/auth.gql.js +48 -48
  48. package/esm2015/lib/auth/auth.types.js +27 -27
  49. package/esm2015/lib/auth/idle.service.js +168 -168
  50. package/esm2015/lib/auth/idle.types.js +7 -7
  51. package/esm2015/lib/auth/lbop.service.js +355 -355
  52. package/esm2015/lib/auth/life-ready-auth.service.js +500 -500
  53. package/esm2015/lib/auth/password.service.js +320 -320
  54. package/esm2015/lib/auth/register.service.js +172 -172
  55. package/esm2015/lib/auth/two-factor.service.js +74 -74
  56. package/esm2015/lib/category/category-meta.service.js +99 -99
  57. package/esm2015/lib/category/category.gql.js +406 -406
  58. package/esm2015/lib/category/category.service.js +390 -390
  59. package/esm2015/lib/category/category.types.js +29 -29
  60. package/esm2015/lib/cryptography/cryptography.types.js +11 -11
  61. package/esm2015/lib/cryptography/encryption.service.js +189 -189
  62. package/esm2015/lib/cryptography/key-factory.service.js +237 -237
  63. package/esm2015/lib/cryptography/key-graph.service.js +280 -280
  64. package/esm2015/lib/cryptography/key-meta.service.js +200 -200
  65. package/esm2015/lib/cryptography/key.service.js +124 -124
  66. package/esm2015/lib/cryptography/slip39.service.js +169 -169
  67. package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
  68. package/esm2015/lib/life-ready.config.js +84 -84
  69. package/esm2015/lib/life-ready.module.js +74 -74
  70. package/esm2015/lib/plan/plan.gql.js +123 -123
  71. package/esm2015/lib/plan/plan.service.js +149 -149
  72. package/esm2015/lib/plan/plan.types.js +11 -11
  73. package/esm2015/lib/record/record-attachment.service.js +101 -101
  74. package/esm2015/lib/record/record.gql.js +179 -179
  75. package/esm2015/lib/record/record.service.js +206 -206
  76. package/esm2015/lib/record/record.types.js +15 -15
  77. package/esm2015/lib/record-type/record-type.service.js +75 -75
  78. package/esm2015/lib/record-type/record-type.types.js +28 -28
  79. package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -105
  80. package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -1
  81. package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -300
  82. package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -52
  83. package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -97
  84. package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -1
  85. package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -150
  86. package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -229
  87. package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -1
  88. package/esm2015/lib/scenario/scenario-setup.service.js +269 -269
  89. package/esm2015/lib/scenario/scenario.gql.js +368 -368
  90. package/esm2015/lib/scenario/scenario.service.js +611 -611
  91. package/esm2015/lib/scenario/scenario.types.js +64 -64
  92. package/esm2015/lib/search/search.gql.js +62 -62
  93. package/esm2015/lib/search/search.service.js +156 -156
  94. package/esm2015/lib/search/search.types.js +6 -6
  95. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -112
  96. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
  97. package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
  98. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -232
  99. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +299 -299
  100. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
  101. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
  102. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
  103. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
  104. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
  105. package/esm2015/lib/users/profile-details.service.js +214 -214
  106. package/esm2015/lib/users/profile.gql.js +97 -97
  107. package/esm2015/lib/users/profile.service.js +169 -169
  108. package/esm2015/lib/users/profile.types.js +34 -34
  109. package/esm2015/lib/users/user.gql.js +60 -60
  110. package/esm2015/lib/users/user.service.js +79 -79
  111. package/esm2015/lib/users/user.types.js +5 -5
  112. package/esm2015/lifeready-core.js +10 -10
  113. package/esm2015/public-api.js +81 -81
  114. package/fesm2015/lifeready-core.js +13088 -13088
  115. package/fesm2015/lifeready-core.js.map +1 -1
  116. package/lib/_common/ast.d.ts +11 -11
  117. package/lib/_common/deferred-promise.d.ts +12 -12
  118. package/lib/_common/exceptions.d.ts +109 -109
  119. package/lib/_common/queries.gql.d.ts +10 -10
  120. package/lib/_common/run-outside-angular.d.ts +14 -14
  121. package/lib/_common/types.d.ts +10 -10
  122. package/lib/_common/utils.d.ts +3 -3
  123. package/lib/api/contact-card.gql.d.ts +7 -7
  124. package/lib/api/contact-card.service.d.ts +52 -52
  125. package/lib/api/contact-card2.gql.d.ts +34 -34
  126. package/lib/api/contact-card2.service.d.ts +49 -49
  127. package/lib/api/file.service.d.ts +18 -18
  128. package/lib/api/item2.gql.d.ts +96 -96
  129. package/lib/api/item2.service.d.ts +177 -177
  130. package/lib/api/key-exchange.gql.d.ts +9 -9
  131. package/lib/api/key-exchange.service.d.ts +39 -39
  132. package/lib/api/key-exchange.types.d.ts +196 -196
  133. package/lib/api/key-exchange2.gql.d.ts +125 -125
  134. package/lib/api/key-exchange2.service.d.ts +187 -187
  135. package/lib/api/lock.gql.d.ts +27 -27
  136. package/lib/api/lock.service.d.ts +25 -25
  137. package/lib/api/lr-apollo.service.d.ts +15 -15
  138. package/lib/api/lr-graphql/index.d.ts +5 -5
  139. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
  140. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -27
  141. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
  142. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
  143. package/lib/api/lr-graphql/lr.service.d.ts +9 -9
  144. package/lib/api/message.service.d.ts +58 -58
  145. package/lib/api/persist.service.d.ts +31 -31
  146. package/lib/api/query-processor/common-processors.service.d.ts +36 -36
  147. package/lib/api/query-processor/index.d.ts +2 -2
  148. package/lib/api/query-processor/query-processor.service.d.ts +18 -18
  149. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
  150. package/lib/api/shared-contact-card.service.d.ts +33 -33
  151. package/lib/api/shared-contact-card2.gql.d.ts +36 -36
  152. package/lib/api/shared-contact-card2.service.d.ts +45 -45
  153. package/lib/api/time.service.d.ts +16 -16
  154. package/lib/api/types/graphql.types.d.ts +29 -29
  155. package/lib/api/types/index.d.ts +2 -2
  156. package/lib/api/types/lr-graphql.types.d.ts +385 -385
  157. package/lib/auth/auth.config.d.ts +5 -5
  158. package/lib/auth/auth.gql.d.ts +15 -15
  159. package/lib/auth/auth.types.d.ts +66 -66
  160. package/lib/auth/idle.service.d.ts +40 -40
  161. package/lib/auth/idle.types.d.ts +10 -10
  162. package/lib/auth/lbop.service.d.ts +91 -91
  163. package/lib/auth/life-ready-auth.service.d.ts +59 -59
  164. package/lib/auth/password.service.d.ts +78 -78
  165. package/lib/auth/register.service.d.ts +25 -25
  166. package/lib/auth/two-factor.service.d.ts +15 -15
  167. package/lib/category/category-meta.service.d.ts +23 -23
  168. package/lib/category/category.gql.d.ts +45 -45
  169. package/lib/category/category.service.d.ts +67 -67
  170. package/lib/category/category.types.d.ts +79 -79
  171. package/lib/cryptography/cryptography.types.d.ts +83 -83
  172. package/lib/cryptography/encryption.service.d.ts +41 -41
  173. package/lib/cryptography/key-factory.service.d.ts +38 -38
  174. package/lib/cryptography/key-graph.service.d.ts +33 -33
  175. package/lib/cryptography/key-meta.service.d.ts +44 -44
  176. package/lib/cryptography/key.service.d.ts +36 -36
  177. package/lib/cryptography/slip39.service.d.ts +43 -43
  178. package/lib/cryptography/web-crypto.service.d.ts +5 -5
  179. package/lib/life-ready.config.d.ts +14 -14
  180. package/lib/life-ready.module.d.ts +5 -5
  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/approvals/scenario-approval.gql.d.ts +7 -7
  191. package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -63
  192. package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -32
  193. package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -5
  194. package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -17
  195. package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -18
  196. package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -8
  197. package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -30
  198. package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -54
  199. package/lib/scenario/scenario-setup.service.d.ts +22 -22
  200. package/lib/scenario/scenario.gql.d.ts +34 -34
  201. package/lib/scenario/scenario.service.d.ts +58 -58
  202. package/lib/scenario/scenario.types.d.ts +217 -217
  203. package/lib/search/search.gql.d.ts +1 -1
  204. package/lib/search/search.service.d.ts +25 -25
  205. package/lib/search/search.types.d.ts +20 -20
  206. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
  207. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
  208. package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
  209. package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -218
  210. package/lib/trusted-parties/tp-password-reset.service.d.ts +130 -130
  211. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
  212. package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
  213. package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
  214. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
  215. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
  216. package/lib/users/profile-details.service.d.ts +21 -21
  217. package/lib/users/profile.gql.d.ts +11 -11
  218. package/lib/users/profile.service.d.ts +35 -35
  219. package/lib/users/profile.types.d.ts +96 -96
  220. package/lib/users/user.gql.d.ts +9 -9
  221. package/lib/users/user.service.d.ts +12 -12
  222. package/lib/users/user.types.d.ts +23 -23
  223. package/lifeready-core.d.ts +9 -9
  224. package/package.json +1 -1
  225. package/public-api.d.ts +77 -77
@@ -1,117 +1,117 @@
1
- import { __awaiter, __decorate } from "tslib";
2
- import { Injectable, NgZone } from '@angular/core';
3
- import { EncryptionService } from '../cryptography/encryption.service';
4
- import { KeyGraphService } from '../cryptography/key-graph.service';
5
- import { KeyService } from '../cryptography/key.service';
6
- import { RunOutsideAngular } from '../_common/run-outside-angular';
7
- import { LrGraphQLService, LrMutation } from './lr-graphql';
8
- import { GetOwnedContactCardKeyIdsQuery, GetReceivedContactCardKeyIdQuery, UpdateOwnedContactCardMutation, UpdateReceivedContactCardMutation, } from './shared-contact-card2.gql';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../cryptography/key.service";
11
- import * as i2 from "../cryptography/key-graph.service";
12
- import * as i3 from "../cryptography/encryption.service";
13
- import * as i4 from "./lr-graphql/lr-graphql.service";
14
- let SharedContactCard2Service = class SharedContactCard2Service {
15
- constructor(ngZone, keyService, keyGraph, encryptionService, lrGraphQL) {
16
- this.ngZone = ngZone;
17
- this.keyService = keyService;
18
- this.keyGraph = keyGraph;
19
- this.encryptionService = encryptionService;
20
- this.lrGraphQL = lrGraphQL;
21
- }
22
- getOwnedContactCardKeyIds(id) {
23
- return __awaiter(this, void 0, void 0, function* () {
24
- const { ownedContactCard: cc } = yield this.lrGraphQL.query({
25
- query: GetOwnedContactCardKeyIdsQuery,
26
- variables: {
27
- id,
28
- },
29
- });
30
- return {
31
- sharedKeyId: cc.sharedKey.id,
32
- ownerKeyId: cc.ownerKey.id,
33
- };
34
- });
35
- }
36
- getReceivedContactCardKeyId(id) {
37
- return __awaiter(this, void 0, void 0, function* () {
38
- return (yield this.lrGraphQL.query({
39
- query: GetReceivedContactCardKeyIdQuery,
40
- variables: {
41
- id,
42
- },
43
- })).receivedContactCard.receiverKey.id;
44
- });
45
- }
46
- updateOwnedContactCard({ id, ownerKeyId, sharedKeyId, ownerPlainDataJson, ownerCipherDataClearJson, sharedCipherDataClearJson, }) {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- let ownerKey;
49
- let sharedKey;
50
- try {
51
- ownerKey = yield this.keyGraph.getKey(ownerKeyId);
52
- sharedKey = yield this.keyGraph.getKey(sharedKeyId);
53
- }
54
- catch (error) {
55
- const keys = yield this.getOwnedContactCardKeyIds(id);
56
- // try again
57
- ownerKey = yield this.keyGraph.getKey(keys.ownerKeyId);
58
- sharedKey = yield this.keyGraph.getKey(keys.sharedKeyId);
59
- }
60
- const sigPxk = yield this.keyService.getCurrentSigPxk();
61
- const sharedCipherData = yield this.encryptionService.encrypt(sharedKey.jwk, sharedCipherDataClearJson);
62
- const sharedCipherDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, sharedCipherData));
63
- const ownerPlainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ownerPlainDataJson));
64
- const ownerCipherData = yield this.encryptionService.encryptToString(ownerKey.jwk, ownerCipherDataClearJson);
65
- return new LrMutation({
66
- mutation: UpdateOwnedContactCardMutation,
67
- variables: {
68
- input: {
69
- id,
70
- ownerCipherData,
71
- ownerKeyId: ownerKey.id,
72
- sharedCipherDataSig,
73
- sharedKeyId: sharedKey.id,
74
- sigPxkId: sigPxk.id,
75
- ownerPlainDataSig,
76
- },
77
- },
78
- });
79
- });
80
- }
81
- updateReceivedContactCard({ id, receiverKeyId, receiverCipherDataClearJson, }) {
82
- return __awaiter(this, void 0, void 0, function* () {
83
- const receiverKey = yield this.keyGraph.getKey(receiverKeyId, () => this.getReceivedContactCardKeyId(id));
84
- const receiverCipherData = yield this.encryptionService.encryptToString(receiverKey.jwk, receiverCipherDataClearJson);
85
- return new LrMutation({
86
- mutation: UpdateReceivedContactCardMutation,
87
- variables: {
88
- input: {
89
- id,
90
- receiverCipherData,
91
- receiverKeyId: receiverKey.id,
92
- },
93
- },
94
- });
95
- });
96
- }
97
- };
98
- SharedContactCard2Service.ɵprov = i0.ɵɵdefineInjectable({ factory: function SharedContactCard2Service_Factory() { return new SharedContactCard2Service(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.KeyService), i0.ɵɵinject(i2.KeyGraphService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.LrGraphQLService)); }, token: SharedContactCard2Service, providedIn: "root" });
99
- SharedContactCard2Service.decorators = [
100
- { type: Injectable, args: [{
101
- providedIn: 'root',
102
- },] }
103
- ];
104
- SharedContactCard2Service.ctorParameters = () => [
105
- { type: NgZone },
106
- { type: KeyService },
107
- { type: KeyGraphService },
108
- { type: EncryptionService },
109
- { type: LrGraphQLService }
110
- ];
111
- SharedContactCard2Service = __decorate([
112
- RunOutsideAngular({
113
- ngZoneName: 'ngZone',
114
- })
115
- ], SharedContactCard2Service);
116
- export { SharedContactCard2Service };
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhY3QtY2FyZDIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL3NoYXJlZC1jb250YWN0LWNhcmQyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIsaUNBQWlDLEdBQ2xDLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztJQXFCdkIseUJBQXlCLFNBQXpCLHlCQUF5QjtJQUNwQyxZQUNVLE1BQWMsRUFDZCxVQUFzQixFQUN0QixRQUF5QixFQUN6QixpQkFBb0MsRUFDcEMsU0FBMkI7UUFKM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUNsQyxDQUFDO0lBRVUseUJBQXlCLENBQUMsRUFBa0I7O1lBQ3hELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENB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QUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQ2pFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FDckMsQ0FBQztZQUVGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUNyRSxXQUFXLENBQUMsR0FBRyxFQUNmLDJCQUEyQixDQUM1QixDQUFDO1lBRUYsT0FBTyxJQUFJLFVBQVUsQ0FBQztnQkFDcEIsUUFBUSxFQUFFLGlDQUFpQztnQkFDM0MsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRTt3QkFDTCxFQUFFO3dCQUNGLGtCQUFrQjt3QkFDbEIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFO3FCQUM5QjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtDQUNGLENBQUE7OztZQXZIQSxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQXBDb0IsTUFBTTtZQUlsQixVQUFVO1lBRFYsZUFBZTtZQURmLGlCQUFpQjtZQVFqQixnQkFBZ0I7O0FBMkJaLHlCQUF5QjtJQU5yQyxpQkFBaUIsQ0FBQztRQUNqQixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0dBSVcseUJBQXlCLENBb0hyQztTQXBIWSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtleSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHkudHlwZXMnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7XG4gIENvbnRhY3RDYXJkUmVjZWl2ZXJDaXBoZXJEYXRhLFxuICBTZW5kQ29udGFjdENhcmRJbnB1dCxcbn0gZnJvbSAnLi9rZXktZXhjaGFuZ2UyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTHJHcmFwaFFMU2VydmljZSwgTHJNdXRhdGlvbiB9IGZyb20gJy4vbHItZ3JhcGhxbCc7XG5pbXBvcnQge1xuICBHZXRPd25lZENvbnRhY3RDYXJkS2V5SWRzUXVlcnksXG4gIEdldFJlY2VpdmVkQ29udGFjdENhcmRLZXlJZFF1ZXJ5LFxuICBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24sXG4gIFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRNdXRhdGlvbixcbn0gZnJvbSAnLi9zaGFyZWQtY29udGFjdC1jYXJkMi5ncWwnO1xuaW1wb3J0IHsgTHJSZWxheUlkSW5wdXQgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVPd25lZENvbnRhY3RDYXJkSW5wdXQgZXh0ZW5kcyBTZW5kQ29udGFjdENhcmRJbnB1dCB7XG4gIGlkOiBMclJlbGF5SWRJbnB1dDtcbiAgb3duZXJLZXlJZD86IExyUmVsYXlJZElucHV0O1xuICBzaGFyZWRLZXlJZD86IExyUmVsYXlJZElucHV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRJbnB1dFxuICBleHRlbmRzIENvbnRhY3RDYXJkUmVjZWl2ZXJDaXBoZXJEYXRhIHtcbiAgaWQ6IExyUmVsYXlJZElucHV0O1xuICByZWNlaXZlcktleUlkPzogTHJSZWxheUlkSW5wdXQ7XG59XG5cbkBSdW5PdXRzaWRlQW5ndWxhcih7XG4gIG5nWm9uZU5hbWU6ICduZ1pvbmUnLFxufSlcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWRDb250YWN0Q2FyZDJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbHJHcmFwaFFMOiBMckdyYXBoUUxTZXJ2aWNlXG4gICkge31cblxuICBwcml2YXRlIGFzeW5jIGdldE93bmVkQ29udGFjdENhcmRLZXlJZHMoaWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgY29uc3QgeyBvd25lZENvbnRhY3RDYXJkOiBjYyB9ID0gYXdhaXQgdGhpcy5sckdyYXBoUUwucXVlcnkoe1xuICAgICAgcXVlcnk6IEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkS2V5SWQ6IGNjLnNoYXJlZEtleS5pZCxcbiAgICAgIG93bmVyS2V5SWQ6IGNjLm93bmVyS2V5LmlkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJlY2VpdmVkQ29udGFjdENhcmRLZXlJZChpZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5sckdyYXBoUUwucXVlcnkoe1xuICAgICAgICBxdWVyeTogR2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkUXVlcnksXG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLnJlY2VpdmVkQ29udGFjdENhcmQucmVjZWl2ZXJLZXkuaWQ7XG4gIH1cblxuICBhc3luYyB1cGRhdGVPd25lZENvbnRhY3RDYXJkKHtcbiAgICBpZCxcbiAgICBvd25lcktleUlkLFxuICAgIHNoYXJlZEtleUlkLFxuICAgIG93bmVyUGxhaW5EYXRhSnNvbixcbiAgICBvd25lckNpcGhlckRhdGFDbGVhckpzb24sXG4gICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgfTogVXBkYXRlT3duZWRDb250YWN0Q2FyZElucHV0KSB7XG4gICAgbGV0IG93bmVyS2V5OiBLZXk7XG4gICAgbGV0IHNoYXJlZEtleTogS2V5O1xuXG4gICAgdHJ5IHtcbiAgICAgIG93bmVyS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkob3duZXJLZXlJZCk7XG4gICAgICBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShzaGFyZWRLZXlJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCB0aGlzLmdldE93bmVkQ29udGFjdENhcmRLZXlJZHMoaWQpO1xuXG4gICAgICAvLyB0cnkgYWdhaW5cbiAgICAgIG93bmVyS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoa2V5cy5vd25lcktleUlkKTtcbiAgICAgIHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KGtleXMuc2hhcmVkS2V5SWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ1B4ayA9IGF3YWl0IHRoaXMua2V5U2VydmljZS5nZXRDdXJyZW50U2lnUHhrKCk7XG5cbiAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxuICAgICAgc2hhcmVkS2V5Lmp3ayxcbiAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb25cbiAgICApO1xuICAgIGNvbnN0IHNoYXJlZENpcGhlckRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCBzaGFyZWRDaXBoZXJEYXRhKVxuICAgICk7XG5cbiAgICBjb25zdCBvd25lclBsYWluRGF0YVNpZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssIG93bmVyUGxhaW5EYXRhSnNvbilcbiAgICApO1xuXG4gICAgY29uc3Qgb3duZXJDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBvd25lcktleS5qd2ssXG4gICAgICBvd25lckNpcGhlckRhdGFDbGVhckpzb25cbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvd25lckNpcGhlckRhdGEsXG4gICAgICAgICAgb3duZXJLZXlJZDogb3duZXJLZXkuaWQsXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YVNpZyxcbiAgICAgICAgICBzaGFyZWRLZXlJZDogc2hhcmVkS2V5LmlkLFxuICAgICAgICAgIHNpZ1B4a0lkOiBzaWdQeGsuaWQsXG4gICAgICAgICAgb3duZXJQbGFpbkRhdGFTaWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZCh7XG4gICAgaWQsXG4gICAgcmVjZWl2ZXJLZXlJZCxcbiAgICByZWNlaXZlckNpcGhlckRhdGFDbGVhckpzb24sXG4gIH06IFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRJbnB1dCkge1xuICAgIGNvbnN0IHJlY2VpdmVyS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkocmVjZWl2ZXJLZXlJZCwgKCkgPT5cbiAgICAgIHRoaXMuZ2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkKGlkKVxuICAgICk7XG5cbiAgICBjb25zdCByZWNlaXZlckNpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHJlY2VpdmVyS2V5Lmp3ayxcbiAgICAgIHJlY2VpdmVyQ2lwaGVyRGF0YUNsZWFySnNvblxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIHJlY2VpdmVyQ2lwaGVyRGF0YSxcbiAgICAgICAgICByZWNlaXZlcktleUlkOiByZWNlaXZlcktleS5pZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { Injectable, NgZone } from '@angular/core';
3
+ import { EncryptionService } from '../cryptography/encryption.service';
4
+ import { KeyGraphService } from '../cryptography/key-graph.service';
5
+ import { KeyService } from '../cryptography/key.service';
6
+ import { RunOutsideAngular } from '../_common/run-outside-angular';
7
+ import { LrGraphQLService, LrMutation } from './lr-graphql';
8
+ import { GetOwnedContactCardKeyIdsQuery, GetReceivedContactCardKeyIdQuery, UpdateOwnedContactCardMutation, UpdateReceivedContactCardMutation, } from './shared-contact-card2.gql';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../cryptography/key.service";
11
+ import * as i2 from "../cryptography/key-graph.service";
12
+ import * as i3 from "../cryptography/encryption.service";
13
+ import * as i4 from "./lr-graphql/lr-graphql.service";
14
+ let SharedContactCard2Service = class SharedContactCard2Service {
15
+ constructor(ngZone, keyService, keyGraph, encryptionService, lrGraphQL) {
16
+ this.ngZone = ngZone;
17
+ this.keyService = keyService;
18
+ this.keyGraph = keyGraph;
19
+ this.encryptionService = encryptionService;
20
+ this.lrGraphQL = lrGraphQL;
21
+ }
22
+ getOwnedContactCardKeyIds(id) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const { ownedContactCard: cc } = yield this.lrGraphQL.query({
25
+ query: GetOwnedContactCardKeyIdsQuery,
26
+ variables: {
27
+ id,
28
+ },
29
+ });
30
+ return {
31
+ sharedKeyId: cc.sharedKey.id,
32
+ ownerKeyId: cc.ownerKey.id,
33
+ };
34
+ });
35
+ }
36
+ getReceivedContactCardKeyId(id) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ return (yield this.lrGraphQL.query({
39
+ query: GetReceivedContactCardKeyIdQuery,
40
+ variables: {
41
+ id,
42
+ },
43
+ })).receivedContactCard.receiverKey.id;
44
+ });
45
+ }
46
+ updateOwnedContactCard({ id, ownerKeyId, sharedKeyId, ownerPlainDataJson, ownerCipherDataClearJson, sharedCipherDataClearJson, }) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ let ownerKey;
49
+ let sharedKey;
50
+ try {
51
+ ownerKey = yield this.keyGraph.getKey(ownerKeyId);
52
+ sharedKey = yield this.keyGraph.getKey(sharedKeyId);
53
+ }
54
+ catch (error) {
55
+ const keys = yield this.getOwnedContactCardKeyIds(id);
56
+ // try again
57
+ ownerKey = yield this.keyGraph.getKey(keys.ownerKeyId);
58
+ sharedKey = yield this.keyGraph.getKey(keys.sharedKeyId);
59
+ }
60
+ const sigPxk = yield this.keyService.getCurrentSigPxk();
61
+ const sharedCipherData = yield this.encryptionService.encrypt(sharedKey.jwk, sharedCipherDataClearJson);
62
+ const sharedCipherDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, sharedCipherData));
63
+ const ownerPlainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ownerPlainDataJson));
64
+ const ownerCipherData = yield this.encryptionService.encryptToString(ownerKey.jwk, ownerCipherDataClearJson);
65
+ return new LrMutation({
66
+ mutation: UpdateOwnedContactCardMutation,
67
+ variables: {
68
+ input: {
69
+ id,
70
+ ownerCipherData,
71
+ ownerKeyId: ownerKey.id,
72
+ sharedCipherDataSig,
73
+ sharedKeyId: sharedKey.id,
74
+ sigPxkId: sigPxk.id,
75
+ ownerPlainDataSig,
76
+ },
77
+ },
78
+ });
79
+ });
80
+ }
81
+ updateReceivedContactCard({ id, receiverKeyId, receiverCipherDataClearJson, }) {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ const receiverKey = yield this.keyGraph.getKey(receiverKeyId, () => this.getReceivedContactCardKeyId(id));
84
+ const receiverCipherData = yield this.encryptionService.encryptToString(receiverKey.jwk, receiverCipherDataClearJson);
85
+ return new LrMutation({
86
+ mutation: UpdateReceivedContactCardMutation,
87
+ variables: {
88
+ input: {
89
+ id,
90
+ receiverCipherData,
91
+ receiverKeyId: receiverKey.id,
92
+ },
93
+ },
94
+ });
95
+ });
96
+ }
97
+ };
98
+ SharedContactCard2Service.ɵprov = i0.ɵɵdefineInjectable({ factory: function SharedContactCard2Service_Factory() { return new SharedContactCard2Service(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.KeyService), i0.ɵɵinject(i2.KeyGraphService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.LrGraphQLService)); }, token: SharedContactCard2Service, providedIn: "root" });
99
+ SharedContactCard2Service.decorators = [
100
+ { type: Injectable, args: [{
101
+ providedIn: 'root',
102
+ },] }
103
+ ];
104
+ SharedContactCard2Service.ctorParameters = () => [
105
+ { type: NgZone },
106
+ { type: KeyService },
107
+ { type: KeyGraphService },
108
+ { type: EncryptionService },
109
+ { type: LrGraphQLService }
110
+ ];
111
+ SharedContactCard2Service = __decorate([
112
+ RunOutsideAngular({
113
+ ngZoneName: 'ngZone',
114
+ })
115
+ ], SharedContactCard2Service);
116
+ export { SharedContactCard2Service };
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhY3QtY2FyZDIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9uZXdyZXBvL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvc2hhcmVkLWNvbnRhY3QtY2FyZDIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUtuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsZ0NBQWdDLEVBQ2hDLDhCQUE4QixFQUM5QixpQ0FBaUMsR0FDbEMsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0lBcUJ2Qix5QkFBeUIsU0FBekIseUJBQXlCO0lBQ3BDLFlBQ1UsTUFBYyxFQUNkLFVBQXNCLEVBQ3RCLFFBQXlCLEVBQ3pCLGlCQUFvQyxFQUNwQyxTQUEyQjtRQUozQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQ2xDLENBQUM7SUFFVSx5QkFBeUIsQ0FBQyxFQUFrQjs7WUFDeEQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFL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QyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FDakUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQyxDQUNyQyxDQUFDO1lBRUYsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQ3JFLFdBQVcsQ0FBQyxHQUFHLEVBQ2YsMkJBQTJCLENBQzVCLENBQUM7WUFFRixPQUFPLElBQUksVUFBVSxDQUFDO2dCQUNwQixRQUFRLEVBQUUsaUNBQWlDO2dCQUMzQyxTQUFTLEVBQUU7b0JBQ1QsS0FBSyxFQUFFO3dCQUNMLEVBQUU7d0JBQ0Ysa0JBQWtCO3dCQUNsQixhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUU7cUJBQzlCO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0NBQ0YsQ0FBQTs7O1lBdkhBLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBcENvQixNQUFNO1lBSWxCLFVBQVU7WUFEVixlQUFlO1lBRGYsaUJBQWlCO1lBUWpCLGdCQUFnQjs7QUEyQloseUJBQXlCO0lBTnJDLGlCQUFpQixDQUFDO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7R0FJVyx5QkFBeUIsQ0FvSHJDO1NBcEhZLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5LnR5cGVzJztcclxuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1ncmFwaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXkuc2VydmljZSc7XHJcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcclxuaW1wb3J0IHtcclxuICBDb250YWN0Q2FyZFJlY2VpdmVyQ2lwaGVyRGF0YSxcclxuICBTZW5kQ29udGFjdENhcmRJbnB1dCxcclxufSBmcm9tICcuL2tleS1leGNoYW5nZTIuc2VydmljZSc7XHJcbmltcG9ydCB7IExyR3JhcGhRTFNlcnZpY2UsIExyTXV0YXRpb24gfSBmcm9tICcuL2xyLWdyYXBocWwnO1xyXG5pbXBvcnQge1xyXG4gIEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeSxcclxuICBHZXRSZWNlaXZlZENvbnRhY3RDYXJkS2V5SWRRdWVyeSxcclxuICBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24sXHJcbiAgVXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZE11dGF0aW9uLFxyXG59IGZyb20gJy4vc2hhcmVkLWNvbnRhY3QtY2FyZDIuZ3FsJztcclxuaW1wb3J0IHsgTHJSZWxheUlkSW5wdXQgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlT3duZWRDb250YWN0Q2FyZElucHV0IGV4dGVuZHMgU2VuZENvbnRhY3RDYXJkSW5wdXQge1xyXG4gIGlkOiBMclJlbGF5SWRJbnB1dDtcclxuICBvd25lcktleUlkPzogTHJSZWxheUlkSW5wdXQ7XHJcbiAgc2hhcmVkS2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkSW5wdXRcclxuICBleHRlbmRzIENvbnRhY3RDYXJkUmVjZWl2ZXJDaXBoZXJEYXRhIHtcclxuICBpZDogTHJSZWxheUlkSW5wdXQ7XHJcbiAgcmVjZWl2ZXJLZXlJZD86IExyUmVsYXlJZElucHV0O1xyXG59XHJcblxyXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xyXG4gIG5nWm9uZU5hbWU6ICduZ1pvbmUnLFxyXG59KVxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2hhcmVkQ29udGFjdENhcmQyU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxyR3JhcGhRTDogTHJHcmFwaFFMU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRPd25lZENvbnRhY3RDYXJkS2V5SWRzKGlkOiBMclJlbGF5SWRJbnB1dCkge1xyXG4gICAgY29uc3QgeyBvd25lZENvbnRhY3RDYXJkOiBjYyB9ID0gYXdhaXQgdGhpcy5sckdyYXBoUUwucXVlcnkoe1xyXG4gICAgICBxdWVyeTogR2V0T3duZWRDb250YWN0Q2FyZEtleUlkc1F1ZXJ5LFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNoYXJlZEtleUlkOiBjYy5zaGFyZWRLZXkuaWQsXHJcbiAgICAgIG93bmVyS2V5SWQ6IGNjLm93bmVyS2V5LmlkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkKGlkOiBMclJlbGF5SWRJbnB1dCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgYXdhaXQgdGhpcy5sckdyYXBoUUwucXVlcnkoe1xyXG4gICAgICAgIHF1ZXJ5OiBHZXRSZWNlaXZlZENvbnRhY3RDYXJkS2V5SWRRdWVyeSxcclxuICAgICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICApLnJlY2VpdmVkQ29udGFjdENhcmQucmVjZWl2ZXJLZXkuaWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVPd25lZENvbnRhY3RDYXJkKHtcclxuICAgIGlkLFxyXG4gICAgb3duZXJLZXlJZCxcclxuICAgIHNoYXJlZEtleUlkLFxyXG4gICAgb3duZXJQbGFpbkRhdGFKc29uLFxyXG4gICAgb3duZXJDaXBoZXJEYXRhQ2xlYXJKc29uLFxyXG4gICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcclxuICB9OiBVcGRhdGVPd25lZENvbnRhY3RDYXJkSW5wdXQpIHtcclxuICAgIGxldCBvd25lcktleTogS2V5O1xyXG4gICAgbGV0IHNoYXJlZEtleTogS2V5O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIG93bmVyS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkob3duZXJLZXlJZCk7XHJcbiAgICAgIHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KHNoYXJlZEtleUlkKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCB0aGlzLmdldE93bmVkQ29udGFjdENhcmRLZXlJZHMoaWQpO1xyXG5cclxuICAgICAgLy8gdHJ5IGFnYWluXHJcbiAgICAgIG93bmVyS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoa2V5cy5vd25lcktleUlkKTtcclxuICAgICAgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoa2V5cy5zaGFyZWRLZXlJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2lnUHhrID0gYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLmdldEN1cnJlbnRTaWdQeGsoKTtcclxuXHJcbiAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxyXG4gICAgICBzaGFyZWRLZXkuandrLFxyXG4gICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2hhcmVkQ2lwaGVyRGF0YVNpZyA9IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnNpZ24oc2lnUHhrLmp3aywgc2hhcmVkQ2lwaGVyRGF0YSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3duZXJQbGFpbkRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcclxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssIG93bmVyUGxhaW5EYXRhSnNvbilcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3duZXJDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXHJcbiAgICAgIG93bmVyS2V5Lmp3ayxcclxuICAgICAgb3duZXJDaXBoZXJEYXRhQ2xlYXJKc29uXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XHJcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIG93bmVyQ2lwaGVyRGF0YSxcclxuICAgICAgICAgIG93bmVyS2V5SWQ6IG93bmVyS2V5LmlkLFxyXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YVNpZyxcclxuICAgICAgICAgIHNoYXJlZEtleUlkOiBzaGFyZWRLZXkuaWQsXHJcbiAgICAgICAgICBzaWdQeGtJZDogc2lnUHhrLmlkLFxyXG4gICAgICAgICAgb3duZXJQbGFpbkRhdGFTaWcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZCh7XHJcbiAgICBpZCxcclxuICAgIHJlY2VpdmVyS2V5SWQsXHJcbiAgICByZWNlaXZlckNpcGhlckRhdGFDbGVhckpzb24sXHJcbiAgfTogVXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZElucHV0KSB7XHJcbiAgICBjb25zdCByZWNlaXZlcktleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KHJlY2VpdmVyS2V5SWQsICgpID0+XHJcbiAgICAgIHRoaXMuZ2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkKGlkKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCByZWNlaXZlckNpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcclxuICAgICAgcmVjZWl2ZXJLZXkuandrLFxyXG4gICAgICByZWNlaXZlckNpcGhlckRhdGFDbGVhckpzb25cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcclxuICAgICAgbXV0YXRpb246IFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgcmVjZWl2ZXJDaXBoZXJEYXRhLFxyXG4gICAgICAgICAgcmVjZWl2ZXJLZXlJZDogcmVjZWl2ZXJLZXkuaWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,146 +1,146 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
4
- import { Apollo } from 'apollo-angular';
5
- import gql from 'graphql-tag';
6
- import * as moment_ from 'moment';
7
- import { LrErrorCode, LrException, handleApolloError, } from '../_common/exceptions';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@aws-amplify/auth/lib-esm/Auth";
10
- import * as i2 from "apollo-angular";
11
- // "why?" you ask: https://stackoverflow.com/questions/59735280/angular-8-moment-error-cannot-call-a-namespace-moment
12
- const moment = moment_;
13
- export const ServerTimeQuery = gql `
14
- query {
15
- serverTime {
16
- timestamp
17
- }
18
- }
19
- `;
20
- export class TimeService {
21
- constructor(auth, apollo) {
22
- this.auth = auth;
23
- this.apollo = apollo;
24
- this.VERIFY_ENABLED = true;
25
- this.MAX_DIFF_MSEC = moment
26
- .duration({ seconds: 30 })
27
- .asMilliseconds();
28
- this.offsetMs = null; // Millisecond offset of local clock.
29
- this.verified = false; // Verified with independent time source
30
- }
31
- getAccessToken() {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- try {
34
- return (yield this.auth.currentAuthenticatedUser())
35
- .getSignInUserSession()
36
- .getAccessToken()
37
- .getJwtToken();
38
- }
39
- catch (error) {
40
- return ''; // Not authenticated
41
- }
42
- });
43
- }
44
- // Get time from independent source to confirm.
45
- verifyCognito() {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- const accessToken = yield this.getAccessToken();
48
- if (!accessToken) {
49
- return;
50
- }
51
- // Request headers from AWS Amplify Auth lib
52
- // accept: */*
53
- // accept-encoding: gzip, deflate, br
54
- // accept-language: en-GB,en-US;q=0.9,en;q=0.8
55
- // cache-control: no-cache
56
- // content-length: 1089
57
- // content-type: application/x-amz-json-1.1
58
- // origin: http://localhost:4200
59
- // pragma: no-cache
60
- // referer: http://localhost:4200/
61
- // sec-fetch-dest: empty
62
- // sec-fetch-mode: cors
63
- // sec-fetch-site: cross-site
64
- // user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
65
- // x-amz-target: AWSCognitoIdentityProviderService.GetUser
66
- // x-amz-user-agent: aws-amplify/0.1.x js
67
- // We are only interested in the Date field.
68
- // AZ: I suppose we could use any end-point that provides a reliable Date field in the header. And we don't
69
- // need to be authenticated. Even a 400 response would have a Date header. But the worry is that AWS might
70
- // think it's some sort of attack, and block the IP or domain. At least in an authenticated call it can't be
71
- // seen as illegitimate.
72
- const response = yield fetch('https://cognito-idp.ap-southeast-2.amazonaws.com/', {
73
- method: 'POST',
74
- mode: 'cors',
75
- cache: 'no-cache',
76
- headers: {
77
- 'x-amz-target': 'AWSCognitoIdentityProviderService.GetUser',
78
- 'x-amz-user-agent': 'aws-amplify/0.1.x js',
79
- 'Content-Type': 'application/x-amz-json-1.1',
80
- },
81
- // redirect: 'follow', // manual, *follow, error
82
- // referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
83
- body: JSON.stringify({
84
- AccessToken: accessToken,
85
- }),
86
- });
87
- const now = Date.now();
88
- const verifyTime = moment(response.headers.get('Date')).valueOf();
89
- const serverTime = now + this.offsetMs;
90
- const diff = Math.abs(serverTime - verifyTime);
91
- if (diff > this.MAX_DIFF_MSEC) {
92
- throw new LrException({
93
- code: LrErrorCode.BadTimeSync,
94
- message: `Server time does not match independent source. ServerTime: ${serverTime}, Cognito time: ${verifyTime}`,
95
- });
96
- }
97
- this.verified = true;
98
- });
99
- }
100
- refresh() {
101
- return __awaiter(this, void 0, void 0, function* () {
102
- const start = Date.now();
103
- const res = yield this.apollo
104
- .query({ query: ServerTimeQuery })
105
- .toPromise();
106
- const end = Date.now();
107
- handleApolloError(res.errors);
108
- const serverTime = parseInt(res.data.serverTime.timestamp, 10);
109
- const roundtrip = end - start;
110
- this.offsetMs = serverTime - (start + roundtrip / 2);
111
- if (this.VERIFY_ENABLED) {
112
- yield this.verifyCognito();
113
- }
114
- });
115
- }
116
- serverNow() {
117
- return __awaiter(this, void 0, void 0, function* () {
118
- let needsRefresh = false;
119
- // First call
120
- if (this.offsetMs === null) {
121
- needsRefresh = true;
122
- }
123
- if (this.VERIFY_ENABLED) {
124
- // logged in but not yet verified time matches.
125
- if (!this.verified && (yield this.getAccessToken())) {
126
- needsRefresh = true;
127
- }
128
- }
129
- if (needsRefresh) {
130
- yield this.refresh();
131
- }
132
- return Date.now() + this.offsetMs;
133
- });
134
- }
135
- }
136
- TimeService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TimeService_Factory() { return new TimeService(i0.ɵɵinject(i1.AuthClass), i0.ɵɵinject(i2.Apollo)); }, token: TimeService, providedIn: "root" });
137
- TimeService.decorators = [
138
- { type: Injectable, args: [{
139
- providedIn: 'root',
140
- },] }
141
- ];
142
- TimeService.ctorParameters = () => [
143
- { type: AuthClass },
144
- { type: Apollo }
145
- ];
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDO0FBQzlCLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGlCQUFpQixHQUNsQixNQUFNLHVCQUF1QixDQUFDOzs7O0FBQy9CLHFIQUFxSDtBQUNySCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFdkIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQTs7Ozs7O0NBTWpDLENBQUM7QUFTRixNQUFNLE9BQU8sV0FBVztJQVN0QixZQUFvQixJQUFlLEVBQVUsTUFBYztRQUF2QyxTQUFJLEdBQUosSUFBSSxDQUFXO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVJwRCxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUNaLGtCQUFhLEdBQUcsTUFBTTthQUNwQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDekIsY0FBYyxFQUFFLENBQUM7UUFFcEIsYUFBUSxHQUFXLElBQUksQ0FBQyxDQUFDLHFDQUFxQztRQUM5RCxhQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsd0NBQXdDO0lBRUksQ0FBQztJQUVqRCxjQUFjOztZQUMxQixJQUFJO2dCQUNGLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztxQkFDaEQsb0JBQW9CLEVBQUU7cUJBQ3RCLGNBQWMsRUFBRTtxQkFDaEIsV0FBVyxFQUFFLENBQUM7YUFDbEI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxPQUFPLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjthQUNoQztRQUNILENBQUM7S0FBQTtJQUVELCtDQUErQztJQUNqQyxhQUFhOztZQUN6QixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQixPQUFPO2FBQ1I7WUFFRCw0Q0FBNEM7WUFDNUMsY0FBYztZQUNkLHFDQUFxQztZQUNyQyw4Q0FBOEM7WUFDOUMsMEJBQTBCO1lBQzFCLHVCQUF1QjtZQUN2QiwyQ0FBMkM7WUFDM0MsZ0NBQWdDO1lBQ2hDLG1CQUFtQjtZQUNuQixrQ0FBa0M7WUFDbEMsd0JBQXdCO1lBQ3hCLHVCQUF1QjtZQUN2Qiw2QkFBNkI7WUFDN0Isd0hBQXdIO1lBQ3hILDBEQUEwRDtZQUMxRCx5Q0FBeUM7WUFFekMsNENBQTRDO1lBQzVDLDJHQUEyRztZQUMzRywwR0FBMEc7WUFDMUcsNEdBQTRHO1lBQzVHLHdCQUF3QjtZQUN4QixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FDMUIsbURBQW1ELEVBQ25EO2dCQUNFLE1BQU0sRUFBRSxNQUFNO2dCQUNkLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxVQUFVO2dCQUNqQixPQUFPLEVBQUU7b0JBQ1AsY0FBYyxFQUFFLDJDQUEyQztvQkFDM0Qsa0JBQWtCLEVBQUUsc0JBQXNCO29CQUMxQyxjQUFjLEVBQUUsNEJBQTRCO2lCQUM3QztnQkFDRCxnREFBZ0Q7Z0JBQ2hELHdMQUF3TDtnQkFDeEwsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25CLFdBQVcsRUFBRSxXQUFXO2lCQUN6QixDQUFDO2FBQ0gsQ0FDRixDQUFDO1lBRUYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRXZCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xFLE1BQU0sVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBRS9DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQzdCLE1BQU0sSUFBSSxXQUFXLENBQUM7b0JBQ3BCLElBQUksRUFBRSxXQUFXLENBQUMsV0FBVztvQkFDN0IsT0FBTyxFQUFFLDhEQUE4RCxVQUFVLG1CQUFtQixVQUFVLEVBQUU7aUJBQ2pILENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztLQUFBO0lBRWEsT0FBTzs7WUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU07aUJBQzFCLEtBQUssQ0FBNkIsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7aUJBQzdELFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRXZCLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRS9ELE1BQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXJELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDO0tBQUE7SUFFSyxTQUFTOztZQUNiLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUV6QixhQUFhO1lBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtnQkFDMUIsWUFBWSxHQUFHLElBQUksQ0FBQzthQUNyQjtZQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsK0NBQStDO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUU7b0JBQ25ELFlBQVksR0FBRyxJQUFJLENBQUM7aUJBQ3JCO2FBQ0Y7WUFFRCxJQUFJLFlBQVksRUFBRTtnQkFDaEIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDdEI7WUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3BDLENBQUM7S0FBQTs7OztZQWhJRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTFCUSxTQUFTO1lBQ1QsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhDbGFzcyB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9hdXRoL2xpYi1lc20vQXV0aCc7XG5pbXBvcnQgeyBBcG9sbG8gfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gIExyRXJyb3JDb2RlLFxuICBMckV4Y2VwdGlvbixcbiAgaGFuZGxlQXBvbGxvRXJyb3IsXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG4vLyBcIndoeT9cIiB5b3UgYXNrOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTczNTI4MC9hbmd1bGFyLTgtbW9tZW50LWVycm9yLWNhbm5vdC1jYWxsLWEtbmFtZXNwYWNlLW1vbWVudFxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcblxuZXhwb3J0IGNvbnN0IFNlcnZlclRpbWVRdWVyeSA9IGdxbGBcbiAgcXVlcnkge1xuICAgIHNlcnZlclRpbWUge1xuICAgICAgdGltZXN0YW1wXG4gICAgfVxuICB9XG5gO1xuXG5pbnRlcmZhY2UgU2VydmVyVGltZSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGltZVNlcnZpY2Uge1xuICBwdWJsaWMgVkVSSUZZX0VOQUJMRUQgPSB0cnVlO1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9ESUZGX01TRUMgPSBtb21lbnRcbiAgICAuZHVyYXRpb24oeyBzZWNvbmRzOiAzMCB9KVxuICAgIC5hc01pbGxpc2Vjb25kcygpO1xuXG4gIG9mZnNldE1zOiBudW1iZXIgPSBudWxsOyAvLyBNaWxsaXNlY29uZCBvZmZzZXQgb2YgbG9jYWwgY2xvY2suXG4gIHZlcmlmaWVkID0gZmFsc2U7IC8vIFZlcmlmaWVkIHdpdGggaW5kZXBlbmRlbnQgdGltZSBzb3VyY2VcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGg6IEF1dGhDbGFzcywgcHJpdmF0ZSBhcG9sbG86IEFwb2xsbykge31cblxuICBwcml2YXRlIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpKVxuICAgICAgICAuZ2V0U2lnbkluVXNlclNlc3Npb24oKVxuICAgICAgICAuZ2V0QWNjZXNzVG9rZW4oKVxuICAgICAgICAuZ2V0Snd0VG9rZW4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuICcnOyAvLyBOb3QgYXV0aGVudGljYXRlZFxuICAgIH1cbiAgfVxuXG4gIC8vIEdldCB0aW1lIGZyb20gaW5kZXBlbmRlbnQgc291cmNlIHRvIGNvbmZpcm0uXG4gIHByaXZhdGUgYXN5bmMgdmVyaWZ5Q29nbml0bygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVxdWVzdCBoZWFkZXJzIGZyb20gQVdTIEFtcGxpZnkgQXV0aCBsaWJcbiAgICAvLyBhY2NlcHQ6ICovKlxuICAgIC8vIGFjY2VwdC1lbmNvZGluZzogZ3ppcCwgZGVmbGF0ZSwgYnJcbiAgICAvLyBhY2NlcHQtbGFuZ3VhZ2U6IGVuLUdCLGVuLVVTO3E9MC45LGVuO3E9MC44XG4gICAgLy8gY2FjaGUtY29udHJvbDogbm8tY2FjaGVcbiAgICAvLyBjb250ZW50LWxlbmd0aDogMTA4OVxuICAgIC8vIGNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC1hbXotanNvbi0xLjFcbiAgICAvLyBvcmlnaW46IGh0dHA6Ly9sb2NhbGhvc3Q6NDIwMFxuICAgIC8vIHByYWdtYTogbm8tY2FjaGVcbiAgICAvLyByZWZlcmVyOiBodHRwOi8vbG9jYWxob3N0OjQyMDAvXG4gICAgLy8gc2VjLWZldGNoLWRlc3Q6IGVtcHR5XG4gICAgLy8gc2VjLWZldGNoLW1vZGU6IGNvcnNcbiAgICAvLyBzZWMtZmV0Y2gtc2l0ZTogY3Jvc3Mtc2l0ZVxuICAgIC8vIHVzZXItYWdlbnQ6IE1vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzgwLjAuMzk4Ny4xMzIgU2FmYXJpLzUzNy4zNlxuICAgIC8vIHgtYW16LXRhcmdldDogQVdTQ29nbml0b0lkZW50aXR5UHJvdmlkZXJTZXJ2aWNlLkdldFVzZXJcbiAgICAvLyB4LWFtei11c2VyLWFnZW50OiBhd3MtYW1wbGlmeS8wLjEueCBqc1xuXG4gICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgRGF0ZSBmaWVsZC5cbiAgICAvLyBBWjogSSBzdXBwb3NlIHdlIGNvdWxkIHVzZSBhbnkgZW5kLXBvaW50IHRoYXQgcHJvdmlkZXMgYSByZWxpYWJsZSBEYXRlIGZpZWxkIGluIHRoZSBoZWFkZXIuIEFuZCB3ZSBkb24ndFxuICAgIC8vIG5lZWQgdG8gYmUgYXV0aGVudGljYXRlZC4gRXZlbiBhIDQwMCByZXNwb25zZSB3b3VsZCBoYXZlIGEgRGF0ZSBoZWFkZXIuIEJ1dCB0aGUgd29ycnkgaXMgdGhhdCBBV1MgbWlnaHRcbiAgICAvLyB0aGluayBpdCdzIHNvbWUgc29ydCBvZiBhdHRhY2ssIGFuZCBibG9jayB0aGUgSVAgb3IgZG9tYWluLiBBdCBsZWFzdCBpbiBhbiBhdXRoZW50aWNhdGVkIGNhbGwgaXQgY2FuJ3QgYmVcbiAgICAvLyBzZWVuIGFzIGlsbGVnaXRpbWF0ZS5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgJ2h0dHBzOi8vY29nbml0by1pZHAuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS8nLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJywgLy8gKkdFVCwgUE9TVCwgUFVULCBERUxFVEUsIGV0Yy5cbiAgICAgICAgbW9kZTogJ2NvcnMnLCAvLyBuby1jb3JzLCAqY29ycywgc2FtZS1vcmlnaW5cbiAgICAgICAgY2FjaGU6ICduby1jYWNoZScsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICd4LWFtei10YXJnZXQnOiAnQVdTQ29nbml0b0lkZW50aXR5UHJvdmlkZXJTZXJ2aWNlLkdldFVzZXInLFxuICAgICAgICAgICd4LWFtei11c2VyLWFnZW50JzogJ2F3cy1hbXBsaWZ5LzAuMS54IGpzJyxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtYW16LWpzb24tMS4xJyxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcmVkaXJlY3Q6ICdmb2xsb3cnLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG4gICAgICAgIC8vIHJlZmVycmVyUG9saWN5OiAnbm8tcmVmZXJyZXInLCAvLyBuby1yZWZlcnJlciwgKm5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlLCBvcmlnaW4sIG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgc2FtZS1vcmlnaW4sIHN0cmljdC1vcmlnaW4sIHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4sIHVuc2FmZS11cmxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgfSksIC8vIGJvZHkgZGF0YSB0eXBlIG11c3QgbWF0Y2ggXCJDb250ZW50LVR5cGVcIiBoZWFkZXJcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHZlcmlmeVRpbWUgPSBtb21lbnQocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0RhdGUnKSkudmFsdWVPZigpO1xuICAgIGNvbnN0IHNlcnZlclRpbWUgPSBub3cgKyB0aGlzLm9mZnNldE1zO1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhzZXJ2ZXJUaW1lIC0gdmVyaWZ5VGltZSk7XG5cbiAgICBpZiAoZGlmZiA+IHRoaXMuTUFYX0RJRkZfTVNFQykge1xuICAgICAgdGhyb3cgbmV3IExyRXhjZXB0aW9uKHtcbiAgICAgICAgY29kZTogTHJFcnJvckNvZGUuQmFkVGltZVN5bmMsXG4gICAgICAgIG1lc3NhZ2U6IGBTZXJ2ZXIgdGltZSBkb2VzIG5vdCBtYXRjaCBpbmRlcGVuZGVudCBzb3VyY2UuIFNlcnZlclRpbWU6ICR7c2VydmVyVGltZX0sIENvZ25pdG8gdGltZTogJHt2ZXJpZnlUaW1lfWAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcG9sbG9cbiAgICAgIC5xdWVyeTx7IHNlcnZlclRpbWU6IFNlcnZlclRpbWUgfT4oeyBxdWVyeTogU2VydmVyVGltZVF1ZXJ5IH0pXG4gICAgICAudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgZW5kID0gRGF0ZS5ub3coKTtcblxuICAgIGhhbmRsZUFwb2xsb0Vycm9yKHJlcy5lcnJvcnMpO1xuXG4gICAgY29uc3Qgc2VydmVyVGltZSA9IHBhcnNlSW50KHJlcy5kYXRhLnNlcnZlclRpbWUudGltZXN0YW1wLCAxMCk7XG5cbiAgICBjb25zdCByb3VuZHRyaXAgPSBlbmQgLSBzdGFydDtcbiAgICB0aGlzLm9mZnNldE1zID0gc2VydmVyVGltZSAtIChzdGFydCArIHJvdW5kdHJpcCAvIDIpO1xuXG4gICAgaWYgKHRoaXMuVkVSSUZZX0VOQUJMRUQpIHtcbiAgICAgIGF3YWl0IHRoaXMudmVyaWZ5Q29nbml0bygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlcnZlck5vdygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBuZWVkc1JlZnJlc2ggPSBmYWxzZTtcblxuICAgIC8vIEZpcnN0IGNhbGxcbiAgICBpZiAodGhpcy5vZmZzZXRNcyA9PT0gbnVsbCkge1xuICAgICAgbmVlZHNSZWZyZXNoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5WRVJJRllfRU5BQkxFRCkge1xuICAgICAgLy8gbG9nZ2VkIGluIGJ1dCBub3QgeWV0IHZlcmlmaWVkIHRpbWUgbWF0Y2hlcy5cbiAgICAgIGlmICghdGhpcy52ZXJpZmllZCAmJiAoYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKSkge1xuICAgICAgICBuZWVkc1JlZnJlc2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1JlZnJlc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBEYXRlLm5vdygpICsgdGhpcy5vZmZzZXRNcztcbiAgfVxufVxuIl19
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
4
+ import { Apollo } from 'apollo-angular';
5
+ import gql from 'graphql-tag';
6
+ import * as moment_ from 'moment';
7
+ import { LrErrorCode, LrException, handleApolloError, } from '../_common/exceptions';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@aws-amplify/auth/lib-esm/Auth";
10
+ import * as i2 from "apollo-angular";
11
+ // "why?" you ask: https://stackoverflow.com/questions/59735280/angular-8-moment-error-cannot-call-a-namespace-moment
12
+ const moment = moment_;
13
+ export const ServerTimeQuery = gql `
14
+ query {
15
+ serverTime {
16
+ timestamp
17
+ }
18
+ }
19
+ `;
20
+ export class TimeService {
21
+ constructor(auth, apollo) {
22
+ this.auth = auth;
23
+ this.apollo = apollo;
24
+ this.VERIFY_ENABLED = true;
25
+ this.MAX_DIFF_MSEC = moment
26
+ .duration({ seconds: 30 })
27
+ .asMilliseconds();
28
+ this.offsetMs = null; // Millisecond offset of local clock.
29
+ this.verified = false; // Verified with independent time source
30
+ }
31
+ getAccessToken() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ try {
34
+ return (yield this.auth.currentAuthenticatedUser())
35
+ .getSignInUserSession()
36
+ .getAccessToken()
37
+ .getJwtToken();
38
+ }
39
+ catch (error) {
40
+ return ''; // Not authenticated
41
+ }
42
+ });
43
+ }
44
+ // Get time from independent source to confirm.
45
+ verifyCognito() {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ const accessToken = yield this.getAccessToken();
48
+ if (!accessToken) {
49
+ return;
50
+ }
51
+ // Request headers from AWS Amplify Auth lib
52
+ // accept: */*
53
+ // accept-encoding: gzip, deflate, br
54
+ // accept-language: en-GB,en-US;q=0.9,en;q=0.8
55
+ // cache-control: no-cache
56
+ // content-length: 1089
57
+ // content-type: application/x-amz-json-1.1
58
+ // origin: http://localhost:4200
59
+ // pragma: no-cache
60
+ // referer: http://localhost:4200/
61
+ // sec-fetch-dest: empty
62
+ // sec-fetch-mode: cors
63
+ // sec-fetch-site: cross-site
64
+ // user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
65
+ // x-amz-target: AWSCognitoIdentityProviderService.GetUser
66
+ // x-amz-user-agent: aws-amplify/0.1.x js
67
+ // We are only interested in the Date field.
68
+ // AZ: I suppose we could use any end-point that provides a reliable Date field in the header. And we don't
69
+ // need to be authenticated. Even a 400 response would have a Date header. But the worry is that AWS might
70
+ // think it's some sort of attack, and block the IP or domain. At least in an authenticated call it can't be
71
+ // seen as illegitimate.
72
+ const response = yield fetch('https://cognito-idp.ap-southeast-2.amazonaws.com/', {
73
+ method: 'POST',
74
+ mode: 'cors',
75
+ cache: 'no-cache',
76
+ headers: {
77
+ 'x-amz-target': 'AWSCognitoIdentityProviderService.GetUser',
78
+ 'x-amz-user-agent': 'aws-amplify/0.1.x js',
79
+ 'Content-Type': 'application/x-amz-json-1.1',
80
+ },
81
+ // redirect: 'follow', // manual, *follow, error
82
+ // referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
83
+ body: JSON.stringify({
84
+ AccessToken: accessToken,
85
+ }),
86
+ });
87
+ const now = Date.now();
88
+ const verifyTime = moment(response.headers.get('Date')).valueOf();
89
+ const serverTime = now + this.offsetMs;
90
+ const diff = Math.abs(serverTime - verifyTime);
91
+ if (diff > this.MAX_DIFF_MSEC) {
92
+ throw new LrException({
93
+ code: LrErrorCode.BadTimeSync,
94
+ message: `Server time does not match independent source. ServerTime: ${serverTime}, Cognito time: ${verifyTime}`,
95
+ });
96
+ }
97
+ this.verified = true;
98
+ });
99
+ }
100
+ refresh() {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ const start = Date.now();
103
+ const res = yield this.apollo
104
+ .query({ query: ServerTimeQuery })
105
+ .toPromise();
106
+ const end = Date.now();
107
+ handleApolloError(res.errors);
108
+ const serverTime = parseInt(res.data.serverTime.timestamp, 10);
109
+ const roundtrip = end - start;
110
+ this.offsetMs = serverTime - (start + roundtrip / 2);
111
+ if (this.VERIFY_ENABLED) {
112
+ yield this.verifyCognito();
113
+ }
114
+ });
115
+ }
116
+ serverNow() {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ let needsRefresh = false;
119
+ // First call
120
+ if (this.offsetMs === null) {
121
+ needsRefresh = true;
122
+ }
123
+ if (this.VERIFY_ENABLED) {
124
+ // logged in but not yet verified time matches.
125
+ if (!this.verified && (yield this.getAccessToken())) {
126
+ needsRefresh = true;
127
+ }
128
+ }
129
+ if (needsRefresh) {
130
+ yield this.refresh();
131
+ }
132
+ return Date.now() + this.offsetMs;
133
+ });
134
+ }
135
+ }
136
+ TimeService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TimeService_Factory() { return new TimeService(i0.ɵɵinject(i1.AuthClass), i0.ɵɵinject(i2.Apollo)); }, token: TimeService, providedIn: "root" });
137
+ TimeService.decorators = [
138
+ { type: Injectable, args: [{
139
+ providedIn: 'root',
140
+ },] }
141
+ ];
142
+ TimeService.ctorParameters = () => [
143
+ { type: AuthClass },
144
+ { type: Apollo }
145
+ ];
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL25ld3JlcG8va2MtY2xpZW50L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FwaS90aW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUM7QUFDOUIsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUNMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFDL0IscUhBQXFIO0FBQ3JILE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Q0FNakMsQ0FBQztBQVNGLE1BQU0sT0FBTyxXQUFXO0lBU3RCLFlBQW9CLElBQWUsRUFBVSxNQUFjO1FBQXZDLFNBQUksR0FBSixJQUFJLENBQVc7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBUnBELG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ1osa0JBQWEsR0FBRyxNQUFNO2FBQ3BDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUN6QixjQUFjLEVBQUUsQ0FBQztRQUVwQixhQUFRLEdBQVcsSUFBSSxDQUFDLENBQUMscUNBQXFDO1FBQzlELGFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyx3Q0FBd0M7SUFFSSxDQUFDO0lBRWpELGNBQWM7O1lBQzFCLElBQUk7Z0JBQ0YsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFB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SSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUM1QjtRQUNILENBQUM7S0FBQTtJQUVLLFNBQVM7O1lBQ2IsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBRXpCLGFBQWE7WUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUMxQixZQUFZLEdBQUcsSUFBSSxDQUFDO2FBQ3JCO1lBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QiwrQ0FBK0M7Z0JBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRTtvQkFDbkQsWUFBWSxHQUFHLElBQUksQ0FBQztpQkFDckI7YUFDRjtZQUVELElBQUksWUFBWSxFQUFFO2dCQUNoQixNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN0QjtZQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDcEMsQ0FBQztLQUFBOzs7O1lBaElGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBMUJRLFNBQVM7WUFDVCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoQ2xhc3MgfSBmcm9tICdAYXdzLWFtcGxpZnkvYXV0aC9saWItZXNtL0F1dGgnO1xyXG5pbXBvcnQgeyBBcG9sbG8gfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7XHJcbiAgTHJFcnJvckNvZGUsXHJcbiAgTHJFeGNlcHRpb24sXHJcbiAgaGFuZGxlQXBvbGxvRXJyb3IsXHJcbn0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcclxuLy8gXCJ3aHk/XCIgeW91IGFzazogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTk3MzUyODAvYW5ndWxhci04LW1vbWVudC1lcnJvci1jYW5ub3QtY2FsbC1hLW5hbWVzcGFjZS1tb21lbnRcclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuXHJcbmV4cG9ydCBjb25zdCBTZXJ2ZXJUaW1lUXVlcnkgPSBncWxgXHJcbiAgcXVlcnkge1xyXG4gICAgc2VydmVyVGltZSB7XHJcbiAgICAgIHRpbWVzdGFtcFxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuXHJcbmludGVyZmFjZSBTZXJ2ZXJUaW1lIHtcclxuICB0aW1lc3RhbXA6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbWVTZXJ2aWNlIHtcclxuICBwdWJsaWMgVkVSSUZZX0VOQUJMRUQgPSB0cnVlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX0RJRkZfTVNFQyA9IG1vbWVudFxyXG4gICAgLmR1cmF0aW9uKHsgc2Vjb25kczogMzAgfSlcclxuICAgIC5hc01pbGxpc2Vjb25kcygpO1xyXG5cclxuICBvZmZzZXRNczogbnVtYmVyID0gbnVsbDsgLy8gTWlsbGlzZWNvbmQgb2Zmc2V0IG9mIGxvY2FsIGNsb2NrLlxyXG4gIHZlcmlmaWVkID0gZmFsc2U7IC8vIFZlcmlmaWVkIHdpdGggaW5kZXBlbmRlbnQgdGltZSBzb3VyY2VcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoOiBBdXRoQ2xhc3MsIHByaXZhdGUgYXBvbGxvOiBBcG9sbG8pIHt9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpKVxyXG4gICAgICAgIC5nZXRTaWduSW5Vc2VyU2Vzc2lvbigpXHJcbiAgICAgICAgLmdldEFjY2Vzc1Rva2VuKClcclxuICAgICAgICAuZ2V0Snd0VG9rZW4oKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiAnJzsgLy8gTm90IGF1dGhlbnRpY2F0ZWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEdldCB0aW1lIGZyb20gaW5kZXBlbmRlbnQgc291cmNlIHRvIGNvbmZpcm0uXHJcbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlDb2duaXRvKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLmdldEFjY2Vzc1Rva2VuKCk7XHJcbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXF1ZXN0IGhlYWRlcnMgZnJvbSBBV1MgQW1wbGlmeSBBdXRoIGxpYlxyXG4gICAgLy8gYWNjZXB0OiAqLypcclxuICAgIC8vIGFjY2VwdC1lbmNvZGluZzogZ3ppcCwgZGVmbGF0ZSwgYnJcclxuICAgIC8vIGFjY2VwdC1sYW5ndWFnZTogZW4tR0IsZW4tVVM7cT0wLjksZW47cT0wLjhcclxuICAgIC8vIGNhY2hlLWNvbnRyb2w6IG5vLWNhY2hlXHJcbiAgICAvLyBjb250ZW50LWxlbmd0aDogMTA4OVxyXG4gICAgLy8gY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LWFtei1qc29uLTEuMVxyXG4gICAgLy8gb3JpZ2luOiBodHRwOi8vbG9jYWxob3N0OjQyMDBcclxuICAgIC8vIHByYWdtYTogbm8tY2FjaGVcclxuICAgIC8vIHJlZmVyZXI6IGh0dHA6Ly9sb2NhbGhvc3Q6NDIwMC9cclxuICAgIC8vIHNlYy1mZXRjaC1kZXN0OiBlbXB0eVxyXG4gICAgLy8gc2VjLWZldGNoLW1vZGU6IGNvcnNcclxuICAgIC8vIHNlYy1mZXRjaC1zaXRlOiBjcm9zcy1zaXRlXHJcbiAgICAvLyB1c2VyLWFnZW50OiBNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84MC4wLjM5ODcuMTMyIFNhZmFyaS81MzcuMzZcclxuICAgIC8vIHgtYW16LXRhcmdldDogQVdTQ29nbml0b0lkZW50aXR5UHJvdmlkZXJTZXJ2aWNlLkdldFVzZXJcclxuICAgIC8vIHgtYW16LXVzZXItYWdlbnQ6IGF3cy1hbXBsaWZ5LzAuMS54IGpzXHJcblxyXG4gICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgRGF0ZSBmaWVsZC5cclxuICAgIC8vIEFaOiBJIHN1cHBvc2Ugd2UgY291bGQgdXNlIGFueSBlbmQtcG9pbnQgdGhhdCBwcm92aWRlcyBhIHJlbGlhYmxlIERhdGUgZmllbGQgaW4gdGhlIGhlYWRlci4gQW5kIHdlIGRvbid0XHJcbiAgICAvLyBuZWVkIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIEV2ZW4gYSA0MDAgcmVzcG9uc2Ugd291bGQgaGF2ZSBhIERhdGUgaGVhZGVyLiBCdXQgdGhlIHdvcnJ5IGlzIHRoYXQgQVdTIG1pZ2h0XHJcbiAgICAvLyB0aGluayBpdCdzIHNvbWUgc29ydCBvZiBhdHRhY2ssIGFuZCBibG9jayB0aGUgSVAgb3IgZG9tYWluLiBBdCBsZWFzdCBpbiBhbiBhdXRoZW50aWNhdGVkIGNhbGwgaXQgY2FuJ3QgYmVcclxuICAgIC8vIHNlZW4gYXMgaWxsZWdpdGltYXRlLlxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcclxuICAgICAgJ2h0dHBzOi8vY29nbml0by1pZHAuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS8nLFxyXG4gICAgICB7XHJcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsIC8vICpHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXHJcbiAgICAgICAgbW9kZTogJ2NvcnMnLCAvLyBuby1jb3JzLCAqY29ycywgc2FtZS1vcmlnaW5cclxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJywgLy8gKmRlZmF1bHQsIG5vLWNhY2hlLCByZWxvYWQsIGZvcmNlLWNhY2hlLCBvbmx5LWlmLWNhY2hlZFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICd4LWFtei10YXJnZXQnOiAnQVdTQ29nbml0b0lkZW50aXR5UHJvdmlkZXJTZXJ2aWNlLkdldFVzZXInLFxyXG4gICAgICAgICAgJ3gtYW16LXVzZXItYWdlbnQnOiAnYXdzLWFtcGxpZnkvMC4xLngganMnLFxyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LWFtei1qc29uLTEuMScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyByZWRpcmVjdDogJ2ZvbGxvdycsIC8vIG1hbnVhbCwgKmZvbGxvdywgZXJyb3JcclxuICAgICAgICAvLyByZWZlcnJlclBvbGljeTogJ25vLXJlZmVycmVyJywgLy8gbm8tcmVmZXJyZXIsICpuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSwgb3JpZ2luLCBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4sIHNhbWUtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCB1bnNhZmUtdXJsXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgQWNjZXNzVG9rZW46IGFjY2Vzc1Rva2VuLFxyXG4gICAgICAgIH0pLCAvLyBib2R5IGRhdGEgdHlwZSBtdXN0IG1hdGNoIFwiQ29udGVudC1UeXBlXCIgaGVhZGVyXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICBjb25zdCB2ZXJpZnlUaW1lID0gbW9tZW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdEYXRlJykpLnZhbHVlT2YoKTtcclxuICAgIGNvbnN0IHNlcnZlclRpbWUgPSBub3cgKyB0aGlzLm9mZnNldE1zO1xyXG4gICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKHNlcnZlclRpbWUgLSB2ZXJpZnlUaW1lKTtcclxuXHJcbiAgICBpZiAoZGlmZiA+IHRoaXMuTUFYX0RJRkZfTVNFQykge1xyXG4gICAgICB0aHJvdyBuZXcgTHJFeGNlcHRpb24oe1xyXG4gICAgICAgIGNvZGU6IExyRXJyb3JDb2RlLkJhZFRpbWVTeW5jLFxyXG4gICAgICAgIG1lc3NhZ2U6IGBTZXJ2ZXIgdGltZSBkb2VzIG5vdCBtYXRjaCBpbmRlcGVuZGVudCBzb3VyY2UuIFNlcnZlclRpbWU6ICR7c2VydmVyVGltZX0sIENvZ25pdG8gdGltZTogJHt2ZXJpZnlUaW1lfWAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmVyaWZpZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcG9sbG9cclxuICAgICAgLnF1ZXJ5PHsgc2VydmVyVGltZTogU2VydmVyVGltZSB9Pih7IHF1ZXJ5OiBTZXJ2ZXJUaW1lUXVlcnkgfSlcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgY29uc3QgZW5kID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICBoYW5kbGVBcG9sbG9FcnJvcihyZXMuZXJyb3JzKTtcclxuXHJcbiAgICBjb25zdCBzZXJ2ZXJUaW1lID0gcGFyc2VJbnQocmVzLmRhdGEuc2VydmVyVGltZS50aW1lc3RhbXAsIDEwKTtcclxuXHJcbiAgICBjb25zdCByb3VuZHRyaXAgPSBlbmQgLSBzdGFydDtcclxuICAgIHRoaXMub2Zmc2V0TXMgPSBzZXJ2ZXJUaW1lIC0gKHN0YXJ0ICsgcm91bmR0cmlwIC8gMik7XHJcblxyXG4gICAgaWYgKHRoaXMuVkVSSUZZX0VOQUJMRUQpIHtcclxuICAgICAgYXdhaXQgdGhpcy52ZXJpZnlDb2duaXRvKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXJ2ZXJOb3coKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGxldCBuZWVkc1JlZnJlc2ggPSBmYWxzZTtcclxuXHJcbiAgICAvLyBGaXJzdCBjYWxsXHJcbiAgICBpZiAodGhpcy5vZmZzZXRNcyA9PT0gbnVsbCkge1xyXG4gICAgICBuZWVkc1JlZnJlc2ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlZFUklGWV9FTkFCTEVEKSB7XHJcbiAgICAgIC8vIGxvZ2dlZCBpbiBidXQgbm90IHlldCB2ZXJpZmllZCB0aW1lIG1hdGNoZXMuXHJcbiAgICAgIGlmICghdGhpcy52ZXJpZmllZCAmJiAoYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKSkge1xyXG4gICAgICAgIG5lZWRzUmVmcmVzaCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmVlZHNSZWZyZXNoKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBEYXRlLm5vdygpICsgdGhpcy5vZmZzZXRNcztcclxuICB9XHJcbn1cclxuIl19