@payloadcms/plugin-ecommerce 3.71.0-internal.727c7a4 → 3.71.0-internal.e36f916

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,6 +21,7 @@ export declare function useCart<T extends CartsCollection>(): {
21
21
  decrementItem: (item: DefaultDocumentIDType) => Promise<void>;
22
22
  incrementItem: (item: DefaultDocumentIDType) => Promise<void>;
23
23
  isLoading: boolean;
24
+ refreshCart: () => Promise<void>;
24
25
  removeItem: (item: DefaultDocumentIDType) => Promise<void>;
25
26
  };
26
27
  export declare const usePayments: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/provider/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAa,MAAM,SAAS,CAAA;AAI/D,OAAO,KASN,MAAM,OAAO,CAAA;AAEd,OAAO,KAAK,EACV,mBAAmB,EAEnB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAwC7B,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA80BpD,CAAA;AAED,eAAO,MAAM,YAAY,4BAQxB,CAAA;AAED,eAAO,MAAM,WAAW;;6BAIX,IAAI,GAAG,MAAM,YAAY;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,KAAG,MAAM;;;CAkCrE,CAAA;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,eAAe;;;;;UAU/B,CAAC;;;;;;EAOlB;AAED,eAAO,MAAM,WAAW;;;;;;;;;;CASvB,CAAA;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,mBAAmB;eAOvB,CAAC,EAAE;;;;;;;;;;EACrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/provider/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAa,MAAM,SAAS,CAAA;AAI/D,OAAO,KASN,MAAM,OAAO,CAAA;AAEd,OAAO,KAAK,EACV,mBAAmB,EAEnB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAyC7B,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAu1BpD,CAAA;AAED,eAAO,MAAM,YAAY,4BAQxB,CAAA;AAED,eAAO,MAAM,WAAW;;6BAIX,IAAI,GAAG,MAAM,YAAY;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,KAAG,MAAM;;;CAkCrE,CAAA;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,eAAe;;;;;UAkB/B,CAAC;;;;;;;EAQlB;AAED,eAAO,MAAM,WAAW;;;;;;;;;;CASvB,CAAA;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,mBAAmB;eAOvB,CAAC,EAAE;;;;;;;;;;EACrC"}
@@ -30,6 +30,7 @@ const defaultContext = {
30
30
  initiatePayment: async ()=>{},
31
31
  isLoading: false,
32
32
  paymentMethods: [],
33
+ refreshCart: async ()=>{},
33
34
  removeItem: async ()=>{},
34
35
  setCurrency: ()=>{},
35
36
  updateAddress: async ()=>{}
@@ -191,6 +192,16 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
191
192
  cartsSlug,
192
193
  cartSecret
193
194
  ]);
195
+ const refreshCart = useCallback(async ()=>{
196
+ if (!cartID) {
197
+ return;
198
+ }
199
+ const updatedCart = await getCart(cartID);
200
+ setCart(updatedCart);
201
+ }, [
202
+ cartID,
203
+ getCart
204
+ ]);
194
205
  const deleteCart = useCallback(async (cartID)=>{
195
206
  // Build query params with secret if provided
196
207
  const queryParams = cartSecret ? {
@@ -806,6 +817,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
806
817
  initiatePayment,
807
818
  isLoading,
808
819
  paymentMethods,
820
+ refreshCart,
809
821
  removeItem,
810
822
  selectedPaymentMethod,
811
823
  setCurrency,
@@ -852,7 +864,7 @@ export const useCurrency = ()=>{
852
864
  };
853
865
  };
854
866
  export function useCart() {
855
- const { addItem, cart, clearCart, decrementItem, incrementItem, isLoading, removeItem } = useEcommerce();
867
+ const { addItem, cart, clearCart, decrementItem, incrementItem, isLoading, refreshCart, removeItem } = useEcommerce();
856
868
  if (!addItem) {
857
869
  throw new Error('useCart must be used within an EcommerceProvider');
858
870
  }
@@ -863,6 +875,7 @@ export function useCart() {
863
875
  decrementItem,
864
876
  incrementItem,
865
877
  isLoading,
878
+ refreshCart,
866
879
  removeItem
867
880
  };
868
881
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/react/provider/index.tsx"],"sourcesContent":["'use client'\nimport type { DefaultDocumentIDType, TypedUser } from 'payload'\n\nimport { deepMergeSimple, formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, {\n createContext,\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n} from 'react'\n\nimport type {\n AddressesCollection,\n CartItem,\n CartsCollection,\n ContextProps,\n Currency,\n EcommerceContextType,\n} from '../../types/index.js'\n\nconst defaultContext: EcommerceContextType = {\n addItem: async () => {},\n clearCart: async () => {},\n confirmOrder: async () => {},\n createAddress: async () => {},\n currenciesConfig: {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n currency: {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n decrementItem: async () => {},\n incrementItem: async () => {},\n initiatePayment: async () => {},\n isLoading: false,\n paymentMethods: [],\n removeItem: async () => {},\n setCurrency: () => {},\n updateAddress: async () => {},\n}\n\nconst EcommerceContext = createContext<EcommerceContextType>(defaultContext)\n\nconst defaultLocalStorage = {\n key: 'cart',\n}\n\nexport const EcommerceProvider: React.FC<ContextProps> = ({\n addressesSlug = 'addresses',\n api,\n cartsSlug = 'carts',\n children,\n currenciesConfig = {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n customersSlug = 'users',\n debug = false,\n paymentMethods = [],\n syncLocalStorage = true,\n}) => {\n const localStorageConfig =\n syncLocalStorage && typeof syncLocalStorage === 'object'\n ? {\n ...defaultLocalStorage,\n ...syncLocalStorage,\n }\n : defaultLocalStorage\n\n const { apiRoute = '/api', cartsFetchQuery = {} } = api || {}\n const baseAPIURL = formatAdminURL({\n apiRoute,\n path: '',\n })\n\n const [isLoading, startTransition] = useTransition()\n\n const [user, setUser] = useState<null | TypedUser>(null)\n\n const [addresses, setAddresses] = useState<AddressesCollection[]>()\n\n const hasRendered = useRef(false)\n\n /**\n * The ID of the cart associated with the current session.\n * This is used to identify the cart in the database or local storage.\n * It can be null if no cart has been created yet.\n */\n const [cartID, setCartID] = useState<DefaultDocumentIDType>()\n /**\n * The secret for accessing guest carts without authentication.\n * This is generated when a guest user creates a cart.\n */\n const [cartSecret, setCartSecret] = useState<string | undefined>(undefined)\n const [cart, setCart] = useState<CartsCollection>()\n\n const [selectedCurrency, setSelectedCurrency] = useState<Currency>(\n () =>\n currenciesConfig.supportedCurrencies.find(\n (c) => c.code === currenciesConfig.defaultCurrency,\n )!,\n )\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<null | string>(null)\n\n const cartQuery = useMemo(() => {\n const priceField = `priceIn${selectedCurrency.code}`\n\n const baseQuery = {\n depth: 0,\n populate: {\n products: {\n [priceField]: true,\n },\n variants: {\n options: true,\n [priceField]: true,\n },\n },\n select: {\n items: true,\n subtotal: true,\n },\n }\n\n return deepMergeSimple(baseQuery, cartsFetchQuery)\n }, [selectedCurrency.code, cartsFetchQuery])\n\n const createCart = useCallback(\n async (initialData: Record<string, unknown>) => {\n const query = qs.stringify(cartQuery)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}?${query}`, {\n body: JSON.stringify({\n ...initialData,\n currency: selectedCurrency.code,\n customer: user?.id,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to create cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart creation error: ${data.error}`)\n }\n\n // Store the secret for guest cart access\n if (!user && data.doc?.secret) {\n setCartSecret(data.doc.secret)\n }\n\n return data.doc as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug, selectedCurrency.code, user],\n )\n\n const getCart = useCallback(\n async (cartID: DefaultDocumentIDType, options?: { secret?: string }) => {\n const secret = options?.secret\n\n // Build query params with secret if provided\n const queryParams = {\n ...cartQuery,\n ...(secret ? { secret } : {}),\n }\n const query = qs.stringify(queryParams)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart fetch error: ${data.error}`)\n }\n\n return data as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug],\n )\n\n const updateCart = useCallback(\n async (cartID: DefaultDocumentIDType, data: Partial<CartsCollection>) => {\n // Build query params with secret if provided\n const queryParams = {\n ...cartQuery,\n ...(cartSecret ? { secret: cartSecret } : {}),\n }\n const query = qs.stringify(queryParams)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {\n body: JSON.stringify(data),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update cart: ${errorText}`)\n }\n\n const updatedCart = await response.json()\n\n setCart(updatedCart.doc as CartsCollection)\n },\n [baseAPIURL, cartQuery, cartsSlug, cartSecret],\n )\n\n const deleteCart = useCallback(\n async (cartID: DefaultDocumentIDType) => {\n // Build query params with secret if provided\n const queryParams = cartSecret ? { secret: cartSecret } : {}\n const query = qs.stringify(queryParams)\n const url = `${baseAPIURL}/${cartsSlug}/${cartID}${query ? `?${query}` : ''}`\n\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to delete cart: ${errorText}`)\n }\n\n setCart(undefined)\n setCartID(undefined)\n setCartSecret(undefined)\n },\n [baseAPIURL, cartsSlug, cartSecret],\n )\n\n // Persist cart ID and secret to localStorage\n useEffect(() => {\n if (hasRendered.current) {\n if (syncLocalStorage) {\n if (cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n } else {\n localStorage.removeItem(localStorageConfig.key)\n }\n\n if (cartSecret) {\n localStorage.setItem(`${localStorageConfig.key}_secret`, cartSecret)\n } else {\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n }\n }\n }, [cartID, cartSecret, localStorageConfig.key, syncLocalStorage])\n\n const addItem: EcommerceContextType['addItem'] = useCallback(\n async (item, quantity = 1) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (cartID) {\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n\n setCartID(undefined)\n setCart(undefined)\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => {\n const productID =\n typeof cartItem.product === 'object' ? cartItem.product.id : item.product\n const variantID =\n cartItem.variant && typeof cartItem.variant === 'object'\n ? cartItem.variant.id\n : item.variant\n\n return (\n productID === item.product &&\n (item.variant && variantID ? variantID === item.variant : true)\n )\n }) ?? -1\n\n let updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, update its quantity\n updatedItems[existingItemIndex].quantity =\n updatedItems[existingItemIndex].quantity + quantity\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If the item does not exist, add it to the cart\n updatedItems = [...(existingCart.items ?? []), { ...item, quantity }]\n }\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If no cartID exists, create a new cart\n const newCart = await createCart({ items: [{ ...item, quantity }] })\n\n setCartID(newCart.id)\n setCart(newCart)\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, createCart, getCart, startTransition, updateCart],\n )\n\n const removeItem: EcommerceContextType['removeItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n if (existingItemIndex !== -1) {\n // If the item exists, remove it from the cart\n const updatedItems = existingCart.items ? [...existingCart.items] : []\n updatedItems.splice(existingItemIndex, 1)\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const incrementItem: EcommerceContextType['incrementItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n let updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, increment its quantity\n updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity + 1 // Increment by 1\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If the item does not exist, add it to the cart with quantity 1\n updatedItems = [...(existingCart.items ?? []), { product: targetID, quantity: 1 }]\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const decrementItem: EcommerceContextType['decrementItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n const updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, decrement its quantity\n updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity - 1 // Decrement by 1\n\n // If the quantity reaches 0, remove the item from the cart\n if (updatedItems[existingItemIndex].quantity <= 0) {\n updatedItems.splice(existingItemIndex, 1)\n }\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const clearCart: EcommerceContextType['clearCart'] = useCallback(async () => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (cartID) {\n await deleteCart(cartID)\n }\n resolve()\n })\n })\n }, [cartID, deleteCart, startTransition])\n\n const setCurrency: EcommerceContextType['setCurrency'] = useCallback(\n (currency) => {\n if (selectedCurrency.code === currency) {\n return\n }\n\n const foundCurrency = currenciesConfig.supportedCurrencies.find((c) => c.code === currency)\n if (!foundCurrency) {\n throw new Error(`Currency with code \"${currency}\" not found in config`)\n }\n\n setSelectedCurrency(foundCurrency)\n },\n [currenciesConfig.supportedCurrencies, selectedCurrency.code],\n )\n\n const initiatePayment = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n const paymentMethod = paymentMethods.find((method) => method.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (!cartID) {\n throw new Error(`No cart is provided.`)\n }\n\n setSelectedPaymentMethod(paymentMethodID)\n\n if (paymentMethod.initiatePayment) {\n const fetchURL = `${baseAPIURL}/payments/${paymentMethodID}/initiate`\n\n const data = {\n cartID,\n currency: selectedCurrency.code,\n }\n\n try {\n const response = await fetch(fetchURL, {\n body: JSON.stringify({\n ...data,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error initiating payment:', error)\n }\n throw new Error(error instanceof Error ? error.message : 'Failed to initiate payment')\n }\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support payment initiation`)\n }\n },\n [baseAPIURL, cartID, debug, paymentMethods, selectedCurrency.code],\n )\n\n const confirmOrder = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n if (!cartID) {\n throw new Error(`Cart is empty.`)\n }\n\n const paymentMethod = paymentMethods.find((pm) => pm.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (paymentMethod.confirmOrder) {\n const fetchURL = `${baseAPIURL}/payments/${paymentMethodID}/confirm-order`\n\n const data = {\n cartID,\n currency: selectedCurrency.code,\n }\n\n const response = await fetch(fetchURL, {\n body: JSON.stringify({\n ...data,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support order confirmation`)\n }\n },\n [baseAPIURL, cartID, paymentMethods, selectedCurrency.code],\n )\n\n const getUser = useCallback(async () => {\n try {\n const query = qs.stringify({\n depth: 0,\n select: {\n id: true,\n carts: true,\n },\n })\n\n const response = await fetch(`${baseAPIURL}/${customersSlug}/me?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch user: ${errorText}`)\n }\n\n const userData = await response.json()\n\n if (userData.error) {\n throw new Error(`User fetch error: ${userData.error}`)\n }\n\n if (userData.user) {\n setUser(userData.user as TypedUser)\n return userData.user as TypedUser\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user:', error)\n }\n setUser(null)\n throw new Error(\n `Failed to fetch user: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [baseAPIURL, customersSlug, debug])\n\n const getAddresses = useCallback(async () => {\n if (!user) {\n return\n }\n\n try {\n const query = qs.stringify({\n depth: 0,\n limit: 0,\n pagination: false,\n })\n\n const response = await fetch(`${baseAPIURL}/${addressesSlug}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n\n throw new Error(errorText)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address fetch error: ${data.error}`)\n }\n\n if (data.docs && data.docs.length > 0) {\n setAddresses(data.docs)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching addresses:', error)\n }\n setAddresses(undefined)\n throw new Error(\n `Failed to fetch addresses: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [user, baseAPIURL, addressesSlug, debug])\n\n const updateAddress = useCallback<EcommerceContextType['updateAddress']>(\n async (addressID, address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}/${addressID}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n const createAddress = useCallback<EcommerceContextType['createAddress']>(\n async (address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n // If localStorage is enabled, restore cart from storage\n useEffect(() => {\n if (!hasRendered.current) {\n if (syncLocalStorage) {\n const storedCartID = localStorage.getItem(localStorageConfig.key)\n const storedSecret = localStorage.getItem(`${localStorageConfig.key}_secret`)\n\n if (storedCartID) {\n getCart(storedCartID, { secret: storedSecret || undefined })\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(storedCartID as DefaultDocumentIDType)\n if (storedSecret) {\n setCartSecret(storedSecret)\n }\n })\n .catch((_) => {\n // console.error('Error fetching cart from localStorage:', error)\n // If there's an error fetching the cart, clear it from localStorage\n localStorage.removeItem(localStorageConfig.key)\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n })\n }\n }\n\n hasRendered.current = true\n\n void getUser().then((user) => {\n if (user && user.cart?.docs && user.cart.docs.length > 0) {\n // If the user has carts, we can set the cartID to the first cart\n const cartID =\n typeof user.cart.docs[0] === 'object' ? user.cart.docs[0].id : user.cart.docs[0]\n\n if (cartID) {\n getCart(cartID)\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(cartID)\n })\n .catch((error) => {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user cart:', error)\n }\n\n setCart(undefined)\n setCartID(undefined)\n\n throw new Error(`Failed to fetch user cart: ${error.message}`)\n })\n }\n }\n })\n }\n }, [debug, getAddresses, getCart, getUser, localStorageConfig.key, syncLocalStorage])\n\n useEffect(() => {\n if (user) {\n // If the user is logged in, fetch their addresses\n void getAddresses()\n } else {\n // If no user is logged in, clear addresses\n setAddresses(undefined)\n }\n }, [getAddresses, user])\n\n return (\n <EcommerceContext\n value={{\n addItem,\n addresses,\n cart,\n clearCart,\n confirmOrder,\n createAddress,\n currenciesConfig,\n currency: selectedCurrency,\n decrementItem,\n incrementItem,\n initiatePayment,\n isLoading,\n paymentMethods,\n removeItem,\n selectedPaymentMethod,\n setCurrency,\n updateAddress,\n }}\n >\n {children}\n </EcommerceContext>\n )\n}\n\nexport const useEcommerce = () => {\n const context = use(EcommerceContext)\n\n if (!context) {\n throw new Error('useEcommerce must be used within an EcommerceProvider')\n }\n\n return context\n}\n\nexport const useCurrency = () => {\n const { currenciesConfig, currency, setCurrency } = useEcommerce()\n\n const formatCurrency = useCallback(\n (value?: null | number, options?: { currency?: Currency }): string => {\n if (value === undefined || value === null) {\n return ''\n }\n\n const currencyToUse = options?.currency || currency\n\n if (!currencyToUse) {\n return value.toString()\n }\n\n if (value === 0) {\n return `${currencyToUse.symbol}0.${'0'.repeat(currencyToUse.decimals)}`\n }\n\n // Convert from base value (e.g., cents) to decimal value (e.g., dollars)\n const decimalValue = value / Math.pow(10, currencyToUse.decimals)\n\n // Format with the correct number of decimal places\n return `${currencyToUse.symbol}${decimalValue.toFixed(currencyToUse.decimals)}`\n },\n [currency],\n )\n\n if (!currency) {\n throw new Error('useCurrency must be used within an EcommerceProvider')\n }\n\n return {\n currency,\n formatCurrency,\n setCurrency,\n supportedCurrencies: currenciesConfig.supportedCurrencies,\n }\n}\n\nexport function useCart<T extends CartsCollection>() {\n const { addItem, cart, clearCart, decrementItem, incrementItem, isLoading, removeItem } =\n useEcommerce()\n\n if (!addItem) {\n throw new Error('useCart must be used within an EcommerceProvider')\n }\n\n return {\n addItem,\n cart: cart as T,\n clearCart,\n decrementItem,\n incrementItem,\n isLoading,\n removeItem,\n }\n}\n\nexport const usePayments = () => {\n const { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod } =\n useEcommerce()\n\n if (!initiatePayment) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod }\n}\n\nexport function useAddresses<T extends AddressesCollection>() {\n const { addresses, createAddress, isLoading, updateAddress } = useEcommerce()\n\n if (!createAddress) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { addresses: addresses as T[], createAddress, isLoading, updateAddress }\n}\n"],"names":["deepMergeSimple","formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","useTransition","defaultContext","addItem","clearCart","confirmOrder","createAddress","currenciesConfig","defaultCurrency","supportedCurrencies","code","decimals","label","symbol","currency","decrementItem","incrementItem","initiatePayment","isLoading","paymentMethods","removeItem","setCurrency","updateAddress","EcommerceContext","defaultLocalStorage","key","EcommerceProvider","addressesSlug","api","cartsSlug","children","customersSlug","debug","syncLocalStorage","localStorageConfig","apiRoute","cartsFetchQuery","baseAPIURL","path","startTransition","user","setUser","addresses","setAddresses","hasRendered","cartID","setCartID","cartSecret","setCartSecret","undefined","cart","setCart","selectedCurrency","setSelectedCurrency","find","c","selectedPaymentMethod","setSelectedPaymentMethod","cartQuery","priceField","baseQuery","depth","populate","products","variants","options","select","items","subtotal","createCart","initialData","query","stringify","response","fetch","body","JSON","customer","id","credentials","headers","method","ok","errorText","text","Error","data","json","error","doc","secret","getCart","queryParams","updateCart","updatedCart","deleteCart","url","current","localStorage","setItem","item","quantity","Promise","resolve","existingCart","existingItemIndex","findIndex","cartItem","productID","product","variantID","variant","updatedItems","newCart","targetID","splice","foundCurrency","paymentMethodID","paymentMethod","name","fetchURL","additionalData","responseError","responseData","console","message","pm","getUser","carts","userData","getAddresses","limit","pagination","docs","length","addressID","address","storedCartID","getItem","storedSecret","then","fetchedCart","catch","_","value","useEcommerce","context","useCurrency","formatCurrency","currencyToUse","toString","repeat","decimalValue","Math","pow","toFixed","useCart","usePayments","useAddresses"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/react/provider/index.tsx"],"sourcesContent":["'use client'\nimport type { DefaultDocumentIDType, TypedUser } from 'payload'\n\nimport { deepMergeSimple, formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, {\n createContext,\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n} from 'react'\n\nimport type {\n AddressesCollection,\n CartItem,\n CartsCollection,\n ContextProps,\n Currency,\n EcommerceContextType,\n} from '../../types/index.js'\n\nconst defaultContext: EcommerceContextType = {\n addItem: async () => {},\n clearCart: async () => {},\n confirmOrder: async () => {},\n createAddress: async () => {},\n currenciesConfig: {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n currency: {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n decrementItem: async () => {},\n incrementItem: async () => {},\n initiatePayment: async () => {},\n isLoading: false,\n paymentMethods: [],\n refreshCart: async () => {},\n removeItem: async () => {},\n setCurrency: () => {},\n updateAddress: async () => {},\n}\n\nconst EcommerceContext = createContext<EcommerceContextType>(defaultContext)\n\nconst defaultLocalStorage = {\n key: 'cart',\n}\n\nexport const EcommerceProvider: React.FC<ContextProps> = ({\n addressesSlug = 'addresses',\n api,\n cartsSlug = 'carts',\n children,\n currenciesConfig = {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n customersSlug = 'users',\n debug = false,\n paymentMethods = [],\n syncLocalStorage = true,\n}) => {\n const localStorageConfig =\n syncLocalStorage && typeof syncLocalStorage === 'object'\n ? {\n ...defaultLocalStorage,\n ...syncLocalStorage,\n }\n : defaultLocalStorage\n\n const { apiRoute = '/api', cartsFetchQuery = {} } = api || {}\n const baseAPIURL = formatAdminURL({\n apiRoute,\n path: '',\n })\n\n const [isLoading, startTransition] = useTransition()\n\n const [user, setUser] = useState<null | TypedUser>(null)\n\n const [addresses, setAddresses] = useState<AddressesCollection[]>()\n\n const hasRendered = useRef(false)\n\n /**\n * The ID of the cart associated with the current session.\n * This is used to identify the cart in the database or local storage.\n * It can be null if no cart has been created yet.\n */\n const [cartID, setCartID] = useState<DefaultDocumentIDType>()\n /**\n * The secret for accessing guest carts without authentication.\n * This is generated when a guest user creates a cart.\n */\n const [cartSecret, setCartSecret] = useState<string | undefined>(undefined)\n const [cart, setCart] = useState<CartsCollection>()\n\n const [selectedCurrency, setSelectedCurrency] = useState<Currency>(\n () =>\n currenciesConfig.supportedCurrencies.find(\n (c) => c.code === currenciesConfig.defaultCurrency,\n )!,\n )\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<null | string>(null)\n\n const cartQuery = useMemo(() => {\n const priceField = `priceIn${selectedCurrency.code}`\n\n const baseQuery = {\n depth: 0,\n populate: {\n products: {\n [priceField]: true,\n },\n variants: {\n options: true,\n [priceField]: true,\n },\n },\n select: {\n items: true,\n subtotal: true,\n },\n }\n\n return deepMergeSimple(baseQuery, cartsFetchQuery)\n }, [selectedCurrency.code, cartsFetchQuery])\n\n const createCart = useCallback(\n async (initialData: Record<string, unknown>) => {\n const query = qs.stringify(cartQuery)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}?${query}`, {\n body: JSON.stringify({\n ...initialData,\n currency: selectedCurrency.code,\n customer: user?.id,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to create cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart creation error: ${data.error}`)\n }\n\n // Store the secret for guest cart access\n if (!user && data.doc?.secret) {\n setCartSecret(data.doc.secret)\n }\n\n return data.doc as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug, selectedCurrency.code, user],\n )\n\n const getCart = useCallback(\n async (cartID: DefaultDocumentIDType, options?: { secret?: string }) => {\n const secret = options?.secret\n\n // Build query params with secret if provided\n const queryParams = {\n ...cartQuery,\n ...(secret ? { secret } : {}),\n }\n const query = qs.stringify(queryParams)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart fetch error: ${data.error}`)\n }\n\n return data as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug],\n )\n\n const updateCart = useCallback(\n async (cartID: DefaultDocumentIDType, data: Partial<CartsCollection>) => {\n // Build query params with secret if provided\n const queryParams = {\n ...cartQuery,\n ...(cartSecret ? { secret: cartSecret } : {}),\n }\n const query = qs.stringify(queryParams)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {\n body: JSON.stringify(data),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update cart: ${errorText}`)\n }\n\n const updatedCart = await response.json()\n\n setCart(updatedCart.doc as CartsCollection)\n },\n [baseAPIURL, cartQuery, cartsSlug, cartSecret],\n )\n\n const refreshCart = useCallback<EcommerceContextType['refreshCart']>(async () => {\n if (!cartID) {\n return\n }\n const updatedCart = await getCart(cartID)\n setCart(updatedCart)\n }, [cartID, getCart])\n\n const deleteCart = useCallback(\n async (cartID: DefaultDocumentIDType) => {\n // Build query params with secret if provided\n const queryParams = cartSecret ? { secret: cartSecret } : {}\n const query = qs.stringify(queryParams)\n const url = `${baseAPIURL}/${cartsSlug}/${cartID}${query ? `?${query}` : ''}`\n\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to delete cart: ${errorText}`)\n }\n\n setCart(undefined)\n setCartID(undefined)\n setCartSecret(undefined)\n },\n [baseAPIURL, cartsSlug, cartSecret],\n )\n\n // Persist cart ID and secret to localStorage\n useEffect(() => {\n if (hasRendered.current) {\n if (syncLocalStorage) {\n if (cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n } else {\n localStorage.removeItem(localStorageConfig.key)\n }\n\n if (cartSecret) {\n localStorage.setItem(`${localStorageConfig.key}_secret`, cartSecret)\n } else {\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n }\n }\n }, [cartID, cartSecret, localStorageConfig.key, syncLocalStorage])\n\n const addItem: EcommerceContextType['addItem'] = useCallback(\n async (item, quantity = 1) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (cartID) {\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n\n setCartID(undefined)\n setCart(undefined)\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => {\n const productID =\n typeof cartItem.product === 'object' ? cartItem.product.id : item.product\n const variantID =\n cartItem.variant && typeof cartItem.variant === 'object'\n ? cartItem.variant.id\n : item.variant\n\n return (\n productID === item.product &&\n (item.variant && variantID ? variantID === item.variant : true)\n )\n }) ?? -1\n\n let updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, update its quantity\n updatedItems[existingItemIndex].quantity =\n updatedItems[existingItemIndex].quantity + quantity\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If the item does not exist, add it to the cart\n updatedItems = [...(existingCart.items ?? []), { ...item, quantity }]\n }\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If no cartID exists, create a new cart\n const newCart = await createCart({ items: [{ ...item, quantity }] })\n\n setCartID(newCart.id)\n setCart(newCart)\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, createCart, getCart, startTransition, updateCart],\n )\n\n const removeItem: EcommerceContextType['removeItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n if (existingItemIndex !== -1) {\n // If the item exists, remove it from the cart\n const updatedItems = existingCart.items ? [...existingCart.items] : []\n updatedItems.splice(existingItemIndex, 1)\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const incrementItem: EcommerceContextType['incrementItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n let updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, increment its quantity\n updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity + 1 // Increment by 1\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If the item does not exist, add it to the cart with quantity 1\n updatedItems = [...(existingCart.items ?? []), { product: targetID, quantity: 1 }]\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const decrementItem: EcommerceContextType['decrementItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n const updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, decrement its quantity\n updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity - 1 // Decrement by 1\n\n // If the quantity reaches 0, remove the item from the cart\n if (updatedItems[existingItemIndex].quantity <= 0) {\n updatedItems.splice(existingItemIndex, 1)\n }\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const clearCart: EcommerceContextType['clearCart'] = useCallback(async () => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (cartID) {\n await deleteCart(cartID)\n }\n resolve()\n })\n })\n }, [cartID, deleteCart, startTransition])\n\n const setCurrency: EcommerceContextType['setCurrency'] = useCallback(\n (currency) => {\n if (selectedCurrency.code === currency) {\n return\n }\n\n const foundCurrency = currenciesConfig.supportedCurrencies.find((c) => c.code === currency)\n if (!foundCurrency) {\n throw new Error(`Currency with code \"${currency}\" not found in config`)\n }\n\n setSelectedCurrency(foundCurrency)\n },\n [currenciesConfig.supportedCurrencies, selectedCurrency.code],\n )\n\n const initiatePayment = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n const paymentMethod = paymentMethods.find((method) => method.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (!cartID) {\n throw new Error(`No cart is provided.`)\n }\n\n setSelectedPaymentMethod(paymentMethodID)\n\n if (paymentMethod.initiatePayment) {\n const fetchURL = `${baseAPIURL}/payments/${paymentMethodID}/initiate`\n\n const data = {\n cartID,\n currency: selectedCurrency.code,\n }\n\n try {\n const response = await fetch(fetchURL, {\n body: JSON.stringify({\n ...data,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error initiating payment:', error)\n }\n throw new Error(error instanceof Error ? error.message : 'Failed to initiate payment')\n }\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support payment initiation`)\n }\n },\n [baseAPIURL, cartID, debug, paymentMethods, selectedCurrency.code],\n )\n\n const confirmOrder = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n if (!cartID) {\n throw new Error(`Cart is empty.`)\n }\n\n const paymentMethod = paymentMethods.find((pm) => pm.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (paymentMethod.confirmOrder) {\n const fetchURL = `${baseAPIURL}/payments/${paymentMethodID}/confirm-order`\n\n const data = {\n cartID,\n currency: selectedCurrency.code,\n }\n\n const response = await fetch(fetchURL, {\n body: JSON.stringify({\n ...data,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support order confirmation`)\n }\n },\n [baseAPIURL, cartID, paymentMethods, selectedCurrency.code],\n )\n\n const getUser = useCallback(async () => {\n try {\n const query = qs.stringify({\n depth: 0,\n select: {\n id: true,\n carts: true,\n },\n })\n\n const response = await fetch(`${baseAPIURL}/${customersSlug}/me?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch user: ${errorText}`)\n }\n\n const userData = await response.json()\n\n if (userData.error) {\n throw new Error(`User fetch error: ${userData.error}`)\n }\n\n if (userData.user) {\n setUser(userData.user as TypedUser)\n return userData.user as TypedUser\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user:', error)\n }\n setUser(null)\n throw new Error(\n `Failed to fetch user: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [baseAPIURL, customersSlug, debug])\n\n const getAddresses = useCallback(async () => {\n if (!user) {\n return\n }\n\n try {\n const query = qs.stringify({\n depth: 0,\n limit: 0,\n pagination: false,\n })\n\n const response = await fetch(`${baseAPIURL}/${addressesSlug}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n\n throw new Error(errorText)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address fetch error: ${data.error}`)\n }\n\n if (data.docs && data.docs.length > 0) {\n setAddresses(data.docs)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching addresses:', error)\n }\n setAddresses(undefined)\n throw new Error(\n `Failed to fetch addresses: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [user, baseAPIURL, addressesSlug, debug])\n\n const updateAddress = useCallback<EcommerceContextType['updateAddress']>(\n async (addressID, address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}/${addressID}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n const createAddress = useCallback<EcommerceContextType['createAddress']>(\n async (address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n // If localStorage is enabled, restore cart from storage\n useEffect(() => {\n if (!hasRendered.current) {\n if (syncLocalStorage) {\n const storedCartID = localStorage.getItem(localStorageConfig.key)\n const storedSecret = localStorage.getItem(`${localStorageConfig.key}_secret`)\n\n if (storedCartID) {\n getCart(storedCartID, { secret: storedSecret || undefined })\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(storedCartID as DefaultDocumentIDType)\n if (storedSecret) {\n setCartSecret(storedSecret)\n }\n })\n .catch((_) => {\n // console.error('Error fetching cart from localStorage:', error)\n // If there's an error fetching the cart, clear it from localStorage\n localStorage.removeItem(localStorageConfig.key)\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n })\n }\n }\n\n hasRendered.current = true\n\n void getUser().then((user) => {\n if (user && user.cart?.docs && user.cart.docs.length > 0) {\n // If the user has carts, we can set the cartID to the first cart\n const cartID =\n typeof user.cart.docs[0] === 'object' ? user.cart.docs[0].id : user.cart.docs[0]\n\n if (cartID) {\n getCart(cartID)\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(cartID)\n })\n .catch((error) => {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user cart:', error)\n }\n\n setCart(undefined)\n setCartID(undefined)\n\n throw new Error(`Failed to fetch user cart: ${error.message}`)\n })\n }\n }\n })\n }\n }, [debug, getAddresses, getCart, getUser, localStorageConfig.key, syncLocalStorage])\n\n useEffect(() => {\n if (user) {\n // If the user is logged in, fetch their addresses\n void getAddresses()\n } else {\n // If no user is logged in, clear addresses\n setAddresses(undefined)\n }\n }, [getAddresses, user])\n\n return (\n <EcommerceContext\n value={{\n addItem,\n addresses,\n cart,\n clearCart,\n confirmOrder,\n createAddress,\n currenciesConfig,\n currency: selectedCurrency,\n decrementItem,\n incrementItem,\n initiatePayment,\n isLoading,\n paymentMethods,\n refreshCart,\n removeItem,\n selectedPaymentMethod,\n setCurrency,\n updateAddress,\n }}\n >\n {children}\n </EcommerceContext>\n )\n}\n\nexport const useEcommerce = () => {\n const context = use(EcommerceContext)\n\n if (!context) {\n throw new Error('useEcommerce must be used within an EcommerceProvider')\n }\n\n return context\n}\n\nexport const useCurrency = () => {\n const { currenciesConfig, currency, setCurrency } = useEcommerce()\n\n const formatCurrency = useCallback(\n (value?: null | number, options?: { currency?: Currency }): string => {\n if (value === undefined || value === null) {\n return ''\n }\n\n const currencyToUse = options?.currency || currency\n\n if (!currencyToUse) {\n return value.toString()\n }\n\n if (value === 0) {\n return `${currencyToUse.symbol}0.${'0'.repeat(currencyToUse.decimals)}`\n }\n\n // Convert from base value (e.g., cents) to decimal value (e.g., dollars)\n const decimalValue = value / Math.pow(10, currencyToUse.decimals)\n\n // Format with the correct number of decimal places\n return `${currencyToUse.symbol}${decimalValue.toFixed(currencyToUse.decimals)}`\n },\n [currency],\n )\n\n if (!currency) {\n throw new Error('useCurrency must be used within an EcommerceProvider')\n }\n\n return {\n currency,\n formatCurrency,\n setCurrency,\n supportedCurrencies: currenciesConfig.supportedCurrencies,\n }\n}\n\nexport function useCart<T extends CartsCollection>() {\n const {\n addItem,\n cart,\n clearCart,\n decrementItem,\n incrementItem,\n isLoading,\n refreshCart,\n removeItem,\n } = useEcommerce()\n\n if (!addItem) {\n throw new Error('useCart must be used within an EcommerceProvider')\n }\n\n return {\n addItem,\n cart: cart as T,\n clearCart,\n decrementItem,\n incrementItem,\n isLoading,\n refreshCart,\n removeItem,\n }\n}\n\nexport const usePayments = () => {\n const { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod } =\n useEcommerce()\n\n if (!initiatePayment) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod }\n}\n\nexport function useAddresses<T extends AddressesCollection>() {\n const { addresses, createAddress, isLoading, updateAddress } = useEcommerce()\n\n if (!createAddress) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { addresses: addresses as T[], createAddress, isLoading, updateAddress }\n}\n"],"names":["deepMergeSimple","formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","useTransition","defaultContext","addItem","clearCart","confirmOrder","createAddress","currenciesConfig","defaultCurrency","supportedCurrencies","code","decimals","label","symbol","currency","decrementItem","incrementItem","initiatePayment","isLoading","paymentMethods","refreshCart","removeItem","setCurrency","updateAddress","EcommerceContext","defaultLocalStorage","key","EcommerceProvider","addressesSlug","api","cartsSlug","children","customersSlug","debug","syncLocalStorage","localStorageConfig","apiRoute","cartsFetchQuery","baseAPIURL","path","startTransition","user","setUser","addresses","setAddresses","hasRendered","cartID","setCartID","cartSecret","setCartSecret","undefined","cart","setCart","selectedCurrency","setSelectedCurrency","find","c","selectedPaymentMethod","setSelectedPaymentMethod","cartQuery","priceField","baseQuery","depth","populate","products","variants","options","select","items","subtotal","createCart","initialData","query","stringify","response","fetch","body","JSON","customer","id","credentials","headers","method","ok","errorText","text","Error","data","json","error","doc","secret","getCart","queryParams","updateCart","updatedCart","deleteCart","url","current","localStorage","setItem","item","quantity","Promise","resolve","existingCart","existingItemIndex","findIndex","cartItem","productID","product","variantID","variant","updatedItems","newCart","targetID","splice","foundCurrency","paymentMethodID","paymentMethod","name","fetchURL","additionalData","responseError","responseData","console","message","pm","getUser","carts","userData","getAddresses","limit","pagination","docs","length","addressID","address","storedCartID","getItem","storedSecret","then","fetchedCart","catch","_","value","useEcommerce","context","useCurrency","formatCurrency","currencyToUse","toString","repeat","decimalValue","Math","pow","toFixed","useCart","usePayments","useAddresses"],"mappings":"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"}
@@ -828,6 +828,10 @@ export type EcommerceContextType<T extends EcommerceCollections = EcommerceColle
828
828
  */
829
829
  isLoading: boolean;
830
830
  paymentMethods: PaymentAdapterClient[];
831
+ /**
832
+ * Refresh the cart.
833
+ */
834
+ refreshCart: () => Promise<void>;
831
835
  /**
832
836
  * Remove an item from the cart by its index ID.
833
837
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["import type {\n Access,\n CollectionConfig,\n DefaultDocumentIDType,\n Endpoint,\n Field,\n FieldAccess,\n GroupField,\n PayloadRequest,\n PopulateType,\n SelectType,\n TypedCollection,\n Where,\n} from 'payload'\nimport type React from 'react'\n\nimport type { TypedEcommerce } from './utilities.js'\n\nexport type FieldsOverride = (args: { defaultFields: Field[] }) => Field[]\n\nexport type CollectionOverride = (args: {\n defaultCollection: CollectionConfig\n}) => CollectionConfig | Promise<CollectionConfig>\n\nexport type CartItem = {\n id: DefaultDocumentIDType\n product: DefaultDocumentIDType | TypedCollection['products']\n quantity: number\n variant?: DefaultDocumentIDType | TypedCollection['variants']\n}\n\ntype DefaultCartType = {\n currency?: string\n customer?: DefaultDocumentIDType | TypedCollection['customers']\n id: DefaultDocumentIDType\n items: CartItem[]\n subtotal?: number\n}\n\nexport type Cart = DefaultCartType\n\ntype InitiatePaymentReturnType = {\n /**\n * Allows for additional data to be returned, such as payment method specific data\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any\n message: string\n}\n\ntype InitiatePayment = (args: {\n /**\n * The slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n data: {\n /**\n * Billing address for the payment.\n */\n billingAddress: TypedCollection['addresses']\n /**\n * Cart items.\n */\n cart: Cart\n /**\n * Currency code to use for the payment.\n */\n currency: string\n customerEmail: string\n /**\n * Shipping address for the payment.\n */\n shippingAddress?: TypedCollection['addresses']\n }\n req: PayloadRequest\n /**\n * The slug of the transactions collection, defaults to 'transactions'.\n * For example, this is used to create a record of the payment intent in the transactions collection.\n */\n transactionsSlug: string\n}) => InitiatePaymentReturnType | Promise<InitiatePaymentReturnType>\n\ntype ConfirmOrderReturnType = {\n /**\n * Allows for additional data to be returned, such as payment method specific data\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any\n message: string\n orderID: DefaultDocumentIDType\n transactionID: DefaultDocumentIDType\n}\n\ntype ConfirmOrder = (args: {\n /**\n * The slug of the carts collection, defaults to 'carts'.\n * For example, this is used to retrieve the cart for the order.\n */\n cartsSlug?: string\n /**\n * The slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n /**\n * Data made available to the payment method when confirming an order. You should get the cart items from the transaction.\n */\n data: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any // Allows for additional data to be passed through, such as payment method specific data\n customerEmail?: string\n }\n /**\n * The slug of the orders collection, defaults to 'orders'.\n */\n ordersSlug?: string\n req: PayloadRequest\n /**\n * The slug of the transactions collection, defaults to 'transactions'.\n * For example, this is used to create a record of the payment intent in the transactions collection.\n */\n transactionsSlug?: string\n}) => ConfirmOrderReturnType | Promise<ConfirmOrderReturnType>\n\n/**\n * The full payment adapter config expected as part of the config for the Ecommerce plugin.\n *\n * You can insert this type directly or return it from a function constructing it.\n */\nexport type PaymentAdapter = {\n /**\n * The function that is called via the `/api/payments/{provider_name}/confirm-order` endpoint to confirm an order after a payment has been made.\n *\n * You should handle the order confirmation logic here.\n *\n * @example\n *\n * ```ts\n * const confirmOrder: ConfirmOrder = async ({ data: { customerEmail }, ordersSlug, req, transactionsSlug }) => {\n // Confirm the payment with Stripe or another payment provider here\n // Create an order in the orders collection here\n // Update the record of the payment intent in the transactions collection here\n return {\n message: 'Order confirmed successfully',\n orderID: 'order_123',\n transactionID: 'txn_123',\n // Include any additional data required for the payment method here\n }\n }\n * ```\n */\n confirmOrder: ConfirmOrder\n /**\n * An array of endpoints to be bootstrapped to Payload's API in order to support the payment method. All API paths are relative to `/api/payments/{provider_name}`.\n *\n * So for example, path `/webhooks` in the Stripe adapter becomes `/api/payments/stripe/webhooks`.\n *\n * @example '/webhooks'\n */\n endpoints?: Endpoint[]\n /**\n * A group configuration to be used in the admin interface to display the payment method.\n *\n * @example\n *\n * ```ts\n * const groupField: GroupField = {\n name: 'stripe',\n type: 'group',\n admin: {\n condition: (data) => data?.paymentMethod === 'stripe',\n },\n fields: [\n {\n name: 'stripeCustomerID',\n type: 'text',\n label: 'Stripe Customer ID',\n required: true,\n },\n {\n name: 'stripePaymentIntentID',\n type: 'text',\n label: 'Stripe PaymentIntent ID',\n required: true,\n },\n ],\n }\n * ```\n */\n group: GroupField\n /**\n * The function that is called via the `/api/payments/{provider_name}/initiate` endpoint to initiate a payment for an order.\n *\n * You should handle the payment initiation logic here.\n *\n * @example\n *\n * ```ts\n * const initiatePayment: InitiatePayment = async ({ data: { cart, currency, customerEmail, billingAddress, shippingAddress }, req, transactionsSlug }) => {\n // Create a payment intent with Stripe or another payment provider here\n // Create a record of the payment intent in the transactions collection here\n return {\n message: 'Payment initiated successfully',\n // Include any additional data required for the payment method here\n }\n }\n * ```\n */\n initiatePayment: InitiatePayment\n /**\n * The label of the payment method\n * @example\n * 'Bank Transfer'\n */\n label?: string\n /**\n * The name of the payment method\n * @example 'stripe'\n */\n name: string\n}\n\nexport type PaymentAdapterClient = {\n confirmOrder: boolean\n initiatePayment: boolean\n} & Pick<PaymentAdapter, 'label' | 'name'>\n\nexport type Currency = {\n /**\n * The ISO 4217 currency code\n * @example 'usd'\n */\n code: string\n /**\n * The number of decimal places the currency uses\n * @example 2\n */\n decimals: number\n /**\n * A user friendly name for the currency.\n *\n * @example 'US Dollar'\n */\n label: string\n /**\n * The symbol of the currency\n * @example '$'\n */\n symbol: string\n}\n\n/**\n * Commonly used arguments for a Payment Adapter function, it's use is entirely optional.\n */\nexport type PaymentAdapterArgs = {\n /**\n * Overrides the default fields of the collection. Affects the payment fields on collections such as transactions.\n */\n groupOverrides?: { fields?: FieldsOverride } & Partial<Omit<GroupField, 'fields'>>\n /**\n * The visually readable label for the payment method.\n * @example 'Bank Transfer'\n */\n label?: string\n}\n\n/**\n * Commonly used arguments for a Payment Adapter function, it's use is entirely optional.\n */\nexport type PaymentAdapterClientArgs = {\n /**\n * The visually readable label for the payment method.\n * @example 'Bank Transfer'\n */\n label?: string\n}\n\nexport type VariantsConfig = {\n /**\n * Override the default variants collection. If you override the collection, you should ensure it has the required fields for variants or re-use the default fields.\n *\n * @example\n *\n * ```ts\n * variants: {\n variantOptionsCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'customField',\n label: 'Custom Field',\n type: 'text',\n },\n ],\n })\n }\n ```\n */\n variantOptionsCollectionOverride?: CollectionOverride\n /**\n * Override the default variants collection. If you override the collection, you should ensure it has the required fields for variants or re-use the default fields.\n *\n * @example\n *\n * ```ts\n * variants: {\n variantsCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'customField',\n label: 'Custom Field',\n type: 'text',\n },\n ],\n })\n }\n ```\n */\n variantsCollectionOverride?: CollectionOverride\n /**\n * Override the default variants collection. If you override the collection, you should ensure it has the required fields for variants or re-use the default fields.\n *\n * @example\n *\n * ```ts\n * variants: {\n variantTypesCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'customField',\n label: 'Custom Field',\n type: 'text',\n },\n ],\n })\n }\n ```\n */\n variantTypesCollectionOverride?: CollectionOverride\n}\n\nexport type ProductsConfig = {\n /**\n * Override the default products collection. If you override the collection, you should ensure it has the required fields for products or re-use the default fields.\n *\n * @example\n *\n * ```ts\n products: {\n productsCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'notes',\n label: 'Notes',\n type: 'textarea',\n },\n ],\n })\n }\n ```\n */\n productsCollectionOverride?: CollectionOverride\n /**\n * Customise the validation used for checking products or variants before a transaction is created or a payment can be confirmed.\n */\n validation?: ProductsValidation\n /**\n * Enable variants and provide configuration for the variant collections.\n *\n * Defaults to true.\n */\n variants?: boolean | VariantsConfig\n}\n\nexport type OrdersConfig = {\n /**\n * Override the default orders collection. If you override the collection, you should ensure it has the required fields for orders or re-use the default fields.\n *\n * @example\n *\n * ```ts\n orders: {\n ordersCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'notes',\n label: 'Notes',\n type: 'textarea',\n },\n ],\n })\n }\n ```\n */\n ordersCollectionOverride?: CollectionOverride\n}\n\nexport type TransactionsConfig = {\n /**\n * Override the default transactions collection. If you override the collection, you should ensure it has the required fields for transactions or re-use the default fields.\n *\n * @example\n *\n * ```ts\n transactions: {\n transactionsCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'notes',\n label: 'Notes',\n type: 'textarea',\n },\n ],\n })\n }\n ```\n */\n transactionsCollectionOverride?: CollectionOverride\n}\n\nexport type CustomQuery = {\n depth?: number\n select?: SelectType\n where?: Where\n}\n\nexport type PaymentsConfig = {\n paymentMethods?: PaymentAdapter[]\n productsQuery?: CustomQuery\n variantsQuery?: CustomQuery\n}\n\nexport type CountryType = {\n /**\n * A user friendly name for the country.\n */\n label: string\n /**\n * The ISO 3166-1 alpha-2 country code.\n * @example 'US'\n */\n value: string\n}\n\n/**\n * Configuration for the addresses used by the Ecommerce plugin. Use this to override the default collection or fields used throughout\n */\ntype AddressesConfig = {\n /**\n * Override the default addresses collection. If you override the collection, you should ensure it has the required fields for addresses or re-use the default fields.\n *\n * @example\n * ```ts\n * addressesCollectionOverride: (defaultCollection) => {\n * return {\n * ...defaultCollection,\n * fields: [\n * ...defaultCollection.fields,\n * // add custom fields here\n * ],\n * }\n * }\n * ```\n */\n addressesCollectionOverride?: CollectionOverride\n /**\n * These fields will be applied to all locations where addresses are used, such as Orders and Transactions. Preferred use over the collectionOverride config.\n */\n addressFields?: FieldsOverride\n /**\n * Provide an array of countries to support for addresses. This will be used in the admin interface to provide a select field of countries.\n *\n * Defaults to a set of commonly used countries.\n *\n * @example\n * ```\n * [\n { label: 'United States', value: 'US' },\n { label: 'Canada', value: 'CA' },\n ]\n */\n supportedCountries?: CountryType[]\n}\n\nexport type CustomersConfig = {\n /**\n * Slug of the customers collection, defaults to 'users'.\n * This is used to link carts and orders to customers.\n */\n slug: string\n}\n\nexport type CartsConfig = {\n /**\n * Allow guest (unauthenticated) users to create carts.\n * When enabled, guests can create carts without being logged in.\n * Defaults to true.\n */\n allowGuestCarts?: boolean\n cartsCollectionOverride?: CollectionOverride\n}\n\nexport type InventoryConfig = {\n /**\n * Override the default field used to track inventory levels. Defaults to 'inventory'.\n */\n fieldName?: string\n}\n\nexport type CurrenciesConfig = {\n /**\n * Defaults to the first supported currency.\n *\n * @example 'USD'\n */\n defaultCurrency: string\n /**\n *\n */\n supportedCurrencies: Currency[]\n}\n\n/**\n * A function that validates a product or variant before a transaction is created or completed.\n * This should throw an error if validation fails as it will be caught by the function calling it.\n */\nexport type ProductsValidation = (args: {\n /**\n * The full currencies config, allowing you to check against supported currencies and their settings.\n */\n currenciesConfig?: CurrenciesConfig\n /**\n * The ISO 4217 currency code being usen in this transaction.\n */\n currency?: string\n /**\n * The full product data.\n */\n product: TypedCollection['products']\n /**\n * Quantity to check the inventory amount against.\n */\n quantity: number\n /**\n * The full variant data, if a variant was selected for the product otherwise it will be undefined.\n */\n variant?: TypedCollection['variants']\n}) => Promise<void> | void\n\n/**\n * A map of collection slugs used by the Ecommerce plugin.\n * Provides an easy way to track the slugs of collections even when they are overridden.\n */\nexport type CollectionSlugMap = {\n addresses: string\n carts: string\n customers: string\n orders: string\n products: string\n transactions: string\n variantOptions: string\n variants: string\n variantTypes: string\n}\n\n/**\n * Access control functions used throughout the Ecommerce plugin.\n * Provide atomic access functions that can be composed using or, and, conditional utilities.\n *\n * @example\n * ```ts\n * access: {\n * isAdmin: ({ req }) => checkRole(['admin'], req.user),\n * isAuthenticated: ({ req }) => !!req.user,\n * isDocumentOwner: ({ req }) => {\n * if (!req.user) return false\n * return { customer: { equals: req.user.id } }\n * },\n * adminOnlyFieldAccess: ({ req }) => checkRole(['admin'], req.user),\n * customerOnlyFieldAccess: ({ req }) => !!req.user,\n * adminOrPublishedStatus: ({ req }) => {\n * if (checkRole(['admin'], req.user)) return true\n * return { _status: { equals: 'published' } }\n * },\n * }\n * ```\n */\nexport type AccessConfig = {\n /**\n * Limited to only admin users, specifically for Field level access control.\n */\n adminOnlyFieldAccess: FieldAccess\n /**\n * The document status is published or user is admin.\n */\n adminOrPublishedStatus: Access\n /**\n * Limited to customers only, specifically for Field level access control.\n */\n customerOnlyFieldAccess: FieldAccess\n /**\n * Checks if the user is an admin.\n * @returns true if admin, false otherwise\n */\n isAdmin: Access\n /**\n * Checks if the user is authenticated (any role).\n * @returns true if authenticated, false otherwise\n */\n isAuthenticated?: Access\n /**\n * Checks if the user owns the document being accessed.\n * Typically returns a Where query to filter by customer field.\n * @returns true for full access, false for no access, or Where query for conditional access\n */\n isDocumentOwner: Access\n /**\n * Entirely public access. Defaults to returning true.\n *\n * @example\n * publicAccess: () => true\n */\n publicAccess?: Access\n}\n\nexport type EcommercePluginConfig = {\n /**\n * Customise the access control for the plugin.\n *\n * @example\n * ```ts\n * ```\n */\n access: AccessConfig\n /**\n * Enable the addresses collection to allow customers, transactions and orders to have multiple addresses for shipping and billing. Accepts an override to customise the addresses collection.\n * Defaults to supporting a default set of countries.\n */\n addresses?: AddressesConfig | boolean\n /**\n * Configure the target collection used for carts.\n *\n * Defaults to true.\n */\n carts?: boolean | CartsConfig\n /**\n * Configure supported currencies and default settings.\n *\n * Defaults to supporting USD.\n */\n currencies?: CurrenciesConfig\n /**\n * Configure the target collection used for customers.\n *\n * @example\n * ```ts\n * customers: {\n * slug: 'users', // default\n * }\n *\n */\n customers: CustomersConfig\n /**\n * Enable tracking of inventory for products and variants. Accepts a config object to override the default collection settings.\n *\n * Defaults to true.\n */\n inventory?: boolean | InventoryConfig\n /**\n * Enables orders and accepts a config object to override the default collection settings.\n *\n * Defaults to true.\n */\n orders?: boolean | OrdersConfig\n /**\n * Enable tracking of payments. Accepts a config object to override the default collection settings.\n *\n * Defaults to true when the paymentMethods array is provided.\n */\n payments?: PaymentsConfig\n /**\n * Enables products and variants. Accepts a config object to override the product collection and each variant collection type.\n *\n * Defaults to true.\n */\n products?: boolean | ProductsConfig\n /**\n * Override the default slugs used across the plugin. This lets the plugin know which slugs to use for various internal operations and fields.\n */\n slugMap?: Partial<CollectionSlugMap>\n /**\n * Enable tracking of transactions. Accepts a config object to override the default collection settings.\n *\n * Defaults to true when the paymentMethods array is provided.\n */\n transactions?: boolean | TransactionsConfig\n}\n\nexport type SanitizedEcommercePluginConfig = {\n access: Required<AccessConfig>\n addresses: { addressFields: Field[] } & Omit<AddressesConfig, 'addressFields'>\n currencies: Required<CurrenciesConfig>\n inventory?: InventoryConfig\n payments: {\n paymentMethods: [] | PaymentAdapter[]\n }\n} & Omit<\n Required<EcommercePluginConfig>,\n 'access' | 'addresses' | 'currencies' | 'inventory' | 'payments'\n>\n\nexport type EcommerceCollections = TypedEcommerce['collections']\n\nexport type AddressesCollection = EcommerceCollections['addresses']\nexport type CartsCollection = EcommerceCollections['carts']\n\nexport type SyncLocalStorageConfig = {\n /**\n * Key to use for localStorage.\n * Defaults to 'cart'.\n */\n key?: string\n}\n\ntype APIProps = {\n /**\n * The route for the Payload API, defaults to `/api`.\n */\n apiRoute?: string\n /**\n * Customise the query used to fetch carts. Use this when you need to fetch additional data and optimise queries using depth, select and populate.\n *\n * Defaults to `{ depth: 0 }`.\n */\n cartsFetchQuery?: {\n depth?: number\n populate?: PopulateType\n select?: SelectType\n }\n /**\n * The route for the Payload API, defaults to ``. Eg for a Payload app running on `http://localhost:3000`, the default serverURL would be `http://localhost:3000`.\n */\n serverURL?: string\n}\n\nexport type ContextProps = {\n /**\n * The slug for the addresses collection.\n *\n * Defaults to 'addresses'.\n */\n addressesSlug?: string\n api?: APIProps\n /**\n * The slug for the carts collection.\n *\n * Defaults to 'carts'.\n */\n cartsSlug?: string\n children?: React.ReactNode\n /**\n * The configuration for currencies used in the ecommerce context.\n * This is used to handle currency formatting and calculations, defaults to USD.\n */\n currenciesConfig?: CurrenciesConfig\n /**\n * The slug for the customers collection.\n *\n * Defaults to 'users'.\n */\n customersSlug?: string\n /**\n * Enable debug mode for the ecommerce context. This will log additional information to the console.\n * Defaults to false.\n */\n debug?: boolean\n /**\n * Whether to enable support for variants in the cart.\n * This allows adding products with specific variants to the cart.\n * Defaults to false.\n */\n enableVariants?: boolean\n /**\n * Supported payment methods for the ecommerce context.\n */\n paymentMethods?: PaymentAdapterClient[]\n /**\n * Whether to enable localStorage for cart persistence.\n * Defaults to true.\n */\n syncLocalStorage?: boolean | SyncLocalStorageConfig\n}\n\n/**\n * Type used internally to represent the cart item to be added.\n */\ntype CartItemArgument = {\n /**\n * The ID of the product to add to the cart. Always required.\n */\n product: DefaultDocumentIDType\n /**\n * The ID of the variant to add to the cart. Optional, if not provided, the product will be added without a variant.\n */\n variant?: DefaultDocumentIDType\n}\n\nexport type EcommerceContextType<T extends EcommerceCollections = EcommerceCollections> = {\n /**\n * Add an item to the cart.\n */\n addItem: (item: CartItemArgument, quantity?: number) => Promise<void>\n /**\n * All current addresses for the current user.\n * This is used to manage shipping and billing addresses.\n */\n addresses?: T['addresses'][]\n /**\n * The current data of the cart.\n */\n cart?: T['addresses']\n /**\n * The ID of the current cart corresponding to the cart in the database or local storage.\n */\n cartID?: DefaultDocumentIDType\n /**\n * Clear the cart, removing all items.\n */\n clearCart: () => Promise<void>\n /**\n * Initiate a payment using the selected payment method.\n * This method should be called after the cart is ready for checkout.\n * It requires the payment method ID and any necessary payment data.\n */\n confirmOrder: (\n paymentMethodID: string,\n options?: { additionalData: Record<string, unknown> },\n ) => Promise<unknown>\n /**\n * Create a new address by providing the data.\n */\n createAddress: (data: Partial<T['addresses']>) => Promise<void>\n /**\n * The configuration for the currencies used in the ecommerce context.\n */\n currenciesConfig: CurrenciesConfig\n /**\n * The currently selected currency used for the cart and price formatting automatically.\n */\n currency: Currency\n /**\n * Decrement an item in the cart by its index ID.\n * If quantity reaches 0, the item will be removed from the cart.\n */\n decrementItem: (item: DefaultDocumentIDType) => Promise<void>\n /**\n * Increment an item in the cart by its index ID.\n */\n incrementItem: (item: DefaultDocumentIDType) => Promise<void>\n /**\n * Initiate a payment using the selected payment method.\n * This method should be called after the cart is ready for checkout.\n * It requires the payment method ID and any necessary payment data.\n */\n initiatePayment: (\n paymentMethodID: string,\n options?: { additionalData: Record<string, unknown> },\n ) => Promise<unknown>\n /**\n * Indicates whether any cart operation is currently in progress.\n * Useful for disabling buttons and preventing race conditions.\n */\n isLoading: boolean\n paymentMethods: PaymentAdapterClient[]\n /**\n * Remove an item from the cart by its index ID.\n */\n removeItem: (item: DefaultDocumentIDType) => Promise<void>\n /**\n * The name of the currently selected payment method.\n * This is used to determine which payment method to use when initiating a payment.\n */\n selectedPaymentMethod?: null | string\n /**\n * Change the currency for the cart, it defaults to the configured currency.\n * This will update the currency used for pricing and calculations.\n */\n setCurrency: (currency: string) => void\n /**\n * Update an address by providing the data and the ID.\n */\n updateAddress: (addressID: DefaultDocumentIDType, data: Partial<T['addresses']>) => Promise<void>\n}\n"],"names":[],"mappings":"AAizBA,WAqFC"}
1
+ {"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["import type {\n Access,\n CollectionConfig,\n DefaultDocumentIDType,\n Endpoint,\n Field,\n FieldAccess,\n GroupField,\n PayloadRequest,\n PopulateType,\n SelectType,\n TypedCollection,\n Where,\n} from 'payload'\nimport type React from 'react'\n\nimport type { TypedEcommerce } from './utilities.js'\n\nexport type FieldsOverride = (args: { defaultFields: Field[] }) => Field[]\n\nexport type CollectionOverride = (args: {\n defaultCollection: CollectionConfig\n}) => CollectionConfig | Promise<CollectionConfig>\n\nexport type CartItem = {\n id: DefaultDocumentIDType\n product: DefaultDocumentIDType | TypedCollection['products']\n quantity: number\n variant?: DefaultDocumentIDType | TypedCollection['variants']\n}\n\ntype DefaultCartType = {\n currency?: string\n customer?: DefaultDocumentIDType | TypedCollection['customers']\n id: DefaultDocumentIDType\n items: CartItem[]\n subtotal?: number\n}\n\nexport type Cart = DefaultCartType\n\ntype InitiatePaymentReturnType = {\n /**\n * Allows for additional data to be returned, such as payment method specific data\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any\n message: string\n}\n\ntype InitiatePayment = (args: {\n /**\n * The slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n data: {\n /**\n * Billing address for the payment.\n */\n billingAddress: TypedCollection['addresses']\n /**\n * Cart items.\n */\n cart: Cart\n /**\n * Currency code to use for the payment.\n */\n currency: string\n customerEmail: string\n /**\n * Shipping address for the payment.\n */\n shippingAddress?: TypedCollection['addresses']\n }\n req: PayloadRequest\n /**\n * The slug of the transactions collection, defaults to 'transactions'.\n * For example, this is used to create a record of the payment intent in the transactions collection.\n */\n transactionsSlug: string\n}) => InitiatePaymentReturnType | Promise<InitiatePaymentReturnType>\n\ntype ConfirmOrderReturnType = {\n /**\n * Allows for additional data to be returned, such as payment method specific data\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any\n message: string\n orderID: DefaultDocumentIDType\n transactionID: DefaultDocumentIDType\n}\n\ntype ConfirmOrder = (args: {\n /**\n * The slug of the carts collection, defaults to 'carts'.\n * For example, this is used to retrieve the cart for the order.\n */\n cartsSlug?: string\n /**\n * The slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n /**\n * Data made available to the payment method when confirming an order. You should get the cart items from the transaction.\n */\n data: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any // Allows for additional data to be passed through, such as payment method specific data\n customerEmail?: string\n }\n /**\n * The slug of the orders collection, defaults to 'orders'.\n */\n ordersSlug?: string\n req: PayloadRequest\n /**\n * The slug of the transactions collection, defaults to 'transactions'.\n * For example, this is used to create a record of the payment intent in the transactions collection.\n */\n transactionsSlug?: string\n}) => ConfirmOrderReturnType | Promise<ConfirmOrderReturnType>\n\n/**\n * The full payment adapter config expected as part of the config for the Ecommerce plugin.\n *\n * You can insert this type directly or return it from a function constructing it.\n */\nexport type PaymentAdapter = {\n /**\n * The function that is called via the `/api/payments/{provider_name}/confirm-order` endpoint to confirm an order after a payment has been made.\n *\n * You should handle the order confirmation logic here.\n *\n * @example\n *\n * ```ts\n * const confirmOrder: ConfirmOrder = async ({ data: { customerEmail }, ordersSlug, req, transactionsSlug }) => {\n // Confirm the payment with Stripe or another payment provider here\n // Create an order in the orders collection here\n // Update the record of the payment intent in the transactions collection here\n return {\n message: 'Order confirmed successfully',\n orderID: 'order_123',\n transactionID: 'txn_123',\n // Include any additional data required for the payment method here\n }\n }\n * ```\n */\n confirmOrder: ConfirmOrder\n /**\n * An array of endpoints to be bootstrapped to Payload's API in order to support the payment method. All API paths are relative to `/api/payments/{provider_name}`.\n *\n * So for example, path `/webhooks` in the Stripe adapter becomes `/api/payments/stripe/webhooks`.\n *\n * @example '/webhooks'\n */\n endpoints?: Endpoint[]\n /**\n * A group configuration to be used in the admin interface to display the payment method.\n *\n * @example\n *\n * ```ts\n * const groupField: GroupField = {\n name: 'stripe',\n type: 'group',\n admin: {\n condition: (data) => data?.paymentMethod === 'stripe',\n },\n fields: [\n {\n name: 'stripeCustomerID',\n type: 'text',\n label: 'Stripe Customer ID',\n required: true,\n },\n {\n name: 'stripePaymentIntentID',\n type: 'text',\n label: 'Stripe PaymentIntent ID',\n required: true,\n },\n ],\n }\n * ```\n */\n group: GroupField\n /**\n * The function that is called via the `/api/payments/{provider_name}/initiate` endpoint to initiate a payment for an order.\n *\n * You should handle the payment initiation logic here.\n *\n * @example\n *\n * ```ts\n * const initiatePayment: InitiatePayment = async ({ data: { cart, currency, customerEmail, billingAddress, shippingAddress }, req, transactionsSlug }) => {\n // Create a payment intent with Stripe or another payment provider here\n // Create a record of the payment intent in the transactions collection here\n return {\n message: 'Payment initiated successfully',\n // Include any additional data required for the payment method here\n }\n }\n * ```\n */\n initiatePayment: InitiatePayment\n /**\n * The label of the payment method\n * @example\n * 'Bank Transfer'\n */\n label?: string\n /**\n * The name of the payment method\n * @example 'stripe'\n */\n name: string\n}\n\nexport type PaymentAdapterClient = {\n confirmOrder: boolean\n initiatePayment: boolean\n} & Pick<PaymentAdapter, 'label' | 'name'>\n\nexport type Currency = {\n /**\n * The ISO 4217 currency code\n * @example 'usd'\n */\n code: string\n /**\n * The number of decimal places the currency uses\n * @example 2\n */\n decimals: number\n /**\n * A user friendly name for the currency.\n *\n * @example 'US Dollar'\n */\n label: string\n /**\n * The symbol of the currency\n * @example '$'\n */\n symbol: string\n}\n\n/**\n * Commonly used arguments for a Payment Adapter function, it's use is entirely optional.\n */\nexport type PaymentAdapterArgs = {\n /**\n * Overrides the default fields of the collection. Affects the payment fields on collections such as transactions.\n */\n groupOverrides?: { fields?: FieldsOverride } & Partial<Omit<GroupField, 'fields'>>\n /**\n * The visually readable label for the payment method.\n * @example 'Bank Transfer'\n */\n label?: string\n}\n\n/**\n * Commonly used arguments for a Payment Adapter function, it's use is entirely optional.\n */\nexport type PaymentAdapterClientArgs = {\n /**\n * The visually readable label for the payment method.\n * @example 'Bank Transfer'\n */\n label?: string\n}\n\nexport type VariantsConfig = {\n /**\n * Override the default variants collection. If you override the collection, you should ensure it has the required fields for variants or re-use the default fields.\n *\n * @example\n *\n * ```ts\n * variants: {\n variantOptionsCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'customField',\n label: 'Custom Field',\n type: 'text',\n },\n ],\n })\n }\n ```\n */\n variantOptionsCollectionOverride?: CollectionOverride\n /**\n * Override the default variants collection. If you override the collection, you should ensure it has the required fields for variants or re-use the default fields.\n *\n * @example\n *\n * ```ts\n * variants: {\n variantsCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'customField',\n label: 'Custom Field',\n type: 'text',\n },\n ],\n })\n }\n ```\n */\n variantsCollectionOverride?: CollectionOverride\n /**\n * Override the default variants collection. If you override the collection, you should ensure it has the required fields for variants or re-use the default fields.\n *\n * @example\n *\n * ```ts\n * variants: {\n variantTypesCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'customField',\n label: 'Custom Field',\n type: 'text',\n },\n ],\n })\n }\n ```\n */\n variantTypesCollectionOverride?: CollectionOverride\n}\n\nexport type ProductsConfig = {\n /**\n * Override the default products collection. If you override the collection, you should ensure it has the required fields for products or re-use the default fields.\n *\n * @example\n *\n * ```ts\n products: {\n productsCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'notes',\n label: 'Notes',\n type: 'textarea',\n },\n ],\n })\n }\n ```\n */\n productsCollectionOverride?: CollectionOverride\n /**\n * Customise the validation used for checking products or variants before a transaction is created or a payment can be confirmed.\n */\n validation?: ProductsValidation\n /**\n * Enable variants and provide configuration for the variant collections.\n *\n * Defaults to true.\n */\n variants?: boolean | VariantsConfig\n}\n\nexport type OrdersConfig = {\n /**\n * Override the default orders collection. If you override the collection, you should ensure it has the required fields for orders or re-use the default fields.\n *\n * @example\n *\n * ```ts\n orders: {\n ordersCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'notes',\n label: 'Notes',\n type: 'textarea',\n },\n ],\n })\n }\n ```\n */\n ordersCollectionOverride?: CollectionOverride\n}\n\nexport type TransactionsConfig = {\n /**\n * Override the default transactions collection. If you override the collection, you should ensure it has the required fields for transactions or re-use the default fields.\n *\n * @example\n *\n * ```ts\n transactions: {\n transactionsCollectionOverride: ({ defaultCollection }) => ({\n ...defaultCollection,\n fields: [\n ...defaultCollection.fields,\n {\n name: 'notes',\n label: 'Notes',\n type: 'textarea',\n },\n ],\n })\n }\n ```\n */\n transactionsCollectionOverride?: CollectionOverride\n}\n\nexport type CustomQuery = {\n depth?: number\n select?: SelectType\n where?: Where\n}\n\nexport type PaymentsConfig = {\n paymentMethods?: PaymentAdapter[]\n productsQuery?: CustomQuery\n variantsQuery?: CustomQuery\n}\n\nexport type CountryType = {\n /**\n * A user friendly name for the country.\n */\n label: string\n /**\n * The ISO 3166-1 alpha-2 country code.\n * @example 'US'\n */\n value: string\n}\n\n/**\n * Configuration for the addresses used by the Ecommerce plugin. Use this to override the default collection or fields used throughout\n */\ntype AddressesConfig = {\n /**\n * Override the default addresses collection. If you override the collection, you should ensure it has the required fields for addresses or re-use the default fields.\n *\n * @example\n * ```ts\n * addressesCollectionOverride: (defaultCollection) => {\n * return {\n * ...defaultCollection,\n * fields: [\n * ...defaultCollection.fields,\n * // add custom fields here\n * ],\n * }\n * }\n * ```\n */\n addressesCollectionOverride?: CollectionOverride\n /**\n * These fields will be applied to all locations where addresses are used, such as Orders and Transactions. Preferred use over the collectionOverride config.\n */\n addressFields?: FieldsOverride\n /**\n * Provide an array of countries to support for addresses. This will be used in the admin interface to provide a select field of countries.\n *\n * Defaults to a set of commonly used countries.\n *\n * @example\n * ```\n * [\n { label: 'United States', value: 'US' },\n { label: 'Canada', value: 'CA' },\n ]\n */\n supportedCountries?: CountryType[]\n}\n\nexport type CustomersConfig = {\n /**\n * Slug of the customers collection, defaults to 'users'.\n * This is used to link carts and orders to customers.\n */\n slug: string\n}\n\nexport type CartsConfig = {\n /**\n * Allow guest (unauthenticated) users to create carts.\n * When enabled, guests can create carts without being logged in.\n * Defaults to true.\n */\n allowGuestCarts?: boolean\n cartsCollectionOverride?: CollectionOverride\n}\n\nexport type InventoryConfig = {\n /**\n * Override the default field used to track inventory levels. Defaults to 'inventory'.\n */\n fieldName?: string\n}\n\nexport type CurrenciesConfig = {\n /**\n * Defaults to the first supported currency.\n *\n * @example 'USD'\n */\n defaultCurrency: string\n /**\n *\n */\n supportedCurrencies: Currency[]\n}\n\n/**\n * A function that validates a product or variant before a transaction is created or completed.\n * This should throw an error if validation fails as it will be caught by the function calling it.\n */\nexport type ProductsValidation = (args: {\n /**\n * The full currencies config, allowing you to check against supported currencies and their settings.\n */\n currenciesConfig?: CurrenciesConfig\n /**\n * The ISO 4217 currency code being usen in this transaction.\n */\n currency?: string\n /**\n * The full product data.\n */\n product: TypedCollection['products']\n /**\n * Quantity to check the inventory amount against.\n */\n quantity: number\n /**\n * The full variant data, if a variant was selected for the product otherwise it will be undefined.\n */\n variant?: TypedCollection['variants']\n}) => Promise<void> | void\n\n/**\n * A map of collection slugs used by the Ecommerce plugin.\n * Provides an easy way to track the slugs of collections even when they are overridden.\n */\nexport type CollectionSlugMap = {\n addresses: string\n carts: string\n customers: string\n orders: string\n products: string\n transactions: string\n variantOptions: string\n variants: string\n variantTypes: string\n}\n\n/**\n * Access control functions used throughout the Ecommerce plugin.\n * Provide atomic access functions that can be composed using or, and, conditional utilities.\n *\n * @example\n * ```ts\n * access: {\n * isAdmin: ({ req }) => checkRole(['admin'], req.user),\n * isAuthenticated: ({ req }) => !!req.user,\n * isDocumentOwner: ({ req }) => {\n * if (!req.user) return false\n * return { customer: { equals: req.user.id } }\n * },\n * adminOnlyFieldAccess: ({ req }) => checkRole(['admin'], req.user),\n * customerOnlyFieldAccess: ({ req }) => !!req.user,\n * adminOrPublishedStatus: ({ req }) => {\n * if (checkRole(['admin'], req.user)) return true\n * return { _status: { equals: 'published' } }\n * },\n * }\n * ```\n */\nexport type AccessConfig = {\n /**\n * Limited to only admin users, specifically for Field level access control.\n */\n adminOnlyFieldAccess: FieldAccess\n /**\n * The document status is published or user is admin.\n */\n adminOrPublishedStatus: Access\n /**\n * Limited to customers only, specifically for Field level access control.\n */\n customerOnlyFieldAccess: FieldAccess\n /**\n * Checks if the user is an admin.\n * @returns true if admin, false otherwise\n */\n isAdmin: Access\n /**\n * Checks if the user is authenticated (any role).\n * @returns true if authenticated, false otherwise\n */\n isAuthenticated?: Access\n /**\n * Checks if the user owns the document being accessed.\n * Typically returns a Where query to filter by customer field.\n * @returns true for full access, false for no access, or Where query for conditional access\n */\n isDocumentOwner: Access\n /**\n * Entirely public access. Defaults to returning true.\n *\n * @example\n * publicAccess: () => true\n */\n publicAccess?: Access\n}\n\nexport type EcommercePluginConfig = {\n /**\n * Customise the access control for the plugin.\n *\n * @example\n * ```ts\n * ```\n */\n access: AccessConfig\n /**\n * Enable the addresses collection to allow customers, transactions and orders to have multiple addresses for shipping and billing. Accepts an override to customise the addresses collection.\n * Defaults to supporting a default set of countries.\n */\n addresses?: AddressesConfig | boolean\n /**\n * Configure the target collection used for carts.\n *\n * Defaults to true.\n */\n carts?: boolean | CartsConfig\n /**\n * Configure supported currencies and default settings.\n *\n * Defaults to supporting USD.\n */\n currencies?: CurrenciesConfig\n /**\n * Configure the target collection used for customers.\n *\n * @example\n * ```ts\n * customers: {\n * slug: 'users', // default\n * }\n *\n */\n customers: CustomersConfig\n /**\n * Enable tracking of inventory for products and variants. Accepts a config object to override the default collection settings.\n *\n * Defaults to true.\n */\n inventory?: boolean | InventoryConfig\n /**\n * Enables orders and accepts a config object to override the default collection settings.\n *\n * Defaults to true.\n */\n orders?: boolean | OrdersConfig\n /**\n * Enable tracking of payments. Accepts a config object to override the default collection settings.\n *\n * Defaults to true when the paymentMethods array is provided.\n */\n payments?: PaymentsConfig\n /**\n * Enables products and variants. Accepts a config object to override the product collection and each variant collection type.\n *\n * Defaults to true.\n */\n products?: boolean | ProductsConfig\n /**\n * Override the default slugs used across the plugin. This lets the plugin know which slugs to use for various internal operations and fields.\n */\n slugMap?: Partial<CollectionSlugMap>\n /**\n * Enable tracking of transactions. Accepts a config object to override the default collection settings.\n *\n * Defaults to true when the paymentMethods array is provided.\n */\n transactions?: boolean | TransactionsConfig\n}\n\nexport type SanitizedEcommercePluginConfig = {\n access: Required<AccessConfig>\n addresses: { addressFields: Field[] } & Omit<AddressesConfig, 'addressFields'>\n currencies: Required<CurrenciesConfig>\n inventory?: InventoryConfig\n payments: {\n paymentMethods: [] | PaymentAdapter[]\n }\n} & Omit<\n Required<EcommercePluginConfig>,\n 'access' | 'addresses' | 'currencies' | 'inventory' | 'payments'\n>\n\nexport type EcommerceCollections = TypedEcommerce['collections']\n\nexport type AddressesCollection = EcommerceCollections['addresses']\nexport type CartsCollection = EcommerceCollections['carts']\n\nexport type SyncLocalStorageConfig = {\n /**\n * Key to use for localStorage.\n * Defaults to 'cart'.\n */\n key?: string\n}\n\ntype APIProps = {\n /**\n * The route for the Payload API, defaults to `/api`.\n */\n apiRoute?: string\n /**\n * Customise the query used to fetch carts. Use this when you need to fetch additional data and optimise queries using depth, select and populate.\n *\n * Defaults to `{ depth: 0 }`.\n */\n cartsFetchQuery?: {\n depth?: number\n populate?: PopulateType\n select?: SelectType\n }\n /**\n * The route for the Payload API, defaults to ``. Eg for a Payload app running on `http://localhost:3000`, the default serverURL would be `http://localhost:3000`.\n */\n serverURL?: string\n}\n\nexport type ContextProps = {\n /**\n * The slug for the addresses collection.\n *\n * Defaults to 'addresses'.\n */\n addressesSlug?: string\n api?: APIProps\n /**\n * The slug for the carts collection.\n *\n * Defaults to 'carts'.\n */\n cartsSlug?: string\n children?: React.ReactNode\n /**\n * The configuration for currencies used in the ecommerce context.\n * This is used to handle currency formatting and calculations, defaults to USD.\n */\n currenciesConfig?: CurrenciesConfig\n /**\n * The slug for the customers collection.\n *\n * Defaults to 'users'.\n */\n customersSlug?: string\n /**\n * Enable debug mode for the ecommerce context. This will log additional information to the console.\n * Defaults to false.\n */\n debug?: boolean\n /**\n * Whether to enable support for variants in the cart.\n * This allows adding products with specific variants to the cart.\n * Defaults to false.\n */\n enableVariants?: boolean\n /**\n * Supported payment methods for the ecommerce context.\n */\n paymentMethods?: PaymentAdapterClient[]\n /**\n * Whether to enable localStorage for cart persistence.\n * Defaults to true.\n */\n syncLocalStorage?: boolean | SyncLocalStorageConfig\n}\n\n/**\n * Type used internally to represent the cart item to be added.\n */\ntype CartItemArgument = {\n /**\n * The ID of the product to add to the cart. Always required.\n */\n product: DefaultDocumentIDType\n /**\n * The ID of the variant to add to the cart. Optional, if not provided, the product will be added without a variant.\n */\n variant?: DefaultDocumentIDType\n}\n\nexport type EcommerceContextType<T extends EcommerceCollections = EcommerceCollections> = {\n /**\n * Add an item to the cart.\n */\n addItem: (item: CartItemArgument, quantity?: number) => Promise<void>\n /**\n * All current addresses for the current user.\n * This is used to manage shipping and billing addresses.\n */\n addresses?: T['addresses'][]\n /**\n * The current data of the cart.\n */\n cart?: T['addresses']\n /**\n * The ID of the current cart corresponding to the cart in the database or local storage.\n */\n cartID?: DefaultDocumentIDType\n /**\n * Clear the cart, removing all items.\n */\n clearCart: () => Promise<void>\n /**\n * Initiate a payment using the selected payment method.\n * This method should be called after the cart is ready for checkout.\n * It requires the payment method ID and any necessary payment data.\n */\n confirmOrder: (\n paymentMethodID: string,\n options?: { additionalData: Record<string, unknown> },\n ) => Promise<unknown>\n /**\n * Create a new address by providing the data.\n */\n createAddress: (data: Partial<T['addresses']>) => Promise<void>\n /**\n * The configuration for the currencies used in the ecommerce context.\n */\n currenciesConfig: CurrenciesConfig\n /**\n * The currently selected currency used for the cart and price formatting automatically.\n */\n currency: Currency\n /**\n * Decrement an item in the cart by its index ID.\n * If quantity reaches 0, the item will be removed from the cart.\n */\n decrementItem: (item: DefaultDocumentIDType) => Promise<void>\n /**\n * Increment an item in the cart by its index ID.\n */\n incrementItem: (item: DefaultDocumentIDType) => Promise<void>\n /**\n * Initiate a payment using the selected payment method.\n * This method should be called after the cart is ready for checkout.\n * It requires the payment method ID and any necessary payment data.\n */\n initiatePayment: (\n paymentMethodID: string,\n options?: { additionalData: Record<string, unknown> },\n ) => Promise<unknown>\n /**\n * Indicates whether any cart operation is currently in progress.\n * Useful for disabling buttons and preventing race conditions.\n */\n isLoading: boolean\n paymentMethods: PaymentAdapterClient[]\n /**\n * Refresh the cart.\n */\n refreshCart: () => Promise<void>\n /**\n * Remove an item from the cart by its index ID.\n */\n removeItem: (item: DefaultDocumentIDType) => Promise<void>\n /**\n * The name of the currently selected payment method.\n * This is used to determine which payment method to use when initiating a payment.\n */\n selectedPaymentMethod?: null | string\n /**\n * Change the currency for the cart, it defaults to the configured currency.\n * This will update the currency used for pricing and calculations.\n */\n setCurrency: (currency: string) => void\n /**\n * Update an address by providing the data and the ID.\n */\n updateAddress: (addressID: DefaultDocumentIDType, data: Partial<T['addresses']>) => Promise<void>\n}\n"],"names":[],"mappings":"AAizBA,WAyFC"}
@@ -20,8 +20,18 @@ type AddressesUntyped = {
20
20
  [key: string]: any;
21
21
  id: DefaultDocumentIDType;
22
22
  };
23
- type ResolveEcommerceType<T> = 'ecommerce' extends keyof T ? T['ecommerce'] : T['ecommerceUntyped'];
24
- export type TypedEcommerce = ResolveEcommerceType<GeneratedTypes>;
23
+ type EcommerceBase = {
24
+ collections: {
25
+ addresses: AddressesUntyped;
26
+ carts: CartsUntyped;
27
+ };
28
+ };
29
+ type ResolveEcommerceType<T> = T extends {
30
+ ecommerce: infer E;
31
+ } ? E : T extends {
32
+ ecommerceUntyped: infer E;
33
+ } ? E : EcommerceBase;
34
+ export type TypedEcommerce = EcommerceBase & ResolveEcommerceType<GeneratedTypes>;
25
35
  declare module 'payload' {
26
36
  interface GeneratedTypes {
27
37
  ecommerceUntyped: {
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/types/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEpE;;;;;;;;;;GAUG;AAEH,KAAK,YAAY,GAAG;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,EAAE,EAAE,qBAAqB,CAAA;IACzB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,EAAE,EAAE,qBAAqB,CAAA;CAC1B,CAAA;AAED,KAAK,oBAAoB,CAAC,CAAC,IAAI,WAAW,SAAS,MAAM,CAAC,GACtD,CAAC,CAAC,WAAW,CAAC,GAEd,CAAC,CAAC,kBAAkB,CAAC,CAAA;AAEzB,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAA;AAEjE,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAiB,cAAc;QAC7B,gBAAgB,EAAE;YAChB,WAAW,EAAE;gBACX,SAAS,EAAE,gBAAgB,CAAA;gBAC3B,KAAK,EAAE,YAAY,CAAA;aACpB,CAAA;SACF,CAAA;KACF;CACF"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/types/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEpE;;;;;;;;;;GAUG;AAEH,KAAK,YAAY,GAAG;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,EAAE,EAAE,qBAAqB,CAAA;IACzB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,EAAE,EAAE,qBAAqB,CAAA;CAC1B,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,WAAW,EAAE;QACX,SAAS,EAAE,gBAAgB,CAAA;QAC3B,KAAK,EAAE,YAAY,CAAA;KACpB,CAAA;CACF,CAAA;AAED,KAAK,oBAAoB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC,CAAA;CAAE,GAC3D,CAAC,GACD,CAAC,SAAS;IAAE,gBAAgB,EAAE,MAAM,CAAC,CAAA;CAAE,GACrC,CAAC,GACD,aAAa,CAAA;AAEnB,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAA;AAEjF,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAiB,cAAc;QAC7B,gBAAgB,EAAE;YAChB,WAAW,EAAE;gBACX,SAAS,EAAE,gBAAgB,CAAA;gBAC3B,KAAK,EAAE,YAAY,CAAA;aACpB,CAAA;SACF,CAAA;KACF;CACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/utilities.ts"],"sourcesContent":["import type { DefaultDocumentIDType, GeneratedTypes } from 'payload'\n\n/**\n * THIS FILE IS EXTREMELY SENSITIVE PLEASE BE CAREFUL AS THERE IS EVIL AT PLAY\n *\n * This file is used to extract the types for the ecommerce plugin\n * from the user's generated types. It must be kept as a .ts file\n * and not a .tsx file, and it must not import any other files\n * that are not strictly types. This is to prevent circular\n * dependencies and to ensure that the types are always available.\n *\n * Do not add any runtime code to this file.\n */\n\ntype CartsUntyped = {\n [key: string]: any\n id: DefaultDocumentIDType\n items?: any[]\n subtotal?: number\n}\n\ntype AddressesUntyped = {\n [key: string]: any\n id: DefaultDocumentIDType\n}\n\ntype ResolveEcommerceType<T> = 'ecommerce' extends keyof T\n ? T['ecommerce']\n : // @ts-expect-error - typescript doesnt play nice here\n T['ecommerceUntyped']\n\nexport type TypedEcommerce = ResolveEcommerceType<GeneratedTypes>\n\ndeclare module 'payload' {\n export interface GeneratedTypes {\n ecommerceUntyped: {\n collections: {\n addresses: AddressesUntyped\n carts: CartsUntyped\n }\n }\n }\n}\n"],"names":[],"mappings":"AA+BA,WAAiE"}
1
+ {"version":3,"sources":["../../src/types/utilities.ts"],"sourcesContent":["import type { DefaultDocumentIDType, GeneratedTypes } from 'payload'\n\n/**\n * THIS FILE IS EXTREMELY SENSITIVE PLEASE BE CAREFUL AS THERE IS EVIL AT PLAY\n *\n * This file is used to extract the types for the ecommerce plugin\n * from the user's generated types. It must be kept as a .ts file\n * and not a .tsx file, and it must not import any other files\n * that are not strictly types. This is to prevent circular\n * dependencies and to ensure that the types are always available.\n *\n * Do not add any runtime code to this file.\n */\n\ntype CartsUntyped = {\n [key: string]: any\n id: DefaultDocumentIDType\n items?: any[]\n subtotal?: number\n}\n\ntype AddressesUntyped = {\n [key: string]: any\n id: DefaultDocumentIDType\n}\n\ntype EcommerceBase = {\n collections: {\n addresses: AddressesUntyped\n carts: CartsUntyped\n }\n}\n\ntype ResolveEcommerceType<T> = T extends { ecommerce: infer E }\n ? E\n : T extends { ecommerceUntyped: infer E }\n ? E\n : EcommerceBase\n\nexport type TypedEcommerce = EcommerceBase & ResolveEcommerceType<GeneratedTypes>\n\ndeclare module 'payload' {\n export interface GeneratedTypes {\n ecommerceUntyped: {\n collections: {\n addresses: AddressesUntyped\n carts: CartsUntyped\n }\n }\n }\n}\n"],"names":[],"mappings":"AAuCA,WAAiF"}
@@ -690,21 +690,6 @@ describe('Access Composition Utilities', ()=>{
690
690
  ]
691
691
  });
692
692
  });
693
- it('should handle async checker that takes time', async ()=>{
694
- const checker1 = async ()=>{
695
- await new Promise((resolve)=>setTimeout(resolve, 10));
696
- return false;
697
- };
698
- const checker2 = async ()=>{
699
- await new Promise((resolve)=>setTimeout(resolve, 10));
700
- return true;
701
- };
702
- const start = Date.now();
703
- const result = await accessOR(checker1, checker2)(mockArgs);
704
- const duration = Date.now() - start;
705
- expect(result).toBe(true);
706
- expect(duration).toBeGreaterThanOrEqual(20);
707
- });
708
693
  it('should handle all checkers returning null/undefined', async ()=>{
709
694
  const checker1 = async ()=>null;
710
695
  const checker2 = async ()=>undefined;
@@ -749,30 +734,6 @@ describe('Access Composition Utilities', ()=>{
749
734
  });
750
735
  expect(result2).toBe(true);
751
736
  });
752
- it('should handle very large number of checkers in or', async ()=>{
753
- const checkers = Array.from({
754
- length: 100
755
- }, (_, i)=>async ()=>({
756
- field: {
757
- equals: `value${i}`
758
- }
759
- }));
760
- const result = await accessOR(...checkers)(mockArgs);
761
- expect(result).toHaveProperty('or');
762
- expect(result.or).toHaveLength(100);
763
- });
764
- it('should handle very large number of checkers in and', async ()=>{
765
- const checkers = Array.from({
766
- length: 100
767
- }, (_, i)=>async ()=>({
768
- field: {
769
- equals: `value${i}`
770
- }
771
- }));
772
- const result = await accessAND(...checkers)(mockArgs);
773
- expect(result).toHaveProperty('and');
774
- expect(result.and).toHaveLength(100);
775
- });
776
737
  it('should handle alternating true/false in or correctly', async ()=>{
777
738
  const checkers = [
778
739
  async ()=>false,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/accessComposition.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport type { Access, AccessArgs, Where } from 'payload'\n\nimport { accessAND, conditional, accessOR } from './accessComposition'\n\n// Mock access args for testing\nconst mockArgs: AccessArgs = {\n req: {\n user: null,\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n}\n\nconst mockArgsWithUser: AccessArgs = {\n req: {\n user: { id: '123', email: 'test@example.com' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n}\n\ndescribe('Access Composition Utilities', () => {\n describe('or', () => {\n it('should return true when first checker returns true', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => false\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return true when any checker returns true', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => true\n const checker3: Access = async () => false\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return false when all checkers return false', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => false\n const checker3: Access = async () => false\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should combine Where queries with OR logic', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n or: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should return true when one checker returns true and others return Where queries', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => true\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should ignore false values when combining Where queries', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => false\n const checker4: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessOR(checker1, checker2, checker3, checker4)(mockArgs)\n\n expect(result).toEqual({\n or: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should return a single Where query when only one checker returns a Where query', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => false\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toEqual({\n or: [{ customer: { equals: '123' } }],\n })\n })\n\n it('should short-circuit on first true result for performance', async () => {\n let secondCheckerCalled = false\n\n const checker1: Access = async () => true\n const checker2: Access = async () => {\n secondCheckerCalled = true\n return false\n }\n\n await accessOR(checker1, checker2)(mockArgs)\n\n expect(secondCheckerCalled).toBe(false)\n })\n\n it('should handle empty checkers array', async () => {\n const result = await accessOR()(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should handle complex nested Where queries', async () => {\n const checker1: Access = async () =>\n ({\n and: [{ customer: { equals: '123' } }, { status: { equals: 'active' } }],\n }) as Where\n const checker2: Access = async () => ({\n role: { equals: 'admin' },\n })\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n or: [\n { and: [{ customer: { equals: '123' } }, { status: { equals: 'active' } }] },\n { role: { equals: 'admin' } },\n ],\n })\n })\n })\n\n describe('and', () => {\n it('should return false when any checker returns false', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => false\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should return true when all checkers return true', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => true\n const checker3: Access = async () => true\n\n const result = await accessAND(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should combine Where queries with AND logic', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n and: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should return false when one checker returns false and others return Where queries', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => false\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should return Where query when all checkers return Where queries except one returns true', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessAND(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toEqual({\n and: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should short-circuit on first false result for performance', async () => {\n let secondCheckerCalled = false\n\n const checker1: Access = async () => false\n const checker2: Access = async () => {\n secondCheckerCalled = true\n return true\n }\n\n await accessAND(checker1, checker2)(mockArgs)\n\n expect(secondCheckerCalled).toBe(false)\n })\n\n it('should handle empty checkers array', async () => {\n const result = await accessAND()(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return a single Where query when only one checker returns a Where query', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => true\n\n const result = await accessAND(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toEqual({\n and: [{ customer: { equals: '123' } }],\n })\n })\n\n it('should handle complex nested Where queries', async () => {\n const checker1: Access = async () => ({\n or: [{ customer: { equals: '123' } }, { customer: { equals: '456' } }],\n })\n const checker2: Access = async () => ({\n status: { equals: 'active' },\n })\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n and: [\n { or: [{ customer: { equals: '123' } }, { customer: { equals: '456' } }] },\n { status: { equals: 'active' } },\n ],\n })\n })\n\n it('should return false immediately when first checker returns false', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => {\n throw new Error('Should not be called')\n }\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toBe(false)\n })\n })\n\n describe('conditional', () => {\n it('should apply checker when condition is true', async () => {\n const checker: Access = async () => true\n\n const result = await conditional(true, checker)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return false when condition is false', async () => {\n const checker: Access = async () => true\n\n const result = await conditional(false, checker)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should apply checker when condition function returns true', async () => {\n const condition = ({ req }: AccessArgs) => !!req.user\n const checker: Access = async () => true\n\n const result = await conditional(condition, checker)(mockArgsWithUser)\n\n expect(result).toBe(true)\n })\n\n it('should return false when condition function returns false', async () => {\n const condition = ({ req }: AccessArgs) => !!req.user\n const checker: Access = async () => true\n\n const result = await conditional(condition, checker)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should pass Where query through when condition is true', async () => {\n const checker: Access = async () => ({\n customer: { equals: '123' },\n })\n\n const result = await conditional(true, checker)(mockArgs)\n\n expect(result).toEqual({\n customer: { equals: '123' },\n })\n })\n\n it('should not call checker when condition is false', async () => {\n let checkerCalled = false\n\n const checker: Access = async () => {\n checkerCalled = true\n return true\n }\n\n await conditional(false, checker)(mockArgs)\n\n expect(checkerCalled).toBe(false)\n })\n\n it('should evaluate condition function each time', async () => {\n const condition = ({ req }: AccessArgs) => !!req.user\n const checker: Access = async () => true\n\n // First call without user\n const result1 = await conditional(condition, checker)(mockArgs)\n expect(result1).toBe(false)\n\n // Second call with user\n const result2 = await conditional(condition, checker)(mockArgsWithUser)\n expect(result2).toBe(true)\n })\n\n it('should work with false checker result when condition is true', async () => {\n const checker: Access = async () => false\n\n const result = await conditional(true, checker)(mockArgs)\n\n expect(result).toBe(false)\n })\n })\n\n describe('combined composition', () => {\n it('should compose or, and, and conditional together', async () => {\n const isAdmin: Access = async ({ req }) => req.user?.role === 'admin'\n const isOwner: Access = async ({ req }) => ({\n customer: { equals: req.user?.id },\n })\n const isGuest: Access = async ({ req }) => !req.user\n\n const allowGuestCarts = true\n\n const access = accessOR(isAdmin, accessAND(isOwner), conditional(allowGuestCarts, isGuest))\n\n // Guest user (no user)\n const guestResult = await access(mockArgs)\n expect(guestResult).toBe(true)\n\n // Admin user\n const adminResult = await access({\n req: {\n user: { id: '123', role: 'admin' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(adminResult).toBe(true)\n\n // Regular user (owner)\n const ownerResult = await access({\n req: {\n user: { id: '123', role: 'customer' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(ownerResult).toEqual({\n or: [{ and: [{ customer: { equals: '123' } }] }],\n })\n })\n\n it('should handle complex nested compositions', async () => {\n const checker1: Access = async () => ({\n status: { equals: 'published' },\n })\n const checker2: Access = async () => ({\n visibility: { equals: 'public' },\n })\n const checker3: Access = async ({ req }) => !!req.user\n const checker4: Access = async () => ({\n customer: { equals: '123' },\n })\n\n // ((published AND public) OR (authenticated AND customer=123))\n const access = accessOR(accessAND(checker1, checker2), accessAND(checker3, checker4))\n\n // Without user\n const result1 = await access(mockArgs)\n expect(result1).toEqual({\n or: [\n {\n and: [{ status: { equals: 'published' } }, { visibility: { equals: 'public' } }],\n },\n ],\n })\n\n // With user\n const result2 = await access(mockArgsWithUser)\n expect(result2).toEqual({\n or: [\n {\n and: [{ status: { equals: 'published' } }, { visibility: { equals: 'public' } }],\n },\n {\n and: [{ customer: { equals: '123' } }],\n },\n ],\n })\n })\n\n it('should handle conditional inside or composition', async () => {\n const isAdmin: Access = async () => false\n const isGuest: Access = async () => true\n const allowGuestAccess = true\n\n const access = accessOR(isAdmin, conditional(allowGuestAccess, isGuest))\n\n const result = await access(mockArgs)\n expect(result).toBe(true)\n })\n\n it('should handle conditional inside and composition', async () => {\n const hasPermission: Access = async () => ({\n permissions: { contains: 'read' },\n })\n const isActiveUser: Access = async () => true\n const featureFlagEnabled = true\n\n const access = accessAND(hasPermission, conditional(featureFlagEnabled, isActiveUser))\n\n const result = await access(mockArgs)\n expect(result).toEqual({\n and: [{ permissions: { contains: 'read' } }],\n })\n })\n\n it('should correctly handle multiple levels of nesting', async () => {\n const a: Access = async () => true\n const b: Access = async () => false\n const c: Access = async () => ({ field1: { equals: 'value1' } })\n const d: Access = async () => ({ field2: { equals: 'value2' } })\n\n // (a AND (b OR (c AND d)))\n const access = accessAND(a, accessOR(b, accessAND(c, d)))\n\n const result = await access(mockArgs)\n expect(result).toEqual({\n and: [\n { or: [{ and: [{ field1: { equals: 'value1' } }, { field2: { equals: 'value2' } }] }] },\n ],\n })\n })\n })\n\n describe('edge cases and failure scenarios', () => {\n it('should handle checker that throws an error', async () => {\n const checker1: Access = async () => {\n throw new Error('Access check failed')\n }\n const checker2: Access = async () => true\n\n await expect(accessOR(checker1, checker2)(mockArgs)).rejects.toThrow('Access check failed')\n })\n\n it('should handle null or undefined returns gracefully', async () => {\n const checker1: Access = async () => null as any\n const checker2: Access = async () => undefined as any\n const checker3: Access = async () => true\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n expect(result).toBe(true)\n })\n\n it('should handle deeply nested Where queries', async () => {\n const checker: Access = async () =>\n ({\n and: [\n {\n or: [\n { field1: { equals: 'value1' } },\n {\n and: [{ field2: { equals: 'value2' } }, { field3: { equals: 'value3' } }],\n },\n ],\n },\n { field4: { not_equals: 'value4' } },\n ],\n }) as Where\n\n const result = await accessOR(checker)(mockArgs)\n\n expect(result).toEqual({\n or: [\n {\n and: [\n {\n or: [\n { field1: { equals: 'value1' } },\n {\n and: [{ field2: { equals: 'value2' } }, { field3: { equals: 'value3' } }],\n },\n ],\n },\n { field4: { not_equals: 'value4' } },\n ],\n },\n ],\n })\n })\n\n it('should handle async checker that takes time', async () => {\n const checker1: Access = async () => {\n await new Promise((resolve) => setTimeout(resolve, 10))\n return false\n }\n const checker2: Access = async () => {\n await new Promise((resolve) => setTimeout(resolve, 10))\n return true\n }\n\n const start = Date.now()\n const result = await accessOR(checker1, checker2)(mockArgs)\n const duration = Date.now() - start\n\n expect(result).toBe(true)\n expect(duration).toBeGreaterThanOrEqual(20)\n })\n\n it('should handle all checkers returning null/undefined', async () => {\n const checker1: Access = async () => null as any\n const checker2: Access = async () => undefined as any\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n // null and undefined should be treated as false\n expect(result).toBe(false)\n })\n\n it('should handle Where query with empty object', async () => {\n const checker: Access = async () => ({}) as Where\n\n const result = await accessOR(checker)(mockArgs)\n\n expect(result).toEqual({})\n })\n\n it('should handle conditional with complex condition function', async () => {\n const condition = ({ req }: AccessArgs): boolean => {\n return !!(req.user && req.user.email && req.user.email.endsWith('@admin.com'))\n }\n\n const checker: Access = async () => true\n\n // Non-admin email\n const result1 = await conditional(\n condition,\n checker,\n )({\n req: {\n user: { id: '123', email: 'user@example.com' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(result1).toBe(false)\n\n // Admin email\n const result2 = await conditional(\n condition,\n checker,\n )({\n req: {\n user: { id: '123', email: 'admin@admin.com' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(result2).toBe(true)\n })\n\n it('should handle very large number of checkers in or', async () => {\n const checkers: Access[] = Array.from({ length: 100 }, (_, i) => async () => ({\n field: { equals: `value${i}` },\n }))\n\n const result = await accessOR(...checkers)(mockArgs)\n\n expect(result).toHaveProperty('or')\n expect((result as any).or).toHaveLength(100)\n })\n\n it('should handle very large number of checkers in and', async () => {\n const checkers: Access[] = Array.from({ length: 100 }, (_, i) => async () => ({\n field: { equals: `value${i}` },\n }))\n\n const result = await accessAND(...checkers)(mockArgs)\n\n expect(result).toHaveProperty('and')\n expect((result as any).and).toHaveLength(100)\n })\n\n it('should handle alternating true/false in or correctly', async () => {\n const checkers: Access[] = [\n async () => false,\n async () => false,\n async () => false,\n async () => true, // This should cause short-circuit\n async () => {\n throw new Error('Should not be called')\n },\n ]\n\n const result = await accessOR(...checkers)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should handle alternating true/false in and correctly', async () => {\n const checkers: Access[] = [\n async () => true,\n async () => true,\n async () => false, // This should cause short-circuit\n async () => {\n throw new Error('Should not be called')\n },\n ]\n\n const result = await accessAND(...checkers)(mockArgs)\n\n expect(result).toBe(false)\n })\n })\n})\n"],"names":["describe","it","expect","accessAND","conditional","accessOR","mockArgs","req","user","headers","Headers","payload","context","mockArgsWithUser","id","email","checker1","checker2","result","toBe","checker3","customer","equals","status","toEqual","or","checker4","secondCheckerCalled","and","role","Error","checker","condition","checkerCalled","result1","result2","isAdmin","isOwner","isGuest","allowGuestCarts","access","guestResult","adminResult","ownerResult","visibility","allowGuestAccess","hasPermission","permissions","contains","isActiveUser","featureFlagEnabled","a","b","c","field1","d","field2","rejects","toThrow","undefined","field3","field4","not_equals","Promise","resolve","setTimeout","start","Date","now","duration","toBeGreaterThanOrEqual","endsWith","checkers","Array","from","length","_","i","field","toHaveProperty","toHaveLength"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/accessComposition.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport type { Access, AccessArgs, Where } from 'payload'\n\nimport { accessAND, conditional, accessOR } from './accessComposition'\n\n// Mock access args for testing\nconst mockArgs: AccessArgs = {\n req: {\n user: null,\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n}\n\nconst mockArgsWithUser: AccessArgs = {\n req: {\n user: { id: '123', email: 'test@example.com' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n}\n\ndescribe('Access Composition Utilities', () => {\n describe('or', () => {\n it('should return true when first checker returns true', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => false\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return true when any checker returns true', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => true\n const checker3: Access = async () => false\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return false when all checkers return false', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => false\n const checker3: Access = async () => false\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should combine Where queries with OR logic', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n or: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should return true when one checker returns true and others return Where queries', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => true\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should ignore false values when combining Where queries', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => false\n const checker4: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessOR(checker1, checker2, checker3, checker4)(mockArgs)\n\n expect(result).toEqual({\n or: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should return a single Where query when only one checker returns a Where query', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => false\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toEqual({\n or: [{ customer: { equals: '123' } }],\n })\n })\n\n it('should short-circuit on first true result for performance', async () => {\n let secondCheckerCalled = false\n\n const checker1: Access = async () => true\n const checker2: Access = async () => {\n secondCheckerCalled = true\n return false\n }\n\n await accessOR(checker1, checker2)(mockArgs)\n\n expect(secondCheckerCalled).toBe(false)\n })\n\n it('should handle empty checkers array', async () => {\n const result = await accessOR()(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should handle complex nested Where queries', async () => {\n const checker1: Access = async () =>\n ({\n and: [{ customer: { equals: '123' } }, { status: { equals: 'active' } }],\n }) as Where\n const checker2: Access = async () => ({\n role: { equals: 'admin' },\n })\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n or: [\n { and: [{ customer: { equals: '123' } }, { status: { equals: 'active' } }] },\n { role: { equals: 'admin' } },\n ],\n })\n })\n })\n\n describe('and', () => {\n it('should return false when any checker returns false', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => false\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should return true when all checkers return true', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => true\n const checker3: Access = async () => true\n\n const result = await accessAND(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should combine Where queries with AND logic', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n and: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should return false when one checker returns false and others return Where queries', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => false\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should return Where query when all checkers return Where queries except one returns true', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessAND(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toEqual({\n and: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should short-circuit on first false result for performance', async () => {\n let secondCheckerCalled = false\n\n const checker1: Access = async () => false\n const checker2: Access = async () => {\n secondCheckerCalled = true\n return true\n }\n\n await accessAND(checker1, checker2)(mockArgs)\n\n expect(secondCheckerCalled).toBe(false)\n })\n\n it('should handle empty checkers array', async () => {\n const result = await accessAND()(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return a single Where query when only one checker returns a Where query', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => true\n\n const result = await accessAND(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toEqual({\n and: [{ customer: { equals: '123' } }],\n })\n })\n\n it('should handle complex nested Where queries', async () => {\n const checker1: Access = async () => ({\n or: [{ customer: { equals: '123' } }, { customer: { equals: '456' } }],\n })\n const checker2: Access = async () => ({\n status: { equals: 'active' },\n })\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n and: [\n { or: [{ customer: { equals: '123' } }, { customer: { equals: '456' } }] },\n { status: { equals: 'active' } },\n ],\n })\n })\n\n it('should return false immediately when first checker returns false', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => {\n throw new Error('Should not be called')\n }\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toBe(false)\n })\n })\n\n describe('conditional', () => {\n it('should apply checker when condition is true', async () => {\n const checker: Access = async () => true\n\n const result = await conditional(true, checker)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return false when condition is false', async () => {\n const checker: Access = async () => true\n\n const result = await conditional(false, checker)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should apply checker when condition function returns true', async () => {\n const condition = ({ req }: AccessArgs) => !!req.user\n const checker: Access = async () => true\n\n const result = await conditional(condition, checker)(mockArgsWithUser)\n\n expect(result).toBe(true)\n })\n\n it('should return false when condition function returns false', async () => {\n const condition = ({ req }: AccessArgs) => !!req.user\n const checker: Access = async () => true\n\n const result = await conditional(condition, checker)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should pass Where query through when condition is true', async () => {\n const checker: Access = async () => ({\n customer: { equals: '123' },\n })\n\n const result = await conditional(true, checker)(mockArgs)\n\n expect(result).toEqual({\n customer: { equals: '123' },\n })\n })\n\n it('should not call checker when condition is false', async () => {\n let checkerCalled = false\n\n const checker: Access = async () => {\n checkerCalled = true\n return true\n }\n\n await conditional(false, checker)(mockArgs)\n\n expect(checkerCalled).toBe(false)\n })\n\n it('should evaluate condition function each time', async () => {\n const condition = ({ req }: AccessArgs) => !!req.user\n const checker: Access = async () => true\n\n // First call without user\n const result1 = await conditional(condition, checker)(mockArgs)\n expect(result1).toBe(false)\n\n // Second call with user\n const result2 = await conditional(condition, checker)(mockArgsWithUser)\n expect(result2).toBe(true)\n })\n\n it('should work with false checker result when condition is true', async () => {\n const checker: Access = async () => false\n\n const result = await conditional(true, checker)(mockArgs)\n\n expect(result).toBe(false)\n })\n })\n\n describe('combined composition', () => {\n it('should compose or, and, and conditional together', async () => {\n const isAdmin: Access = async ({ req }) => req.user?.role === 'admin'\n const isOwner: Access = async ({ req }) => ({\n customer: { equals: req.user?.id },\n })\n const isGuest: Access = async ({ req }) => !req.user\n\n const allowGuestCarts = true\n\n const access = accessOR(isAdmin, accessAND(isOwner), conditional(allowGuestCarts, isGuest))\n\n // Guest user (no user)\n const guestResult = await access(mockArgs)\n expect(guestResult).toBe(true)\n\n // Admin user\n const adminResult = await access({\n req: {\n user: { id: '123', role: 'admin' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(adminResult).toBe(true)\n\n // Regular user (owner)\n const ownerResult = await access({\n req: {\n user: { id: '123', role: 'customer' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(ownerResult).toEqual({\n or: [{ and: [{ customer: { equals: '123' } }] }],\n })\n })\n\n it('should handle complex nested compositions', async () => {\n const checker1: Access = async () => ({\n status: { equals: 'published' },\n })\n const checker2: Access = async () => ({\n visibility: { equals: 'public' },\n })\n const checker3: Access = async ({ req }) => !!req.user\n const checker4: Access = async () => ({\n customer: { equals: '123' },\n })\n\n // ((published AND public) OR (authenticated AND customer=123))\n const access = accessOR(accessAND(checker1, checker2), accessAND(checker3, checker4))\n\n // Without user\n const result1 = await access(mockArgs)\n expect(result1).toEqual({\n or: [\n {\n and: [{ status: { equals: 'published' } }, { visibility: { equals: 'public' } }],\n },\n ],\n })\n\n // With user\n const result2 = await access(mockArgsWithUser)\n expect(result2).toEqual({\n or: [\n {\n and: [{ status: { equals: 'published' } }, { visibility: { equals: 'public' } }],\n },\n {\n and: [{ customer: { equals: '123' } }],\n },\n ],\n })\n })\n\n it('should handle conditional inside or composition', async () => {\n const isAdmin: Access = async () => false\n const isGuest: Access = async () => true\n const allowGuestAccess = true\n\n const access = accessOR(isAdmin, conditional(allowGuestAccess, isGuest))\n\n const result = await access(mockArgs)\n expect(result).toBe(true)\n })\n\n it('should handle conditional inside and composition', async () => {\n const hasPermission: Access = async () => ({\n permissions: { contains: 'read' },\n })\n const isActiveUser: Access = async () => true\n const featureFlagEnabled = true\n\n const access = accessAND(hasPermission, conditional(featureFlagEnabled, isActiveUser))\n\n const result = await access(mockArgs)\n expect(result).toEqual({\n and: [{ permissions: { contains: 'read' } }],\n })\n })\n\n it('should correctly handle multiple levels of nesting', async () => {\n const a: Access = async () => true\n const b: Access = async () => false\n const c: Access = async () => ({ field1: { equals: 'value1' } })\n const d: Access = async () => ({ field2: { equals: 'value2' } })\n\n // (a AND (b OR (c AND d)))\n const access = accessAND(a, accessOR(b, accessAND(c, d)))\n\n const result = await access(mockArgs)\n expect(result).toEqual({\n and: [\n { or: [{ and: [{ field1: { equals: 'value1' } }, { field2: { equals: 'value2' } }] }] },\n ],\n })\n })\n })\n\n describe('edge cases and failure scenarios', () => {\n it('should handle checker that throws an error', async () => {\n const checker1: Access = async () => {\n throw new Error('Access check failed')\n }\n const checker2: Access = async () => true\n\n await expect(accessOR(checker1, checker2)(mockArgs)).rejects.toThrow('Access check failed')\n })\n\n it('should handle null or undefined returns gracefully', async () => {\n const checker1: Access = async () => null as any\n const checker2: Access = async () => undefined as any\n const checker3: Access = async () => true\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n expect(result).toBe(true)\n })\n\n it('should handle deeply nested Where queries', async () => {\n const checker: Access = async () =>\n ({\n and: [\n {\n or: [\n { field1: { equals: 'value1' } },\n {\n and: [{ field2: { equals: 'value2' } }, { field3: { equals: 'value3' } }],\n },\n ],\n },\n { field4: { not_equals: 'value4' } },\n ],\n }) as Where\n\n const result = await accessOR(checker)(mockArgs)\n\n expect(result).toEqual({\n or: [\n {\n and: [\n {\n or: [\n { field1: { equals: 'value1' } },\n {\n and: [{ field2: { equals: 'value2' } }, { field3: { equals: 'value3' } }],\n },\n ],\n },\n { field4: { not_equals: 'value4' } },\n ],\n },\n ],\n })\n })\n\n it('should handle all checkers returning null/undefined', async () => {\n const checker1: Access = async () => null as any\n const checker2: Access = async () => undefined as any\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n // null and undefined should be treated as false\n expect(result).toBe(false)\n })\n\n it('should handle Where query with empty object', async () => {\n const checker: Access = async () => ({}) as Where\n\n const result = await accessOR(checker)(mockArgs)\n\n expect(result).toEqual({})\n })\n\n it('should handle conditional with complex condition function', async () => {\n const condition = ({ req }: AccessArgs): boolean => {\n return !!(req.user && req.user.email && req.user.email.endsWith('@admin.com'))\n }\n\n const checker: Access = async () => true\n\n // Non-admin email\n const result1 = await conditional(\n condition,\n checker,\n )({\n req: {\n user: { id: '123', email: 'user@example.com' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(result1).toBe(false)\n\n // Admin email\n const result2 = await conditional(\n condition,\n checker,\n )({\n req: {\n user: { id: '123', email: 'admin@admin.com' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(result2).toBe(true)\n })\n\n it('should handle alternating true/false in or correctly', async () => {\n const checkers: Access[] = [\n async () => false,\n async () => false,\n async () => false,\n async () => true, // This should cause short-circuit\n async () => {\n throw new Error('Should not be called')\n },\n ]\n\n const result = await accessOR(...checkers)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should handle alternating true/false in and correctly', async () => {\n const checkers: Access[] = [\n async () => true,\n async () => true,\n async () => false, // This should cause short-circuit\n async () => {\n throw new Error('Should not be called')\n },\n ]\n\n const result = await accessAND(...checkers)(mockArgs)\n\n expect(result).toBe(false)\n })\n })\n})\n"],"names":["describe","it","expect","accessAND","conditional","accessOR","mockArgs","req","user","headers","Headers","payload","context","mockArgsWithUser","id","email","checker1","checker2","result","toBe","checker3","customer","equals","status","toEqual","or","checker4","secondCheckerCalled","and","role","Error","checker","condition","checkerCalled","result1","result2","isAdmin","isOwner","isGuest","allowGuestCarts","access","guestResult","adminResult","ownerResult","visibility","allowGuestAccess","hasPermission","permissions","contains","isActiveUser","featureFlagEnabled","a","b","c","field1","d","field2","rejects","toThrow","undefined","field3","field4","not_equals","endsWith","checkers"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/plugin-ecommerce",
3
- "version": "3.71.0-internal.727c7a4",
3
+ "version": "3.71.0-internal.e36f916",
4
4
  "description": "Ecommerce plugin for Payload",
5
5
  "keywords": [
6
6
  "payload",
@@ -69,8 +69,8 @@
69
69
  ],
70
70
  "dependencies": {
71
71
  "qs-esm": "7.0.2",
72
- "@payloadcms/translations": "3.71.0-internal.727c7a4",
73
- "@payloadcms/ui": "3.71.0-internal.727c7a4"
72
+ "@payloadcms/translations": "3.71.0-internal.e36f916",
73
+ "@payloadcms/ui": "3.71.0-internal.e36f916"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/json-schema": "7.0.15",
@@ -78,13 +78,13 @@
78
78
  "@types/react-dom": "19.2.1",
79
79
  "stripe": "18.3.0",
80
80
  "@payloadcms/eslint-config": "3.28.0",
81
- "payload": "3.71.0-internal.727c7a4",
82
- "@payloadcms/next": "3.71.0-internal.727c7a4"
81
+ "payload": "3.71.0-internal.e36f916",
82
+ "@payloadcms/next": "3.71.0-internal.e36f916"
83
83
  },
84
84
  "peerDependencies": {
85
85
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
86
86
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
87
- "payload": "3.71.0-internal.727c7a4"
87
+ "payload": "3.71.0-internal.e36f916"
88
88
  },
89
89
  "publishConfig": {
90
90
  "registry": "https://registry.npmjs.org/"