@lifeready/core 0.6.0-beta.1

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 -0
  2. package/bundles/lifeready-core.umd.js +15939 -0
  3. package/bundles/lifeready-core.umd.js.map +1 -0
  4. package/bundles/lifeready-core.umd.min.js +2 -0
  5. package/bundles/lifeready-core.umd.min.js.map +1 -0
  6. package/esm2015/lib/_common/ast.js +40 -0
  7. package/esm2015/lib/_common/deferred-promise.js +24 -0
  8. package/esm2015/lib/_common/exceptions.js +157 -0
  9. package/esm2015/lib/_common/queries.gql.js +190 -0
  10. package/esm2015/lib/_common/run-outside-angular.js +79 -0
  11. package/esm2015/lib/_common/types.js +1 -0
  12. package/esm2015/lib/_common/utils.js +44 -0
  13. package/esm2015/lib/api/contact-card.gql.js +79 -0
  14. package/esm2015/lib/api/contact-card.service.js +154 -0
  15. package/esm2015/lib/api/contact-card2.gql.js +60 -0
  16. package/esm2015/lib/api/contact-card2.service.js +103 -0
  17. package/esm2015/lib/api/file.service.js +74 -0
  18. package/esm2015/lib/api/item2.gql.js +110 -0
  19. package/esm2015/lib/api/item2.service.js +311 -0
  20. package/esm2015/lib/api/key-exchange.gql.js +188 -0
  21. package/esm2015/lib/api/key-exchange.service.js +442 -0
  22. package/esm2015/lib/api/key-exchange.types.js +18 -0
  23. package/esm2015/lib/api/key-exchange2.gql.js +171 -0
  24. package/esm2015/lib/api/key-exchange2.service.js +479 -0
  25. package/esm2015/lib/api/lock.gql.js +40 -0
  26. package/esm2015/lib/api/lock.service.js +64 -0
  27. package/esm2015/lib/api/lr-apollo.service.js +46 -0
  28. package/esm2015/lib/api/lr-graphql/index.js +6 -0
  29. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -0
  30. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -0
  31. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -0
  32. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -0
  33. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -0
  34. package/esm2015/lib/api/message.service.js +138 -0
  35. package/esm2015/lib/api/persist.service.js +181 -0
  36. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -0
  37. package/esm2015/lib/api/query-processor/index.js +3 -0
  38. package/esm2015/lib/api/query-processor/query-processor.service.js +192 -0
  39. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -0
  40. package/esm2015/lib/api/shared-contact-card.service.js +119 -0
  41. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -0
  42. package/esm2015/lib/api/shared-contact-card2.service.js +117 -0
  43. package/esm2015/lib/api/time.service.js +146 -0
  44. package/esm2015/lib/api/types/graphql.types.js +7 -0
  45. package/esm2015/lib/api/types/index.js +3 -0
  46. package/esm2015/lib/api/types/lr-graphql.types.js +71 -0
  47. package/esm2015/lib/auth/auth.config.js +57 -0
  48. package/esm2015/lib/auth/auth.gql.js +48 -0
  49. package/esm2015/lib/auth/auth.types.js +27 -0
  50. package/esm2015/lib/auth/idle.service.js +168 -0
  51. package/esm2015/lib/auth/idle.types.js +7 -0
  52. package/esm2015/lib/auth/lbop.service.js +355 -0
  53. package/esm2015/lib/auth/life-ready-auth.service.js +333 -0
  54. package/esm2015/lib/auth/password.service.js +320 -0
  55. package/esm2015/lib/auth/register.service.js +172 -0
  56. package/esm2015/lib/auth/two-factor.service.js +74 -0
  57. package/esm2015/lib/category/category-meta.service.js +99 -0
  58. package/esm2015/lib/category/category.gql.js +406 -0
  59. package/esm2015/lib/category/category.service.js +390 -0
  60. package/esm2015/lib/category/category.types.js +29 -0
  61. package/esm2015/lib/cryptography/cryptography.types.js +11 -0
  62. package/esm2015/lib/cryptography/encryption.service.js +189 -0
  63. package/esm2015/lib/cryptography/key-factory.service.js +237 -0
  64. package/esm2015/lib/cryptography/key-graph.service.js +280 -0
  65. package/esm2015/lib/cryptography/key-meta.service.js +200 -0
  66. package/esm2015/lib/cryptography/key.service.js +124 -0
  67. package/esm2015/lib/cryptography/slip39.service.js +169 -0
  68. package/esm2015/lib/cryptography/web-crypto.service.js +29 -0
  69. package/esm2015/lib/life-ready.config.js +84 -0
  70. package/esm2015/lib/life-ready.module.js +74 -0
  71. package/esm2015/lib/plan/plan.gql.js +123 -0
  72. package/esm2015/lib/plan/plan.service.js +149 -0
  73. package/esm2015/lib/plan/plan.types.js +11 -0
  74. package/esm2015/lib/record/record-attachment.service.js +101 -0
  75. package/esm2015/lib/record/record.gql.js +179 -0
  76. package/esm2015/lib/record/record.service.js +206 -0
  77. package/esm2015/lib/record/record.types.js +15 -0
  78. package/esm2015/lib/record-type/record-type.service.js +75 -0
  79. package/esm2015/lib/record-type/record-type.types.js +28 -0
  80. package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -0
  81. package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -0
  82. package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -0
  83. package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -0
  84. package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -0
  85. package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -0
  86. package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -0
  87. package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -0
  88. package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -0
  89. package/esm2015/lib/scenario/scenario-setup.service.js +269 -0
  90. package/esm2015/lib/scenario/scenario.gql.js +368 -0
  91. package/esm2015/lib/scenario/scenario.service.js +611 -0
  92. package/esm2015/lib/scenario/scenario.types.js +64 -0
  93. package/esm2015/lib/search/search.gql.js +62 -0
  94. package/esm2015/lib/search/search.service.js +156 -0
  95. package/esm2015/lib/search/search.types.js +6 -0
  96. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -0
  97. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +266 -0
  98. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -0
  99. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +300 -0
  100. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -0
  101. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -0
  102. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -0
  103. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -0
  104. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -0
  105. package/esm2015/lib/users/profile-details.service.js +214 -0
  106. package/esm2015/lib/users/profile.gql.js +97 -0
  107. package/esm2015/lib/users/profile.service.js +169 -0
  108. package/esm2015/lib/users/profile.types.js +34 -0
  109. package/esm2015/lib/users/user.gql.js +60 -0
  110. package/esm2015/lib/users/user.service.js +79 -0
  111. package/esm2015/lib/users/user.types.js +5 -0
  112. package/esm2015/lifeready-core.js +10 -0
  113. package/esm2015/public-api.js +81 -0
  114. package/fesm2015/lifeready-core.js +13290 -0
  115. package/fesm2015/lifeready-core.js.map +1 -0
  116. package/lib/_common/ast.d.ts +11 -0
  117. package/lib/_common/deferred-promise.d.ts +12 -0
  118. package/lib/_common/exceptions.d.ts +109 -0
  119. package/lib/_common/queries.gql.d.ts +10 -0
  120. package/lib/_common/run-outside-angular.d.ts +14 -0
  121. package/lib/_common/types.d.ts +10 -0
  122. package/lib/_common/utils.d.ts +3 -0
  123. package/lib/api/contact-card.gql.d.ts +7 -0
  124. package/lib/api/contact-card.service.d.ts +52 -0
  125. package/lib/api/contact-card2.gql.d.ts +34 -0
  126. package/lib/api/contact-card2.service.d.ts +49 -0
  127. package/lib/api/file.service.d.ts +18 -0
  128. package/lib/api/item2.gql.d.ts +96 -0
  129. package/lib/api/item2.service.d.ts +177 -0
  130. package/lib/api/key-exchange.gql.d.ts +9 -0
  131. package/lib/api/key-exchange.service.d.ts +39 -0
  132. package/lib/api/key-exchange.types.d.ts +196 -0
  133. package/lib/api/key-exchange2.gql.d.ts +125 -0
  134. package/lib/api/key-exchange2.service.d.ts +187 -0
  135. package/lib/api/lock.gql.d.ts +27 -0
  136. package/lib/api/lock.service.d.ts +25 -0
  137. package/lib/api/lr-apollo.service.d.ts +15 -0
  138. package/lib/api/lr-graphql/index.d.ts +5 -0
  139. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -0
  140. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -0
  141. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -0
  142. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -0
  143. package/lib/api/lr-graphql/lr.service.d.ts +9 -0
  144. package/lib/api/message.service.d.ts +58 -0
  145. package/lib/api/persist.service.d.ts +31 -0
  146. package/lib/api/query-processor/common-processors.service.d.ts +36 -0
  147. package/lib/api/query-processor/index.d.ts +2 -0
  148. package/lib/api/query-processor/query-processor.service.d.ts +18 -0
  149. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -0
  150. package/lib/api/shared-contact-card.service.d.ts +33 -0
  151. package/lib/api/shared-contact-card2.gql.d.ts +36 -0
  152. package/lib/api/shared-contact-card2.service.d.ts +45 -0
  153. package/lib/api/time.service.d.ts +16 -0
  154. package/lib/api/types/graphql.types.d.ts +29 -0
  155. package/lib/api/types/index.d.ts +2 -0
  156. package/lib/api/types/lr-graphql.types.d.ts +385 -0
  157. package/lib/auth/auth.config.d.ts +5 -0
  158. package/lib/auth/auth.gql.d.ts +15 -0
  159. package/lib/auth/auth.types.d.ts +66 -0
  160. package/lib/auth/idle.service.d.ts +40 -0
  161. package/lib/auth/idle.types.d.ts +10 -0
  162. package/lib/auth/lbop.service.d.ts +91 -0
  163. package/lib/auth/life-ready-auth.service.d.ts +46 -0
  164. package/lib/auth/password.service.d.ts +78 -0
  165. package/lib/auth/register.service.d.ts +25 -0
  166. package/lib/auth/two-factor.service.d.ts +15 -0
  167. package/lib/category/category-meta.service.d.ts +23 -0
  168. package/lib/category/category.gql.d.ts +45 -0
  169. package/lib/category/category.service.d.ts +67 -0
  170. package/lib/category/category.types.d.ts +79 -0
  171. package/lib/cryptography/cryptography.types.d.ts +83 -0
  172. package/lib/cryptography/encryption.service.d.ts +41 -0
  173. package/lib/cryptography/key-factory.service.d.ts +38 -0
  174. package/lib/cryptography/key-graph.service.d.ts +33 -0
  175. package/lib/cryptography/key-meta.service.d.ts +44 -0
  176. package/lib/cryptography/key.service.d.ts +36 -0
  177. package/lib/cryptography/slip39.service.d.ts +43 -0
  178. package/lib/cryptography/web-crypto.service.d.ts +5 -0
  179. package/lib/life-ready.config.d.ts +14 -0
  180. package/lib/life-ready.module.d.ts +5 -0
  181. package/lib/plan/plan.gql.d.ts +11 -0
  182. package/lib/plan/plan.service.d.ts +33 -0
  183. package/lib/plan/plan.types.d.ts +31 -0
  184. package/lib/record/record-attachment.service.d.ts +16 -0
  185. package/lib/record/record.gql.d.ts +14 -0
  186. package/lib/record/record.service.d.ts +25 -0
  187. package/lib/record/record.types.d.ts +57 -0
  188. package/lib/record-type/record-type.service.d.ts +11 -0
  189. package/lib/record-type/record-type.types.d.ts +50 -0
  190. package/lib/scenario/approvals/scenario-approval.gql.d.ts +7 -0
  191. package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -0
  192. package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -0
  193. package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -0
  194. package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -0
  195. package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -0
  196. package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -0
  197. package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -0
  198. package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -0
  199. package/lib/scenario/scenario-setup.service.d.ts +22 -0
  200. package/lib/scenario/scenario.gql.d.ts +34 -0
  201. package/lib/scenario/scenario.service.d.ts +58 -0
  202. package/lib/scenario/scenario.types.d.ts +217 -0
  203. package/lib/search/search.gql.d.ts +1 -0
  204. package/lib/search/search.service.d.ts +25 -0
  205. package/lib/search/search.types.d.ts +20 -0
  206. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -0
  207. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +41 -0
  208. package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -0
  209. package/lib/trusted-parties/tp-password-reset.service.d.ts +131 -0
  210. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -0
  211. package/lib/trusted-parties/trusted-party.service.d.ts +44 -0
  212. package/lib/trusted-parties/trusted-party.types.d.ts +102 -0
  213. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -0
  214. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -0
  215. package/lib/users/profile-details.service.d.ts +21 -0
  216. package/lib/users/profile.gql.d.ts +11 -0
  217. package/lib/users/profile.service.d.ts +35 -0
  218. package/lib/users/profile.types.d.ts +96 -0
  219. package/lib/users/user.gql.d.ts +9 -0
  220. package/lib/users/user.service.d.ts +12 -0
  221. package/lib/users/user.types.d.ts +23 -0
  222. package/lifeready-core.d.ts +9 -0
  223. package/lifeready-core.metadata.json +1 -0
  224. package/package.json +29 -0
  225. package/public-api.d.ts +77 -0
@@ -0,0 +1,269 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { ScenarioApproverService } from './approvals/scenario-approver.service';
4
+ import { ScenarioClaimantService } from './claimants/scenario-claimant.service';
5
+ import { ScenarioReceiverService } from './receivers/scenario-receiver.service';
6
+ import { ScenarioService } from './scenario.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./scenario.service";
9
+ import * as i2 from "./claimants/scenario-claimant.service";
10
+ import * as i3 from "./approvals/scenario-approver.service";
11
+ import * as i4 from "./receivers/scenario-receiver.service";
12
+ export class ScenarioSetupService {
13
+ constructor(scenarioService, scenarioClaimantService, scenarioApproverService, scenarioReceiverService) {
14
+ this.scenarioService = scenarioService;
15
+ this.scenarioClaimantService = scenarioClaimantService;
16
+ this.scenarioApproverService = scenarioApproverService;
17
+ this.scenarioReceiverService = scenarioReceiverService;
18
+ }
19
+ setupScenario(newScenario) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const scenarioId = yield this.scenarioService.createScenario({
22
+ plainSubjectCipherData: {
23
+ event: newScenario.event,
24
+ name: newScenario.name,
25
+ },
26
+ });
27
+ try {
28
+ yield Promise.all(newScenario.claimants.map((x) => this.updateClaimant(scenarioId, newScenario.event, x)));
29
+ const scenario = yield this.scenarioService.getScenario(scenarioId);
30
+ if (newScenario.approvalGroups.length) {
31
+ const approvalGroups = {
32
+ scenarioId,
33
+ keyId: scenario.keyId,
34
+ event: scenario.event,
35
+ singleReject: false,
36
+ quorum: 1,
37
+ plainAssemblyCipherData: null,
38
+ approvalGroups: newScenario.approvalGroups.map((x) => ({
39
+ quorum: x.quorum,
40
+ singleReject: x.singleReject,
41
+ plainSubAssemblyCipherData: { name: x.name },
42
+ approvers: x.approvers.map((y) => ({
43
+ trustedPartyId: y.trustedPartyId,
44
+ trustedPartySharedKeyId: y.trustedPartySharedKeyId,
45
+ plainSharedCipherData: {
46
+ message: y.message,
47
+ event: newScenario.event,
48
+ },
49
+ })),
50
+ })),
51
+ };
52
+ scenario.assemblyKeyId = yield this.scenarioApproverService.createScenarioApproverAssembly(approvalGroups);
53
+ }
54
+ yield Promise.all(newScenario.receivers.map((x) => this.updateReceiver(scenarioId, scenario.assemblyKeyId, newScenario.event, x)));
55
+ }
56
+ catch (e) {
57
+ return { scenarioId, error: e };
58
+ }
59
+ return { scenarioId };
60
+ });
61
+ }
62
+ updateScenario(updateScenario) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const params = {
65
+ scenarioId: updateScenario.scenarioId,
66
+ keyId: updateScenario.keyId,
67
+ plainSubjectCipherData: {
68
+ event: updateScenario.event,
69
+ name: updateScenario.name,
70
+ },
71
+ };
72
+ yield this.scenarioService.updateScenario(params);
73
+ yield Promise.all(updateScenario.claimants.map((x) => this.updateClaimant(updateScenario.scenarioId, updateScenario.event, x)));
74
+ yield Promise.all(updateScenario.deletedClaimantIds.map((x) => this.scenarioClaimantService.deleteClaimant(x)));
75
+ const assemblyKeyId = yield this.updateApprovalGroups(updateScenario);
76
+ yield Promise.all(updateScenario.receivers.map((x) => this.updateReceiver(updateScenario.scenarioId, assemblyKeyId, updateScenario.event, x)));
77
+ yield Promise.all(updateScenario.deletedReceiverIds.map((x) => this.scenarioReceiverService.deleteReceiver(x)));
78
+ });
79
+ }
80
+ updateClaimant(scenarioId, event, claimant) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ if (claimant.claimantId) {
83
+ yield this.scenarioClaimantService.updateClaimant({
84
+ id: claimant.claimantId,
85
+ keyId: claimant.keyId,
86
+ plainSharedCipherData: { message: claimant.message, event },
87
+ });
88
+ }
89
+ else {
90
+ yield this.scenarioClaimantService.addClaimant({
91
+ scenarioId,
92
+ trustedPartyId: claimant.trustedPartyId,
93
+ trustedPartySharedKeyId: claimant.trustedPartySharedKeyId,
94
+ plainSharedCipherData: { message: claimant.message, event },
95
+ });
96
+ }
97
+ });
98
+ }
99
+ updateApprovalGroups(updateScenario) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ if (updateScenario.assemblyKeyId) {
102
+ if (updateScenario.approvalGroups.length) {
103
+ const approvalGroups = {
104
+ scenarioId: updateScenario.scenarioId,
105
+ assemblyKeyId: updateScenario.assemblyKeyId,
106
+ singleReject: false,
107
+ quorum: 1,
108
+ approvalGroups: updateScenario.approvalGroups.map((x) => ({
109
+ subAssemblyId: x.subAssemblyId,
110
+ quorum: x.quorum,
111
+ singleReject: x.singleReject,
112
+ plainSubAssemblyCipherData: { name: x.name },
113
+ approvers: x.approvers.map((y) => ({
114
+ approverId: y.approverId,
115
+ keyId: y.keyId,
116
+ trustedPartyId: y.trustedPartyId,
117
+ trustedPartySharedKeyId: y.trustedPartySharedKeyId,
118
+ plainSharedCipherData: {
119
+ message: y.message,
120
+ event: updateScenario.event,
121
+ },
122
+ })),
123
+ deletedApproverIds: x.deletedApproverIds,
124
+ })),
125
+ deletedGroupIds: updateScenario.deletedGroupIds,
126
+ };
127
+ yield this.scenarioApproverService.updateScenarioApproverAssembly(approvalGroups);
128
+ return updateScenario.assemblyKeyId;
129
+ }
130
+ else {
131
+ const { receivers } = yield this.scenarioService.getScenario(updateScenario.scenarioId);
132
+ yield this.scenarioApproverService.deleteScenarioApproverAssembly(updateScenario.scenarioId, updateScenario.event, receivers);
133
+ return null;
134
+ }
135
+ // update or delete
136
+ }
137
+ else if (updateScenario.approvalGroups.length) {
138
+ const { receivers } = yield this.scenarioService.getScenario(updateScenario.scenarioId);
139
+ const approvalGroups = {
140
+ scenarioId: updateScenario.scenarioId,
141
+ keyId: updateScenario.keyId,
142
+ event: updateScenario.event,
143
+ singleReject: false,
144
+ quorum: 1,
145
+ approvalGroups: updateScenario.approvalGroups.map((x) => ({
146
+ quorum: x.quorum,
147
+ singleReject: x.singleReject,
148
+ plainSubAssemblyCipherData: { name: x.name },
149
+ approvers: x.approvers.map((y) => ({
150
+ trustedPartyId: y.trustedPartyId,
151
+ trustedPartySharedKeyId: y.trustedPartySharedKeyId,
152
+ plainSharedCipherData: {
153
+ message: y.message,
154
+ event: updateScenario.event,
155
+ },
156
+ })),
157
+ })),
158
+ receivers,
159
+ };
160
+ return yield this.scenarioApproverService.createScenarioApproverAssembly(approvalGroups);
161
+ }
162
+ return null;
163
+ });
164
+ }
165
+ updateReceiver(scenarioId, assemblyKeyId, event, receiver) {
166
+ return __awaiter(this, void 0, void 0, function* () {
167
+ let receiverId = receiver.receiverId;
168
+ // Currently deleting all receivers below assembly logic.
169
+ if (receiverId) {
170
+ yield this.scenarioReceiverService.updateReceiver({
171
+ id: receiver.receiverId,
172
+ keyId: receiver.keyId,
173
+ plainSharedCipherData: { message: receiver.message, event },
174
+ });
175
+ }
176
+ else {
177
+ const newReceiver = {
178
+ scenarioId,
179
+ trustedPartyId: receiver.trustedPartyId,
180
+ trustedPartySharedKeyId: receiver.trustedPartySharedKeyId,
181
+ plainSharedCipherData: { message: receiver.message, event },
182
+ };
183
+ receiverId = yield this.scenarioReceiverService.addReceiver(newReceiver);
184
+ }
185
+ const loadedReceiver = yield this.scenarioReceiverService.getReceiver(receiverId);
186
+ yield this.updateReceiverItems(scenarioId, assemblyKeyId, loadedReceiver, receiver.permissions);
187
+ });
188
+ }
189
+ updateReceiverItems(scenarioId, assemblyKeyId, receiver, permissions) {
190
+ return __awaiter(this, void 0, void 0, function* () {
191
+ permissions = permissions || {};
192
+ permissions.categories = permissions.categories || [];
193
+ permissions.records = permissions.records || [];
194
+ yield Promise.all(permissions.categories
195
+ .filter((x) => !receiver.categories.some((y) => y.category.id === x.categoryId))
196
+ .map((x) => __awaiter(this, void 0, void 0, function* () {
197
+ const params = {
198
+ scenarioId,
199
+ assemblyKeyId,
200
+ receiverId: receiver.id,
201
+ receiverKeyId: receiver.keyId,
202
+ accessRole: x.accessLevel,
203
+ categoryId: x.categoryId,
204
+ };
205
+ yield this.scenarioReceiverService.addReceiverCategory(params);
206
+ })));
207
+ yield Promise.all(permissions.records
208
+ .filter((x) => !receiver.records.some((y) => y.record.id === x.recordId))
209
+ .map((x) => __awaiter(this, void 0, void 0, function* () {
210
+ const params = {
211
+ scenarioId,
212
+ assemblyKeyId,
213
+ receiverId: receiver.id,
214
+ receiverKeyId: receiver.keyId,
215
+ accessRole: x.accessLevel,
216
+ recordId: x.recordId,
217
+ };
218
+ yield this.scenarioReceiverService.addReceiverRecord(params);
219
+ })));
220
+ yield Promise.all(permissions.categories
221
+ .map((x) => ({
222
+ accessLevel: x.accessLevel,
223
+ category: receiver.categories.find((y) => y.category.id === x.categoryId),
224
+ }))
225
+ .filter((x) => x.category)
226
+ .map((x) => __awaiter(this, void 0, void 0, function* () {
227
+ const params = {
228
+ id: x.category.id,
229
+ keyId: x.category.keyId,
230
+ accessRole: x.accessLevel,
231
+ };
232
+ yield this.scenarioReceiverService.updateReceiverItem(params);
233
+ })));
234
+ yield Promise.all(permissions.records
235
+ .map((x) => ({
236
+ accessLevel: x.accessLevel,
237
+ record: receiver.records.find((y) => y.record.id === x.recordId),
238
+ }))
239
+ .filter((x) => x.record)
240
+ .map((x) => __awaiter(this, void 0, void 0, function* () {
241
+ const params = {
242
+ id: x.record.id,
243
+ keyId: x.record.keyId,
244
+ accessRole: x.accessLevel,
245
+ };
246
+ yield this.scenarioReceiverService.updateReceiverItem(params);
247
+ })));
248
+ yield Promise.all(receiver.categories
249
+ .filter((x) => !permissions.categories.some((y) => y.categoryId === x.category.id))
250
+ .map((x) => this.scenarioReceiverService.deleteReceiverItem(x.id)));
251
+ yield Promise.all(receiver.records
252
+ .filter((x) => !permissions.records.some((y) => y.recordId === x.record.id))
253
+ .map((x) => this.scenarioReceiverService.deleteReceiverItem(x.id)));
254
+ });
255
+ }
256
+ }
257
+ ScenarioSetupService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ScenarioSetupService_Factory() { return new ScenarioSetupService(i0.ɵɵinject(i1.ScenarioService), i0.ɵɵinject(i2.ScenarioClaimantService), i0.ɵɵinject(i3.ScenarioApproverService), i0.ɵɵinject(i4.ScenarioReceiverService)); }, token: ScenarioSetupService, providedIn: "root" });
258
+ ScenarioSetupService.decorators = [
259
+ { type: Injectable, args: [{
260
+ providedIn: 'root',
261
+ },] }
262
+ ];
263
+ ScenarioSetupService.ctorParameters = () => [
264
+ { type: ScenarioService },
265
+ { type: ScenarioClaimantService },
266
+ { type: ScenarioApproverService },
267
+ { type: ScenarioReceiverService }
268
+ ];
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8tc2V0dXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy90ZXN0L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3NjZW5hcmlvL3NjZW5hcmlvLXNldHVwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFLaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFXckQsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUNVLGVBQWdDLEVBQ2hDLHVCQUFnRCxFQUNoRCx1QkFBZ0QsRUFDaEQsdUJBQWdEO1FBSGhELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtJQUN2RCxDQUFDO0lBRVMsYUFBYSxDQUN4QixXQUF3Qjs7WUFFeEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQztnQkFDM0Qsc0JBQXNCLEVBQUU7b0JBQ3RCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztvQkFDeEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO2lCQUN2QjthQUNGLENBQUMsQ0FBQztZQUVILElBQUk7Z0JBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDOUIsSUFBSSxD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QUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQ3RFO2lCQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNyRSxDQUFDO1lBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFFBQVEsQ0FBQyxPQUFPO2lCQUNiLE1BQU0sQ0FDTCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUNwRTtpQkFDQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDckUsQ0FBQztRQUNKLENBQUM7S0FBQTs7OztZQXpWRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVZRLGVBQWU7WUFOZix1QkFBdUI7WUFEdkIsdUJBQXVCO1lBRXZCLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExyRXhjZXB0aW9uIH0gZnJvbSAnLi8uLi9fY29tbW9uL2V4Y2VwdGlvbnMnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByZXBhcmVkUGVybWlzc2lvbnMgfSBmcm9tICcuLy4uL2FwaS9rZXktZXhjaGFuZ2UudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIENyZWF0ZVNjZW5hcmlvQXBwcm92YWxHcm91cHMsXHJcbiAgVXBkYXRlU2NlbmFyaW9BcHByb3ZhbEdyb3VwcyxcclxufSBmcm9tICcuL2FwcHJvdmFscy9zY2VuYXJpby1hcHByb3ZhbC50eXBlcyc7XHJcbmltcG9ydCB7IFNjZW5hcmlvQXBwcm92ZXJTZXJ2aWNlIH0gZnJvbSAnLi9hcHByb3ZhbHMvc2NlbmFyaW8tYXBwcm92ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjZW5hcmlvQ2xhaW1hbnRTZXJ2aWNlIH0gZnJvbSAnLi9jbGFpbWFudHMvc2NlbmFyaW8tY2xhaW1hbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjZW5hcmlvUmVjZWl2ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZWNlaXZlcnMvc2NlbmFyaW8tcmVjZWl2ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgUmVjZWl2ZXIsXHJcbiAgVXBkYXRlU2NlbmFyaW9SZWNlaXZlckl0ZW1JbnB1dCxcclxufSBmcm9tICcuL3JlY2VpdmVycy9zY2VuYXJpby1yZWNlaXZlci50eXBlcyc7XHJcbmltcG9ydCB7IFNjZW5hcmlvU2VydmljZSB9IGZyb20gJy4vc2NlbmFyaW8uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgTmV3U2NlbmFyaW8sXHJcbiAgVXBkYXRlZFNjZW5hcmlvQ2xhaW1hbnQsXHJcbiAgVXBkYXRlZFNjZW5hcmlvUmVjZWl2ZXIsXHJcbiAgVXBkYXRlU2NlbmFyaW8sXHJcbn0gZnJvbSAnLi9zY2VuYXJpby50eXBlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2NlbmFyaW9TZXR1cFNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzY2VuYXJpb1NlcnZpY2U6IFNjZW5hcmlvU2VydmljZSxcclxuICAgIHByaXZhdGUgc2NlbmFyaW9DbGFpbWFudFNlcnZpY2U6IFNjZW5hcmlvQ2xhaW1hbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzY2VuYXJpb0FwcHJvdmVyU2VydmljZTogU2NlbmFyaW9BcHByb3ZlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNjZW5hcmlvUmVjZWl2ZXJTZXJ2aWNlOiBTY2VuYXJpb1JlY2VpdmVyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldHVwU2NlbmFyaW8oXHJcbiAgICBuZXdTY2VuYXJpbzogTmV3U2NlbmFyaW9cclxuICApOiBQcm9taXNlPHsgc2NlbmFyaW9JZDogc3RyaW5nOyBlcnJvcj86IExyRXhjZXB0aW9uIH0+IHtcclxuICAgIGNvbnN0IHNjZW5hcmlvSWQgPSBhd2FpdCB0aGlzLnNjZW5hcmlvU2VydmljZS5jcmVhdGVTY2VuYXJpbyh7XHJcbiAgICAgIHBsYWluU3ViamVjdENpcGhlckRhdGE6IHtcclxuICAgICAgICBldmVudDogbmV3U2NlbmFyaW8uZXZlbnQsXHJcbiAgICAgICAgbmFtZTogbmV3U2NlbmFyaW8ubmFtZSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIG5ld1NjZW5hcmlvLmNsYWltYW50cy5tYXAoKHgpID0+XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNsYWltYW50KHNjZW5hcmlvSWQsIG5ld1NjZW5hcmlvLmV2ZW50LCB4KVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHNjZW5hcmlvID0gYXdhaXQgdGhpcy5zY2VuYXJpb1NlcnZpY2UuZ2V0U2NlbmFyaW8oc2NlbmFyaW9JZCk7XHJcbiAgICAgIGlmIChuZXdTY2VuYXJpby5hcHByb3ZhbEdyb3Vwcy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBhcHByb3ZhbEdyb3VwczogQ3JlYXRlU2NlbmFyaW9BcHByb3ZhbEdyb3VwcyA9IHtcclxuICAgICAgICAgIHNjZW5hcmlvSWQsXHJcbiAgICAgICAgICBrZXlJZDogc2NlbmFyaW8ua2V5SWQsXHJcbiAgICAgICAgICBldmVudDogc2NlbmFyaW8uZXZlbnQsXHJcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgcXVvcnVtOiAxLFxyXG4gICAgICAgICAgcGxhaW5Bc3NlbWJseUNpcGhlckRhdGE6IG51bGwsXHJcblxyXG4gICAgICAgICAgYXBwcm92YWxHcm91cHM6IG5ld1NjZW5hcmlvLmFwcHJvdmFsR3JvdXBzLm1hcCgoeCkgPT4gKHtcclxuICAgICAgICAgICAgcXVvcnVtOiB4LnF1b3J1bSxcclxuICAgICAgICAgICAgc2luZ2xlUmVqZWN0OiB4LnNpbmdsZVJlamVjdCxcclxuICAgICAgICAgICAgcGxhaW5TdWJBc3NlbWJseUNpcGhlckRhdGE6IHsgbmFtZTogeC5uYW1lIH0sXHJcbiAgICAgICAgICAgIGFwcHJvdmVyczogeC5hcHByb3ZlcnMubWFwKCh5KSA9PiAoe1xyXG4gICAgICAgICAgICAgIHRydXN0ZWRQYXJ0eUlkOiB5LnRydXN0ZWRQYXJ0eUlkLFxyXG4gICAgICAgICAgICAgIHRydXN0ZWRQYXJ0eVNoYXJlZEtleUlkOiB5LnRydXN0ZWRQYXJ0eVNoYXJlZEtleUlkLFxyXG4gICAgICAgICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YToge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogeS5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ld1NjZW5hcmlvLmV2ZW50LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgIH0pKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHNjZW5hcmlvLmFzc2VtYmx5S2V5SWQgPSBhd2FpdCB0aGlzLnNjZW5hcmlvQXBwcm92ZXJTZXJ2aWNlLmNyZWF0ZVNjZW5hcmlvQXBwcm92ZXJBc3NlbWJseShcclxuICAgICAgICAgIGFwcHJvdmFsR3JvdXBzXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBuZXdTY2VuYXJpby5yZWNlaXZlcnMubWFwKCh4KSA9PlxyXG4gICAgICAgICAgdGhpcy51cGRhdGVSZWNlaXZlcihcclxuICAgICAgICAgICAgc2NlbmFyaW9JZCxcclxuICAgICAgICAgICAgc2NlbmFyaW8uYXNzZW1ibHlLZXlJZCxcclxuICAgICAgICAgICAgbmV3U2NlbmFyaW8uZXZlbnQsXHJcbiAgICAgICAgICAgIHhcclxuICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiB7IHNjZW5hcmlvSWQsIGVycm9yOiBlIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBzY2VuYXJpb0lkIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBkYXRlU2NlbmFyaW8odXBkYXRlU2NlbmFyaW86IFVwZGF0ZVNjZW5hcmlvKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIHNjZW5hcmlvSWQ6IHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWQsXHJcbiAgICAgIGtleUlkOiB1cGRhdGVTY2VuYXJpby5rZXlJZCxcclxuICAgICAgcGxhaW5TdWJqZWN0Q2lwaGVyRGF0YToge1xyXG4gICAgICAgIGV2ZW50OiB1cGRhdGVTY2VuYXJpby5ldmVudCxcclxuICAgICAgICBuYW1lOiB1cGRhdGVTY2VuYXJpby5uYW1lLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9TZXJ2aWNlLnVwZGF0ZVNjZW5hcmlvKHBhcmFtcyk7XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHVwZGF0ZVNjZW5hcmlvLmNsYWltYW50cy5tYXAoKHgpID0+XHJcbiAgICAgICAgdGhpcy51cGRhdGVDbGFpbWFudCh1cGRhdGVTY2VuYXJpby5zY2VuYXJpb0lkLCB1cGRhdGVTY2VuYXJpby5ldmVudCwgeClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICB1cGRhdGVTY2VuYXJpby5kZWxldGVkQ2xhaW1hbnRJZHMubWFwKCh4KSA9PlxyXG4gICAgICAgIHRoaXMuc2NlbmFyaW9DbGFpbWFudFNlcnZpY2UuZGVsZXRlQ2xhaW1hbnQoeClcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBhc3NlbWJseUtleUlkID0gYXdhaXQgdGhpcy51cGRhdGVBcHByb3ZhbEdyb3Vwcyh1cGRhdGVTY2VuYXJpbyk7XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHVwZGF0ZVNjZW5hcmlvLnJlY2VpdmVycy5tYXAoKHgpID0+XHJcbiAgICAgICAgdGhpcy51cGRhdGVSZWNlaXZlcihcclxuICAgICAgICAgIHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWQsXHJcbiAgICAgICAgICBhc3NlbWJseUtleUlkLFxyXG4gICAgICAgICAgdXBkYXRlU2NlbmFyaW8uZXZlbnQsXHJcbiAgICAgICAgICB4XHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHVwZGF0ZVNjZW5hcmlvLmRlbGV0ZWRSZWNlaXZlcklkcy5tYXAoKHgpID0+XHJcbiAgICAgICAgdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5kZWxldGVSZWNlaXZlcih4KVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVDbGFpbWFudChcclxuICAgIHNjZW5hcmlvSWQ6IHN0cmluZyxcclxuICAgIGV2ZW50OiBzdHJpbmcsXHJcbiAgICBjbGFpbWFudDogVXBkYXRlZFNjZW5hcmlvQ2xhaW1hbnRcclxuICApIHtcclxuICAgIGlmIChjbGFpbWFudC5jbGFpbWFudElkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9DbGFpbWFudFNlcnZpY2UudXBkYXRlQ2xhaW1hbnQoe1xyXG4gICAgICAgIGlkOiBjbGFpbWFudC5jbGFpbWFudElkLFxyXG4gICAgICAgIGtleUlkOiBjbGFpbWFudC5rZXlJZCxcclxuICAgICAgICBwbGFpblNoYXJlZENpcGhlckRhdGE6IHsgbWVzc2FnZTogY2xhaW1hbnQubWVzc2FnZSwgZXZlbnQgfSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLnNjZW5hcmlvQ2xhaW1hbnRTZXJ2aWNlLmFkZENsYWltYW50KHtcclxuICAgICAgICBzY2VuYXJpb0lkLFxyXG4gICAgICAgIHRydXN0ZWRQYXJ0eUlkOiBjbGFpbWFudC50cnVzdGVkUGFydHlJZCxcclxuICAgICAgICB0cnVzdGVkUGFydHlTaGFyZWRLZXlJZDogY2xhaW1hbnQudHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQsXHJcbiAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhOiB7IG1lc3NhZ2U6IGNsYWltYW50Lm1lc3NhZ2UsIGV2ZW50IH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBcHByb3ZhbEdyb3VwcyhcclxuICAgIHVwZGF0ZVNjZW5hcmlvOiBVcGRhdGVTY2VuYXJpb1xyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBpZiAodXBkYXRlU2NlbmFyaW8uYXNzZW1ibHlLZXlJZCkge1xyXG4gICAgICBpZiAodXBkYXRlU2NlbmFyaW8uYXBwcm92YWxHcm91cHMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwcm92YWxHcm91cHM6IFVwZGF0ZVNjZW5hcmlvQXBwcm92YWxHcm91cHMgPSB7XHJcbiAgICAgICAgICBzY2VuYXJpb0lkOiB1cGRhdGVTY2VuYXJpby5zY2VuYXJpb0lkLFxyXG4gICAgICAgICAgYXNzZW1ibHlLZXlJZDogdXBkYXRlU2NlbmFyaW8uYXNzZW1ibHlLZXlJZCxcclxuXHJcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgcXVvcnVtOiAxLFxyXG5cclxuICAgICAgICAgIGFwcHJvdmFsR3JvdXBzOiB1cGRhdGVTY2VuYXJpby5hcHByb3ZhbEdyb3Vwcy5tYXAoKHgpID0+ICh7XHJcbiAgICAgICAgICAgIHN1YkFzc2VtYmx5SWQ6IHguc3ViQXNzZW1ibHlJZCxcclxuICAgICAgICAgICAgcXVvcnVtOiB4LnF1b3J1bSxcclxuICAgICAgICAgICAgc2luZ2xlUmVqZWN0OiB4LnNpbmdsZVJlamVjdCxcclxuICAgICAgICAgICAgcGxhaW5TdWJBc3NlbWJseUNpcGhlckRhdGE6IHsgbmFtZTogeC5uYW1lIH0sXHJcbiAgICAgICAgICAgIGFwcHJvdmVyczogeC5hcHByb3ZlcnMubWFwKCh5KSA9PiAoe1xyXG4gICAgICAgICAgICAgIGFwcHJvdmVySWQ6IHkuYXBwcm92ZXJJZCxcclxuICAgICAgICAgICAgICBrZXlJZDogeS5rZXlJZCxcclxuICAgICAgICAgICAgICB0cnVzdGVkUGFydHlJZDogeS50cnVzdGVkUGFydHlJZCxcclxuICAgICAgICAgICAgICB0cnVzdGVkUGFydHlTaGFyZWRLZXlJZDogeS50cnVzdGVkUGFydHlTaGFyZWRLZXlJZCxcclxuICAgICAgICAgICAgICBwbGFpblNoYXJlZENpcGhlckRhdGE6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHkubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB1cGRhdGVTY2VuYXJpby5ldmVudCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGRlbGV0ZWRBcHByb3ZlcklkczogeC5kZWxldGVkQXBwcm92ZXJJZHMsXHJcbiAgICAgICAgICB9KSksXHJcbiAgICAgICAgICBkZWxldGVkR3JvdXBJZHM6IHVwZGF0ZVNjZW5hcmlvLmRlbGV0ZWRHcm91cElkcyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9BcHByb3ZlclNlcnZpY2UudXBkYXRlU2NlbmFyaW9BcHByb3ZlckFzc2VtYmx5KFxyXG4gICAgICAgICAgYXBwcm92YWxHcm91cHNcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB1cGRhdGVTY2VuYXJpby5hc3NlbWJseUtleUlkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHsgcmVjZWl2ZXJzIH0gPSBhd2FpdCB0aGlzLnNjZW5hcmlvU2VydmljZS5nZXRTY2VuYXJpbyhcclxuICAgICAgICAgIHVwZGF0ZVNjZW5hcmlvLnNjZW5hcmlvSWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9BcHByb3ZlclNlcnZpY2UuZGVsZXRlU2NlbmFyaW9BcHByb3ZlckFzc2VtYmx5KFxyXG4gICAgICAgICAgdXBkYXRlU2NlbmFyaW8uc2NlbmFyaW9JZCxcclxuICAgICAgICAgIHVwZGF0ZVNjZW5hcmlvLmV2ZW50LFxyXG4gICAgICAgICAgcmVjZWl2ZXJzXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICAvLyB1cGRhdGUgb3IgZGVsZXRlXHJcbiAgICB9IGVsc2UgaWYgKHVwZGF0ZVNjZW5hcmlvLmFwcHJvdmFsR3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCB7IHJlY2VpdmVycyB9ID0gYXdhaXQgdGhpcy5zY2VuYXJpb1NlcnZpY2UuZ2V0U2NlbmFyaW8oXHJcbiAgICAgICAgdXBkYXRlU2NlbmFyaW8uc2NlbmFyaW9JZFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgYXBwcm92YWxHcm91cHM6IENyZWF0ZVNjZW5hcmlvQXBwcm92YWxHcm91cHMgPSB7XHJcbiAgICAgICAgc2NlbmFyaW9JZDogdXBkYXRlU2NlbmFyaW8uc2NlbmFyaW9JZCxcclxuICAgICAgICBrZXlJZDogdXBkYXRlU2NlbmFyaW8ua2V5SWQsXHJcbiAgICAgICAgZXZlbnQ6IHVwZGF0ZVNjZW5hcmlvLmV2ZW50LFxyXG4gICAgICAgIHNpbmdsZVJlamVjdDogZmFsc2UsXHJcbiAgICAgICAgcXVvcnVtOiAxLFxyXG4gICAgICAgIGFwcHJvdmFsR3JvdXBzOiB1cGRhdGVTY2VuYXJpby5hcHByb3ZhbEdyb3Vwcy5tYXAoKHgpID0+ICh7XHJcbiAgICAgICAgICBxdW9ydW06IHgucXVvcnVtLFxyXG4gICAgICAgICAgc2luZ2xlUmVqZWN0OiB4LnNpbmdsZVJlamVjdCxcclxuICAgICAgICAgIHBsYWluU3ViQXNzZW1ibHlDaXBoZXJEYXRhOiB7IG5hbWU6IHgubmFtZSB9LFxyXG4gICAgICAgICAgYXBwcm92ZXJzOiB4LmFwcHJvdmVycy5tYXAoKHkpID0+ICh7XHJcbiAgICAgICAgICAgIHRydXN0ZWRQYXJ0eUlkOiB5LnRydXN0ZWRQYXJ0eUlkLFxyXG4gICAgICAgICAgICB0cnVzdGVkUGFydHlTaGFyZWRLZXlJZDogeS50cnVzdGVkUGFydHlTaGFyZWRLZXlJZCxcclxuICAgICAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhOiB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogeS5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgIGV2ZW50OiB1cGRhdGVTY2VuYXJpby5ldmVudCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pKSxcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgcmVjZWl2ZXJzLFxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zY2VuYXJpb0FwcHJvdmVyU2VydmljZS5jcmVhdGVTY2VuYXJpb0FwcHJvdmVyQXNzZW1ibHkoXHJcbiAgICAgICAgYXBwcm92YWxHcm91cHNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVSZWNlaXZlcihcclxuICAgIHNjZW5hcmlvSWQ6IHN0cmluZyxcclxuICAgIGFzc2VtYmx5S2V5SWQ6IHN0cmluZyxcclxuICAgIGV2ZW50OiBzdHJpbmcsXHJcbiAgICByZWNlaXZlcjogVXBkYXRlZFNjZW5hcmlvUmVjZWl2ZXJcclxuICApIHtcclxuICAgIGxldCByZWNlaXZlcklkID0gcmVjZWl2ZXIucmVjZWl2ZXJJZDtcclxuXHJcbiAgICAvLyBDdXJyZW50bHkgZGVsZXRpbmcgYWxsIHJlY2VpdmVycyBiZWxvdyBhc3NlbWJseSBsb2dpYy5cclxuICAgIGlmIChyZWNlaXZlcklkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UudXBkYXRlUmVjZWl2ZXIoe1xyXG4gICAgICAgIGlkOiByZWNlaXZlci5yZWNlaXZlcklkLFxyXG4gICAgICAgIGtleUlkOiByZWNlaXZlci5rZXlJZCxcclxuICAgICAgICBwbGFpblNoYXJlZENpcGhlckRhdGE6IHsgbWVzc2FnZTogcmVjZWl2ZXIubWVzc2FnZSwgZXZlbnQgfSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBuZXdSZWNlaXZlciA9IHtcclxuICAgICAgICBzY2VuYXJpb0lkLFxyXG4gICAgICAgIHRydXN0ZWRQYXJ0eUlkOiByZWNlaXZlci50cnVzdGVkUGFydHlJZCxcclxuICAgICAgICB0cnVzdGVkUGFydHlTaGFyZWRLZXlJZDogcmVjZWl2ZXIudHJ1c3RlZFBhcnR5U2hhcmVkS2V5SWQsXHJcbiAgICAgICAgcGxhaW5TaGFyZWRDaXBoZXJEYXRhOiB7IG1lc3NhZ2U6IHJlY2VpdmVyLm1lc3NhZ2UsIGV2ZW50IH0sXHJcbiAgICAgIH07XHJcbiAgICAgIHJlY2VpdmVySWQgPSBhd2FpdCB0aGlzLnNjZW5hcmlvUmVjZWl2ZXJTZXJ2aWNlLmFkZFJlY2VpdmVyKG5ld1JlY2VpdmVyKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxvYWRlZFJlY2VpdmVyID0gYXdhaXQgdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5nZXRSZWNlaXZlcihcclxuICAgICAgcmVjZWl2ZXJJZFxyXG4gICAgKTtcclxuICAgIGF3YWl0IHRoaXMudXBkYXRlUmVjZWl2ZXJJdGVtcyhcclxuICAgICAgc2NlbmFyaW9JZCxcclxuICAgICAgYXNzZW1ibHlLZXlJZCxcclxuICAgICAgbG9hZGVkUmVjZWl2ZXIsXHJcbiAgICAgIHJlY2VpdmVyLnBlcm1pc3Npb25zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVSZWNlaXZlckl0ZW1zKFxyXG4gICAgc2NlbmFyaW9JZDogc3RyaW5nLFxyXG4gICAgYXNzZW1ibHlLZXlJZDogc3RyaW5nLFxyXG4gICAgcmVjZWl2ZXI6IFJlY2VpdmVyLFxyXG4gICAgcGVybWlzc2lvbnM6IFByZXBhcmVkUGVybWlzc2lvbnNcclxuICApIHtcclxuICAgIHBlcm1pc3Npb25zID0gcGVybWlzc2lvbnMgfHwge307XHJcbiAgICBwZXJtaXNzaW9ucy5jYXRlZ29yaWVzID0gcGVybWlzc2lvbnMuY2F0ZWdvcmllcyB8fCBbXTtcclxuICAgIHBlcm1pc3Npb25zLnJlY29yZHMgPSBwZXJtaXNzaW9ucy5yZWNvcmRzIHx8IFtdO1xyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBwZXJtaXNzaW9ucy5jYXRlZ29yaWVzXHJcbiAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PlxyXG4gICAgICAgICAgICAhcmVjZWl2ZXIuY2F0ZWdvcmllcy5zb21lKCh5KSA9PiB5LmNhdGVnb3J5LmlkID09PSB4LmNhdGVnb3J5SWQpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5tYXAoYXN5bmMgKHgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgc2NlbmFyaW9JZCxcclxuICAgICAgICAgICAgYXNzZW1ibHlLZXlJZCxcclxuICAgICAgICAgICAgcmVjZWl2ZXJJZDogcmVjZWl2ZXIuaWQsXHJcbiAgICAgICAgICAgIHJlY2VpdmVyS2V5SWQ6IHJlY2VpdmVyLmtleUlkLFxyXG4gICAgICAgICAgICBhY2Nlc3NSb2xlOiB4LmFjY2Vzc0xldmVsLFxyXG4gICAgICAgICAgICBjYXRlZ29yeUlkOiB4LmNhdGVnb3J5SWQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5hZGRSZWNlaXZlckNhdGVnb3J5KHBhcmFtcyk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgcGVybWlzc2lvbnMucmVjb3Jkc1xyXG4gICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4gIXJlY2VpdmVyLnJlY29yZHMuc29tZSgoeSkgPT4geS5yZWNvcmQuaWQgPT09IHgucmVjb3JkSWQpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5tYXAoYXN5bmMgKHgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgc2NlbmFyaW9JZCxcclxuICAgICAgICAgICAgYXNzZW1ibHlLZXlJZCxcclxuICAgICAgICAgICAgcmVjZWl2ZXJJZDogcmVjZWl2ZXIuaWQsXHJcbiAgICAgICAgICAgIHJlY2VpdmVyS2V5SWQ6IHJlY2VpdmVyLmtleUlkLFxyXG4gICAgICAgICAgICBhY2Nlc3NSb2xlOiB4LmFjY2Vzc0xldmVsLFxyXG4gICAgICAgICAgICByZWNvcmRJZDogeC5yZWNvcmRJZCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNjZW5hcmlvUmVjZWl2ZXJTZXJ2aWNlLmFkZFJlY2VpdmVyUmVjb3JkKHBhcmFtcyk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHBlcm1pc3Npb25zLmNhdGVnb3JpZXNcclxuICAgICAgICAubWFwKCh4KSA9PiAoe1xyXG4gICAgICAgICAgYWNjZXNzTGV2ZWw6IHguYWNjZXNzTGV2ZWwsXHJcbiAgICAgICAgICBjYXRlZ29yeTogcmVjZWl2ZXIuY2F0ZWdvcmllcy5maW5kKFxyXG4gICAgICAgICAgICAoeSkgPT4geS5jYXRlZ29yeS5pZCA9PT0geC5jYXRlZ29yeUlkXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguY2F0ZWdvcnkpXHJcbiAgICAgICAgLm1hcChhc3luYyAoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcGFyYW1zOiBVcGRhdGVTY2VuYXJpb1JlY2VpdmVySXRlbUlucHV0ID0ge1xyXG4gICAgICAgICAgICBpZDogeC5jYXRlZ29yeS5pZCxcclxuICAgICAgICAgICAga2V5SWQ6IHguY2F0ZWdvcnkua2V5SWQsXHJcbiAgICAgICAgICAgIGFjY2Vzc1JvbGU6IHguYWNjZXNzTGV2ZWwsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS51cGRhdGVSZWNlaXZlckl0ZW0ocGFyYW1zKTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBwZXJtaXNzaW9ucy5yZWNvcmRzXHJcbiAgICAgICAgLm1hcCgoeCkgPT4gKHtcclxuICAgICAgICAgIGFjY2Vzc0xldmVsOiB4LmFjY2Vzc0xldmVsLFxyXG4gICAgICAgICAgcmVjb3JkOiByZWNlaXZlci5yZWNvcmRzLmZpbmQoKHkpID0+IHkucmVjb3JkLmlkID09PSB4LnJlY29yZElkKSxcclxuICAgICAgICB9KSlcclxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4LnJlY29yZClcclxuICAgICAgICAubWFwKGFzeW5jICh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBwYXJhbXM6IFVwZGF0ZVNjZW5hcmlvUmVjZWl2ZXJJdGVtSW5wdXQgPSB7XHJcbiAgICAgICAgICAgIGlkOiB4LnJlY29yZC5pZCxcclxuICAgICAgICAgICAga2V5SWQ6IHgucmVjb3JkLmtleUlkLFxyXG4gICAgICAgICAgICBhY2Nlc3NSb2xlOiB4LmFjY2Vzc0xldmVsLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuc2NlbmFyaW9SZWNlaXZlclNlcnZpY2UudXBkYXRlUmVjZWl2ZXJJdGVtKHBhcmFtcyk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHJlY2VpdmVyLmNhdGVnb3JpZXNcclxuICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICAgICFwZXJtaXNzaW9ucy5jYXRlZ29yaWVzLnNvbWUoKHkpID0+IHkuY2F0ZWdvcnlJZCA9PT0geC5jYXRlZ29yeS5pZClcclxuICAgICAgICApXHJcbiAgICAgICAgLm1hcCgoeCkgPT4gdGhpcy5zY2VuYXJpb1JlY2VpdmVyU2VydmljZS5kZWxldGVSZWNlaXZlckl0ZW0oeC5pZCkpXHJcbiAgICApO1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHJlY2VpdmVyLnJlY29yZHNcclxuICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+ICFwZXJtaXNzaW9ucy5yZWNvcmRzLnNvbWUoKHkpID0+IHkucmVjb3JkSWQgPT09IHgucmVjb3JkLmlkKVxyXG4gICAgICAgIClcclxuICAgICAgICAubWFwKCh4KSA9PiB0aGlzLnNjZW5hcmlvUmVjZWl2ZXJTZXJ2aWNlLmRlbGV0ZVJlY2VpdmVySXRlbSh4LmlkKSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==