@lifeready/core 1.0.13 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +62 -62
  2. package/bundles/lifeready-core.umd.js +14315 -14315
  3. package/bundles/lifeready-core.umd.js.map +1 -1
  4. package/bundles/lifeready-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/_common/ast.js +40 -40
  6. package/esm2015/lib/_common/deferred-promise.js +24 -24
  7. package/esm2015/lib/_common/exceptions.js +157 -157
  8. package/esm2015/lib/_common/queries.gql.js +190 -190
  9. package/esm2015/lib/_common/run-outside-angular.js +79 -79
  10. package/esm2015/lib/_common/types.js +1 -1
  11. package/esm2015/lib/_common/utils.js +52 -52
  12. package/esm2015/lib/api/contact-card.gql.js +79 -79
  13. package/esm2015/lib/api/contact-card.service.js +154 -154
  14. package/esm2015/lib/api/contact-card2.gql.js +60 -60
  15. package/esm2015/lib/api/contact-card2.service.js +103 -103
  16. package/esm2015/lib/api/file.service.js +74 -74
  17. package/esm2015/lib/api/key-exchange.gql.js +188 -188
  18. package/esm2015/lib/api/key-exchange.service.js +442 -442
  19. package/esm2015/lib/api/key-exchange.types.js +18 -18
  20. package/esm2015/lib/api/key-exchange2.gql.js +171 -171
  21. package/esm2015/lib/api/key-exchange2.service.js +479 -479
  22. package/esm2015/lib/api/lock.gql.js +40 -40
  23. package/esm2015/lib/api/lock.service.js +64 -64
  24. package/esm2015/lib/api/lr-apollo.service.js +46 -46
  25. package/esm2015/lib/api/lr-graphql/index.js +6 -6
  26. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
  27. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
  28. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
  29. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
  30. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
  31. package/esm2015/lib/api/message.service.js +138 -138
  32. package/esm2015/lib/api/persist.service.js +181 -181
  33. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
  34. package/esm2015/lib/api/query-processor/index.js +3 -3
  35. package/esm2015/lib/api/query-processor/query-processor.service.js +262 -262
  36. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
  37. package/esm2015/lib/api/shared-contact-card.service.js +119 -119
  38. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
  39. package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
  40. package/esm2015/lib/api/time.service.js +146 -146
  41. package/esm2015/lib/api/types/graphql.types.js +7 -7
  42. package/esm2015/lib/api/types/index.js +3 -3
  43. package/esm2015/lib/api/types/lr-graphql.types.js +101 -101
  44. package/esm2015/lib/auth/auth.config.js +57 -57
  45. package/esm2015/lib/auth/auth.gql.js +48 -48
  46. package/esm2015/lib/auth/auth.types.js +27 -27
  47. package/esm2015/lib/auth/idle.service.js +168 -168
  48. package/esm2015/lib/auth/idle.types.js +7 -7
  49. package/esm2015/lib/auth/lbop.service.js +355 -355
  50. package/esm2015/lib/auth/life-ready-auth.service.js +488 -488
  51. package/esm2015/lib/auth/password.service.js +320 -320
  52. package/esm2015/lib/auth/register.service.js +172 -172
  53. package/esm2015/lib/auth/two-factor.service.js +74 -74
  54. package/esm2015/lib/category/category-meta.service.js +99 -99
  55. package/esm2015/lib/category/category.gql.js +406 -406
  56. package/esm2015/lib/category/category.service.js +390 -390
  57. package/esm2015/lib/category/category.types.js +29 -29
  58. package/esm2015/lib/cryptography/cryptography.types.js +11 -11
  59. package/esm2015/lib/cryptography/encryption.service.js +189 -189
  60. package/esm2015/lib/cryptography/key-factory.service.js +237 -237
  61. package/esm2015/lib/cryptography/key-graph.service.js +299 -299
  62. package/esm2015/lib/cryptography/key-meta.service.js +200 -200
  63. package/esm2015/lib/cryptography/key.service.js +124 -124
  64. package/esm2015/lib/cryptography/slip39.service.js +169 -169
  65. package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
  66. package/esm2015/lib/items2/item2.gql.js +139 -139
  67. package/esm2015/lib/items2/item2.service.js +498 -498
  68. package/esm2015/lib/items2/item2.types.js +1 -1
  69. package/esm2015/lib/life-ready.config.js +84 -84
  70. package/esm2015/lib/life-ready.module.js +74 -74
  71. package/esm2015/lib/notification/notification.gql.js +43 -43
  72. package/esm2015/lib/notification/notification.service.js +118 -118
  73. package/esm2015/lib/plan/plan.gql.js +123 -123
  74. package/esm2015/lib/plan/plan.service.js +149 -149
  75. package/esm2015/lib/plan/plan.types.js +11 -11
  76. package/esm2015/lib/record/record-attachment.service.js +101 -101
  77. package/esm2015/lib/record/record.gql.js +179 -179
  78. package/esm2015/lib/record/record.service.js +206 -206
  79. package/esm2015/lib/record/record.types.js +15 -15
  80. package/esm2015/lib/record-type/record-type.service.js +75 -75
  81. package/esm2015/lib/record-type/record-type.types.js +28 -28
  82. package/esm2015/lib/scenario/scenario.constants.js +2 -2
  83. package/esm2015/lib/scenario/scenario.controller.js +34 -34
  84. package/esm2015/lib/scenario/scenario.gql.js +72 -72
  85. package/esm2015/lib/scenario/scenario.gql.private.js +198 -198
  86. package/esm2015/lib/scenario/scenario.service.js +538 -538
  87. package/esm2015/lib/scenario/scenario.types.js +1 -1
  88. package/esm2015/lib/trusted-parties/tp-assembly.gql.private.js +22 -22
  89. package/esm2015/lib/trusted-parties/tp-assembly.js +362 -362
  90. package/esm2015/lib/trusted-parties/tp-assembly.types.js +1 -1
  91. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +113 -113
  92. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
  93. package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
  94. package/esm2015/lib/trusted-parties/tp-password-reset.controller.js +34 -34
  95. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +236 -236
  96. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +95 -95
  97. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
  98. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
  99. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
  100. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
  101. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
  102. package/esm2015/lib/users/profile-details.service.js +214 -214
  103. package/esm2015/lib/users/profile.gql.js +97 -97
  104. package/esm2015/lib/users/profile.service.js +169 -169
  105. package/esm2015/lib/users/profile.types.js +34 -34
  106. package/esm2015/lib/users/user.gql.js +60 -60
  107. package/esm2015/lib/users/user.service.js +79 -79
  108. package/esm2015/lib/users/user.types.js +5 -5
  109. package/esm2015/lifeready-core.js +13 -13
  110. package/esm2015/public-api.js +71 -71
  111. package/fesm2015/lifeready-core.js +12258 -12258
  112. package/fesm2015/lifeready-core.js.map +1 -1
  113. package/lib/_common/ast.d.ts +11 -11
  114. package/lib/_common/deferred-promise.d.ts +12 -12
  115. package/lib/_common/exceptions.d.ts +109 -109
  116. package/lib/_common/queries.gql.d.ts +10 -10
  117. package/lib/_common/run-outside-angular.d.ts +14 -14
  118. package/lib/_common/types.d.ts +10 -10
  119. package/lib/_common/utils.d.ts +9 -9
  120. package/lib/api/contact-card.gql.d.ts +7 -7
  121. package/lib/api/contact-card.service.d.ts +52 -52
  122. package/lib/api/contact-card2.gql.d.ts +34 -34
  123. package/lib/api/contact-card2.service.d.ts +49 -49
  124. package/lib/api/file.service.d.ts +18 -18
  125. package/lib/api/key-exchange.gql.d.ts +9 -9
  126. package/lib/api/key-exchange.service.d.ts +39 -39
  127. package/lib/api/key-exchange.types.d.ts +196 -196
  128. package/lib/api/key-exchange2.gql.d.ts +125 -125
  129. package/lib/api/key-exchange2.service.d.ts +187 -187
  130. package/lib/api/lock.gql.d.ts +27 -27
  131. package/lib/api/lock.service.d.ts +34 -34
  132. package/lib/api/lr-apollo.service.d.ts +15 -15
  133. package/lib/api/lr-graphql/index.d.ts +5 -5
  134. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
  135. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +28 -28
  136. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
  137. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
  138. package/lib/api/lr-graphql/lr.service.d.ts +9 -9
  139. package/lib/api/message.service.d.ts +58 -58
  140. package/lib/api/persist.service.d.ts +31 -31
  141. package/lib/api/query-processor/common-processors.service.d.ts +36 -36
  142. package/lib/api/query-processor/index.d.ts +2 -2
  143. package/lib/api/query-processor/query-processor.service.d.ts +18 -18
  144. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
  145. package/lib/api/shared-contact-card.service.d.ts +33 -33
  146. package/lib/api/shared-contact-card2.gql.d.ts +36 -36
  147. package/lib/api/shared-contact-card2.service.d.ts +45 -45
  148. package/lib/api/time.service.d.ts +16 -16
  149. package/lib/api/types/graphql.types.d.ts +29 -29
  150. package/lib/api/types/index.d.ts +2 -2
  151. package/lib/api/types/lr-graphql.types.d.ts +502 -502
  152. package/lib/auth/auth.config.d.ts +5 -5
  153. package/lib/auth/auth.gql.d.ts +15 -15
  154. package/lib/auth/auth.types.d.ts +66 -66
  155. package/lib/auth/idle.service.d.ts +40 -40
  156. package/lib/auth/idle.types.d.ts +10 -10
  157. package/lib/auth/lbop.service.d.ts +91 -91
  158. package/lib/auth/life-ready-auth.service.d.ts +61 -61
  159. package/lib/auth/password.service.d.ts +78 -78
  160. package/lib/auth/register.service.d.ts +25 -25
  161. package/lib/auth/two-factor.service.d.ts +15 -15
  162. package/lib/category/category-meta.service.d.ts +23 -23
  163. package/lib/category/category.gql.d.ts +45 -45
  164. package/lib/category/category.service.d.ts +67 -67
  165. package/lib/category/category.types.d.ts +79 -79
  166. package/lib/cryptography/cryptography.types.d.ts +83 -83
  167. package/lib/cryptography/encryption.service.d.ts +41 -41
  168. package/lib/cryptography/key-factory.service.d.ts +38 -38
  169. package/lib/cryptography/key-graph.service.d.ts +41 -41
  170. package/lib/cryptography/key-meta.service.d.ts +44 -44
  171. package/lib/cryptography/key.service.d.ts +36 -36
  172. package/lib/cryptography/slip39.service.d.ts +43 -43
  173. package/lib/cryptography/web-crypto.service.d.ts +5 -5
  174. package/lib/items2/item2.gql.d.ts +123 -123
  175. package/lib/items2/item2.service.d.ts +203 -203
  176. package/lib/items2/item2.types.d.ts +70 -70
  177. package/lib/life-ready.config.d.ts +14 -14
  178. package/lib/life-ready.module.d.ts +5 -5
  179. package/lib/notification/notification.gql.d.ts +37 -37
  180. package/lib/notification/notification.service.d.ts +63 -63
  181. package/lib/plan/plan.gql.d.ts +11 -11
  182. package/lib/plan/plan.service.d.ts +33 -33
  183. package/lib/plan/plan.types.d.ts +31 -31
  184. package/lib/record/record-attachment.service.d.ts +16 -16
  185. package/lib/record/record.gql.d.ts +14 -14
  186. package/lib/record/record.service.d.ts +25 -25
  187. package/lib/record/record.types.d.ts +57 -57
  188. package/lib/record-type/record-type.service.d.ts +11 -11
  189. package/lib/record-type/record-type.types.d.ts +50 -50
  190. package/lib/scenario/scenario.constants.d.ts +1 -1
  191. package/lib/scenario/scenario.controller.d.ts +10 -10
  192. package/lib/scenario/scenario.gql.d.ts +62 -62
  193. package/lib/scenario/scenario.gql.private.d.ts +16 -16
  194. package/lib/scenario/scenario.service.d.ts +233 -233
  195. package/lib/scenario/scenario.types.d.ts +50 -50
  196. package/lib/trusted-parties/tp-assembly.d.ts +177 -177
  197. package/lib/trusted-parties/tp-assembly.gql.private.d.ts +5 -5
  198. package/lib/trusted-parties/tp-assembly.types.d.ts +38 -38
  199. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
  200. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
  201. package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
  202. package/lib/trusted-parties/tp-password-reset.controller.d.ts +10 -10
  203. package/lib/trusted-parties/tp-password-reset.gql.d.ts +223 -223
  204. package/lib/trusted-parties/tp-password-reset.service.d.ts +188 -188
  205. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
  206. package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
  207. package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
  208. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
  209. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
  210. package/lib/users/profile-details.service.d.ts +21 -21
  211. package/lib/users/profile.gql.d.ts +11 -11
  212. package/lib/users/profile.service.d.ts +35 -35
  213. package/lib/users/profile.types.d.ts +96 -96
  214. package/lib/users/user.gql.d.ts +9 -9
  215. package/lib/users/user.service.d.ts +12 -12
  216. package/lib/users/user.types.d.ts +23 -23
  217. package/lifeready-core.d.ts +12 -12
  218. package/package.json +1 -1
  219. package/public-api.d.ts +67 -67
@@ -1,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi90cnVzdGVkLXBhcnRpZXMvdHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUtqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFDTCxvQ0FBb0MsRUFDcEMscUNBQXFDLEVBQ3JDLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsdUJBQXVCLEdBQ3hCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQVFMLHdCQUF3QixFQUV4QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEdBQ3JCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFF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QXNCO2dCQUM5QyxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUI7Z0JBQ2pELFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDekIsZUFBZSxFQUFFLFFBQVEsQ0FBQyxhQUFhO2dCQUN2QyxlQUFlLEVBQUUsUUFBUSxDQUFDLFNBQVM7YUFDcEMsQ0FBQzs7S0FDSDs7OztZQTdWRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTdDUSxVQUFVO1lBU1YsZUFBZTtZQUNmLHdCQUF3QjtZQU14QixXQUFXO1lBTFgsb0JBQW9CO1lBUHBCLGtCQUFrQjtZQVVsQixlQUFlO1lBQ2YsVUFBVTtZQTBCVixpQkFBaUI7WUE1QmpCLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcclxuaW1wb3J0IHsgbWF0ZXJpYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEtleUV4Y2hhbmdlU2VydmljZSB9IGZyb20gJy4uL2FwaS9rZXktZXhjaGFuZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgRGVjcnlwdGVkS2V5RXhjaGFuZ2UsXHJcbiAgUmVzcG9uZE90a0lucHV0LFxyXG59IGZyb20gJy4uL2FwaS9rZXktZXhjaGFuZ2UudHlwZXMnO1xyXG5pbXBvcnQgeyBMckFwb2xsb1NlcnZpY2UgfSBmcm9tICcuLi9hcGkvbHItYXBvbGxvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UgfSBmcm9tICcuLi9hcGkvc2hhcmVkLWNvbnRhY3QtY2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGlmZVJlYWR5QXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoL2xpZmUtcmVhZHktYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWNjZXNzTGV2ZWwgfSBmcm9tICcuLi9jYXRlZ29yeS9jYXRlZ29yeS50eXBlcyc7XHJcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XHJcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL3VzZXJzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRhY3RDYXJkTmFtZSB9IGZyb20gJy4uL3VzZXJzL3Byb2ZpbGUudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIENhbmNlbFRydXN0ZWRQYXJ0eUludml0YXRpb25NdXRhdGlvbixcclxuICBEZWNsaW5lVHJ1c3RlZFBhcnR5SW52aXRhdGlvbk11dGF0aW9uLFxyXG4gIERlbGV0ZVRydXN0ZWRQYXJ0eU11dGF0aW9uLFxyXG4gIEdldEFsbFRydXN0ZWRQYXJ0aWVzUXVlcnksXHJcbiAgR2V0VHJ1c3RlZFBhcnRpZXNRdWVyeSxcclxuICBHZXRUcnVzdGVkUGFydHlRdWVyeSxcclxuICBTaGFyZUNhdGVnb3J5TXV0YXRpb24sXHJcbiAgVW5zaGFyZUNhdGVnb3J5TXV0YXRpb24sXHJcbn0gZnJvbSAnLi90cnVzdGVkLXBhcnR5LmdxbCc7XHJcbmltcG9ydCB7XHJcbiAgQWNjZXB0VHJ1c3RlZFBhcnR5SW52aXRlLFxyXG4gIENvbmZpcm1UcnVzdGVkUGFydHlJbnZpdGUsXHJcbiAgRm91bmRUcnVzdGVkUGFydHksXHJcbiAgSW52aXRlVHJ1c3RlZFBhcnR5LFxyXG4gIFRydXN0ZWRQYXJ0aWVzLFxyXG4gIFRydXN0ZWRQYXJ0eSxcclxuICBUcnVzdGVkUGFydHlJbnZpdGUsXHJcbiAgVHJ1c3RlZFBhcnR5SW52aXRlU3RhdHVzLFxyXG4gIFRydXN0ZWRQYXJ0eVJvbGUsXHJcbiAgVHJ1c3RlZFBhcnR5VHlwZSxcclxuICBUcnVzdGVkUGFydHlSb2xlVHlwZSxcclxufSBmcm9tICcuL3RydXN0ZWQtcGFydHkudHlwZXMnO1xyXG5pbXBvcnQgeyBLZXlGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZmFjdG9yeS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcnVzdGVkUGFydHlTZXJ2aWNlIHtcclxuICBwcml2YXRlIHRydXN0ZWRQYXJ0eVJvbGVzOiBUcnVzdGVkUGFydHlSb2xlW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBsckFwb2xsbzogTHJBcG9sbG9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzaGFyZWRDb250YWN0Q2FyZFNlcnZpY2U6IFNoYXJlZENvbnRhY3RDYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogTGlmZVJlYWR5QXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUV4Y2hhbmdlU2VydmljZTogS2V5RXhjaGFuZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlHcmFwaFNlcnZpY2U6IEtleUdyYXBoU2VydmljZSxcclxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRydXN0ZWRQYXJ0aWVzKCk6IFByb21pc2U8VHJ1c3RlZFBhcnR5W10+IHtcclxuICAgIGNvbnN0IHsgdHBzIH0gPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PGFueT4oe1xyXG4gICAgICBxdWVyeTogR2V0VHJ1c3RlZFBhcnRpZXNRdWVyeSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICB0cHMuZWRnZXMubWFwKCh4KSA9PiB0aGlzLm1hcFRydXN0ZWRQYXJ0eSh4Lm5vZGUpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBbGxUcnVzdGVkUGFydGllcygpOiBQcm9taXNlPFRydXN0ZWRQYXJ0aWVzPiB7XHJcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyKCk7XHJcbiAgICBjb25zdCB7IHRwcywgaW52aXRlcywgc2VudEludml0ZXMgfSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8YW55Pih7XHJcbiAgICAgIHF1ZXJ5OiBHZXRBbGxUcnVzdGVkUGFydGllc1F1ZXJ5LFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICB1c2VySWQ6IHVzZXIuaWQsXHJcbiAgICAgICAgaXNFeHBpcmVkOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBhcnRpZXM6IChcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbDxUcnVzdGVkUGFydHk+KFxyXG4gICAgICAgICAgdHBzLmVkZ2VzLm1hcCgoeCkgPT4gdGhpcy5tYXBUcnVzdGVkUGFydHkoeC5ub2RlKSlcclxuICAgICAgICApXHJcbiAgICAgICkuZmlsdGVyKCh4KSA9PiB4KSxcclxuICAgICAgaW52aXRlczogKFxyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsPFRydXN0ZWRQYXJ0eUludml0ZT4oXHJcbiAgICAgICAgICBpbnZpdGVzLmVkZ2VzLm1hcChhc3luYyAoeCkgPT5cclxuICAgICAgICAgICAgdGhpcy5tYXBJbnZpdGUoXHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5rZXlFeGNoYW5nZVNlcnZpY2UuZGVjcnlwdEtleUV4Y2hhbmdlKHgubm9kZSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguc3RhdHVzICE9PSBUcnVzdGVkUGFydHlJbnZpdGVTdGF0dXMuQ29tcGxldGVkKVxyXG4gICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgeC5zdGF0dXMgIT09IFRydXN0ZWRQYXJ0eUludml0ZVN0YXR1cy5JbnZpdGVkIHx8IHguYWN0aW9uUmVxdWlyZWRcclxuICAgICAgICApLFxyXG4gICAgICBzZW50SW52aXRlczogKFxyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsPFRydXN0ZWRQYXJ0eUludml0ZT4oXHJcbiAgICAgICAgICBzZW50SW52aXRlcy5lZGdlcy5tYXAoYXN5bmMgKHgpID0+XHJcbiAgICAgICAgICAgIHRoaXMubWFwSW52aXRlKFxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMua2V5RXhjaGFuZ2VTZXJ2aWNlLmRlY3J5cHRLZXlFeGNoYW5nZSh4Lm5vZGUpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgICkuZmlsdGVyKCh4KSA9PiB4LnN0YXR1cyAhPT0gVHJ1c3RlZFBhcnR5SW52aXRlU3RhdHVzLkNvbXBsZXRlZCksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRydXN0ZWRQYXJ0eShwYXJ0eUlkOiBzdHJpbmcpOiBQcm9taXNlPFRydXN0ZWRQYXJ0eT4ge1xyXG4gICAgY29uc3QgeyB0cCB9ID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxhbnk+KHtcclxuICAgICAgcXVlcnk6IEdldFRydXN0ZWRQYXJ0eVF1ZXJ5LFxyXG4gICAgICB2YXJpYWJsZXM6IHsgcGFydHlJZCB9LFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tYXBUcnVzdGVkUGFydHkodHApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRydXN0ZWRQYXJ0eVJvbGVzKFxyXG4gICAgcm9sZVR5cGU6IFRydXN0ZWRQYXJ0eVJvbGVUeXBlID0gVHJ1c3RlZFBhcnR5Um9sZVR5cGUuR2VuZXJhbFxyXG4gICk6IFByb21pc2U8VHJ1c3RlZFBhcnR5Um9sZVtdPiB7XHJcbiAgICBpZiAoIXRoaXMudHJ1c3RlZFBhcnR5Um9sZXMpIHtcclxuICAgICAgdGhpcy50cnVzdGVkUGFydHlSb2xlcyA9IGF3YWl0IHRoaXMuaHR0cFxyXG4gICAgICAgIC5nZXQ8VHJ1c3RlZFBhcnR5Um9sZVtdPignL2Fzc2V0cy9tZXRhL3RydXN0ZWQtcGFydHktcm9sZXMuanNvbicpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcclxuICAgICAgdGhpcy50cnVzdGVkUGFydHlSb2xlcy5maWx0ZXIoKHgpID0+IHgucm9sZVR5cGUgPT09IHJvbGVUeXBlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBmaW5kQnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxGb3VuZFRydXN0ZWRQYXJ0eT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJ5RW1haWwoZW1haWwpO1xyXG5cclxuICAgICAgcmV0dXJuIHVzZXJcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgaWQ6IHVzZXIuaWQsXHJcbiAgICAgICAgICAgIGVtYWlsLFxyXG4gICAgICAgICAgICB1c2VybmFtZTogdXNlci51c2VybmFtZSxcclxuICAgICAgICAgICAgaXNUcnVzdGVkUGFydHk6IHVzZXIuaGF2ZVRwLFxyXG4gICAgICAgICAgICBpc01lOiB1c2VyLmlzQ3VycmVudFVzZXIsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbnZpdGVUcnVzdGVkUGFydHkoaW52aXRlOiBJbnZpdGVUcnVzdGVkUGFydHkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgcmVzcG9uZGVyVXNlcm5hbWU6IGludml0ZS5wYXJ0eS51c2VybmFtZSxcclxuICAgICAgZW1haWw6IGludml0ZS5wYXJ0eS5lbWFpbCxcclxuICAgICAgbWVzc2FnZToge1xyXG4gICAgICAgIG5hbWU6IGludml0ZS5wYXJ0eS5uYW1lLFxyXG4gICAgICAgIGVtYWlsOiBpbnZpdGUucGFydHkuZW1haWwsXHJcbiAgICAgICAgbWVzc2FnZTogaW52aXRlLnBhcnR5Lm1lc3NhZ2UsXHJcbiAgICAgICAgcGVybWlzc2lvbnM6IGludml0ZS5wZXJtaXNzaW9ucyxcclxuICAgICAgfSxcclxuICAgICAgY29udGFjdENhcmQ6IHtcclxuICAgICAgICBwbGFpbk93bmVyQ2lwaGVyRGF0YUpzb246IG51bGwsXHJcbiAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhSnNvbjogaW52aXRlLm15U2hhcmVkRGV0YWlscyxcclxuICAgICAgICBvd25lclBsYWluRGF0YToge1xyXG4gICAgICAgICAgbmFtZTogbmV3IENvbnRhY3RDYXJkTmFtZShpbnZpdGUubXlTaGFyZWREZXRhaWxzLm5hbWUpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgYXdhaXQgdGhpcy5rZXlFeGNoYW5nZVNlcnZpY2UuaW5pdGlhdGVPdGsocGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjYW5jZWxJbnZpdGF0aW9uKGludml0ZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlKHtcclxuICAgICAgbXV0YXRpb246IENhbmNlbFRydXN0ZWRQYXJ0eUludml0YXRpb25NdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkOiBpbnZpdGVJZCxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW52aXRhdGlvbihcclxuICAgIGludml0ZUlkOiBzdHJpbmcsXHJcbiAgICBpbnZpdGVUb2tlbjogc3RyaW5nLFxyXG4gICAga2V5OiBzdHJpbmdcclxuICApOiBQcm9taXNlPFRydXN0ZWRQYXJ0eUludml0ZT4ge1xyXG4gICAgY29uc3QgZXhjaGFuZ2UgPSBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5nZXRLZXlFeGNoYW5nZShpbnZpdGVJZCwge1xyXG4gICAgICB0b2tlbjogaW52aXRlVG9rZW4sXHJcbiAgICAgIG90S2V5Szoga2V5LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubWFwSW52aXRlKGV4Y2hhbmdlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBhY2NlcHRJbnZpdGF0aW9uKFxyXG4gICAgaW52aXRlOiBBY2NlcHRUcnVzdGVkUGFydHlJbnZpdGVcclxuICApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgcGFyYW1zOiBSZXNwb25kT3RrSW5wdXQgPSB7XHJcbiAgICAgIGlkOiBpbnZpdGUuaW52aXRlSWQsXHJcbiAgICAgIHRva2VuOiBpbnZpdGUuaW52aXRlVG9rZW4sXHJcbiAgICAgIGRlY3J5cHRlZE90azogaW52aXRlLmRlY3J5cHRlZE90ayxcclxuICAgICAgaW5pdGlhdG9yQ29udGFjdENhcmQ6IG51bGwsXHJcbiAgICAgIHJlc3BvbmRlckNvbnRhY3RDYXJkOiB7XHJcbiAgICAgICAgcGxhaW5Pd25lckNpcGhlckRhdGFKc29uOiBudWxsLFxyXG4gICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YUpzb246IGludml0ZS5teVNoYXJlZERldGFpbHMsXHJcbiAgICAgICAgb3duZXJQbGFpbkRhdGE6IHtcclxuICAgICAgICAgIG5hbWU6IG5ldyBDb250YWN0Q2FyZE5hbWUoaW52aXRlLm15U2hhcmVkRGV0YWlscy5uYW1lKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB7IHRwIH0gPSBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5yZXNwb25kT3RrKHBhcmFtcyk7XHJcblxyXG4gICAgcmV0dXJuIHRwLmlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlY2xpbmVJbnZpdGF0aW9uKFxyXG4gICAgaW52aXRlSWQ6IHN0cmluZyxcclxuICAgIGludml0ZVRva2VuOiBzdHJpbmdcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlKHtcclxuICAgICAgbXV0YXRpb246IERlY2xpbmVUcnVzdGVkUGFydHlJbnZpdGF0aW9uTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBpZDogaW52aXRlSWQsXHJcbiAgICAgICAgICB0b2tlbjogaW52aXRlVG9rZW4sXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbmZpcm1JbnZpdGF0aW9uKFxyXG4gICAgY29uZmlybTogQ29uZmlybVRydXN0ZWRQYXJ0eUludml0ZVxyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCB7IHRwIH0gPSBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5jb21wbGV0ZU90ayhcclxuICAgICAgY29uZmlybS5pbnZpdGVJZCxcclxuICAgICAgY29uZmlybS5pbml0aWF0b3JSb290S2V5Q2lwaGVyLFxyXG4gICAgICBjb25maXJtLmluaXRpYXRvck9uZVRpbWVQYmtDaXBoZXIsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcbiAgICByZXR1cm4gdHAuaWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlVHJ1c3RlZFBhcnR5KHBhcnR5SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGUoe1xyXG4gICAgICBtdXRhdGlvbjogRGVsZXRlVHJ1c3RlZFBhcnR5TXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBpZDogcGFydHlJZCxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q2F0ZWdvcnlBY2Nlc3NMZXZlbChcclxuICAgIGNhdGVnb3J5SWQ6IHN0cmluZyxcclxuICAgIGtleUlkOiBzdHJpbmcsXHJcbiAgICB0cnVzdGVkUGFydHk6IFRydXN0ZWRQYXJ0eSxcclxuICAgIGFjY2Vzc0xldmVsPzogQWNjZXNzTGV2ZWxcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhY2Nlc3NMZXZlbFxyXG4gICAgICA/IHRoaXMuc2hhcmVEaXJlY3RvcnkoY2F0ZWdvcnlJZCwga2V5SWQsIHRydXN0ZWRQYXJ0eSwgYWNjZXNzTGV2ZWwpXHJcbiAgICAgIDogdGhpcy51bnNoYXJlRGlyZWN0b3J5KGNhdGVnb3J5SWQsIHRydXN0ZWRQYXJ0eS5pZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UmVjb3JkQWNjZXNzTGV2ZWwoXHJcbiAgICByZWNvcmRJZDogc3RyaW5nLFxyXG4gICAga2V5SWQ6IHN0cmluZyxcclxuICAgIHRydXN0ZWRQYXJ0eTogVHJ1c3RlZFBhcnR5LFxyXG4gICAgYWNjZXNzTGV2ZWw6IEFjY2Vzc0xldmVsXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYWNjZXNzTGV2ZWxcclxuICAgICAgPyB0aGlzLnNoYXJlRGlyZWN0b3J5KHJlY29yZElkLCBrZXlJZCwgdHJ1c3RlZFBhcnR5LCBhY2Nlc3NMZXZlbClcclxuICAgICAgOiB0aGlzLnVuc2hhcmVEaXJlY3RvcnkocmVjb3JkSWQsIHRydXN0ZWRQYXJ0eS5pZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNoYXJlRGlyZWN0b3J5KFxyXG4gICAgZGlyZWN0b3J5SWQ6IHN0cmluZyxcclxuICAgIGtleUlkOiBzdHJpbmcsXHJcbiAgICB0cnVzdGVkUGFydHk6IFRydXN0ZWRQYXJ0eSxcclxuICAgIGFjY2Vzc0xldmVsOiBBY2Nlc3NMZXZlbFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaFNlcnZpY2UuZ2V0S2V5KGtleUlkKTtcclxuICAgIGNvbnN0IHdyYXBwaW5nS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaFNlcnZpY2UuZ2V0S2V5KFxyXG4gICAgICB0cnVzdGVkUGFydHkudXNlclNoYXJlZEtleS5zaGFyZWRLZXkuaWRcclxuICAgICk7XHJcbiAgICBjb25zdCB3cmFwcGVkS2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxyXG4gICAgICB3cmFwcGluZ0tleS5qd2ssXHJcbiAgICAgIGtleS5qd2sudG9KU09OKHRydWUpXHJcbiAgICApO1xyXG5cclxuICAgIGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlKHtcclxuICAgICAgbXV0YXRpb246IFNoYXJlQ2F0ZWdvcnlNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkOiBkaXJlY3RvcnlJZCxcclxuICAgICAgICAgIHRwSWQ6IHRydXN0ZWRQYXJ0eS5pZCxcclxuICAgICAgICAgIGFjY2Vzc1JvbGU6IGFjY2Vzc0xldmVsLFxyXG4gICAgICAgICAga2V5SWQ6IGtleS5pZCxcclxuICAgICAgICAgIHdyYXBwaW5nS2V5SWQ6IHdyYXBwaW5nS2V5LmlkLFxyXG4gICAgICAgICAgd3JhcHBlZEtleTogSlNPTi5zdHJpbmdpZnkod3JhcHBlZEtleSksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB1bnNoYXJlRGlyZWN0b3J5KFxyXG4gICAgZGlyZWN0b3J5SWQ6IHN0cmluZyxcclxuICAgIHRydXN0ZWRQYXJ0eUlkOiBzdHJpbmdcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlKHtcclxuICAgICAgbXV0YXRpb246IFVuc2hhcmVDYXRlZ29yeU11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQ6IGRpcmVjdG9yeUlkLFxyXG4gICAgICAgICAgdHBJZDogdHJ1c3RlZFBhcnR5SWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG1hcFRydXN0ZWRQYXJ0eSh0cDogYW55KTogUHJvbWlzZTxUcnVzdGVkUGFydHk+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGNvbnRhY3RDYXJkID1cclxuICAgICAgICB0cC5zaGFyZWRDb250YWN0Q2FyZCAmJlxyXG4gICAgICAgIChhd2FpdCB0aGlzLnNoYXJlZENvbnRhY3RDYXJkU2VydmljZS5kZWNyeXB0VHJ1c3RlZFBhcnR5RGV0YWlscyhcclxuICAgICAgICAgIHRwLnNoYXJlZENvbnRhY3RDYXJkXHJcbiAgICAgICAgKSk7XHJcbiAgICAgIGNvbnN0IG15Q29udGFjdENhcmQgPVxyXG4gICAgICAgIHRwLm15Q29udGFjdENhcmQgJiZcclxuICAgICAgICAoYXdhaXQgdGhpcy5zaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UuZGVjcnlwdFNoYXJlZFRydXN0ZWRQYXJ0eURldGFpbHMoXHJcbiAgICAgICAgICB0cC5teUNvbnRhY3RDYXJkXHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlkOiB0cC5pZCxcclxuICAgICAgICB0eXBlOiBUcnVzdGVkUGFydHlUeXBlLlVzZXIsIC8vIFRPRE86IHdoZW4gcGFydG5lcnNcclxuICAgICAgICBoYXNTY2VuYXJpb3M6ICEhdHAuc2hhcmVkU2NlbmFyaW9zLmVkZ2VzLmxlbmd0aCxcclxuICAgICAgICBoYXNTaGFyZWRWYXVsdDogISF0cC5zaGFyZWRJdGVtcy5kaXJlY3Rvcmllcy5lZGdlcy5sZW5ndGgsXHJcbiAgICAgICAgbmFtZTogY29udGFjdENhcmQgJiYgY29udGFjdENhcmQubmFtZSAmJiBjb250YWN0Q2FyZC5uYW1lLm5hbWUsXHJcbiAgICAgICAgZGV0YWlsczogY29udGFjdENhcmQsXHJcbiAgICAgICAgbXlTaGFyZWREZXRhaWxzOiBteUNvbnRhY3RDYXJkLFxyXG4gICAgICAgIHVzZXJTaGFyZWRLZXk6IHRwLmN1cnJlbnRVc2VyU2hhcmVkS2V5LnVzZXJTaGFyZWRLZXksXHJcbiAgICAgICAgdXNlcm5hbWU6IHRwLm90aGVyLnVzZXJuYW1lLFxyXG4gICAgICAgIGZlYXR1cmVzOiB7XHJcbiAgICAgICAgICBzaGFyZWRWYXVsdDoge1xyXG4gICAgICAgICAgICBoYXNBY2Nlc3M6XHJcbiAgICAgICAgICAgICAgKHRwLm90aGVyLmZlYXR1cmVzPy5zaGFyZVZhdWx0IHx8IFsnbm9hY2Nlc3MnXSlbMF0gPT09ICdhY2Nlc3MnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGVjcnlwdCBUcnVzdGVkIFBhcnR5LicsIGUsIHRwKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG1hcEludml0ZShcclxuICAgIGV4Y2hhbmdlOiBEZWNyeXB0ZWRLZXlFeGNoYW5nZVxyXG4gICk6IFByb21pc2U8VHJ1c3RlZFBhcnR5SW52aXRlPiB7XHJcbiAgICBjb25zdCBjb250YWN0Q2FyZCA9IGV4Y2hhbmdlLmNvbnRhY3RDYXJkO1xyXG4gICAgY29uc3QgbmFtZSA9IGV4Y2hhbmdlLmlzSW5pdGlhdG9yXHJcbiAgICAgID8gZXhjaGFuZ2UubXlNZXNzYWdlPy5uYW1lXHJcbiAgICAgIDogY29udGFjdENhcmQgJiYgY29udGFjdENhcmQubmFtZSAmJiBjb250YWN0Q2FyZC5uYW1lLm5hbWU7XHJcbiAgICBjb25zdCBlbWFpbCA9IGV4Y2hhbmdlLmlzSW5pdGlhdG9yXHJcbiAgICAgID8gZXhjaGFuZ2UubXlNZXNzYWdlPy5lbWFpbFxyXG4gICAgICA6IChjb250YWN0Q2FyZCAmJiBjb250YWN0Q2FyZC5lbWFpbCkgfHwgZXhjaGFuZ2UucmVzcG9uZGVyRW1haWxBZGRyZXNzO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlkOiBleGNoYW5nZS5pZCxcclxuICAgICAgdHlwZTogVHJ1c3RlZFBhcnR5VHlwZS5Vc2VyLCAvLyB0b2RvIHdoZW4gcGFydG5lcnNcclxuICAgICAgc3RhdHVzOiAoZXhjaGFuZ2Uuc3RhdGUgYXMgdW5rbm93bikgYXMgVHJ1c3RlZFBhcnR5SW52aXRlU3RhdHVzLFxyXG4gICAgICB0b2tlbjogZXhjaGFuZ2UudG9rZW4sXHJcbiAgICAgIHRva2VuRXhwaXJ5OiBleGNoYW5nZS50b2tlbkV4cGlyeVRpbWUsXHJcbiAgICAgIGRlY3J5cHRlZE90azogZXhjaGFuZ2UuZGVjcnlwdGVkT3RrLFxyXG4gICAgICBuYW1lLFxyXG4gICAgICBlbWFpbCxcclxuICAgICAgaXNTZW5kZXI6IGV4Y2hhbmdlLmlzSW5pdGlhdG9yLFxyXG4gICAgICBhY3Rpb25SZXF1aXJlZDogZXhjaGFuZ2UuaXNJbml0aWF0b3JcclxuICAgICAgICA/IGV4Y2hhbmdlLmluaXRpYXRvckFjdGlvblJlcXVpcmVkXHJcbiAgICAgICAgOiBleGNoYW5nZS5yZXNwb25kZXJBY3Rpb25SZXF1aXJlZCxcclxuICAgICAgcm9vdEtleUNpcGhlcjogZXhjaGFuZ2UuaW5pdGlhdG9yUm9vdEtleUNpcGhlcixcclxuICAgICAgcGJrQ2lwaGVyOiBleGNoYW5nZS5vdGsuaW5pdGlhdG9yT25lVGltZVBia0NpcGhlcixcclxuICAgICAgaXNFeHBpcmVkOiBleGNoYW5nZS5pc0V4cGlyZWQsXHJcbiAgICAgIGRldGFpbHM6IGNvbnRhY3RDYXJkLFxyXG4gICAgICBtZXNzYWdlOiBleGNoYW5nZS5tZXNzYWdlLFxyXG4gICAgICBteVNoYXJlZERldGFpbHM6IGV4Y2hhbmdlLm15Q29udGFjdENhcmQsXHJcbiAgICAgIG15U2hhcmVkTWVzc2FnZTogZXhjaGFuZ2UubXlNZXNzYWdlLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19