@lifeready/core 9.0.7 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/fesm2022/lifeready-core.mjs +10522 -0
  2. package/fesm2022/lifeready-core.mjs.map +1 -0
  3. package/package.json +21 -16
  4. package/types/lifeready-core.d.ts +5329 -0
  5. package/bundles/lifeready-core.umd.js +0 -13231
  6. package/bundles/lifeready-core.umd.js.map +0 -1
  7. package/bundles/lifeready-core.umd.min.js +0 -2
  8. package/bundles/lifeready-core.umd.min.js.map +0 -1
  9. package/esm2015/lib/_common/ast.js +0 -41
  10. package/esm2015/lib/_common/deferred-promise.js +0 -24
  11. package/esm2015/lib/_common/exceptions.js +0 -186
  12. package/esm2015/lib/_common/index.js +0 -3
  13. package/esm2015/lib/_common/kc-lodash.js +0 -11
  14. package/esm2015/lib/_common/key.js +0 -28
  15. package/esm2015/lib/_common/queries.gql.js +0 -43
  16. package/esm2015/lib/_common/run-outside-angular.js +0 -80
  17. package/esm2015/lib/_common/storage.js +0 -28
  18. package/esm2015/lib/_common/types.js +0 -2
  19. package/esm2015/lib/_common/utils.js +0 -73
  20. package/esm2015/lib/api/lr-apollo.service.js +0 -47
  21. package/esm2015/lib/api/lr-graphql/index.js +0 -6
  22. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +0 -170
  23. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +0 -216
  24. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +0 -51
  25. package/esm2015/lib/api/lr-graphql/lr-mutation.js +0 -91
  26. package/esm2015/lib/api/lr-graphql/lr.service.js +0 -18
  27. package/esm2015/lib/api/query-processor/common-processors.service.js +0 -94
  28. package/esm2015/lib/api/query-processor/index.js +0 -3
  29. package/esm2015/lib/api/query-processor/query-processor.service.js +0 -307
  30. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +0 -110
  31. package/esm2015/lib/api/types/graphql.types.js +0 -8
  32. package/esm2015/lib/api/types/index.js +0 -3
  33. package/esm2015/lib/api/types/lr-graphql.types.js +0 -182
  34. package/esm2015/lib/auth/auth.config.js +0 -57
  35. package/esm2015/lib/auth/auth.gql.private.js +0 -85
  36. package/esm2015/lib/auth/auth.service.js +0 -616
  37. package/esm2015/lib/auth/auth.types.js +0 -19
  38. package/esm2015/lib/contact-card/contact-card.gql.js +0 -79
  39. package/esm2015/lib/contact-card/contact-card.service.js +0 -156
  40. package/esm2015/lib/contact-card/contact-card2.gql.js +0 -29
  41. package/esm2015/lib/contact-card/contact-card2.service.js +0 -103
  42. package/esm2015/lib/encryption/encryption.service.js +0 -188
  43. package/esm2015/lib/file-upload/file-upload.service.js +0 -70
  44. package/esm2015/lib/file-upload/file-upload.types.js +0 -2
  45. package/esm2015/lib/idle/idle.service.js +0 -159
  46. package/esm2015/lib/idle/idle.types.js +0 -7
  47. package/esm2015/lib/item/item.gql.js +0 -166
  48. package/esm2015/lib/item/item.gql.private.js +0 -41
  49. package/esm2015/lib/item/item.service.js +0 -662
  50. package/esm2015/lib/item/item.types.js +0 -2
  51. package/esm2015/lib/key/key-factory.service.js +0 -226
  52. package/esm2015/lib/key/key-graph.service.js +0 -314
  53. package/esm2015/lib/key/key-meta.service.js +0 -153
  54. package/esm2015/lib/key/key.service.js +0 -124
  55. package/esm2015/lib/key/key.types.js +0 -16
  56. package/esm2015/lib/key-exchange/key-exchange.gql.js +0 -174
  57. package/esm2015/lib/key-exchange/key-exchange.service.js +0 -496
  58. package/esm2015/lib/lbop/lbop.service.js +0 -351
  59. package/esm2015/lib/life-ready.config.js +0 -96
  60. package/esm2015/lib/life-ready.module.js +0 -42
  61. package/esm2015/lib/lock/lock.gql.js +0 -40
  62. package/esm2015/lib/lock/lock.service.js +0 -64
  63. package/esm2015/lib/notification/notification.gql.js +0 -43
  64. package/esm2015/lib/notification/notification.service.js +0 -118
  65. package/esm2015/lib/password/password.gql.js +0 -28
  66. package/esm2015/lib/password/password.service.js +0 -309
  67. package/esm2015/lib/persist/persist.service.js +0 -181
  68. package/esm2015/lib/plan/plan.gql.js +0 -91
  69. package/esm2015/lib/plan/plan.service.js +0 -191
  70. package/esm2015/lib/plan/plan.types.js +0 -2
  71. package/esm2015/lib/profile/profile-details.service.js +0 -261
  72. package/esm2015/lib/profile/profile.gql.js +0 -170
  73. package/esm2015/lib/profile/profile.service.js +0 -166
  74. package/esm2015/lib/profile/profile.types.js +0 -45
  75. package/esm2015/lib/register/register.service.js +0 -173
  76. package/esm2015/lib/register/register.types.js +0 -3
  77. package/esm2015/lib/reminder/reminder.gql.js +0 -27
  78. package/esm2015/lib/reminder/reminder.service.js +0 -85
  79. package/esm2015/lib/reminder/reminder.types.js +0 -2
  80. package/esm2015/lib/scenario/scenario.constants.js +0 -2
  81. package/esm2015/lib/scenario/scenario.controller.js +0 -34
  82. package/esm2015/lib/scenario/scenario.gql.js +0 -90
  83. package/esm2015/lib/scenario/scenario.private.gql.js +0 -200
  84. package/esm2015/lib/scenario/scenario.service.js +0 -679
  85. package/esm2015/lib/scenario/scenario.types.js +0 -2
  86. package/esm2015/lib/server-config/server-config.gql.js +0 -9
  87. package/esm2015/lib/server-config/server-config.service.js +0 -41
  88. package/esm2015/lib/shared-contact-card/shared-contact-card.service.js +0 -119
  89. package/esm2015/lib/shared-contact-card/shared-contact-card2.gql.js +0 -41
  90. package/esm2015/lib/shared-contact-card/shared-contact-card2.service.js +0 -117
  91. package/esm2015/lib/slip39/slip39.service.js +0 -167
  92. package/esm2015/lib/time/time.service.js +0 -152
  93. package/esm2015/lib/tp-assembly/tp-assembly.js +0 -363
  94. package/esm2015/lib/tp-assembly/tp-assembly.private.gql.js +0 -22
  95. package/esm2015/lib/tp-assembly/tp-assembly.types.js +0 -2
  96. package/esm2015/lib/tp-password-reset/tp-password-reset-request.service.js +0 -98
  97. package/esm2015/lib/tp-password-reset/tp-password-reset-user.service.js +0 -121
  98. package/esm2015/lib/tp-password-reset/tp-password-reset.constants.js +0 -4
  99. package/esm2015/lib/tp-password-reset/tp-password-reset.controller.js +0 -34
  100. package/esm2015/lib/tp-password-reset/tp-password-reset.gql.js +0 -74
  101. package/esm2015/lib/tp-password-reset/tp-password-reset.private.gql.js +0 -166
  102. package/esm2015/lib/tp-password-reset/tp-password-reset.private.service.js +0 -54
  103. package/esm2015/lib/tp-password-reset/tp-password-reset.service.js +0 -110
  104. package/esm2015/lib/tp-password-reset/tp-password-reset.types.js +0 -2
  105. package/esm2015/lib/trusted-party/trusted-party.gql.js +0 -96
  106. package/esm2015/lib/trusted-party/trusted-party.gql.private.js +0 -51
  107. package/esm2015/lib/trusted-party/trusted-party.service.js +0 -461
  108. package/esm2015/lib/trusted-party/trusted-party.types.js +0 -2
  109. package/esm2015/lib/two-factor/two-factor.service.js +0 -74
  110. package/esm2015/lib/user/user.gql.js +0 -32
  111. package/esm2015/lib/user/user.service.js +0 -58
  112. package/esm2015/lib/user/user.types.js +0 -2
  113. package/esm2015/lib/web-crypto/web-crypto.service.js +0 -29
  114. package/esm2015/lifeready-core.js +0 -17
  115. package/esm2015/public-api.js +0 -60
  116. package/fesm2015/lifeready-core.js +0 -10970
  117. package/fesm2015/lifeready-core.js.map +0 -1
  118. package/lib/_common/ast.d.ts +0 -11
  119. package/lib/_common/deferred-promise.d.ts +0 -12
  120. package/lib/_common/exceptions.d.ts +0 -126
  121. package/lib/_common/index.d.ts +0 -2
  122. package/lib/_common/kc-lodash.d.ts +0 -5
  123. package/lib/_common/key.d.ts +0 -14
  124. package/lib/_common/queries.gql.d.ts +0 -4
  125. package/lib/_common/run-outside-angular.d.ts +0 -14
  126. package/lib/_common/storage.d.ts +0 -13
  127. package/lib/_common/types.d.ts +0 -15
  128. package/lib/_common/utils.d.ts +0 -12
  129. package/lib/api/lr-apollo.service.d.ts +0 -15
  130. package/lib/api/lr-graphql/index.d.ts +0 -5
  131. package/lib/api/lr-graphql/lr-graphql.service.d.ts +0 -81
  132. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +0 -46
  133. package/lib/api/lr-graphql/lr-mutation-base.d.ts +0 -28
  134. package/lib/api/lr-graphql/lr-mutation.d.ts +0 -48
  135. package/lib/api/lr-graphql/lr.service.d.ts +0 -9
  136. package/lib/api/query-processor/common-processors.service.d.ts +0 -36
  137. package/lib/api/query-processor/index.d.ts +0 -2
  138. package/lib/api/query-processor/query-processor.service.d.ts +0 -18
  139. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +0 -15
  140. package/lib/api/types/graphql.types.d.ts +0 -30
  141. package/lib/api/types/index.d.ts +0 -2
  142. package/lib/api/types/lr-graphql.types.d.ts +0 -807
  143. package/lib/auth/auth.config.d.ts +0 -5
  144. package/lib/auth/auth.gql.private.d.ts +0 -25
  145. package/lib/auth/auth.service.d.ts +0 -72
  146. package/lib/auth/auth.types.d.ts +0 -70
  147. package/lib/contact-card/contact-card.gql.d.ts +0 -7
  148. package/lib/contact-card/contact-card.service.d.ts +0 -53
  149. package/lib/contact-card/contact-card2.gql.d.ts +0 -25
  150. package/lib/contact-card/contact-card2.service.d.ts +0 -64
  151. package/lib/encryption/encryption.service.d.ts +0 -42
  152. package/lib/file-upload/file-upload.service.d.ts +0 -15
  153. package/lib/file-upload/file-upload.types.d.ts +0 -5
  154. package/lib/idle/idle.service.d.ts +0 -47
  155. package/lib/idle/idle.types.d.ts +0 -10
  156. package/lib/item/item.gql.d.ts +0 -134
  157. package/lib/item/item.gql.private.d.ts +0 -35
  158. package/lib/item/item.service.d.ts +0 -201
  159. package/lib/item/item.types.d.ts +0 -95
  160. package/lib/key/key-factory.service.d.ts +0 -40
  161. package/lib/key/key-graph.service.d.ts +0 -41
  162. package/lib/key/key-meta.service.d.ts +0 -51
  163. package/lib/key/key.service.d.ts +0 -36
  164. package/lib/key/key.types.d.ts +0 -86
  165. package/lib/key-exchange/key-exchange.gql.d.ts +0 -141
  166. package/lib/key-exchange/key-exchange.service.d.ts +0 -179
  167. package/lib/lbop/lbop.service.d.ts +0 -99
  168. package/lib/life-ready.config.d.ts +0 -26
  169. package/lib/life-ready.module.d.ts +0 -5
  170. package/lib/lock/lock.gql.d.ts +0 -27
  171. package/lib/lock/lock.service.d.ts +0 -34
  172. package/lib/notification/notification.gql.d.ts +0 -37
  173. package/lib/notification/notification.service.d.ts +0 -64
  174. package/lib/password/password.gql.d.ts +0 -3
  175. package/lib/password/password.service.d.ts +0 -79
  176. package/lib/persist/persist.service.d.ts +0 -31
  177. package/lib/plan/plan.gql.d.ts +0 -69
  178. package/lib/plan/plan.service.d.ts +0 -111
  179. package/lib/plan/plan.types.d.ts +0 -16
  180. package/lib/profile/profile-details.service.d.ts +0 -20
  181. package/lib/profile/profile.gql.d.ts +0 -21
  182. package/lib/profile/profile.service.d.ts +0 -32
  183. package/lib/profile/profile.types.d.ts +0 -121
  184. package/lib/register/register.service.d.ts +0 -25
  185. package/lib/register/register.types.d.ts +0 -6
  186. package/lib/reminder/reminder.gql.d.ts +0 -23
  187. package/lib/reminder/reminder.service.d.ts +0 -33
  188. package/lib/reminder/reminder.types.d.ts +0 -17
  189. package/lib/scenario/scenario.constants.d.ts +0 -1
  190. package/lib/scenario/scenario.controller.d.ts +0 -10
  191. package/lib/scenario/scenario.gql.d.ts +0 -78
  192. package/lib/scenario/scenario.private.gql.d.ts +0 -16
  193. package/lib/scenario/scenario.service.d.ts +0 -655
  194. package/lib/scenario/scenario.types.d.ts +0 -64
  195. package/lib/server-config/server-config.gql.d.ts +0 -5
  196. package/lib/server-config/server-config.service.d.ts +0 -9
  197. package/lib/shared-contact-card/shared-contact-card.service.d.ts +0 -33
  198. package/lib/shared-contact-card/shared-contact-card2.gql.d.ts +0 -36
  199. package/lib/shared-contact-card/shared-contact-card2.service.d.ts +0 -45
  200. package/lib/slip39/slip39.service.d.ts +0 -42
  201. package/lib/time/time.service.d.ts +0 -26
  202. package/lib/tp-assembly/tp-assembly.d.ts +0 -177
  203. package/lib/tp-assembly/tp-assembly.private.gql.d.ts +0 -5
  204. package/lib/tp-assembly/tp-assembly.types.d.ts +0 -40
  205. package/lib/tp-password-reset/tp-password-reset-request.service.d.ts +0 -16
  206. package/lib/tp-password-reset/tp-password-reset-user.service.d.ts +0 -29
  207. package/lib/tp-password-reset/tp-password-reset.constants.d.ts +0 -3
  208. package/lib/tp-password-reset/tp-password-reset.controller.d.ts +0 -10
  209. package/lib/tp-password-reset/tp-password-reset.gql.d.ts +0 -63
  210. package/lib/tp-password-reset/tp-password-reset.private.gql.d.ts +0 -163
  211. package/lib/tp-password-reset/tp-password-reset.private.service.d.ts +0 -59
  212. package/lib/tp-password-reset/tp-password-reset.service.d.ts +0 -112
  213. package/lib/tp-password-reset/tp-password-reset.types.d.ts +0 -40
  214. package/lib/trusted-party/trusted-party.gql.d.ts +0 -85
  215. package/lib/trusted-party/trusted-party.gql.private.d.ts +0 -40
  216. package/lib/trusted-party/trusted-party.service.d.ts +0 -192
  217. package/lib/trusted-party/trusted-party.types.d.ts +0 -31
  218. package/lib/two-factor/two-factor.service.d.ts +0 -15
  219. package/lib/user/user.gql.d.ts +0 -8
  220. package/lib/user/user.service.d.ts +0 -9
  221. package/lib/user/user.types.d.ts +0 -16
  222. package/lib/web-crypto/web-crypto.service.d.ts +0 -5
  223. package/lifeready-core.d.ts +0 -16
  224. package/lifeready-core.metadata.json +0 -1
  225. package/public-api.d.ts +0 -56
@@ -1,461 +0,0 @@
1
- import { __awaiter, __decorate } from "tslib";
2
- import { Injectable, Injector, NgZone } from '@angular/core';
3
- import { JWK } from 'node-jose';
4
- import { LrMutation, LrService } from '../api/lr-graphql';
5
- import { AccessRoleChoice, ShareTypeChoice, } from '../api/types';
6
- import { EncryptionService } from '../encryption/encryption.service';
7
- import { ItemService } from '../item/item.service';
8
- import { KeyFactoryService } from '../key/key-factory.service';
9
- import { KeyGraphService } from '../key/key-graph.service';
10
- import { KeyService } from '../key/key.service';
11
- import { KcBadArgumentException, KcBadStateException, } from '../_common/exceptions';
12
- import { RunOutsideAngular } from '../_common/run-outside-angular';
13
- import { CompleteDetachedDirectoryShareMutation, CompleteDetachedFileShareMutation, CompleteTpMkReshareMutation, CreateDirectoryShareMutation, CreateFileShareMutation, DeleteDirectoryShareMutation, DeleteFileShareMutation, DeleteTpMutation, RequestTpMkReshareMutation, RespondTpMkReshareMutation, UpdateDirectoryShareMutation, UpdateFileShareMutation, } from './trusted-party.gql';
14
- import { DirectoryShareQuery, FileShareQuery, TpCurrentUserSharedKeyQuery, } from './trusted-party.gql.private';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "../key/key-graph.service";
17
- import * as i2 from "../item/item.service";
18
- import * as i3 from "../key/key.service";
19
- import * as i4 from "../key/key-factory.service";
20
- import * as i5 from "../encryption/encryption.service";
21
- let TrustedPartyService = class TrustedPartyService extends LrService {
22
- constructor(ngZone, injector, keyGraph, itemService, keyService, keyFactory, encryptionService) {
23
- super(injector);
24
- this.ngZone = ngZone;
25
- this.injector = injector;
26
- this.keyGraph = keyGraph;
27
- this.itemService = itemService;
28
- this.keyService = keyService;
29
- this.keyFactory = keyFactory;
30
- this.encryptionService = encryptionService;
31
- }
32
- deleteTp(tpId) {
33
- return this.mutate(this.deleteTpMutation(tpId));
34
- }
35
- deleteTpMutation(tpId) {
36
- return new LrMutation({
37
- mutation: DeleteTpMutation,
38
- variables: {
39
- input: {
40
- id: tpId,
41
- },
42
- },
43
- });
44
- }
45
- createDirectoryShare(options) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- return this.mutate(this.createDirectoryShareMutation(options));
48
- });
49
- }
50
- createDirectoryShareMutation(options) {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- return new LrMutation({
53
- mutation: CreateDirectoryShareMutation,
54
- variables: yield this.prepareCreateItemShareMutation(Object.assign(Object.assign({}, options), { isDirectory: true })),
55
- });
56
- });
57
- }
58
- createFileShare(options) {
59
- return __awaiter(this, void 0, void 0, function* () {
60
- return this.mutate(this.createFileShareMutation(options));
61
- });
62
- }
63
- createFileShareMutation(options) {
64
- return __awaiter(this, void 0, void 0, function* () {
65
- return new LrMutation({
66
- mutation: CreateFileShareMutation,
67
- variables: yield this.prepareCreateItemShareMutation(Object.assign(Object.assign({}, options), { isDirectory: false })),
68
- });
69
- });
70
- }
71
- prepareCreateItemShareMutation(options) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- const { itemId: _itemId, itemKeyId: _itemKeyId, tpId, tpSharedKeyId, accessRole, isDirectory, shareType, plainMetaJson, } = options;
74
- const item = options.item || {
75
- id: _itemId,
76
- keyId: _itemKeyId,
77
- };
78
- const plainMeta = plainMetaJson && JSON.stringify(plainMetaJson);
79
- if (accessRole == AccessRoleChoice.DENY) {
80
- if (item.keyId || tpSharedKeyId) {
81
- throw new KcBadArgumentException('If accessRole is AccessRoleChoice.DENY, must not specify any of itemId, itemKeyId, or tpSharedKeyId parameters');
82
- }
83
- return {
84
- input: {
85
- itemId: item.id,
86
- tpId,
87
- accessRole,
88
- itemKeyId: null,
89
- wrappingKeyId: null,
90
- wrappedItemKey: null,
91
- shareType,
92
- plainMeta,
93
- },
94
- };
95
- }
96
- const itemKey = yield this.keyGraph.getKey(item.keyId, () => isDirectory
97
- ? this.itemService.getDirectoryKeyId(item.id)
98
- : this.itemService.getFileKeyId(item.id));
99
- const wrappingKey = yield this.keyGraph.getKey(tpSharedKeyId, () => this.getTpCurrentUserSharedKey(tpId).then((res) => res.sharedKey.id));
100
- const wrappedItemKey = yield this.keyGraph.wrapKey(wrappingKey, itemKey.jwk);
101
- return {
102
- input: {
103
- itemId: item.id,
104
- tpId,
105
- accessRole,
106
- itemKeyId: itemKey.id,
107
- wrappingKeyId: wrappingKey.id,
108
- wrappedItemKey,
109
- shareType,
110
- plainMeta,
111
- },
112
- };
113
- });
114
- }
115
- updateDirectoryShare(options) {
116
- return __awaiter(this, void 0, void 0, function* () {
117
- return this.mutate(this.updateDirectoryShareMutation(options));
118
- });
119
- }
120
- updateDirectoryShareMutation(options) {
121
- return __awaiter(this, void 0, void 0, function* () {
122
- return new LrMutation({
123
- mutation: UpdateDirectoryShareMutation,
124
- variables: yield this.prepareUpdateItemShareMutation(Object.assign(Object.assign({}, options), { isDirectory: true })),
125
- });
126
- });
127
- }
128
- updateDetachedDirectoryShare(options) {
129
- return __awaiter(this, void 0, void 0, function* () {
130
- return this.mutate(this.updateDetachedDirectoryShareMutation(options));
131
- });
132
- }
133
- updateDetachedDirectoryShareMutation(options) {
134
- return __awaiter(this, void 0, void 0, function* () {
135
- return new LrMutation({
136
- mutation: UpdateDirectoryShareMutation,
137
- variables: yield this.prepareUpdateDetachedItemShareMutation(options),
138
- });
139
- });
140
- }
141
- updateFileShare(options) {
142
- return __awaiter(this, void 0, void 0, function* () {
143
- return this.mutate(this.updateFileShareMutation(options));
144
- });
145
- }
146
- updateFileShareMutation(options) {
147
- return __awaiter(this, void 0, void 0, function* () {
148
- return new LrMutation({
149
- mutation: UpdateFileShareMutation,
150
- variables: yield this.prepareUpdateItemShareMutation(Object.assign(Object.assign({}, options), { isDirectory: false })),
151
- });
152
- });
153
- }
154
- updateDetachedFileShare(options) {
155
- return __awaiter(this, void 0, void 0, function* () {
156
- return this.mutate(this.updateDetachedFileShareMutation(options));
157
- });
158
- }
159
- updateDetachedFileShareMutation(options) {
160
- return __awaiter(this, void 0, void 0, function* () {
161
- return new LrMutation({
162
- mutation: UpdateFileShareMutation,
163
- variables: yield this.prepareUpdateDetachedItemShareMutation(options),
164
- });
165
- });
166
- }
167
- getDirectoryShare(itemShareId) {
168
- return this.lrGraphQL.query({
169
- query: DirectoryShareQuery,
170
- variables: {
171
- id: itemShareId,
172
- },
173
- });
174
- }
175
- getFileShare(itemShareId) {
176
- return this.lrGraphQL.query({
177
- query: FileShareQuery,
178
- variables: {
179
- id: itemShareId,
180
- },
181
- });
182
- }
183
- prepareUpdateItemShareMutation(options) {
184
- return __awaiter(this, void 0, void 0, function* () {
185
- const { itemShareId, accessRole, isDirectory, itemId: _itemId, itemKeyId: _itemKeyId, tpId, tpSharedKeyId, plainMetaJson, } = options;
186
- const item = options.item || {
187
- id: _itemId,
188
- keyId: _itemKeyId,
189
- };
190
- // If plainMetaJson is undefined, then plainMeta is undefined
191
- // If plainMetaJson is null, then plainMeta is null
192
- // If plainMetaJson has value, then plainMeta is JSON.stringify(plainMetaJson)
193
- const plainMeta = plainMetaJson && JSON.stringify(plainMetaJson);
194
- // If not updating access role or updating to DENY role, then we don't need any key material.
195
- if (accessRole == null || accessRole == AccessRoleChoice.DENY) {
196
- if (item.id || item.keyId || tpId || tpSharedKeyId) {
197
- throw new KcBadArgumentException('If accessRole is AccessRoleChoice.DENY, must not specify any of itemId, itemKeyId, tpId, or tpSharedKeyId parameters');
198
- }
199
- return {
200
- input: {
201
- id: itemShareId,
202
- accessRole,
203
- plainMeta,
204
- },
205
- };
206
- }
207
- // Caching the result so we only need one call.
208
- let itemShare;
209
- const getItemShare = () => __awaiter(this, void 0, void 0, function* () {
210
- if (!itemShare) {
211
- if (isDirectory) {
212
- itemShare = (yield this.getDirectoryShare(itemShareId))
213
- .directoryShare;
214
- }
215
- else {
216
- itemShare = (yield this.getFileShare(itemShareId)).fileShare;
217
- }
218
- if (itemShare.shareType == ShareTypeChoice.DETACHED) {
219
- throw new KcBadArgumentException('Use updateDetachedDirectoryShare() or updateDetachedFileShare() to updated DETACHED shares.');
220
- }
221
- }
222
- return itemShare;
223
- });
224
- const itemKey = yield this.keyGraph.getKey(item.keyId, () => __awaiter(this, void 0, void 0, function* () {
225
- const itemId_ = item.id || (yield getItemShare()).item.id;
226
- if (isDirectory) {
227
- return this.itemService.getDirectoryKeyId(itemId_);
228
- }
229
- else {
230
- return this.itemService.getFileKeyId(itemId_);
231
- }
232
- }));
233
- const wrappingKey = yield this.keyGraph.getKey(tpSharedKeyId, () => __awaiter(this, void 0, void 0, function* () {
234
- const tpId_ = tpId || (yield getItemShare()).tp.id;
235
- return (yield this.getTpCurrentUserSharedKey(tpId_)).sharedKey.id;
236
- }));
237
- const wrappedItemKey = yield this.keyGraph.wrapKey(wrappingKey, itemKey.jwk);
238
- return {
239
- input: {
240
- id: itemShareId,
241
- accessRole,
242
- itemKeyId: itemKey.id,
243
- wrappingKeyId: wrappingKey.id,
244
- wrappedItemKey,
245
- plainMeta,
246
- },
247
- };
248
- });
249
- }
250
- prepareUpdateDetachedItemShareMutation(options) {
251
- return __awaiter(this, void 0, void 0, function* () {
252
- const { itemShareId, accessRole, plainMetaJson } = options;
253
- return {
254
- input: {
255
- id: itemShareId,
256
- accessRole,
257
- plainMeta: plainMetaJson && JSON.stringify(plainMetaJson),
258
- },
259
- };
260
- });
261
- }
262
- deleteDirectoryShare(id) {
263
- return __awaiter(this, void 0, void 0, function* () {
264
- return this.mutate(this.deleteDirectoryShareMutation(id));
265
- });
266
- }
267
- deleteDirectoryShareMutation(id) {
268
- return __awaiter(this, void 0, void 0, function* () {
269
- return new LrMutation({
270
- mutation: DeleteDirectoryShareMutation,
271
- variables: {
272
- input: {
273
- id,
274
- },
275
- },
276
- });
277
- });
278
- }
279
- deleteFileShare(id) {
280
- return __awaiter(this, void 0, void 0, function* () {
281
- return this.mutate(this.deleteFileShareMutation(id));
282
- });
283
- }
284
- deleteFileShareMutation(id) {
285
- return __awaiter(this, void 0, void 0, function* () {
286
- return new LrMutation({
287
- mutation: DeleteFileShareMutation,
288
- variables: {
289
- input: {
290
- id,
291
- },
292
- },
293
- });
294
- });
295
- }
296
- completeDetachedDirectoryShare(options) {
297
- return __awaiter(this, void 0, void 0, function* () {
298
- return this.mutate(this.completeDetachedDirectoryShareMutation(options));
299
- });
300
- }
301
- completeDetachedDirectoryShareMutation(options) {
302
- return __awaiter(this, void 0, void 0, function* () {
303
- return new LrMutation({
304
- mutation: CompleteDetachedDirectoryShareMutation,
305
- variables: yield this.prepareCompleteDetachedItemShareMutation(Object.assign(Object.assign({}, options), { isDirectory: true })),
306
- });
307
- });
308
- }
309
- completeDetachedFileShare(options) {
310
- return __awaiter(this, void 0, void 0, function* () {
311
- return this.mutate(this.completeDetachedFileShareMutation(options));
312
- });
313
- }
314
- completeDetachedFileShareMutation(options) {
315
- return __awaiter(this, void 0, void 0, function* () {
316
- return new LrMutation({
317
- mutation: CompleteDetachedFileShareMutation,
318
- variables: yield this.prepareCompleteDetachedItemShareMutation(Object.assign(Object.assign({}, options), { isDirectory: false })),
319
- });
320
- });
321
- }
322
- prepareCompleteDetachedItemShareMutation(options) {
323
- return __awaiter(this, void 0, void 0, function* () {
324
- const { itemShareId, itemKeyId, isDirectory } = options;
325
- const itemKey = yield this.keyGraph.getKey(itemKeyId, () => isDirectory
326
- ? this.itemService.getDirectoryKeyIdFromDirectoryShare(itemShareId)
327
- : this.itemService.getFileKeyIdFromFileShare(itemShareId));
328
- const rootKey = this.keyService.currentRootKey;
329
- const wrappedKey = yield this.keyGraph.wrapKey(rootKey, itemKey.jwk);
330
- return {
331
- input: {
332
- id: itemShareId,
333
- keyId: itemKey.id,
334
- wrappingKeyId: rootKey.id,
335
- wrappedKey,
336
- },
337
- };
338
- });
339
- }
340
- requestMkReshareMutation(tpId) {
341
- return __awaiter(this, void 0, void 0, function* () {
342
- const userSharedKey = yield this.getTpCurrentUserSharedKey(tpId);
343
- if (userSharedKey.mkSharedKey) {
344
- throw new KcBadStateException('TP already has mkSharedKey');
345
- }
346
- const masterKey = this.keyService.currentMasterKey;
347
- const prk = yield this.keyFactory.createPkcKey();
348
- const mkWrappedMkPrk = yield this.encryptionService.encryptToString(masterKey.jwk, prk.toJSON(true));
349
- const sharedKey = yield this.keyGraph.getKey(userSharedKey.sharedKey.id);
350
- const mkReshareRequestCipher = yield this.encryptionService.encryptToString(sharedKey.jwk, {
351
- pbk: prk.toJSON(),
352
- });
353
- return yield new LrMutation({
354
- mutation: RequestTpMkReshareMutation,
355
- variables: {
356
- input: {
357
- tpId,
358
- masterKeyId: masterKey.id,
359
- mkPbk: JSON.stringify(prk.toJSON()),
360
- mkWrappedMkPrk,
361
- sharedKeyId: sharedKey.id,
362
- mkReshareRequestCipher,
363
- },
364
- },
365
- });
366
- });
367
- }
368
- respondMkReshare(tpId) {
369
- return __awaiter(this, void 0, void 0, function* () {
370
- const userSharedKey = yield this.getTpCurrentUserSharedKey(tpId);
371
- if (!userSharedKey.mkSharedKey) {
372
- throw new KcBadStateException('No access to the mkSharedKey so cannot reshare it with TP');
373
- }
374
- const sharedKey = yield this.keyGraph.getKey(userSharedKey.sharedKey.id);
375
- const plainMkReshareRequestCipher = yield this.encryptionService.decrypt(sharedKey, userSharedKey.mkReshareRequestCipher);
376
- const pbk = yield JWK.asKey(plainMkReshareRequestCipher.pbk);
377
- const mkSharedKey = yield this.keyGraph.getKey(userSharedKey.mkSharedKey.id);
378
- const plainMkReshareResponseCipher = {
379
- mkSharedKey: {
380
- id: mkSharedKey.id,
381
- jwk: mkSharedKey.jwk.toJSON(true),
382
- },
383
- };
384
- // Wrap with sharedKey then again with Pbk
385
- const mkReshareResponseCipher = yield this.encryptionService.encryptToString(pbk, yield this.encryptionService.encryptToString(sharedKey.jwk, plainMkReshareResponseCipher));
386
- return new LrMutation({
387
- mutation: RespondTpMkReshareMutation,
388
- variables: {
389
- input: {
390
- tpId,
391
- mkSharedKeyId: mkSharedKey.id,
392
- mkReshareResponseCipher,
393
- },
394
- },
395
- });
396
- });
397
- }
398
- completeMkReshare(tpId) {
399
- return __awaiter(this, void 0, void 0, function* () {
400
- const userSharedKey = yield this.getTpCurrentUserSharedKey(tpId);
401
- const sharedKey = yield this.keyGraph.getKey(userSharedKey.sharedKey.id);
402
- const prk = yield this.keyGraph.getKey(userSharedKey.mkPxk.id);
403
- const plainMkReshareResponseCipher = yield this.encryptionService.decrypt(sharedKey, yield this.encryptionService.decrypt(prk, userSharedKey.mkReshareResponseCipher));
404
- // Double check it's a valid key.
405
- const mkSharedKey = {
406
- id: plainMkReshareResponseCipher.mkSharedKey.id,
407
- jwk: yield JWK.asKey(plainMkReshareResponseCipher.mkSharedKey.jwk),
408
- };
409
- const masterKey = this.keyService.currentMasterKey;
410
- const mkWrappedMkSharedKey = yield this.encryptionService.encryptToString(masterKey.jwk, mkSharedKey.jwk.toJSON(true));
411
- return new LrMutation({
412
- mutation: CompleteTpMkReshareMutation,
413
- variables: {
414
- input: {
415
- tpId,
416
- masterKeyId: masterKey.id,
417
- mkSharedKeyId: mkSharedKey.id,
418
- mkWrappedMkSharedKey,
419
- },
420
- },
421
- });
422
- });
423
- }
424
- // ------------------------------------------------------------------------------------
425
- // ------------------------------------------------------------------------------------
426
- // Helpers
427
- // ------------------------------------------------------------------------------------
428
- // ------------------------------------------------------------------------------------
429
- getTpCurrentUserSharedKey(tpId) {
430
- return __awaiter(this, void 0, void 0, function* () {
431
- return (yield this.lrGraphQL.query({
432
- query: TpCurrentUserSharedKeyQuery,
433
- variables: {
434
- id: tpId,
435
- },
436
- })).tp.currentUserSharedKey.userSharedKey;
437
- });
438
- }
439
- };
440
- TrustedPartyService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TrustedPartyService_Factory() { return new TrustedPartyService(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.KeyGraphService), i0.ɵɵinject(i2.ItemService), i0.ɵɵinject(i3.KeyService), i0.ɵɵinject(i4.KeyFactoryService), i0.ɵɵinject(i5.EncryptionService)); }, token: TrustedPartyService, providedIn: "root" });
441
- TrustedPartyService.decorators = [
442
- { type: Injectable, args: [{
443
- providedIn: 'root',
444
- },] }
445
- ];
446
- TrustedPartyService.ctorParameters = () => [
447
- { type: NgZone },
448
- { type: Injector },
449
- { type: KeyGraphService },
450
- { type: ItemService },
451
- { type: KeyService },
452
- { type: KeyFactoryService },
453
- { type: EncryptionService }
454
- ];
455
- TrustedPartyService = __decorate([
456
- RunOutsideAngular({
457
- ngZoneName: 'ngZone',
458
- })
459
- ], TrustedPartyService);
460
- export { TrustedPartyService };
461
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3RydXN0ZWQtcGFydHkvdHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsZUFBZSxHQUNoQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG1CQUFtQixHQUNwQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsaUNBQWlDLEVBQ2pDLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLHVCQUF1QixHQUN4QixNQUFNLHFCQUFxQixDQUFD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Z0JBQ3JDLFNBQVMsRUFBRTtvQkFDVCxLQUFLLEVBQUU7d0JBQ0wsSUFBSTt3QkFDSixXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7d0JBQ3pCLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRTt3QkFDN0Isb0JBQW9CO3FCQUNyQjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVELHVGQUF1RjtJQUN2Rix1RkFBdUY7SUFDdkYsVUFBVTtJQUNWLHVGQUF1RjtJQUN2Rix1RkFBdUY7SUFDekUseUJBQXlCLENBQUMsSUFBb0I7O1lBQzFELE9BQU8sQ0FDTCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUN6QixLQUFLLEVBQUUsMkJBQTJCO2dCQUNsQyxTQUFTLEVBQUU7b0JBQ1QsRUFBRSxFQUFFLElBQUk7aUJBQ1Q7YUFDRixDQUFDLENBQ0gsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDO1FBQzFDLENBQUM7S0FBQTtDQUNGLENBQUE7OztZQWhpQkEsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUF0RDhCLE1BQU07WUFBaEIsUUFBUTtZQVlwQixlQUFlO1lBSGYsV0FBVztZQUlYLFVBQVU7WUFGVixpQkFBaUI7WUFIakIsaUJBQWlCOztBQStDYixtQkFBbUI7SUFOL0IsaUJBQWlCLENBQUM7UUFDakIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztHQUlXLG1CQUFtQixDQTZoQi9CO1NBN2hCWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHtcbiAgQWNjZXNzUm9sZUNob2ljZSxcbiAgTHJSZWxheUlkSW5wdXQsXG4gIFNoYXJlVHlwZUNob2ljZSxcbn0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vZW5jcnlwdGlvbi9lbmNyeXB0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSXRlbVNlcnZpY2UgfSBmcm9tICcuLi9pdGVtL2l0ZW0uc2VydmljZSc7XG5pbXBvcnQgeyBJZEtleVBhaXIgfSBmcm9tICcuLi9pdGVtL2l0ZW0udHlwZXMnO1xuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2tleS9rZXkuc2VydmljZSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuLi9rZXkva2V5LnR5cGVzJztcbmltcG9ydCB7XG4gIEtjQmFkQXJndW1lbnRFeGNlcHRpb24sXG4gIEtjQmFkU3RhdGVFeGNlcHRpb24sXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBSdW5PdXRzaWRlQW5ndWxhciB9IGZyb20gJy4uL19jb21tb24vcnVuLW91dHNpZGUtYW5ndWxhcic7XG5pbXBvcnQge1xuICBDb21wbGV0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmVNdXRhdGlvbixcbiAgQ29tcGxldGVEZXRhY2hlZEZpbGVTaGFyZU11dGF0aW9uLFxuICBDb21wbGV0ZVRwTWtSZXNoYXJlTXV0YXRpb24sXG4gIENyZWF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24sXG4gIENyZWF0ZUZpbGVTaGFyZU11dGF0aW9uLFxuICBEZWxldGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICBEZWxldGVGaWxlU2hhcmVNdXRhdGlvbixcbiAgRGVsZXRlVHBNdXRhdGlvbixcbiAgUmVxdWVzdFRwTWtSZXNoYXJlTXV0YXRpb24sXG4gIFJlc3BvbmRUcE1rUmVzaGFyZU11dGF0aW9uLFxuICBVcGRhdGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICBVcGRhdGVGaWxlU2hhcmVNdXRhdGlvbixcbn0gZnJvbSAnLi90cnVzdGVkLXBhcnR5LmdxbCc7XG5pbXBvcnQge1xuICBEaXJlY3RvcnlTaGFyZVF1ZXJ5LFxuICBEaXJlY3RvcnlTaGFyZVF1ZXJ5UmVzdWx0LFxuICBGaWxlU2hhcmVRdWVyeSxcbiAgRmlsZVNoYXJlUXVlcnlSZXN1bHQsXG4gIEl0ZW1TaGFyZVF1ZXJ5UmVzdWx0LFxuICBUcEN1cnJlbnRVc2VyU2hhcmVkS2V5UXVlcnksXG59IGZyb20gJy4vdHJ1c3RlZC1wYXJ0eS5ncWwucHJpdmF0ZSc7XG5pbXBvcnQge1xuICBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9ucyxcbiAgQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucyxcbiAgVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zLFxuICBVcGRhdGVJdGVtU2hhcmVPcHRpb25zLFxufSBmcm9tICcuL3RydXN0ZWQtcGFydHkudHlwZXMnO1xuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVHJ1c3RlZFBhcnR5U2VydmljZSBleHRlbmRzIExyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGtleUZhY3Rvcnk6IEtleUZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIGRlbGV0ZVRwKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuZGVsZXRlVHBNdXRhdGlvbih0cElkKSk7XG4gIH1cblxuICBkZWxldGVUcE11dGF0aW9uKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBEZWxldGVUcE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaWQ6IHRwSWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRGlyZWN0b3J5U2hhcmUob3B0aW9uczogQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihvcHRpb25zOiBDcmVhdGVJdGVtU2hhcmVPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlU2hhcmUob3B0aW9uczogQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZUZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnM6IENyZWF0ZUl0ZW1TaGFyZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZUZpbGVTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlSXRlbVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucyAmIHsgaXNEaXJlY3Rvcnk6IGJvb2xlYW4gfVxuICApIHtcbiAgICBjb25zdCB7XG4gICAgICBpdGVtSWQ6IF9pdGVtSWQsXG4gICAgICBpdGVtS2V5SWQ6IF9pdGVtS2V5SWQsXG4gICAgICB0cElkLFxuICAgICAgdHBTaGFyZWRLZXlJZCxcbiAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICBpc0RpcmVjdG9yeSxcbiAgICAgIHNoYXJlVHlwZSxcbiAgICAgIHBsYWluTWV0YUpzb24sXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBpdGVtOiBJZEtleVBhaXIgPSBvcHRpb25zLml0ZW0gfHwge1xuICAgICAgaWQ6IF9pdGVtSWQsXG4gICAgICBrZXlJZDogX2l0ZW1LZXlJZCxcbiAgICB9O1xuXG4gICAgY29uc3QgcGxhaW5NZXRhID0gcGxhaW5NZXRhSnNvbiAmJiBKU09OLnN0cmluZ2lmeShwbGFpbk1ldGFKc29uKTtcblxuICAgIGlmIChhY2Nlc3NSb2xlID09IEFjY2Vzc1JvbGVDaG9pY2UuREVOWSkge1xuICAgICAgaWYgKGl0ZW0ua2V5SWQgfHwgdHBTaGFyZWRLZXlJZCkge1xuICAgICAgICB0aHJvdyBuZXcgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgICAnSWYgYWNjZXNzUm9sZSBpcyBBY2Nlc3NSb2xlQ2hvaWNlLkRFTlksIG11c3Qgbm90IHNwZWNpZnkgYW55IG9mIGl0ZW1JZCwgaXRlbUtleUlkLCBvciB0cFNoYXJlZEtleUlkIHBhcmFtZXRlcnMnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaXRlbUlkOiBpdGVtLmlkLFxuICAgICAgICAgIHRwSWQsXG4gICAgICAgICAgYWNjZXNzUm9sZSxcbiAgICAgICAgICBpdGVtS2V5SWQ6IG51bGwsXG4gICAgICAgICAgd3JhcHBpbmdLZXlJZDogbnVsbCxcbiAgICAgICAgICB3cmFwcGVkSXRlbUtleTogbnVsbCxcbiAgICAgICAgICBzaGFyZVR5cGUsXG4gICAgICAgICAgcGxhaW5NZXRhLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoaXRlbS5rZXlJZCwgKCkgPT5cbiAgICAgIGlzRGlyZWN0b3J5XG4gICAgICAgID8gdGhpcy5pdGVtU2VydmljZS5nZXREaXJlY3RvcnlLZXlJZChpdGVtLmlkKVxuICAgICAgICA6IHRoaXMuaXRlbVNlcnZpY2UuZ2V0RmlsZUtleUlkKGl0ZW0uaWQpXG4gICAgKTtcblxuICAgIGNvbnN0IHdyYXBwaW5nS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkodHBTaGFyZWRLZXlJZCwgKCkgPT5cbiAgICAgIHRoaXMuZ2V0VHBDdXJyZW50VXNlclNoYXJlZEtleSh0cElkKS50aGVuKChyZXMpID0+IHJlcy5zaGFyZWRLZXkuaWQpXG4gICAgKTtcbiAgICBjb25zdCB3cmFwcGVkSXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGgud3JhcEtleShcbiAgICAgIHdyYXBwaW5nS2V5LFxuICAgICAgaXRlbUtleS5qd2tcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIGl0ZW1JZDogaXRlbS5pZCxcbiAgICAgICAgdHBJZCxcbiAgICAgICAgYWNjZXNzUm9sZSxcbiAgICAgICAgaXRlbUtleUlkOiBpdGVtS2V5LmlkLFxuICAgICAgICB3cmFwcGluZ0tleUlkOiB3cmFwcGluZ0tleS5pZCxcbiAgICAgICAgd3JhcHBlZEl0ZW1LZXksXG4gICAgICAgIHNoYXJlVHlwZSxcbiAgICAgICAgcGxhaW5NZXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGlyZWN0b3J5U2hhcmUob3B0aW9uczogVXBkYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihvcHRpb25zOiBVcGRhdGVJdGVtU2hhcmVPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXRhY2hlZERpcmVjdG9yeVNoYXJlKG9wdGlvbnM6IFVwZGF0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXRhY2hlZERpcmVjdG9yeVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRGlyZWN0b3J5U2hhcmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVNdXRhdGlvbihvcHRpb25zKSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZpbGVTaGFyZShvcHRpb25zOiBVcGRhdGVJdGVtU2hhcmVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlRmlsZVNoYXJlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsZVNoYXJlTXV0YXRpb24ob3B0aW9uczogVXBkYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRmlsZVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZUl0ZW1TaGFyZU11dGF0aW9uKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXRhY2hlZEZpbGVTaGFyZShvcHRpb25zOiBVcGRhdGVEZXRhY2hlZEl0ZW1TaGFyZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51cGRhdGVEZXRhY2hlZEZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURldGFjaGVkRmlsZVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRmlsZVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZURldGFjaGVkSXRlbVNoYXJlTXV0YXRpb24ob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERpcmVjdG9yeVNoYXJlKFxuICAgIGl0ZW1TaGFyZUlkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEaXJlY3RvcnlTaGFyZVF1ZXJ5UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBEaXJlY3RvcnlTaGFyZVF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlkOiBpdGVtU2hhcmVJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVTaGFyZShpdGVtU2hhcmVJZDogc3RyaW5nKTogUHJvbWlzZTxGaWxlU2hhcmVRdWVyeVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmxyR3JhcGhRTC5xdWVyeSh7XG4gICAgICBxdWVyeTogRmlsZVNoYXJlUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaWQ6IGl0ZW1TaGFyZUlkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZUl0ZW1TaGFyZU11dGF0aW9uKFxuICAgIG9wdGlvbnM6IFVwZGF0ZUl0ZW1TaGFyZU9wdGlvbnMgJiB7IGlzRGlyZWN0b3J5OiBib29sZWFuIH1cbiAgKSB7XG4gICAgY29uc3Qge1xuICAgICAgaXRlbVNoYXJlSWQsXG4gICAgICBhY2Nlc3NSb2xlLFxuICAgICAgaXNEaXJlY3RvcnksXG4gICAgICBpdGVtSWQ6IF9pdGVtSWQsXG4gICAgICBpdGVtS2V5SWQ6IF9pdGVtS2V5SWQsXG4gICAgICB0cElkLFxuICAgICAgdHBTaGFyZWRLZXlJZCxcbiAgICAgIHBsYWluTWV0YUpzb24sXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBpdGVtOiBJZEtleVBhaXIgPSBvcHRpb25zLml0ZW0gfHwge1xuICAgICAgaWQ6IF9pdGVtSWQsXG4gICAgICBrZXlJZDogX2l0ZW1LZXlJZCxcbiAgICB9O1xuXG4gICAgLy8gSWYgcGxhaW5NZXRhSnNvbiBpcyB1bmRlZmluZWQsIHRoZW4gcGxhaW5NZXRhIGlzIHVuZGVmaW5lZFxuICAgIC8vIElmIHBsYWluTWV0YUpzb24gaXMgbnVsbCwgdGhlbiBwbGFpbk1ldGEgaXMgbnVsbFxuICAgIC8vIElmIHBsYWluTWV0YUpzb24gaGFzIHZhbHVlLCB0aGVuIHBsYWluTWV0YSBpcyBKU09OLnN0cmluZ2lmeShwbGFpbk1ldGFKc29uKVxuICAgIGNvbnN0IHBsYWluTWV0YSA9IHBsYWluTWV0YUpzb24gJiYgSlNPTi5zdHJpbmdpZnkocGxhaW5NZXRhSnNvbik7XG5cbiAgICAvLyBJZiBub3QgdXBkYXRpbmcgYWNjZXNzIHJvbGUgb3IgdXBkYXRpbmcgdG8gREVOWSByb2xlLCB0aGVuIHdlIGRvbid0IG5lZWQgYW55IGtleSBtYXRlcmlhbC5cbiAgICBpZiAoYWNjZXNzUm9sZSA9PSBudWxsIHx8IGFjY2Vzc1JvbGUgPT0gQWNjZXNzUm9sZUNob2ljZS5ERU5ZKSB7XG4gICAgICBpZiAoaXRlbS5pZCB8fCBpdGVtLmtleUlkIHx8IHRwSWQgfHwgdHBTaGFyZWRLZXlJZCkge1xuICAgICAgICB0aHJvdyBuZXcgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgICAnSWYgYWNjZXNzUm9sZSBpcyBBY2Nlc3NSb2xlQ2hvaWNlLkRFTlksIG11c3Qgbm90IHNwZWNpZnkgYW55IG9mIGl0ZW1JZCwgaXRlbUtleUlkLCB0cElkLCBvciB0cFNoYXJlZEtleUlkIHBhcmFtZXRlcnMnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaWQ6IGl0ZW1TaGFyZUlkLFxuICAgICAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICAgICAgcGxhaW5NZXRhLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDYWNoaW5nIHRoZSByZXN1bHQgc28gd2Ugb25seSBuZWVkIG9uZSBjYWxsLlxuICAgIGxldCBpdGVtU2hhcmU6IEl0ZW1TaGFyZVF1ZXJ5UmVzdWx0O1xuXG4gICAgY29uc3QgZ2V0SXRlbVNoYXJlID0gYXN5bmMgKCk6IFByb21pc2U8SXRlbVNoYXJlUXVlcnlSZXN1bHQ+ID0+IHtcbiAgICAgIGlmICghaXRlbVNoYXJlKSB7XG4gICAgICAgIGlmIChpc0RpcmVjdG9yeSkge1xuICAgICAgICAgIGl0ZW1TaGFyZSA9IChhd2FpdCB0aGlzLmdldERpcmVjdG9yeVNoYXJlKGl0ZW1TaGFyZUlkKSlcbiAgICAgICAgICAgIC5kaXJlY3RvcnlTaGFyZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtU2hhcmUgPSAoYXdhaXQgdGhpcy5nZXRGaWxlU2hhcmUoaXRlbVNoYXJlSWQpKS5maWxlU2hhcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbVNoYXJlLnNoYXJlVHlwZSA9PSBTaGFyZVR5cGVDaG9pY2UuREVUQUNIRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgICAgICdVc2UgdXBkYXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZSgpIG9yIHVwZGF0ZURldGFjaGVkRmlsZVNoYXJlKCkgdG8gdXBkYXRlZCBERVRBQ0hFRCBzaGFyZXMuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1TaGFyZTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgaXRlbS5rZXlJZCxcbiAgICAgIGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgICAgICBjb25zdCBpdGVtSWRfID0gaXRlbS5pZCB8fCAoYXdhaXQgZ2V0SXRlbVNoYXJlKCkpLml0ZW0uaWQ7XG4gICAgICAgIGlmIChpc0RpcmVjdG9yeSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1TZXJ2aWNlLmdldERpcmVjdG9yeUtleUlkKGl0ZW1JZF8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1TZXJ2aWNlLmdldEZpbGVLZXlJZChpdGVtSWRfKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB3cmFwcGluZ0tleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgdHBTaGFyZWRLZXlJZCxcbiAgICAgIGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgICAgICBjb25zdCB0cElkXyA9IHRwSWQgfHwgKGF3YWl0IGdldEl0ZW1TaGFyZSgpKS50cC5pZDtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldFRwQ3VycmVudFVzZXJTaGFyZWRLZXkodHBJZF8pKS5zaGFyZWRLZXkuaWQ7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHdyYXBwZWRJdGVtS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC53cmFwS2V5KFxuICAgICAgd3JhcHBpbmdLZXksXG4gICAgICBpdGVtS2V5Lmp3a1xuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgaWQ6IGl0ZW1TaGFyZUlkLFxuICAgICAgICBhY2Nlc3NSb2xlLFxuICAgICAgICBpdGVtS2V5SWQ6IGl0ZW1LZXkuaWQsXG4gICAgICAgIHdyYXBwaW5nS2V5SWQ6IHdyYXBwaW5nS2V5LmlkLFxuICAgICAgICB3cmFwcGVkSXRlbUtleSxcbiAgICAgICAgcGxhaW5NZXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVNdXRhdGlvbihcbiAgICBvcHRpb25zOiBVcGRhdGVEZXRhY2hlZEl0ZW1TaGFyZU9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgeyBpdGVtU2hhcmVJZCwgYWNjZXNzUm9sZSwgcGxhaW5NZXRhSnNvbiB9ID0gb3B0aW9ucztcblxuICAgIHJldHVybiB7XG4gICAgICBpbnB1dDoge1xuICAgICAgICBpZDogaXRlbVNoYXJlSWQsXG4gICAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICAgIHBsYWluTWV0YTogcGxhaW5NZXRhSnNvbiAmJiBKU09OLnN0cmluZ2lmeShwbGFpbk1ldGFKc29uKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZURpcmVjdG9yeVNoYXJlKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5kZWxldGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uKGlkKSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlU2hhcmUoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmRlbGV0ZUZpbGVTaGFyZU11dGF0aW9uKGlkKSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlU2hhcmVNdXRhdGlvbihpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBEZWxldGVGaWxlU2hhcmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZShcbiAgICBvcHRpb25zOiBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jb21wbGV0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjb21wbGV0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihcbiAgICBvcHRpb25zOiBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENvbXBsZXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlTXV0YXRpb24oe1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBpc0RpcmVjdG9yeTogdHJ1ZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29tcGxldGVEZXRhY2hlZEZpbGVTaGFyZShvcHRpb25zOiBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNvbXBsZXRlRGV0YWNoZWRGaWxlU2hhcmVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjb21wbGV0ZURldGFjaGVkRmlsZVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogQ29tcGxldGVEZXRhY2hlZEl0ZW1TaGFyZU9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDb21wbGV0ZURldGFjaGVkRmlsZVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IGF3YWl0IHRoaXMucHJlcGFyZUNvbXBsZXRlRGV0YWNoZWRJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ29tcGxldGVEZXRhY2hlZEl0ZW1TaGFyZU11dGF0aW9uKFxuICAgIG9wdGlvbnM6IENvbXBsZXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zICYgeyBpc0RpcmVjdG9yeTogYm9vbGVhbiB9XG4gICkge1xuICAgIGNvbnN0IHsgaXRlbVNoYXJlSWQsIGl0ZW1LZXlJZCwgaXNEaXJlY3RvcnkgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoaXRlbUtleUlkLCAoKSA9PlxuICAgICAgaXNEaXJlY3RvcnlcbiAgICAgICAgPyB0aGlzLml0ZW1TZXJ2aWNlLmdldERpcmVjdG9yeUtleUlkRnJvbURpcmVjdG9yeVNoYXJlKGl0ZW1TaGFyZUlkKVxuICAgICAgICA6IHRoaXMuaXRlbVNlcnZpY2UuZ2V0RmlsZUtleUlkRnJvbUZpbGVTaGFyZShpdGVtU2hhcmVJZClcbiAgICApO1xuXG4gICAgY29uc3Qgcm9vdEtleSA9IHRoaXMua2V5U2VydmljZS5jdXJyZW50Um9vdEtleTtcblxuICAgIGNvbnN0IHdyYXBwZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLndyYXBLZXkocm9vdEtleSwgaXRlbUtleS5qd2spO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIGlkOiBpdGVtU2hhcmVJZCxcbiAgICAgICAga2V5SWQ6IGl0ZW1LZXkuaWQsXG4gICAgICAgIHdyYXBwaW5nS2V5SWQ6IHJvb3RLZXkuaWQsXG4gICAgICAgIHdyYXBwZWRLZXksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBhc3luYyByZXF1ZXN0TWtSZXNoYXJlTXV0YXRpb24odHBJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICBjb25zdCB1c2VyU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5nZXRUcEN1cnJlbnRVc2VyU2hhcmVkS2V5KHRwSWQpO1xuXG4gICAgaWYgKHVzZXJTaGFyZWRLZXkubWtTaGFyZWRLZXkpIHtcbiAgICAgIHRocm93IG5ldyBLY0JhZFN0YXRlRXhjZXB0aW9uKCdUUCBhbHJlYWR5IGhhcyBta1NoYXJlZEtleScpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hc3RlcktleSA9IHRoaXMua2V5U2VydmljZS5jdXJyZW50TWFzdGVyS2V5O1xuICAgIGNvbnN0IHByayA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVQa2NLZXkoKTtcbiAgICBjb25zdCBta1dyYXBwZWRNa1ByayA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgbWFzdGVyS2V5Lmp3ayxcbiAgICAgIHByay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkodXNlclNoYXJlZEtleS5zaGFyZWRLZXkuaWQpO1xuICAgIGNvbnN0IG1rUmVzaGFyZVJlcXVlc3RDaXBoZXIgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHNoYXJlZEtleS5qd2ssXG4gICAgICB7XG4gICAgICAgIHBiazogcHJrLnRvSlNPTigpLFxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFJlcXVlc3RUcE1rUmVzaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgdHBJZCxcbiAgICAgICAgICBtYXN0ZXJLZXlJZDogbWFzdGVyS2V5LmlkLFxuICAgICAgICAgIG1rUGJrOiBKU09OLnN0cmluZ2lmeShwcmsudG9KU09OKCkpLFxuICAgICAgICAgIG1rV3JhcHBlZE1rUHJrLFxuICAgICAgICAgIHNoYXJlZEtleUlkOiBzaGFyZWRLZXkuaWQsXG4gICAgICAgICAgbWtSZXNoYXJlUmVxdWVzdENpcGhlcixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZXNwb25kTWtSZXNoYXJlKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgY29uc3QgdXNlclNoYXJlZEtleSA9IGF3YWl0IHRoaXMuZ2V0VHBDdXJyZW50VXNlclNoYXJlZEtleSh0cElkKTtcblxuICAgIGlmICghdXNlclNoYXJlZEtleS5ta1NoYXJlZEtleSkge1xuICAgICAgdGhyb3cgbmV3IEtjQmFkU3RhdGVFeGNlcHRpb24oXG4gICAgICAgICdObyBhY2Nlc3MgdG8gdGhlIG1rU2hhcmVkS2V5IHNvIGNhbm5vdCByZXNoYXJlIGl0IHdpdGggVFAnXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KHVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkKTtcbiAgICBjb25zdCBwbGFpbk1rUmVzaGFyZVJlcXVlc3RDaXBoZXIgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXG4gICAgICBzaGFyZWRLZXksXG4gICAgICB1c2VyU2hhcmVkS2V5Lm1rUmVzaGFyZVJlcXVlc3RDaXBoZXJcbiAgICApO1xuICAgIGNvbnN0IHBiayA9IGF3YWl0IEpXSy5hc0tleShwbGFpbk1rUmVzaGFyZVJlcXVlc3RDaXBoZXIucGJrKTtcbiAgICBjb25zdCBta1NoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgdXNlclNoYXJlZEtleS5ta1NoYXJlZEtleS5pZFxuICAgICk7XG5cbiAgICBjb25zdCBwbGFpbk1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyID0ge1xuICAgICAgbWtTaGFyZWRLZXk6IHtcbiAgICAgICAgaWQ6IG1rU2hhcmVkS2V5LmlkLFxuICAgICAgICBqd2s6IG1rU2hhcmVkS2V5Lmp3ay50b0pTT04odHJ1ZSksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBXcmFwIHdpdGggc2hhcmVkS2V5IHRoZW4gYWdhaW4gd2l0aCBQYmtcbiAgICBjb25zdCBta1Jlc2hhcmVSZXNwb25zZUNpcGhlciA9XG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgcGJrLFxuICAgICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgICBzaGFyZWRLZXkuandrLFxuICAgICAgICAgIHBsYWluTWtSZXNoYXJlUmVzcG9uc2VDaXBoZXJcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogUmVzcG9uZFRwTWtSZXNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICB0cElkLFxuICAgICAgICAgIG1rU2hhcmVkS2V5SWQ6IG1rU2hhcmVkS2V5LmlkLFxuICAgICAgICAgIG1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlTWtSZXNoYXJlKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgY29uc3QgdXNlclNoYXJlZEtleSA9IGF3YWl0IHRoaXMuZ2V0VHBDdXJyZW50VXNlclNoYXJlZEtleSh0cElkKTtcblxuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KHVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkKTtcbiAgICBjb25zdCBwcmsgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleSh1c2VyU2hhcmVkS2V5Lm1rUHhrLmlkKTtcbiAgICBjb25zdCBwbGFpbk1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5kZWNyeXB0KFxuICAgICAgc2hhcmVkS2V5LFxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5kZWNyeXB0KFxuICAgICAgICBwcmssXG4gICAgICAgIHVzZXJTaGFyZWRLZXkubWtSZXNoYXJlUmVzcG9uc2VDaXBoZXJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gRG91YmxlIGNoZWNrIGl0J3MgYSB2YWxpZCBrZXkuXG4gICAgY29uc3QgbWtTaGFyZWRLZXk6IEtleSA9IHtcbiAgICAgIGlkOiBwbGFpbk1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyLm1rU2hhcmVkS2V5LmlkLFxuICAgICAgandrOiBhd2FpdCBKV0suYXNLZXkocGxhaW5Na1Jlc2hhcmVSZXNwb25zZUNpcGhlci5ta1NoYXJlZEtleS5qd2spLFxuICAgIH07XG5cbiAgICBjb25zdCBtYXN0ZXJLZXkgPSB0aGlzLmtleVNlcnZpY2UuY3VycmVudE1hc3RlcktleTtcbiAgICBjb25zdCBta1dyYXBwZWRNa1NoYXJlZEtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgbWFzdGVyS2V5Lmp3ayxcbiAgICAgIG1rU2hhcmVkS2V5Lmp3ay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDb21wbGV0ZVRwTWtSZXNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICB0cElkLFxuICAgICAgICAgIG1hc3RlcktleUlkOiBtYXN0ZXJLZXkuaWQsXG4gICAgICAgICAgbWtTaGFyZWRLZXlJZDogbWtTaGFyZWRLZXkuaWQsXG4gICAgICAgICAgbWtXcmFwcGVkTWtTaGFyZWRLZXksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIZWxwZXJzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgcHJpdmF0ZSBhc3luYyBnZXRUcEN1cnJlbnRVc2VyU2hhcmVkS2V5KHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IFRwQ3VycmVudFVzZXJTaGFyZWRLZXlRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgaWQ6IHRwSWQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICkudHAuY3VycmVudFVzZXJTaGFyZWRLZXkudXNlclNoYXJlZEtleTtcbiAgfVxufVxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi90cnVzdGVkLXBhcnR5L3RydXN0ZWQtcGFydHkudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjY2Vzc1JvbGVDaG9pY2UsXG4gIEpTT05PYmplY3QsXG4gIExyUmVsYXlJZElucHV0LFxuICBTaGFyZVR5cGVDaG9pY2UsXG59IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgeyBJZEtleVBhaXIgfSBmcm9tICcuLi9pdGVtL2l0ZW0udHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUl0ZW1TaGFyZU9wdGlvbnMge1xuICB0cElkOiBMclJlbGF5SWRJbnB1dDtcbiAgYWNjZXNzUm9sZTogQWNjZXNzUm9sZUNob2ljZTtcbiAgc2hhcmVUeXBlOiBTaGFyZVR5cGVDaG9pY2U7XG4gIHBsYWluTWV0YUpzb24/OiBKU09OT2JqZWN0O1xuICBpdGVtPzogSWRLZXlQYWlyO1xuICBpdGVtSWQ/OiBMclJlbGF5SWRJbnB1dDtcbiAgaXRlbUtleUlkPzogTHJSZWxheUlkSW5wdXQ7XG4gIC8vIE9wdGlvbmFsIHRvIGltcHJvdmUgZWZmaWNpZW5jeVxuICB0cFNoYXJlZEtleUlkPzogTHJSZWxheUlkSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlSXRlbVNoYXJlT3B0aW9ucyB7XG4gIGl0ZW1TaGFyZUlkOiBMclJlbGF5SWRJbnB1dDtcbiAgYWNjZXNzUm9sZT86IEFjY2Vzc1JvbGVDaG9pY2U7XG4gIHBsYWluTWV0YUpzb24/OiBKU09OT2JqZWN0O1xuICAvLyBPcHRpb25hbCB0byBpbXByb3ZlIGVmZmljaWVuY3lcbiAgaXRlbT86IElkS2V5UGFpcjtcbiAgaXRlbUlkPzogTHJSZWxheUlkSW5wdXQ7XG4gIGl0ZW1LZXlJZD86IExyUmVsYXlJZElucHV0O1xuICB0cElkPzogTHJSZWxheUlkSW5wdXQ7XG4gIHRwU2hhcmVkS2V5SWQ/OiBMclJlbGF5SWRJbnB1dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVEZXRhY2hlZEl0ZW1TaGFyZU9wdGlvbnMge1xuICBpdGVtU2hhcmVJZDogTHJSZWxheUlkSW5wdXQ7XG4gIGFjY2Vzc1JvbGU/OiBBY2Nlc3NSb2xlQ2hvaWNlO1xuICBwbGFpbk1ldGFKc29uPzogSlNPTk9iamVjdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9ucyB7XG4gIGl0ZW1TaGFyZUlkOiBMclJlbGF5SWRJbnB1dDtcbiAgLy8gT3B0aW9uYWwgdG8gaW1wcm92ZSBlZmZpY2llbmN5XG4gIGl0ZW1LZXlJZD86IExyUmVsYXlJZElucHV0O1xufVxuIl19
@@ -1,74 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
4
- import { KcBadArgumentException } from '../_common/exceptions';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@aws-amplify/auth/lib-esm/Auth";
7
- export class TwoFactorService {
8
- constructor(auth) {
9
- this.auth = auth;
10
- }
11
- getPreferredMFA() {
12
- return __awaiter(this, void 0, void 0, function* () {
13
- const cognitoUser = yield this.auth.currentAuthenticatedUser();
14
- return yield this.auth.getPreferredMFA(cognitoUser);
15
- });
16
- }
17
- setPreferredMFA(method) {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- const cognitoUser = yield this.auth.currentAuthenticatedUser();
20
- yield this.auth.setPreferredMFA(cognitoUser, method);
21
- });
22
- }
23
- setPhoneNumber(phone) {
24
- return __awaiter(this, void 0, void 0, function* () {
25
- const cognitoUser = yield this.auth.currentAuthenticatedUser();
26
- yield this.auth.updateUserAttributes(cognitoUser, {
27
- phone_number: phone,
28
- });
29
- });
30
- }
31
- getSMSCode() {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- yield this.auth.verifyCurrentUserAttribute('phone_number');
34
- });
35
- }
36
- verifySMSCode(verificationCode) {
37
- return __awaiter(this, void 0, void 0, function* () {
38
- yield this.auth.verifyCurrentUserAttributeSubmit('phone_number', verificationCode);
39
- });
40
- }
41
- getSoftwareToken() {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- const [cognitoUser, userInfo] = yield Promise.all([
44
- this.auth.currentAuthenticatedUser(),
45
- this.auth.currentUserInfo(),
46
- ]);
47
- const code = yield this.auth.setupTOTP(cognitoUser);
48
- const email = userInfo.attributes.email;
49
- if (!email) {
50
- throw new KcBadArgumentException('No email associated with user.');
51
- }
52
- return {
53
- code,
54
- codeUri: `otpauth://totp/${email}?secret=${code}&issuer=LifeReady`,
55
- };
56
- });
57
- }
58
- verifySoftwareToken(totpCode) {
59
- return __awaiter(this, void 0, void 0, function* () {
60
- const cognitoUser = yield this.auth.currentAuthenticatedUser();
61
- yield this.auth.verifyTotpToken(cognitoUser, totpCode);
62
- });
63
- }
64
- }
65
- TwoFactorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TwoFactorService_Factory() { return new TwoFactorService(i0.ɵɵinject(i1.AuthClass)); }, token: TwoFactorService, providedIn: "root" });
66
- TwoFactorService.decorators = [
67
- { type: Injectable, args: [{
68
- providedIn: 'root',
69
- },] }
70
- ];
71
- TwoFactorService.ctorParameters = () => [
72
- { type: AuthClass }
73
- ];
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLWZhY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3R3by1mYWN0b3IvdHdvLWZhY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBSy9ELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFBb0IsSUFBZTtRQUFmLFNBQUksR0FBSixJQUFJLENBQVc7SUFBRyxDQUFDO0lBRTFCLGVBQWU7O1lBQzFCLE1BQU0sV0FBVyxHQUFnQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUU1RSxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBO0lBRVksZUFBZSxDQUMxQixNQUFnQzs7WUFFaEMsTUFBTSxXQUFXLEdBQWdCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBRTVFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELENBQUM7S0FBQTtJQUVZLGNBQWMsQ0FBQyxLQUFLOztZQUMvQixNQUFNLFdBQVcsR0FBZ0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFFNUUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRTtnQkFDaEQsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRVksVUFBVTs7WUFDckIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdELENBQUM7S0FBQTtJQUVZLGFBQWEsQ0FBQyxnQkFBd0I7O1lBQ2pELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FDOUMsY0FBYyxFQUNkLGdCQUFnQixDQUNqQixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBRVksZ0JBQWdCOztZQUMzQixNQUFNLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7YUFDNUIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVwRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2FBQ3BFO1lBRUQsT0FBTztnQkFDTCxJQUFJO2dCQUNKLE9BQU8sRUFBRSxrQkFBa0IsS0FBSyxXQUFXLElBQUksbUJBQW1CO2FBQ25FLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFWSxtQkFBbUIsQ0FBQyxRQUFnQjs7WUFDL0MsTUFBTSxXQUFXLEdBQWdCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBRTVFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELENBQUM7S0FBQTs7OztZQTlERixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQUxRLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2duaXRvVXNlciB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9hdXRoJztcbmltcG9ydCB7IEF1dGhDbGFzcyB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9hdXRoL2xpYi1lc20vQXV0aCc7XG5pbXBvcnQgeyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uIH0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFR3b0ZhY3RvclNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGg6IEF1dGhDbGFzcykge31cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJlZmVycmVkTUZBKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY29nbml0b1VzZXI6IENvZ25pdG9Vc2VyID0gYXdhaXQgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXV0aC5nZXRQcmVmZXJyZWRNRkEoY29nbml0b1VzZXIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFByZWZlcnJlZE1GQShcbiAgICBtZXRob2Q6ICdUT1RQJyB8ICdTTVMnIHwgJ05PTUZBJ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb2duaXRvVXNlcjogQ29nbml0b1VzZXIgPSBhd2FpdCB0aGlzLmF1dGguY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyKCk7XG5cbiAgICBhd2FpdCB0aGlzLmF1dGguc2V0UHJlZmVycmVkTUZBKGNvZ25pdG9Vc2VyLCBtZXRob2QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFBob25lTnVtYmVyKHBob25lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29nbml0b1VzZXI6IENvZ25pdG9Vc2VyID0gYXdhaXQgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpO1xuXG4gICAgYXdhaXQgdGhpcy5hdXRoLnVwZGF0ZVVzZXJBdHRyaWJ1dGVzKGNvZ25pdG9Vc2VyLCB7XG4gICAgICBwaG9uZV9udW1iZXI6IHBob25lLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNNU0NvZGUoKSB7XG4gICAgYXdhaXQgdGhpcy5hdXRoLnZlcmlmeUN1cnJlbnRVc2VyQXR0cmlidXRlKCdwaG9uZV9udW1iZXInKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnlTTVNDb2RlKHZlcmlmaWNhdGlvbkNvZGU6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuYXV0aC52ZXJpZnlDdXJyZW50VXNlckF0dHJpYnV0ZVN1Ym1pdChcbiAgICAgICdwaG9uZV9udW1iZXInLFxuICAgICAgdmVyaWZpY2F0aW9uQ29kZVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U29mdHdhcmVUb2tlbigpOiBQcm9taXNlPHsgY29kZTogc3RyaW5nOyBjb2RlVXJpOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IFtjb2duaXRvVXNlciwgdXNlckluZm9dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpLFxuICAgICAgdGhpcy5hdXRoLmN1cnJlbnRVc2VySW5mbygpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgY29kZSA9IGF3YWl0IHRoaXMuYXV0aC5zZXR1cFRPVFAoY29nbml0b1VzZXIpO1xuXG4gICAgY29uc3QgZW1haWwgPSB1c2VySW5mby5hdHRyaWJ1dGVzLmVtYWlsO1xuICAgIGlmICghZW1haWwpIHtcbiAgICAgIHRocm93IG5ldyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uKCdObyBlbWFpbCBhc3NvY2lhdGVkIHdpdGggdXNlci4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZSxcbiAgICAgIGNvZGVVcmk6IGBvdHBhdXRoOi8vdG90cC8ke2VtYWlsfT9zZWNyZXQ9JHtjb2RlfSZpc3N1ZXI9TGlmZVJlYWR5YCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcmlmeVNvZnR3YXJlVG9rZW4odG90cENvZGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvZ25pdG9Vc2VyOiBDb2duaXRvVXNlciA9IGF3YWl0IHRoaXMuYXV0aC5jdXJyZW50QXV0aGVudGljYXRlZFVzZXIoKTtcblxuICAgIGF3YWl0IHRoaXMuYXV0aC52ZXJpZnlUb3RwVG9rZW4oY29nbml0b1VzZXIsIHRvdHBDb2RlKTtcbiAgfVxufVxuIl19