From 040fbf3220420b43871e33acc6686a6cedcf88fc Mon Sep 17 00:00:00 2001 From: Shahed Nasser Date: Mon, 15 Sep 2025 14:46:08 +0300 Subject: [PATCH] chore(core-flows): use directory convention for locking steps (#13501) --- .changeset/tricky-bobcats-brake.md | 5 +++ .../src/cart/workflows/complete-cart.ts | 4 +-- packages/core/core-flows/src/locking/index.ts | 4 +-- .../src/locking/{ => steps}/acquire-lock.ts | 33 ++++++++++++++++--- .../src/locking/{ => steps}/release-lock.ts | 16 +++++++-- 5 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 .changeset/tricky-bobcats-brake.md rename packages/core/core-flows/src/locking/{ => steps}/acquire-lock.ts (64%) rename packages/core/core-flows/src/locking/{ => steps}/release-lock.ts (66%) diff --git a/.changeset/tricky-bobcats-brake.md b/.changeset/tricky-bobcats-brake.md new file mode 100644 index 0000000000..9b7d419c49 --- /dev/null +++ b/.changeset/tricky-bobcats-brake.md @@ -0,0 +1,5 @@ +--- +"@medusajs/core-flows": patch +--- + +chore(core-flows): use directory convention for locking steps diff --git a/packages/core/core-flows/src/cart/workflows/complete-cart.ts b/packages/core/core-flows/src/cart/workflows/complete-cart.ts index 931a020915..983b0eb7f7 100644 --- a/packages/core/core-flows/src/cart/workflows/complete-cart.ts +++ b/packages/core/core-flows/src/cart/workflows/complete-cart.ts @@ -26,8 +26,8 @@ import { useQueryGraphStep, useRemoteQueryStep, } from "../../common" -import { acquireLockStep } from "../../locking/acquire-lock" -import { releaseLockStep } from "../../locking/release-lock" +import { acquireLockStep } from "../../locking/steps/acquire-lock" +import { releaseLockStep } from "../../locking/steps/release-lock" import { addOrderTransactionStep } from "../../order/steps/add-order-transaction" import { createOrdersStep } from "../../order/steps/create-orders" import { authorizePaymentSessionStep } from "../../payment/steps/authorize-payment-session" diff --git a/packages/core/core-flows/src/locking/index.ts b/packages/core/core-flows/src/locking/index.ts index f2ab39f887..ce429927c7 100644 --- a/packages/core/core-flows/src/locking/index.ts +++ b/packages/core/core-flows/src/locking/index.ts @@ -1,2 +1,2 @@ -export * from "./acquire-lock" -export * from "./release-lock" +export * from "./steps/acquire-lock" +export * from "./steps/release-lock" diff --git a/packages/core/core-flows/src/locking/acquire-lock.ts b/packages/core/core-flows/src/locking/steps/acquire-lock.ts similarity index 64% rename from packages/core/core-flows/src/locking/acquire-lock.ts rename to packages/core/core-flows/src/locking/steps/acquire-lock.ts index 88c6939072..6e20dcae59 100644 --- a/packages/core/core-flows/src/locking/acquire-lock.ts +++ b/packages/core/core-flows/src/locking/steps/acquire-lock.ts @@ -6,18 +6,43 @@ import { setTimeout } from "timers/promises" * The keys to be locked */ export interface AcquireLockStepInput { + /** + * The keys to be locked + */ key: string | string[] - timeout?: number // in seconds. Defaults to 0 - retryInterval?: number // in seconds. Defaults to 0.3 - ttl?: number // in seconds + /** + * The maximum time to wait for acquiring the lock. If the lock cannot be acquired within this time, an error is thrown. + * + * @defaultValue 0 + */ + timeout?: number + /** + * The time (in seconds) to wait between each retry to acquire the lock. + * + * @defaultValue 0.3 + */ + retryInterval?: number + /** + * The expiration time (in seconds) for the lock. If the lock is already acquired and the owner is the same, + * the expiration time is extended by the value passed. If not specified, the lock does not expire. + */ + ttl?: number + /** + * The owner ID for the lock. If specified, only the owner can release the lock or extend its expiration time. + */ ownerId?: string + /** + * The provider name to use for locking. If no provider is passed, the default provider + * (in-memory or the provider configured in medusa-config.ts) will be used. + */ provider?: string skipOnSubWorkflow?: boolean } export const acquireLockStepId = "acquire-lock-step" /** - * This step acquires a lock for a given key. + * This step acquires a lock for a given key. Learn more about locks in the [Locking Module](https://docs.medusajs.com/resources/infrastructure-modules/locking) + * guide. * * @example * const data = acquireLockStep({ diff --git a/packages/core/core-flows/src/locking/release-lock.ts b/packages/core/core-flows/src/locking/steps/release-lock.ts similarity index 66% rename from packages/core/core-flows/src/locking/release-lock.ts rename to packages/core/core-flows/src/locking/steps/release-lock.ts index 52a68eaca6..a4f8cd7170 100644 --- a/packages/core/core-flows/src/locking/release-lock.ts +++ b/packages/core/core-flows/src/locking/steps/release-lock.ts @@ -5,19 +5,31 @@ import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk" * The locked keys to be released */ export interface ReleaseLockStepInput { + /** + * The keys to be released + */ key: string | string[] + /** + * The ID of the lock's owner. The lock can be released either if it doesn't have an owner, + * or if its owner ID matches the one passed in this property. + */ ownerId?: string + /** + * The provider name to use for locking. If no provider is passed, + * the default provider (in-memory or the provider configured in medusa-config.ts) will be used. + */ provider?: string skipOnSubWorkflow?: boolean } export const releaseLockStepId = "release-lock-step" /** - * This step releases a lock for a given key. + * This step releases a lock for a given key. Learn more about locks in the [Locking Module](https://docs.medusajs.com/resources/infrastructure-modules/locking) + * guide. * * @example * const data = releaseLockStep({ - * "key": "my-lock-key" + * key: "my-lock-key" * }) */ export const releaseLockStep = createStep(