@webiny/cognito 6.6.0-alpha.0 → 6.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/Cognito.d.ts +51 -0
  2. package/Cognito.js +78 -4
  3. package/Cognito.js.map +1 -1
  4. package/admin/Cognito.js +8 -2
  5. package/admin/Cognito.js.map +1 -1
  6. package/admin/DefaultCognitoSignInConfig.d.ts +23 -0
  7. package/admin/DefaultCognitoSignInConfig.js +51 -0
  8. package/admin/DefaultCognitoSignInConfig.js.map +1 -0
  9. package/admin/SignInExtension.d.ts +2 -0
  10. package/admin/SignInExtension.js +9 -0
  11. package/admin/SignInExtension.js.map +1 -0
  12. package/admin/index.d.ts +2 -0
  13. package/admin/index.js +2 -0
  14. package/admin/presentation/Cognito/CognitoLoginScreen.d.ts +2 -2
  15. package/admin/presentation/Cognito/CognitoLoginScreen.js +9 -0
  16. package/admin/presentation/Cognito/CognitoLoginScreen.js.map +1 -1
  17. package/admin/presentation/Cognito/CognitoPresenter.d.ts +25 -1
  18. package/admin/presentation/Cognito/CognitoPresenter.js +122 -10
  19. package/admin/presentation/Cognito/CognitoPresenter.js.map +1 -1
  20. package/admin/presentation/Cognito/CognitoSignInConfig.d.ts +31 -0
  21. package/admin/presentation/Cognito/CognitoSignInConfig.js +5 -0
  22. package/admin/presentation/Cognito/CognitoSignInConfig.js.map +1 -0
  23. package/admin/presentation/Cognito/abstractions.d.ts +20 -1
  24. package/admin/presentation/Cognito/abstractions.js.map +1 -1
  25. package/admin/presentation/Cognito/components/ConfirmTotpCode.d.ts +26 -0
  26. package/admin/presentation/Cognito/components/ConfirmTotpCode.js +45 -0
  27. package/admin/presentation/Cognito/components/ConfirmTotpCode.js.map +1 -0
  28. package/admin/presentation/Cognito/components/Divider.d.ts +19 -1
  29. package/admin/presentation/Cognito/components/Divider.js +3 -2
  30. package/admin/presentation/Cognito/components/Divider.js.map +1 -1
  31. package/admin/presentation/Cognito/components/FederatedLogin.d.ts +22 -5
  32. package/admin/presentation/Cognito/components/FederatedLogin.js +19 -6
  33. package/admin/presentation/Cognito/components/FederatedLogin.js.map +1 -1
  34. package/admin/presentation/Cognito/components/FooterSignIn.d.ts +20 -3
  35. package/admin/presentation/Cognito/components/FooterSignIn.js +3 -2
  36. package/admin/presentation/Cognito/components/FooterSignIn.js.map +1 -1
  37. package/admin/presentation/Cognito/components/PasswordResetCodeSent.d.ts +19 -1
  38. package/admin/presentation/Cognito/components/PasswordResetCodeSent.js +3 -2
  39. package/admin/presentation/Cognito/components/PasswordResetCodeSent.js.map +1 -1
  40. package/admin/presentation/Cognito/components/RequestPasswordResetCode.d.ts +19 -1
  41. package/admin/presentation/Cognito/components/RequestPasswordResetCode.js +3 -2
  42. package/admin/presentation/Cognito/components/RequestPasswordResetCode.js.map +1 -1
  43. package/admin/presentation/Cognito/components/RequireNewPassword.d.ts +19 -1
  44. package/admin/presentation/Cognito/components/RequireNewPassword.js +3 -2
  45. package/admin/presentation/Cognito/components/RequireNewPassword.js.map +1 -1
  46. package/admin/presentation/Cognito/components/SetNewPassword.d.ts +19 -1
  47. package/admin/presentation/Cognito/components/SetNewPassword.js +3 -2
  48. package/admin/presentation/Cognito/components/SetNewPassword.js.map +1 -1
  49. package/admin/presentation/Cognito/components/SetupTotp.d.ts +25 -0
  50. package/admin/presentation/Cognito/components/SetupTotp.js +60 -0
  51. package/admin/presentation/Cognito/components/SetupTotp.js.map +1 -0
  52. package/admin/presentation/Cognito/components/SignIn.d.ts +19 -3
  53. package/admin/presentation/Cognito/components/SignIn.js +14 -7
  54. package/admin/presentation/Cognito/components/SignIn.js.map +1 -1
  55. package/admin/presentation/Cognito/components/index.d.ts +292 -0
  56. package/admin/presentation/Cognito/components/index.js +29 -0
  57. package/admin/presentation/Cognito/components/index.js.map +1 -0
  58. package/admin/presentation/Cognito/signInFeature.d.ts +1 -0
  59. package/admin/presentation/Cognito/signInFeature.js +11 -0
  60. package/admin/presentation/Cognito/signInFeature.js.map +1 -0
  61. package/admin/ui/views/Account/Account.js.map +1 -1
  62. package/admin/ui/views/Users/UsersForm.js +21 -15
  63. package/admin/ui/views/Users/UsersForm.js.map +1 -1
  64. package/admin/ui/views/Users/UsersView.js +3 -3
  65. package/admin/ui/views/Users/UsersView.js.map +1 -1
  66. package/admin/ui/views/Users/hooks/useUserForm.js.map +1 -1
  67. package/api/features/CognitoIdp/CognitoIdentityProvider.js +15 -11
  68. package/api/features/CognitoIdp/CognitoIdentityProvider.js.map +1 -1
  69. package/api/features/CognitoIdp/abstractions.d.ts +1 -1
  70. package/api/features/CognitoIdp/abstractions.js.map +1 -1
  71. package/api/index.d.ts +1 -0
  72. package/api/index.js +1 -0
  73. package/index.d.ts +0 -1
  74. package/index.js +0 -1
  75. package/infra/CognitoFederationPulumi.d.ts +8 -0
  76. package/infra/CognitoFederationPulumi.js +17 -0
  77. package/infra/CognitoFederationPulumi.js.map +1 -0
  78. package/package.json +23 -21
package/Cognito.d.ts CHANGED
@@ -1,4 +1,55 @@
1
1
  import { z } from "zod";
2
+ declare const federationSchema: z.ZodObject<{
3
+ domain: z.ZodString;
4
+ callbackUrls: z.ZodArray<z.ZodString>;
5
+ logoutUrls: z.ZodOptional<z.ZodArray<z.ZodString>>;
6
+ responseType: z.ZodDefault<z.ZodEnum<{
7
+ code: "code";
8
+ token: "token";
9
+ }>>;
10
+ allowCredentialsLogin: z.ZodDefault<z.ZodBoolean>;
11
+ identityProviders: z.ZodArray<z.ZodObject<{
12
+ type: z.ZodEnum<{
13
+ amazon: "amazon";
14
+ apple: "apple";
15
+ facebook: "facebook";
16
+ google: "google";
17
+ oidc: "oidc";
18
+ }>;
19
+ name: z.ZodOptional<z.ZodString>;
20
+ label: z.ZodString;
21
+ providerDetails: z.ZodRecord<z.ZodString, z.ZodAny>;
22
+ idpIdentifiers: z.ZodOptional<z.ZodArray<z.ZodString>>;
23
+ attributeMapping: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
24
+ }, z.core.$strip>>;
25
+ }, z.core.$strip>;
2
26
  export declare const Cognito: import("@webiny/project/defineExtension/defineExtension").ExtensionComponent<z.ZodObject<{
3
27
  apiConfig: z.ZodOptional<z.ZodString>;
28
+ adminConfig: z.ZodOptional<z.ZodString>;
29
+ federation: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
30
+ domain: z.ZodString;
31
+ callbackUrls: z.ZodArray<z.ZodString>;
32
+ logoutUrls: z.ZodOptional<z.ZodArray<z.ZodString>>;
33
+ responseType: z.ZodDefault<z.ZodEnum<{
34
+ code: "code";
35
+ token: "token";
36
+ }>>;
37
+ allowCredentialsLogin: z.ZodDefault<z.ZodBoolean>;
38
+ identityProviders: z.ZodArray<z.ZodObject<{
39
+ type: z.ZodEnum<{
40
+ amazon: "amazon";
41
+ apple: "apple";
42
+ facebook: "facebook";
43
+ google: "google";
44
+ oidc: "oidc";
45
+ }>;
46
+ name: z.ZodOptional<z.ZodString>;
47
+ label: z.ZodString;
48
+ providerDetails: z.ZodRecord<z.ZodString, z.ZodAny>;
49
+ idpIdentifiers: z.ZodOptional<z.ZodArray<z.ZodString>>;
50
+ attributeMapping: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
51
+ }, z.core.$strip>>;
52
+ }, z.core.$strip>, z.ZodCustom<() => Promise<z.infer<typeof federationSchema>>, () => Promise<z.infer<typeof federationSchema>>>]>>;
53
+ mfa: z.ZodDefault<z.ZodBoolean>;
4
54
  }, z.core.$strip>>;
55
+ export {};
package/Cognito.js CHANGED
@@ -1,7 +1,33 @@
1
1
  import react from "react";
2
2
  import { defineExtension } from "@webiny/project/defineExtension/index.js";
3
3
  import { Admin, Api, Infra } from "@webiny/project-aws";
4
+ import { Await } from "@webiny/react-properties";
4
5
  import { z } from "zod";
6
+ const identityProviderSchema = z.object({
7
+ type: z["enum"]([
8
+ "google",
9
+ "facebook",
10
+ "amazon",
11
+ "apple",
12
+ "oidc"
13
+ ]),
14
+ name: z.string().optional(),
15
+ label: z.string(),
16
+ providerDetails: z.record(z.string(), z.any()),
17
+ idpIdentifiers: z.array(z.string()).optional(),
18
+ attributeMapping: z.record(z.string(), z.string()).optional()
19
+ });
20
+ const federationSchema = z.object({
21
+ domain: z.string().describe("Cognito User Pool domain prefix."),
22
+ callbackUrls: z.array(z.string()).describe("OAuth callback URLs."),
23
+ logoutUrls: z.array(z.string()).optional(),
24
+ responseType: z["enum"]([
25
+ "code",
26
+ "token"
27
+ ]).default("code"),
28
+ allowCredentialsLogin: z.boolean().default(true),
29
+ identityProviders: z.array(identityProviderSchema)
30
+ });
5
31
  const Cognito = defineExtension({
6
32
  type: "Project/Cognito",
7
33
  tags: {
@@ -9,19 +35,67 @@ const Cognito = defineExtension({
9
35
  },
10
36
  description: "Enable and configure Cognito authentication.",
11
37
  paramsSchema: z.object({
12
- apiConfig: z.string().describe("Path to API configuration.").optional()
38
+ apiConfig: z.string().describe("Path to API configuration.").optional(),
39
+ adminConfig: z.string().describe("Path to Admin configuration.").optional(),
40
+ federation: z.union([
41
+ federationSchema,
42
+ z.custom((val)=>"function" == typeof val)
43
+ ]).optional(),
44
+ mfa: z.boolean().describe("Enable TOTP MFA for all users.").default(false)
13
45
  }),
14
- render: (props)=>/*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Infra.EnvVar, {
46
+ render: (props)=>{
47
+ const federationProp = props.federation;
48
+ const federationFn = federationProp ? "function" == typeof federationProp ? federationProp : ()=>Promise.resolve(federationProp) : null;
49
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Infra.EnvVar, {
15
50
  varName: "REACT_APP_IDP_TYPE",
16
51
  value: "cognito"
17
- }), /*#__PURE__*/ react.createElement(Api.Extension, {
52
+ }), props.mfa ? /*#__PURE__*/ react.createElement(Infra.EnvVar, {
53
+ varName: "COGNITO_MFA",
54
+ value: "true"
55
+ }) : null, /*#__PURE__*/ react.createElement(Api.Extension, {
18
56
  src: import.meta.dirname + "/api/CognitoApiFeature.js",
19
57
  exportName: "CognitoApiFeature"
20
58
  }), props.apiConfig ? /*#__PURE__*/ react.createElement(Api.Extension, {
21
59
  src: props.apiConfig
22
60
  }) : null, /*#__PURE__*/ react.createElement(Admin.Extension, {
23
61
  src: import.meta.dirname + "/admin/Extension.js"
24
- }))
62
+ }), props.adminConfig ? /*#__PURE__*/ react.createElement(Admin.Extension, {
63
+ src: props.adminConfig
64
+ }) : null, federationFn ? /*#__PURE__*/ react.createElement(Await, {
65
+ fn: federationFn
66
+ }, (federation)=>/*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Admin.Extension, {
67
+ src: import.meta.dirname + "/admin/SignInExtension.js",
68
+ exportName: "SignInExtension"
69
+ }), /*#__PURE__*/ react.createElement(Infra.EnvVar, {
70
+ varName: "COGNITO_FEDERATION_INFRA_CONFIG",
71
+ value: JSON.stringify({
72
+ domain: federation.domain,
73
+ callbackUrls: federation.callbackUrls,
74
+ logoutUrls: federation.logoutUrls,
75
+ identityProviders: federation.identityProviders.map((idp)=>({
76
+ type: idp.type,
77
+ name: idp.name,
78
+ providerDetails: idp.providerDetails,
79
+ idpIdentifiers: idp.idpIdentifiers,
80
+ attributeMapping: idp.attributeMapping
81
+ }))
82
+ })
83
+ }), /*#__PURE__*/ react.createElement(Infra.Core.Pulumi, {
84
+ src: import.meta.dirname + "/infra/CognitoFederationPulumi.js"
85
+ }), /*#__PURE__*/ react.createElement(Admin.BuildParam, {
86
+ paramName: "cognitoFederation",
87
+ value: {
88
+ callbackUrls: federation.callbackUrls,
89
+ logoutUrls: federation.logoutUrls || federation.callbackUrls,
90
+ responseType: federation.responseType,
91
+ allowCredentialsLogin: federation.allowCredentialsLogin,
92
+ providers: federation.identityProviders.map((idp)=>({
93
+ name: idp.name || idp.type,
94
+ label: idp.label
95
+ }))
96
+ }
97
+ }))) : null);
98
+ }
25
99
  });
26
100
  export { Cognito };
27
101
 
package/Cognito.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Cognito.js","sources":["../src/Cognito.tsx"],"sourcesContent":["import React from \"react\";\nimport { defineExtension } from \"@webiny/project/defineExtension/index.js\";\nimport { Api, Admin, Infra } from \"@webiny/project-aws\";\nimport { z } from \"zod\";\n\nexport const Cognito = defineExtension({\n type: \"Project/Cognito\",\n tags: { runtimeContext: \"project\" },\n description: \"Enable and configure Cognito authentication.\",\n paramsSchema: z.object({\n apiConfig: z.string().describe(\"Path to API configuration.\").optional()\n }),\n render: props => {\n return (\n <>\n <Infra.EnvVar varName={\"REACT_APP_IDP_TYPE\"} value={\"cognito\"} />\n {/* Api extensions */}\n <Api.Extension\n src={import.meta.dirname + \"/api/CognitoApiFeature.js\"}\n exportName={\"CognitoApiFeature\"}\n />\n {props.apiConfig ? <Api.Extension src={props.apiConfig} /> : null}\n {/* Admin extensions */}\n <Admin.Extension src={import.meta.dirname + \"/admin/Extension.js\"} />\n </>\n );\n }\n});\n"],"names":["Cognito","defineExtension","z","props","Infra","Api","Admin"],"mappings":";;;;AAKO,MAAMA,UAAUC,gBAAgB;IACnC,MAAM;IACN,MAAM;QAAE,gBAAgB;IAAU;IAClC,aAAa;IACb,cAAcC,EAAE,MAAM,CAAC;QACnB,WAAWA,EAAE,MAAM,GAAG,QAAQ,CAAC,8BAA8B,QAAQ;IACzE;IACA,QAAQC,CAAAA,QACG,WAAP,GACI,wDACI,oBAACC,MAAM,MAAM;YAAC,SAAS;YAAsB,OAAO;0BAEpD,oBAACC,IAAI,SAAS;YACV,KAAK,YAAY,OAAO,GAAG;YAC3B,YAAY;YAEfF,MAAM,SAAS,GAAG,WAAH,GAAG,oBAACE,IAAI,SAAS;YAAC,KAAKF,MAAM,SAAS;aAAO,oBAE7D,oBAACG,MAAM,SAAS;YAAC,KAAK,YAAY,OAAO,GAAG;;AAI5D"}
1
+ {"version":3,"file":"Cognito.js","sources":["../src/Cognito.tsx"],"sourcesContent":["import React from \"react\";\nimport { defineExtension } from \"@webiny/project/defineExtension/index.js\";\nimport { Api, Admin, Infra } from \"@webiny/project-aws\";\nimport { Await } from \"@webiny/react-properties\";\nimport { z } from \"zod\";\n\nconst identityProviderSchema = z.object({\n type: z.enum([\"google\", \"facebook\", \"amazon\", \"apple\", \"oidc\"]),\n name: z.string().optional(),\n label: z.string(),\n providerDetails: z.record(z.string(), z.any()),\n idpIdentifiers: z.array(z.string()).optional(),\n attributeMapping: z.record(z.string(), z.string()).optional()\n});\n\nconst federationSchema = z.object({\n domain: z.string().describe(\"Cognito User Pool domain prefix.\"),\n callbackUrls: z.array(z.string()).describe(\"OAuth callback URLs.\"),\n logoutUrls: z.array(z.string()).optional(),\n responseType: z.enum([\"code\", \"token\"]).default(\"code\"),\n allowCredentialsLogin: z.boolean().default(true),\n identityProviders: z.array(identityProviderSchema)\n});\n\nexport const Cognito = defineExtension({\n type: \"Project/Cognito\",\n tags: { runtimeContext: \"project\" },\n description: \"Enable and configure Cognito authentication.\",\n paramsSchema: z.object({\n apiConfig: z.string().describe(\"Path to API configuration.\").optional(),\n adminConfig: z.string().describe(\"Path to Admin configuration.\").optional(),\n federation: z\n .union([\n federationSchema,\n z.custom<() => Promise<z.infer<typeof federationSchema>>>(\n val => typeof val === \"function\"\n )\n ])\n .optional(),\n mfa: z.boolean().describe(\"Enable TOTP MFA for all users.\").default(false)\n }),\n render: props => {\n const federationProp = props.federation;\n const federationFn = federationProp\n ? typeof federationProp === \"function\"\n ? federationProp\n : () => Promise.resolve(federationProp)\n : null;\n\n return (\n <>\n <Infra.EnvVar varName={\"REACT_APP_IDP_TYPE\"} value={\"cognito\"} />\n {props.mfa ? <Infra.EnvVar varName={\"COGNITO_MFA\"} value={\"true\"} /> : null}\n\n {/* Api extensions */}\n <Api.Extension\n src={import.meta.dirname + \"/api/CognitoApiFeature.js\"}\n exportName={\"CognitoApiFeature\"}\n />\n {props.apiConfig ? <Api.Extension src={props.apiConfig} /> : null}\n\n {/* Admin extensions */}\n <Admin.Extension src={import.meta.dirname + \"/admin/Extension.js\"} />\n {props.adminConfig ? <Admin.Extension src={props.adminConfig} /> : null}\n\n {/* Federation infra + admin config */}\n {federationFn ? (\n <Await fn={federationFn}>\n {federation => (\n <>\n <Admin.Extension\n src={import.meta.dirname + \"/admin/SignInExtension.js\"}\n exportName={\"SignInExtension\"}\n />\n <Infra.EnvVar\n varName={\"COGNITO_FEDERATION_INFRA_CONFIG\"}\n value={JSON.stringify({\n domain: federation.domain,\n callbackUrls: federation.callbackUrls,\n logoutUrls: federation.logoutUrls,\n identityProviders: federation.identityProviders.map(\n idp => ({\n type: idp.type,\n name: idp.name,\n providerDetails: idp.providerDetails,\n idpIdentifiers: idp.idpIdentifiers,\n attributeMapping: idp.attributeMapping\n })\n )\n })}\n />\n <Infra.Core.Pulumi\n src={import.meta.dirname + \"/infra/CognitoFederationPulumi.js\"}\n />\n <Admin.BuildParam\n paramName={\"cognitoFederation\"}\n value={{\n callbackUrls: federation.callbackUrls,\n logoutUrls:\n federation.logoutUrls || federation.callbackUrls,\n responseType: federation.responseType,\n allowCredentialsLogin: federation.allowCredentialsLogin,\n providers: federation.identityProviders.map(idp => ({\n name: idp.name || idp.type,\n label: idp.label\n }))\n }}\n />\n </>\n )}\n </Await>\n ) : null}\n </>\n );\n }\n});\n"],"names":["identityProviderSchema","z","federationSchema","Cognito","defineExtension","val","props","federationProp","federationFn","Promise","Infra","Api","Admin","Await","federation","JSON","idp"],"mappings":"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"}
package/admin/Cognito.js CHANGED
@@ -15,12 +15,18 @@ const CognitoIdP = (props)=>{
15
15
  route: Routes.Users.List,
16
16
  element: /*#__PURE__*/ react.createElement(AdminLayout, {
17
17
  title: "Admin Users"
18
- }, /*#__PURE__*/ react.createElement(UsersView, null))
18
+ }, /*#__PURE__*/ react.createElement(AdminConfig.Breadcrumb, {
19
+ name: "users",
20
+ label: "Users"
21
+ }), /*#__PURE__*/ react.createElement(UsersView, null))
19
22
  }), /*#__PURE__*/ react.createElement(Route, {
20
23
  route: Routes.Users.Account,
21
24
  element: /*#__PURE__*/ react.createElement(AdminLayout, {
22
25
  title: "User Account"
23
- }, /*#__PURE__*/ react.createElement(UserAccountForm, null))
26
+ }, /*#__PURE__*/ react.createElement(AdminConfig.Breadcrumb, {
27
+ name: "account",
28
+ label: "Account"
29
+ }), /*#__PURE__*/ react.createElement(UserAccountForm, null))
24
30
  }), /*#__PURE__*/ react.createElement(Menu, {
25
31
  name: "cognito.settings.adminUsers",
26
32
  parent: "settings.security",
@@ -1 +1 @@
1
- {"version":3,"file":"admin/Cognito.js","sources":["../../src/admin/Cognito.tsx"],"sourcesContent":["import React, { Fragment, memo } from \"react\";\nimport { AdminConfig, AdminLayout } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { UsersView } from \"./ui/views/Users/UsersView.js\";\nimport { UserAccountForm } from \"./ui/views/Account/index.js\";\nimport { SecurityPermission } from \"./SecurityPermission.js\";\nimport { CognitoLogin, type CognitoLoginProps } from \"./CognitoLogin.js\";\nimport { Routes } from \"./routes.js\";\nimport { AccountDetails } from \"~/admin/presentation/userMenu/AccountDetails.js\";\n\nconst { Route, Menu } = AdminConfig;\n\nexport interface CognitoAdminProps {\n login: CognitoLoginProps;\n}\n\nconst CognitoIdP = (props: CognitoAdminProps) => {\n const { getLink } = useRouter();\n\n return (\n <Fragment>\n <SecurityPermission />\n <CognitoLogin {...props.login} />\n <AdminConfig>\n <HasPermission name={\"adminUsers.user\"}>\n <Route\n route={Routes.Users.List}\n element={\n <AdminLayout title={\"Admin Users\"}>\n <UsersView />\n </AdminLayout>\n }\n />\n\n <Route\n route={Routes.Users.Account}\n element={\n <AdminLayout title={\"User Account\"}>\n <UserAccountForm />\n </AdminLayout>\n }\n />\n\n <Menu\n name={\"cognito.settings.adminUsers\"}\n parent={\"settings.security\"}\n before={\"$first\"}\n element={\n <Menu.Link\n text={\"Users\"}\n to={getLink(Routes.Users.List)}\n pinnable={true}\n />\n }\n />\n </HasPermission>\n\n <Menu.User\n name={\"accountSettings\"}\n after={\"userInfo\"}\n element={<AccountDetails accountRoute={getLink(Routes.Users.Account)} />}\n />\n </AdminConfig>\n </Fragment>\n );\n};\n\nexport const CognitoAdmin = memo(CognitoIdP);\n"],"names":["Route","Menu","AdminConfig","CognitoIdP","props","getLink","useRouter","Fragment","SecurityPermission","CognitoLogin","HasPermission","Routes","AdminLayout","UsersView","UserAccountForm","AccountDetails","CognitoAdmin","memo"],"mappings":";;;;;;;;AAWA,MAAM,EAAEA,OAAAA,KAAK,EAAEC,MAAAA,IAAI,EAAE,GAAGC;AAMxB,MAAMC,aAAa,CAACC;IAChB,MAAM,EAAEC,OAAO,EAAE,GAAGC;IAEpB,OAAO,WAAP,GACI,oBAACC,UAAQA,MAAAA,WAAAA,GACL,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAACC,cAAiBL,MAAM,KAAK,iBAC7B,oBAACF,aAAWA,MAAAA,WAAAA,GACR,oBAACQ,eAAaA;QAAC,MAAM;qBACjB,oBAACV,OAAKA;QACF,OAAOW,OAAO,KAAK,CAAC,IAAI;QACxB,uBACI,oBAACC,aAAWA;YAAC,OAAO;yBAChB,oBAACC,WAASA;sBAKtB,oBAACb,OAAKA;QACF,OAAOW,OAAO,KAAK,CAAC,OAAO;QAC3B,uBACI,oBAACC,aAAWA;YAAC,OAAO;yBAChB,oBAACE,iBAAeA;sBAK5B,oBAACb,MAAIA;QACD,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,uBACI,oBAACA,KAAK,IAAI;YACN,MAAM;YACN,IAAII,QAAQM,OAAO,KAAK,CAAC,IAAI;YAC7B,UAAU;;uBAM1B,oBAACV,KAAK,IAAI;QACN,MAAM;QACN,OAAO;QACP,uBAAS,oBAACc,gBAAcA;YAAC,cAAcV,QAAQM,OAAO,KAAK,CAAC,OAAO;;;AAKvF;AAEO,MAAMK,eAAe,WAAHA,GAAGC,KAAKd"}
1
+ {"version":3,"file":"admin/Cognito.js","sources":["../../src/admin/Cognito.tsx"],"sourcesContent":["import React, { Fragment, memo } from \"react\";\nimport { AdminConfig, AdminLayout } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { UsersView } from \"./ui/views/Users/UsersView.js\";\nimport { UserAccountForm } from \"./ui/views/Account/index.js\";\nimport { SecurityPermission } from \"./SecurityPermission.js\";\nimport { CognitoLogin, type CognitoLoginProps } from \"./CognitoLogin.js\";\nimport { Routes } from \"./routes.js\";\nimport { AccountDetails } from \"~/admin/presentation/userMenu/AccountDetails.js\";\n\nconst { Route, Menu } = AdminConfig;\n\nexport interface CognitoAdminProps {\n login: CognitoLoginProps;\n}\n\nconst CognitoIdP = (props: CognitoAdminProps) => {\n const { getLink } = useRouter();\n\n return (\n <Fragment>\n <SecurityPermission />\n <CognitoLogin {...props.login} />\n <AdminConfig>\n <HasPermission name={\"adminUsers.user\"}>\n <Route\n route={Routes.Users.List}\n element={\n <AdminLayout title={\"Admin Users\"}>\n <AdminConfig.Breadcrumb name={\"users\"} label={\"Users\"} />\n <UsersView />\n </AdminLayout>\n }\n />\n\n <Route\n route={Routes.Users.Account}\n element={\n <AdminLayout title={\"User Account\"}>\n <AdminConfig.Breadcrumb name={\"account\"} label={\"Account\"} />\n <UserAccountForm />\n </AdminLayout>\n }\n />\n\n <Menu\n name={\"cognito.settings.adminUsers\"}\n parent={\"settings.security\"}\n before={\"$first\"}\n element={\n <Menu.Link\n text={\"Users\"}\n to={getLink(Routes.Users.List)}\n pinnable={true}\n />\n }\n />\n </HasPermission>\n\n <Menu.User\n name={\"accountSettings\"}\n after={\"userInfo\"}\n element={<AccountDetails accountRoute={getLink(Routes.Users.Account)} />}\n />\n </AdminConfig>\n </Fragment>\n );\n};\n\nexport const CognitoAdmin = memo(CognitoIdP);\n"],"names":["Route","Menu","AdminConfig","CognitoIdP","props","getLink","useRouter","Fragment","SecurityPermission","CognitoLogin","HasPermission","Routes","AdminLayout","UsersView","UserAccountForm","AccountDetails","CognitoAdmin","memo"],"mappings":";;;;;;;;AAWA,MAAM,EAAEA,OAAAA,KAAK,EAAEC,MAAAA,IAAI,EAAE,GAAGC;AAMxB,MAAMC,aAAa,CAACC;IAChB,MAAM,EAAEC,OAAO,EAAE,GAAGC;IAEpB,OAAO,WAAP,GACI,oBAACC,UAAQA,MAAAA,WAAAA,GACL,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAACC,cAAiBL,MAAM,KAAK,iBAC7B,oBAACF,aAAWA,MAAAA,WAAAA,GACR,oBAACQ,eAAaA;QAAC,MAAM;qBACjB,oBAACV,OAAKA;QACF,OAAOW,OAAO,KAAK,CAAC,IAAI;QACxB,uBACI,oBAACC,aAAWA;YAAC,OAAO;yBAChB,oBAACV,YAAY,UAAU;YAAC,MAAM;YAAS,OAAO;0BAC9C,oBAACW,WAASA;sBAKtB,oBAACb,OAAKA;QACF,OAAOW,OAAO,KAAK,CAAC,OAAO;QAC3B,uBACI,oBAACC,aAAWA;YAAC,OAAO;yBAChB,oBAACV,YAAY,UAAU;YAAC,MAAM;YAAW,OAAO;0BAChD,oBAACY,iBAAeA;sBAK5B,oBAACb,MAAIA;QACD,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,uBACI,oBAACA,KAAK,IAAI;YACN,MAAM;YACN,IAAII,QAAQM,OAAO,KAAK,CAAC,IAAI;YAC7B,UAAU;;uBAM1B,oBAACV,KAAK,IAAI;QACN,MAAM;QACN,OAAO;QACP,uBAAS,oBAACc,gBAAcA;YAAC,cAAcV,QAAQM,OAAO,KAAK,CAAC,OAAO;;;AAKvF;AAEO,MAAMK,eAAe,WAAHA,GAAGC,KAAKd"}
@@ -0,0 +1,23 @@
1
+ import { BuildParams } from "@webiny/app-admin/features/buildParams/index.js";
2
+ import { type ICognitoSignInConfig } from "./presentation/Cognito/CognitoSignInConfig.js";
3
+ declare class DefaultCognitoSignInConfigImpl implements ICognitoSignInConfig {
4
+ private buildParams;
5
+ constructor(buildParams: BuildParams.Interface);
6
+ getConfig(): Promise<{
7
+ oauth: {
8
+ scopes: string[];
9
+ redirectSignIn: string[];
10
+ redirectSignOut: string[];
11
+ responseType: "code" | "token";
12
+ };
13
+ allowCredentialsLogin: boolean;
14
+ providers: {
15
+ name: string;
16
+ label: string;
17
+ }[];
18
+ }>;
19
+ }
20
+ export declare const DefaultCognitoSignInConfig: typeof DefaultCognitoSignInConfigImpl & {
21
+ __abstraction: import("@webiny/di").Abstraction<ICognitoSignInConfig>;
22
+ };
23
+ export {};
@@ -0,0 +1,51 @@
1
+ import { BuildParams } from "@webiny/app-admin/features/buildParams/index.js";
2
+ import { CognitoSignInConfig } from "./presentation/Cognito/CognitoSignInConfig.js";
3
+ class DefaultCognitoSignInConfigImpl {
4
+ constructor(buildParams){
5
+ this.buildParams = buildParams;
6
+ }
7
+ async getConfig() {
8
+ const config = this.buildParams.get("cognitoFederation");
9
+ if (!config) return {
10
+ oauth: {
11
+ scopes: [
12
+ "profile",
13
+ "email",
14
+ "openid"
15
+ ],
16
+ redirectSignIn: [
17
+ window.location.origin
18
+ ],
19
+ redirectSignOut: [
20
+ window.location.origin
21
+ ],
22
+ responseType: "code"
23
+ },
24
+ allowCredentialsLogin: true,
25
+ providers: []
26
+ };
27
+ return {
28
+ oauth: {
29
+ scopes: [
30
+ "profile",
31
+ "email",
32
+ "openid"
33
+ ],
34
+ redirectSignIn: config.callbackUrls,
35
+ redirectSignOut: config.logoutUrls,
36
+ responseType: config.responseType
37
+ },
38
+ allowCredentialsLogin: config.allowCredentialsLogin,
39
+ providers: config.providers
40
+ };
41
+ }
42
+ }
43
+ const DefaultCognitoSignInConfig = CognitoSignInConfig.createImplementation({
44
+ implementation: DefaultCognitoSignInConfigImpl,
45
+ dependencies: [
46
+ BuildParams
47
+ ]
48
+ });
49
+ export { DefaultCognitoSignInConfig };
50
+
51
+ //# sourceMappingURL=DefaultCognitoSignInConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/DefaultCognitoSignInConfig.js","sources":["../../src/admin/DefaultCognitoSignInConfig.ts"],"sourcesContent":["import { BuildParams } from \"@webiny/app-admin/features/buildParams/index.js\";\nimport {\n CognitoSignInConfig,\n type ICognitoSignInConfig\n} from \"./presentation/Cognito/CognitoSignInConfig.js\";\n\ninterface FederationBuildParam {\n callbackUrls: string[];\n logoutUrls: string[];\n responseType: \"code\" | \"token\";\n allowCredentialsLogin: boolean;\n providers: { name: string; label: string }[];\n}\n\nclass DefaultCognitoSignInConfigImpl implements ICognitoSignInConfig {\n constructor(private buildParams: BuildParams.Interface) {}\n\n async getConfig() {\n const config = this.buildParams.get<FederationBuildParam>(\"cognitoFederation\");\n\n if (!config) {\n return {\n oauth: {\n scopes: [\"profile\", \"email\", \"openid\"],\n redirectSignIn: [window.location.origin],\n redirectSignOut: [window.location.origin],\n responseType: \"code\" as const\n },\n allowCredentialsLogin: true,\n providers: []\n };\n }\n\n return {\n oauth: {\n scopes: [\"profile\", \"email\", \"openid\"],\n redirectSignIn: config.callbackUrls,\n redirectSignOut: config.logoutUrls,\n responseType: config.responseType\n },\n allowCredentialsLogin: config.allowCredentialsLogin,\n providers: config.providers\n };\n }\n}\n\nexport const DefaultCognitoSignInConfig = CognitoSignInConfig.createImplementation({\n implementation: DefaultCognitoSignInConfigImpl,\n dependencies: [BuildParams]\n});\n"],"names":["DefaultCognitoSignInConfigImpl","buildParams","config","window","DefaultCognitoSignInConfig","CognitoSignInConfig","BuildParams"],"mappings":";;AAcA,MAAMA;IACF,YAAoBC,WAAkC,CAAE;aAApCA,WAAW,GAAXA;IAAqC;IAEzD,MAAM,YAAY;QACd,MAAMC,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAuB;QAE1D,IAAI,CAACA,QACD,OAAO;YACH,OAAO;gBACH,QAAQ;oBAAC;oBAAW;oBAAS;iBAAS;gBACtC,gBAAgB;oBAACC,OAAO,QAAQ,CAAC,MAAM;iBAAC;gBACxC,iBAAiB;oBAACA,OAAO,QAAQ,CAAC,MAAM;iBAAC;gBACzC,cAAc;YAClB;YACA,uBAAuB;YACvB,WAAW,EAAE;QACjB;QAGJ,OAAO;YACH,OAAO;gBACH,QAAQ;oBAAC;oBAAW;oBAAS;iBAAS;gBACtC,gBAAgBD,OAAO,YAAY;gBACnC,iBAAiBA,OAAO,UAAU;gBAClC,cAAcA,OAAO,YAAY;YACrC;YACA,uBAAuBA,OAAO,qBAAqB;YACnD,WAAWA,OAAO,SAAS;QAC/B;IACJ;AACJ;AAEO,MAAME,6BAA6BC,oBAAoB,oBAAoB,CAAC;IAC/E,gBAAgBL;IAChB,cAAc;QAACM;KAAY;AAC/B"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const SignInExtension: () => React.JSX.Element;
@@ -0,0 +1,9 @@
1
+ import react from "react";
2
+ import { RegisterFeature } from "@webiny/app-admin";
3
+ import { CognitoSignInFeature } from "./presentation/Cognito/signInFeature.js";
4
+ const SignInExtension = ()=>/*#__PURE__*/ react.createElement(RegisterFeature, {
5
+ feature: CognitoSignInFeature
6
+ });
7
+ export { SignInExtension };
8
+
9
+ //# sourceMappingURL=SignInExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/SignInExtension.js","sources":["../../src/admin/SignInExtension.tsx"],"sourcesContent":["import React from \"react\";\nimport { RegisterFeature } from \"@webiny/app-admin\";\nimport { CognitoSignInFeature } from \"./presentation/Cognito/signInFeature.js\";\n\nexport const SignInExtension = () => {\n return <RegisterFeature feature={CognitoSignInFeature} />;\n};\n"],"names":["SignInExtension","RegisterFeature","CognitoSignInFeature"],"mappings":";;;AAIO,MAAMA,kBAAkB,IACpB,WAAP,GAAO,oBAACC,iBAAeA;QAAC,SAASC"}
@@ -0,0 +1,2 @@
1
+ export { CognitoSignInConfig } from "./presentation/Cognito/CognitoSignInConfig.js";
2
+ export { Components as CognitoComponents } from "./presentation/Cognito/components/index.js";
package/admin/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { CognitoSignInConfig } from "./presentation/Cognito/CognitoSignInConfig.js";
2
+ export { Components as CognitoComponents } from "./presentation/Cognito/components/index.js";
@@ -5,6 +5,6 @@ export interface CognitoLoginScreenProps {
5
5
  clientId: string;
6
6
  children: React.ReactNode;
7
7
  }
8
- export declare const CognitoLoginScreen: ((props: CognitoLoginScreenProps) => React.JSX.Element) & {
9
- displayName: string;
8
+ export declare const CognitoLoginScreen: ((props: CognitoLoginScreenProps) => React.JSX.Element) & React.NamedExoticComponent<CognitoLoginScreenProps> & {
9
+ readonly type: (props: CognitoLoginScreenProps) => React.JSX.Element;
10
10
  };
@@ -8,6 +8,8 @@ import { RequireNewPassword } from "./components/RequireNewPassword.js";
8
8
  import { RequestPasswordResetCode } from "./components/RequestPasswordResetCode.js";
9
9
  import { SetNewPassword } from "./components/SetNewPassword.js";
10
10
  import { PasswordResetCodeSent } from "./components/PasswordResetCodeSent.js";
11
+ import { ConfirmTotpCode } from "./components/ConfirmTotpCode.js";
12
+ import { SetupTotp } from "./components/SetupTotp.js";
11
13
  const CognitoLoginScreen = observer((props)=>{
12
14
  const { presenter } = useFeature(CognitoFeature);
13
15
  useEffect(()=>{
@@ -40,6 +42,13 @@ const CognitoLoginScreen = observer((props)=>{
40
42
  vm: vm.setNewPassword,
41
43
  onSetNewPassword: (code, password)=>presenter.confirmPasswordReset(code, password),
42
44
  onCancel: ()=>presenter.showSignIn()
45
+ }), "confirmTotpCode" === vm.authState && /*#__PURE__*/ react.createElement(ConfirmTotpCode, {
46
+ vm: vm.confirmTotpCode,
47
+ onSubmit: (code)=>presenter.confirmTotpCode(code),
48
+ onCancel: ()=>presenter.showSignIn()
49
+ }), "setupTotp" === vm.authState && /*#__PURE__*/ react.createElement(SetupTotp, {
50
+ vm: vm.setupTotp,
51
+ onSubmit: (code)=>presenter.verifyTotpSetup(code)
43
52
  }), ("signIn" === vm.authState || "signedOut" === vm.authState) && /*#__PURE__*/ react.createElement(SignIn, {
44
53
  vm: vm.signIn,
45
54
  onSubmit: (username, password)=>presenter.signIn(username, password),
@@ -1 +1 @@
1
- {"version":3,"file":"admin/presentation/Cognito/CognitoLoginScreen.js","sources":["../../../../src/admin/presentation/Cognito/CognitoLoginScreen.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { useFeature } from \"@webiny/app\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\nimport { CognitoFeature } from \"./feature.js\";\nimport { SignIn } from \"./components/SignIn.js\";\nimport { RequireNewPassword } from \"./components/RequireNewPassword.js\";\nimport { RequestPasswordResetCode } from \"./components/RequestPasswordResetCode.js\";\nimport { SetNewPassword } from \"./components/SetNewPassword.js\";\nimport { PasswordResetCodeSent } from \"~/admin/presentation/Cognito/components/PasswordResetCodeSent.js\";\n\nexport interface CognitoLoginScreenProps {\n region: string;\n userPoolId: string;\n clientId: string;\n children: React.ReactNode;\n}\n\nexport const CognitoLoginScreen = observer((props: CognitoLoginScreenProps) => {\n const { presenter } = useFeature(CognitoFeature);\n\n useEffect(() => {\n presenter.init({\n region: props.region,\n userPoolId: props.userPoolId,\n clientId: props.clientId\n });\n }, []);\n\n const vm = presenter.vm;\n\n if (vm.isAuthenticated) {\n return <>{props.children}</>;\n }\n\n return (\n <>\n {vm.isLoggingIn ? <OverlayLoader text={\"Signing in...\"} /> : null}\n {vm.checkingSession ? <OverlayLoader text={\"Checking session...\"} /> : null}\n\n {!vm.isLoggingIn && !vm.checkingSession ? (\n <>\n {vm.authState === \"requireNewPassword\" && (\n <RequireNewPassword\n vm={vm.requireNewPassword}\n onSubmit={(password, attributes) =>\n presenter.confirmNewPassword(password, attributes)\n }\n onCancel={() => presenter.showSignIn()}\n />\n )}\n\n {vm.authState === \"requestPasswordResetCode\" && (\n <RequestPasswordResetCode\n vm={vm.requestPasswordResetCode}\n onRequestCode={username => presenter.requestPasswordReset(username)}\n onCancel={() => presenter.showSignIn()}\n />\n )}\n\n {vm.authState === \"passwordResetCodeSent\" && (\n <PasswordResetCodeSent\n vm={vm.passwordResetCodeSent}\n onResendCode={() => presenter.resendPasswordResetCode()}\n onCodeAcquired={() => presenter.showSetNewPassword()}\n onCancel={() => presenter.showSignIn()}\n />\n )}\n\n {vm.authState === \"setNewPassword\" && (\n <SetNewPassword\n vm={vm.setNewPassword}\n onSetNewPassword={(code, password) =>\n presenter.confirmPasswordReset(code, password)\n }\n onCancel={() => presenter.showSignIn()}\n />\n )}\n\n {(vm.authState === \"signIn\" || vm.authState === \"signedOut\") && (\n <SignIn\n vm={vm.signIn}\n onSubmit={(username, password) => presenter.signIn(username, password)}\n onForgotPassword={() => presenter.showRequestPasswordResetCode()}\n />\n )}\n </>\n ) : null}\n </>\n );\n});\n"],"names":["CognitoLoginScreen","observer","props","presenter","useFeature","CognitoFeature","useEffect","vm","OverlayLoader","RequireNewPassword","password","attributes","RequestPasswordResetCode","username","PasswordResetCodeSent","SetNewPassword","code","SignIn"],"mappings":";;;;;;;;;;AAkBO,MAAMA,qBAAqBC,SAAS,CAACC;IACxC,MAAM,EAAEC,SAAS,EAAE,GAAGC,WAAWC;IAEjCC,UAAU;QACNH,UAAU,IAAI,CAAC;YACX,QAAQD,MAAM,MAAM;YACpB,YAAYA,MAAM,UAAU;YAC5B,UAAUA,MAAM,QAAQ;QAC5B;IACJ,GAAG,EAAE;IAEL,MAAMK,KAAKJ,UAAU,EAAE;IAEvB,IAAII,GAAG,eAAe,EAClB,OAAO,WAAP,GAAO,0CAAGL,MAAM,QAAQ;IAG5B,OAAO,WAAP,GACI,0CACKK,GAAG,WAAW,GAAG,WAAH,GAAG,oBAACC,eAAaA;QAAC,MAAM;SAAsB,MAC5DD,GAAG,eAAe,GAAG,WAAH,GAAG,oBAACC,eAAaA;QAAC,MAAM;SAA4B,MAEtE,AAACD,GAAG,WAAW,IAAKA,GAAG,eAAe,GA+CnC,OA/CsC,WAAH,GACnC,0CACKA,AAAiB,yBAAjBA,GAAG,SAAS,IAA6B,WAAxB,GACd,oBAACE,oBAAkBA;QACf,IAAIF,GAAG,kBAAkB;QACzB,UAAU,CAACG,UAAUC,aACjBR,UAAU,kBAAkB,CAACO,UAAUC;QAE3C,UAAU,IAAMR,UAAU,UAAU;QAI3CI,AAAiB,+BAAjBA,GAAG,SAAS,IAAmC,WAA9B,GACd,oBAACK,0BAAwBA;QACrB,IAAIL,GAAG,wBAAwB;QAC/B,eAAeM,CAAAA,WAAYV,UAAU,oBAAoB,CAACU;QAC1D,UAAU,IAAMV,UAAU,UAAU;QAI3CI,AAAiB,4BAAjBA,GAAG,SAAS,IAAgC,WAA3B,GACd,oBAACO,uBAAqBA;QAClB,IAAIP,GAAG,qBAAqB;QAC5B,cAAc,IAAMJ,UAAU,uBAAuB;QACrD,gBAAgB,IAAMA,UAAU,kBAAkB;QAClD,UAAU,IAAMA,UAAU,UAAU;QAI3CI,AAAiB,qBAAjBA,GAAG,SAAS,IAAyB,WAApB,GACd,oBAACQ,gBAAcA;QACX,IAAIR,GAAG,cAAc;QACrB,kBAAkB,CAACS,MAAMN,WACrBP,UAAU,oBAAoB,CAACa,MAAMN;QAEzC,UAAU,IAAMP,UAAU,UAAU;QAI1CI,AAAAA,CAAAA,AAAiB,aAAjBA,GAAG,SAAS,IAAiBA,AAAiB,gBAAjBA,GAAG,SAAS,AAAe,mBACtD,oBAACU,QAAMA;QACH,IAAIV,GAAG,MAAM;QACb,UAAU,CAACM,UAAUH,WAAaP,UAAU,MAAM,CAACU,UAAUH;QAC7D,kBAAkB,IAAMP,UAAU,4BAA4B;;AAO1F"}
1
+ {"version":3,"file":"admin/presentation/Cognito/CognitoLoginScreen.js","sources":["../../../../src/admin/presentation/Cognito/CognitoLoginScreen.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { useFeature } from \"@webiny/app\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\nimport { CognitoFeature } from \"./feature.js\";\nimport { SignIn } from \"./components/SignIn.js\";\nimport { RequireNewPassword } from \"./components/RequireNewPassword.js\";\nimport { RequestPasswordResetCode } from \"./components/RequestPasswordResetCode.js\";\nimport { SetNewPassword } from \"./components/SetNewPassword.js\";\nimport { PasswordResetCodeSent } from \"~/admin/presentation/Cognito/components/PasswordResetCodeSent.js\";\nimport { ConfirmTotpCode } from \"./components/ConfirmTotpCode.js\";\nimport { SetupTotp } from \"./components/SetupTotp.js\";\n\nexport interface CognitoLoginScreenProps {\n region: string;\n userPoolId: string;\n clientId: string;\n children: React.ReactNode;\n}\n\nexport const CognitoLoginScreen = observer((props: CognitoLoginScreenProps) => {\n const { presenter } = useFeature(CognitoFeature);\n\n useEffect(() => {\n presenter.init({\n region: props.region,\n userPoolId: props.userPoolId,\n clientId: props.clientId\n });\n }, []);\n\n const vm = presenter.vm;\n\n if (vm.isAuthenticated) {\n return <>{props.children}</>;\n }\n\n return (\n <>\n {vm.isLoggingIn ? <OverlayLoader text={\"Signing in...\"} /> : null}\n {vm.checkingSession ? <OverlayLoader text={\"Checking session...\"} /> : null}\n\n {!vm.isLoggingIn && !vm.checkingSession ? (\n <>\n {vm.authState === \"requireNewPassword\" && (\n <RequireNewPassword\n vm={vm.requireNewPassword}\n onSubmit={(password, attributes) =>\n presenter.confirmNewPassword(password, attributes)\n }\n onCancel={() => presenter.showSignIn()}\n />\n )}\n\n {vm.authState === \"requestPasswordResetCode\" && (\n <RequestPasswordResetCode\n vm={vm.requestPasswordResetCode}\n onRequestCode={username => presenter.requestPasswordReset(username)}\n onCancel={() => presenter.showSignIn()}\n />\n )}\n\n {vm.authState === \"passwordResetCodeSent\" && (\n <PasswordResetCodeSent\n vm={vm.passwordResetCodeSent}\n onResendCode={() => presenter.resendPasswordResetCode()}\n onCodeAcquired={() => presenter.showSetNewPassword()}\n onCancel={() => presenter.showSignIn()}\n />\n )}\n\n {vm.authState === \"setNewPassword\" && (\n <SetNewPassword\n vm={vm.setNewPassword}\n onSetNewPassword={(code, password) =>\n presenter.confirmPasswordReset(code, password)\n }\n onCancel={() => presenter.showSignIn()}\n />\n )}\n\n {vm.authState === \"confirmTotpCode\" && (\n <ConfirmTotpCode\n vm={vm.confirmTotpCode}\n onSubmit={code => presenter.confirmTotpCode(code)}\n onCancel={() => presenter.showSignIn()}\n />\n )}\n\n {vm.authState === \"setupTotp\" && (\n <SetupTotp\n vm={vm.setupTotp}\n onSubmit={code => presenter.verifyTotpSetup(code)}\n />\n )}\n\n {(vm.authState === \"signIn\" || vm.authState === \"signedOut\") && (\n <SignIn\n vm={vm.signIn}\n onSubmit={(username, password) => presenter.signIn(username, password)}\n onForgotPassword={() => presenter.showRequestPasswordResetCode()}\n />\n )}\n </>\n ) : null}\n </>\n );\n});\n"],"names":["CognitoLoginScreen","observer","props","presenter","useFeature","CognitoFeature","useEffect","vm","OverlayLoader","RequireNewPassword","password","attributes","RequestPasswordResetCode","username","PasswordResetCodeSent","SetNewPassword","code","ConfirmTotpCode","SetupTotp","SignIn"],"mappings":";;;;;;;;;;;;AAoBO,MAAMA,qBAAqBC,SAAS,CAACC;IACxC,MAAM,EAAEC,SAAS,EAAE,GAAGC,WAAWC;IAEjCC,UAAU;QACNH,UAAU,IAAI,CAAC;YACX,QAAQD,MAAM,MAAM;YACpB,YAAYA,MAAM,UAAU;YAC5B,UAAUA,MAAM,QAAQ;QAC5B;IACJ,GAAG,EAAE;IAEL,MAAMK,KAAKJ,UAAU,EAAE;IAEvB,IAAII,GAAG,eAAe,EAClB,OAAO,WAAP,GAAO,0CAAGL,MAAM,QAAQ;IAG5B,OAAO,WAAP,GACI,0CACKK,GAAG,WAAW,GAAG,WAAH,GAAG,oBAACC,eAAaA;QAAC,MAAM;SAAsB,MAC5DD,GAAG,eAAe,GAAG,WAAH,GAAG,oBAACC,eAAaA;QAAC,MAAM;SAA4B,MAEtE,AAACD,GAAG,WAAW,IAAKA,GAAG,eAAe,GA8DnC,OA9DsC,WAAH,GACnC,0CACKA,AAAiB,yBAAjBA,GAAG,SAAS,IAA6B,WAAxB,GACd,oBAACE,oBAAkBA;QACf,IAAIF,GAAG,kBAAkB;QACzB,UAAU,CAACG,UAAUC,aACjBR,UAAU,kBAAkB,CAACO,UAAUC;QAE3C,UAAU,IAAMR,UAAU,UAAU;QAI3CI,AAAiB,+BAAjBA,GAAG,SAAS,IAAmC,WAA9B,GACd,oBAACK,0BAAwBA;QACrB,IAAIL,GAAG,wBAAwB;QAC/B,eAAeM,CAAAA,WAAYV,UAAU,oBAAoB,CAACU;QAC1D,UAAU,IAAMV,UAAU,UAAU;QAI3CI,AAAiB,4BAAjBA,GAAG,SAAS,IAAgC,WAA3B,GACd,oBAACO,uBAAqBA;QAClB,IAAIP,GAAG,qBAAqB;QAC5B,cAAc,IAAMJ,UAAU,uBAAuB;QACrD,gBAAgB,IAAMA,UAAU,kBAAkB;QAClD,UAAU,IAAMA,UAAU,UAAU;QAI3CI,AAAiB,qBAAjBA,GAAG,SAAS,IAAyB,WAApB,GACd,oBAACQ,gBAAcA;QACX,IAAIR,GAAG,cAAc;QACrB,kBAAkB,CAACS,MAAMN,WACrBP,UAAU,oBAAoB,CAACa,MAAMN;QAEzC,UAAU,IAAMP,UAAU,UAAU;QAI3CI,AAAiB,sBAAjBA,GAAG,SAAS,IAA0B,WAArB,GACd,oBAACU,iBAAeA;QACZ,IAAIV,GAAG,eAAe;QACtB,UAAUS,CAAAA,OAAQb,UAAU,eAAe,CAACa;QAC5C,UAAU,IAAMb,UAAU,UAAU;QAI3CI,AAAiB,gBAAjBA,GAAG,SAAS,IAAoB,WAAf,GACd,oBAACW,WAASA;QACN,IAAIX,GAAG,SAAS;QAChB,UAAUS,CAAAA,OAAQb,UAAU,eAAe,CAACa;QAIlDT,AAAAA,CAAAA,AAAiB,aAAjBA,GAAG,SAAS,IAAiBA,AAAiB,gBAAjBA,GAAG,SAAS,AAAe,mBACtD,oBAACY,QAAMA;QACH,IAAIZ,GAAG,MAAM;QACb,UAAU,CAACM,UAAUH,WAAaP,UAAU,MAAM,CAACU,UAAUH;QAC7D,kBAAkB,IAAMP,UAAU,4BAA4B;;AAO1F"}
@@ -1,9 +1,11 @@
1
1
  import { CognitoPresenter as CognitoPresenterAbstraction, AuthState, AuthMessage, ICognitoInitParams } from "./abstractions.js";
2
2
  import { LogInUseCase } from "@webiny/app-admin/features/security/LogIn/index.js";
3
3
  import { IdentityContext } from "@webiny/app-admin/features/security/IdentityContext/index.js";
4
+ import { CognitoSignInConfig } from "./CognitoSignInConfig.js";
4
5
  declare class CognitoPresenterImpl implements CognitoPresenterAbstraction.Interface {
5
6
  private identity;
6
7
  private logInUseCase;
8
+ private signInConfig;
7
9
  private authState;
8
10
  private authData;
9
11
  private message;
@@ -11,7 +13,13 @@ declare class CognitoPresenterImpl implements CognitoPresenterAbstraction.Interf
11
13
  private isLoggingIn;
12
14
  private formLoading;
13
15
  private initialized;
14
- constructor(identity: IdentityContext.Interface, logInUseCase: LogInUseCase.Interface);
16
+ private signInTitle;
17
+ private signInDescription;
18
+ private allowCredentialsLogin;
19
+ private federatedProviders;
20
+ private totpSharedSecret;
21
+ private totpQrCodeUri;
22
+ constructor(identity: IdentityContext.Interface, logInUseCase: LogInUseCase.Interface, signInConfig: CognitoSignInConfig.Interface | undefined);
15
23
  get vm(): {
16
24
  authState: AuthState;
17
25
  checkingSession: boolean;
@@ -20,6 +28,10 @@ declare class CognitoPresenterImpl implements CognitoPresenterAbstraction.Interf
20
28
  signIn: {
21
29
  isLoading: boolean;
22
30
  message: AuthMessage | null;
31
+ title: string;
32
+ description: string | undefined;
33
+ allowCredentialsLogin: boolean;
34
+ federatedProviders: import("./CognitoSignInConfig.js").IFederatedProvider[];
23
35
  };
24
36
  requestPasswordResetCode: {
25
37
  isLoading: boolean;
@@ -37,6 +49,16 @@ declare class CognitoPresenterImpl implements CognitoPresenterAbstraction.Interf
37
49
  isLoading: boolean;
38
50
  requiredAttributes: string[];
39
51
  };
52
+ confirmTotpCode: {
53
+ isLoading: boolean;
54
+ message: AuthMessage | null;
55
+ };
56
+ setupTotp: {
57
+ isLoading: boolean;
58
+ sharedSecret: string;
59
+ qrCodeUri: string;
60
+ message: AuthMessage | null;
61
+ };
40
62
  };
41
63
  init(params: ICognitoInitParams): Promise<void>;
42
64
  signIn(username: string, password: string): Promise<void>;
@@ -44,6 +66,8 @@ declare class CognitoPresenterImpl implements CognitoPresenterAbstraction.Interf
44
66
  requestPasswordReset(username: string): Promise<void>;
45
67
  resendPasswordResetCode(): Promise<void>;
46
68
  confirmPasswordReset(code: string, password: string): Promise<void>;
69
+ confirmTotpCode(code: string): Promise<void>;
70
+ verifyTotpSetup(code: string): Promise<void>;
47
71
  showSignIn(): void;
48
72
  showRequestPasswordResetCode(): void;
49
73
  showSetNewPassword(): void;