feat: Reset password (#8962)

* wip

* more work

* wip

* more work

* wrap up first iteration

* work on new approach

* more work

* move middleware func to route

* cleanup

* more work

* wrap up

* more work

* fix workflow

* minor tweaks

* finalize

* Use JWT secret instead
This commit is contained in:
Oli Juhl
2024-09-06 12:28:29 +02:00
committed by GitHub
parent 2c5e72d141
commit e27056b3c3
29 changed files with 633 additions and 194 deletions
@@ -1 +1,3 @@
export * from "./steps"
export * from "./workflows"
@@ -30,7 +30,7 @@ export const setAuthAppMetadataStep = createStep(
appMetadata[key] = data.value
await service.updateAuthIdentites({
await service.updateAuthIdentities({
id: authIdentity.id,
app_metadata: appMetadata,
})
@@ -58,7 +58,7 @@ export const setAuthAppMetadataStep = createStep(
delete appMetadata[key]
}
await service.updateAuthIdentites({
await service.updateAuthIdentities({
id: authIdentity.id,
app_metadata: appMetadata,
})
@@ -0,0 +1,61 @@
import {
AuthWorkflowEvents,
generateJwtToken,
MedusaError,
} from "@medusajs/utils";
import {
createWorkflow,
transform,
WorkflowResponse,
} from "@medusajs/workflows-sdk";
import { emitEventStep, useRemoteQueryStep } from "../../common";
export const generateResetPasswordTokenWorkflow = createWorkflow(
"generate-reset-password-token",
(input: { entityId: string; provider: string; secret: string }) => {
const providerIdentities = useRemoteQueryStep({
entry_point: "provider_identity",
fields: ["auth_identity_id", "provider_metadata"],
variables: {
filters: {
entity_id: input.entityId,
provider: input.provider,
},
},
})
const token = transform(
{ input, providerIdentities },
({ input, providerIdentities }) => {
const providerIdentity = providerIdentities?.[0]
if (!providerIdentity) {
throw new MedusaError(
MedusaError.Types.INVALID_DATA,
`Provider identity with entity_id ${input.entityId} and provider ${input.provider} not found`
)
}
const token = generateJwtToken(
{
entity_id: input.entityId,
provider: input.provider,
},
{
secret: input.secret,
expiresIn: "15m",
}
)
return token
}
)
emitEventStep({
eventName: AuthWorkflowEvents.PASSWORD_RESET,
data: { entity_id: input.entityId, token },
})
return new WorkflowResponse(token)
}
)
@@ -0,0 +1 @@
export * from "./generate-reset-password-token"