@lifeready/core 1.0.3 → 1.0.5

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/README.md +62 -62
  2. package/bundles/lifeready-core.umd.js +15445 -15445
  3. package/bundles/lifeready-core.umd.js.map +1 -1
  4. package/bundles/lifeready-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/_common/ast.js +40 -40
  6. package/esm2015/lib/_common/deferred-promise.js +24 -24
  7. package/esm2015/lib/_common/exceptions.js +157 -157
  8. package/esm2015/lib/_common/queries.gql.js +190 -190
  9. package/esm2015/lib/_common/run-outside-angular.js +79 -79
  10. package/esm2015/lib/_common/types.js +1 -1
  11. package/esm2015/lib/_common/utils.js +44 -44
  12. package/esm2015/lib/api/contact-card.gql.js +79 -79
  13. package/esm2015/lib/api/contact-card.service.js +154 -154
  14. package/esm2015/lib/api/contact-card2.gql.js +60 -60
  15. package/esm2015/lib/api/contact-card2.service.js +103 -103
  16. package/esm2015/lib/api/file.service.js +74 -74
  17. package/esm2015/lib/api/item2.gql.js +110 -110
  18. package/esm2015/lib/api/item2.service.js +311 -311
  19. package/esm2015/lib/api/key-exchange.gql.js +188 -188
  20. package/esm2015/lib/api/key-exchange.service.js +442 -442
  21. package/esm2015/lib/api/key-exchange.types.js +18 -18
  22. package/esm2015/lib/api/key-exchange2.gql.js +171 -171
  23. package/esm2015/lib/api/key-exchange2.service.js +479 -479
  24. package/esm2015/lib/api/lock.gql.js +40 -40
  25. package/esm2015/lib/api/lock.service.js +64 -64
  26. package/esm2015/lib/api/lr-apollo.service.js +46 -46
  27. package/esm2015/lib/api/lr-graphql/index.js +6 -6
  28. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
  29. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
  30. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
  31. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
  32. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
  33. package/esm2015/lib/api/message.service.js +138 -138
  34. package/esm2015/lib/api/persist.service.js +181 -181
  35. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
  36. package/esm2015/lib/api/query-processor/index.js +3 -3
  37. package/esm2015/lib/api/query-processor/query-processor.service.js +192 -192
  38. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
  39. package/esm2015/lib/api/shared-contact-card.service.js +119 -119
  40. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
  41. package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
  42. package/esm2015/lib/api/time.service.js +146 -146
  43. package/esm2015/lib/api/types/graphql.types.js +7 -7
  44. package/esm2015/lib/api/types/index.js +3 -3
  45. package/esm2015/lib/api/types/lr-graphql.types.js +71 -71
  46. package/esm2015/lib/auth/auth.config.js +57 -57
  47. package/esm2015/lib/auth/auth.gql.js +48 -48
  48. package/esm2015/lib/auth/auth.types.js +27 -27
  49. package/esm2015/lib/auth/idle.service.js +168 -168
  50. package/esm2015/lib/auth/idle.types.js +7 -7
  51. package/esm2015/lib/auth/lbop.service.js +355 -355
  52. package/esm2015/lib/auth/life-ready-auth.service.js +500 -500
  53. package/esm2015/lib/auth/password.service.js +320 -320
  54. package/esm2015/lib/auth/register.service.js +172 -172
  55. package/esm2015/lib/auth/two-factor.service.js +74 -74
  56. package/esm2015/lib/category/category-meta.service.js +99 -99
  57. package/esm2015/lib/category/category.gql.js +406 -406
  58. package/esm2015/lib/category/category.service.js +390 -390
  59. package/esm2015/lib/category/category.types.js +29 -29
  60. package/esm2015/lib/cryptography/cryptography.types.js +11 -11
  61. package/esm2015/lib/cryptography/encryption.service.js +189 -189
  62. package/esm2015/lib/cryptography/key-factory.service.js +237 -237
  63. package/esm2015/lib/cryptography/key-graph.service.js +280 -280
  64. package/esm2015/lib/cryptography/key-meta.service.js +200 -200
  65. package/esm2015/lib/cryptography/key.service.js +124 -124
  66. package/esm2015/lib/cryptography/slip39.service.js +169 -169
  67. package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
  68. package/esm2015/lib/life-ready.config.js +84 -84
  69. package/esm2015/lib/life-ready.module.js +74 -74
  70. package/esm2015/lib/plan/plan.gql.js +123 -123
  71. package/esm2015/lib/plan/plan.service.js +149 -149
  72. package/esm2015/lib/plan/plan.types.js +11 -11
  73. package/esm2015/lib/record/record-attachment.service.js +101 -101
  74. package/esm2015/lib/record/record.gql.js +179 -179
  75. package/esm2015/lib/record/record.service.js +206 -206
  76. package/esm2015/lib/record/record.types.js +15 -15
  77. package/esm2015/lib/record-type/record-type.service.js +75 -75
  78. package/esm2015/lib/record-type/record-type.types.js +28 -28
  79. package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -105
  80. package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -1
  81. package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -300
  82. package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -52
  83. package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -97
  84. package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -1
  85. package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -150
  86. package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -229
  87. package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -1
  88. package/esm2015/lib/scenario/scenario-setup.service.js +269 -269
  89. package/esm2015/lib/scenario/scenario.gql.js +368 -368
  90. package/esm2015/lib/scenario/scenario.service.js +611 -611
  91. package/esm2015/lib/scenario/scenario.types.js +64 -64
  92. package/esm2015/lib/search/search.gql.js +62 -62
  93. package/esm2015/lib/search/search.service.js +156 -156
  94. package/esm2015/lib/search/search.types.js +6 -6
  95. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -112
  96. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
  97. package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
  98. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -232
  99. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +299 -299
  100. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
  101. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
  102. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
  103. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
  104. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
  105. package/esm2015/lib/users/profile-details.service.js +214 -214
  106. package/esm2015/lib/users/profile.gql.js +97 -97
  107. package/esm2015/lib/users/profile.service.js +169 -169
  108. package/esm2015/lib/users/profile.types.js +34 -34
  109. package/esm2015/lib/users/user.gql.js +60 -60
  110. package/esm2015/lib/users/user.service.js +79 -79
  111. package/esm2015/lib/users/user.types.js +5 -5
  112. package/esm2015/lifeready-core.js +10 -10
  113. package/esm2015/public-api.js +81 -81
  114. package/fesm2015/lifeready-core.js +13088 -13088
  115. package/fesm2015/lifeready-core.js.map +1 -1
  116. package/lib/_common/ast.d.ts +11 -11
  117. package/lib/_common/deferred-promise.d.ts +12 -12
  118. package/lib/_common/exceptions.d.ts +109 -109
  119. package/lib/_common/queries.gql.d.ts +10 -10
  120. package/lib/_common/run-outside-angular.d.ts +14 -14
  121. package/lib/_common/types.d.ts +10 -10
  122. package/lib/_common/utils.d.ts +3 -3
  123. package/lib/api/contact-card.gql.d.ts +7 -7
  124. package/lib/api/contact-card.service.d.ts +52 -52
  125. package/lib/api/contact-card2.gql.d.ts +34 -34
  126. package/lib/api/contact-card2.service.d.ts +49 -49
  127. package/lib/api/file.service.d.ts +18 -18
  128. package/lib/api/item2.gql.d.ts +96 -96
  129. package/lib/api/item2.service.d.ts +177 -177
  130. package/lib/api/key-exchange.gql.d.ts +9 -9
  131. package/lib/api/key-exchange.service.d.ts +39 -39
  132. package/lib/api/key-exchange.types.d.ts +196 -196
  133. package/lib/api/key-exchange2.gql.d.ts +125 -125
  134. package/lib/api/key-exchange2.service.d.ts +187 -187
  135. package/lib/api/lock.gql.d.ts +27 -27
  136. package/lib/api/lock.service.d.ts +25 -25
  137. package/lib/api/lr-apollo.service.d.ts +15 -15
  138. package/lib/api/lr-graphql/index.d.ts +5 -5
  139. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
  140. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -27
  141. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
  142. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
  143. package/lib/api/lr-graphql/lr.service.d.ts +9 -9
  144. package/lib/api/message.service.d.ts +58 -58
  145. package/lib/api/persist.service.d.ts +31 -31
  146. package/lib/api/query-processor/common-processors.service.d.ts +36 -36
  147. package/lib/api/query-processor/index.d.ts +2 -2
  148. package/lib/api/query-processor/query-processor.service.d.ts +18 -18
  149. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
  150. package/lib/api/shared-contact-card.service.d.ts +33 -33
  151. package/lib/api/shared-contact-card2.gql.d.ts +36 -36
  152. package/lib/api/shared-contact-card2.service.d.ts +45 -45
  153. package/lib/api/time.service.d.ts +16 -16
  154. package/lib/api/types/graphql.types.d.ts +29 -29
  155. package/lib/api/types/index.d.ts +2 -2
  156. package/lib/api/types/lr-graphql.types.d.ts +385 -385
  157. package/lib/auth/auth.config.d.ts +5 -5
  158. package/lib/auth/auth.gql.d.ts +15 -15
  159. package/lib/auth/auth.types.d.ts +66 -66
  160. package/lib/auth/idle.service.d.ts +40 -40
  161. package/lib/auth/idle.types.d.ts +10 -10
  162. package/lib/auth/lbop.service.d.ts +91 -91
  163. package/lib/auth/life-ready-auth.service.d.ts +59 -59
  164. package/lib/auth/password.service.d.ts +78 -78
  165. package/lib/auth/register.service.d.ts +25 -25
  166. package/lib/auth/two-factor.service.d.ts +15 -15
  167. package/lib/category/category-meta.service.d.ts +23 -23
  168. package/lib/category/category.gql.d.ts +45 -45
  169. package/lib/category/category.service.d.ts +67 -67
  170. package/lib/category/category.types.d.ts +79 -79
  171. package/lib/cryptography/cryptography.types.d.ts +83 -83
  172. package/lib/cryptography/encryption.service.d.ts +41 -41
  173. package/lib/cryptography/key-factory.service.d.ts +38 -38
  174. package/lib/cryptography/key-graph.service.d.ts +33 -33
  175. package/lib/cryptography/key-meta.service.d.ts +44 -44
  176. package/lib/cryptography/key.service.d.ts +36 -36
  177. package/lib/cryptography/slip39.service.d.ts +43 -43
  178. package/lib/cryptography/web-crypto.service.d.ts +5 -5
  179. package/lib/life-ready.config.d.ts +14 -14
  180. package/lib/life-ready.module.d.ts +5 -5
  181. package/lib/plan/plan.gql.d.ts +11 -11
  182. package/lib/plan/plan.service.d.ts +33 -33
  183. package/lib/plan/plan.types.d.ts +31 -31
  184. package/lib/record/record-attachment.service.d.ts +16 -16
  185. package/lib/record/record.gql.d.ts +14 -14
  186. package/lib/record/record.service.d.ts +25 -25
  187. package/lib/record/record.types.d.ts +57 -57
  188. package/lib/record-type/record-type.service.d.ts +11 -11
  189. package/lib/record-type/record-type.types.d.ts +50 -50
  190. package/lib/scenario/approvals/scenario-approval.gql.d.ts +7 -7
  191. package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -63
  192. package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -32
  193. package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -5
  194. package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -17
  195. package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -18
  196. package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -8
  197. package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -30
  198. package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -54
  199. package/lib/scenario/scenario-setup.service.d.ts +22 -22
  200. package/lib/scenario/scenario.gql.d.ts +34 -34
  201. package/lib/scenario/scenario.service.d.ts +58 -58
  202. package/lib/scenario/scenario.types.d.ts +217 -217
  203. package/lib/search/search.gql.d.ts +1 -1
  204. package/lib/search/search.service.d.ts +25 -25
  205. package/lib/search/search.types.d.ts +20 -20
  206. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
  207. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
  208. package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
  209. package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -218
  210. package/lib/trusted-parties/tp-password-reset.service.d.ts +130 -130
  211. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
  212. package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
  213. package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
  214. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
  215. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
  216. package/lib/users/profile-details.service.d.ts +21 -21
  217. package/lib/users/profile.gql.d.ts +11 -11
  218. package/lib/users/profile.service.d.ts +35 -35
  219. package/lib/users/profile.types.d.ts +96 -96
  220. package/lib/users/user.gql.d.ts +9 -9
  221. package/lib/users/user.service.d.ts +12 -12
  222. package/lib/users/user.types.d.ts +23 -23
  223. package/lifeready-core.d.ts +9 -9
  224. package/package.json +1 -1
  225. package/public-api.d.ts +77 -77
@@ -1,172 +1,172 @@
1
- import { __awaiter } from "tslib";
2
- import { HttpClient } from '@angular/common/http';
3
- import { Inject, Injectable } from '@angular/core';
4
- import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
5
- import { EncryptionService } from '../cryptography/encryption.service';
6
- import { KeyFactoryService } from '../cryptography/key-factory.service';
7
- import { LR_CONFIG } from '../life-ready.config';
8
- import { PasswordService } from './password.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../life-ready.config";
11
- import * as i2 from "@aws-amplify/auth/lib-esm/Auth";
12
- import * as i3 from "@angular/common/http";
13
- import * as i4 from "../cryptography/key-factory.service";
14
- import * as i5 from "../cryptography/encryption.service";
15
- import * as i6 from "./password.service";
16
- export class RegisterService {
17
- constructor(config, auth, http, keyFactory, encryptionService, passwordService) {
18
- this.config = config;
19
- this.auth = auth;
20
- this.http = http;
21
- this.keyFactory = keyFactory;
22
- this.encryptionService = encryptionService;
23
- this.passwordService = passwordService;
24
- }
25
- /**
26
- * Request a verification code to be sent out to an email.
27
- * @return Info needed to be submitted along with the verification code
28
- */
29
- verifyEmail(email) {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- const { claim_id } = yield this.http
32
- .post(`${this.config.authUrl}cove/claim/email/`, {
33
- address: email,
34
- context: 'signup',
35
- })
36
- .toPromise();
37
- return claim_id;
38
- });
39
- }
40
- verifyPhone(phoneNumber) {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- const { claim_id } = yield this.http
43
- .post(`${this.config.authUrl}cove/claim/sms/`, {
44
- address: phoneNumber,
45
- context: 'signup',
46
- })
47
- .toPromise();
48
- return claim_id;
49
- });
50
- }
51
- confirmVerificationCode(verificationId, verificationCode) {
52
- return __awaiter(this, void 0, void 0, function* () {
53
- const { token } = yield this.http
54
- .post(`${this.config.authUrl}cove/respond/`, {
55
- claim_id: verificationId,
56
- v_code: verificationCode,
57
- })
58
- .toPromise();
59
- return token;
60
- });
61
- }
62
- register(email, password, verificationId, verificationToken, verificationType = 'email') {
63
- return __awaiter(this, void 0, void 0, function* () {
64
- // Generate the key material needed for PassIdp which will be the password used for Cognito.
65
- const passKeyBundle = yield this.passwordService.createPassKeyBundle(password);
66
- const masterKey = yield this.keyFactory.createKey();
67
- const wrappedMasterKey = yield this.encryptionService.encrypt(passKeyBundle.passKey, masterKey.toJSON(true));
68
- const rootKey = yield this.keyFactory.createKey();
69
- const wrappedRootKey = yield this.encryptionService.encrypt(masterKey, rootKey.toJSON(true));
70
- // Encryption PKC key
71
- const prk = yield this.keyFactory.createPkcKey();
72
- const wrappedPrk = yield this.encryptionService.encrypt(rootKey, prk.toJSON(true));
73
- // Signing PKC key
74
- const sigPrk = yield this.keyFactory.createPkcSignKey();
75
- const wrappedSigPrk = yield this.encryptionService.encrypt(rootKey, sigPrk.toJSON(true));
76
- // API call to setup profile
77
- const user = yield this.http
78
- .post(`${this.config.authUrl}users/`, {
79
- claims: [
80
- {
81
- type: verificationType,
82
- token: verificationToken,
83
- claim_id: verificationId,
84
- },
85
- ],
86
- pass_idp_params: passKeyBundle.passIdpParams,
87
- pass_idp_verifier_pbk: passKeyBundle.passIdpVerifier.toJSON(),
88
- wrapped_pass_idp_verifier_prk: passKeyBundle.wrappedPassIdpVerifierPrk,
89
- pass_key_params: passKeyBundle.passKeyParams,
90
- wrapped_master_key: wrappedMasterKey,
91
- wrapped_root_key: wrappedRootKey,
92
- pbk: prk.toJSON(),
93
- wrapped_prk: wrappedPrk,
94
- sig_pbk: sigPrk.toJSON(),
95
- wrapped_sig_prk: wrappedSigPrk,
96
- })
97
- .toPromise();
98
- // API call to create user on cognito
99
- const attributes = {};
100
- user.claims.forEach((claim) => {
101
- attributes[claim.type] = claim.value;
102
- });
103
- // Random suffix for uniqueness. If there's a duplicate, then used just needs to
104
- // sign up again. But chances of collision is low.
105
- const suffix = this.keyFactory.randomDigitsNoZeros(4);
106
- const cognitoUser = yield this.auth.signUp({
107
- username: `${email.split('@')[0]}.${suffix}`,
108
- password: this.passwordService.getPassIdpString(passKeyBundle.passIdp),
109
- attributes,
110
- // Unfortunately, validationData is not passed to the post
111
- // confirmation cognito trigger. So can can't do the association there.
112
- // The current workflow will create a new user on LR before signing up
113
- // with Cognito. Then Cognito can use the user.id and user.pre_sign_up_token to
114
- // do the validation of the attributes.
115
- // validationData: [
116
- // new CognitoUserAttribute({
117
- // Name: "user_id",
118
- // Value: String(user.id)
119
- // }),
120
- // new CognitoUserAttribute({
121
- // Name: "user_pre_sign_up_token",
122
- // Value: user.pre_sign_up_token
123
- // })
124
- // ]
125
- clientMetadata: {
126
- user_id: String(user.id),
127
- user_pre_sign_up_token: String(user.pre_sign_up_token),
128
- },
129
- });
130
- return {
131
- username: cognitoUser.user.getUsername(),
132
- userId: user.id,
133
- preSignUpToken: user.pre_sign_up_token,
134
- userSub: cognitoUser.userSub,
135
- };
136
- });
137
- }
138
- hibpBreachedAccounts(account) {
139
- return __awaiter(this, void 0, void 0, function* () {
140
- // The account is just the email
141
- try {
142
- const response = yield this.http
143
- .get(`${this.config.authUrl}users/hibp/breachedaccount/${account}/?truncateResponse=false`)
144
- .toPromise();
145
- return response;
146
- }
147
- catch (error) {
148
- if (error.status === 404) {
149
- return null;
150
- }
151
- else {
152
- throw error;
153
- }
154
- }
155
- });
156
- }
157
- }
158
- RegisterService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RegisterService_Factory() { return new RegisterService(i0.ɵɵinject(i1.LR_CONFIG), i0.ɵɵinject(i2.AuthClass), i0.ɵɵinject(i3.HttpClient), i0.ɵɵinject(i4.KeyFactoryService), i0.ɵɵinject(i5.EncryptionService), i0.ɵɵinject(i6.PasswordService)); }, token: RegisterService, providedIn: "root" });
159
- RegisterService.decorators = [
160
- { type: Injectable, args: [{
161
- providedIn: 'root',
162
- },] }
163
- ];
164
- RegisterService.ctorParameters = () => [
165
- { type: undefined, decorators: [{ type: Inject, args: [LR_CONFIG,] }] },
166
- { type: AuthClass },
167
- { type: HttpClient },
168
- { type: KeyFactoryService },
169
- { type: EncryptionService },
170
- { type: PasswordService }
171
- ];
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9uZXdyZXBvL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hdXRoL3JlZ2lzdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7O0FBTXJELE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQzZCLE1BQXVCLEVBQzFDLElBQWUsRUFDZixJQUFnQixFQUNoQixVQUE2QixFQUM3QixpQkFBb0MsRUFDcEMsZUFBZ0M7UUFMYixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUMxQyxTQUFJLEdBQUosSUFBSSxDQUFXO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUN2QyxDQUFDO0lBRUo7OztPQUdHO0lBQ1UsV0FBVyxDQUFDLEtBQWE7O1lBQ3BDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJO2lCQUNqQyxJQUFJLENBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sbUJB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ICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoQ2xhc3MgfSBmcm9tICdAYXdzLWFtcGxpZnkvYXV0aC9saWItZXNtL0F1dGgnO1xyXG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9lbmNyeXB0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZmFjdG9yeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGlmZVJlYWR5Q29uZmlnLCBMUl9DT05GSUcgfSBmcm9tICcuLi9saWZlLXJlYWR5LmNvbmZpZyc7XHJcbmltcG9ydCB7IFBhc3N3b3JkU2VydmljZSB9IGZyb20gJy4vcGFzc3dvcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyUmVzdWx0IH0gZnJvbSAnLi9hdXRoLnR5cGVzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RlclNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChMUl9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBMaWZlUmVhZHlDb25maWcsXHJcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhDbGFzcyxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcGFzc3dvcmRTZXJ2aWNlOiBQYXNzd29yZFNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlcXVlc3QgYSB2ZXJpZmljYXRpb24gY29kZSB0byBiZSBzZW50IG91dCB0byBhbiBlbWFpbC5cclxuICAgKiBAcmV0dXJuIEluZm8gbmVlZGVkIHRvIGJlIHN1Ym1pdHRlZCBhbG9uZyB3aXRoIHRoZSB2ZXJpZmljYXRpb24gY29kZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHsgY2xhaW1faWQgfSA9IGF3YWl0IHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDx7IGNsYWltX2lkIH0+KGAke3RoaXMuY29uZmlnLmF1dGhVcmx9Y292ZS9jbGFpbS9lbWFpbC9gLCB7XHJcbiAgICAgICAgYWRkcmVzczogZW1haWwsXHJcbiAgICAgICAgY29udGV4dDogJ3NpZ251cCcsXHJcbiAgICAgIH0pXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIHJldHVybiBjbGFpbV9pZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnlQaG9uZShwaG9uZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHsgY2xhaW1faWQgfSA9IGF3YWl0IHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDx7IGNsYWltX2lkIH0+KGAke3RoaXMuY29uZmlnLmF1dGhVcmx9Y292ZS9jbGFpbS9zbXMvYCwge1xyXG4gICAgICAgIGFkZHJlc3M6IHBob25lTnVtYmVyLFxyXG4gICAgICAgIGNvbnRleHQ6ICdzaWdudXAnLFxyXG4gICAgICB9KVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICByZXR1cm4gY2xhaW1faWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY29uZmlybVZlcmlmaWNhdGlvbkNvZGUoXHJcbiAgICB2ZXJpZmljYXRpb25JZDogc3RyaW5nLFxyXG4gICAgdmVyaWZpY2F0aW9uQ29kZTogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHsgdG9rZW4gfSA9IGF3YWl0IHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDx7IHRva2VuIH0+KGAke3RoaXMuY29uZmlnLmF1dGhVcmx9Y292ZS9yZXNwb25kL2AsIHtcclxuICAgICAgICBjbGFpbV9pZDogdmVyaWZpY2F0aW9uSWQsXHJcbiAgICAgICAgdl9jb2RlOiB2ZXJpZmljYXRpb25Db2RlLFxyXG4gICAgICB9KVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICByZXR1cm4gdG9rZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIoXHJcbiAgICBlbWFpbDogc3RyaW5nLFxyXG4gICAgcGFzc3dvcmQ6IHN0cmluZyxcclxuICAgIHZlcmlmaWNhdGlvbklkOiBzdHJpbmcsXHJcbiAgICB2ZXJpZmljYXRpb25Ub2tlbjogc3RyaW5nLFxyXG4gICAgdmVyaWZpY2F0aW9uVHlwZTogJ2VtYWlsJyB8ICdwaG9uZScgPSAnZW1haWwnXHJcbiAgKTogUHJvbWlzZTxSZWdpc3RlclJlc3VsdD4ge1xyXG4gICAgLy8gR2VuZXJhdGUgdGhlIGtleSBtYXRlcmlhbCBuZWVkZWQgZm9yIFBhc3NJZHAgd2hpY2ggd2lsbCBiZSB0aGUgcGFzc3dvcmQgdXNlZCBmb3IgQ29nbml0by5cclxuICAgIGNvbnN0IHBhc3NLZXlCdW5kbGUgPSBhd2FpdCB0aGlzLnBhc3N3b3JkU2VydmljZS5jcmVhdGVQYXNzS2V5QnVuZGxlKFxyXG4gICAgICBwYXNzd29yZFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XHJcbiAgICBjb25zdCB3cmFwcGVkTWFzdGVyS2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxyXG4gICAgICBwYXNzS2V5QnVuZGxlLnBhc3NLZXksXHJcbiAgICAgIG1hc3RlcktleS50b0pTT04odHJ1ZSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgcm9vdEtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcclxuICAgIGNvbnN0IHdyYXBwZWRSb290S2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxyXG4gICAgICBtYXN0ZXJLZXksXHJcbiAgICAgIHJvb3RLZXkudG9KU09OKHRydWUpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEVuY3J5cHRpb24gUEtDIGtleVxyXG4gICAgY29uc3QgcHJrID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZVBrY0tleSgpO1xyXG4gICAgY29uc3Qgd3JhcHBlZFByayA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcclxuICAgICAgcm9vdEtleSxcclxuICAgICAgcHJrLnRvSlNPTih0cnVlKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBTaWduaW5nIFBLQyBrZXlcclxuICAgIGNvbnN0IHNpZ1ByayA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVQa2NTaWduS2V5KCk7XHJcbiAgICBjb25zdCB3cmFwcGVkU2lnUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxyXG4gICAgICByb290S2V5LFxyXG4gICAgICBzaWdQcmsudG9KU09OKHRydWUpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEFQSSBjYWxsIHRvIHNldHVwIHByb2ZpbGVcclxuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8YW55PihgJHt0aGlzLmNvbmZpZy5hdXRoVXJsfXVzZXJzL2AsIHtcclxuICAgICAgICBjbGFpbXM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogdmVyaWZpY2F0aW9uVHlwZSxcclxuICAgICAgICAgICAgdG9rZW46IHZlcmlmaWNhdGlvblRva2VuLFxyXG4gICAgICAgICAgICBjbGFpbV9pZDogdmVyaWZpY2F0aW9uSWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcGFzc19pZHBfcGFyYW1zOiBwYXNzS2V5QnVuZGxlLnBhc3NJZHBQYXJhbXMsXHJcbiAgICAgICAgcGFzc19pZHBfdmVyaWZpZXJfcGJrOiBwYXNzS2V5QnVuZGxlLnBhc3NJZHBWZXJpZmllci50b0pTT04oKSxcclxuICAgICAgICB3cmFwcGVkX3Bhc3NfaWRwX3ZlcmlmaWVyX3ByazogcGFzc0tleUJ1bmRsZS53cmFwcGVkUGFzc0lkcFZlcmlmaWVyUHJrLFxyXG4gICAgICAgIHBhc3Nfa2V5X3BhcmFtczogcGFzc0tleUJ1bmRsZS5wYXNzS2V5UGFyYW1zLFxyXG4gICAgICAgIHdyYXBwZWRfbWFzdGVyX2tleTogd3JhcHBlZE1hc3RlcktleSxcclxuICAgICAgICB3cmFwcGVkX3Jvb3Rfa2V5OiB3cmFwcGVkUm9vdEtleSxcclxuICAgICAgICBwYms6IHByay50b0pTT04oKSwgLy8gcHVibGljIGVuY3J5cHRpb24ga2V5XHJcbiAgICAgICAgd3JhcHBlZF9wcms6IHdyYXBwZWRQcmssXHJcbiAgICAgICAgc2lnX3Biazogc2lnUHJrLnRvSlNPTigpLCAvLyBwdWJsaWMgc2lnbmluZyBrZXlcclxuICAgICAgICB3cmFwcGVkX3NpZ19wcms6IHdyYXBwZWRTaWdQcmssXHJcbiAgICAgIH0pXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuXHJcbiAgICAvLyBBUEkgY2FsbCB0byBjcmVhdGUgdXNlciBvbiBjb2duaXRvXHJcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XHJcbiAgICB1c2VyLmNsYWltcy5mb3JFYWNoKChjbGFpbSkgPT4ge1xyXG4gICAgICBhdHRyaWJ1dGVzW2NsYWltLnR5cGVdID0gY2xhaW0udmFsdWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSYW5kb20gc3VmZml4IGZvciB1bmlxdWVuZXNzLiBJZiB0aGVyZSdzIGEgZHVwbGljYXRlLCB0aGVuIHVzZWQganVzdCBuZWVkcyB0b1xyXG4gICAgLy8gc2lnbiB1cCBhZ2Fpbi4gQnV0IGNoYW5jZXMgb2YgY29sbGlzaW9uIGlzIGxvdy5cclxuICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMua2V5RmFjdG9yeS5yYW5kb21EaWdpdHNOb1plcm9zKDQpO1xyXG5cclxuICAgIGNvbnN0IGNvZ25pdG9Vc2VyID0gYXdhaXQgdGhpcy5hdXRoLnNpZ25VcCh7XHJcbiAgICAgIHVzZXJuYW1lOiBgJHtlbWFpbC5zcGxpdCgnQCcpWzBdfS4ke3N1ZmZpeH1gLFxyXG4gICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZFNlcnZpY2UuZ2V0UGFzc0lkcFN0cmluZyhwYXNzS2V5QnVuZGxlLnBhc3NJZHApLFxyXG4gICAgICBhdHRyaWJ1dGVzLFxyXG4gICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB2YWxpZGF0aW9uRGF0YSBpcyBub3QgcGFzc2VkIHRvIHRoZSBwb3N0XHJcbiAgICAgIC8vIGNvbmZpcm1hdGlvbiBjb2duaXRvIHRyaWdnZXIuIFNvIGNhbiBjYW4ndCBkbyB0aGUgYXNzb2NpYXRpb24gdGhlcmUuXHJcbiAgICAgIC8vIFRoZSBjdXJyZW50IHdvcmtmbG93IHdpbGwgY3JlYXRlIGEgbmV3IHVzZXIgb24gTFIgYmVmb3JlIHNpZ25pbmcgdXBcclxuICAgICAgLy8gd2l0aCBDb2duaXRvLiBUaGVuIENvZ25pdG8gY2FuIHVzZSB0aGUgdXNlci5pZCBhbmQgdXNlci5wcmVfc2lnbl91cF90b2tlbiB0b1xyXG4gICAgICAvLyBkbyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgYXR0cmlidXRlcy5cclxuICAgICAgLy8gdmFsaWRhdGlvbkRhdGE6IFtcclxuICAgICAgLy8gICBuZXcgQ29nbml0b1VzZXJBdHRyaWJ1dGUoe1xyXG4gICAgICAvLyAgICAgTmFtZTogXCJ1c2VyX2lkXCIsXHJcbiAgICAgIC8vICAgICBWYWx1ZTogU3RyaW5nKHVzZXIuaWQpXHJcbiAgICAgIC8vICAgfSksXHJcbiAgICAgIC8vICAgbmV3IENvZ25pdG9Vc2VyQXR0cmlidXRlKHtcclxuICAgICAgLy8gICAgIE5hbWU6IFwidXNlcl9wcmVfc2lnbl91cF90b2tlblwiLFxyXG4gICAgICAvLyAgICAgVmFsdWU6IHVzZXIucHJlX3NpZ25fdXBfdG9rZW5cclxuICAgICAgLy8gICB9KVxyXG4gICAgICAvLyBdXHJcbiAgICAgIGNsaWVudE1ldGFkYXRhOiB7XHJcbiAgICAgICAgdXNlcl9pZDogU3RyaW5nKHVzZXIuaWQpLFxyXG4gICAgICAgIHVzZXJfcHJlX3NpZ25fdXBfdG9rZW46IFN0cmluZyh1c2VyLnByZV9zaWduX3VwX3Rva2VuKSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHVzZXJuYW1lOiBjb2duaXRvVXNlci51c2VyLmdldFVzZXJuYW1lKCksXHJcbiAgICAgIHVzZXJJZDogdXNlci5pZCxcclxuICAgICAgcHJlU2lnblVwVG9rZW46IHVzZXIucHJlX3NpZ25fdXBfdG9rZW4sXHJcbiAgICAgIHVzZXJTdWI6IGNvZ25pdG9Vc2VyLnVzZXJTdWIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhpYnBCcmVhY2hlZEFjY291bnRzKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAvLyBUaGUgYWNjb3VudCBpcyBqdXN0IHRoZSBlbWFpbFxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBcclxuICAgICAgICAuZ2V0KFxyXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcuYXV0aFVybH11c2Vycy9oaWJwL2JyZWFjaGVkYWNjb3VudC8ke2FjY291bnR9Lz90cnVuY2F0ZVJlc3BvbnNlPWZhbHNlYFxyXG4gICAgICAgIClcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ import { __awaiter } from "tslib";
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Inject, Injectable } from '@angular/core';
4
+ import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
5
+ import { EncryptionService } from '../cryptography/encryption.service';
6
+ import { KeyFactoryService } from '../cryptography/key-factory.service';
7
+ import { LR_CONFIG } from '../life-ready.config';
8
+ import { PasswordService } from './password.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../life-ready.config";
11
+ import * as i2 from "@aws-amplify/auth/lib-esm/Auth";
12
+ import * as i3 from "@angular/common/http";
13
+ import * as i4 from "../cryptography/key-factory.service";
14
+ import * as i5 from "../cryptography/encryption.service";
15
+ import * as i6 from "./password.service";
16
+ export class RegisterService {
17
+ constructor(config, auth, http, keyFactory, encryptionService, passwordService) {
18
+ this.config = config;
19
+ this.auth = auth;
20
+ this.http = http;
21
+ this.keyFactory = keyFactory;
22
+ this.encryptionService = encryptionService;
23
+ this.passwordService = passwordService;
24
+ }
25
+ /**
26
+ * Request a verification code to be sent out to an email.
27
+ * @return Info needed to be submitted along with the verification code
28
+ */
29
+ verifyEmail(email) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ const { claim_id } = yield this.http
32
+ .post(`${this.config.authUrl}cove/claim/email/`, {
33
+ address: email,
34
+ context: 'signup',
35
+ })
36
+ .toPromise();
37
+ return claim_id;
38
+ });
39
+ }
40
+ verifyPhone(phoneNumber) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const { claim_id } = yield this.http
43
+ .post(`${this.config.authUrl}cove/claim/sms/`, {
44
+ address: phoneNumber,
45
+ context: 'signup',
46
+ })
47
+ .toPromise();
48
+ return claim_id;
49
+ });
50
+ }
51
+ confirmVerificationCode(verificationId, verificationCode) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const { token } = yield this.http
54
+ .post(`${this.config.authUrl}cove/respond/`, {
55
+ claim_id: verificationId,
56
+ v_code: verificationCode,
57
+ })
58
+ .toPromise();
59
+ return token;
60
+ });
61
+ }
62
+ register(email, password, verificationId, verificationToken, verificationType = 'email') {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ // Generate the key material needed for PassIdp which will be the password used for Cognito.
65
+ const passKeyBundle = yield this.passwordService.createPassKeyBundle(password);
66
+ const masterKey = yield this.keyFactory.createKey();
67
+ const wrappedMasterKey = yield this.encryptionService.encrypt(passKeyBundle.passKey, masterKey.toJSON(true));
68
+ const rootKey = yield this.keyFactory.createKey();
69
+ const wrappedRootKey = yield this.encryptionService.encrypt(masterKey, rootKey.toJSON(true));
70
+ // Encryption PKC key
71
+ const prk = yield this.keyFactory.createPkcKey();
72
+ const wrappedPrk = yield this.encryptionService.encrypt(rootKey, prk.toJSON(true));
73
+ // Signing PKC key
74
+ const sigPrk = yield this.keyFactory.createPkcSignKey();
75
+ const wrappedSigPrk = yield this.encryptionService.encrypt(rootKey, sigPrk.toJSON(true));
76
+ // API call to setup profile
77
+ const user = yield this.http
78
+ .post(`${this.config.authUrl}users/`, {
79
+ claims: [
80
+ {
81
+ type: verificationType,
82
+ token: verificationToken,
83
+ claim_id: verificationId,
84
+ },
85
+ ],
86
+ pass_idp_params: passKeyBundle.passIdpParams,
87
+ pass_idp_verifier_pbk: passKeyBundle.passIdpVerifier.toJSON(),
88
+ wrapped_pass_idp_verifier_prk: passKeyBundle.wrappedPassIdpVerifierPrk,
89
+ pass_key_params: passKeyBundle.passKeyParams,
90
+ wrapped_master_key: wrappedMasterKey,
91
+ wrapped_root_key: wrappedRootKey,
92
+ pbk: prk.toJSON(),
93
+ wrapped_prk: wrappedPrk,
94
+ sig_pbk: sigPrk.toJSON(),
95
+ wrapped_sig_prk: wrappedSigPrk,
96
+ })
97
+ .toPromise();
98
+ // API call to create user on cognito
99
+ const attributes = {};
100
+ user.claims.forEach((claim) => {
101
+ attributes[claim.type] = claim.value;
102
+ });
103
+ // Random suffix for uniqueness. If there's a duplicate, then used just needs to
104
+ // sign up again. But chances of collision is low.
105
+ const suffix = this.keyFactory.randomDigitsNoZeros(4);
106
+ const cognitoUser = yield this.auth.signUp({
107
+ username: `${email.split('@')[0]}.${suffix}`,
108
+ password: this.passwordService.getPassIdpString(passKeyBundle.passIdp),
109
+ attributes,
110
+ // Unfortunately, validationData is not passed to the post
111
+ // confirmation cognito trigger. So can can't do the association there.
112
+ // The current workflow will create a new user on LR before signing up
113
+ // with Cognito. Then Cognito can use the user.id and user.pre_sign_up_token to
114
+ // do the validation of the attributes.
115
+ // validationData: [
116
+ // new CognitoUserAttribute({
117
+ // Name: "user_id",
118
+ // Value: String(user.id)
119
+ // }),
120
+ // new CognitoUserAttribute({
121
+ // Name: "user_pre_sign_up_token",
122
+ // Value: user.pre_sign_up_token
123
+ // })
124
+ // ]
125
+ clientMetadata: {
126
+ user_id: String(user.id),
127
+ user_pre_sign_up_token: String(user.pre_sign_up_token),
128
+ },
129
+ });
130
+ return {
131
+ username: cognitoUser.user.getUsername(),
132
+ userId: user.id,
133
+ preSignUpToken: user.pre_sign_up_token,
134
+ userSub: cognitoUser.userSub,
135
+ };
136
+ });
137
+ }
138
+ hibpBreachedAccounts(account) {
139
+ return __awaiter(this, void 0, void 0, function* () {
140
+ // The account is just the email
141
+ try {
142
+ const response = yield this.http
143
+ .get(`${this.config.authUrl}users/hibp/breachedaccount/${account}/?truncateResponse=false`)
144
+ .toPromise();
145
+ return response;
146
+ }
147
+ catch (error) {
148
+ if (error.status === 404) {
149
+ return null;
150
+ }
151
+ else {
152
+ throw error;
153
+ }
154
+ }
155
+ });
156
+ }
157
+ }
158
+ RegisterService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RegisterService_Factory() { return new RegisterService(i0.ɵɵinject(i1.LR_CONFIG), i0.ɵɵinject(i2.AuthClass), i0.ɵɵinject(i3.HttpClient), i0.ɵɵinject(i4.KeyFactoryService), i0.ɵɵinject(i5.EncryptionService), i0.ɵɵinject(i6.PasswordService)); }, token: RegisterService, providedIn: "root" });
159
+ RegisterService.decorators = [
160
+ { type: Injectable, args: [{
161
+ providedIn: 'root',
162
+ },] }
163
+ ];
164
+ RegisterService.ctorParameters = () => [
165
+ { type: undefined, decorators: [{ type: Inject, args: [LR_CONFIG,] }] },
166
+ { type: AuthClass },
167
+ { type: HttpClient },
168
+ { type: KeyFactoryService },
169
+ { type: EncryptionService },
170
+ { type: PasswordService }
171
+ ];
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvYXV0aC9yZWdpc3Rlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7OztBQU1yRCxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUM2QixNQUF1QixFQUMxQyxJQUFlLEVBQ2YsSUFBZ0IsRUFDaEIsVUFBNkIsRUFDN0IsaUJBQW9DLEVBQ3BDLGVBQWdDO1FBTGIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDMUMsU0FBSSxHQUFKLElBQUksQ0FBVztRQUNmLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDdkMsQ0FBQztJQUVKOzs7T0FHRztJQUNVLFdBQVcsQ0FBQyxLQUFhOztZQUNwQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSTtpQkFDakMsSUFBSSxDQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxP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IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoQ2xhc3MgfSBmcm9tICdAYXdzLWFtcGxpZnkvYXV0aC9saWItZXNtL0F1dGgnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGlmZVJlYWR5Q29uZmlnLCBMUl9DT05GSUcgfSBmcm9tICcuLi9saWZlLXJlYWR5LmNvbmZpZyc7XG5pbXBvcnQgeyBQYXNzd29yZFNlcnZpY2UgfSBmcm9tICcuL3Bhc3N3b3JkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVnaXN0ZXJSZXN1bHQgfSBmcm9tICcuL2F1dGgudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMUl9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBMaWZlUmVhZHlDb25maWcsXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoQ2xhc3MsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXNzd29yZFNlcnZpY2U6IFBhc3N3b3JkU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSB2ZXJpZmljYXRpb24gY29kZSB0byBiZSBzZW50IG91dCB0byBhbiBlbWFpbC5cbiAgICogQHJldHVybiBJbmZvIG5lZWRlZCB0byBiZSBzdWJtaXR0ZWQgYWxvbmcgd2l0aCB0aGUgdmVyaWZpY2F0aW9uIGNvZGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IGNsYWltX2lkIH0gPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgY2xhaW1faWQgfT4oYCR7dGhpcy5jb25maWcuYXV0aFVybH1jb3ZlL2NsYWltL2VtYWlsL2AsIHtcbiAgICAgICAgYWRkcmVzczogZW1haWwsXG4gICAgICAgIGNvbnRleHQ6ICdzaWdudXAnLFxuICAgICAgfSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgICByZXR1cm4gY2xhaW1faWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5UGhvbmUocGhvbmVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyBjbGFpbV9pZCB9ID0gYXdhaXQgdGhpcy5odHRwXG4gICAgICAucG9zdDx7IGNsYWltX2lkIH0+KGAke3RoaXMuY29uZmlnLmF1dGhVcmx9Y292ZS9jbGFpbS9zbXMvYCwge1xuICAgICAgICBhZGRyZXNzOiBwaG9uZU51bWJlcixcbiAgICAgICAgY29udGV4dDogJ3NpZ251cCcsXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIHJldHVybiBjbGFpbV9pZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb25maXJtVmVyaWZpY2F0aW9uQ29kZShcbiAgICB2ZXJpZmljYXRpb25JZDogc3RyaW5nLFxuICAgIHZlcmlmaWNhdGlvbkNvZGU6IHN0cmluZ1xuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdG9rZW4gfSA9IGF3YWl0IHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyB0b2tlbiB9PihgJHt0aGlzLmNvbmZpZy5hdXRoVXJsfWNvdmUvcmVzcG9uZC9gLCB7XG4gICAgICAgIGNsYWltX2lkOiB2ZXJpZmljYXRpb25JZCxcbiAgICAgICAgdl9jb2RlOiB2ZXJpZmljYXRpb25Db2RlLFxuICAgICAgfSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIoXG4gICAgZW1haWw6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgIHZlcmlmaWNhdGlvbklkOiBzdHJpbmcsXG4gICAgdmVyaWZpY2F0aW9uVG9rZW46IHN0cmluZyxcbiAgICB2ZXJpZmljYXRpb25UeXBlOiAnZW1haWwnIHwgJ3Bob25lJyA9ICdlbWFpbCdcbiAgKTogUHJvbWlzZTxSZWdpc3RlclJlc3VsdD4ge1xuICAgIC8vIEdlbmVyYXRlIHRoZSBrZXkgbWF0ZXJpYWwgbmVlZGVkIGZvciBQYXNzSWRwIHdoaWNoIHdpbGwgYmUgdGhlIHBhc3N3b3JkIHVzZWQgZm9yIENvZ25pdG8uXG4gICAgY29uc3QgcGFzc0tleUJ1bmRsZSA9IGF3YWl0IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmNyZWF0ZVBhc3NLZXlCdW5kbGUoXG4gICAgICBwYXNzd29yZFxuICAgICk7XG5cbiAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XG4gICAgY29uc3Qgd3JhcHBlZE1hc3RlcktleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcbiAgICAgIHBhc3NLZXlCdW5kbGUucGFzc0tleSxcbiAgICAgIG1hc3RlcktleS50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgY29uc3Qgcm9vdEtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcbiAgICBjb25zdCB3cmFwcGVkUm9vdEtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcbiAgICAgIG1hc3RlcktleSxcbiAgICAgIHJvb3RLZXkudG9KU09OKHRydWUpXG4gICAgKTtcblxuICAgIC8vIEVuY3J5cHRpb24gUEtDIGtleVxuICAgIGNvbnN0IHByayA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVQa2NLZXkoKTtcbiAgICBjb25zdCB3cmFwcGVkUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxuICAgICAgcm9vdEtleSxcbiAgICAgIHByay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgLy8gU2lnbmluZyBQS0Mga2V5XG4gICAgY29uc3Qgc2lnUHJrID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZVBrY1NpZ25LZXkoKTtcbiAgICBjb25zdCB3cmFwcGVkU2lnUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxuICAgICAgcm9vdEtleSxcbiAgICAgIHNpZ1Byay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgLy8gQVBJIGNhbGwgdG8gc2V0dXAgcHJvZmlsZVxuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PGFueT4oYCR7dGhpcy5jb25maWcuYXV0aFVybH11c2Vycy9gLCB7XG4gICAgICAgIGNsYWltczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IHZlcmlmaWNhdGlvblR5cGUsXG4gICAgICAgICAgICB0b2tlbjogdmVyaWZpY2F0aW9uVG9rZW4sXG4gICAgICAgICAgICBjbGFpbV9pZDogdmVyaWZpY2F0aW9uSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFzc19pZHBfcGFyYW1zOiBwYXNzS2V5QnVuZGxlLnBhc3NJZHBQYXJhbXMsXG4gICAgICAgIHBhc3NfaWRwX3ZlcmlmaWVyX3BiazogcGFzc0tleUJ1bmRsZS5wYXNzSWRwVmVyaWZpZXIudG9KU09OKCksXG4gICAgICAgIHdyYXBwZWRfcGFzc19pZHBfdmVyaWZpZXJfcHJrOiBwYXNzS2V5QnVuZGxlLndyYXBwZWRQYXNzSWRwVmVyaWZpZXJQcmssXG4gICAgICAgIHBhc3Nfa2V5X3BhcmFtczogcGFzc0tleUJ1bmRsZS5wYXNzS2V5UGFyYW1zLFxuICAgICAgICB3cmFwcGVkX21hc3Rlcl9rZXk6IHdyYXBwZWRNYXN0ZXJLZXksXG4gICAgICAgIHdyYXBwZWRfcm9vdF9rZXk6IHdyYXBwZWRSb290S2V5LFxuICAgICAgICBwYms6IHByay50b0pTT04oKSwgLy8gcHVibGljIGVuY3J5cHRpb24ga2V5XG4gICAgICAgIHdyYXBwZWRfcHJrOiB3cmFwcGVkUHJrLFxuICAgICAgICBzaWdfcGJrOiBzaWdQcmsudG9KU09OKCksIC8vIHB1YmxpYyBzaWduaW5nIGtleVxuICAgICAgICB3cmFwcGVkX3NpZ19wcms6IHdyYXBwZWRTaWdQcmssXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgLy8gQVBJIGNhbGwgdG8gY3JlYXRlIHVzZXIgb24gY29nbml0b1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICB1c2VyLmNsYWltcy5mb3JFYWNoKChjbGFpbSkgPT4ge1xuICAgICAgYXR0cmlidXRlc1tjbGFpbS50eXBlXSA9IGNsYWltLnZhbHVlO1xuICAgIH0pO1xuXG4gICAgLy8gUmFuZG9tIHN1ZmZpeCBmb3IgdW5pcXVlbmVzcy4gSWYgdGhlcmUncyBhIGR1cGxpY2F0ZSwgdGhlbiB1c2VkIGp1c3QgbmVlZHMgdG9cbiAgICAvLyBzaWduIHVwIGFnYWluLiBCdXQgY2hhbmNlcyBvZiBjb2xsaXNpb24gaXMgbG93LlxuICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMua2V5RmFjdG9yeS5yYW5kb21EaWdpdHNOb1plcm9zKDQpO1xuXG4gICAgY29uc3QgY29nbml0b1VzZXIgPSBhd2FpdCB0aGlzLmF1dGguc2lnblVwKHtcbiAgICAgIHVzZXJuYW1lOiBgJHtlbWFpbC5zcGxpdCgnQCcpWzBdfS4ke3N1ZmZpeH1gLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmdldFBhc3NJZHBTdHJpbmcocGFzc0tleUJ1bmRsZS5wYXNzSWRwKSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB2YWxpZGF0aW9uRGF0YSBpcyBub3QgcGFzc2VkIHRvIHRoZSBwb3N0XG4gICAgICAvLyBjb25maXJtYXRpb24gY29nbml0byB0cmlnZ2VyLiBTbyBjYW4gY2FuJ3QgZG8gdGhlIGFzc29jaWF0aW9uIHRoZXJlLlxuICAgICAgLy8gVGhlIGN1cnJlbnQgd29ya2Zsb3cgd2lsbCBjcmVhdGUgYSBuZXcgdXNlciBvbiBMUiBiZWZvcmUgc2lnbmluZyB1cFxuICAgICAgLy8gd2l0aCBDb2duaXRvLiBUaGVuIENvZ25pdG8gY2FuIHVzZSB0aGUgdXNlci5pZCBhbmQgdXNlci5wcmVfc2lnbl91cF90b2tlbiB0b1xuICAgICAgLy8gZG8gdGhlIHZhbGlkYXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMuXG4gICAgICAvLyB2YWxpZGF0aW9uRGF0YTogW1xuICAgICAgLy8gICBuZXcgQ29nbml0b1VzZXJBdHRyaWJ1dGUoe1xuICAgICAgLy8gICAgIE5hbWU6IFwidXNlcl9pZFwiLFxuICAgICAgLy8gICAgIFZhbHVlOiBTdHJpbmcodXNlci5pZClcbiAgICAgIC8vICAgfSksXG4gICAgICAvLyAgIG5ldyBDb2duaXRvVXNlckF0dHJpYnV0ZSh7XG4gICAgICAvLyAgICAgTmFtZTogXCJ1c2VyX3ByZV9zaWduX3VwX3Rva2VuXCIsXG4gICAgICAvLyAgICAgVmFsdWU6IHVzZXIucHJlX3NpZ25fdXBfdG9rZW5cbiAgICAgIC8vICAgfSlcbiAgICAgIC8vIF1cbiAgICAgIGNsaWVudE1ldGFkYXRhOiB7XG4gICAgICAgIHVzZXJfaWQ6IFN0cmluZyh1c2VyLmlkKSxcbiAgICAgICAgdXNlcl9wcmVfc2lnbl91cF90b2tlbjogU3RyaW5nKHVzZXIucHJlX3NpZ25fdXBfdG9rZW4pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB1c2VybmFtZTogY29nbml0b1VzZXIudXNlci5nZXRVc2VybmFtZSgpLFxuICAgICAgdXNlcklkOiB1c2VyLmlkLFxuICAgICAgcHJlU2lnblVwVG9rZW46IHVzZXIucHJlX3NpZ25fdXBfdG9rZW4sXG4gICAgICB1c2VyU3ViOiBjb2duaXRvVXNlci51c2VyU3ViLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGlicEJyZWFjaGVkQWNjb3VudHMoYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBUaGUgYWNjb3VudCBpcyBqdXN0IHRoZSBlbWFpbFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cFxuICAgICAgICAuZ2V0KFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLmF1dGhVcmx9dXNlcnMvaGlicC9icmVhY2hlZGFjY291bnQvJHthY2NvdW50fS8/dHJ1bmNhdGVSZXNwb25zZT1mYWxzZWBcbiAgICAgICAgKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -1,74 +1,74 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
4
- import { LrBadArgumentException } 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 LrBadArgumentException('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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLWZhY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2plY3RzL25ld3JlcG8va2MtY2xpZW50L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2F1dGgvdHdvLWZhY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBSy9ELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFBb0IsSUFBZTtRQUFmLFNBQUksR0FBSixJQUFJLENBQVc7SUFBRyxDQUFDO0lBRTFCLGVBQWU7O1lBQzFCLE1BQU0sV0FBVyxHQUFnQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUU1RSxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBO0lBRVksZUFBZSxDQUMxQixNQUFnQzs7WUFFaEMsTUFBTSxXQUFXLEdBQWdCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBRTVFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELENBQUM7S0FBQTtJQUVZLGNBQWMsQ0FBQyxLQUFLOztZQUMvQixNQUFNLFdBQVcsR0FBZ0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFFNUUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRTtnQkFDaEQsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRVksVUFBVTs7WUFDckIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdELENBQUM7S0FBQTtJQUVZLGFBQWEsQ0FBQyxnQkFBd0I7O1lBQ2pELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FDOUMsY0FBYyxFQUNkLGdCQUFnQixDQUNqQixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBRVksZ0JBQWdCOztZQUMzQixNQUFNLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7YUFDNUIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVwRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2FBQ3BFO1lBRUQsT0FBTztnQkFDTCxJQUFJO2dCQUNKLE9BQU8sRUFBRSxrQkFBa0IsS0FBSyxXQUFXLElBQUksbUJBQW1CO2FBQ25FLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFWSxtQkFBbUIsQ0FBQyxRQUFnQjs7WUFDL0MsTUFBTSxXQUFXLEdBQWdCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBRTVFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELENBQUM7S0FBQTs7OztZQTlERixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQUxRLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvZ25pdG9Vc2VyIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgnO1xyXG5pbXBvcnQgeyBBdXRoQ2xhc3MgfSBmcm9tICdAYXdzLWFtcGxpZnkvYXV0aC9saWItZXNtL0F1dGgnO1xyXG5pbXBvcnQgeyBMckJhZEFyZ3VtZW50RXhjZXB0aW9uIH0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUd29GYWN0b3JTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGg6IEF1dGhDbGFzcykge31cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFByZWZlcnJlZE1GQSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgY29nbml0b1VzZXI6IENvZ25pdG9Vc2VyID0gYXdhaXQgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpO1xyXG5cclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1dGguZ2V0UHJlZmVycmVkTUZBKGNvZ25pdG9Vc2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRQcmVmZXJyZWRNRkEoXHJcbiAgICBtZXRob2Q6ICdUT1RQJyB8ICdTTVMnIHwgJ05PTUZBJ1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgY29nbml0b1VzZXI6IENvZ25pdG9Vc2VyID0gYXdhaXQgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuYXV0aC5zZXRQcmVmZXJyZWRNRkEoY29nbml0b1VzZXIsIG1ldGhvZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0UGhvbmVOdW1iZXIocGhvbmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGNvZ25pdG9Vc2VyOiBDb2duaXRvVXNlciA9IGF3YWl0IHRoaXMuYXV0aC5jdXJyZW50QXV0aGVudGljYXRlZFVzZXIoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmF1dGgudXBkYXRlVXNlckF0dHJpYnV0ZXMoY29nbml0b1VzZXIsIHtcclxuICAgICAgcGhvbmVfbnVtYmVyOiBwaG9uZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNNU0NvZGUoKSB7XHJcbiAgICBhd2FpdCB0aGlzLmF1dGgudmVyaWZ5Q3VycmVudFVzZXJBdHRyaWJ1dGUoJ3Bob25lX251bWJlcicpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHZlcmlmeVNNU0NvZGUodmVyaWZpY2F0aW9uQ29kZTogc3RyaW5nKSB7XHJcbiAgICBhd2FpdCB0aGlzLmF1dGgudmVyaWZ5Q3VycmVudFVzZXJBdHRyaWJ1dGVTdWJtaXQoXHJcbiAgICAgICdwaG9uZV9udW1iZXInLFxyXG4gICAgICB2ZXJpZmljYXRpb25Db2RlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNvZnR3YXJlVG9rZW4oKTogUHJvbWlzZTx7IGNvZGU6IHN0cmluZzsgY29kZVVyaTogc3RyaW5nIH0+IHtcclxuICAgIGNvbnN0IFtjb2duaXRvVXNlciwgdXNlckluZm9dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLmF1dGguY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyKCksXHJcbiAgICAgIHRoaXMuYXV0aC5jdXJyZW50VXNlckluZm8oKSxcclxuICAgIF0pO1xyXG5cclxuICAgIGNvbnN0IGNvZGUgPSBhd2FpdCB0aGlzLmF1dGguc2V0dXBUT1RQKGNvZ25pdG9Vc2VyKTtcclxuXHJcbiAgICBjb25zdCBlbWFpbCA9IHVzZXJJbmZvLmF0dHJpYnV0ZXMuZW1haWw7XHJcbiAgICBpZiAoIWVtYWlsKSB7XHJcbiAgICAgIHRocm93IG5ldyBMckJhZEFyZ3VtZW50RXhjZXB0aW9uKCdObyBlbWFpbCBhc3NvY2lhdGVkIHdpdGggdXNlci4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb2RlLFxyXG4gICAgICBjb2RlVXJpOiBgb3RwYXV0aDovL3RvdHAvJHtlbWFpbH0/c2VjcmV0PSR7Y29kZX0maXNzdWVyPUxpZmVSZWFkeWAsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHZlcmlmeVNvZnR3YXJlVG9rZW4odG90cENvZGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgY29nbml0b1VzZXI6IENvZ25pdG9Vc2VyID0gYXdhaXQgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuYXV0aC52ZXJpZnlUb3RwVG9rZW4oY29nbml0b1VzZXIsIHRvdHBDb2RlKTtcclxuICB9XHJcbn1cclxuIl19
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
4
+ import { LrBadArgumentException } 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 LrBadArgumentException('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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLWZhY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9hdXRoL3R3by1mYWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUsvRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQW9CLElBQWU7UUFBZixTQUFJLEdBQUosSUFBSSxDQUFXO0lBQUcsQ0FBQztJQUUxQixlQUFlOztZQUMxQixNQUFNLFdBQVcsR0FBZ0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFFNUUsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELENBQUM7S0FBQTtJQUVZLGVBQWUsQ0FDMUIsTUFBZ0M7O1lBRWhDLE1BQU0sV0FBVyxHQUFnQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUU1RSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RCxDQUFDO0tBQUE7SUFFWSxjQUFjLENBQUMsS0FBSzs7WUFDL0IsTUFBTSxXQUFXLEdBQWdCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBRTVFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hELFlBQVksRUFBRSxLQUFLO2FBQ3BCLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVZLFVBQVU7O1lBQ3JCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3RCxDQUFDO0tBQUE7SUFFWSxhQUFhLENBQUMsZ0JBQXdCOztZQUNqRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQzlDLGNBQWMsRUFDZCxnQkFBZ0IsQ0FDakIsQ0FBQztRQUNKLENBQUM7S0FBQTtJQUVZLGdCQUFnQjs7WUFDM0IsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO2FBQzVCLENBQUMsQ0FBQztZQUVILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFcEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixNQUFNLElBQUksc0JBQXNCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQzthQUNwRTtZQUVELE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixPQUFPLEVBQUUsa0JBQWtCLEtBQUssV0FBVyxJQUFJLG1CQUFtQjthQUNuRSxDQUFDO1FBQ0osQ0FBQztLQUFBO0lBRVksbUJBQW1CLENBQUMsUUFBZ0I7O1lBQy9DLE1BQU0sV0FBVyxHQUFnQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUU1RSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6RCxDQUFDO0tBQUE7Ozs7WUE5REYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFMUSxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29nbml0b1VzZXIgfSBmcm9tICdAYXdzLWFtcGxpZnkvYXV0aCc7XG5pbXBvcnQgeyBBdXRoQ2xhc3MgfSBmcm9tICdAYXdzLWFtcGxpZnkvYXV0aC9saWItZXNtL0F1dGgnO1xuaW1wb3J0IHsgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbiB9IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUd29GYWN0b3JTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoOiBBdXRoQ2xhc3MpIHt9XG5cbiAgcHVibGljIGFzeW5jIGdldFByZWZlcnJlZE1GQSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNvZ25pdG9Vc2VyOiBDb2duaXRvVXNlciA9IGF3YWl0IHRoaXMuYXV0aC5jdXJyZW50QXV0aGVudGljYXRlZFVzZXIoKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1dGguZ2V0UHJlZmVycmVkTUZBKGNvZ25pdG9Vc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRQcmVmZXJyZWRNRkEoXG4gICAgbWV0aG9kOiAnVE9UUCcgfCAnU01TJyB8ICdOT01GQSdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29nbml0b1VzZXI6IENvZ25pdG9Vc2VyID0gYXdhaXQgdGhpcy5hdXRoLmN1cnJlbnRBdXRoZW50aWNhdGVkVXNlcigpO1xuXG4gICAgYXdhaXQgdGhpcy5hdXRoLnNldFByZWZlcnJlZE1GQShjb2duaXRvVXNlciwgbWV0aG9kKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRQaG9uZU51bWJlcihwaG9uZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvZ25pdG9Vc2VyOiBDb2duaXRvVXNlciA9IGF3YWl0IHRoaXMuYXV0aC5jdXJyZW50QXV0aGVudGljYXRlZFVzZXIoKTtcblxuICAgIGF3YWl0IHRoaXMuYXV0aC51cGRhdGVVc2VyQXR0cmlidXRlcyhjb2duaXRvVXNlciwge1xuICAgICAgcGhvbmVfbnVtYmVyOiBwaG9uZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTTVNDb2RlKCkge1xuICAgIGF3YWl0IHRoaXMuYXV0aC52ZXJpZnlDdXJyZW50VXNlckF0dHJpYnV0ZSgncGhvbmVfbnVtYmVyJyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5U01TQ29kZSh2ZXJpZmljYXRpb25Db2RlOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmF1dGgudmVyaWZ5Q3VycmVudFVzZXJBdHRyaWJ1dGVTdWJtaXQoXG4gICAgICAncGhvbmVfbnVtYmVyJyxcbiAgICAgIHZlcmlmaWNhdGlvbkNvZGVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNvZnR3YXJlVG9rZW4oKTogUHJvbWlzZTx7IGNvZGU6IHN0cmluZzsgY29kZVVyaTogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBbY29nbml0b1VzZXIsIHVzZXJJbmZvXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuYXV0aC5jdXJyZW50QXV0aGVudGljYXRlZFVzZXIoKSxcbiAgICAgIHRoaXMuYXV0aC5jdXJyZW50VXNlckluZm8oKSxcbiAgICBdKTtcblxuICAgIGNvbnN0IGNvZGUgPSBhd2FpdCB0aGlzLmF1dGguc2V0dXBUT1RQKGNvZ25pdG9Vc2VyKTtcblxuICAgIGNvbnN0IGVtYWlsID0gdXNlckluZm8uYXR0cmlidXRlcy5lbWFpbDtcbiAgICBpZiAoIWVtYWlsKSB7XG4gICAgICB0aHJvdyBuZXcgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbignTm8gZW1haWwgYXNzb2NpYXRlZCB3aXRoIHVzZXIuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGUsXG4gICAgICBjb2RlVXJpOiBgb3RwYXV0aDovL3RvdHAvJHtlbWFpbH0/c2VjcmV0PSR7Y29kZX0maXNzdWVyPUxpZmVSZWFkeWAsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnlTb2Z0d2FyZVRva2VuKHRvdHBDb2RlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb2duaXRvVXNlcjogQ29nbml0b1VzZXIgPSBhd2FpdCB0aGlzLmF1dGguY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyKCk7XG5cbiAgICBhd2FpdCB0aGlzLmF1dGgudmVyaWZ5VG90cFRva2VuKGNvZ25pdG9Vc2VyLCB0b3RwQ29kZSk7XG4gIH1cbn1cbiJdfQ==