diff --git a/packages/connect-react/src/components/login/LoginInitScreen.tsx b/packages/connect-react/src/components/login/LoginInitScreen.tsx index b757e4fc..079ae3b7 100644 --- a/packages/connect-react/src/components/login/LoginInitScreen.tsx +++ b/packages/connect-react/src/components/login/LoginInitScreen.tsx @@ -18,6 +18,7 @@ export type CboApiFallbackOperationError = { initFallback: boolean; identifierFallback: string; message: string | null; + code?: string; }; export enum LoginInitState { @@ -179,6 +180,7 @@ const LoginInitScreen: FC = ({ showFallback = false }) => { initFallback: res.val.fallbackOperationError.initFallback, identifierFallback: res.val.fallbackOperationError.identifier ?? '', message: res.val.fallbackOperationError.error?.message ?? null, + code: res.val.fallbackOperationError.error?.code, }; return handleSituation(LoginSituationCode.CboApiFallbackOperationError, undefined, data); @@ -219,6 +221,7 @@ const LoginInitScreen: FC = ({ showFallback = false }) => { initFallback: resStart.val.fallbackOperationError.initFallback, identifierFallback: resStart.val.fallbackOperationError.identifier ?? '', message: resStart.val.fallbackOperationError.error?.message ?? null, + code: resStart.val.fallbackOperationError.error?.code, }; return handleSituation(LoginSituationCode.CboApiFallbackOperationError, undefined, data); @@ -305,6 +308,10 @@ const LoginInitScreen: FC = ({ showFallback = false }) => { case LoginSituationCode.CboApiFallbackOperationError: { const typed = data as CboApiFallbackOperationError; + if (config.onUnknownUser && typed.code && typed.code === 'user_not_found') { + return config.onUnknownUser(typed.identifierFallback); + } + if (typed.initFallback) { return automaticFallback(typed.identifierFallback, typed.message); } diff --git a/packages/types/src/connect/config.ts b/packages/types/src/connect/config.ts index 0d597029..6f0500bf 100644 --- a/packages/types/src/connect/config.ts +++ b/packages/types/src/connect/config.ts @@ -2,6 +2,7 @@ export type CorbadoConnectLoginConfig = { onFallback(identifier: string, errorMessage: string): void; onFallbackSilent?(identifier: string): void; onFallbackCustom?(identifier: string, code: string, payload: string): void; + onUnknownUser?(identifier: string): void; onError?(error: string): void; onLoaded?(message: string, isFallBackTriggered: boolean): void; onComplete(signedPasskeyData: string, clientState: string, webauthnId: string): Promise;