@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,110 @@
|
|
|
1
|
+
import { gqlTyped } from '../_common/ast';
|
|
2
|
+
export const DirectoryKeyQuery = gqlTyped `
|
|
3
|
+
query DirectoryKeyQuery($id: LrRelayIdInput!) {
|
|
4
|
+
directory(id: $id) {
|
|
5
|
+
keyId
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
`;
|
|
9
|
+
export const FileKeyQuery = gqlTyped `
|
|
10
|
+
query FileKeyQuery($id: LrRelayIdInput!) {
|
|
11
|
+
file(id: $id) {
|
|
12
|
+
keyId
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
export const FileStateKeyQuery = gqlTyped `
|
|
17
|
+
query FileStateKeyQuery($id: LrRelayIdInput!) {
|
|
18
|
+
fileState(id: $id) {
|
|
19
|
+
keyId
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
export const CreateDirectoryMutation = gqlTyped `
|
|
24
|
+
mutation CreateDirectoryMutation($input: CreateDirectoryInput!) {
|
|
25
|
+
createDirectory(input: $input) {
|
|
26
|
+
directory {
|
|
27
|
+
id
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
export const UpdateDirectoryMutation = gqlTyped `
|
|
33
|
+
mutation UpdateDirectoryMutation($input: UpdateDirectoryInput!) {
|
|
34
|
+
updateDirectory(input: $input) {
|
|
35
|
+
directory {
|
|
36
|
+
id
|
|
37
|
+
modified
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
42
|
+
export const DeleteDirectoryMutation = gqlTyped `
|
|
43
|
+
mutation DeleteDirectoryMutation($input: DeleteDirectoryInput!) {
|
|
44
|
+
deleteDirectory(input: $input) {
|
|
45
|
+
id
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
`;
|
|
49
|
+
export const CreateFileMutation = gqlTyped `
|
|
50
|
+
mutation CreateFileMutation($input: CreateFileInput!) {
|
|
51
|
+
createFile(input: $input) {
|
|
52
|
+
file {
|
|
53
|
+
id
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
`;
|
|
58
|
+
export const UpdateFileMutation = gqlTyped `
|
|
59
|
+
mutation UpdateFileMutation($input: UpdateFileInput!) {
|
|
60
|
+
updateFile(input: $input) {
|
|
61
|
+
file {
|
|
62
|
+
id
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
`;
|
|
67
|
+
export const DeleteFileMutation = gqlTyped `
|
|
68
|
+
mutation DeleteFileMutation($input: DeleteFileInput!) {
|
|
69
|
+
deleteFile(input: $input) {
|
|
70
|
+
id
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
`;
|
|
74
|
+
export const ArchiveDirectoryMutation = gqlTyped `
|
|
75
|
+
mutation ArchiveDirectoryMutation($input: ArchiveDirectoryInput!) {
|
|
76
|
+
archiveDirectory(input: $input) {
|
|
77
|
+
directory {
|
|
78
|
+
id
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
`;
|
|
83
|
+
export const UnarchiveDirectoryMutation = gqlTyped `
|
|
84
|
+
mutation UnarchiveDirectoryMutation($input: UnarchiveDirectoryInput!) {
|
|
85
|
+
unarchiveDirectory(input: $input) {
|
|
86
|
+
directory {
|
|
87
|
+
id
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
`;
|
|
92
|
+
export const ChangeDirectoryParentsMutation = gqlTyped `
|
|
93
|
+
mutation ChangeDirectoryParentsMutation($input: ChangeDirectoryParentsInput!) {
|
|
94
|
+
changeDirectoryParents(input: $input) {
|
|
95
|
+
directory {
|
|
96
|
+
id
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
export const ChangeFileParentsMutation = gqlTyped `
|
|
102
|
+
mutation ChangeFileParentsMutation($input: ChangeFileParentsInput!) {
|
|
103
|
+
changeFileParents(input: $input) {
|
|
104
|
+
file {
|
|
105
|
+
id
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
`;
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbTIuZ3FsLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL3Rlc3QvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXBpL2l0ZW0yLmdxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXMUMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFtQjs7Ozs7O0NBTTNELENBQUM7QUFPRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFjOzs7Ozs7Q0FNakQsQ0FBQztBQU9GLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBbUI7Ozs7OztDQU0zRCxDQUFDO0FBWUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsUUFBUSxDQUF5Qjs7Ozs7Ozs7Q0FRdkUsQ0FBQztBQVVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBeUI7Ozs7Ozs7OztDQVN2RSxDQUFDO0FBT0YsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsUUFBUSxDQUF5Qjs7Ozs7O0NBTXZFLENBQUM7QUFTRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQW9COzs7Ozs7OztDQVE3RCxDQUFDO0FBU0YsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFvQjs7Ozs7Ozs7Q0FRN0QsQ0FBQztBQU9GLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBb0I7Ozs7OztDQU03RCxDQUFDO0FBU0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUEwQjs7Ozs7Ozs7Q0FRekUsQ0FBQztBQVNGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLFFBQVEsQ0FBNEI7Ozs7Ozs7O0NBUTdFLENBQUM7QUFTRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxRQUFRLENBQXNDOzs7Ozs7OztDQVEzRixDQUFDO0FBU0YsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsUUFBUSxDQUFpQzs7Ozs7Ozs7Q0FRakYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdxbFR5cGVkIH0gZnJvbSAnLi4vX2NvbW1vbi9hc3QnO1xyXG5pbXBvcnQgeyBEYXRlVGltZSwgSUQgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIFF1ZXJpZXNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RvcnlLZXlRdWVyeSB7XHJcbiAgZGlyZWN0b3J5OiB7XHJcbiAgICBrZXlJZDogSUQ7XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgRGlyZWN0b3J5S2V5UXVlcnkgPSBncWxUeXBlZDxEaXJlY3RvcnlLZXlRdWVyeT5gXHJcbnF1ZXJ5IERpcmVjdG9yeUtleVF1ZXJ5KCRpZDogTHJSZWxheUlkSW5wdXQhKSB7XHJcbiAgZGlyZWN0b3J5KGlkOiAkaWQpIHtcclxuICAgIGtleUlkXHJcbiAgfVxyXG59XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVLZXlRdWVyeSB7XHJcbiAgZmlsZToge1xyXG4gICAga2V5SWQ6IElEO1xyXG4gIH07XHJcbn1cclxuZXhwb3J0IGNvbnN0IEZpbGVLZXlRdWVyeSA9IGdxbFR5cGVkPEZpbGVLZXlRdWVyeT5gXHJcbnF1ZXJ5IEZpbGVLZXlRdWVyeSgkaWQ6IExyUmVsYXlJZElucHV0ISkge1xyXG4gIGZpbGUoaWQ6ICRpZCkge1xyXG4gICAga2V5SWRcclxuICB9XHJcbn1cclxuYDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVN0YXRlS2V5UXVlcnkge1xyXG4gIGZpbGVTdGF0ZToge1xyXG4gICAga2V5SWQ6IElEO1xyXG4gIH07XHJcbn1cclxuZXhwb3J0IGNvbnN0IEZpbGVTdGF0ZUtleVF1ZXJ5ID0gZ3FsVHlwZWQ8RmlsZVN0YXRlS2V5UXVlcnk+YFxyXG5xdWVyeSBGaWxlU3RhdGVLZXlRdWVyeSgkaWQ6IExyUmVsYXlJZElucHV0ISkge1xyXG4gIGZpbGVTdGF0ZShpZDogJGlkKSB7XHJcbiAgICBrZXlJZFxyXG4gIH1cclxufVxyXG5gO1xyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gTXV0YXRpb25zXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRGlyZWN0b3J5TXV0YXRpb24ge1xyXG4gIGNyZWF0ZURpcmVjdG9yeToge1xyXG4gICAgZGlyZWN0b3J5OiB7XHJcbiAgICAgIGlkOiBJRDtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgQ3JlYXRlRGlyZWN0b3J5TXV0YXRpb24gPSBncWxUeXBlZDxDcmVhdGVEaXJlY3RvcnlNdXRhdGlvbj5gXHJcbm11dGF0aW9uIENyZWF0ZURpcmVjdG9yeU11dGF0aW9uKCRpbnB1dDogQ3JlYXRlRGlyZWN0b3J5SW5wdXQhKSB7XHJcbiAgY3JlYXRlRGlyZWN0b3J5KGlucHV0OiAkaW5wdXQpIHtcclxuICAgIGRpcmVjdG9yeSB7XHJcbiAgICAgIGlkXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZURpcmVjdG9yeU11dGF0aW9uIHtcclxuICB1cGRhdGVEaXJlY3Rvcnk6IHtcclxuICAgIGRpcmVjdG9yeToge1xyXG4gICAgICBpZDogSUQ7XHJcbiAgICAgIG1vZGlmaWVkOiBEYXRlVGltZTtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgVXBkYXRlRGlyZWN0b3J5TXV0YXRpb24gPSBncWxUeXBlZDxVcGRhdGVEaXJlY3RvcnlNdXRhdGlvbj5gXHJcbm11dGF0aW9uIFVwZGF0ZURpcmVjdG9yeU11dGF0aW9uKCRpbnB1dDogVXBkYXRlRGlyZWN0b3J5SW5wdXQhKSB7XHJcbiAgdXBkYXRlRGlyZWN0b3J5KGlucHV0OiAkaW5wdXQpIHtcclxuICAgIGRpcmVjdG9yeSB7XHJcbiAgICAgIGlkXHJcbiAgICAgIG1vZGlmaWVkXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZURpcmVjdG9yeU11dGF0aW9uIHtcclxuICBkZWxldGVEaXJlY3Rvcnk6IHtcclxuICAgIGlkOiBJRDtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBjb25zdCBEZWxldGVEaXJlY3RvcnlNdXRhdGlvbiA9IGdxbFR5cGVkPERlbGV0ZURpcmVjdG9yeU11dGF0aW9uPmBcclxubXV0YXRpb24gRGVsZXRlRGlyZWN0b3J5TXV0YXRpb24oJGlucHV0OiBEZWxldGVEaXJlY3RvcnlJbnB1dCEpIHtcclxuICBkZWxldGVEaXJlY3RvcnkoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgaWRcclxuICB9XHJcbn1cclxuYDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRmlsZU11dGF0aW9uIHtcclxuICBjcmVhdGVGaWxlOiB7XHJcbiAgICBmaWxlOiB7XHJcbiAgICAgIGlkOiBJRDtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgQ3JlYXRlRmlsZU11dGF0aW9uID0gZ3FsVHlwZWQ8Q3JlYXRlRmlsZU11dGF0aW9uPmBcclxubXV0YXRpb24gQ3JlYXRlRmlsZU11dGF0aW9uKCRpbnB1dDogQ3JlYXRlRmlsZUlucHV0ISkge1xyXG4gIGNyZWF0ZUZpbGUoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgZmlsZSB7XHJcbiAgICAgIGlkXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUZpbGVNdXRhdGlvbiB7XHJcbiAgdXBkYXRlRmlsZToge1xyXG4gICAgZmlsZToge1xyXG4gICAgICBpZDogSUQ7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFVwZGF0ZUZpbGVNdXRhdGlvbiA9IGdxbFR5cGVkPFVwZGF0ZUZpbGVNdXRhdGlvbj5gXHJcbm11dGF0aW9uIFVwZGF0ZUZpbGVNdXRhdGlvbigkaW5wdXQ6IFVwZGF0ZUZpbGVJbnB1dCEpIHtcclxuICB1cGRhdGVGaWxlKGlucHV0OiAkaW5wdXQpIHtcclxuICAgIGZpbGUge1xyXG4gICAgICBpZFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5gO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVGaWxlTXV0YXRpb24ge1xyXG4gIGRlbGV0ZUZpbGU6IHtcclxuICAgIGlkOiBJRDtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBjb25zdCBEZWxldGVGaWxlTXV0YXRpb24gPSBncWxUeXBlZDxEZWxldGVGaWxlTXV0YXRpb24+YFxyXG5tdXRhdGlvbiBEZWxldGVGaWxlTXV0YXRpb24oJGlucHV0OiBEZWxldGVGaWxlSW5wdXQhKSB7XHJcbiAgZGVsZXRlRmlsZShpbnB1dDogJGlucHV0KSB7XHJcbiAgICBpZFxyXG4gIH1cclxufVxyXG5gO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24ge1xyXG4gIGFyY2hpdmVEaXJlY3Rvcnk6IHtcclxuICAgIGRpcmVjdG9yeToge1xyXG4gICAgICBpZDogSUQ7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuZXhwb3J0IGNvbnN0IEFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbiA9IGdxbFR5cGVkPEFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbj5gXHJcbm11dGF0aW9uIEFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbigkaW5wdXQ6IEFyY2hpdmVEaXJlY3RvcnlJbnB1dCEpIHtcclxuICBhcmNoaXZlRGlyZWN0b3J5KGlucHV0OiAkaW5wdXQpIHtcclxuICAgIGRpcmVjdG9yeSB7XHJcbiAgICAgIGlkXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbmA7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVuYXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uIHtcclxuICB1bmFyY2hpdmVEaXJlY3Rvcnk6IHtcclxuICAgIGRpcmVjdG9yeToge1xyXG4gICAgICBpZDogSUQ7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFVuYXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uID0gZ3FsVHlwZWQ8VW5hcmNoaXZlRGlyZWN0b3J5TXV0YXRpb24+YFxyXG5tdXRhdGlvbiBVbmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbigkaW5wdXQ6IFVuYXJjaGl2ZURpcmVjdG9yeUlucHV0ISkge1xyXG4gIHVuYXJjaGl2ZURpcmVjdG9yeShpbnB1dDogJGlucHV0KSB7XHJcbiAgICBkaXJlY3Rvcnkge1xyXG4gICAgICBpZFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5gO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb25SZXN1bHQge1xyXG4gIHVuYXJjaGl2ZURpcmVjdG9yeToge1xyXG4gICAgZGlyZWN0b3J5OiB7XHJcbiAgICAgIGlkOiBJRDtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5leHBvcnQgY29uc3QgQ2hhbmdlRGlyZWN0b3J5UGFyZW50c011dGF0aW9uID0gZ3FsVHlwZWQ8Q2hhbmdlRGlyZWN0b3J5UGFyZW50c011dGF0aW9uUmVzdWx0PmBcclxubXV0YXRpb24gQ2hhbmdlRGlyZWN0b3J5UGFyZW50c011dGF0aW9uKCRpbnB1dDogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c0lucHV0ISkge1xyXG4gIGNoYW5nZURpcmVjdG9yeVBhcmVudHMoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgZGlyZWN0b3J5IHtcclxuICAgICAgaWRcclxuICAgIH1cclxuICB9XHJcbn1cclxuYDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvblJlc3VsdCB7XHJcbiAgdW5hcmNoaXZlRGlyZWN0b3J5OiB7XHJcbiAgICBkaXJlY3Rvcnk6IHtcclxuICAgICAgaWQ6IElEO1xyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBjb25zdCBDaGFuZ2VGaWxlUGFyZW50c011dGF0aW9uID0gZ3FsVHlwZWQ8Q2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvblJlc3VsdD5gXHJcbm11dGF0aW9uIENoYW5nZUZpbGVQYXJlbnRzTXV0YXRpb24oJGlucHV0OiBDaGFuZ2VGaWxlUGFyZW50c0lucHV0ISkge1xyXG4gIGNoYW5nZUZpbGVQYXJlbnRzKGlucHV0OiAkaW5wdXQpIHtcclxuICAgIGZpbGUge1xyXG4gICAgICBpZFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5gO1xyXG4iXX0=
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { __awaiter, __decorate } from "tslib";
|
|
2
|
+
import { Injectable, Injector, NgZone } from '@angular/core';
|
|
3
|
+
import { KeyFactoryService } from '../cryptography/key-factory.service';
|
|
4
|
+
import { KeyGraphService } from '../cryptography/key-graph.service';
|
|
5
|
+
import { KeyMetaService } from '../cryptography/key-meta.service';
|
|
6
|
+
import { KeyService } from '../cryptography/key.service';
|
|
7
|
+
import { LrBadArgumentException } from '../_common/exceptions';
|
|
8
|
+
import { RunOutsideAngular } from '../_common/run-outside-angular';
|
|
9
|
+
import { FileService } from './file.service';
|
|
10
|
+
import { LrMutation, LrService } from './lr-graphql';
|
|
11
|
+
import { DirectoryKeyQuery, CreateDirectoryMutation, DeleteDirectoryMutation, CreateFileMutation, DeleteFileMutation, FileKeyQuery, FileStateKeyQuery, UpdateFileMutation, UpdateDirectoryMutation, ArchiveDirectoryMutation, UnarchiveDirectoryMutation, ChangeDirectoryParentsMutation, ChangeFileParentsMutation, } from './item2.gql';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "./file.service";
|
|
14
|
+
import * as i2 from "../cryptography/key.service";
|
|
15
|
+
import * as i3 from "../cryptography/key-meta.service";
|
|
16
|
+
import * as i4 from "../cryptography/key-factory.service";
|
|
17
|
+
import * as i5 from "../cryptography/key-graph.service";
|
|
18
|
+
export var DirectoryLinkType;
|
|
19
|
+
(function (DirectoryLinkType) {
|
|
20
|
+
DirectoryLinkType["HARD"] = "HARD";
|
|
21
|
+
})(DirectoryLinkType || (DirectoryLinkType = {}));
|
|
22
|
+
let Item2Service = class Item2Service extends LrService {
|
|
23
|
+
constructor(ngZone, injector, fileService, keyService, keyMeta, keyFactory, keyGraph) {
|
|
24
|
+
super(injector);
|
|
25
|
+
this.ngZone = ngZone;
|
|
26
|
+
this.injector = injector;
|
|
27
|
+
this.fileService = fileService;
|
|
28
|
+
this.keyService = keyService;
|
|
29
|
+
this.keyMeta = keyMeta;
|
|
30
|
+
this.keyFactory = keyFactory;
|
|
31
|
+
this.keyGraph = keyGraph;
|
|
32
|
+
}
|
|
33
|
+
downloadFileContent(options) {
|
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
const fileContent = yield this.fileService.downloadEncryptedFile2(options.fileStateNodeId);
|
|
36
|
+
const fileStateKey = yield this.keyGraph.getKey(options.fileStateKeyId, () => this.getFileStateKeyId(options.fileStateNodeId));
|
|
37
|
+
return this.keyGraph.decryptFromString(fileStateKey, fileContent, {
|
|
38
|
+
payloadType: 'ArrayBuffer',
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
createDirectory(options) {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
const directoryKey = yield this.keyFactory.createKey();
|
|
46
|
+
options.parentDirectories = options.parentDirectories || [];
|
|
47
|
+
if (!options.asRootDirectory && !((_a = options.parentDirectories) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
48
|
+
throw new LrBadArgumentException('A new directory must be either a root directory or a sub-directory. So you must provide either parentDirectories and/or asRootDirectory parameter.');
|
|
49
|
+
}
|
|
50
|
+
const parentDirectories = yield Promise.all((_b = options.parentDirectories) === null || _b === void 0 ? void 0 : _b.map((t) => this.getParentDirectoryInput(t, directoryKey)));
|
|
51
|
+
// TODO this is rather an unfortunate name, change it to asRootDirectory.
|
|
52
|
+
let parentRootDirectory;
|
|
53
|
+
if (options.asRootDirectory) {
|
|
54
|
+
const rootKey = this.keyService.getCurrentRootKey();
|
|
55
|
+
parentRootDirectory = {
|
|
56
|
+
wrappingKeyId: rootKey.id,
|
|
57
|
+
wrappedKey: yield this.keyGraph.wrapKey(rootKey, directoryKey),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const input = Object.assign(Object.assign({}, (yield this.getInput(directoryKey, options))), { parentDirectories,
|
|
61
|
+
parentRootDirectory });
|
|
62
|
+
return new LrMutation({
|
|
63
|
+
mutation: CreateDirectoryMutation,
|
|
64
|
+
variables: {
|
|
65
|
+
input,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
updateDirectoryExec(options) {
|
|
71
|
+
return this.mutate(this.updateDirectoryMutation(options));
|
|
72
|
+
}
|
|
73
|
+
updateDirectory(options) {
|
|
74
|
+
return this.updateDirectoryMutation(options);
|
|
75
|
+
}
|
|
76
|
+
updateDirectoryMutation(options) {
|
|
77
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
const directoryKey = yield this.getDirectoryKey(options.directoryId, options.directoryKeyId);
|
|
79
|
+
return new LrMutation({
|
|
80
|
+
mutation: UpdateDirectoryMutation,
|
|
81
|
+
variables: {
|
|
82
|
+
input: Object.assign(Object.assign({}, (yield this.getInput(directoryKey.jwk, options))), { directoryId: options.directoryId }),
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
deleteDirectory(id) {
|
|
88
|
+
return new LrMutation({
|
|
89
|
+
mutation: DeleteDirectoryMutation,
|
|
90
|
+
variables: {
|
|
91
|
+
input: {
|
|
92
|
+
directoryId: id,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
createFile(options) {
|
|
98
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
99
|
+
const fileKey = yield this.keyFactory.createKey();
|
|
100
|
+
const parentDirectories = yield Promise.all(options.parentDirectories.map((t) => __awaiter(this, void 0, void 0, function* () {
|
|
101
|
+
const { directoryId, wrappingKeyId, wrappedKey, } = yield this.getParentDirectoryInput(t, fileKey);
|
|
102
|
+
// remap from ParentDirectoryInput to FileParentDirectoryInput
|
|
103
|
+
// TODO the server should really just use wrappedKey instead of wrappedFileKey
|
|
104
|
+
return {
|
|
105
|
+
directoryId,
|
|
106
|
+
wrappingKeyId,
|
|
107
|
+
wrappedFileKey: wrappedKey,
|
|
108
|
+
};
|
|
109
|
+
})));
|
|
110
|
+
return new LrMutation({
|
|
111
|
+
mutation: CreateFileMutation,
|
|
112
|
+
variables: {
|
|
113
|
+
input: Object.assign(Object.assign({}, (yield this.createFileState(fileKey, options))), { parentDirectories }),
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
updateFile(options) {
|
|
119
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
120
|
+
const fileKey = yield this.getFileKey(options.fileId, options.fileKeyId);
|
|
121
|
+
return new LrMutation({
|
|
122
|
+
mutation: UpdateFileMutation,
|
|
123
|
+
variables: {
|
|
124
|
+
input: Object.assign(Object.assign({}, (yield this.createFileState(fileKey.jwk, options))), { fileId: options.fileId }),
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
deleteFile(id) {
|
|
130
|
+
return new LrMutation({
|
|
131
|
+
mutation: DeleteFileMutation,
|
|
132
|
+
variables: {
|
|
133
|
+
input: {
|
|
134
|
+
fileId: id,
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
getParentDirectoryInput(options, newKey) {
|
|
140
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
141
|
+
// If directory's key is not already in the key graph, then need to
|
|
142
|
+
// fetch the directory's key.
|
|
143
|
+
const wrappingKey = yield this.getDirectoryKey(options.directoryId, options.wrappingKeyId);
|
|
144
|
+
return {
|
|
145
|
+
directoryId: options.directoryId,
|
|
146
|
+
wrappingKeyId: wrappingKey.id,
|
|
147
|
+
wrappedKey: yield this.keyGraph.wrapKey(wrappingKey, newKey),
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
// async getKey(keyId: LrRelayIdInput, getKeyIdCallback: () => Promise<ID>) {
|
|
152
|
+
// if (!this.keyGraph.hasKey(keyId)) {
|
|
153
|
+
// keyId = await getKeyIdCallback();
|
|
154
|
+
// }
|
|
155
|
+
// return this.keyGraph.getKey(keyId);
|
|
156
|
+
// }
|
|
157
|
+
getFileStateKeyId(fileStateNodeId) {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
return (yield this.query({
|
|
160
|
+
query: FileStateKeyQuery,
|
|
161
|
+
variables: {
|
|
162
|
+
id: fileStateNodeId,
|
|
163
|
+
},
|
|
164
|
+
})).fileState.keyId;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
getDirectoryKeyId(directoryId) {
|
|
168
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
+
return (yield this.query({
|
|
170
|
+
query: DirectoryKeyQuery,
|
|
171
|
+
variables: {
|
|
172
|
+
id: directoryId,
|
|
173
|
+
},
|
|
174
|
+
})).directory.keyId;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
getFileKeyId(fileId) {
|
|
178
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
179
|
+
return (yield this.query({
|
|
180
|
+
query: FileKeyQuery,
|
|
181
|
+
variables: {
|
|
182
|
+
id: fileId,
|
|
183
|
+
},
|
|
184
|
+
})).file.keyId;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
getDirectoryKey(directoryId, directoryKeyId) {
|
|
188
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
189
|
+
return this.keyGraph.getKey(directoryKeyId, () => this.getDirectoryKeyId(directoryId));
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
getFileKey(fileId, fileKeyId) {
|
|
193
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
194
|
+
return this.keyGraph.getKey(fileKeyId, () => this.getFileKeyId(fileId));
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
getInput(key, options) {
|
|
198
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
199
|
+
const { plainMetaJson, cipherMetaClearJson } = options;
|
|
200
|
+
return {
|
|
201
|
+
plainMeta: plainMetaJson && JSON.stringify(plainMetaJson),
|
|
202
|
+
cipherMeta: cipherMetaClearJson &&
|
|
203
|
+
(yield this.keyGraph.encryptToString(key, cipherMetaClearJson)),
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
createFileState(fileKey, options) {
|
|
208
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
209
|
+
// Each version of the file is encrypted using a new key.
|
|
210
|
+
const fileStateKey = yield this.keyFactory.createKey();
|
|
211
|
+
const fileContent = options.file && (yield this.fileService.loadFile(options.file));
|
|
212
|
+
let contentResource;
|
|
213
|
+
if (fileContent) {
|
|
214
|
+
const cipherFileContent = yield this.keyGraph.encryptToString(fileStateKey, fileContent);
|
|
215
|
+
if (options.upload) {
|
|
216
|
+
contentResource = yield options.upload(cipherFileContent);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
contentResource = yield this.fileService.uploadEncryptedFile({
|
|
220
|
+
encryptedContent: cipherFileContent,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
console.log('contentResource', contentResource);
|
|
224
|
+
}
|
|
225
|
+
return Object.assign(Object.assign({}, (yield this.getInput(fileStateKey, options))), { wrappedStateKey: yield this.keyGraph.wrapKey(fileKey, fileStateKey), contentResource });
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
archiveDirectory(directoryId, recursive) {
|
|
229
|
+
return new LrMutation({
|
|
230
|
+
mutation: ArchiveDirectoryMutation,
|
|
231
|
+
variables: {
|
|
232
|
+
input: {
|
|
233
|
+
directoryId,
|
|
234
|
+
recursive,
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
unarchiveDirectory(directoryId, recursive) {
|
|
240
|
+
return new LrMutation({
|
|
241
|
+
mutation: UnarchiveDirectoryMutation,
|
|
242
|
+
variables: {
|
|
243
|
+
input: {
|
|
244
|
+
directoryId,
|
|
245
|
+
recursive,
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
getChangeItemParentsInput(options, itemKey) {
|
|
251
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
252
|
+
const parentsToAdd = yield Promise.all(options.parentsToAdd.map((t) => this.getParentDirectoryInput(t, itemKey)));
|
|
253
|
+
return {
|
|
254
|
+
directoriesToRemove: options.parentsToRemove,
|
|
255
|
+
directoriesToAdd: parentsToAdd,
|
|
256
|
+
};
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
changeDirectoryParents(options) {
|
|
260
|
+
return this.mutate(this.changeDirectoryParentsMutation(options));
|
|
261
|
+
}
|
|
262
|
+
changeDirectoryParentsMutation(options) {
|
|
263
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
264
|
+
const directoryKey = yield this.getDirectoryKey(options.directoryId, options.directoryKeyId);
|
|
265
|
+
return new LrMutation({
|
|
266
|
+
mutation: ChangeDirectoryParentsMutation,
|
|
267
|
+
variables: {
|
|
268
|
+
input: Object.assign(Object.assign({}, (yield this.getChangeItemParentsInput(options, directoryKey.jwk))), { directoryId: options.directoryId }),
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
changeFileParents(options) {
|
|
274
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
275
|
+
return this.mutate(this.changeFileParentsMutation(options));
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
changeFileParentsMutation(options) {
|
|
279
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
280
|
+
const fileKey = yield this.getFileKey(options.fileId, options.fileKeyId);
|
|
281
|
+
return new LrMutation({
|
|
282
|
+
mutation: ChangeFileParentsMutation,
|
|
283
|
+
variables: {
|
|
284
|
+
input: Object.assign(Object.assign({}, (yield this.getChangeItemParentsInput(options, fileKey.jwk))), { fileId: options.fileId }),
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
Item2Service.ɵprov = i0.ɵɵdefineInjectable({ factory: function Item2Service_Factory() { return new Item2Service(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.FileService), i0.ɵɵinject(i2.KeyService), i0.ɵɵinject(i3.KeyMetaService), i0.ɵɵinject(i4.KeyFactoryService), i0.ɵɵinject(i5.KeyGraphService)); }, token: Item2Service, providedIn: "root" });
|
|
291
|
+
Item2Service.decorators = [
|
|
292
|
+
{ type: Injectable, args: [{
|
|
293
|
+
providedIn: 'root',
|
|
294
|
+
},] }
|
|
295
|
+
];
|
|
296
|
+
Item2Service.ctorParameters = () => [
|
|
297
|
+
{ type: NgZone },
|
|
298
|
+
{ type: Injector },
|
|
299
|
+
{ type: FileService },
|
|
300
|
+
{ type: KeyService },
|
|
301
|
+
{ type: KeyMetaService },
|
|
302
|
+
{ type: KeyFactoryService },
|
|
303
|
+
{ type: KeyGraphService }
|
|
304
|
+
];
|
|
305
|
+
Item2Service = __decorate([
|
|
306
|
+
RunOutsideAngular({
|
|
307
|
+
ngZoneName: 'ngZone',
|
|
308
|
+
})
|
|
309
|
+
], Item2Service);
|
|
310
|
+
export { Item2Service };
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbTIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy90ZXN0L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FwaS9pdGVtMi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBb0IsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLDBCQUEwQixFQUMxQiw4QkFBOEIsRUFDOUIseUJBQXlCLEdBQzFCLE1BQU0sYUFBYSxDQUFDOzs7Ozs7O0FBR3JCLE1BQU0sQ0FBTixJQUFZLGlCQUVYO0FBRkQsV0FBWSxpQkFBaUI7SUFDM0Isa0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFGVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBRTVCO0lBK0ZZLFlBQVksU0FBWixZQUFhLFNB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QUUsT0FBTyxDQUFDLE1BQU0sR0FDdkI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7Q0FDRixDQUFBOzs7WUF2V0EsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUEzSDhCLE1BQU07WUFBaEIsUUFBUTtZQVFwQixXQUFXO1lBSFgsVUFBVTtZQURWLGNBQWM7WUFGZCxpQkFBaUI7WUFDakIsZUFBZTs7QUF5SFgsWUFBWTtJQU54QixpQkFBaUIsQ0FBQztRQUNqQixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0dBSVcsWUFBWSxDQW9XeEI7U0FwV1ksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcclxuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWZhY3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XHJcbmltcG9ydCB7IEtleU1ldGFTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1tZXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbiB9IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XHJcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuL2ZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IExyR3JhcGhRTFNlcnZpY2UsIExyTXV0YXRpb24sIExyU2VydmljZSB9IGZyb20gJy4vbHItZ3JhcGhxbCc7XHJcbmltcG9ydCB7XHJcbiAgRGlyZWN0b3J5S2V5UXVlcnksXHJcbiAgQ3JlYXRlRGlyZWN0b3J5TXV0YXRpb24sXHJcbiAgRGVsZXRlRGlyZWN0b3J5TXV0YXRpb24sXHJcbiAgQ3JlYXRlRmlsZU11dGF0aW9uLFxyXG4gIERlbGV0ZUZpbGVNdXRhdGlvbixcclxuICBGaWxlS2V5UXVlcnksXHJcbiAgRmlsZVN0YXRlS2V5UXVlcnksXHJcbiAgVXBkYXRlRmlsZU11dGF0aW9uLFxyXG4gIFVwZGF0ZURpcmVjdG9yeU11dGF0aW9uLFxyXG4gIEFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbixcclxuICBVbmFyY2hpdmVEaXJlY3RvcnlNdXRhdGlvbixcclxuICBDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb24sXHJcbiAgQ2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvbixcclxufSBmcm9tICcuL2l0ZW0yLmdxbCc7XHJcbmltcG9ydCB7IElELCBMclJlbGF5SWRJbnB1dCB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGVudW0gRGlyZWN0b3J5TGlua1R5cGUge1xyXG4gIEhBUkQgPSAnSEFSRCcsXHJcbn1cclxuXHJcbi8vIFN1ZmZpeCBcIk9wdGlvbnNcIiBhcmUgd2hhdCdzIG5lZWQgYnkgdGhlIEtDIGNsaWVudC5cclxuZXhwb3J0IGludGVyZmFjZSBQYXJlbnREaXJlY3RvcnlPcHRpb25zIHtcclxuICBkaXJlY3RvcnlJZDogTHJSZWxheUlkSW5wdXQ7XHJcbiAgLy8gSWYgd3JhcHBpbmcga2V5IHByb3ZpZGVkLCB0aGVuIHdlIGNhbiB0cnkgZmV0Y2hpbmcgaXQgZnJvbSB0aGVcclxuICAvLyBrZXkgZ3JhcGguIElmIG5vdCBmb3VuZCBpbiBrZXkgZ3JhcGgsIHRoZW4gZmV0Y2ggdGhlIGRpcmVjdG9yeS5cclxuICB3cmFwcGluZ0tleUlkPzogTHJSZWxheUlkSW5wdXQ7XHJcbiAgLy8gVE9ETzogdGhpcyBjYW4gYmUgb3RoZXIgdHlwZXMsIGJ1dCBzZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBoYXMgbm90IGJlZW5cclxuICAvLyB0aG9yb3VnaGx5IHRlc3RlZC4gU28gYmVzdCBub3QgdXNlIGFueXRoaW5nIGVsc2UgYW5kIGp1c3QgbGVhdmUgaXQgb3V0IHNvXHJcbiAgLy8gc2VydmVyIHVzZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgXCJIQVJEXCJcclxuICBsaW5rVHlwZT86IERpcmVjdG9yeUxpbmtUeXBlLkhBUkQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyZW50Um9vdERpcmVjdG9yeUlucHV0IHtcclxuICB3cmFwcGVkS2V5OiBzdHJpbmc7XHJcbiAgd3JhcHBpbmdLZXlJZDogTHJSZWxheUlkSW5wdXQ7XHJcbn1cclxuXHJcbi8vIFN1ZmZpeCBcIklucHV0XCIgbWF0Y2hlZCB3aXRoIHRoZSBncmFwaHFsIHR5cGVzXHJcbi8vIFRPRE8gdGhlc2Ugc2hvdWxkIGJlIGNoYW5nZSB0byBiZSBleGFjdGx5IHRoZSBzYW1lIG9uIHRoZSBzZXJ2ZXIgc2luY2UgYWxsIHRoYXQgZGlmZmVyc1xyXG4vLyBpcyB0aGUgd3JhcHBlZEtleS93cmFwcGVkRmlsZUtleSBuYW1lXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyZW50RGlyZWN0b3J5SW5wdXRCYXNlIHtcclxuICBkaXJlY3RvcnlJZDogTHJSZWxheUlkSW5wdXQ7XHJcbiAgd3JhcHBpbmdLZXlJZDogTHJSZWxheUlkSW5wdXQ7XHJcbiAgbGlua1R5cGU/OiBEaXJlY3RvcnlMaW5rVHlwZS5IQVJEO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcmVudERpcmVjdG9yeUlucHV0IGV4dGVuZHMgUGFyZW50RGlyZWN0b3J5SW5wdXRCYXNlIHtcclxuICB3cmFwcGVkS2V5OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVBhcmVudERpcmVjdG9yeUlucHV0IGV4dGVuZHMgUGFyZW50RGlyZWN0b3J5SW5wdXRCYXNlIHtcclxuICB3cmFwcGVkRmlsZUtleTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERvd25sb2FkRmlsZUNvbnRlbnRPcHRpb25zIHtcclxuICBmaWxlU3RhdGVOb2RlSWQ6IExyUmVsYXlJZElucHV0O1xyXG4gIGZpbGVTdGF0ZUtleUlkPzogTHJSZWxheUlkSW5wdXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uRGlyZWN0b3J5T3B0aW9ucyB7XHJcbiAgcGxhaW5NZXRhSnNvbj86IGFueTtcclxuICBjaXBoZXJNZXRhQ2xlYXJKc29uPzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZURpcmVjdG9yeU9wdGlvbnMgZXh0ZW5kcyBDb21tb25EaXJlY3RvcnlPcHRpb25zIHtcclxuICBhc1Jvb3REaXJlY3Rvcnk/OiBib29sZWFuO1xyXG4gIHBhcmVudERpcmVjdG9yaWVzPzogUGFyZW50RGlyZWN0b3J5T3B0aW9uc1tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZURpcmVjdG9yeU9wdGlvbnMgZXh0ZW5kcyBDb21tb25EaXJlY3RvcnlPcHRpb25zIHtcclxuICBkaXJlY3RvcnlJZDogTHJSZWxheUlkSW5wdXQ7XHJcbiAgZGlyZWN0b3J5S2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21tb25GaWxlT3B0aW9ucyB7XHJcbiAgcGxhaW5NZXRhSnNvbj86IGFueTtcclxuICBjaXBoZXJNZXRhQ2xlYXJKc29uPzogYW55O1xyXG4gIGZpbGU/OiBGaWxlO1xyXG4gIC8vIGN1c3RvbSB1cGxvYWRlclxyXG4gIHVwbG9hZD86IChjaXBoZXJGaWxlQ29udGVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRmlsZU9wdGlvbnMgZXh0ZW5kcyBDb21tb25GaWxlT3B0aW9ucyB7XHJcbiAgcGFyZW50RGlyZWN0b3JpZXM6IFBhcmVudERpcmVjdG9yeU9wdGlvbnNbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVGaWxlT3B0aW9ucyBleHRlbmRzIENvbW1vbkZpbGVPcHRpb25zIHtcclxuICBmaWxlSWQ6IExyUmVsYXlJZElucHV0O1xyXG4gIGZpbGVLZXlJZD86IExyUmVsYXlJZElucHV0O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ2hhbmdlSXRlbVBhcmVudHNPcHRpb25zIHtcclxuICBwYXJlbnRzVG9SZW1vdmU6IExyUmVsYXlJZElucHV0W107XHJcbiAgcGFyZW50c1RvQWRkOiBQYXJlbnREaXJlY3RvcnlPcHRpb25zW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnNcclxuICBleHRlbmRzIENoYW5nZUl0ZW1QYXJlbnRzT3B0aW9ucyB7XHJcbiAgZGlyZWN0b3J5SWQ6IExyUmVsYXlJZElucHV0O1xyXG4gIGRpcmVjdG9yeUtleUlkPzogTHJSZWxheUlkSW5wdXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRmlsZVBhcmVudHNPcHRpb25zIGV4dGVuZHMgQ2hhbmdlSXRlbVBhcmVudHNPcHRpb25zIHtcclxuICBmaWxlSWQ6IExyUmVsYXlJZElucHV0O1xyXG4gIGZpbGVLZXlJZD86IExyUmVsYXlJZElucHV0O1xyXG59XHJcblxyXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xyXG4gIG5nWm9uZU5hbWU6ICduZ1pvbmUnLFxyXG59KVxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlbTJTZXJ2aWNlIGV4dGVuZHMgTHJTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlNZXRhOiBLZXlNZXRhU2VydmljZSxcclxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGluamVjdG9yKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkb3dubG9hZEZpbGVDb250ZW50KFxyXG4gICAgb3B0aW9uczogRG93bmxvYWRGaWxlQ29udGVudE9wdGlvbnNcclxuICApOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XHJcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IHRoaXMuZmlsZVNlcnZpY2UuZG93bmxvYWRFbmNyeXB0ZWRGaWxlMihcclxuICAgICAgb3B0aW9ucy5maWxlU3RhdGVOb2RlSWRcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZmlsZVN0YXRlS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoXHJcbiAgICAgIG9wdGlvbnMuZmlsZVN0YXRlS2V5SWQsXHJcbiAgICAgICgpID0+IHRoaXMuZ2V0RmlsZVN0YXRlS2V5SWQob3B0aW9ucy5maWxlU3RhdGVOb2RlSWQpXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nKGZpbGVTdGF0ZUtleSwgZmlsZUNvbnRlbnQsIHtcclxuICAgICAgcGF5bG9hZFR5cGU6ICdBcnJheUJ1ZmZlcicsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVEaXJlY3Rvcnkob3B0aW9uczogQ3JlYXRlRGlyZWN0b3J5T3B0aW9ucykge1xyXG4gICAgY29uc3QgZGlyZWN0b3J5S2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xyXG4gICAgb3B0aW9ucy5wYXJlbnREaXJlY3RvcmllcyA9IG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXMgfHwgW107XHJcbiAgICBpZiAoIW9wdGlvbnMuYXNSb290RGlyZWN0b3J5ICYmICFvcHRpb25zLnBhcmVudERpcmVjdG9yaWVzPy5sZW5ndGgpIHtcclxuICAgICAgdGhyb3cgbmV3IExyQmFkQXJndW1lbnRFeGNlcHRpb24oXHJcbiAgICAgICAgJ0EgbmV3IGRpcmVjdG9yeSBtdXN0IGJlIGVpdGhlciBhIHJvb3QgZGlyZWN0b3J5IG9yIGEgc3ViLWRpcmVjdG9yeS4gU28geW91IG11c3QgcHJvdmlkZSBlaXRoZXIgcGFyZW50RGlyZWN0b3JpZXMgYW5kL29yIGFzUm9vdERpcmVjdG9yeSBwYXJhbWV0ZXIuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmVudERpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXM/Lm1hcCgodCkgPT5cclxuICAgICAgICB0aGlzLmdldFBhcmVudERpcmVjdG9yeUlucHV0KHQsIGRpcmVjdG9yeUtleSlcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBUT0RPIHRoaXMgaXMgcmF0aGVyIGFuIHVuZm9ydHVuYXRlIG5hbWUsIGNoYW5nZSBpdCB0byBhc1Jvb3REaXJlY3RvcnkuXHJcbiAgICBsZXQgcGFyZW50Um9vdERpcmVjdG9yeTogUGFyZW50Um9vdERpcmVjdG9yeUlucHV0O1xyXG4gICAgaWYgKG9wdGlvbnMuYXNSb290RGlyZWN0b3J5KSB7XHJcbiAgICAgIGNvbnN0IHJvb3RLZXkgPSB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFJvb3RLZXkoKTtcclxuICAgICAgcGFyZW50Um9vdERpcmVjdG9yeSA9IHtcclxuICAgICAgICB3cmFwcGluZ0tleUlkOiByb290S2V5LmlkLFxyXG4gICAgICAgIHdyYXBwZWRLZXk6IGF3YWl0IHRoaXMua2V5R3JhcGgud3JhcEtleShyb290S2V5LCBkaXJlY3RvcnlLZXkpLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlucHV0ID0ge1xyXG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRJbnB1dChkaXJlY3RvcnlLZXksIG9wdGlvbnMpKSxcclxuICAgICAgcGFyZW50RGlyZWN0b3JpZXMsXHJcbiAgICAgIHBhcmVudFJvb3REaXJlY3RvcnksXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XHJcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVEaXJlY3RvcnlNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURpcmVjdG9yeUV4ZWMob3B0aW9uczogVXBkYXRlRGlyZWN0b3J5T3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlRGlyZWN0b3J5TXV0YXRpb24ob3B0aW9ucykpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGlyZWN0b3J5KG9wdGlvbnM6IFVwZGF0ZURpcmVjdG9yeU9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLnVwZGF0ZURpcmVjdG9yeU11dGF0aW9uKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRGlyZWN0b3J5TXV0YXRpb24ob3B0aW9uczogVXBkYXRlRGlyZWN0b3J5T3B0aW9ucykge1xyXG4gICAgY29uc3QgZGlyZWN0b3J5S2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXHJcbiAgICAgIG9wdGlvbnMuZGlyZWN0b3J5SWQsXHJcbiAgICAgIG9wdGlvbnMuZGlyZWN0b3J5S2V5SWRcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcclxuICAgICAgbXV0YXRpb246IFVwZGF0ZURpcmVjdG9yeU11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0SW5wdXQoZGlyZWN0b3J5S2V5Lmp3aywgb3B0aW9ucykpLFxyXG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IG9wdGlvbnMuZGlyZWN0b3J5SWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZURpcmVjdG9yeShpZDogSUQpIHtcclxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XHJcbiAgICAgIG11dGF0aW9uOiBEZWxldGVEaXJlY3RvcnlNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGRpcmVjdG9yeUlkOiBpZCxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjcmVhdGVGaWxlKG9wdGlvbnM6IENyZWF0ZUZpbGVPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmaWxlS2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xyXG5cclxuICAgIGNvbnN0IHBhcmVudERpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIG9wdGlvbnMucGFyZW50RGlyZWN0b3JpZXMubWFwKGFzeW5jICh0KSA9PiB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgZGlyZWN0b3J5SWQsXHJcbiAgICAgICAgICB3cmFwcGluZ0tleUlkLFxyXG4gICAgICAgICAgd3JhcHBlZEtleSxcclxuICAgICAgICB9ID0gYXdhaXQgdGhpcy5nZXRQYXJlbnREaXJlY3RvcnlJbnB1dCh0LCBmaWxlS2V5KTtcclxuICAgICAgICAvLyByZW1hcCBmcm9tIFBhcmVudERpcmVjdG9yeUlucHV0IHRvIEZpbGVQYXJlbnREaXJlY3RvcnlJbnB1dFxyXG4gICAgICAgIC8vIFRPRE8gdGhlIHNlcnZlciBzaG91bGQgcmVhbGx5IGp1c3QgdXNlIHdyYXBwZWRLZXkgaW5zdGVhZCBvZiB3cmFwcGVkRmlsZUtleVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBkaXJlY3RvcnlJZCxcclxuICAgICAgICAgIHdyYXBwaW5nS2V5SWQsXHJcbiAgICAgICAgICB3cmFwcGVkRmlsZUtleTogd3JhcHBlZEtleSxcclxuICAgICAgICB9IGFzIEZpbGVQYXJlbnREaXJlY3RvcnlJbnB1dDtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcclxuICAgICAgbXV0YXRpb246IENyZWF0ZUZpbGVNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIC4uLihhd2FpdCB0aGlzLmNyZWF0ZUZpbGVTdGF0ZShmaWxlS2V5LCBvcHRpb25zKSksXHJcbiAgICAgICAgICBwYXJlbnREaXJlY3RvcmllcyxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVGaWxlKG9wdGlvbnM6IFVwZGF0ZUZpbGVPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmaWxlS2V5ID0gYXdhaXQgdGhpcy5nZXRGaWxlS2V5KG9wdGlvbnMuZmlsZUlkLCBvcHRpb25zLmZpbGVLZXlJZCk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcclxuICAgICAgbXV0YXRpb246IFVwZGF0ZUZpbGVNdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIC4uLihhd2FpdCB0aGlzLmNyZWF0ZUZpbGVTdGF0ZShmaWxlS2V5Lmp3aywgb3B0aW9ucykpLFxyXG4gICAgICAgICAgZmlsZUlkOiBvcHRpb25zLmZpbGVJZCxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRmlsZShpZDogSUQpIHtcclxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XHJcbiAgICAgIG11dGF0aW9uOiBEZWxldGVGaWxlTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBmaWxlSWQ6IGlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGFyZW50RGlyZWN0b3J5SW5wdXQoXHJcbiAgICBvcHRpb25zOiBQYXJlbnREaXJlY3RvcnlPcHRpb25zLFxyXG4gICAgbmV3S2V5OiBKV0suS2V5XHJcbiAgKTogUHJvbWlzZTxQYXJlbnREaXJlY3RvcnlJbnB1dD4ge1xyXG4gICAgLy8gSWYgZGlyZWN0b3J5J3Mga2V5IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBrZXkgZ3JhcGgsIHRoZW4gbmVlZCB0b1xyXG4gICAgLy8gZmV0Y2ggdGhlIGRpcmVjdG9yeSdzIGtleS5cclxuICAgIGNvbnN0IHdyYXBwaW5nS2V5ID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlLZXkoXHJcbiAgICAgIG9wdGlvbnMuZGlyZWN0b3J5SWQsXHJcbiAgICAgIG9wdGlvbnMud3JhcHBpbmdLZXlJZFxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkaXJlY3RvcnlJZDogb3B0aW9ucy5kaXJlY3RvcnlJZCxcclxuICAgICAgd3JhcHBpbmdLZXlJZDogd3JhcHBpbmdLZXkuaWQsXHJcbiAgICAgIHdyYXBwZWRLZXk6IGF3YWl0IHRoaXMua2V5R3JhcGgud3JhcEtleSh3cmFwcGluZ0tleSwgbmV3S2V5KSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBhc3luYyBnZXRLZXkoa2V5SWQ6IExyUmVsYXlJZElucHV0LCBnZXRLZXlJZENhbGxiYWNrOiAoKSA9PiBQcm9taXNlPElEPikge1xyXG4gIC8vICAgaWYgKCF0aGlzLmtleUdyYXBoLmhhc0tleShrZXlJZCkpIHtcclxuICAvLyAgICAga2V5SWQgPSBhd2FpdCBnZXRLZXlJZENhbGxiYWNrKCk7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgcmV0dXJuIHRoaXMua2V5R3JhcGguZ2V0S2V5KGtleUlkKTtcclxuICAvLyB9XHJcblxyXG4gIGFzeW5jIGdldEZpbGVTdGF0ZUtleUlkKGZpbGVTdGF0ZU5vZGVJZDogTHJSZWxheUlkSW5wdXQpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoe1xyXG4gICAgICAgIHF1ZXJ5OiBGaWxlU3RhdGVLZXlRdWVyeSxcclxuICAgICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICAgIGlkOiBmaWxlU3RhdGVOb2RlSWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICkuZmlsZVN0YXRlLmtleUlkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RGlyZWN0b3J5S2V5SWQoZGlyZWN0b3J5SWQ6IExyUmVsYXlJZElucHV0KSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHtcclxuICAgICAgICBxdWVyeTogRGlyZWN0b3J5S2V5UXVlcnksXHJcbiAgICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgICBpZDogZGlyZWN0b3J5SWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICkuZGlyZWN0b3J5LmtleUlkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RmlsZUtleUlkKGZpbGVJZDogTHJSZWxheUlkSW5wdXQpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoe1xyXG4gICAgICAgIHF1ZXJ5OiBGaWxlS2V5UXVlcnksXHJcbiAgICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgICBpZDogZmlsZUlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICApLmZpbGUua2V5SWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXREaXJlY3RvcnlLZXkoXHJcbiAgICBkaXJlY3RvcnlJZDogTHJSZWxheUlkSW5wdXQsXHJcbiAgICBkaXJlY3RvcnlLZXlJZD86IExyUmVsYXlJZElucHV0XHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdGhpcy5rZXlHcmFwaC5nZXRLZXkoZGlyZWN0b3J5S2V5SWQsICgpID0+XHJcbiAgICAgIHRoaXMuZ2V0RGlyZWN0b3J5S2V5SWQoZGlyZWN0b3J5SWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RmlsZUtleShmaWxlSWQ6IExyUmVsYXlJZElucHV0LCBmaWxlS2V5SWQ/OiBMclJlbGF5SWRJbnB1dCkge1xyXG4gICAgcmV0dXJuIHRoaXMua2V5R3JhcGguZ2V0S2V5KGZpbGVLZXlJZCwgKCkgPT4gdGhpcy5nZXRGaWxlS2V5SWQoZmlsZUlkKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldElucHV0KFxyXG4gICAga2V5OiBKV0suS2V5LFxyXG4gICAgb3B0aW9uczogeyBwbGFpbk1ldGFKc29uPzogYW55OyBjaXBoZXJNZXRhQ2xlYXJKc29uPzogYW55IH1cclxuICApIHtcclxuICAgIGNvbnN0IHsgcGxhaW5NZXRhSnNvbiwgY2lwaGVyTWV0YUNsZWFySnNvbiB9ID0gb3B0aW9ucztcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwbGFpbk1ldGE6IHBsYWluTWV0YUpzb24gJiYgSlNPTi5zdHJpbmdpZnkocGxhaW5NZXRhSnNvbiksXHJcbiAgICAgIGNpcGhlck1ldGE6XHJcbiAgICAgICAgY2lwaGVyTWV0YUNsZWFySnNvbiAmJlxyXG4gICAgICAgIChhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhrZXksIGNpcGhlck1ldGFDbGVhckpzb24pKSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUZpbGVTdGF0ZShcclxuICAgIGZpbGVLZXk6IEpXSy5LZXksXHJcbiAgICBvcHRpb25zOiBDcmVhdGVGaWxlT3B0aW9ucyB8IFVwZGF0ZUZpbGVPcHRpb25zXHJcbiAgKSB7XHJcbiAgICAvLyBFYWNoIHZlcnNpb24gb2YgdGhlIGZpbGUgaXMgZW5jcnlwdGVkIHVzaW5nIGEgbmV3IGtleS5cclxuICAgIGNvbnN0IGZpbGVTdGF0ZUtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcclxuXHJcbiAgICBjb25zdCBmaWxlQ29udGVudCA9XHJcbiAgICAgIG9wdGlvbnMuZmlsZSAmJiAoYXdhaXQgdGhpcy5maWxlU2VydmljZS5sb2FkRmlsZShvcHRpb25zLmZpbGUpKTtcclxuXHJcbiAgICBsZXQgY29udGVudFJlc291cmNlOiBzdHJpbmc7XHJcbiAgICBpZiAoZmlsZUNvbnRlbnQpIHtcclxuICAgICAgY29uc3QgY2lwaGVyRmlsZUNvbnRlbnQgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcclxuICAgICAgICBmaWxlU3RhdGVLZXksXHJcbiAgICAgICAgZmlsZUNvbnRlbnRcclxuICAgICAgKTtcclxuICAgICAgaWYgKG9wdGlvbnMudXBsb2FkKSB7XHJcbiAgICAgICAgY29udGVudFJlc291cmNlID0gYXdhaXQgb3B0aW9ucy51cGxvYWQoY2lwaGVyRmlsZUNvbnRlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRlbnRSZXNvdXJjZSA9IGF3YWl0IHRoaXMuZmlsZVNlcnZpY2UudXBsb2FkRW5jcnlwdGVkRmlsZSh7XHJcbiAgICAgICAgICBlbmNyeXB0ZWRDb250ZW50OiBjaXBoZXJGaWxlQ29udGVudCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZygnY29udGVudFJlc291cmNlJywgY29udGVudFJlc291cmNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRJbnB1dChmaWxlU3RhdGVLZXksIG9wdGlvbnMpKSxcclxuICAgICAgd3JhcHBlZFN0YXRlS2V5OiBhd2FpdCB0aGlzLmtleUdyYXBoLndyYXBLZXkoZmlsZUtleSwgZmlsZVN0YXRlS2V5KSxcclxuICAgICAgY29udGVudFJlc291cmNlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGFyY2hpdmVEaXJlY3RvcnkoZGlyZWN0b3J5SWQ6IHN0cmluZywgcmVjdXJzaXZlOiBib29sZWFuKSB7XHJcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xyXG4gICAgICBtdXRhdGlvbjogQXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgZGlyZWN0b3J5SWQsXHJcbiAgICAgICAgICByZWN1cnNpdmUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdW5hcmNoaXZlRGlyZWN0b3J5KGRpcmVjdG9yeUlkOiBzdHJpbmcsIHJlY3Vyc2l2ZTogYm9vbGVhbikge1xyXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcclxuICAgICAgbXV0YXRpb246IFVuYXJjaGl2ZURpcmVjdG9yeU11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgZGlyZWN0b3J5SWQsXHJcbiAgICAgICAgICByZWN1cnNpdmUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGFzeW5jIGdldENoYW5nZUl0ZW1QYXJlbnRzSW5wdXQoXHJcbiAgICBvcHRpb25zOiBDaGFuZ2VJdGVtUGFyZW50c09wdGlvbnMsXHJcbiAgICBpdGVtS2V5OiBKV0suS2V5XHJcbiAgKSB7XHJcbiAgICBjb25zdCBwYXJlbnRzVG9BZGQgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgb3B0aW9ucy5wYXJlbnRzVG9BZGQubWFwKCh0KSA9PiB0aGlzLmdldFBhcmVudERpcmVjdG9yeUlucHV0KHQsIGl0ZW1LZXkpKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkaXJlY3Rvcmllc1RvUmVtb3ZlOiBvcHRpb25zLnBhcmVudHNUb1JlbW92ZSxcclxuICAgICAgZGlyZWN0b3JpZXNUb0FkZDogcGFyZW50c1RvQWRkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNoYW5nZURpcmVjdG9yeVBhcmVudHMob3B0aW9uczogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNoYW5nZURpcmVjdG9yeVBhcmVudHNNdXRhdGlvbihvcHRpb25zKSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb24ob3B0aW9uczogQ2hhbmdlRGlyZWN0b3J5UGFyZW50c09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGRpcmVjdG9yeUtleSA9IGF3YWl0IHRoaXMuZ2V0RGlyZWN0b3J5S2V5KFxyXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUlkLFxyXG4gICAgICBvcHRpb25zLmRpcmVjdG9yeUtleUlkXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XHJcbiAgICAgIG11dGF0aW9uOiBDaGFuZ2VEaXJlY3RvcnlQYXJlbnRzTXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICAuLi4oYXdhaXQgdGhpcy5nZXRDaGFuZ2VJdGVtUGFyZW50c0lucHV0KG9wdGlvbnMsIGRpcmVjdG9yeUtleS5qd2spKSxcclxuICAgICAgICAgIGRpcmVjdG9yeUlkOiBvcHRpb25zLmRpcmVjdG9yeUlkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNoYW5nZUZpbGVQYXJlbnRzKG9wdGlvbnM6IENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY2hhbmdlRmlsZVBhcmVudHNNdXRhdGlvbihvcHRpb25zKSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjaGFuZ2VGaWxlUGFyZW50c011dGF0aW9uKG9wdGlvbnM6IENoYW5nZUZpbGVQYXJlbnRzT3B0aW9ucykge1xyXG4gICAgY29uc3QgZmlsZUtleSA9IGF3YWl0IHRoaXMuZ2V0RmlsZUtleShvcHRpb25zLmZpbGVJZCwgb3B0aW9ucy5maWxlS2V5SWQpO1xyXG5cclxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XHJcbiAgICAgIG11dGF0aW9uOiBDaGFuZ2VGaWxlUGFyZW50c011dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgLi4uKGF3YWl0IHRoaXMuZ2V0Q2hhbmdlSXRlbVBhcmVudHNJbnB1dChvcHRpb25zLCBmaWxlS2V5Lmp3aykpLFxyXG4gICAgICAgICAgZmlsZUlkOiBvcHRpb25zLmZpbGVJZCxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|