@payloadcms/plugin-ecommerce 3.71.0-internal.ef75fa0 → 3.71.0

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.
Files changed (278) hide show
  1. package/dist/collections/addresses/createAddressesCollection.d.ts +1 -1
  2. package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -1
  3. package/dist/collections/addresses/createAddressesCollection.js +1 -1
  4. package/dist/collections/addresses/createAddressesCollection.js.map +1 -1
  5. package/dist/collections/addresses/hooks/beforeChange.d.ts +2 -3
  6. package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -1
  7. package/dist/collections/addresses/hooks/beforeChange.js +7 -3
  8. package/dist/collections/addresses/hooks/beforeChange.js.map +1 -1
  9. package/dist/collections/carts/beforeChange.d.ts.map +1 -1
  10. package/dist/collections/carts/beforeChange.js.map +1 -1
  11. package/dist/collections/carts/createCartsCollection.d.ts +21 -0
  12. package/dist/collections/carts/createCartsCollection.d.ts.map +1 -1
  13. package/dist/collections/carts/createCartsCollection.js +27 -2
  14. package/dist/collections/carts/createCartsCollection.js.map +1 -1
  15. package/dist/collections/carts/endpoints/addItem.d.ts +19 -0
  16. package/dist/collections/carts/endpoints/addItem.d.ts.map +1 -0
  17. package/dist/collections/carts/endpoints/addItem.js +54 -0
  18. package/dist/collections/carts/endpoints/addItem.js.map +1 -0
  19. package/dist/collections/carts/endpoints/clearCart.d.ts +15 -0
  20. package/dist/collections/carts/endpoints/clearCart.d.ts.map +1 -0
  21. package/dist/collections/carts/endpoints/clearCart.js +41 -0
  22. package/dist/collections/carts/endpoints/clearCart.js.map +1 -0
  23. package/dist/collections/carts/endpoints/mergeCart.d.ts +21 -0
  24. package/dist/collections/carts/endpoints/mergeCart.d.ts.map +1 -0
  25. package/dist/collections/carts/endpoints/mergeCart.js +72 -0
  26. package/dist/collections/carts/endpoints/mergeCart.js.map +1 -0
  27. package/dist/collections/carts/endpoints/removeItem.d.ts +16 -0
  28. package/dist/collections/carts/endpoints/removeItem.d.ts.map +1 -0
  29. package/dist/collections/carts/endpoints/removeItem.js +51 -0
  30. package/dist/collections/carts/endpoints/removeItem.js.map +1 -0
  31. package/dist/collections/carts/endpoints/updateItem.d.ts +40 -0
  32. package/dist/collections/carts/endpoints/updateItem.d.ts.map +1 -0
  33. package/dist/collections/carts/endpoints/updateItem.js +95 -0
  34. package/dist/collections/carts/endpoints/updateItem.js.map +1 -0
  35. package/dist/collections/carts/hasCartSecretAccess.d.ts +2 -2
  36. package/dist/collections/carts/hasCartSecretAccess.js +3 -3
  37. package/dist/collections/carts/hasCartSecretAccess.js.map +1 -1
  38. package/dist/collections/carts/operations/addItem.d.ts +24 -0
  39. package/dist/collections/carts/operations/addItem.d.ts.map +1 -0
  40. package/dist/collections/carts/operations/addItem.js +95 -0
  41. package/dist/collections/carts/operations/addItem.js.map +1 -0
  42. package/dist/collections/carts/operations/clearCart.d.ts +20 -0
  43. package/dist/collections/carts/operations/clearCart.d.ts.map +1 -0
  44. package/dist/collections/carts/operations/clearCart.js +53 -0
  45. package/dist/collections/carts/operations/clearCart.js.map +1 -0
  46. package/dist/collections/carts/operations/createRequestWithSecret.d.ts +11 -0
  47. package/dist/collections/carts/operations/createRequestWithSecret.d.ts.map +1 -0
  48. package/dist/collections/carts/operations/createRequestWithSecret.js +21 -0
  49. package/dist/collections/carts/operations/createRequestWithSecret.js.map +1 -0
  50. package/dist/collections/carts/operations/defaultCartItemMatcher.d.ts +19 -0
  51. package/dist/collections/carts/operations/defaultCartItemMatcher.d.ts.map +1 -0
  52. package/dist/collections/carts/operations/defaultCartItemMatcher.js +25 -0
  53. package/dist/collections/carts/operations/defaultCartItemMatcher.js.map +1 -0
  54. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js +358 -0
  55. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js.map +1 -0
  56. package/dist/collections/carts/operations/mergeCart.d.ts +54 -0
  57. package/dist/collections/carts/operations/mergeCart.d.ts.map +1 -0
  58. package/dist/collections/carts/operations/mergeCart.js +144 -0
  59. package/dist/collections/carts/operations/mergeCart.js.map +1 -0
  60. package/dist/collections/carts/operations/removeItem.d.ts +21 -0
  61. package/dist/collections/carts/operations/removeItem.d.ts.map +1 -0
  62. package/dist/collections/carts/operations/removeItem.js +69 -0
  63. package/dist/collections/carts/operations/removeItem.js.map +1 -0
  64. package/dist/collections/carts/operations/types.d.ts +152 -0
  65. package/dist/collections/carts/operations/types.d.ts.map +1 -0
  66. package/dist/collections/carts/operations/types.js +7 -0
  67. package/dist/collections/carts/operations/types.js.map +1 -0
  68. package/dist/collections/carts/operations/updateItem.d.ts +41 -0
  69. package/dist/collections/carts/operations/updateItem.d.ts.map +1 -0
  70. package/dist/collections/carts/operations/updateItem.js +110 -0
  71. package/dist/collections/carts/operations/updateItem.js.map +1 -0
  72. package/dist/collections/variants/createVariantsCollection/index.d.ts +4 -0
  73. package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -1
  74. package/dist/collections/variants/createVariantsCollection/index.js +8 -2
  75. package/dist/collections/variants/createVariantsCollection/index.js.map +1 -1
  76. package/dist/endpoints/confirmOrder.d.ts.map +1 -1
  77. package/dist/endpoints/confirmOrder.js +9 -2
  78. package/dist/endpoints/confirmOrder.js.map +1 -1
  79. package/dist/endpoints/initiatePayment.d.ts.map +1 -1
  80. package/dist/endpoints/initiatePayment.js +8 -2
  81. package/dist/endpoints/initiatePayment.js.map +1 -1
  82. package/dist/exports/client/react.d.ts +1 -1
  83. package/dist/exports/client/react.d.ts.map +1 -1
  84. package/dist/exports/client/react.js +1 -1
  85. package/dist/exports/client/react.js.map +1 -1
  86. package/dist/exports/types.d.ts +1 -1
  87. package/dist/exports/types.d.ts.map +1 -1
  88. package/dist/exports/types.js.map +1 -1
  89. package/dist/index.d.ts +7 -0
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +9 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -1
  94. package/dist/payments/adapters/stripe/confirmOrder.js +2 -2
  95. package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -1
  96. package/dist/react/provider/index.d.ts +5 -4
  97. package/dist/react/provider/index.d.ts.map +1 -1
  98. package/dist/react/provider/index.js +449 -265
  99. package/dist/react/provider/index.js.map +1 -1
  100. package/dist/translations/index.d.ts +3 -4
  101. package/dist/translations/index.d.ts.map +1 -1
  102. package/dist/translations/index.js +80 -2
  103. package/dist/translations/index.js.map +1 -1
  104. package/dist/translations/languages/ar.d.ts +89 -0
  105. package/dist/translations/languages/ar.d.ts.map +1 -0
  106. package/dist/translations/languages/ar.js +92 -0
  107. package/dist/translations/languages/ar.js.map +1 -0
  108. package/dist/translations/languages/az.d.ts +89 -0
  109. package/dist/translations/languages/az.d.ts.map +1 -0
  110. package/dist/translations/languages/az.js +92 -0
  111. package/dist/translations/languages/az.js.map +1 -0
  112. package/dist/translations/languages/bg.d.ts +89 -0
  113. package/dist/translations/languages/bg.d.ts.map +1 -0
  114. package/dist/translations/languages/bg.js +92 -0
  115. package/dist/translations/languages/bg.js.map +1 -0
  116. package/dist/translations/languages/ca.d.ts +89 -0
  117. package/dist/translations/languages/ca.d.ts.map +1 -0
  118. package/dist/translations/languages/ca.js +92 -0
  119. package/dist/translations/languages/ca.js.map +1 -0
  120. package/dist/translations/languages/cs.d.ts +89 -0
  121. package/dist/translations/languages/cs.d.ts.map +1 -0
  122. package/dist/translations/languages/cs.js +92 -0
  123. package/dist/translations/languages/cs.js.map +1 -0
  124. package/dist/translations/languages/da.d.ts +89 -0
  125. package/dist/translations/languages/da.d.ts.map +1 -0
  126. package/dist/translations/languages/da.js +92 -0
  127. package/dist/translations/languages/da.js.map +1 -0
  128. package/dist/translations/languages/de.d.ts +89 -0
  129. package/dist/translations/languages/de.d.ts.map +1 -0
  130. package/dist/translations/languages/de.js +92 -0
  131. package/dist/translations/languages/de.js.map +1 -0
  132. package/dist/translations/languages/en.d.ts +89 -0
  133. package/dist/translations/languages/en.d.ts.map +1 -0
  134. package/dist/translations/languages/en.js +92 -0
  135. package/dist/translations/languages/en.js.map +1 -0
  136. package/dist/translations/languages/es.d.ts +89 -0
  137. package/dist/translations/languages/es.d.ts.map +1 -0
  138. package/dist/translations/languages/es.js +92 -0
  139. package/dist/translations/languages/es.js.map +1 -0
  140. package/dist/translations/languages/et.d.ts +89 -0
  141. package/dist/translations/languages/et.d.ts.map +1 -0
  142. package/dist/translations/languages/et.js +92 -0
  143. package/dist/translations/languages/et.js.map +1 -0
  144. package/dist/translations/languages/fa.d.ts +89 -0
  145. package/dist/translations/languages/fa.d.ts.map +1 -0
  146. package/dist/translations/languages/fa.js +92 -0
  147. package/dist/translations/languages/fa.js.map +1 -0
  148. package/dist/translations/languages/fr.d.ts +89 -0
  149. package/dist/translations/languages/fr.d.ts.map +1 -0
  150. package/dist/translations/languages/fr.js +92 -0
  151. package/dist/translations/languages/fr.js.map +1 -0
  152. package/dist/translations/languages/he.d.ts +89 -0
  153. package/dist/translations/languages/he.d.ts.map +1 -0
  154. package/dist/translations/languages/he.js +92 -0
  155. package/dist/translations/languages/he.js.map +1 -0
  156. package/dist/translations/languages/hr.d.ts +89 -0
  157. package/dist/translations/languages/hr.d.ts.map +1 -0
  158. package/dist/translations/languages/hr.js +92 -0
  159. package/dist/translations/languages/hr.js.map +1 -0
  160. package/dist/translations/languages/hu.d.ts +89 -0
  161. package/dist/translations/languages/hu.d.ts.map +1 -0
  162. package/dist/translations/languages/hu.js +92 -0
  163. package/dist/translations/languages/hu.js.map +1 -0
  164. package/dist/translations/languages/hy.d.ts +89 -0
  165. package/dist/translations/languages/hy.d.ts.map +1 -0
  166. package/dist/translations/languages/hy.js +92 -0
  167. package/dist/translations/languages/hy.js.map +1 -0
  168. package/dist/translations/languages/is.d.ts +89 -0
  169. package/dist/translations/languages/is.d.ts.map +1 -0
  170. package/dist/translations/languages/is.js +92 -0
  171. package/dist/translations/languages/is.js.map +1 -0
  172. package/dist/translations/languages/it.d.ts +89 -0
  173. package/dist/translations/languages/it.d.ts.map +1 -0
  174. package/dist/translations/languages/it.js +92 -0
  175. package/dist/translations/languages/it.js.map +1 -0
  176. package/dist/translations/languages/ja.d.ts +89 -0
  177. package/dist/translations/languages/ja.d.ts.map +1 -0
  178. package/dist/translations/languages/ja.js +92 -0
  179. package/dist/translations/languages/ja.js.map +1 -0
  180. package/dist/translations/languages/ko.d.ts +89 -0
  181. package/dist/translations/languages/ko.d.ts.map +1 -0
  182. package/dist/translations/languages/ko.js +92 -0
  183. package/dist/translations/languages/ko.js.map +1 -0
  184. package/dist/translations/languages/lt.d.ts +89 -0
  185. package/dist/translations/languages/lt.d.ts.map +1 -0
  186. package/dist/translations/languages/lt.js +92 -0
  187. package/dist/translations/languages/lt.js.map +1 -0
  188. package/dist/translations/languages/my.d.ts +89 -0
  189. package/dist/translations/languages/my.d.ts.map +1 -0
  190. package/dist/translations/languages/my.js +92 -0
  191. package/dist/translations/languages/my.js.map +1 -0
  192. package/dist/translations/languages/nb.d.ts +89 -0
  193. package/dist/translations/languages/nb.d.ts.map +1 -0
  194. package/dist/translations/languages/nb.js +92 -0
  195. package/dist/translations/languages/nb.js.map +1 -0
  196. package/dist/translations/languages/nl.d.ts +89 -0
  197. package/dist/translations/languages/nl.d.ts.map +1 -0
  198. package/dist/translations/languages/nl.js +92 -0
  199. package/dist/translations/languages/nl.js.map +1 -0
  200. package/dist/translations/languages/pl.d.ts +89 -0
  201. package/dist/translations/languages/pl.d.ts.map +1 -0
  202. package/dist/translations/languages/pl.js +92 -0
  203. package/dist/translations/languages/pl.js.map +1 -0
  204. package/dist/translations/languages/pt.d.ts +89 -0
  205. package/dist/translations/languages/pt.d.ts.map +1 -0
  206. package/dist/translations/languages/pt.js +92 -0
  207. package/dist/translations/languages/pt.js.map +1 -0
  208. package/dist/translations/languages/ro.d.ts +89 -0
  209. package/dist/translations/languages/ro.d.ts.map +1 -0
  210. package/dist/translations/languages/ro.js +92 -0
  211. package/dist/translations/languages/ro.js.map +1 -0
  212. package/dist/translations/languages/rs.d.ts +89 -0
  213. package/dist/translations/languages/rs.d.ts.map +1 -0
  214. package/dist/translations/languages/rs.js +92 -0
  215. package/dist/translations/languages/rs.js.map +1 -0
  216. package/dist/translations/languages/rsLatin.d.ts +89 -0
  217. package/dist/translations/languages/rsLatin.d.ts.map +1 -0
  218. package/dist/translations/languages/rsLatin.js +92 -0
  219. package/dist/translations/languages/rsLatin.js.map +1 -0
  220. package/dist/translations/languages/ru.d.ts +89 -0
  221. package/dist/translations/languages/ru.d.ts.map +1 -0
  222. package/dist/translations/languages/ru.js +92 -0
  223. package/dist/translations/languages/ru.js.map +1 -0
  224. package/dist/translations/languages/sk.d.ts +89 -0
  225. package/dist/translations/languages/sk.d.ts.map +1 -0
  226. package/dist/translations/languages/sk.js +92 -0
  227. package/dist/translations/languages/sk.js.map +1 -0
  228. package/dist/translations/languages/sl.d.ts +89 -0
  229. package/dist/translations/languages/sl.d.ts.map +1 -0
  230. package/dist/translations/languages/sl.js +92 -0
  231. package/dist/translations/languages/sl.js.map +1 -0
  232. package/dist/translations/languages/sv.d.ts +89 -0
  233. package/dist/translations/languages/sv.d.ts.map +1 -0
  234. package/dist/translations/languages/sv.js +92 -0
  235. package/dist/translations/languages/sv.js.map +1 -0
  236. package/dist/translations/languages/ta.d.ts +89 -0
  237. package/dist/translations/languages/ta.d.ts.map +1 -0
  238. package/dist/translations/languages/ta.js +92 -0
  239. package/dist/translations/languages/ta.js.map +1 -0
  240. package/dist/translations/languages/th.d.ts +89 -0
  241. package/dist/translations/languages/th.d.ts.map +1 -0
  242. package/dist/translations/languages/th.js +92 -0
  243. package/dist/translations/languages/th.js.map +1 -0
  244. package/dist/translations/languages/tr.d.ts +89 -0
  245. package/dist/translations/languages/tr.d.ts.map +1 -0
  246. package/dist/translations/languages/tr.js +92 -0
  247. package/dist/translations/languages/tr.js.map +1 -0
  248. package/dist/translations/languages/uk.d.ts +89 -0
  249. package/dist/translations/languages/uk.d.ts.map +1 -0
  250. package/dist/translations/languages/uk.js +92 -0
  251. package/dist/translations/languages/uk.js.map +1 -0
  252. package/dist/translations/languages/vi.d.ts +89 -0
  253. package/dist/translations/languages/vi.d.ts.map +1 -0
  254. package/dist/translations/languages/vi.js +92 -0
  255. package/dist/translations/languages/vi.js.map +1 -0
  256. package/dist/translations/languages/zh.d.ts +89 -0
  257. package/dist/translations/languages/zh.d.ts.map +1 -0
  258. package/dist/translations/languages/zh.js +92 -0
  259. package/dist/translations/languages/zh.js.map +1 -0
  260. package/dist/translations/languages/zhTw.d.ts +89 -0
  261. package/dist/translations/languages/zhTw.d.ts.map +1 -0
  262. package/dist/translations/languages/zhTw.js +92 -0
  263. package/dist/translations/languages/zhTw.js.map +1 -0
  264. package/dist/translations/translation-schema.json +313 -5
  265. package/dist/translations/types.d.ts +89 -0
  266. package/dist/translations/types.d.ts.map +1 -0
  267. package/dist/translations/types.js +3 -0
  268. package/dist/translations/types.js.map +1 -0
  269. package/dist/types/index.d.ts +154 -14
  270. package/dist/types/index.d.ts.map +1 -1
  271. package/dist/types/index.js.map +1 -1
  272. package/dist/types/utilities.d.ts +12 -2
  273. package/dist/types/utilities.d.ts.map +1 -1
  274. package/dist/types/utilities.js.map +1 -1
  275. package/dist/ui/VariantOptionsSelector/index.d.ts.map +1 -1
  276. package/dist/ui/VariantOptionsSelector/index.js +6 -3
  277. package/dist/ui/VariantOptionsSelector/index.js.map +1 -1
  278. package/package.json +16 -10
@@ -0,0 +1,69 @@
1
+ import { createRequestWithSecret } from './createRequestWithSecret.js';
2
+ /**
3
+ * Removes an item from a cart by its row ID.
4
+ *
5
+ * This handler is isolated and can be used from:
6
+ * - Custom endpoints
7
+ * - Local API operations
8
+ * - Hooks
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const result = await removeItem({
13
+ * payload,
14
+ * cartsSlug: 'carts',
15
+ * cartID: '123',
16
+ * itemID: 'item-row-id',
17
+ * })
18
+ * ```
19
+ */ export const removeItem = async (args)=>{
20
+ const { cartID, cartsSlug, itemID, payload, req, secret } = args;
21
+ // Inject secret into request context for access control
22
+ const reqWithSecret = createRequestWithSecret(req, secret);
23
+ const cart = await payload.findByID({
24
+ id: cartID,
25
+ collection: cartsSlug,
26
+ depth: 0,
27
+ overrideAccess: false,
28
+ req: reqWithSecret
29
+ });
30
+ if (!cart) {
31
+ return {
32
+ cart: null,
33
+ message: `Cart with ID ${cartID} not found`,
34
+ success: false
35
+ };
36
+ }
37
+ const existingItems = cart.items || [];
38
+ // Find the item by its row ID
39
+ const itemIndex = existingItems.findIndex((item)=>item.id === itemID);
40
+ if (itemIndex === -1) {
41
+ return {
42
+ cart,
43
+ message: `Item with ID ${itemID} not found in cart`,
44
+ success: false
45
+ };
46
+ }
47
+ // Remove the item
48
+ const updatedItems = [
49
+ ...existingItems
50
+ ];
51
+ updatedItems.splice(itemIndex, 1);
52
+ const updatedCart = await payload.update({
53
+ id: cartID,
54
+ collection: cartsSlug,
55
+ data: {
56
+ items: updatedItems
57
+ },
58
+ depth: 0,
59
+ overrideAccess: false,
60
+ req: reqWithSecret
61
+ });
62
+ return {
63
+ cart: updatedCart,
64
+ message: 'Item removed from cart',
65
+ success: true
66
+ };
67
+ };
68
+
69
+ //# sourceMappingURL=removeItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/operations/removeItem.ts"],"sourcesContent":["import type { CartItemData, CartOperationResult, RemoveItemArgs } from './types.js'\n\nimport { createRequestWithSecret } from './createRequestWithSecret.js'\n\n/**\n * Removes an item from a cart by its row ID.\n *\n * This handler is isolated and can be used from:\n * - Custom endpoints\n * - Local API operations\n * - Hooks\n *\n * @example\n * ```ts\n * const result = await removeItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * })\n * ```\n */\nexport const removeItem = async (args: RemoveItemArgs): Promise<CartOperationResult> => {\n const { cartID, cartsSlug, itemID, payload, req, secret } = args\n\n // Inject secret into request context for access control\n const reqWithSecret = createRequestWithSecret(req, secret)\n\n const cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n if (!cart) {\n return {\n cart: null,\n message: `Cart with ID ${cartID} not found`,\n success: false,\n }\n }\n\n const existingItems: CartItemData[] = (cart.items as CartItemData[]) || []\n\n // Find the item by its row ID\n const itemIndex = existingItems.findIndex((item) => item.id === itemID)\n\n if (itemIndex === -1) {\n return {\n cart,\n message: `Item with ID ${itemID} not found in cart`,\n success: false,\n }\n }\n\n // Remove the item\n const updatedItems = [...existingItems]\n updatedItems.splice(itemIndex, 1)\n\n const updatedCart = await payload.update({\n id: cartID,\n collection: cartsSlug,\n data: {\n items: updatedItems,\n },\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n return {\n cart: updatedCart,\n message: 'Item removed from cart',\n success: true,\n }\n}\n"],"names":["createRequestWithSecret","removeItem","args","cartID","cartsSlug","itemID","payload","req","secret","reqWithSecret","cart","findByID","id","collection","depth","overrideAccess","message","success","existingItems","items","itemIndex","findIndex","item","updatedItems","splice","updatedCart","update","data"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,+BAA8B;AAEtE;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,MAAMC,aAAa,OAAOC;IAC/B,MAAM,EAAEC,MAAM,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,GAAG,EAAEC,MAAM,EAAE,GAAGN;IAE5D,wDAAwD;IACxD,MAAMO,gBAAgBT,wBAAwBO,KAAKC;IAEnD,MAAME,OAAO,MAAMJ,QAAQK,QAAQ,CAAC;QAClCC,IAAIT;QACJU,YAAYT;QACZU,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,IAAI,CAACC,MAAM;QACT,OAAO;YACLA,MAAM;YACNM,SAAS,CAAC,aAAa,EAAEb,OAAO,UAAU,CAAC;YAC3Cc,SAAS;QACX;IACF;IAEA,MAAMC,gBAAgC,AAACR,KAAKS,KAAK,IAAuB,EAAE;IAE1E,8BAA8B;IAC9B,MAAMC,YAAYF,cAAcG,SAAS,CAAC,CAACC,OAASA,KAAKV,EAAE,KAAKP;IAEhE,IAAIe,cAAc,CAAC,GAAG;QACpB,OAAO;YACLV;YACAM,SAAS,CAAC,aAAa,EAAEX,OAAO,kBAAkB,CAAC;YACnDY,SAAS;QACX;IACF;IAEA,kBAAkB;IAClB,MAAMM,eAAe;WAAIL;KAAc;IACvCK,aAAaC,MAAM,CAACJ,WAAW;IAE/B,MAAMK,cAAc,MAAMnB,QAAQoB,MAAM,CAAC;QACvCd,IAAIT;QACJU,YAAYT;QACZuB,MAAM;YACJR,OAAOI;QACT;QACAT,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,OAAO;QACLC,MAAMe;QACNT,SAAS;QACTC,SAAS;IACX;AACF,EAAC"}
@@ -0,0 +1,152 @@
1
+ import type { DefaultDocumentIDType, Payload, PayloadRequest } from 'payload';
2
+ /**
3
+ * Represents an item in the cart with populated or ID references.
4
+ */
5
+ export type CartItemData = {
6
+ [key: string]: unknown;
7
+ /**
8
+ * The ID of the cart item. Array item IDs are always strings in Payload,
9
+ * regardless of the database adapter's default ID type.
10
+ */
11
+ id?: string;
12
+ product: {
13
+ [key: string]: unknown;
14
+ id: DefaultDocumentIDType;
15
+ } | DefaultDocumentIDType;
16
+ quantity: number;
17
+ variant?: {
18
+ [key: string]: unknown;
19
+ id: DefaultDocumentIDType;
20
+ } | DefaultDocumentIDType;
21
+ };
22
+ /**
23
+ * Represents a new item to be added to the cart.
24
+ */
25
+ export type NewCartItem = {
26
+ [key: string]: unknown;
27
+ product: DefaultDocumentIDType;
28
+ quantity?: number;
29
+ variant?: DefaultDocumentIDType;
30
+ };
31
+ /**
32
+ * Arguments for the cart item matcher function.
33
+ */
34
+ export type CartItemMatcherArgs = {
35
+ /** The existing cart item to compare against */
36
+ existingItem: CartItemData;
37
+ /** The new item being added */
38
+ newItem: NewCartItem;
39
+ };
40
+ /**
41
+ * Function to determine if two cart items should be considered the same.
42
+ * When items match, their quantities are combined instead of creating separate entries.
43
+ */
44
+ export type CartItemMatcher = (args: CartItemMatcherArgs) => boolean;
45
+ /**
46
+ * MongoDB-style update operator for numeric fields.
47
+ * Supports $inc for increment/decrement operations.
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * // Set quantity to 5
52
+ * { quantity: 5 }
53
+ *
54
+ * // Increment quantity by 1
55
+ * { quantity: { $inc: 1 } }
56
+ *
57
+ * // Decrement quantity by 2
58
+ * { quantity: { $inc: -2 } }
59
+ * ```
60
+ */
61
+ export type NumericOperator = {
62
+ /** Increment by this value (use negative to decrement) */
63
+ $inc: number;
64
+ };
65
+ /**
66
+ * A field value that can be either a direct value or an operator.
67
+ */
68
+ export type FieldWithOperator<T> = NumericOperator | T;
69
+ /**
70
+ * Checks if a value is a NumericOperator.
71
+ */
72
+ export declare function isNumericOperator(value: unknown): value is NumericOperator;
73
+ /**
74
+ * Base arguments for all cart operations.
75
+ */
76
+ export type BaseCartOperationArgs = {
77
+ /** The cart ID to operate on */
78
+ cartID: DefaultDocumentIDType;
79
+ /** The carts collection slug */
80
+ cartsSlug: string;
81
+ /** Payload instance */
82
+ payload: Payload;
83
+ /** Optional request context for access control */
84
+ req?: PayloadRequest;
85
+ /** Secret for guest cart access */
86
+ secret?: string;
87
+ };
88
+ /**
89
+ * Arguments for the addItem operation.
90
+ */
91
+ export type AddItemArgs = {
92
+ /** Custom matcher function to determine item uniqueness */
93
+ cartItemMatcher?: CartItemMatcher;
94
+ /** The item to add */
95
+ item: NewCartItem;
96
+ /** Quantity to add (defaults to 1) */
97
+ quantity?: number;
98
+ } & BaseCartOperationArgs;
99
+ /**
100
+ * Arguments for the removeItem operation.
101
+ */
102
+ export type RemoveItemArgs = {
103
+ /**
104
+ * The cart item row ID to remove.
105
+ * Array item IDs are always strings in Payload, regardless of the database adapter's default ID type.
106
+ */
107
+ itemID: string;
108
+ } & BaseCartOperationArgs;
109
+ /**
110
+ * Arguments for the updateItem operation.
111
+ * Supports MongoDB-style operators for flexible updates.
112
+ */
113
+ export type UpdateItemArgs = {
114
+ /**
115
+ * The cart item row ID to update.
116
+ * Array item IDs are always strings in Payload, regardless of the database adapter's default ID type.
117
+ */
118
+ itemID: string;
119
+ /**
120
+ * The quantity value or operator.
121
+ * - Direct number: Sets the quantity to this value
122
+ * - { $inc: n }: Increments quantity by n (use negative to decrement)
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * // Set quantity to 5
127
+ * { quantity: 5 }
128
+ *
129
+ * // Increment by 1
130
+ * { quantity: { $inc: 1 } }
131
+ *
132
+ * // Decrement by 1
133
+ * { quantity: { $inc: -1 } }
134
+ * ```
135
+ */
136
+ quantity: FieldWithOperator<number>;
137
+ /** Whether to remove the item if quantity reaches 0 (defaults to true) */
138
+ removeOnZero?: boolean;
139
+ } & BaseCartOperationArgs;
140
+ /**
141
+ * Arguments for the clearCart operation.
142
+ */
143
+ export type ClearCartArgs = BaseCartOperationArgs;
144
+ /**
145
+ * Result of a cart operation.
146
+ */
147
+ export type CartOperationResult<T = unknown> = {
148
+ cart: T;
149
+ message: string;
150
+ success: boolean;
151
+ };
152
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/operations/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Checks if a value is a NumericOperator.
3
+ */ export function isNumericOperator(value) {
4
+ return typeof value === 'object' && value !== null && '$inc' in value;
5
+ }
6
+
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/operations/types.ts"],"sourcesContent":["import type { DefaultDocumentIDType, Payload, PayloadRequest } from 'payload'\n\n/**\n * Represents an item in the cart with populated or ID references.\n */\nexport type CartItemData = {\n [key: string]: unknown\n /**\n * The ID of the cart item. Array item IDs are always strings in Payload,\n * regardless of the database adapter's default ID type.\n */\n id?: string\n product: { [key: string]: unknown; id: DefaultDocumentIDType } | DefaultDocumentIDType\n quantity: number\n variant?: { [key: string]: unknown; id: DefaultDocumentIDType } | DefaultDocumentIDType\n}\n\n/**\n * Represents a new item to be added to the cart.\n */\nexport type NewCartItem = {\n [key: string]: unknown\n product: DefaultDocumentIDType\n quantity?: number\n variant?: DefaultDocumentIDType\n}\n\n/**\n * Arguments for the cart item matcher function.\n */\nexport type CartItemMatcherArgs = {\n /** The existing cart item to compare against */\n existingItem: CartItemData\n /** The new item being added */\n newItem: NewCartItem\n}\n\n/**\n * Function to determine if two cart items should be considered the same.\n * When items match, their quantities are combined instead of creating separate entries.\n */\nexport type CartItemMatcher = (args: CartItemMatcherArgs) => boolean\n\n/**\n * MongoDB-style update operator for numeric fields.\n * Supports $inc for increment/decrement operations.\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * { quantity: 5 }\n *\n * // Increment quantity by 1\n * { quantity: { $inc: 1 } }\n *\n * // Decrement quantity by 2\n * { quantity: { $inc: -2 } }\n * ```\n */\nexport type NumericOperator = {\n /** Increment by this value (use negative to decrement) */\n $inc: number\n}\n\n/**\n * A field value that can be either a direct value or an operator.\n */\nexport type FieldWithOperator<T> = NumericOperator | T\n\n/**\n * Checks if a value is a NumericOperator.\n */\nexport function isNumericOperator(value: unknown): value is NumericOperator {\n return typeof value === 'object' && value !== null && '$inc' in value\n}\n\n/**\n * Base arguments for all cart operations.\n */\nexport type BaseCartOperationArgs = {\n /** The cart ID to operate on */\n cartID: DefaultDocumentIDType\n /** The carts collection slug */\n cartsSlug: string\n /** Payload instance */\n payload: Payload\n /** Optional request context for access control */\n req?: PayloadRequest\n /** Secret for guest cart access */\n secret?: string\n}\n\n/**\n * Arguments for the addItem operation.\n */\nexport type AddItemArgs = {\n /** Custom matcher function to determine item uniqueness */\n cartItemMatcher?: CartItemMatcher\n /** The item to add */\n item: NewCartItem\n /** Quantity to add (defaults to 1) */\n quantity?: number\n} & BaseCartOperationArgs\n\n/**\n * Arguments for the removeItem operation.\n */\nexport type RemoveItemArgs = {\n /**\n * The cart item row ID to remove.\n * Array item IDs are always strings in Payload, regardless of the database adapter's default ID type.\n */\n itemID: string\n} & BaseCartOperationArgs\n\n/**\n * Arguments for the updateItem operation.\n * Supports MongoDB-style operators for flexible updates.\n */\nexport type UpdateItemArgs = {\n /**\n * The cart item row ID to update.\n * Array item IDs are always strings in Payload, regardless of the database adapter's default ID type.\n */\n itemID: string\n /**\n * The quantity value or operator.\n * - Direct number: Sets the quantity to this value\n * - { $inc: n }: Increments quantity by n (use negative to decrement)\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * { quantity: 5 }\n *\n * // Increment by 1\n * { quantity: { $inc: 1 } }\n *\n * // Decrement by 1\n * { quantity: { $inc: -1 } }\n * ```\n */\n quantity: FieldWithOperator<number>\n /** Whether to remove the item if quantity reaches 0 (defaults to true) */\n removeOnZero?: boolean\n} & BaseCartOperationArgs\n\n/**\n * Arguments for the clearCart operation.\n */\nexport type ClearCartArgs = BaseCartOperationArgs\n\n/**\n * Result of a cart operation.\n */\nexport type CartOperationResult<T = unknown> = {\n cart: T\n message: string\n success: boolean\n}\n"],"names":["isNumericOperator","value"],"mappings":"AAqEA;;CAEC,GACD,OAAO,SAASA,kBAAkBC,KAAc;IAC9C,OAAO,OAAOA,UAAU,YAAYA,UAAU,QAAQ,UAAUA;AAClE"}
@@ -0,0 +1,41 @@
1
+ import type { CartOperationResult, UpdateItemArgs } from './types.js';
2
+ /**
3
+ * Updates an item in the cart using MongoDB-style operators.
4
+ *
5
+ * This handler is isolated and can be used from:
6
+ * - Custom endpoints
7
+ * - Local API operations
8
+ * - Hooks
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * // Set quantity to 5
13
+ * const result = await updateItem({
14
+ * payload,
15
+ * cartsSlug: 'carts',
16
+ * cartID: '123',
17
+ * itemID: 'item-row-id',
18
+ * quantity: 5,
19
+ * })
20
+ *
21
+ * // Increment by 1
22
+ * const result = await updateItem({
23
+ * payload,
24
+ * cartsSlug: 'carts',
25
+ * cartID: '123',
26
+ * itemID: 'item-row-id',
27
+ * quantity: { $inc: 1 },
28
+ * })
29
+ *
30
+ * // Decrement by 2
31
+ * const result = await updateItem({
32
+ * payload,
33
+ * cartsSlug: 'carts',
34
+ * cartID: '123',
35
+ * itemID: 'item-row-id',
36
+ * quantity: { $inc: -2 },
37
+ * })
38
+ * ```
39
+ */
40
+ export declare const updateItem: (args: UpdateItemArgs) => Promise<CartOperationResult>;
41
+ //# sourceMappingURL=updateItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateItem.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/operations/updateItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,UAAU,SAAgB,cAAc,KAAG,OAAO,CAAC,mBAAmB,CA8ElF,CAAA"}
@@ -0,0 +1,110 @@
1
+ import { createRequestWithSecret } from './createRequestWithSecret.js';
2
+ import { isNumericOperator } from './types.js';
3
+ /**
4
+ * Updates an item in the cart using MongoDB-style operators.
5
+ *
6
+ * This handler is isolated and can be used from:
7
+ * - Custom endpoints
8
+ * - Local API operations
9
+ * - Hooks
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // Set quantity to 5
14
+ * const result = await updateItem({
15
+ * payload,
16
+ * cartsSlug: 'carts',
17
+ * cartID: '123',
18
+ * itemID: 'item-row-id',
19
+ * quantity: 5,
20
+ * })
21
+ *
22
+ * // Increment by 1
23
+ * const result = await updateItem({
24
+ * payload,
25
+ * cartsSlug: 'carts',
26
+ * cartID: '123',
27
+ * itemID: 'item-row-id',
28
+ * quantity: { $inc: 1 },
29
+ * })
30
+ *
31
+ * // Decrement by 2
32
+ * const result = await updateItem({
33
+ * payload,
34
+ * cartsSlug: 'carts',
35
+ * cartID: '123',
36
+ * itemID: 'item-row-id',
37
+ * quantity: { $inc: -2 },
38
+ * })
39
+ * ```
40
+ */ export const updateItem = async (args)=>{
41
+ const { cartID, cartsSlug, itemID, payload, quantity, removeOnZero = true, req, secret } = args;
42
+ // Inject secret into request context for access control
43
+ const reqWithSecret = createRequestWithSecret(req, secret);
44
+ const cart = await payload.findByID({
45
+ id: cartID,
46
+ collection: cartsSlug,
47
+ depth: 0,
48
+ overrideAccess: false,
49
+ req: reqWithSecret
50
+ });
51
+ if (!cart) {
52
+ return {
53
+ cart: null,
54
+ message: `Cart with ID ${cartID} not found`,
55
+ success: false
56
+ };
57
+ }
58
+ const existingItems = cart.items || [];
59
+ // Find the item by its row ID
60
+ const itemIndex = existingItems.findIndex((item)=>item.id === itemID);
61
+ if (itemIndex === -1) {
62
+ return {
63
+ cart,
64
+ message: `Item with ID ${itemID} not found in cart`,
65
+ success: false
66
+ };
67
+ }
68
+ const updatedItems = [
69
+ ...existingItems
70
+ ];
71
+ const existingItem = updatedItems[itemIndex];
72
+ const currentQuantity = existingItem.quantity;
73
+ // Calculate new quantity based on operator or direct value
74
+ let newQuantity;
75
+ if (isNumericOperator(quantity)) {
76
+ // $inc operator: add to current value
77
+ newQuantity = currentQuantity + quantity.$inc;
78
+ } else {
79
+ // Direct value: set to this value
80
+ newQuantity = quantity;
81
+ }
82
+ if (newQuantity <= 0 && removeOnZero) {
83
+ // Remove the item if quantity reaches 0 or below
84
+ updatedItems.splice(itemIndex, 1);
85
+ } else {
86
+ // Update the quantity (minimum 1 if not removing on zero)
87
+ updatedItems[itemIndex] = {
88
+ ...existingItem,
89
+ quantity: removeOnZero ? newQuantity : Math.max(1, newQuantity)
90
+ };
91
+ }
92
+ const updatedCart = await payload.update({
93
+ id: cartID,
94
+ collection: cartsSlug,
95
+ data: {
96
+ items: updatedItems
97
+ },
98
+ depth: 0,
99
+ overrideAccess: false,
100
+ req: reqWithSecret
101
+ });
102
+ const wasRemoved = newQuantity <= 0 && removeOnZero;
103
+ return {
104
+ cart: updatedCart,
105
+ message: wasRemoved ? 'Item removed from cart' : 'Item quantity updated',
106
+ success: true
107
+ };
108
+ };
109
+
110
+ //# sourceMappingURL=updateItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/operations/updateItem.ts"],"sourcesContent":["import type { CartItemData, CartOperationResult, UpdateItemArgs } from './types.js'\n\nimport { createRequestWithSecret } from './createRequestWithSecret.js'\nimport { isNumericOperator } from './types.js'\n\n/**\n * Updates an item in the cart using MongoDB-style operators.\n *\n * This handler is isolated and can be used from:\n * - Custom endpoints\n * - Local API operations\n * - Hooks\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * const result = await updateItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * quantity: 5,\n * })\n *\n * // Increment by 1\n * const result = await updateItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * quantity: { $inc: 1 },\n * })\n *\n * // Decrement by 2\n * const result = await updateItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * quantity: { $inc: -2 },\n * })\n * ```\n */\nexport const updateItem = async (args: UpdateItemArgs): Promise<CartOperationResult> => {\n const { cartID, cartsSlug, itemID, payload, quantity, removeOnZero = true, req, secret } = args\n\n // Inject secret into request context for access control\n const reqWithSecret = createRequestWithSecret(req, secret)\n\n const cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n if (!cart) {\n return {\n cart: null,\n message: `Cart with ID ${cartID} not found`,\n success: false,\n }\n }\n\n const existingItems: CartItemData[] = (cart.items as CartItemData[]) || []\n\n // Find the item by its row ID\n const itemIndex = existingItems.findIndex((item) => item.id === itemID)\n\n if (itemIndex === -1) {\n return {\n cart,\n message: `Item with ID ${itemID} not found in cart`,\n success: false,\n }\n }\n\n const updatedItems = [...existingItems]\n const existingItem = updatedItems[itemIndex]!\n const currentQuantity = existingItem.quantity\n\n // Calculate new quantity based on operator or direct value\n let newQuantity: number\n if (isNumericOperator(quantity)) {\n // $inc operator: add to current value\n newQuantity = currentQuantity + quantity.$inc\n } else {\n // Direct value: set to this value\n newQuantity = quantity\n }\n\n if (newQuantity <= 0 && removeOnZero) {\n // Remove the item if quantity reaches 0 or below\n updatedItems.splice(itemIndex, 1)\n } else {\n // Update the quantity (minimum 1 if not removing on zero)\n updatedItems[itemIndex] = {\n ...existingItem,\n quantity: removeOnZero ? newQuantity : Math.max(1, newQuantity),\n }\n }\n\n const updatedCart = await payload.update({\n id: cartID,\n collection: cartsSlug,\n data: {\n items: updatedItems,\n },\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n const wasRemoved = newQuantity <= 0 && removeOnZero\n\n return {\n cart: updatedCart,\n message: wasRemoved ? 'Item removed from cart' : 'Item quantity updated',\n success: true,\n }\n}\n"],"names":["createRequestWithSecret","isNumericOperator","updateItem","args","cartID","cartsSlug","itemID","payload","quantity","removeOnZero","req","secret","reqWithSecret","cart","findByID","id","collection","depth","overrideAccess","message","success","existingItems","items","itemIndex","findIndex","item","updatedItems","existingItem","currentQuantity","newQuantity","$inc","splice","Math","max","updatedCart","update","data","wasRemoved"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,+BAA8B;AACtE,SAASC,iBAAiB,QAAQ,aAAY;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCC,GACD,OAAO,MAAMC,aAAa,OAAOC;IAC/B,MAAM,EAAEC,MAAM,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,eAAe,IAAI,EAAEC,GAAG,EAAEC,MAAM,EAAE,GAAGR;IAE3F,wDAAwD;IACxD,MAAMS,gBAAgBZ,wBAAwBU,KAAKC;IAEnD,MAAME,OAAO,MAAMN,QAAQO,QAAQ,CAAC;QAClCC,IAAIX;QACJY,YAAYX;QACZY,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,IAAI,CAACC,MAAM;QACT,OAAO;YACLA,MAAM;YACNM,SAAS,CAAC,aAAa,EAAEf,OAAO,UAAU,CAAC;YAC3CgB,SAAS;QACX;IACF;IAEA,MAAMC,gBAAgC,AAACR,KAAKS,KAAK,IAAuB,EAAE;IAE1E,8BAA8B;IAC9B,MAAMC,YAAYF,cAAcG,SAAS,CAAC,CAACC,OAASA,KAAKV,EAAE,KAAKT;IAEhE,IAAIiB,cAAc,CAAC,GAAG;QACpB,OAAO;YACLV;YACAM,SAAS,CAAC,aAAa,EAAEb,OAAO,kBAAkB,CAAC;YACnDc,SAAS;QACX;IACF;IAEA,MAAMM,eAAe;WAAIL;KAAc;IACvC,MAAMM,eAAeD,YAAY,CAACH,UAAU;IAC5C,MAAMK,kBAAkBD,aAAanB,QAAQ;IAE7C,2DAA2D;IAC3D,IAAIqB;IACJ,IAAI5B,kBAAkBO,WAAW;QAC/B,sCAAsC;QACtCqB,cAAcD,kBAAkBpB,SAASsB,IAAI;IAC/C,OAAO;QACL,kCAAkC;QAClCD,cAAcrB;IAChB;IAEA,IAAIqB,eAAe,KAAKpB,cAAc;QACpC,iDAAiD;QACjDiB,aAAaK,MAAM,CAACR,WAAW;IACjC,OAAO;QACL,0DAA0D;QAC1DG,YAAY,CAACH,UAAU,GAAG;YACxB,GAAGI,YAAY;YACfnB,UAAUC,eAAeoB,cAAcG,KAAKC,GAAG,CAAC,GAAGJ;QACrD;IACF;IAEA,MAAMK,cAAc,MAAM3B,QAAQ4B,MAAM,CAAC;QACvCpB,IAAIX;QACJY,YAAYX;QACZ+B,MAAM;YACJd,OAAOI;QACT;QACAT,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,MAAMyB,aAAaR,eAAe,KAAKpB;IAEvC,OAAO;QACLI,MAAMqB;QACNf,SAASkB,aAAa,2BAA2B;QACjDjB,SAAS;IACX;AACF,EAAC"}
@@ -15,6 +15,10 @@ type Props = {
15
15
  * Slug of the variant options collection, defaults to 'variantOptions'.
16
16
  */
17
17
  variantOptionsSlug?: string;
18
+ /**
19
+ * Slug of the variant types collection, defaults to 'variantTypes'.
20
+ */
21
+ variantTypesSlug?: string;
18
22
  };
19
23
  export declare const createVariantsCollection: (props: Props) => CollectionConfig;
20
24
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/collections/variants/createVariantsCollection/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAO9F,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAAA;IAChE,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBAqGxD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/collections/variants/createVariantsCollection/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAO9F,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAAA;IAChE,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBA0GxD,CAAA"}
@@ -3,7 +3,7 @@ import { pricesField } from '../../../fields/pricesField.js';
3
3
  import { variantsCollectionBeforeChange as beforeChange } from './hooks/beforeChange.js';
4
4
  import { validateOptions } from './hooks/validateOptions.js';
5
5
  export const createVariantsCollection = (props)=>{
6
- const { access, currenciesConfig, inventory = true, productsSlug = 'products', variantOptionsSlug = 'variantOptions' } = props || {};
6
+ const { access, currenciesConfig, inventory = true, productsSlug = 'products', variantOptionsSlug = 'variantOptions', variantTypesSlug = 'variantTypes' } = props || {};
7
7
  const { supportedCurrencies } = currenciesConfig || {};
8
8
  const fields = [
9
9
  {
@@ -38,11 +38,17 @@ export const createVariantsCollection = (props)=>{
38
38
  }
39
39
  }
40
40
  },
41
+ custom: {
42
+ productsSlug,
43
+ variantTypesSlug
44
+ },
41
45
  hasMany: true,
42
46
  label: 'Variant options',
43
47
  relationTo: variantOptionsSlug,
44
48
  required: true,
45
- validate: validateOptions()
49
+ validate: validateOptions({
50
+ productsCollectionSlug: productsSlug
51
+ })
46
52
  },
47
53
  ...inventory ? [
48
54
  inventoryField()
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/collections/variants/createVariantsCollection/index.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { AccessConfig, CurrenciesConfig, InventoryConfig } from '../../../types/index.js'\n\nimport { inventoryField } from '../../../fields/inventoryField.js'\nimport { pricesField } from '../../../fields/pricesField.js'\nimport { variantsCollectionBeforeChange as beforeChange } from './hooks/beforeChange.js'\nimport { validateOptions } from './hooks/validateOptions.js'\n\ntype Props = {\n access: Pick<AccessConfig, 'adminOrPublishedStatus' | 'isAdmin'>\n currenciesConfig?: CurrenciesConfig\n /**\n * Enables inventory tracking for variants. Defaults to true.\n */\n inventory?: boolean | InventoryConfig\n /**\n * Slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Slug of the variant options collection, defaults to 'variantOptions'.\n */\n variantOptionsSlug?: string\n}\n\nexport const createVariantsCollection: (props: Props) => CollectionConfig = (props) => {\n const {\n access,\n currenciesConfig,\n inventory = true,\n productsSlug = 'products',\n variantOptionsSlug = 'variantOptions',\n } = props || {}\n const { supportedCurrencies } = currenciesConfig || {}\n\n const fields: Field[] = [\n {\n name: 'title',\n type: 'text',\n admin: {\n description:\n 'Used for administrative purposes, not shown to customers. This is populated by default.',\n },\n },\n {\n name: 'product',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n relationTo: productsSlug,\n required: true,\n },\n {\n // This might need to be a custom component, to show a selector for each variant that is\n // enabled on the parent product\n // - separate select inputs, each showing only a specific variant (w/ options)\n // - it will save data to the DB as IDs in this relationship field\n // and needs a validate function as well which enforces that the options are fully specified, and accurate\n name: 'options',\n type: 'relationship',\n admin: {\n components: {\n Field: {\n path: '@payloadcms/plugin-ecommerce/rsc#VariantOptionsSelector',\n },\n },\n },\n hasMany: true,\n label: 'Variant options',\n relationTo: variantOptionsSlug,\n required: true,\n validate: validateOptions(),\n },\n ...(inventory ? [inventoryField()] : []),\n ]\n\n if (supportedCurrencies?.length && supportedCurrencies.length > 0) {\n const currencyOptions: string[] = []\n\n supportedCurrencies.forEach((currency) => {\n currencyOptions.push(currency.code)\n })\n\n if (currenciesConfig) {\n fields.push(...pricesField({ currenciesConfig }))\n }\n }\n\n const baseConfig: CollectionConfig = {\n slug: 'variants',\n access: {\n create: access.isAdmin,\n delete: access.isAdmin,\n read: access.adminOrPublishedStatus,\n update: access.isAdmin,\n },\n admin: {\n description: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variantsCollectionDescription'),\n group: false,\n useAsTitle: 'title',\n },\n fields,\n hooks: {\n beforeChange: [beforeChange({ productsSlug, variantOptionsSlug })],\n },\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variants'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variant'),\n },\n trash: true,\n versions: {\n drafts: {\n autosave: true,\n },\n },\n }\n\n return baseConfig\n}\n"],"names":["inventoryField","pricesField","variantsCollectionBeforeChange","beforeChange","validateOptions","createVariantsCollection","props","access","currenciesConfig","inventory","productsSlug","variantOptionsSlug","supportedCurrencies","fields","name","type","admin","description","position","readOnly","relationTo","required","components","Field","path","hasMany","label","validate","length","currencyOptions","forEach","currency","push","code","baseConfig","slug","create","isAdmin","delete","read","adminOrPublishedStatus","update","t","group","useAsTitle","hooks","labels","plural","singular","trash","versions","drafts","autosave"],"mappings":"AAIA,SAASA,cAAc,QAAQ,oCAAmC;AAClE,SAASC,WAAW,QAAQ,iCAAgC;AAC5D,SAASC,kCAAkCC,YAAY,QAAQ,0BAAyB;AACxF,SAASC,eAAe,QAAQ,6BAA4B;AAmB5D,OAAO,MAAMC,2BAA+D,CAACC;IAC3E,MAAM,EACJC,MAAM,EACNC,gBAAgB,EAChBC,YAAY,IAAI,EAChBC,eAAe,UAAU,EACzBC,qBAAqB,gBAAgB,EACtC,GAAGL,SAAS,CAAC;IACd,MAAM,EAAEM,mBAAmB,EAAE,GAAGJ,oBAAoB,CAAC;IAErD,MAAMK,SAAkB;QACtB;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,aACE;YACJ;QACF;QACA;YACEH,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLE,UAAU;gBACVC,UAAU;YACZ;YACAC,YAAYV;YACZW,UAAU;QACZ;QACA;YACE,wFAAwF;YACxF,gCAAgC;YAChC,8EAA8E;YAC9E,kEAAkE;YAClE,0GAA0G;YAC1GP,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLM,YAAY;oBACVC,OAAO;wBACLC,MAAM;oBACR;gBACF;YACF;YACAC,SAAS;YACTC,OAAO;YACPN,YAAYT;YACZU,UAAU;YACVM,UAAUvB;QACZ;WACIK,YAAY;YAACT;SAAiB,GAAG,EAAE;KACxC;IAED,IAAIY,qBAAqBgB,UAAUhB,oBAAoBgB,MAAM,GAAG,GAAG;QACjE,MAAMC,kBAA4B,EAAE;QAEpCjB,oBAAoBkB,OAAO,CAAC,CAACC;YAC3BF,gBAAgBG,IAAI,CAACD,SAASE,IAAI;QACpC;QAEA,IAAIzB,kBAAkB;YACpBK,OAAOmB,IAAI,IAAI/B,YAAY;gBAAEO;YAAiB;QAChD;IACF;IAEA,MAAM0B,aAA+B;QACnCC,MAAM;QACN5B,QAAQ;YACN6B,QAAQ7B,OAAO8B,OAAO;YACtBC,QAAQ/B,OAAO8B,OAAO;YACtBE,MAAMhC,OAAOiC,sBAAsB;YACnCC,QAAQlC,OAAO8B,OAAO;QACxB;QACArB,OAAO;YACLC,aAAa,CAAC,EAAEyB,CAAC,EAAE,GACjB,+DAA+D;gBAC/DA,EAAE;YACJC,OAAO;YACPC,YAAY;QACd;QACA/B;QACAgC,OAAO;YACL1C,cAAc;gBAACA,aAAa;oBAAEO;oBAAcC;gBAAmB;aAAG;QACpE;QACAmC,QAAQ;YACNC,QAAQ,CAAC,EAAEL,CAAC,EAAE,GACZ,+DAA+D;gBAC/DA,EAAE;YACJM,UAAU,CAAC,EAAEN,CAAC,EAAE,GACd,+DAA+D;gBAC/DA,EAAE;QACN;QACAO,OAAO;QACPC,UAAU;YACRC,QAAQ;gBACNC,UAAU;YACZ;QACF;IACF;IAEA,OAAOlB;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../../src/collections/variants/createVariantsCollection/index.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { AccessConfig, CurrenciesConfig, InventoryConfig } from '../../../types/index.js'\n\nimport { inventoryField } from '../../../fields/inventoryField.js'\nimport { pricesField } from '../../../fields/pricesField.js'\nimport { variantsCollectionBeforeChange as beforeChange } from './hooks/beforeChange.js'\nimport { validateOptions } from './hooks/validateOptions.js'\n\ntype Props = {\n access: Pick<AccessConfig, 'adminOrPublishedStatus' | 'isAdmin'>\n currenciesConfig?: CurrenciesConfig\n /**\n * Enables inventory tracking for variants. Defaults to true.\n */\n inventory?: boolean | InventoryConfig\n /**\n * Slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Slug of the variant options collection, defaults to 'variantOptions'.\n */\n variantOptionsSlug?: string\n /**\n * Slug of the variant types collection, defaults to 'variantTypes'.\n */\n variantTypesSlug?: string\n}\n\nexport const createVariantsCollection: (props: Props) => CollectionConfig = (props) => {\n const {\n access,\n currenciesConfig,\n inventory = true,\n productsSlug = 'products',\n variantOptionsSlug = 'variantOptions',\n variantTypesSlug = 'variantTypes',\n } = props || {}\n const { supportedCurrencies } = currenciesConfig || {}\n\n const fields: Field[] = [\n {\n name: 'title',\n type: 'text',\n admin: {\n description:\n 'Used for administrative purposes, not shown to customers. This is populated by default.',\n },\n },\n {\n name: 'product',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n relationTo: productsSlug,\n required: true,\n },\n {\n // This might need to be a custom component, to show a selector for each variant that is\n // enabled on the parent product\n // - separate select inputs, each showing only a specific variant (w/ options)\n // - it will save data to the DB as IDs in this relationship field\n // and needs a validate function as well which enforces that the options are fully specified, and accurate\n name: 'options',\n type: 'relationship',\n admin: {\n components: {\n Field: {\n path: '@payloadcms/plugin-ecommerce/rsc#VariantOptionsSelector',\n },\n },\n },\n custom: {\n productsSlug,\n variantTypesSlug,\n },\n hasMany: true,\n label: 'Variant options',\n relationTo: variantOptionsSlug,\n required: true,\n validate: validateOptions({ productsCollectionSlug: productsSlug }),\n },\n ...(inventory ? [inventoryField()] : []),\n ]\n\n if (supportedCurrencies?.length && supportedCurrencies.length > 0) {\n const currencyOptions: string[] = []\n\n supportedCurrencies.forEach((currency) => {\n currencyOptions.push(currency.code)\n })\n\n if (currenciesConfig) {\n fields.push(...pricesField({ currenciesConfig }))\n }\n }\n\n const baseConfig: CollectionConfig = {\n slug: 'variants',\n access: {\n create: access.isAdmin,\n delete: access.isAdmin,\n read: access.adminOrPublishedStatus,\n update: access.isAdmin,\n },\n admin: {\n description: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variantsCollectionDescription'),\n group: false,\n useAsTitle: 'title',\n },\n fields,\n hooks: {\n beforeChange: [beforeChange({ productsSlug, variantOptionsSlug })],\n },\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variants'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variant'),\n },\n trash: true,\n versions: {\n drafts: {\n autosave: true,\n },\n },\n }\n\n return baseConfig\n}\n"],"names":["inventoryField","pricesField","variantsCollectionBeforeChange","beforeChange","validateOptions","createVariantsCollection","props","access","currenciesConfig","inventory","productsSlug","variantOptionsSlug","variantTypesSlug","supportedCurrencies","fields","name","type","admin","description","position","readOnly","relationTo","required","components","Field","path","custom","hasMany","label","validate","productsCollectionSlug","length","currencyOptions","forEach","currency","push","code","baseConfig","slug","create","isAdmin","delete","read","adminOrPublishedStatus","update","t","group","useAsTitle","hooks","labels","plural","singular","trash","versions","drafts","autosave"],"mappings":"AAIA,SAASA,cAAc,QAAQ,oCAAmC;AAClE,SAASC,WAAW,QAAQ,iCAAgC;AAC5D,SAASC,kCAAkCC,YAAY,QAAQ,0BAAyB;AACxF,SAASC,eAAe,QAAQ,6BAA4B;AAuB5D,OAAO,MAAMC,2BAA+D,CAACC;IAC3E,MAAM,EACJC,MAAM,EACNC,gBAAgB,EAChBC,YAAY,IAAI,EAChBC,eAAe,UAAU,EACzBC,qBAAqB,gBAAgB,EACrCC,mBAAmB,cAAc,EAClC,GAAGN,SAAS,CAAC;IACd,MAAM,EAAEO,mBAAmB,EAAE,GAAGL,oBAAoB,CAAC;IAErD,MAAMM,SAAkB;QACtB;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,aACE;YACJ;QACF;QACA;YACEH,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLE,UAAU;gBACVC,UAAU;YACZ;YACAC,YAAYX;YACZY,UAAU;QACZ;QACA;YACE,wFAAwF;YACxF,gCAAgC;YAChC,8EAA8E;YAC9E,kEAAkE;YAClE,0GAA0G;YAC1GP,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLM,YAAY;oBACVC,OAAO;wBACLC,MAAM;oBACR;gBACF;YACF;YACAC,QAAQ;gBACNhB;gBACAE;YACF;YACAe,SAAS;YACTC,OAAO;YACPP,YAAYV;YACZW,UAAU;YACVO,UAAUzB,gBAAgB;gBAAE0B,wBAAwBpB;YAAa;QACnE;WACID,YAAY;YAACT;SAAiB,GAAG,EAAE;KACxC;IAED,IAAIa,qBAAqBkB,UAAUlB,oBAAoBkB,MAAM,GAAG,GAAG;QACjE,MAAMC,kBAA4B,EAAE;QAEpCnB,oBAAoBoB,OAAO,CAAC,CAACC;YAC3BF,gBAAgBG,IAAI,CAACD,SAASE,IAAI;QACpC;QAEA,IAAI5B,kBAAkB;YACpBM,OAAOqB,IAAI,IAAIlC,YAAY;gBAAEO;YAAiB;QAChD;IACF;IAEA,MAAM6B,aAA+B;QACnCC,MAAM;QACN/B,QAAQ;YACNgC,QAAQhC,OAAOiC,OAAO;YACtBC,QAAQlC,OAAOiC,OAAO;YACtBE,MAAMnC,OAAOoC,sBAAsB;YACnCC,QAAQrC,OAAOiC,OAAO;QACxB;QACAvB,OAAO;YACLC,aAAa,CAAC,EAAE2B,CAAC,EAAE,GACjB,+DAA+D;gBAC/DA,EAAE;YACJC,OAAO;YACPC,YAAY;QACd;QACAjC;QACAkC,OAAO;YACL7C,cAAc;gBAACA,aAAa;oBAAEO;oBAAcC;gBAAmB;aAAG;QACpE;QACAsC,QAAQ;YACNC,QAAQ,CAAC,EAAEL,CAAC,EAAE,GACZ,+DAA+D;gBAC/DA,EAAE;YACJM,UAAU,CAAC,EAAEN,CAAC,EAAE,GACd,+DAA+D;gBAC/DA,EAAE;QACN;QACAO,OAAO;QACPC,UAAU;YACRC,QAAQ;gBACNC,UAAU;YACZ;QACF;IACF;IAEA,OAAOlB;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"confirmOrder.d.ts","sourceRoot":"","sources":["../../src/endpoints/confirmOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE7F,KAAK,IAAI,GAAG;IACV;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,cAAc,CAAA;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,mBAkL/B,CAAA"}
1
+ {"version":3,"file":"confirmOrder.d.ts","sourceRoot":"","sources":["../../src/endpoints/confirmOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE7F,KAAK,IAAI,GAAG;IACV;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,cAAc,CAAA;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,mBA0L/B,CAAA"}
@@ -11,6 +11,7 @@ import { addDataAndFileToRequest } from 'payload';
11
11
  let cartID = data?.cartID;
12
12
  let cart = undefined;
13
13
  let customerEmail = user?.email ?? '';
14
+ const cartSecret = data?.secret;
14
15
  if (user) {
15
16
  if (user.cart?.docs && Array.isArray(user.cart.docs) && user.cart.docs.length > 0) {
16
17
  if (!cartID && user.cart.docs[0]) {
@@ -37,19 +38,24 @@ import { addDataAndFileToRequest } from 'payload';
37
38
  }
38
39
  if (!cart) {
39
40
  if (cartID) {
41
+ // Add cart secret to query for guest cart access control
42
+ if (cartSecret && typeof cartSecret === 'string') {
43
+ req.query = req.query || {};
44
+ req.query.secret = cartSecret;
45
+ }
40
46
  cart = await payload.findByID({
41
47
  id: cartID,
42
48
  collection: cartsSlug,
43
49
  depth: 2,
44
50
  overrideAccess: false,
51
+ req,
45
52
  select: {
46
53
  id: true,
47
54
  currency: true,
48
55
  customerEmail: true,
49
56
  items: true,
50
57
  subtotal: true
51
- },
52
- user
58
+ }
53
59
  });
54
60
  if (!cart) {
55
61
  return Response.json({
@@ -79,6 +85,7 @@ import { addDataAndFileToRequest } from 'payload';
79
85
  }
80
86
  try {
81
87
  const paymentResponse = await paymentMethod.confirmOrder({
88
+ cartsSlug,
82
89
  customersSlug,
83
90
  data: {
84
91
  ...data,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/endpoints/confirmOrder.ts"],"sourcesContent":["import { addDataAndFileToRequest, type DefaultDocumentIDType, type Endpoint } from 'payload'\n\nimport type { CurrenciesConfig, PaymentAdapter, ProductsValidation } from '../types/index.js'\n\ntype Args = {\n /**\n * The slug of the carts collection, defaults to 'carts'.\n */\n cartsSlug?: string\n currenciesConfig: CurrenciesConfig\n /**\n * The slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n /**\n * The slug of the orders collection, defaults to 'orders'.\n */\n ordersSlug?: string\n paymentMethod: PaymentAdapter\n /**\n * The slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Customise the validation used for checking products or variants before a transaction is created.\n */\n productsValidation?: ProductsValidation\n /**\n * The slug of the transactions collection, defaults to 'transactions'.\n */\n transactionsSlug?: string\n /**\n * The slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n}\n\ntype ConfirmOrderHandler = (args: Args) => Endpoint['handler']\n\n/**\n * Handles the endpoint for initiating payments. We will handle checking the amount and product and variant prices here before it is sent to the payment provider.\n * This is the first step in the payment process.\n */\nexport const confirmOrderHandler: ConfirmOrderHandler =\n ({\n cartsSlug = 'carts',\n currenciesConfig,\n customersSlug = 'users',\n ordersSlug = 'orders',\n paymentMethod,\n productsSlug = 'products',\n productsValidation,\n transactionsSlug = 'transactions',\n variantsSlug = 'variants',\n }) =>\n async (req) => {\n await addDataAndFileToRequest(req)\n\n const data = req.data\n const payload = req.payload\n const user = req.user\n\n let currency: string = currenciesConfig.defaultCurrency\n let cartID: DefaultDocumentIDType = data?.cartID\n let cart = undefined\n let customerEmail: string = user?.email ?? ''\n\n if (user) {\n if (user.cart?.docs && Array.isArray(user.cart.docs) && user.cart.docs.length > 0) {\n if (!cartID && user.cart.docs[0]) {\n // Use the user's cart instead\n if (typeof user.cart.docs[0] === 'object') {\n cartID = user.cart.docs[0].id\n cart = user.cart.docs[0]\n } else {\n cartID = user.cart.docs[0]\n }\n }\n }\n } else {\n // Get the email from the data if user is not available\n if (data?.customerEmail && typeof data.customerEmail === 'string') {\n customerEmail = data.customerEmail\n } else {\n return Response.json(\n {\n message: 'A customer email is required to make a purchase.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (!cart) {\n if (cartID) {\n cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 2,\n overrideAccess: false,\n select: {\n id: true,\n currency: true,\n customerEmail: true,\n items: true,\n subtotal: true,\n },\n user,\n })\n\n if (!cart) {\n return Response.json(\n {\n message: `Cart with ID ${cartID} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n } else {\n return Response.json(\n {\n message: 'Cart ID is required.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (cart.currency && typeof cart.currency === 'string') {\n currency = cart.currency\n }\n\n // Ensure the currency is provided or inferred in some way\n if (!currency) {\n return Response.json(\n {\n message: 'Currency is required.',\n },\n {\n status: 400,\n },\n )\n }\n\n try {\n const paymentResponse = await paymentMethod.confirmOrder({\n customersSlug,\n data: {\n ...data,\n customerEmail,\n },\n ordersSlug,\n req,\n transactionsSlug,\n })\n\n if (paymentResponse.transactionID) {\n const transaction = await payload.findByID({\n id: paymentResponse.transactionID,\n collection: transactionsSlug,\n depth: 0,\n select: {\n id: true,\n items: true,\n },\n })\n\n if (transaction && Array.isArray(transaction.items) && transaction.items.length > 0) {\n for (const item of transaction.items) {\n if (item.variant) {\n const id = typeof item.variant === 'object' ? item.variant.id : item.variant\n\n await payload.db.updateOne({\n id,\n collection: variantsSlug,\n data: {\n inventory: {\n $inc: item.quantity * -1,\n },\n },\n })\n } else if (item.product) {\n const id = typeof item.product === 'object' ? item.product.id : item.product\n\n await payload.db.updateOne({\n id,\n collection: productsSlug,\n data: {\n inventory: {\n $inc: item.quantity * -1,\n },\n },\n })\n }\n }\n }\n }\n\n if ('paymentResponse.transactionID' in paymentResponse && paymentResponse.transactionID) {\n delete (paymentResponse as Partial<typeof paymentResponse>).transactionID\n }\n\n return Response.json(paymentResponse)\n } catch (error) {\n payload.logger.error(error, 'Error confirming order.')\n\n return Response.json(\n {\n message: 'Error confirming order.',\n },\n {\n status: 500,\n },\n )\n }\n }\n"],"names":["addDataAndFileToRequest","confirmOrderHandler","cartsSlug","currenciesConfig","customersSlug","ordersSlug","paymentMethod","productsSlug","productsValidation","transactionsSlug","variantsSlug","req","data","payload","user","currency","defaultCurrency","cartID","cart","undefined","customerEmail","email","docs","Array","isArray","length","id","Response","json","message","status","findByID","collection","depth","overrideAccess","select","items","subtotal","paymentResponse","confirmOrder","transactionID","transaction","item","variant","db","updateOne","inventory","$inc","quantity","product","error","logger"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/endpoints/confirmOrder.ts"],"sourcesContent":["import { addDataAndFileToRequest, type DefaultDocumentIDType, type Endpoint } from 'payload'\n\nimport type { CurrenciesConfig, PaymentAdapter, ProductsValidation } from '../types/index.js'\n\ntype Args = {\n /**\n * The slug of the carts collection, defaults to 'carts'.\n */\n cartsSlug?: string\n currenciesConfig: CurrenciesConfig\n /**\n * The slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n /**\n * The slug of the orders collection, defaults to 'orders'.\n */\n ordersSlug?: string\n paymentMethod: PaymentAdapter\n /**\n * The slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Customise the validation used for checking products or variants before a transaction is created.\n */\n productsValidation?: ProductsValidation\n /**\n * The slug of the transactions collection, defaults to 'transactions'.\n */\n transactionsSlug?: string\n /**\n * The slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n}\n\ntype ConfirmOrderHandler = (args: Args) => Endpoint['handler']\n\n/**\n * Handles the endpoint for initiating payments. We will handle checking the amount and product and variant prices here before it is sent to the payment provider.\n * This is the first step in the payment process.\n */\nexport const confirmOrderHandler: ConfirmOrderHandler =\n ({\n cartsSlug = 'carts',\n currenciesConfig,\n customersSlug = 'users',\n ordersSlug = 'orders',\n paymentMethod,\n productsSlug = 'products',\n productsValidation,\n transactionsSlug = 'transactions',\n variantsSlug = 'variants',\n }) =>\n async (req) => {\n await addDataAndFileToRequest(req)\n\n const data = req.data\n const payload = req.payload\n const user = req.user\n\n let currency: string = currenciesConfig.defaultCurrency\n let cartID: DefaultDocumentIDType = data?.cartID\n let cart = undefined\n let customerEmail: string = user?.email ?? ''\n const cartSecret = data?.secret\n\n if (user) {\n if (user.cart?.docs && Array.isArray(user.cart.docs) && user.cart.docs.length > 0) {\n if (!cartID && user.cart.docs[0]) {\n // Use the user's cart instead\n if (typeof user.cart.docs[0] === 'object') {\n cartID = user.cart.docs[0].id\n cart = user.cart.docs[0]\n } else {\n cartID = user.cart.docs[0]\n }\n }\n }\n } else {\n // Get the email from the data if user is not available\n if (data?.customerEmail && typeof data.customerEmail === 'string') {\n customerEmail = data.customerEmail\n } else {\n return Response.json(\n {\n message: 'A customer email is required to make a purchase.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (!cart) {\n if (cartID) {\n // Add cart secret to query for guest cart access control\n if (cartSecret && typeof cartSecret === 'string') {\n req.query = req.query || {}\n req.query.secret = cartSecret\n }\n\n cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 2,\n overrideAccess: false,\n req,\n select: {\n id: true,\n currency: true,\n customerEmail: true,\n items: true,\n subtotal: true,\n },\n })\n\n if (!cart) {\n return Response.json(\n {\n message: `Cart with ID ${cartID} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n } else {\n return Response.json(\n {\n message: 'Cart ID is required.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (cart.currency && typeof cart.currency === 'string') {\n currency = cart.currency\n }\n\n // Ensure the currency is provided or inferred in some way\n if (!currency) {\n return Response.json(\n {\n message: 'Currency is required.',\n },\n {\n status: 400,\n },\n )\n }\n\n try {\n const paymentResponse = await paymentMethod.confirmOrder({\n cartsSlug,\n customersSlug,\n data: {\n ...data,\n customerEmail,\n },\n ordersSlug,\n req,\n transactionsSlug,\n })\n\n if (paymentResponse.transactionID) {\n const transaction = await payload.findByID({\n id: paymentResponse.transactionID,\n collection: transactionsSlug,\n depth: 0,\n select: {\n id: true,\n items: true,\n },\n })\n\n if (transaction && Array.isArray(transaction.items) && transaction.items.length > 0) {\n for (const item of transaction.items) {\n if (item.variant) {\n const id = typeof item.variant === 'object' ? item.variant.id : item.variant\n\n await payload.db.updateOne({\n id,\n collection: variantsSlug,\n data: {\n inventory: {\n $inc: item.quantity * -1,\n },\n },\n })\n } else if (item.product) {\n const id = typeof item.product === 'object' ? item.product.id : item.product\n\n await payload.db.updateOne({\n id,\n collection: productsSlug,\n data: {\n inventory: {\n $inc: item.quantity * -1,\n },\n },\n })\n }\n }\n }\n }\n\n if ('paymentResponse.transactionID' in paymentResponse && paymentResponse.transactionID) {\n delete (paymentResponse as Partial<typeof paymentResponse>).transactionID\n }\n\n return Response.json(paymentResponse)\n } catch (error) {\n payload.logger.error(error, 'Error confirming order.')\n\n return Response.json(\n {\n message: 'Error confirming order.',\n },\n {\n status: 500,\n },\n )\n }\n }\n"],"names":["addDataAndFileToRequest","confirmOrderHandler","cartsSlug","currenciesConfig","customersSlug","ordersSlug","paymentMethod","productsSlug","productsValidation","transactionsSlug","variantsSlug","req","data","payload","user","currency","defaultCurrency","cartID","cart","undefined","customerEmail","email","cartSecret","secret","docs","Array","isArray","length","id","Response","json","message","status","query","findByID","collection","depth","overrideAccess","select","items","subtotal","paymentResponse","confirmOrder","transactionID","transaction","item","variant","db","updateOne","inventory","$inc","quantity","product","error","logger"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"initiatePayment.d.ts","sourceRoot":"","sources":["../../src/endpoints/initiatePayment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE5F,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,8BAA8B,EAC/B,MAAM,mBAAmB,CAAA;AAI1B,KAAK,IAAI,GAAG;IACV;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,8BAA8B,CAAC,WAAW,CAAC,CAAA;IACvD,aAAa,EAAE,cAAc,CAAA;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,eA0RlC,CAAA"}
1
+ {"version":3,"file":"initiatePayment.d.ts","sourceRoot":"","sources":["../../src/endpoints/initiatePayment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE5F,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,8BAA8B,EAC/B,MAAM,mBAAmB,CAAA;AAI1B,KAAK,IAAI,GAAG;IACV;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,8BAA8B,CAAC,WAAW,CAAC,CAAA;IACvD,aAAa,EAAE,cAAc,CAAA;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,eAiSlC,CAAA"}