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:
Philip Korsholm
2024-02-19 05:29:15 +00:00
committed by GitHub
parent 5977a38ef4
commit f6d38163bb
28 changed files with 399 additions and 40 deletions
@@ -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"