@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,192 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { Injectable, NgZone } from '@angular/core';
3
+ import { LrBadLogicException } from '../../_common/exceptions';
4
+ import { mapValuesMayAsync, promiseAllMayAsync } from '../../_common/utils';
5
+ import { KeyService } from '../../cryptography/key.service';
6
+ import { CommonProcessorsService, DefaultProcessorOptions, } from './common-processors.service';
7
+ import { RunOutsideAngular } from '../../_common/run-outside-angular';
8
+ import { TpPasswordResetProcessorService } from './tp-password-reset-processor.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../../cryptography/key.service";
11
+ import * as i2 from "./common-processors.service";
12
+ import * as i3 from "./tp-password-reset-processor.service";
13
+ function extendPath(context, key) {
14
+ return Object.assign(Object.assign({}, context), { path: [...context.path, key] });
15
+ }
16
+ let QueryProcessorService = class QueryProcessorService {
17
+ constructor(ngZone, keyService, common, tpprProcessor) {
18
+ this.ngZone = ngZone;
19
+ this.keyService = keyService;
20
+ this.common = common;
21
+ this.tpprProcessor = tpprProcessor;
22
+ this.TYPENAME = '__typename';
23
+ this.processors = {};
24
+ this.registerProcessor('DirectoryNode', common.series([
25
+ common.makeJsonParseProcessor({
26
+ plainFieldName: 'plainMeta',
27
+ }),
28
+ common.makeDecryptionProcessor({
29
+ cipherFieldName: 'cipherMeta',
30
+ }),
31
+ ]));
32
+ this.registerProcessor('FileStateNode', common.series([
33
+ common.makeJsonParseProcessor({
34
+ plainFieldName: 'plainMeta',
35
+ }),
36
+ common.makeDecryptionProcessor({
37
+ cipherFieldName: 'cipherMeta',
38
+ }),
39
+ ]));
40
+ this.registerProcessor('ContactCardNode', common.makeDecryptionProcessor({
41
+ cipherFieldName: 'cipherData',
42
+ }));
43
+ this.registerProcessor('SharedContactCardNode', common.series([
44
+ common.makeJsonParseProcessor({
45
+ plainFieldName: 'ownerPlainData',
46
+ }),
47
+ common.makeDecryptionProcessor({
48
+ cipherFieldName: 'ownerCipherData',
49
+ getKeyId: ({ field }) => {
50
+ return field.ownerKey.id;
51
+ },
52
+ }),
53
+ common.makeDecryptionProcessor({
54
+ cipherFieldName: 'receiverCipherData',
55
+ getKeyId: ({ field }) => {
56
+ return field.receiverKey.id;
57
+ },
58
+ }),
59
+ common.makeDecryptionProcessor({
60
+ cipherFieldName: 'sharedCipherData',
61
+ getKeyId: ({ field }) => field.sharedKey.id,
62
+ }),
63
+ ]));
64
+ this.registerProcessor('TpPasswordResetNode', this.tpprProcessor.makeTpPasswordResetNodeProcessor());
65
+ this.registerProcessor('SharedTpClaimApproverNode', common.series([
66
+ common.makeDecryptionProcessor({
67
+ cipherFieldName: 'sharedCipherApprovalData',
68
+ getKeyId: ({ field }) => field.sharedKey.id,
69
+ }),
70
+ common.makeDecryptionProcessor({
71
+ cipherFieldName: 'sharedCipherPartialAssemblyKey',
72
+ getKeyId: ({ field }) => field.sharedKey.id,
73
+ }),
74
+ ]));
75
+ this.registerProcessor('TpAssemblyAsApproverNode', common.series([
76
+ common.makeDecryptionProcessor({
77
+ cipherFieldName: 'sharedCipherData',
78
+ getKeyId: ({ field }) => field.sharedKey.id,
79
+ }),
80
+ ]));
81
+ }
82
+ processQuery(fields, options) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ options = Object.assign(Object.assign({}, DefaultProcessorOptions), options);
85
+ // The top level query does not have __typename
86
+ const ret = mapValuesMayAsync(fields, (field, key) => this.processField({
87
+ field,
88
+ context: {
89
+ path: [key],
90
+ processChildren: true,
91
+ },
92
+ options,
93
+ }));
94
+ return ret;
95
+ });
96
+ }
97
+ // Either returns a Promise, or a value.
98
+ // The Promise<any> type is redundant but it shows that it can return a promise
99
+ // We are not using async on the function because we don't want auto promotion into a Promise, which
100
+ // always defer execution into the event loops. It is costly and unnecessary for objects
101
+ // with only native data types.
102
+ processField({ field, context, options, }) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ if (field === null || field === void 0 ? void 0 : field.then) {
105
+ throw new LrBadLogicException('processField() should not receive thenable.');
106
+ }
107
+ if (field == null) {
108
+ return null;
109
+ }
110
+ const newParams = {
111
+ field,
112
+ context: Object.assign(Object.assign({}, context), {
113
+ // Processors modifies this field to communicate back to the caller.
114
+ processChildren: true }),
115
+ options,
116
+ };
117
+ // TODO allow registering processors by field name so we can process primitive fields as well.
118
+ // We have common fields like "created", "modified" that be processed based on name.
119
+ if (field[this.TYPENAME]) {
120
+ // It's a custom object type
121
+ const processor = this.processors[field[this.TYPENAME]];
122
+ if (processor) {
123
+ // Returns either a value or a promise.
124
+ field = processor(newParams);
125
+ }
126
+ const processChildren = (childField) => {
127
+ if (context.processChildren &&
128
+ childField !== null &&
129
+ typeof childField === 'object') {
130
+ return mapValuesMayAsync(childField, (x, key) => this.processField({
131
+ field: x,
132
+ context: extendPath(context, key),
133
+ options,
134
+ }));
135
+ }
136
+ else {
137
+ return childField;
138
+ }
139
+ };
140
+ // Keep processing all child fields
141
+ if (field.then) {
142
+ // Wait for field to resolve
143
+ field = field.then((resolvedField) => {
144
+ return processChildren(resolvedField);
145
+ });
146
+ }
147
+ else {
148
+ // Field is already resolved
149
+ field = processChildren(field);
150
+ }
151
+ }
152
+ else {
153
+ // Keep processing all child fields
154
+ if (context.processChildren) {
155
+ if (Array.isArray(field)) {
156
+ field = promiseAllMayAsync(field.map((x, i) => this.processField({
157
+ field: x,
158
+ context: extendPath(context, i.toString()),
159
+ options,
160
+ })));
161
+ }
162
+ }
163
+ }
164
+ return field;
165
+ });
166
+ }
167
+ registerProcessor(name, processor) {
168
+ if (this.processors[name]) {
169
+ throw new LrBadLogicException(`Processor for field ${name} already exists.`);
170
+ }
171
+ this.processors[name] = processor;
172
+ }
173
+ };
174
+ QueryProcessorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function QueryProcessorService_Factory() { return new QueryProcessorService(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.KeyService), i0.ɵɵinject(i2.CommonProcessorsService), i0.ɵɵinject(i3.TpPasswordResetProcessorService)); }, token: QueryProcessorService, providedIn: "root" });
175
+ QueryProcessorService.decorators = [
176
+ { type: Injectable, args: [{
177
+ providedIn: 'root',
178
+ },] }
179
+ ];
180
+ QueryProcessorService.ctorParameters = () => [
181
+ { type: NgZone },
182
+ { type: KeyService },
183
+ { type: CommonProcessorsService },
184
+ { type: TpPasswordResetProcessorService }
185
+ ];
186
+ QueryProcessorService = __decorate([
187
+ RunOutsideAngular({
188
+ ngZoneName: 'ngZone',
189
+ })
190
+ ], QueryProcessorService);
191
+ export { QueryProcessorService };
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcHJvY2Vzc29yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMvdGVzdC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvcXVlcnktcHJvY2Vzc29yL3F1ZXJ5LXByb2Nlc3Nvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUNMLHVCQUF1QixFQU12Qix1QkFBdUIsR0FDeEIsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7QUFFeEYsU0FBUyxVQUFVLENBQUMsT0FBeUIsRUFBRSxHQUFXO0lBQ3hELHVDQUNLLE9BQU8sS0FDVixJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQzVCO0FBQ0osQ0FBQztJQVFZLHFCQUFxQixTQUFyQixxQkFBcUI7SUFJaEMsWUFDVSxNQUFjLEVBQ2QsVUFBc0IsRUFDdEIsTUFBK0IsRUFDL0IsYUFBOEM7UUFIOUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7UUFDL0Isa0JBQWEsR0FBYixhQUFhLENBQWlDO1FBUC9DLGFBQVEsR0FBRyxZQUFZLENBQUM7UUFDekIsZUFBVSxHQUF5QyxFQUFFLENBQUM7UUFR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aEIsS0FBSyxFQUFFLENBQUM7NEJBQ1IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUMxQyxPQUFPO3lCQUNSLENBQUMsQ0FDSCxDQUNGLENBQUM7cUJBQ0g7aUJBQ0Y7YUFDRjtZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUFBO0lBRU8saUJBQWlCLENBQUMsSUFBWSxFQUFFLFNBQTRCO1FBQ2xFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixNQUFNLElBQUksbUJBQW1CLENBQzNCLHVCQUF1QixJQUFJLGtCQUFrQixDQUM5QyxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0NBQ0YsQ0FBQTs7O1lBcE5BLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBN0JvQixNQUFNO1lBR2xCLFVBQVU7WUFFakIsdUJBQXVCO1lBVWhCLCtCQUErQjs7QUFlM0IscUJBQXFCO0lBTmpDLGlCQUFpQixDQUFDO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7R0FJVyxxQkFBcUIsQ0FpTmpDO1NBak5ZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMckJhZExvZ2ljRXhjZXB0aW9uIH0gZnJvbSAnLi4vLi4vX2NvbW1vbi9leGNlcHRpb25zJztcclxuaW1wb3J0IHsgbWFwVmFsdWVzTWF5QXN5bmMsIHByb21pc2VBbGxNYXlBc3luYyB9IGZyb20gJy4uLy4uL19jb21tb24vdXRpbHMnO1xyXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBDb21tb25Qcm9jZXNzb3JzU2VydmljZSxcclxuICAvLyBGaWVsZENvbnRleHQsXHJcbiAgUHJvY2Vzc29yQ2FsbGJhY2ssXHJcbiAgUHJvY2Vzc29yQ2FsbGJhY2tQYXJhbXMsXHJcbiAgUHJvY2Vzc29yQ29udGV4dCxcclxuICBQcm9jZXNzb3JPcHRpb25zLFxyXG4gIERlZmF1bHRQcm9jZXNzb3JPcHRpb25zLFxyXG59IGZyb20gJy4vY29tbW9uLXByb2Nlc3NvcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRwUGFzc3dvcmRSZXNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi90cnVzdGVkLXBhcnRpZXMvdHAtcGFzc3dvcmQtcmVzZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgVHBQYXNzd29yZFJlc2V0UHJvY2Vzc29yU2VydmljZSB9IGZyb20gJy4vdHAtcGFzc3dvcmQtcmVzZXQtcHJvY2Vzc29yLnNlcnZpY2UnO1xyXG5cclxuZnVuY3Rpb24gZXh0ZW5kUGF0aChjb250ZXh0OiBQcm9jZXNzb3JDb250ZXh0LCBrZXk6IHN0cmluZyk6IFByb2Nlc3NvckNvbnRleHQge1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi5jb250ZXh0LFxyXG4gICAgcGF0aDogWy4uLmNvbnRleHQucGF0aCwga2V5XSxcclxuICB9O1xyXG59XHJcblxyXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xyXG4gIG5nWm9uZU5hbWU6ICduZ1pvbmUnLFxyXG59KVxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUXVlcnlQcm9jZXNzb3JTZXJ2aWNlIHtcclxuICByZWFkb25seSBUWVBFTkFNRSA9ICdfX3R5cGVuYW1lJztcclxuICBwcml2YXRlIHByb2Nlc3NvcnM6IHsgW2tleTogc3RyaW5nXTogUHJvY2Vzc29yQ2FsbGJhY2sgfSA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbW1vbjogQ29tbW9uUHJvY2Vzc29yc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRwcHJQcm9jZXNzb3I6IFRwUGFzc3dvcmRSZXNldFByb2Nlc3NvclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucmVnaXN0ZXJQcm9jZXNzb3IoXHJcbiAgICAgICdEaXJlY3RvcnlOb2RlJyxcclxuICAgICAgY29tbW9uLnNlcmllcyhbXHJcbiAgICAgICAgY29tbW9uLm1ha2VKc29uUGFyc2VQcm9jZXNzb3Ioe1xyXG4gICAgICAgICAgcGxhaW5GaWVsZE5hbWU6ICdwbGFpbk1ldGEnLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNvbW1vbi5tYWtlRGVjcnlwdGlvblByb2Nlc3Nvcih7XHJcbiAgICAgICAgICBjaXBoZXJGaWVsZE5hbWU6ICdjaXBoZXJNZXRhJyxcclxuICAgICAgICB9KSxcclxuICAgICAgXSlcclxuICAgICk7XHJcbiAgICB0aGlzLnJlZ2lzdGVyUHJvY2Vzc29yKFxyXG4gICAgICAnRmlsZVN0YXRlTm9kZScsXHJcbiAgICAgIGNvbW1vbi5zZXJpZXMoW1xyXG4gICAgICAgIGNvbW1vbi5tYWtlSnNvblBhcnNlUHJvY2Vzc29yKHtcclxuICAgICAgICAgIHBsYWluRmllbGROYW1lOiAncGxhaW5NZXRhJyxcclxuICAgICAgICB9KSxcclxuICAgICAgICBjb21tb24ubWFrZURlY3J5cHRpb25Qcm9jZXNzb3Ioe1xyXG4gICAgICAgICAgY2lwaGVyRmllbGROYW1lOiAnY2lwaGVyTWV0YScsXHJcbiAgICAgICAgfSksXHJcbiAgICAgIF0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZWdpc3RlclByb2Nlc3NvcihcclxuICAgICAgJ0NvbnRhY3RDYXJkTm9kZScsXHJcbiAgICAgIGNvbW1vbi5tYWtlRGVjcnlwdGlvblByb2Nlc3Nvcih7XHJcbiAgICAgICAgY2lwaGVyRmllbGROYW1lOiAnY2lwaGVyRGF0YScsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZWdpc3RlclByb2Nlc3NvcihcclxuICAgICAgJ1NoYXJlZENvbnRhY3RDYXJkTm9kZScsXHJcbiAgICAgIGNvbW1vbi5zZXJpZXMoW1xyXG4gICAgICAgIGNvbW1vbi5tYWtlSnNvblBhcnNlUHJvY2Vzc29yKHtcclxuICAgICAgICAgIHBsYWluRmllbGROYW1lOiAnb3duZXJQbGFpbkRhdGEnLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNvbW1vbi5tYWtlRGVjcnlwdGlvblByb2Nlc3Nvcih7XHJcbiAgICAgICAgICBjaXBoZXJGaWVsZE5hbWU6ICdvd25lckNpcGhlckRhdGEnLFxyXG4gICAgICAgICAgZ2V0S2V5SWQ6ICh7IGZpZWxkIH0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLm93bmVyS2V5LmlkO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KSxcclxuICAgICAgICBjb21tb24ubWFrZURlY3J5cHRpb25Qcm9jZXNzb3Ioe1xyXG4gICAgICAgICAgY2lwaGVyRmllbGROYW1lOiAncmVjZWl2ZXJDaXBoZXJEYXRhJyxcclxuICAgICAgICAgIGdldEtleUlkOiAoeyBmaWVsZCB9KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWVsZC5yZWNlaXZlcktleS5pZDtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY29tbW9uLm1ha2VEZWNyeXB0aW9uUHJvY2Vzc29yKHtcclxuICAgICAgICAgIGNpcGhlckZpZWxkTmFtZTogJ3NoYXJlZENpcGhlckRhdGEnLFxyXG4gICAgICAgICAgZ2V0S2V5SWQ6ICh7IGZpZWxkIH0pID0+IGZpZWxkLnNoYXJlZEtleS5pZCxcclxuICAgICAgICB9KSxcclxuICAgICAgXSlcclxuICAgICk7XHJcbiAgICB0aGlzLnJlZ2lzdGVyUHJvY2Vzc29yKFxyXG4gICAgICAnVHBQYXNzd29yZFJlc2V0Tm9kZScsXHJcbiAgICAgIHRoaXMudHBwclByb2Nlc3Nvci5tYWtlVHBQYXNzd29yZFJlc2V0Tm9kZVByb2Nlc3NvcigpXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZWdpc3RlclByb2Nlc3NvcihcclxuICAgICAgJ1NoYXJlZFRwQ2xhaW1BcHByb3Zlck5vZGUnLFxyXG4gICAgICBjb21tb24uc2VyaWVzKFtcclxuICAgICAgICBjb21tb24ubWFrZURlY3J5cHRpb25Qcm9jZXNzb3Ioe1xyXG4gICAgICAgICAgY2lwaGVyRmllbGROYW1lOiAnc2hhcmVkQ2lwaGVyQXBwcm92YWxEYXRhJyxcclxuICAgICAgICAgIGdldEtleUlkOiAoeyBmaWVsZCB9KSA9PiBmaWVsZC5zaGFyZWRLZXkuaWQsXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY29tbW9uLm1ha2VEZWNyeXB0aW9uUHJvY2Vzc29yKHtcclxuICAgICAgICAgIGNpcGhlckZpZWxkTmFtZTogJ3NoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleScsXHJcbiAgICAgICAgICBnZXRLZXlJZDogKHsgZmllbGQgfSkgPT4gZmllbGQuc2hhcmVkS2V5LmlkLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICBdKVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVnaXN0ZXJQcm9jZXNzb3IoXHJcbiAgICAgICdUcEFzc2VtYmx5QXNBcHByb3Zlck5vZGUnLFxyXG4gICAgICBjb21tb24uc2VyaWVzKFtcclxuICAgICAgICBjb21tb24ubWFrZURlY3J5cHRpb25Qcm9jZXNzb3Ioe1xyXG4gICAgICAgICAgY2lwaGVyRmllbGROYW1lOiAnc2hhcmVkQ2lwaGVyRGF0YScsXHJcbiAgICAgICAgICBnZXRLZXlJZDogKHsgZmllbGQgfSkgPT4gZmllbGQuc2hhcmVkS2V5LmlkLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICBdKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3NRdWVyeShcclxuICAgIGZpZWxkczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcclxuICAgIG9wdGlvbnM6IFByb2Nlc3Nvck9wdGlvbnNcclxuICApIHtcclxuICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLkRlZmF1bHRQcm9jZXNzb3JPcHRpb25zLFxyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBUaGUgdG9wIGxldmVsIHF1ZXJ5IGRvZXMgbm90IGhhdmUgX190eXBlbmFtZVxyXG4gICAgY29uc3QgcmV0ID0gbWFwVmFsdWVzTWF5QXN5bmMoZmllbGRzLCAoZmllbGQsIGtleSkgPT5cclxuICAgICAgdGhpcy5wcm9jZXNzRmllbGQoe1xyXG4gICAgICAgIGZpZWxkLFxyXG4gICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgIHBhdGg6IFtrZXldLFxyXG4gICAgICAgICAgcHJvY2Vzc0NoaWxkcmVuOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3B0aW9ucyxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgLy8gRWl0aGVyIHJldHVybnMgYSBQcm9taXNlLCBvciBhIHZhbHVlLlxyXG4gIC8vIFRoZSBQcm9taXNlPGFueT4gdHlwZSBpcyByZWR1bmRhbnQgYnV0IGl0IHNob3dzIHRoYXQgaXQgY2FuIHJldHVybiBhIHByb21pc2VcclxuICAvLyBXZSBhcmUgbm90IHVzaW5nIGFzeW5jIG9uIHRoZSBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYXV0byBwcm9tb3Rpb24gaW50byBhIFByb21pc2UsIHdoaWNoXHJcbiAgLy8gYWx3YXlzIGRlZmVyIGV4ZWN1dGlvbiBpbnRvIHRoZSBldmVudCBsb29wcy4gSXQgaXMgY29zdGx5IGFuZCB1bm5lY2Vzc2FyeSBmb3Igb2JqZWN0c1xyXG4gIC8vIHdpdGggb25seSBuYXRpdmUgZGF0YSB0eXBlcy5cclxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NGaWVsZCh7XHJcbiAgICBmaWVsZCxcclxuICAgIGNvbnRleHQsXHJcbiAgICBvcHRpb25zLFxyXG4gIH06IFByb2Nlc3NvckNhbGxiYWNrUGFyYW1zKSB7XHJcbiAgICBpZiAoZmllbGQ/LnRoZW4pIHtcclxuICAgICAgdGhyb3cgbmV3IExyQmFkTG9naWNFeGNlcHRpb24oXHJcbiAgICAgICAgJ3Byb2Nlc3NGaWVsZCgpIHNob3VsZCBub3QgcmVjZWl2ZSB0aGVuYWJsZS4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpZWxkID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3UGFyYW1zOiBQcm9jZXNzb3JDYWxsYmFja1BhcmFtcyA9IHtcclxuICAgICAgZmllbGQsXHJcbiAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAuLi5jb250ZXh0LFxyXG4gICAgICAgIC8vIFByb2Nlc3NvcnMgbW9kaWZpZXMgdGhpcyBmaWVsZCB0byBjb21tdW5pY2F0ZSBiYWNrIHRvIHRoZSBjYWxsZXIuXHJcbiAgICAgICAgcHJvY2Vzc0NoaWxkcmVuOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBUT0RPIGFsbG93IHJlZ2lzdGVyaW5nIHByb2Nlc3NvcnMgYnkgZmllbGQgbmFtZSBzbyB3ZSBjYW4gcHJvY2VzcyBwcmltaXRpdmUgZmllbGRzIGFzIHdlbGwuXHJcbiAgICAvLyBXZSBoYXZlIGNvbW1vbiBmaWVsZHMgbGlrZSBcImNyZWF0ZWRcIiwgXCJtb2RpZmllZFwiIHRoYXQgYmUgcHJvY2Vzc2VkIGJhc2VkIG9uIG5hbWUuXHJcbiAgICBpZiAoZmllbGRbdGhpcy5UWVBFTkFNRV0pIHtcclxuICAgICAgLy8gSXQncyBhIGN1c3RvbSBvYmplY3QgdHlwZVxyXG4gICAgICBjb25zdCBwcm9jZXNzb3IgPSB0aGlzLnByb2Nlc3NvcnNbZmllbGRbdGhpcy5UWVBFTkFNRV1dO1xyXG4gICAgICBpZiAocHJvY2Vzc29yKSB7XHJcbiAgICAgICAgLy8gUmV0dXJucyBlaXRoZXIgYSB2YWx1ZSBvciBhIHByb21pc2UuXHJcbiAgICAgICAgZmllbGQgPSBwcm9jZXNzb3IobmV3UGFyYW1zKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcHJvY2Vzc0NoaWxkcmVuID0gKGNoaWxkRmllbGQpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb250ZXh0LnByb2Nlc3NDaGlsZHJlbiAmJlxyXG4gICAgICAgICAgY2hpbGRGaWVsZCAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgdHlwZW9mIGNoaWxkRmllbGQgPT09ICdvYmplY3QnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gbWFwVmFsdWVzTWF5QXN5bmMoY2hpbGRGaWVsZCwgKHgsIGtleSkgPT5cclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmllbGQoe1xyXG4gICAgICAgICAgICAgIGZpZWxkOiB4LFxyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGV4dGVuZFBhdGgoY29udGV4dCwga2V5KSxcclxuICAgICAgICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGNoaWxkRmllbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gS2VlcCBwcm9jZXNzaW5nIGFsbCBjaGlsZCBmaWVsZHNcclxuICAgICAgaWYgKGZpZWxkLnRoZW4pIHtcclxuICAgICAgICAvLyBXYWl0IGZvciBmaWVsZCB0byByZXNvbHZlXHJcbiAgICAgICAgZmllbGQgPSBmaWVsZC50aGVuKChyZXNvbHZlZEZpZWxkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc0NoaWxkcmVuKHJlc29sdmVkRmllbGQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEZpZWxkIGlzIGFscmVhZHkgcmVzb2x2ZWRcclxuICAgICAgICBmaWVsZCA9IHByb2Nlc3NDaGlsZHJlbihmaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEtlZXAgcHJvY2Vzc2luZyBhbGwgY2hpbGQgZmllbGRzXHJcbiAgICAgIGlmIChjb250ZXh0LnByb2Nlc3NDaGlsZHJlbikge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkKSkge1xyXG4gICAgICAgICAgZmllbGQgPSBwcm9taXNlQWxsTWF5QXN5bmMoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBBcnJheTxhbnk+KS5tYXAoKHgsIGkpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmllbGQoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IHgsXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBleHRlbmRQYXRoKGNvbnRleHQsIGkudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWdpc3RlclByb2Nlc3NvcihuYW1lOiBzdHJpbmcsIHByb2Nlc3NvcjogUHJvY2Vzc29yQ2FsbGJhY2spIHtcclxuICAgIGlmICh0aGlzLnByb2Nlc3NvcnNbbmFtZV0pIHtcclxuICAgICAgdGhyb3cgbmV3IExyQmFkTG9naWNFeGNlcHRpb24oXHJcbiAgICAgICAgYFByb2Nlc3NvciBmb3IgZmllbGQgJHtuYW1lfSBhbHJlYWR5IGV4aXN0cy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByb2Nlc3NvcnNbbmFtZV0gPSBwcm9jZXNzb3I7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,109 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { Injectable, NgZone } from '@angular/core';
3
+ import { KeyGraphService } from '../../cryptography/key-graph.service';
4
+ import { RunOutsideAngular } from '../../_common/run-outside-angular';
5
+ import { processConnection, } from './common-processors.service';
6
+ import { LrBadRequestException } from '../../_common/exceptions';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../cryptography/key-graph.service";
9
+ let TpPasswordResetProcessorService = class TpPasswordResetProcessorService {
10
+ constructor(ngZone, keyGraph) {
11
+ this.ngZone = ngZone;
12
+ this.keyGraph = keyGraph;
13
+ }
14
+ processTpPasswordResetUserNode(node) {
15
+ var _a;
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ const pxk = ((_a = node.pxk) === null || _a === void 0 ? void 0 : _a.id) && (yield this.keyGraph.getKey(node.pxk.id));
18
+ const ret = Object.assign({}, node);
19
+ if (pxk && node.approvals) {
20
+ ret.approvals = yield Promise.all(node.approvals.map((approval) => this.processTpPasswordResetUserApprovalNode(approval, pxk)));
21
+ }
22
+ return ret;
23
+ });
24
+ }
25
+ processTpPasswordResetUserApprovalNode(approval, pxk) {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ const ret = Object.assign({}, approval);
28
+ if (approval.receiverCipher) {
29
+ ret.receiverCipherClearJson = this.keyGraph.decryptFromString(pxk, approval.receiverCipher);
30
+ }
31
+ if (approval.receiverCipherPartialAssemblyKey) {
32
+ ret.receiverCipherPartialAssemblyKeyClearJson = this.keyGraph.decryptFromString(pxk, approval.receiverCipherPartialAssemblyKey);
33
+ }
34
+ return ret;
35
+ });
36
+ }
37
+ makeTpPasswordResetNodeProcessor() {
38
+ return ({ field, }) => __awaiter(this, void 0, void 0, function* () {
39
+ const ret = Object.assign({}, field);
40
+ if (field.assembly) {
41
+ if (field.applied == null) {
42
+ throw new LrBadRequestException('If you request for field "assembly" in the TpPasswordResetNode, then you must also request the "applied" field');
43
+ }
44
+ ret.assembly = yield this.processTpAssemblyNode(field.assembly, field.applied);
45
+ }
46
+ return ret;
47
+ });
48
+ }
49
+ processTpAssemblyNode(assembly, applied) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ // Subject key is encrypted user the master key. So if reset has been applied, then
52
+ // these keys are not available any more.
53
+ const { subjectKey, assemblyKey, assemblyCipherData, subAssemblies, } = assembly;
54
+ const ret = Object.assign(Object.assign({}, assembly), { subAssemblies: yield processConnection(subAssemblies, (node) => this.processTpSubAssemblyNode(node, subjectKey.id, applied)) });
55
+ if (!applied) {
56
+ if (assemblyCipherData) {
57
+ ret.assemblyCipherDataClearJson = yield this.keyGraph.decryptFromString(assemblyKey.id, assemblyCipherData);
58
+ }
59
+ }
60
+ return ret;
61
+ });
62
+ }
63
+ processTpSubAssemblyNode(subAssembly, subjectKeyId, applied) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const { subjectCipherData, approvers } = subAssembly;
66
+ // const ret: TpSubAssemblyNode = {
67
+ // ...subAssembly,
68
+ // approvers: {
69
+ // ...approvers,
70
+ // edges: await Promise.all(
71
+ // approvers.edges.map(async (edge) => ({
72
+ // ...edge,
73
+ // node: await this.processTpAssemblyApproverNode(edge.node, applied),
74
+ // }))
75
+ // ),
76
+ // },
77
+ // };
78
+ const ret = Object.assign(Object.assign({}, subAssembly), { approvers: yield processConnection(approvers, (node) => this.processTpAssemblyApproverNode(node, applied)) });
79
+ if (!applied) {
80
+ if (subjectCipherData) {
81
+ ret.subjectCipherDataClearJson = yield this.keyGraph.decryptFromString(subjectKeyId, subjectCipherData);
82
+ }
83
+ }
84
+ return ret;
85
+ });
86
+ }
87
+ processTpAssemblyApproverNode(approver, applied) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ return approver;
90
+ });
91
+ }
92
+ };
93
+ TpPasswordResetProcessorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TpPasswordResetProcessorService_Factory() { return new TpPasswordResetProcessorService(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.KeyGraphService)); }, token: TpPasswordResetProcessorService, providedIn: "root" });
94
+ TpPasswordResetProcessorService.decorators = [
95
+ { type: Injectable, args: [{
96
+ providedIn: 'root',
97
+ },] }
98
+ ];
99
+ TpPasswordResetProcessorService.ctorParameters = () => [
100
+ { type: NgZone },
101
+ { type: KeyGraphService }
102
+ ];
103
+ TpPasswordResetProcessorService = __decorate([
104
+ RunOutsideAngular({
105
+ ngZoneName: 'ngZone',
106
+ })
107
+ ], TpPasswordResetProcessorService);
108
+ export { TpPasswordResetProcessorService };
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtcGFzc3dvcmQtcmVzZXQtcHJvY2Vzc29yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMvdGVzdC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hcGkvcXVlcnktcHJvY2Vzc29yL3RwLXBhc3N3b3JkLXJlc2V0LXByb2Nlc3Nvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFRdEUsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDZCQUE2QixDQUFDO0FBT3JDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7SUFRcEQsK0JBQStCLFNBQS9CLCtCQUErQjtJQUMxQyxZQUFvQixNQUFjLEVBQVUsUUFBeUI7UUFBakQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWlCO0lBQUcsQ0FBQztJQUVuRSw4QkFBOEIsQ0FDbEMsSUFBNkI7OztZQUU3QixNQUFNLEdBQUcsR0FBRyxPQUFBLElBQUksQ0FBQyxHQUFHLDBDQUFFLEVBQUUsS0FBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXRFLE1BQU0sR0FBRyxxQkFDSixJQUFJLENBQ1IsQ0FBQztZQUVGLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3pCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxF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QUU7b0JBQ3JCLEdBQUcsQ0FBQywwQkFBMEIsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQ3BFLFlBQVksRUFDWixpQkFBaUIsQ0FDbEIsQ0FBQztpQkFDSDthQUNGO1lBRUQsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO0tBQUE7SUFFYSw2QkFBNkIsQ0FDekMsUUFBZ0MsRUFDaEMsT0FBZ0I7O1lBRWhCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7S0FBQTtDQUNGLENBQUE7OztZQXZKQSxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTNCb0IsTUFBTTtZQUNsQixlQUFlOztBQTJCWCwrQkFBK0I7SUFOM0MsaUJBQWlCLENBQUM7UUFDakIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztHQUlXLCtCQUErQixDQW9KM0M7U0FwSlksK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uLy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XHJcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcclxuaW1wb3J0IHtcclxuICBJRCxcclxuICBTaGFyZWRUcEFzc2VtYmx5Tm9kZSxcclxuICBUcEFzc2VtYmx5QXBwcm92ZXJOb2RlLFxyXG4gIFRwQXNzZW1ibHlOb2RlLFxyXG4gIFRwU3ViQXNzZW1ibHlOb2RlLFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBwcm9jZXNzQ29ubmVjdGlvbixcclxuICBQcm9jZXNzb3JDYWxsYmFja1BhcmFtcyxcclxufSBmcm9tICcuL2NvbW1vbi1wcm9jZXNzb3JzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFRwUGFzc3dvcmRSZXNldFVzZXJOb2RlLFxyXG4gIFRwUGFzc3dvcmRSZXNldFVzZXJBcHByb3ZhbE5vZGUsXHJcbiAgVHBQYXNzd29yZFJlc2V0Tm9kZSxcclxufSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IEtleSB9IGZyb20gJy4uLy4uL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHkudHlwZXMnO1xyXG5pbXBvcnQgeyBMckJhZFJlcXVlc3RFeGNlcHRpb24gfSBmcm9tICcuLi8uLi9fY29tbW9uL2V4Y2VwdGlvbnMnO1xyXG5cclxuQFJ1bk91dHNpZGVBbmd1bGFyKHtcclxuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcclxufSlcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRwUGFzc3dvcmRSZXNldFByb2Nlc3NvclNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUsIHByaXZhdGUga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZSkge31cclxuXHJcbiAgYXN5bmMgcHJvY2Vzc1RwUGFzc3dvcmRSZXNldFVzZXJOb2RlKFxyXG4gICAgbm9kZTogVHBQYXNzd29yZFJlc2V0VXNlck5vZGVcclxuICApOiBQcm9taXNlPFRwUGFzc3dvcmRSZXNldFVzZXJOb2RlPiB7XHJcbiAgICBjb25zdCBweGsgPSBub2RlLnB4az8uaWQgJiYgKGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KG5vZGUucHhrLmlkKSk7XHJcblxyXG4gICAgY29uc3QgcmV0ID0ge1xyXG4gICAgICAuLi5ub2RlLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAocHhrICYmIG5vZGUuYXBwcm92YWxzKSB7XHJcbiAgICAgIHJldC5hcHByb3ZhbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBub2RlLmFwcHJvdmFscy5tYXAoKGFwcHJvdmFsKSA9PlxyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzVHBQYXNzd29yZFJlc2V0VXNlckFwcHJvdmFsTm9kZShhcHByb3ZhbCwgcHhrKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzVHBQYXNzd29yZFJlc2V0VXNlckFwcHJvdmFsTm9kZShcclxuICAgIGFwcHJvdmFsOiBUcFBhc3N3b3JkUmVzZXRVc2VyQXBwcm92YWxOb2RlLFxyXG4gICAgcHhrOiBLZXlcclxuICApIHtcclxuICAgIGNvbnN0IHJldCA9IHtcclxuICAgICAgLi4uYXBwcm92YWwsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChhcHByb3ZhbC5yZWNlaXZlckNpcGhlcikge1xyXG4gICAgICByZXQucmVjZWl2ZXJDaXBoZXJDbGVhckpzb24gPSB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nKFxyXG4gICAgICAgIHB4ayxcclxuICAgICAgICBhcHByb3ZhbC5yZWNlaXZlckNpcGhlclxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhcHByb3ZhbC5yZWNlaXZlckNpcGhlclBhcnRpYWxBc3NlbWJseUtleSkge1xyXG4gICAgICByZXQucmVjZWl2ZXJDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlDbGVhckpzb24gPSB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nKFxyXG4gICAgICAgIHB4ayxcclxuICAgICAgICBhcHByb3ZhbC5yZWNlaXZlckNpcGhlclBhcnRpYWxBc3NlbWJseUtleVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIG1ha2VUcFBhc3N3b3JkUmVzZXROb2RlUHJvY2Vzc29yKCkge1xyXG4gICAgcmV0dXJuIGFzeW5jICh7XHJcbiAgICAgIGZpZWxkLFxyXG4gICAgfTogUHJvY2Vzc29yQ2FsbGJhY2tQYXJhbXMpOiBQcm9taXNlPFRwUGFzc3dvcmRSZXNldE5vZGU+ID0+IHtcclxuICAgICAgY29uc3QgcmV0ID0ge1xyXG4gICAgICAgIC4uLmZpZWxkLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGZpZWxkLmFzc2VtYmx5KSB7XHJcbiAgICAgICAgaWYgKGZpZWxkLmFwcGxpZWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IExyQmFkUmVxdWVzdEV4Y2VwdGlvbihcclxuICAgICAgICAgICAgJ0lmIHlvdSByZXF1ZXN0IGZvciBmaWVsZCBcImFzc2VtYmx5XCIgaW4gdGhlIFRwUGFzc3dvcmRSZXNldE5vZGUsIHRoZW4geW91IG11c3QgYWxzbyByZXF1ZXN0IHRoZSBcImFwcGxpZWRcIiBmaWVsZCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXQuYXNzZW1ibHkgPSBhd2FpdCB0aGlzLnByb2Nlc3NUcEFzc2VtYmx5Tm9kZShcclxuICAgICAgICAgIGZpZWxkLmFzc2VtYmx5LFxyXG4gICAgICAgICAgZmllbGQuYXBwbGllZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzVHBBc3NlbWJseU5vZGUoXHJcbiAgICBhc3NlbWJseTogVHBBc3NlbWJseU5vZGUsXHJcbiAgICBhcHBsaWVkOiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxUcEFzc2VtYmx5Tm9kZT4ge1xyXG4gICAgLy8gU3ViamVjdCBrZXkgaXMgZW5jcnlwdGVkIHVzZXIgdGhlIG1hc3RlciBrZXkuIFNvIGlmIHJlc2V0IGhhcyBiZWVuIGFwcGxpZWQsIHRoZW5cclxuICAgIC8vIHRoZXNlIGtleXMgYXJlIG5vdCBhdmFpbGFibGUgYW55IG1vcmUuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN1YmplY3RLZXksXHJcbiAgICAgIGFzc2VtYmx5S2V5LFxyXG4gICAgICBhc3NlbWJseUNpcGhlckRhdGEsXHJcbiAgICAgIHN1YkFzc2VtYmxpZXMsXHJcbiAgICB9ID0gYXNzZW1ibHk7XHJcblxyXG4gICAgY29uc3QgcmV0OiBUcEFzc2VtYmx5Tm9kZSA9IHtcclxuICAgICAgLi4uYXNzZW1ibHksXHJcbiAgICAgIHN1YkFzc2VtYmxpZXM6IGF3YWl0IHByb2Nlc3NDb25uZWN0aW9uKHN1YkFzc2VtYmxpZXMsIChub2RlKSA9PlxyXG4gICAgICAgIHRoaXMucHJvY2Vzc1RwU3ViQXNzZW1ibHlOb2RlKG5vZGUsIHN1YmplY3RLZXkuaWQsIGFwcGxpZWQpXHJcbiAgICAgICksXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghYXBwbGllZCkge1xyXG4gICAgICBpZiAoYXNzZW1ibHlDaXBoZXJEYXRhKSB7XHJcbiAgICAgICAgcmV0LmFzc2VtYmx5Q2lwaGVyRGF0YUNsZWFySnNvbiA9IGF3YWl0IHRoaXMua2V5R3JhcGguZGVjcnlwdEZyb21TdHJpbmcoXHJcbiAgICAgICAgICBhc3NlbWJseUtleS5pZCxcclxuICAgICAgICAgIGFzc2VtYmx5Q2lwaGVyRGF0YVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzVHBTdWJBc3NlbWJseU5vZGUoXHJcbiAgICBzdWJBc3NlbWJseTogVHBTdWJBc3NlbWJseU5vZGUsXHJcbiAgICBzdWJqZWN0S2V5SWQ6IElELFxyXG4gICAgYXBwbGllZDogYm9vbGVhblxyXG4gICk6IFByb21pc2U8VHBTdWJBc3NlbWJseU5vZGU+IHtcclxuICAgIGNvbnN0IHsgc3ViamVjdENpcGhlckRhdGEsIGFwcHJvdmVycyB9ID0gc3ViQXNzZW1ibHk7XHJcblxyXG4gICAgLy8gY29uc3QgcmV0OiBUcFN1YkFzc2VtYmx5Tm9kZSA9IHtcclxuICAgIC8vICAgLi4uc3ViQXNzZW1ibHksXHJcbiAgICAvLyAgIGFwcHJvdmVyczoge1xyXG4gICAgLy8gICAgIC4uLmFwcHJvdmVycyxcclxuICAgIC8vICAgICBlZGdlczogYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAvLyAgICAgICBhcHByb3ZlcnMuZWRnZXMubWFwKGFzeW5jIChlZGdlKSA9PiAoe1xyXG4gICAgLy8gICAgICAgICAuLi5lZGdlLFxyXG4gICAgLy8gICAgICAgICBub2RlOiBhd2FpdCB0aGlzLnByb2Nlc3NUcEFzc2VtYmx5QXBwcm92ZXJOb2RlKGVkZ2Uubm9kZSwgYXBwbGllZCksXHJcbiAgICAvLyAgICAgICB9KSlcclxuICAgIC8vICAgICApLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gfTtcclxuICAgIGNvbnN0IHJldDogVHBTdWJBc3NlbWJseU5vZGUgPSB7XHJcbiAgICAgIC4uLnN1YkFzc2VtYmx5LFxyXG4gICAgICBhcHByb3ZlcnM6IGF3YWl0IHByb2Nlc3NDb25uZWN0aW9uKGFwcHJvdmVycywgKG5vZGUpID0+XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzVHBBc3NlbWJseUFwcHJvdmVyTm9kZShub2RlLCBhcHBsaWVkKVxyXG4gICAgICApLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIWFwcGxpZWQpIHtcclxuICAgICAgaWYgKHN1YmplY3RDaXBoZXJEYXRhKSB7XHJcbiAgICAgICAgcmV0LnN1YmplY3RDaXBoZXJEYXRhQ2xlYXJKc29uID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5kZWNyeXB0RnJvbVN0cmluZyhcclxuICAgICAgICAgIHN1YmplY3RLZXlJZCxcclxuICAgICAgICAgIHN1YmplY3RDaXBoZXJEYXRhXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NUcEFzc2VtYmx5QXBwcm92ZXJOb2RlKFxyXG4gICAgYXBwcm92ZXI6IFRwQXNzZW1ibHlBcHByb3Zlck5vZGUsXHJcbiAgICBhcHBsaWVkOiBib29sZWFuXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gYXBwcm92ZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,119 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import gql from 'graphql-tag';
4
+ import { EncryptionService } from '../cryptography/encryption.service';
5
+ import { KeyGraphService } from '../cryptography/key-graph.service';
6
+ import { KeyService } from '../cryptography/key.service';
7
+ import { ContactCardName } from '../users/profile.types';
8
+ import { LrApolloService } from './lr-apollo.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../cryptography/key.service";
11
+ import * as i2 from "./lr-apollo.service";
12
+ import * as i3 from "../cryptography/key-graph.service";
13
+ import * as i4 from "../cryptography/encryption.service";
14
+ export const SharedContactCardFields = `
15
+ id
16
+ owner {
17
+ id
18
+ username
19
+ }
20
+ ownerKey {
21
+ id
22
+ }
23
+ ownerCipherData
24
+ receiver {
25
+ id
26
+ username
27
+ }
28
+ receiverKey {
29
+ id
30
+ }
31
+ receiverCipherData
32
+ sharedKey {
33
+ id
34
+ }
35
+ sharedCipherData
36
+ sharedCipherDataSig
37
+ sharedCipherDataSigPxk {
38
+ id
39
+ }
40
+ `;
41
+ const UpdateOwnedContactCard = gql `
42
+ mutation UpdateOwnedContactCard(
43
+ $input: UpdateOwnedContactCardInput!
44
+ ) {
45
+ updateOwnedContactCard(
46
+ input: $input
47
+ ) {
48
+ ownedContactCard {
49
+ ${SharedContactCardFields}
50
+ }
51
+ }
52
+ }`;
53
+ export class SharedContactCardService {
54
+ constructor(keyService, lrApollo, keyGraph, encryptionService) {
55
+ this.keyService = keyService;
56
+ this.lrApollo = lrApollo;
57
+ this.keyGraph = keyGraph;
58
+ this.encryptionService = encryptionService;
59
+ }
60
+ decryptSharedTrustedPartyDetails(cc) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ const details = yield this.decryptTrustedPartyDetails(cc);
63
+ return Object.assign({ id: cc.id, ownedKeyId: cc.ownerKey.id, sharedKeyId: cc.sharedKey.id }, details);
64
+ });
65
+ }
66
+ decryptTrustedPartyDetails(cc) {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ if (cc && cc.sharedKey && cc.sharedCipherData) {
69
+ try {
70
+ return yield this.encryptionService.decrypt(yield this.keyGraph.getJwkKey(cc.sharedKey.id), cc.sharedCipherData);
71
+ }
72
+ catch (e) {
73
+ console.error('Cannot decrypt trusted party details', e);
74
+ }
75
+ }
76
+ return null;
77
+ });
78
+ }
79
+ updateMySharedContactCard(id, ownedKeyId, sharedKeyId, contactCard) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ const ownerKey = yield this.keyGraph.getKey(ownedKeyId);
82
+ const sharedKey = yield this.keyGraph.getKey(sharedKeyId);
83
+ const sigPxk = yield this.keyService.getCurrentSigPxk();
84
+ const sharedCipherData = yield this.encryptionService.encrypt(sharedKey.jwk, contactCard);
85
+ const sharedCipherDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, sharedCipherData));
86
+ const ownerPlainData = {
87
+ name: new ContactCardName(contactCard.name),
88
+ };
89
+ const ownerPlainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ownerPlainData));
90
+ yield this.lrApollo.mutate({
91
+ mutation: UpdateOwnedContactCard,
92
+ variables: {
93
+ input: {
94
+ id,
95
+ ownerCipherData: '',
96
+ ownerKeyId: ownerKey.id,
97
+ sharedCipherDataSig,
98
+ sharedKeyId: sharedKey.id,
99
+ sigPxkId: sigPxk.id,
100
+ ownerPlainDataSig,
101
+ },
102
+ },
103
+ });
104
+ });
105
+ }
106
+ }
107
+ SharedContactCardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SharedContactCardService_Factory() { return new SharedContactCardService(i0.ɵɵinject(i1.KeyService), i0.ɵɵinject(i2.LrApolloService), i0.ɵɵinject(i3.KeyGraphService), i0.ɵɵinject(i4.EncryptionService)); }, token: SharedContactCardService, providedIn: "root" });
108
+ SharedContactCardService.decorators = [
109
+ { type: Injectable, args: [{
110
+ providedIn: 'root',
111
+ },] }
112
+ ];
113
+ SharedContactCardService.ctorParameters = () => [
114
+ { type: KeyService },
115
+ { type: LrApolloService },
116
+ { type: KeyGraphService },
117
+ { type: EncryptionService }
118
+ ];
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhY3QtY2FyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL3Rlc3QvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL3NoYXJlZC1jb250YWN0LWNhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUM7QUFFOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZUFBZSxFQUF1QixNQUFNLHdCQUF3QixDQUFDO0FBRzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBRXRELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBCdEMsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7OztRQVExQix1QkFBdUI7OztFQUc3QixDQUFDO0FBMkJILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFDVSxVQUFzQixFQUN0QixRQUF5QixFQUN6QixRQUF5QixFQUN6QixpQkFBb0M7UUFIcEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQzNDLENBQUM7SUFFRSxnQ0FBZ0MsQ0FDcEMsRUFBcUI7O1lBRXJCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTFELHVCQUNFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUNULFVBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFDMUIsV0FBVyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUN6QixPQUFPLEVBQ1Y7UUFDSixDQUFDO0tBQUE7SUFFSywwQkFBMEIsQ0FDOUIsRUFBcUI7O1lBRXJCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLGdCQUFnQixFQUFFO2dCQUM3QyxJQUFJO29CQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUN6QyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQzlDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FDcEIsQ0FBQztpQkFDSDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMxRDthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQUE7SUFFSyx5QkFBeUIsQ0FDN0IsRUFBVSxFQUNWLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLFdBQWdDOztZQUVoQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQzNELFNBQVMsQ0FBQyxHQUFHLEVBQ2IsV0FBVyxDQUNaLENBQUM7WUFDRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ3hDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQ2hFLENBQUM7WUFFRixNQUFNLGNBQWMsR0FBRztnQkFDckIsSUFBSSxFQUFFLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7YUFDNUMsQ0FBQztZQUNGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDdEMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQzlELENBQUM7WUFFRixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUF5QjtnQkFDakQsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRTt3QkFDTCxFQUFFO3dCQUNGLGVBQWUsRUFBRSxFQUFFO3dCQUNuQixVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO3dCQUN6QixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7d0JBQ25CLGlCQUFpQjtxQkFDbEI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7Ozs7WUEvRUYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUF4RVEsVUFBVTtZQUtWLGVBQWU7WUFOZixlQUFlO1lBRGYsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgZ3FsIGZyb20gJ2dyYXBocWwtdGFnJztcclxuaW1wb3J0IHsgS2V5IH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeS50eXBlcyc7XHJcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XHJcbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaGFyZWRUcnVzdGVkUGFydHlEZXRhaWxzIH0gZnJvbSAnLi4vdHJ1c3RlZC1wYXJ0aWVzL3RydXN0ZWQtcGFydHkudHlwZXMnO1xyXG5pbXBvcnQgeyBDb250YWN0Q2FyZE5hbWUsIFRydXN0ZWRQYXJ0eURldGFpbHMgfSBmcm9tICcuLi91c2Vycy9wcm9maWxlLnR5cGVzJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uL3VzZXJzL3VzZXIudHlwZXMnO1xyXG5pbXBvcnQgeyBLZXlHcmFwaEZpZWxkIH0gZnJvbSAnLi4vX2NvbW1vbi9xdWVyaWVzLmdxbCc7XHJcbmltcG9ydCB7IExyQXBvbGxvU2VydmljZSB9IGZyb20gJy4vbHItYXBvbGxvLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNoYXJlZENvbnRhY3RDYXJkRmllbGRzID0gYFxyXG4gIGlkXHJcbiAgb3duZXIge1xyXG4gICAgaWRcclxuICAgIHVzZXJuYW1lXHJcbiAgfVxyXG4gIG93bmVyS2V5IHtcclxuICAgIGlkXHJcbiAgfVxyXG4gIG93bmVyQ2lwaGVyRGF0YVxyXG4gIHJlY2VpdmVyIHtcclxuICAgIGlkXHJcbiAgICB1c2VybmFtZVxyXG4gIH1cclxuICByZWNlaXZlcktleSB7XHJcbiAgICBpZFxyXG4gIH1cclxuICByZWNlaXZlckNpcGhlckRhdGFcclxuICBzaGFyZWRLZXkge1xyXG4gICAgaWRcclxuICB9XHJcbiAgc2hhcmVkQ2lwaGVyRGF0YVxyXG4gIHNoYXJlZENpcGhlckRhdGFTaWdcclxuICBzaGFyZWRDaXBoZXJEYXRhU2lnUHhrIHtcclxuICAgIGlkXHJcbiAgfVxyXG5gO1xyXG5cclxuY29uc3QgVXBkYXRlT3duZWRDb250YWN0Q2FyZCA9IGdxbGBcclxubXV0YXRpb24gVXBkYXRlT3duZWRDb250YWN0Q2FyZChcclxuICAkaW5wdXQ6IFVwZGF0ZU93bmVkQ29udGFjdENhcmRJbnB1dCFcclxuKSB7XHJcbiAgdXBkYXRlT3duZWRDb250YWN0Q2FyZChcclxuICAgIGlucHV0OiAkaW5wdXRcclxuICApIHtcclxuICAgIG93bmVkQ29udGFjdENhcmQge1xyXG4gICAgICAke1NoYXJlZENvbnRhY3RDYXJkRmllbGRzfVxyXG4gICAgfVxyXG4gIH1cclxufWA7XHJcblxyXG5pbnRlcmZhY2UgVXBkYXRlT3duZWRDb250YWN0Q2FyZCB7XHJcbiAgdXBkYXRlT3duZWRDb250YWN0Q2FyZDoge1xyXG4gICAgb3duZWRDb250YWN0Q2FyZDogU2hhcmVkQ29udGFjdENhcmQ7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaGFyZWRDb250YWN0Q2FyZCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBvd25lcjogVXNlcjtcclxuICBvd25lcktleTogS2V5O1xyXG4gIG93bmVyQ2lwaGVyRGF0YTogc3RyaW5nO1xyXG4gIHJlY2VpdmVyOiBVc2VyO1xyXG4gIHJlY2VpdmVyS2V5OiBLZXk7XHJcbiAgcmVjZWl2ZXJDaXBoZXJEYXRhOiBzdHJpbmc7XHJcbiAgc2hhcmVkS2V5OiBLZXk7XHJcbiAgc2hhcmVkQ2lwaGVyRGF0YTogc3RyaW5nO1xyXG4gIC8vIERlY3J5cHRlZFxyXG4gIHBsYWluT3duZXJDaXBoZXJEYXRhSnNvbjogYW55O1xyXG4gIHBsYWluUmVjZWl2ZXJDaXBoZXJEYXRhSnNvbjogYW55O1xyXG4gIHBsYWluU2hhcmVkQ2lwaGVyRGF0YUpzb246IGFueTtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNoYXJlZENvbnRhY3RDYXJkU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxyQXBvbGxvOiBMckFwb2xsb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgYXN5bmMgZGVjcnlwdFNoYXJlZFRydXN0ZWRQYXJ0eURldGFpbHMoXHJcbiAgICBjYzogU2hhcmVkQ29udGFjdENhcmRcclxuICApOiBQcm9taXNlPFNoYXJlZFRydXN0ZWRQYXJ0eURldGFpbHM+IHtcclxuICAgIGNvbnN0IGRldGFpbHMgPSBhd2FpdCB0aGlzLmRlY3J5cHRUcnVzdGVkUGFydHlEZXRhaWxzKGNjKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogY2MuaWQsXHJcbiAgICAgIG93bmVkS2V5SWQ6IGNjLm93bmVyS2V5LmlkLFxyXG4gICAgICBzaGFyZWRLZXlJZDogY2Muc2hhcmVkS2V5LmlkLFxyXG4gICAgICAuLi5kZXRhaWxzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlY3J5cHRUcnVzdGVkUGFydHlEZXRhaWxzKFxyXG4gICAgY2M6IFNoYXJlZENvbnRhY3RDYXJkXHJcbiAgKTogUHJvbWlzZTxUcnVzdGVkUGFydHlEZXRhaWxzPiB7XHJcbiAgICBpZiAoY2MgJiYgY2Muc2hhcmVkS2V5ICYmIGNjLnNoYXJlZENpcGhlckRhdGEpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5kZWNyeXB0KFxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRKd2tLZXkoY2Muc2hhcmVkS2V5LmlkKSxcclxuICAgICAgICAgIGNjLnNoYXJlZENpcGhlckRhdGFcclxuICAgICAgICApO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IGRlY3J5cHQgdHJ1c3RlZCBwYXJ0eSBkZXRhaWxzJywgZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlTXlTaGFyZWRDb250YWN0Q2FyZChcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICBvd25lZEtleUlkOiBzdHJpbmcsXHJcbiAgICBzaGFyZWRLZXlJZDogc3RyaW5nLFxyXG4gICAgY29udGFjdENhcmQ6IFRydXN0ZWRQYXJ0eURldGFpbHNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IG93bmVyS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkob3duZWRLZXlJZCk7XHJcbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShzaGFyZWRLZXlJZCk7XHJcbiAgICBjb25zdCBzaWdQeGsgPSBhd2FpdCB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFNpZ1B4aygpO1xyXG5cclxuICAgIGNvbnN0IHNoYXJlZENpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQoXHJcbiAgICAgIHNoYXJlZEtleS5qd2ssXHJcbiAgICAgIGNvbnRhY3RDYXJkXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2hhcmVkQ2lwaGVyRGF0YVNpZyA9IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnNpZ24oc2lnUHhrLmp3aywgc2hhcmVkQ2lwaGVyRGF0YSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3duZXJQbGFpbkRhdGEgPSB7XHJcbiAgICAgIG5hbWU6IG5ldyBDb250YWN0Q2FyZE5hbWUoY29udGFjdENhcmQubmFtZSksXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgb3duZXJQbGFpbkRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcclxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssIG93bmVyUGxhaW5EYXRhKVxyXG4gICAgKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZTxVcGRhdGVPd25lZENvbnRhY3RDYXJkPih7XHJcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVPd25lZENvbnRhY3RDYXJkLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICBvd25lckNpcGhlckRhdGE6ICcnLFxyXG4gICAgICAgICAgb3duZXJLZXlJZDogb3duZXJLZXkuaWQsXHJcbiAgICAgICAgICBzaGFyZWRDaXBoZXJEYXRhU2lnLFxyXG4gICAgICAgICAgc2hhcmVkS2V5SWQ6IHNoYXJlZEtleS5pZCxcclxuICAgICAgICAgIHNpZ1B4a0lkOiBzaWdQeGsuaWQsXHJcbiAgICAgICAgICBvd25lclBsYWluRGF0YVNpZyxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,41 @@
1
+ import { gqlTyped } from '../_common/ast';
2
+ export const UpdateOwnedContactCardMutation = gqlTyped `
3
+ mutation UpdateOwnedContactCardMutation(
4
+ $input: UpdateOwnedContactCardInput!
5
+ ) {
6
+ updateOwnedContactCard(input: $input) {
7
+ ownedContactCard {
8
+ id
9
+ }
10
+ }
11
+ }`;
12
+ export const UpdateReceivedContactCardMutation = gqlTyped `
13
+ mutation UpdateReceivedContactCardMutation(
14
+ $input: UpdateReceivedContactCardInput!
15
+ ) {
16
+ updateReceivedContactCard(input: $input) {
17
+ receivedContactCard {
18
+ id
19
+ }
20
+ }
21
+ }`;
22
+ export const GetOwnedContactCardKeyIdsQuery = gqlTyped `
23
+ query GetOwnedContactCardKeyIdsQuery($id: LrRelayIdInput!) {
24
+ ownedContactCard(id: $id) {
25
+ sharedKey {
26
+ id
27
+ }
28
+ ownerKey {
29
+ id
30
+ }
31
+ }
32
+ }`;
33
+ export const GetReceivedContactCardKeyIdQuery = gqlTyped `
34
+ query GetReceivedContactCardKeyIdQuery($id: LrRelayIdInput!) {
35
+ receivedContactCard(id: $id) {
36
+ receiverKey {
37
+ id
38
+ }
39
+ }
40
+ }`;
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhY3QtY2FyZDIuZ3FsLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL3Rlc3QvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL3NoYXJlZC1jb250YWN0LWNhcmQyLmdxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFVMUMsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsUUFBUSxDQUFnQzs7Ozs7Ozs7O0VBU3BGLENBQUM7QUFTSCxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxRQUFRLENBQW1DOzs7Ozs7Ozs7RUFTMUYsQ0FBQztBQVlILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLFFBQVEsQ0FBZ0M7Ozs7Ozs7Ozs7RUFVcEYsQ0FBQztBQVNILE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLFFBQVEsQ0FBa0M7Ozs7Ozs7RUFPeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdxbFR5cGVkIH0gZnJvbSAnLi4vX2NvbW1vbi9hc3QnO1xyXG5pbXBvcnQgeyBJRCB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24ge1xyXG4gIHVwZGF0ZU93bmVkQ29udGFjdENhcmQ6IHtcclxuICAgIG93bmVkQ29udGFjdENhcmQ6IHtcclxuICAgICAgaWQ6IElEO1xyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBjb25zdCBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24gPSBncWxUeXBlZDxVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24+YFxyXG5tdXRhdGlvbiBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24oXHJcbiAgJGlucHV0OiBVcGRhdGVPd25lZENvbnRhY3RDYXJkSW5wdXQhXHJcbikge1xyXG4gIHVwZGF0ZU93bmVkQ29udGFjdENhcmQoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgb3duZWRDb250YWN0Q2FyZCB7XHJcbiAgICAgIGlkXHJcbiAgICB9XHJcbiAgfVxyXG59YDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZE11dGF0aW9uIHtcclxuICB1cGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkOiB7XHJcbiAgICByZWNlaXZlZENvbnRhY3RDYXJkOiB7XHJcbiAgICAgIGlkOiBJRDtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgVXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZE11dGF0aW9uID0gZ3FsVHlwZWQ8VXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZE11dGF0aW9uPmBcclxubXV0YXRpb24gVXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZE11dGF0aW9uKFxyXG4gICRpbnB1dDogVXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZElucHV0IVxyXG4pIHtcclxuICB1cGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkKGlucHV0OiAkaW5wdXQpIHtcclxuICAgIHJlY2VpdmVkQ29udGFjdENhcmQge1xyXG4gICAgICBpZFxyXG4gICAgfVxyXG4gIH1cclxufWA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeSB7XHJcbiAgb3duZWRDb250YWN0Q2FyZDoge1xyXG4gICAgc2hhcmVkS2V5OiB7XHJcbiAgICAgIGlkOiBJRDtcclxuICAgIH07XHJcbiAgICBvd25lcktleToge1xyXG4gICAgICBpZDogSUQ7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuZXhwb3J0IGNvbnN0IEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeSA9IGdxbFR5cGVkPEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeT5gXHJcbnF1ZXJ5IEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeSgkaWQ6IExyUmVsYXlJZElucHV0ISkge1xyXG4gIG93bmVkQ29udGFjdENhcmQoaWQ6ICRpZCkge1xyXG4gICAgc2hhcmVkS2V5IHtcclxuICAgICAgaWRcclxuICAgIH1cclxuICAgIG93bmVyS2V5IHtcclxuICAgICAgaWRcclxuICAgIH1cclxuICB9XHJcbn1gO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHZXRSZWNlaXZlZENvbnRhY3RDYXJkS2V5SWRRdWVyeSB7XHJcbiAgcmVjZWl2ZWRDb250YWN0Q2FyZDoge1xyXG4gICAgcmVjZWl2ZXJLZXk6IHtcclxuICAgICAgaWQ6IElEO1xyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBjb25zdCBHZXRSZWNlaXZlZENvbnRhY3RDYXJkS2V5SWRRdWVyeSA9IGdxbFR5cGVkPEdldFJlY2VpdmVkQ29udGFjdENhcmRLZXlJZFF1ZXJ5PmBcclxucXVlcnkgR2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkUXVlcnkoJGlkOiBMclJlbGF5SWRJbnB1dCEpIHtcclxuICByZWNlaXZlZENvbnRhY3RDYXJkKGlkOiAkaWQpIHtcclxuICAgIHJlY2VpdmVyS2V5IHtcclxuICAgICAgaWRcclxuICAgIH1cclxuICB9XHJcbn1gO1xyXG4iXX0=