chore(core-flows,types): improve TSDocs of cart workflows and steps (#10962)
* chore(core-flows,types): improve TSDocs of cart workflows and steps * fix build errors * fix build error * fix errors
This commit is contained in:
1 parent
f5235862c0
commit
8cd58b3092
63 files changed
+1785
-63
No files matched your search
@@ -5,13 +5,30 @@ import {
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the shipping methods to add.
|
||||||
|
*/
|
||||||
export interface AddShippingMethodToCartStepInput {
|
export interface AddShippingMethodToCartStepInput {
|
||||||
|
/**
|
||||||
|
* The shipping methods to add.
|
||||||
|
*/
|
||||||
shipping_methods: CreateShippingMethodDTO[]
|
shipping_methods: CreateShippingMethodDTO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const addShippingMethodToCartStepId = "add-shipping-method-to-cart-step"
|
export const addShippingMethodToCartStepId = "add-shipping-method-to-cart-step"
|
||||||
/**
|
/**
|
||||||
* This step adds shipping methods to a cart.
|
* This step adds shipping methods to a cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = addShippingMethodToCartStep({
|
||||||
|
* shipping_methods: [
|
||||||
|
* {
|
||||||
|
* name: "Standard Shipping",
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* amount: 10,
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const addShippingMethodToCartStep = createStep(
|
export const addShippingMethodToCartStep = createStep(
|
||||||
addShippingMethodToCartStepId,
|
addShippingMethodToCartStepId,
|
||||||
|
|||||||
@@ -7,19 +7,55 @@ import {
|
|||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart items to confirm their inventory availability.
|
||||||
|
*/
|
||||||
export interface ConfirmVariantInventoryStepInput {
|
export interface ConfirmVariantInventoryStepInput {
|
||||||
|
/**
|
||||||
|
* The items to confirm inventory for.
|
||||||
|
*/
|
||||||
items: {
|
items: {
|
||||||
|
/**
|
||||||
|
* The ID of the inventory item associated with the line item's variant.
|
||||||
|
*/
|
||||||
inventory_item_id: string
|
inventory_item_id: string
|
||||||
|
/**
|
||||||
|
* The number of units a single quantity is equivalent to. For example, if a customer orders one quantity of the variant, Medusa checks the availability of the quantity multiplied by the
|
||||||
|
* value set for `required_quantity`. When the customer orders the quantity, Medusa reserves the ordered quantity multiplied by the value set for `required_quantity`.
|
||||||
|
*/
|
||||||
required_quantity: number
|
required_quantity: number
|
||||||
|
/**
|
||||||
|
* Whether the variant can be ordered even if it's out of stock. If a variant has this enabled, the step doesn't throw an error.
|
||||||
|
*/
|
||||||
allow_backorder: boolean
|
allow_backorder: boolean
|
||||||
|
/**
|
||||||
|
* The quantity in the cart.
|
||||||
|
*/
|
||||||
quantity: BigNumberInput
|
quantity: BigNumberInput
|
||||||
|
/**
|
||||||
|
* The ID of the stock locations that the inventory quantity is available in.
|
||||||
|
*/
|
||||||
location_ids: string[]
|
location_ids: string[]
|
||||||
}[]
|
}[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const confirmInventoryStepId = "confirm-inventory-step"
|
export const confirmInventoryStepId = "confirm-inventory-step"
|
||||||
/**
|
/**
|
||||||
* This step confirms for one or more variants that their inventory has a required quantity.
|
* This step validates that items in the cart have sufficient inventory quantity.
|
||||||
|
* If an item doesn't have sufficient inventory, an error is thrown.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* confirmInventoryStep({
|
||||||
|
* items: [
|
||||||
|
* {
|
||||||
|
* inventory_item_id: "iitem_123",
|
||||||
|
* required_quantity: 1,
|
||||||
|
* allow_backorder: false,
|
||||||
|
* quantity: 1,
|
||||||
|
* location_ids: ["sloc_123"]
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const confirmInventoryStep = createStep(
|
export const confirmInventoryStep = createStep(
|
||||||
confirmInventoryStepId,
|
confirmInventoryStepId,
|
||||||
|
|||||||
@@ -2,13 +2,18 @@ import { CreateCartDTO, ICartModuleService } from "@medusajs/framework/types"
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the carts to create.
|
||||||
|
*/
|
||||||
|
export type CreateCartsStepInput = CreateCartDTO[]
|
||||||
|
|
||||||
export const createCartsStepId = "create-carts"
|
export const createCartsStepId = "create-carts"
|
||||||
/**
|
/**
|
||||||
* This step creates a cart.
|
* This step creates a cart.
|
||||||
*/
|
*/
|
||||||
export const createCartsStep = createStep(
|
export const createCartsStep = createStep(
|
||||||
createCartsStepId,
|
createCartsStepId,
|
||||||
async (data: CreateCartDTO[], { container }) => {
|
async (data: CreateCartsStepInput, { container }) => {
|
||||||
const service = container.resolve<ICartModuleService>(Modules.CART)
|
const service = container.resolve<ICartModuleService>(Modules.CART)
|
||||||
|
|
||||||
const createdCarts = await service.createCarts(data)
|
const createdCarts = await service.createCarts(data)
|
||||||
|
|||||||
@@ -5,13 +5,30 @@ import {
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the line item adjustments to create.
|
||||||
|
*/
|
||||||
export interface CreateLineItemAdjustmentsCartStepInput {
|
export interface CreateLineItemAdjustmentsCartStepInput {
|
||||||
|
/**
|
||||||
|
* The line item adjustments to create.
|
||||||
|
*/
|
||||||
lineItemAdjustmentsToCreate: CreateLineItemAdjustmentDTO[]
|
lineItemAdjustmentsToCreate: CreateLineItemAdjustmentDTO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const createLineItemAdjustmentsStepId = "create-line-item-adjustments"
|
export const createLineItemAdjustmentsStepId = "create-line-item-adjustments"
|
||||||
/**
|
/**
|
||||||
* This step creates line item adjustments in a cart.
|
* This step creates line item adjustments in a cart, such as when a promotion is applied.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* createLineItemAdjustmentsStep({
|
||||||
|
* lineItemAdjustmentsToCreate: [
|
||||||
|
* {
|
||||||
|
* item_id: "litem_123",
|
||||||
|
* code: "10OFF",
|
||||||
|
* amount: 10,
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const createLineItemAdjustmentsStep = createStep(
|
export const createLineItemAdjustmentsStep = createStep(
|
||||||
createLineItemAdjustmentsStepId,
|
createLineItemAdjustmentsStepId,
|
||||||
|
|||||||
@@ -5,14 +5,34 @@ import {
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the line items to create.
|
||||||
|
*/
|
||||||
export interface CreateLineItemsCartStepInput {
|
export interface CreateLineItemsCartStepInput {
|
||||||
|
/**
|
||||||
|
* The ID of the cart to create line items for.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* The line items to create.
|
||||||
|
*/
|
||||||
items: CreateLineItemForCartDTO[]
|
items: CreateLineItemForCartDTO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const createLineItemsStepId = "create-line-items-step"
|
export const createLineItemsStepId = "create-line-items-step"
|
||||||
/**
|
/**
|
||||||
* This step creates line item in a cart.
|
* This step creates line item in a cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = createLineItemsStep({
|
||||||
|
* "id": "cart_123",
|
||||||
|
* "items": [{
|
||||||
|
* "title": "Shirt",
|
||||||
|
* "quantity": 1,
|
||||||
|
* "unit_price": 20,
|
||||||
|
* "cart_id": "cart_123",
|
||||||
|
* }]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const createLineItemsStep = createStep(
|
export const createLineItemsStep = createStep(
|
||||||
createLineItemsStepId,
|
createLineItemsStepId,
|
||||||
|
|||||||
@@ -5,20 +5,42 @@ import {
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the payment collections to create.
|
||||||
|
*/
|
||||||
export type CreatePaymentCollectionCartStepInput = {
|
export type CreatePaymentCollectionCartStepInput = {
|
||||||
|
/**
|
||||||
|
* The ID of the region that the payment collection belongs to.
|
||||||
|
*/
|
||||||
region_id: string
|
region_id: string
|
||||||
|
/**
|
||||||
|
* The payment collection's curency code.
|
||||||
|
*/
|
||||||
currency_code: string
|
currency_code: string
|
||||||
|
/**
|
||||||
|
* The payment collection's amount.
|
||||||
|
*/
|
||||||
amount: BigNumberInput
|
amount: BigNumberInput
|
||||||
|
/**
|
||||||
|
* Custom key-value pairs to store in the payment collection.
|
||||||
|
*/
|
||||||
metadata?: Record<string, unknown>
|
metadata?: Record<string, unknown>
|
||||||
}
|
}[]
|
||||||
|
|
||||||
export const createPaymentCollectionsStepId = "create-payment-collections"
|
export const createPaymentCollectionsStepId = "create-payment-collections"
|
||||||
/**
|
/**
|
||||||
* This step creates payment collections in a cart.
|
* This step creates payment collections in a cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = createPaymentCollectionsStep([{
|
||||||
|
* "region_id": "region_123",
|
||||||
|
* "currency_code": "usd",
|
||||||
|
* "amount": 40
|
||||||
|
* }])
|
||||||
*/
|
*/
|
||||||
export const createPaymentCollectionsStep = createStep(
|
export const createPaymentCollectionsStep = createStep(
|
||||||
createPaymentCollectionsStepId,
|
createPaymentCollectionsStepId,
|
||||||
async (data: CreatePaymentCollectionCartStepInput[], { container }) => {
|
async (data: CreatePaymentCollectionCartStepInput, { container }) => {
|
||||||
const service = container.resolve<IPaymentModuleService>(Modules.PAYMENT)
|
const service = container.resolve<IPaymentModuleService>(Modules.PAYMENT)
|
||||||
|
|
||||||
const created = await service.createPaymentCollections(data)
|
const created = await service.createPaymentCollections(data)
|
||||||
|
|||||||
@@ -5,7 +5,13 @@ import {
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the shipping method adjustments to create.
|
||||||
|
*/
|
||||||
export interface CreateShippingMethodAdjustmentsStepInput {
|
export interface CreateShippingMethodAdjustmentsStepInput {
|
||||||
|
/**
|
||||||
|
* The shipping method adjustments to create.
|
||||||
|
*/
|
||||||
shippingMethodAdjustmentsToCreate: CreateShippingMethodAdjustmentDTO[]
|
shippingMethodAdjustmentsToCreate: CreateShippingMethodAdjustmentDTO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13,6 +19,15 @@ export const createShippingMethodAdjustmentsStepId =
|
|||||||
"create-shipping-method-adjustments"
|
"create-shipping-method-adjustments"
|
||||||
/**
|
/**
|
||||||
* This step creates shipping method adjustments for a cart.
|
* This step creates shipping method adjustments for a cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = createShippingMethodAdjustmentsStep({
|
||||||
|
* "shippingMethodAdjustmentsToCreate": [{
|
||||||
|
* "shipping_method_id": "sm_123",
|
||||||
|
* "code": "10OFF",
|
||||||
|
* "amount": 10
|
||||||
|
* }]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const createShippingMethodAdjustmentsStep = createStep(
|
export const createShippingMethodAdjustmentsStep = createStep(
|
||||||
createShippingMethodAdjustmentsStepId,
|
createShippingMethodAdjustmentsStepId,
|
||||||
|
|||||||
@@ -5,13 +5,23 @@ import {
|
|||||||
import { MedusaError, Modules } from "@medusajs/framework/utils"
|
import { MedusaError, Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the region to find.
|
||||||
|
*/
|
||||||
|
export type FindOneOrAnyRegionStepInput = {
|
||||||
|
/**
|
||||||
|
* The ID of the region to find.
|
||||||
|
*/
|
||||||
|
regionId?: string
|
||||||
|
}
|
||||||
|
|
||||||
export const findOneOrAnyRegionStepId = "find-one-or-any-region"
|
export const findOneOrAnyRegionStepId = "find-one-or-any-region"
|
||||||
/**
|
/**
|
||||||
* This step retrieves a region either by the provided ID or the first region in the first store.
|
* This step retrieves a region either by the provided ID or the first region in the first store.
|
||||||
*/
|
*/
|
||||||
export const findOneOrAnyRegionStep = createStep(
|
export const findOneOrAnyRegionStep = createStep(
|
||||||
findOneOrAnyRegionStepId,
|
findOneOrAnyRegionStepId,
|
||||||
async (data: { regionId?: string }, { container }) => {
|
async (data: FindOneOrAnyRegionStepInput, { container }) => {
|
||||||
const service = container.resolve<IRegionModuleService>(Modules.REGION)
|
const service = container.resolve<IRegionModuleService>(Modules.REGION)
|
||||||
|
|
||||||
const storeModule = container.resolve<IStoreModuleService>(Modules.STORE)
|
const storeModule = container.resolve<IStoreModuleService>(Modules.STORE)
|
||||||
|
|||||||
@@ -2,13 +2,32 @@ import { CustomerDTO, ICustomerModuleService } from "@medusajs/framework/types"
|
|||||||
import { isDefined, Modules, validateEmail } from "@medusajs/framework/utils"
|
import { isDefined, Modules, validateEmail } from "@medusajs/framework/utils"
|
||||||
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the customer to find or create.
|
||||||
|
*/
|
||||||
export interface FindOrCreateCustomerStepInput {
|
export interface FindOrCreateCustomerStepInput {
|
||||||
|
/**
|
||||||
|
* The ID of the customer to find.
|
||||||
|
*/
|
||||||
customerId?: string | null
|
customerId?: string | null
|
||||||
|
/**
|
||||||
|
* If the `customerId` isn't specified,
|
||||||
|
* find a customer with this email or create a new customer having this email.
|
||||||
|
*/
|
||||||
email?: string | null
|
email?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the customer found or created.
|
||||||
|
*/
|
||||||
export interface FindOrCreateCustomerOutputStepOutput {
|
export interface FindOrCreateCustomerOutputStepOutput {
|
||||||
|
/**
|
||||||
|
* The customer found or created, if any.
|
||||||
|
*/
|
||||||
customer?: CustomerDTO | null
|
customer?: CustomerDTO | null
|
||||||
|
/**
|
||||||
|
* The email of the customer found or created, if any.
|
||||||
|
*/
|
||||||
email?: string | null
|
email?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,13 @@ import {
|
|||||||
import { MedusaError, Modules, isDefined } from "@medusajs/framework/utils"
|
import { MedusaError, Modules, isDefined } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the sales channel to find.
|
||||||
|
*/
|
||||||
export interface FindSalesChannelStepInput {
|
export interface FindSalesChannelStepInput {
|
||||||
|
/**
|
||||||
|
* The ID of the sales channel to find.
|
||||||
|
*/
|
||||||
salesChannelId?: string | null
|
salesChannelId?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,17 @@ import { CartDTO, IPromotionModuleService } from "@medusajs/framework/types"
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart and its applied promotions.
|
||||||
|
*/
|
||||||
export interface GetActionsToComputeFromPromotionsStepInput {
|
export interface GetActionsToComputeFromPromotionsStepInput {
|
||||||
|
/**
|
||||||
|
* The cart to compute the actions for.
|
||||||
|
*/
|
||||||
cart: CartDTO
|
cart: CartDTO
|
||||||
|
/**
|
||||||
|
* The promotion codes applied on the cart.
|
||||||
|
*/
|
||||||
promotionCodesToApply: string[]
|
promotionCodesToApply: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12,6 +21,20 @@ export const getActionsToComputeFromPromotionsStepId =
|
|||||||
/**
|
/**
|
||||||
* This step retrieves the actions to compute based on the promotions
|
* This step retrieves the actions to compute based on the promotions
|
||||||
* applied on a cart.
|
* applied on a cart.
|
||||||
|
*
|
||||||
|
* :::tip
|
||||||
|
*
|
||||||
|
* You can use the {@link retrieveCartStep} to retrieve a cart's details.
|
||||||
|
*
|
||||||
|
* :::
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = getActionsToComputeFromPromotionsStep({
|
||||||
|
* // retrieve the details of the cart from another workflow
|
||||||
|
* // or in another step using the Cart Module's service
|
||||||
|
* cart,
|
||||||
|
* promotionCodesToApply: ["10OFF"]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const getActionsToComputeFromPromotionsStep = createStep(
|
export const getActionsToComputeFromPromotionsStep = createStep(
|
||||||
getActionsToComputeFromPromotionsStepId,
|
getActionsToComputeFromPromotionsStepId,
|
||||||
|
|||||||
@@ -12,15 +12,46 @@ import {
|
|||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the line items to create or update.
|
||||||
|
*/
|
||||||
export interface GetLineItemActionsStepInput {
|
export interface GetLineItemActionsStepInput {
|
||||||
|
/**
|
||||||
|
* The ID of the cart to create line items for.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* The line items to create or update.
|
||||||
|
*/
|
||||||
items: CreateLineItemForCartDTO[]
|
items: CreateLineItemForCartDTO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface GetLineItemActionsStepOutput {
|
||||||
|
/**
|
||||||
|
* The line items to create.
|
||||||
|
*/
|
||||||
|
itemsToCreate: CreateLineItemForCartDTO[]
|
||||||
|
/**
|
||||||
|
* The line items to update.
|
||||||
|
*/
|
||||||
|
itemsToUpdate: UpdateLineItemWithSelectorDTO[]
|
||||||
|
}
|
||||||
|
|
||||||
export const getLineItemActionsStepId = "get-line-item-actions-step"
|
export const getLineItemActionsStepId = "get-line-item-actions-step"
|
||||||
/**
|
/**
|
||||||
* This step returns lists of cart line items to create or update based on the
|
* This step returns lists of cart line items to create or update based on the
|
||||||
* provided input.
|
* provided input.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = getLineItemActionsStep({
|
||||||
|
* "id": "cart_123",
|
||||||
|
* "items": [{
|
||||||
|
* "title": "Shirt",
|
||||||
|
* "quantity": 1,
|
||||||
|
* "unit_price": 50,
|
||||||
|
* "cart_id": "cart_123",
|
||||||
|
* }]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const getLineItemActionsStep = createStep(
|
export const getLineItemActionsStep = createStep(
|
||||||
getLineItemActionsStepId,
|
getLineItemActionsStepId,
|
||||||
@@ -67,6 +98,8 @@ export const getLineItemActionsStep = createStep(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new StepResponse({ itemsToCreate, itemsToUpdate }, null)
|
return new StepResponse(
|
||||||
|
{ itemsToCreate, itemsToUpdate } as GetLineItemActionsStepOutput
|
||||||
|
, null)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -2,21 +2,66 @@ import { IPromotionModuleService } from "@medusajs/framework/types"
|
|||||||
import { Modules, PromotionActions } from "@medusajs/framework/utils"
|
import { Modules, PromotionActions } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the promotion codes to apply on a cart.
|
||||||
|
*/
|
||||||
export interface GetPromotionCodesToApplyStepInput {
|
export interface GetPromotionCodesToApplyStepInput {
|
||||||
|
/**
|
||||||
|
* The cart containing items and shipping methods.
|
||||||
|
*/
|
||||||
cart: {
|
cart: {
|
||||||
|
/**
|
||||||
|
* The cart's items and the promotion adjustments applied to them.
|
||||||
|
*/
|
||||||
items?: { adjustments?: { code?: string }[] }[]
|
items?: { adjustments?: { code?: string }[] }[]
|
||||||
|
/**
|
||||||
|
* The cart's shipping methods and the promotion adjustments applied to them.
|
||||||
|
*/
|
||||||
shipping_methods?: { adjustments?: { code?: string }[] }[]
|
shipping_methods?: { adjustments?: { code?: string }[] }[]
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* the promotion codes to be applied to the cart.
|
||||||
|
*/
|
||||||
promo_codes?: string[]
|
promo_codes?: string[]
|
||||||
|
/**
|
||||||
|
* Whether to add, remove, or replace promotion codes.
|
||||||
|
*/
|
||||||
action?:
|
action?:
|
||||||
| PromotionActions.ADD
|
| PromotionActions.ADD
|
||||||
| PromotionActions.REMOVE
|
| PromotionActions.REMOVE
|
||||||
| PromotionActions.REPLACE
|
| PromotionActions.REPLACE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The promotion codes to apply on the cart.
|
||||||
|
*
|
||||||
|
* @example ["PRO10", "SHIPFREE", "NEWYEAR20"]
|
||||||
|
*/
|
||||||
|
export type GetPromotionCodesToApplyStepOutput = string[]
|
||||||
|
|
||||||
export const getPromotionCodesToApplyId = "get-promotion-codes-to-apply"
|
export const getPromotionCodesToApplyId = "get-promotion-codes-to-apply"
|
||||||
/**
|
/**
|
||||||
* This step retrieves the promotion codes to apply on a cart.
|
* This step retrieves the promotion codes to apply on a cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = getPromotionCodesToApply(
|
||||||
|
* {
|
||||||
|
* cart: {
|
||||||
|
* items: [
|
||||||
|
* {
|
||||||
|
* adjustments: [{ code: "PROMO10" }]
|
||||||
|
* }
|
||||||
|
* ],
|
||||||
|
* shipping_methods: [
|
||||||
|
* {
|
||||||
|
* adjustments: [{ code: "SHIPFREE" }]
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* },
|
||||||
|
* promo_codes: ["NEWYEAR20"],
|
||||||
|
* action: PromotionActions.ADD
|
||||||
|
* },
|
||||||
|
* )
|
||||||
*/
|
*/
|
||||||
export const getPromotionCodesToApply = createStep(
|
export const getPromotionCodesToApply = createStep(
|
||||||
getPromotionCodesToApplyId,
|
getPromotionCodesToApplyId,
|
||||||
@@ -60,6 +105,8 @@ export const getPromotionCodesToApply = createStep(
|
|||||||
promo_codes.forEach((code) => promotionCodesToApply.add(code))
|
promo_codes.forEach((code) => promotionCodesToApply.add(code))
|
||||||
}
|
}
|
||||||
|
|
||||||
return new StepResponse(Array.from(promotionCodesToApply))
|
return new StepResponse(
|
||||||
|
Array.from(promotionCodesToApply) as GetPromotionCodesToApplyStepOutput
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -1,15 +1,53 @@
|
|||||||
import { IPricingModuleService } from "@medusajs/framework/types"
|
import { CalculatedPriceSet, IPricingModuleService } from "@medusajs/framework/types"
|
||||||
import { MedusaError, Modules } from "@medusajs/framework/utils"
|
import { MedusaError, Modules } from "@medusajs/framework/utils"
|
||||||
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the variants to get price sets for.
|
||||||
|
*/
|
||||||
export interface GetVariantPriceSetsStepInput {
|
export interface GetVariantPriceSetsStepInput {
|
||||||
|
/**
|
||||||
|
* The IDs of the variants to get price sets for.
|
||||||
|
*/
|
||||||
variantIds: string[]
|
variantIds: string[]
|
||||||
|
/**
|
||||||
|
* The context to use when calculating the price sets.
|
||||||
|
*
|
||||||
|
* Learn more in [this documentation](https://docs.medusajs.com/resources/commerce-modules/product/guides/price#retrieve-calculated-price-for-a-context).
|
||||||
|
*/
|
||||||
context?: Record<string, unknown>
|
context?: Record<string, unknown>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The calculated price sets of the variants. The object's keys are the variant IDs.
|
||||||
|
*/
|
||||||
|
export interface GetVariantPriceSetsStepOutput {
|
||||||
|
[k: string]: CalculatedPriceSet
|
||||||
|
}
|
||||||
|
|
||||||
export const getVariantPriceSetsStepId = "get-variant-price-sets"
|
export const getVariantPriceSetsStepId = "get-variant-price-sets"
|
||||||
/**
|
/**
|
||||||
* This step retrieves the calculated price sets of the specified variants.
|
* This step retrieves the calculated price sets of the specified variants.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* To retrieve a variant's price sets:
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* const data = getVariantPriceSetsStep({
|
||||||
|
* variantIds: ["variant_123"],
|
||||||
|
* })
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To retrieve the calculated price sets of a variant:
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* const data = getVariantPriceSetsStep({
|
||||||
|
* variantIds: ["variant_123"],
|
||||||
|
* context: {
|
||||||
|
* currency_code: "usd"
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
* ```
|
||||||
*/
|
*/
|
||||||
export const getVariantPriceSetsStep = createStep(
|
export const getVariantPriceSetsStep = createStep(
|
||||||
getVariantPriceSetsStepId,
|
getVariantPriceSetsStepId,
|
||||||
@@ -71,6 +109,8 @@ export const getVariantPriceSetsStep = createStep(
|
|||||||
{}
|
{}
|
||||||
)
|
)
|
||||||
|
|
||||||
return new StepResponse(variantToCalculatedPriceSets)
|
return new StepResponse(
|
||||||
|
variantToCalculatedPriceSets as GetVariantPriceSetsStepOutput
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -7,6 +7,9 @@ import {
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the variants to retrieve.
|
||||||
|
*/
|
||||||
export interface GetVariantsStepInput {
|
export interface GetVariantsStepInput {
|
||||||
filter?: FilterableProductVariantProps
|
filter?: FilterableProductVariantProps
|
||||||
config?: FindConfig<ProductVariantDTO>
|
config?: FindConfig<ProductVariantDTO>
|
||||||
@@ -15,6 +18,13 @@ export interface GetVariantsStepInput {
|
|||||||
export const getVariantsStepId = "get-variants"
|
export const getVariantsStepId = "get-variants"
|
||||||
/**
|
/**
|
||||||
* This step retrieves variants matching the specified filters.
|
* This step retrieves variants matching the specified filters.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = getVariantsStep({
|
||||||
|
* filter: {
|
||||||
|
* id: "variant_123"
|
||||||
|
* }
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const getVariantsStep = createStep(
|
export const getVariantsStep = createStep(
|
||||||
getVariantsStepId,
|
getVariantsStepId,
|
||||||
|
|||||||
@@ -23,6 +23,11 @@ export * from "./set-tax-lines-for-items"
|
|||||||
export * from "./update-cart-promotions"
|
export * from "./update-cart-promotions"
|
||||||
export * from "./update-carts"
|
export * from "./update-carts"
|
||||||
export * from "./update-line-items"
|
export * from "./update-line-items"
|
||||||
|
export * from "./update-shipping-methods"
|
||||||
export * from "./validate-cart-payments"
|
export * from "./validate-cart-payments"
|
||||||
export * from "./validate-cart-shipping-options"
|
export * from "./validate-cart-shipping-options"
|
||||||
export * from "./validate-variant-prices"
|
export * from "./validate-variant-prices"
|
||||||
|
export * from "./validate-cart"
|
||||||
|
export * from "./validate-line-item-prices"
|
||||||
|
export * from "./validate-shipping-methods-data"
|
||||||
|
export * from "./validate-shipping-options-price"
|
||||||
+77
-1
@@ -10,15 +10,91 @@ import {
|
|||||||
import { ComputedActions, Modules } from "@medusajs/framework/utils"
|
import { ComputedActions, Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the actions computed by the Promotion Module.
|
||||||
|
*/
|
||||||
export interface PrepareAdjustmentsFromPromotionActionsStepInput {
|
export interface PrepareAdjustmentsFromPromotionActionsStepInput {
|
||||||
|
/**
|
||||||
|
* The actions computed by the Promotion Module.
|
||||||
|
*/
|
||||||
actions: ComputeActions[]
|
actions: ComputeActions[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the adjustments to create and remove.
|
||||||
|
*/
|
||||||
|
export interface PrepareAdjustmentsFromPromotionActionsStepOutput {
|
||||||
|
/**
|
||||||
|
* The line item adjustments to create.
|
||||||
|
*/
|
||||||
|
lineItemAdjustmentsToCreate: {
|
||||||
|
/**
|
||||||
|
* The promotion code that computed the adjustment.
|
||||||
|
*/
|
||||||
|
code: string
|
||||||
|
/**
|
||||||
|
* The amount of the adjustment.
|
||||||
|
*/
|
||||||
|
amount: number
|
||||||
|
/**
|
||||||
|
* The ID of the line item to adjust.
|
||||||
|
*/
|
||||||
|
item_id: string
|
||||||
|
/**
|
||||||
|
* The ID of the applied promotion.
|
||||||
|
*/
|
||||||
|
promotion_id?: string
|
||||||
|
}[]
|
||||||
|
/**
|
||||||
|
* The line item adjustment IDs to remove.
|
||||||
|
*/
|
||||||
|
lineItemAdjustmentIdsToRemove: string[]
|
||||||
|
/**
|
||||||
|
* The shipping method adjustments to create.
|
||||||
|
*/
|
||||||
|
shippingMethodAdjustmentsToCreate: {
|
||||||
|
/**
|
||||||
|
* The promotion code that computed the adjustment.
|
||||||
|
*/
|
||||||
|
code: string
|
||||||
|
/**
|
||||||
|
* The amount of the adjustment.
|
||||||
|
*/
|
||||||
|
amount: number
|
||||||
|
/**
|
||||||
|
* The ID of the shipping method to adjust.
|
||||||
|
*/
|
||||||
|
shipping_method_id: string
|
||||||
|
/**
|
||||||
|
* The ID of the applied promotion.
|
||||||
|
*/
|
||||||
|
promotion_id?: string
|
||||||
|
}[]
|
||||||
|
/**
|
||||||
|
* The shipping method adjustment IDs to remove.
|
||||||
|
*/
|
||||||
|
shippingMethodAdjustmentIdsToRemove: string[]
|
||||||
|
/**
|
||||||
|
* The promotion codes that were computed.
|
||||||
|
*/
|
||||||
|
computedPromotionCodes: string[]
|
||||||
|
}
|
||||||
|
|
||||||
export const prepareAdjustmentsFromPromotionActionsStepId =
|
export const prepareAdjustmentsFromPromotionActionsStepId =
|
||||||
"prepare-adjustments-from-promotion-actions"
|
"prepare-adjustments-from-promotion-actions"
|
||||||
/**
|
/**
|
||||||
* This step prepares the line item or shipping method adjustments using
|
* This step prepares the line item or shipping method adjustments using
|
||||||
* actions computed by the Promotion Module.
|
* actions computed by the Promotion Module.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = prepareAdjustmentsFromPromotionActionsStep({
|
||||||
|
* "actions": [{
|
||||||
|
* "action": "addItemAdjustment",
|
||||||
|
* "item_id": "litem_123",
|
||||||
|
* "amount": 10,
|
||||||
|
* "code": "10OFF",
|
||||||
|
* }]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const prepareAdjustmentsFromPromotionActionsStep = createStep(
|
export const prepareAdjustmentsFromPromotionActionsStep = createStep(
|
||||||
prepareAdjustmentsFromPromotionActionsStepId,
|
prepareAdjustmentsFromPromotionActionsStepId,
|
||||||
@@ -82,6 +158,6 @@ export const prepareAdjustmentsFromPromotionActionsStep = createStep(
|
|||||||
shippingMethodAdjustmentsToCreate,
|
shippingMethodAdjustmentsToCreate,
|
||||||
shippingMethodAdjustmentIdsToRemove,
|
shippingMethodAdjustmentIdsToRemove,
|
||||||
computedPromotionCodes,
|
computedPromotionCodes,
|
||||||
})
|
} as PrepareAdjustmentsFromPromotionActionsStepOutput)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -2,7 +2,13 @@ import { ICartModuleService } from "@medusajs/framework/types"
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the line item adjustments to remove.
|
||||||
|
*/
|
||||||
export interface RemoveLineItemAdjustmentsStepInput {
|
export interface RemoveLineItemAdjustmentsStepInput {
|
||||||
|
/**
|
||||||
|
* The IDs of the line item adjustments to remove.
|
||||||
|
*/
|
||||||
lineItemAdjustmentIdsToRemove: string[]
|
lineItemAdjustmentIdsToRemove: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,13 @@ import { ICartModuleService } from "@medusajs/framework/types"
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the shipping method adjustments to remove.
|
||||||
|
*/
|
||||||
export interface RemoveShippingMethodAdjustmentsStepInput {
|
export interface RemoveShippingMethodAdjustmentsStepInput {
|
||||||
|
/**
|
||||||
|
* The IDs of the shipping method adjustments to remove.
|
||||||
|
*/
|
||||||
shippingMethodAdjustmentIdsToRemove: string[]
|
shippingMethodAdjustmentIdsToRemove: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,22 @@ import { ICartModuleService } from "@medusajs/framework/types"
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the shipping methods to remove.
|
||||||
|
*/
|
||||||
export interface RemoveShippingMethodFromCartStepInput {
|
export interface RemoveShippingMethodFromCartStepInput {
|
||||||
|
/**
|
||||||
|
* The IDs of the shipping methods to remove.
|
||||||
|
*/
|
||||||
shipping_method_ids: string[]
|
shipping_method_ids: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The shipping methods removed from the cart, along with IDs of related records
|
||||||
|
* that were removed.
|
||||||
|
*/
|
||||||
|
export type RemoveShippingMethodFromCartStepOutput = Record<string, string[]> | void
|
||||||
|
|
||||||
export const removeShippingMethodFromCartStepId =
|
export const removeShippingMethodFromCartStepId =
|
||||||
"remove-shipping-method-to-cart-step"
|
"remove-shipping-method-to-cart-step"
|
||||||
/**
|
/**
|
||||||
@@ -24,7 +36,10 @@ export const removeShippingMethodFromCartStep = createStep(
|
|||||||
data.shipping_method_ids
|
data.shipping_method_ids
|
||||||
)
|
)
|
||||||
|
|
||||||
return new StepResponse(methods, data.shipping_method_ids)
|
return new StepResponse(
|
||||||
|
methods as RemoveShippingMethodFromCartStepOutput,
|
||||||
|
data.shipping_method_ids
|
||||||
|
)
|
||||||
},
|
},
|
||||||
async (ids, { container }) => {
|
async (ids, { container }) => {
|
||||||
if (!ids?.length) {
|
if (!ids?.length) {
|
||||||
|
|||||||
@@ -2,13 +2,41 @@ import { MathBN, Modules } from "@medusajs/framework/utils"
|
|||||||
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
||||||
import { BigNumberInput } from "@medusajs/types"
|
import { BigNumberInput } from "@medusajs/types"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the items and their quantity to reserve.
|
||||||
|
*/
|
||||||
export interface ReserveVariantInventoryStepInput {
|
export interface ReserveVariantInventoryStepInput {
|
||||||
items: {
|
items: {
|
||||||
|
/**
|
||||||
|
* The ID for the line item.
|
||||||
|
*/
|
||||||
id?: string
|
id?: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ID of the inventory item to reserve quantities from.
|
||||||
|
*/
|
||||||
inventory_item_id: string
|
inventory_item_id: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of units a single quantity is equivalent to. For example, if a customer orders one quantity of the variant, Medusa checks the availability of the quantity multiplied by the
|
||||||
|
* value set for `required_quantity`. When the customer orders the quantity, Medusa reserves the ordered quantity multiplied by the value set for `required_quantity`.
|
||||||
|
*/
|
||||||
required_quantity: number
|
required_quantity: number
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the variant can be ordered even if it's out of stock.
|
||||||
|
*/
|
||||||
allow_backorder: boolean
|
allow_backorder: boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The quantity to reserve.
|
||||||
|
*/
|
||||||
quantity: BigNumberInput
|
quantity: BigNumberInput
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The IDs of stock locations to reserve the item's quantity in.
|
||||||
|
*/
|
||||||
location_ids: string[]
|
location_ids: string[]
|
||||||
}[]
|
}[]
|
||||||
}
|
}
|
||||||
@@ -17,6 +45,19 @@ export const reserveInventoryStepId = "reserve-inventory-step"
|
|||||||
/**
|
/**
|
||||||
* This step reserves the quantity of line items from the associated
|
* This step reserves the quantity of line items from the associated
|
||||||
* variant's inventory.
|
* variant's inventory.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = reserveInventoryStep({
|
||||||
|
* "items": [{
|
||||||
|
* "inventory_item_id": "iitem_123",
|
||||||
|
* "required_quantity": 1,
|
||||||
|
* "allow_backorder": false,
|
||||||
|
* "quantity": 1,
|
||||||
|
* "location_ids": [
|
||||||
|
* "sloc_123"
|
||||||
|
* ]
|
||||||
|
* }]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const reserveInventoryStep = createStep(
|
export const reserveInventoryStep = createStep(
|
||||||
reserveInventoryStepId,
|
reserveInventoryStepId,
|
||||||
|
|||||||
@@ -6,7 +6,13 @@ import {
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart to retrieve.
|
||||||
|
*/
|
||||||
export interface RetrieveCartStepInput {
|
export interface RetrieveCartStepInput {
|
||||||
|
/**
|
||||||
|
* The ID of the cart to retrieve.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
config?: FindConfig<CartDTO>
|
config?: FindConfig<CartDTO>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,15 +9,54 @@ import {
|
|||||||
import { Modules } from "@medusajs/framework/utils"
|
import { Modules } from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the tax lines to set in a cart.
|
||||||
|
*/
|
||||||
export interface SetTaxLinesForItemsStepInput {
|
export interface SetTaxLinesForItemsStepInput {
|
||||||
|
/**
|
||||||
|
* The cart's details.
|
||||||
|
*/
|
||||||
cart: CartWorkflowDTO
|
cart: CartWorkflowDTO
|
||||||
|
/**
|
||||||
|
* The tax lines to set for line items.
|
||||||
|
*/
|
||||||
item_tax_lines: ItemTaxLineDTO[]
|
item_tax_lines: ItemTaxLineDTO[]
|
||||||
|
/**
|
||||||
|
* The tax lines to set for shipping methods.
|
||||||
|
*/
|
||||||
shipping_tax_lines: ShippingTaxLineDTO[]
|
shipping_tax_lines: ShippingTaxLineDTO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const setTaxLinesForItemsStepId = "set-tax-lines-for-items"
|
export const setTaxLinesForItemsStepId = "set-tax-lines-for-items"
|
||||||
/**
|
/**
|
||||||
* This step sets the tax lines of shipping methods and line items in a cart.
|
* This step sets the tax lines of shipping methods and line items in a cart.
|
||||||
|
*
|
||||||
|
* :::tip
|
||||||
|
*
|
||||||
|
* You can use the {@link retrieveCartStep} to retrieve a cart's details.
|
||||||
|
*
|
||||||
|
* :::
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = setTaxLinesForItemsStep({
|
||||||
|
* // retrieve the details of the cart from another workflow
|
||||||
|
* // or in another step using the Cart Module's service
|
||||||
|
* cart,
|
||||||
|
* "item_tax_lines": [{
|
||||||
|
* "rate": 48,
|
||||||
|
* "code": "CODE123",
|
||||||
|
* "name": "Tax rate 2",
|
||||||
|
* "provider_id": "provider_1",
|
||||||
|
* "line_item_id": "litem_123"
|
||||||
|
* }],
|
||||||
|
* "shipping_tax_lines": [{
|
||||||
|
* "rate": 49,
|
||||||
|
* "code": "CODE456",
|
||||||
|
* "name": "Tax rate 1",
|
||||||
|
* "provider_id": "provider_1",
|
||||||
|
* "shipping_line_id": "sm_123"
|
||||||
|
* }]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const setTaxLinesForItemsStep = createStep(
|
export const setTaxLinesForItemsStep = createStep(
|
||||||
setTaxLinesForItemsStepId,
|
setTaxLinesForItemsStepId,
|
||||||
|
|||||||
@@ -6,9 +6,21 @@ import {
|
|||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the promotion codes to apply on a cart.
|
||||||
|
*/
|
||||||
export interface UpdateCartPromotionStepInput {
|
export interface UpdateCartPromotionStepInput {
|
||||||
|
/**
|
||||||
|
* The ID of the cart to update promotions for.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* The promotion codes to apply on the cart.
|
||||||
|
*/
|
||||||
promo_codes?: string[]
|
promo_codes?: string[]
|
||||||
|
/**
|
||||||
|
* Whether to add, remove, or replace promotion codes.
|
||||||
|
*/
|
||||||
action?:
|
action?:
|
||||||
| PromotionActions.ADD
|
| PromotionActions.ADD
|
||||||
| PromotionActions.REMOVE
|
| PromotionActions.REMOVE
|
||||||
|
|||||||
@@ -9,13 +9,24 @@ import {
|
|||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the carts to update.
|
||||||
|
*/
|
||||||
|
export type UpdateCartsStepInput = UpdateCartWorkflowInputDTO[]
|
||||||
|
|
||||||
export const updateCartsStepId = "update-carts"
|
export const updateCartsStepId = "update-carts"
|
||||||
/**
|
/**
|
||||||
* This step updates a cart.
|
* This step updates a cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = updateCartsStep([{
|
||||||
|
* id: "cart_123",
|
||||||
|
* email: "customer@gmail.com",
|
||||||
|
* }])
|
||||||
*/
|
*/
|
||||||
export const updateCartsStep = createStep(
|
export const updateCartsStep = createStep(
|
||||||
updateCartsStepId,
|
updateCartsStepId,
|
||||||
async (data: UpdateCartWorkflowInputDTO[], { container }) => {
|
async (data: UpdateCartsStepInput, { container }) => {
|
||||||
const cartModule = container.resolve<ICartModuleService>(Modules.CART)
|
const cartModule = container.resolve<ICartModuleService>(Modules.CART)
|
||||||
|
|
||||||
const { selects, relations } = getSelectsAndRelationsFromObjectArray(data)
|
const { selects, relations } = getSelectsAndRelationsFromObjectArray(data)
|
||||||
|
|||||||
@@ -8,14 +8,38 @@ import {
|
|||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the line items to update.
|
||||||
|
*/
|
||||||
export interface UpdateLineItemsStepInput {
|
export interface UpdateLineItemsStepInput {
|
||||||
|
/**
|
||||||
|
* The ID of the cart that the line items belong to.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* The line items to update.
|
||||||
|
*/
|
||||||
items: UpdateLineItemWithSelectorDTO[]
|
items: UpdateLineItemWithSelectorDTO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const updateLineItemsStepId = "update-line-items-step"
|
export const updateLineItemsStepId = "update-line-items-step"
|
||||||
/**
|
/**
|
||||||
* This step updates a cart's line items.
|
* This step updates a cart's line items.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = updateLineItemsStep({
|
||||||
|
* id: "cart_123",
|
||||||
|
* items: [
|
||||||
|
* {
|
||||||
|
* selector: {
|
||||||
|
* id: "line_item_123"
|
||||||
|
* },
|
||||||
|
* data: {
|
||||||
|
* quantity: 2
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const updateLineItemsStep = createStep(
|
export const updateLineItemsStep = createStep(
|
||||||
updateLineItemsStepId,
|
updateLineItemsStepId,
|
||||||
|
|||||||
@@ -8,13 +8,26 @@ import {
|
|||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the shipping methods to update.
|
||||||
|
*/
|
||||||
|
export type UpdateShippingMethodsStepInput = UpdateShippingMethodDTO[]
|
||||||
|
|
||||||
export const updateShippingMethodsStepId = "update-shipping-methods-step"
|
export const updateShippingMethodsStepId = "update-shipping-methods-step"
|
||||||
/**
|
/**
|
||||||
* This step updates a cart's shipping methods.
|
* This step updates a cart's shipping methods.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = updateOrderShippingMethodsStep([
|
||||||
|
* {
|
||||||
|
* id: "sm_123",
|
||||||
|
* amount: 10
|
||||||
|
* }
|
||||||
|
* ])
|
||||||
*/
|
*/
|
||||||
export const updateShippingMethodsStep = createStep(
|
export const updateShippingMethodsStep = createStep(
|
||||||
updateShippingMethodsStepId,
|
updateShippingMethodsStepId,
|
||||||
async (data: UpdateShippingMethodDTO[], { container }) => {
|
async (data: UpdateShippingMethodsStepInput, { container }) => {
|
||||||
if (!data?.length) {
|
if (!data?.length) {
|
||||||
return new StepResponse([], [])
|
return new StepResponse([], [])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,14 +6,33 @@ import {
|
|||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The cart's details.
|
||||||
|
*/
|
||||||
export interface ValidateCartPaymentsStepInput {
|
export interface ValidateCartPaymentsStepInput {
|
||||||
|
/**
|
||||||
|
* The cart to validate payment sessions for.
|
||||||
|
*/
|
||||||
cart: CartWorkflowDTO
|
cart: CartWorkflowDTO
|
||||||
}
|
}
|
||||||
|
|
||||||
export const validateCartPaymentsStepId = "validate-cart-payments"
|
export const validateCartPaymentsStepId = "validate-cart-payments"
|
||||||
/**
|
/**
|
||||||
* This step validates a cart's payment sessions. Their status must
|
* This step validates a cart's payment sessions. Their status must
|
||||||
* be `pending` or `requires_more`.
|
* be `pending` or `requires_more`. If not valid, the step throws an error.
|
||||||
|
*
|
||||||
|
* :::tip
|
||||||
|
*
|
||||||
|
* You can use the {@link retrieveCartStep} to retrieve a cart's details.
|
||||||
|
*
|
||||||
|
* :::
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = validateCartPaymentsStep({
|
||||||
|
* // retrieve the details of the cart from another workflow
|
||||||
|
* // or in another step using the Cart Module's service
|
||||||
|
* cart
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const validateCartPaymentsStep = createStep(
|
export const validateCartPaymentsStep = createStep(
|
||||||
validateCartPaymentsStepId,
|
validateCartPaymentsStepId,
|
||||||
|
|||||||
@@ -6,12 +6,30 @@ import {
|
|||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart and its shipping options context.
|
||||||
|
*/
|
||||||
export interface ValidateCartShippingOptionsStepInput {
|
export interface ValidateCartShippingOptionsStepInput {
|
||||||
|
/**
|
||||||
|
* The cart to validate shipping options for.
|
||||||
|
*/
|
||||||
cart: CartDTO
|
cart: CartDTO
|
||||||
|
/**
|
||||||
|
* The context to validate the shipping options.
|
||||||
|
*/
|
||||||
shippingOptionsContext: {
|
shippingOptionsContext: {
|
||||||
|
/**
|
||||||
|
* Validate whether the shipping options are enabled in the store.
|
||||||
|
*/
|
||||||
enabled_in_store?: "true" | "false"
|
enabled_in_store?: "true" | "false"
|
||||||
|
/**
|
||||||
|
* Validate whether the shipping options are used for returns.
|
||||||
|
*/
|
||||||
is_return?: "true" | "false"
|
is_return?: "true" | "false"
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* The IDs of the shipping options to validate.
|
||||||
|
*/
|
||||||
option_ids: string[]
|
option_ids: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,6 +37,16 @@ export const validateCartShippingOptionsStepId =
|
|||||||
"validate-cart-shipping-options"
|
"validate-cart-shipping-options"
|
||||||
/**
|
/**
|
||||||
* This step validates shipping options to ensure they can be applied on a cart.
|
* This step validates shipping options to ensure they can be applied on a cart.
|
||||||
|
* If not valid, the step throws an error.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = validateCartShippingOptionsStep({
|
||||||
|
* // retrieve the details of the cart from another workflow
|
||||||
|
* // or in another step using the Cart Module's service
|
||||||
|
* cart,
|
||||||
|
* option_ids: ["so_123"],
|
||||||
|
* shippingOptionsContext: {}
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const validateCartShippingOptionsStep = createStep(
|
export const validateCartShippingOptionsStep = createStep(
|
||||||
validateCartShippingOptionsStepId,
|
validateCartShippingOptionsStepId,
|
||||||
|
|||||||
@@ -2,13 +2,33 @@ import { CartDTO, CartWorkflowDTO } from "@medusajs/framework/types"
|
|||||||
import { MedusaError } from "@medusajs/framework/utils"
|
import { MedusaError } from "@medusajs/framework/utils"
|
||||||
import { createStep } from "@medusajs/framework/workflows-sdk"
|
import { createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart to validate.
|
||||||
|
*/
|
||||||
export interface ValidateCartStepInput {
|
export interface ValidateCartStepInput {
|
||||||
|
/**
|
||||||
|
* The cart to validate.
|
||||||
|
*/
|
||||||
cart: CartWorkflowDTO | CartDTO
|
cart: CartWorkflowDTO | CartDTO
|
||||||
}
|
}
|
||||||
|
|
||||||
export const validateCartStepId = "validate-cart"
|
export const validateCartStepId = "validate-cart"
|
||||||
/**
|
/**
|
||||||
* This step validates a cart's before editing it.
|
* This step validates a cart to ensure it exists and is not completed.
|
||||||
|
* If not valid, the step throws an error.
|
||||||
|
*
|
||||||
|
* :::tip
|
||||||
|
*
|
||||||
|
* You can use the {@link retrieveCartStep} to retrieve a cart's details.
|
||||||
|
*
|
||||||
|
* :::
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = validateCartStep({
|
||||||
|
* // retrieve the details of the cart from another workflow
|
||||||
|
* // or in another step using the Cart Module's service
|
||||||
|
* cart,
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const validateCartStep = createStep(
|
export const validateCartStep = createStep(
|
||||||
validateCartStepId,
|
validateCartStepId,
|
||||||
|
|||||||
@@ -1,9 +1,21 @@
|
|||||||
import { MedusaError, isPresent } from "@medusajs/framework/utils"
|
import { MedusaError, isPresent } from "@medusajs/framework/utils"
|
||||||
import { createStep } from "@medusajs/framework/workflows-sdk"
|
import { createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the line items to validate.
|
||||||
|
*/
|
||||||
export interface ValidateLineItemPricesStepInput {
|
export interface ValidateLineItemPricesStepInput {
|
||||||
|
/**
|
||||||
|
* The line items to validate.
|
||||||
|
*/
|
||||||
items: {
|
items: {
|
||||||
|
/**
|
||||||
|
* The price of the line item.
|
||||||
|
*/
|
||||||
unit_price?: number | null
|
unit_price?: number | null
|
||||||
|
/**
|
||||||
|
* The title of the line item.
|
||||||
|
*/
|
||||||
title: string
|
title: string
|
||||||
}[]
|
}[]
|
||||||
}
|
}
|
||||||
@@ -11,6 +23,20 @@ export interface ValidateLineItemPricesStepInput {
|
|||||||
export const validateLineItemPricesStepId = "validate-line-item-prices"
|
export const validateLineItemPricesStepId = "validate-line-item-prices"
|
||||||
/**
|
/**
|
||||||
* This step validates the specified line item objects to ensure they have prices.
|
* This step validates the specified line item objects to ensure they have prices.
|
||||||
|
* If an item doesn't have a price, the step throws an error.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = validateLineItemPricesStep({
|
||||||
|
* items: [
|
||||||
|
* {
|
||||||
|
* unit_price: 10,
|
||||||
|
* title: "Shirt"
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* title: "Pants"
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const validateLineItemPricesStep = createStep(
|
export const validateLineItemPricesStep = createStep(
|
||||||
validateLineItemPricesStepId,
|
validateLineItemPricesStepId,
|
||||||
|
|||||||
@@ -5,18 +5,96 @@ import {
|
|||||||
} from "@medusajs/types"
|
} from "@medusajs/types"
|
||||||
import { createStep, StepResponse } from "@medusajs/workflows-sdk"
|
import { createStep, StepResponse } from "@medusajs/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the shipping methods to validate.
|
||||||
|
*/
|
||||||
export type ValidateShippingMethodsDataInput = {
|
export type ValidateShippingMethodsDataInput = {
|
||||||
|
/**
|
||||||
|
* The shipping method's ID.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* The fulfillment provider ID that associated with the shipping option
|
||||||
|
* that the method was created from.
|
||||||
|
*/
|
||||||
provider_id: string
|
provider_id: string
|
||||||
|
/**
|
||||||
|
* The `data` property of the shipping option that the shipping method was
|
||||||
|
* created from.
|
||||||
|
*/
|
||||||
option_data: Record<string, unknown>
|
option_data: Record<string, unknown>
|
||||||
|
/**
|
||||||
|
* The `data` property of the shipping method.
|
||||||
|
*/
|
||||||
method_data: Record<string, unknown>
|
method_data: Record<string, unknown>
|
||||||
|
/**
|
||||||
|
* The context to validate the shipping method.
|
||||||
|
*/
|
||||||
context: ValidateFulfillmentDataContext
|
context: ValidateFulfillmentDataContext
|
||||||
}[]
|
}[]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The validated data of the shipping methods.
|
||||||
|
*/
|
||||||
|
export type ValidateShippingMethodsDataOutput = void | {
|
||||||
|
[x: string]: Record<string, unknown>;
|
||||||
|
}[]
|
||||||
|
|
||||||
export const validateAndReturnShippingMethodsDataStepId =
|
export const validateAndReturnShippingMethodsDataStepId =
|
||||||
"validate-and-return-shipping-methods-data"
|
"validate-and-return-shipping-methods-data"
|
||||||
/**
|
/**
|
||||||
* This step validates shipping options to ensure they can be applied on a cart.
|
* This step validates shipping options to ensure they can be applied on a cart.
|
||||||
|
* The step either returns the validated data or void.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = validateAndReturnShippingMethodsDataStep({
|
||||||
|
* id: "sm_123",
|
||||||
|
* provider_id: "my_provider",
|
||||||
|
* option_data: {},
|
||||||
|
* method_data: {},
|
||||||
|
* context: {
|
||||||
|
* id: "cart_123",
|
||||||
|
* shipping_address: {
|
||||||
|
* id: "saddr_123",
|
||||||
|
* first_name: "Jane",
|
||||||
|
* last_name: "Smith",
|
||||||
|
* address_1: "456 Elm St",
|
||||||
|
* city: "Shelbyville",
|
||||||
|
* country_code: "us",
|
||||||
|
* postal_code: "67890",
|
||||||
|
* },
|
||||||
|
* items: [
|
||||||
|
* {
|
||||||
|
* variant: {
|
||||||
|
* id: "variant_123",
|
||||||
|
* weight: 1,
|
||||||
|
* length: 1,
|
||||||
|
* height: 1,
|
||||||
|
* width: 1,
|
||||||
|
* material: "wood",
|
||||||
|
* product: {
|
||||||
|
* id: "prod_123"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ],
|
||||||
|
* product: {
|
||||||
|
* id: "prod_123",
|
||||||
|
* collection_id: "pcol_123",
|
||||||
|
* categories: [],
|
||||||
|
* tags: []
|
||||||
|
* },
|
||||||
|
* from_location: {
|
||||||
|
* id: "sloc_123",
|
||||||
|
* first_name: "John",
|
||||||
|
* last_name: "Doe",
|
||||||
|
* address_1: "123 Main St",
|
||||||
|
* city: "Springfield",
|
||||||
|
* country_code: "us",
|
||||||
|
* postal_code: "12345",
|
||||||
|
* },
|
||||||
|
* }
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const validateAndReturnShippingMethodsDataStep = createStep(
|
export const validateAndReturnShippingMethodsDataStep = createStep(
|
||||||
validateAndReturnShippingMethodsDataStepId,
|
validateAndReturnShippingMethodsDataStepId,
|
||||||
|
|||||||
@@ -1,14 +1,41 @@
|
|||||||
import { isDefined, MedusaError } from "@medusajs/framework/utils"
|
import { isDefined, MedusaError } from "@medusajs/framework/utils"
|
||||||
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
export const validateCartShippingOptionsStepId =
|
/**
|
||||||
|
* The details of the shipping options to validate.
|
||||||
|
*/
|
||||||
|
export type ValidateCartShippingOptionsPriceInput = {
|
||||||
|
/**
|
||||||
|
* The shipping option's details. Should have a `calculated_price.calculated_amount`
|
||||||
|
* to be considered valid.
|
||||||
|
*/
|
||||||
|
shippingOptions: any[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export const validateCartShippingOptionsPriceStepId =
|
||||||
"validate-cart-shipping-options"
|
"validate-cart-shipping-options"
|
||||||
/**
|
/**
|
||||||
* This step validates shipping options to ensure they have a price.
|
* This step validates shipping options to ensure they have a price.
|
||||||
|
* If not valid, the step throws an error.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = validateCartShippingOptionsPriceStep({
|
||||||
|
* shippingOptions: [
|
||||||
|
* {
|
||||||
|
* id: "so_123",
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* id: "so_321",
|
||||||
|
* calculated_price: {
|
||||||
|
* calculated_amount: 10,
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const validateCartShippingOptionsPriceStep = createStep(
|
export const validateCartShippingOptionsPriceStep = createStep(
|
||||||
"validate-cart-shipping-options-price",
|
"validate-cart-shipping-options-price",
|
||||||
async (data: { shippingOptions: any[] }, { container }) => {
|
async (data: ValidateCartShippingOptionsPriceInput, { container }) => {
|
||||||
const { shippingOptions = [] } = data
|
const { shippingOptions = [] } = data
|
||||||
const optionsMissingPrices: string[] = []
|
const optionsMissingPrices: string[] = []
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,25 @@ import { BigNumberInput } from "@medusajs/framework/types"
|
|||||||
import { MedusaError, isPresent } from "@medusajs/framework/utils"
|
import { MedusaError, isPresent } from "@medusajs/framework/utils"
|
||||||
import { createStep } from "@medusajs/framework/workflows-sdk"
|
import { createStep } from "@medusajs/framework/workflows-sdk"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the variants to validate.
|
||||||
|
*/
|
||||||
export interface ValidateVariantPricesStepInput {
|
export interface ValidateVariantPricesStepInput {
|
||||||
|
/**
|
||||||
|
* The variants to validate.
|
||||||
|
*/
|
||||||
variants: {
|
variants: {
|
||||||
|
/**
|
||||||
|
* The ID of the variant.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* The calculated price of the variant.
|
||||||
|
*/
|
||||||
calculated_price?: {
|
calculated_price?: {
|
||||||
|
/**
|
||||||
|
* The calculated amount of the price.
|
||||||
|
*/
|
||||||
calculated_amount?: BigNumberInput | null
|
calculated_amount?: BigNumberInput | null
|
||||||
}
|
}
|
||||||
}[]
|
}[]
|
||||||
@@ -14,6 +29,22 @@ export interface ValidateVariantPricesStepInput {
|
|||||||
export const validateVariantPricesStepId = "validate-variant-prices"
|
export const validateVariantPricesStepId = "validate-variant-prices"
|
||||||
/**
|
/**
|
||||||
* This step validates the specified variant objects to ensure they have prices.
|
* This step validates the specified variant objects to ensure they have prices.
|
||||||
|
* If not valid, the step throws an error.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = validateVariantPricesStep({
|
||||||
|
* variants: [
|
||||||
|
* {
|
||||||
|
* id: "variant_123",
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* id: "variant_321",
|
||||||
|
* calculated_price: {
|
||||||
|
* calculated_amount: 10,
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const validateVariantPricesStep = createStep(
|
export const validateVariantPricesStep = createStep(
|
||||||
validateVariantPricesStepId,
|
validateVariantPricesStepId,
|
||||||
|
|||||||
@@ -21,17 +21,60 @@ import { cartFieldsForRefreshSteps } from "../utils/fields"
|
|||||||
import { listShippingOptionsForCartWithPricingWorkflow } from "./list-shipping-options-for-cart-with-pricing"
|
import { listShippingOptionsForCartWithPricingWorkflow } from "./list-shipping-options-for-cart-with-pricing"
|
||||||
import { refreshCartItemsWorkflow } from "./refresh-cart-items"
|
import { refreshCartItemsWorkflow } from "./refresh-cart-items"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data to add a shipping method to a cart.
|
||||||
|
*/
|
||||||
export interface AddShippingMethodToCartWorkflowInput {
|
export interface AddShippingMethodToCartWorkflowInput {
|
||||||
|
/**
|
||||||
|
* The ID of the cart to add the shipping method to.
|
||||||
|
*/
|
||||||
cart_id: string
|
cart_id: string
|
||||||
|
/**
|
||||||
|
* The shipping options to create the shipping methods from and add to the cart.
|
||||||
|
*/
|
||||||
options: {
|
options: {
|
||||||
|
/**
|
||||||
|
* The ID of the shipping option.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* Custom data useful for the fulfillment provider processing the shipping option or method.
|
||||||
|
*
|
||||||
|
* Learn more in [this documentation](https://docs.medusajs.com/resources/commerce-modules/fulfillment/shipping-option#data-property).
|
||||||
|
*/
|
||||||
data?: Record<string, unknown>
|
data?: Record<string, unknown>
|
||||||
}[]
|
}[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const addShippingMethodToCartWorkflowId = "add-shipping-method-to-cart"
|
export const addShippingMethodToCartWorkflowId = "add-shipping-method-to-cart"
|
||||||
/**
|
/**
|
||||||
* This workflow adds shipping methods to a cart.
|
* This workflow adds a shipping method to a cart. It's executed by the
|
||||||
|
* [Add Shipping Method Store API Route](https://docs.medusajs.com/api/store#carts_postcartsidshippingmethods).
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to wrap custom logic around adding a shipping method to the cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await addShippingMethodToCartWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* options: [
|
||||||
|
* {
|
||||||
|
* id: "so_123",
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* id: "so_124",
|
||||||
|
* data: {
|
||||||
|
* carrier_code: "fedex",
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Add a shipping method to a cart.
|
||||||
*/
|
*/
|
||||||
export const addShippingMethodToCartWorkflow = createWorkflow(
|
export const addShippingMethodToCartWorkflow = createWorkflow(
|
||||||
addShippingMethodToCartWorkflowId,
|
addShippingMethodToCartWorkflowId,
|
||||||
|
|||||||
@@ -35,7 +35,34 @@ const cartFields = ["completed_at"].concat(cartFieldsForPricingContext)
|
|||||||
|
|
||||||
export const addToCartWorkflowId = "add-to-cart"
|
export const addToCartWorkflowId = "add-to-cart"
|
||||||
/**
|
/**
|
||||||
* This workflow adds items to a cart.
|
* This workflow adds a product variant to a cart as a line item. It's executed by the
|
||||||
|
* [Add Line Item Store API Route](https://docs.medusajs.com/api/store#carts_postcartsidlineitems).
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to wrap custom logic around adding an item to the cart.
|
||||||
|
* For example, you can use this workflow to add a line item to the cart with a custom price.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await addToCartWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* items: [
|
||||||
|
* {
|
||||||
|
* variant_id: "variant_123",
|
||||||
|
* quantity: 1,
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* variant_id: "variant_456",
|
||||||
|
* quantity: 1,
|
||||||
|
* unit_price: 20
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Add a line item to a cart.
|
||||||
*/
|
*/
|
||||||
export const addToCartWorkflow = createWorkflow(
|
export const addToCartWorkflow = createWorkflow(
|
||||||
addToCartWorkflowId,
|
addToCartWorkflowId,
|
||||||
|
|||||||
@@ -36,7 +36,20 @@ import {
|
|||||||
prepareTaxLinesData,
|
prepareTaxLinesData,
|
||||||
} from "../utils/prepare-line-item-data"
|
} from "../utils/prepare-line-item-data"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data to complete a cart and place an order.
|
||||||
|
*/
|
||||||
export type CompleteCartWorkflowInput = {
|
export type CompleteCartWorkflowInput = {
|
||||||
|
/**
|
||||||
|
* The ID of the cart to complete.
|
||||||
|
*/
|
||||||
|
id: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export type CompleteCartWorkflowOutput = {
|
||||||
|
/**
|
||||||
|
* The ID of the order that was created.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +57,24 @@ export const THREE_DAYS = 60 * 60 * 24 * 3
|
|||||||
|
|
||||||
export const completeCartWorkflowId = "complete-cart"
|
export const completeCartWorkflowId = "complete-cart"
|
||||||
/**
|
/**
|
||||||
* This workflow completes a cart.
|
* This workflow completes a cart and places an order for the customer. It's executed by the
|
||||||
|
* [Complete Cart Store API Route](https://docs.medusajs.com/api/store#carts_postcartsidcomplete).
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to wrap custom logic around completing a cart.
|
||||||
|
* For example, in the [Subscriptions recipe](https://docs.medusajs.com/resources/recipes/subscriptions/examples/standard#create-workflow),
|
||||||
|
* this workflow is used within another workflow that creates a subscription order.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await completeCartWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* id: "cart_123"
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Complete a cart and place an order.
|
||||||
*/
|
*/
|
||||||
export const completeCartWorkflow = createWorkflow(
|
export const completeCartWorkflow = createWorkflow(
|
||||||
{
|
{
|
||||||
@@ -268,7 +298,7 @@ export const completeCartWorkflow = createWorkflow(
|
|||||||
})
|
})
|
||||||
|
|
||||||
const result = transform({ order, orderId }, ({ order, orderId }) => {
|
const result = transform({ order, orderId }, ({ order, orderId }) => {
|
||||||
return { id: order?.id ?? orderId }
|
return { id: order?.id ?? orderId } as CompleteCartWorkflowOutput
|
||||||
})
|
})
|
||||||
|
|
||||||
return new WorkflowResponse(result, {
|
return new WorkflowResponse(result, {
|
||||||
|
|||||||
@@ -9,20 +9,136 @@ import { BigNumberInput } from "@medusajs/types"
|
|||||||
import { confirmInventoryStep } from "../steps"
|
import { confirmInventoryStep } from "../steps"
|
||||||
import { prepareConfirmInventoryInput } from "../utils/prepare-confirm-inventory-input"
|
import { prepareConfirmInventoryInput } from "../utils/prepare-confirm-inventory-input"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart items with inventory result computed for the specified input.
|
||||||
|
*/
|
||||||
export interface ConfirmVariantInventoryWorkflowOutput {
|
export interface ConfirmVariantInventoryWorkflowOutput {
|
||||||
|
/**
|
||||||
|
* The cart's line items with the computed inventory result.
|
||||||
|
*/
|
||||||
items: {
|
items: {
|
||||||
|
/**
|
||||||
|
* The line item's ID.
|
||||||
|
*/
|
||||||
id?: string
|
id?: string
|
||||||
|
/**
|
||||||
|
* The ID of the inventory item used to retrieve the item's available quantity.
|
||||||
|
*/
|
||||||
inventory_item_id: string
|
inventory_item_id: string
|
||||||
|
/**
|
||||||
|
* The number of units a single quantity is equivalent to. For example, if a customer orders one quantity of the variant, Medusa checks the availability of the quantity multiplied by the
|
||||||
|
* value set for `required_quantity`. When the customer orders the quantity, Medusa reserves the ordered quantity multiplied by the value set for `required_quantity`.
|
||||||
|
*/
|
||||||
required_quantity: number
|
required_quantity: number
|
||||||
|
/**
|
||||||
|
* Whether the variant can be ordered even if it's out of stock. If a variant has this enabled, the workflow doesn't throw an error.
|
||||||
|
*/
|
||||||
allow_backorder: boolean
|
allow_backorder: boolean
|
||||||
|
/**
|
||||||
|
* The quantity in the cart. If you provided `itemsToUpdate` in the input, this will be the updated quantity.
|
||||||
|
*/
|
||||||
quantity: BigNumberInput
|
quantity: BigNumberInput
|
||||||
|
/**
|
||||||
|
* The ID of the stock locations that the computed inventory quantity is available in.
|
||||||
|
*/
|
||||||
location_ids: string[]
|
location_ids: string[]
|
||||||
}[]
|
}[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const confirmVariantInventoryWorkflowId = "confirm-item-inventory"
|
export const confirmVariantInventoryWorkflowId = "confirm-item-inventory"
|
||||||
/**
|
/**
|
||||||
* This workflow confirms for one or more variants that their inventory has a required quantity.
|
* This workflow validates that product variants are in-stock at the specified sales channel, before adding them or updating their quantity in the cart. If a variant doesn't have sufficient quantity in-stock,
|
||||||
|
* the workflow throws an error. If all variants have sufficient inventory, the workflow returns the cart's items with their inventory details.
|
||||||
|
*
|
||||||
|
* This workflow is useful when confirming that a product variant has sufficient quantity to be added to or updated in the cart. It's executed
|
||||||
|
* by other cart-related workflows, such as {@link addToCartWorkflow}, to confirm that a product variant can be added to the cart at the specified quantity.
|
||||||
|
*
|
||||||
|
* :::note
|
||||||
|
*
|
||||||
|
* Learn more about the links between the product variant and sales channels and inventory items in [this documentation](https://docs.medusajs.com/resources/commerce-modules/product/links-to-other-modules).
|
||||||
|
*
|
||||||
|
* :::
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to check whether a product variant has enough inventory quantity before adding them to the cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* You can retrieve a variant's required details using [Query](https://docs.medusajs.com/learn/fundamentals/module-links/query):
|
||||||
|
*
|
||||||
|
* ```ts workflow={false}
|
||||||
|
* const { data: variants } = await query.graph({
|
||||||
|
* entity: "variant",
|
||||||
|
* fields: [
|
||||||
|
* "id",
|
||||||
|
* "manage_inventory",
|
||||||
|
* "inventory_items.inventory_item_id",
|
||||||
|
* "inventory_items.required_quantity",
|
||||||
|
* "inventory_items.inventory.requires_shipping",
|
||||||
|
* "inventory_items.inventory.location_levels.stock_locations.id",
|
||||||
|
* "inventory_items.inventory.location_levels.stock_locations.name",
|
||||||
|
* "inventory_items.inventory.location_levels.stock_locations.sales_channels.id",
|
||||||
|
* "inventory_items.inventory.location_levels.stock_locations.sales_channels.name",
|
||||||
|
* ],
|
||||||
|
* filters: {
|
||||||
|
* id: ["variant_123"]
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* :::note
|
||||||
|
*
|
||||||
|
* In a workflow, use [useQueryGraphStep](https://docs.medusajs.com/resources/references/medusa-workflows/steps/useQueryGraphStep) instead.
|
||||||
|
*
|
||||||
|
* :::
|
||||||
|
*
|
||||||
|
* Then, pass the variant's data with the other required data to the workflow:
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* const { result } = await confirmVariantInventoryWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* sales_channel_id: "sc_123",
|
||||||
|
* // @ts-ignore
|
||||||
|
* variants,
|
||||||
|
* items: [
|
||||||
|
* {
|
||||||
|
* variant_id: "variant_123",
|
||||||
|
* quantity: 1
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* When updating an item quantity:
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* const { result } = await confirmVariantInventoryWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* sales_channel_id: "sc_123",
|
||||||
|
* // @ts-ignore
|
||||||
|
* variants,
|
||||||
|
* items: [
|
||||||
|
* {
|
||||||
|
* variant_id: "variant_123",
|
||||||
|
* quantity: 1
|
||||||
|
* }
|
||||||
|
* ],
|
||||||
|
* itemsToUpdate: [
|
||||||
|
* {
|
||||||
|
* data: {
|
||||||
|
* variant_id: "variant_123",
|
||||||
|
* quantity: 2
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Validate that a variant is in-stock before adding to the cart.
|
||||||
*/
|
*/
|
||||||
export const confirmVariantInventoryWorkflow = createWorkflow(
|
export const confirmVariantInventoryWorkflow = createWorkflow(
|
||||||
confirmVariantInventoryWorkflowId,
|
confirmVariantInventoryWorkflowId,
|
||||||
|
|||||||
@@ -15,12 +15,40 @@ import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
|||||||
import { createPaymentCollectionsStep } from "../steps/create-payment-collection"
|
import { createPaymentCollectionsStep } from "../steps/create-payment-collection"
|
||||||
import { validateCartStep } from "../steps/validate-cart"
|
import { validateCartStep } from "../steps/validate-cart"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart to validate its payment collection.
|
||||||
|
*/
|
||||||
|
export type ValidateExistingPaymentCollectionStepInput = {
|
||||||
|
/**
|
||||||
|
* The cart to validate.
|
||||||
|
*/
|
||||||
|
cart: CartDTO & { payment_collection?: any }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This step validates that a cart doesn't have a payment collection.
|
* This step validates that a cart doesn't have a payment collection.
|
||||||
|
* If the cart has a payment collection, the step throws an error.
|
||||||
|
*
|
||||||
|
* :::tip
|
||||||
|
*
|
||||||
|
* You can use the {@link retrieveCartStep} to retrieve a cart's details.
|
||||||
|
*
|
||||||
|
* :::
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const data = validateExistingPaymentCollectionStep({
|
||||||
|
* cart: {
|
||||||
|
* // other cart details...
|
||||||
|
* payment_collection: {
|
||||||
|
* id: "paycol_123",
|
||||||
|
* // other payment collection details.
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* })
|
||||||
*/
|
*/
|
||||||
export const validateExistingPaymentCollectionStep = createStep(
|
export const validateExistingPaymentCollectionStep = createStep(
|
||||||
"validate-existing-payment-collection",
|
"validate-existing-payment-collection",
|
||||||
({ cart }: { cart: CartDTO & { payment_collection?: any } }) => {
|
({ cart }: ValidateExistingPaymentCollectionStepInput) => {
|
||||||
if (cart.payment_collection) {
|
if (cart.payment_collection) {
|
||||||
throw new Error(`Cart ${cart.id} already has a payment collection`)
|
throw new Error(`Cart ${cart.id} already has a payment collection`)
|
||||||
}
|
}
|
||||||
@@ -30,7 +58,25 @@ export const validateExistingPaymentCollectionStep = createStep(
|
|||||||
export const createPaymentCollectionForCartWorkflowId =
|
export const createPaymentCollectionForCartWorkflowId =
|
||||||
"create-payment-collection-for-cart"
|
"create-payment-collection-for-cart"
|
||||||
/**
|
/**
|
||||||
* This workflow creates a payment collection for a cart.
|
* This workflow creates a payment collection for a cart. It's executed by the
|
||||||
|
* [Create Payment Collection Store API Route](https://docs.medusajs.com/api/store#payment-collections_postpaymentcollections).
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to wrap custom logic around adding creating a payment collection for a cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await createPaymentCollectionForCartWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* metadata: {
|
||||||
|
* sandbox: true
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Create payment collection for cart.
|
||||||
*/
|
*/
|
||||||
export const createPaymentCollectionForCartWorkflow = createWorkflow(
|
export const createPaymentCollectionForCartWorkflow = createWorkflow(
|
||||||
createPaymentCollectionForCartWorkflowId,
|
createPaymentCollectionForCartWorkflowId,
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ export * from "./create-payment-collection-for-cart"
|
|||||||
export * from "./list-shipping-options-for-cart"
|
export * from "./list-shipping-options-for-cart"
|
||||||
export * from "./list-shipping-options-for-cart-with-pricing"
|
export * from "./list-shipping-options-for-cart-with-pricing"
|
||||||
export * from "./refresh-payment-collection"
|
export * from "./refresh-payment-collection"
|
||||||
|
export * from "./refresh-cart-items"
|
||||||
|
export * from "./refresh-cart-shipping-methods"
|
||||||
export * from "./transfer-cart-customer"
|
export * from "./transfer-cart-customer"
|
||||||
export * from "./update-cart"
|
export * from "./update-cart"
|
||||||
export * from "./update-cart-promotions"
|
export * from "./update-cart-promotions"
|
||||||
|
|||||||
+33
-8
@@ -6,7 +6,10 @@ import {
|
|||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
} from "@medusajs/framework/workflows-sdk"
|
} from "@medusajs/framework/workflows-sdk"
|
||||||
import { CalculateShippingOptionPriceDTO } from "@medusajs/types"
|
import {
|
||||||
|
CalculateShippingOptionPriceDTO,
|
||||||
|
ListShippingOptionsForCartWithPricingWorkflowInput,
|
||||||
|
} from "@medusajs/types"
|
||||||
|
|
||||||
import { useQueryGraphStep, validatePresenceOfStep } from "../../common"
|
import { useQueryGraphStep, validatePresenceOfStep } from "../../common"
|
||||||
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
||||||
@@ -39,17 +42,39 @@ const COMMON_OPTIONS_FIELDS = [
|
|||||||
export const listShippingOptionsForCartWithPricingWorkflowId =
|
export const listShippingOptionsForCartWithPricingWorkflowId =
|
||||||
"list-shipping-options-for-cart-with-pricing"
|
"list-shipping-options-for-cart-with-pricing"
|
||||||
/**
|
/**
|
||||||
* This workflow lists the shipping options of a cart.
|
* This workflow lists shipping options that can be used during checkout for a cart. It also retrieves the prices
|
||||||
|
* of these shipping options, including calculated prices that may be retrieved from third-party providers.
|
||||||
|
*
|
||||||
|
* This workflow is executed in other cart-related workflows, such as {@link addShippingMethodToCartWorkflow} to retrieve the
|
||||||
|
* price of the shipping method being added to the cart.
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to retrieve the shipping options of a cart and their prices
|
||||||
|
* in your custom flows.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await listShippingOptionsForCartWithPricingWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* options: [
|
||||||
|
* {
|
||||||
|
* id: "so_123",
|
||||||
|
* data: {
|
||||||
|
* carrier_code: "fedex"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* List a cart's shipping options with prices.
|
||||||
*/
|
*/
|
||||||
export const listShippingOptionsForCartWithPricingWorkflow = createWorkflow(
|
export const listShippingOptionsForCartWithPricingWorkflow = createWorkflow(
|
||||||
listShippingOptionsForCartWithPricingWorkflowId,
|
listShippingOptionsForCartWithPricingWorkflowId,
|
||||||
(
|
(
|
||||||
input: WorkflowData<{
|
input: WorkflowData<ListShippingOptionsForCartWithPricingWorkflowInput>
|
||||||
cart_id: string
|
|
||||||
options?: { id: string; data?: Record<string, unknown> }[]
|
|
||||||
is_return?: boolean
|
|
||||||
enabled_in_store?: boolean
|
|
||||||
}>
|
|
||||||
) => {
|
) => {
|
||||||
const optionIds = transform({ input }, ({ input }) =>
|
const optionIds = transform({ input }, ({ input }) =>
|
||||||
(input.options ?? []).map(({ id }) => id)
|
(input.options ?? []).map(({ id }) => id)
|
||||||
|
|||||||
@@ -7,21 +7,41 @@ import {
|
|||||||
import { useQueryGraphStep, validatePresenceOfStep } from "../../common"
|
import { useQueryGraphStep, validatePresenceOfStep } from "../../common"
|
||||||
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
||||||
import { cartFieldsForPricingContext } from "../utils/fields"
|
import { cartFieldsForPricingContext } from "../utils/fields"
|
||||||
|
import { ListShippingOptionsForCartWorkflowInput } from "@medusajs/types"
|
||||||
|
|
||||||
export const listShippingOptionsForCartWorkflowId =
|
export const listShippingOptionsForCartWorkflowId =
|
||||||
"list-shipping-options-for-cart"
|
"list-shipping-options-for-cart"
|
||||||
/**
|
/**
|
||||||
* This workflow lists the shipping options of a cart.
|
* This workflow lists the shipping options of a cart. It's executed by the
|
||||||
|
* [List Shipping Options Store API Route](https://docs.medusajs.com/api/store#shipping-options_getshippingoptions).
|
||||||
|
*
|
||||||
|
* :::note
|
||||||
|
*
|
||||||
|
* This workflow doesn't retrieve the calculated prices of the shipping options. If you need to retrieve the prices of the shipping options,
|
||||||
|
* use the {@link listShippingOptionsForCartWithPricingWorkflow} workflow.
|
||||||
|
*
|
||||||
|
* :::
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to wrap custom logic around to retrieve the shipping options of a cart
|
||||||
|
* in your custom flows.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await listShippingOptionsForCartWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* option_ids: ["so_123"]
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* List a cart's shipping options.
|
||||||
*/
|
*/
|
||||||
export const listShippingOptionsForCartWorkflow = createWorkflow(
|
export const listShippingOptionsForCartWorkflow = createWorkflow(
|
||||||
listShippingOptionsForCartWorkflowId,
|
listShippingOptionsForCartWorkflowId,
|
||||||
(
|
(
|
||||||
input: WorkflowData<{
|
input: WorkflowData<ListShippingOptionsForCartWorkflowInput>
|
||||||
cart_id: string
|
|
||||||
option_ids?: string[]
|
|
||||||
is_return?: boolean
|
|
||||||
enabled_in_store?: boolean
|
|
||||||
}>
|
|
||||||
) => {
|
) => {
|
||||||
const cartQuery = useQueryGraphStep({
|
const cartQuery = useQueryGraphStep({
|
||||||
entity: "cart",
|
entity: "cart",
|
||||||
|
|||||||
@@ -28,17 +28,48 @@ import { refreshPaymentCollectionForCartWorkflow } from "./refresh-payment-colle
|
|||||||
import { updateCartPromotionsWorkflow } from "./update-cart-promotions"
|
import { updateCartPromotionsWorkflow } from "./update-cart-promotions"
|
||||||
import { updateTaxLinesWorkflow } from "./update-tax-lines"
|
import { updateTaxLinesWorkflow } from "./update-tax-lines"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart to refresh.
|
||||||
|
*/
|
||||||
|
export type RefreshCartItemsWorkflowInput = {
|
||||||
|
/**
|
||||||
|
* The cart's ID.
|
||||||
|
*/
|
||||||
|
cart_id: string
|
||||||
|
/**
|
||||||
|
* The promotion codes applied on the cart.
|
||||||
|
* These promotion codes will replace previously applied codes.
|
||||||
|
*/
|
||||||
|
promo_codes?: string[]
|
||||||
|
}
|
||||||
|
|
||||||
export const refreshCartItemsWorkflowId = "refresh-cart-items"
|
export const refreshCartItemsWorkflowId = "refresh-cart-items"
|
||||||
/**
|
/**
|
||||||
* This workflow refreshes a cart's items
|
* This workflow refreshes a cart to ensure its prices, promotion codes, taxes, and other details are applied correctly. It's useful
|
||||||
|
* after making a chnge to a cart, such as after adding an item to the cart or adding a promotion code.
|
||||||
|
*
|
||||||
|
* This workflow is used by other cart-related workflows, such as the {@link addToCartWorkflow} after an item
|
||||||
|
* is added to the cart.
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to refresh the cart after making updates to it in your
|
||||||
|
* custom flows.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await refreshCartItemsWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Refresh a cart's details after an update.
|
||||||
*/
|
*/
|
||||||
export const refreshCartItemsWorkflow = createWorkflow(
|
export const refreshCartItemsWorkflow = createWorkflow(
|
||||||
refreshCartItemsWorkflowId,
|
refreshCartItemsWorkflowId,
|
||||||
(
|
(
|
||||||
input: WorkflowData<{
|
input: WorkflowData<RefreshCartItemsWorkflowInput>
|
||||||
cart_id: string
|
|
||||||
promo_codes?: string[]
|
|
||||||
}>
|
|
||||||
) => {
|
) => {
|
||||||
const cart = useRemoteQueryStep({
|
const cart = useRemoteQueryStep({
|
||||||
entry_point: "cart",
|
entry_point: "cart",
|
||||||
|
|||||||
@@ -13,14 +13,39 @@ import { removeShippingMethodFromCartStep } from "../steps"
|
|||||||
import { updateShippingMethodsStep } from "../steps/update-shipping-methods"
|
import { updateShippingMethodsStep } from "../steps/update-shipping-methods"
|
||||||
import { listShippingOptionsForCartWithPricingWorkflow } from "./list-shipping-options-for-cart-with-pricing"
|
import { listShippingOptionsForCartWithPricingWorkflow } from "./list-shipping-options-for-cart-with-pricing"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart to refresh.
|
||||||
|
*/
|
||||||
|
export type RefreshCartShippingMethodsWorkflowInput = {
|
||||||
|
/**
|
||||||
|
* The cart's ID.
|
||||||
|
*/
|
||||||
|
cart_id: string
|
||||||
|
}
|
||||||
|
|
||||||
export const refreshCartShippingMethodsWorkflowId =
|
export const refreshCartShippingMethodsWorkflowId =
|
||||||
"refresh-cart-shipping-methods"
|
"refresh-cart-shipping-methods"
|
||||||
/**
|
/**
|
||||||
* This workflow refreshes a cart's shipping methods
|
* This workflow refreshes a cart's shipping methods, ensuring that their associated shipping options can still be used on the cart,
|
||||||
|
* and retrieve their correct pricing after a cart update. This workflow is used by the {@link refreshCartItemsWorkflow}.
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to refresh the cart's shipping method after making updates to the cart.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await refreshCartShippingMethodsWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Refresh a cart's shipping methods after an update.
|
||||||
*/
|
*/
|
||||||
export const refreshCartShippingMethodsWorkflow = createWorkflow(
|
export const refreshCartShippingMethodsWorkflow = createWorkflow(
|
||||||
refreshCartShippingMethodsWorkflowId,
|
refreshCartShippingMethodsWorkflowId,
|
||||||
(input: WorkflowData<{ cart_id: string }>) => {
|
(input: WorkflowData<RefreshCartShippingMethodsWorkflowInput>) => {
|
||||||
const cartQuery = useQueryGraphStep({
|
const cartQuery = useQueryGraphStep({
|
||||||
entity: "cart",
|
entity: "cart",
|
||||||
filters: { id: input.cart_id },
|
filters: { id: input.cart_id },
|
||||||
|
|||||||
@@ -12,14 +12,40 @@ import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
|||||||
import { updatePaymentCollectionStep } from "../../payment-collection"
|
import { updatePaymentCollectionStep } from "../../payment-collection"
|
||||||
import { deletePaymentSessionsWorkflow } from "../../payment-collection/workflows/delete-payment-sessions"
|
import { deletePaymentSessionsWorkflow } from "../../payment-collection/workflows/delete-payment-sessions"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart to refresh.
|
||||||
|
*/
|
||||||
export type RefreshPaymentCollectionForCartWorklowInput = {
|
export type RefreshPaymentCollectionForCartWorklowInput = {
|
||||||
|
/**
|
||||||
|
* The cart's ID.
|
||||||
|
*/
|
||||||
cart_id: string
|
cart_id: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export const refreshPaymentCollectionForCartWorkflowId =
|
export const refreshPaymentCollectionForCartWorkflowId =
|
||||||
"refresh-payment-collection-for-cart"
|
"refresh-payment-collection-for-cart"
|
||||||
/**
|
/**
|
||||||
* This workflow refreshes the payment collections of a cart.
|
* This workflow refreshes a cart's payment collection, which is useful once the cart is created or when its details
|
||||||
|
* are updated. If the cart's total changes to the amount in its payment collection, the payment collection's payment sessions are
|
||||||
|
* deleted. It also syncs the payment collection's amount, currency code, and other details with the details in the cart.
|
||||||
|
*
|
||||||
|
* This workflow is used by other cart-related workflows, such as the {@link refreshCartItemsWorkflow} to refresh the cart's
|
||||||
|
* payment collection after an update.
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to refresh the cart's payment collection after making updates to it in your
|
||||||
|
* custom flows.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await refreshPaymentCollectionForCartWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Refresh a cart's payment collection details.
|
||||||
*/
|
*/
|
||||||
export const refreshPaymentCollectionForCartWorkflow = createWorkflow(
|
export const refreshPaymentCollectionForCartWorkflow = createWorkflow(
|
||||||
refreshPaymentCollectionForCartWorkflowId,
|
refreshPaymentCollectionForCartWorkflowId,
|
||||||
|
|||||||
@@ -10,13 +10,44 @@ import { useQueryGraphStep } from "../../common"
|
|||||||
import { updateCartsStep } from "../steps"
|
import { updateCartsStep } from "../steps"
|
||||||
import { refreshCartItemsWorkflow } from "./refresh-cart-items"
|
import { refreshCartItemsWorkflow } from "./refresh-cart-items"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The cart ownership transfer details.
|
||||||
|
*/
|
||||||
|
export type TransferCartCustomerWorkflowInput = {
|
||||||
|
/**
|
||||||
|
* The cart's ID.
|
||||||
|
*/
|
||||||
|
id: string;
|
||||||
|
/**
|
||||||
|
* The ID of the customer to transfer the cart to.
|
||||||
|
*/
|
||||||
|
customer_id: string
|
||||||
|
}
|
||||||
|
|
||||||
export const transferCartCustomerWorkflowId = "transfer-cart-customer"
|
export const transferCartCustomerWorkflowId = "transfer-cart-customer"
|
||||||
/**
|
/**
|
||||||
* This workflow transfers cart's customer.
|
* This workflow transfers a cart's customer ownership to another customer. It's useful if a customer logs in after
|
||||||
|
* adding the items to their cart, allowing you to transfer the cart's ownership to the logged-in customer. This workflow is used
|
||||||
|
* by the [Set Cart's Customer Store API Route](https://docs.medusajs.com/api/store#carts_postcartsidcustomer).
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to set the cart's customer within your custom flows.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await transferCartCustomerWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* id: "cart_123",
|
||||||
|
* customer_id: "cus_123"
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Refresh a cart's payment collection details.
|
||||||
*/
|
*/
|
||||||
export const transferCartCustomerWorkflow = createWorkflow(
|
export const transferCartCustomerWorkflow = createWorkflow(
|
||||||
transferCartCustomerWorkflowId,
|
transferCartCustomerWorkflowId,
|
||||||
(input: WorkflowData<{ id: string; customer_id: string }>) => {
|
(input: WorkflowData<TransferCartCustomerWorkflowInput>) => {
|
||||||
const cartQuery = useQueryGraphStep({
|
const cartQuery = useQueryGraphStep({
|
||||||
entity: "cart",
|
entity: "cart",
|
||||||
filters: { id: input.id },
|
filters: { id: input.id },
|
||||||
|
|||||||
@@ -20,9 +20,22 @@ import {
|
|||||||
import { updateCartPromotionsStep } from "../steps/update-cart-promotions"
|
import { updateCartPromotionsStep } from "../steps/update-cart-promotions"
|
||||||
import { cartFieldsForRefreshSteps } from "../utils/fields"
|
import { cartFieldsForRefreshSteps } from "../utils/fields"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the promotion updates on a cart.
|
||||||
|
*/
|
||||||
export type UpdateCartPromotionsWorkflowInput = {
|
export type UpdateCartPromotionsWorkflowInput = {
|
||||||
|
/**
|
||||||
|
* The cart's ID.
|
||||||
|
*/
|
||||||
cart_id: string
|
cart_id: string
|
||||||
|
/**
|
||||||
|
* The promotion codes to add to the cart, remove from the cart,
|
||||||
|
* or replace all existing promotions in the cart.
|
||||||
|
*/
|
||||||
promo_codes?: string[]
|
promo_codes?: string[]
|
||||||
|
/**
|
||||||
|
* The action to perform with the specified promotion codes.
|
||||||
|
*/
|
||||||
action?:
|
action?:
|
||||||
| PromotionActions.ADD
|
| PromotionActions.ADD
|
||||||
| PromotionActions.REMOVE
|
| PromotionActions.REMOVE
|
||||||
@@ -31,7 +44,26 @@ export type UpdateCartPromotionsWorkflowInput = {
|
|||||||
|
|
||||||
export const updateCartPromotionsWorkflowId = "update-cart-promotions"
|
export const updateCartPromotionsWorkflowId = "update-cart-promotions"
|
||||||
/**
|
/**
|
||||||
* This workflow updates a cart's promotions.
|
* This workflow updates a cart's promotions, applying or removing promotion codes from the cart. It also computes the adjustments
|
||||||
|
* that need to be applied to the cart's line items and shipping methods based on the promotions applied. This workflow is used by
|
||||||
|
* [Add Promotions Store API Route](https://docs.medusajs.com/api/store#carts_postcartsidpromotions).
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to update a cart's promotions within your custom flows.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await updateCartPromotionsWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* promo_codes: ["10OFF"],
|
||||||
|
* // imported from @medusajs/framework/utils
|
||||||
|
* action: PromotionActions.ADD,
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Update a cart's applied promotions to add, replace, or remove them.
|
||||||
*/
|
*/
|
||||||
export const updateCartPromotionsWorkflow = createWorkflow(
|
export const updateCartPromotionsWorkflow = createWorkflow(
|
||||||
updateCartPromotionsWorkflowId,
|
updateCartPromotionsWorkflowId,
|
||||||
|
|||||||
@@ -24,7 +24,26 @@ const cartFields = cartFieldsForPricingContext.concat(["items.*"])
|
|||||||
|
|
||||||
export const updateLineItemInCartWorkflowId = "update-line-item-in-cart"
|
export const updateLineItemInCartWorkflowId = "update-line-item-in-cart"
|
||||||
/**
|
/**
|
||||||
* This workflow updates a cart's line item.
|
* This workflow updates a line item's details in a cart. You can update the line item's quantity, unit price, and more. This workflow is executed
|
||||||
|
* by the [Update Line Item Store API Route](https://docs.medusajs.com/api/store#carts_postcartsidlineitemsline_id).
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to update a line item's details in your custom flows.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await updateLineItemInCartWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* item_id: "item_123",
|
||||||
|
* update: {
|
||||||
|
* quantity: 2
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Update a cart's line item.
|
||||||
*/
|
*/
|
||||||
export const updateLineItemInCartWorkflow = createWorkflow(
|
export const updateLineItemInCartWorkflow = createWorkflow(
|
||||||
updateLineItemInCartWorkflowId,
|
updateLineItemInCartWorkflowId,
|
||||||
|
|||||||
@@ -60,16 +60,60 @@ const cartFields = [
|
|||||||
"shipping_address.metadata",
|
"shipping_address.metadata",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the cart to update tax lines for.
|
||||||
|
*/
|
||||||
export type UpdateTaxLinesWorkflowInput = {
|
export type UpdateTaxLinesWorkflowInput = {
|
||||||
|
/**
|
||||||
|
* The cart's ID.
|
||||||
|
*/
|
||||||
cart_id: string
|
cart_id: string
|
||||||
|
/**
|
||||||
|
* The items to update their tax lines.
|
||||||
|
* If not specified, taxes are updated for all of the cart's
|
||||||
|
* line items.
|
||||||
|
*
|
||||||
|
* @privateRemarks
|
||||||
|
* This doesn't seem to be used?
|
||||||
|
*/
|
||||||
items?: CartLineItemDTO[]
|
items?: CartLineItemDTO[]
|
||||||
|
/**
|
||||||
|
* The shipping methods to update their tax lines.
|
||||||
|
* If not specified, taxes are updated for all of the cart's
|
||||||
|
* shipping methods.
|
||||||
|
*
|
||||||
|
* @privateRemarks
|
||||||
|
* This doesn't seem to be used?
|
||||||
|
*/
|
||||||
shipping_methods?: CartShippingMethodDTO[]
|
shipping_methods?: CartShippingMethodDTO[]
|
||||||
|
/**
|
||||||
|
* Whether to force re-calculating tax amounts, which
|
||||||
|
* may include sending requests to a third-part tax provider, depending
|
||||||
|
* on the configurations of the cart's tax region.
|
||||||
|
*
|
||||||
|
* @defaultValue false
|
||||||
|
*/
|
||||||
force_tax_calculation?: boolean
|
force_tax_calculation?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export const updateTaxLinesWorkflowId = "update-tax-lines"
|
export const updateTaxLinesWorkflowId = "update-tax-lines"
|
||||||
/**
|
/**
|
||||||
* This workflow updates a cart's tax lines.
|
* This workflow updates a cart's tax lines that are applied on line items and shipping methods. You can update the line item's quantity, unit price, and more. This workflow is executed
|
||||||
|
* by the [Calculate Taxes Store API Route](https://docs.medusajs.com/api/store#carts_postcartsidtaxes).
|
||||||
|
*
|
||||||
|
* You can use this workflow within your own custom workflows, allowing you to update a cart's tax lines in your custom flows.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* const { result } = await updateTaxLinesWorkflow(container)
|
||||||
|
* .run({
|
||||||
|
* input: {
|
||||||
|
* cart_id: "cart_123",
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*
|
||||||
|
* @summary
|
||||||
|
*
|
||||||
|
* Update a cart's tax lines.
|
||||||
*/
|
*/
|
||||||
export const updateTaxLinesWorkflow = createWorkflow(
|
export const updateTaxLinesWorkflow = createWorkflow(
|
||||||
updateTaxLinesWorkflowId,
|
updateTaxLinesWorkflowId,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import {
|
|||||||
CreateCustomerAddressDTO,
|
CreateCustomerAddressDTO,
|
||||||
} from "@medusajs/framework/types"
|
} from "@medusajs/framework/types"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
@@ -73,7 +74,7 @@ export const createCustomerAddressesWorkflowId = "create-customer-addresses"
|
|||||||
*/
|
*/
|
||||||
export const createCustomerAddressesWorkflow = createWorkflow(
|
export const createCustomerAddressesWorkflow = createWorkflow(
|
||||||
createCustomerAddressesWorkflowId,
|
createCustomerAddressesWorkflowId,
|
||||||
(input: CreateCustomerAddressesWorkflowInput) => {
|
(input: WorkflowData<CreateCustomerAddressesWorkflowInput>) => {
|
||||||
const unsetInput = transform(input, (data) => ({
|
const unsetInput = transform(input, (data) => ({
|
||||||
create: data.addresses,
|
create: data.addresses,
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { AdditionalData, CreateCustomerDTO } from "@medusajs/framework/types"
|
import { AdditionalData, CreateCustomerDTO } from "@medusajs/framework/types"
|
||||||
import { CustomerWorkflowEvents } from "@medusajs/framework/utils"
|
import { CustomerWorkflowEvents } from "@medusajs/framework/utils"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
@@ -52,7 +53,7 @@ export const createCustomersWorkflowId = "create-customers"
|
|||||||
*/
|
*/
|
||||||
export const createCustomersWorkflow = createWorkflow(
|
export const createCustomersWorkflow = createWorkflow(
|
||||||
createCustomersWorkflowId,
|
createCustomersWorkflowId,
|
||||||
(input: CreateCustomersWorkflowInput) => {
|
(input: WorkflowData<CreateCustomersWorkflowInput>) => {
|
||||||
const createdCustomers = createCustomersStep(input.customersData)
|
const createdCustomers = createCustomersStep(input.customersData)
|
||||||
const customersCreated = createHook("customersCreated", {
|
const customersCreated = createHook("customersCreated", {
|
||||||
customers: createdCustomers,
|
customers: createdCustomers,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {
|
|||||||
AdditionalData,
|
AdditionalData,
|
||||||
} from "@medusajs/framework/types"
|
} from "@medusajs/framework/types"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
@@ -64,7 +65,7 @@ export const updateCustomerAddressesWorkflowId = "update-customer-addresses"
|
|||||||
*/
|
*/
|
||||||
export const updateCustomerAddressesWorkflow = createWorkflow(
|
export const updateCustomerAddressesWorkflow = createWorkflow(
|
||||||
updateCustomerAddressesWorkflowId,
|
updateCustomerAddressesWorkflowId,
|
||||||
(input: UpdateCustomerAddressesWorkflowInput) => {
|
(input: WorkflowData<UpdateCustomerAddressesWorkflowInput>) => {
|
||||||
const unsetInput = transform(input, (data) => ({
|
const unsetInput = transform(input, (data) => ({
|
||||||
update: data,
|
update: data,
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import {
|
|||||||
OrderWorkflowEvents,
|
OrderWorkflowEvents,
|
||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createStep,
|
createStep,
|
||||||
@@ -309,7 +310,7 @@ export const createOrderFulfillmentWorkflowId = "create-order-fulfillment"
|
|||||||
export const createOrderFulfillmentWorkflow = createWorkflow(
|
export const createOrderFulfillmentWorkflow = createWorkflow(
|
||||||
createOrderFulfillmentWorkflowId,
|
createOrderFulfillmentWorkflowId,
|
||||||
(
|
(
|
||||||
input: CreateOrderFulfillmentWorkflowInput
|
input: WorkflowData<CreateOrderFulfillmentWorkflowInput>
|
||||||
) => {
|
) => {
|
||||||
const order: OrderDTO = useRemoteQueryStep({
|
const order: OrderDTO = useRemoteQueryStep({
|
||||||
entry_point: "orders",
|
entry_point: "orders",
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { AdditionalData, CreateOrderDTO } from "@medusajs/framework/types"
|
import { AdditionalData, CreateOrderDTO } from "@medusajs/framework/types"
|
||||||
import { MedusaError, isDefined, isPresent } from "@medusajs/framework/utils"
|
import { MedusaError, isDefined, isPresent } from "@medusajs/framework/utils"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
@@ -76,6 +77,9 @@ function getOrderInput(data) {
|
|||||||
return data_
|
return data_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data to create an order, along with custom data that's passed to the workflow's hooks.
|
||||||
|
*/
|
||||||
export type CreateOrderWorkflowInput = CreateOrderDTO & AdditionalData
|
export type CreateOrderWorkflowInput = CreateOrderDTO & AdditionalData
|
||||||
|
|
||||||
export const createOrdersWorkflowId = "create-orders"
|
export const createOrdersWorkflowId = "create-orders"
|
||||||
@@ -126,7 +130,7 @@ export const createOrdersWorkflowId = "create-orders"
|
|||||||
*/
|
*/
|
||||||
export const createOrderWorkflow = createWorkflow(
|
export const createOrderWorkflow = createWorkflow(
|
||||||
createOrdersWorkflowId,
|
createOrdersWorkflowId,
|
||||||
(input: CreateOrderWorkflowInput) => {
|
(input: WorkflowData<CreateOrderWorkflowInput>) => {
|
||||||
const variantIds = transform({ input }, (data) => {
|
const variantIds = transform({ input }, (data) => {
|
||||||
return (data.input.items ?? [])
|
return (data.input.items ?? [])
|
||||||
.map((item) => item.variant_id)
|
.map((item) => item.variant_id)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
} from "@medusajs/framework/types"
|
} from "@medusajs/framework/types"
|
||||||
import { FulfillmentEvents, Modules } from "@medusajs/framework/utils"
|
import { FulfillmentEvents, Modules } from "@medusajs/framework/utils"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createStep,
|
createStep,
|
||||||
@@ -154,7 +155,7 @@ export const createOrderShipmentWorkflowId = "create-order-shipment"
|
|||||||
export const createOrderShipmentWorkflow = createWorkflow(
|
export const createOrderShipmentWorkflow = createWorkflow(
|
||||||
createOrderShipmentWorkflowId,
|
createOrderShipmentWorkflowId,
|
||||||
(
|
(
|
||||||
input: CreateOrderShipmentWorkflowInput
|
input: WorkflowData<CreateOrderShipmentWorkflowInput>
|
||||||
) => {
|
) => {
|
||||||
const order: OrderDTO = useRemoteQueryStep({
|
const order: OrderDTO = useRemoteQueryStep({
|
||||||
entry_point: "orders",
|
entry_point: "orders",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { AdditionalData, CreateCampaignDTO } from "@medusajs/framework/types"
|
import { AdditionalData, CreateCampaignDTO } from "@medusajs/framework/types"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
@@ -55,7 +56,7 @@ export const createCampaignsWorkflowId = "create-campaigns"
|
|||||||
*/
|
*/
|
||||||
export const createCampaignsWorkflow = createWorkflow(
|
export const createCampaignsWorkflow = createWorkflow(
|
||||||
createCampaignsWorkflowId,
|
createCampaignsWorkflowId,
|
||||||
(input: CreateCampaignsWorkflowInput) => {
|
(input: WorkflowData<CreateCampaignsWorkflowInput>) => {
|
||||||
const createdCampaigns = createCampaignsStep(input.campaignsData)
|
const createdCampaigns = createCampaignsStep(input.campaignsData)
|
||||||
const campaignsCreated = createHook("campaignsCreated", {
|
const campaignsCreated = createHook("campaignsCreated", {
|
||||||
campaigns: createdCampaigns,
|
campaigns: createdCampaigns,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { AdditionalData, CreatePromotionDTO } from "@medusajs/framework/types"
|
import { AdditionalData, CreatePromotionDTO } from "@medusajs/framework/types"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
@@ -56,7 +57,7 @@ export const createPromotionsWorkflowId = "create-promotions"
|
|||||||
*/
|
*/
|
||||||
export const createPromotionsWorkflow = createWorkflow(
|
export const createPromotionsWorkflow = createWorkflow(
|
||||||
createPromotionsWorkflowId,
|
createPromotionsWorkflowId,
|
||||||
(input: CreatePromotionsWorkflowInput) => {
|
(input: WorkflowData<CreatePromotionsWorkflowInput>) => {
|
||||||
const createdPromotions = createPromotionsStep(input.promotionsData)
|
const createdPromotions = createPromotionsStep(input.promotionsData)
|
||||||
const promotionsCreated = createHook("promotionsCreated", {
|
const promotionsCreated = createHook("promotionsCreated", {
|
||||||
promotions: createdPromotions,
|
promotions: createdPromotions,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { AdditionalData, UpdateCampaignDTO } from "@medusajs/framework/types"
|
import { AdditionalData, UpdateCampaignDTO } from "@medusajs/framework/types"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
@@ -50,7 +51,7 @@ export const updateCampaignsWorkflowId = "update-campaigns"
|
|||||||
*/
|
*/
|
||||||
export const updateCampaignsWorkflow = createWorkflow(
|
export const updateCampaignsWorkflow = createWorkflow(
|
||||||
updateCampaignsWorkflowId,
|
updateCampaignsWorkflowId,
|
||||||
(input: UpdateCampaignsWorkflowInput) => {
|
(input: WorkflowData<UpdateCampaignsWorkflowInput>) => {
|
||||||
const updatedCampaigns = updateCampaignsStep(input.campaignsData)
|
const updatedCampaigns = updateCampaignsStep(input.campaignsData)
|
||||||
const campaignsUpdated = createHook("campaignsUpdated", {
|
const campaignsUpdated = createHook("campaignsUpdated", {
|
||||||
campaigns: updatedCampaigns,
|
campaigns: updatedCampaigns,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { AdditionalData, UpdatePromotionDTO } from "@medusajs/framework/types"
|
import { AdditionalData, UpdatePromotionDTO } from "@medusajs/framework/types"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
@@ -49,7 +50,7 @@ export const updatePromotionsWorkflowId = "update-promotions"
|
|||||||
*/
|
*/
|
||||||
export const updatePromotionsWorkflow = createWorkflow(
|
export const updatePromotionsWorkflow = createWorkflow(
|
||||||
updatePromotionsWorkflowId,
|
updatePromotionsWorkflowId,
|
||||||
(input: UpdatePromotionsWorkflowInput) => {
|
(input: WorkflowData<UpdatePromotionsWorkflowInput>) => {
|
||||||
const updatedPromotions = updatePromotionsStep(input.promotionsData)
|
const updatedPromotions = updatePromotionsStep(input.promotionsData)
|
||||||
const promotionsUpdated = createHook("promotionsUpdated", {
|
const promotionsUpdated = createHook("promotionsUpdated", {
|
||||||
promotions: updatedPromotions,
|
promotions: updatedPromotions,
|
||||||
|
|||||||
@@ -132,9 +132,21 @@ export interface CreateCartCreateLineItemDTO {
|
|||||||
metadata?: Record<string, unknown> | null
|
metadata?: Record<string, unknown> | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the line item to update.
|
||||||
|
*/
|
||||||
export interface UpdateLineItemInCartWorkflowInputDTO {
|
export interface UpdateLineItemInCartWorkflowInputDTO {
|
||||||
|
/**
|
||||||
|
* The ID of the cart that the line item belongs to.
|
||||||
|
*/
|
||||||
cart_id: string
|
cart_id: string
|
||||||
|
/**
|
||||||
|
* The ID of the line item to update.
|
||||||
|
*/
|
||||||
item_id: string
|
item_id: string
|
||||||
|
/**
|
||||||
|
* The details to update in the line item.
|
||||||
|
*/
|
||||||
update: Partial<UpdateLineItemDTO>
|
update: Partial<UpdateLineItemDTO>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,8 +279,17 @@ export interface CreateCartWorkflowInputDTO {
|
|||||||
promo_codes?: string[]
|
promo_codes?: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of adding items to the cart.
|
||||||
|
*/
|
||||||
export interface AddToCartWorkflowInputDTO {
|
export interface AddToCartWorkflowInputDTO {
|
||||||
|
/**
|
||||||
|
* The ID of the cart to add items to.
|
||||||
|
*/
|
||||||
cart_id: string
|
cart_id: string
|
||||||
|
/**
|
||||||
|
* The items to add to the cart.
|
||||||
|
*/
|
||||||
items: CreateCartCreateLineItemDTO[]
|
items: CreateCartCreateLineItemDTO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,14 +350,36 @@ export interface UpdateCartWorkflowInputDTO {
|
|||||||
billing_address?: CreateAddressDTO | UpdateAddressDTO | null
|
billing_address?: CreateAddressDTO | UpdateAddressDTO | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details to create the payment collection.
|
||||||
|
*/
|
||||||
export interface CreatePaymentCollectionForCartWorkflowInputDTO {
|
export interface CreatePaymentCollectionForCartWorkflowInputDTO {
|
||||||
|
/**
|
||||||
|
* The ID of the cart to create a payment collection for.
|
||||||
|
*/
|
||||||
cart_id: string
|
cart_id: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom key-value pairs to store in the payment collection.
|
||||||
|
*/
|
||||||
metadata?: Record<string, unknown>
|
metadata?: Record<string, unknown>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A cart's details.
|
||||||
|
*/
|
||||||
export interface CartWorkflowDTO extends CartDTO {
|
export interface CartWorkflowDTO extends CartDTO {
|
||||||
|
/**
|
||||||
|
* The cart's customer.
|
||||||
|
*/
|
||||||
customer?: CustomerDTO
|
customer?: CustomerDTO
|
||||||
|
/**
|
||||||
|
* The cart's product to be added.
|
||||||
|
*/
|
||||||
product?: ProductDTO
|
product?: ProductDTO
|
||||||
|
/**
|
||||||
|
* The cart's region.
|
||||||
|
*/
|
||||||
region?: RegionDTO
|
region?: RegionDTO
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,20 +404,67 @@ export interface CompleteCartWorkflowInputDTO {
|
|||||||
id: string
|
id: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details necessary to check whether the variant has sufficient inventory.
|
||||||
|
*/
|
||||||
export interface ConfirmVariantInventoryWorkflowInputDTO {
|
export interface ConfirmVariantInventoryWorkflowInputDTO {
|
||||||
|
/**
|
||||||
|
* The ID of the sales channel to check the inventory availability in.
|
||||||
|
*/
|
||||||
sales_channel_id: string
|
sales_channel_id: string
|
||||||
|
/**
|
||||||
|
* The variants to confirm they have sufficient in-stock quantity.
|
||||||
|
*/
|
||||||
variants: {
|
variants: {
|
||||||
|
/**
|
||||||
|
* The variant's ID.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* Whether Medusa manages the inventory of the variant. If disabled, the
|
||||||
|
* variant is always considered in stock.
|
||||||
|
*/
|
||||||
manage_inventory: boolean
|
manage_inventory: boolean
|
||||||
|
/**
|
||||||
|
* The variant's inventory items, if {@link manage_inventory} is enabled.
|
||||||
|
*/
|
||||||
inventory_items: {
|
inventory_items: {
|
||||||
|
/**
|
||||||
|
* The ID of the inventory item.
|
||||||
|
*/
|
||||||
inventory_item_id: string
|
inventory_item_id: string
|
||||||
|
/**
|
||||||
|
* The ID of the variant.
|
||||||
|
*/
|
||||||
variant_id: string
|
variant_id: string
|
||||||
|
/**
|
||||||
|
* The number of units a single quantity is equivalent to. For example, if a customer orders one quantity of the variant, Medusa checks the availability of the quantity multiplied by the
|
||||||
|
* value set for `required_quantity`. When the customer orders the quantity, Medusa reserves the ordered quantity multiplied by the value set for `required_quantity`.
|
||||||
|
*/
|
||||||
required_quantity: BigNumberInput
|
required_quantity: BigNumberInput
|
||||||
|
/**
|
||||||
|
* The inventory details.
|
||||||
|
*/
|
||||||
inventory: {
|
inventory: {
|
||||||
|
/**
|
||||||
|
* The inventory details at specified stock locations.
|
||||||
|
*/
|
||||||
location_levels: {
|
location_levels: {
|
||||||
|
/**
|
||||||
|
* The stock location's details.
|
||||||
|
*/
|
||||||
stock_locations: {
|
stock_locations: {
|
||||||
|
/**
|
||||||
|
* The stock location's ID.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* The associated sales channel's details.
|
||||||
|
*/
|
||||||
sales_channels: {
|
sales_channels: {
|
||||||
|
/**
|
||||||
|
* The sales channel's ID.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
}[]
|
}[]
|
||||||
}[]
|
}[]
|
||||||
@@ -382,14 +472,39 @@ export interface ConfirmVariantInventoryWorkflowInputDTO {
|
|||||||
}[]
|
}[]
|
||||||
}[]
|
}[]
|
||||||
}[]
|
}[]
|
||||||
|
/**
|
||||||
|
* The items in the cart, or to be added.
|
||||||
|
*/
|
||||||
items: {
|
items: {
|
||||||
|
/**
|
||||||
|
* The ID of the associated variant.
|
||||||
|
*/
|
||||||
variant_id?: string | null
|
variant_id?: string | null
|
||||||
|
/**
|
||||||
|
* The quantity in the cart.
|
||||||
|
*/
|
||||||
quantity: BigNumberInput
|
quantity: BigNumberInput
|
||||||
|
/**
|
||||||
|
* The ID of the line item if it's already in the cart.
|
||||||
|
*/
|
||||||
id?: string
|
id?: string
|
||||||
}[]
|
}[]
|
||||||
|
/**
|
||||||
|
* The new quantity of the variant to be added to the cart.
|
||||||
|
* This is useful when updating a variant's quantity in the cart.
|
||||||
|
*/
|
||||||
itemsToUpdate?: {
|
itemsToUpdate?: {
|
||||||
|
/**
|
||||||
|
* The item update's details.
|
||||||
|
*/
|
||||||
data: {
|
data: {
|
||||||
|
/**
|
||||||
|
* The ID of the associated variant.
|
||||||
|
*/
|
||||||
variant_id?: string
|
variant_id?: string
|
||||||
|
/**
|
||||||
|
* The variant's quantity.
|
||||||
|
*/
|
||||||
quantity?: BigNumberInput
|
quantity?: BigNumberInput
|
||||||
}
|
}
|
||||||
}[]
|
}[]
|
||||||
|
|||||||
@@ -1,27 +1,87 @@
|
|||||||
import { CartDTO } from "../.."
|
import { CartDTO } from "../.."
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A cart's details relevant for fulfillment.
|
||||||
|
*/
|
||||||
export type CartPropsForFulfillment = {
|
export type CartPropsForFulfillment = {
|
||||||
|
/**
|
||||||
|
* The cart's ID.
|
||||||
|
*/
|
||||||
id: CartDTO["id"]
|
id: CartDTO["id"]
|
||||||
|
/**
|
||||||
|
* The cart's shipping address.
|
||||||
|
*/
|
||||||
shipping_address: CartDTO["shipping_address"]
|
shipping_address: CartDTO["shipping_address"]
|
||||||
|
/**
|
||||||
|
* The cart's items
|
||||||
|
*/
|
||||||
items: CartDTO["items"] & {
|
items: CartDTO["items"] & {
|
||||||
|
/**
|
||||||
|
* The item's variant.
|
||||||
|
*/
|
||||||
variant: {
|
variant: {
|
||||||
|
/**
|
||||||
|
* The variant's ID.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* The variant's weight.
|
||||||
|
*/
|
||||||
weight: number
|
weight: number
|
||||||
|
/**
|
||||||
|
* The variant's length.
|
||||||
|
*/
|
||||||
length: number
|
length: number
|
||||||
|
/**
|
||||||
|
* The variant's height.
|
||||||
|
*/
|
||||||
height: number
|
height: number
|
||||||
|
/**
|
||||||
|
* The variant's width.
|
||||||
|
*/
|
||||||
width: number
|
width: number
|
||||||
|
/**
|
||||||
|
* The variant's material.
|
||||||
|
*/
|
||||||
material: string
|
material: string
|
||||||
|
/**
|
||||||
|
* The variant's associated product.
|
||||||
|
*/
|
||||||
product: {
|
product: {
|
||||||
|
/**
|
||||||
|
* The product's ID.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* The item's product.
|
||||||
|
*/
|
||||||
product: {
|
product: {
|
||||||
|
/**
|
||||||
|
* The product's ID.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
|
/**
|
||||||
|
* The ID of the collection that the product belongs to.
|
||||||
|
*/
|
||||||
collection_id: string
|
collection_id: string
|
||||||
|
/**
|
||||||
|
* The product's categories.
|
||||||
|
*/
|
||||||
categories: {
|
categories: {
|
||||||
|
/**
|
||||||
|
* The category's ID.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
}[]
|
}[]
|
||||||
|
/**
|
||||||
|
* The product's tags.
|
||||||
|
*/
|
||||||
tags: {
|
tags: {
|
||||||
|
/**
|
||||||
|
* The tag's ID.
|
||||||
|
*/
|
||||||
id: string
|
id: string
|
||||||
}[]
|
}[]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ export type CalculatedShippingOptionPrice = {
|
|||||||
is_calculated_price_tax_inclusive: boolean
|
is_calculated_price_tax_inclusive: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The context for validating fulfillment data.
|
||||||
|
*/
|
||||||
export type ValidateFulfillmentDataContext = CartPropsForFulfillment & {
|
export type ValidateFulfillmentDataContext = CartPropsForFulfillment & {
|
||||||
/**
|
/**
|
||||||
* Details about the location that items are being shipped from.
|
* Details about the location that items are being shipped from.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { CalculatedShippingOptionPrice, StockLocationAddressDTO } from ".."
|
||||||
|
import { ShippingOptionPriceType, ShippingOptionTypeDTO } from "./common"
|
||||||
import {
|
import {
|
||||||
CreateShippingOptionRuleDTO,
|
CreateShippingOptionRuleDTO,
|
||||||
UpdateShippingOptionRuleDTO,
|
UpdateShippingOptionRuleDTO,
|
||||||
@@ -14,3 +16,212 @@ export type RemoveFulfillmentShippingOptionRulesWorkflowDTO = {
|
|||||||
export type UpdateFulfillmentShippingOptionRulesWorkflowDTO = {
|
export type UpdateFulfillmentShippingOptionRulesWorkflowDTO = {
|
||||||
data: UpdateShippingOptionRuleDTO[]
|
data: UpdateShippingOptionRuleDTO[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The context for retrieving the shipping options.
|
||||||
|
*/
|
||||||
|
export type ListShippingOptionsForCartWithPricingWorkflowInput = {
|
||||||
|
/**
|
||||||
|
* The cart's ID.
|
||||||
|
*/
|
||||||
|
cart_id: string
|
||||||
|
/**
|
||||||
|
* Specify the shipping options to retrieve their details and prices.
|
||||||
|
* If not provided, all applicable shipping options are retrieved.
|
||||||
|
*/
|
||||||
|
options?: {
|
||||||
|
/**
|
||||||
|
* The shipping option's ID.
|
||||||
|
*/
|
||||||
|
id: string;
|
||||||
|
/**
|
||||||
|
* Custom data relevant for the fulfillment provider that processes this shipping option.
|
||||||
|
* It can be data relevant to calculate the shipping option's price.
|
||||||
|
*
|
||||||
|
* Learn more in [this documentation](https://docs.medusajs.com/resources/commerce-modules/fulfillment/shipping-option#data-property).
|
||||||
|
*/
|
||||||
|
data?: Record<string, unknown>
|
||||||
|
}[]
|
||||||
|
/**
|
||||||
|
* Whether to retrieve return shipping options.
|
||||||
|
* By default, non-return shipping options are retrieved.
|
||||||
|
*
|
||||||
|
* @defaultValue false
|
||||||
|
*/
|
||||||
|
is_return?: boolean
|
||||||
|
/**
|
||||||
|
* Whether to retrieve the shipping option's enabled in the store, which is the default.
|
||||||
|
*
|
||||||
|
* @defaultValue true
|
||||||
|
*/
|
||||||
|
enabled_in_store?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The retrieved shipping options with prices.
|
||||||
|
*/
|
||||||
|
export type ListShippingOptionsForCartWithPricingWorkflowOutput = {
|
||||||
|
/**
|
||||||
|
* The shipping option's ID.
|
||||||
|
*/
|
||||||
|
id: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the shipping option.
|
||||||
|
*/
|
||||||
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The shipping option's price type.
|
||||||
|
*/
|
||||||
|
price_type: ShippingOptionPriceType
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The associated service zone's ID.
|
||||||
|
*/
|
||||||
|
service_zone_id: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The service zone details.
|
||||||
|
*/
|
||||||
|
service_zone: {
|
||||||
|
/**
|
||||||
|
* The ID of the fulfillment set associated with the service zone.
|
||||||
|
*/
|
||||||
|
fulfillment_set_id: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ID of the associated shipping profile.
|
||||||
|
*/
|
||||||
|
shipping_profile_id: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ID of the associated fulfillment provider. It's used to calculate
|
||||||
|
* the shipping option's price, if it's price type is `calculated`, and later
|
||||||
|
* it processes shipments created from this shipping option.
|
||||||
|
*/
|
||||||
|
provider_id: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom additional data related to the shipping option, useful for the fulfillment provider
|
||||||
|
* to process the shipping option and calculate its price.
|
||||||
|
*
|
||||||
|
* Learn more in [this documentation](https://docs.medusajs.com/resources/commerce-modules/fulfillment/shipping-option#data-property).
|
||||||
|
*/
|
||||||
|
data: Record<string, unknown>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The shipping option's type.
|
||||||
|
*/
|
||||||
|
type: Omit<ShippingOptionTypeDTO, "shipping_option_id" | "shipping_option" | "created_at" | "updated_at" | "deleted_at">
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The associated fulfillment provider details.
|
||||||
|
*/
|
||||||
|
provider: {
|
||||||
|
/**
|
||||||
|
* The ID of the provider.
|
||||||
|
*/
|
||||||
|
id: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the provider is enabled.
|
||||||
|
*/
|
||||||
|
is_enabled: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The shipping option rules associated with the shipping option.
|
||||||
|
*/
|
||||||
|
rules: {
|
||||||
|
/**
|
||||||
|
* The name of a property or table that the rule applies to.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* customer_group
|
||||||
|
*/
|
||||||
|
attribute: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The value of the rule.
|
||||||
|
*/
|
||||||
|
value: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The operator of the rule.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* in
|
||||||
|
*/
|
||||||
|
operator: string
|
||||||
|
}[]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The amount for the shipping option, which can be flat rate or calculated.
|
||||||
|
*/
|
||||||
|
amount: number | undefined
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether taxes are included in the shipping option amount.
|
||||||
|
*/
|
||||||
|
is_tax_inclusive: boolean | undefined
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The calculated price for the shipping option, if its `price_type` is `calculated`.
|
||||||
|
*/
|
||||||
|
calculated_price?: CalculatedShippingOptionPrice
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The details of the associated stock location, which is set if the shipping option's `price_type` is `calculated`.
|
||||||
|
*/
|
||||||
|
stock_location?: {
|
||||||
|
/**
|
||||||
|
* The ID of the stock location.
|
||||||
|
*/
|
||||||
|
id: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the stock location.
|
||||||
|
*/
|
||||||
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The address of the stock location.
|
||||||
|
*/
|
||||||
|
address: StockLocationAddressDTO
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ID of the fulfillment set associated with the stock location.
|
||||||
|
*/
|
||||||
|
fulfillment_set_id: string
|
||||||
|
}
|
||||||
|
}[]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The context for retrieving the shipping options.
|
||||||
|
*/
|
||||||
|
export type ListShippingOptionsForCartWorkflowInput = {
|
||||||
|
/**
|
||||||
|
* The cart's ID.
|
||||||
|
*/
|
||||||
|
cart_id: string
|
||||||
|
/**
|
||||||
|
* Specify the shipping options to retrieve their details.
|
||||||
|
* If not specified, all applicable shipping options are retrieved.
|
||||||
|
*/
|
||||||
|
option_ids?: string[]
|
||||||
|
/**
|
||||||
|
* Whether to retrieve return shipping options.
|
||||||
|
* By default, non-return shipping options are retrieved.
|
||||||
|
*
|
||||||
|
* @defaultValue false
|
||||||
|
*/
|
||||||
|
is_return?: boolean
|
||||||
|
/**
|
||||||
|
* Whether to retrieve the shipping option's enabled in the store, which is the default.
|
||||||
|
*
|
||||||
|
* @defaultValue true
|
||||||
|
*/
|
||||||
|
enabled_in_store?: boolean
|
||||||
|
}
|
||||||
Reference in new issue
Block a user