@lifeready/core 1.0.21 → 1.0.22
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.
- package/bundles/lifeready-core.umd.js +9745 -9700
- package/bundles/lifeready-core.umd.js.map +1 -1
- package/bundles/lifeready-core.umd.min.js +2 -2
- package/bundles/lifeready-core.umd.min.js.map +1 -1
- package/esm2015/lib/_common/run-outside-angular.js +2 -2
- package/esm2015/lib/_common/types.js +1 -1
- package/esm2015/lib/api/lr-apollo.service.js +3 -3
- package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +3 -3
- package/esm2015/lib/api/query-processor/common-processors.service.js +3 -3
- package/esm2015/lib/api/query-processor/query-processor.service.js +4 -4
- package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +6 -5
- package/esm2015/lib/api/types/lr-graphql.types.js +1 -1
- package/esm2015/lib/auth/auth.gql.js +1 -28
- package/esm2015/lib/auth/auth.types.js +1 -1
- package/esm2015/lib/auth/life-ready-auth.service.js +32 -31
- package/esm2015/lib/category/category.gql.js +1 -1
- package/esm2015/lib/category/category.service.js +6 -6
- package/esm2015/lib/contact-card/contact-card.gql.js +79 -0
- package/esm2015/lib/contact-card/contact-card.service.js +154 -0
- package/esm2015/lib/contact-card/contact-card2.gql.js +29 -0
- package/esm2015/lib/contact-card/contact-card2.service.js +103 -0
- package/esm2015/lib/encryption/encryption.service.js +189 -0
- package/esm2015/lib/file-upload/file-upload.service.js +74 -0
- package/esm2015/lib/file-upload/file-upload.types.js +1 -0
- package/esm2015/lib/{auth → idle}/idle.service.js +7 -7
- package/esm2015/lib/{auth → idle}/idle.types.js +1 -1
- package/esm2015/lib/items2/item2.service.js +20 -20
- package/esm2015/lib/key/key-factory.service.js +237 -0
- package/esm2015/lib/{cryptography → key}/key-graph.service.js +10 -10
- package/esm2015/lib/key/key-meta.service.js +200 -0
- package/esm2015/lib/key/key.service.js +124 -0
- package/esm2015/lib/key/key.types.js +11 -0
- package/esm2015/lib/key-exchange/key-exchange.gql.js +188 -0
- package/esm2015/lib/key-exchange/key-exchange.service.js +443 -0
- package/esm2015/lib/key-exchange/key-exchange.types.js +7 -0
- package/esm2015/lib/key-exchange/key-exchange2.gql.js +171 -0
- package/esm2015/lib/key-exchange/key-exchange2.service.js +500 -0
- package/esm2015/lib/lbop/lbop.service.js +355 -0
- package/esm2015/lib/life-ready.module.js +2 -27
- package/esm2015/lib/lock/lock.gql.js +40 -0
- package/esm2015/lib/lock/lock.service.js +64 -0
- package/esm2015/lib/message/message.gql.js +32 -0
- package/esm2015/lib/message/message.service.js +116 -0
- package/esm2015/lib/message/message.types.js +1 -0
- package/esm2015/lib/password/password.gql.js +28 -0
- package/esm2015/lib/password/password.service.js +315 -0
- package/esm2015/lib/persist/persist.service.js +180 -0
- package/esm2015/lib/profile/profile-details.service.js +214 -0
- package/esm2015/lib/profile/profile.gql.js +97 -0
- package/esm2015/lib/profile/profile.service.js +169 -0
- package/esm2015/lib/profile/profile.types.js +34 -0
- package/esm2015/lib/record/record-attachment.service.js +15 -15
- package/esm2015/lib/record/record.service.js +3 -3
- package/esm2015/lib/register/register.service.js +172 -0
- package/esm2015/lib/scenario/scenario.controller.js +2 -2
- package/esm2015/lib/scenario/{scenario.gql.private.js → scenario.private.gql.js} +1 -1
- package/esm2015/lib/scenario/scenario.service.js +9 -9
- package/esm2015/lib/scenario/scenario.types.js +1 -1
- package/esm2015/lib/shared-contact-card/shared-contact-card.service.js +119 -0
- package/esm2015/lib/shared-contact-card/shared-contact-card2.gql.js +41 -0
- package/esm2015/lib/shared-contact-card/shared-contact-card2.service.js +117 -0
- package/esm2015/lib/slip39/slip39.service.js +169 -0
- package/esm2015/lib/time/time.service.js +146 -0
- package/esm2015/lib/tp-assembly/tp-assembly.js +365 -0
- package/esm2015/lib/tp-assembly/tp-assembly.private.gql.js +22 -0
- package/esm2015/lib/tp-assembly/tp-assembly.types.js +1 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset-request.service.js +100 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset-user.service.js +117 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.constants.js +4 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.controller.js +34 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.gql.js +74 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.private.gql.js +165 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.private.service.js +54 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.service.js +92 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.types.js +1 -0
- package/esm2015/lib/trusted-party/trusted-party.gql.js +148 -0
- package/esm2015/lib/trusted-party/trusted-party.service.js +326 -0
- package/esm2015/lib/trusted-party/trusted-party.types.js +41 -0
- package/esm2015/lib/trusted-party/trusted-party2.gql.js +64 -0
- package/esm2015/lib/trusted-party/trusted-party2.gql.private.js +25 -0
- package/esm2015/lib/trusted-party/trusted-party2.service.js +224 -0
- package/esm2015/lib/trusted-party/trusted-party2.types.js +1 -0
- package/esm2015/lib/two-factor/two-factor.service.js +74 -0
- package/esm2015/lib/user/user.gql.js +60 -0
- package/esm2015/lib/user/user.service.js +79 -0
- package/esm2015/lib/user/user.types.js +1 -0
- package/esm2015/lib/web-crypto/web-crypto.service.js +29 -0
- package/esm2015/lifeready-core.js +15 -13
- package/esm2015/public-api.js +49 -51
- package/fesm2015/lifeready-core.js +9232 -9214
- package/fesm2015/lifeready-core.js.map +1 -1
- package/lib/_common/types.d.ts +3 -1
- package/lib/api/lr-apollo.service.d.ts +1 -1
- package/lib/api/lr-graphql/lr-graphql.service.d.ts +1 -1
- package/lib/api/query-processor/common-processors.service.d.ts +1 -1
- package/lib/api/query-processor/query-processor.service.d.ts +1 -1
- package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +1 -1
- package/lib/api/types/lr-graphql.types.d.ts +11 -0
- package/lib/auth/auth.gql.d.ts +0 -3
- package/lib/auth/auth.types.d.ts +2 -2
- package/lib/auth/life-ready-auth.service.d.ts +12 -12
- package/lib/category/category.gql.d.ts +1 -1
- package/lib/category/category.service.d.ts +2 -2
- package/lib/{api → contact-card}/contact-card.service.d.ts +9 -9
- package/lib/contact-card/contact-card2.gql.d.ts +25 -0
- package/lib/{api → contact-card}/contact-card2.service.d.ts +11 -12
- package/lib/{cryptography → encryption}/encryption.service.d.ts +2 -2
- package/lib/{api/file.service.d.ts → file-upload/file-upload.service.d.ts} +3 -7
- package/lib/file-upload/file-upload.types.d.ts +5 -0
- package/lib/{auth → idle}/idle.service.d.ts +4 -4
- package/lib/items2/item2.service.d.ts +11 -11
- package/lib/{cryptography → key}/key-factory.service.d.ts +2 -2
- package/lib/{cryptography → key}/key-graph.service.d.ts +5 -5
- package/lib/{cryptography → key}/key-meta.service.d.ts +1 -1
- package/lib/{cryptography → key}/key.service.d.ts +2 -2
- package/lib/{cryptography/cryptography.types.d.ts → key/key.types.d.ts} +9 -13
- package/lib/{api → key-exchange}/key-exchange.service.d.ts +5 -5
- package/lib/{api → key-exchange}/key-exchange.types.d.ts +4 -4
- package/lib/{api → key-exchange}/key-exchange2.gql.d.ts +1 -1
- package/lib/{api → key-exchange}/key-exchange2.service.d.ts +71 -18
- package/lib/{auth → lbop}/lbop.service.d.ts +7 -7
- package/lib/{api → lock}/lock.gql.d.ts +1 -1
- package/lib/{api → lock}/lock.service.d.ts +1 -1
- package/lib/message/message.gql.d.ts +13 -0
- package/lib/message/message.service.d.ts +29 -0
- package/lib/message/message.types.d.ts +12 -0
- package/lib/password/password.gql.d.ts +3 -0
- package/lib/{auth → password}/password.service.d.ts +8 -8
- package/lib/{api → persist}/persist.service.d.ts +3 -3
- package/lib/{users → profile}/profile-details.service.d.ts +3 -3
- package/lib/{users → profile}/profile.gql.d.ts +2 -2
- package/lib/{users → profile}/profile.service.d.ts +6 -6
- package/lib/{users → profile}/profile.types.d.ts +1 -1
- package/lib/record/record-attachment.service.d.ts +6 -6
- package/lib/record/record.service.d.ts +1 -1
- package/lib/{auth → register}/register.service.d.ts +4 -4
- package/lib/scenario/scenario.controller.d.ts +1 -1
- package/lib/scenario/scenario.service.d.ts +2 -2
- package/lib/scenario/scenario.types.d.ts +1 -1
- package/lib/{api → shared-contact-card}/shared-contact-card.service.d.ts +9 -9
- package/lib/{api → shared-contact-card}/shared-contact-card2.gql.d.ts +1 -1
- package/lib/{api → shared-contact-card}/shared-contact-card2.service.d.ts +6 -6
- package/lib/{trusted-parties → tp-assembly}/tp-assembly.d.ts +7 -7
- package/lib/{trusted-parties → tp-assembly}/tp-assembly.types.d.ts +1 -1
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset-request.service.d.ts +4 -8
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset-user.service.d.ts +7 -13
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset.controller.d.ts +1 -1
- package/lib/tp-password-reset/tp-password-reset.gql.d.ts +63 -0
- package/lib/{trusted-parties/tp-password-reset.gql.d.ts → tp-password-reset/tp-password-reset.private.gql.d.ts} +1 -63
- package/lib/tp-password-reset/tp-password-reset.private.service.d.ts +59 -0
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset.service.d.ts +6 -89
- package/lib/tp-password-reset/tp-password-reset.types.d.ts +40 -0
- package/lib/{trusted-parties → trusted-party}/trusted-party.service.d.ts +7 -7
- package/lib/{trusted-parties → trusted-party}/trusted-party.types.d.ts +2 -3
- package/lib/{trusted-parties → trusted-party}/trusted-party2.gql.d.ts +0 -22
- package/lib/trusted-party/trusted-party2.gql.private.d.ts +23 -0
- package/lib/{trusted-parties → trusted-party}/trusted-party2.service.d.ts +11 -35
- package/lib/trusted-party/trusted-party2.types.d.ts +12 -0
- package/lib/{users → user}/user.gql.d.ts +1 -1
- package/lib/{users → user}/user.types.d.ts +1 -1
- package/lifeready-core.d.ts +14 -12
- package/lifeready-core.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +48 -50
- package/esm2015/lib/api/contact-card.gql.js +0 -79
- package/esm2015/lib/api/contact-card.service.js +0 -154
- package/esm2015/lib/api/contact-card2.gql.js +0 -60
- package/esm2015/lib/api/contact-card2.service.js +0 -103
- package/esm2015/lib/api/file.service.js +0 -74
- package/esm2015/lib/api/key-exchange.gql.js +0 -188
- package/esm2015/lib/api/key-exchange.service.js +0 -442
- package/esm2015/lib/api/key-exchange.types.js +0 -7
- package/esm2015/lib/api/key-exchange2.gql.js +0 -171
- package/esm2015/lib/api/key-exchange2.service.js +0 -480
- package/esm2015/lib/api/lock.gql.js +0 -40
- package/esm2015/lib/api/lock.service.js +0 -64
- package/esm2015/lib/api/message.service.js +0 -138
- package/esm2015/lib/api/persist.service.js +0 -181
- package/esm2015/lib/api/shared-contact-card.service.js +0 -119
- package/esm2015/lib/api/shared-contact-card2.gql.js +0 -41
- package/esm2015/lib/api/shared-contact-card2.service.js +0 -117
- package/esm2015/lib/api/time.service.js +0 -146
- package/esm2015/lib/auth/lbop.service.js +0 -355
- package/esm2015/lib/auth/password.service.js +0 -315
- package/esm2015/lib/auth/register.service.js +0 -172
- package/esm2015/lib/auth/two-factor.service.js +0 -74
- package/esm2015/lib/cryptography/cryptography.types.js +0 -11
- package/esm2015/lib/cryptography/encryption.service.js +0 -189
- package/esm2015/lib/cryptography/key-factory.service.js +0 -237
- package/esm2015/lib/cryptography/key-meta.service.js +0 -200
- package/esm2015/lib/cryptography/key.service.js +0 -124
- package/esm2015/lib/cryptography/slip39.service.js +0 -169
- package/esm2015/lib/cryptography/web-crypto.service.js +0 -29
- package/esm2015/lib/trusted-parties/tp-assembly.gql.private.js +0 -22
- package/esm2015/lib/trusted-parties/tp-assembly.js +0 -365
- package/esm2015/lib/trusted-parties/tp-assembly.types.js +0 -1
- package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +0 -113
- package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +0 -129
- package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +0 -4
- package/esm2015/lib/trusted-parties/tp-password-reset.controller.js +0 -34
- package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +0 -237
- package/esm2015/lib/trusted-parties/tp-password-reset.service.js +0 -95
- package/esm2015/lib/trusted-parties/trusted-party.gql.js +0 -148
- package/esm2015/lib/trusted-parties/trusted-party.service.js +0 -326
- package/esm2015/lib/trusted-parties/trusted-party.types.js +0 -41
- package/esm2015/lib/trusted-parties/trusted-party2.gql.js +0 -87
- package/esm2015/lib/trusted-parties/trusted-party2.service.js +0 -218
- package/esm2015/lib/users/profile-details.service.js +0 -214
- package/esm2015/lib/users/profile.gql.js +0 -97
- package/esm2015/lib/users/profile.service.js +0 -169
- package/esm2015/lib/users/profile.types.js +0 -34
- package/esm2015/lib/users/user.gql.js +0 -60
- package/esm2015/lib/users/user.service.js +0 -79
- package/esm2015/lib/users/user.types.js +0 -1
- package/lib/api/contact-card2.gql.d.ts +0 -34
- package/lib/api/message.service.d.ts +0 -59
- /package/lib/{api → contact-card}/contact-card.gql.d.ts +0 -0
- /package/lib/{auth → idle}/idle.types.d.ts +0 -0
- /package/lib/{api → key-exchange}/key-exchange.gql.d.ts +0 -0
- /package/lib/scenario/{scenario.gql.private.d.ts → scenario.private.gql.d.ts} +0 -0
- /package/lib/{cryptography → slip39}/slip39.service.d.ts +0 -0
- /package/lib/{api → time}/time.service.d.ts +0 -0
- /package/lib/{trusted-parties/tp-assembly.gql.private.d.ts → tp-assembly/tp-assembly.private.gql.d.ts} +0 -0
- /package/lib/{trusted-parties → tp-password-reset}/tp-password-reset.constants.d.ts +0 -0
- /package/lib/{trusted-parties → trusted-party}/trusted-party.gql.d.ts +0 -0
- /package/lib/{auth → two-factor}/two-factor.service.d.ts +0 -0
- /package/lib/{users → user}/user.service.d.ts +0 -0
- /package/lib/{cryptography → web-crypto}/web-crypto.service.d.ts +0 -0
|
@@ -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 '../encryption/encryption.service';
|
|
5
|
+
import { KeyGraphService } from '../key/key-graph.service';
|
|
6
|
+
import { KeyService } from '../key/key.service';
|
|
7
|
+
import { ContactCardName } from '../profile/profile.types';
|
|
8
|
+
import { LrApolloService } from '../api/lr-apollo.service';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../key/key.service";
|
|
11
|
+
import * as i2 from "../api/lr-apollo.service";
|
|
12
|
+
import * as i3 from "../key/key-graph.service";
|
|
13
|
+
import * as i4 from "../encryption/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhY3QtY2FyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQtY29udGFjdC1jYXJkL3NoYXJlZC1jb250YWN0LWNhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUM7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsZUFBZSxFQUF1QixNQUFNLDBCQUEwQixDQUFDO0FBR2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBRzNELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBCdEMsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7OztRQVExQix1QkFBdUI7OztFQUc3QixDQUFDO0FBMkJILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFDVSxVQUFzQixFQUN0QixRQUF5QixFQUN6QixRQUF5QixFQUN6QixpQkFBb0M7UUFIcEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQzNDLENBQUM7SUFFRSxnQ0FBZ0MsQ0FDcEMsRUFBcUI7O1lBRXJCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTFELHVCQUNFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUNULFVBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFDMUIsV0FBVyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUN6QixPQUFPLEVBQ1Y7UUFDSixDQUFDO0tBQUE7SUFFSywwQkFBMEIsQ0FDOUIsRUFBcUI7O1lBRXJCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLGdCQUFnQixFQUFFO2dCQUM3QyxJQUFJO29CQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUN6QyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQzlDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FDcEIsQ0FBQztpQkFDSDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMxRDthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQUE7SUFFSyx5QkFBeUIsQ0FDN0IsRUFBVSxFQUNWLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLFdBQWdDOztZQUVoQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQzNELFNBQVMsQ0FBQyxHQUFHLEVBQ2IsV0FBVyxDQUNaLENBQUM7WUFDRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ3hDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQ2hFLENBQUM7WUFFRixNQUFNLGNBQWMsR0FBRztnQkFDckIsSUFBSSxFQUFFLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7YUFDNUMsQ0FBQztZQUNGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDdEMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQzlELENBQUM7WUFFRixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUF5QjtnQkFDakQsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRTt3QkFDTCxFQUFFO3dCQUNGLGVBQWUsRUFBRSxFQUFFO3dCQUNuQixVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO3dCQUN6QixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7d0JBQ25CLGlCQUFpQjtxQkFDbEI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7Ozs7WUEvRUYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUF6RVEsVUFBVTtZQUtWLGVBQWU7WUFOZixlQUFlO1lBRGYsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGdxbCBmcm9tICdncmFwaHFsLXRhZyc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL2VuY3J5cHRpb24vZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2tleS9rZXktZ3JhcGguc2VydmljZSc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS5zZXJ2aWNlJztcbmltcG9ydCB7IEtleSB9IGZyb20gJy4uL2tleS9rZXkudHlwZXMnO1xuaW1wb3J0IHsgQ29udGFjdENhcmROYW1lLCBUcnVzdGVkUGFydHlEZXRhaWxzIH0gZnJvbSAnLi4vcHJvZmlsZS9wcm9maWxlLnR5cGVzJztcbmltcG9ydCB7IFNoYXJlZFRydXN0ZWRQYXJ0eURldGFpbHMgfSBmcm9tICcuLi90cnVzdGVkLXBhcnR5L3RydXN0ZWQtcGFydHkudHlwZXMnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uL3VzZXIvdXNlci50eXBlcyc7XG5pbXBvcnQgeyBMckFwb2xsb1NlcnZpY2UgfSBmcm9tICcuLi9hcGkvbHItYXBvbGxvLnNlcnZpY2UnO1xuaW1wb3J0IHsgSlNPTk9iamVjdCB9IGZyb20gJy4uL2FwaS90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBTaGFyZWRDb250YWN0Q2FyZEZpZWxkcyA9IGBcbiAgaWRcbiAgb3duZXIge1xuICAgIGlkXG4gICAgdXNlcm5hbWVcbiAgfVxuICBvd25lcktleSB7XG4gICAgaWRcbiAgfVxuICBvd25lckNpcGhlckRhdGFcbiAgcmVjZWl2ZXIge1xuICAgIGlkXG4gICAgdXNlcm5hbWVcbiAgfVxuICByZWNlaXZlcktleSB7XG4gICAgaWRcbiAgfVxuICByZWNlaXZlckNpcGhlckRhdGFcbiAgc2hhcmVkS2V5IHtcbiAgICBpZFxuICB9XG4gIHNoYXJlZENpcGhlckRhdGFcbiAgc2hhcmVkQ2lwaGVyRGF0YVNpZ1xuICBzaGFyZWRDaXBoZXJEYXRhU2lnUHhrIHtcbiAgICBpZFxuICB9XG5gO1xuXG5jb25zdCBVcGRhdGVPd25lZENvbnRhY3RDYXJkID0gZ3FsYFxubXV0YXRpb24gVXBkYXRlT3duZWRDb250YWN0Q2FyZChcbiAgJGlucHV0OiBVcGRhdGVPd25lZENvbnRhY3RDYXJkSW5wdXQhXG4pIHtcbiAgdXBkYXRlT3duZWRDb250YWN0Q2FyZChcbiAgICBpbnB1dDogJGlucHV0XG4gICkge1xuICAgIG93bmVkQ29udGFjdENhcmQge1xuICAgICAgJHtTaGFyZWRDb250YWN0Q2FyZEZpZWxkc31cbiAgICB9XG4gIH1cbn1gO1xuXG5pbnRlcmZhY2UgVXBkYXRlT3duZWRDb250YWN0Q2FyZCB7XG4gIHVwZGF0ZU93bmVkQ29udGFjdENhcmQ6IHtcbiAgICBvd25lZENvbnRhY3RDYXJkOiBTaGFyZWRDb250YWN0Q2FyZDtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZWRDb250YWN0Q2FyZCB7XG4gIGlkOiBzdHJpbmc7XG4gIG93bmVyOiBVc2VyO1xuICBvd25lcktleTogS2V5O1xuICBvd25lckNpcGhlckRhdGE6IHN0cmluZztcbiAgcmVjZWl2ZXI6IFVzZXI7XG4gIHJlY2VpdmVyS2V5OiBLZXk7XG4gIHJlY2VpdmVyQ2lwaGVyRGF0YTogc3RyaW5nO1xuICBzaGFyZWRLZXk6IEtleTtcbiAgc2hhcmVkQ2lwaGVyRGF0YTogc3RyaW5nO1xuICAvLyBEZWNyeXB0ZWRcbiAgcGxhaW5Pd25lckNpcGhlckRhdGFKc29uOiBKU09OT2JqZWN0O1xuICBwbGFpblJlY2VpdmVyQ2lwaGVyRGF0YUpzb246IEpTT05PYmplY3Q7XG4gIHBsYWluU2hhcmVkQ2lwaGVyRGF0YUpzb246IEpTT05PYmplY3Q7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWRDb250YWN0Q2FyZFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsckFwb2xsbzogTHJBcG9sbG9TZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZSxcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgZGVjcnlwdFNoYXJlZFRydXN0ZWRQYXJ0eURldGFpbHMoXG4gICAgY2M6IFNoYXJlZENvbnRhY3RDYXJkXG4gICk6IFByb21pc2U8U2hhcmVkVHJ1c3RlZFBhcnR5RGV0YWlscz4ge1xuICAgIGNvbnN0IGRldGFpbHMgPSBhd2FpdCB0aGlzLmRlY3J5cHRUcnVzdGVkUGFydHlEZXRhaWxzKGNjKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogY2MuaWQsXG4gICAgICBvd25lZEtleUlkOiBjYy5vd25lcktleS5pZCxcbiAgICAgIHNoYXJlZEtleUlkOiBjYy5zaGFyZWRLZXkuaWQsXG4gICAgICAuLi5kZXRhaWxzLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWNyeXB0VHJ1c3RlZFBhcnR5RGV0YWlscyhcbiAgICBjYzogU2hhcmVkQ29udGFjdENhcmRcbiAgKTogUHJvbWlzZTxUcnVzdGVkUGFydHlEZXRhaWxzPiB7XG4gICAgaWYgKGNjICYmIGNjLnNoYXJlZEtleSAmJiBjYy5zaGFyZWRDaXBoZXJEYXRhKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5kZWNyeXB0KFxuICAgICAgICAgIGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KGNjLnNoYXJlZEtleS5pZCksXG4gICAgICAgICAgY2Muc2hhcmVkQ2lwaGVyRGF0YVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgZGVjcnlwdCB0cnVzdGVkIHBhcnR5IGRldGFpbHMnLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVNeVNoYXJlZENvbnRhY3RDYXJkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3duZWRLZXlJZDogc3RyaW5nLFxuICAgIHNoYXJlZEtleUlkOiBzdHJpbmcsXG4gICAgY29udGFjdENhcmQ6IFRydXN0ZWRQYXJ0eURldGFpbHNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3duZXJLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShvd25lZEtleUlkKTtcbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShzaGFyZWRLZXlJZCk7XG4gICAgY29uc3Qgc2lnUHhrID0gYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLmdldEN1cnJlbnRTaWdQeGsoKTtcblxuICAgIGNvbnN0IHNoYXJlZENpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQoXG4gICAgICBzaGFyZWRLZXkuandrLFxuICAgICAgY29udGFjdENhcmRcbiAgICApO1xuICAgIGNvbnN0IHNoYXJlZENpcGhlckRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCBzaGFyZWRDaXBoZXJEYXRhKVxuICAgICk7XG5cbiAgICBjb25zdCBvd25lclBsYWluRGF0YSA9IHtcbiAgICAgIG5hbWU6IG5ldyBDb250YWN0Q2FyZE5hbWUoY29udGFjdENhcmQubmFtZSksXG4gICAgfTtcbiAgICBjb25zdCBvd25lclBsYWluRGF0YVNpZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5zaWduKHNpZ1B4ay5qd2ssIG93bmVyUGxhaW5EYXRhKVxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZTxVcGRhdGVPd25lZENvbnRhY3RDYXJkPih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlT3duZWRDb250YWN0Q2FyZCxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIG93bmVyQ2lwaGVyRGF0YTogJycsXG4gICAgICAgICAgb3duZXJLZXlJZDogb3duZXJLZXkuaWQsXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YVNpZyxcbiAgICAgICAgICBzaGFyZWRLZXlJZDogc2hhcmVkS2V5LmlkLFxuICAgICAgICAgIHNpZ1B4a0lkOiBzaWdQeGsuaWQsXG4gICAgICAgICAgb3duZXJQbGFpbkRhdGFTaWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhY3QtY2FyZDIuZ3FsLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQtY29udGFjdC1jYXJkL3NoYXJlZC1jb250YWN0LWNhcmQyLmdxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFTMUMsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsUUFBUSxDQUFnQzs7Ozs7Ozs7O0VBU3BGLENBQUM7QUFTSCxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxRQUFRLENBQW1DOzs7Ozs7Ozs7RUFTMUYsQ0FBQztBQVlILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLFFBQVEsQ0FBZ0M7Ozs7Ozs7Ozs7RUFVcEYsQ0FBQztBQVNILE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLFFBQVEsQ0FBa0M7Ozs7Ozs7RUFPeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEIH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IGdxbFR5cGVkIH0gZnJvbSAnLi4vX2NvbW1vbi9hc3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU93bmVkQ29udGFjdENhcmRNdXRhdGlvbiB7XG4gIHVwZGF0ZU93bmVkQ29udGFjdENhcmQ6IHtcbiAgICBvd25lZENvbnRhY3RDYXJkOiB7XG4gICAgICBpZDogSUQ7XG4gICAgfTtcbiAgfTtcbn1cbmV4cG9ydCBjb25zdCBVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24gPSBncWxUeXBlZDxVcGRhdGVPd25lZENvbnRhY3RDYXJkTXV0YXRpb24+YFxubXV0YXRpb24gVXBkYXRlT3duZWRDb250YWN0Q2FyZE11dGF0aW9uKFxuICAkaW5wdXQ6IFVwZGF0ZU93bmVkQ29udGFjdENhcmRJbnB1dCFcbikge1xuICB1cGRhdGVPd25lZENvbnRhY3RDYXJkKGlucHV0OiAkaW5wdXQpIHtcbiAgICBvd25lZENvbnRhY3RDYXJkIHtcbiAgICAgIGlkXG4gICAgfVxuICB9XG59YDtcblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkTXV0YXRpb24ge1xuICB1cGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkOiB7XG4gICAgcmVjZWl2ZWRDb250YWN0Q2FyZDoge1xuICAgICAgaWQ6IElEO1xuICAgIH07XG4gIH07XG59XG5leHBvcnQgY29uc3QgVXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZE11dGF0aW9uID0gZ3FsVHlwZWQ8VXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZE11dGF0aW9uPmBcbm11dGF0aW9uIFVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmRNdXRhdGlvbihcbiAgJGlucHV0OiBVcGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkSW5wdXQhXG4pIHtcbiAgdXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZChpbnB1dDogJGlucHV0KSB7XG4gICAgcmVjZWl2ZWRDb250YWN0Q2FyZCB7XG4gICAgICBpZFxuICAgIH1cbiAgfVxufWA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0T3duZWRDb250YWN0Q2FyZEtleUlkc1F1ZXJ5IHtcbiAgb3duZWRDb250YWN0Q2FyZDoge1xuICAgIHNoYXJlZEtleToge1xuICAgICAgaWQ6IElEO1xuICAgIH07XG4gICAgb3duZXJLZXk6IHtcbiAgICAgIGlkOiBJRDtcbiAgICB9O1xuICB9O1xufVxuZXhwb3J0IGNvbnN0IEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeSA9IGdxbFR5cGVkPEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeT5gXG5xdWVyeSBHZXRPd25lZENvbnRhY3RDYXJkS2V5SWRzUXVlcnkoJGlkOiBMclJlbGF5SWRJbnB1dCEpIHtcbiAgb3duZWRDb250YWN0Q2FyZChpZDogJGlkKSB7XG4gICAgc2hhcmVkS2V5IHtcbiAgICAgIGlkXG4gICAgfVxuICAgIG93bmVyS2V5IHtcbiAgICAgIGlkXG4gICAgfVxuICB9XG59YDtcblxuZXhwb3J0IGludGVyZmFjZSBHZXRSZWNlaXZlZENvbnRhY3RDYXJkS2V5SWRRdWVyeSB7XG4gIHJlY2VpdmVkQ29udGFjdENhcmQ6IHtcbiAgICByZWNlaXZlcktleToge1xuICAgICAgaWQ6IElEO1xuICAgIH07XG4gIH07XG59XG5leHBvcnQgY29uc3QgR2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkUXVlcnkgPSBncWxUeXBlZDxHZXRSZWNlaXZlZENvbnRhY3RDYXJkS2V5SWRRdWVyeT5gXG5xdWVyeSBHZXRSZWNlaXZlZENvbnRhY3RDYXJkS2V5SWRRdWVyeSgkaWQ6IExyUmVsYXlJZElucHV0ISkge1xuICByZWNlaXZlZENvbnRhY3RDYXJkKGlkOiAkaWQpIHtcbiAgICByZWNlaXZlcktleSB7XG4gICAgICBpZFxuICAgIH1cbiAgfVxufWA7XG4iXX0=
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { __awaiter, __decorate } from "tslib";
|
|
2
|
+
import { Injectable, NgZone } from '@angular/core';
|
|
3
|
+
import { LrGraphQLService, LrMutation } from '../api/lr-graphql';
|
|
4
|
+
import { EncryptionService } from '../encryption/encryption.service';
|
|
5
|
+
import { KeyGraphService } from '../key/key-graph.service';
|
|
6
|
+
import { KeyService } from '../key/key.service';
|
|
7
|
+
import { RunOutsideAngular } from '../_common/run-outside-angular';
|
|
8
|
+
import { GetOwnedContactCardKeyIdsQuery, GetReceivedContactCardKeyIdQuery, UpdateOwnedContactCardMutation, UpdateReceivedContactCardMutation, } from './shared-contact-card2.gql';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../key/key.service";
|
|
11
|
+
import * as i2 from "../key/key-graph.service";
|
|
12
|
+
import * as i3 from "../encryption/encryption.service";
|
|
13
|
+
import * as i4 from "../api/lr-graphql/lr-graphql.service";
|
|
14
|
+
let SharedContactCard2Service = class SharedContactCard2Service {
|
|
15
|
+
constructor(ngZone, keyService, keyGraph, encryptionService, lrGraphQL) {
|
|
16
|
+
this.ngZone = ngZone;
|
|
17
|
+
this.keyService = keyService;
|
|
18
|
+
this.keyGraph = keyGraph;
|
|
19
|
+
this.encryptionService = encryptionService;
|
|
20
|
+
this.lrGraphQL = lrGraphQL;
|
|
21
|
+
}
|
|
22
|
+
getOwnedContactCardKeyIds(id) {
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
const { ownedContactCard: cc } = yield this.lrGraphQL.query({
|
|
25
|
+
query: GetOwnedContactCardKeyIdsQuery,
|
|
26
|
+
variables: {
|
|
27
|
+
id,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
sharedKeyId: cc.sharedKey.id,
|
|
32
|
+
ownerKeyId: cc.ownerKey.id,
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
getReceivedContactCardKeyId(id) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
return (yield this.lrGraphQL.query({
|
|
39
|
+
query: GetReceivedContactCardKeyIdQuery,
|
|
40
|
+
variables: {
|
|
41
|
+
id,
|
|
42
|
+
},
|
|
43
|
+
})).receivedContactCard.receiverKey.id;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
updateOwnedContactCard({ id, ownerKeyId, sharedKeyId, ownerPlainDataJson, ownerCipherDataClearJson, sharedCipherDataClearJson, }) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
let ownerKey;
|
|
49
|
+
let sharedKey;
|
|
50
|
+
try {
|
|
51
|
+
ownerKey = yield this.keyGraph.getKey(ownerKeyId);
|
|
52
|
+
sharedKey = yield this.keyGraph.getKey(sharedKeyId);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const keys = yield this.getOwnedContactCardKeyIds(id);
|
|
56
|
+
// try again
|
|
57
|
+
ownerKey = yield this.keyGraph.getKey(keys.ownerKeyId);
|
|
58
|
+
sharedKey = yield this.keyGraph.getKey(keys.sharedKeyId);
|
|
59
|
+
}
|
|
60
|
+
const sigPxk = yield this.keyService.getCurrentSigPxk();
|
|
61
|
+
const sharedCipherData = yield this.encryptionService.encrypt(sharedKey.jwk, sharedCipherDataClearJson);
|
|
62
|
+
const sharedCipherDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, sharedCipherData));
|
|
63
|
+
const ownerPlainDataSig = JSON.stringify(yield this.encryptionService.sign(sigPxk.jwk, ownerPlainDataJson));
|
|
64
|
+
const ownerCipherData = yield this.encryptionService.encryptToString(ownerKey.jwk, ownerCipherDataClearJson);
|
|
65
|
+
return new LrMutation({
|
|
66
|
+
mutation: UpdateOwnedContactCardMutation,
|
|
67
|
+
variables: {
|
|
68
|
+
input: {
|
|
69
|
+
id,
|
|
70
|
+
ownerCipherData,
|
|
71
|
+
ownerKeyId: ownerKey.id,
|
|
72
|
+
sharedCipherDataSig,
|
|
73
|
+
sharedKeyId: sharedKey.id,
|
|
74
|
+
sigPxkId: sigPxk.id,
|
|
75
|
+
ownerPlainDataSig,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
updateReceivedContactCard({ id, receiverKeyId, receiverCipherDataClearJson, }) {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
const receiverKey = yield this.keyGraph.getKey(receiverKeyId, () => this.getReceivedContactCardKeyId(id));
|
|
84
|
+
const receiverCipherData = yield this.encryptionService.encryptToString(receiverKey.jwk, receiverCipherDataClearJson);
|
|
85
|
+
return new LrMutation({
|
|
86
|
+
mutation: UpdateReceivedContactCardMutation,
|
|
87
|
+
variables: {
|
|
88
|
+
input: {
|
|
89
|
+
id,
|
|
90
|
+
receiverCipherData,
|
|
91
|
+
receiverKeyId: receiverKey.id,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
SharedContactCard2Service.ɵprov = i0.ɵɵdefineInjectable({ factory: function SharedContactCard2Service_Factory() { return new SharedContactCard2Service(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.KeyService), i0.ɵɵinject(i2.KeyGraphService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.LrGraphQLService)); }, token: SharedContactCard2Service, providedIn: "root" });
|
|
99
|
+
SharedContactCard2Service.decorators = [
|
|
100
|
+
{ type: Injectable, args: [{
|
|
101
|
+
providedIn: 'root',
|
|
102
|
+
},] }
|
|
103
|
+
];
|
|
104
|
+
SharedContactCard2Service.ctorParameters = () => [
|
|
105
|
+
{ type: NgZone },
|
|
106
|
+
{ type: KeyService },
|
|
107
|
+
{ type: KeyGraphService },
|
|
108
|
+
{ type: EncryptionService },
|
|
109
|
+
{ type: LrGraphQLService }
|
|
110
|
+
];
|
|
111
|
+
SharedContactCard2Service = __decorate([
|
|
112
|
+
RunOutsideAngular({
|
|
113
|
+
ngZoneName: 'ngZone',
|
|
114
|
+
})
|
|
115
|
+
], SharedContactCard2Service);
|
|
116
|
+
export { SharedContactCard2Service };
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhY3QtY2FyZDIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvc2hhcmVkLWNvbnRhY3QtY2FyZC9zaGFyZWQtY29udGFjdC1jYXJkMi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFLckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIsaUNBQWlDLEdBQ2xDLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztJQW9CdkIseUJBQXlCLFNBQXpCLHlCQUF5QjtJQUNwQyxZQUNVLE1BQWMsRUFDZCxVQUFzQixFQUN0QixRQUF5QixFQUN6QixpQkFBb0MsRUFDcEMsU0FBMkI7UUFKM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUNsQyxDQUFDO0lBRVUseUJBQXlCLENBQUMsRUFBa0I7O1lBQ3hELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFN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TSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQ2pFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FDckMsQ0FBQztZQUVGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUNyRSxXQUFXLENBQUMsR0FBRyxFQUNmLDJCQUEyQixDQUM1QixDQUFDO1lBRUYsT0FBTyxJQUFJLFVBQVUsQ0FBQztnQkFDcEIsUUFBUSxFQUFFLGlDQUFpQztnQkFDM0MsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRTt3QkFDTCxFQUFFO3dCQUNGLGtCQUFrQjt3QkFDbEIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFO3FCQUM5QjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtDQUNGLENBQUE7OztZQXZIQSxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQXBDb0IsTUFBTTtZQVNsQixVQUFVO1lBRFYsZUFBZTtZQUxmLGlCQUFpQjtZQUZqQixnQkFBZ0I7O0FBb0NaLHlCQUF5QjtJQU5yQyxpQkFBaUIsQ0FBQztRQUNqQixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0dBSVcseUJBQXlCLENBb0hyQztTQXBIWSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExyR3JhcGhRTFNlcnZpY2UsIExyTXV0YXRpb24gfSBmcm9tICcuLi9hcGkvbHItZ3JhcGhxbCc7XG5pbXBvcnQgeyBMclJlbGF5SWRJbnB1dCB9IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL2VuY3J5cHRpb24vZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENvbnRhY3RDYXJkUmVjZWl2ZXJDaXBoZXJEYXRhLFxuICBTZW5kQ29udGFjdENhcmRJbnB1dCxcbn0gZnJvbSAnLi4va2V5LWV4Y2hhbmdlL2tleS1leGNoYW5nZTIuc2VydmljZSc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2tleS9rZXkuc2VydmljZSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuLi9rZXkva2V5LnR5cGVzJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEdldE93bmVkQ29udGFjdENhcmRLZXlJZHNRdWVyeSxcbiAgR2V0UmVjZWl2ZWRDb250YWN0Q2FyZEtleUlkUXVlcnksXG4gIFVwZGF0ZU93bmVkQ29udGFjdENhcmRNdXRhdGlvbixcbiAgVXBkYXRlUmVjZWl2ZWRDb250YWN0Q2FyZE11dGF0aW9uLFxufSBmcm9tICcuL3NoYXJlZC1jb250YWN0LWNhcmQyLmdxbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlT3duZWRDb250YWN0Q2FyZElucHV0IGV4dGVuZHMgU2VuZENvbnRhY3RDYXJkSW5wdXQge1xuICBpZDogTHJSZWxheUlkSW5wdXQ7XG4gIG93bmVyS2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcbiAgc2hhcmVkS2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkSW5wdXRcbiAgZXh0ZW5kcyBDb250YWN0Q2FyZFJlY2VpdmVyQ2lwaGVyRGF0YSB7XG4gIGlkOiBMclJlbGF5SWRJbnB1dDtcbiAgcmVjZWl2ZXJLZXlJZD86IExyUmVsYXlJZElucHV0O1xufVxuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2hhcmVkQ29udGFjdENhcmQyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZSxcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGxyR3JhcGhRTDogTHJHcmFwaFFMU2VydmljZVxuICApIHt9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRPd25lZENvbnRhY3RDYXJkS2V5SWRzKGlkOiBMclJlbGF5SWRJbnB1dCkge1xuICAgIGNvbnN0IHsgb3duZWRDb250YWN0Q2FyZDogY2MgfSA9IGF3YWl0IHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBHZXRPd25lZENvbnRhY3RDYXJkS2V5SWRzUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaWQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNoYXJlZEtleUlkOiBjYy5zaGFyZWRLZXkuaWQsXG4gICAgICBvd25lcktleUlkOiBjYy5vd25lcktleS5pZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZWNlaXZlZENvbnRhY3RDYXJkS2V5SWQoaWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IEdldFJlY2VpdmVkQ29udGFjdENhcmRLZXlJZFF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS5yZWNlaXZlZENvbnRhY3RDYXJkLnJlY2VpdmVyS2V5LmlkO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlT3duZWRDb250YWN0Q2FyZCh7XG4gICAgaWQsXG4gICAgb3duZXJLZXlJZCxcbiAgICBzaGFyZWRLZXlJZCxcbiAgICBvd25lclBsYWluRGF0YUpzb24sXG4gICAgb3duZXJDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gIH06IFVwZGF0ZU93bmVkQ29udGFjdENhcmRJbnB1dCkge1xuICAgIGxldCBvd25lcktleTogS2V5O1xuICAgIGxldCBzaGFyZWRLZXk6IEtleTtcblxuICAgIHRyeSB7XG4gICAgICBvd25lcktleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KG93bmVyS2V5SWQpO1xuICAgICAgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoc2hhcmVkS2V5SWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBrZXlzID0gYXdhaXQgdGhpcy5nZXRPd25lZENvbnRhY3RDYXJkS2V5SWRzKGlkKTtcblxuICAgICAgLy8gdHJ5IGFnYWluXG4gICAgICBvd25lcktleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KGtleXMub3duZXJLZXlJZCk7XG4gICAgICBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShrZXlzLnNoYXJlZEtleUlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWdQeGsgPSBhd2FpdCB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFNpZ1B4aygpO1xuXG4gICAgY29uc3Qgc2hhcmVkQ2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcbiAgICAgIHNoYXJlZEtleS5qd2ssXG4gICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uXG4gICAgKTtcbiAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhU2lnID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLnNpZ24oc2lnUHhrLmp3aywgc2hhcmVkQ2lwaGVyRGF0YSlcbiAgICApO1xuXG4gICAgY29uc3Qgb3duZXJQbGFpbkRhdGFTaWcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihzaWdQeGsuandrLCBvd25lclBsYWluRGF0YUpzb24pXG4gICAgKTtcblxuICAgIGNvbnN0IG93bmVyQ2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgb3duZXJLZXkuandrLFxuICAgICAgb3duZXJDaXBoZXJEYXRhQ2xlYXJKc29uXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlT3duZWRDb250YWN0Q2FyZE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgb3duZXJDaXBoZXJEYXRhLFxuICAgICAgICAgIG93bmVyS2V5SWQ6IG93bmVyS2V5LmlkLFxuICAgICAgICAgIHNoYXJlZENpcGhlckRhdGFTaWcsXG4gICAgICAgICAgc2hhcmVkS2V5SWQ6IHNoYXJlZEtleS5pZCxcbiAgICAgICAgICBzaWdQeGtJZDogc2lnUHhrLmlkLFxuICAgICAgICAgIG93bmVyUGxhaW5EYXRhU2lnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJlY2VpdmVkQ29udGFjdENhcmQoe1xuICAgIGlkLFxuICAgIHJlY2VpdmVyS2V5SWQsXG4gICAgcmVjZWl2ZXJDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICB9OiBVcGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkSW5wdXQpIHtcbiAgICBjb25zdCByZWNlaXZlcktleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KHJlY2VpdmVyS2V5SWQsICgpID0+XG4gICAgICB0aGlzLmdldFJlY2VpdmVkQ29udGFjdENhcmRLZXlJZChpZClcbiAgICApO1xuXG4gICAgY29uc3QgcmVjZWl2ZXJDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICByZWNlaXZlcktleS5qd2ssXG4gICAgICByZWNlaXZlckNpcGhlckRhdGFDbGVhckpzb25cbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVSZWNlaXZlZENvbnRhY3RDYXJkTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICByZWNlaXZlckNpcGhlckRhdGEsXG4gICAgICAgICAgcmVjZWl2ZXJLZXlJZDogcmVjZWl2ZXJLZXkuaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { Slip39, Slip39Helper } from 'slip39';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class SecretShare {
|
|
6
|
+
constructor(assembly = 0, subAssembly = 0, mnemonics = '') {
|
|
7
|
+
this.assembly = assembly;
|
|
8
|
+
this.subAssembly = subAssembly;
|
|
9
|
+
this.mnemonics = mnemonics;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class SubAssembly {
|
|
13
|
+
constructor(index, threshold = 0, size = 0) {
|
|
14
|
+
this.index = index;
|
|
15
|
+
this.threshold = threshold;
|
|
16
|
+
this.size = size;
|
|
17
|
+
this.clearShares();
|
|
18
|
+
}
|
|
19
|
+
clearShares() {
|
|
20
|
+
this.shares = Array();
|
|
21
|
+
}
|
|
22
|
+
addShare(share) {
|
|
23
|
+
this.shares.push(share);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class Assembly {
|
|
27
|
+
constructor(threshold = 0) {
|
|
28
|
+
this.threshold = threshold;
|
|
29
|
+
this.clearSubAssemblies();
|
|
30
|
+
}
|
|
31
|
+
size() {
|
|
32
|
+
return this.subAssemblies.length;
|
|
33
|
+
}
|
|
34
|
+
clearSubAssemblies() {
|
|
35
|
+
this.subAssemblies = new Array();
|
|
36
|
+
}
|
|
37
|
+
addSubAssembly(subAssembly) {
|
|
38
|
+
this.subAssemblies.push(subAssembly);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class SubQuorum {
|
|
42
|
+
constructor(subAssemblyIndex) {
|
|
43
|
+
this.subAssemblyIndex = subAssemblyIndex;
|
|
44
|
+
this.clearShares();
|
|
45
|
+
}
|
|
46
|
+
clearShares() {
|
|
47
|
+
this.shares = new Array();
|
|
48
|
+
}
|
|
49
|
+
addShare(share) {
|
|
50
|
+
this.shares.push(share);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export class Quorum {
|
|
54
|
+
constructor() {
|
|
55
|
+
this.clearSubQuora();
|
|
56
|
+
}
|
|
57
|
+
clearSubQuora() {
|
|
58
|
+
this.subQuora = new Array();
|
|
59
|
+
}
|
|
60
|
+
addSubQuorum(subQuorum) {
|
|
61
|
+
this.subQuora.push(subQuorum);
|
|
62
|
+
}
|
|
63
|
+
serialiseShares() {
|
|
64
|
+
let shares = [];
|
|
65
|
+
this.subQuora.forEach((subQuorum) => {
|
|
66
|
+
shares = shares.concat(subQuorum.shares);
|
|
67
|
+
});
|
|
68
|
+
return shares;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export class Slip39Service {
|
|
72
|
+
constructor() { }
|
|
73
|
+
generateShares(secret, passphrase, assembly) {
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
// Hex-encode secret.
|
|
76
|
+
let ems = btoa(secret);
|
|
77
|
+
ems = Slip39Helper.slip39EncodeHex(ems);
|
|
78
|
+
// Construct group specifications
|
|
79
|
+
const groups = [];
|
|
80
|
+
for (const sa of assembly.subAssemblies) {
|
|
81
|
+
groups.push([sa.threshold, sa.size]);
|
|
82
|
+
}
|
|
83
|
+
// Split!
|
|
84
|
+
const slip = yield Slip39.fromArray(ems, {
|
|
85
|
+
passphrase,
|
|
86
|
+
threshold: assembly.threshold,
|
|
87
|
+
groups,
|
|
88
|
+
title: '',
|
|
89
|
+
});
|
|
90
|
+
// Extract shares
|
|
91
|
+
assembly.subAssemblies.forEach((sa, isa) => {
|
|
92
|
+
// Remove any existing shares
|
|
93
|
+
sa.clearShares();
|
|
94
|
+
for (let im = 0; im < sa.size; im++) {
|
|
95
|
+
// Construct the path to the share, formatted as "r/<subassembly index>/<member index>"
|
|
96
|
+
// with <subassembly index> and <member index> being two-digit, zero-padded integers.
|
|
97
|
+
const path = 'r/' +
|
|
98
|
+
isa.toString().padStart(2, '0') +
|
|
99
|
+
'/' +
|
|
100
|
+
im.toString().padStart(2, '0');
|
|
101
|
+
const mnemonics = slip.fromPath(path).mnemonics[0];
|
|
102
|
+
const share = new SecretShare(isa, im, mnemonics);
|
|
103
|
+
sa.addShare(share);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// Remove all redundant shares. i.e. keep only enough members and groups to satisfy the thresholds.
|
|
109
|
+
minimalSet(mnemonics) {
|
|
110
|
+
// Decode the mnemonics and sort then into groups.
|
|
111
|
+
let groupThresh = null;
|
|
112
|
+
const groups = new Map();
|
|
113
|
+
for (const mnemonic of mnemonics) {
|
|
114
|
+
const decoded = Slip39Helper.decodeMnemonic(mnemonic);
|
|
115
|
+
if (groupThresh && groupThresh !== decoded.groupThreshold) {
|
|
116
|
+
throw new Error('groupThreshold is different in mnemonics');
|
|
117
|
+
}
|
|
118
|
+
groupThresh = decoded.groupThreshold;
|
|
119
|
+
// Note that Slip39.recoverSecret() will do all the error checking again. So it's not critical
|
|
120
|
+
// that we error check here. So we just optimistically assume it's all good.
|
|
121
|
+
let g = groups.get(decoded.groupIndex);
|
|
122
|
+
if (g == null) {
|
|
123
|
+
g = {
|
|
124
|
+
memberThreshold: decoded.memberThreshold,
|
|
125
|
+
members: [],
|
|
126
|
+
};
|
|
127
|
+
groups.set(decoded.groupIndex, g);
|
|
128
|
+
}
|
|
129
|
+
g.members.push({
|
|
130
|
+
mnemonic,
|
|
131
|
+
decoded,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// Keep the minimum set of groups that meet threshold.
|
|
135
|
+
const mnemonicsMinSet = [];
|
|
136
|
+
let groupCount = 0;
|
|
137
|
+
for (const g of groups.values()) {
|
|
138
|
+
// Keep only groups that meet threshold
|
|
139
|
+
if (g.members.length < g.memberThreshold) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
// Keep minimum number of approvals needed for group
|
|
143
|
+
g.members.slice(0, g.memberThreshold).forEach((member) => {
|
|
144
|
+
mnemonicsMinSet.push(member.mnemonic);
|
|
145
|
+
});
|
|
146
|
+
++groupCount;
|
|
147
|
+
if (groupCount >= groupThresh) {
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return mnemonicsMinSet;
|
|
152
|
+
}
|
|
153
|
+
recoverSecret(shares, passphrase) {
|
|
154
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
155
|
+
shares = this.minimalSet(shares);
|
|
156
|
+
const recovered = yield Slip39.recoverSecret(shares, passphrase);
|
|
157
|
+
const secret = Slip39Helper.slip39DecodeHex(recovered);
|
|
158
|
+
return atob(secret);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
Slip39Service.ɵprov = i0.ɵɵdefineInjectable({ factory: function Slip39Service_Factory() { return new Slip39Service(); }, token: Slip39Service, providedIn: "root" });
|
|
163
|
+
Slip39Service.decorators = [
|
|
164
|
+
{ type: Injectable, args: [{
|
|
165
|
+
providedIn: 'root',
|
|
166
|
+
},] }
|
|
167
|
+
];
|
|
168
|
+
Slip39Service.ctorParameters = () => [];
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpcDM5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3NsaXAzOS9zbGlwMzkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFFOUMsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDUyxXQUFtQixDQUFDLEVBQ3BCLGNBQXNCLENBQUMsRUFDdkIsWUFBb0IsRUFBRTtRQUZ0QixhQUFRLEdBQVIsUUFBUSxDQUFZO1FBQ3BCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGNBQVMsR0FBVCxTQUFTLENBQWE7SUFDNUIsQ0FBQztDQUNMO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDUyxLQUFhLEVBQ2IsWUFBb0IsQ0FBQyxFQUNyQixPQUFlLENBQUM7UUFGaEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUV2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUlNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQWtCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFlBQW1CLFlBQW9CLENBQUM7UUFBckIsY0FBUyxHQUFULFNBQVMsQ0FBWTtRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBSU0sSUFB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cG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsaXAzOSwgU2xpcDM5SGVscGVyIH0gZnJvbSAnc2xpcDM5JztcblxuZXhwb3J0IGNsYXNzIFNlY3JldFNoYXJlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFzc2VtYmx5OiBudW1iZXIgPSAwLFxuICAgIHB1YmxpYyBzdWJBc3NlbWJseTogbnVtYmVyID0gMCxcbiAgICBwdWJsaWMgbW5lbW9uaWNzOiBzdHJpbmcgPSAnJ1xuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBTdWJBc3NlbWJseSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLFxuICAgIHB1YmxpYyB0aHJlc2hvbGQ6IG51bWJlciA9IDAsXG4gICAgcHVibGljIHNpemU6IG51bWJlciA9IDBcbiAgKSB7XG4gICAgdGhpcy5jbGVhclNoYXJlcygpO1xuICB9XG5cbiAgc2hhcmVzOiBTZWNyZXRTaGFyZVtdO1xuXG4gIHB1YmxpYyBjbGVhclNoYXJlcygpIHtcbiAgICB0aGlzLnNoYXJlcyA9IEFycmF5KCk7XG4gIH1cblxuICBwdWJsaWMgYWRkU2hhcmUoc2hhcmU6IFNlY3JldFNoYXJlKSB7XG4gICAgdGhpcy5zaGFyZXMucHVzaChzaGFyZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFzc2VtYmx5IHtcbiAgY29uc3RydWN0b3IocHVibGljIHRocmVzaG9sZDogbnVtYmVyID0gMCkge1xuICAgIHRoaXMuY2xlYXJTdWJBc3NlbWJsaWVzKCk7XG4gIH1cblxuICBzdWJBc3NlbWJsaWVzOiBTdWJBc3NlbWJseVtdO1xuXG4gIHB1YmxpYyBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLnN1YkFzc2VtYmxpZXMubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU3ViQXNzZW1ibGllcygpIHtcbiAgICB0aGlzLnN1YkFzc2VtYmxpZXMgPSBuZXcgQXJyYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRTdWJBc3NlbWJseShzdWJBc3NlbWJseTogU3ViQXNzZW1ibHkpIHtcbiAgICB0aGlzLnN1YkFzc2VtYmxpZXMucHVzaChzdWJBc3NlbWJseSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1YlF1b3J1bSB7XG4gIHNoYXJlczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIHN1YkFzc2VtYmx5SW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY2xlYXJTaGFyZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNoYXJlcygpIHtcbiAgICB0aGlzLnNoYXJlcyA9IG5ldyBBcnJheSgpO1xuICB9XG5cbiAgcHVibGljIGFkZFNoYXJlKHNoYXJlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNoYXJlcy5wdXNoKHNoYXJlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVvcnVtIHtcbiAgc3ViUXVvcmE6IFN1YlF1b3J1bVtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYXJTdWJRdW9yYSgpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU3ViUXVvcmEoKSB7XG4gICAgdGhpcy5zdWJRdW9yYSA9IG5ldyBBcnJheSgpO1xuICB9XG5cbiAgcHVibGljIGFkZFN1YlF1b3J1bShzdWJRdW9ydW06IFN1YlF1b3J1bSkge1xuICAgIHRoaXMuc3ViUXVvcmEucHVzaChzdWJRdW9ydW0pO1xuICB9XG5cbiAgcHVibGljIHNlcmlhbGlzZVNoYXJlcygpIHtcbiAgICBsZXQgc2hhcmVzID0gW107XG5cbiAgICB0aGlzLnN1YlF1b3JhLmZvckVhY2goKHN1YlF1b3J1bSkgPT4ge1xuICAgICAgc2hhcmVzID0gc2hhcmVzLmNvbmNhdChzdWJRdW9ydW0uc2hhcmVzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzaGFyZXM7XG4gIH1cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNsaXAzOVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlU2hhcmVzKHNlY3JldCwgcGFzc3BocmFzZTogc3RyaW5nLCBhc3NlbWJseTogQXNzZW1ibHkpIHtcbiAgICAvLyBIZXgtZW5jb2RlIHNlY3JldC5cbiAgICBsZXQgZW1zID0gYnRvYShzZWNyZXQpO1xuICAgIGVtcyA9IFNsaXAzOUhlbHBlci5zbGlwMzlFbmNvZGVIZXgoZW1zKTtcblxuICAgIC8vIENvbnN0cnVjdCBncm91cCBzcGVjaWZpY2F0aW9uc1xuICAgIGNvbnN0IGdyb3VwcyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzYSBvZiBhc3NlbWJseS5zdWJBc3NlbWJsaWVzKSB7XG4gICAgICBncm91cHMucHVzaChbc2EudGhyZXNob2xkLCBzYS5zaXplXSk7XG4gICAgfVxuXG4gICAgLy8gU3BsaXQhXG4gICAgY29uc3Qgc2xpcCA9IGF3YWl0IFNsaXAzOS5mcm9tQXJyYXkoZW1zLCB7XG4gICAgICBwYXNzcGhyYXNlLFxuICAgICAgdGhyZXNob2xkOiBhc3NlbWJseS50aHJlc2hvbGQsXG4gICAgICBncm91cHMsXG4gICAgICB0aXRsZTogJycsXG4gICAgfSk7XG5cbiAgICAvLyBFeHRyYWN0IHNoYXJlc1xuICAgIGFzc2VtYmx5LnN1YkFzc2VtYmxpZXMuZm9yRWFjaCgoc2EsIGlzYSkgPT4ge1xuICAgICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyBzaGFyZXNcbiAgICAgIHNhLmNsZWFyU2hhcmVzKCk7XG5cbiAgICAgIGZvciAobGV0IGltID0gMDsgaW0gPCBzYS5zaXplOyBpbSsrKSB7XG4gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgcGF0aCB0byB0aGUgc2hhcmUsIGZvcm1hdHRlZCBhcyBcInIvPHN1YmFzc2VtYmx5IGluZGV4Pi88bWVtYmVyIGluZGV4PlwiXG4gICAgICAgIC8vIHdpdGggPHN1YmFzc2VtYmx5IGluZGV4PiBhbmQgPG1lbWJlciBpbmRleD4gYmVpbmcgdHdvLWRpZ2l0LCB6ZXJvLXBhZGRlZCBpbnRlZ2Vycy5cbiAgICAgICAgY29uc3QgcGF0aCA9XG4gICAgICAgICAgJ3IvJyArXG4gICAgICAgICAgaXNhLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAgICAgJy8nICtcbiAgICAgICAgICBpbS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIGNvbnN0IG1uZW1vbmljcyA9IHNsaXAuZnJvbVBhdGgocGF0aCkubW5lbW9uaWNzWzBdO1xuICAgICAgICBjb25zdCBzaGFyZSA9IG5ldyBTZWNyZXRTaGFyZShpc2EsIGltLCBtbmVtb25pY3MpO1xuXG4gICAgICAgIHNhLmFkZFNoYXJlKHNoYXJlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBhbGwgcmVkdW5kYW50IHNoYXJlcy4gaS5lLiBrZWVwIG9ubHkgZW5vdWdoIG1lbWJlcnMgYW5kIGdyb3VwcyB0byBzYXRpc2Z5IHRoZSB0aHJlc2hvbGRzLlxuICBwcml2YXRlIG1pbmltYWxTZXQobW5lbW9uaWNzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAvLyBEZWNvZGUgdGhlIG1uZW1vbmljcyBhbmQgc29ydCB0aGVuIGludG8gZ3JvdXBzLlxuICAgIGxldCBncm91cFRocmVzaCA9IG51bGw7XG4gICAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgbW5lbW9uaWMgb2YgbW5lbW9uaWNzKSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gU2xpcDM5SGVscGVyLmRlY29kZU1uZW1vbmljKG1uZW1vbmljKTtcblxuICAgICAgaWYgKGdyb3VwVGhyZXNoICYmIGdyb3VwVGhyZXNoICE9PSBkZWNvZGVkLmdyb3VwVGhyZXNob2xkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ3JvdXBUaHJlc2hvbGQgaXMgZGlmZmVyZW50IGluIG1uZW1vbmljcycpO1xuICAgICAgfVxuXG4gICAgICBncm91cFRocmVzaCA9IGRlY29kZWQuZ3JvdXBUaHJlc2hvbGQ7XG5cbiAgICAgIC8vIE5vdGUgdGhhdCBTbGlwMzkucmVjb3ZlclNlY3JldCgpIHdpbGwgZG8gYWxsIHRoZSBlcnJvciBjaGVja2luZyBhZ2Fpbi4gU28gaXQncyBub3QgY3JpdGljYWxcbiAgICAgIC8vIHRoYXQgd2UgZXJyb3IgY2hlY2sgaGVyZS4gU28gd2UganVzdCBvcHRpbWlzdGljYWxseSBhc3N1bWUgaXQncyBhbGwgZ29vZC5cbiAgICAgIGxldCBnID0gZ3JvdXBzLmdldChkZWNvZGVkLmdyb3VwSW5kZXgpO1xuICAgICAgaWYgKGcgPT0gbnVsbCkge1xuICAgICAgICBnID0ge1xuICAgICAgICAgIG1lbWJlclRocmVzaG9sZDogZGVjb2RlZC5tZW1iZXJUaHJlc2hvbGQsXG4gICAgICAgICAgbWVtYmVyczogW10sXG4gICAgICAgIH07XG4gICAgICAgIGdyb3Vwcy5zZXQoZGVjb2RlZC5ncm91cEluZGV4LCBnKTtcbiAgICAgIH1cblxuICAgICAgZy5tZW1iZXJzLnB1c2goe1xuICAgICAgICBtbmVtb25pYyxcbiAgICAgICAgZGVjb2RlZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEtlZXAgdGhlIG1pbmltdW0gc2V0IG9mIGdyb3VwcyB0aGF0IG1lZXQgdGhyZXNob2xkLlxuICAgIGNvbnN0IG1uZW1vbmljc01pblNldCA9IFtdO1xuICAgIGxldCBncm91cENvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGcgb2YgZ3JvdXBzLnZhbHVlcygpKSB7XG4gICAgICAvLyBLZWVwIG9ubHkgZ3JvdXBzIHRoYXQgbWVldCB0aHJlc2hvbGRcbiAgICAgIGlmIChnLm1lbWJlcnMubGVuZ3RoIDwgZy5tZW1iZXJUaHJlc2hvbGQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEtlZXAgbWluaW11bSBudW1iZXIgb2YgYXBwcm92YWxzIG5lZWRlZCBmb3IgZ3JvdXBcbiAgICAgIGcubWVtYmVycy5zbGljZSgwLCBnLm1lbWJlclRocmVzaG9sZCkuZm9yRWFjaCgobWVtYmVyKSA9PiB7XG4gICAgICAgIG1uZW1vbmljc01pblNldC5wdXNoKG1lbWJlci5tbmVtb25pYyk7XG4gICAgICB9KTtcblxuICAgICAgKytncm91cENvdW50O1xuICAgICAgaWYgKGdyb3VwQ291bnQgPj0gZ3JvdXBUaHJlc2gpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1uZW1vbmljc01pblNldDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNvdmVyU2VjcmV0KHNoYXJlczogc3RyaW5nW10sIHBhc3NwaHJhc2U6IHN0cmluZykge1xuICAgIHNoYXJlcyA9IHRoaXMubWluaW1hbFNldChzaGFyZXMpO1xuXG4gICAgY29uc3QgcmVjb3ZlcmVkID0gYXdhaXQgU2xpcDM5LnJlY292ZXJTZWNyZXQoc2hhcmVzLCBwYXNzcGhyYXNlKTtcblxuICAgIGNvbnN0IHNlY3JldCA9IFNsaXAzOUhlbHBlci5zbGlwMzlEZWNvZGVIZXgocmVjb3ZlcmVkKTtcblxuICAgIHJldHVybiBhdG9iKHNlY3JldCk7XG4gIH1cbn1cbiJdfQ==
|