@webiny/cognito 0.0.0-unstable.3c5210ad37

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 (214) hide show
  1. package/Cognito.d.ts +8 -0
  2. package/Cognito.js +29 -0
  3. package/Cognito.js.map +1 -0
  4. package/LICENSE +21 -0
  5. package/README.md +11 -0
  6. package/admin/Cognito.d.ts +6 -0
  7. package/admin/Cognito.js +51 -0
  8. package/admin/Cognito.js.map +1 -0
  9. package/admin/CognitoLogin.d.ts +7 -0
  10. package/admin/CognitoLogin.js +18 -0
  11. package/admin/CognitoLogin.js.map +1 -0
  12. package/admin/Extension.d.ts +2 -0
  13. package/admin/Extension.js +20 -0
  14. package/admin/Extension.js.map +1 -0
  15. package/admin/SecurityPermission.d.ts +2 -0
  16. package/admin/SecurityPermission.js +26 -0
  17. package/admin/SecurityPermission.js.map +1 -0
  18. package/admin/federatedIdentityProviders.d.ts +9 -0
  19. package/admin/federatedIdentityProviders.js +9 -0
  20. package/admin/federatedIdentityProviders.js.map +1 -0
  21. package/admin/plugins/constants.d.ts +3 -0
  22. package/admin/plugins/constants.js +6 -0
  23. package/admin/plugins/constants.js.map +1 -0
  24. package/admin/plugins/userMenu/AccountDetails.d.ts +6 -0
  25. package/admin/plugins/userMenu/AccountDetails.js +23 -0
  26. package/admin/plugins/userMenu/AccountDetails.js.map +1 -0
  27. package/admin/plugins/userMenu/useIsDefaultTenant.d.ts +1 -0
  28. package/admin/plugins/userMenu/useIsDefaultTenant.js +15 -0
  29. package/admin/plugins/userMenu/useIsDefaultTenant.js.map +1 -0
  30. package/admin/presentation/Cognito/CognitoLoginScreen.d.ts +10 -0
  31. package/admin/presentation/Cognito/CognitoLoginScreen.js +54 -0
  32. package/admin/presentation/Cognito/CognitoLoginScreen.js.map +1 -0
  33. package/admin/presentation/Cognito/CognitoPresenter.d.ts +58 -0
  34. package/admin/presentation/Cognito/CognitoPresenter.js +277 -0
  35. package/admin/presentation/Cognito/CognitoPresenter.js.map +1 -0
  36. package/admin/presentation/Cognito/abstractions.d.ts +72 -0
  37. package/admin/presentation/Cognito/abstractions.js +4 -0
  38. package/admin/presentation/Cognito/abstractions.js.map +1 -0
  39. package/admin/presentation/Cognito/components/Divider.d.ts +2 -0
  40. package/admin/presentation/Cognito/components/Divider.js +16 -0
  41. package/admin/presentation/Cognito/components/Divider.js.map +1 -0
  42. package/admin/presentation/Cognito/components/FederatedLogin.d.ts +7 -0
  43. package/admin/presentation/Cognito/components/FederatedLogin.js +32 -0
  44. package/admin/presentation/Cognito/components/FederatedLogin.js.map +1 -0
  45. package/admin/presentation/Cognito/components/FederatedProviders.d.ts +44 -0
  46. package/admin/presentation/Cognito/components/FederatedProviders.js +14 -0
  47. package/admin/presentation/Cognito/components/FederatedProviders.js.map +1 -0
  48. package/admin/presentation/Cognito/components/FooterSignIn.d.ts +6 -0
  49. package/admin/presentation/Cognito/components/FooterSignIn.js +15 -0
  50. package/admin/presentation/Cognito/components/FooterSignIn.js.map +1 -0
  51. package/admin/presentation/Cognito/components/PasswordResetCodeSent.d.ts +9 -0
  52. package/admin/presentation/Cognito/components/PasswordResetCodeSent.js +43 -0
  53. package/admin/presentation/Cognito/components/PasswordResetCodeSent.js.map +1 -0
  54. package/admin/presentation/Cognito/components/RequestPasswordResetCode.d.ts +8 -0
  55. package/admin/presentation/Cognito/components/RequestPasswordResetCode.js +45 -0
  56. package/admin/presentation/Cognito/components/RequestPasswordResetCode.js.map +1 -0
  57. package/admin/presentation/Cognito/components/RequireNewPassword.d.ts +8 -0
  58. package/admin/presentation/Cognito/components/RequireNewPassword.js +55 -0
  59. package/admin/presentation/Cognito/components/RequireNewPassword.js.map +1 -0
  60. package/admin/presentation/Cognito/components/SetNewPassword.d.ts +8 -0
  61. package/admin/presentation/Cognito/components/SetNewPassword.js +79 -0
  62. package/admin/presentation/Cognito/components/SetNewPassword.js.map +1 -0
  63. package/admin/presentation/Cognito/components/SignIn.d.ts +10 -0
  64. package/admin/presentation/Cognito/components/SignIn.js +64 -0
  65. package/admin/presentation/Cognito/components/SignIn.js.map +1 -0
  66. package/admin/presentation/Cognito/components/View.d.ts +98 -0
  67. package/admin/presentation/Cognito/components/View.js +67 -0
  68. package/admin/presentation/Cognito/components/View.js.map +1 -0
  69. package/admin/presentation/Cognito/feature.d.ts +3 -0
  70. package/admin/presentation/Cognito/feature.js +16 -0
  71. package/admin/presentation/Cognito/feature.js.map +1 -0
  72. package/admin/presentation/shared/createPasswordValidator.d.ts +8 -0
  73. package/admin/presentation/shared/createPasswordValidator.js +27 -0
  74. package/admin/presentation/shared/createPasswordValidator.js.map +1 -0
  75. package/admin/presentation/shared/usePasswordValidator.d.ts +1 -0
  76. package/admin/presentation/shared/usePasswordValidator.js +15 -0
  77. package/admin/presentation/shared/usePasswordValidator.js.map +1 -0
  78. package/admin/routes.d.ts +10 -0
  79. package/admin/routes.js +21 -0
  80. package/admin/routes.js.map +1 -0
  81. package/admin/ui/UserItem.d.ts +10 -0
  82. package/admin/ui/UserItem.js +3 -0
  83. package/admin/ui/UserItem.js.map +1 -0
  84. package/admin/ui/components/AvatarImage/AvatarImage.d.ts +3 -0
  85. package/admin/ui/components/AvatarImage/AvatarImage.js +43 -0
  86. package/admin/ui/components/AvatarImage/AvatarImage.js.map +1 -0
  87. package/admin/ui/components/AvatarImage/AvatarImagePreview.d.ts +10 -0
  88. package/admin/ui/components/AvatarImage/AvatarImagePreview.js +55 -0
  89. package/admin/ui/components/AvatarImage/AvatarImagePreview.js.map +1 -0
  90. package/admin/ui/components/AvatarImage/AvatarImageTrigger.d.ts +7 -0
  91. package/admin/ui/components/AvatarImage/AvatarImageTrigger.js +29 -0
  92. package/admin/ui/components/AvatarImage/AvatarImageTrigger.js.map +1 -0
  93. package/admin/ui/components/AvatarImage/index.d.ts +1 -0
  94. package/admin/ui/components/AvatarImage/index.js +3 -0
  95. package/admin/ui/components/AvatarImage/index.js.map +1 -0
  96. package/admin/ui/views/Account/Account.d.ts +2 -0
  97. package/admin/ui/views/Account/Account.js +142 -0
  98. package/admin/ui/views/Account/Account.js.map +1 -0
  99. package/admin/ui/views/Account/graphql.d.ts +2 -0
  100. package/admin/ui/views/Account/graphql.js +40 -0
  101. package/admin/ui/views/Account/graphql.js.map +1 -0
  102. package/admin/ui/views/Account/index.d.ts +1 -0
  103. package/admin/ui/views/Account/index.js +3 -0
  104. package/admin/ui/views/Account/index.js.map +1 -0
  105. package/admin/ui/views/Users/UsersDataList.d.ts +3 -0
  106. package/admin/ui/views/Users/UsersDataList.js +172 -0
  107. package/admin/ui/views/Users/UsersDataList.js.map +1 -0
  108. package/admin/ui/views/Users/UsersForm.d.ts +5 -0
  109. package/admin/ui/views/Users/UsersForm.js +174 -0
  110. package/admin/ui/views/Users/UsersForm.js.map +1 -0
  111. package/admin/ui/views/Users/UsersView.d.ts +2 -0
  112. package/admin/ui/views/Users/UsersView.js +14 -0
  113. package/admin/ui/views/Users/UsersView.js.map +1 -0
  114. package/admin/ui/views/Users/components/DeleteAction.d.ts +7 -0
  115. package/admin/ui/views/Users/components/DeleteAction.js +36 -0
  116. package/admin/ui/views/Users/components/DeleteAction.js.map +1 -0
  117. package/admin/ui/views/Users/graphql.d.ts +5 -0
  118. package/admin/ui/views/Users/graphql.js +99 -0
  119. package/admin/ui/views/Users/graphql.js.map +1 -0
  120. package/admin/ui/views/Users/hooks/useUserForm.d.ts +27 -0
  121. package/admin/ui/views/Users/hooks/useUserForm.js +127 -0
  122. package/admin/ui/views/Users/hooks/useUserForm.js.map +1 -0
  123. package/admin/ui/views/Users/search.svg +20 -0
  124. package/admin/ui/views/utils.d.ts +3 -0
  125. package/admin/ui/views/utils.js +10 -0
  126. package/admin/ui/views/utils.js.map +1 -0
  127. package/api/CognitoApiFeature.d.ts +1 -0
  128. package/api/CognitoApiFeature.js +28 -0
  129. package/api/CognitoApiFeature.js.map +1 -0
  130. package/api/domain/Username.d.ts +4 -0
  131. package/api/domain/Username.js +7 -0
  132. package/api/domain/Username.js.map +1 -0
  133. package/api/domain/errors.d.ts +37 -0
  134. package/api/domain/errors.js +63 -0
  135. package/api/domain/errors.js.map +1 -0
  136. package/api/features/CognitoIdp/CognitoIdentityProvider.d.ts +15 -0
  137. package/api/features/CognitoIdp/CognitoIdentityProvider.js +61 -0
  138. package/api/features/CognitoIdp/CognitoIdentityProvider.js.map +1 -0
  139. package/api/features/CognitoIdp/abstractions.d.ts +15 -0
  140. package/api/features/CognitoIdp/abstractions.js +4 -0
  141. package/api/features/CognitoIdp/abstractions.js.map +1 -0
  142. package/api/features/CognitoIdp/feature.d.ts +1 -0
  143. package/api/features/CognitoIdp/feature.js +10 -0
  144. package/api/features/CognitoIdp/feature.js.map +1 -0
  145. package/api/features/CognitoIdp/index.d.ts +2 -0
  146. package/api/features/CognitoIdp/index.js +4 -0
  147. package/api/features/CognitoIdp/index.js.map +1 -0
  148. package/api/features/CognitoService/CognitoService.d.ts +20 -0
  149. package/api/features/CognitoService/CognitoService.js +90 -0
  150. package/api/features/CognitoService/CognitoService.js.map +1 -0
  151. package/api/features/CognitoService/abstractions.d.ts +54 -0
  152. package/api/features/CognitoService/abstractions.js +8 -0
  153. package/api/features/CognitoService/abstractions.js.map +1 -0
  154. package/api/features/CognitoService/feature.d.ts +5 -0
  155. package/api/features/CognitoService/feature.js +12 -0
  156. package/api/features/CognitoService/feature.js.map +1 -0
  157. package/api/features/CognitoService/index.d.ts +1 -0
  158. package/api/features/CognitoService/index.js +3 -0
  159. package/api/features/CognitoService/index.js.map +1 -0
  160. package/api/features/CreateUser/CreateUserUseCase.d.ts +22 -0
  161. package/api/features/CreateUser/CreateUserUseCase.js +106 -0
  162. package/api/features/CreateUser/CreateUserUseCase.js.map +1 -0
  163. package/api/features/CreateUser/abstractions.d.ts +35 -0
  164. package/api/features/CreateUser/abstractions.js +4 -0
  165. package/api/features/CreateUser/abstractions.js.map +1 -0
  166. package/api/features/CreateUser/feature.d.ts +1 -0
  167. package/api/features/CreateUser/feature.js +10 -0
  168. package/api/features/CreateUser/feature.js.map +1 -0
  169. package/api/features/CreateUser/index.d.ts +2 -0
  170. package/api/features/CreateUser/index.js +4 -0
  171. package/api/features/CreateUser/index.js.map +1 -0
  172. package/api/features/CreateUser/schema.d.ts +47 -0
  173. package/api/features/CreateUser/schema.js +17 -0
  174. package/api/features/CreateUser/schema.js.map +1 -0
  175. package/api/features/DeleteUser/DeleteUserUseCase.d.ts +16 -0
  176. package/api/features/DeleteUser/DeleteUserUseCase.js +54 -0
  177. package/api/features/DeleteUser/DeleteUserUseCase.js.map +1 -0
  178. package/api/features/DeleteUser/abstractions.d.ts +19 -0
  179. package/api/features/DeleteUser/abstractions.js +4 -0
  180. package/api/features/DeleteUser/abstractions.js.map +1 -0
  181. package/api/features/DeleteUser/feature.d.ts +1 -0
  182. package/api/features/DeleteUser/feature.js +10 -0
  183. package/api/features/DeleteUser/feature.js.map +1 -0
  184. package/api/features/DeleteUser/index.d.ts +2 -0
  185. package/api/features/DeleteUser/index.js +4 -0
  186. package/api/features/DeleteUser/index.js.map +1 -0
  187. package/api/features/UpdateUser/UpdateUserUseCase.d.ts +21 -0
  188. package/api/features/UpdateUser/UpdateUserUseCase.js +88 -0
  189. package/api/features/UpdateUser/UpdateUserUseCase.js.map +1 -0
  190. package/api/features/UpdateUser/abstractions.d.ts +33 -0
  191. package/api/features/UpdateUser/abstractions.js +4 -0
  192. package/api/features/UpdateUser/abstractions.js.map +1 -0
  193. package/api/features/UpdateUser/feature.d.ts +1 -0
  194. package/api/features/UpdateUser/feature.js +10 -0
  195. package/api/features/UpdateUser/feature.js.map +1 -0
  196. package/api/features/UpdateUser/index.d.ts +2 -0
  197. package/api/features/UpdateUser/index.js +4 -0
  198. package/api/features/UpdateUser/index.js.map +1 -0
  199. package/api/features/UpdateUser/schema.d.ts +44 -0
  200. package/api/features/UpdateUser/schema.js +16 -0
  201. package/api/features/UpdateUser/schema.js.map +1 -0
  202. package/api/features/UserInstaller/UserInstaller.d.ts +27 -0
  203. package/api/features/UserInstaller/UserInstaller.js +48 -0
  204. package/api/features/UserInstaller/UserInstaller.js.map +1 -0
  205. package/api/features/UserInstaller/feature.d.ts +1 -0
  206. package/api/features/UserInstaller/feature.js +10 -0
  207. package/api/features/UserInstaller/feature.js.map +1 -0
  208. package/api/graphql/user.gql.d.ts +8 -0
  209. package/api/graphql/user.gql.js +167 -0
  210. package/api/graphql/user.gql.js.map +1 -0
  211. package/index.d.ts +2 -0
  212. package/index.js +4 -0
  213. package/index.js.map +1 -0
  214. package/package.json +48 -0
@@ -0,0 +1,277 @@
1
+ import { makeAutoObservable, runInAction } from "mobx";
2
+ import { Auth } from "@aws-amplify/auth";
3
+ import { CognitoPresenter as CognitoPresenterAbstraction } from "./abstractions.js";
4
+ import { LogInUseCase } from "@webiny/app-admin/features/security/LogIn/index.js";
5
+ import { IdentityContext } from "@webiny/app-admin/features/security/IdentityContext/index.js";
6
+ class CognitoPresenterImpl {
7
+ authState = "signIn";
8
+ authData = null;
9
+ message = null;
10
+ checkingSession = false;
11
+ isLoggingIn = false;
12
+ formLoading = false;
13
+ cognitoUser = null;
14
+ initialized = false;
15
+ constructor(identity, logInUseCase) {
16
+ this.identity = identity;
17
+ this.logInUseCase = logInUseCase;
18
+ makeAutoObservable(this);
19
+ }
20
+ get vm() {
21
+ const identity = this.identity.getIdentity();
22
+ return {
23
+ authState: this.authState,
24
+ checkingSession: this.checkingSession,
25
+ isLoggingIn: this.isLoggingIn,
26
+ isAuthenticated: identity.isAuthenticated,
27
+ // View-specific VMs
28
+ signIn: {
29
+ isLoading: this.formLoading,
30
+ message: this.message
31
+ },
32
+ requestPasswordResetCode: {
33
+ isLoading: this.formLoading,
34
+ message: this.message
35
+ },
36
+ passwordResetCodeSent: {
37
+ isLoading: this.formLoading,
38
+ message: this.message
39
+ },
40
+ setNewPassword: {
41
+ isLoading: this.formLoading,
42
+ message: this.message
43
+ },
44
+ requireNewPassword: {
45
+ isLoading: this.formLoading,
46
+ requiredAttributes: this.authData && this.authData.requiredAttributes || []
47
+ }
48
+ };
49
+ }
50
+ async init(params) {
51
+ if (this.initialized) {
52
+ return;
53
+ }
54
+ const authConfig = {
55
+ region: params.region,
56
+ userPoolId: params.userPoolId,
57
+ userPoolWebClientId: params.clientId
58
+ };
59
+ Auth.configure(authConfig);
60
+ this.initialized = true;
61
+ await this.checkUrl();
62
+ }
63
+
64
+ // Public API
65
+ async signIn(username, password) {
66
+ runInAction(() => {
67
+ this.formLoading = true;
68
+ this.message = null;
69
+ });
70
+ const usernameOrPassword = ["UserNotFoundException", "NotAuthorizedException"];
71
+ try {
72
+ const user = await Auth.signIn(username, password);
73
+ if (user.challengeName === "NEW_PASSWORD_REQUIRED") {
74
+ runInAction(() => {
75
+ this.cognitoUser = user;
76
+ this.authState = "requireNewPassword";
77
+ this.authData = {
78
+ requiredAttributes: user.challengeParam.requiredAttributes || []
79
+ };
80
+ this.formLoading = false;
81
+ });
82
+ } else {
83
+ await this.handleSignedIn();
84
+ runInAction(() => {
85
+ this.formLoading = false;
86
+ });
87
+ }
88
+ } catch (error) {
89
+ let message = error.message;
90
+ if (usernameOrPassword.includes(error.code)) {
91
+ message = "Incorrect username or password.";
92
+ }
93
+ runInAction(() => {
94
+ this.message = {
95
+ title: "Login Failed",
96
+ text: message,
97
+ type: "danger"
98
+ };
99
+ this.formLoading = false;
100
+ });
101
+ }
102
+ }
103
+ async confirmNewPassword(password, requiredAttributes) {
104
+ runInAction(() => {
105
+ this.formLoading = true;
106
+ this.message = null;
107
+ });
108
+ try {
109
+ await Auth.completeNewPassword(this.cognitoUser, password, requiredAttributes);
110
+ await this.handleSignedIn();
111
+ } catch (error) {
112
+ runInAction(() => {
113
+ this.message = {
114
+ title: "Error",
115
+ text: error.message,
116
+ type: "danger"
117
+ };
118
+ });
119
+ } finally {
120
+ runInAction(() => {
121
+ this.formLoading = false;
122
+ });
123
+ }
124
+ }
125
+ async requestPasswordReset(username) {
126
+ runInAction(() => {
127
+ this.formLoading = true;
128
+ this.message = null;
129
+ });
130
+ try {
131
+ await Auth.forgotPassword(username);
132
+ } catch {
133
+ // We ignore errors and pretend that everything went fine.
134
+ // Showing an error would give a potential attacker information about which usernames exist (or not).
135
+ // This way it's more difficult to exploit the process.
136
+ } finally {
137
+ runInAction(() => {
138
+ this.authState = "passwordResetCodeSent";
139
+ this.authData = {
140
+ username
141
+ };
142
+ this.formLoading = false;
143
+ });
144
+ }
145
+ }
146
+ async resendPasswordResetCode() {
147
+ const username = this.authData?.username;
148
+ if (this.authState !== "passwordResetCodeSent" || !username) {
149
+ return;
150
+ }
151
+ await this.requestPasswordReset(username);
152
+ runInAction(() => {
153
+ this.message = {
154
+ title: "Code Resent",
155
+ text: "Password reset code has been resent to your email address. Please check your inbox!",
156
+ type: "success"
157
+ };
158
+ });
159
+ }
160
+ async confirmPasswordReset(code, password) {
161
+ const username = this.authData?.username;
162
+ if (!username) {
163
+ return;
164
+ }
165
+ runInAction(() => {
166
+ this.formLoading = true;
167
+ this.message = null;
168
+ });
169
+ try {
170
+ await Auth.forgotPasswordSubmit(username, code, password);
171
+ runInAction(() => {
172
+ this.authState = "signIn";
173
+ this.message = {
174
+ title: "Password Reset",
175
+ text: "You can now sign in with your new password",
176
+ type: "success"
177
+ };
178
+ });
179
+ } catch (error) {
180
+ runInAction(() => {
181
+ this.message = {
182
+ title: "Error",
183
+ text: error.message,
184
+ type: "danger"
185
+ };
186
+ });
187
+ } finally {
188
+ runInAction(() => {
189
+ this.formLoading = false;
190
+ });
191
+ }
192
+ }
193
+ showSignIn() {
194
+ this.authState = "signIn";
195
+ this.authData = null;
196
+ this.message = null;
197
+ }
198
+ showRequestPasswordResetCode() {
199
+ this.authState = "requestPasswordResetCode";
200
+ this.message = null;
201
+ }
202
+ showSetNewPassword() {
203
+ this.authState = "setNewPassword";
204
+ this.message = null;
205
+ }
206
+
207
+ // Private/internal methods
208
+ async handleSignedIn() {
209
+ runInAction(() => {
210
+ this.isLoggingIn = true;
211
+ });
212
+ try {
213
+ await this.logInUseCase.execute({
214
+ idTokenProvider: async () => {
215
+ const currentSession = await Auth.currentSession();
216
+ return currentSession.getIdToken().getJwtToken();
217
+ },
218
+ logoutCallback: () => {
219
+ Auth.signOut();
220
+ runInAction(() => {
221
+ this.authState = "signIn";
222
+ this.authData = null;
223
+ });
224
+ }
225
+ });
226
+ runInAction(() => {
227
+ this.authState = "signedIn";
228
+ });
229
+ } catch (error) {
230
+ console.error("Error during sign in:", error);
231
+ runInAction(() => {
232
+ this.authState = "signIn";
233
+ });
234
+ } finally {
235
+ runInAction(() => {
236
+ this.isLoggingIn = false;
237
+ });
238
+ }
239
+ }
240
+ async checkUrl() {
241
+ const query = new URLSearchParams(window.location.search);
242
+ const queryData = {};
243
+ query.forEach((value, key) => queryData[key] = value);
244
+ const {
245
+ state
246
+ } = queryData;
247
+ if (state) {
248
+ // Handle state from URL if needed
249
+ return;
250
+ }
251
+ return this.checkSession();
252
+ }
253
+ async checkSession() {
254
+ runInAction(() => {
255
+ this.checkingSession = true;
256
+ });
257
+ try {
258
+ const cognitoUser = await Auth.currentSession();
259
+ if (cognitoUser) {
260
+ // We don't need to `await`, we simply start a separate "branch" of execution.
261
+ this.handleSignedIn();
262
+ }
263
+ } catch {
264
+ // Not authenticated, stay on signIn
265
+ } finally {
266
+ runInAction(() => {
267
+ this.checkingSession = false;
268
+ });
269
+ }
270
+ }
271
+ }
272
+ export const CognitoPresenter = CognitoPresenterAbstraction.createImplementation({
273
+ implementation: CognitoPresenterImpl,
274
+ dependencies: [IdentityContext, LogInUseCase]
275
+ });
276
+
277
+ //# sourceMappingURL=CognitoPresenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["makeAutoObservable","runInAction","Auth","CognitoPresenter","CognitoPresenterAbstraction","LogInUseCase","IdentityContext","CognitoPresenterImpl","authState","authData","message","checkingSession","isLoggingIn","formLoading","cognitoUser","initialized","constructor","identity","logInUseCase","vm","getIdentity","isAuthenticated","signIn","isLoading","requestPasswordResetCode","passwordResetCodeSent","setNewPassword","requireNewPassword","requiredAttributes","init","params","authConfig","region","userPoolId","userPoolWebClientId","clientId","configure","checkUrl","username","password","usernameOrPassword","user","challengeName","challengeParam","handleSignedIn","error","includes","code","title","text","type","confirmNewPassword","completeNewPassword","requestPasswordReset","forgotPassword","resendPasswordResetCode","confirmPasswordReset","forgotPasswordSubmit","showSignIn","showRequestPasswordResetCode","showSetNewPassword","execute","idTokenProvider","currentSession","getIdToken","getJwtToken","logoutCallback","signOut","console","query","URLSearchParams","window","location","search","queryData","forEach","value","key","state","checkSession","createImplementation","implementation","dependencies"],"sources":["CognitoPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction } from \"mobx\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport { AuthOptions } from \"@aws-amplify/auth/lib-esm/types/index.js\";\nimport {\n CognitoPresenter as CognitoPresenterAbstraction,\n AuthState,\n AuthData,\n AuthMessage,\n ICognitoInitParams\n} from \"./abstractions.js\";\nimport { LogInUseCase } from \"@webiny/app-admin/features/security/LogIn/index.js\";\nimport { IdentityContext } from \"@webiny/app-admin/features/security/IdentityContext/index.js\";\n\nclass CognitoPresenterImpl implements CognitoPresenterAbstraction.Interface {\n private authState: AuthState = \"signIn\";\n private authData: AuthData | null = null;\n private message: AuthMessage | null = null;\n private checkingSession = false;\n private isLoggingIn = false;\n private formLoading = false;\n private cognitoUser: any = null;\n private initialized = false;\n\n constructor(\n private identity: IdentityContext.Interface,\n private logInUseCase: LogInUseCase.Interface\n ) {\n makeAutoObservable(this);\n }\n\n get vm() {\n const identity = this.identity.getIdentity();\n\n return {\n authState: this.authState,\n checkingSession: this.checkingSession,\n isLoggingIn: this.isLoggingIn,\n isAuthenticated: identity.isAuthenticated,\n\n // View-specific VMs\n signIn: {\n isLoading: this.formLoading,\n message: this.message\n },\n requestPasswordResetCode: {\n isLoading: this.formLoading,\n message: this.message\n },\n passwordResetCodeSent: {\n isLoading: this.formLoading,\n message: this.message\n },\n setNewPassword: {\n isLoading: this.formLoading,\n message: this.message\n },\n requireNewPassword: {\n isLoading: this.formLoading,\n requiredAttributes: (this.authData && this.authData.requiredAttributes) || []\n }\n };\n }\n\n async init(params: ICognitoInitParams): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n const authConfig: AuthOptions = {\n region: params.region,\n userPoolId: params.userPoolId,\n userPoolWebClientId: params.clientId\n };\n\n Auth.configure(authConfig);\n this.initialized = true;\n\n await this.checkUrl();\n }\n\n // Public API\n async signIn(username: string, password: string): Promise<void> {\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n const usernameOrPassword = [\"UserNotFoundException\", \"NotAuthorizedException\"];\n\n try {\n const user = await Auth.signIn(username, password);\n\n if (user.challengeName === \"NEW_PASSWORD_REQUIRED\") {\n runInAction(() => {\n this.cognitoUser = user;\n this.authState = \"requireNewPassword\";\n this.authData = {\n requiredAttributes: user.challengeParam.requiredAttributes || []\n };\n this.formLoading = false;\n });\n } else {\n await this.handleSignedIn();\n runInAction(() => {\n this.formLoading = false;\n });\n }\n } catch (error) {\n let message = error.message;\n\n if (usernameOrPassword.includes(error.code)) {\n message = \"Incorrect username or password.\";\n }\n runInAction(() => {\n this.message = {\n title: \"Login Failed\",\n text: message,\n type: \"danger\"\n };\n this.formLoading = false;\n });\n }\n }\n\n async confirmNewPassword(password: string, requiredAttributes: any): Promise<void> {\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n try {\n await Auth.completeNewPassword(this.cognitoUser, password, requiredAttributes);\n await this.handleSignedIn();\n } catch (error) {\n runInAction(() => {\n this.message = {\n title: \"Error\",\n text: error.message,\n type: \"danger\"\n };\n });\n } finally {\n runInAction(() => {\n this.formLoading = false;\n });\n }\n }\n\n async requestPasswordReset(username: string): Promise<void> {\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n try {\n await Auth.forgotPassword(username);\n } catch {\n // We ignore errors and pretend that everything went fine.\n // Showing an error would give a potential attacker information about which usernames exist (or not).\n // This way it's more difficult to exploit the process.\n } finally {\n runInAction(() => {\n this.authState = \"passwordResetCodeSent\";\n this.authData = { username };\n this.formLoading = false;\n });\n }\n }\n\n async resendPasswordResetCode(): Promise<void> {\n const username = this.authData?.username;\n if (this.authState !== \"passwordResetCodeSent\" || !username) {\n return;\n }\n\n await this.requestPasswordReset(username!);\n runInAction(() => {\n this.message = {\n title: \"Code Resent\",\n text: \"Password reset code has been resent to your email address. Please check your inbox!\",\n type: \"success\"\n };\n });\n }\n\n async confirmPasswordReset(code: string, password: string): Promise<void> {\n const username = this.authData?.username;\n if (!username) {\n return;\n }\n\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n try {\n await Auth.forgotPasswordSubmit(username, code, password);\n runInAction(() => {\n this.authState = \"signIn\";\n this.message = {\n title: \"Password Reset\",\n text: \"You can now sign in with your new password\",\n type: \"success\"\n };\n });\n } catch (error) {\n runInAction(() => {\n this.message = {\n title: \"Error\",\n text: error.message,\n type: \"danger\"\n };\n });\n } finally {\n runInAction(() => {\n this.formLoading = false;\n });\n }\n }\n\n showSignIn(): void {\n this.authState = \"signIn\";\n this.authData = null;\n this.message = null;\n }\n\n showRequestPasswordResetCode(): void {\n this.authState = \"requestPasswordResetCode\";\n this.message = null;\n }\n\n showSetNewPassword(): void {\n this.authState = \"setNewPassword\";\n this.message = null;\n }\n\n // Private/internal methods\n private async handleSignedIn(): Promise<void> {\n runInAction(() => {\n this.isLoggingIn = true;\n });\n\n try {\n await this.logInUseCase.execute({\n idTokenProvider: async () => {\n const currentSession = await Auth.currentSession();\n return currentSession.getIdToken().getJwtToken();\n },\n logoutCallback: () => {\n Auth.signOut();\n runInAction(() => {\n this.authState = \"signIn\";\n this.authData = null;\n });\n }\n });\n\n runInAction(() => {\n this.authState = \"signedIn\";\n });\n } catch (error) {\n console.error(\"Error during sign in:\", error);\n runInAction(() => {\n this.authState = \"signIn\";\n });\n } finally {\n runInAction(() => {\n this.isLoggingIn = false;\n });\n }\n }\n\n private async checkUrl(): Promise<void> {\n const query = new URLSearchParams(window.location.search);\n const queryData: Record<string, string> = {};\n query.forEach((value, key) => (queryData[key] = value));\n const { state } = queryData;\n\n if (state) {\n // Handle state from URL if needed\n return;\n }\n\n return this.checkSession();\n }\n\n private async checkSession(): Promise<void> {\n runInAction(() => {\n this.checkingSession = true;\n });\n\n try {\n const cognitoUser = await Auth.currentSession();\n if (cognitoUser) {\n // We don't need to `await`, we simply start a separate \"branch\" of execution.\n this.handleSignedIn();\n }\n } catch {\n // Not authenticated, stay on signIn\n } finally {\n runInAction(() => {\n this.checkingSession = false;\n });\n }\n }\n}\n\nexport const CognitoPresenter = CognitoPresenterAbstraction.createImplementation({\n implementation: CognitoPresenterImpl,\n dependencies: [IdentityContext, LogInUseCase]\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ export type AuthState = "signIn" | "signedIn" | "signedOut" | "requestPasswordResetCode" | "passwordResetCodeSent" | "setNewPassword" | "requireNewPassword";
2
+ export interface AuthDataVerified {
3
+ email?: string;
4
+ phone_number?: string;
5
+ }
6
+ export interface AuthDataUnverified {
7
+ email?: string;
8
+ phone_number?: string;
9
+ }
10
+ export interface AuthData {
11
+ username?: string;
12
+ verified?: AuthDataVerified;
13
+ unverified?: AuthDataUnverified;
14
+ requiredAttributes?: string[];
15
+ [key: string]: string | null | boolean | undefined | string[] | AuthDataVerified | AuthDataUnverified;
16
+ }
17
+ export interface AuthMessage {
18
+ title: string;
19
+ text: string;
20
+ type: "success" | "info" | "warning" | "danger";
21
+ }
22
+ export interface ICognitoInitParams {
23
+ region: string;
24
+ userPoolId: string;
25
+ clientId: string;
26
+ }
27
+ export interface SignInVM {
28
+ isLoading: boolean;
29
+ message: AuthMessage | null;
30
+ }
31
+ export interface RequireNewPasswordVM {
32
+ isLoading: boolean;
33
+ requiredAttributes: string[];
34
+ }
35
+ export interface RequestPasswordResetCodeVM {
36
+ isLoading: boolean;
37
+ message: AuthMessage | null;
38
+ }
39
+ export interface PasswordResetCodeSentVM {
40
+ isLoading: boolean;
41
+ message: AuthMessage | null;
42
+ }
43
+ export interface SetNewPasswordVM {
44
+ isLoading: boolean;
45
+ message: AuthMessage | null;
46
+ }
47
+ export interface ICognitoPresenter {
48
+ vm: {
49
+ authState: AuthState;
50
+ checkingSession: boolean;
51
+ isLoggingIn: boolean;
52
+ isAuthenticated: boolean;
53
+ signIn: SignInVM;
54
+ requireNewPassword: RequireNewPasswordVM;
55
+ requestPasswordResetCode: RequestPasswordResetCodeVM;
56
+ passwordResetCodeSent: PasswordResetCodeSentVM;
57
+ setNewPassword: SetNewPasswordVM;
58
+ };
59
+ init(params: ICognitoInitParams): Promise<void>;
60
+ signIn(username: string, password: string): Promise<void>;
61
+ confirmNewPassword(password: string, requiredAttributes: any): Promise<void>;
62
+ requestPasswordReset(username: string): Promise<void>;
63
+ resendPasswordResetCode(): Promise<void>;
64
+ confirmPasswordReset(code: string, password: string): Promise<void>;
65
+ showSignIn(): void;
66
+ showRequestPasswordResetCode(): void;
67
+ showSetNewPassword(): void;
68
+ }
69
+ export declare const CognitoPresenter: import("@webiny/di").Abstraction<ICognitoPresenter>;
70
+ export declare namespace CognitoPresenter {
71
+ type Interface = ICognitoPresenter;
72
+ }
@@ -0,0 +1,4 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ export const CognitoPresenter = createAbstraction("CognitoPresenter");
3
+
4
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","CognitoPresenter"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\n\nexport type AuthState =\n | \"signIn\"\n | \"signedIn\"\n | \"signedOut\"\n | \"requestPasswordResetCode\"\n | \"passwordResetCodeSent\"\n | \"setNewPassword\"\n | \"requireNewPassword\";\n\nexport interface AuthDataVerified {\n email?: string;\n phone_number?: string;\n}\n\nexport interface AuthDataUnverified {\n email?: string;\n phone_number?: string;\n}\n\nexport interface AuthData {\n username?: string;\n verified?: AuthDataVerified;\n unverified?: AuthDataUnverified;\n requiredAttributes?: string[];\n [key: string]:\n | string\n | null\n | boolean\n | undefined\n | string[]\n | AuthDataVerified\n | AuthDataUnverified;\n}\n\nexport interface AuthMessage {\n title: string;\n text: string;\n type: \"success\" | \"info\" | \"warning\" | \"danger\";\n}\n\nexport interface ICognitoInitParams {\n region: string;\n userPoolId: string;\n clientId: string;\n}\n\nexport interface SignInVM {\n isLoading: boolean;\n message: AuthMessage | null;\n}\n\nexport interface RequireNewPasswordVM {\n isLoading: boolean;\n requiredAttributes: string[];\n}\n\nexport interface RequestPasswordResetCodeVM {\n isLoading: boolean;\n message: AuthMessage | null;\n}\n\nexport interface PasswordResetCodeSentVM {\n isLoading: boolean;\n message: AuthMessage | null;\n}\n\nexport interface SetNewPasswordVM {\n isLoading: boolean;\n message: AuthMessage | null;\n}\n\nexport interface ICognitoPresenter {\n vm: {\n authState: AuthState;\n checkingSession: boolean;\n isLoggingIn: boolean;\n isAuthenticated: boolean;\n signIn: SignInVM;\n requireNewPassword: RequireNewPasswordVM;\n requestPasswordResetCode: RequestPasswordResetCodeVM;\n passwordResetCodeSent: PasswordResetCodeSentVM;\n setNewPassword: SetNewPasswordVM;\n };\n\n // Lifecycle\n init(params: ICognitoInitParams): Promise<void>;\n\n // Authentication actions\n signIn(username: string, password: string): Promise<void>;\n confirmNewPassword(password: string, requiredAttributes: any): Promise<void>;\n requestPasswordReset(username: string): Promise<void>;\n resendPasswordResetCode(): Promise<void>;\n confirmPasswordReset(code: string, password: string): Promise<void>;\n\n // Navigation actions\n showSignIn(): void;\n showRequestPasswordResetCode(): void;\n showSetNewPassword(): void;\n}\n\nexport const CognitoPresenter = createAbstraction<ICognitoPresenter>(\"CognitoPresenter\");\n\nexport namespace CognitoPresenter {\n export type Interface = ICognitoPresenter;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,uBAAuB;AAsGzD,OAAO,MAAMC,gBAAgB,GAAGD,iBAAiB,CAAoB,kBAAkB,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const Divider: () => React.JSX.Element;
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ import { Separator, Text } from "@webiny/admin-ui";
3
+ export const Divider = () => {
4
+ return /*#__PURE__*/React.createElement("div", {
5
+ className: "relative my-lg"
6
+ }, /*#__PURE__*/React.createElement("div", {
7
+ className: "absolute inset-0 flex items-center"
8
+ }, /*#__PURE__*/React.createElement(Separator, null)), /*#__PURE__*/React.createElement("div", {
9
+ className: "relative flex justify-center"
10
+ }, /*#__PURE__*/React.createElement(Text, {
11
+ size: "sm",
12
+ className: "text-neutral-strong px-sm bg-neutral-base uppercase"
13
+ }, "Or continue with")));
14
+ };
15
+
16
+ //# sourceMappingURL=Divider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Separator","Text","Divider","createElement","className","size"],"sources":["Divider.tsx"],"sourcesContent":["import React from \"react\";\nimport { Separator, Text } from \"@webiny/admin-ui\";\n\nexport const Divider = () => {\n return (\n <div className={\"relative my-lg\"}>\n <div className={\"absolute inset-0 flex items-center\"}>\n <Separator />\n </div>\n <div className={\"relative flex justify-center\"}>\n <Text size={\"sm\"} className={\"text-neutral-strong px-sm bg-neutral-base uppercase\"}>\n {\"Or continue with\"}\n </Text>\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,EAAEC,IAAI,QAAQ,kBAAkB;AAElD,OAAO,MAAMC,OAAO,GAAGA,CAAA,KAAM;EACzB,oBACIH,KAAA,CAAAI,aAAA;IAAKC,SAAS,EAAE;EAAiB,gBAC7BL,KAAA,CAAAI,aAAA;IAAKC,SAAS,EAAE;EAAqC,gBACjDL,KAAA,CAAAI,aAAA,CAACH,SAAS,MAAE,CACX,CAAC,eACND,KAAA,CAAAI,aAAA;IAAKC,SAAS,EAAE;EAA+B,gBAC3CL,KAAA,CAAAI,aAAA,CAACF,IAAI;IAACI,IAAI,EAAE,IAAK;IAACD,SAAS,EAAE;EAAsD,GAC9E,kBACC,CACL,CACJ,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import type { FederatedIdentityProvider } from "../../../../admin/federatedIdentityProviders.js";
3
+ interface FederatedLoginProps {
4
+ providers: FederatedIdentityProvider[];
5
+ }
6
+ export declare const FederatedLogin: ({ providers }: FederatedLoginProps) => React.JSX.Element;
7
+ export {};
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ import { Auth } from "@aws-amplify/auth";
3
+ import { federatedIdentityProviders } from "../../../federatedIdentityProviders.js";
4
+ import { FederatedProviders } from "./FederatedProviders.js";
5
+ export const FederatedLogin = ({
6
+ providers
7
+ }) => {
8
+ return /*#__PURE__*/React.createElement(FederatedProviders.Container, null, providers.map(({
9
+ name,
10
+ component: Component
11
+ }) => {
12
+ const cognitoProviderName = federatedIdentityProviders[name] ?? name;
13
+ const isCustomProvider = !(name in federatedIdentityProviders);
14
+ const signIn = () => {
15
+ if (isCustomProvider) {
16
+ Auth.federatedSignIn({
17
+ customProvider: cognitoProviderName
18
+ });
19
+ } else {
20
+ Auth.federatedSignIn({
21
+ provider: cognitoProviderName
22
+ });
23
+ }
24
+ };
25
+ return /*#__PURE__*/React.createElement(Component, {
26
+ key: name,
27
+ signIn: signIn
28
+ });
29
+ }));
30
+ };
31
+
32
+ //# sourceMappingURL=FederatedLogin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Auth","federatedIdentityProviders","FederatedProviders","FederatedLogin","providers","createElement","Container","map","name","component","Component","cognitoProviderName","isCustomProvider","signIn","federatedSignIn","customProvider","provider","key"],"sources":["FederatedLogin.tsx"],"sourcesContent":["import React from \"react\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport type { CognitoHostedUIIdentityProvider } from \"@aws-amplify/auth/lib-esm/types/Auth.js\";\nimport type { FederatedIdentityProvider } from \"~/admin/federatedIdentityProviders.js\";\nimport { federatedIdentityProviders } from \"~/admin/federatedIdentityProviders.js\";\nimport { FederatedProviders } from \"./FederatedProviders.js\";\n\ninterface FederatedLoginProps {\n providers: FederatedIdentityProvider[];\n}\n\nexport const FederatedLogin = ({ providers }: FederatedLoginProps) => {\n return (\n <FederatedProviders.Container>\n {providers.map(({ name, component: Component }) => {\n const cognitoProviderName = federatedIdentityProviders[name] ?? name;\n const isCustomProvider = !(name in federatedIdentityProviders);\n\n const signIn = () => {\n if (isCustomProvider) {\n Auth.federatedSignIn({\n customProvider: cognitoProviderName\n });\n } else {\n Auth.federatedSignIn({\n provider: cognitoProviderName as CognitoHostedUIIdentityProvider\n });\n }\n };\n\n return <Component key={name} signIn={signIn} />;\n })}\n </FederatedProviders.Container>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,mBAAmB;AAGxC,SAASC,0BAA0B;AACnC,SAASC,kBAAkB;AAM3B,OAAO,MAAMC,cAAc,GAAGA,CAAC;EAAEC;AAA+B,CAAC,KAAK;EAClE,oBACIL,KAAA,CAAAM,aAAA,CAACH,kBAAkB,CAACI,SAAS,QACxBF,SAAS,CAACG,GAAG,CAAC,CAAC;IAAEC,IAAI;IAAEC,SAAS,EAAEC;EAAU,CAAC,KAAK;IAC/C,MAAMC,mBAAmB,GAAGV,0BAA0B,CAACO,IAAI,CAAC,IAAIA,IAAI;IACpE,MAAMI,gBAAgB,GAAG,EAAEJ,IAAI,IAAIP,0BAA0B,CAAC;IAE9D,MAAMY,MAAM,GAAGA,CAAA,KAAM;MACjB,IAAID,gBAAgB,EAAE;QAClBZ,IAAI,CAACc,eAAe,CAAC;UACjBC,cAAc,EAAEJ;QACpB,CAAC,CAAC;MACN,CAAC,MAAM;QACHX,IAAI,CAACc,eAAe,CAAC;UACjBE,QAAQ,EAAEL;QACd,CAAC,CAAC;MACN;IACJ,CAAC;IAED,oBAAOZ,KAAA,CAAAM,aAAA,CAACK,SAAS;MAACO,GAAG,EAAET,IAAK;MAACK,MAAM,EAAEA;IAAO,CAAE,CAAC;EACnD,CAAC,CACyB,CAAC;AAEvC,CAAC","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ import React from "react";
2
+ export interface ContainerProps {
3
+ children: React.ReactNode;
4
+ }
5
+ export declare const Container: (({ children }: ContainerProps) => React.JSX.Element) & {
6
+ original: ({ children }: ContainerProps) => React.JSX.Element;
7
+ originalName: string;
8
+ displayName: string;
9
+ } & {
10
+ original: (({ children }: ContainerProps) => React.JSX.Element) & {
11
+ original: ({ children }: ContainerProps) => React.JSX.Element;
12
+ originalName: string;
13
+ displayName: string;
14
+ };
15
+ originalName: string;
16
+ displayName: string;
17
+ } & {
18
+ createDecorator: (decorator: import("@webiny/app-admin").ComponentDecorator<(({ children }: ContainerProps) => React.JSX.Element) & {
19
+ original: ({ children }: ContainerProps) => React.JSX.Element;
20
+ originalName: string;
21
+ displayName: string;
22
+ }>) => (props: unknown) => React.JSX.Element;
23
+ };
24
+ export declare const FederatedProviders: {
25
+ Container: (({ children }: ContainerProps) => React.JSX.Element) & {
26
+ original: ({ children }: ContainerProps) => React.JSX.Element;
27
+ originalName: string;
28
+ displayName: string;
29
+ } & {
30
+ original: (({ children }: ContainerProps) => React.JSX.Element) & {
31
+ original: ({ children }: ContainerProps) => React.JSX.Element;
32
+ originalName: string;
33
+ displayName: string;
34
+ };
35
+ originalName: string;
36
+ displayName: string;
37
+ } & {
38
+ createDecorator: (decorator: import("@webiny/app-admin").ComponentDecorator<(({ children }: ContainerProps) => React.JSX.Element) & {
39
+ original: ({ children }: ContainerProps) => React.JSX.Element;
40
+ originalName: string;
41
+ displayName: string;
42
+ }>) => (props: unknown) => React.JSX.Element;
43
+ };
44
+ };
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import { makeDecoratable } from "@webiny/app-admin";
3
+ export const Container = makeDecoratable("FederatedProvidersContainer", ({
4
+ children
5
+ }) => {
6
+ return /*#__PURE__*/React.createElement("div", {
7
+ className: "flex flex-col gap-xs"
8
+ }, children);
9
+ });
10
+ export const FederatedProviders = {
11
+ Container
12
+ };
13
+
14
+ //# sourceMappingURL=FederatedProviders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","makeDecoratable","Container","children","createElement","className","FederatedProviders"],"sources":["FederatedProviders.tsx"],"sourcesContent":["import React from \"react\";\nimport { makeDecoratable } from \"@webiny/app-admin\";\n\nexport interface ContainerProps {\n children: React.ReactNode;\n}\n\nexport const Container = makeDecoratable(\n \"FederatedProvidersContainer\",\n ({ children }: ContainerProps) => {\n return <div className={\"flex flex-col gap-xs\"}>{children}</div>;\n }\n);\n\nexport const FederatedProviders = {\n Container\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,mBAAmB;AAMnD,OAAO,MAAMC,SAAS,GAAGD,eAAe,CACpC,6BAA6B,EAC7B,CAAC;EAAEE;AAAyB,CAAC,KAAK;EAC9B,oBAAOH,KAAA,CAAAI,aAAA;IAAKC,SAAS,EAAE;EAAuB,GAAEF,QAAc,CAAC;AACnE,CACJ,CAAC;AAED,OAAO,MAAMG,kBAAkB,GAAG;EAC9BJ;AACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ interface FooterSignInProps {
3
+ onSignIn: () => void;
4
+ }
5
+ export declare const FooterSignIn: ({ onSignIn }: FooterSignInProps) => React.JSX.Element;
6
+ export {};
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ import { Link, Text } from "@webiny/admin-ui";
3
+ export const FooterSignIn = ({
4
+ onSignIn
5
+ }) => {
6
+ return /*#__PURE__*/React.createElement(Text, {
7
+ as: "div",
8
+ size: "sm"
9
+ }, "Want to sign in?\xA0", /*#__PURE__*/React.createElement(Link, {
10
+ to: "#",
11
+ onClick: onSignIn
12
+ }, "Sign in"), ".");
13
+ };
14
+
15
+ //# sourceMappingURL=FooterSignIn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Link","Text","FooterSignIn","onSignIn","createElement","as","size","to","onClick"],"sources":["FooterSignIn.tsx"],"sourcesContent":["import React from \"react\";\nimport { Link, Text } from \"@webiny/admin-ui\";\n\ninterface FooterSignInProps {\n onSignIn: () => void;\n}\n\nexport const FooterSignIn = ({ onSignIn }: FooterSignInProps) => {\n return (\n <Text as={\"div\"} size={\"sm\"}>\n Want to sign in?&nbsp;\n <Link to=\"#\" onClick={onSignIn}>\n Sign in\n </Link>\n .\n </Text>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,kBAAkB;AAM7C,OAAO,MAAMC,YAAY,GAAGA,CAAC;EAAEC;AAA4B,CAAC,KAAK;EAC7D,oBACIJ,KAAA,CAAAK,aAAA,CAACH,IAAI;IAACI,EAAE,EAAE,KAAM;IAACC,IAAI,EAAE;EAAK,GAAC,sBAEzB,eAAAP,KAAA,CAAAK,aAAA,CAACJ,IAAI;IAACO,EAAE,EAAC,GAAG;IAACC,OAAO,EAAEL;EAAS,GAAC,SAE1B,CAAC,KAEL,CAAC;AAEf,CAAC","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import type { PasswordResetCodeSentVM } from "../../../../admin/presentation/Cognito/abstractions.js";
3
+ export interface PasswordResetCodeSentProps {
4
+ vm: PasswordResetCodeSentVM;
5
+ onResendCode: () => void;
6
+ onCodeAcquired: () => void;
7
+ onCancel: () => void;
8
+ }
9
+ export declare const PasswordResetCodeSent: (props: PasswordResetCodeSentProps) => React.JSX.Element;
@@ -0,0 +1,43 @@
1
+ import React from "react";
2
+ import { Alert, Button, Grid, Text } from "@webiny/admin-ui";
3
+ import { View } from "./View.js";
4
+ import { FooterSignIn } from "./FooterSignIn.js";
5
+ export const PasswordResetCodeSent = props => {
6
+ const {
7
+ vm,
8
+ onResendCode,
9
+ onCodeAcquired,
10
+ onCancel
11
+ } = props;
12
+ return /*#__PURE__*/React.createElement(View.Container, null, /*#__PURE__*/React.createElement(View.Content, null, /*#__PURE__*/React.createElement(View.Title, {
13
+ title: "Password recovery",
14
+ description: "Request a password reset code."
15
+ }), vm.message && /*#__PURE__*/React.createElement("div", {
16
+ className: "mb-lg"
17
+ }, /*#__PURE__*/React.createElement(Alert, {
18
+ title: vm.message.title,
19
+ type: vm.message.type
20
+ }, vm.message.text)), /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
21
+ span: 12
22
+ }, /*#__PURE__*/React.createElement(Text, null, "We have sent you a code to reset your password.")), /*#__PURE__*/React.createElement(Grid.Column, {
23
+ span: 12
24
+ }, /*#__PURE__*/React.createElement(Text, null, "Click the \"Resend code\" button below to resend the code in case you haven't received it the first time.")), /*#__PURE__*/React.createElement(Grid.Column, {
25
+ span: 12
26
+ }, /*#__PURE__*/React.createElement("div", {
27
+ className: "flex items-center justify-between"
28
+ }, /*#__PURE__*/React.createElement(FooterSignIn, {
29
+ onSignIn: onCancel
30
+ }), /*#__PURE__*/React.createElement("div", {
31
+ className: "flex gap-x-sm"
32
+ }, /*#__PURE__*/React.createElement(Button, {
33
+ variant: "secondary",
34
+ text: "Resend code",
35
+ onClick: onResendCode
36
+ }), /*#__PURE__*/React.createElement(Button, {
37
+ variant: "primary",
38
+ text: "I got the code!",
39
+ onClick: onCodeAcquired
40
+ })))))));
41
+ };
42
+
43
+ //# sourceMappingURL=PasswordResetCodeSent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Alert","Button","Grid","Text","View","FooterSignIn","PasswordResetCodeSent","props","vm","onResendCode","onCodeAcquired","onCancel","createElement","Container","Content","Title","title","description","message","className","type","text","Column","span","onSignIn","variant","onClick"],"sources":["PasswordResetCodeSent.tsx"],"sourcesContent":["import React from \"react\";\nimport { Alert, Button, Grid, Text } from \"@webiny/admin-ui\";\nimport { View } from \"./View.js\";\nimport type { PasswordResetCodeSentVM } from \"~/admin/presentation/Cognito/abstractions.js\";\nimport { FooterSignIn } from \"~/admin/presentation/Cognito/components/FooterSignIn.js\";\n\nexport interface PasswordResetCodeSentProps {\n vm: PasswordResetCodeSentVM;\n onResendCode: () => void;\n onCodeAcquired: () => void;\n onCancel: () => void;\n}\n\nexport const PasswordResetCodeSent = (props: PasswordResetCodeSentProps) => {\n const { vm, onResendCode, onCodeAcquired, onCancel } = props;\n\n return (\n <View.Container>\n <View.Content>\n <View.Title\n title={\"Password recovery\"}\n description={\"Request a password reset code.\"}\n />\n\n {vm.message && (\n <div className={\"mb-lg\"}>\n <Alert title={vm.message.title} type={vm.message.type}>\n {vm.message.text}\n </Alert>\n </div>\n )}\n\n <Grid>\n <Grid.Column span={12}>\n <Text>We have sent you a code to reset your password.</Text>\n </Grid.Column>\n <Grid.Column span={12}>\n <Text>\n Click the &quot;Resend code&quot; button below to resend the code in\n case you haven&apos;t received it the first time.\n </Text>\n </Grid.Column>\n\n <Grid.Column span={12}>\n <div className={\"flex items-center justify-between\"}>\n <FooterSignIn onSignIn={onCancel} />\n <div className={\"flex gap-x-sm\"}>\n <Button\n variant={\"secondary\"}\n text={\"Resend code\"}\n onClick={onResendCode}\n />\n <Button\n variant={\"primary\"}\n text={\"I got the code!\"}\n onClick={onCodeAcquired}\n />\n </div>\n </div>\n </Grid.Column>\n </Grid>\n </View.Content>\n </View.Container>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,KAAK,EAAEC,MAAM,EAAEC,IAAI,EAAEC,IAAI,QAAQ,kBAAkB;AAC5D,SAASC,IAAI;AAEb,SAASC,YAAY;AASrB,OAAO,MAAMC,qBAAqB,GAAIC,KAAiC,IAAK;EACxE,MAAM;IAAEC,EAAE;IAAEC,YAAY;IAAEC,cAAc;IAAEC;EAAS,CAAC,GAAGJ,KAAK;EAE5D,oBACIR,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACS,SAAS,qBACXd,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACU,OAAO,qBACTf,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACW,KAAK;IACPC,KAAK,EAAE,mBAAoB;IAC3BC,WAAW,EAAE;EAAiC,CACjD,CAAC,EAEDT,EAAE,CAACU,OAAO,iBACPnB,KAAA,CAAAa,aAAA;IAAKO,SAAS,EAAE;EAAQ,gBACpBpB,KAAA,CAAAa,aAAA,CAACZ,KAAK;IAACgB,KAAK,EAAER,EAAE,CAACU,OAAO,CAACF,KAAM;IAACI,IAAI,EAAEZ,EAAE,CAACU,OAAO,CAACE;EAAK,GACjDZ,EAAE,CAACU,OAAO,CAACG,IACT,CACN,CACR,eAEDtB,KAAA,CAAAa,aAAA,CAACV,IAAI,qBACDH,KAAA,CAAAa,aAAA,CAACV,IAAI,CAACoB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBxB,KAAA,CAAAa,aAAA,CAACT,IAAI,QAAC,iDAAqD,CAClD,CAAC,eACdJ,KAAA,CAAAa,aAAA,CAACV,IAAI,CAACoB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBxB,KAAA,CAAAa,aAAA,CAACT,IAAI,QAAC,2GAGA,CACG,CAAC,eAEdJ,KAAA,CAAAa,aAAA,CAACV,IAAI,CAACoB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBxB,KAAA,CAAAa,aAAA;IAAKO,SAAS,EAAE;EAAoC,gBAChDpB,KAAA,CAAAa,aAAA,CAACP,YAAY;IAACmB,QAAQ,EAAEb;EAAS,CAAE,CAAC,eACpCZ,KAAA,CAAAa,aAAA;IAAKO,SAAS,EAAE;EAAgB,gBAC5BpB,KAAA,CAAAa,aAAA,CAACX,MAAM;IACHwB,OAAO,EAAE,WAAY;IACrBJ,IAAI,EAAE,aAAc;IACpBK,OAAO,EAAEjB;EAAa,CACzB,CAAC,eACFV,KAAA,CAAAa,aAAA,CAACX,MAAM;IACHwB,OAAO,EAAE,SAAU;IACnBJ,IAAI,EAAE,iBAAkB;IACxBK,OAAO,EAAEhB;EAAe,CAC3B,CACA,CACJ,CACI,CACX,CACI,CACF,CAAC;AAEzB,CAAC","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { RequestPasswordResetCodeVM } from "../../../../admin/presentation/Cognito/abstractions.js";
3
+ export interface ForgotPasswordProps {
4
+ vm: RequestPasswordResetCodeVM;
5
+ onRequestCode: (username: string) => void;
6
+ onCancel: () => void;
7
+ }
8
+ export declare const RequestPasswordResetCode: (props: ForgotPasswordProps) => React.JSX.Element;