@lifeready/core 1.0.15 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +62 -62
  2. package/bundles/lifeready-core.umd.js +14315 -14315
  3. package/bundles/lifeready-core.umd.js.map +1 -1
  4. package/bundles/lifeready-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/_common/ast.js +40 -40
  6. package/esm2015/lib/_common/deferred-promise.js +24 -24
  7. package/esm2015/lib/_common/exceptions.js +157 -157
  8. package/esm2015/lib/_common/queries.gql.js +190 -190
  9. package/esm2015/lib/_common/run-outside-angular.js +79 -79
  10. package/esm2015/lib/_common/types.js +1 -1
  11. package/esm2015/lib/_common/utils.js +52 -52
  12. package/esm2015/lib/api/contact-card.gql.js +79 -79
  13. package/esm2015/lib/api/contact-card.service.js +154 -154
  14. package/esm2015/lib/api/contact-card2.gql.js +60 -60
  15. package/esm2015/lib/api/contact-card2.service.js +103 -103
  16. package/esm2015/lib/api/file.service.js +74 -74
  17. package/esm2015/lib/api/key-exchange.gql.js +188 -188
  18. package/esm2015/lib/api/key-exchange.service.js +442 -442
  19. package/esm2015/lib/api/key-exchange.types.js +18 -18
  20. package/esm2015/lib/api/key-exchange2.gql.js +171 -171
  21. package/esm2015/lib/api/key-exchange2.service.js +479 -479
  22. package/esm2015/lib/api/lock.gql.js +40 -40
  23. package/esm2015/lib/api/lock.service.js +64 -64
  24. package/esm2015/lib/api/lr-apollo.service.js +46 -46
  25. package/esm2015/lib/api/lr-graphql/index.js +6 -6
  26. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
  27. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
  28. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
  29. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
  30. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
  31. package/esm2015/lib/api/message.service.js +138 -138
  32. package/esm2015/lib/api/persist.service.js +181 -181
  33. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
  34. package/esm2015/lib/api/query-processor/index.js +3 -3
  35. package/esm2015/lib/api/query-processor/query-processor.service.js +262 -262
  36. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
  37. package/esm2015/lib/api/shared-contact-card.service.js +119 -119
  38. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
  39. package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
  40. package/esm2015/lib/api/time.service.js +146 -146
  41. package/esm2015/lib/api/types/graphql.types.js +7 -7
  42. package/esm2015/lib/api/types/index.js +3 -3
  43. package/esm2015/lib/api/types/lr-graphql.types.js +101 -101
  44. package/esm2015/lib/auth/auth.config.js +57 -57
  45. package/esm2015/lib/auth/auth.gql.js +48 -48
  46. package/esm2015/lib/auth/auth.types.js +27 -27
  47. package/esm2015/lib/auth/idle.service.js +168 -168
  48. package/esm2015/lib/auth/idle.types.js +7 -7
  49. package/esm2015/lib/auth/lbop.service.js +355 -355
  50. package/esm2015/lib/auth/life-ready-auth.service.js +488 -488
  51. package/esm2015/lib/auth/password.service.js +320 -320
  52. package/esm2015/lib/auth/register.service.js +172 -172
  53. package/esm2015/lib/auth/two-factor.service.js +74 -74
  54. package/esm2015/lib/category/category-meta.service.js +99 -99
  55. package/esm2015/lib/category/category.gql.js +406 -406
  56. package/esm2015/lib/category/category.service.js +390 -390
  57. package/esm2015/lib/category/category.types.js +29 -29
  58. package/esm2015/lib/cryptography/cryptography.types.js +11 -11
  59. package/esm2015/lib/cryptography/encryption.service.js +189 -189
  60. package/esm2015/lib/cryptography/key-factory.service.js +237 -237
  61. package/esm2015/lib/cryptography/key-graph.service.js +299 -299
  62. package/esm2015/lib/cryptography/key-meta.service.js +200 -200
  63. package/esm2015/lib/cryptography/key.service.js +124 -124
  64. package/esm2015/lib/cryptography/slip39.service.js +169 -169
  65. package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
  66. package/esm2015/lib/items2/item2.gql.js +139 -139
  67. package/esm2015/lib/items2/item2.service.js +498 -498
  68. package/esm2015/lib/items2/item2.types.js +1 -1
  69. package/esm2015/lib/life-ready.config.js +84 -84
  70. package/esm2015/lib/life-ready.module.js +74 -74
  71. package/esm2015/lib/notification/notification.gql.js +43 -43
  72. package/esm2015/lib/notification/notification.service.js +118 -118
  73. package/esm2015/lib/plan/plan.gql.js +123 -123
  74. package/esm2015/lib/plan/plan.service.js +149 -149
  75. package/esm2015/lib/plan/plan.types.js +11 -11
  76. package/esm2015/lib/record/record-attachment.service.js +101 -101
  77. package/esm2015/lib/record/record.gql.js +179 -179
  78. package/esm2015/lib/record/record.service.js +206 -206
  79. package/esm2015/lib/record/record.types.js +15 -15
  80. package/esm2015/lib/record-type/record-type.service.js +75 -75
  81. package/esm2015/lib/record-type/record-type.types.js +28 -28
  82. package/esm2015/lib/scenario/scenario.constants.js +2 -2
  83. package/esm2015/lib/scenario/scenario.controller.js +34 -34
  84. package/esm2015/lib/scenario/scenario.gql.js +72 -72
  85. package/esm2015/lib/scenario/scenario.gql.private.js +198 -198
  86. package/esm2015/lib/scenario/scenario.service.js +538 -538
  87. package/esm2015/lib/scenario/scenario.types.js +1 -1
  88. package/esm2015/lib/trusted-parties/tp-assembly.gql.private.js +22 -22
  89. package/esm2015/lib/trusted-parties/tp-assembly.js +362 -362
  90. package/esm2015/lib/trusted-parties/tp-assembly.types.js +1 -1
  91. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +113 -113
  92. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
  93. package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
  94. package/esm2015/lib/trusted-parties/tp-password-reset.controller.js +34 -34
  95. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +236 -236
  96. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +95 -95
  97. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
  98. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
  99. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
  100. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
  101. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
  102. package/esm2015/lib/users/profile-details.service.js +214 -214
  103. package/esm2015/lib/users/profile.gql.js +97 -97
  104. package/esm2015/lib/users/profile.service.js +169 -169
  105. package/esm2015/lib/users/profile.types.js +34 -34
  106. package/esm2015/lib/users/user.gql.js +60 -60
  107. package/esm2015/lib/users/user.service.js +79 -79
  108. package/esm2015/lib/users/user.types.js +5 -5
  109. package/esm2015/lifeready-core.js +13 -13
  110. package/esm2015/public-api.js +71 -71
  111. package/fesm2015/lifeready-core.js +12258 -12258
  112. package/fesm2015/lifeready-core.js.map +1 -1
  113. package/lib/_common/ast.d.ts +11 -11
  114. package/lib/_common/deferred-promise.d.ts +12 -12
  115. package/lib/_common/exceptions.d.ts +109 -109
  116. package/lib/_common/queries.gql.d.ts +10 -10
  117. package/lib/_common/run-outside-angular.d.ts +14 -14
  118. package/lib/_common/types.d.ts +10 -10
  119. package/lib/_common/utils.d.ts +9 -9
  120. package/lib/api/contact-card.gql.d.ts +7 -7
  121. package/lib/api/contact-card.service.d.ts +52 -52
  122. package/lib/api/contact-card2.gql.d.ts +34 -34
  123. package/lib/api/contact-card2.service.d.ts +49 -49
  124. package/lib/api/file.service.d.ts +18 -18
  125. package/lib/api/key-exchange.gql.d.ts +9 -9
  126. package/lib/api/key-exchange.service.d.ts +39 -39
  127. package/lib/api/key-exchange.types.d.ts +196 -196
  128. package/lib/api/key-exchange2.gql.d.ts +125 -125
  129. package/lib/api/key-exchange2.service.d.ts +187 -187
  130. package/lib/api/lock.gql.d.ts +27 -27
  131. package/lib/api/lock.service.d.ts +34 -34
  132. package/lib/api/lr-apollo.service.d.ts +15 -15
  133. package/lib/api/lr-graphql/index.d.ts +5 -5
  134. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
  135. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +28 -28
  136. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
  137. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
  138. package/lib/api/lr-graphql/lr.service.d.ts +9 -9
  139. package/lib/api/message.service.d.ts +58 -58
  140. package/lib/api/persist.service.d.ts +31 -31
  141. package/lib/api/query-processor/common-processors.service.d.ts +36 -36
  142. package/lib/api/query-processor/index.d.ts +2 -2
  143. package/lib/api/query-processor/query-processor.service.d.ts +18 -18
  144. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
  145. package/lib/api/shared-contact-card.service.d.ts +33 -33
  146. package/lib/api/shared-contact-card2.gql.d.ts +36 -36
  147. package/lib/api/shared-contact-card2.service.d.ts +45 -45
  148. package/lib/api/time.service.d.ts +16 -16
  149. package/lib/api/types/graphql.types.d.ts +29 -29
  150. package/lib/api/types/index.d.ts +2 -2
  151. package/lib/api/types/lr-graphql.types.d.ts +502 -502
  152. package/lib/auth/auth.config.d.ts +5 -5
  153. package/lib/auth/auth.gql.d.ts +15 -15
  154. package/lib/auth/auth.types.d.ts +66 -66
  155. package/lib/auth/idle.service.d.ts +40 -40
  156. package/lib/auth/idle.types.d.ts +10 -10
  157. package/lib/auth/lbop.service.d.ts +91 -91
  158. package/lib/auth/life-ready-auth.service.d.ts +61 -61
  159. package/lib/auth/password.service.d.ts +78 -78
  160. package/lib/auth/register.service.d.ts +25 -25
  161. package/lib/auth/two-factor.service.d.ts +15 -15
  162. package/lib/category/category-meta.service.d.ts +23 -23
  163. package/lib/category/category.gql.d.ts +45 -45
  164. package/lib/category/category.service.d.ts +67 -67
  165. package/lib/category/category.types.d.ts +79 -79
  166. package/lib/cryptography/cryptography.types.d.ts +83 -83
  167. package/lib/cryptography/encryption.service.d.ts +41 -41
  168. package/lib/cryptography/key-factory.service.d.ts +38 -38
  169. package/lib/cryptography/key-graph.service.d.ts +41 -41
  170. package/lib/cryptography/key-meta.service.d.ts +44 -44
  171. package/lib/cryptography/key.service.d.ts +36 -36
  172. package/lib/cryptography/slip39.service.d.ts +43 -43
  173. package/lib/cryptography/web-crypto.service.d.ts +5 -5
  174. package/lib/items2/item2.gql.d.ts +123 -123
  175. package/lib/items2/item2.service.d.ts +203 -203
  176. package/lib/items2/item2.types.d.ts +70 -70
  177. package/lib/life-ready.config.d.ts +14 -14
  178. package/lib/life-ready.module.d.ts +5 -5
  179. package/lib/notification/notification.gql.d.ts +37 -37
  180. package/lib/notification/notification.service.d.ts +63 -63
  181. package/lib/plan/plan.gql.d.ts +11 -11
  182. package/lib/plan/plan.service.d.ts +33 -33
  183. package/lib/plan/plan.types.d.ts +31 -31
  184. package/lib/record/record-attachment.service.d.ts +16 -16
  185. package/lib/record/record.gql.d.ts +14 -14
  186. package/lib/record/record.service.d.ts +25 -25
  187. package/lib/record/record.types.d.ts +57 -57
  188. package/lib/record-type/record-type.service.d.ts +11 -11
  189. package/lib/record-type/record-type.types.d.ts +50 -50
  190. package/lib/scenario/scenario.constants.d.ts +1 -1
  191. package/lib/scenario/scenario.controller.d.ts +10 -10
  192. package/lib/scenario/scenario.gql.d.ts +62 -62
  193. package/lib/scenario/scenario.gql.private.d.ts +16 -16
  194. package/lib/scenario/scenario.service.d.ts +233 -233
  195. package/lib/scenario/scenario.types.d.ts +50 -50
  196. package/lib/trusted-parties/tp-assembly.d.ts +177 -177
  197. package/lib/trusted-parties/tp-assembly.gql.private.d.ts +5 -5
  198. package/lib/trusted-parties/tp-assembly.types.d.ts +38 -38
  199. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
  200. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
  201. package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
  202. package/lib/trusted-parties/tp-password-reset.controller.d.ts +10 -10
  203. package/lib/trusted-parties/tp-password-reset.gql.d.ts +223 -223
  204. package/lib/trusted-parties/tp-password-reset.service.d.ts +188 -188
  205. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
  206. package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
  207. package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
  208. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
  209. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
  210. package/lib/users/profile-details.service.d.ts +21 -21
  211. package/lib/users/profile.gql.d.ts +11 -11
  212. package/lib/users/profile.service.d.ts +35 -35
  213. package/lib/users/profile.types.d.ts +96 -96
  214. package/lib/users/user.gql.d.ts +9 -9
  215. package/lib/users/user.service.d.ts +12 -12
  216. package/lib/users/user.types.d.ts +23 -23
  217. package/lifeready-core.d.ts +12 -12
  218. package/package.json +1 -1
  219. package/public-api.d.ts +67 -67
@@ -1,154 +1,154 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { EncryptionService } from '../cryptography/encryption.service';
4
- import { KeyGraphService } from '../cryptography/key-graph.service';
5
- import { KeyService } from '../cryptography/key.service';
6
- import { LrApolloService } from './lr-apollo.service';
7
- import { SearchContactCardQuery, ContactCardListQuery, ContactCardQuery, CreateContactCardMutation, UpdateContactCardMutation, DeleteContactCardMutation, } from './contact-card.gql';
8
- import { KeyFactoryService } from '../cryptography/key-factory.service';
9
- import { KeyMetaService } from '../cryptography/key-meta.service';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "../cryptography/key-factory.service";
12
- import * as i2 from "../cryptography/key.service";
13
- import * as i3 from "./lr-apollo.service";
14
- import * as i4 from "../cryptography/key-graph.service";
15
- import * as i5 from "../cryptography/encryption.service";
16
- import * as i6 from "../cryptography/key-meta.service";
17
- export class ContactCard {
18
- }
19
- export class ContactCardService {
20
- constructor(keyFactory, keyService, lrApollo, keyGraph, encryptionService, keyMetaService) {
21
- this.keyFactory = keyFactory;
22
- this.keyService = keyService;
23
- this.lrApollo = lrApollo;
24
- this.keyGraph = keyGraph;
25
- this.encryptionService = encryptionService;
26
- this.keyMetaService = keyMetaService;
27
- }
28
- decryptContactCard(cc) {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- const ret = Object.assign(Object.assign({}, cc), { publicDataJson: JSON.parse(cc.publicData), publicSearchableJson: JSON.parse(cc.publicSearchable) });
31
- if (cc.key) {
32
- const key = yield this.keyGraph.getJwkKey(cc.key.id);
33
- // TODO: verify signature
34
- ret.plainCipherDataJson = yield this.encryptionService.decrypt(key, cc.cipherData);
35
- }
36
- return ret;
37
- });
38
- }
39
- decryptContactCardEdges(hasEdges) {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- return Promise.all(hasEdges.edges.map((edge) => __awaiter(this, void 0, void 0, function* () {
42
- const cc = edge.node;
43
- return yield this.decryptContactCard(cc);
44
- })));
45
- });
46
- }
47
- // { "filter": [{ "contains": { "a": true } }] }
48
- searchContactCard(publicSearchable) {
49
- return __awaiter(this, void 0, void 0, function* () {
50
- const data = yield this.lrApollo.query({
51
- query: SearchContactCardQuery,
52
- variables: {
53
- publicSearchable: JSON.stringify(publicSearchable),
54
- },
55
- });
56
- return yield this.decryptContactCardEdges(data.searchContactCards);
57
- });
58
- }
59
- getContactCardList() {
60
- return __awaiter(this, void 0, void 0, function* () {
61
- const data = yield this.lrApollo.query({
62
- query: ContactCardListQuery,
63
- });
64
- return yield this.decryptContactCardEdges(data.contactCards);
65
- });
66
- }
67
- getContactCard(id) {
68
- return __awaiter(this, void 0, void 0, function* () {
69
- const data = yield this.lrApollo.query({
70
- query: ContactCardQuery,
71
- variables: {
72
- id,
73
- },
74
- });
75
- return yield this.decryptContactCard(data.contactCard);
76
- });
77
- }
78
- prepareContactCardInput(input) {
79
- return __awaiter(this, void 0, void 0, function* () {
80
- const sigPxk = yield this.keyService.getCurrentSigPxk();
81
- const publicDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, input.publicDataJson));
82
- const publicSearchableSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, input.publicSearchableJson));
83
- const plainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, input.plainDataJson));
84
- return {
85
- sigPxkId: sigPxk.id,
86
- publicDataSig,
87
- publicSearchableSig,
88
- plainDataSig,
89
- };
90
- });
91
- }
92
- createContactCard(input) {
93
- return __awaiter(this, void 0, void 0, function* () {
94
- // Get encryption key
95
- const rootKey = yield this.keyService.getCurrentRootKey();
96
- const key = yield this.keyFactory.createKey();
97
- const wrappedKey = yield this.keyGraph.encryptToString(rootKey.jwk, key.toJSON(true));
98
- const cipherData = yield this.keyGraph.encryptToString(key, input.plainCipherDataJson);
99
- const params = yield this.prepareContactCardInput(input);
100
- const data = yield this.lrApollo.mutate({
101
- mutation: CreateContactCardMutation,
102
- variables: {
103
- input: Object.assign(Object.assign({}, params), { wrappingKeyId: rootKey.id, wrappedKey,
104
- cipherData }),
105
- },
106
- });
107
- return data.createContactCard.contactCard;
108
- });
109
- }
110
- updateContactCard(input) {
111
- return __awaiter(this, void 0, void 0, function* () {
112
- // Get encryption key
113
- const cc = yield this.getContactCard(input.id);
114
- const key = yield this.keyGraph.getJwkKey(cc.key.id);
115
- const cipherData = yield this.keyGraph.encryptToString(key, input.plainCipherDataJson);
116
- const params = yield this.prepareContactCardInput(input);
117
- const data = yield this.lrApollo.mutate({
118
- mutation: UpdateContactCardMutation,
119
- variables: {
120
- input: Object.assign(Object.assign({}, params), { id: input.id, cipherData }),
121
- },
122
- });
123
- return data.updateContactCard.contactCard;
124
- });
125
- }
126
- deleteContactCard(id) {
127
- return __awaiter(this, void 0, void 0, function* () {
128
- const data = yield this.lrApollo.mutate({
129
- mutation: DeleteContactCardMutation,
130
- variables: {
131
- input: {
132
- id,
133
- },
134
- },
135
- });
136
- return data.deleteContactCard.id;
137
- });
138
- }
139
- }
140
- ContactCardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ContactCardService_Factory() { return new ContactCardService(i0.ɵɵinject(i1.KeyFactoryService), i0.ɵɵinject(i2.KeyService), i0.ɵɵinject(i3.LrApolloService), i0.ɵɵinject(i4.KeyGraphService), i0.ɵɵinject(i5.EncryptionService), i0.ɵɵinject(i6.KeyMetaService)); }, token: ContactCardService, providedIn: "root" });
141
- ContactCardService.decorators = [
142
- { type: Injectable, args: [{
143
- providedIn: 'root',
144
- },] }
145
- ];
146
- ContactCardService.ctorParameters = () => [
147
- { type: KeyFactoryService },
148
- { type: KeyService },
149
- { type: LrApolloService },
150
- { type: KeyGraphService },
151
- { type: EncryptionService },
152
- { type: KeyMetaService }
153
- ];
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1jYXJkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMva2MtY2xpZW50L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FwaS9jb250YWN0LWNhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7O0FBY2xFLE1BQU0sT0FBTyxXQUFXO0NBZ0J2QjtBQWdCRCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQ1UsVUFBNkIsRUFDN0IsVUFBc0IsRUFDdEIsUUFBeUIsRUFDekIsUUFBeUIsRUFDekIsaUJBQW9DLEVBQ3BDLGNBQThCO1FBTDlCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDckMsQ0FBQztJ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QWU7WUFEZixpQkFBaUI7WUFlakIsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSGFzS2V5R3JhcGgsIEtleSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHkudHlwZXMnO1xyXG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9lbmNyeXB0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGFzRWRnZXMgfSBmcm9tICcuLi9fY29tbW9uL3R5cGVzJztcclxuaW1wb3J0IHsgTHJBcG9sbG9TZXJ2aWNlIH0gZnJvbSAnLi9sci1hcG9sbG8uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoQ29udGFjdENhcmRRdWVyeSxcclxuICBDb250YWN0Q2FyZExpc3RRdWVyeSxcclxuICBDb250YWN0Q2FyZFF1ZXJ5LFxyXG4gIENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24sXHJcbiAgVXBkYXRlQ29udGFjdENhcmRNdXRhdGlvbixcclxuICBEZWxldGVDb250YWN0Q2FyZE11dGF0aW9uLFxyXG59IGZyb20gJy4vY29udGFjdC1jYXJkLmdxbCc7XHJcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYWluQ29udGFjdENhcmRQbGFpbkZpZWxkcyB9IGZyb20gJy4uL3VzZXJzL3Byb2ZpbGUudHlwZXMnO1xyXG5pbXBvcnQgeyBLZXlNZXRhU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktbWV0YS5zZXJ2aWNlJztcclxuXHJcbmludGVyZmFjZSBDb250YWN0Q2FyZFF1ZXJ5IGV4dGVuZHMgSGFzS2V5R3JhcGgge1xyXG4gIGNvbnRhY3RDYXJkOiBDb250YWN0Q2FyZDtcclxufVxyXG5cclxuaW50ZXJmYWNlIFNlYXJjaENvbnRhY3RDYXJkUXVlcnkgZXh0ZW5kcyBIYXNLZXlHcmFwaCB7XHJcbiAgc2VhcmNoQ29udGFjdENhcmRzOiBIYXNFZGdlczxDb250YWN0Q2FyZD47XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb250YWN0Q2FyZExpc3RRdWVyeSBleHRlbmRzIEhhc0tleUdyYXBoIHtcclxuICBjb250YWN0Q2FyZHM6IEhhc0VkZ2VzPENvbnRhY3RDYXJkPjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbnRhY3RDYXJkIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGtleTogS2V5O1xyXG4gIHNpZ1B4azogS2V5O1xyXG4gIHB1YmxpY0RhdGE6IHN0cmluZztcclxuICBwdWJsaWNEYXRhU2lnOiBzdHJpbmc7XHJcbiAgcHVibGljU2VhcmNoYWJsZTogc3RyaW5nO1xyXG4gIHB1YmxpY1NlYXJjaGFibGVTaWc6IHN0cmluZztcclxuICBwbGFpbkRhdGE6IHN0cmluZztcclxuICBwbGFpbkRhdGFTaWc6IHN0cmluZztcclxuICBjaXBoZXJEYXRhOiBzdHJpbmc7XHJcbiAgLy8gUGFyc2UvZGVjcnlwdGVkIHZlcnNpb25zIG9mIHRoZSBhYm92ZS5cclxuICBwdWJsaWNEYXRhSnNvbjogYW55O1xyXG4gIHB1YmxpY1NlYXJjaGFibGVKc29uOiBhbnk7XHJcbiAgcGxhaW5DaXBoZXJEYXRhSnNvbjogYW55O1xyXG4gIHBsYWluRGF0YUpzb246IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVDb250YWN0Q2FyZElucHV0IHtcclxuICBwdWJsaWNEYXRhSnNvbjogYW55O1xyXG4gIHB1YmxpY1NlYXJjaGFibGVKc29uOiBhbnk7XHJcbiAgcGxhaW5DaXBoZXJEYXRhSnNvbjogYW55O1xyXG4gIHBsYWluRGF0YUpzb246IE1haW5Db250YWN0Q2FyZFBsYWluRmllbGRzO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUNvbnRhY3RDYXJkSW5wdXQgZXh0ZW5kcyBDcmVhdGVDb250YWN0Q2FyZElucHV0IHtcclxuICBpZDogc3RyaW5nO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGFjdENhcmRTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxyQXBvbGxvOiBMckFwb2xsb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUga2V5TWV0YVNlcnZpY2U6IEtleU1ldGFTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBhc3luYyBkZWNyeXB0Q29udGFjdENhcmQoY2M6IENvbnRhY3RDYXJkKTogUHJvbWlzZTxDb250YWN0Q2FyZD4ge1xyXG4gICAgY29uc3QgcmV0ID0ge1xyXG4gICAgICAuLi5jYyxcclxuICAgICAgcHVibGljRGF0YUpzb246IEpTT04ucGFyc2UoY2MucHVibGljRGF0YSksXHJcbiAgICAgIHB1YmxpY1NlYXJjaGFibGVKc29uOiBKU09OLnBhcnNlKGNjLnB1YmxpY1NlYXJjaGFibGUpLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoY2Mua2V5KSB7XHJcbiAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KGNjLmtleS5pZCk7XHJcbiAgICAgIC8vIFRPRE86IHZlcmlmeSBzaWduYXR1cmVcclxuICAgICAgcmV0LnBsYWluQ2lwaGVyRGF0YUpzb24gPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXHJcbiAgICAgICAga2V5LFxyXG4gICAgICAgIGNjLmNpcGhlckRhdGFcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVjcnlwdENvbnRhY3RDYXJkRWRnZXMoXHJcbiAgICBoYXNFZGdlczogSGFzRWRnZXM8Q29udGFjdENhcmQ+XHJcbiAgKTogUHJvbWlzZTxDb250YWN0Q2FyZFtdPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXHJcbiAgICAgIGhhc0VkZ2VzLmVkZ2VzLm1hcChhc3luYyAoZWRnZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2MgPSBlZGdlLm5vZGUgYXMgQ29udGFjdENhcmQ7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVjcnlwdENvbnRhY3RDYXJkKGNjKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyB7IFwiZmlsdGVyXCI6IFt7IFwiY29udGFpbnNcIjogeyBcImFcIjogdHJ1ZSB9IH1dIH1cclxuICBhc3luYyBzZWFyY2hDb250YWN0Q2FyZChwdWJsaWNTZWFyY2hhYmxlOiBvYmplY3QpOiBQcm9taXNlPENvbnRhY3RDYXJkW10+IHtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PFNlYXJjaENvbnRhY3RDYXJkUXVlcnk+KHtcclxuICAgICAgcXVlcnk6IFNlYXJjaENvbnRhY3RDYXJkUXVlcnksXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIHB1YmxpY1NlYXJjaGFibGU6IEpTT04uc3RyaW5naWZ5KHB1YmxpY1NlYXJjaGFibGUpLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVjcnlwdENvbnRhY3RDYXJkRWRnZXMoZGF0YS5zZWFyY2hDb250YWN0Q2FyZHMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Q29udGFjdENhcmRMaXN0KCk6IFByb21pc2U8Q29udGFjdENhcmRbXT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8Q29udGFjdENhcmRMaXN0UXVlcnk+KHtcclxuICAgICAgcXVlcnk6IENvbnRhY3RDYXJkTGlzdFF1ZXJ5LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVjcnlwdENvbnRhY3RDYXJkRWRnZXMoZGF0YS5jb250YWN0Q2FyZHMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Q29udGFjdENhcmQoaWQ6IHN0cmluZyk6IFByb21pc2U8Q29udGFjdENhcmQ+IHtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PENvbnRhY3RDYXJkUXVlcnk+KHtcclxuICAgICAgcXVlcnk6IENvbnRhY3RDYXJkUXVlcnksXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlkLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVjcnlwdENvbnRhY3RDYXJkKGRhdGEuY29udGFjdENhcmQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ29udGFjdENhcmRJbnB1dChcclxuICAgIGlucHV0OiBDcmVhdGVDb250YWN0Q2FyZElucHV0XHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IHNpZ1B4ayA9IGF3YWl0IHRoaXMua2V5U2VydmljZS5nZXRDdXJyZW50U2lnUHhrKCk7XHJcbiAgICBjb25zdCBwdWJsaWNEYXRhU2lnID0gSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCBpbnB1dC5wdWJsaWNEYXRhSnNvbilcclxuICAgICk7XHJcbiAgICBjb25zdCBwdWJsaWNTZWFyY2hhYmxlU2lnID0gSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCBpbnB1dC5wdWJsaWNTZWFyY2hhYmxlSnNvbilcclxuICAgICk7XHJcbiAgICBjb25zdCBwbGFpbkRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcclxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssIGlucHV0LnBsYWluRGF0YUpzb24pXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNpZ1B4a0lkOiBzaWdQeGsuaWQsXHJcbiAgICAgIHB1YmxpY0RhdGFTaWcsXHJcbiAgICAgIHB1YmxpY1NlYXJjaGFibGVTaWcsXHJcbiAgICAgIHBsYWluRGF0YVNpZyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBhc3luYyBjcmVhdGVDb250YWN0Q2FyZChpbnB1dDogQ3JlYXRlQ29udGFjdENhcmRJbnB1dCk6IFByb21pc2U8Q29udGFjdENhcmQ+IHtcclxuICAgIC8vIEdldCBlbmNyeXB0aW9uIGtleVxyXG4gICAgY29uc3Qgcm9vdEtleSA9IGF3YWl0IHRoaXMua2V5U2VydmljZS5nZXRDdXJyZW50Um9vdEtleSgpO1xyXG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xyXG4gICAgY29uc3Qgd3JhcHBlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxyXG4gICAgICByb290S2V5Lmp3ayxcclxuICAgICAga2V5LnRvSlNPTih0cnVlKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcclxuICAgICAga2V5LFxyXG4gICAgICBpbnB1dC5wbGFpbkNpcGhlckRhdGFKc29uXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IGF3YWl0IHRoaXMucHJlcGFyZUNvbnRhY3RDYXJkSW5wdXQoaW5wdXQpO1xyXG5cclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZTx7XHJcbiAgICAgIGNyZWF0ZUNvbnRhY3RDYXJkOiB7IGNvbnRhY3RDYXJkOiBDb250YWN0Q2FyZCB9O1xyXG4gICAgfT4oe1xyXG4gICAgICBtdXRhdGlvbjogQ3JlYXRlQ29udGFjdENhcmRNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIC4uLnBhcmFtcyxcclxuICAgICAgICAgIHdyYXBwaW5nS2V5SWQ6IHJvb3RLZXkuaWQsXHJcbiAgICAgICAgICB3cmFwcGVkS2V5LFxyXG4gICAgICAgICAgY2lwaGVyRGF0YSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGEuY3JlYXRlQ29udGFjdENhcmQuY29udGFjdENhcmQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVDb250YWN0Q2FyZChpbnB1dDogVXBkYXRlQ29udGFjdENhcmRJbnB1dCk6IFByb21pc2U8Q29udGFjdENhcmQ+IHtcclxuICAgIC8vIEdldCBlbmNyeXB0aW9uIGtleVxyXG4gICAgY29uc3QgY2MgPSBhd2FpdCB0aGlzLmdldENvbnRhY3RDYXJkKGlucHV0LmlkKTtcclxuICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KGNjLmtleS5pZCk7XHJcbiAgICBjb25zdCBjaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXHJcbiAgICAgIGtleSxcclxuICAgICAgaW5wdXQucGxhaW5DaXBoZXJEYXRhSnNvblxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSBhd2FpdCB0aGlzLnByZXBhcmVDb250YWN0Q2FyZElucHV0KGlucHV0KTtcclxuXHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5tdXRhdGU8e1xyXG4gICAgICB1cGRhdGVDb250YWN0Q2FyZDogeyBjb250YWN0Q2FyZDogQ29udGFjdENhcmQgfTtcclxuICAgIH0+KHtcclxuICAgICAgbXV0YXRpb246IFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICAuLi5wYXJhbXMsXHJcbiAgICAgICAgICBpZDogaW5wdXQuaWQsXHJcbiAgICAgICAgICBjaXBoZXJEYXRhLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZGF0YS51cGRhdGVDb250YWN0Q2FyZC5jb250YWN0Q2FyZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZUNvbnRhY3RDYXJkKGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlPGFueT4oe1xyXG4gICAgICBtdXRhdGlvbjogRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZGF0YS5kZWxldGVDb250YWN0Q2FyZC5pZDtcclxuICB9XHJcbn1cclxuIl19
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { EncryptionService } from '../cryptography/encryption.service';
4
+ import { KeyGraphService } from '../cryptography/key-graph.service';
5
+ import { KeyService } from '../cryptography/key.service';
6
+ import { LrApolloService } from './lr-apollo.service';
7
+ import { SearchContactCardQuery, ContactCardListQuery, ContactCardQuery, CreateContactCardMutation, UpdateContactCardMutation, DeleteContactCardMutation, } from './contact-card.gql';
8
+ import { KeyFactoryService } from '../cryptography/key-factory.service';
9
+ import { KeyMetaService } from '../cryptography/key-meta.service';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../cryptography/key-factory.service";
12
+ import * as i2 from "../cryptography/key.service";
13
+ import * as i3 from "./lr-apollo.service";
14
+ import * as i4 from "../cryptography/key-graph.service";
15
+ import * as i5 from "../cryptography/encryption.service";
16
+ import * as i6 from "../cryptography/key-meta.service";
17
+ export class ContactCard {
18
+ }
19
+ export class ContactCardService {
20
+ constructor(keyFactory, keyService, lrApollo, keyGraph, encryptionService, keyMetaService) {
21
+ this.keyFactory = keyFactory;
22
+ this.keyService = keyService;
23
+ this.lrApollo = lrApollo;
24
+ this.keyGraph = keyGraph;
25
+ this.encryptionService = encryptionService;
26
+ this.keyMetaService = keyMetaService;
27
+ }
28
+ decryptContactCard(cc) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ const ret = Object.assign(Object.assign({}, cc), { publicDataJson: JSON.parse(cc.publicData), publicSearchableJson: JSON.parse(cc.publicSearchable) });
31
+ if (cc.key) {
32
+ const key = yield this.keyGraph.getJwkKey(cc.key.id);
33
+ // TODO: verify signature
34
+ ret.plainCipherDataJson = yield this.encryptionService.decrypt(key, cc.cipherData);
35
+ }
36
+ return ret;
37
+ });
38
+ }
39
+ decryptContactCardEdges(hasEdges) {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ return Promise.all(hasEdges.edges.map((edge) => __awaiter(this, void 0, void 0, function* () {
42
+ const cc = edge.node;
43
+ return yield this.decryptContactCard(cc);
44
+ })));
45
+ });
46
+ }
47
+ // { "filter": [{ "contains": { "a": true } }] }
48
+ searchContactCard(publicSearchable) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const data = yield this.lrApollo.query({
51
+ query: SearchContactCardQuery,
52
+ variables: {
53
+ publicSearchable: JSON.stringify(publicSearchable),
54
+ },
55
+ });
56
+ return yield this.decryptContactCardEdges(data.searchContactCards);
57
+ });
58
+ }
59
+ getContactCardList() {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ const data = yield this.lrApollo.query({
62
+ query: ContactCardListQuery,
63
+ });
64
+ return yield this.decryptContactCardEdges(data.contactCards);
65
+ });
66
+ }
67
+ getContactCard(id) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ const data = yield this.lrApollo.query({
70
+ query: ContactCardQuery,
71
+ variables: {
72
+ id,
73
+ },
74
+ });
75
+ return yield this.decryptContactCard(data.contactCard);
76
+ });
77
+ }
78
+ prepareContactCardInput(input) {
79
+ return __awaiter(this, void 0, void 0, function* () {
80
+ const sigPxk = yield this.keyService.getCurrentSigPxk();
81
+ const publicDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, input.publicDataJson));
82
+ const publicSearchableSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, input.publicSearchableJson));
83
+ const plainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, input.plainDataJson));
84
+ return {
85
+ sigPxkId: sigPxk.id,
86
+ publicDataSig,
87
+ publicSearchableSig,
88
+ plainDataSig,
89
+ };
90
+ });
91
+ }
92
+ createContactCard(input) {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ // Get encryption key
95
+ const rootKey = yield this.keyService.getCurrentRootKey();
96
+ const key = yield this.keyFactory.createKey();
97
+ const wrappedKey = yield this.keyGraph.encryptToString(rootKey.jwk, key.toJSON(true));
98
+ const cipherData = yield this.keyGraph.encryptToString(key, input.plainCipherDataJson);
99
+ const params = yield this.prepareContactCardInput(input);
100
+ const data = yield this.lrApollo.mutate({
101
+ mutation: CreateContactCardMutation,
102
+ variables: {
103
+ input: Object.assign(Object.assign({}, params), { wrappingKeyId: rootKey.id, wrappedKey,
104
+ cipherData }),
105
+ },
106
+ });
107
+ return data.createContactCard.contactCard;
108
+ });
109
+ }
110
+ updateContactCard(input) {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ // Get encryption key
113
+ const cc = yield this.getContactCard(input.id);
114
+ const key = yield this.keyGraph.getJwkKey(cc.key.id);
115
+ const cipherData = yield this.keyGraph.encryptToString(key, input.plainCipherDataJson);
116
+ const params = yield this.prepareContactCardInput(input);
117
+ const data = yield this.lrApollo.mutate({
118
+ mutation: UpdateContactCardMutation,
119
+ variables: {
120
+ input: Object.assign(Object.assign({}, params), { id: input.id, cipherData }),
121
+ },
122
+ });
123
+ return data.updateContactCard.contactCard;
124
+ });
125
+ }
126
+ deleteContactCard(id) {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ const data = yield this.lrApollo.mutate({
129
+ mutation: DeleteContactCardMutation,
130
+ variables: {
131
+ input: {
132
+ id,
133
+ },
134
+ },
135
+ });
136
+ return data.deleteContactCard.id;
137
+ });
138
+ }
139
+ }
140
+ ContactCardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ContactCardService_Factory() { return new ContactCardService(i0.ɵɵinject(i1.KeyFactoryService), i0.ɵɵinject(i2.KeyService), i0.ɵɵinject(i3.LrApolloService), i0.ɵɵinject(i4.KeyGraphService), i0.ɵɵinject(i5.EncryptionService), i0.ɵɵinject(i6.KeyMetaService)); }, token: ContactCardService, providedIn: "root" });
141
+ ContactCardService.decorators = [
142
+ { type: Injectable, args: [{
143
+ providedIn: 'root',
144
+ },] }
145
+ ];
146
+ ContactCardService.ctorParameters = () => [
147
+ { type: KeyFactoryService },
148
+ { type: KeyService },
149
+ { type: LrApolloService },
150
+ { type: KeyGraphService },
151
+ { type: EncryptionService },
152
+ { type: KeyMetaService }
153
+ ];
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1jYXJkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FwaS9jb250YWN0LWNhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7O0FBY2xFLE1BQU0sT0FBTyxXQUFXO0NBZ0J2QjtBQWdCRCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQ1UsVUFBNkIsRUFDN0IsVUFBc0IsRUFDdEIsUUFBeUIsRUFDekIsUUFBeUIsRUFDekIsaUJBQW9DLEVBQ3BDLGNBQThCO1FBTDlCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxtQkFBYyxHQUFkLGNBQWMsQ0FB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RVYsZUFBZTtZQUhmLGVBQWU7WUFEZixpQkFBaUI7WUFlakIsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEhhc0tleUdyYXBoLCBLZXkgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5LnR5cGVzJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXkuc2VydmljZSc7XG5pbXBvcnQgeyBIYXNFZGdlcyB9IGZyb20gJy4uL19jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgTHJBcG9sbG9TZXJ2aWNlIH0gZnJvbSAnLi9sci1hcG9sbG8uc2VydmljZSc7XG5pbXBvcnQge1xuICBTZWFyY2hDb250YWN0Q2FyZFF1ZXJ5LFxuICBDb250YWN0Q2FyZExpc3RRdWVyeSxcbiAgQ29udGFjdENhcmRRdWVyeSxcbiAgQ3JlYXRlQ29udGFjdENhcmRNdXRhdGlvbixcbiAgVXBkYXRlQ29udGFjdENhcmRNdXRhdGlvbixcbiAgRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbixcbn0gZnJvbSAnLi9jb250YWN0LWNhcmQuZ3FsJztcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFpbkNvbnRhY3RDYXJkUGxhaW5GaWVsZHMgfSBmcm9tICcuLi91c2Vycy9wcm9maWxlLnR5cGVzJztcbmltcG9ydCB7IEtleU1ldGFTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1tZXRhLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgQ29udGFjdENhcmRRdWVyeSBleHRlbmRzIEhhc0tleUdyYXBoIHtcbiAgY29udGFjdENhcmQ6IENvbnRhY3RDYXJkO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoQ29udGFjdENhcmRRdWVyeSBleHRlbmRzIEhhc0tleUdyYXBoIHtcbiAgc2VhcmNoQ29udGFjdENhcmRzOiBIYXNFZGdlczxDb250YWN0Q2FyZD47XG59XG5cbmludGVyZmFjZSBDb250YWN0Q2FyZExpc3RRdWVyeSBleHRlbmRzIEhhc0tleUdyYXBoIHtcbiAgY29udGFjdENhcmRzOiBIYXNFZGdlczxDb250YWN0Q2FyZD47XG59XG5cbmV4cG9ydCBjbGFzcyBDb250YWN0Q2FyZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGtleTogS2V5O1xuICBzaWdQeGs6IEtleTtcbiAgcHVibGljRGF0YTogc3RyaW5nO1xuICBwdWJsaWNEYXRhU2lnOiBzdHJpbmc7XG4gIHB1YmxpY1NlYXJjaGFibGU6IHN0cmluZztcbiAgcHVibGljU2VhcmNoYWJsZVNpZzogc3RyaW5nO1xuICBwbGFpbkRhdGE6IHN0cmluZztcbiAgcGxhaW5EYXRhU2lnOiBzdHJpbmc7XG4gIGNpcGhlckRhdGE6IHN0cmluZztcbiAgLy8gUGFyc2UvZGVjcnlwdGVkIHZlcnNpb25zIG9mIHRoZSBhYm92ZS5cbiAgcHVibGljRGF0YUpzb246IGFueTtcbiAgcHVibGljU2VhcmNoYWJsZUpzb246IGFueTtcbiAgcGxhaW5DaXBoZXJEYXRhSnNvbjogYW55O1xuICBwbGFpbkRhdGFKc29uOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ29udGFjdENhcmRJbnB1dCB7XG4gIHB1YmxpY0RhdGFKc29uOiBhbnk7XG4gIHB1YmxpY1NlYXJjaGFibGVKc29uOiBhbnk7XG4gIHBsYWluQ2lwaGVyRGF0YUpzb246IGFueTtcbiAgcGxhaW5EYXRhSnNvbjogTWFpbkNvbnRhY3RDYXJkUGxhaW5GaWVsZHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlQ29udGFjdENhcmRJbnB1dCBleHRlbmRzIENyZWF0ZUNvbnRhY3RDYXJkSW5wdXQge1xuICBpZDogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29udGFjdENhcmRTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBrZXlGYWN0b3J5OiBLZXlGYWN0b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsckFwb2xsbzogTHJBcG9sbG9TZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZSxcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGtleU1ldGFTZXJ2aWNlOiBLZXlNZXRhU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgZGVjcnlwdENvbnRhY3RDYXJkKGNjOiBDb250YWN0Q2FyZCk6IFByb21pc2U8Q29udGFjdENhcmQ+IHtcbiAgICBjb25zdCByZXQgPSB7XG4gICAgICAuLi5jYyxcbiAgICAgIHB1YmxpY0RhdGFKc29uOiBKU09OLnBhcnNlKGNjLnB1YmxpY0RhdGEpLFxuICAgICAgcHVibGljU2VhcmNoYWJsZUpzb246IEpTT04ucGFyc2UoY2MucHVibGljU2VhcmNoYWJsZSksXG4gICAgfTtcblxuICAgIGlmIChjYy5rZXkpIHtcbiAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KGNjLmtleS5pZCk7XG4gICAgICAvLyBUT0RPOiB2ZXJpZnkgc2lnbmF0dXJlXG4gICAgICByZXQucGxhaW5DaXBoZXJEYXRhSnNvbiA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZGVjcnlwdChcbiAgICAgICAga2V5LFxuICAgICAgICBjYy5jaXBoZXJEYXRhXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBhc3luYyBkZWNyeXB0Q29udGFjdENhcmRFZGdlcyhcbiAgICBoYXNFZGdlczogSGFzRWRnZXM8Q29udGFjdENhcmQ+XG4gICk6IFByb21pc2U8Q29udGFjdENhcmRbXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGhhc0VkZ2VzLmVkZ2VzLm1hcChhc3luYyAoZWRnZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGNjID0gZWRnZS5ub2RlIGFzIENvbnRhY3RDYXJkO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWNyeXB0Q29udGFjdENhcmQoY2MpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8geyBcImZpbHRlclwiOiBbeyBcImNvbnRhaW5zXCI6IHsgXCJhXCI6IHRydWUgfSB9XSB9XG4gIGFzeW5jIHNlYXJjaENvbnRhY3RDYXJkKHB1YmxpY1NlYXJjaGFibGU6IG9iamVjdCk6IFByb21pc2U8Q29udGFjdENhcmRbXT4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PFNlYXJjaENvbnRhY3RDYXJkUXVlcnk+KHtcbiAgICAgIHF1ZXJ5OiBTZWFyY2hDb250YWN0Q2FyZFF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIHB1YmxpY1NlYXJjaGFibGU6IEpTT04uc3RyaW5naWZ5KHB1YmxpY1NlYXJjaGFibGUpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmRlY3J5cHRDb250YWN0Q2FyZEVkZ2VzKGRhdGEuc2VhcmNoQ29udGFjdENhcmRzKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvbnRhY3RDYXJkTGlzdCgpOiBQcm9taXNlPENvbnRhY3RDYXJkW10+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxDb250YWN0Q2FyZExpc3RRdWVyeT4oe1xuICAgICAgcXVlcnk6IENvbnRhY3RDYXJkTGlzdFF1ZXJ5LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVjcnlwdENvbnRhY3RDYXJkRWRnZXMoZGF0YS5jb250YWN0Q2FyZHMpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29udGFjdENhcmQoaWQ6IHN0cmluZyk6IFByb21pc2U8Q29udGFjdENhcmQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxDb250YWN0Q2FyZFF1ZXJ5Pih7XG4gICAgICBxdWVyeTogQ29udGFjdENhcmRRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWNyeXB0Q29udGFjdENhcmQoZGF0YS5jb250YWN0Q2FyZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDb250YWN0Q2FyZElucHV0KFxuICAgIGlucHV0OiBDcmVhdGVDb250YWN0Q2FyZElucHV0XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgc2lnUHhrID0gYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLmdldEN1cnJlbnRTaWdQeGsoKTtcbiAgICBjb25zdCBwdWJsaWNEYXRhU2lnID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnNpZ24oc2lnUHhrLmp3aywgaW5wdXQucHVibGljRGF0YUpzb24pXG4gICAgKTtcbiAgICBjb25zdCBwdWJsaWNTZWFyY2hhYmxlU2lnID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnNpZ24oc2lnUHhrLmp3aywgaW5wdXQucHVibGljU2VhcmNoYWJsZUpzb24pXG4gICAgKTtcbiAgICBjb25zdCBwbGFpbkRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCBpbnB1dC5wbGFpbkRhdGFKc29uKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2lnUHhrSWQ6IHNpZ1B4ay5pZCxcbiAgICAgIHB1YmxpY0RhdGFTaWcsXG4gICAgICBwdWJsaWNTZWFyY2hhYmxlU2lnLFxuICAgICAgcGxhaW5EYXRhU2lnLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVDb250YWN0Q2FyZChpbnB1dDogQ3JlYXRlQ29udGFjdENhcmRJbnB1dCk6IFByb21pc2U8Q29udGFjdENhcmQ+IHtcbiAgICAvLyBHZXQgZW5jcnlwdGlvbiBrZXlcbiAgICBjb25zdCByb290S2V5ID0gYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLmdldEN1cnJlbnRSb290S2V5KCk7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuICAgIGNvbnN0IHdyYXBwZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHJvb3RLZXkuandrLFxuICAgICAga2V5LnRvSlNPTih0cnVlKVxuICAgICk7XG4gICAgY29uc3QgY2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAga2V5LFxuICAgICAgaW5wdXQucGxhaW5DaXBoZXJEYXRhSnNvblxuICAgICk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSBhd2FpdCB0aGlzLnByZXBhcmVDb250YWN0Q2FyZElucHV0KGlucHV0KTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZTx7XG4gICAgICBjcmVhdGVDb250YWN0Q2FyZDogeyBjb250YWN0Q2FyZDogQ29udGFjdENhcmQgfTtcbiAgICB9Pih7XG4gICAgICBtdXRhdGlvbjogQ3JlYXRlQ29udGFjdENhcmRNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICB3cmFwcGluZ0tleUlkOiByb290S2V5LmlkLFxuICAgICAgICAgIHdyYXBwZWRLZXksXG4gICAgICAgICAgY2lwaGVyRGF0YSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YS5jcmVhdGVDb250YWN0Q2FyZC5jb250YWN0Q2FyZDtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUNvbnRhY3RDYXJkKGlucHV0OiBVcGRhdGVDb250YWN0Q2FyZElucHV0KTogUHJvbWlzZTxDb250YWN0Q2FyZD4ge1xuICAgIC8vIEdldCBlbmNyeXB0aW9uIGtleVxuICAgIGNvbnN0IGNjID0gYXdhaXQgdGhpcy5nZXRDb250YWN0Q2FyZChpbnB1dC5pZCk7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRKd2tLZXkoY2Mua2V5LmlkKTtcbiAgICBjb25zdCBjaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBrZXksXG4gICAgICBpbnB1dC5wbGFpbkNpcGhlckRhdGFKc29uXG4gICAgKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IGF3YWl0IHRoaXMucHJlcGFyZUNvbnRhY3RDYXJkSW5wdXQoaW5wdXQpO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlPHtcbiAgICAgIHVwZGF0ZUNvbnRhY3RDYXJkOiB7IGNvbnRhY3RDYXJkOiBDb250YWN0Q2FyZCB9O1xuICAgIH0+KHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgIGlkOiBpbnB1dC5pZCxcbiAgICAgICAgICBjaXBoZXJEYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkYXRhLnVwZGF0ZUNvbnRhY3RDYXJkLmNvbnRhY3RDYXJkO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQ29udGFjdENhcmQoaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlPGFueT4oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZUNvbnRhY3RDYXJkTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YS5kZWxldGVDb250YWN0Q2FyZC5pZDtcbiAgfVxufVxuIl19
@@ -1,60 +1,60 @@
1
- import { gqlTyped } from '../_common/ast';
2
- export const ContactCardFragment = gqlTyped `
3
- fragment ContactCardFragment on ContactCardNode {
4
- id
5
- publicData
6
- publicSearchable
7
- cipherData
8
- key {
9
- id
10
- }
11
- }
12
- `;
13
- export const CreateContactCardMutation = gqlTyped `
14
- mutation CreateContactCardMutation(
15
- $input: CreateContactCardInput!
16
- ) {
17
- createContactCard(input: $input) {
18
- contactCard {
19
- id
20
- }
21
- }
22
- }
23
- `;
24
- export const UpdateContactCardMutation = gqlTyped `
25
- mutation UpdateContactCardMutation($input: UpdateContactCardInput!) {
26
- updateContactCard(input: $input) {
27
- contactCard {
28
- id
29
- }
30
- }
31
- }
32
- `;
33
- export const DeleteContactCardMutation = gqlTyped `
34
- mutation DeleteContactCardMutation($input: DeleteContactCardInput!) {
35
- deleteContactCard(input: $input) {
36
- id
37
- }
38
- }
39
- `;
40
- export const ContactCardsQuery = gqlTyped `
41
- query ContactCardsQuery {
42
- contactCards(orderBy: "created") {
43
- edges {
44
- node {
45
- ...ContactCardFragment
46
- }
47
- }
48
- }
49
- }
50
- ${ContactCardFragment}
51
- `;
52
- export const ContactCardQuery = gqlTyped `
53
- query ContactCardQuery($id: LrRelayIdInput!) {
54
- contactCard(id: $id) {
55
- ...ContactCardFragment
56
- }
57
- }
58
- ${ContactCardFragment}
59
- `;
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1jYXJkMi5ncWwuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMva2MtY2xpZW50L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FwaS9jb250YWN0LWNhcmQyLmdxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFpQjs7Ozs7Ozs7OztDQVUzRCxDQUFDO0FBU0YsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsUUFBUSxDQUEyQjs7Ozs7Ozs7OztDQVUzRSxDQUFDO0FBU0YsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsUUFBUSxDQUEyQjs7Ozs7Ozs7Q0FRM0UsQ0FBQztBQVNGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBMkI7Ozs7OztDQU0zRSxDQUFDO0FBS0YsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFtQjs7Ozs7Ozs7OztJQVV4RCxtQkFBbUI7Q0FDdEIsQ0FBQztBQUtGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBa0I7Ozs7OztJQU10RCxtQkFBbUI7Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbm5lY3Rpb24sIENvbnRhY3RDYXJkTm9kZSwgSUQgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgZ3FsVHlwZWQgfSBmcm9tICcuLi9fY29tbW9uL2FzdCc7XHJcblxyXG5leHBvcnQgY29uc3QgQ29udGFjdENhcmRGcmFnbWVudCA9IGdxbFR5cGVkPENvbnRhY3RDYXJkTm9kZT5gXHJcbiAgZnJhZ21lbnQgQ29udGFjdENhcmRGcmFnbWVudCBvbiBDb250YWN0Q2FyZE5vZGUge1xyXG4gICAgaWRcclxuICAgIHB1YmxpY0RhdGFcclxuICAgIHB1YmxpY1NlYXJjaGFibGVcclxuICAgIGNpcGhlckRhdGFcclxuICAgIGtleSB7XHJcbiAgICAgICAgaWRcclxuICAgIH1cclxuICB9XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24ge1xyXG4gIGNyZWF0ZUNvbnRhY3RDYXJkOiB7XHJcbiAgICBjb250YWN0Q2FyZDoge1xyXG4gICAgICBpZDogSUQ7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuZXhwb3J0IGNvbnN0IENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24gPSBncWxUeXBlZDxDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uPmBcclxuICBtdXRhdGlvbiBDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uKFxyXG4gICAgJGlucHV0OiBDcmVhdGVDb250YWN0Q2FyZElucHV0IVxyXG4gICkge1xyXG4gICAgY3JlYXRlQ29udGFjdENhcmQoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICBjb250YWN0Q2FyZCB7XHJcbiAgICAgICAgaWRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlQ29udGFjdENhcmRNdXRhdGlvbiB7XHJcbiAgdXBkYXRlQ29udGFjdENhcmQ6IHtcclxuICAgIGNvbnRhY3RDYXJkOiB7XHJcbiAgICAgIGlkOiBJRDtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgVXBkYXRlQ29udGFjdENhcmRNdXRhdGlvbiA9IGdxbFR5cGVkPFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24+YFxyXG4gIG11dGF0aW9uIFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24oJGlucHV0OiBVcGRhdGVDb250YWN0Q2FyZElucHV0ISkge1xyXG4gICAgdXBkYXRlQ29udGFjdENhcmQoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICBjb250YWN0Q2FyZCB7XHJcbiAgICAgICAgaWRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbiB7XHJcbiAgZGVsZXRlQ29udGFjdENhcmQ6IHtcclxuICAgIGRlbGV0ZUNvbnRhY3RDYXJkOiB7XHJcbiAgICAgIGlkOiBJRDtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbiA9IGdxbFR5cGVkPERlbGV0ZUNvbnRhY3RDYXJkTXV0YXRpb24+YFxyXG4gIG11dGF0aW9uIERlbGV0ZUNvbnRhY3RDYXJkTXV0YXRpb24oJGlucHV0OiBEZWxldGVDb250YWN0Q2FyZElucHV0ISkge1xyXG4gICAgZGVsZXRlQ29udGFjdENhcmQoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICBpZFxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdENhcmRzUXVlcnkge1xyXG4gIGNvbnRhY3RDYXJkczogQ29ubmVjdGlvbjxDb250YWN0Q2FyZE5vZGU+O1xyXG59XHJcbmV4cG9ydCBjb25zdCBDb250YWN0Q2FyZHNRdWVyeSA9IGdxbFR5cGVkPENvbnRhY3RDYXJkc1F1ZXJ5PmBcclxuICBxdWVyeSBDb250YWN0Q2FyZHNRdWVyeSB7XHJcbiAgICBjb250YWN0Q2FyZHMob3JkZXJCeTogXCJjcmVhdGVkXCIpIHtcclxuICAgICAgZWRnZXMge1xyXG4gICAgICAgIG5vZGUge1xyXG4gICAgICAgICAgLi4uQ29udGFjdENhcmRGcmFnbWVudFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAke0NvbnRhY3RDYXJkRnJhZ21lbnR9XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhY3RDYXJkUXVlcnkge1xyXG4gIGNvbnRhY3RDYXJkOiBDb250YWN0Q2FyZE5vZGU7XHJcbn1cclxuZXhwb3J0IGNvbnN0IENvbnRhY3RDYXJkUXVlcnkgPSBncWxUeXBlZDxDb250YWN0Q2FyZFF1ZXJ5PmBcclxuICBxdWVyeSBDb250YWN0Q2FyZFF1ZXJ5KCRpZDogTHJSZWxheUlkSW5wdXQhKSB7XHJcbiAgICBjb250YWN0Q2FyZChpZDogJGlkKSB7XHJcbiAgICAgIC4uLkNvbnRhY3RDYXJkRnJhZ21lbnRcclxuICAgIH1cclxuICB9XHJcbiAgJHtDb250YWN0Q2FyZEZyYWdtZW50fVxyXG5gO1xyXG4iXX0=
1
+ import { gqlTyped } from '../_common/ast';
2
+ export const ContactCardFragment = gqlTyped `
3
+ fragment ContactCardFragment on ContactCardNode {
4
+ id
5
+ publicData
6
+ publicSearchable
7
+ cipherData
8
+ key {
9
+ id
10
+ }
11
+ }
12
+ `;
13
+ export const CreateContactCardMutation = gqlTyped `
14
+ mutation CreateContactCardMutation(
15
+ $input: CreateContactCardInput!
16
+ ) {
17
+ createContactCard(input: $input) {
18
+ contactCard {
19
+ id
20
+ }
21
+ }
22
+ }
23
+ `;
24
+ export const UpdateContactCardMutation = gqlTyped `
25
+ mutation UpdateContactCardMutation($input: UpdateContactCardInput!) {
26
+ updateContactCard(input: $input) {
27
+ contactCard {
28
+ id
29
+ }
30
+ }
31
+ }
32
+ `;
33
+ export const DeleteContactCardMutation = gqlTyped `
34
+ mutation DeleteContactCardMutation($input: DeleteContactCardInput!) {
35
+ deleteContactCard(input: $input) {
36
+ id
37
+ }
38
+ }
39
+ `;
40
+ export const ContactCardsQuery = gqlTyped `
41
+ query ContactCardsQuery {
42
+ contactCards(orderBy: "created") {
43
+ edges {
44
+ node {
45
+ ...ContactCardFragment
46
+ }
47
+ }
48
+ }
49
+ }
50
+ ${ContactCardFragment}
51
+ `;
52
+ export const ContactCardQuery = gqlTyped `
53
+ query ContactCardQuery($id: LrRelayIdInput!) {
54
+ contactCard(id: $id) {
55
+ ...ContactCardFragment
56
+ }
57
+ }
58
+ ${ContactCardFragment}
59
+ `;
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1jYXJkMi5ncWwuanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FwaS9jb250YWN0LWNhcmQyLmdxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFpQjs7Ozs7Ozs7OztDQVUzRCxDQUFDO0FBU0YsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsUUFBUSxDQUEyQjs7Ozs7Ozs7OztDQVUzRSxDQUFDO0FBU0YsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsUUFBUSxDQUEyQjs7Ozs7Ozs7Q0FRM0UsQ0FBQztBQVNGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBMkI7Ozs7OztDQU0zRSxDQUFDO0FBS0YsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFtQjs7Ozs7Ozs7OztJQVV4RCxtQkFBbUI7Q0FDdEIsQ0FBQztBQUtGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBa0I7Ozs7OztJQU10RCxtQkFBbUI7Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbm5lY3Rpb24sIENvbnRhY3RDYXJkTm9kZSwgSUQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdxbFR5cGVkIH0gZnJvbSAnLi4vX2NvbW1vbi9hc3QnO1xuXG5leHBvcnQgY29uc3QgQ29udGFjdENhcmRGcmFnbWVudCA9IGdxbFR5cGVkPENvbnRhY3RDYXJkTm9kZT5gXG4gIGZyYWdtZW50IENvbnRhY3RDYXJkRnJhZ21lbnQgb24gQ29udGFjdENhcmROb2RlIHtcbiAgICBpZFxuICAgIHB1YmxpY0RhdGFcbiAgICBwdWJsaWNTZWFyY2hhYmxlXG4gICAgY2lwaGVyRGF0YVxuICAgIGtleSB7XG4gICAgICAgIGlkXG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24ge1xuICBjcmVhdGVDb250YWN0Q2FyZDoge1xuICAgIGNvbnRhY3RDYXJkOiB7XG4gICAgICBpZDogSUQ7XG4gICAgfTtcbiAgfTtcbn1cbmV4cG9ydCBjb25zdCBDcmVhdGVDb250YWN0Q2FyZE11dGF0aW9uID0gZ3FsVHlwZWQ8Q3JlYXRlQ29udGFjdENhcmRNdXRhdGlvbj5gXG4gIG11dGF0aW9uIENyZWF0ZUNvbnRhY3RDYXJkTXV0YXRpb24oXG4gICAgJGlucHV0OiBDcmVhdGVDb250YWN0Q2FyZElucHV0IVxuICApIHtcbiAgICBjcmVhdGVDb250YWN0Q2FyZChpbnB1dDogJGlucHV0KSB7XG4gICAgICBjb250YWN0Q2FyZCB7XG4gICAgICAgIGlkXG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24ge1xuICB1cGRhdGVDb250YWN0Q2FyZDoge1xuICAgIGNvbnRhY3RDYXJkOiB7XG4gICAgICBpZDogSUQ7XG4gICAgfTtcbiAgfTtcbn1cbmV4cG9ydCBjb25zdCBVcGRhdGVDb250YWN0Q2FyZE11dGF0aW9uID0gZ3FsVHlwZWQ8VXBkYXRlQ29udGFjdENhcmRNdXRhdGlvbj5gXG4gIG11dGF0aW9uIFVwZGF0ZUNvbnRhY3RDYXJkTXV0YXRpb24oJGlucHV0OiBVcGRhdGVDb250YWN0Q2FyZElucHV0ISkge1xuICAgIHVwZGF0ZUNvbnRhY3RDYXJkKGlucHV0OiAkaW5wdXQpIHtcbiAgICAgIGNvbnRhY3RDYXJkIHtcbiAgICAgICAgaWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbiB7XG4gIGRlbGV0ZUNvbnRhY3RDYXJkOiB7XG4gICAgZGVsZXRlQ29udGFjdENhcmQ6IHtcbiAgICAgIGlkOiBJRDtcbiAgICB9O1xuICB9O1xufVxuZXhwb3J0IGNvbnN0IERlbGV0ZUNvbnRhY3RDYXJkTXV0YXRpb24gPSBncWxUeXBlZDxEZWxldGVDb250YWN0Q2FyZE11dGF0aW9uPmBcbiAgbXV0YXRpb24gRGVsZXRlQ29udGFjdENhcmRNdXRhdGlvbigkaW5wdXQ6IERlbGV0ZUNvbnRhY3RDYXJkSW5wdXQhKSB7XG4gICAgZGVsZXRlQ29udGFjdENhcmQoaW5wdXQ6ICRpbnB1dCkge1xuICAgICAgaWRcbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdENhcmRzUXVlcnkge1xuICBjb250YWN0Q2FyZHM6IENvbm5lY3Rpb248Q29udGFjdENhcmROb2RlPjtcbn1cbmV4cG9ydCBjb25zdCBDb250YWN0Q2FyZHNRdWVyeSA9IGdxbFR5cGVkPENvbnRhY3RDYXJkc1F1ZXJ5PmBcbiAgcXVlcnkgQ29udGFjdENhcmRzUXVlcnkge1xuICAgIGNvbnRhY3RDYXJkcyhvcmRlckJ5OiBcImNyZWF0ZWRcIikge1xuICAgICAgZWRnZXMge1xuICAgICAgICBub2RlIHtcbiAgICAgICAgICAuLi5Db250YWN0Q2FyZEZyYWdtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgJHtDb250YWN0Q2FyZEZyYWdtZW50fVxuYDtcblxuZXhwb3J0IGludGVyZmFjZSBDb250YWN0Q2FyZFF1ZXJ5IHtcbiAgY29udGFjdENhcmQ6IENvbnRhY3RDYXJkTm9kZTtcbn1cbmV4cG9ydCBjb25zdCBDb250YWN0Q2FyZFF1ZXJ5ID0gZ3FsVHlwZWQ8Q29udGFjdENhcmRRdWVyeT5gXG4gIHF1ZXJ5IENvbnRhY3RDYXJkUXVlcnkoJGlkOiBMclJlbGF5SWRJbnB1dCEpIHtcbiAgICBjb250YWN0Q2FyZChpZDogJGlkKSB7XG4gICAgICAuLi5Db250YWN0Q2FyZEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7Q29udGFjdENhcmRGcmFnbWVudH1cbmA7XG4iXX0=