@lifeready/core 1.0.15 → 1.0.16

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,97 +1,97 @@
1
- import gql from 'graphql-tag';
2
- import { KeyGraphFragment } from '../_common/queries.gql';
3
- export const CurrentUserQuery = gql `
4
- query {
5
- currentUser {
6
- id
7
- username
8
- currentUserKey {
9
- passKey {
10
- id
11
- passKeyParams
12
- passIdpParams
13
- wrappedPassIdpVerifierPrk
14
- created
15
- }
16
- masterKey {
17
- id
18
- }
19
- rootKey {
20
- id
21
- }
22
- pxk {
23
- id
24
- }
25
- sigPxk {
26
- id
27
- }
28
- }
29
- userDelete {
30
- id
31
- created
32
- state
33
- }
34
- features {
35
- myVault
36
- tpVault
37
- shareVault
38
- }
39
- sessionEncryptionKey
40
- }
41
- userPlans {
42
- id
43
- stripe {
44
- subscriptionId
45
- }
46
- plan {
47
- name
48
- data
49
- state
50
- }
51
- periodEnd
52
- }
53
- contactCards(orderBy: "created") {
54
- edges {
55
- node {
56
- id
57
- key {
58
- id
59
- }
60
- cipherData
61
- plainData
62
- }
63
- }
64
- }
65
- keyGraph {
66
- ...KeyGraphFragment
67
- }
68
- }
69
- ${KeyGraphFragment}
70
- `;
71
- export const CreateContactCardMutation = gql `
72
- mutation CreateContactCardMutation($input: CreateContactCardInput!) {
73
- createContactCard(input: $input) {
74
- contactCard {
75
- id
76
- key {
77
- id
78
- }
79
- cipherData
80
- }
81
- }
82
- }
83
- `;
84
- export const UpdateContactCardMutation = gql `
85
- mutation UpdateContactCardMutation($input: UpdateContactCardInput!) {
86
- updateContactCard(input: $input) {
87
- contactCard {
88
- id
89
- key {
90
- id
91
- }
92
- cipherData
93
- }
94
- }
95
- }
96
- `;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5ncWwuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMva2MtY2xpZW50L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3VzZXJzL3Byb2ZpbGUuZ3FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQztBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVExRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWtFL0IsZ0JBQWdCO0NBQ25CLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7OztDQVkzQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Q0FZM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhhc0VkZ2VzIH0gZnJvbSAnLi8uLi9fY29tbW9uL3R5cGVzJztcclxuaW1wb3J0IHsgSGFzS2V5R3JhcGgsIFBhc3NLZXkgfSBmcm9tICcuLy4uL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHkudHlwZXMnO1xyXG5pbXBvcnQgeyBBcGlDdXJyZW50VXNlciwgQXBpQ29udGFjdENhcmQgfSBmcm9tICcuL3Byb2ZpbGUudHlwZXMnO1xyXG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcclxuaW1wb3J0IHsgS2V5R3JhcGhGcmFnbWVudCB9IGZyb20gJy4uL19jb21tb24vcXVlcmllcy5ncWwnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdXJyZW50VXNlclF1ZXJ5VHlwZSBleHRlbmRzIEhhc0tleUdyYXBoIHtcclxuICBjdXJyZW50VXNlcjogQXBpQ3VycmVudFVzZXI7XHJcbiAgY29udGFjdENhcmRzOiBIYXNFZGdlczxBcGlDb250YWN0Q2FyZD47XHJcbiAgdXNlclBsYW5zOiBhbnlbXTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IEN1cnJlbnRVc2VyUXVlcnkgPSBncWxgXHJcbiAgcXVlcnkge1xyXG4gICAgY3VycmVudFVzZXIge1xyXG4gICAgICBpZFxyXG4gICAgICB1c2VybmFtZVxyXG4gICAgICBjdXJyZW50VXNlcktleSB7XHJcbiAgICAgICAgcGFzc0tleSB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgICAgcGFzc0tleVBhcmFtc1xyXG4gICAgICAgICAgcGFzc0lkcFBhcmFtc1xyXG4gICAgICAgICAgd3JhcHBlZFBhc3NJZHBWZXJpZmllclBya1xyXG4gICAgICAgICAgY3JlYXRlZFxyXG4gICAgICAgIH1cclxuICAgICAgICBtYXN0ZXJLZXkge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdEtleSB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgIH1cclxuICAgICAgICBweGsge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICB9XHJcbiAgICAgICAgc2lnUHhrIHtcclxuICAgICAgICAgIGlkXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHVzZXJEZWxldGUge1xyXG4gICAgICAgIGlkXHJcbiAgICAgICAgY3JlYXRlZFxyXG4gICAgICAgIHN0YXRlXHJcbiAgICAgIH1cclxuICAgICAgZmVhdHVyZXMge1xyXG4gICAgICAgIG15VmF1bHRcclxuICAgICAgICB0cFZhdWx0XHJcbiAgICAgICAgc2hhcmVWYXVsdFxyXG4gICAgICB9XHJcbiAgICAgIHNlc3Npb25FbmNyeXB0aW9uS2V5XHJcbiAgICB9XHJcbiAgICB1c2VyUGxhbnMge1xyXG4gICAgICBpZFxyXG4gICAgICBzdHJpcGUge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbklkXHJcbiAgICAgIH1cclxuICAgICAgcGxhbiB7XHJcbiAgICAgICAgbmFtZVxyXG4gICAgICAgIGRhdGFcclxuICAgICAgICBzdGF0ZVxyXG4gICAgICB9XHJcbiAgICAgIHBlcmlvZEVuZFxyXG4gICAgfVxyXG4gICAgY29udGFjdENhcmRzKG9yZGVyQnk6IFwiY3JlYXRlZFwiKSB7XHJcbiAgICAgIGVkZ2VzIHtcclxuICAgICAgICBub2RlIHtcclxuICAgICAgICAgIGlkXHJcbiAgICAgICAgICBrZXkge1xyXG4gICAgICAgICAgICBpZFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2lwaGVyRGF0YVxyXG4gICAgICAgICAgcGxhaW5EYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBrZXlHcmFwaCB7XHJcbiAgICAgIC4uLktleUdyYXBoRnJhZ21lbnRcclxuICAgIH1cclxuICB9XHJcbiAgJHtLZXlHcmFwaEZyYWdtZW50fVxyXG5gO1xyXG5cclxuZXhwb3J0IGNvbnN0IENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24gPSBncWxgXHJcbiAgbXV0YXRpb24gQ3JlYXRlQ29udGFjdENhcmRNdXRhdGlvbigkaW5wdXQ6IENyZWF0ZUNvbnRhY3RDYXJkSW5wdXQhKSB7XHJcbiAgICBjcmVhdGVDb250YWN0Q2FyZChpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgIGNvbnRhY3RDYXJkIHtcclxuICAgICAgICBpZFxyXG4gICAgICAgIGtleSB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgIH1cclxuICAgICAgICBjaXBoZXJEYXRhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmA7XHJcblxyXG5leHBvcnQgY29uc3QgVXBkYXRlQ29udGFjdENhcmRNdXRhdGlvbiA9IGdxbGBcclxuICBtdXRhdGlvbiBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uKCRpbnB1dDogVXBkYXRlQ29udGFjdENhcmRJbnB1dCEpIHtcclxuICAgIHVwZGF0ZUNvbnRhY3RDYXJkKGlucHV0OiAkaW5wdXQpIHtcclxuICAgICAgY29udGFjdENhcmQge1xyXG4gICAgICAgIGlkXHJcbiAgICAgICAga2V5IHtcclxuICAgICAgICAgIGlkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNpcGhlckRhdGFcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuIl19
1
+ import gql from 'graphql-tag';
2
+ import { KeyGraphFragment } from '../_common/queries.gql';
3
+ export const CurrentUserQuery = gql `
4
+ query {
5
+ currentUser {
6
+ id
7
+ username
8
+ currentUserKey {
9
+ passKey {
10
+ id
11
+ passKeyParams
12
+ passIdpParams
13
+ wrappedPassIdpVerifierPrk
14
+ created
15
+ }
16
+ masterKey {
17
+ id
18
+ }
19
+ rootKey {
20
+ id
21
+ }
22
+ pxk {
23
+ id
24
+ }
25
+ sigPxk {
26
+ id
27
+ }
28
+ }
29
+ userDelete {
30
+ id
31
+ created
32
+ state
33
+ }
34
+ features {
35
+ myVault
36
+ tpVault
37
+ shareVault
38
+ }
39
+ sessionEncryptionKey
40
+ }
41
+ userPlans {
42
+ id
43
+ stripe {
44
+ subscriptionId
45
+ }
46
+ plan {
47
+ name
48
+ data
49
+ state
50
+ }
51
+ periodEnd
52
+ }
53
+ contactCards(orderBy: "created") {
54
+ edges {
55
+ node {
56
+ id
57
+ key {
58
+ id
59
+ }
60
+ cipherData
61
+ plainData
62
+ }
63
+ }
64
+ }
65
+ keyGraph {
66
+ ...KeyGraphFragment
67
+ }
68
+ }
69
+ ${KeyGraphFragment}
70
+ `;
71
+ export const CreateContactCardMutation = gql `
72
+ mutation CreateContactCardMutation($input: CreateContactCardInput!) {
73
+ createContactCard(input: $input) {
74
+ contactCard {
75
+ id
76
+ key {
77
+ id
78
+ }
79
+ cipherData
80
+ }
81
+ }
82
+ }
83
+ `;
84
+ export const UpdateContactCardMutation = gql `
85
+ mutation UpdateContactCardMutation($input: UpdateContactCardInput!) {
86
+ updateContactCard(input: $input) {
87
+ contactCard {
88
+ id
89
+ key {
90
+ id
91
+ }
92
+ cipherData
93
+ }
94
+ }
95
+ }
96
+ `;
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5ncWwuanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3VzZXJzL3Byb2ZpbGUuZ3FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQztBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVExRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWtFL0IsZ0JBQWdCO0NBQ25CLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7OztDQVkzQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Q0FZM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhhc0VkZ2VzIH0gZnJvbSAnLi8uLi9fY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IEhhc0tleUdyYXBoLCBQYXNzS2V5IH0gZnJvbSAnLi8uLi9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5LnR5cGVzJztcbmltcG9ydCB7IEFwaUN1cnJlbnRVc2VyLCBBcGlDb250YWN0Q2FyZCB9IGZyb20gJy4vcHJvZmlsZS50eXBlcyc7XG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcbmltcG9ydCB7IEtleUdyYXBoRnJhZ21lbnQgfSBmcm9tICcuLi9fY29tbW9uL3F1ZXJpZXMuZ3FsJztcblxuZXhwb3J0IGludGVyZmFjZSBDdXJyZW50VXNlclF1ZXJ5VHlwZSBleHRlbmRzIEhhc0tleUdyYXBoIHtcbiAgY3VycmVudFVzZXI6IEFwaUN1cnJlbnRVc2VyO1xuICBjb250YWN0Q2FyZHM6IEhhc0VkZ2VzPEFwaUNvbnRhY3RDYXJkPjtcbiAgdXNlclBsYW5zOiBhbnlbXTtcbn1cblxuZXhwb3J0IGNvbnN0IEN1cnJlbnRVc2VyUXVlcnkgPSBncWxgXG4gIHF1ZXJ5IHtcbiAgICBjdXJyZW50VXNlciB7XG4gICAgICBpZFxuICAgICAgdXNlcm5hbWVcbiAgICAgIGN1cnJlbnRVc2VyS2V5IHtcbiAgICAgICAgcGFzc0tleSB7XG4gICAgICAgICAgaWRcbiAgICAgICAgICBwYXNzS2V5UGFyYW1zXG4gICAgICAgICAgcGFzc0lkcFBhcmFtc1xuICAgICAgICAgIHdyYXBwZWRQYXNzSWRwVmVyaWZpZXJQcmtcbiAgICAgICAgICBjcmVhdGVkXG4gICAgICAgIH1cbiAgICAgICAgbWFzdGVyS2V5IHtcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICAgIHJvb3RLZXkge1xuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICAgcHhrIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICAgIHNpZ1B4ayB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdXNlckRlbGV0ZSB7XG4gICAgICAgIGlkXG4gICAgICAgIGNyZWF0ZWRcbiAgICAgICAgc3RhdGVcbiAgICAgIH1cbiAgICAgIGZlYXR1cmVzIHtcbiAgICAgICAgbXlWYXVsdFxuICAgICAgICB0cFZhdWx0XG4gICAgICAgIHNoYXJlVmF1bHRcbiAgICAgIH1cbiAgICAgIHNlc3Npb25FbmNyeXB0aW9uS2V5XG4gICAgfVxuICAgIHVzZXJQbGFucyB7XG4gICAgICBpZFxuICAgICAgc3RyaXBlIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSWRcbiAgICAgIH1cbiAgICAgIHBsYW4ge1xuICAgICAgICBuYW1lXG4gICAgICAgIGRhdGFcbiAgICAgICAgc3RhdGVcbiAgICAgIH1cbiAgICAgIHBlcmlvZEVuZFxuICAgIH1cbiAgICBjb250YWN0Q2FyZHMob3JkZXJCeTogXCJjcmVhdGVkXCIpIHtcbiAgICAgIGVkZ2VzIHtcbiAgICAgICAgbm9kZSB7XG4gICAgICAgICAgaWRcbiAgICAgICAgICBrZXkge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICB9XG4gICAgICAgICAgY2lwaGVyRGF0YVxuICAgICAgICAgIHBsYWluRGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGtleUdyYXBoIHtcbiAgICAgIC4uLktleUdyYXBoRnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtLZXlHcmFwaEZyYWdtZW50fVxuYDtcblxuZXhwb3J0IGNvbnN0IENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24gPSBncWxgXG4gIG11dGF0aW9uIENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24oJGlucHV0OiBDcmVhdGVDb250YWN0Q2FyZElucHV0ISkge1xuICAgIGNyZWF0ZUNvbnRhY3RDYXJkKGlucHV0OiAkaW5wdXQpIHtcbiAgICAgIGNvbnRhY3RDYXJkIHtcbiAgICAgICAgaWRcbiAgICAgICAga2V5IHtcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICAgIGNpcGhlckRhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uID0gZ3FsYFxuICBtdXRhdGlvbiBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uKCRpbnB1dDogVXBkYXRlQ29udGFjdENhcmRJbnB1dCEpIHtcbiAgICB1cGRhdGVDb250YWN0Q2FyZChpbnB1dDogJGlucHV0KSB7XG4gICAgICBjb250YWN0Q2FyZCB7XG4gICAgICAgIGlkXG4gICAgICAgIGtleSB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgICBjaXBoZXJEYXRhXG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuIl19
@@ -1,169 +1,169 @@
1
- import { __awaiter } from "tslib";
2
- import { HttpClient } from '@angular/common/http';
3
- import { Inject, Injectable } from '@angular/core';
4
- import { LrApolloService } from '../api/lr-apollo.service';
5
- import { LR_CONFIG } from '../life-ready.config';
6
- import { CurrentUserQuery, UpdateContactCardMutation, CreateContactCardMutation, } from './profile.gql';
7
- import { ContactCardName, } from './profile.types';
8
- import { KeyMetaService } from '../cryptography/key-meta.service';
9
- import { KeyService } from '../cryptography/key.service';
10
- import { EncryptionService } from '../cryptography/encryption.service';
11
- import { ContactCardListQuery, DeleteContactCardMutation, } from '../api/contact-card.gql';
12
- import { mapUserPlans } from '../plan/plan.service';
13
- import { KeyGraphService } from '../cryptography/key-graph.service';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "../life-ready.config";
16
- import * as i2 from "@angular/common/http";
17
- import * as i3 from "../api/lr-apollo.service";
18
- import * as i4 from "../cryptography/key.service";
19
- import * as i5 from "../cryptography/key-meta.service";
20
- import * as i6 from "../cryptography/key-graph.service";
21
- import * as i7 from "../cryptography/encryption.service";
22
- export class ProfileService {
23
- constructor(config, http, lrApollo, keyService, keyMetaService, keyGraph, encryptionService) {
24
- this.config = config;
25
- this.http = http;
26
- this.lrApollo = lrApollo;
27
- this.keyService = keyService;
28
- this.keyMetaService = keyMetaService;
29
- this.keyGraph = keyGraph;
30
- this.encryptionService = encryptionService;
31
- }
32
- getPassIdpParams(emailOrPhone) {
33
- return __awaiter(this, void 0, void 0, function* () {
34
- return yield this.http
35
- .get(`${this.config.authUrl}users/pass-idp-params/?login_name=${encodeURIComponent(emailOrPhone)}`)
36
- .toPromise();
37
- });
38
- }
39
- getCurrentUser() {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- const { currentUser, contactCards, userPlans, } = yield this.lrApollo.query({
42
- query: CurrentUserQuery,
43
- });
44
- const contactCard = contactCards.edges.map((x) => x.node)[0];
45
- return {
46
- currentUser,
47
- contactCard,
48
- userPlans: mapUserPlans(userPlans),
49
- };
50
- });
51
- }
52
- decryptContactCard(contactCard) {
53
- return __awaiter(this, void 0, void 0, function* () {
54
- if (!contactCard) {
55
- return null;
56
- }
57
- const details = yield this.keyGraph.decryptFromString(contactCard.key.id, contactCard.cipherData);
58
- return Object.assign({ id: contactCard.id, keyId: contactCard.key.id }, details);
59
- });
60
- }
61
- updateDetails(id, keyId, fields) {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- yield (id
64
- ? this.updateContactCard(id, keyId, fields)
65
- : this.createContactCard(fields));
66
- });
67
- }
68
- prepareContactCardInput(contactCard) {
69
- return __awaiter(this, void 0, void 0, function* () {
70
- const sigPxk = yield this.keyService.getCurrentSigPxk();
71
- const publicDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ''));
72
- const publicSearchableSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ''));
73
- const plainDataJson = {
74
- // contactCard.name.value may have additional attributes such as the id of the contact card.
75
- // So we create a clean version. Otherwise it will fail server checks.
76
- name: new ContactCardName(contactCard.name.value),
77
- };
78
- const plainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, plainDataJson));
79
- return {
80
- sigPxkId: sigPxk.id,
81
- publicDataSig,
82
- publicSearchableSig,
83
- plainDataSig,
84
- };
85
- });
86
- }
87
- createContactCard(contactCard) {
88
- return __awaiter(this, void 0, void 0, function* () {
89
- const input = yield this.prepareContactCardInput(contactCard);
90
- const { rootKey, cipherMeta } = yield this.keyMetaService.wrapContent(contactCard);
91
- const data = yield this.lrApollo.mutate({
92
- mutation: CreateContactCardMutation,
93
- variables: {
94
- input: Object.assign(Object.assign({}, input), { cipherData: cipherMeta, wrappingKeyId: rootKey.wrappingKeyId, wrappedKey: rootKey.wrappedKey, default: true }),
95
- },
96
- });
97
- return data.createContactCard.contactCard;
98
- });
99
- }
100
- updateContactCard(id, keyId, contactCard) {
101
- return __awaiter(this, void 0, void 0, function* () {
102
- const input = yield this.prepareContactCardInput(contactCard);
103
- const cipherData = yield this.keyGraph.encryptToString(keyId, contactCard);
104
- const data = yield this.lrApollo.mutate({
105
- mutation: UpdateContactCardMutation,
106
- variables: {
107
- input: Object.assign(Object.assign({}, input), { id,
108
- cipherData }),
109
- },
110
- });
111
- return data.updateContactCard.contactCard;
112
- });
113
- }
114
- decryptContactCardEdges(edges) {
115
- return __awaiter(this, void 0, void 0, function* () {
116
- return Promise.all(edges.map((edge) => __awaiter(this, void 0, void 0, function* () {
117
- const cc = edge.node;
118
- return yield this.decryptContactCard(cc);
119
- })));
120
- });
121
- }
122
- getContactCards() {
123
- return __awaiter(this, void 0, void 0, function* () {
124
- const data = yield this.lrApollo.query({
125
- query: ContactCardListQuery,
126
- });
127
- return yield this.decryptContactCardEdges(data.contactCards.edges);
128
- });
129
- }
130
- deleteContactCard(id) {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- const data = yield this.lrApollo.mutate({
133
- mutation: DeleteContactCardMutation,
134
- variables: {
135
- input: {
136
- id,
137
- },
138
- },
139
- });
140
- return data.deleteContactCard.id;
141
- });
142
- }
143
- signOut() {
144
- return __awaiter(this, void 0, void 0, function* () {
145
- yield this.http
146
- .post(`${this.config.authUrl}auth/sign-out/`, null, {
147
- withCredentials: true,
148
- responseType: 'text',
149
- })
150
- .toPromise();
151
- });
152
- }
153
- }
154
- ProfileService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProfileService_Factory() { return new ProfileService(i0.ɵɵinject(i1.LR_CONFIG), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.LrApolloService), i0.ɵɵinject(i4.KeyService), i0.ɵɵinject(i5.KeyMetaService), i0.ɵɵinject(i6.KeyGraphService), i0.ɵɵinject(i7.EncryptionService)); }, token: ProfileService, providedIn: "root" });
155
- ProfileService.decorators = [
156
- { type: Injectable, args: [{
157
- providedIn: 'root',
158
- },] }
159
- ];
160
- ProfileService.ctorParameters = () => [
161
- { type: undefined, decorators: [{ type: Inject, args: [LR_CONFIG,] }] },
162
- { type: HttpClient },
163
- { type: LrApolloService },
164
- { type: KeyService },
165
- { type: KeyMetaService },
166
- { type: KeyGraphService },
167
- { type: EncryptionService }
168
- ];
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi91c2Vycy9wcm9maWxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FDMUIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQU9MLGVBQWUsR0FDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIseUJBQXlCLEdBQzFCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7O0FBS3BFLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQzZCLE1BQXVCLEVBQzFDLElBQWdCLEVBQ2hCLFFBQXlCLEVBQ3pCLFVBQXNCLEVBQ3RCLGNBQThCLEVBQzlCLFFBQXlCLEVBQ3pCLGlCQUFvQztRQU5qQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUMxQyxTQUFJLEdBQUosSUFB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QUFFLENBQUM7UUFDakIsQ0FBQztLQUFBOzs7O1lBL0xGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQUdJLE1BQU0sU0FBQyxTQUFTO1lBcENaLFVBQVU7WUFFVixlQUFlO1lBa0JmLFVBQVU7WUFEVixjQUFjO1lBVWQsZUFBZTtZQVJmLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMckFwb2xsb1NlcnZpY2UgfSBmcm9tICcuLi9hcGkvbHItYXBvbGxvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMaWZlUmVhZHlDb25maWcsIExSX0NPTkZJRyB9IGZyb20gJy4uL2xpZmUtcmVhZHkuY29uZmlnJztcclxuaW1wb3J0IHtcclxuICBDdXJyZW50VXNlclF1ZXJ5LFxyXG4gIEN1cnJlbnRVc2VyUXVlcnlUeXBlLFxyXG4gIFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24sXHJcbiAgQ3JlYXRlQ29udGFjdENhcmRNdXRhdGlvbixcclxufSBmcm9tICcuL3Byb2ZpbGUuZ3FsJztcclxuaW1wb3J0IHtcclxuICBBcGlDdXJyZW50VXNlcixcclxuICBQYXNzSWRwQXBpUmVzdWx0LFxyXG4gIE1haW5Db250YWN0Q2FyZCxcclxuICBBcGlDb250YWN0Q2FyZCxcclxuICBNYWluQ29udGFjdENhcmRGaWVsZHMsXHJcbiAgTWFpbkNvbnRhY3RDYXJkUGxhaW5GaWVsZHMsXHJcbiAgQ29udGFjdENhcmROYW1lLFxyXG59IGZyb20gJy4vcHJvZmlsZS50eXBlcyc7XHJcbmltcG9ydCB7IEtleU1ldGFTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1tZXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udGFjdENhcmQgfSBmcm9tICcuLi9hcGkvY29udGFjdC1jYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIENvbnRhY3RDYXJkTGlzdFF1ZXJ5LFxyXG4gIERlbGV0ZUNvbnRhY3RDYXJkTXV0YXRpb24sXHJcbn0gZnJvbSAnLi4vYXBpL2NvbnRhY3QtY2FyZC5ncWwnO1xyXG5pbXBvcnQgeyBtYXBVc2VyUGxhbnMgfSBmcm9tICcuLi9wbGFuL3BsYW4uc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJQbGFuIH0gZnJvbSAnLi4vcGxhbi9wbGFuLnR5cGVzJztcclxuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1ncmFwaC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9maWxlU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KExSX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IExpZmVSZWFkeUNvbmZpZyxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbHJBcG9sbG86IExyQXBvbGxvU2VydmljZSxcclxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuICAgIHByaXZhdGUga2V5TWV0YVNlcnZpY2U6IEtleU1ldGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGFzeW5jIGdldFBhc3NJZHBQYXJhbXMoZW1haWxPclBob25lOiBzdHJpbmcpOiBQcm9taXNlPFBhc3NJZHBBcGlSZXN1bHQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBcclxuICAgICAgLmdldDxQYXNzSWRwQXBpUmVzdWx0PihcclxuICAgICAgICBgJHtcclxuICAgICAgICAgIHRoaXMuY29uZmlnLmF1dGhVcmxcclxuICAgICAgICB9dXNlcnMvcGFzcy1pZHAtcGFyYW1zLz9sb2dpbl9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsT3JQaG9uZSl9YFxyXG4gICAgICApXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEN1cnJlbnRVc2VyKCk6IFByb21pc2U8e1xyXG4gICAgY3VycmVudFVzZXI6IEFwaUN1cnJlbnRVc2VyO1xyXG4gICAgY29udGFjdENhcmQ6IEFwaUNvbnRhY3RDYXJkO1xyXG4gICAgdXNlclBsYW5zOiBVc2VyUGxhbltdO1xyXG4gIH0+IHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgY3VycmVudFVzZXIsXHJcbiAgICAgIGNvbnRhY3RDYXJkcyxcclxuICAgICAgdXNlclBsYW5zLFxyXG4gICAgfSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8Q3VycmVudFVzZXJRdWVyeVR5cGU+KHtcclxuICAgICAgcXVlcnk6IEN1cnJlbnRVc2VyUXVlcnksXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjb250YWN0Q2FyZCA9IGNvbnRhY3RDYXJkcy5lZGdlcy5tYXAoKHgpID0+IHgubm9kZSlbMF07XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3VycmVudFVzZXIsXHJcbiAgICAgIGNvbnRhY3RDYXJkLFxyXG4gICAgICB1c2VyUGxhbnM6IG1hcFVzZXJQbGFucyh1c2VyUGxhbnMpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlY3J5cHRDb250YWN0Q2FyZChcclxuICAgIGNvbnRhY3RDYXJkOiBBcGlDb250YWN0Q2FyZFxyXG4gICk6IFByb21pc2U8TWFpbkNvbnRhY3RDYXJkPiB7XHJcbiAgICBpZiAoIWNvbnRhY3RDYXJkKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRldGFpbHMgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nPGFueT4oXHJcbiAgICAgIGNvbnRhY3RDYXJkLmtleS5pZCxcclxuICAgICAgY29udGFjdENhcmQuY2lwaGVyRGF0YVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogY29udGFjdENhcmQuaWQsXHJcbiAgICAgIGtleUlkOiBjb250YWN0Q2FyZC5rZXkuaWQsXHJcbiAgICAgIC4uLmRldGFpbHMsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRGV0YWlscyhcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICBrZXlJZDogc3RyaW5nLFxyXG4gICAgZmllbGRzOiBNYWluQ29udGFjdENhcmRGaWVsZHNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IChpZFxyXG4gICAgICA/IHRoaXMudXBkYXRlQ29udGFjdENhcmQoaWQsIGtleUlkLCBmaWVsZHMpXHJcbiAgICAgIDogdGhpcy5jcmVhdGVDb250YWN0Q2FyZChmaWVsZHMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNvbnRhY3RDYXJkSW5wdXQoXHJcbiAgICBjb250YWN0Q2FyZDogTWFpbkNvbnRhY3RDYXJkRmllbGRzXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IHNpZ1B4ayA9IGF3YWl0IHRoaXMua2V5U2VydmljZS5nZXRDdXJyZW50U2lnUHhrKCk7XHJcblxyXG4gICAgY29uc3QgcHVibGljRGF0YVNpZyA9IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnNpZ24oc2lnUHhrLmp3aywgJycpXHJcbiAgICApO1xyXG4gICAgY29uc3QgcHVibGljU2VhcmNoYWJsZVNpZyA9IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnNpZ24oc2lnUHhrLmp3aywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHBsYWluRGF0YUpzb246IE1haW5Db250YWN0Q2FyZFBsYWluRmllbGRzID0ge1xyXG4gICAgICAvLyBjb250YWN0Q2FyZC5uYW1lLnZhbHVlIG1heSBoYXZlIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBzdWNoIGFzIHRoZSBpZCBvZiB0aGUgY29udGFjdCBjYXJkLlxyXG4gICAgICAvLyBTbyB3ZSBjcmVhdGUgYSBjbGVhbiB2ZXJzaW9uLiBPdGhlcndpc2UgaXQgd2lsbCBmYWlsIHNlcnZlciBjaGVja3MuXHJcbiAgICAgIG5hbWU6IG5ldyBDb250YWN0Q2FyZE5hbWUoY29udGFjdENhcmQubmFtZS52YWx1ZSksXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGxhaW5EYXRhU2lnID0gSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCBwbGFpbkRhdGFKc29uKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzaWdQeGtJZDogc2lnUHhrLmlkLFxyXG4gICAgICBwdWJsaWNEYXRhU2lnLFxyXG4gICAgICBwdWJsaWNTZWFyY2hhYmxlU2lnLFxyXG4gICAgICBwbGFpbkRhdGFTaWcsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVDb250YWN0Q2FyZChcclxuICAgIGNvbnRhY3RDYXJkOiBNYWluQ29udGFjdENhcmRGaWVsZHNcclxuICApOiBQcm9taXNlPEFwaUNvbnRhY3RDYXJkPiB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNvbnRhY3RDYXJkSW5wdXQoY29udGFjdENhcmQpO1xyXG5cclxuICAgIGNvbnN0IHsgcm9vdEtleSwgY2lwaGVyTWV0YSB9ID0gYXdhaXQgdGhpcy5rZXlNZXRhU2VydmljZS53cmFwQ29udGVudChcclxuICAgICAgY29udGFjdENhcmRcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlPHtcclxuICAgICAgY3JlYXRlQ29udGFjdENhcmQ6IHsgY29udGFjdENhcmQ6IEFwaUNvbnRhY3RDYXJkIH07XHJcbiAgICB9Pih7XHJcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgLi4uaW5wdXQsXHJcbiAgICAgICAgICBjaXBoZXJEYXRhOiBjaXBoZXJNZXRhLFxyXG4gICAgICAgICAgd3JhcHBpbmdLZXlJZDogcm9vdEtleS53cmFwcGluZ0tleUlkLFxyXG4gICAgICAgICAgd3JhcHBlZEtleTogcm9vdEtleS53cmFwcGVkS2V5LFxyXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSwgLy8gVXNlIHRoaXMgY29udGFjdCBjYXJkIGFzIGRlZmF1bHQgY29udGFjdCBjYXJkLlxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhLmNyZWF0ZUNvbnRhY3RDYXJkLmNvbnRhY3RDYXJkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVDb250YWN0Q2FyZChcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICBrZXlJZDogc3RyaW5nLFxyXG4gICAgY29udGFjdENhcmQ6IE1haW5Db250YWN0Q2FyZEZpZWxkc1xyXG4gICk6IFByb21pc2U8QXBpQ29udGFjdENhcmQ+IHtcclxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ29udGFjdENhcmRJbnB1dChjb250YWN0Q2FyZCk7XHJcblxyXG4gICAgY29uc3QgY2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKGtleUlkLCBjb250YWN0Q2FyZCk7XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlPHtcclxuICAgICAgdXBkYXRlQ29udGFjdENhcmQ6IHsgY29udGFjdENhcmQ6IEFwaUNvbnRhY3RDYXJkIH07XHJcbiAgICB9Pih7XHJcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgLi4uaW5wdXQsXHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIGNpcGhlckRhdGEsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGEudXBkYXRlQ29udGFjdENhcmQuY29udGFjdENhcmQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWNyeXB0Q29udGFjdENhcmRFZGdlcyhlZGdlcyk6IFByb21pc2U8Q29udGFjdENhcmRbXT4ge1xyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxyXG4gICAgICBlZGdlcy5tYXAoYXN5bmMgKGVkZ2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNjID0gZWRnZS5ub2RlIGFzIENvbnRhY3RDYXJkO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlY3J5cHRDb250YWN0Q2FyZChjYyk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Q29udGFjdENhcmRzKCk6IFByb21pc2U8Q29udGFjdENhcmRbXT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8YW55Pih7XHJcbiAgICAgIHF1ZXJ5OiBDb250YWN0Q2FyZExpc3RRdWVyeSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmRlY3J5cHRDb250YWN0Q2FyZEVkZ2VzKGRhdGEuY29udGFjdENhcmRzLmVkZ2VzKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZUNvbnRhY3RDYXJkKGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlPGFueT4oe1xyXG4gICAgICBtdXRhdGlvbjogRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZGF0YS5kZWxldGVDb250YWN0Q2FyZC5pZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNpZ25PdXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWcuYXV0aFVybH1hdXRoL3NpZ24tb3V0L2AsIG51bGwsIHtcclxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgIH0pXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICB9XHJcbn1cclxuIl19
1
+ import { __awaiter } from "tslib";
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Inject, Injectable } from '@angular/core';
4
+ import { LrApolloService } from '../api/lr-apollo.service';
5
+ import { LR_CONFIG } from '../life-ready.config';
6
+ import { CurrentUserQuery, UpdateContactCardMutation, CreateContactCardMutation, } from './profile.gql';
7
+ import { ContactCardName, } from './profile.types';
8
+ import { KeyMetaService } from '../cryptography/key-meta.service';
9
+ import { KeyService } from '../cryptography/key.service';
10
+ import { EncryptionService } from '../cryptography/encryption.service';
11
+ import { ContactCardListQuery, DeleteContactCardMutation, } from '../api/contact-card.gql';
12
+ import { mapUserPlans } from '../plan/plan.service';
13
+ import { KeyGraphService } from '../cryptography/key-graph.service';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "../life-ready.config";
16
+ import * as i2 from "@angular/common/http";
17
+ import * as i3 from "../api/lr-apollo.service";
18
+ import * as i4 from "../cryptography/key.service";
19
+ import * as i5 from "../cryptography/key-meta.service";
20
+ import * as i6 from "../cryptography/key-graph.service";
21
+ import * as i7 from "../cryptography/encryption.service";
22
+ export class ProfileService {
23
+ constructor(config, http, lrApollo, keyService, keyMetaService, keyGraph, encryptionService) {
24
+ this.config = config;
25
+ this.http = http;
26
+ this.lrApollo = lrApollo;
27
+ this.keyService = keyService;
28
+ this.keyMetaService = keyMetaService;
29
+ this.keyGraph = keyGraph;
30
+ this.encryptionService = encryptionService;
31
+ }
32
+ getPassIdpParams(emailOrPhone) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ return yield this.http
35
+ .get(`${this.config.authUrl}users/pass-idp-params/?login_name=${encodeURIComponent(emailOrPhone)}`)
36
+ .toPromise();
37
+ });
38
+ }
39
+ getCurrentUser() {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ const { currentUser, contactCards, userPlans, } = yield this.lrApollo.query({
42
+ query: CurrentUserQuery,
43
+ });
44
+ const contactCard = contactCards.edges.map((x) => x.node)[0];
45
+ return {
46
+ currentUser,
47
+ contactCard,
48
+ userPlans: mapUserPlans(userPlans),
49
+ };
50
+ });
51
+ }
52
+ decryptContactCard(contactCard) {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ if (!contactCard) {
55
+ return null;
56
+ }
57
+ const details = yield this.keyGraph.decryptFromString(contactCard.key.id, contactCard.cipherData);
58
+ return Object.assign({ id: contactCard.id, keyId: contactCard.key.id }, details);
59
+ });
60
+ }
61
+ updateDetails(id, keyId, fields) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ yield (id
64
+ ? this.updateContactCard(id, keyId, fields)
65
+ : this.createContactCard(fields));
66
+ });
67
+ }
68
+ prepareContactCardInput(contactCard) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const sigPxk = yield this.keyService.getCurrentSigPxk();
71
+ const publicDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ''));
72
+ const publicSearchableSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ''));
73
+ const plainDataJson = {
74
+ // contactCard.name.value may have additional attributes such as the id of the contact card.
75
+ // So we create a clean version. Otherwise it will fail server checks.
76
+ name: new ContactCardName(contactCard.name.value),
77
+ };
78
+ const plainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, plainDataJson));
79
+ return {
80
+ sigPxkId: sigPxk.id,
81
+ publicDataSig,
82
+ publicSearchableSig,
83
+ plainDataSig,
84
+ };
85
+ });
86
+ }
87
+ createContactCard(contactCard) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ const input = yield this.prepareContactCardInput(contactCard);
90
+ const { rootKey, cipherMeta } = yield this.keyMetaService.wrapContent(contactCard);
91
+ const data = yield this.lrApollo.mutate({
92
+ mutation: CreateContactCardMutation,
93
+ variables: {
94
+ input: Object.assign(Object.assign({}, input), { cipherData: cipherMeta, wrappingKeyId: rootKey.wrappingKeyId, wrappedKey: rootKey.wrappedKey, default: true }),
95
+ },
96
+ });
97
+ return data.createContactCard.contactCard;
98
+ });
99
+ }
100
+ updateContactCard(id, keyId, contactCard) {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ const input = yield this.prepareContactCardInput(contactCard);
103
+ const cipherData = yield this.keyGraph.encryptToString(keyId, contactCard);
104
+ const data = yield this.lrApollo.mutate({
105
+ mutation: UpdateContactCardMutation,
106
+ variables: {
107
+ input: Object.assign(Object.assign({}, input), { id,
108
+ cipherData }),
109
+ },
110
+ });
111
+ return data.updateContactCard.contactCard;
112
+ });
113
+ }
114
+ decryptContactCardEdges(edges) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ return Promise.all(edges.map((edge) => __awaiter(this, void 0, void 0, function* () {
117
+ const cc = edge.node;
118
+ return yield this.decryptContactCard(cc);
119
+ })));
120
+ });
121
+ }
122
+ getContactCards() {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ const data = yield this.lrApollo.query({
125
+ query: ContactCardListQuery,
126
+ });
127
+ return yield this.decryptContactCardEdges(data.contactCards.edges);
128
+ });
129
+ }
130
+ deleteContactCard(id) {
131
+ return __awaiter(this, void 0, void 0, function* () {
132
+ const data = yield this.lrApollo.mutate({
133
+ mutation: DeleteContactCardMutation,
134
+ variables: {
135
+ input: {
136
+ id,
137
+ },
138
+ },
139
+ });
140
+ return data.deleteContactCard.id;
141
+ });
142
+ }
143
+ signOut() {
144
+ return __awaiter(this, void 0, void 0, function* () {
145
+ yield this.http
146
+ .post(`${this.config.authUrl}auth/sign-out/`, null, {
147
+ withCredentials: true,
148
+ responseType: 'text',
149
+ })
150
+ .toPromise();
151
+ });
152
+ }
153
+ }
154
+ ProfileService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProfileService_Factory() { return new ProfileService(i0.ɵɵinject(i1.LR_CONFIG), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.LrApolloService), i0.ɵɵinject(i4.KeyService), i0.ɵɵinject(i5.KeyMetaService), i0.ɵɵinject(i6.KeyGraphService), i0.ɵɵinject(i7.EncryptionService)); }, token: ProfileService, providedIn: "root" });
155
+ ProfileService.decorators = [
156
+ { type: Injectable, args: [{
157
+ providedIn: 'root',
158
+ },] }
159
+ ];
160
+ ProfileService.ctorParameters = () => [
161
+ { type: undefined, decorators: [{ type: Inject, args: [LR_CONFIG,] }] },
162
+ { type: HttpClient },
163
+ { type: LrApolloService },
164
+ { type: KeyService },
165
+ { type: KeyMetaService },
166
+ { type: KeyGraphService },
167
+ { type: EncryptionService }
168
+ ];
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi91c2Vycy9wcm9maWxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FDMUIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQU9MLGVBQWUsR0FDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIseUJBQXlCLEdBQzFCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7O0FBS3BFLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQzZCLE1BQXVCLEVBQzFDLElBQWdCLEVBQ2hCLFFBQXlCLEVBQ3pCLFVBQXNCLEVBQ3RCLGNBQThCLEVBQzlCLFFBQXlCLEVBQ3pCLGlCQUFvQztRQU5qQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUMxQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFDM0MsQ0FBQztJQUVFLGdCQUFnQixDQUFDLFlBQW9COztZQUN6QyxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUk7aUJBQ25CLEdBQUcsQ0FDRixHQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FDZCxxQ0FBcUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FDeEU7aUJBQ0EsU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQztLQUFBO0lBRUssY0FBYzs7WUFLbEIsTUFBTSxFQUNKLFdBQVcsRUFDWCxZQUFZLEVBQ1osU0FBUyxHQUNWLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBdUI7Z0JBQ2xELEtBQUssRUFBRSxnQkFBZ0I7YUFDeEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3RCxPQUFPO2dCQUNMLFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQzthQUNuQyxDQUFDO1FBQ0osQ0FBQztLQUFBO0lBRUssa0JBQWtCLENBQ3RCLFdBQTJCOztZQUUzQixJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQixPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUNuRCxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFDbEIsV0FBVyxDQUFDLFVBQVUsQ0FDdkIsQ0FBQztZQUVGLHVCQUNFLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUNsQixLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQ3RCLE9BQU8sRUFDVjtRQUNKLENBQUM7S0FBQTtJQUVLLGFBQWEsQ0FDakIsRUFBVSxFQUNWLEtBQWEsRUFDYixNQUE2Qjs7WUFFN0IsTUFBTSxDQUFDLEVBQUU7Z0JBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztnQkFDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7S0FBQTtJQUVhLHVCQUF1QixDQUNuQyxXQUFrQzs7WUFFbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDbEMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQ2xELENBQUM7WUFDRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ3hDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUNsRCxDQUFDO1lBRUYsTUFBTSxhQUFhLEdBQStCO2dCQUNoRCw0RkFBNEY7Z0JBQzVGLHNFQUFzRTtnQkFDdEUsSUFBSSxFQUFFLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ2xELENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUNqQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FDN0QsQ0FBQztZQUVGLE9BQU87Z0JBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixhQUFhO2dCQUNiLG1CQUFtQjtnQkFDbkIsWUFBWTthQUNiLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFYSxpQkFBaUIsQ0FDN0IsV0FBa0M7O1lBRWxDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTlELE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FDbkUsV0FBVyxDQUNaLENBQUM7WUFFRixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUVwQztnQkFDRCxRQUFRLEVBQUUseUJBQXlCO2dCQUNuQyxTQUFTLEVBQUU7b0JBQ1QsS0FBSyxrQ0FDQSxLQUFLLEtBQ1IsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQ3BDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUM5QixPQUFPLEVBQUUsSUFBSSxHQUNkO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1FBQzVDLENBQUM7S0FBQTtJQUVhLGlCQUFpQixDQUM3QixFQUFVLEVBQ1YsS0FBYSxFQUNiLFdBQWtDOztZQUVsQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUU5RCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztZQUUzRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUVwQztnQkFDRCxRQUFRLEVBQUUseUJBQXlCO2dCQUNuQyxTQUFTLEVBQUU7b0JBQ1QsS0FBSyxrQ0FDQSxLQUFLLEtBQ1IsRUFBRTt3QkFDRixVQUFVLEdBQ1g7aUJBQ0Y7YUFDRixDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7UUFDNUMsQ0FBQztLQUFBO0lBRUssdUJBQXVCLENBQUMsS0FBSzs7WUFDakMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQU8sSUFBUyxFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFtQixDQUFDO2dCQUNwQyxPQUFPLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQSxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7S0FBQTtJQUVLLGVBQWU7O1lBQ25CLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQU07Z0JBQzFDLEtBQUssRUFBRSxvQkFBb0I7YUFDNUIsQ0FBQyxDQUFDO1lBRUgsT0FBTyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLENBQUM7S0FBQTtJQUVLLGlCQUFpQixDQUFDLEVBQVU7O1lBQ2hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQU07Z0JBQzNDLFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLFNBQVMsRUFBRTtvQkFDVCxLQUFLLEVBQUU7d0JBQ0wsRUFBRTtxQkFDSDtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUNuQyxDQUFDO0tBQUE7SUFFSyxPQUFPOztZQUNYLE1BQU0sSUFBSSxDQUFDLElBQUk7aUJBQ1osSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLGdCQUFnQixFQUFFLElBQUksRUFBRTtnQkFDbEQsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLFlBQVksRUFBRSxNQUFNO2FBQ3JCLENBQUM7aUJBQ0QsU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQztLQUFBOzs7O1lBL0xGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQUdJLE1BQU0sU0FBQyxTQUFTO1lBcENaLFVBQVU7WUFFVixlQUFlO1lBa0JmLFVBQVU7WUFEVixjQUFjO1lBVWQsZUFBZTtZQVJmLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExyQXBvbGxvU2VydmljZSB9IGZyb20gJy4uL2FwaS9sci1hcG9sbG8uc2VydmljZSc7XG5pbXBvcnQgeyBMaWZlUmVhZHlDb25maWcsIExSX0NPTkZJRyB9IGZyb20gJy4uL2xpZmUtcmVhZHkuY29uZmlnJztcbmltcG9ydCB7XG4gIEN1cnJlbnRVc2VyUXVlcnksXG4gIEN1cnJlbnRVc2VyUXVlcnlUeXBlLFxuICBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxuICBDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxufSBmcm9tICcuL3Byb2ZpbGUuZ3FsJztcbmltcG9ydCB7XG4gIEFwaUN1cnJlbnRVc2VyLFxuICBQYXNzSWRwQXBpUmVzdWx0LFxuICBNYWluQ29udGFjdENhcmQsXG4gIEFwaUNvbnRhY3RDYXJkLFxuICBNYWluQ29udGFjdENhcmRGaWVsZHMsXG4gIE1haW5Db250YWN0Q2FyZFBsYWluRmllbGRzLFxuICBDb250YWN0Q2FyZE5hbWUsXG59IGZyb20gJy4vcHJvZmlsZS50eXBlcyc7XG5pbXBvcnQgeyBLZXlNZXRhU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktbWV0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRhY3RDYXJkIH0gZnJvbSAnLi4vYXBpL2NvbnRhY3QtY2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENvbnRhY3RDYXJkTGlzdFF1ZXJ5LFxuICBEZWxldGVDb250YWN0Q2FyZE11dGF0aW9uLFxufSBmcm9tICcuLi9hcGkvY29udGFjdC1jYXJkLmdxbCc7XG5pbXBvcnQgeyBtYXBVc2VyUGxhbnMgfSBmcm9tICcuLi9wbGFuL3BsYW4uc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyUGxhbiB9IGZyb20gJy4uL3BsYW4vcGxhbi50eXBlcyc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KExSX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IExpZmVSZWFkeUNvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBsckFwb2xsbzogTHJBcG9sbG9TZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGtleU1ldGFTZXJ2aWNlOiBLZXlNZXRhU2VydmljZSxcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIGdldFBhc3NJZHBQYXJhbXMoZW1haWxPclBob25lOiBzdHJpbmcpOiBQcm9taXNlPFBhc3NJZHBBcGlSZXN1bHQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwXG4gICAgICAuZ2V0PFBhc3NJZHBBcGlSZXN1bHQ+KFxuICAgICAgICBgJHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5hdXRoVXJsXG4gICAgICAgIH11c2Vycy9wYXNzLWlkcC1wYXJhbXMvP2xvZ2luX25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoZW1haWxPclBob25lKX1gXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRDdXJyZW50VXNlcigpOiBQcm9taXNlPHtcbiAgICBjdXJyZW50VXNlcjogQXBpQ3VycmVudFVzZXI7XG4gICAgY29udGFjdENhcmQ6IEFwaUNvbnRhY3RDYXJkO1xuICAgIHVzZXJQbGFuczogVXNlclBsYW5bXTtcbiAgfT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgY29udGFjdENhcmRzLFxuICAgICAgdXNlclBsYW5zLFxuICAgIH0gPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PEN1cnJlbnRVc2VyUXVlcnlUeXBlPih7XG4gICAgICBxdWVyeTogQ3VycmVudFVzZXJRdWVyeSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbnRhY3RDYXJkID0gY29udGFjdENhcmRzLmVkZ2VzLm1hcCgoeCkgPT4geC5ub2RlKVswXTtcblxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIGNvbnRhY3RDYXJkLFxuICAgICAgdXNlclBsYW5zOiBtYXBVc2VyUGxhbnModXNlclBsYW5zKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVjcnlwdENvbnRhY3RDYXJkKFxuICAgIGNvbnRhY3RDYXJkOiBBcGlDb250YWN0Q2FyZFxuICApOiBQcm9taXNlPE1haW5Db250YWN0Q2FyZD4ge1xuICAgIGlmICghY29udGFjdENhcmQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRldGFpbHMgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nPGFueT4oXG4gICAgICBjb250YWN0Q2FyZC5rZXkuaWQsXG4gICAgICBjb250YWN0Q2FyZC5jaXBoZXJEYXRhXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogY29udGFjdENhcmQuaWQsXG4gICAgICBrZXlJZDogY29udGFjdENhcmQua2V5LmlkLFxuICAgICAgLi4uZGV0YWlscyxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGV0YWlscyhcbiAgICBpZDogc3RyaW5nLFxuICAgIGtleUlkOiBzdHJpbmcsXG4gICAgZmllbGRzOiBNYWluQ29udGFjdENhcmRGaWVsZHNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgKGlkXG4gICAgICA/IHRoaXMudXBkYXRlQ29udGFjdENhcmQoaWQsIGtleUlkLCBmaWVsZHMpXG4gICAgICA6IHRoaXMuY3JlYXRlQ29udGFjdENhcmQoZmllbGRzKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDb250YWN0Q2FyZElucHV0KFxuICAgIGNvbnRhY3RDYXJkOiBNYWluQ29udGFjdENhcmRGaWVsZHNcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzaWdQeGsgPSBhd2FpdCB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFNpZ1B4aygpO1xuXG4gICAgY29uc3QgcHVibGljRGF0YVNpZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssICcnKVxuICAgICk7XG4gICAgY29uc3QgcHVibGljU2VhcmNoYWJsZVNpZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssICcnKVxuICAgICk7XG5cbiAgICBjb25zdCBwbGFpbkRhdGFKc29uOiBNYWluQ29udGFjdENhcmRQbGFpbkZpZWxkcyA9IHtcbiAgICAgIC8vIGNvbnRhY3RDYXJkLm5hbWUudmFsdWUgbWF5IGhhdmUgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHN1Y2ggYXMgdGhlIGlkIG9mIHRoZSBjb250YWN0IGNhcmQuXG4gICAgICAvLyBTbyB3ZSBjcmVhdGUgYSBjbGVhbiB2ZXJzaW9uLiBPdGhlcndpc2UgaXQgd2lsbCBmYWlsIHNlcnZlciBjaGVja3MuXG4gICAgICBuYW1lOiBuZXcgQ29udGFjdENhcmROYW1lKGNvbnRhY3RDYXJkLm5hbWUudmFsdWUpLFxuICAgIH07XG4gICAgY29uc3QgcGxhaW5EYXRhU2lnID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnNpZ24oc2lnUHhrLmp3aywgcGxhaW5EYXRhSnNvbilcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZ1B4a0lkOiBzaWdQeGsuaWQsXG4gICAgICBwdWJsaWNEYXRhU2lnLFxuICAgICAgcHVibGljU2VhcmNoYWJsZVNpZyxcbiAgICAgIHBsYWluRGF0YVNpZyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVDb250YWN0Q2FyZChcbiAgICBjb250YWN0Q2FyZDogTWFpbkNvbnRhY3RDYXJkRmllbGRzXG4gICk6IFByb21pc2U8QXBpQ29udGFjdENhcmQ+IHtcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNvbnRhY3RDYXJkSW5wdXQoY29udGFjdENhcmQpO1xuXG4gICAgY29uc3QgeyByb290S2V5LCBjaXBoZXJNZXRhIH0gPSBhd2FpdCB0aGlzLmtleU1ldGFTZXJ2aWNlLndyYXBDb250ZW50KFxuICAgICAgY29udGFjdENhcmRcbiAgICApO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlPHtcbiAgICAgIGNyZWF0ZUNvbnRhY3RDYXJkOiB7IGNvbnRhY3RDYXJkOiBBcGlDb250YWN0Q2FyZCB9O1xuICAgIH0+KHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICAgY2lwaGVyRGF0YTogY2lwaGVyTWV0YSxcbiAgICAgICAgICB3cmFwcGluZ0tleUlkOiByb290S2V5LndyYXBwaW5nS2V5SWQsXG4gICAgICAgICAgd3JhcHBlZEtleTogcm9vdEtleS53cmFwcGVkS2V5LFxuICAgICAgICAgIGRlZmF1bHQ6IHRydWUsIC8vIFVzZSB0aGlzIGNvbnRhY3QgY2FyZCBhcyBkZWZhdWx0IGNvbnRhY3QgY2FyZC5cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGEuY3JlYXRlQ29udGFjdENhcmQuY29udGFjdENhcmQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNvbnRhY3RDYXJkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAga2V5SWQ6IHN0cmluZyxcbiAgICBjb250YWN0Q2FyZDogTWFpbkNvbnRhY3RDYXJkRmllbGRzXG4gICk6IFByb21pc2U8QXBpQ29udGFjdENhcmQ+IHtcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNvbnRhY3RDYXJkSW5wdXQoY29udGFjdENhcmQpO1xuXG4gICAgY29uc3QgY2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKGtleUlkLCBjb250YWN0Q2FyZCk7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGU8e1xuICAgICAgdXBkYXRlQ29udGFjdENhcmQ6IHsgY29udGFjdENhcmQ6IEFwaUNvbnRhY3RDYXJkIH07XG4gICAgfT4oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjaXBoZXJEYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YS51cGRhdGVDb250YWN0Q2FyZC5jb250YWN0Q2FyZDtcbiAgfVxuXG4gIGFzeW5jIGRlY3J5cHRDb250YWN0Q2FyZEVkZ2VzKGVkZ2VzKTogUHJvbWlzZTxDb250YWN0Q2FyZFtdPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgZWRnZXMubWFwKGFzeW5jIChlZGdlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY2MgPSBlZGdlLm5vZGUgYXMgQ29udGFjdENhcmQ7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlY3J5cHRDb250YWN0Q2FyZChjYyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRDb250YWN0Q2FyZHMoKTogUHJvbWlzZTxDb250YWN0Q2FyZFtdPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8YW55Pih7XG4gICAgICBxdWVyeTogQ29udGFjdENhcmRMaXN0UXVlcnksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWNyeXB0Q29udGFjdENhcmRFZGdlcyhkYXRhLmNvbnRhY3RDYXJkcy5lZGdlcyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVDb250YWN0Q2FyZChpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGU8YW55Pih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkYXRhLmRlbGV0ZUNvbnRhY3RDYXJkLmlkO1xuICB9XG5cbiAgYXN5bmMgc2lnbk91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnLmF1dGhVcmx9YXV0aC9zaWduLW91dC9gLCBudWxsLCB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG59XG4iXX0=