Feat(medusa, user, core-flows): User creation with invites (#6413)
**What** - add accept invite endpoint **Invite accept flow** - authenticate using the auth endpoint to create and auth-user - invoke accept endpoint with token and info to create user
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
import { InviteDTO } from "@medusajs/types"
|
||||
import { IUserModuleService } from "@medusajs/types"
|
||||
import { StepResponse } from "@medusajs/workflows-sdk"
|
||||
import { createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
export const validateTokenStepId = "validate-invite-token-step"
|
||||
export const validateTokenStep = createStep(
|
||||
validateTokenStepId,
|
||||
async (input: string, { container }) => {
|
||||
const userModuleService: IUserModuleService = container.resolve(
|
||||
ModuleRegistrationName.USER
|
||||
)
|
||||
|
||||
const invite = await userModuleService.validateInviteToken(input)
|
||||
|
||||
return new StepResponse(invite)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,52 @@
|
||||
import { UserDTO } from "@medusajs/types"
|
||||
import {
|
||||
WorkflowData,
|
||||
createWorkflow,
|
||||
transform,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { createUsersStep } from "../../user"
|
||||
import { validateTokenStep } from "../steps/validate-token"
|
||||
import { setAuthAppMetadataStep } from "../../auth"
|
||||
import { InviteWorkflow } from "@medusajs/types"
|
||||
import { deleteInvitesStep } from "../steps"
|
||||
|
||||
export const acceptInviteWorkflowId = "accept-invite-workflow"
|
||||
export const acceptInviteWorkflow = createWorkflow(
|
||||
acceptInviteWorkflowId,
|
||||
(
|
||||
input: WorkflowData<InviteWorkflow.AcceptInviteWorkflowInputDTO>
|
||||
): WorkflowData<UserDTO[]> => {
|
||||
// validate token
|
||||
const invite = validateTokenStep(input.invite_token)
|
||||
|
||||
const createUserInput = transform(
|
||||
{ input, invite },
|
||||
({ input, invite }) => {
|
||||
return [
|
||||
{
|
||||
...input.user,
|
||||
email: invite.email,
|
||||
},
|
||||
]
|
||||
}
|
||||
)
|
||||
|
||||
const users = createUsersStep(createUserInput)
|
||||
|
||||
const authUserInput = transform({ input, users }, ({ input, users }) => {
|
||||
const createdUser = users[0]
|
||||
|
||||
return {
|
||||
authUserId: input.auth_user_id,
|
||||
key: "user_id",
|
||||
value: createdUser.id,
|
||||
}
|
||||
})
|
||||
|
||||
setAuthAppMetadataStep(authUserInput)
|
||||
|
||||
deleteInvitesStep([invite.id])
|
||||
|
||||
return users
|
||||
}
|
||||
)
|
||||
@@ -1,2 +1,3 @@
|
||||
export * from "./create-invites"
|
||||
export * from "./delete-invites"
|
||||
export * from "./accept-invite"
|
||||
|
||||
Reference in New Issue
Block a user