@lifeready/core 0.6.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/bundles/lifeready-core.umd.js +15939 -0
- package/bundles/lifeready-core.umd.js.map +1 -0
- package/bundles/lifeready-core.umd.min.js +2 -0
- package/bundles/lifeready-core.umd.min.js.map +1 -0
- package/esm2015/lib/_common/ast.js +40 -0
- package/esm2015/lib/_common/deferred-promise.js +24 -0
- package/esm2015/lib/_common/exceptions.js +157 -0
- package/esm2015/lib/_common/queries.gql.js +190 -0
- package/esm2015/lib/_common/run-outside-angular.js +79 -0
- package/esm2015/lib/_common/types.js +1 -0
- package/esm2015/lib/_common/utils.js +44 -0
- package/esm2015/lib/api/contact-card.gql.js +79 -0
- package/esm2015/lib/api/contact-card.service.js +154 -0
- package/esm2015/lib/api/contact-card2.gql.js +60 -0
- package/esm2015/lib/api/contact-card2.service.js +103 -0
- package/esm2015/lib/api/file.service.js +74 -0
- package/esm2015/lib/api/item2.gql.js +110 -0
- package/esm2015/lib/api/item2.service.js +311 -0
- package/esm2015/lib/api/key-exchange.gql.js +188 -0
- package/esm2015/lib/api/key-exchange.service.js +442 -0
- package/esm2015/lib/api/key-exchange.types.js +18 -0
- package/esm2015/lib/api/key-exchange2.gql.js +171 -0
- package/esm2015/lib/api/key-exchange2.service.js +479 -0
- package/esm2015/lib/api/lock.gql.js +40 -0
- package/esm2015/lib/api/lock.service.js +64 -0
- package/esm2015/lib/api/lr-apollo.service.js +46 -0
- package/esm2015/lib/api/lr-graphql/index.js +6 -0
- package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -0
- package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -0
- package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -0
- package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -0
- package/esm2015/lib/api/lr-graphql/lr.service.js +18 -0
- package/esm2015/lib/api/message.service.js +138 -0
- package/esm2015/lib/api/persist.service.js +181 -0
- package/esm2015/lib/api/query-processor/common-processors.service.js +93 -0
- package/esm2015/lib/api/query-processor/index.js +3 -0
- package/esm2015/lib/api/query-processor/query-processor.service.js +192 -0
- package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -0
- package/esm2015/lib/api/shared-contact-card.service.js +119 -0
- package/esm2015/lib/api/shared-contact-card2.gql.js +41 -0
- package/esm2015/lib/api/shared-contact-card2.service.js +117 -0
- package/esm2015/lib/api/time.service.js +146 -0
- package/esm2015/lib/api/types/graphql.types.js +7 -0
- package/esm2015/lib/api/types/index.js +3 -0
- package/esm2015/lib/api/types/lr-graphql.types.js +71 -0
- package/esm2015/lib/auth/auth.config.js +57 -0
- package/esm2015/lib/auth/auth.gql.js +48 -0
- package/esm2015/lib/auth/auth.types.js +27 -0
- package/esm2015/lib/auth/idle.service.js +168 -0
- package/esm2015/lib/auth/idle.types.js +7 -0
- package/esm2015/lib/auth/lbop.service.js +355 -0
- package/esm2015/lib/auth/life-ready-auth.service.js +333 -0
- package/esm2015/lib/auth/password.service.js +320 -0
- package/esm2015/lib/auth/register.service.js +172 -0
- package/esm2015/lib/auth/two-factor.service.js +74 -0
- package/esm2015/lib/category/category-meta.service.js +99 -0
- package/esm2015/lib/category/category.gql.js +406 -0
- package/esm2015/lib/category/category.service.js +390 -0
- package/esm2015/lib/category/category.types.js +29 -0
- package/esm2015/lib/cryptography/cryptography.types.js +11 -0
- package/esm2015/lib/cryptography/encryption.service.js +189 -0
- package/esm2015/lib/cryptography/key-factory.service.js +237 -0
- package/esm2015/lib/cryptography/key-graph.service.js +280 -0
- package/esm2015/lib/cryptography/key-meta.service.js +200 -0
- package/esm2015/lib/cryptography/key.service.js +124 -0
- package/esm2015/lib/cryptography/slip39.service.js +169 -0
- package/esm2015/lib/cryptography/web-crypto.service.js +29 -0
- package/esm2015/lib/life-ready.config.js +84 -0
- package/esm2015/lib/life-ready.module.js +74 -0
- package/esm2015/lib/plan/plan.gql.js +123 -0
- package/esm2015/lib/plan/plan.service.js +149 -0
- package/esm2015/lib/plan/plan.types.js +11 -0
- package/esm2015/lib/record/record-attachment.service.js +101 -0
- package/esm2015/lib/record/record.gql.js +179 -0
- package/esm2015/lib/record/record.service.js +206 -0
- package/esm2015/lib/record/record.types.js +15 -0
- package/esm2015/lib/record-type/record-type.service.js +75 -0
- package/esm2015/lib/record-type/record-type.types.js +28 -0
- package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -0
- package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -0
- package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -0
- package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -0
- package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -0
- package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -0
- package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -0
- package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -0
- package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -0
- package/esm2015/lib/scenario/scenario-setup.service.js +269 -0
- package/esm2015/lib/scenario/scenario.gql.js +368 -0
- package/esm2015/lib/scenario/scenario.service.js +611 -0
- package/esm2015/lib/scenario/scenario.types.js +64 -0
- package/esm2015/lib/search/search.gql.js +62 -0
- package/esm2015/lib/search/search.service.js +156 -0
- package/esm2015/lib/search/search.types.js +6 -0
- package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -0
- package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +266 -0
- package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -0
- package/esm2015/lib/trusted-parties/tp-password-reset.service.js +300 -0
- package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -0
- package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -0
- package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -0
- package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -0
- package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -0
- package/esm2015/lib/users/profile-details.service.js +214 -0
- package/esm2015/lib/users/profile.gql.js +97 -0
- package/esm2015/lib/users/profile.service.js +169 -0
- package/esm2015/lib/users/profile.types.js +34 -0
- package/esm2015/lib/users/user.gql.js +60 -0
- package/esm2015/lib/users/user.service.js +79 -0
- package/esm2015/lib/users/user.types.js +5 -0
- package/esm2015/lifeready-core.js +10 -0
- package/esm2015/public-api.js +81 -0
- package/fesm2015/lifeready-core.js +13290 -0
- package/fesm2015/lifeready-core.js.map +1 -0
- package/lib/_common/ast.d.ts +11 -0
- package/lib/_common/deferred-promise.d.ts +12 -0
- package/lib/_common/exceptions.d.ts +109 -0
- package/lib/_common/queries.gql.d.ts +10 -0
- package/lib/_common/run-outside-angular.d.ts +14 -0
- package/lib/_common/types.d.ts +10 -0
- package/lib/_common/utils.d.ts +3 -0
- package/lib/api/contact-card.gql.d.ts +7 -0
- package/lib/api/contact-card.service.d.ts +52 -0
- package/lib/api/contact-card2.gql.d.ts +34 -0
- package/lib/api/contact-card2.service.d.ts +49 -0
- package/lib/api/file.service.d.ts +18 -0
- package/lib/api/item2.gql.d.ts +96 -0
- package/lib/api/item2.service.d.ts +177 -0
- package/lib/api/key-exchange.gql.d.ts +9 -0
- package/lib/api/key-exchange.service.d.ts +39 -0
- package/lib/api/key-exchange.types.d.ts +196 -0
- package/lib/api/key-exchange2.gql.d.ts +125 -0
- package/lib/api/key-exchange2.service.d.ts +187 -0
- package/lib/api/lock.gql.d.ts +27 -0
- package/lib/api/lock.service.d.ts +25 -0
- package/lib/api/lr-apollo.service.d.ts +15 -0
- package/lib/api/lr-graphql/index.d.ts +5 -0
- package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -0
- package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -0
- package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -0
- package/lib/api/lr-graphql/lr-mutation.d.ts +8 -0
- package/lib/api/lr-graphql/lr.service.d.ts +9 -0
- package/lib/api/message.service.d.ts +58 -0
- package/lib/api/persist.service.d.ts +31 -0
- package/lib/api/query-processor/common-processors.service.d.ts +36 -0
- package/lib/api/query-processor/index.d.ts +2 -0
- package/lib/api/query-processor/query-processor.service.d.ts +18 -0
- package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -0
- package/lib/api/shared-contact-card.service.d.ts +33 -0
- package/lib/api/shared-contact-card2.gql.d.ts +36 -0
- package/lib/api/shared-contact-card2.service.d.ts +45 -0
- package/lib/api/time.service.d.ts +16 -0
- package/lib/api/types/graphql.types.d.ts +29 -0
- package/lib/api/types/index.d.ts +2 -0
- package/lib/api/types/lr-graphql.types.d.ts +385 -0
- package/lib/auth/auth.config.d.ts +5 -0
- package/lib/auth/auth.gql.d.ts +15 -0
- package/lib/auth/auth.types.d.ts +66 -0
- package/lib/auth/idle.service.d.ts +40 -0
- package/lib/auth/idle.types.d.ts +10 -0
- package/lib/auth/lbop.service.d.ts +91 -0
- package/lib/auth/life-ready-auth.service.d.ts +46 -0
- package/lib/auth/password.service.d.ts +78 -0
- package/lib/auth/register.service.d.ts +25 -0
- package/lib/auth/two-factor.service.d.ts +15 -0
- package/lib/category/category-meta.service.d.ts +23 -0
- package/lib/category/category.gql.d.ts +45 -0
- package/lib/category/category.service.d.ts +67 -0
- package/lib/category/category.types.d.ts +79 -0
- package/lib/cryptography/cryptography.types.d.ts +83 -0
- package/lib/cryptography/encryption.service.d.ts +41 -0
- package/lib/cryptography/key-factory.service.d.ts +38 -0
- package/lib/cryptography/key-graph.service.d.ts +33 -0
- package/lib/cryptography/key-meta.service.d.ts +44 -0
- package/lib/cryptography/key.service.d.ts +36 -0
- package/lib/cryptography/slip39.service.d.ts +43 -0
- package/lib/cryptography/web-crypto.service.d.ts +5 -0
- package/lib/life-ready.config.d.ts +14 -0
- package/lib/life-ready.module.d.ts +5 -0
- package/lib/plan/plan.gql.d.ts +11 -0
- package/lib/plan/plan.service.d.ts +33 -0
- package/lib/plan/plan.types.d.ts +31 -0
- package/lib/record/record-attachment.service.d.ts +16 -0
- package/lib/record/record.gql.d.ts +14 -0
- package/lib/record/record.service.d.ts +25 -0
- package/lib/record/record.types.d.ts +57 -0
- package/lib/record-type/record-type.service.d.ts +11 -0
- package/lib/record-type/record-type.types.d.ts +50 -0
- package/lib/scenario/approvals/scenario-approval.gql.d.ts +7 -0
- package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -0
- package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -0
- package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -0
- package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -0
- package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -0
- package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -0
- package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -0
- package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -0
- package/lib/scenario/scenario-setup.service.d.ts +22 -0
- package/lib/scenario/scenario.gql.d.ts +34 -0
- package/lib/scenario/scenario.service.d.ts +58 -0
- package/lib/scenario/scenario.types.d.ts +217 -0
- package/lib/search/search.gql.d.ts +1 -0
- package/lib/search/search.service.d.ts +25 -0
- package/lib/search/search.types.d.ts +20 -0
- package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -0
- package/lib/trusted-parties/tp-password-reset-user.service.d.ts +41 -0
- package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -0
- package/lib/trusted-parties/tp-password-reset.service.d.ts +131 -0
- package/lib/trusted-parties/trusted-party.gql.d.ts +9 -0
- package/lib/trusted-parties/trusted-party.service.d.ts +44 -0
- package/lib/trusted-parties/trusted-party.types.d.ts +102 -0
- package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -0
- package/lib/trusted-parties/trusted-party2.service.d.ts +114 -0
- package/lib/users/profile-details.service.d.ts +21 -0
- package/lib/users/profile.gql.d.ts +11 -0
- package/lib/users/profile.service.d.ts +35 -0
- package/lib/users/profile.types.d.ts +96 -0
- package/lib/users/user.gql.d.ts +9 -0
- package/lib/users/user.service.d.ts +12 -0
- package/lib/users/user.types.d.ts +23 -0
- package/lifeready-core.d.ts +9 -0
- package/lifeready-core.metadata.json +1 -0
- package/package.json +29 -0
- package/public-api.d.ts +77 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
3
|
+
import { Injectable } from '@angular/core';
|
|
4
|
+
import { KeyExchangeService } from '../api/key-exchange.service';
|
|
5
|
+
import { LrApolloService } from '../api/lr-apollo.service';
|
|
6
|
+
import { SharedContactCardService } from '../api/shared-contact-card.service';
|
|
7
|
+
import { LifeReadyAuthService } from '../auth/life-ready-auth.service';
|
|
8
|
+
import { EncryptionService } from '../cryptography/encryption.service';
|
|
9
|
+
import { KeyGraphService } from '../cryptography/key-graph.service';
|
|
10
|
+
import { KeyService } from '../cryptography/key.service';
|
|
11
|
+
import { UserService } from '../users/user.service';
|
|
12
|
+
import { ContactCardName } from '../users/profile.types';
|
|
13
|
+
import { CancelTrustedPartyInvitationMutation, DeclineTrustedPartyInvitationMutation, DeleteTrustedPartyMutation, GetAllTrustedPartiesQuery, GetTrustedPartiesQuery, GetTrustedPartyQuery, ShareCategoryMutation, UnshareCategoryMutation, } from './trusted-party.gql';
|
|
14
|
+
import { TrustedPartyInviteStatus, TrustedPartyType, TrustedPartyRoleType, } from './trusted-party.types';
|
|
15
|
+
import { KeyFactoryService } from '../cryptography/key-factory.service';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
import * as i1 from "@angular/common/http";
|
|
18
|
+
import * as i2 from "../api/lr-apollo.service";
|
|
19
|
+
import * as i3 from "../api/shared-contact-card.service";
|
|
20
|
+
import * as i4 from "../users/user.service";
|
|
21
|
+
import * as i5 from "../auth/life-ready-auth.service";
|
|
22
|
+
import * as i6 from "../api/key-exchange.service";
|
|
23
|
+
import * as i7 from "../cryptography/key-graph.service";
|
|
24
|
+
import * as i8 from "../cryptography/key.service";
|
|
25
|
+
import * as i9 from "../cryptography/key-factory.service";
|
|
26
|
+
import * as i10 from "../cryptography/encryption.service";
|
|
27
|
+
export class TrustedPartyService {
|
|
28
|
+
constructor(http, lrApollo, sharedContactCardService, userService, authService, keyExchangeService, keyGraphService, keyService, keyFactory, encryptionService) {
|
|
29
|
+
this.http = http;
|
|
30
|
+
this.lrApollo = lrApollo;
|
|
31
|
+
this.sharedContactCardService = sharedContactCardService;
|
|
32
|
+
this.userService = userService;
|
|
33
|
+
this.authService = authService;
|
|
34
|
+
this.keyExchangeService = keyExchangeService;
|
|
35
|
+
this.keyGraphService = keyGraphService;
|
|
36
|
+
this.keyService = keyService;
|
|
37
|
+
this.keyFactory = keyFactory;
|
|
38
|
+
this.encryptionService = encryptionService;
|
|
39
|
+
}
|
|
40
|
+
getTrustedParties() {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
const { tps } = yield this.lrApollo.query({
|
|
43
|
+
query: GetTrustedPartiesQuery,
|
|
44
|
+
});
|
|
45
|
+
return yield Promise.all(tps.edges.map((x) => this.mapTrustedParty(x.node)));
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
getAllTrustedParties() {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const user = yield this.authService.getUser();
|
|
51
|
+
const { tps, invites, sentInvites } = yield this.lrApollo.query({
|
|
52
|
+
query: GetAllTrustedPartiesQuery,
|
|
53
|
+
variables: {
|
|
54
|
+
userId: user.id,
|
|
55
|
+
isExpired: false,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
parties: (yield Promise.all(tps.edges.map((x) => this.mapTrustedParty(x.node)))).filter((x) => x),
|
|
60
|
+
invites: (yield Promise.all(invites.edges.map((x) => __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
return this.mapInvite(yield this.keyExchangeService.decryptKeyExchange(x.node));
|
|
62
|
+
}))))
|
|
63
|
+
.filter((x) => x.status !== TrustedPartyInviteStatus.Completed)
|
|
64
|
+
.filter((x) => x.status !== TrustedPartyInviteStatus.Invited || x.actionRequired),
|
|
65
|
+
sentInvites: (yield Promise.all(sentInvites.edges.map((x) => __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
return this.mapInvite(yield this.keyExchangeService.decryptKeyExchange(x.node));
|
|
67
|
+
})))).filter((x) => x.status !== TrustedPartyInviteStatus.Completed),
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
getTrustedParty(partyId) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
const { tp } = yield this.lrApollo.query({
|
|
74
|
+
query: GetTrustedPartyQuery,
|
|
75
|
+
variables: { partyId },
|
|
76
|
+
});
|
|
77
|
+
return yield this.mapTrustedParty(tp);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
getTrustedPartyRoles(roleType = TrustedPartyRoleType.General) {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
if (!this.trustedPartyRoles) {
|
|
83
|
+
this.trustedPartyRoles = yield this.http
|
|
84
|
+
.get('/assets/meta/trusted-party-roles.json')
|
|
85
|
+
.toPromise();
|
|
86
|
+
}
|
|
87
|
+
return Promise.resolve(this.trustedPartyRoles.filter((x) => x.roleType === roleType));
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
findByEmail(email) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
try {
|
|
93
|
+
const user = yield this.userService.getUserByEmail(email);
|
|
94
|
+
return user
|
|
95
|
+
? {
|
|
96
|
+
id: user.id,
|
|
97
|
+
email,
|
|
98
|
+
username: user.username,
|
|
99
|
+
isTrustedParty: user.haveTp,
|
|
100
|
+
isMe: user.isCurrentUser,
|
|
101
|
+
}
|
|
102
|
+
: null;
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
inviteTrustedParty(invite) {
|
|
110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
+
const params = {
|
|
112
|
+
responderUsername: invite.party.username,
|
|
113
|
+
email: invite.party.email,
|
|
114
|
+
message: {
|
|
115
|
+
name: invite.party.name,
|
|
116
|
+
email: invite.party.email,
|
|
117
|
+
message: invite.party.message,
|
|
118
|
+
permissions: invite.permissions,
|
|
119
|
+
},
|
|
120
|
+
contactCard: {
|
|
121
|
+
plainOwnerCipherDataJson: null,
|
|
122
|
+
plainSharedCipherDataJson: invite.mySharedDetails,
|
|
123
|
+
ownerPlainData: {
|
|
124
|
+
name: new ContactCardName(invite.mySharedDetails.name),
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
yield this.keyExchangeService.initiateOtk(params);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
cancelInvitation(inviteId) {
|
|
132
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
yield this.lrApollo.mutate({
|
|
134
|
+
mutation: CancelTrustedPartyInvitationMutation,
|
|
135
|
+
variables: {
|
|
136
|
+
input: {
|
|
137
|
+
id: inviteId,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
getInvitation(inviteId, inviteToken, key) {
|
|
144
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
145
|
+
const exchange = yield this.keyExchangeService.getKeyExchange(inviteId, {
|
|
146
|
+
token: inviteToken,
|
|
147
|
+
otKeyK: key,
|
|
148
|
+
});
|
|
149
|
+
return this.mapInvite(exchange);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
acceptInvitation(invite) {
|
|
153
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
154
|
+
const params = {
|
|
155
|
+
id: invite.inviteId,
|
|
156
|
+
token: invite.inviteToken,
|
|
157
|
+
decryptedOtk: invite.decryptedOtk,
|
|
158
|
+
initiatorContactCard: null,
|
|
159
|
+
responderContactCard: {
|
|
160
|
+
plainOwnerCipherDataJson: null,
|
|
161
|
+
plainSharedCipherDataJson: invite.mySharedDetails,
|
|
162
|
+
ownerPlainData: {
|
|
163
|
+
name: new ContactCardName(invite.mySharedDetails.name),
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
const { tp } = yield this.keyExchangeService.respondOtk(params);
|
|
168
|
+
return tp.id;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
declineInvitation(inviteId, inviteToken) {
|
|
172
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
173
|
+
yield this.lrApollo.mutate({
|
|
174
|
+
mutation: DeclineTrustedPartyInvitationMutation,
|
|
175
|
+
variables: {
|
|
176
|
+
input: {
|
|
177
|
+
id: inviteId,
|
|
178
|
+
token: inviteToken,
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
confirmInvitation(confirm) {
|
|
185
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
186
|
+
const { tp } = yield this.keyExchangeService.completeOtk(confirm.inviteId, confirm.initiatorRootKeyCipher, confirm.initiatorOneTimePbkCipher, null);
|
|
187
|
+
return tp.id;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
removeTrustedParty(partyId) {
|
|
191
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
192
|
+
yield this.lrApollo.mutate({
|
|
193
|
+
mutation: DeleteTrustedPartyMutation,
|
|
194
|
+
variables: {
|
|
195
|
+
input: {
|
|
196
|
+
id: partyId,
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
setCategoryAccessLevel(categoryId, keyId, trustedParty, accessLevel) {
|
|
203
|
+
return accessLevel
|
|
204
|
+
? this.shareDirectory(categoryId, keyId, trustedParty, accessLevel)
|
|
205
|
+
: this.unshareDirectory(categoryId, trustedParty.id);
|
|
206
|
+
}
|
|
207
|
+
setRecordAccessLevel(recordId, keyId, trustedParty, accessLevel) {
|
|
208
|
+
return accessLevel
|
|
209
|
+
? this.shareDirectory(recordId, keyId, trustedParty, accessLevel)
|
|
210
|
+
: this.unshareDirectory(recordId, trustedParty.id);
|
|
211
|
+
}
|
|
212
|
+
shareDirectory(directoryId, keyId, trustedParty, accessLevel) {
|
|
213
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
214
|
+
const key = yield this.keyGraphService.getKey(keyId);
|
|
215
|
+
const wrappingKey = yield this.keyGraphService.getKey(trustedParty.userSharedKey.sharedKey.id);
|
|
216
|
+
const wrappedKey = yield this.encryptionService.encrypt(wrappingKey.jwk, key.jwk.toJSON(true));
|
|
217
|
+
yield this.lrApollo.mutate({
|
|
218
|
+
mutation: ShareCategoryMutation,
|
|
219
|
+
variables: {
|
|
220
|
+
input: {
|
|
221
|
+
id: directoryId,
|
|
222
|
+
tpId: trustedParty.id,
|
|
223
|
+
accessRole: accessLevel,
|
|
224
|
+
keyId: key.id,
|
|
225
|
+
wrappingKeyId: wrappingKey.id,
|
|
226
|
+
wrappedKey: JSON.stringify(wrappedKey),
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
unshareDirectory(directoryId, trustedPartyId) {
|
|
233
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
234
|
+
yield this.lrApollo.mutate({
|
|
235
|
+
mutation: UnshareCategoryMutation,
|
|
236
|
+
variables: {
|
|
237
|
+
input: {
|
|
238
|
+
id: directoryId,
|
|
239
|
+
tpId: trustedPartyId,
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
mapTrustedParty(tp) {
|
|
246
|
+
var _a;
|
|
247
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
248
|
+
try {
|
|
249
|
+
const contactCard = tp.sharedContactCard &&
|
|
250
|
+
(yield this.sharedContactCardService.decryptTrustedPartyDetails(tp.sharedContactCard));
|
|
251
|
+
const myContactCard = tp.myContactCard &&
|
|
252
|
+
(yield this.sharedContactCardService.decryptSharedTrustedPartyDetails(tp.myContactCard));
|
|
253
|
+
return {
|
|
254
|
+
id: tp.id,
|
|
255
|
+
type: TrustedPartyType.User,
|
|
256
|
+
hasScenarios: !!tp.sharedScenarios.edges.length,
|
|
257
|
+
hasSharedVault: !!tp.sharedItems.directories.edges.length,
|
|
258
|
+
name: contactCard && contactCard.name && contactCard.name.name,
|
|
259
|
+
details: contactCard,
|
|
260
|
+
mySharedDetails: myContactCard,
|
|
261
|
+
userSharedKey: tp.currentUserSharedKey.userSharedKey,
|
|
262
|
+
username: tp.other.username,
|
|
263
|
+
features: {
|
|
264
|
+
sharedVault: {
|
|
265
|
+
hasAccess: (((_a = tp.other.features) === null || _a === void 0 ? void 0 : _a.shareVault) || ['noaccess'])[0] === 'access',
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
catch (e) {
|
|
271
|
+
console.error('Failed to decrypt Trusted Party.', e, tp);
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
mapInvite(exchange) {
|
|
277
|
+
var _a, _b;
|
|
278
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
279
|
+
const contactCard = exchange.contactCard;
|
|
280
|
+
const name = exchange.isInitiator
|
|
281
|
+
? (_a = exchange.myMessage) === null || _a === void 0 ? void 0 : _a.name : contactCard && contactCard.name && contactCard.name.name;
|
|
282
|
+
const email = exchange.isInitiator
|
|
283
|
+
? (_b = exchange.myMessage) === null || _b === void 0 ? void 0 : _b.email : (contactCard && contactCard.email) || exchange.responderEmailAddress;
|
|
284
|
+
return {
|
|
285
|
+
id: exchange.id,
|
|
286
|
+
type: TrustedPartyType.User,
|
|
287
|
+
status: exchange.state,
|
|
288
|
+
token: exchange.token,
|
|
289
|
+
tokenExpiry: exchange.tokenExpiryTime,
|
|
290
|
+
decryptedOtk: exchange.decryptedOtk,
|
|
291
|
+
name,
|
|
292
|
+
email,
|
|
293
|
+
isSender: exchange.isInitiator,
|
|
294
|
+
actionRequired: exchange.isInitiator
|
|
295
|
+
? exchange.initiatorActionRequired
|
|
296
|
+
: exchange.responderActionRequired,
|
|
297
|
+
rootKeyCipher: exchange.initiatorRootKeyCipher,
|
|
298
|
+
pbkCipher: exchange.otk.initiatorOneTimePbkCipher,
|
|
299
|
+
isExpired: exchange.isExpired,
|
|
300
|
+
details: contactCard,
|
|
301
|
+
message: exchange.message,
|
|
302
|
+
mySharedDetails: exchange.myContactCard,
|
|
303
|
+
mySharedMessage: exchange.myMessage,
|
|
304
|
+
};
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
TrustedPartyService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TrustedPartyService_Factory() { return new TrustedPartyService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.LrApolloService), i0.ɵɵinject(i3.SharedContactCardService), i0.ɵɵinject(i4.UserService), i0.ɵɵinject(i5.LifeReadyAuthService), i0.ɵɵinject(i6.KeyExchangeService), i0.ɵɵinject(i7.KeyGraphService), i0.ɵɵinject(i8.KeyService), i0.ɵɵinject(i9.KeyFactoryService), i0.ɵɵinject(i10.EncryptionService)); }, token: TrustedPartyService, providedIn: "root" });
|
|
309
|
+
TrustedPartyService.decorators = [
|
|
310
|
+
{ type: Injectable, args: [{
|
|
311
|
+
providedIn: 'root',
|
|
312
|
+
},] }
|
|
313
|
+
];
|
|
314
|
+
TrustedPartyService.ctorParameters = () => [
|
|
315
|
+
{ type: HttpClient },
|
|
316
|
+
{ type: LrApolloService },
|
|
317
|
+
{ type: SharedContactCardService },
|
|
318
|
+
{ type: UserService },
|
|
319
|
+
{ type: LifeReadyAuthService },
|
|
320
|
+
{ type: KeyExchangeService },
|
|
321
|
+
{ type: KeyGraphService },
|
|
322
|
+
{ type: KeyService },
|
|
323
|
+
{ type: KeyFactoryService },
|
|
324
|
+
{ type: EncryptionService }
|
|
325
|
+
];
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL3Rlc3QvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvdHJ1c3RlZC1wYXJ0aWVzL3RydXN0ZWQtcGFydHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFLakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsb0NBQW9DLEVBQ3BDLHFDQUFxQyxFQUNyQywwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHVCQUF1QixHQUN4QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFRTCx3QkFBd0IsRUFFeEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixHQUNyQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFN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QkFDOUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMseUJBQXlCO2dCQUNqRCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7Z0JBQzdCLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3pCLGVBQWUsRUFBRSxRQUFRLENBQUMsYUFBYTtnQkFDdkMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxTQUFTO2FBQ3BDLENBQUM7O0tBQ0g7Ozs7WUE3VkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUE3Q1EsVUFBVTtZQVNWLGVBQWU7WUFDZix3QkFBd0I7WUFNeEIsV0FBVztZQUxYLG9CQUFvQjtZQVBwQixrQkFBa0I7WUFVbEIsZUFBZTtZQUNmLFVBQVU7WUEwQlYsaUJBQWlCO1lBNUJqQixpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEpXSyB9IGZyb20gJ25vZGUtam9zZSc7XHJcbmltcG9ydCB7IG1hdGVyaWFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBLZXlFeGNoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi9hcGkva2V5LWV4Y2hhbmdlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIERlY3J5cHRlZEtleUV4Y2hhbmdlLFxyXG4gIFJlc3BvbmRPdGtJbnB1dCxcclxufSBmcm9tICcuLi9hcGkva2V5LWV4Y2hhbmdlLnR5cGVzJztcclxuaW1wb3J0IHsgTHJBcG9sbG9TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWFwb2xsby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hhcmVkQ29udGFjdENhcmRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL3NoYXJlZC1jb250YWN0LWNhcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IExpZmVSZWFkeUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9saWZlLXJlYWR5LWF1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFjY2Vzc0xldmVsIH0gZnJvbSAnLi4vY2F0ZWdvcnkvY2F0ZWdvcnkudHlwZXMnO1xyXG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9lbmNyeXB0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi91c2Vycy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250YWN0Q2FyZE5hbWUgfSBmcm9tICcuLi91c2Vycy9wcm9maWxlLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBDYW5jZWxUcnVzdGVkUGFydHlJbnZpdGF0aW9uTXV0YXRpb24sXHJcbiAgRGVjbGluZVRydXN0ZWRQYXJ0eUludml0YXRpb25NdXRhdGlvbixcclxuICBEZWxldGVUcnVzdGVkUGFydHlNdXRhdGlvbixcclxuICBHZXRBbGxUcnVzdGVkUGFydGllc1F1ZXJ5LFxyXG4gIEdldFRydXN0ZWRQYXJ0aWVzUXVlcnksXHJcbiAgR2V0VHJ1c3RlZFBhcnR5UXVlcnksXHJcbiAgU2hhcmVDYXRlZ29yeU11dGF0aW9uLFxyXG4gIFVuc2hhcmVDYXRlZ29yeU11dGF0aW9uLFxyXG59IGZyb20gJy4vdHJ1c3RlZC1wYXJ0eS5ncWwnO1xyXG5pbXBvcnQge1xyXG4gIEFjY2VwdFRydXN0ZWRQYXJ0eUludml0ZSxcclxuICBDb25maXJtVHJ1c3RlZFBhcnR5SW52aXRlLFxyXG4gIEZvdW5kVHJ1c3RlZFBhcnR5LFxyXG4gIEludml0ZVRydXN0ZWRQYXJ0eSxcclxuICBUcnVzdGVkUGFydGllcyxcclxuICBUcnVzdGVkUGFydHksXHJcbiAgVHJ1c3RlZFBhcnR5SW52aXRlLFxyXG4gIFRydXN0ZWRQYXJ0eUludml0ZVN0YXR1cyxcclxuICBUcnVzdGVkUGFydHlSb2xlLFxyXG4gIFRydXN0ZWRQYXJ0eVR5cGUsXHJcbiAgVHJ1c3RlZFBhcnR5Um9sZVR5cGUsXHJcbn0gZnJvbSAnLi90cnVzdGVkLXBhcnR5LnR5cGVzJztcclxuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWZhY3Rvcnkuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJ1c3RlZFBhcnR5U2VydmljZSB7XHJcbiAgcHJpdmF0ZSB0cnVzdGVkUGFydHlSb2xlczogVHJ1c3RlZFBhcnR5Um9sZVtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbHJBcG9sbG86IExyQXBvbGxvU2VydmljZSxcclxuICAgIHByaXZhdGUgc2hhcmVkQ29udGFjdENhcmRTZXJ2aWNlOiBTaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IExpZmVSZWFkeUF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlFeGNoYW5nZVNlcnZpY2U6IEtleUV4Y2hhbmdlU2VydmljZSxcclxuICAgIHByaXZhdGUga2V5R3JhcGhTZXJ2aWNlOiBLZXlHcmFwaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUZhY3Rvcnk6IEtleUZhY3RvcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcnVzdGVkUGFydGllcygpOiBQcm9taXNlPFRydXN0ZWRQYXJ0eVtdPiB7XHJcbiAgICBjb25zdCB7IHRwcyB9ID0gYXdhaXQgdGhpcy5sckFwb2xsby5xdWVyeTxhbnk+KHtcclxuICAgICAgcXVlcnk6IEdldFRydXN0ZWRQYXJ0aWVzUXVlcnksXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdHBzLmVkZ2VzLm1hcCgoeCkgPT4gdGhpcy5tYXBUcnVzdGVkUGFydHkoeC5ub2RlKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsVHJ1c3RlZFBhcnRpZXMoKTogUHJvbWlzZTxUcnVzdGVkUGFydGllcz4ge1xyXG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlcigpO1xyXG4gICAgY29uc3QgeyB0cHMsIGludml0ZXMsIHNlbnRJbnZpdGVzIH0gPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PGFueT4oe1xyXG4gICAgICBxdWVyeTogR2V0QWxsVHJ1c3RlZFBhcnRpZXNRdWVyeSxcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgdXNlcklkOiB1c2VyLmlkLFxyXG4gICAgICAgIGlzRXhwaXJlZDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwYXJ0aWVzOiAoXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGw8VHJ1c3RlZFBhcnR5PihcclxuICAgICAgICAgIHRwcy5lZGdlcy5tYXAoKHgpID0+IHRoaXMubWFwVHJ1c3RlZFBhcnR5KHgubm9kZSkpXHJcbiAgICAgICAgKVxyXG4gICAgICApLmZpbHRlcigoeCkgPT4geCksXHJcbiAgICAgIGludml0ZXM6IChcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbDxUcnVzdGVkUGFydHlJbnZpdGU+KFxyXG4gICAgICAgICAgaW52aXRlcy5lZGdlcy5tYXAoYXN5bmMgKHgpID0+XHJcbiAgICAgICAgICAgIHRoaXMubWFwSW52aXRlKFxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMua2V5RXhjaGFuZ2VTZXJ2aWNlLmRlY3J5cHRLZXlFeGNoYW5nZSh4Lm5vZGUpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4LnN0YXR1cyAhPT0gVHJ1c3RlZFBhcnR5SW52aXRlU3RhdHVzLkNvbXBsZXRlZClcclxuICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICAgIHguc3RhdHVzICE9PSBUcnVzdGVkUGFydHlJbnZpdGVTdGF0dXMuSW52aXRlZCB8fCB4LmFjdGlvblJlcXVpcmVkXHJcbiAgICAgICAgKSxcclxuICAgICAgc2VudEludml0ZXM6IChcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbDxUcnVzdGVkUGFydHlJbnZpdGU+KFxyXG4gICAgICAgICAgc2VudEludml0ZXMuZWRnZXMubWFwKGFzeW5jICh4KSA9PlxyXG4gICAgICAgICAgICB0aGlzLm1hcEludml0ZShcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmtleUV4Y2hhbmdlU2VydmljZS5kZWNyeXB0S2V5RXhjaGFuZ2UoeC5ub2RlKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICApLmZpbHRlcigoeCkgPT4geC5zdGF0dXMgIT09IFRydXN0ZWRQYXJ0eUludml0ZVN0YXR1cy5Db21wbGV0ZWQpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcnVzdGVkUGFydHkocGFydHlJZDogc3RyaW5nKTogUHJvbWlzZTxUcnVzdGVkUGFydHk+IHtcclxuICAgIGNvbnN0IHsgdHAgfSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8YW55Pih7XHJcbiAgICAgIHF1ZXJ5OiBHZXRUcnVzdGVkUGFydHlRdWVyeSxcclxuICAgICAgdmFyaWFibGVzOiB7IHBhcnR5SWQgfSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFwVHJ1c3RlZFBhcnR5KHRwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcnVzdGVkUGFydHlSb2xlcyhcclxuICAgIHJvbGVUeXBlOiBUcnVzdGVkUGFydHlSb2xlVHlwZSA9IFRydXN0ZWRQYXJ0eVJvbGVUeXBlLkdlbmVyYWxcclxuICApOiBQcm9taXNlPFRydXN0ZWRQYXJ0eVJvbGVbXT4ge1xyXG4gICAgaWYgKCF0aGlzLnRydXN0ZWRQYXJ0eVJvbGVzKSB7XHJcbiAgICAgIHRoaXMudHJ1c3RlZFBhcnR5Um9sZXMgPSBhd2FpdCB0aGlzLmh0dHBcclxuICAgICAgICAuZ2V0PFRydXN0ZWRQYXJ0eVJvbGVbXT4oJy9hc3NldHMvbWV0YS90cnVzdGVkLXBhcnR5LXJvbGVzLmpzb24nKVxyXG4gICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXHJcbiAgICAgIHRoaXMudHJ1c3RlZFBhcnR5Um9sZXMuZmlsdGVyKCh4KSA9PiB4LnJvbGVUeXBlID09PSByb2xlVHlwZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZmluZEJ5RW1haWwoZW1haWw6IHN0cmluZyk6IFByb21pc2U8Rm91bmRUcnVzdGVkUGFydHk+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJCeUVtYWlsKGVtYWlsKTtcclxuXHJcbiAgICAgIHJldHVybiB1c2VyXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGlkOiB1c2VyLmlkLFxyXG4gICAgICAgICAgICBlbWFpbCxcclxuICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUsXHJcbiAgICAgICAgICAgIGlzVHJ1c3RlZFBhcnR5OiB1c2VyLmhhdmVUcCxcclxuICAgICAgICAgICAgaXNNZTogdXNlci5pc0N1cnJlbnRVc2VyLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW52aXRlVHJ1c3RlZFBhcnR5KGludml0ZTogSW52aXRlVHJ1c3RlZFBhcnR5KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIHJlc3BvbmRlclVzZXJuYW1lOiBpbnZpdGUucGFydHkudXNlcm5hbWUsXHJcbiAgICAgIGVtYWlsOiBpbnZpdGUucGFydHkuZW1haWwsXHJcbiAgICAgIG1lc3NhZ2U6IHtcclxuICAgICAgICBuYW1lOiBpbnZpdGUucGFydHkubmFtZSxcclxuICAgICAgICBlbWFpbDogaW52aXRlLnBhcnR5LmVtYWlsLFxyXG4gICAgICAgIG1lc3NhZ2U6IGludml0ZS5wYXJ0eS5tZXNzYWdlLFxyXG4gICAgICAgIHBlcm1pc3Npb25zOiBpbnZpdGUucGVybWlzc2lvbnMsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbnRhY3RDYXJkOiB7XHJcbiAgICAgICAgcGxhaW5Pd25lckNpcGhlckRhdGFKc29uOiBudWxsLFxyXG4gICAgICAgIHBsYWluU2hhcmVkQ2lwaGVyRGF0YUpzb246IGludml0ZS5teVNoYXJlZERldGFpbHMsXHJcbiAgICAgICAgb3duZXJQbGFpbkRhdGE6IHtcclxuICAgICAgICAgIG5hbWU6IG5ldyBDb250YWN0Q2FyZE5hbWUoaW52aXRlLm15U2hhcmVkRGV0YWlscy5uYW1lKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIGF3YWl0IHRoaXMua2V5RXhjaGFuZ2VTZXJ2aWNlLmluaXRpYXRlT3RrKHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2FuY2VsSW52aXRhdGlvbihpbnZpdGVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZSh7XHJcbiAgICAgIG11dGF0aW9uOiBDYW5jZWxUcnVzdGVkUGFydHlJbnZpdGF0aW9uTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBpZDogaW52aXRlSWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEludml0YXRpb24oXHJcbiAgICBpbnZpdGVJZDogc3RyaW5nLFxyXG4gICAgaW52aXRlVG9rZW46IHN0cmluZyxcclxuICAgIGtleTogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxUcnVzdGVkUGFydHlJbnZpdGU+IHtcclxuICAgIGNvbnN0IGV4Y2hhbmdlID0gYXdhaXQgdGhpcy5rZXlFeGNoYW5nZVNlcnZpY2UuZ2V0S2V5RXhjaGFuZ2UoaW52aXRlSWQsIHtcclxuICAgICAgdG9rZW46IGludml0ZVRva2VuLFxyXG4gICAgICBvdEtleUs6IGtleSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLm1hcEludml0ZShleGNoYW5nZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWNjZXB0SW52aXRhdGlvbihcclxuICAgIGludml0ZTogQWNjZXB0VHJ1c3RlZFBhcnR5SW52aXRlXHJcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHBhcmFtczogUmVzcG9uZE90a0lucHV0ID0ge1xyXG4gICAgICBpZDogaW52aXRlLmludml0ZUlkLFxyXG4gICAgICB0b2tlbjogaW52aXRlLmludml0ZVRva2VuLFxyXG4gICAgICBkZWNyeXB0ZWRPdGs6IGludml0ZS5kZWNyeXB0ZWRPdGssXHJcbiAgICAgIGluaXRpYXRvckNvbnRhY3RDYXJkOiBudWxsLFxyXG4gICAgICByZXNwb25kZXJDb250YWN0Q2FyZDoge1xyXG4gICAgICAgIHBsYWluT3duZXJDaXBoZXJEYXRhSnNvbjogbnVsbCxcclxuICAgICAgICBwbGFpblNoYXJlZENpcGhlckRhdGFKc29uOiBpbnZpdGUubXlTaGFyZWREZXRhaWxzLFxyXG4gICAgICAgIG93bmVyUGxhaW5EYXRhOiB7XHJcbiAgICAgICAgICBuYW1lOiBuZXcgQ29udGFjdENhcmROYW1lKGludml0ZS5teVNoYXJlZERldGFpbHMubmFtZSksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgeyB0cCB9ID0gYXdhaXQgdGhpcy5rZXlFeGNoYW5nZVNlcnZpY2UucmVzcG9uZE90ayhwYXJhbXMpO1xyXG5cclxuICAgIHJldHVybiB0cC5pZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkZWNsaW5lSW52aXRhdGlvbihcclxuICAgIGludml0ZUlkOiBzdHJpbmcsXHJcbiAgICBpbnZpdGVUb2tlbjogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZSh7XHJcbiAgICAgIG11dGF0aW9uOiBEZWNsaW5lVHJ1c3RlZFBhcnR5SW52aXRhdGlvbk11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQ6IGludml0ZUlkLFxyXG4gICAgICAgICAgdG9rZW46IGludml0ZVRva2VuLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb25maXJtSW52aXRhdGlvbihcclxuICAgIGNvbmZpcm06IENvbmZpcm1UcnVzdGVkUGFydHlJbnZpdGVcclxuICApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgeyB0cCB9ID0gYXdhaXQgdGhpcy5rZXlFeGNoYW5nZVNlcnZpY2UuY29tcGxldGVPdGsoXHJcbiAgICAgIGNvbmZpcm0uaW52aXRlSWQsXHJcbiAgICAgIGNvbmZpcm0uaW5pdGlhdG9yUm9vdEtleUNpcGhlcixcclxuICAgICAgY29uZmlybS5pbml0aWF0b3JPbmVUaW1lUGJrQ2lwaGVyLFxyXG4gICAgICBudWxsXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRwLmlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlbW92ZVRydXN0ZWRQYXJ0eShwYXJ0eUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMubHJBcG9sbG8ubXV0YXRlKHtcclxuICAgICAgbXV0YXRpb246IERlbGV0ZVRydXN0ZWRQYXJ0eU11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQ6IHBhcnR5SWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENhdGVnb3J5QWNjZXNzTGV2ZWwoXHJcbiAgICBjYXRlZ29yeUlkOiBzdHJpbmcsXHJcbiAgICBrZXlJZDogc3RyaW5nLFxyXG4gICAgdHJ1c3RlZFBhcnR5OiBUcnVzdGVkUGFydHksXHJcbiAgICBhY2Nlc3NMZXZlbD86IEFjY2Vzc0xldmVsXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYWNjZXNzTGV2ZWxcclxuICAgICAgPyB0aGlzLnNoYXJlRGlyZWN0b3J5KGNhdGVnb3J5SWQsIGtleUlkLCB0cnVzdGVkUGFydHksIGFjY2Vzc0xldmVsKVxyXG4gICAgICA6IHRoaXMudW5zaGFyZURpcmVjdG9yeShjYXRlZ29yeUlkLCB0cnVzdGVkUGFydHkuaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlY29yZEFjY2Vzc0xldmVsKFxyXG4gICAgcmVjb3JkSWQ6IHN0cmluZyxcclxuICAgIGtleUlkOiBzdHJpbmcsXHJcbiAgICB0cnVzdGVkUGFydHk6IFRydXN0ZWRQYXJ0eSxcclxuICAgIGFjY2Vzc0xldmVsOiBBY2Nlc3NMZXZlbFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGFjY2Vzc0xldmVsXHJcbiAgICAgID8gdGhpcy5zaGFyZURpcmVjdG9yeShyZWNvcmRJZCwga2V5SWQsIHRydXN0ZWRQYXJ0eSwgYWNjZXNzTGV2ZWwpXHJcbiAgICAgIDogdGhpcy51bnNoYXJlRGlyZWN0b3J5KHJlY29yZElkLCB0cnVzdGVkUGFydHkuaWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzaGFyZURpcmVjdG9yeShcclxuICAgIGRpcmVjdG9yeUlkOiBzdHJpbmcsXHJcbiAgICBrZXlJZDogc3RyaW5nLFxyXG4gICAgdHJ1c3RlZFBhcnR5OiBUcnVzdGVkUGFydHksXHJcbiAgICBhY2Nlc3NMZXZlbDogQWNjZXNzTGV2ZWxcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGhTZXJ2aWNlLmdldEtleShrZXlJZCk7XHJcbiAgICBjb25zdCB3cmFwcGluZ0tleSA9IGF3YWl0IHRoaXMua2V5R3JhcGhTZXJ2aWNlLmdldEtleShcclxuICAgICAgdHJ1c3RlZFBhcnR5LnVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkXHJcbiAgICApO1xyXG4gICAgY29uc3Qgd3JhcHBlZEtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcclxuICAgICAgd3JhcHBpbmdLZXkuandrLFxyXG4gICAgICBrZXkuandrLnRvSlNPTih0cnVlKVxyXG4gICAgKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZSh7XHJcbiAgICAgIG11dGF0aW9uOiBTaGFyZUNhdGVnb3J5TXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBpZDogZGlyZWN0b3J5SWQsXHJcbiAgICAgICAgICB0cElkOiB0cnVzdGVkUGFydHkuaWQsXHJcbiAgICAgICAgICBhY2Nlc3NSb2xlOiBhY2Nlc3NMZXZlbCxcclxuICAgICAgICAgIGtleUlkOiBrZXkuaWQsXHJcbiAgICAgICAgICB3cmFwcGluZ0tleUlkOiB3cmFwcGluZ0tleS5pZCxcclxuICAgICAgICAgIHdyYXBwZWRLZXk6IEpTT04uc3RyaW5naWZ5KHdyYXBwZWRLZXkpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgdW5zaGFyZURpcmVjdG9yeShcclxuICAgIGRpcmVjdG9yeUlkOiBzdHJpbmcsXHJcbiAgICB0cnVzdGVkUGFydHlJZDogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmxyQXBvbGxvLm11dGF0ZSh7XHJcbiAgICAgIG11dGF0aW9uOiBVbnNoYXJlQ2F0ZWdvcnlNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkOiBkaXJlY3RvcnlJZCxcclxuICAgICAgICAgIHRwSWQ6IHRydXN0ZWRQYXJ0eUlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBtYXBUcnVzdGVkUGFydHkodHA6IGFueSk6IFByb21pc2U8VHJ1c3RlZFBhcnR5PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBjb250YWN0Q2FyZCA9XHJcbiAgICAgICAgdHAuc2hhcmVkQ29udGFjdENhcmQgJiZcclxuICAgICAgICAoYXdhaXQgdGhpcy5zaGFyZWRDb250YWN0Q2FyZFNlcnZpY2UuZGVjcnlwdFRydXN0ZWRQYXJ0eURldGFpbHMoXHJcbiAgICAgICAgICB0cC5zaGFyZWRDb250YWN0Q2FyZFxyXG4gICAgICAgICkpO1xyXG4gICAgICBjb25zdCBteUNvbnRhY3RDYXJkID1cclxuICAgICAgICB0cC5teUNvbnRhY3RDYXJkICYmXHJcbiAgICAgICAgKGF3YWl0IHRoaXMuc2hhcmVkQ29udGFjdENhcmRTZXJ2aWNlLmRlY3J5cHRTaGFyZWRUcnVzdGVkUGFydHlEZXRhaWxzKFxyXG4gICAgICAgICAgdHAubXlDb250YWN0Q2FyZFxyXG4gICAgICAgICkpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpZDogdHAuaWQsXHJcbiAgICAgICAgdHlwZTogVHJ1c3RlZFBhcnR5VHlwZS5Vc2VyLCAvLyBUT0RPOiB3aGVuIHBhcnRuZXJzXHJcbiAgICAgICAgaGFzU2NlbmFyaW9zOiAhIXRwLnNoYXJlZFNjZW5hcmlvcy5lZGdlcy5sZW5ndGgsXHJcbiAgICAgICAgaGFzU2hhcmVkVmF1bHQ6ICEhdHAuc2hhcmVkSXRlbXMuZGlyZWN0b3JpZXMuZWRnZXMubGVuZ3RoLFxyXG4gICAgICAgIG5hbWU6IGNvbnRhY3RDYXJkICYmIGNvbnRhY3RDYXJkLm5hbWUgJiYgY29udGFjdENhcmQubmFtZS5uYW1lLFxyXG4gICAgICAgIGRldGFpbHM6IGNvbnRhY3RDYXJkLFxyXG4gICAgICAgIG15U2hhcmVkRGV0YWlsczogbXlDb250YWN0Q2FyZCxcclxuICAgICAgICB1c2VyU2hhcmVkS2V5OiB0cC5jdXJyZW50VXNlclNoYXJlZEtleS51c2VyU2hhcmVkS2V5LFxyXG4gICAgICAgIHVzZXJuYW1lOiB0cC5vdGhlci51c2VybmFtZSxcclxuICAgICAgICBmZWF0dXJlczoge1xyXG4gICAgICAgICAgc2hhcmVkVmF1bHQ6IHtcclxuICAgICAgICAgICAgaGFzQWNjZXNzOlxyXG4gICAgICAgICAgICAgICh0cC5vdGhlci5mZWF0dXJlcz8uc2hhcmVWYXVsdCB8fCBbJ25vYWNjZXNzJ10pWzBdID09PSAnYWNjZXNzJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRlY3J5cHQgVHJ1c3RlZCBQYXJ0eS4nLCBlLCB0cCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBtYXBJbnZpdGUoXHJcbiAgICBleGNoYW5nZTogRGVjcnlwdGVkS2V5RXhjaGFuZ2VcclxuICApOiBQcm9taXNlPFRydXN0ZWRQYXJ0eUludml0ZT4ge1xyXG4gICAgY29uc3QgY29udGFjdENhcmQgPSBleGNoYW5nZS5jb250YWN0Q2FyZDtcclxuICAgIGNvbnN0IG5hbWUgPSBleGNoYW5nZS5pc0luaXRpYXRvclxyXG4gICAgICA/IGV4Y2hhbmdlLm15TWVzc2FnZT8ubmFtZVxyXG4gICAgICA6IGNvbnRhY3RDYXJkICYmIGNvbnRhY3RDYXJkLm5hbWUgJiYgY29udGFjdENhcmQubmFtZS5uYW1lO1xyXG4gICAgY29uc3QgZW1haWwgPSBleGNoYW5nZS5pc0luaXRpYXRvclxyXG4gICAgICA/IGV4Y2hhbmdlLm15TWVzc2FnZT8uZW1haWxcclxuICAgICAgOiAoY29udGFjdENhcmQgJiYgY29udGFjdENhcmQuZW1haWwpIHx8IGV4Y2hhbmdlLnJlc3BvbmRlckVtYWlsQWRkcmVzcztcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogZXhjaGFuZ2UuaWQsXHJcbiAgICAgIHR5cGU6IFRydXN0ZWRQYXJ0eVR5cGUuVXNlciwgLy8gdG9kbyB3aGVuIHBhcnRuZXJzXHJcbiAgICAgIHN0YXR1czogKGV4Y2hhbmdlLnN0YXRlIGFzIHVua25vd24pIGFzIFRydXN0ZWRQYXJ0eUludml0ZVN0YXR1cyxcclxuICAgICAgdG9rZW46IGV4Y2hhbmdlLnRva2VuLFxyXG4gICAgICB0b2tlbkV4cGlyeTogZXhjaGFuZ2UudG9rZW5FeHBpcnlUaW1lLFxyXG4gICAgICBkZWNyeXB0ZWRPdGs6IGV4Y2hhbmdlLmRlY3J5cHRlZE90ayxcclxuICAgICAgbmFtZSxcclxuICAgICAgZW1haWwsXHJcbiAgICAgIGlzU2VuZGVyOiBleGNoYW5nZS5pc0luaXRpYXRvcixcclxuICAgICAgYWN0aW9uUmVxdWlyZWQ6IGV4Y2hhbmdlLmlzSW5pdGlhdG9yXHJcbiAgICAgICAgPyBleGNoYW5nZS5pbml0aWF0b3JBY3Rpb25SZXF1aXJlZFxyXG4gICAgICAgIDogZXhjaGFuZ2UucmVzcG9uZGVyQWN0aW9uUmVxdWlyZWQsXHJcbiAgICAgIHJvb3RLZXlDaXBoZXI6IGV4Y2hhbmdlLmluaXRpYXRvclJvb3RLZXlDaXBoZXIsXHJcbiAgICAgIHBia0NpcGhlcjogZXhjaGFuZ2Uub3RrLmluaXRpYXRvck9uZVRpbWVQYmtDaXBoZXIsXHJcbiAgICAgIGlzRXhwaXJlZDogZXhjaGFuZ2UuaXNFeHBpcmVkLFxyXG4gICAgICBkZXRhaWxzOiBjb250YWN0Q2FyZCxcclxuICAgICAgbWVzc2FnZTogZXhjaGFuZ2UubWVzc2FnZSxcclxuICAgICAgbXlTaGFyZWREZXRhaWxzOiBleGNoYW5nZS5teUNvbnRhY3RDYXJkLFxyXG4gICAgICBteVNoYXJlZE1lc3NhZ2U6IGV4Y2hhbmdlLm15TWVzc2FnZSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { TrustedPartyDetails } from './../users/profile.types';
|
|
2
|
+
export class TrustedPartyRole {
|
|
3
|
+
}
|
|
4
|
+
export var TrustedPartyRoleType;
|
|
5
|
+
(function (TrustedPartyRoleType) {
|
|
6
|
+
TrustedPartyRoleType["General"] = "general";
|
|
7
|
+
TrustedPartyRoleType["Scenario"] = "scenario";
|
|
8
|
+
})(TrustedPartyRoleType || (TrustedPartyRoleType = {}));
|
|
9
|
+
export var TrustedPartyType;
|
|
10
|
+
(function (TrustedPartyType) {
|
|
11
|
+
TrustedPartyType["User"] = "user";
|
|
12
|
+
TrustedPartyType["Organisation"] = "organisation";
|
|
13
|
+
})(TrustedPartyType || (TrustedPartyType = {}));
|
|
14
|
+
export var TrustedPartyInviteStatus;
|
|
15
|
+
(function (TrustedPartyInviteStatus) {
|
|
16
|
+
TrustedPartyInviteStatus["Invited"] = "IN_PROGRESS";
|
|
17
|
+
TrustedPartyInviteStatus["Cancelled"] = "CANCELLED";
|
|
18
|
+
TrustedPartyInviteStatus["Declined"] = "DECLINED";
|
|
19
|
+
TrustedPartyInviteStatus["Completed"] = "COMPLETED";
|
|
20
|
+
})(TrustedPartyInviteStatus || (TrustedPartyInviteStatus = {}));
|
|
21
|
+
export class TrustedParties {
|
|
22
|
+
}
|
|
23
|
+
export class SharedTrustedPartyDetails extends TrustedPartyDetails {
|
|
24
|
+
}
|
|
25
|
+
export class TrustedPartyInvite {
|
|
26
|
+
}
|
|
27
|
+
export class TPFeatures {
|
|
28
|
+
}
|
|
29
|
+
export class SharedVaultFeature {
|
|
30
|
+
}
|
|
31
|
+
export class TrustedParty {
|
|
32
|
+
}
|
|
33
|
+
export class FoundTrustedParty {
|
|
34
|
+
}
|
|
35
|
+
export class InviteTrustedParty {
|
|
36
|
+
}
|
|
37
|
+
export class AcceptTrustedPartyInvite {
|
|
38
|
+
}
|
|
39
|
+
export class ConfirmTrustedPartyInvite {
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy90ZXN0L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3RydXN0ZWQtcGFydGllcy90cnVzdGVkLXBhcnR5LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRy9ELE1BQU0sT0FBTyxnQkFBZ0I7Q0FRNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxvQkFHWDtBQUhELFdBQVksb0JBQW9CO0lBQzlCLDJDQUFtQixDQUFBO0lBQ25CLDZDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBRy9CO0FBRUQsTUFBTSxDQUFOLElBQVksZ0JBR1g7QUFIRCxXQUFZLGdCQUFnQjtJQUMxQixpQ0FBYSxDQUFBO0lBQ2IsaURBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQUhXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFHM0I7QUFFRCxNQUFNLENBQU4sSUFBWSx3QkFLWDtBQUxELFdBQVksd0JBQXdCO0lBQ2xDLG1EQUF1QixDQUFBO0lBQ3ZCLG1EQUF1QixDQUFBO0lBQ3ZCLGlEQUFxQixDQUFBO0lBQ3JCLG1EQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFMVyx3QkFBd0IsS0FBeEIsd0JBQXdCLFFBS25DO0FBRUQsTUFBTSxPQUFPLGNBQWM7Q0FJMUI7QUFFRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsbUJBQW1CO0NBSWpFO0FBRUQsTUFBTSxPQUFPLGtCQUFrQjtDQW9COUI7QUFFRCxNQUFNLE9BQU8sVUFBVTtDQUV0QjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7Q0FFOUI7QUFFRCxNQUFNLE9BQU8sWUFBWTtDQVl4QjtBQUVELE1BQU0sT0FBTyxpQkFBaUI7Q0FNN0I7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0NBSTlCO0FBRUQsTUFBTSxPQUFPLHdCQUF3QjtDQUtwQztBQUVELE1BQU0sT0FBTyx5QkFBeUI7Q0FJckMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIERlY3J5cHRlZE90ayxcclxuICBQcmVwYXJlZFBlcm1pc3Npb25zLFxyXG4gIFVzZXJTaGFyZWRLZXksXHJcbn0gZnJvbSAnLi4vYXBpL2tleS1leGNoYW5nZS50eXBlcyc7XHJcbmltcG9ydCB7IEtleUV4Y2hhbmdlTWVzc2FnZSB9IGZyb20gJy4vLi4vYXBpL2tleS1leGNoYW5nZS50eXBlcyc7XHJcbmltcG9ydCB7IEFjY2Vzc0xldmVsIH0gZnJvbSAnLi8uLi9jYXRlZ29yeS9jYXRlZ29yeS50eXBlcyc7XHJcbmltcG9ydCB7IFRydXN0ZWRQYXJ0eURldGFpbHMgfSBmcm9tICcuLy4uL3VzZXJzL3Byb2ZpbGUudHlwZXMnO1xyXG5pbXBvcnQgeyBGZWF0dXJlQWN0aW9uIH0gZnJvbSAnLi4vYXV0aC9hdXRoLnR5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUcnVzdGVkUGFydHlSb2xlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICByb2xlVHlwZTogVHJ1c3RlZFBhcnR5Um9sZVR5cGU7XHJcbiAgY2F0ZWdvcmllczoge1xyXG4gICAgY2F0ZWdvcnk6IHN0cmluZ1tdO1xyXG4gICAgYWNjZXNzTGV2ZWw6IEFjY2Vzc0xldmVsO1xyXG4gIH1bXTtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVHJ1c3RlZFBhcnR5Um9sZVR5cGUge1xyXG4gIEdlbmVyYWwgPSAnZ2VuZXJhbCcsXHJcbiAgU2NlbmFyaW8gPSAnc2NlbmFyaW8nLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcnVzdGVkUGFydHlUeXBlIHtcclxuICBVc2VyID0gJ3VzZXInLFxyXG4gIE9yZ2FuaXNhdGlvbiA9ICdvcmdhbmlzYXRpb24nLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcnVzdGVkUGFydHlJbnZpdGVTdGF0dXMge1xyXG4gIEludml0ZWQgPSAnSU5fUFJPR1JFU1MnLFxyXG4gIENhbmNlbGxlZCA9ICdDQU5DRUxMRUQnLFxyXG4gIERlY2xpbmVkID0gJ0RFQ0xJTkVEJyxcclxuICBDb21wbGV0ZWQgPSAnQ09NUExFVEVEJyxcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRydXN0ZWRQYXJ0aWVzIHtcclxuICBwYXJ0aWVzOiBUcnVzdGVkUGFydHlbXTtcclxuICBpbnZpdGVzOiBUcnVzdGVkUGFydHlJbnZpdGVbXTtcclxuICBzZW50SW52aXRlczogVHJ1c3RlZFBhcnR5SW52aXRlW107XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTaGFyZWRUcnVzdGVkUGFydHlEZXRhaWxzIGV4dGVuZHMgVHJ1c3RlZFBhcnR5RGV0YWlscyB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBvd25lZEtleUlkOiBzdHJpbmc7XHJcbiAgc2hhcmVkS2V5SWQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRydXN0ZWRQYXJ0eUludml0ZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB0eXBlOiBUcnVzdGVkUGFydHlUeXBlO1xyXG4gIHN0YXR1czogVHJ1c3RlZFBhcnR5SW52aXRlU3RhdHVzO1xyXG4gIHRva2VuOiBzdHJpbmc7XHJcbiAgdG9rZW5FeHBpcnk6IHN0cmluZyB8IERhdGU7XHJcbiAgaXNFeHBpcmVkOiBib29sZWFuO1xyXG4gIGlzU2VuZGVyOiBib29sZWFuO1xyXG4gIGFjdGlvblJlcXVpcmVkOiBib29sZWFuO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBlbWFpbDogc3RyaW5nO1xyXG5cclxuICBkZXRhaWxzPzogVHJ1c3RlZFBhcnR5RGV0YWlscztcclxuICBtZXNzYWdlPzogS2V5RXhjaGFuZ2VNZXNzYWdlO1xyXG4gIG15U2hhcmVkRGV0YWlscz86IFRydXN0ZWRQYXJ0eURldGFpbHM7XHJcbiAgbXlTaGFyZWRNZXNzYWdlPzogS2V5RXhjaGFuZ2VNZXNzYWdlO1xyXG5cclxuICByb290S2V5Q2lwaGVyOiBzdHJpbmc7XHJcbiAgcGJrQ2lwaGVyOiBzdHJpbmc7XHJcbiAgZGVjcnlwdGVkT3RrOiBEZWNyeXB0ZWRPdGs7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUUEZlYXR1cmVzIHtcclxuICBzaGFyZWRWYXVsdDogU2hhcmVkVmF1bHRGZWF0dXJlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2hhcmVkVmF1bHRGZWF0dXJlIHtcclxuICBoYXNBY2Nlc3M6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUcnVzdGVkUGFydHkge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdHlwZTogVHJ1c3RlZFBhcnR5VHlwZTtcclxuICBuYW1lOiBzdHJpbmc7XHJcblxyXG4gIGhhc1NjZW5hcmlvczogYm9vbGVhbjtcclxuICBoYXNTaGFyZWRWYXVsdDogYm9vbGVhbjtcclxuICBkZXRhaWxzOiBUcnVzdGVkUGFydHlEZXRhaWxzO1xyXG4gIG15U2hhcmVkRGV0YWlsczogU2hhcmVkVHJ1c3RlZFBhcnR5RGV0YWlscztcclxuICB1c2VyU2hhcmVkS2V5OiBVc2VyU2hhcmVkS2V5O1xyXG4gIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgZmVhdHVyZXM6IFRQRmVhdHVyZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGb3VuZFRydXN0ZWRQYXJ0eSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBlbWFpbDogc3RyaW5nO1xyXG4gIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgaXNUcnVzdGVkUGFydHk6IGJvb2xlYW47XHJcbiAgaXNNZTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEludml0ZVRydXN0ZWRQYXJ0eSB7XHJcbiAgcGFydHk6IHsgdXNlcm5hbWU/OiBzdHJpbmc7IGVtYWlsPzogc3RyaW5nOyBuYW1lPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH07XHJcbiAgcGVybWlzc2lvbnM/OiBQcmVwYXJlZFBlcm1pc3Npb25zO1xyXG4gIG15U2hhcmVkRGV0YWlsczogVHJ1c3RlZFBhcnR5RGV0YWlscztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFjY2VwdFRydXN0ZWRQYXJ0eUludml0ZSB7XHJcbiAgaW52aXRlSWQ6IHN0cmluZztcclxuICBpbnZpdGVUb2tlbjogc3RyaW5nO1xyXG4gIGRlY3J5cHRlZE90azogRGVjcnlwdGVkT3RrO1xyXG4gIG15U2hhcmVkRGV0YWlsczogVHJ1c3RlZFBhcnR5RGV0YWlscztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbmZpcm1UcnVzdGVkUGFydHlJbnZpdGUge1xyXG4gIGludml0ZUlkOiBzdHJpbmc7XHJcbiAgaW5pdGlhdG9yUm9vdEtleUNpcGhlcjogc3RyaW5nO1xyXG4gIGluaXRpYXRvck9uZVRpbWVQYmtDaXBoZXI6IHN0cmluZztcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { gqlTyped } from '../_common/ast';
|
|
2
|
+
export const DeleteTpMutation = gqlTyped `
|
|
3
|
+
mutation DeleteTpMutation($input: DeleteTpInput!) {
|
|
4
|
+
deleteTp(input: $input) {
|
|
5
|
+
id
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
`;
|
|
9
|
+
export const ShareDirectoryMutation = gqlTyped `
|
|
10
|
+
mutation ShareDirectoryMutation($input: ShareDirectoryInput!) {
|
|
11
|
+
shareDirectory(input: $input) {
|
|
12
|
+
tpDirectory {
|
|
13
|
+
id
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
18
|
+
export const UnshareDirectoryMutation = gqlTyped `
|
|
19
|
+
mutation UnshareDirectoryMutation($input: UnshareDirectoryInput!) {
|
|
20
|
+
unshareDirectory(input: $input) {
|
|
21
|
+
tpDirectory {
|
|
22
|
+
id
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
export const ShareFileMutation = gqlTyped `
|
|
28
|
+
mutation ShareFileMutation($input: ShareFileInput!) {
|
|
29
|
+
shareFile(input: $input) {
|
|
30
|
+
tpFile {
|
|
31
|
+
id
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
export const UnshareFileMutation = gqlTyped `
|
|
37
|
+
mutation UnshareFileMutation($input: UnshareFileInput!) {
|
|
38
|
+
unshareFile(input: $input) {
|
|
39
|
+
tpFile {
|
|
40
|
+
id
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
export const TpCurrentUserSharedKeyQuery = gqlTyped `
|
|
46
|
+
query TpCurrentUserSharedKeyQuery($id: LrRelayIdInput!) {
|
|
47
|
+
tp(id: $id){
|
|
48
|
+
currentUserSharedKey {
|
|
49
|
+
userSharedKey {
|
|
50
|
+
sharedKey {
|
|
51
|
+
id
|
|
52
|
+
}
|
|
53
|
+
mkSharedKey {
|
|
54
|
+
id
|
|
55
|
+
}
|
|
56
|
+
mkPxk {
|
|
57
|
+
id
|
|
58
|
+
}
|
|
59
|
+
mkReshareRequestCipher
|
|
60
|
+
mkReshareRequestSent
|
|
61
|
+
mkReshareResponseCipher
|
|
62
|
+
mkReshareResponseSent
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
export const RequestTpMkReshareMutation = gqlTyped `
|
|
69
|
+
mutation RequestTpMkReshareMutation($input: RequestTpMkReshareInput!) {
|
|
70
|
+
requestTpMkReshare(input: $input) {
|
|
71
|
+
id
|
|
72
|
+
}
|
|
73
|
+
}`;
|
|
74
|
+
export const RespondTpMkReshareMutation = gqlTyped `
|
|
75
|
+
mutation RespondTpMkReshareMutation($input: RespondTpMkReshareInput!) {
|
|
76
|
+
respondTpMkReshare(input: $input) {
|
|
77
|
+
id
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
`;
|
|
81
|
+
export const CompleteTpMkReshareMutation = gqlTyped `
|
|
82
|
+
mutation CompleteTpMkReshareMutation($input: CompleteTpMkReshareInput!) {
|
|
83
|
+
completeTpMkReshare(input: $input) {
|
|
84
|
+
id
|
|
85
|
+
}
|
|
86
|
+
}`;
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eTIuZ3FsLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL3Rlc3QvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvdHJ1c3RlZC1wYXJ0aWVzL3RydXN0ZWQtcGFydHkyLmdxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRMUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFrQjs7Ozs7O0NBTXpELENBQUM7QUFTRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxRQUFRLENBQXdCOzs7Ozs7OztDQVFyRSxDQUFDO0FBU0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUEwQjs7Ozs7Ozs7Q0FRekUsQ0FBQztBQVNGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBbUI7Ozs7Ozs7O0NBUTNELENBQUM7QUFTRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQXFCOzs7Ozs7OztDQVEvRCxDQUFDO0FBdUJGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFFBQVEsQ0FBNkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQi9FLENBQUM7QUFPRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxRQUFRLENBQTRCOzs7OztFQUs1RSxDQUFDO0FBT0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsUUFBUSxDQUE0Qjs7Ozs7O0NBTTdFLENBQUM7QUFPRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxRQUFRLENBQTZCOzs7OztFQUs5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ3FsVHlwZWQgfSBmcm9tICcuLi9fY29tbW9uL2FzdCc7XHJcbmltcG9ydCB7IElEIH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlVHBNdXRhdGlvbiB7XHJcbiAgZGVsZXRlVHA6IHtcclxuICAgIGlkOiBJRDtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBjb25zdCBEZWxldGVUcE11dGF0aW9uID0gZ3FsVHlwZWQ8RGVsZXRlVHBNdXRhdGlvbj5gXHJcbm11dGF0aW9uIERlbGV0ZVRwTXV0YXRpb24oJGlucHV0OiBEZWxldGVUcElucHV0ISkge1xyXG4gIGRlbGV0ZVRwKGlucHV0OiAkaW5wdXQpIHtcclxuICAgIGlkXHJcbiAgfVxyXG59XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJlRGlyZWN0b3J5TXV0YXRpb24ge1xyXG4gIHNoYXJlRGlyZWN0b3J5OiB7XHJcbiAgICB0cERpcmVjdG9yeToge1xyXG4gICAgICBpZDogSUQ7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFNoYXJlRGlyZWN0b3J5TXV0YXRpb24gPSBncWxUeXBlZDxTaGFyZURpcmVjdG9yeU11dGF0aW9uPmBcclxuICBtdXRhdGlvbiBTaGFyZURpcmVjdG9yeU11dGF0aW9uKCRpbnB1dDogU2hhcmVEaXJlY3RvcnlJbnB1dCEpIHtcclxuICAgIHNoYXJlRGlyZWN0b3J5KGlucHV0OiAkaW5wdXQpIHtcclxuICAgICAgdHBEaXJlY3Rvcnkge1xyXG4gICAgICAgIGlkXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVuc2hhcmVEaXJlY3RvcnlNdXRhdGlvbiB7XHJcbiAgdW5zaGFyZURpcmVjdG9yeToge1xyXG4gICAgdHBEaXJlY3Rvcnk6IHtcclxuICAgICAgaWQ6IElEO1xyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBjb25zdCBVbnNoYXJlRGlyZWN0b3J5TXV0YXRpb24gPSBncWxUeXBlZDxVbnNoYXJlRGlyZWN0b3J5TXV0YXRpb24+YFxyXG4gIG11dGF0aW9uIFVuc2hhcmVEaXJlY3RvcnlNdXRhdGlvbigkaW5wdXQ6IFVuc2hhcmVEaXJlY3RvcnlJbnB1dCEpIHtcclxuICAgIHVuc2hhcmVEaXJlY3RvcnkoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICB0cERpcmVjdG9yeSB7XHJcbiAgICAgICAgaWRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVGaWxlTXV0YXRpb24ge1xyXG4gIHNoYXJlRmlsZToge1xyXG4gICAgdHBGaWxlOiB7XHJcbiAgICAgIGlkOiBJRDtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgU2hhcmVGaWxlTXV0YXRpb24gPSBncWxUeXBlZDxTaGFyZUZpbGVNdXRhdGlvbj5gXHJcbiAgbXV0YXRpb24gU2hhcmVGaWxlTXV0YXRpb24oJGlucHV0OiBTaGFyZUZpbGVJbnB1dCEpIHtcclxuICAgIHNoYXJlRmlsZShpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgIHRwRmlsZSB7XHJcbiAgICAgICAgaWRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVW5zaGFyZUZpbGVNdXRhdGlvbiB7XHJcbiAgdW5zaGFyZUZpbGU6IHtcclxuICAgIHRwRmlsZToge1xyXG4gICAgICBpZDogSUQ7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFVuc2hhcmVGaWxlTXV0YXRpb24gPSBncWxUeXBlZDxVbnNoYXJlRmlsZU11dGF0aW9uPmBcclxuICBtdXRhdGlvbiBVbnNoYXJlRmlsZU11dGF0aW9uKCRpbnB1dDogVW5zaGFyZUZpbGVJbnB1dCEpIHtcclxuICAgIHVuc2hhcmVGaWxlKGlucHV0OiAkaW5wdXQpIHtcclxuICAgICAgdHBGaWxlIHtcclxuICAgICAgICBpZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5gO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcEN1cnJlbnRVc2VyU2hhcmVkS2V5UXVlcnkge1xyXG4gIHRwOiB7XHJcbiAgICBjdXJyZW50VXNlclNoYXJlZEtleToge1xyXG4gICAgICB1c2VyU2hhcmVkS2V5OiB7XHJcbiAgICAgICAgc2hhcmVkS2V5OiB7XHJcbiAgICAgICAgICBpZDogSUQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBta1NoYXJlZEtleToge1xyXG4gICAgICAgICAgaWQ6IElEO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbWtQeGs6IHtcclxuICAgICAgICAgIGlkOiBJRDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIG1rUmVzaGFyZVJlcXVlc3RDaXBoZXI6IHN0cmluZztcclxuICAgICAgICBta1Jlc2hhcmVSZXF1ZXN0U2VudDogYm9vbGVhbjtcclxuICAgICAgICBta1Jlc2hhcmVSZXNwb25zZUNpcGhlcjogc3RyaW5nO1xyXG4gICAgICAgIG1rUmVzaGFyZVJlc3BvbnNlU2VudDogYm9vbGVhbjtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgVHBDdXJyZW50VXNlclNoYXJlZEtleVF1ZXJ5ID0gZ3FsVHlwZWQ8VHBDdXJyZW50VXNlclNoYXJlZEtleVF1ZXJ5PmBcclxucXVlcnkgVHBDdXJyZW50VXNlclNoYXJlZEtleVF1ZXJ5KCRpZDogTHJSZWxheUlkSW5wdXQhKSB7XHJcbiAgdHAoaWQ6ICRpZCl7XHJcbiAgICBjdXJyZW50VXNlclNoYXJlZEtleSB7XHJcbiAgICAgIHVzZXJTaGFyZWRLZXkge1xyXG4gICAgICAgIHNoYXJlZEtleSB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgIH1cclxuICAgICAgICBta1NoYXJlZEtleSB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgIH1cclxuICAgICAgICBta1B4ayB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgIH1cclxuICAgICAgICBta1Jlc2hhcmVSZXF1ZXN0Q2lwaGVyXHJcbiAgICAgICAgbWtSZXNoYXJlUmVxdWVzdFNlbnRcclxuICAgICAgICBta1Jlc2hhcmVSZXNwb25zZUNpcGhlclxyXG4gICAgICAgIG1rUmVzaGFyZVJlc3BvbnNlU2VudFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RUcE1rUmVzaGFyZU11dGF0aW9uIHtcclxuICByZXF1ZXN0VHBNa1Jlc2hhcmU6IHtcclxuICAgIGlkOiBJRDtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBjb25zdCBSZXF1ZXN0VHBNa1Jlc2hhcmVNdXRhdGlvbiA9IGdxbFR5cGVkPFJlcXVlc3RUcE1rUmVzaGFyZU11dGF0aW9uPmBcclxubXV0YXRpb24gUmVxdWVzdFRwTWtSZXNoYXJlTXV0YXRpb24oJGlucHV0OiBSZXF1ZXN0VHBNa1Jlc2hhcmVJbnB1dCEpIHtcclxuICByZXF1ZXN0VHBNa1Jlc2hhcmUoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgaWRcclxuICB9XHJcbn1gO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25kVHBNa1Jlc2hhcmVNdXRhdGlvbiB7XHJcbiAgcmVzcG9uZFRwTWtSZXNoYXJlOiB7XHJcbiAgICBpZDogSUQ7XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgUmVzcG9uZFRwTWtSZXNoYXJlTXV0YXRpb24gPSBncWxUeXBlZDxSZXNwb25kVHBNa1Jlc2hhcmVNdXRhdGlvbj5gXHJcbiAgbXV0YXRpb24gUmVzcG9uZFRwTWtSZXNoYXJlTXV0YXRpb24oJGlucHV0OiBSZXNwb25kVHBNa1Jlc2hhcmVJbnB1dCEpIHtcclxuICAgIHJlc3BvbmRUcE1rUmVzaGFyZShpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgIGlkXHJcbiAgICB9XHJcbiAgfVxyXG5gO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0ZVRwTWtSZXNoYXJlTXV0YXRpb24ge1xyXG4gIGNvbXBsZXRlVHBNa1Jlc2hhcmU6IHtcclxuICAgIGlkOiBJRDtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBjb25zdCBDb21wbGV0ZVRwTWtSZXNoYXJlTXV0YXRpb24gPSBncWxUeXBlZDxDb21wbGV0ZVRwTWtSZXNoYXJlTXV0YXRpb24+YFxyXG5tdXRhdGlvbiBDb21wbGV0ZVRwTWtSZXNoYXJlTXV0YXRpb24oJGlucHV0OiBDb21wbGV0ZVRwTWtSZXNoYXJlSW5wdXQhKSB7XHJcbiAgY29tcGxldGVUcE1rUmVzaGFyZShpbnB1dDogJGlucHV0KSB7XHJcbiAgICBpZFxyXG4gIH1cclxufWA7XHJcbiJdfQ==
|