@lifeready/core 9.0.7 → 10.0.0

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/fesm2022/lifeready-core.mjs +10522 -0
  2. package/fesm2022/lifeready-core.mjs.map +1 -0
  3. package/package.json +21 -16
  4. package/types/lifeready-core.d.ts +5329 -0
  5. package/bundles/lifeready-core.umd.js +0 -13231
  6. package/bundles/lifeready-core.umd.js.map +0 -1
  7. package/bundles/lifeready-core.umd.min.js +0 -2
  8. package/bundles/lifeready-core.umd.min.js.map +0 -1
  9. package/esm2015/lib/_common/ast.js +0 -41
  10. package/esm2015/lib/_common/deferred-promise.js +0 -24
  11. package/esm2015/lib/_common/exceptions.js +0 -186
  12. package/esm2015/lib/_common/index.js +0 -3
  13. package/esm2015/lib/_common/kc-lodash.js +0 -11
  14. package/esm2015/lib/_common/key.js +0 -28
  15. package/esm2015/lib/_common/queries.gql.js +0 -43
  16. package/esm2015/lib/_common/run-outside-angular.js +0 -80
  17. package/esm2015/lib/_common/storage.js +0 -28
  18. package/esm2015/lib/_common/types.js +0 -2
  19. package/esm2015/lib/_common/utils.js +0 -73
  20. package/esm2015/lib/api/lr-apollo.service.js +0 -47
  21. package/esm2015/lib/api/lr-graphql/index.js +0 -6
  22. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +0 -170
  23. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +0 -216
  24. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +0 -51
  25. package/esm2015/lib/api/lr-graphql/lr-mutation.js +0 -91
  26. package/esm2015/lib/api/lr-graphql/lr.service.js +0 -18
  27. package/esm2015/lib/api/query-processor/common-processors.service.js +0 -94
  28. package/esm2015/lib/api/query-processor/index.js +0 -3
  29. package/esm2015/lib/api/query-processor/query-processor.service.js +0 -307
  30. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +0 -110
  31. package/esm2015/lib/api/types/graphql.types.js +0 -8
  32. package/esm2015/lib/api/types/index.js +0 -3
  33. package/esm2015/lib/api/types/lr-graphql.types.js +0 -182
  34. package/esm2015/lib/auth/auth.config.js +0 -57
  35. package/esm2015/lib/auth/auth.gql.private.js +0 -85
  36. package/esm2015/lib/auth/auth.service.js +0 -616
  37. package/esm2015/lib/auth/auth.types.js +0 -19
  38. package/esm2015/lib/contact-card/contact-card.gql.js +0 -79
  39. package/esm2015/lib/contact-card/contact-card.service.js +0 -156
  40. package/esm2015/lib/contact-card/contact-card2.gql.js +0 -29
  41. package/esm2015/lib/contact-card/contact-card2.service.js +0 -103
  42. package/esm2015/lib/encryption/encryption.service.js +0 -188
  43. package/esm2015/lib/file-upload/file-upload.service.js +0 -70
  44. package/esm2015/lib/file-upload/file-upload.types.js +0 -2
  45. package/esm2015/lib/idle/idle.service.js +0 -159
  46. package/esm2015/lib/idle/idle.types.js +0 -7
  47. package/esm2015/lib/item/item.gql.js +0 -166
  48. package/esm2015/lib/item/item.gql.private.js +0 -41
  49. package/esm2015/lib/item/item.service.js +0 -662
  50. package/esm2015/lib/item/item.types.js +0 -2
  51. package/esm2015/lib/key/key-factory.service.js +0 -226
  52. package/esm2015/lib/key/key-graph.service.js +0 -314
  53. package/esm2015/lib/key/key-meta.service.js +0 -153
  54. package/esm2015/lib/key/key.service.js +0 -124
  55. package/esm2015/lib/key/key.types.js +0 -16
  56. package/esm2015/lib/key-exchange/key-exchange.gql.js +0 -174
  57. package/esm2015/lib/key-exchange/key-exchange.service.js +0 -496
  58. package/esm2015/lib/lbop/lbop.service.js +0 -351
  59. package/esm2015/lib/life-ready.config.js +0 -96
  60. package/esm2015/lib/life-ready.module.js +0 -42
  61. package/esm2015/lib/lock/lock.gql.js +0 -40
  62. package/esm2015/lib/lock/lock.service.js +0 -64
  63. package/esm2015/lib/notification/notification.gql.js +0 -43
  64. package/esm2015/lib/notification/notification.service.js +0 -118
  65. package/esm2015/lib/password/password.gql.js +0 -28
  66. package/esm2015/lib/password/password.service.js +0 -309
  67. package/esm2015/lib/persist/persist.service.js +0 -181
  68. package/esm2015/lib/plan/plan.gql.js +0 -91
  69. package/esm2015/lib/plan/plan.service.js +0 -191
  70. package/esm2015/lib/plan/plan.types.js +0 -2
  71. package/esm2015/lib/profile/profile-details.service.js +0 -261
  72. package/esm2015/lib/profile/profile.gql.js +0 -170
  73. package/esm2015/lib/profile/profile.service.js +0 -166
  74. package/esm2015/lib/profile/profile.types.js +0 -45
  75. package/esm2015/lib/register/register.service.js +0 -173
  76. package/esm2015/lib/register/register.types.js +0 -3
  77. package/esm2015/lib/reminder/reminder.gql.js +0 -27
  78. package/esm2015/lib/reminder/reminder.service.js +0 -85
  79. package/esm2015/lib/reminder/reminder.types.js +0 -2
  80. package/esm2015/lib/scenario/scenario.constants.js +0 -2
  81. package/esm2015/lib/scenario/scenario.controller.js +0 -34
  82. package/esm2015/lib/scenario/scenario.gql.js +0 -90
  83. package/esm2015/lib/scenario/scenario.private.gql.js +0 -200
  84. package/esm2015/lib/scenario/scenario.service.js +0 -679
  85. package/esm2015/lib/scenario/scenario.types.js +0 -2
  86. package/esm2015/lib/server-config/server-config.gql.js +0 -9
  87. package/esm2015/lib/server-config/server-config.service.js +0 -41
  88. package/esm2015/lib/shared-contact-card/shared-contact-card.service.js +0 -119
  89. package/esm2015/lib/shared-contact-card/shared-contact-card2.gql.js +0 -41
  90. package/esm2015/lib/shared-contact-card/shared-contact-card2.service.js +0 -117
  91. package/esm2015/lib/slip39/slip39.service.js +0 -167
  92. package/esm2015/lib/time/time.service.js +0 -152
  93. package/esm2015/lib/tp-assembly/tp-assembly.js +0 -363
  94. package/esm2015/lib/tp-assembly/tp-assembly.private.gql.js +0 -22
  95. package/esm2015/lib/tp-assembly/tp-assembly.types.js +0 -2
  96. package/esm2015/lib/tp-password-reset/tp-password-reset-request.service.js +0 -98
  97. package/esm2015/lib/tp-password-reset/tp-password-reset-user.service.js +0 -121
  98. package/esm2015/lib/tp-password-reset/tp-password-reset.constants.js +0 -4
  99. package/esm2015/lib/tp-password-reset/tp-password-reset.controller.js +0 -34
  100. package/esm2015/lib/tp-password-reset/tp-password-reset.gql.js +0 -74
  101. package/esm2015/lib/tp-password-reset/tp-password-reset.private.gql.js +0 -166
  102. package/esm2015/lib/tp-password-reset/tp-password-reset.private.service.js +0 -54
  103. package/esm2015/lib/tp-password-reset/tp-password-reset.service.js +0 -110
  104. package/esm2015/lib/tp-password-reset/tp-password-reset.types.js +0 -2
  105. package/esm2015/lib/trusted-party/trusted-party.gql.js +0 -96
  106. package/esm2015/lib/trusted-party/trusted-party.gql.private.js +0 -51
  107. package/esm2015/lib/trusted-party/trusted-party.service.js +0 -461
  108. package/esm2015/lib/trusted-party/trusted-party.types.js +0 -2
  109. package/esm2015/lib/two-factor/two-factor.service.js +0 -74
  110. package/esm2015/lib/user/user.gql.js +0 -32
  111. package/esm2015/lib/user/user.service.js +0 -58
  112. package/esm2015/lib/user/user.types.js +0 -2
  113. package/esm2015/lib/web-crypto/web-crypto.service.js +0 -29
  114. package/esm2015/lifeready-core.js +0 -17
  115. package/esm2015/public-api.js +0 -60
  116. package/fesm2015/lifeready-core.js +0 -10970
  117. package/fesm2015/lifeready-core.js.map +0 -1
  118. package/lib/_common/ast.d.ts +0 -11
  119. package/lib/_common/deferred-promise.d.ts +0 -12
  120. package/lib/_common/exceptions.d.ts +0 -126
  121. package/lib/_common/index.d.ts +0 -2
  122. package/lib/_common/kc-lodash.d.ts +0 -5
  123. package/lib/_common/key.d.ts +0 -14
  124. package/lib/_common/queries.gql.d.ts +0 -4
  125. package/lib/_common/run-outside-angular.d.ts +0 -14
  126. package/lib/_common/storage.d.ts +0 -13
  127. package/lib/_common/types.d.ts +0 -15
  128. package/lib/_common/utils.d.ts +0 -12
  129. package/lib/api/lr-apollo.service.d.ts +0 -15
  130. package/lib/api/lr-graphql/index.d.ts +0 -5
  131. package/lib/api/lr-graphql/lr-graphql.service.d.ts +0 -81
  132. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +0 -46
  133. package/lib/api/lr-graphql/lr-mutation-base.d.ts +0 -28
  134. package/lib/api/lr-graphql/lr-mutation.d.ts +0 -48
  135. package/lib/api/lr-graphql/lr.service.d.ts +0 -9
  136. package/lib/api/query-processor/common-processors.service.d.ts +0 -36
  137. package/lib/api/query-processor/index.d.ts +0 -2
  138. package/lib/api/query-processor/query-processor.service.d.ts +0 -18
  139. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +0 -15
  140. package/lib/api/types/graphql.types.d.ts +0 -30
  141. package/lib/api/types/index.d.ts +0 -2
  142. package/lib/api/types/lr-graphql.types.d.ts +0 -807
  143. package/lib/auth/auth.config.d.ts +0 -5
  144. package/lib/auth/auth.gql.private.d.ts +0 -25
  145. package/lib/auth/auth.service.d.ts +0 -72
  146. package/lib/auth/auth.types.d.ts +0 -70
  147. package/lib/contact-card/contact-card.gql.d.ts +0 -7
  148. package/lib/contact-card/contact-card.service.d.ts +0 -53
  149. package/lib/contact-card/contact-card2.gql.d.ts +0 -25
  150. package/lib/contact-card/contact-card2.service.d.ts +0 -64
  151. package/lib/encryption/encryption.service.d.ts +0 -42
  152. package/lib/file-upload/file-upload.service.d.ts +0 -15
  153. package/lib/file-upload/file-upload.types.d.ts +0 -5
  154. package/lib/idle/idle.service.d.ts +0 -47
  155. package/lib/idle/idle.types.d.ts +0 -10
  156. package/lib/item/item.gql.d.ts +0 -134
  157. package/lib/item/item.gql.private.d.ts +0 -35
  158. package/lib/item/item.service.d.ts +0 -201
  159. package/lib/item/item.types.d.ts +0 -95
  160. package/lib/key/key-factory.service.d.ts +0 -40
  161. package/lib/key/key-graph.service.d.ts +0 -41
  162. package/lib/key/key-meta.service.d.ts +0 -51
  163. package/lib/key/key.service.d.ts +0 -36
  164. package/lib/key/key.types.d.ts +0 -86
  165. package/lib/key-exchange/key-exchange.gql.d.ts +0 -141
  166. package/lib/key-exchange/key-exchange.service.d.ts +0 -179
  167. package/lib/lbop/lbop.service.d.ts +0 -99
  168. package/lib/life-ready.config.d.ts +0 -26
  169. package/lib/life-ready.module.d.ts +0 -5
  170. package/lib/lock/lock.gql.d.ts +0 -27
  171. package/lib/lock/lock.service.d.ts +0 -34
  172. package/lib/notification/notification.gql.d.ts +0 -37
  173. package/lib/notification/notification.service.d.ts +0 -64
  174. package/lib/password/password.gql.d.ts +0 -3
  175. package/lib/password/password.service.d.ts +0 -79
  176. package/lib/persist/persist.service.d.ts +0 -31
  177. package/lib/plan/plan.gql.d.ts +0 -69
  178. package/lib/plan/plan.service.d.ts +0 -111
  179. package/lib/plan/plan.types.d.ts +0 -16
  180. package/lib/profile/profile-details.service.d.ts +0 -20
  181. package/lib/profile/profile.gql.d.ts +0 -21
  182. package/lib/profile/profile.service.d.ts +0 -32
  183. package/lib/profile/profile.types.d.ts +0 -121
  184. package/lib/register/register.service.d.ts +0 -25
  185. package/lib/register/register.types.d.ts +0 -6
  186. package/lib/reminder/reminder.gql.d.ts +0 -23
  187. package/lib/reminder/reminder.service.d.ts +0 -33
  188. package/lib/reminder/reminder.types.d.ts +0 -17
  189. package/lib/scenario/scenario.constants.d.ts +0 -1
  190. package/lib/scenario/scenario.controller.d.ts +0 -10
  191. package/lib/scenario/scenario.gql.d.ts +0 -78
  192. package/lib/scenario/scenario.private.gql.d.ts +0 -16
  193. package/lib/scenario/scenario.service.d.ts +0 -655
  194. package/lib/scenario/scenario.types.d.ts +0 -64
  195. package/lib/server-config/server-config.gql.d.ts +0 -5
  196. package/lib/server-config/server-config.service.d.ts +0 -9
  197. package/lib/shared-contact-card/shared-contact-card.service.d.ts +0 -33
  198. package/lib/shared-contact-card/shared-contact-card2.gql.d.ts +0 -36
  199. package/lib/shared-contact-card/shared-contact-card2.service.d.ts +0 -45
  200. package/lib/slip39/slip39.service.d.ts +0 -42
  201. package/lib/time/time.service.d.ts +0 -26
  202. package/lib/tp-assembly/tp-assembly.d.ts +0 -177
  203. package/lib/tp-assembly/tp-assembly.private.gql.d.ts +0 -5
  204. package/lib/tp-assembly/tp-assembly.types.d.ts +0 -40
  205. package/lib/tp-password-reset/tp-password-reset-request.service.d.ts +0 -16
  206. package/lib/tp-password-reset/tp-password-reset-user.service.d.ts +0 -29
  207. package/lib/tp-password-reset/tp-password-reset.constants.d.ts +0 -3
  208. package/lib/tp-password-reset/tp-password-reset.controller.d.ts +0 -10
  209. package/lib/tp-password-reset/tp-password-reset.gql.d.ts +0 -63
  210. package/lib/tp-password-reset/tp-password-reset.private.gql.d.ts +0 -163
  211. package/lib/tp-password-reset/tp-password-reset.private.service.d.ts +0 -59
  212. package/lib/tp-password-reset/tp-password-reset.service.d.ts +0 -112
  213. package/lib/tp-password-reset/tp-password-reset.types.d.ts +0 -40
  214. package/lib/trusted-party/trusted-party.gql.d.ts +0 -85
  215. package/lib/trusted-party/trusted-party.gql.private.d.ts +0 -40
  216. package/lib/trusted-party/trusted-party.service.d.ts +0 -192
  217. package/lib/trusted-party/trusted-party.types.d.ts +0 -31
  218. package/lib/two-factor/two-factor.service.d.ts +0 -15
  219. package/lib/user/user.gql.d.ts +0 -8
  220. package/lib/user/user.service.d.ts +0 -9
  221. package/lib/user/user.types.d.ts +0 -16
  222. package/lib/web-crypto/web-crypto.service.d.ts +0 -5
  223. package/lifeready-core.d.ts +0 -16
  224. package/lifeready-core.metadata.json +0 -1
  225. package/public-api.d.ts +0 -56
@@ -1,261 +0,0 @@
1
- import { __awaiter, __rest } from "tslib";
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
- import { Injectable } from '@angular/core';
4
- import { LrGraphQLService } from '../api/lr-graphql';
5
- import { mapEdges } from '../api/types';
6
- import { SharedContactCardService } from '../shared-contact-card/shared-contact-card.service';
7
- import { lodash } from '../_common';
8
- import { ContactCardsQuery, TrustedPartiesQuery } from './profile.gql';
9
- import { ProfileService } from './profile.service';
10
- import { TrustedPartyType, } from './profile.types';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "../shared-contact-card/shared-contact-card.service";
13
- import * as i2 from "./profile.service";
14
- import * as i3 from "../api/lr-graphql/lr-graphql.service";
15
- var ContactFields;
16
- (function (ContactFields) {
17
- ContactFields["Name"] = "name";
18
- ContactFields["Email"] = "email";
19
- ContactFields["Image"] = "image";
20
- ContactFields["Phone"] = "phone";
21
- ContactFields["Address"] = "address";
22
- })(ContactFields || (ContactFields = {}));
23
- const FieldNames = [
24
- ContactFields.Name,
25
- ContactFields.Email,
26
- ContactFields.Image,
27
- ContactFields.Phone,
28
- ContactFields.Address,
29
- ];
30
- export class ProfileDetailsService {
31
- constructor(sharedContactCardService, profileService, api) {
32
- this.sharedContactCardService = sharedContactCardService;
33
- this.profileService = profileService;
34
- this.api = api;
35
- }
36
- updateDetails(fields) {
37
- return __awaiter(this, void 0, void 0, function* () {
38
- console.log('updateDetails()');
39
- const mainContactCard = yield this.fetchMainContactCard();
40
- const updatedMainContactCard = yield this.profileService.updateDetails(mainContactCard === null || mainContactCard === void 0 ? void 0 : mainContactCard.id, mainContactCard === null || mainContactCard === void 0 ? void 0 : mainContactCard.keyId, fields);
41
- yield this.synchronizeContactCards(fields, mainContactCard === null || mainContactCard === void 0 ? void 0 : mainContactCard.fields);
42
- return updatedMainContactCard;
43
- });
44
- }
45
- updateTrustedPartyDetails(details) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- const { id, ownedKeyId, sharedKeyId } = details, contactCard = __rest(details, ["id", "ownedKeyId", "sharedKeyId"]);
48
- yield this.sharedContactCardService.updateMySharedContactCard(id, ownedKeyId, sharedKeyId, contactCard);
49
- yield this.synchronizeSharedDetails(details);
50
- });
51
- }
52
- synchronizeSharedDetails(details) {
53
- return __awaiter(this, void 0, void 0, function* () {
54
- let hasNewValues = false;
55
- // Used to be a getCurrentUser() call which returns a caches version of the contact card.
56
- // Now we just make an API call. So ok to modify the returned value.
57
- const mainContactCard = yield this.fetchMainContactCard();
58
- if (details.name) {
59
- const property = this.checkField(details.name, mainContactCard.fields.name);
60
- if (property) {
61
- mainContactCard.fields.name = property;
62
- hasNewValues = true;
63
- }
64
- }
65
- if (details.email) {
66
- const property = this.checkField(details.email, mainContactCard.fields.email);
67
- if (property) {
68
- mainContactCard.fields.email = property;
69
- hasNewValues = true;
70
- }
71
- }
72
- if (details.image) {
73
- const property = this.checkField(details.image, mainContactCard.fields.image);
74
- if (property) {
75
- mainContactCard.fields.image = property;
76
- hasNewValues = true;
77
- }
78
- }
79
- if (details.phones && details.phones.length) {
80
- for (const phone of details.phones) {
81
- const property = this.checkField(phone.value, mainContactCard.fields.phone, phone.label);
82
- if (property) {
83
- mainContactCard.fields.phone = property;
84
- hasNewValues = true;
85
- }
86
- }
87
- }
88
- if (details.addresses && details.addresses.length) {
89
- for (const address of details.addresses) {
90
- const property = this.checkField(address.value, mainContactCard.fields.address, address.label);
91
- if (property) {
92
- mainContactCard.fields.address = property;
93
- hasNewValues = true;
94
- }
95
- }
96
- }
97
- if (hasNewValues) {
98
- yield this.profileService.updateDetails(mainContactCard.id, mainContactCard.keyId, mainContactCard.fields);
99
- }
100
- });
101
- }
102
- // ------------------------------------------------------------------
103
- // Helpers
104
- // ------------------------------------------------------------------
105
- fetchMainContactCard() {
106
- var _a;
107
- return __awaiter(this, void 0, void 0, function* () {
108
- const mainContactCard = (_a = (yield this.api.query({ query: ContactCardsQuery }))
109
- .contactCards.edges[0]) === null || _a === void 0 ? void 0 : _a.node;
110
- return mainContactCard
111
- ? {
112
- id: mainContactCard.id,
113
- keyId: mainContactCard.key.id,
114
- fields: mainContactCard.cipherDataClearJson,
115
- }
116
- : null;
117
- });
118
- }
119
- getTrustedParties() {
120
- return __awaiter(this, void 0, void 0, function* () {
121
- const { tps } = yield this.api.query({
122
- query: TrustedPartiesQuery,
123
- });
124
- return mapEdges(tps).map((tp) => this.mapTrustedParty(tp));
125
- });
126
- }
127
- mapTrustedParty(tp) {
128
- var _a, _b;
129
- const tpDetails = tp.sharedContactCard.sharedCipherDataClearJson;
130
- const myDetails = Object.assign(Object.assign({}, tp.myContactCard.sharedCipherDataClearJson), { id: tp.myContactCard.id, ownedKeyId: tp.myContactCard.ownerKey.id, sharedKeyId: tp.myContactCard.sharedKey.id });
131
- return {
132
- id: tp.id,
133
- type: TrustedPartyType.User,
134
- hasScenarios: !!tp.sharedScenarios.edges.length,
135
- hasSharedVault: !!tp.theirItems.directories.edges.length,
136
- name: (_a = tpDetails === null || tpDetails === void 0 ? void 0 : tpDetails.name) === null || _a === void 0 ? void 0 : _a.name,
137
- details: tpDetails,
138
- mySharedDetails: myDetails,
139
- userSharedKey: tp.currentUserSharedKey.userSharedKey,
140
- username: tp.other.username,
141
- features: {
142
- sharedVault: {
143
- hasAccess: (((_b = tp.other.features) === null || _b === void 0 ? void 0 : _b.shareVault) || ['noaccess'])[0] === 'access',
144
- },
145
- },
146
- };
147
- }
148
- synchronizeContactCards(newFields, oldFields) {
149
- return __awaiter(this, void 0, void 0, function* () {
150
- if (!oldFields)
151
- return;
152
- const changes = this.getChanges(newFields, oldFields);
153
- if (changes.length === 0)
154
- return;
155
- const trustedParties = yield this.getTrustedParties();
156
- if (trustedParties.length === 0)
157
- return;
158
- for (const details of trustedParties.map((x) => x.mySharedDetails)) {
159
- yield this.synchronizeSharedContactCard(details, changes);
160
- }
161
- });
162
- }
163
- getChanges(newFields, oldFields) {
164
- var _a;
165
- const changes = [];
166
- for (const field of FieldNames) {
167
- const oldField = oldFields[field];
168
- if (oldField && oldField.values) {
169
- for (const oldValue of oldField.values) {
170
- const newValue = (_a = newFields[field].values) === null || _a === void 0 ? void 0 : _a.find((x) => x.id === oldValue.id);
171
- if (!newValue) {
172
- changes.push({
173
- field,
174
- id: oldValue.id,
175
- label: oldValue.label,
176
- oldValue: oldValue.value,
177
- });
178
- }
179
- else if (!lodash.isEqual(newValue.value, oldValue.value)) {
180
- changes.push({
181
- field,
182
- id: oldValue.id,
183
- label: oldValue.label,
184
- oldValue: oldValue.value,
185
- newValue: newValue.value,
186
- });
187
- }
188
- }
189
- }
190
- }
191
- return changes;
192
- }
193
- synchronizeSharedContactCard(details, changes) {
194
- return __awaiter(this, void 0, void 0, function* () {
195
- let hasChanged = false;
196
- for (const change of changes) {
197
- switch (change.field) {
198
- case ContactFields.Phone:
199
- {
200
- const value = details.phones &&
201
- details.phones.find((x) => x.label === change.label);
202
- if (value) {
203
- hasChanged = true;
204
- value.value = change.newValue;
205
- }
206
- }
207
- break;
208
- case ContactFields.Address:
209
- {
210
- const value = details.addresses &&
211
- details.addresses.find((x) => x.label === change.label);
212
- if (value) {
213
- hasChanged = true;
214
- value.value = change.newValue;
215
- }
216
- }
217
- break;
218
- default: {
219
- const value = details[change.field];
220
- if (lodash.isEqual(value, change.oldValue)) {
221
- hasChanged = true;
222
- details[change.field] = change.newValue;
223
- }
224
- }
225
- }
226
- }
227
- if (hasChanged) {
228
- const { id, ownedKeyId, sharedKeyId } = details, contactCard = __rest(details, ["id", "ownedKeyId", "sharedKeyId"]);
229
- yield this.sharedContactCardService.updateMySharedContactCard(id, ownedKeyId, sharedKeyId, contactCard);
230
- }
231
- });
232
- }
233
- checkField(field, property, label = null) {
234
- property = property || { value: field, hasMultiple: false };
235
- property.values = property.values || [];
236
- if (property.values.length === 0 ||
237
- property.values.every((x) => !lodash.isEqual(field, x.value))) {
238
- property.values.push({
239
- id: `${label}-${new Date().getTime()}`,
240
- label,
241
- value: field,
242
- });
243
- property.hasMultiple = property.values.length > 1;
244
- property.value = property.value || field;
245
- return property;
246
- }
247
- return null;
248
- }
249
- }
250
- ProfileDetailsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProfileDetailsService_Factory() { return new ProfileDetailsService(i0.ɵɵinject(i1.SharedContactCardService), i0.ɵɵinject(i2.ProfileService), i0.ɵɵinject(i3.LrGraphQLService)); }, token: ProfileDetailsService, providedIn: "root" });
251
- ProfileDetailsService.decorators = [
252
- { type: Injectable, args: [{
253
- providedIn: 'root',
254
- },] }
255
- ];
256
- ProfileDetailsService.ctorParameters = () => [
257
- { type: SharedContactCardService },
258
- { type: ProfileService },
259
- { type: LrGraphQLService }
260
- ];
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1kZXRhaWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvcHJvZmlsZS9wcm9maWxlLWRldGFpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQU9MLGdCQUFnQixHQUNqQixNQUFNLGlCQUFpQixDQUFDOzs7OztBQUV6QixJQUFLLGFBTUo7QUFORCxXQUFLLGFBQWE7SUFDaEIsOEJBQWEsQ0FBQTtJQUNiLGdDQUFlLENBQUE7SUFDZixnQ0FBZSxDQUFBO0lBQ2YsZ0NBQWUsQ0FBQTtJQUNmLG9DQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFOSSxhQUFhLEtBQWIsYUFBYSxRQU1qQjtBQUVELE1BQU0sVUFBVSxHQUFHO0lBQ2pCLGFBQWEsQ0FBQyxJQUFJO0lBQ2xCLGFBQWEsQ0FBQyxLQUFLO0lBQ25CLGFBQWEsQ0FBQyxLQUFLO0lBQ25CLGFBQWEsQ0FBQyxLQUFLO0lBQ25CLGFBQWEsQ0FBQyxPQUFPO0NBQ3RCLENBQUM7QUFhRixNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQ1Usd0JBQWtELEVBQ2xELGNBQThCLEVBQzlCLEdBQXFC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O1lBR3hCLGNBQWM7WUFMZCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMckdyYXBoUUxTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHsgbWFwRWRnZXMsIFRwTm9kZSB9IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgeyBTaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQtY29udGFjdC1jYXJkL3NoYXJlZC1jb250YWN0LWNhcmQuc2VydmljZSc7XG5pbXBvcnQgeyBsb2Rhc2ggfSBmcm9tICcuLi9fY29tbW9uJztcbmltcG9ydCB7IENvbnRhY3RDYXJkc1F1ZXJ5LCBUcnVzdGVkUGFydGllc1F1ZXJ5IH0gZnJvbSAnLi9wcm9maWxlLmdxbCc7XG5pbXBvcnQgeyBQcm9maWxlU2VydmljZSB9IGZyb20gJy4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE1haW5Db250YWN0Q2FyZCxcbiAgTWFpbkNvbnRhY3RDYXJkRmllbGRzLFxuICBNYWluQ29udGFjdENhcmRQcm9wZXJ0eSxcbiAgU2hhcmVkVHJ1c3RlZFBhcnR5RGV0YWlscyxcbiAgVHJ1c3RlZFBhcnR5LFxuICBUcnVzdGVkUGFydHlEZXRhaWxzLFxuICBUcnVzdGVkUGFydHlUeXBlLFxufSBmcm9tICcuL3Byb2ZpbGUudHlwZXMnO1xuXG5lbnVtIENvbnRhY3RGaWVsZHMge1xuICBOYW1lID0gJ25hbWUnLFxuICBFbWFpbCA9ICdlbWFpbCcsXG4gIEltYWdlID0gJ2ltYWdlJyxcbiAgUGhvbmUgPSAncGhvbmUnLFxuICBBZGRyZXNzID0gJ2FkZHJlc3MnLFxufVxuXG5jb25zdCBGaWVsZE5hbWVzID0gW1xuICBDb250YWN0RmllbGRzLk5hbWUsXG4gIENvbnRhY3RGaWVsZHMuRW1haWwsXG4gIENvbnRhY3RGaWVsZHMuSW1hZ2UsXG4gIENvbnRhY3RGaWVsZHMuUGhvbmUsXG4gIENvbnRhY3RGaWVsZHMuQWRkcmVzcyxcbl07XG5cbmludGVyZmFjZSBGaWVsZENoYW5nZSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG9sZFZhbHVlPzogYW55O1xuICBuZXdWYWx1ZT86IGFueTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVEZXRhaWxzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2hhcmVkQ29udGFjdENhcmRTZXJ2aWNlOiBTaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGk6IExyR3JhcGhRTFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIHVwZGF0ZURldGFpbHMoZmllbGRzOiBNYWluQ29udGFjdENhcmRGaWVsZHMpOiBQcm9taXNlPE1haW5Db250YWN0Q2FyZD4ge1xuICAgIGNvbnNvbGUubG9nKCd1cGRhdGVEZXRhaWxzKCknKTtcbiAgICBjb25zdCBtYWluQ29udGFjdENhcmQgPSBhd2FpdCB0aGlzLmZldGNoTWFpbkNvbnRhY3RDYXJkKCk7XG5cbiAgICBjb25zdCB1cGRhdGVkTWFpbkNvbnRhY3RDYXJkID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS51cGRhdGVEZXRhaWxzKFxuICAgICAgbWFpbkNvbnRhY3RDYXJkPy5pZCxcbiAgICAgIG1haW5Db250YWN0Q2FyZD8ua2V5SWQsXG4gICAgICBmaWVsZHNcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5zeW5jaHJvbml6ZUNvbnRhY3RDYXJkcyhmaWVsZHMsIG1haW5Db250YWN0Q2FyZD8uZmllbGRzKTtcblxuICAgIHJldHVybiB1cGRhdGVkTWFpbkNvbnRhY3RDYXJkO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVHJ1c3RlZFBhcnR5RGV0YWlscyhkZXRhaWxzOiBTaGFyZWRUcnVzdGVkUGFydHlEZXRhaWxzKSB7XG4gICAgY29uc3QgeyBpZCwgb3duZWRLZXlJZCwgc2hhcmVkS2V5SWQsIC4uLmNvbnRhY3RDYXJkIH0gPSBkZXRhaWxzO1xuXG4gICAgYXdhaXQgdGhpcy5zaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UudXBkYXRlTXlTaGFyZWRDb250YWN0Q2FyZChcbiAgICAgIGlkLFxuICAgICAgb3duZWRLZXlJZCxcbiAgICAgIHNoYXJlZEtleUlkLFxuICAgICAgY29udGFjdENhcmRcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5zeW5jaHJvbml6ZVNoYXJlZERldGFpbHMoZGV0YWlscyk7XG4gIH1cblxuICBhc3luYyBzeW5jaHJvbml6ZVNoYXJlZERldGFpbHMoZGV0YWlsczogVHJ1c3RlZFBhcnR5RGV0YWlscykge1xuICAgIGxldCBoYXNOZXdWYWx1ZXMgPSBmYWxzZTtcblxuICAgIC8vIFVzZWQgdG8gYmUgYSBnZXRDdXJyZW50VXNlcigpIGNhbGwgd2hpY2ggcmV0dXJucyBhIGNhY2hlcyB2ZXJzaW9uIG9mIHRoZSBjb250YWN0IGNhcmQuXG4gICAgLy8gTm93IHdlIGp1c3QgbWFrZSBhbiBBUEkgY2FsbC4gU28gb2sgdG8gbW9kaWZ5IHRoZSByZXR1cm5lZCB2YWx1ZS5cbiAgICBjb25zdCBtYWluQ29udGFjdENhcmQgPSBhd2FpdCB0aGlzLmZldGNoTWFpbkNvbnRhY3RDYXJkKCk7XG5cbiAgICBpZiAoZGV0YWlscy5uYW1lKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuY2hlY2tGaWVsZChcbiAgICAgICAgZGV0YWlscy5uYW1lLFxuICAgICAgICBtYWluQ29udGFjdENhcmQuZmllbGRzLm5hbWVcbiAgICAgICk7XG5cbiAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICBtYWluQ29udGFjdENhcmQuZmllbGRzLm5hbWUgPSBwcm9wZXJ0eTtcbiAgICAgICAgaGFzTmV3VmFsdWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGV0YWlscy5lbWFpbCkge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmNoZWNrRmllbGQoXG4gICAgICAgIGRldGFpbHMuZW1haWwsXG4gICAgICAgIG1haW5Db250YWN0Q2FyZC5maWVsZHMuZW1haWxcbiAgICAgICk7XG5cbiAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICBtYWluQ29udGFjdENhcmQuZmllbGRzLmVtYWlsID0gcHJvcGVydHk7XG4gICAgICAgIGhhc05ld1ZhbHVlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMuaW1hZ2UpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5jaGVja0ZpZWxkKFxuICAgICAgICBkZXRhaWxzLmltYWdlLFxuICAgICAgICBtYWluQ29udGFjdENhcmQuZmllbGRzLmltYWdlXG4gICAgICApO1xuXG4gICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgbWFpbkNvbnRhY3RDYXJkLmZpZWxkcy5pbWFnZSA9IHByb3BlcnR5O1xuICAgICAgICBoYXNOZXdWYWx1ZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZXRhaWxzLnBob25lcyAmJiBkZXRhaWxzLnBob25lcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgcGhvbmUgb2YgZGV0YWlscy5waG9uZXMpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmNoZWNrRmllbGQoXG4gICAgICAgICAgcGhvbmUudmFsdWUsXG4gICAgICAgICAgbWFpbkNvbnRhY3RDYXJkLmZpZWxkcy5waG9uZSxcbiAgICAgICAgICBwaG9uZS5sYWJlbFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgIG1haW5Db250YWN0Q2FyZC5maWVsZHMucGhvbmUgPSBwcm9wZXJ0eTtcbiAgICAgICAgICBoYXNOZXdWYWx1ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMuYWRkcmVzc2VzICYmIGRldGFpbHMuYWRkcmVzc2VzLmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGRldGFpbHMuYWRkcmVzc2VzKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5jaGVja0ZpZWxkKFxuICAgICAgICAgIGFkZHJlc3MudmFsdWUsXG4gICAgICAgICAgbWFpbkNvbnRhY3RDYXJkLmZpZWxkcy5hZGRyZXNzLFxuICAgICAgICAgIGFkZHJlc3MubGFiZWxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICBtYWluQ29udGFjdENhcmQuZmllbGRzLmFkZHJlc3MgPSBwcm9wZXJ0eTtcbiAgICAgICAgICBoYXNOZXdWYWx1ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc05ld1ZhbHVlcykge1xuICAgICAgYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS51cGRhdGVEZXRhaWxzKFxuICAgICAgICBtYWluQ29udGFjdENhcmQuaWQsXG4gICAgICAgIG1haW5Db250YWN0Q2FyZC5rZXlJZCxcbiAgICAgICAgbWFpbkNvbnRhY3RDYXJkLmZpZWxkc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSGVscGVyc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaE1haW5Db250YWN0Q2FyZCgpOiBQcm9taXNlPE1haW5Db250YWN0Q2FyZCB8IG51bGw+IHtcbiAgICBjb25zdCBtYWluQ29udGFjdENhcmQgPSAoYXdhaXQgdGhpcy5hcGkucXVlcnkoeyBxdWVyeTogQ29udGFjdENhcmRzUXVlcnkgfSkpXG4gICAgICAuY29udGFjdENhcmRzLmVkZ2VzWzBdPy5ub2RlO1xuXG4gICAgcmV0dXJuIG1haW5Db250YWN0Q2FyZFxuICAgICAgPyB7XG4gICAgICAgICAgaWQ6IG1haW5Db250YWN0Q2FyZC5pZCxcbiAgICAgICAgICBrZXlJZDogbWFpbkNvbnRhY3RDYXJkLmtleS5pZCxcbiAgICAgICAgICBmaWVsZHM6IG1haW5Db250YWN0Q2FyZC5jaXBoZXJEYXRhQ2xlYXJKc29uIGFzIE1haW5Db250YWN0Q2FyZEZpZWxkcyxcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRUcnVzdGVkUGFydGllcygpOiBQcm9taXNlPFRydXN0ZWRQYXJ0eVtdPiB7XG4gICAgY29uc3QgeyB0cHMgfSA9IGF3YWl0IHRoaXMuYXBpLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBUcnVzdGVkUGFydGllc1F1ZXJ5LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hcEVkZ2VzKHRwcykubWFwKCh0cCkgPT4gdGhpcy5tYXBUcnVzdGVkUGFydHkodHApKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwVHJ1c3RlZFBhcnR5KHRwOiBUcE5vZGUpOiBUcnVzdGVkUGFydHkge1xuICAgIGNvbnN0IHRwRGV0YWlsczogVHJ1c3RlZFBhcnR5RGV0YWlscyA9XG4gICAgICB0cC5zaGFyZWRDb250YWN0Q2FyZC5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uO1xuXG4gICAgY29uc3QgbXlEZXRhaWxzOiBTaGFyZWRUcnVzdGVkUGFydHlEZXRhaWxzID0ge1xuICAgICAgLi4udHAubXlDb250YWN0Q2FyZC5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgICAgaWQ6IHRwLm15Q29udGFjdENhcmQuaWQsXG4gICAgICBvd25lZEtleUlkOiB0cC5teUNvbnRhY3RDYXJkLm93bmVyS2V5LmlkLFxuICAgICAgc2hhcmVkS2V5SWQ6IHRwLm15Q29udGFjdENhcmQuc2hhcmVkS2V5LmlkLFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRwLmlkLFxuICAgICAgdHlwZTogVHJ1c3RlZFBhcnR5VHlwZS5Vc2VyLFxuICAgICAgaGFzU2NlbmFyaW9zOiAhIXRwLnNoYXJlZFNjZW5hcmlvcy5lZGdlcy5sZW5ndGgsXG4gICAgICBoYXNTaGFyZWRWYXVsdDogISF0cC50aGVpckl0ZW1zLmRpcmVjdG9yaWVzLmVkZ2VzLmxlbmd0aCxcbiAgICAgIG5hbWU6IHRwRGV0YWlscz8ubmFtZT8ubmFtZSxcbiAgICAgIGRldGFpbHM6IHRwRGV0YWlscyxcbiAgICAgIG15U2hhcmVkRGV0YWlsczogbXlEZXRhaWxzLFxuICAgICAgdXNlclNoYXJlZEtleTogdHAuY3VycmVudFVzZXJTaGFyZWRLZXkudXNlclNoYXJlZEtleSxcbiAgICAgIHVzZXJuYW1lOiB0cC5vdGhlci51c2VybmFtZSxcbiAgICAgIGZlYXR1cmVzOiB7XG4gICAgICAgIHNoYXJlZFZhdWx0OiB7XG4gICAgICAgICAgaGFzQWNjZXNzOlxuICAgICAgICAgICAgKHRwLm90aGVyLmZlYXR1cmVzPy5zaGFyZVZhdWx0IHx8IFsnbm9hY2Nlc3MnXSlbMF0gPT09ICdhY2Nlc3MnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzeW5jaHJvbml6ZUNvbnRhY3RDYXJkcyhcbiAgICBuZXdGaWVsZHM6IE1haW5Db250YWN0Q2FyZEZpZWxkcyxcbiAgICBvbGRGaWVsZHM6IE1haW5Db250YWN0Q2FyZEZpZWxkc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW9sZEZpZWxkcykgcmV0dXJuO1xuXG4gICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZ2V0Q2hhbmdlcyhuZXdGaWVsZHMsIG9sZEZpZWxkcyk7XG5cbiAgICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IHRydXN0ZWRQYXJ0aWVzID0gYXdhaXQgdGhpcy5nZXRUcnVzdGVkUGFydGllcygpO1xuXG4gICAgaWYgKHRydXN0ZWRQYXJ0aWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCBkZXRhaWxzIG9mIHRydXN0ZWRQYXJ0aWVzLm1hcCgoeCkgPT4geC5teVNoYXJlZERldGFpbHMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnN5bmNocm9uaXplU2hhcmVkQ29udGFjdENhcmQoZGV0YWlscywgY2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGFuZ2VzKFxuICAgIG5ld0ZpZWxkczogTWFpbkNvbnRhY3RDYXJkRmllbGRzLFxuICAgIG9sZEZpZWxkczogTWFpbkNvbnRhY3RDYXJkRmllbGRzXG4gICk6IEZpZWxkQ2hhbmdlW10ge1xuICAgIGNvbnN0IGNoYW5nZXM6IEZpZWxkQ2hhbmdlW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgRmllbGROYW1lcykge1xuICAgICAgY29uc3Qgb2xkRmllbGQgPSBvbGRGaWVsZHNbZmllbGRdO1xuICAgICAgaWYgKG9sZEZpZWxkICYmIG9sZEZpZWxkLnZhbHVlcykge1xuICAgICAgICBmb3IgKGNvbnN0IG9sZFZhbHVlIG9mIG9sZEZpZWxkLnZhbHVlcykge1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gKG5ld0ZpZWxkc1tmaWVsZF0udmFsdWVzIGFzIGFueVtdKT8uZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4LmlkID09PSBvbGRWYWx1ZS5pZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBjaGFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgaWQ6IG9sZFZhbHVlLmlkLFxuICAgICAgICAgICAgICBsYWJlbDogb2xkVmFsdWUubGFiZWwsXG4gICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWxvZGFzaC5pc0VxdWFsKG5ld1ZhbHVlLnZhbHVlLCBvbGRWYWx1ZS52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICBpZDogb2xkVmFsdWUuaWQsXG4gICAgICAgICAgICAgIGxhYmVsOiBvbGRWYWx1ZS5sYWJlbCxcbiAgICAgICAgICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN5bmNocm9uaXplU2hhcmVkQ29udGFjdENhcmQoXG4gICAgZGV0YWlsczogU2hhcmVkVHJ1c3RlZFBhcnR5RGV0YWlscyxcbiAgICBjaGFuZ2VzOiBGaWVsZENoYW5nZVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgc3dpdGNoIChjaGFuZ2UuZmllbGQpIHtcbiAgICAgICAgY2FzZSBDb250YWN0RmllbGRzLlBob25lOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgICAgZGV0YWlscy5waG9uZXMgJiZcbiAgICAgICAgICAgICAgZGV0YWlscy5waG9uZXMuZmluZCgoeCkgPT4geC5sYWJlbCA9PT0gY2hhbmdlLmxhYmVsKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29udGFjdEZpZWxkcy5BZGRyZXNzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgICAgZGV0YWlscy5hZGRyZXNzZXMgJiZcbiAgICAgICAgICAgICAgZGV0YWlscy5hZGRyZXNzZXMuZmluZCgoeCkgPT4geC5sYWJlbCA9PT0gY2hhbmdlLmxhYmVsKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRldGFpbHNbY2hhbmdlLmZpZWxkXTtcblxuICAgICAgICAgIGlmIChsb2Rhc2guaXNFcXVhbCh2YWx1ZSwgY2hhbmdlLm9sZFZhbHVlKSkge1xuICAgICAgICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICBkZXRhaWxzW2NoYW5nZS5maWVsZF0gPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICBjb25zdCB7IGlkLCBvd25lZEtleUlkLCBzaGFyZWRLZXlJZCwgLi4uY29udGFjdENhcmQgfSA9IGRldGFpbHM7XG5cbiAgICAgIGF3YWl0IHRoaXMuc2hhcmVkQ29udGFjdENhcmRTZXJ2aWNlLnVwZGF0ZU15U2hhcmVkQ29udGFjdENhcmQoXG4gICAgICAgIGlkLFxuICAgICAgICBvd25lZEtleUlkLFxuICAgICAgICBzaGFyZWRLZXlJZCxcbiAgICAgICAgY29udGFjdENhcmRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0ZpZWxkPFQ+KFxuICAgIGZpZWxkOiBULFxuICAgIHByb3BlcnR5OiBNYWluQ29udGFjdENhcmRQcm9wZXJ0eTxUPixcbiAgICBsYWJlbDogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5IHx8IHsgdmFsdWU6IGZpZWxkLCBoYXNNdWx0aXBsZTogZmFsc2UgfTtcbiAgICBwcm9wZXJ0eS52YWx1ZXMgPSBwcm9wZXJ0eS52YWx1ZXMgfHwgW107XG5cbiAgICBpZiAoXG4gICAgICBwcm9wZXJ0eS52YWx1ZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICBwcm9wZXJ0eS52YWx1ZXMuZXZlcnkoKHgpID0+ICFsb2Rhc2guaXNFcXVhbChmaWVsZCwgeC52YWx1ZSkpXG4gICAgKSB7XG4gICAgICBwcm9wZXJ0eS52YWx1ZXMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtsYWJlbH0tJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgdmFsdWU6IGZpZWxkLFxuICAgICAgfSk7XG4gICAgICBwcm9wZXJ0eS5oYXNNdWx0aXBsZSA9IHByb3BlcnR5LnZhbHVlcy5sZW5ndGggPiAxO1xuICAgICAgcHJvcGVydHkudmFsdWUgPSBwcm9wZXJ0eS52YWx1ZSB8fCBmaWVsZDtcbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -1,170 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import gql from 'graphql-tag';
3
- import { KeyExchangeFields, UserSharedKeyFields, } from '../key-exchange/key-exchange.gql';
4
- import { SharedContactCardFields } from '../shared-contact-card/shared-contact-card.service';
5
- import { gqlTyped } from '../_common/ast';
6
- import { KeyGraphFragment } from '../_common/queries.gql';
7
- export const TrustedPartyProperties = `
8
- id
9
- user {
10
- id
11
- username
12
- }
13
- other{
14
- id
15
- username,
16
- features {
17
- shareVault
18
- }
19
- }
20
- sharedContactCard {
21
- ${SharedContactCardFields}
22
- }
23
- myContactCard {
24
- ${SharedContactCardFields}
25
- }
26
- sharedScenarios {
27
- edges {
28
- node {
29
- id
30
- }
31
- }
32
- }
33
- theirItems {
34
- directories {
35
- edges {
36
- node {
37
- id
38
- }
39
- }
40
- }
41
- }
42
- currentUserSharedKey {
43
- userSharedKey {
44
- keyExchange {
45
- ${KeyExchangeFields}
46
- }
47
- ${UserSharedKeyFields}
48
- }
49
- }`;
50
- export const CurrentUserQuery = gql `
51
- query {
52
- currentUser {
53
- id
54
- username
55
- currentUserKey {
56
- passKey {
57
- id
58
- passKeyParams
59
- passIdpParams
60
- wrappedPassIdpVerifierPrk
61
- created
62
- }
63
- masterKey {
64
- id
65
- }
66
- rootKey {
67
- id
68
- }
69
- pxk {
70
- id
71
- }
72
- sigPxk {
73
- id
74
- }
75
- }
76
- userDelete {
77
- id
78
- created
79
- state
80
- }
81
- features {
82
- myVault
83
- tpVault
84
- shareVault
85
- }
86
- sessionEncryptionKey
87
- dateJoined
88
- }
89
- userPlans {
90
- id
91
- stripe {
92
- subscriptionId
93
- }
94
- plan {
95
- name
96
- data
97
- state
98
- }
99
- periodEnd
100
- }
101
- contactCards(orderBy: "created") {
102
- edges {
103
- node {
104
- id
105
- key {
106
- id
107
- }
108
- cipherData
109
- plainData
110
- }
111
- }
112
- }
113
- keyGraph {
114
- ...KeyGraphFragment
115
- }
116
- }
117
- ${KeyGraphFragment}
118
- `;
119
- export const CreateContactCardMutation = gql `
120
- mutation CreateContactCardMutation($input: CreateContactCardInput!) {
121
- createContactCard(input: $input) {
122
- contactCard {
123
- id
124
- key {
125
- id
126
- }
127
- cipherData
128
- }
129
- }
130
- }
131
- `;
132
- export const UpdateContactCardMutation = gql `
133
- mutation UpdateContactCardMutation($input: UpdateContactCardInput!) {
134
- updateContactCard(input: $input) {
135
- contactCard {
136
- id
137
- key {
138
- id
139
- }
140
- cipherData
141
- }
142
- }
143
- }
144
- `;
145
- export const TrustedPartiesQuery = gqlTyped `
146
- query TrustedPartiesQuery {
147
- tps {
148
- edges {
149
- node {
150
- ${TrustedPartyProperties}
151
- }
152
- }
153
- }
154
- }`;
155
- export const ContactCardsQuery = gqlTyped `
156
- query ContactCardsQuery {
157
- contactCards(orderBy: "created") {
158
- edges {
159
- node {
160
- id
161
- cipherData
162
- key {
163
- id
164
- }
165
- }
166
- }
167
- }
168
- }
169
- `;
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5ncWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvcHJvZmlsZS9wcm9maWxlLmdxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDO0FBRTlCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsbUJBQW1CLEdBQ3BCLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDN0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTFELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHOzs7Ozs7Ozs7Ozs7OztNQWNoQyx1QkFBdUI7OztNQUd2Qix1QkFBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztVQXFCbkIsaUJBQWlCOztRQUVuQixtQkFBbUI7O0lBRXZCLENBQUM7QUFRTCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFtRS9CLGdCQUFnQjtDQUNuQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Q0FZM0MsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7O0NBWTNDLENBQUM7QUFLRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQTJCOzs7OztVQUs1RCxzQkFBc0I7Ozs7RUFJOUIsQ0FBQztBQUtILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBeUI7Ozs7Ozs7Ozs7Ozs7O0NBY2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcbmltcG9ydCB7IENvbm5lY3Rpb24sIENvbnRhY3RDYXJkTm9kZSwgVHBOb2RlIH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7XG4gIEtleUV4Y2hhbmdlRmllbGRzLFxuICBVc2VyU2hhcmVkS2V5RmllbGRzLFxufSBmcm9tICcuLi9rZXktZXhjaGFuZ2Uva2V5LWV4Y2hhbmdlLmdxbCc7XG5pbXBvcnQgeyBIYXNLZXlHcmFwaCB9IGZyb20gJy4uL2tleS9rZXkudHlwZXMnO1xuaW1wb3J0IHsgU2hhcmVkQ29udGFjdENhcmRGaWVsZHMgfSBmcm9tICcuLi9zaGFyZWQtY29udGFjdC1jYXJkL3NoYXJlZC1jb250YWN0LWNhcmQuc2VydmljZSc7XG5pbXBvcnQgeyBncWxUeXBlZCB9IGZyb20gJy4uL19jb21tb24vYXN0JztcbmltcG9ydCB7IEtleUdyYXBoRnJhZ21lbnQgfSBmcm9tICcuLi9fY29tbW9uL3F1ZXJpZXMuZ3FsJztcbmltcG9ydCB7IEhhc0VkZ2VzIH0gZnJvbSAnLi8uLi9fY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IEFwaUNvbnRhY3RDYXJkLCBBcGlDdXJyZW50VXNlciB9IGZyb20gJy4vcHJvZmlsZS50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBUcnVzdGVkUGFydHlQcm9wZXJ0aWVzID0gYFxuICBpZFxuICB1c2VyIHtcbiAgICBpZFxuICAgIHVzZXJuYW1lXG4gIH1cbiAgb3RoZXJ7XG4gICAgaWRcbiAgICB1c2VybmFtZSxcbiAgICBmZWF0dXJlcyB7XG4gICAgICBzaGFyZVZhdWx0XG4gICAgfVxuICB9XG4gIHNoYXJlZENvbnRhY3RDYXJkIHtcbiAgICAke1NoYXJlZENvbnRhY3RDYXJkRmllbGRzfVxuICB9XG4gIG15Q29udGFjdENhcmQge1xuICAgICR7U2hhcmVkQ29udGFjdENhcmRGaWVsZHN9XG4gIH1cbiAgc2hhcmVkU2NlbmFyaW9zIHtcbiAgICBlZGdlcyB7XG4gICAgICBub2RlIHtcbiAgICAgICAgaWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdGhlaXJJdGVtcyB7XG4gICAgZGlyZWN0b3JpZXMge1xuICAgICAgZWRnZXMge1xuICAgICAgICBub2RlIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGN1cnJlbnRVc2VyU2hhcmVkS2V5IHtcbiAgICB1c2VyU2hhcmVkS2V5IHtcbiAgICAgIGtleUV4Y2hhbmdlIHtcbiAgICAgICAgJHtLZXlFeGNoYW5nZUZpZWxkc31cbiAgICAgIH1cbiAgICAgICR7VXNlclNoYXJlZEtleUZpZWxkc31cbiAgICB9XG4gIH1gO1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbnRVc2VyUXVlcnlUeXBlIGV4dGVuZHMgSGFzS2V5R3JhcGgge1xuICBjdXJyZW50VXNlcjogQXBpQ3VycmVudFVzZXI7XG4gIGNvbnRhY3RDYXJkczogSGFzRWRnZXM8QXBpQ29udGFjdENhcmQ+O1xuICB1c2VyUGxhbnM6IGFueVtdO1xufVxuXG5leHBvcnQgY29uc3QgQ3VycmVudFVzZXJRdWVyeSA9IGdxbGBcbiAgcXVlcnkge1xuICAgIGN1cnJlbnRVc2VyIHtcbiAgICAgIGlkXG4gICAgICB1c2VybmFtZVxuICAgICAgY3VycmVudFVzZXJLZXkge1xuICAgICAgICBwYXNzS2V5IHtcbiAgICAgICAgICBpZFxuICAgICAgICAgIHBhc3NLZXlQYXJhbXNcbiAgICAgICAgICBwYXNzSWRwUGFyYW1zXG4gICAgICAgICAgd3JhcHBlZFBhc3NJZHBWZXJpZmllclBya1xuICAgICAgICAgIGNyZWF0ZWRcbiAgICAgICAgfVxuICAgICAgICBtYXN0ZXJLZXkge1xuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICAgcm9vdEtleSB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgICBweGsge1xuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICAgc2lnUHhrIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB1c2VyRGVsZXRlIHtcbiAgICAgICAgaWRcbiAgICAgICAgY3JlYXRlZFxuICAgICAgICBzdGF0ZVxuICAgICAgfVxuICAgICAgZmVhdHVyZXMge1xuICAgICAgICBteVZhdWx0XG4gICAgICAgIHRwVmF1bHRcbiAgICAgICAgc2hhcmVWYXVsdFxuICAgICAgfVxuICAgICAgc2Vzc2lvbkVuY3J5cHRpb25LZXlcbiAgICAgIGRhdGVKb2luZWRcbiAgICB9XG4gICAgdXNlclBsYW5zIHtcbiAgICAgIGlkXG4gICAgICBzdHJpcGUge1xuICAgICAgICBzdWJzY3JpcHRpb25JZFxuICAgICAgfVxuICAgICAgcGxhbiB7XG4gICAgICAgIG5hbWVcbiAgICAgICAgZGF0YVxuICAgICAgICBzdGF0ZVxuICAgICAgfVxuICAgICAgcGVyaW9kRW5kXG4gICAgfVxuICAgIGNvbnRhY3RDYXJkcyhvcmRlckJ5OiBcImNyZWF0ZWRcIikge1xuICAgICAgZWRnZXMge1xuICAgICAgICBub2RlIHtcbiAgICAgICAgICBpZFxuICAgICAgICAgIGtleSB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgIH1cbiAgICAgICAgICBjaXBoZXJEYXRhXG4gICAgICAgICAgcGxhaW5EYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAga2V5R3JhcGgge1xuICAgICAgLi4uS2V5R3JhcGhGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0tleUdyYXBoRnJhZ21lbnR9XG5gO1xuXG5leHBvcnQgY29uc3QgQ3JlYXRlQ29udGFjdENhcmRNdXRhdGlvbiA9IGdxbGBcbiAgbXV0YXRpb24gQ3JlYXRlQ29udGFjdENhcmRNdXRhdGlvbigkaW5wdXQ6IENyZWF0ZUNvbnRhY3RDYXJkSW5wdXQhKSB7XG4gICAgY3JlYXRlQ29udGFjdENhcmQoaW5wdXQ6ICRpbnB1dCkge1xuICAgICAgY29udGFjdENhcmQge1xuICAgICAgICBpZFxuICAgICAgICBrZXkge1xuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICAgY2lwaGVyRGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24gPSBncWxgXG4gIG11dGF0aW9uIFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24oJGlucHV0OiBVcGRhdGVDb250YWN0Q2FyZElucHV0ISkge1xuICAgIHVwZGF0ZUNvbnRhY3RDYXJkKGlucHV0OiAkaW5wdXQpIHtcbiAgICAgIGNvbnRhY3RDYXJkIHtcbiAgICAgICAgaWRcbiAgICAgICAga2V5IHtcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICAgIGNpcGhlckRhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJ1c3RlZFBhcnRpZXNRdWVyeVJlc3VsdCB7XG4gIHRwczogQ29ubmVjdGlvbjxUcE5vZGU+O1xufVxuZXhwb3J0IGNvbnN0IFRydXN0ZWRQYXJ0aWVzUXVlcnkgPSBncWxUeXBlZDxUcnVzdGVkUGFydGllc1F1ZXJ5UmVzdWx0PmBcbnF1ZXJ5IFRydXN0ZWRQYXJ0aWVzUXVlcnkge1xuICB0cHMge1xuICAgIGVkZ2VzIHtcbiAgICAgIG5vZGUge1xuICAgICAgICAke1RydXN0ZWRQYXJ0eVByb3BlcnRpZXN9XG4gICAgICB9XG4gICAgfVxuICB9XG59YDtcblxuZXhwb3J0IGludGVyZmFjZSBDb250YWN0Q2FyZHNRdWVyeVJlc3VsdCB7XG4gIGNvbnRhY3RDYXJkczogQ29ubmVjdGlvbjxDb250YWN0Q2FyZE5vZGU+O1xufVxuZXhwb3J0IGNvbnN0IENvbnRhY3RDYXJkc1F1ZXJ5ID0gZ3FsVHlwZWQ8Q29udGFjdENhcmRzUXVlcnlSZXN1bHQ+YFxucXVlcnkgQ29udGFjdENhcmRzUXVlcnkge1xuICBjb250YWN0Q2FyZHMob3JkZXJCeTogXCJjcmVhdGVkXCIpIHtcbiAgICBlZGdlcyB7XG4gICAgICBub2RlIHtcbiAgICAgICAgaWRcbiAgICAgICAgY2lwaGVyRGF0YVxuICAgICAgICBrZXkge1xuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmA7XG4iXX0=