@stytch/vanilla-js 6.0.10 → 6.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/{StytchSSRProxy-BDhupJ0b.js → StytchSSRProxy-BG8v1Uf6.js} +2 -2
- package/dist/cjs/{StytchSSRProxy-BDhupJ0b.js.map → StytchSSRProxy-BG8v1Uf6.js.map} +1 -1
- package/dist/cjs/b2b/index.cjs +47 -39
- package/dist/cjs/b2b/index.cjs.map +1 -1
- package/dist/cjs/b2b/index.headless.cjs +1 -1
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/index.headless.cjs +1 -1
- package/dist/cjs/{shadcn-DbBiekGp.js → shadcn-Ds1x7jpl.js} +2 -2
- package/dist/cjs/{shadcn-DbBiekGp.js.map → shadcn-Ds1x7jpl.js.map} +1 -1
- package/dist/cjs-dev/{StytchSSRProxy-hF1s3Or9.js → StytchSSRProxy-CCpBazSd.js} +2 -2
- package/dist/cjs-dev/{StytchSSRProxy-hF1s3Or9.js.map → StytchSSRProxy-CCpBazSd.js.map} +1 -1
- package/dist/cjs-dev/b2b/index.cjs +47 -39
- package/dist/cjs-dev/b2b/index.cjs.map +1 -1
- package/dist/cjs-dev/b2b/index.headless.cjs +1 -1
- package/dist/cjs-dev/index.cjs +2 -2
- package/dist/cjs-dev/index.headless.cjs +1 -1
- package/dist/cjs-dev/{shadcn-Dc0M3w2t.js → shadcn-YlPYvF-0.js} +2 -2
- package/dist/cjs-dev/{shadcn-Dc0M3w2t.js.map → shadcn-YlPYvF-0.js.map} +1 -1
- package/dist/esm/packages/web/src/NetworkClient.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2b/screens/EmailForm.mjs +1 -20
- package/dist/esm/packages/web/src/ui/b2b/screens/EmailForm.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2b/screens/PasswordEmailForm.mjs +42 -37
- package/dist/esm/packages/web/src/ui/b2b/screens/PasswordEmailForm.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2b/screens/useParseErrorMessage.mjs +28 -0
- package/dist/esm/packages/web/src/ui/b2b/screens/useParseErrorMessage.mjs.map +1 -0
- package/dist/esm-dev/_virtual/index3.mjs +3 -5
- package/dist/esm-dev/_virtual/index3.mjs.map +1 -1
- package/dist/esm-dev/_virtual/index4.mjs +5 -3
- package/dist/esm-dev/_virtual/index4.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/NetworkClient.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailForm.mjs +1 -20
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailForm.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/PasswordEmailForm.mjs +42 -37
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/PasswordEmailForm.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/useParseErrorMessage.mjs +28 -0
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/useParseErrorMessage.mjs.map +1 -0
- package/dist/esm-dev/packages/web/src/utils/crypto.mjs +1 -1
- package/dist/iife/b2b/index.headless.js +1 -1
- package/dist/iife/b2b/index.js +3 -3
- package/dist/iife/b2b/index.js.map +1 -1
- package/dist/iife/index.headless.js +1 -1
- package/dist/iife/index.js +1 -1
- package/package.json +1 -1
|
@@ -13,28 +13,9 @@ import { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend.mjs';
|
|
|
13
13
|
import { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup.mjs';
|
|
14
14
|
import { AppScreens } from '../types/AppScreens.mjs';
|
|
15
15
|
import { hasProduct } from '../utils.mjs';
|
|
16
|
+
import { useParseErrorMessage } from './useParseErrorMessage.mjs';
|
|
16
17
|
import { useState as h } from '../../../../../../node_modules/preact/hooks/dist/hooks.module.mjs';
|
|
17
18
|
|
|
18
|
-
const JIT_PROVISIONING_ERRORS = [
|
|
19
|
-
'email_jit_provisioning_not_allowed',
|
|
20
|
-
'invalid_email_for_jit_provisioning'
|
|
21
|
-
];
|
|
22
|
-
const useParseErrorMessage = ()=>{
|
|
23
|
-
const { i18n: $__i18n, _: $__ } = useLingui();
|
|
24
|
-
return (error, { email, org: organizationName })=>{
|
|
25
|
-
if (JIT_PROVISIONING_ERRORS.includes(error.error_type)) {
|
|
26
|
-
return $__i18n._({
|
|
27
|
-
id: "error.jitIneligible",
|
|
28
|
-
message: "{email} does not have access to {organizationName}. If you think this is a mistake, contact your admin",
|
|
29
|
-
values: {
|
|
30
|
-
email: email,
|
|
31
|
-
organizationName: organizationName
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
return getTranslatedError(error, $__);
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
19
|
const EmailForm = ({ showPasswordButton })=>{
|
|
39
20
|
const [state, dispatch] = useGlobalReducer();
|
|
40
21
|
const [emailInput, setEmailInput] = h(state.formState.passwordState.email);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/EmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\nimport React, { useState } from 'react';\n\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport UsePasswordButton from '../components/UsePasswordButton';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { useEffectiveAuthConfig } from '../hooks/useEffectiveAuthConfig';\nimport { useEmailOtpDiscoverySend } from '../hooks/useEmailOtpDiscoverySend';\nimport { useEmailOtpLoginOrSignup } from '../hooks/useEmailOtpLoginOrSignup';\nimport { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend';\nimport { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup';\nimport { AppScreens } from '../types/AppScreens';\nimport { hasProduct } from '../utils';\n\nconst JIT_PROVISIONING_ERRORS = ['email_jit_provisioning_not_allowed', 'invalid_email_for_jit_provisioning'];\n\nconst useParseErrorMessage = () => {\n const { t } = useLingui();\n return (error: StytchAPIError, { email, org: organizationName }: { email: string; org: string }) => {\n if (JIT_PROVISIONING_ERRORS.includes(error.error_type)) {\n return t({\n id: 'error.jitIneligible',\n message: `${email} does not have access to ${organizationName}. If you think this is a mistake, contact your admin`,\n });\n }\n return getTranslatedError(error, t);\n };\n};\n\nexport const EmailForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [emailInput, setEmailInput] = useState(state.formState.passwordState.email);\n const parseErrorMessage = useParseErrorMessage();\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = hasProduct(products, 'emailMagicLinks');\n const enableOtp = hasProduct(products, 'emailOtp');\n\n const providedEmail = state.primary.email;\n const email = providedEmail || emailInput;\n\n const { trigger: stytchEmlLoginOrSignup, error: emlError, isMutating: emlIsMutating } = useEmlLoginOrSignup();\n const { trigger: stytchOtpLoginOrSignup, error: otpError, isMutating: otpIsMutating } = useEmailOtpLoginOrSignup();\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n const organization = state.flowState.organization;\n if (!organization) return <></>;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n } else if (enableOtp) {\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }\n };\n\n if (providedEmail) {\n return (\n <Column gap={2}>\n {products\n .filter((product) => product.id === 'emailMagicLinks' || product.id === 'emailOtp')\n .map((product) => {\n switch (product.id) {\n case 'emailMagicLinks':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={emlIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailLink', message: 'Email me a link' })}\n </Button>\n );\n\n case 'emailOtp':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={otpIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailCode', message: 'Email me a code' })}\n </Button>\n );\n }\n })}\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n }\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmailInput}\n hideLabel\n error={error ? parseErrorMessage(error, { email, org: organization.organization_name }) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n\nexport const EmailDiscoveryForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [email, setEmail] = useState(state.formState.passwordState.email);\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = products.some((p) => p.id === 'emailMagicLinks');\n const enableOtp = products.some((p) => p.id === 'emailOtp');\n\n const { trigger: stytchEmlDiscoverySend, error: emlError, isMutating: emlIsMutating } = useEmlDiscoverySend();\n const { trigger: stytchOtpDiscoverySend, error: otpError, isMutating: otpIsMutating } = useEmailOtpDiscoverySend();\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlDiscoverySend({ email });\n } else if (enableOtp) {\n stytchOtpDiscoverySend({ email });\n }\n };\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmail}\n hideLabel\n error={error ? getTranslatedError(error, t) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n"],"names":["JIT_PROVISIONING_ERRORS","useParseErrorMessage","useLingui","error","email","org","organizationName","includes","error_type","getTranslatedError","EmailForm","showPasswordButton","state","dispatch","useGlobalReducer","emailInput","setEmailInput","useState","formState","passwordState","parseErrorMessage","products","useEffectiveAuthConfig","enableEml","hasProduct","enableOtp","providedEmail","primary","trigger","stytchEmlLoginOrSignup","emlError","isMutating","emlIsMutating","useEmlLoginOrSignup","stytchOtpLoginOrSignup","otpError","otpIsMutating","useEmailOtpLoginOrSignup","organization","flowState","React","handleSubmit","e","preventDefault","type","screen","AppScreens","EmailMethodSelection","history","organization_id","Column","gap","filter","product","id","map","Button","key","onClick","loading","disabled","variant","UsePasswordButton","as","onSubmit","EmailInput","setEmail","hideLabel","organization_name","undefined","EmailDiscoveryForm","some","p","stytchEmlDiscoverySend","useEmlDiscoverySend","stytchOtpDiscoverySend","useEmailOtpDiscoverySend"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/EmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport React, { useState } from 'react';\n\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport UsePasswordButton from '../components/UsePasswordButton';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { useEffectiveAuthConfig } from '../hooks/useEffectiveAuthConfig';\nimport { useEmailOtpDiscoverySend } from '../hooks/useEmailOtpDiscoverySend';\nimport { useEmailOtpLoginOrSignup } from '../hooks/useEmailOtpLoginOrSignup';\nimport { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend';\nimport { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup';\nimport { AppScreens } from '../types/AppScreens';\nimport { hasProduct } from '../utils';\nimport { useParseErrorMessage } from './useParseErrorMessage';\n\nexport const EmailForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [emailInput, setEmailInput] = useState(state.formState.passwordState.email);\n const parseErrorMessage = useParseErrorMessage();\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = hasProduct(products, 'emailMagicLinks');\n const enableOtp = hasProduct(products, 'emailOtp');\n\n const providedEmail = state.primary.email;\n const email = providedEmail || emailInput;\n\n const { trigger: stytchEmlLoginOrSignup, error: emlError, isMutating: emlIsMutating } = useEmlLoginOrSignup();\n const { trigger: stytchOtpLoginOrSignup, error: otpError, isMutating: otpIsMutating } = useEmailOtpLoginOrSignup();\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n const organization = state.flowState.organization;\n if (!organization) return <></>;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n } else if (enableOtp) {\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }\n };\n\n if (providedEmail) {\n return (\n <Column gap={2}>\n {products\n .filter((product) => product.id === 'emailMagicLinks' || product.id === 'emailOtp')\n .map((product) => {\n switch (product.id) {\n case 'emailMagicLinks':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={emlIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailLink', message: 'Email me a link' })}\n </Button>\n );\n\n case 'emailOtp':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={otpIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailCode', message: 'Email me a code' })}\n </Button>\n );\n }\n })}\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n }\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmailInput}\n hideLabel\n error={error ? parseErrorMessage(error, { email, org: organization.organization_name }) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n\nexport const EmailDiscoveryForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [email, setEmail] = useState(state.formState.passwordState.email);\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = products.some((p) => p.id === 'emailMagicLinks');\n const enableOtp = products.some((p) => p.id === 'emailOtp');\n\n const { trigger: stytchEmlDiscoverySend, error: emlError, isMutating: emlIsMutating } = useEmlDiscoverySend();\n const { trigger: stytchOtpDiscoverySend, error: otpError, isMutating: otpIsMutating } = useEmailOtpDiscoverySend();\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlDiscoverySend({ email });\n } else if (enableOtp) {\n stytchOtpDiscoverySend({ email });\n }\n };\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmail}\n hideLabel\n error={error ? getTranslatedError(error, t) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n"],"names":["EmailForm","showPasswordButton","state","dispatch","useGlobalReducer","emailInput","setEmailInput","useState","formState","passwordState","email","parseErrorMessage","useParseErrorMessage","useLingui","products","useEffectiveAuthConfig","enableEml","hasProduct","enableOtp","providedEmail","primary","trigger","stytchEmlLoginOrSignup","error","emlError","isMutating","emlIsMutating","useEmlLoginOrSignup","stytchOtpLoginOrSignup","otpError","otpIsMutating","useEmailOtpLoginOrSignup","organization","flowState","React","handleSubmit","e","preventDefault","type","screen","AppScreens","EmailMethodSelection","history","organization_id","Column","gap","filter","product","id","map","Button","key","onClick","loading","disabled","variant","UsePasswordButton","as","onSubmit","EmailInput","setEmail","hideLabel","org","organization_name","undefined","EmailDiscoveryForm","some","p","stytchEmlDiscoverySend","useEmlDiscoverySend","stytchOtpDiscoverySend","useEmailOtpDiscoverySend","getTranslatedError"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useLingui } from '../../../../../../node_modules/@lingui/react/dist/index.mjs';
|
|
2
2
|
import wn from '../../../../../../node_modules/preact/compat/dist/compat.module.mjs';
|
|
3
3
|
import { EMAIL_REGEX } from '../../../utils/index.mjs';
|
|
4
|
-
import { getTranslatedError } from '../../../utils/getTranslatedError.mjs';
|
|
5
4
|
import { readB2BInternals } from '../../../utils/internal.mjs';
|
|
6
5
|
import Button from '../../components/atoms/Button.mjs';
|
|
7
6
|
import Column from '../../components/atoms/Column.mjs';
|
|
@@ -10,53 +9,58 @@ import { PasswordInput } from '../../components/molecules/PasswordInput.mjs';
|
|
|
10
9
|
import { useGlobalReducer } from '../GlobalContextProvider.mjs';
|
|
11
10
|
import { AppScreens } from '../types/AppScreens.mjs';
|
|
12
11
|
import { usePasswordInput } from '../usePasswordInput.mjs';
|
|
12
|
+
import { useParseErrorMessage } from './useParseErrorMessage.mjs';
|
|
13
13
|
import { useState as h } from '../../../../../../node_modules/preact/hooks/dist/hooks.module.mjs';
|
|
14
14
|
|
|
15
15
|
const PasswordsEmailForm = ()=>{
|
|
16
16
|
const [, dispatch] = useGlobalReducer();
|
|
17
17
|
const { i18n: $__i18n, _: $__ } = useLingui();
|
|
18
|
+
const parseErrorMessages = useParseErrorMessage();
|
|
18
19
|
const { stytch, email, setEmail, password, setPassword, organization, errorMessage, setErrorMessage, isSubmitting, setIsSubmitting, submitPassword, submitDiscoveryPassword, handleNonMemberReset } = usePasswordInput();
|
|
19
20
|
const [hideInput, setHideInput] = h(!!organization && !email);
|
|
20
21
|
const handleSubmit = async (e)=>{
|
|
21
22
|
e.preventDefault();
|
|
22
|
-
if (organization) {
|
|
23
|
-
const organization_id = organization.organization_id;
|
|
24
|
-
// If we have processed the email, submit the password field
|
|
25
|
-
if (!hideInput) {
|
|
26
|
-
submitPassword(organization_id);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
// Validate we have a member with a password. Otherwise, check if we can jit
|
|
30
|
-
// provision and kickoff verification and session reset
|
|
31
|
-
if (!email.match(EMAIL_REGEX)) {
|
|
32
|
-
setErrorMessage($__i18n._({
|
|
33
|
-
id: "error.invalidEmailAddress",
|
|
34
|
-
message: "Invalid email address"
|
|
35
|
-
}));
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
setErrorMessage('');
|
|
39
|
-
setIsSubmitting(true);
|
|
40
|
-
readB2BInternals(stytch).searchManager.searchMember(email, organization.organization_id).then(({ member })=>{
|
|
41
|
-
if (member) {
|
|
42
|
-
setHideInput(false);
|
|
43
|
-
setIsSubmitting(false);
|
|
44
|
-
dispatch({
|
|
45
|
-
type: 'set_password_state',
|
|
46
|
-
email
|
|
47
|
-
});
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
// No member password flow: verify email and use reset by session
|
|
51
|
-
handleNonMemberReset();
|
|
52
|
-
}).catch((err)=>{
|
|
53
|
-
setIsSubmitting(false);
|
|
54
|
-
setErrorMessage(getTranslatedError(err, $__));
|
|
55
|
-
});
|
|
56
|
-
} else {
|
|
23
|
+
if (!organization) {
|
|
57
24
|
// Discovery flow
|
|
58
25
|
submitDiscoveryPassword();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const organization_id = organization.organization_id;
|
|
29
|
+
// If we have processed the email, submit the password field
|
|
30
|
+
if (!hideInput) {
|
|
31
|
+
submitPassword(organization_id);
|
|
32
|
+
return;
|
|
59
33
|
}
|
|
34
|
+
// Validate we have a member with a password. Otherwise, check if we can jit
|
|
35
|
+
// provision and kickoff verification and session reset
|
|
36
|
+
if (!email.match(EMAIL_REGEX)) {
|
|
37
|
+
setErrorMessage($__i18n._({
|
|
38
|
+
id: "error.invalidEmailAddress",
|
|
39
|
+
message: "Invalid email address"
|
|
40
|
+
}));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
setErrorMessage('');
|
|
44
|
+
setIsSubmitting(true);
|
|
45
|
+
readB2BInternals(stytch).searchManager.searchMember(email, organization.organization_id).then(({ member })=>{
|
|
46
|
+
if (member) {
|
|
47
|
+
setHideInput(false);
|
|
48
|
+
setIsSubmitting(false);
|
|
49
|
+
dispatch({
|
|
50
|
+
type: 'set_password_state',
|
|
51
|
+
email
|
|
52
|
+
});
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// No member password flow: verify email and use reset by session
|
|
56
|
+
handleNonMemberReset();
|
|
57
|
+
}).catch((err)=>{
|
|
58
|
+
setIsSubmitting(false);
|
|
59
|
+
setErrorMessage(parseErrorMessages(err, {
|
|
60
|
+
email,
|
|
61
|
+
org: organization_id
|
|
62
|
+
}));
|
|
63
|
+
});
|
|
60
64
|
};
|
|
61
65
|
const onGetHelp = ()=>{
|
|
62
66
|
dispatch({
|
|
@@ -74,7 +78,8 @@ const PasswordsEmailForm = ()=>{
|
|
|
74
78
|
gap: 2
|
|
75
79
|
}, /*#__PURE__*/ wn.createElement(EmailInput, {
|
|
76
80
|
email: email,
|
|
77
|
-
setEmail: setEmail
|
|
81
|
+
setEmail: setEmail,
|
|
82
|
+
error: hideInput ? errorMessage : undefined
|
|
78
83
|
}), !hideInput && /*#__PURE__*/ wn.createElement(PasswordInput, {
|
|
79
84
|
password: password,
|
|
80
85
|
setPassword: setPassword,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasswordEmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/PasswordEmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\nimport React, { useState } from 'react';\n\nimport { EMAIL_REGEX } from '../../../utils';\nimport {
|
|
1
|
+
{"version":3,"file":"PasswordEmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/PasswordEmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\nimport React, { useState } from 'react';\n\nimport { EMAIL_REGEX } from '../../../utils';\nimport { readB2BInternals } from '../../../utils/internal';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport { PasswordInput } from '../../components/molecules/PasswordInput';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { AppScreens } from '../types/AppScreens';\nimport { usePasswordInput } from '../usePasswordInput';\nimport { useParseErrorMessage } from './useParseErrorMessage';\n\nexport const PasswordsEmailForm = () => {\n const [, dispatch] = useGlobalReducer();\n const { t } = useLingui();\n\n const parseErrorMessages = useParseErrorMessage();\n\n const {\n stytch,\n email,\n setEmail,\n password,\n setPassword,\n organization,\n errorMessage,\n setErrorMessage,\n isSubmitting,\n setIsSubmitting,\n submitPassword,\n submitDiscoveryPassword,\n handleNonMemberReset,\n } = usePasswordInput();\n\n const [hideInput, setHideInput] = useState(!!organization && !email);\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (!organization) {\n // Discovery flow\n submitDiscoveryPassword();\n return;\n }\n\n const organization_id = organization.organization_id;\n\n // If we have processed the email, submit the password field\n if (!hideInput) {\n submitPassword(organization_id);\n return;\n }\n\n // Validate we have a member with a password. Otherwise, check if we can jit\n // provision and kickoff verification and session reset\n if (!email.match(EMAIL_REGEX)) {\n setErrorMessage(t({ id: 'error.invalidEmailAddress', message: 'Invalid email address' }));\n return;\n }\n setErrorMessage('');\n setIsSubmitting(true);\n readB2BInternals(stytch)\n .searchManager.searchMember(email, organization.organization_id)\n .then(({ member }) => {\n if (member) {\n setHideInput(false);\n setIsSubmitting(false);\n dispatch({ type: 'set_password_state', email });\n return;\n }\n // No member password flow: verify email and use reset by session\n handleNonMemberReset();\n })\n .catch((err: StytchAPIError) => {\n setIsSubmitting(false);\n setErrorMessage(parseErrorMessages(err, { email, org: organization_id }));\n });\n };\n\n const onGetHelp = () => {\n dispatch({ type: 'set_password_state', email: email });\n dispatch({ type: 'transition', screen: AppScreens.PasswordForgotForm });\n };\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput email={email} setEmail={setEmail} error={hideInput ? errorMessage : undefined} />\n\n {!hideInput && (\n <PasswordInput password={password} setPassword={setPassword} type=\"current\" error={errorMessage} />\n )}\n\n <Button variant=\"primary\" loading={isSubmitting} type=\"submit\">\n {t({ id: 'button.continue', message: 'Continue' })}\n </Button>\n\n {!hideInput && (\n <Button variant=\"outline\" onClick={onGetHelp}>\n {t({ id: 'link.signupResetPassword', message: 'Sign up or reset password' })}\n </Button>\n )}\n </Column>\n );\n};\n"],"names":["PasswordsEmailForm","dispatch","useGlobalReducer","useLingui","parseErrorMessages","useParseErrorMessage","stytch","email","setEmail","password","setPassword","organization","errorMessage","setErrorMessage","isSubmitting","setIsSubmitting","submitPassword","submitDiscoveryPassword","handleNonMemberReset","usePasswordInput","hideInput","setHideInput","useState","handleSubmit","e","preventDefault","organization_id","match","EMAIL_REGEX","readB2BInternals","searchManager","searchMember","then","member","type","catch","err","org","onGetHelp","screen","AppScreens","PasswordForgotForm","React","Column","as","onSubmit","gap","EmailInput","error","undefined","PasswordInput","Button","variant","loading","onClick"],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useLingui } from '../../../../../../node_modules/@lingui/react/dist/index.mjs';
|
|
2
|
+
import { getTranslatedError } from '../../../utils/getTranslatedError.mjs';
|
|
3
|
+
|
|
4
|
+
const JIT_PROVISIONING_ERRORS = [
|
|
5
|
+
'email_jit_provisioning_not_allowed',
|
|
6
|
+
'invalid_email_for_jit_provisioning'
|
|
7
|
+
];
|
|
8
|
+
/**
|
|
9
|
+
* Translates error message to user friendlier format including handling for JIT errors
|
|
10
|
+
*/ const useParseErrorMessage = ()=>{
|
|
11
|
+
const { i18n: $__i18n, _: $__ } = useLingui();
|
|
12
|
+
return (error, { email, org: organizationName })=>{
|
|
13
|
+
if (JIT_PROVISIONING_ERRORS.includes(error.error_type)) {
|
|
14
|
+
return $__i18n._({
|
|
15
|
+
id: "error.jitIneligible",
|
|
16
|
+
message: "{email} does not have access to {organizationName}. If you think this is a mistake, contact your admin",
|
|
17
|
+
values: {
|
|
18
|
+
email: email,
|
|
19
|
+
organizationName: organizationName
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return getTranslatedError(error, $__);
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export { useParseErrorMessage };
|
|
28
|
+
//# sourceMappingURL=useParseErrorMessage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useParseErrorMessage.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/useParseErrorMessage.ts"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\n\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\n\nconst JIT_PROVISIONING_ERRORS = ['email_jit_provisioning_not_allowed', 'invalid_email_for_jit_provisioning'];\n\n/**\n * Translates error message to user friendlier format including handling for JIT errors\n */\nexport const useParseErrorMessage = () => {\n const { t } = useLingui();\n return (error: StytchAPIError, { email, org: organizationName }: { email: string; org: string }) => {\n if (JIT_PROVISIONING_ERRORS.includes(error.error_type)) {\n return t({\n id: 'error.jitIneligible',\n message: `${email} does not have access to ${organizationName}. If you think this is a mistake, contact your admin`,\n });\n }\n return getTranslatedError(error, t);\n };\n};\n"],"names":["JIT_PROVISIONING_ERRORS","useParseErrorMessage","useLingui","error","email","org","organizationName","includes","error_type","getTranslatedError"],"mappings":";;;AAKA,MAAMA,uBAAAA,GAA0B;AAAC,IAAA,oCAAA;AAAsC,IAAA;AAAqC,CAAA;AAE5G;;UAGaC,oBAAAA,GAAuB,IAAA;AAClC,IAAA,MAAM,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,GAAA,EAAA,GAAQC,SAAAA,EAAAA;AACd,IAAA,OAAO,CAACC,KAAAA,EAAuB,EAAEC,KAAK,EAAEC,GAAAA,EAAKC,gBAAgB,EAAkC,GAAA;AAC7F,QAAA,IAAIN,uBAAAA,CAAwBO,QAAQ,CAACJ,KAAAA,CAAMK,UAAU,CAAA,EAAG;AACtD,YAAA,OAAA,OAAA,CAAA,CAAA,CAAA;;;;AAEcJ,oBAAAA,KAAAA,EAAAA,KAAAA;AAAiCE,oBAAAA,gBAAAA,EAAAA;;;AAEjD,QAAA;AACA,QAAA,OAAOG,kBAAAA,CAAmBN,KAAAA,EAAAA,GAAAA,CAAAA;AAC5B,IAAA,CAAA;AACF;;;;"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { __require as requireLodash_merge } from '../node_modules/lodash.merge/index.mjs';
|
|
1
|
+
import { __require as requireBs58 } from '../node_modules/bs58/index.mjs';
|
|
3
2
|
|
|
4
|
-
var
|
|
5
|
-
var merge = /*@__PURE__*/getDefaultExportFromCjs(lodash_mergeExports);
|
|
3
|
+
var bs58Exports = requireBs58();
|
|
6
4
|
|
|
7
|
-
export {
|
|
5
|
+
export { bs58Exports as b };
|
|
8
6
|
//# sourceMappingURL=index3.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index3.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index3.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getDefaultExportFromCjs } from './_commonjsHelpers.mjs';
|
|
2
|
+
import { __require as requireLodash_merge } from '../node_modules/lodash.merge/index.mjs';
|
|
2
3
|
|
|
3
|
-
var
|
|
4
|
+
var lodash_mergeExports = requireLodash_merge();
|
|
5
|
+
var merge = /*@__PURE__*/getDefaultExportFromCjs(lodash_mergeExports);
|
|
4
6
|
|
|
5
|
-
export {
|
|
7
|
+
export { merge as default };
|
|
6
8
|
//# sourceMappingURL=index4.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index4.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index4.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import merge from '../../../../../_virtual/
|
|
1
|
+
import merge from '../../../../../_virtual/index4.mjs';
|
|
2
2
|
import '../../../../../node_modules/preact/compat/dist/compat.module.mjs';
|
|
3
3
|
import createTheme from '../../../../../node_modules/@mui/material/styles/createTheme.mjs';
|
|
4
4
|
import selectClasses from '../../../../../node_modules/@mui/material/Select/selectClasses.mjs';
|
|
@@ -13,28 +13,9 @@ import { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend.mjs';
|
|
|
13
13
|
import { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup.mjs';
|
|
14
14
|
import { AppScreens } from '../types/AppScreens.mjs';
|
|
15
15
|
import { hasProduct } from '../utils.mjs';
|
|
16
|
+
import { useParseErrorMessage } from './useParseErrorMessage.mjs';
|
|
16
17
|
import { useState as h } from '../../../../../../node_modules/preact/hooks/dist/hooks.module.mjs';
|
|
17
18
|
|
|
18
|
-
const JIT_PROVISIONING_ERRORS = [
|
|
19
|
-
'email_jit_provisioning_not_allowed',
|
|
20
|
-
'invalid_email_for_jit_provisioning'
|
|
21
|
-
];
|
|
22
|
-
const useParseErrorMessage = ()=>{
|
|
23
|
-
const { i18n: $__i18n, _: $__ } = useLingui();
|
|
24
|
-
return (error, { email, org: organizationName })=>{
|
|
25
|
-
if (JIT_PROVISIONING_ERRORS.includes(error.error_type)) {
|
|
26
|
-
return $__i18n._({
|
|
27
|
-
id: "error.jitIneligible",
|
|
28
|
-
message: "{email} does not have access to {organizationName}. If you think this is a mistake, contact your admin",
|
|
29
|
-
values: {
|
|
30
|
-
email: email,
|
|
31
|
-
organizationName: organizationName
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
return getTranslatedError(error, $__);
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
19
|
const EmailForm = ({ showPasswordButton })=>{
|
|
39
20
|
const [state, dispatch] = useGlobalReducer();
|
|
40
21
|
const [emailInput, setEmailInput] = h(state.formState.passwordState.email);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/EmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\nimport React, { useState } from 'react';\n\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport UsePasswordButton from '../components/UsePasswordButton';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { useEffectiveAuthConfig } from '../hooks/useEffectiveAuthConfig';\nimport { useEmailOtpDiscoverySend } from '../hooks/useEmailOtpDiscoverySend';\nimport { useEmailOtpLoginOrSignup } from '../hooks/useEmailOtpLoginOrSignup';\nimport { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend';\nimport { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup';\nimport { AppScreens } from '../types/AppScreens';\nimport { hasProduct } from '../utils';\n\nconst JIT_PROVISIONING_ERRORS = ['email_jit_provisioning_not_allowed', 'invalid_email_for_jit_provisioning'];\n\nconst useParseErrorMessage = () => {\n const { t } = useLingui();\n return (error: StytchAPIError, { email, org: organizationName }: { email: string; org: string }) => {\n if (JIT_PROVISIONING_ERRORS.includes(error.error_type)) {\n return t({\n id: 'error.jitIneligible',\n message: `${email} does not have access to ${organizationName}. If you think this is a mistake, contact your admin`,\n });\n }\n return getTranslatedError(error, t);\n };\n};\n\nexport const EmailForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [emailInput, setEmailInput] = useState(state.formState.passwordState.email);\n const parseErrorMessage = useParseErrorMessage();\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = hasProduct(products, 'emailMagicLinks');\n const enableOtp = hasProduct(products, 'emailOtp');\n\n const providedEmail = state.primary.email;\n const email = providedEmail || emailInput;\n\n const { trigger: stytchEmlLoginOrSignup, error: emlError, isMutating: emlIsMutating } = useEmlLoginOrSignup();\n const { trigger: stytchOtpLoginOrSignup, error: otpError, isMutating: otpIsMutating } = useEmailOtpLoginOrSignup();\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n const organization = state.flowState.organization;\n if (!organization) return <></>;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n } else if (enableOtp) {\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }\n };\n\n if (providedEmail) {\n return (\n <Column gap={2}>\n {products\n .filter((product) => product.id === 'emailMagicLinks' || product.id === 'emailOtp')\n .map((product) => {\n switch (product.id) {\n case 'emailMagicLinks':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={emlIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailLink', message: 'Email me a link' })}\n </Button>\n );\n\n case 'emailOtp':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={otpIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailCode', message: 'Email me a code' })}\n </Button>\n );\n }\n })}\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n }\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmailInput}\n hideLabel\n error={error ? parseErrorMessage(error, { email, org: organization.organization_name }) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n\nexport const EmailDiscoveryForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [email, setEmail] = useState(state.formState.passwordState.email);\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = products.some((p) => p.id === 'emailMagicLinks');\n const enableOtp = products.some((p) => p.id === 'emailOtp');\n\n const { trigger: stytchEmlDiscoverySend, error: emlError, isMutating: emlIsMutating } = useEmlDiscoverySend();\n const { trigger: stytchOtpDiscoverySend, error: otpError, isMutating: otpIsMutating } = useEmailOtpDiscoverySend();\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlDiscoverySend({ email });\n } else if (enableOtp) {\n stytchOtpDiscoverySend({ email });\n }\n };\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmail}\n hideLabel\n error={error ? getTranslatedError(error, t) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n"],"names":["JIT_PROVISIONING_ERRORS","useParseErrorMessage","useLingui","error","email","org","organizationName","includes","error_type","getTranslatedError","EmailForm","showPasswordButton","state","dispatch","useGlobalReducer","emailInput","setEmailInput","useState","formState","passwordState","parseErrorMessage","products","useEffectiveAuthConfig","enableEml","hasProduct","enableOtp","providedEmail","primary","trigger","stytchEmlLoginOrSignup","emlError","isMutating","emlIsMutating","useEmlLoginOrSignup","stytchOtpLoginOrSignup","otpError","otpIsMutating","useEmailOtpLoginOrSignup","organization","flowState","React","handleSubmit","e","preventDefault","type","screen","AppScreens","EmailMethodSelection","history","organization_id","Column","gap","filter","product","id","map","Button","key","onClick","loading","disabled","variant","UsePasswordButton","as","onSubmit","EmailInput","setEmail","hideLabel","organization_name","undefined","EmailDiscoveryForm","some","p","stytchEmlDiscoverySend","useEmlDiscoverySend","stytchOtpDiscoverySend","useEmailOtpDiscoverySend"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/EmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport React, { useState } from 'react';\n\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport UsePasswordButton from '../components/UsePasswordButton';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { useEffectiveAuthConfig } from '../hooks/useEffectiveAuthConfig';\nimport { useEmailOtpDiscoverySend } from '../hooks/useEmailOtpDiscoverySend';\nimport { useEmailOtpLoginOrSignup } from '../hooks/useEmailOtpLoginOrSignup';\nimport { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend';\nimport { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup';\nimport { AppScreens } from '../types/AppScreens';\nimport { hasProduct } from '../utils';\nimport { useParseErrorMessage } from './useParseErrorMessage';\n\nexport const EmailForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [emailInput, setEmailInput] = useState(state.formState.passwordState.email);\n const parseErrorMessage = useParseErrorMessage();\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = hasProduct(products, 'emailMagicLinks');\n const enableOtp = hasProduct(products, 'emailOtp');\n\n const providedEmail = state.primary.email;\n const email = providedEmail || emailInput;\n\n const { trigger: stytchEmlLoginOrSignup, error: emlError, isMutating: emlIsMutating } = useEmlLoginOrSignup();\n const { trigger: stytchOtpLoginOrSignup, error: otpError, isMutating: otpIsMutating } = useEmailOtpLoginOrSignup();\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n const organization = state.flowState.organization;\n if (!organization) return <></>;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n } else if (enableOtp) {\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }\n };\n\n if (providedEmail) {\n return (\n <Column gap={2}>\n {products\n .filter((product) => product.id === 'emailMagicLinks' || product.id === 'emailOtp')\n .map((product) => {\n switch (product.id) {\n case 'emailMagicLinks':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={emlIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailLink', message: 'Email me a link' })}\n </Button>\n );\n\n case 'emailOtp':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={otpIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailCode', message: 'Email me a code' })}\n </Button>\n );\n }\n })}\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n }\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmailInput}\n hideLabel\n error={error ? parseErrorMessage(error, { email, org: organization.organization_name }) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n\nexport const EmailDiscoveryForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [email, setEmail] = useState(state.formState.passwordState.email);\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = products.some((p) => p.id === 'emailMagicLinks');\n const enableOtp = products.some((p) => p.id === 'emailOtp');\n\n const { trigger: stytchEmlDiscoverySend, error: emlError, isMutating: emlIsMutating } = useEmlDiscoverySend();\n const { trigger: stytchOtpDiscoverySend, error: otpError, isMutating: otpIsMutating } = useEmailOtpDiscoverySend();\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlDiscoverySend({ email });\n } else if (enableOtp) {\n stytchOtpDiscoverySend({ email });\n }\n };\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmail}\n hideLabel\n error={error ? getTranslatedError(error, t) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n"],"names":["EmailForm","showPasswordButton","state","dispatch","useGlobalReducer","emailInput","setEmailInput","useState","formState","passwordState","email","parseErrorMessage","useParseErrorMessage","useLingui","products","useEffectiveAuthConfig","enableEml","hasProduct","enableOtp","providedEmail","primary","trigger","stytchEmlLoginOrSignup","error","emlError","isMutating","emlIsMutating","useEmlLoginOrSignup","stytchOtpLoginOrSignup","otpError","otpIsMutating","useEmailOtpLoginOrSignup","organization","flowState","React","handleSubmit","e","preventDefault","type","screen","AppScreens","EmailMethodSelection","history","organization_id","Column","gap","filter","product","id","map","Button","key","onClick","loading","disabled","variant","UsePasswordButton","as","onSubmit","EmailInput","setEmail","hideLabel","org","organization_name","undefined","EmailDiscoveryForm","some","p","stytchEmlDiscoverySend","useEmlDiscoverySend","stytchOtpDiscoverySend","useEmailOtpDiscoverySend","getTranslatedError"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useLingui } from '../../../../../../node_modules/@lingui/react/dist/index.mjs';
|
|
2
2
|
import wn from '../../../../../../node_modules/preact/compat/dist/compat.module.mjs';
|
|
3
3
|
import { EMAIL_REGEX } from '../../../utils/index.mjs';
|
|
4
|
-
import { getTranslatedError } from '../../../utils/getTranslatedError.mjs';
|
|
5
4
|
import { readB2BInternals } from '../../../utils/internal.mjs';
|
|
6
5
|
import Button from '../../components/atoms/Button.mjs';
|
|
7
6
|
import Column from '../../components/atoms/Column.mjs';
|
|
@@ -10,53 +9,58 @@ import { PasswordInput } from '../../components/molecules/PasswordInput.mjs';
|
|
|
10
9
|
import { useGlobalReducer } from '../GlobalContextProvider.mjs';
|
|
11
10
|
import { AppScreens } from '../types/AppScreens.mjs';
|
|
12
11
|
import { usePasswordInput } from '../usePasswordInput.mjs';
|
|
12
|
+
import { useParseErrorMessage } from './useParseErrorMessage.mjs';
|
|
13
13
|
import { useState as h } from '../../../../../../node_modules/preact/hooks/dist/hooks.module.mjs';
|
|
14
14
|
|
|
15
15
|
const PasswordsEmailForm = ()=>{
|
|
16
16
|
const [, dispatch] = useGlobalReducer();
|
|
17
17
|
const { i18n: $__i18n, _: $__ } = useLingui();
|
|
18
|
+
const parseErrorMessages = useParseErrorMessage();
|
|
18
19
|
const { stytch, email, setEmail, password, setPassword, organization, errorMessage, setErrorMessage, isSubmitting, setIsSubmitting, submitPassword, submitDiscoveryPassword, handleNonMemberReset } = usePasswordInput();
|
|
19
20
|
const [hideInput, setHideInput] = h(!!organization && !email);
|
|
20
21
|
const handleSubmit = async (e)=>{
|
|
21
22
|
e.preventDefault();
|
|
22
|
-
if (organization) {
|
|
23
|
-
const organization_id = organization.organization_id;
|
|
24
|
-
// If we have processed the email, submit the password field
|
|
25
|
-
if (!hideInput) {
|
|
26
|
-
submitPassword(organization_id);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
// Validate we have a member with a password. Otherwise, check if we can jit
|
|
30
|
-
// provision and kickoff verification and session reset
|
|
31
|
-
if (!email.match(EMAIL_REGEX)) {
|
|
32
|
-
setErrorMessage($__i18n._({
|
|
33
|
-
id: "error.invalidEmailAddress",
|
|
34
|
-
message: "Invalid email address"
|
|
35
|
-
}));
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
setErrorMessage('');
|
|
39
|
-
setIsSubmitting(true);
|
|
40
|
-
readB2BInternals(stytch).searchManager.searchMember(email, organization.organization_id).then(({ member })=>{
|
|
41
|
-
if (member) {
|
|
42
|
-
setHideInput(false);
|
|
43
|
-
setIsSubmitting(false);
|
|
44
|
-
dispatch({
|
|
45
|
-
type: 'set_password_state',
|
|
46
|
-
email
|
|
47
|
-
});
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
// No member password flow: verify email and use reset by session
|
|
51
|
-
handleNonMemberReset();
|
|
52
|
-
}).catch((err)=>{
|
|
53
|
-
setIsSubmitting(false);
|
|
54
|
-
setErrorMessage(getTranslatedError(err, $__));
|
|
55
|
-
});
|
|
56
|
-
} else {
|
|
23
|
+
if (!organization) {
|
|
57
24
|
// Discovery flow
|
|
58
25
|
submitDiscoveryPassword();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const organization_id = organization.organization_id;
|
|
29
|
+
// If we have processed the email, submit the password field
|
|
30
|
+
if (!hideInput) {
|
|
31
|
+
submitPassword(organization_id);
|
|
32
|
+
return;
|
|
59
33
|
}
|
|
34
|
+
// Validate we have a member with a password. Otherwise, check if we can jit
|
|
35
|
+
// provision and kickoff verification and session reset
|
|
36
|
+
if (!email.match(EMAIL_REGEX)) {
|
|
37
|
+
setErrorMessage($__i18n._({
|
|
38
|
+
id: "error.invalidEmailAddress",
|
|
39
|
+
message: "Invalid email address"
|
|
40
|
+
}));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
setErrorMessage('');
|
|
44
|
+
setIsSubmitting(true);
|
|
45
|
+
readB2BInternals(stytch).searchManager.searchMember(email, organization.organization_id).then(({ member })=>{
|
|
46
|
+
if (member) {
|
|
47
|
+
setHideInput(false);
|
|
48
|
+
setIsSubmitting(false);
|
|
49
|
+
dispatch({
|
|
50
|
+
type: 'set_password_state',
|
|
51
|
+
email
|
|
52
|
+
});
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// No member password flow: verify email and use reset by session
|
|
56
|
+
handleNonMemberReset();
|
|
57
|
+
}).catch((err)=>{
|
|
58
|
+
setIsSubmitting(false);
|
|
59
|
+
setErrorMessage(parseErrorMessages(err, {
|
|
60
|
+
email,
|
|
61
|
+
org: organization_id
|
|
62
|
+
}));
|
|
63
|
+
});
|
|
60
64
|
};
|
|
61
65
|
const onGetHelp = ()=>{
|
|
62
66
|
dispatch({
|
|
@@ -74,7 +78,8 @@ const PasswordsEmailForm = ()=>{
|
|
|
74
78
|
gap: 2
|
|
75
79
|
}, /*#__PURE__*/ wn.createElement(EmailInput, {
|
|
76
80
|
email: email,
|
|
77
|
-
setEmail: setEmail
|
|
81
|
+
setEmail: setEmail,
|
|
82
|
+
error: hideInput ? errorMessage : undefined
|
|
78
83
|
}), !hideInput && /*#__PURE__*/ wn.createElement(PasswordInput, {
|
|
79
84
|
password: password,
|
|
80
85
|
setPassword: setPassword,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasswordEmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/PasswordEmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\nimport React, { useState } from 'react';\n\nimport { EMAIL_REGEX } from '../../../utils';\nimport {
|
|
1
|
+
{"version":3,"file":"PasswordEmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/PasswordEmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\nimport React, { useState } from 'react';\n\nimport { EMAIL_REGEX } from '../../../utils';\nimport { readB2BInternals } from '../../../utils/internal';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport { PasswordInput } from '../../components/molecules/PasswordInput';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { AppScreens } from '../types/AppScreens';\nimport { usePasswordInput } from '../usePasswordInput';\nimport { useParseErrorMessage } from './useParseErrorMessage';\n\nexport const PasswordsEmailForm = () => {\n const [, dispatch] = useGlobalReducer();\n const { t } = useLingui();\n\n const parseErrorMessages = useParseErrorMessage();\n\n const {\n stytch,\n email,\n setEmail,\n password,\n setPassword,\n organization,\n errorMessage,\n setErrorMessage,\n isSubmitting,\n setIsSubmitting,\n submitPassword,\n submitDiscoveryPassword,\n handleNonMemberReset,\n } = usePasswordInput();\n\n const [hideInput, setHideInput] = useState(!!organization && !email);\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (!organization) {\n // Discovery flow\n submitDiscoveryPassword();\n return;\n }\n\n const organization_id = organization.organization_id;\n\n // If we have processed the email, submit the password field\n if (!hideInput) {\n submitPassword(organization_id);\n return;\n }\n\n // Validate we have a member with a password. Otherwise, check if we can jit\n // provision and kickoff verification and session reset\n if (!email.match(EMAIL_REGEX)) {\n setErrorMessage(t({ id: 'error.invalidEmailAddress', message: 'Invalid email address' }));\n return;\n }\n setErrorMessage('');\n setIsSubmitting(true);\n readB2BInternals(stytch)\n .searchManager.searchMember(email, organization.organization_id)\n .then(({ member }) => {\n if (member) {\n setHideInput(false);\n setIsSubmitting(false);\n dispatch({ type: 'set_password_state', email });\n return;\n }\n // No member password flow: verify email and use reset by session\n handleNonMemberReset();\n })\n .catch((err: StytchAPIError) => {\n setIsSubmitting(false);\n setErrorMessage(parseErrorMessages(err, { email, org: organization_id }));\n });\n };\n\n const onGetHelp = () => {\n dispatch({ type: 'set_password_state', email: email });\n dispatch({ type: 'transition', screen: AppScreens.PasswordForgotForm });\n };\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput email={email} setEmail={setEmail} error={hideInput ? errorMessage : undefined} />\n\n {!hideInput && (\n <PasswordInput password={password} setPassword={setPassword} type=\"current\" error={errorMessage} />\n )}\n\n <Button variant=\"primary\" loading={isSubmitting} type=\"submit\">\n {t({ id: 'button.continue', message: 'Continue' })}\n </Button>\n\n {!hideInput && (\n <Button variant=\"outline\" onClick={onGetHelp}>\n {t({ id: 'link.signupResetPassword', message: 'Sign up or reset password' })}\n </Button>\n )}\n </Column>\n );\n};\n"],"names":["PasswordsEmailForm","dispatch","useGlobalReducer","useLingui","parseErrorMessages","useParseErrorMessage","stytch","email","setEmail","password","setPassword","organization","errorMessage","setErrorMessage","isSubmitting","setIsSubmitting","submitPassword","submitDiscoveryPassword","handleNonMemberReset","usePasswordInput","hideInput","setHideInput","useState","handleSubmit","e","preventDefault","organization_id","match","EMAIL_REGEX","readB2BInternals","searchManager","searchMember","then","member","type","catch","err","org","onGetHelp","screen","AppScreens","PasswordForgotForm","React","Column","as","onSubmit","gap","EmailInput","error","undefined","PasswordInput","Button","variant","loading","onClick"],"mappings":"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"}
|