@lifeready/core 1.0.2 → 1.0.3

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,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5ncWwuanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3VzZXJzL3Byb2ZpbGUuZ3FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQztBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVExRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWtFL0IsZ0JBQWdCO0NBQ25CLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7OztDQVkzQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Q0FZM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhhc0VkZ2VzIH0gZnJvbSAnLi8uLi9fY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IEhhc0tleUdyYXBoLCBQYXNzS2V5IH0gZnJvbSAnLi8uLi9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5LnR5cGVzJztcbmltcG9ydCB7IEFwaUN1cnJlbnRVc2VyLCBBcGlDb250YWN0Q2FyZCB9IGZyb20gJy4vcHJvZmlsZS50eXBlcyc7XG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcbmltcG9ydCB7IEtleUdyYXBoRnJhZ21lbnQgfSBmcm9tICcuLi9fY29tbW9uL3F1ZXJpZXMuZ3FsJztcblxuZXhwb3J0IGludGVyZmFjZSBDdXJyZW50VXNlclF1ZXJ5VHlwZSBleHRlbmRzIEhhc0tleUdyYXBoIHtcbiAgY3VycmVudFVzZXI6IEFwaUN1cnJlbnRVc2VyO1xuICBjb250YWN0Q2FyZHM6IEhhc0VkZ2VzPEFwaUNvbnRhY3RDYXJkPjtcbiAgdXNlclBsYW5zOiBhbnlbXTtcbn1cblxuZXhwb3J0IGNvbnN0IEN1cnJlbnRVc2VyUXVlcnkgPSBncWxgXG4gIHF1ZXJ5IHtcbiAgICBjdXJyZW50VXNlciB7XG4gICAgICBpZFxuICAgICAgdXNlcm5hbWVcbiAgICAgIGN1cnJlbnRVc2VyS2V5IHtcbiAgICAgICAgcGFzc0tleSB7XG4gICAgICAgICAgaWRcbiAgICAgICAgICBwYXNzS2V5UGFyYW1zXG4gICAgICAgICAgcGFzc0lkcFBhcmFtc1xuICAgICAgICAgIHdyYXBwZWRQYXNzSWRwVmVyaWZpZXJQcmtcbiAgICAgICAgICBjcmVhdGVkXG4gICAgICAgIH1cbiAgICAgICAgbWFzdGVyS2V5IHtcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICAgIHJvb3RLZXkge1xuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICAgcHhrIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICAgIHNpZ1B4ayB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdXNlckRlbGV0ZSB7XG4gICAgICAgIGlkXG4gICAgICAgIGNyZWF0ZWRcbiAgICAgICAgc3RhdGVcbiAgICAgIH1cbiAgICAgIGZlYXR1cmVzIHtcbiAgICAgICAgbXlWYXVsdFxuICAgICAgICB0cFZhdWx0XG4gICAgICAgIHNoYXJlVmF1bHRcbiAgICAgIH1cbiAgICAgIHNlc3Npb25FbmNyeXB0aW9uS2V5XG4gICAgfVxuICAgIHVzZXJQbGFucyB7XG4gICAgICBpZFxuICAgICAgc3RyaXBlIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSWRcbiAgICAgIH1cbiAgICAgIHBsYW4ge1xuICAgICAgICBuYW1lXG4gICAgICAgIGRhdGFcbiAgICAgICAgc3RhdGVcbiAgICAgIH1cbiAgICAgIHBlcmlvZEVuZFxuICAgIH1cbiAgICBjb250YWN0Q2FyZHMob3JkZXJCeTogXCJjcmVhdGVkXCIpIHtcbiAgICAgIGVkZ2VzIHtcbiAgICAgICAgbm9kZSB7XG4gICAgICAgICAgaWRcbiAgICAgICAgICBrZXkge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICB9XG4gICAgICAgICAgY2lwaGVyRGF0YVxuICAgICAgICAgIHBsYWluRGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGtleUdyYXBoIHtcbiAgICAgIC4uLktleUdyYXBoRnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtLZXlHcmFwaEZyYWdtZW50fVxuYDtcblxuZXhwb3J0IGNvbnN0IENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24gPSBncWxgXG4gIG11dGF0aW9uIENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24oJGlucHV0OiBDcmVhdGVDb250YWN0Q2FyZElucHV0ISkge1xuICAgIGNyZWF0ZUNvbnRhY3RDYXJkKGlucHV0OiAkaW5wdXQpIHtcbiAgICAgIGNvbnRhY3RDYXJkIHtcbiAgICAgICAgaWRcbiAgICAgICAga2V5IHtcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICAgIGNpcGhlckRhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uID0gZ3FsYFxuICBtdXRhdGlvbiBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uKCRpbnB1dDogVXBkYXRlQ29udGFjdENhcmRJbnB1dCEpIHtcbiAgICB1cGRhdGVDb250YWN0Q2FyZChpbnB1dDogJGlucHV0KSB7XG4gICAgICBjb250YWN0Q2FyZCB7XG4gICAgICAgIGlkXG4gICAgICAgIGtleSB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgICBjaXBoZXJEYXRhXG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuIl19
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5ncWwuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMvbmV3cmVwby9rYy1jbGllbnQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvdXNlcnMvcHJvZmlsZS5ncWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUTFELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBa0UvQixnQkFBZ0I7Q0FDbkIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7O0NBWTNDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7OztDQVkzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGFzRWRnZXMgfSBmcm9tICcuLy4uL19jb21tb24vdHlwZXMnO1xyXG5pbXBvcnQgeyBIYXNLZXlHcmFwaCwgUGFzc0tleSB9IGZyb20gJy4vLi4vY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeS50eXBlcyc7XHJcbmltcG9ydCB7IEFwaUN1cnJlbnRVc2VyLCBBcGlDb250YWN0Q2FyZCB9IGZyb20gJy4vcHJvZmlsZS50eXBlcyc7XHJcbmltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnO1xyXG5pbXBvcnQgeyBLZXlHcmFwaEZyYWdtZW50IH0gZnJvbSAnLi4vX2NvbW1vbi9xdWVyaWVzLmdxbCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbnRVc2VyUXVlcnlUeXBlIGV4dGVuZHMgSGFzS2V5R3JhcGgge1xyXG4gIGN1cnJlbnRVc2VyOiBBcGlDdXJyZW50VXNlcjtcclxuICBjb250YWN0Q2FyZHM6IEhhc0VkZ2VzPEFwaUNvbnRhY3RDYXJkPjtcclxuICB1c2VyUGxhbnM6IGFueVtdO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQ3VycmVudFVzZXJRdWVyeSA9IGdxbGBcclxuICBxdWVyeSB7XHJcbiAgICBjdXJyZW50VXNlciB7XHJcbiAgICAgIGlkXHJcbiAgICAgIHVzZXJuYW1lXHJcbiAgICAgIGN1cnJlbnRVc2VyS2V5IHtcclxuICAgICAgICBwYXNzS2V5IHtcclxuICAgICAgICAgIGlkXHJcbiAgICAgICAgICBwYXNzS2V5UGFyYW1zXHJcbiAgICAgICAgICBwYXNzSWRwUGFyYW1zXHJcbiAgICAgICAgICB3cmFwcGVkUGFzc0lkcFZlcmlmaWVyUHJrXHJcbiAgICAgICAgICBjcmVhdGVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hc3RlcktleSB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgIH1cclxuICAgICAgICByb290S2V5IHtcclxuICAgICAgICAgIGlkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHB4ayB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgIH1cclxuICAgICAgICBzaWdQeGsge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdXNlckRlbGV0ZSB7XHJcbiAgICAgICAgaWRcclxuICAgICAgICBjcmVhdGVkXHJcbiAgICAgICAgc3RhdGVcclxuICAgICAgfVxyXG4gICAgICBmZWF0dXJlcyB7XHJcbiAgICAgICAgbXlWYXVsdFxyXG4gICAgICAgIHRwVmF1bHRcclxuICAgICAgICBzaGFyZVZhdWx0XHJcbiAgICAgIH1cclxuICAgICAgc2Vzc2lvbkVuY3J5cHRpb25LZXlcclxuICAgIH1cclxuICAgIHVzZXJQbGFucyB7XHJcbiAgICAgIGlkXHJcbiAgICAgIHN0cmlwZSB7XHJcbiAgICAgICAgc3Vic2NyaXB0aW9uSWRcclxuICAgICAgfVxyXG4gICAgICBwbGFuIHtcclxuICAgICAgICBuYW1lXHJcbiAgICAgICAgZGF0YVxyXG4gICAgICAgIHN0YXRlXHJcbiAgICAgIH1cclxuICAgICAgcGVyaW9kRW5kXHJcbiAgICB9XHJcbiAgICBjb250YWN0Q2FyZHMob3JkZXJCeTogXCJjcmVhdGVkXCIpIHtcclxuICAgICAgZWRnZXMge1xyXG4gICAgICAgIG5vZGUge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICAgIGtleSB7XHJcbiAgICAgICAgICAgIGlkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjaXBoZXJEYXRhXHJcbiAgICAgICAgICBwbGFpbkRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGtleUdyYXBoIHtcclxuICAgICAgLi4uS2V5R3JhcGhGcmFnbWVudFxyXG4gICAgfVxyXG4gIH1cclxuICAke0tleUdyYXBoRnJhZ21lbnR9XHJcbmA7XHJcblxyXG5leHBvcnQgY29uc3QgQ3JlYXRlQ29udGFjdENhcmRNdXRhdGlvbiA9IGdxbGBcclxuICBtdXRhdGlvbiBDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uKCRpbnB1dDogQ3JlYXRlQ29udGFjdENhcmRJbnB1dCEpIHtcclxuICAgIGNyZWF0ZUNvbnRhY3RDYXJkKGlucHV0OiAkaW5wdXQpIHtcclxuICAgICAgY29udGFjdENhcmQge1xyXG4gICAgICAgIGlkXHJcbiAgICAgICAga2V5IHtcclxuICAgICAgICAgIGlkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNpcGhlckRhdGFcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuXHJcbmV4cG9ydCBjb25zdCBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uID0gZ3FsYFxyXG4gIG11dGF0aW9uIFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24oJGlucHV0OiBVcGRhdGVDb250YWN0Q2FyZElucHV0ISkge1xyXG4gICAgdXBkYXRlQ29udGFjdENhcmQoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICBjb250YWN0Q2FyZCB7XHJcbiAgICAgICAgaWRcclxuICAgICAgICBrZXkge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICB9XHJcbiAgICAgICAgY2lwaGVyRGF0YVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5gO1xyXG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi91c2Vycy9wcm9maWxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FDMUIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQU9MLGVBQWUsR0FDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIseUJBQXlCLEdBQzFCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7O0FBS3BFLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQzZCLE1BQXVCLEVBQzFDLElBQWdCLEVBQ2hCLFFBQXlCLEVBQ3pCLFVBQXNCLEVBQ3RCLGNBQThCLEVBQzlCLFFBQXlCLEVBQ3pCLGlCQUFvQztRQU5qQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUMx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QUM7aUJBQ0QsU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQztLQUFBOzs7O1lBL0xGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQUdJLE1BQU0sU0FBQyxTQUFTO1lBcENaLFVBQVU7WUFFVixlQUFlO1lBa0JmLFVBQVU7WUFEVixjQUFjO1lBVWQsZUFBZTtZQVJmLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExyQXBvbGxvU2VydmljZSB9IGZyb20gJy4uL2FwaS9sci1hcG9sbG8uc2VydmljZSc7XG5pbXBvcnQgeyBMaWZlUmVhZHlDb25maWcsIExSX0NPTkZJRyB9IGZyb20gJy4uL2xpZmUtcmVhZHkuY29uZmlnJztcbmltcG9ydCB7XG4gIEN1cnJlbnRVc2VyUXVlcnksXG4gIEN1cnJlbnRVc2VyUXVlcnlUeXBlLFxuICBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxuICBDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxufSBmcm9tICcuL3Byb2ZpbGUuZ3FsJztcbmltcG9ydCB7XG4gIEFwaUN1cnJlbnRVc2VyLFxuICBQYXNzSWRwQXBpUmVzdWx0LFxuICBNYWluQ29udGFjdENhcmQsXG4gIEFwaUNvbnRhY3RDYXJkLFxuICBNYWluQ29udGFjdENhcmRGaWVsZHMsXG4gIE1haW5Db250YWN0Q2FyZFBsYWluRmllbGRzLFxuICBDb250YWN0Q2FyZE5hbWUsXG59IGZyb20gJy4vcHJvZmlsZS50eXBlcyc7XG5pbXBvcnQgeyBLZXlNZXRhU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktbWV0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRhY3RDYXJkIH0gZnJvbSAnLi4vYXBpL2NvbnRhY3QtY2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENvbnRhY3RDYXJkTGlzdFF1ZXJ5LFxuICBEZWxldGVDb250YWN0Q2FyZE11dGF0aW9uLFxufSBmcm9tICcuLi9hcGkvY29udGFjdC1jYXJkLmdxbCc7XG5pbXBvcnQgeyBtYXBVc2VyUGxhbnMgfSBmcm9tICcuLi9wbGFuL3BsYW4uc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyUGxhbiB9IGZyb20gJy4uL3BsYW4vcGxhbi50eXBlcyc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KExSX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IExpZmVSZWFkeUNvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBsckFwb2xsbzogTHJBcG9sbG9TZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGtleU1ldGFTZXJ2aWNlOiBLZXlNZXRhU2VydmljZSxcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIGdldFBhc3NJZHBQYXJhbXMoZW1haWxPclBob25lOiBzdHJpbmcpOiBQcm9taXNlPFBhc3NJZHBBcGlSZXN1bHQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwXG4gICAgICAuZ2V0PFBhc3NJZHBBcGlSZXN1bHQ+KFxuICAgICAgICBgJHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5hdXRoVXJsXG4gICAgICAgIH11c2Vycy9wYXNzLWlkcC1wYXJhbXMvP2xvZ2luX25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoZW1haWxPclBob25lKX1gXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRDdXJyZW50VXNlcigpOiBQcm9taXNlPHtcbiAgICBjdXJyZW50VXNlcjogQXBpQ3VycmVudFVzZXI7XG4gICAgY29udGFjdENhcmQ6IEFwaUNvbnRhY3RDYXJkO1xuICAgIHVzZXJQbGFuczogVXNlclBsYW5bXTtcbiAgfT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgY29udGFjdENhcmRzLFxuICAgICAgdXNlclBsYW5zLFxuICAgIH0gPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PEN1cnJlbnRVc2VyUXVlcnlUeXBlPih7XG4gICAgICBxdWVyeTogQ3VycmVudFVzZXJRdWVyeSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbnRhY3RDYXJkID0gY29udGFjdENhcmRzLmVkZ2VzLm1hcCgoeCkgPT4geC5ub2RlKVswXTtcblxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIGNvbnRhY3RDYXJkLFxuICAgICAgdXNlclBsYW5zOiBtYXBVc2VyUGxhbnModXNlclBsYW5zKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVjcnlwdENvbnRhY3RDYXJkKFxuICAgIGNvbnRhY3RDYXJkOiBBcGlDb250YWN0Q2FyZFxuICApOiBQcm9taXNlPE1haW5Db250YWN0Q2FyZD4ge1xuICAgIGlmICghY29udGFjdENhcmQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRldGFpbHMgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nPGFueT4oXG4gICAgICBjb250YWN0Q2FyZC5rZXkuaWQsXG4gICAgICBjb250YWN0Q2FyZC5jaXBoZXJEYXRhXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogY29udGFjdENhcmQuaWQsXG4gICAgICBrZXlJZDogY29udGFjdENhcmQua2V5LmlkLFxuICAgICAgLi4uZGV0YWlscyxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGV0YWlscyhcbiAgICBpZDogc3RyaW5nLFxuICAgIGtleUlkOiBzdHJpbmcsXG4gICAgZmllbGRzOiBNYWluQ29udGFjdENhcmRGaWVsZHNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgKGlkXG4gICAgICA/IHRoaXMudXBkYXRlQ29udGFjdENhcmQoaWQsIGtleUlkLCBmaWVsZHMpXG4gICAgICA6IHRoaXMuY3JlYXRlQ29udGFjdENhcmQoZmllbGRzKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDb250YWN0Q2FyZElucHV0KFxuICAgIGNvbnRhY3RDYXJkOiBNYWluQ29udGFjdENhcmRGaWVsZHNcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzaWdQeGsgPSBhd2FpdCB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFNpZ1B4aygpO1xuXG4gICAgY29uc3QgcHVibGljRGF0YVNpZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssICcnKVxuICAgICk7XG4gICAgY29uc3QgcHVibGljU2VhcmNoYWJsZVNpZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssICcnKVxuICAgICk7XG5cbiAgICBjb25zdCBwbGFpbkRhdGFKc29uOiBNYWluQ29udGFjdENhcmRQbGFpbkZpZWxkcyA9IHtcbiAgICAgIC8vIGNvbnRhY3RDYXJkLm5hbWUudmFsdWUgbWF5IGhhdmUgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHN1Y2ggYXMgdGhlIGlkIG9mIHRoZSBjb250YWN0IGNhcmQuXG4gICAgICAvLyBTbyB3ZSBjcmVhdGUgYSBjbGVhbiB2ZXJzaW9uLiBPdGhlcndpc2UgaXQgd2lsbCBmYWlsIHNlcnZlciBjaGVja3MuXG4gICAgICBuYW1lOiBuZXcgQ29udGFjdENhcmROYW1lKGNvbnRhY3RDYXJkLm5hbWUudmFsdWUpLFxuICAgIH07XG4gICAgY29uc3QgcGxhaW5EYXRhU2lnID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnNpZ24oc2lnUHhrLmp3aywgcGxhaW5EYXRhSnNvbilcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZ1B4a0lkOiBzaWdQeGsuaWQsXG4gICAgICBwdWJsaWNEYXRhU2lnLFxuICAgICAgcHVibGljU2VhcmNoYWJsZVNpZyxcbiAgICAgIHBsYWluRGF0YVNpZyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVDb250YWN0Q2FyZChcbiAgICBjb250YWN0Q2FyZDogTWFpbkNvbnRhY3RDYXJkRmllbGRzXG4gICk6IFByb21pc2U8QXBpQ29udGFjdENhcmQ+IHtcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNvbnRhY3RDYXJkSW5wdXQoY29udGFjdENhcmQpO1xuXG4gICAgY29uc3QgeyByb290S2V5LCBjaXBoZXJNZXRhIH0gPSBhd2FpdCB0aGlzLmtleU1ldGFTZXJ2aWNlLndyYXBDb250ZW50KFxuICAgICAgY29udGFjdENhcmRcbiAgICApO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlPHtcbiAgICAgIGNyZWF0ZUNvbnRhY3RDYXJkOiB7IGNvbnRhY3RDYXJkOiBBcGlDb250YWN0Q2FyZCB9O1xuICAgIH0+KHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICAgY2lwaGVyRGF0YTogY2lwaGVyTWV0YSxcbiAgICAgICAgICB3cmFwcGluZ0tleUlkOiByb290S2V5LndyYXBwaW5nS2V5SWQsXG4gICAgICAgICAgd3JhcHBlZEtleTogcm9vdEtleS53cmFwcGVkS2V5LFxuICAgICAgICAgIGRlZmF1bHQ6IHRydWUsIC8vIFVzZSB0aGlzIGNvbnRhY3QgY2FyZCBhcyBkZWZhdWx0IGNvbnRhY3QgY2FyZC5cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGEuY3JlYXRlQ29udGFjdENhcmQuY29udGFjdENhcmQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNvbnRhY3RDYXJkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAga2V5SWQ6IHN0cmluZyxcbiAgICBjb250YWN0Q2FyZDogTWFpbkNvbnRhY3RDYXJkRmllbGRzXG4gICk6IFByb21pc2U8QXBpQ29udGFjdENhcmQ+IHtcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNvbnRhY3RDYXJkSW5wdXQoY29udGFjdENhcmQpO1xuXG4gICAgY29uc3QgY2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKGtleUlkLCBjb250YWN0Q2FyZCk7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGU8e1xuICAgICAgdXBkYXRlQ29udGFjdENhcmQ6IHsgY29udGFjdENhcmQ6IEFwaUNvbnRhY3RDYXJkIH07XG4gICAgfT4oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjaXBoZXJEYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YS51cGRhdGVDb250YWN0Q2FyZC5jb250YWN0Q2FyZDtcbiAgfVxuXG4gIGFzeW5jIGRlY3J5cHRDb250YWN0Q2FyZEVkZ2VzKGVkZ2VzKTogUHJvbWlzZTxDb250YWN0Q2FyZFtdPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgZWRnZXMubWFwKGFzeW5jIChlZGdlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY2MgPSBlZGdlLm5vZGUgYXMgQ29udGFjdENhcmQ7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlY3J5cHRDb250YWN0Q2FyZChjYyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRDb250YWN0Q2FyZHMoKTogUHJvbWlzZTxDb250YWN0Q2FyZFtdPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8YW55Pih7XG4gICAgICBxdWVyeTogQ29udGFjdENhcmRMaXN0UXVlcnksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWNyeXB0Q29udGFjdENhcmRFZGdlcyhkYXRhLmNvbnRhY3RDYXJkcy5lZGdlcyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVDb250YWN0Q2FyZChpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGU8YW55Pih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkYXRhLmRlbGV0ZUNvbnRhY3RDYXJkLmlkO1xuICB9XG5cbiAgYXN5bmMgc2lnbk91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnLmF1dGhVcmx9YXV0aC9zaWduLW91dC9gLCBudWxsLCB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG59XG4iXX0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL25ld3JlcG8va2MtY2xpZW50L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3VzZXJzL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIseUJBQXlCLEVBQ3pCLHlCQUF5QixHQUMxQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBT0wsZUFBZSxHQUNoQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdkUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix5QkFBeUIsR0FDMUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7Ozs7QUFLcEUsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFDNkIsTUFBdUIsRUFDMUMsSUFBZ0IsRUFDaEIsUUFBeUIsRUFDekIsVUFBc0IsRUFDdEIsY0FBOEIsRUFDOUIsUUFBeUIsRUFDekIsaUJBQW9DO1FBTmpCLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQzFDLFNBQUks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RCxTQUFTLEVBQUUsQ0FBQztRQUNqQixDQUFDO0tBQUE7Ozs7WUEvTEYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7NENBR0ksTUFBTSxTQUFDLFNBQVM7WUFwQ1osVUFBVTtZQUVWLGVBQWU7WUFrQmYsVUFBVTtZQURWLGNBQWM7WUFVZCxlQUFlO1lBUmYsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExyQXBvbGxvU2VydmljZSB9IGZyb20gJy4uL2FwaS9sci1hcG9sbG8uc2VydmljZSc7XHJcbmltcG9ydCB7IExpZmVSZWFkeUNvbmZpZywgTFJfQ09ORklHIH0gZnJvbSAnLi4vbGlmZS1yZWFkeS5jb25maWcnO1xyXG5pbXBvcnQge1xyXG4gIEN1cnJlbnRVc2VyUXVlcnksXHJcbiAgQ3VycmVudFVzZXJRdWVyeVR5cGUsXHJcbiAgVXBkYXRlQ29udGFjdENhcmRNdXRhdGlvbixcclxuICBDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxyXG59IGZyb20gJy4vcHJvZmlsZS5ncWwnO1xyXG5pbXBvcnQge1xyXG4gIEFwaUN1cnJlbnRVc2VyLFxyXG4gIFBhc3NJZHBBcGlSZXN1bHQsXHJcbiAgTWFpbkNvbnRhY3RDYXJkLFxyXG4gIEFwaUNvbnRhY3RDYXJkLFxyXG4gIE1haW5Db250YWN0Q2FyZEZpZWxkcyxcclxuICBNYWluQ29udGFjdENhcmRQbGFpbkZpZWxkcyxcclxuICBDb250YWN0Q2FyZE5hbWUsXHJcbn0gZnJvbSAnLi9wcm9maWxlLnR5cGVzJztcclxuaW1wb3J0IHsgS2V5TWV0YVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LW1ldGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9lbmNyeXB0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250YWN0Q2FyZCB9IGZyb20gJy4uL2FwaS9jb250YWN0LWNhcmQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29udGFjdENhcmRMaXN0UXVlcnksXHJcbiAgRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbixcclxufSBmcm9tICcuLi9hcGkvY29udGFjdC1jYXJkLmdxbCc7XHJcbmltcG9ydCB7IG1hcFVzZXJQbGFucyB9IGZyb20gJy4uL3BsYW4vcGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclBsYW4gfSBmcm9tICcuLi9wbGFuL3BsYW4udHlwZXMnO1xyXG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTFJfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogTGlmZVJlYWR5Q29uZmlnLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBsckFwb2xsbzogTHJBcG9sbG9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlNZXRhU2VydmljZTogS2V5TWV0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgYXN5bmMgZ2V0UGFzc0lkcFBhcmFtcyhlbWFpbE9yUGhvbmU6IHN0cmluZyk6IFByb21pc2U8UGFzc0lkcEFwaVJlc3VsdD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PFBhc3NJZHBBcGlSZXN1bHQ+KFxyXG4gICAgICAgIGAke1xyXG4gICAgICAgICAgdGhpcy5jb25maWcuYXV0aFVybFxyXG4gICAgICAgIH11c2Vycy9wYXNzLWlkcC1wYXJhbXMvP2xvZ2luX25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoZW1haWxPclBob25lKX1gXHJcbiAgICAgIClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Q3VycmVudFVzZXIoKTogUHJvbWlzZTx7XHJcbiAgICBjdXJyZW50VXNlcjogQXBpQ3VycmVudFVzZXI7XHJcbiAgICBjb250YWN0Q2FyZDogQXBpQ29udGFjdENhcmQ7XHJcbiAgICB1c2VyUGxhbnM6IFVzZXJQbGFuW107XHJcbiAgfT4ge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjdXJyZW50VXNlcixcclxuICAgICAgY29udGFjdENhcmRzLFxyXG4gICAgICB1c2VyUGxhbnMsXHJcbiAgICB9ID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxDdXJyZW50VXNlclF1ZXJ5VHlwZT4oe1xyXG4gICAgICBxdWVyeTogQ3VycmVudFVzZXJRdWVyeSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNvbnRhY3RDYXJkID0gY29udGFjdENhcmRzLmVkZ2VzLm1hcCgoeCkgPT4geC5ub2RlKVswXTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjdXJyZW50VXNlcixcclxuICAgICAgY29udGFjdENhcmQsXHJcbiAgICAgIHVzZXJQbGFuczogbWFwVXNlclBsYW5zKHVzZXJQbGFucyksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVjcnlwdENvbnRhY3RDYXJkKFxyXG4gICAgY29udGFjdENhcmQ6IEFwaUNvbnRhY3RDYXJkXHJcbiAgKTogUHJvbWlzZTxNYWluQ29udGFjdENhcmQ+IHtcclxuICAgIGlmICghY29udGFjdENhcmQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGV0YWlscyA9IGF3YWl0IHRoaXMua2V5R3JhcGguZGVjcnlwdEZyb21TdHJpbmc8YW55PihcclxuICAgICAgY29udGFjdENhcmQua2V5LmlkLFxyXG4gICAgICBjb250YWN0Q2FyZC5jaXBoZXJEYXRhXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlkOiBjb250YWN0Q2FyZC5pZCxcclxuICAgICAga2V5SWQ6IGNvbnRhY3RDYXJkLmtleS5pZCxcclxuICAgICAgLi4uZGV0YWlscyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVEZXRhaWxzKFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGtleUlkOiBzdHJpbmcsXHJcbiAgICBmaWVsZHM6IE1haW5Db250YWN0Q2FyZEZpZWxkc1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgKGlkXHJcbiAgICAgID8gdGhpcy51cGRhdGVDb250YWN0Q2FyZChpZCwga2V5SWQsIGZpZWxkcylcclxuICAgICAgOiB0aGlzLmNyZWF0ZUNvbnRhY3RDYXJkKGZpZWxkcykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ29udGFjdENhcmRJbnB1dChcclxuICAgIGNvbnRhY3RDYXJkOiBNYWluQ29udGFjdENhcmRGaWVsZHNcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3Qgc2lnUHhrID0gYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLmdldEN1cnJlbnRTaWdQeGsoKTtcclxuXHJcbiAgICBjb25zdCBwdWJsaWNEYXRhU2lnID0gSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCAnJylcclxuICAgICk7XHJcbiAgICBjb25zdCBwdWJsaWNTZWFyY2hhYmxlU2lnID0gSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcGxhaW5EYXRhSnNvbjogTWFpbkNvbnRhY3RDYXJkUGxhaW5GaWVsZHMgPSB7XHJcbiAgICAgIC8vIGNvbnRhY3RDYXJkLm5hbWUudmFsdWUgbWF5IGhhdmUgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHN1Y2ggYXMgdGhlIGlkIG9mIHRoZSBjb250YWN0IGNhcmQuXHJcbiAgICAgIC8vIFNvIHdlIGNyZWF0ZSBhIGNsZWFuIHZlcnNpb24uIE90aGVyd2lzZSBpdCB3aWxsIGZhaWwgc2VydmVyIGNoZWNrcy5cclxuICAgICAgbmFtZTogbmV3IENvbnRhY3RDYXJkTmFtZShjb250YWN0Q2FyZC5uYW1lLnZhbHVlKSxcclxuICAgIH07XHJcbiAgICBjb25zdCBwbGFpbkRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcclxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssIHBsYWluRGF0YUpzb24pXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNpZ1B4a0lkOiBzaWdQeGsuaWQsXHJcbiAgICAgIHB1YmxpY0RhdGFTaWcsXHJcbiAgICAgIHB1YmxpY1NlYXJjaGFibGVTaWcsXHJcbiAgICAgIHBsYWluRGF0YVNpZyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUNvbnRhY3RDYXJkKFxyXG4gICAgY29udGFjdENhcmQ6IE1haW5Db250YWN0Q2FyZEZpZWxkc1xyXG4gICk6IFByb21pc2U8QXBpQ29udGFjdENhcmQ+IHtcclxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ29udGFjdENhcmRJbnB1dChjb250YWN0Q2FyZCk7XHJcblxyXG4gICAgY29uc3QgeyByb290S2V5LCBjaXBoZXJNZXRhIH0gPSBhd2FpdCB0aGlzLmtleU1ldGFTZXJ2aWNlLndyYXBDb250ZW50KFxyXG4gICAgICBjb250YWN0Q2FyZFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGU8e1xyXG4gICAgICBjcmVhdGVDb250YWN0Q2FyZDogeyBjb250YWN0Q2FyZDogQXBpQ29udGFjdENhcmQgfTtcclxuICAgIH0+KHtcclxuICAgICAgbXV0YXRpb246IENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICAuLi5pbnB1dCxcclxuICAgICAgICAgIGNpcGhlckRhdGE6IGNpcGhlck1ldGEsXHJcbiAgICAgICAgICB3cmFwcGluZ0tleUlkOiByb290S2V5LndyYXBwaW5nS2V5SWQsXHJcbiAgICAgICAgICB3cmFwcGVkS2V5OiByb290S2V5LndyYXBwZWRLZXksXHJcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLCAvLyBVc2UgdGhpcyBjb250YWN0IGNhcmQgYXMgZGVmYXVsdCBjb250YWN0IGNhcmQuXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGEuY3JlYXRlQ29udGFjdENhcmQuY29udGFjdENhcmQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNvbnRhY3RDYXJkKFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGtleUlkOiBzdHJpbmcsXHJcbiAgICBjb250YWN0Q2FyZDogTWFpbkNvbnRhY3RDYXJkRmllbGRzXHJcbiAgKTogUHJvbWlzZTxBcGlDb250YWN0Q2FyZD4ge1xyXG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVDb250YWN0Q2FyZElucHV0KGNvbnRhY3RDYXJkKTtcclxuXHJcbiAgICBjb25zdCBjaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoa2V5SWQsIGNvbnRhY3RDYXJkKTtcclxuXHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGU8e1xyXG4gICAgICB1cGRhdGVDb250YWN0Q2FyZDogeyBjb250YWN0Q2FyZDogQXBpQ29udGFjdENhcmQgfTtcclxuICAgIH0+KHtcclxuICAgICAgbXV0YXRpb246IFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICAuLi5pbnB1dCxcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgY2lwaGVyRGF0YSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGF0YS51cGRhdGVDb250YWN0Q2FyZC5jb250YWN0Q2FyZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlY3J5cHRDb250YWN0Q2FyZEVkZ2VzKGVkZ2VzKTogUHJvbWlzZTxDb250YWN0Q2FyZFtdPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXHJcbiAgICAgIGVkZ2VzLm1hcChhc3luYyAoZWRnZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2MgPSBlZGdlLm5vZGUgYXMgQ29udGFjdENhcmQ7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVjcnlwdENvbnRhY3RDYXJkKGNjKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRDb250YWN0Q2FyZHMoKTogUHJvbWlzZTxDb250YWN0Q2FyZFtdPiB7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxhbnk+KHtcclxuICAgICAgcXVlcnk6IENvbnRhY3RDYXJkTGlzdFF1ZXJ5LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVjcnlwdENvbnRhY3RDYXJkRWRnZXMoZGF0YS5jb250YWN0Q2FyZHMuZWRnZXMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlQ29udGFjdENhcmQoaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGU8YW55Pih7XHJcbiAgICAgIG11dGF0aW9uOiBEZWxldGVDb250YWN0Q2FyZE11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBkYXRhLmRlbGV0ZUNvbnRhY3RDYXJkLmlkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2lnbk91dCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuaHR0cFxyXG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZy5hdXRoVXJsfWF1dGgvc2lnbi1vdXQvYCwgbnVsbCwge1xyXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcclxuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcclxuICAgICAgfSlcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=