@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,326 +1,326 @@
1
- import { __awaiter } from "tslib";
2
- import { HttpClient } from '@angular/common/http';
3
- import { Injectable } from '@angular/core';
4
- import { KeyExchangeService } from '../api/key-exchange.service';
5
- import { LrApolloService } from '../api/lr-apollo.service';
6
- import { SharedContactCardService } from '../api/shared-contact-card.service';
7
- import { LifeReadyAuthService } from '../auth/life-ready-auth.service';
8
- import { EncryptionService } from '../cryptography/encryption.service';
9
- import { KeyGraphService } from '../cryptography/key-graph.service';
10
- import { KeyService } from '../cryptography/key.service';
11
- import { UserService } from '../users/user.service';
12
- import { ContactCardName } from '../users/profile.types';
13
- import { CancelTrustedPartyInvitationMutation, DeclineTrustedPartyInvitationMutation, DeleteTrustedPartyMutation, GetAllTrustedPartiesQuery, GetTrustedPartiesQuery, GetTrustedPartyQuery, ShareCategoryMutation, UnshareCategoryMutation, } from './trusted-party.gql';
14
- import { TrustedPartyInviteStatus, TrustedPartyType, TrustedPartyRoleType, } from './trusted-party.types';
15
- import { KeyFactoryService } from '../cryptography/key-factory.service';
16
- import * as i0 from "@angular/core";
17
- import * as i1 from "@angular/common/http";
18
- import * as i2 from "../api/lr-apollo.service";
19
- import * as i3 from "../api/shared-contact-card.service";
20
- import * as i4 from "../users/user.service";
21
- import * as i5 from "../auth/life-ready-auth.service";
22
- import * as i6 from "../api/key-exchange.service";
23
- import * as i7 from "../cryptography/key-graph.service";
24
- import * as i8 from "../cryptography/key.service";
25
- import * as i9 from "../cryptography/key-factory.service";
26
- import * as i10 from "../cryptography/encryption.service";
27
- export class TrustedPartyService {
28
- constructor(http, lrApollo, sharedContactCardService, userService, authService, keyExchangeService, keyGraphService, keyService, keyFactory, encryptionService) {
29
- this.http = http;
30
- this.lrApollo = lrApollo;
31
- this.sharedContactCardService = sharedContactCardService;
32
- this.userService = userService;
33
- this.authService = authService;
34
- this.keyExchangeService = keyExchangeService;
35
- this.keyGraphService = keyGraphService;
36
- this.keyService = keyService;
37
- this.keyFactory = keyFactory;
38
- this.encryptionService = encryptionService;
39
- }
40
- getTrustedParties() {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- const { tps } = yield this.lrApollo.query({
43
- query: GetTrustedPartiesQuery,
44
- });
45
- return yield Promise.all(tps.edges.map((x) => this.mapTrustedParty(x.node)));
46
- });
47
- }
48
- getAllTrustedParties() {
49
- return __awaiter(this, void 0, void 0, function* () {
50
- const user = yield this.authService.getUser();
51
- const { tps, invites, sentInvites } = yield this.lrApollo.query({
52
- query: GetAllTrustedPartiesQuery,
53
- variables: {
54
- userId: user.id,
55
- isExpired: false,
56
- },
57
- });
58
- return {
59
- parties: (yield Promise.all(tps.edges.map((x) => this.mapTrustedParty(x.node)))).filter((x) => x),
60
- invites: (yield Promise.all(invites.edges.map((x) => __awaiter(this, void 0, void 0, function* () {
61
- return this.mapInvite(yield this.keyExchangeService.decryptKeyExchange(x.node));
62
- }))))
63
- .filter((x) => x.status !== TrustedPartyInviteStatus.Completed)
64
- .filter((x) => x.status !== TrustedPartyInviteStatus.Invited || x.actionRequired),
65
- sentInvites: (yield Promise.all(sentInvites.edges.map((x) => __awaiter(this, void 0, void 0, function* () {
66
- return this.mapInvite(yield this.keyExchangeService.decryptKeyExchange(x.node));
67
- })))).filter((x) => x.status !== TrustedPartyInviteStatus.Completed),
68
- };
69
- });
70
- }
71
- getTrustedParty(partyId) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- const { tp } = yield this.lrApollo.query({
74
- query: GetTrustedPartyQuery,
75
- variables: { partyId },
76
- });
77
- return yield this.mapTrustedParty(tp);
78
- });
79
- }
80
- getTrustedPartyRoles(roleType = TrustedPartyRoleType.General) {
81
- return __awaiter(this, void 0, void 0, function* () {
82
- if (!this.trustedPartyRoles) {
83
- this.trustedPartyRoles = yield this.http
84
- .get('/assets/meta/trusted-party-roles.json')
85
- .toPromise();
86
- }
87
- return Promise.resolve(this.trustedPartyRoles.filter((x) => x.roleType === roleType));
88
- });
89
- }
90
- findByEmail(email) {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- try {
93
- const user = yield this.userService.getUserByEmail(email);
94
- return user
95
- ? {
96
- id: user.id,
97
- email,
98
- username: user.username,
99
- isTrustedParty: user.haveTp,
100
- isMe: user.isCurrentUser,
101
- }
102
- : null;
103
- }
104
- catch (e) {
105
- return null;
106
- }
107
- });
108
- }
109
- inviteTrustedParty(invite) {
110
- return __awaiter(this, void 0, void 0, function* () {
111
- const params = {
112
- responderUsername: invite.party.username,
113
- email: invite.party.email,
114
- message: {
115
- name: invite.party.name,
116
- email: invite.party.email,
117
- message: invite.party.message,
118
- permissions: invite.permissions,
119
- },
120
- contactCard: {
121
- plainOwnerCipherDataJson: null,
122
- plainSharedCipherDataJson: invite.mySharedDetails,
123
- ownerPlainData: {
124
- name: new ContactCardName(invite.mySharedDetails.name),
125
- },
126
- },
127
- };
128
- yield this.keyExchangeService.initiateOtk(params);
129
- });
130
- }
131
- cancelInvitation(inviteId) {
132
- return __awaiter(this, void 0, void 0, function* () {
133
- yield this.lrApollo.mutate({
134
- mutation: CancelTrustedPartyInvitationMutation,
135
- variables: {
136
- input: {
137
- id: inviteId,
138
- },
139
- },
140
- });
141
- });
142
- }
143
- getInvitation(inviteId, inviteToken, key) {
144
- return __awaiter(this, void 0, void 0, function* () {
145
- const exchange = yield this.keyExchangeService.getKeyExchange(inviteId, {
146
- token: inviteToken,
147
- otKeyK: key,
148
- });
149
- return this.mapInvite(exchange);
150
- });
151
- }
152
- acceptInvitation(invite) {
153
- return __awaiter(this, void 0, void 0, function* () {
154
- const params = {
155
- id: invite.inviteId,
156
- token: invite.inviteToken,
157
- decryptedOtk: invite.decryptedOtk,
158
- initiatorContactCard: null,
159
- responderContactCard: {
160
- plainOwnerCipherDataJson: null,
161
- plainSharedCipherDataJson: invite.mySharedDetails,
162
- ownerPlainData: {
163
- name: new ContactCardName(invite.mySharedDetails.name),
164
- },
165
- },
166
- };
167
- const { tp } = yield this.keyExchangeService.respondOtk(params);
168
- return tp.id;
169
- });
170
- }
171
- declineInvitation(inviteId, inviteToken) {
172
- return __awaiter(this, void 0, void 0, function* () {
173
- yield this.lrApollo.mutate({
174
- mutation: DeclineTrustedPartyInvitationMutation,
175
- variables: {
176
- input: {
177
- id: inviteId,
178
- token: inviteToken,
179
- },
180
- },
181
- });
182
- });
183
- }
184
- confirmInvitation(confirm) {
185
- return __awaiter(this, void 0, void 0, function* () {
186
- const { tp } = yield this.keyExchangeService.completeOtk(confirm.inviteId, confirm.initiatorRootKeyCipher, confirm.initiatorOneTimePbkCipher, null);
187
- return tp.id;
188
- });
189
- }
190
- removeTrustedParty(partyId) {
191
- return __awaiter(this, void 0, void 0, function* () {
192
- yield this.lrApollo.mutate({
193
- mutation: DeleteTrustedPartyMutation,
194
- variables: {
195
- input: {
196
- id: partyId,
197
- },
198
- },
199
- });
200
- });
201
- }
202
- setCategoryAccessLevel(categoryId, keyId, trustedParty, accessLevel) {
203
- return accessLevel
204
- ? this.shareDirectory(categoryId, keyId, trustedParty, accessLevel)
205
- : this.unshareDirectory(categoryId, trustedParty.id);
206
- }
207
- setRecordAccessLevel(recordId, keyId, trustedParty, accessLevel) {
208
- return accessLevel
209
- ? this.shareDirectory(recordId, keyId, trustedParty, accessLevel)
210
- : this.unshareDirectory(recordId, trustedParty.id);
211
- }
212
- shareDirectory(directoryId, keyId, trustedParty, accessLevel) {
213
- return __awaiter(this, void 0, void 0, function* () {
214
- const key = yield this.keyGraphService.getKey(keyId);
215
- const wrappingKey = yield this.keyGraphService.getKey(trustedParty.userSharedKey.sharedKey.id);
216
- const wrappedKey = yield this.encryptionService.encrypt(wrappingKey.jwk, key.jwk.toJSON(true));
217
- yield this.lrApollo.mutate({
218
- mutation: ShareCategoryMutation,
219
- variables: {
220
- input: {
221
- id: directoryId,
222
- tpId: trustedParty.id,
223
- accessRole: accessLevel,
224
- keyId: key.id,
225
- wrappingKeyId: wrappingKey.id,
226
- wrappedKey: JSON.stringify(wrappedKey),
227
- },
228
- },
229
- });
230
- });
231
- }
232
- unshareDirectory(directoryId, trustedPartyId) {
233
- return __awaiter(this, void 0, void 0, function* () {
234
- yield this.lrApollo.mutate({
235
- mutation: UnshareCategoryMutation,
236
- variables: {
237
- input: {
238
- id: directoryId,
239
- tpId: trustedPartyId,
240
- },
241
- },
242
- });
243
- });
244
- }
245
- mapTrustedParty(tp) {
246
- var _a;
247
- return __awaiter(this, void 0, void 0, function* () {
248
- try {
249
- const contactCard = tp.sharedContactCard &&
250
- (yield this.sharedContactCardService.decryptTrustedPartyDetails(tp.sharedContactCard));
251
- const myContactCard = tp.myContactCard &&
252
- (yield this.sharedContactCardService.decryptSharedTrustedPartyDetails(tp.myContactCard));
253
- return {
254
- id: tp.id,
255
- type: TrustedPartyType.User,
256
- hasScenarios: !!tp.sharedScenarios.edges.length,
257
- hasSharedVault: !!tp.sharedItems.directories.edges.length,
258
- name: contactCard && contactCard.name && contactCard.name.name,
259
- details: contactCard,
260
- mySharedDetails: myContactCard,
261
- userSharedKey: tp.currentUserSharedKey.userSharedKey,
262
- username: tp.other.username,
263
- features: {
264
- sharedVault: {
265
- hasAccess: (((_a = tp.other.features) === null || _a === void 0 ? void 0 : _a.shareVault) || ['noaccess'])[0] === 'access',
266
- },
267
- },
268
- };
269
- }
270
- catch (e) {
271
- console.error('Failed to decrypt Trusted Party.', e, tp);
272
- return null;
273
- }
274
- });
275
- }
276
- mapInvite(exchange) {
277
- var _a, _b;
278
- return __awaiter(this, void 0, void 0, function* () {
279
- const contactCard = exchange.contactCard;
280
- const name = exchange.isInitiator
281
- ? (_a = exchange.myMessage) === null || _a === void 0 ? void 0 : _a.name : contactCard && contactCard.name && contactCard.name.name;
282
- const email = exchange.isInitiator
283
- ? (_b = exchange.myMessage) === null || _b === void 0 ? void 0 : _b.email : (contactCard && contactCard.email) || exchange.responderEmailAddress;
284
- return {
285
- id: exchange.id,
286
- type: TrustedPartyType.User,
287
- status: exchange.state,
288
- token: exchange.token,
289
- tokenExpiry: exchange.tokenExpiryTime,
290
- decryptedOtk: exchange.decryptedOtk,
291
- name,
292
- email,
293
- isSender: exchange.isInitiator,
294
- actionRequired: exchange.isInitiator
295
- ? exchange.initiatorActionRequired
296
- : exchange.responderActionRequired,
297
- rootKeyCipher: exchange.initiatorRootKeyCipher,
298
- pbkCipher: exchange.otk.initiatorOneTimePbkCipher,
299
- isExpired: exchange.isExpired,
300
- details: contactCard,
301
- message: exchange.message,
302
- mySharedDetails: exchange.myContactCard,
303
- mySharedMessage: exchange.myMessage,
304
- };
305
- });
306
- }
307
- }
308
- TrustedPartyService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TrustedPartyService_Factory() { return new TrustedPartyService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.LrApolloService), i0.ɵɵinject(i3.SharedContactCardService), i0.ɵɵinject(i4.UserService), i0.ɵɵinject(i5.LifeReadyAuthService), i0.ɵɵinject(i6.KeyExchangeService), i0.ɵɵinject(i7.KeyGraphService), i0.ɵɵinject(i8.KeyService), i0.ɵɵinject(i9.KeyFactoryService), i0.ɵɵinject(i10.EncryptionService)); }, token: TrustedPartyService, providedIn: "root" });
309
- TrustedPartyService.decorators = [
310
- { type: Injectable, args: [{
311
- providedIn: 'root',
312
- },] }
313
- ];
314
- TrustedPartyService.ctorParameters = () => [
315
- { type: HttpClient },
316
- { type: LrApolloService },
317
- { type: SharedContactCardService },
318
- { type: UserService },
319
- { type: LifeReadyAuthService },
320
- { type: KeyExchangeService },
321
- { type: KeyGraphService },
322
- { type: KeyService },
323
- { type: KeyFactoryService },
324
- { type: EncryptionService }
325
- ];
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi90cnVzdGVkLXBhcnRpZXMvdHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUtqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFDTCxvQ0FBb0MsRUFDcEMscUNBQXFDLEVBQ3JDLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsdUJBQXVCLEdBQ3hCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQVFMLHdCQUF3QixFQUV4QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEdBQ3JCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxF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RSxRQUFRLENBQUMsc0JBQXNCO2dCQUM5QyxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUI7Z0JBQ2pELFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDekIsZUFBZSxFQUFFLFFBQVEsQ0FBQyxhQUFhO2dCQUN2QyxlQUFlLEVBQUUsUUFBUSxDQUFDLFNBQVM7YUFDcEMsQ0FBQzs7S0FDSDs7OztZQTdWRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTdDUSxVQUFVO1lBU1YsZUFBZTtZQUNmLHdCQUF3QjtZQU14QixXQUFXO1lBTFgsb0JBQW9CO1lBUHBCLGtCQUFrQjtZQVVsQixlQUFlO1lBQ2YsVUFBVTtZQTBCVixpQkFBaUI7WUE1QmpCLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgbWF0ZXJpYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBLZXlFeGNoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi9hcGkva2V5LWV4Y2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRGVjcnlwdGVkS2V5RXhjaGFuZ2UsXG4gIFJlc3BvbmRPdGtJbnB1dCxcbn0gZnJvbSAnLi4vYXBpL2tleS1leGNoYW5nZS50eXBlcyc7XG5pbXBvcnQgeyBMckFwb2xsb1NlcnZpY2UgfSBmcm9tICcuLi9hcGkvbHItYXBvbGxvLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVkQ29udGFjdENhcmRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL3NoYXJlZC1jb250YWN0LWNhcmQuc2VydmljZSc7XG5pbXBvcnQgeyBMaWZlUmVhZHlBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgvbGlmZS1yZWFkeS1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjZXNzTGV2ZWwgfSBmcm9tICcuLi9jYXRlZ29yeS9jYXRlZ29yeS50eXBlcyc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9lbmNyeXB0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1ncmFwaC5zZXJ2aWNlJztcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi91c2Vycy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGFjdENhcmROYW1lIH0gZnJvbSAnLi4vdXNlcnMvcHJvZmlsZS50eXBlcyc7XG5pbXBvcnQge1xuICBDYW5jZWxUcnVzdGVkUGFydHlJbnZpdGF0aW9uTXV0YXRpb24sXG4gIERlY2xpbmVUcnVzdGVkUGFydHlJbnZpdGF0aW9uTXV0YXRpb24sXG4gIERlbGV0ZVRydXN0ZWRQYXJ0eU11dGF0aW9uLFxuICBHZXRBbGxUcnVzdGVkUGFydGllc1F1ZXJ5LFxuICBHZXRUcnVzdGVkUGFydGllc1F1ZXJ5LFxuICBHZXRUcnVzdGVkUGFydHlRdWVyeSxcbiAgU2hhcmVDYXRlZ29yeU11dGF0aW9uLFxuICBVbnNoYXJlQ2F0ZWdvcnlNdXRhdGlvbixcbn0gZnJvbSAnLi90cnVzdGVkLXBhcnR5LmdxbCc7XG5pbXBvcnQge1xuICBBY2NlcHRUcnVzdGVkUGFydHlJbnZpdGUsXG4gIENvbmZpcm1UcnVzdGVkUGFydHlJbnZpdGUsXG4gIEZvdW5kVHJ1c3RlZFBhcnR5LFxuICBJbnZpdGVUcnVzdGVkUGFydHksXG4gIFRydXN0ZWRQYXJ0aWVzLFxuICBUcnVzdGVkUGFydHksXG4gIFRydXN0ZWRQYXJ0eUludml0ZSxcbiAgVHJ1c3RlZFBhcnR5SW52aXRlU3RhdHVzLFxuICBUcnVzdGVkUGFydHlSb2xlLFxuICBUcnVzdGVkUGFydHlUeXBlLFxuICBUcnVzdGVkUGFydHlSb2xlVHlwZSxcbn0gZnJvbSAnLi90cnVzdGVkLXBhcnR5LnR5cGVzJztcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVHJ1c3RlZFBhcnR5U2VydmljZSB7XG4gIHByaXZhdGUgdHJ1c3RlZFBhcnR5Um9sZXM6IFRydXN0ZWRQYXJ0eVJvbGVbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBsckFwb2xsbzogTHJBcG9sbG9TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2hhcmVkQ29udGFjdENhcmRTZXJ2aWNlOiBTaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogTGlmZVJlYWR5QXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlFeGNoYW5nZVNlcnZpY2U6IEtleUV4Y2hhbmdlU2VydmljZSxcbiAgICBwcml2YXRlIGtleUdyYXBoU2VydmljZTogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGtleUZhY3Rvcnk6IEtleUZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJ1c3RlZFBhcnRpZXMoKTogUHJvbWlzZTxUcnVzdGVkUGFydHlbXT4ge1xuICAgIGNvbnN0IHsgdHBzIH0gPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PGFueT4oe1xuICAgICAgcXVlcnk6IEdldFRydXN0ZWRQYXJ0aWVzUXVlcnksXG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdHBzLmVkZ2VzLm1hcCgoeCkgPT4gdGhpcy5tYXBUcnVzdGVkUGFydHkoeC5ub2RlKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFsbFRydXN0ZWRQYXJ0aWVzKCk6IFByb21pc2U8VHJ1c3RlZFBhcnRpZXM+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyKCk7XG4gICAgY29uc3QgeyB0cHMsIGludml0ZXMsIHNlbnRJbnZpdGVzIH0gPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PGFueT4oe1xuICAgICAgcXVlcnk6IEdldEFsbFRydXN0ZWRQYXJ0aWVzUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgdXNlcklkOiB1c2VyLmlkLFxuICAgICAgICBpc0V4cGlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXJ0aWVzOiAoXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsPFRydXN0ZWRQYXJ0eT4oXG4gICAgICAgICAgdHBzLmVkZ2VzLm1hcCgoeCkgPT4gdGhpcy5tYXBUcnVzdGVkUGFydHkoeC5ub2RlKSlcbiAgICAgICAgKVxuICAgICAgKS5maWx0ZXIoKHgpID0+IHgpLFxuICAgICAgaW52aXRlczogKFxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbDxUcnVzdGVkUGFydHlJbnZpdGU+KFxuICAgICAgICAgIGludml0ZXMuZWRnZXMubWFwKGFzeW5jICh4KSA9PlxuICAgICAgICAgICAgdGhpcy5tYXBJbnZpdGUoXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMua2V5RXhjaGFuZ2VTZXJ2aWNlLmRlY3J5cHRLZXlFeGNoYW5nZSh4Lm5vZGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguc3RhdHVzICE9PSBUcnVzdGVkUGFydHlJbnZpdGVTdGF0dXMuQ29tcGxldGVkKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgeC5zdGF0dXMgIT09IFRydXN0ZWRQYXJ0eUludml0ZVN0YXR1cy5JbnZpdGVkIHx8IHguYWN0aW9uUmVxdWlyZWRcbiAgICAgICAgKSxcbiAgICAgIHNlbnRJbnZpdGVzOiAoXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsPFRydXN0ZWRQYXJ0eUludml0ZT4oXG4gICAgICAgICAgc2VudEludml0ZXMuZWRnZXMubWFwKGFzeW5jICh4KSA9PlxuICAgICAgICAgICAgdGhpcy5tYXBJbnZpdGUoXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMua2V5RXhjaGFuZ2VTZXJ2aWNlLmRlY3J5cHRLZXlFeGNoYW5nZSh4Lm5vZGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApLmZpbHRlcigoeCkgPT4geC5zdGF0dXMgIT09IFRydXN0ZWRQYXJ0eUludml0ZVN0YXR1cy5Db21wbGV0ZWQpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJ1c3RlZFBhcnR5KHBhcnR5SWQ6IHN0cmluZyk6IFByb21pc2U8VHJ1c3RlZFBhcnR5PiB7XG4gICAgY29uc3QgeyB0cCB9ID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxhbnk+KHtcbiAgICAgIHF1ZXJ5OiBHZXRUcnVzdGVkUGFydHlRdWVyeSxcbiAgICAgIHZhcmlhYmxlczogeyBwYXJ0eUlkIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFwVHJ1c3RlZFBhcnR5KHRwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcnVzdGVkUGFydHlSb2xlcyhcbiAgICByb2xlVHlwZTogVHJ1c3RlZFBhcnR5Um9sZVR5cGUgPSBUcnVzdGVkUGFydHlSb2xlVHlwZS5HZW5lcmFsXG4gICk6IFByb21pc2U8VHJ1c3RlZFBhcnR5Um9sZVtdPiB7XG4gICAgaWYgKCF0aGlzLnRydXN0ZWRQYXJ0eVJvbGVzKSB7XG4gICAgICB0aGlzLnRydXN0ZWRQYXJ0eVJvbGVzID0gYXdhaXQgdGhpcy5odHRwXG4gICAgICAgIC5nZXQ8VHJ1c3RlZFBhcnR5Um9sZVtdPignL2Fzc2V0cy9tZXRhL3RydXN0ZWQtcGFydHktcm9sZXMuanNvbicpXG4gICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgIHRoaXMudHJ1c3RlZFBhcnR5Um9sZXMuZmlsdGVyKCh4KSA9PiB4LnJvbGVUeXBlID09PSByb2xlVHlwZSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbmRCeUVtYWlsKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPEZvdW5kVHJ1c3RlZFBhcnR5PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJCeUVtYWlsKGVtYWlsKTtcblxuICAgICAgcmV0dXJuIHVzZXJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpZDogdXNlci5pZCxcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUsXG4gICAgICAgICAgICBpc1RydXN0ZWRQYXJ0eTogdXNlci5oYXZlVHAsXG4gICAgICAgICAgICBpc01lOiB1c2VyLmlzQ3VycmVudFVzZXIsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGludml0ZVRydXN0ZWRQYXJ0eShpbnZpdGU6IEludml0ZVRydXN0ZWRQYXJ0eSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIHJlc3BvbmRlclVzZXJuYW1lOiBpbnZpdGUucGFydHkudXNlcm5hbWUsXG4gICAgICBlbWFpbDogaW52aXRlLnBhcnR5LmVtYWlsLFxuICAgICAgbWVzc2FnZToge1xuICAgICAgICBuYW1lOiBpbnZpdGUucGFydHkubmFtZSxcbiAgICAgICAgZW1haWw6IGludml0ZS5wYXJ0eS5lbWFpbCxcbiAgICAgICAgbWVzc2FnZTogaW52aXRlLnBhcnR5Lm1lc3NhZ2UsXG4gICAgICAgIHBlcm1pc3Npb25zOiBpbnZpdGUucGVybWlzc2lvbnMsXG4gICAgICB9LFxuICAgICAgY29udGFjdENhcmQ6IHtcbiAgICAgICAgcGxhaW5Pd25lckNpcGhlckRhdGFKc29uOiBudWxsLFxuICAgICAgICBwbGFpblNoYXJlZENpcGhlckRhdGFKc29uOiBpbnZpdGUubXlTaGFyZWREZXRhaWxzLFxuICAgICAgICBvd25lclBsYWluRGF0YToge1xuICAgICAgICAgIG5hbWU6IG5ldyBDb250YWN0Q2FyZE5hbWUoaW52aXRlLm15U2hhcmVkRGV0YWlscy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5pbml0aWF0ZU90ayhwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNhbmNlbEludml0YXRpb24oaW52aXRlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlKHtcbiAgICAgIG11dGF0aW9uOiBDYW5jZWxUcnVzdGVkUGFydHlJbnZpdGF0aW9uTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBpZDogaW52aXRlSWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEludml0YXRpb24oXG4gICAgaW52aXRlSWQ6IHN0cmluZyxcbiAgICBpbnZpdGVUb2tlbjogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nXG4gICk6IFByb21pc2U8VHJ1c3RlZFBhcnR5SW52aXRlPiB7XG4gICAgY29uc3QgZXhjaGFuZ2UgPSBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5nZXRLZXlFeGNoYW5nZShpbnZpdGVJZCwge1xuICAgICAgdG9rZW46IGludml0ZVRva2VuLFxuICAgICAgb3RLZXlLOiBrZXksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5tYXBJbnZpdGUoZXhjaGFuZ2UpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFjY2VwdEludml0YXRpb24oXG4gICAgaW52aXRlOiBBY2NlcHRUcnVzdGVkUGFydHlJbnZpdGVcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwYXJhbXM6IFJlc3BvbmRPdGtJbnB1dCA9IHtcbiAgICAgIGlkOiBpbnZpdGUuaW52aXRlSWQsXG4gICAgICB0b2tlbjogaW52aXRlLmludml0ZVRva2VuLFxuICAgICAgZGVjcnlwdGVkT3RrOiBpbnZpdGUuZGVjcnlwdGVkT3RrLFxuICAgICAgaW5pdGlhdG9yQ29udGFjdENhcmQ6IG51bGwsXG4gICAgICByZXNwb25kZXJDb250YWN0Q2FyZDoge1xuICAgICAgICBwbGFpbk93bmVyQ2lwaGVyRGF0YUpzb246IG51bGwsXG4gICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YUpzb246IGludml0ZS5teVNoYXJlZERldGFpbHMsXG4gICAgICAgIG93bmVyUGxhaW5EYXRhOiB7XG4gICAgICAgICAgbmFtZTogbmV3IENvbnRhY3RDYXJkTmFtZShpbnZpdGUubXlTaGFyZWREZXRhaWxzLm5hbWUpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgeyB0cCB9ID0gYXdhaXQgdGhpcy5rZXlFeGNoYW5nZVNlcnZpY2UucmVzcG9uZE90ayhwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRwLmlkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlY2xpbmVJbnZpdGF0aW9uKFxuICAgIGludml0ZUlkOiBzdHJpbmcsXG4gICAgaW52aXRlVG9rZW46IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZSh7XG4gICAgICBtdXRhdGlvbjogRGVjbGluZVRydXN0ZWRQYXJ0eUludml0YXRpb25NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkOiBpbnZpdGVJZCxcbiAgICAgICAgICB0b2tlbjogaW52aXRlVG9rZW4sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNvbmZpcm1JbnZpdGF0aW9uKFxuICAgIGNvbmZpcm06IENvbmZpcm1UcnVzdGVkUGFydHlJbnZpdGVcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHRwIH0gPSBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5jb21wbGV0ZU90ayhcbiAgICAgIGNvbmZpcm0uaW52aXRlSWQsXG4gICAgICBjb25maXJtLmluaXRpYXRvclJvb3RLZXlDaXBoZXIsXG4gICAgICBjb25maXJtLmluaXRpYXRvck9uZVRpbWVQYmtDaXBoZXIsXG4gICAgICBudWxsXG4gICAgKTtcbiAgICByZXR1cm4gdHAuaWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlVHJ1c3RlZFBhcnR5KHBhcnR5SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlKHtcbiAgICAgIG11dGF0aW9uOiBEZWxldGVUcnVzdGVkUGFydHlNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkOiBwYXJ0eUlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDYXRlZ29yeUFjY2Vzc0xldmVsKFxuICAgIGNhdGVnb3J5SWQ6IHN0cmluZyxcbiAgICBrZXlJZDogc3RyaW5nLFxuICAgIHRydXN0ZWRQYXJ0eTogVHJ1c3RlZFBhcnR5LFxuICAgIGFjY2Vzc0xldmVsPzogQWNjZXNzTGV2ZWxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGFjY2Vzc0xldmVsXG4gICAgICA/IHRoaXMuc2hhcmVEaXJlY3RvcnkoY2F0ZWdvcnlJZCwga2V5SWQsIHRydXN0ZWRQYXJ0eSwgYWNjZXNzTGV2ZWwpXG4gICAgICA6IHRoaXMudW5zaGFyZURpcmVjdG9yeShjYXRlZ29yeUlkLCB0cnVzdGVkUGFydHkuaWQpO1xuICB9XG5cbiAgcHVibGljIHNldFJlY29yZEFjY2Vzc0xldmVsKFxuICAgIHJlY29yZElkOiBzdHJpbmcsXG4gICAga2V5SWQ6IHN0cmluZyxcbiAgICB0cnVzdGVkUGFydHk6IFRydXN0ZWRQYXJ0eSxcbiAgICBhY2Nlc3NMZXZlbDogQWNjZXNzTGV2ZWxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGFjY2Vzc0xldmVsXG4gICAgICA/IHRoaXMuc2hhcmVEaXJlY3RvcnkocmVjb3JkSWQsIGtleUlkLCB0cnVzdGVkUGFydHksIGFjY2Vzc0xldmVsKVxuICAgICAgOiB0aGlzLnVuc2hhcmVEaXJlY3RvcnkocmVjb3JkSWQsIHRydXN0ZWRQYXJ0eS5pZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNoYXJlRGlyZWN0b3J5KFxuICAgIGRpcmVjdG9yeUlkOiBzdHJpbmcsXG4gICAga2V5SWQ6IHN0cmluZyxcbiAgICB0cnVzdGVkUGFydHk6IFRydXN0ZWRQYXJ0eSxcbiAgICBhY2Nlc3NMZXZlbDogQWNjZXNzTGV2ZWxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaFNlcnZpY2UuZ2V0S2V5KGtleUlkKTtcbiAgICBjb25zdCB3cmFwcGluZ0tleSA9IGF3YWl0IHRoaXMua2V5R3JhcGhTZXJ2aWNlLmdldEtleShcbiAgICAgIHRydXN0ZWRQYXJ0eS51c2VyU2hhcmVkS2V5LnNoYXJlZEtleS5pZFxuICAgICk7XG4gICAgY29uc3Qgd3JhcHBlZEtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcbiAgICAgIHdyYXBwaW5nS2V5Lmp3ayxcbiAgICAgIGtleS5qd2sudG9KU09OKHRydWUpXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlKHtcbiAgICAgIG11dGF0aW9uOiBTaGFyZUNhdGVnb3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBpZDogZGlyZWN0b3J5SWQsXG4gICAgICAgICAgdHBJZDogdHJ1c3RlZFBhcnR5LmlkLFxuICAgICAgICAgIGFjY2Vzc1JvbGU6IGFjY2Vzc0xldmVsLFxuICAgICAgICAgIGtleUlkOiBrZXkuaWQsXG4gICAgICAgICAgd3JhcHBpbmdLZXlJZDogd3JhcHBpbmdLZXkuaWQsXG4gICAgICAgICAgd3JhcHBlZEtleTogSlNPTi5zdHJpbmdpZnkod3JhcHBlZEtleSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1bnNoYXJlRGlyZWN0b3J5KFxuICAgIGRpcmVjdG9yeUlkOiBzdHJpbmcsXG4gICAgdHJ1c3RlZFBhcnR5SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZSh7XG4gICAgICBtdXRhdGlvbjogVW5zaGFyZUNhdGVnb3J5TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBpZDogZGlyZWN0b3J5SWQsXG4gICAgICAgICAgdHBJZDogdHJ1c3RlZFBhcnR5SWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG1hcFRydXN0ZWRQYXJ0eSh0cDogYW55KTogUHJvbWlzZTxUcnVzdGVkUGFydHk+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGFjdENhcmQgPVxuICAgICAgICB0cC5zaGFyZWRDb250YWN0Q2FyZCAmJlxuICAgICAgICAoYXdhaXQgdGhpcy5zaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UuZGVjcnlwdFRydXN0ZWRQYXJ0eURldGFpbHMoXG4gICAgICAgICAgdHAuc2hhcmVkQ29udGFjdENhcmRcbiAgICAgICAgKSk7XG4gICAgICBjb25zdCBteUNvbnRhY3RDYXJkID1cbiAgICAgICAgdHAubXlDb250YWN0Q2FyZCAmJlxuICAgICAgICAoYXdhaXQgdGhpcy5zaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UuZGVjcnlwdFNoYXJlZFRydXN0ZWRQYXJ0eURldGFpbHMoXG4gICAgICAgICAgdHAubXlDb250YWN0Q2FyZFxuICAgICAgICApKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRwLmlkLFxuICAgICAgICB0eXBlOiBUcnVzdGVkUGFydHlUeXBlLlVzZXIsIC8vIFRPRE86IHdoZW4gcGFydG5lcnNcbiAgICAgICAgaGFzU2NlbmFyaW9zOiAhIXRwLnNoYXJlZFNjZW5hcmlvcy5lZGdlcy5sZW5ndGgsXG4gICAgICAgIGhhc1NoYXJlZFZhdWx0OiAhIXRwLnNoYXJlZEl0ZW1zLmRpcmVjdG9yaWVzLmVkZ2VzLmxlbmd0aCxcbiAgICAgICAgbmFtZTogY29udGFjdENhcmQgJiYgY29udGFjdENhcmQubmFtZSAmJiBjb250YWN0Q2FyZC5uYW1lLm5hbWUsXG4gICAgICAgIGRldGFpbHM6IGNvbnRhY3RDYXJkLFxuICAgICAgICBteVNoYXJlZERldGFpbHM6IG15Q29udGFjdENhcmQsXG4gICAgICAgIHVzZXJTaGFyZWRLZXk6IHRwLmN1cnJlbnRVc2VyU2hhcmVkS2V5LnVzZXJTaGFyZWRLZXksXG4gICAgICAgIHVzZXJuYW1lOiB0cC5vdGhlci51c2VybmFtZSxcbiAgICAgICAgZmVhdHVyZXM6IHtcbiAgICAgICAgICBzaGFyZWRWYXVsdDoge1xuICAgICAgICAgICAgaGFzQWNjZXNzOlxuICAgICAgICAgICAgICAodHAub3RoZXIuZmVhdHVyZXM/LnNoYXJlVmF1bHQgfHwgWydub2FjY2VzcyddKVswXSA9PT0gJ2FjY2VzcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRlY3J5cHQgVHJ1c3RlZCBQYXJ0eS4nLCBlLCB0cCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG1hcEludml0ZShcbiAgICBleGNoYW5nZTogRGVjcnlwdGVkS2V5RXhjaGFuZ2VcbiAgKTogUHJvbWlzZTxUcnVzdGVkUGFydHlJbnZpdGU+IHtcbiAgICBjb25zdCBjb250YWN0Q2FyZCA9IGV4Y2hhbmdlLmNvbnRhY3RDYXJkO1xuICAgIGNvbnN0IG5hbWUgPSBleGNoYW5nZS5pc0luaXRpYXRvclxuICAgICAgPyBleGNoYW5nZS5teU1lc3NhZ2U/Lm5hbWVcbiAgICAgIDogY29udGFjdENhcmQgJiYgY29udGFjdENhcmQubmFtZSAmJiBjb250YWN0Q2FyZC5uYW1lLm5hbWU7XG4gICAgY29uc3QgZW1haWwgPSBleGNoYW5nZS5pc0luaXRpYXRvclxuICAgICAgPyBleGNoYW5nZS5teU1lc3NhZ2U/LmVtYWlsXG4gICAgICA6IChjb250YWN0Q2FyZCAmJiBjb250YWN0Q2FyZC5lbWFpbCkgfHwgZXhjaGFuZ2UucmVzcG9uZGVyRW1haWxBZGRyZXNzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBleGNoYW5nZS5pZCxcbiAgICAgIHR5cGU6IFRydXN0ZWRQYXJ0eVR5cGUuVXNlciwgLy8gdG9kbyB3aGVuIHBhcnRuZXJzXG4gICAgICBzdGF0dXM6IChleGNoYW5nZS5zdGF0ZSBhcyB1bmtub3duKSBhcyBUcnVzdGVkUGFydHlJbnZpdGVTdGF0dXMsXG4gICAgICB0b2tlbjogZXhjaGFuZ2UudG9rZW4sXG4gICAgICB0b2tlbkV4cGlyeTogZXhjaGFuZ2UudG9rZW5FeHBpcnlUaW1lLFxuICAgICAgZGVjcnlwdGVkT3RrOiBleGNoYW5nZS5kZWNyeXB0ZWRPdGssXG4gICAgICBuYW1lLFxuICAgICAgZW1haWwsXG4gICAgICBpc1NlbmRlcjogZXhjaGFuZ2UuaXNJbml0aWF0b3IsXG4gICAgICBhY3Rpb25SZXF1aXJlZDogZXhjaGFuZ2UuaXNJbml0aWF0b3JcbiAgICAgICAgPyBleGNoYW5nZS5pbml0aWF0b3JBY3Rpb25SZXF1aXJlZFxuICAgICAgICA6IGV4Y2hhbmdlLnJlc3BvbmRlckFjdGlvblJlcXVpcmVkLFxuICAgICAgcm9vdEtleUNpcGhlcjogZXhjaGFuZ2UuaW5pdGlhdG9yUm9vdEtleUNpcGhlcixcbiAgICAgIHBia0NpcGhlcjogZXhjaGFuZ2Uub3RrLmluaXRpYXRvck9uZVRpbWVQYmtDaXBoZXIsXG4gICAgICBpc0V4cGlyZWQ6IGV4Y2hhbmdlLmlzRXhwaXJlZCxcbiAgICAgIGRldGFpbHM6IGNvbnRhY3RDYXJkLFxuICAgICAgbWVzc2FnZTogZXhjaGFuZ2UubWVzc2FnZSxcbiAgICAgIG15U2hhcmVkRGV0YWlsczogZXhjaGFuZ2UubXlDb250YWN0Q2FyZCxcbiAgICAgIG15U2hhcmVkTWVzc2FnZTogZXhjaGFuZ2UubXlNZXNzYWdlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
1
+ import { __awaiter } from "tslib";
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Injectable } from '@angular/core';
4
+ import { KeyExchangeService } from '../api/key-exchange.service';
5
+ import { LrApolloService } from '../api/lr-apollo.service';
6
+ import { SharedContactCardService } from '../api/shared-contact-card.service';
7
+ import { LifeReadyAuthService } from '../auth/life-ready-auth.service';
8
+ import { EncryptionService } from '../cryptography/encryption.service';
9
+ import { KeyGraphService } from '../cryptography/key-graph.service';
10
+ import { KeyService } from '../cryptography/key.service';
11
+ import { UserService } from '../users/user.service';
12
+ import { ContactCardName } from '../users/profile.types';
13
+ import { CancelTrustedPartyInvitationMutation, DeclineTrustedPartyInvitationMutation, DeleteTrustedPartyMutation, GetAllTrustedPartiesQuery, GetTrustedPartiesQuery, GetTrustedPartyQuery, ShareCategoryMutation, UnshareCategoryMutation, } from './trusted-party.gql';
14
+ import { TrustedPartyInviteStatus, TrustedPartyType, TrustedPartyRoleType, } from './trusted-party.types';
15
+ import { KeyFactoryService } from '../cryptography/key-factory.service';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "@angular/common/http";
18
+ import * as i2 from "../api/lr-apollo.service";
19
+ import * as i3 from "../api/shared-contact-card.service";
20
+ import * as i4 from "../users/user.service";
21
+ import * as i5 from "../auth/life-ready-auth.service";
22
+ import * as i6 from "../api/key-exchange.service";
23
+ import * as i7 from "../cryptography/key-graph.service";
24
+ import * as i8 from "../cryptography/key.service";
25
+ import * as i9 from "../cryptography/key-factory.service";
26
+ import * as i10 from "../cryptography/encryption.service";
27
+ export class TrustedPartyService {
28
+ constructor(http, lrApollo, sharedContactCardService, userService, authService, keyExchangeService, keyGraphService, keyService, keyFactory, encryptionService) {
29
+ this.http = http;
30
+ this.lrApollo = lrApollo;
31
+ this.sharedContactCardService = sharedContactCardService;
32
+ this.userService = userService;
33
+ this.authService = authService;
34
+ this.keyExchangeService = keyExchangeService;
35
+ this.keyGraphService = keyGraphService;
36
+ this.keyService = keyService;
37
+ this.keyFactory = keyFactory;
38
+ this.encryptionService = encryptionService;
39
+ }
40
+ getTrustedParties() {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const { tps } = yield this.lrApollo.query({
43
+ query: GetTrustedPartiesQuery,
44
+ });
45
+ return yield Promise.all(tps.edges.map((x) => this.mapTrustedParty(x.node)));
46
+ });
47
+ }
48
+ getAllTrustedParties() {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const user = yield this.authService.getUser();
51
+ const { tps, invites, sentInvites } = yield this.lrApollo.query({
52
+ query: GetAllTrustedPartiesQuery,
53
+ variables: {
54
+ userId: user.id,
55
+ isExpired: false,
56
+ },
57
+ });
58
+ return {
59
+ parties: (yield Promise.all(tps.edges.map((x) => this.mapTrustedParty(x.node)))).filter((x) => x),
60
+ invites: (yield Promise.all(invites.edges.map((x) => __awaiter(this, void 0, void 0, function* () {
61
+ return this.mapInvite(yield this.keyExchangeService.decryptKeyExchange(x.node));
62
+ }))))
63
+ .filter((x) => x.status !== TrustedPartyInviteStatus.Completed)
64
+ .filter((x) => x.status !== TrustedPartyInviteStatus.Invited || x.actionRequired),
65
+ sentInvites: (yield Promise.all(sentInvites.edges.map((x) => __awaiter(this, void 0, void 0, function* () {
66
+ return this.mapInvite(yield this.keyExchangeService.decryptKeyExchange(x.node));
67
+ })))).filter((x) => x.status !== TrustedPartyInviteStatus.Completed),
68
+ };
69
+ });
70
+ }
71
+ getTrustedParty(partyId) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ const { tp } = yield this.lrApollo.query({
74
+ query: GetTrustedPartyQuery,
75
+ variables: { partyId },
76
+ });
77
+ return yield this.mapTrustedParty(tp);
78
+ });
79
+ }
80
+ getTrustedPartyRoles(roleType = TrustedPartyRoleType.General) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ if (!this.trustedPartyRoles) {
83
+ this.trustedPartyRoles = yield this.http
84
+ .get('/assets/meta/trusted-party-roles.json')
85
+ .toPromise();
86
+ }
87
+ return Promise.resolve(this.trustedPartyRoles.filter((x) => x.roleType === roleType));
88
+ });
89
+ }
90
+ findByEmail(email) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ try {
93
+ const user = yield this.userService.getUserByEmail(email);
94
+ return user
95
+ ? {
96
+ id: user.id,
97
+ email,
98
+ username: user.username,
99
+ isTrustedParty: user.haveTp,
100
+ isMe: user.isCurrentUser,
101
+ }
102
+ : null;
103
+ }
104
+ catch (e) {
105
+ return null;
106
+ }
107
+ });
108
+ }
109
+ inviteTrustedParty(invite) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ const params = {
112
+ responderUsername: invite.party.username,
113
+ email: invite.party.email,
114
+ message: {
115
+ name: invite.party.name,
116
+ email: invite.party.email,
117
+ message: invite.party.message,
118
+ permissions: invite.permissions,
119
+ },
120
+ contactCard: {
121
+ plainOwnerCipherDataJson: null,
122
+ plainSharedCipherDataJson: invite.mySharedDetails,
123
+ ownerPlainData: {
124
+ name: new ContactCardName(invite.mySharedDetails.name),
125
+ },
126
+ },
127
+ };
128
+ yield this.keyExchangeService.initiateOtk(params);
129
+ });
130
+ }
131
+ cancelInvitation(inviteId) {
132
+ return __awaiter(this, void 0, void 0, function* () {
133
+ yield this.lrApollo.mutate({
134
+ mutation: CancelTrustedPartyInvitationMutation,
135
+ variables: {
136
+ input: {
137
+ id: inviteId,
138
+ },
139
+ },
140
+ });
141
+ });
142
+ }
143
+ getInvitation(inviteId, inviteToken, key) {
144
+ return __awaiter(this, void 0, void 0, function* () {
145
+ const exchange = yield this.keyExchangeService.getKeyExchange(inviteId, {
146
+ token: inviteToken,
147
+ otKeyK: key,
148
+ });
149
+ return this.mapInvite(exchange);
150
+ });
151
+ }
152
+ acceptInvitation(invite) {
153
+ return __awaiter(this, void 0, void 0, function* () {
154
+ const params = {
155
+ id: invite.inviteId,
156
+ token: invite.inviteToken,
157
+ decryptedOtk: invite.decryptedOtk,
158
+ initiatorContactCard: null,
159
+ responderContactCard: {
160
+ plainOwnerCipherDataJson: null,
161
+ plainSharedCipherDataJson: invite.mySharedDetails,
162
+ ownerPlainData: {
163
+ name: new ContactCardName(invite.mySharedDetails.name),
164
+ },
165
+ },
166
+ };
167
+ const { tp } = yield this.keyExchangeService.respondOtk(params);
168
+ return tp.id;
169
+ });
170
+ }
171
+ declineInvitation(inviteId, inviteToken) {
172
+ return __awaiter(this, void 0, void 0, function* () {
173
+ yield this.lrApollo.mutate({
174
+ mutation: DeclineTrustedPartyInvitationMutation,
175
+ variables: {
176
+ input: {
177
+ id: inviteId,
178
+ token: inviteToken,
179
+ },
180
+ },
181
+ });
182
+ });
183
+ }
184
+ confirmInvitation(confirm) {
185
+ return __awaiter(this, void 0, void 0, function* () {
186
+ const { tp } = yield this.keyExchangeService.completeOtk(confirm.inviteId, confirm.initiatorRootKeyCipher, confirm.initiatorOneTimePbkCipher, null);
187
+ return tp.id;
188
+ });
189
+ }
190
+ removeTrustedParty(partyId) {
191
+ return __awaiter(this, void 0, void 0, function* () {
192
+ yield this.lrApollo.mutate({
193
+ mutation: DeleteTrustedPartyMutation,
194
+ variables: {
195
+ input: {
196
+ id: partyId,
197
+ },
198
+ },
199
+ });
200
+ });
201
+ }
202
+ setCategoryAccessLevel(categoryId, keyId, trustedParty, accessLevel) {
203
+ return accessLevel
204
+ ? this.shareDirectory(categoryId, keyId, trustedParty, accessLevel)
205
+ : this.unshareDirectory(categoryId, trustedParty.id);
206
+ }
207
+ setRecordAccessLevel(recordId, keyId, trustedParty, accessLevel) {
208
+ return accessLevel
209
+ ? this.shareDirectory(recordId, keyId, trustedParty, accessLevel)
210
+ : this.unshareDirectory(recordId, trustedParty.id);
211
+ }
212
+ shareDirectory(directoryId, keyId, trustedParty, accessLevel) {
213
+ return __awaiter(this, void 0, void 0, function* () {
214
+ const key = yield this.keyGraphService.getKey(keyId);
215
+ const wrappingKey = yield this.keyGraphService.getKey(trustedParty.userSharedKey.sharedKey.id);
216
+ const wrappedKey = yield this.encryptionService.encrypt(wrappingKey.jwk, key.jwk.toJSON(true));
217
+ yield this.lrApollo.mutate({
218
+ mutation: ShareCategoryMutation,
219
+ variables: {
220
+ input: {
221
+ id: directoryId,
222
+ tpId: trustedParty.id,
223
+ accessRole: accessLevel,
224
+ keyId: key.id,
225
+ wrappingKeyId: wrappingKey.id,
226
+ wrappedKey: JSON.stringify(wrappedKey),
227
+ },
228
+ },
229
+ });
230
+ });
231
+ }
232
+ unshareDirectory(directoryId, trustedPartyId) {
233
+ return __awaiter(this, void 0, void 0, function* () {
234
+ yield this.lrApollo.mutate({
235
+ mutation: UnshareCategoryMutation,
236
+ variables: {
237
+ input: {
238
+ id: directoryId,
239
+ tpId: trustedPartyId,
240
+ },
241
+ },
242
+ });
243
+ });
244
+ }
245
+ mapTrustedParty(tp) {
246
+ var _a;
247
+ return __awaiter(this, void 0, void 0, function* () {
248
+ try {
249
+ const contactCard = tp.sharedContactCard &&
250
+ (yield this.sharedContactCardService.decryptTrustedPartyDetails(tp.sharedContactCard));
251
+ const myContactCard = tp.myContactCard &&
252
+ (yield this.sharedContactCardService.decryptSharedTrustedPartyDetails(tp.myContactCard));
253
+ return {
254
+ id: tp.id,
255
+ type: TrustedPartyType.User,
256
+ hasScenarios: !!tp.sharedScenarios.edges.length,
257
+ hasSharedVault: !!tp.sharedItems.directories.edges.length,
258
+ name: contactCard && contactCard.name && contactCard.name.name,
259
+ details: contactCard,
260
+ mySharedDetails: myContactCard,
261
+ userSharedKey: tp.currentUserSharedKey.userSharedKey,
262
+ username: tp.other.username,
263
+ features: {
264
+ sharedVault: {
265
+ hasAccess: (((_a = tp.other.features) === null || _a === void 0 ? void 0 : _a.shareVault) || ['noaccess'])[0] === 'access',
266
+ },
267
+ },
268
+ };
269
+ }
270
+ catch (e) {
271
+ console.error('Failed to decrypt Trusted Party.', e, tp);
272
+ return null;
273
+ }
274
+ });
275
+ }
276
+ mapInvite(exchange) {
277
+ var _a, _b;
278
+ return __awaiter(this, void 0, void 0, function* () {
279
+ const contactCard = exchange.contactCard;
280
+ const name = exchange.isInitiator
281
+ ? (_a = exchange.myMessage) === null || _a === void 0 ? void 0 : _a.name : contactCard && contactCard.name && contactCard.name.name;
282
+ const email = exchange.isInitiator
283
+ ? (_b = exchange.myMessage) === null || _b === void 0 ? void 0 : _b.email : (contactCard && contactCard.email) || exchange.responderEmailAddress;
284
+ return {
285
+ id: exchange.id,
286
+ type: TrustedPartyType.User,
287
+ status: exchange.state,
288
+ token: exchange.token,
289
+ tokenExpiry: exchange.tokenExpiryTime,
290
+ decryptedOtk: exchange.decryptedOtk,
291
+ name,
292
+ email,
293
+ isSender: exchange.isInitiator,
294
+ actionRequired: exchange.isInitiator
295
+ ? exchange.initiatorActionRequired
296
+ : exchange.responderActionRequired,
297
+ rootKeyCipher: exchange.initiatorRootKeyCipher,
298
+ pbkCipher: exchange.otk.initiatorOneTimePbkCipher,
299
+ isExpired: exchange.isExpired,
300
+ details: contactCard,
301
+ message: exchange.message,
302
+ mySharedDetails: exchange.myContactCard,
303
+ mySharedMessage: exchange.myMessage,
304
+ };
305
+ });
306
+ }
307
+ }
308
+ TrustedPartyService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TrustedPartyService_Factory() { return new TrustedPartyService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.LrApolloService), i0.ɵɵinject(i3.SharedContactCardService), i0.ɵɵinject(i4.UserService), i0.ɵɵinject(i5.LifeReadyAuthService), i0.ɵɵinject(i6.KeyExchangeService), i0.ɵɵinject(i7.KeyGraphService), i0.ɵɵinject(i8.KeyService), i0.ɵɵinject(i9.KeyFactoryService), i0.ɵɵinject(i10.EncryptionService)); }, token: TrustedPartyService, providedIn: "root" });
309
+ TrustedPartyService.decorators = [
310
+ { type: Injectable, args: [{
311
+ providedIn: 'root',
312
+ },] }
313
+ ];
314
+ TrustedPartyService.ctorParameters = () => [
315
+ { type: HttpClient },
316
+ { type: LrApolloService },
317
+ { type: SharedContactCardService },
318
+ { type: UserService },
319
+ { type: LifeReadyAuthService },
320
+ { type: KeyExchangeService },
321
+ { type: KeyGraphService },
322
+ { type: KeyService },
323
+ { type: KeyFactoryService },
324
+ { type: EncryptionService }
325
+ ];
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL25ld3JlcG8va2MtY2xpZW50L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3RydXN0ZWQtcGFydGllcy90cnVzdGVkLXBhcnR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBS2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUNMLG9DQUFvQyxFQUNwQyxxQ0FBcUMsRUFDckMsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQix1QkFBdUIsR0FDeEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBUUwsd0JBQXdCLEVBRXhCLGdCQUFnQixFQUNoQixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJB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Q0FBQyxzQkFBc0I7Z0JBQzlDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLHlCQUF5QjtnQkFDakQsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixPQUFPLEVBQUUsV0FBVztnQkFDcEIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO2dCQUN6QixlQUFlLEVBQUUsUUFBUSxDQUFDLGFBQWE7Z0JBQ3ZDLGVBQWUsRUFBRSxRQUFRLENBQUMsU0FBUzthQUNwQyxDQUFDOztLQUNIOzs7O1lBN1ZGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBN0NRLFVBQVU7WUFTVixlQUFlO1lBQ2Ysd0JBQXdCO1lBTXhCLFdBQVc7WUFMWCxvQkFBb0I7WUFQcEIsa0JBQWtCO1lBVWxCLGVBQWU7WUFDZixVQUFVO1lBMEJWLGlCQUFpQjtZQTVCakIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xyXG5pbXBvcnQgeyBtYXRlcmlhbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgS2V5RXhjaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2tleS1leGNoYW5nZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBEZWNyeXB0ZWRLZXlFeGNoYW5nZSxcclxuICBSZXNwb25kT3RrSW5wdXQsXHJcbn0gZnJvbSAnLi4vYXBpL2tleS1leGNoYW5nZS50eXBlcyc7XHJcbmltcG9ydCB7IExyQXBvbGxvU2VydmljZSB9IGZyb20gJy4uL2FwaS9sci1hcG9sbG8uc2VydmljZSc7XHJcbmltcG9ydCB7IFNoYXJlZENvbnRhY3RDYXJkU2VydmljZSB9IGZyb20gJy4uL2FwaS9zaGFyZWQtY29udGFjdC1jYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMaWZlUmVhZHlBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgvbGlmZS1yZWFkeS1hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY2Nlc3NMZXZlbCB9IGZyb20gJy4uL2NhdGVnb3J5L2NhdGVnb3J5LnR5cGVzJztcclxuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1ncmFwaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXkuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlcnMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udGFjdENhcmROYW1lIH0gZnJvbSAnLi4vdXNlcnMvcHJvZmlsZS50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQ2FuY2VsVHJ1c3RlZFBhcnR5SW52aXRhdGlvbk11dGF0aW9uLFxyXG4gIERlY2xpbmVUcnVzdGVkUGFydHlJbnZpdGF0aW9uTXV0YXRpb24sXHJcbiAgRGVsZXRlVHJ1c3RlZFBhcnR5TXV0YXRpb24sXHJcbiAgR2V0QWxsVHJ1c3RlZFBhcnRpZXNRdWVyeSxcclxuICBHZXRUcnVzdGVkUGFydGllc1F1ZXJ5LFxyXG4gIEdldFRydXN0ZWRQYXJ0eVF1ZXJ5LFxyXG4gIFNoYXJlQ2F0ZWdvcnlNdXRhdGlvbixcclxuICBVbnNoYXJlQ2F0ZWdvcnlNdXRhdGlvbixcclxufSBmcm9tICcuL3RydXN0ZWQtcGFydHkuZ3FsJztcclxuaW1wb3J0IHtcclxuICBBY2NlcHRUcnVzdGVkUGFydHlJbnZpdGUsXHJcbiAgQ29uZmlybVRydXN0ZWRQYXJ0eUludml0ZSxcclxuICBGb3VuZFRydXN0ZWRQYXJ0eSxcclxuICBJbnZpdGVUcnVzdGVkUGFydHksXHJcbiAgVHJ1c3RlZFBhcnRpZXMsXHJcbiAgVHJ1c3RlZFBhcnR5LFxyXG4gIFRydXN0ZWRQYXJ0eUludml0ZSxcclxuICBUcnVzdGVkUGFydHlJbnZpdGVTdGF0dXMsXHJcbiAgVHJ1c3RlZFBhcnR5Um9sZSxcclxuICBUcnVzdGVkUGFydHlUeXBlLFxyXG4gIFRydXN0ZWRQYXJ0eVJvbGVUeXBlLFxyXG59IGZyb20gJy4vdHJ1c3RlZC1wYXJ0eS50eXBlcyc7XHJcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRydXN0ZWRQYXJ0eVNlcnZpY2Uge1xyXG4gIHByaXZhdGUgdHJ1c3RlZFBhcnR5Um9sZXM6IFRydXN0ZWRQYXJ0eVJvbGVbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGxyQXBvbGxvOiBMckFwb2xsb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNoYXJlZENvbnRhY3RDYXJkU2VydmljZTogU2hhcmVkQ29udGFjdENhcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBMaWZlUmVhZHlBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUga2V5RXhjaGFuZ2VTZXJ2aWNlOiBLZXlFeGNoYW5nZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUdyYXBoU2VydmljZTogS2V5R3JhcGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlGYWN0b3J5OiBLZXlGYWN0b3J5U2VydmljZSxcclxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJ1c3RlZFBhcnRpZXMoKTogUHJvbWlzZTxUcnVzdGVkUGFydHlbXT4ge1xyXG4gICAgY29uc3QgeyB0cHMgfSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8YW55Pih7XHJcbiAgICAgIHF1ZXJ5OiBHZXRUcnVzdGVkUGFydGllc1F1ZXJ5LFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHRwcy5lZGdlcy5tYXAoKHgpID0+IHRoaXMubWFwVHJ1c3RlZFBhcnR5KHgubm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFsbFRydXN0ZWRQYXJ0aWVzKCk6IFByb21pc2U8VHJ1c3RlZFBhcnRpZXM+IHtcclxuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXIoKTtcclxuICAgIGNvbnN0IHsgdHBzLCBpbnZpdGVzLCBzZW50SW52aXRlcyB9ID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxhbnk+KHtcclxuICAgICAgcXVlcnk6IEdldEFsbFRydXN0ZWRQYXJ0aWVzUXVlcnksXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIHVzZXJJZDogdXNlci5pZCxcclxuICAgICAgICBpc0V4cGlyZWQ6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGFydGllczogKFxyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsPFRydXN0ZWRQYXJ0eT4oXHJcbiAgICAgICAgICB0cHMuZWRnZXMubWFwKCh4KSA9PiB0aGlzLm1hcFRydXN0ZWRQYXJ0eSh4Lm5vZGUpKVxyXG4gICAgICAgIClcclxuICAgICAgKS5maWx0ZXIoKHgpID0+IHgpLFxyXG4gICAgICBpbnZpdGVzOiAoXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGw8VHJ1c3RlZFBhcnR5SW52aXRlPihcclxuICAgICAgICAgIGludml0ZXMuZWRnZXMubWFwKGFzeW5jICh4KSA9PlxyXG4gICAgICAgICAgICB0aGlzLm1hcEludml0ZShcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5kZWNyeXB0S2V5RXhjaGFuZ2UoeC5ub2RlKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICAgICAgLmZpbHRlcigoeCkgPT4geC5zdGF0dXMgIT09IFRydXN0ZWRQYXJ0eUludml0ZVN0YXR1cy5Db21wbGV0ZWQpXHJcbiAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PlxyXG4gICAgICAgICAgICB4LnN0YXR1cyAhPT0gVHJ1c3RlZFBhcnR5SW52aXRlU3RhdHVzLkludml0ZWQgfHwgeC5hY3Rpb25SZXF1aXJlZFxyXG4gICAgICAgICksXHJcbiAgICAgIHNlbnRJbnZpdGVzOiAoXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGw8VHJ1c3RlZFBhcnR5SW52aXRlPihcclxuICAgICAgICAgIHNlbnRJbnZpdGVzLmVkZ2VzLm1hcChhc3luYyAoeCkgPT5cclxuICAgICAgICAgICAgdGhpcy5tYXBJbnZpdGUoXHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5rZXlFeGNoYW5nZVNlcnZpY2UuZGVjcnlwdEtleUV4Y2hhbmdlKHgubm9kZSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKS5maWx0ZXIoKHgpID0+IHguc3RhdHVzICE9PSBUcnVzdGVkUGFydHlJbnZpdGVTdGF0dXMuQ29tcGxldGVkKSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJ1c3RlZFBhcnR5KHBhcnR5SWQ6IHN0cmluZyk6IFByb21pc2U8VHJ1c3RlZFBhcnR5PiB7XHJcbiAgICBjb25zdCB7IHRwIH0gPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PGFueT4oe1xyXG4gICAgICBxdWVyeTogR2V0VHJ1c3RlZFBhcnR5UXVlcnksXHJcbiAgICAgIHZhcmlhYmxlczogeyBwYXJ0eUlkIH0sXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLm1hcFRydXN0ZWRQYXJ0eSh0cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJ1c3RlZFBhcnR5Um9sZXMoXHJcbiAgICByb2xlVHlwZTogVHJ1c3RlZFBhcnR5Um9sZVR5cGUgPSBUcnVzdGVkUGFydHlSb2xlVHlwZS5HZW5lcmFsXHJcbiAgKTogUHJvbWlzZTxUcnVzdGVkUGFydHlSb2xlW10+IHtcclxuICAgIGlmICghdGhpcy50cnVzdGVkUGFydHlSb2xlcykge1xyXG4gICAgICB0aGlzLnRydXN0ZWRQYXJ0eVJvbGVzID0gYXdhaXQgdGhpcy5odHRwXHJcbiAgICAgICAgLmdldDxUcnVzdGVkUGFydHlSb2xlW10+KCcvYXNzZXRzL21ldGEvdHJ1c3RlZC1wYXJ0eS1yb2xlcy5qc29uJylcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICB0aGlzLnRydXN0ZWRQYXJ0eVJvbGVzLmZpbHRlcigoeCkgPT4geC5yb2xlVHlwZSA9PT0gcm9sZVR5cGUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGZpbmRCeUVtYWlsKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPEZvdW5kVHJ1c3RlZFBhcnR5PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyQnlFbWFpbChlbWFpbCk7XHJcblxyXG4gICAgICByZXR1cm4gdXNlclxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBpZDogdXNlci5pZCxcclxuICAgICAgICAgICAgZW1haWwsXHJcbiAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lLFxyXG4gICAgICAgICAgICBpc1RydXN0ZWRQYXJ0eTogdXNlci5oYXZlVHAsXHJcbiAgICAgICAgICAgIGlzTWU6IHVzZXIuaXNDdXJyZW50VXNlcixcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IG51bGw7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGludml0ZVRydXN0ZWRQYXJ0eShpbnZpdGU6IEludml0ZVRydXN0ZWRQYXJ0eSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICByZXNwb25kZXJVc2VybmFtZTogaW52aXRlLnBhcnR5LnVzZXJuYW1lLFxyXG4gICAgICBlbWFpbDogaW52aXRlLnBhcnR5LmVtYWlsLFxyXG4gICAgICBtZXNzYWdlOiB7XHJcbiAgICAgICAgbmFtZTogaW52aXRlLnBhcnR5Lm5hbWUsXHJcbiAgICAgICAgZW1haWw6IGludml0ZS5wYXJ0eS5lbWFpbCxcclxuICAgICAgICBtZXNzYWdlOiBpbnZpdGUucGFydHkubWVzc2FnZSxcclxuICAgICAgICBwZXJtaXNzaW9uczogaW52aXRlLnBlcm1pc3Npb25zLFxyXG4gICAgICB9LFxyXG4gICAgICBjb250YWN0Q2FyZDoge1xyXG4gICAgICAgIHBsYWluT3duZXJDaXBoZXJEYXRhSnNvbjogbnVsbCxcclxuICAgICAgICBwbGFpblNoYXJlZENpcGhlckRhdGFKc29uOiBpbnZpdGUubXlTaGFyZWREZXRhaWxzLFxyXG4gICAgICAgIG93bmVyUGxhaW5EYXRhOiB7XHJcbiAgICAgICAgICBuYW1lOiBuZXcgQ29udGFjdENhcmROYW1lKGludml0ZS5teVNoYXJlZERldGFpbHMubmFtZSksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5pbml0aWF0ZU90ayhwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNhbmNlbEludml0YXRpb24oaW52aXRlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGUoe1xyXG4gICAgICBtdXRhdGlvbjogQ2FuY2VsVHJ1c3RlZFBhcnR5SW52aXRhdGlvbk11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQ6IGludml0ZUlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRJbnZpdGF0aW9uKFxyXG4gICAgaW52aXRlSWQ6IHN0cmluZyxcclxuICAgIGludml0ZVRva2VuOiBzdHJpbmcsXHJcbiAgICBrZXk6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8VHJ1c3RlZFBhcnR5SW52aXRlPiB7XHJcbiAgICBjb25zdCBleGNoYW5nZSA9IGF3YWl0IHRoaXMua2V5RXhjaGFuZ2VTZXJ2aWNlLmdldEtleUV4Y2hhbmdlKGludml0ZUlkLCB7XHJcbiAgICAgIHRva2VuOiBpbnZpdGVUb2tlbixcclxuICAgICAgb3RLZXlLOiBrZXksXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5tYXBJbnZpdGUoZXhjaGFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFjY2VwdEludml0YXRpb24oXHJcbiAgICBpbnZpdGU6IEFjY2VwdFRydXN0ZWRQYXJ0eUludml0ZVxyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBwYXJhbXM6IFJlc3BvbmRPdGtJbnB1dCA9IHtcclxuICAgICAgaWQ6IGludml0ZS5pbnZpdGVJZCxcclxuICAgICAgdG9rZW46IGludml0ZS5pbnZpdGVUb2tlbixcclxuICAgICAgZGVjcnlwdGVkT3RrOiBpbnZpdGUuZGVjcnlwdGVkT3RrLFxyXG4gICAgICBpbml0aWF0b3JDb250YWN0Q2FyZDogbnVsbCxcclxuICAgICAgcmVzcG9uZGVyQ29udGFjdENhcmQ6IHtcclxuICAgICAgICBwbGFpbk93bmVyQ2lwaGVyRGF0YUpzb246IG51bGwsXHJcbiAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhSnNvbjogaW52aXRlLm15U2hhcmVkRGV0YWlscyxcclxuICAgICAgICBvd25lclBsYWluRGF0YToge1xyXG4gICAgICAgICAgbmFtZTogbmV3IENvbnRhY3RDYXJkTmFtZShpbnZpdGUubXlTaGFyZWREZXRhaWxzLm5hbWUpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHsgdHAgfSA9IGF3YWl0IHRoaXMua2V5RXhjaGFuZ2VTZXJ2aWNlLnJlc3BvbmRPdGsocGFyYW1zKTtcclxuXHJcbiAgICByZXR1cm4gdHAuaWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVjbGluZUludml0YXRpb24oXHJcbiAgICBpbnZpdGVJZDogc3RyaW5nLFxyXG4gICAgaW52aXRlVG9rZW46IHN0cmluZ1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGUoe1xyXG4gICAgICBtdXRhdGlvbjogRGVjbGluZVRydXN0ZWRQYXJ0eUludml0YXRpb25NdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkOiBpbnZpdGVJZCxcclxuICAgICAgICAgIHRva2VuOiBpbnZpdGVUb2tlbixcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY29uZmlybUludml0YXRpb24oXHJcbiAgICBjb25maXJtOiBDb25maXJtVHJ1c3RlZFBhcnR5SW52aXRlXHJcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHsgdHAgfSA9IGF3YWl0IHRoaXMua2V5RXhjaGFuZ2VTZXJ2aWNlLmNvbXBsZXRlT3RrKFxyXG4gICAgICBjb25maXJtLmludml0ZUlkLFxyXG4gICAgICBjb25maXJtLmluaXRpYXRvclJvb3RLZXlDaXBoZXIsXHJcbiAgICAgIGNvbmZpcm0uaW5pdGlhdG9yT25lVGltZVBia0NpcGhlcixcclxuICAgICAgbnVsbFxyXG4gICAgKTtcclxuICAgIHJldHVybiB0cC5pZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByZW1vdmVUcnVzdGVkUGFydHkocGFydHlJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZSh7XHJcbiAgICAgIG11dGF0aW9uOiBEZWxldGVUcnVzdGVkUGFydHlNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkOiBwYXJ0eUlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDYXRlZ29yeUFjY2Vzc0xldmVsKFxyXG4gICAgY2F0ZWdvcnlJZDogc3RyaW5nLFxyXG4gICAga2V5SWQ6IHN0cmluZyxcclxuICAgIHRydXN0ZWRQYXJ0eTogVHJ1c3RlZFBhcnR5LFxyXG4gICAgYWNjZXNzTGV2ZWw/OiBBY2Nlc3NMZXZlbFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGFjY2Vzc0xldmVsXHJcbiAgICAgID8gdGhpcy5zaGFyZURpcmVjdG9yeShjYXRlZ29yeUlkLCBrZXlJZCwgdHJ1c3RlZFBhcnR5LCBhY2Nlc3NMZXZlbClcclxuICAgICAgOiB0aGlzLnVuc2hhcmVEaXJlY3RvcnkoY2F0ZWdvcnlJZCwgdHJ1c3RlZFBhcnR5LmlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSZWNvcmRBY2Nlc3NMZXZlbChcclxuICAgIHJlY29yZElkOiBzdHJpbmcsXHJcbiAgICBrZXlJZDogc3RyaW5nLFxyXG4gICAgdHJ1c3RlZFBhcnR5OiBUcnVzdGVkUGFydHksXHJcbiAgICBhY2Nlc3NMZXZlbDogQWNjZXNzTGV2ZWxcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhY2Nlc3NMZXZlbFxyXG4gICAgICA/IHRoaXMuc2hhcmVEaXJlY3RvcnkocmVjb3JkSWQsIGtleUlkLCB0cnVzdGVkUGFydHksIGFjY2Vzc0xldmVsKVxyXG4gICAgICA6IHRoaXMudW5zaGFyZURpcmVjdG9yeShyZWNvcmRJZCwgdHJ1c3RlZFBhcnR5LmlkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2hhcmVEaXJlY3RvcnkoXHJcbiAgICBkaXJlY3RvcnlJZDogc3RyaW5nLFxyXG4gICAga2V5SWQ6IHN0cmluZyxcclxuICAgIHRydXN0ZWRQYXJ0eTogVHJ1c3RlZFBhcnR5LFxyXG4gICAgYWNjZXNzTGV2ZWw6IEFjY2Vzc0xldmVsXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoU2VydmljZS5nZXRLZXkoa2V5SWQpO1xyXG4gICAgY29uc3Qgd3JhcHBpbmdLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoU2VydmljZS5nZXRLZXkoXHJcbiAgICAgIHRydXN0ZWRQYXJ0eS51c2VyU2hhcmVkS2V5LnNoYXJlZEtleS5pZFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHdyYXBwZWRLZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQoXHJcbiAgICAgIHdyYXBwaW5nS2V5Lmp3ayxcclxuICAgICAga2V5Lmp3ay50b0pTT04odHJ1ZSlcclxuICAgICk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGUoe1xyXG4gICAgICBtdXRhdGlvbjogU2hhcmVDYXRlZ29yeU11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQ6IGRpcmVjdG9yeUlkLFxyXG4gICAgICAgICAgdHBJZDogdHJ1c3RlZFBhcnR5LmlkLFxyXG4gICAgICAgICAgYWNjZXNzUm9sZTogYWNjZXNzTGV2ZWwsXHJcbiAgICAgICAgICBrZXlJZDoga2V5LmlkLFxyXG4gICAgICAgICAgd3JhcHBpbmdLZXlJZDogd3JhcHBpbmdLZXkuaWQsXHJcbiAgICAgICAgICB3cmFwcGVkS2V5OiBKU09OLnN0cmluZ2lmeSh3cmFwcGVkS2V5KSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHVuc2hhcmVEaXJlY3RvcnkoXHJcbiAgICBkaXJlY3RvcnlJZDogc3RyaW5nLFxyXG4gICAgdHJ1c3RlZFBhcnR5SWQ6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGUoe1xyXG4gICAgICBtdXRhdGlvbjogVW5zaGFyZUNhdGVnb3J5TXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBpZDogZGlyZWN0b3J5SWQsXHJcbiAgICAgICAgICB0cElkOiB0cnVzdGVkUGFydHlJZCxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbWFwVHJ1c3RlZFBhcnR5KHRwOiBhbnkpOiBQcm9taXNlPFRydXN0ZWRQYXJ0eT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgY29udGFjdENhcmQgPVxyXG4gICAgICAgIHRwLnNoYXJlZENvbnRhY3RDYXJkICYmXHJcbiAgICAgICAgKGF3YWl0IHRoaXMuc2hhcmVkQ29udGFjdENhcmRTZXJ2aWNlLmRlY3J5cHRUcnVzdGVkUGFydHlEZXRhaWxzKFxyXG4gICAgICAgICAgdHAuc2hhcmVkQ29udGFjdENhcmRcclxuICAgICAgICApKTtcclxuICAgICAgY29uc3QgbXlDb250YWN0Q2FyZCA9XHJcbiAgICAgICAgdHAubXlDb250YWN0Q2FyZCAmJlxyXG4gICAgICAgIChhd2FpdCB0aGlzLnNoYXJlZENvbnRhY3RDYXJkU2VydmljZS5kZWNyeXB0U2hhcmVkVHJ1c3RlZFBhcnR5RGV0YWlscyhcclxuICAgICAgICAgIHRwLm15Q29udGFjdENhcmRcclxuICAgICAgICApKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IHRwLmlkLFxyXG4gICAgICAgIHR5cGU6IFRydXN0ZWRQYXJ0eVR5cGUuVXNlciwgLy8gVE9ETzogd2hlbiBwYXJ0bmVyc1xyXG4gICAgICAgIGhhc1NjZW5hcmlvczogISF0cC5zaGFyZWRTY2VuYXJpb3MuZWRnZXMubGVuZ3RoLFxyXG4gICAgICAgIGhhc1NoYXJlZFZhdWx0OiAhIXRwLnNoYXJlZEl0ZW1zLmRpcmVjdG9yaWVzLmVkZ2VzLmxlbmd0aCxcclxuICAgICAgICBuYW1lOiBjb250YWN0Q2FyZCAmJiBjb250YWN0Q2FyZC5uYW1lICYmIGNvbnRhY3RDYXJkLm5hbWUubmFtZSxcclxuICAgICAgICBkZXRhaWxzOiBjb250YWN0Q2FyZCxcclxuICAgICAgICBteVNoYXJlZERldGFpbHM6IG15Q29udGFjdENhcmQsXHJcbiAgICAgICAgdXNlclNoYXJlZEtleTogdHAuY3VycmVudFVzZXJTaGFyZWRLZXkudXNlclNoYXJlZEtleSxcclxuICAgICAgICB1c2VybmFtZTogdHAub3RoZXIudXNlcm5hbWUsXHJcbiAgICAgICAgZmVhdHVyZXM6IHtcclxuICAgICAgICAgIHNoYXJlZFZhdWx0OiB7XHJcbiAgICAgICAgICAgIGhhc0FjY2VzczpcclxuICAgICAgICAgICAgICAodHAub3RoZXIuZmVhdHVyZXM/LnNoYXJlVmF1bHQgfHwgWydub2FjY2VzcyddKVswXSA9PT0gJ2FjY2VzcycsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkZWNyeXB0IFRydXN0ZWQgUGFydHkuJywgZSwgdHApO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbWFwSW52aXRlKFxyXG4gICAgZXhjaGFuZ2U6IERlY3J5cHRlZEtleUV4Y2hhbmdlXHJcbiAgKTogUHJvbWlzZTxUcnVzdGVkUGFydHlJbnZpdGU+IHtcclxuICAgIGNvbnN0IGNvbnRhY3RDYXJkID0gZXhjaGFuZ2UuY29udGFjdENhcmQ7XHJcbiAgICBjb25zdCBuYW1lID0gZXhjaGFuZ2UuaXNJbml0aWF0b3JcclxuICAgICAgPyBleGNoYW5nZS5teU1lc3NhZ2U/Lm5hbWVcclxuICAgICAgOiBjb250YWN0Q2FyZCAmJiBjb250YWN0Q2FyZC5uYW1lICYmIGNvbnRhY3RDYXJkLm5hbWUubmFtZTtcclxuICAgIGNvbnN0IGVtYWlsID0gZXhjaGFuZ2UuaXNJbml0aWF0b3JcclxuICAgICAgPyBleGNoYW5nZS5teU1lc3NhZ2U/LmVtYWlsXHJcbiAgICAgIDogKGNvbnRhY3RDYXJkICYmIGNvbnRhY3RDYXJkLmVtYWlsKSB8fCBleGNoYW5nZS5yZXNwb25kZXJFbWFpbEFkZHJlc3M7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWQ6IGV4Y2hhbmdlLmlkLFxyXG4gICAgICB0eXBlOiBUcnVzdGVkUGFydHlUeXBlLlVzZXIsIC8vIHRvZG8gd2hlbiBwYXJ0bmVyc1xyXG4gICAgICBzdGF0dXM6IChleGNoYW5nZS5zdGF0ZSBhcyB1bmtub3duKSBhcyBUcnVzdGVkUGFydHlJbnZpdGVTdGF0dXMsXHJcbiAgICAgIHRva2VuOiBleGNoYW5nZS50b2tlbixcclxuICAgICAgdG9rZW5FeHBpcnk6IGV4Y2hhbmdlLnRva2VuRXhwaXJ5VGltZSxcclxuICAgICAgZGVjcnlwdGVkT3RrOiBleGNoYW5nZS5kZWNyeXB0ZWRPdGssXHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIGVtYWlsLFxyXG4gICAgICBpc1NlbmRlcjogZXhjaGFuZ2UuaXNJbml0aWF0b3IsXHJcbiAgICAgIGFjdGlvblJlcXVpcmVkOiBleGNoYW5nZS5pc0luaXRpYXRvclxyXG4gICAgICAgID8gZXhjaGFuZ2UuaW5pdGlhdG9yQWN0aW9uUmVxdWlyZWRcclxuICAgICAgICA6IGV4Y2hhbmdlLnJlc3BvbmRlckFjdGlvblJlcXVpcmVkLFxyXG4gICAgICByb290S2V5Q2lwaGVyOiBleGNoYW5nZS5pbml0aWF0b3JSb290S2V5Q2lwaGVyLFxyXG4gICAgICBwYmtDaXBoZXI6IGV4Y2hhbmdlLm90ay5pbml0aWF0b3JPbmVUaW1lUGJrQ2lwaGVyLFxyXG4gICAgICBpc0V4cGlyZWQ6IGV4Y2hhbmdlLmlzRXhwaXJlZCxcclxuICAgICAgZGV0YWlsczogY29udGFjdENhcmQsXHJcbiAgICAgIG1lc3NhZ2U6IGV4Y2hhbmdlLm1lc3NhZ2UsXHJcbiAgICAgIG15U2hhcmVkRGV0YWlsczogZXhjaGFuZ2UubXlDb250YWN0Q2FyZCxcclxuICAgICAgbXlTaGFyZWRNZXNzYWdlOiBleGNoYW5nZS5teU1lc3NhZ2UsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=