-
-
Notifications
You must be signed in to change notification settings - Fork 423
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor(experience): refactor the code verificatin api
refactor the code verification api
- Loading branch information
Showing
4 changed files
with
69 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,51 +1,44 @@ | ||
import { InteractionEvent, type VerificationCodeIdentifier } from '@logto/schemas'; | ||
import { validate } from 'superstruct'; | ||
|
||
import { type ContinueFlowInteractionEvent, UserFlow } from '@/types'; | ||
import { continueFlowStateGuard } from '@/types/guard'; | ||
|
||
import { initInteraction, sendVerificationCode } from './experience'; | ||
|
||
/** Move to API */ | ||
// Consider deprecate this, remove the `UserFlow.Continue` case | ||
// Align the flow definition with the interaction event | ||
export const userFlowToInteractionEventMap = Object.freeze({ | ||
[UserFlow.SignIn]: InteractionEvent.SignIn, | ||
[UserFlow.Register]: InteractionEvent.Register, | ||
[UserFlow.ForgotPassword]: InteractionEvent.ForgotPassword, | ||
}); | ||
|
||
/** | ||
* This method is used to get the interaction event from the location state | ||
* For continue flow, the interaction event is stored in the location state, | ||
* we need to retrieve it from the state in order to send the verification code with the correct interaction event template | ||
*/ | ||
export const getInteractionEventFromState = (state: unknown) => { | ||
if (!state) { | ||
return; | ||
} | ||
|
||
const [, continueFlowState] = validate(state, continueFlowStateGuard); | ||
|
||
return continueFlowState?.interactionEvent; | ||
}; | ||
|
||
export const sendVerificationCodeApi = async ( | ||
type: UserFlow, | ||
flow: UserFlow, | ||
identifier: VerificationCodeIdentifier, | ||
interactionEvent?: ContinueFlowInteractionEvent | ||
) => { | ||
switch (type) { | ||
case UserFlow.SignIn: { | ||
await initInteraction(InteractionEvent.SignIn); | ||
return sendVerificationCode(InteractionEvent.SignIn, identifier); | ||
} | ||
case UserFlow.Register: { | ||
await initInteraction(InteractionEvent.Register); | ||
return sendVerificationCode(InteractionEvent.Register, identifier); | ||
} | ||
case UserFlow.ForgotPassword: { | ||
await initInteraction(InteractionEvent.ForgotPassword); | ||
return sendVerificationCode(InteractionEvent.ForgotPassword, identifier); | ||
} | ||
case UserFlow.Continue: { | ||
return sendVerificationCode(interactionEvent ?? InteractionEvent.SignIn, identifier); | ||
} | ||
if (flow === UserFlow.Continue) { | ||
return sendVerificationCode(interactionEvent ?? InteractionEvent.SignIn, identifier); | ||
} | ||
}; | ||
|
||
export const resendVerificationCodeApi = async ( | ||
type: UserFlow, | ||
identifier: VerificationCodeIdentifier | ||
) => { | ||
switch (type) { | ||
case UserFlow.SignIn: { | ||
return sendVerificationCode(InteractionEvent.SignIn, identifier); | ||
} | ||
case UserFlow.Register: { | ||
return sendVerificationCode(InteractionEvent.Register, identifier); | ||
} | ||
case UserFlow.ForgotPassword: { | ||
return sendVerificationCode(InteractionEvent.ForgotPassword, identifier); | ||
} | ||
case UserFlow.Continue: { | ||
// Continue flow does not have its own email template, always use sign-in template for now | ||
return sendVerificationCode(InteractionEvent.SignIn, identifier); | ||
} | ||
} | ||
const event = userFlowToInteractionEventMap[flow]; | ||
await initInteraction(event); | ||
return sendVerificationCode(event, identifier); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters