@shadowmkj/plugin-ecommerce 3.85.1

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 (369) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +3 -0
  3. package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -0
  4. package/dist/collections/addresses/createAddressesCollection.js +73 -0
  5. package/dist/collections/addresses/createAddressesCollection.js.map +1 -0
  6. package/dist/collections/addresses/defaultAddressFields.d.ts.map +1 -0
  7. package/dist/collections/addresses/defaultAddressFields.js +72 -0
  8. package/dist/collections/addresses/defaultAddressFields.js.map +1 -0
  9. package/dist/collections/addresses/defaultCountries.d.ts.map +1 -0
  10. package/dist/collections/addresses/defaultCountries.js +169 -0
  11. package/dist/collections/addresses/defaultCountries.js.map +1 -0
  12. package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -0
  13. package/dist/collections/addresses/hooks/beforeChange.js +16 -0
  14. package/dist/collections/addresses/hooks/beforeChange.js.map +1 -0
  15. package/dist/collections/carts/beforeChange.d.ts.map +1 -0
  16. package/dist/collections/carts/beforeChange.js +49 -0
  17. package/dist/collections/carts/beforeChange.js.map +1 -0
  18. package/dist/collections/carts/createCartsCollection.d.ts.map +1 -0
  19. package/dist/collections/carts/createCartsCollection.js +194 -0
  20. package/dist/collections/carts/createCartsCollection.js.map +1 -0
  21. package/dist/collections/carts/endpoints/addItem.d.ts.map +1 -0
  22. package/dist/collections/carts/endpoints/addItem.js +54 -0
  23. package/dist/collections/carts/endpoints/addItem.js.map +1 -0
  24. package/dist/collections/carts/endpoints/clearCart.d.ts.map +1 -0
  25. package/dist/collections/carts/endpoints/clearCart.js +41 -0
  26. package/dist/collections/carts/endpoints/clearCart.js.map +1 -0
  27. package/dist/collections/carts/endpoints/mergeCart.d.ts.map +1 -0
  28. package/dist/collections/carts/endpoints/mergeCart.js +72 -0
  29. package/dist/collections/carts/endpoints/mergeCart.js.map +1 -0
  30. package/dist/collections/carts/endpoints/removeItem.d.ts.map +1 -0
  31. package/dist/collections/carts/endpoints/removeItem.js +51 -0
  32. package/dist/collections/carts/endpoints/removeItem.js.map +1 -0
  33. package/dist/collections/carts/endpoints/updateItem.d.ts.map +1 -0
  34. package/dist/collections/carts/endpoints/updateItem.js +95 -0
  35. package/dist/collections/carts/endpoints/updateItem.js.map +1 -0
  36. package/dist/collections/carts/hasCartSecretAccess.d.ts.map +1 -0
  37. package/dist/collections/carts/hasCartSecretAccess.js +24 -0
  38. package/dist/collections/carts/hasCartSecretAccess.js.map +1 -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.map +1 -0
  43. package/dist/collections/carts/operations/clearCart.js +53 -0
  44. package/dist/collections/carts/operations/clearCart.js.map +1 -0
  45. package/dist/collections/carts/operations/createRequestWithSecret.d.ts.map +1 -0
  46. package/dist/collections/carts/operations/createRequestWithSecret.js +21 -0
  47. package/dist/collections/carts/operations/createRequestWithSecret.js.map +1 -0
  48. package/dist/collections/carts/operations/defaultCartItemMatcher.d.ts.map +1 -0
  49. package/dist/collections/carts/operations/defaultCartItemMatcher.js +25 -0
  50. package/dist/collections/carts/operations/defaultCartItemMatcher.js.map +1 -0
  51. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js +358 -0
  52. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js.map +1 -0
  53. package/dist/collections/carts/operations/mergeCart.d.ts.map +1 -0
  54. package/dist/collections/carts/operations/mergeCart.js +144 -0
  55. package/dist/collections/carts/operations/mergeCart.js.map +1 -0
  56. package/dist/collections/carts/operations/removeItem.d.ts.map +1 -0
  57. package/dist/collections/carts/operations/removeItem.js +69 -0
  58. package/dist/collections/carts/operations/removeItem.js.map +1 -0
  59. package/dist/collections/carts/operations/types.d.ts.map +1 -0
  60. package/dist/collections/carts/operations/types.js +7 -0
  61. package/dist/collections/carts/operations/types.js.map +1 -0
  62. package/dist/collections/carts/operations/updateItem.d.ts.map +1 -0
  63. package/dist/collections/carts/operations/updateItem.js +110 -0
  64. package/dist/collections/carts/operations/updateItem.js.map +1 -0
  65. package/dist/collections/carts/statusBeforeRead.d.ts.map +1 -0
  66. package/dist/collections/carts/statusBeforeRead.js +18 -0
  67. package/dist/collections/carts/statusBeforeRead.js.map +1 -0
  68. package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -0
  69. package/dist/collections/orders/createOrdersCollection.js +163 -0
  70. package/dist/collections/orders/createOrdersCollection.js.map +1 -0
  71. package/dist/collections/products/createProductsCollection.d.ts.map +1 -0
  72. package/dist/collections/products/createProductsCollection.js +62 -0
  73. package/dist/collections/products/createProductsCollection.js.map +1 -0
  74. package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -0
  75. package/dist/collections/transactions/createTransactionsCollection.js +157 -0
  76. package/dist/collections/transactions/createTransactionsCollection.js.map +1 -0
  77. package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -0
  78. package/dist/collections/variants/createVariantOptionsCollection.js +53 -0
  79. package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -0
  80. package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -0
  81. package/dist/collections/variants/createVariantTypesCollection.js +49 -0
  82. package/dist/collections/variants/createVariantTypesCollection.js.map +1 -0
  83. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.d.ts.map +1 -0
  84. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js +38 -0
  85. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js.map +1 -0
  86. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.d.ts.map +1 -0
  87. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js +58 -0
  88. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js.map +1 -0
  89. package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -0
  90. package/dist/collections/variants/createVariantsCollection/index.js +107 -0
  91. package/dist/collections/variants/createVariantsCollection/index.js.map +1 -0
  92. package/dist/currencies/index.d.ts.map +1 -0
  93. package/dist/currencies/index.js +20 -0
  94. package/dist/currencies/index.js.map +1 -0
  95. package/dist/endpoints/confirmOrder.d.ts.map +1 -0
  96. package/dist/endpoints/confirmOrder.js +150 -0
  97. package/dist/endpoints/confirmOrder.js.map +1 -0
  98. package/dist/endpoints/initiatePayment.d.ts.map +1 -0
  99. package/dist/endpoints/initiatePayment.js +226 -0
  100. package/dist/endpoints/initiatePayment.js.map +1 -0
  101. package/dist/exports/client/index.d.ts.map +1 -0
  102. package/dist/exports/client/index.js +4 -0
  103. package/dist/exports/client/index.js.map +1 -0
  104. package/dist/exports/client/react.d.ts.map +1 -0
  105. package/dist/exports/client/react.js +5 -0
  106. package/dist/exports/client/react.js.map +1 -0
  107. package/dist/exports/payments/cod.d.ts +2 -0
  108. package/dist/exports/payments/cod.d.ts.map +1 -0
  109. package/dist/exports/payments/cod.js +3 -0
  110. package/dist/exports/payments/cod.js.map +1 -0
  111. package/dist/exports/payments/stripe.d.ts.map +1 -0
  112. package/dist/exports/payments/stripe.js +3 -0
  113. package/dist/exports/payments/stripe.js.map +1 -0
  114. package/dist/exports/rsc.d.ts.map +1 -0
  115. package/dist/exports/rsc.js +4 -0
  116. package/dist/exports/rsc.js.map +1 -0
  117. package/dist/exports/types.d.ts.map +1 -0
  118. package/dist/exports/types.js +3 -0
  119. package/dist/exports/types.js.map +1 -0
  120. package/dist/fields/amountField.d.ts.map +1 -0
  121. package/dist/fields/amountField.js +33 -0
  122. package/dist/fields/amountField.js.map +1 -0
  123. package/dist/fields/cartItemsField.d.ts.map +1 -0
  124. package/dist/fields/cartItemsField.js +55 -0
  125. package/dist/fields/cartItemsField.js.map +1 -0
  126. package/dist/fields/currencyField.d.ts.map +1 -0
  127. package/dist/fields/currencyField.js +29 -0
  128. package/dist/fields/currencyField.js.map +1 -0
  129. package/dist/fields/inventoryField.d.ts.map +1 -0
  130. package/dist/fields/inventoryField.js +16 -0
  131. package/dist/fields/inventoryField.js.map +1 -0
  132. package/dist/fields/pricesField.d.ts.map +1 -0
  133. package/dist/fields/pricesField.js +54 -0
  134. package/dist/fields/pricesField.js.map +1 -0
  135. package/dist/fields/statusField.d.ts.map +1 -0
  136. package/dist/fields/statusField.js +49 -0
  137. package/dist/fields/statusField.js.map +1 -0
  138. package/dist/fields/variantsFields.d.ts.map +1 -0
  139. package/dist/fields/variantsFields.js +48 -0
  140. package/dist/fields/variantsFields.js.map +1 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +258 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/payments/adapters/cod/confirmOrder.d.ts +5 -0
  145. package/dist/payments/adapters/cod/confirmOrder.d.ts.map +1 -0
  146. package/dist/payments/adapters/cod/confirmOrder.js +83 -0
  147. package/dist/payments/adapters/cod/confirmOrder.js.map +1 -0
  148. package/dist/payments/adapters/cod/confirmOrder.spec.js +166 -0
  149. package/dist/payments/adapters/cod/confirmOrder.spec.js.map +1 -0
  150. package/dist/payments/adapters/cod/endpoints/webhooks.d.ts +5 -0
  151. package/dist/payments/adapters/cod/endpoints/webhooks.d.ts.map +1 -0
  152. package/dist/payments/adapters/cod/endpoints/webhooks.js +18 -0
  153. package/dist/payments/adapters/cod/endpoints/webhooks.js.map +1 -0
  154. package/dist/payments/adapters/cod/index.d.ts +12 -0
  155. package/dist/payments/adapters/cod/index.d.ts.map +1 -0
  156. package/dist/payments/adapters/cod/index.js +64 -0
  157. package/dist/payments/adapters/cod/index.js.map +1 -0
  158. package/dist/payments/adapters/cod/initiatePayment.d.ts +5 -0
  159. package/dist/payments/adapters/cod/initiatePayment.d.ts.map +1 -0
  160. package/dist/payments/adapters/cod/initiatePayment.js +91 -0
  161. package/dist/payments/adapters/cod/initiatePayment.js.map +1 -0
  162. package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -0
  163. package/dist/payments/adapters/stripe/confirmOrder.js +113 -0
  164. package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -0
  165. package/dist/payments/adapters/stripe/confirmOrder.spec.js +166 -0
  166. package/dist/payments/adapters/stripe/confirmOrder.spec.js.map +1 -0
  167. package/dist/payments/adapters/stripe/endpoints/webhooks.d.ts.map +1 -0
  168. package/dist/payments/adapters/stripe/endpoints/webhooks.js +53 -0
  169. package/dist/payments/adapters/stripe/endpoints/webhooks.js.map +1 -0
  170. package/dist/payments/adapters/stripe/index.d.ts +61 -0
  171. package/dist/payments/adapters/stripe/index.d.ts.map +1 -0
  172. package/dist/payments/adapters/stripe/index.js +68 -0
  173. package/dist/payments/adapters/stripe/index.js.map +1 -0
  174. package/dist/payments/adapters/stripe/initiatePayment.d.ts.map +1 -0
  175. package/dist/payments/adapters/stripe/initiatePayment.js +113 -0
  176. package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -0
  177. package/dist/react/provider/index.d.ts.map +1 -0
  178. package/dist/react/provider/index.js +1094 -0
  179. package/dist/react/provider/index.js.map +1 -0
  180. package/dist/react/provider/utilities.d.ts.map +1 -0
  181. package/dist/react/provider/utilities.js +13 -0
  182. package/dist/react/provider/utilities.js.map +1 -0
  183. package/dist/translations/index.d.ts.map +1 -0
  184. package/dist/translations/index.js +84 -0
  185. package/dist/translations/index.js.map +1 -0
  186. package/dist/translations/languages/ar.d.ts.map +1 -0
  187. package/dist/translations/languages/ar.js +92 -0
  188. package/dist/translations/languages/ar.js.map +1 -0
  189. package/dist/translations/languages/az.d.ts.map +1 -0
  190. package/dist/translations/languages/az.js +92 -0
  191. package/dist/translations/languages/az.js.map +1 -0
  192. package/dist/translations/languages/bg.d.ts.map +1 -0
  193. package/dist/translations/languages/bg.js +92 -0
  194. package/dist/translations/languages/bg.js.map +1 -0
  195. package/dist/translations/languages/ca.d.ts.map +1 -0
  196. package/dist/translations/languages/ca.js +92 -0
  197. package/dist/translations/languages/ca.js.map +1 -0
  198. package/dist/translations/languages/cs.d.ts.map +1 -0
  199. package/dist/translations/languages/cs.js +92 -0
  200. package/dist/translations/languages/cs.js.map +1 -0
  201. package/dist/translations/languages/da.d.ts.map +1 -0
  202. package/dist/translations/languages/da.js +92 -0
  203. package/dist/translations/languages/da.js.map +1 -0
  204. package/dist/translations/languages/de.d.ts.map +1 -0
  205. package/dist/translations/languages/de.js +92 -0
  206. package/dist/translations/languages/de.js.map +1 -0
  207. package/dist/translations/languages/en.d.ts.map +1 -0
  208. package/dist/translations/languages/en.js +92 -0
  209. package/dist/translations/languages/en.js.map +1 -0
  210. package/dist/translations/languages/es.d.ts.map +1 -0
  211. package/dist/translations/languages/es.js +92 -0
  212. package/dist/translations/languages/es.js.map +1 -0
  213. package/dist/translations/languages/et.d.ts.map +1 -0
  214. package/dist/translations/languages/et.js +92 -0
  215. package/dist/translations/languages/et.js.map +1 -0
  216. package/dist/translations/languages/fa.d.ts.map +1 -0
  217. package/dist/translations/languages/fa.js +92 -0
  218. package/dist/translations/languages/fa.js.map +1 -0
  219. package/dist/translations/languages/fr.d.ts.map +1 -0
  220. package/dist/translations/languages/fr.js +92 -0
  221. package/dist/translations/languages/fr.js.map +1 -0
  222. package/dist/translations/languages/he.d.ts.map +1 -0
  223. package/dist/translations/languages/he.js +92 -0
  224. package/dist/translations/languages/he.js.map +1 -0
  225. package/dist/translations/languages/hr.d.ts.map +1 -0
  226. package/dist/translations/languages/hr.js +92 -0
  227. package/dist/translations/languages/hr.js.map +1 -0
  228. package/dist/translations/languages/hu.d.ts.map +1 -0
  229. package/dist/translations/languages/hu.js +92 -0
  230. package/dist/translations/languages/hu.js.map +1 -0
  231. package/dist/translations/languages/hy.d.ts.map +1 -0
  232. package/dist/translations/languages/hy.js +92 -0
  233. package/dist/translations/languages/hy.js.map +1 -0
  234. package/dist/translations/languages/is.d.ts.map +1 -0
  235. package/dist/translations/languages/is.js +92 -0
  236. package/dist/translations/languages/is.js.map +1 -0
  237. package/dist/translations/languages/it.d.ts.map +1 -0
  238. package/dist/translations/languages/it.js +92 -0
  239. package/dist/translations/languages/it.js.map +1 -0
  240. package/dist/translations/languages/ja.d.ts.map +1 -0
  241. package/dist/translations/languages/ja.js +92 -0
  242. package/dist/translations/languages/ja.js.map +1 -0
  243. package/dist/translations/languages/ko.d.ts.map +1 -0
  244. package/dist/translations/languages/ko.js +92 -0
  245. package/dist/translations/languages/ko.js.map +1 -0
  246. package/dist/translations/languages/lt.d.ts.map +1 -0
  247. package/dist/translations/languages/lt.js +92 -0
  248. package/dist/translations/languages/lt.js.map +1 -0
  249. package/dist/translations/languages/my.d.ts.map +1 -0
  250. package/dist/translations/languages/my.js +92 -0
  251. package/dist/translations/languages/my.js.map +1 -0
  252. package/dist/translations/languages/nb.d.ts.map +1 -0
  253. package/dist/translations/languages/nb.js +92 -0
  254. package/dist/translations/languages/nb.js.map +1 -0
  255. package/dist/translations/languages/nl.d.ts.map +1 -0
  256. package/dist/translations/languages/nl.js +92 -0
  257. package/dist/translations/languages/nl.js.map +1 -0
  258. package/dist/translations/languages/pl.d.ts.map +1 -0
  259. package/dist/translations/languages/pl.js +92 -0
  260. package/dist/translations/languages/pl.js.map +1 -0
  261. package/dist/translations/languages/pt.d.ts.map +1 -0
  262. package/dist/translations/languages/pt.js +92 -0
  263. package/dist/translations/languages/pt.js.map +1 -0
  264. package/dist/translations/languages/ro.d.ts.map +1 -0
  265. package/dist/translations/languages/ro.js +92 -0
  266. package/dist/translations/languages/ro.js.map +1 -0
  267. package/dist/translations/languages/rs.d.ts.map +1 -0
  268. package/dist/translations/languages/rs.js +92 -0
  269. package/dist/translations/languages/rs.js.map +1 -0
  270. package/dist/translations/languages/rsLatin.d.ts.map +1 -0
  271. package/dist/translations/languages/rsLatin.js +92 -0
  272. package/dist/translations/languages/rsLatin.js.map +1 -0
  273. package/dist/translations/languages/ru.d.ts.map +1 -0
  274. package/dist/translations/languages/ru.js +92 -0
  275. package/dist/translations/languages/ru.js.map +1 -0
  276. package/dist/translations/languages/sk.d.ts.map +1 -0
  277. package/dist/translations/languages/sk.js +92 -0
  278. package/dist/translations/languages/sk.js.map +1 -0
  279. package/dist/translations/languages/sl.d.ts.map +1 -0
  280. package/dist/translations/languages/sl.js +92 -0
  281. package/dist/translations/languages/sl.js.map +1 -0
  282. package/dist/translations/languages/sv.d.ts.map +1 -0
  283. package/dist/translations/languages/sv.js +92 -0
  284. package/dist/translations/languages/sv.js.map +1 -0
  285. package/dist/translations/languages/ta.d.ts.map +1 -0
  286. package/dist/translations/languages/ta.js +92 -0
  287. package/dist/translations/languages/ta.js.map +1 -0
  288. package/dist/translations/languages/th.d.ts.map +1 -0
  289. package/dist/translations/languages/th.js +92 -0
  290. package/dist/translations/languages/th.js.map +1 -0
  291. package/dist/translations/languages/tr.d.ts.map +1 -0
  292. package/dist/translations/languages/tr.js +92 -0
  293. package/dist/translations/languages/tr.js.map +1 -0
  294. package/dist/translations/languages/uk.d.ts.map +1 -0
  295. package/dist/translations/languages/uk.js +92 -0
  296. package/dist/translations/languages/uk.js.map +1 -0
  297. package/dist/translations/languages/vi.d.ts.map +1 -0
  298. package/dist/translations/languages/vi.js +92 -0
  299. package/dist/translations/languages/vi.js.map +1 -0
  300. package/dist/translations/languages/zh.d.ts.map +1 -0
  301. package/dist/translations/languages/zh.js +92 -0
  302. package/dist/translations/languages/zh.js.map +1 -0
  303. package/dist/translations/languages/zhTw.d.ts.map +1 -0
  304. package/dist/translations/languages/zhTw.js +92 -0
  305. package/dist/translations/languages/zhTw.js.map +1 -0
  306. package/dist/translations/translation-schema.json +343 -0
  307. package/dist/translations/types.d.ts.map +1 -0
  308. package/dist/translations/types.js +3 -0
  309. package/dist/translations/types.js.map +1 -0
  310. package/dist/types/index.d.ts.map +1 -0
  311. package/dist/types/index.js +3 -0
  312. package/dist/types/index.js.map +1 -0
  313. package/dist/types/utilities.d.ts.map +1 -0
  314. package/dist/types/utilities.js +3 -0
  315. package/dist/types/utilities.js.map +1 -0
  316. package/dist/ui/PriceCell/index.d.ts.map +1 -0
  317. package/dist/ui/PriceCell/index.js +36 -0
  318. package/dist/ui/PriceCell/index.js.map +1 -0
  319. package/dist/ui/PriceInput/FormattedInput.d.ts.map +1 -0
  320. package/dist/ui/PriceInput/FormattedInput.js +147 -0
  321. package/dist/ui/PriceInput/FormattedInput.js.map +1 -0
  322. package/dist/ui/PriceInput/index.css +35 -0
  323. package/dist/ui/PriceInput/index.d.ts.map +1 -0
  324. package/dist/ui/PriceInput/index.js +21 -0
  325. package/dist/ui/PriceInput/index.js.map +1 -0
  326. package/dist/ui/PriceRowLabel/index.css +13 -0
  327. package/dist/ui/PriceRowLabel/index.d.ts.map +1 -0
  328. package/dist/ui/PriceRowLabel/index.js +66 -0
  329. package/dist/ui/PriceRowLabel/index.js.map +1 -0
  330. package/dist/ui/VariantOptionsSelector/ErrorBox.d.ts.map +1 -0
  331. package/dist/ui/VariantOptionsSelector/ErrorBox.js +28 -0
  332. package/dist/ui/VariantOptionsSelector/ErrorBox.js.map +1 -0
  333. package/dist/ui/VariantOptionsSelector/OptionsSelect.d.ts.map +1 -0
  334. package/dist/ui/VariantOptionsSelector/OptionsSelect.js +71 -0
  335. package/dist/ui/VariantOptionsSelector/OptionsSelect.js.map +1 -0
  336. package/dist/ui/VariantOptionsSelector/index.css +37 -0
  337. package/dist/ui/VariantOptionsSelector/index.d.ts.map +1 -0
  338. package/dist/ui/VariantOptionsSelector/index.js +81 -0
  339. package/dist/ui/VariantOptionsSelector/index.js.map +1 -0
  340. package/dist/ui/utilities.d.ts.map +1 -0
  341. package/dist/ui/utilities.js +40 -0
  342. package/dist/ui/utilities.js.map +1 -0
  343. package/dist/utilities/accessComposition.d.ts.map +1 -0
  344. package/dist/utilities/accessComposition.js +103 -0
  345. package/dist/utilities/accessComposition.js.map +1 -0
  346. package/dist/utilities/accessComposition.spec.js +765 -0
  347. package/dist/utilities/accessComposition.spec.js.map +1 -0
  348. package/dist/utilities/defaultProductsValidation.d.ts.map +1 -0
  349. package/dist/utilities/defaultProductsValidation.js +40 -0
  350. package/dist/utilities/defaultProductsValidation.js.map +1 -0
  351. package/dist/utilities/defaultProductsValidation.spec.js +384 -0
  352. package/dist/utilities/defaultProductsValidation.spec.js.map +1 -0
  353. package/dist/utilities/errorCodes.d.ts.map +1 -0
  354. package/dist/utilities/errorCodes.js +4 -0
  355. package/dist/utilities/errorCodes.js.map +1 -0
  356. package/dist/utilities/getCollectionSlugMap.d.ts.map +1 -0
  357. package/dist/utilities/getCollectionSlugMap.js +36 -0
  358. package/dist/utilities/getCollectionSlugMap.js.map +1 -0
  359. package/dist/utilities/getCollectionSlugMap.spec.js +254 -0
  360. package/dist/utilities/getCollectionSlugMap.spec.js.map +1 -0
  361. package/dist/utilities/pushTypeScriptProperties.d.ts.map +1 -0
  362. package/dist/utilities/pushTypeScriptProperties.js +37 -0
  363. package/dist/utilities/pushTypeScriptProperties.js.map +1 -0
  364. package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -0
  365. package/dist/utilities/sanitizePluginConfig.js +75 -0
  366. package/dist/utilities/sanitizePluginConfig.js.map +1 -0
  367. package/dist/utilities/sanitizePluginConfig.spec.js +516 -0
  368. package/dist/utilities/sanitizePluginConfig.spec.js.map +1 -0
  369. package/package.json +114 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\nimport type { Config, Endpoint } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\n\nimport type { PluginDefaultTranslationsObject } from './translations/types.js'\nimport type { EcommercePluginConfig, SanitizedEcommercePluginConfig } from './types/index.js'\n\nimport { createAddressesCollection } from './collections/addresses/createAddressesCollection.js'\nimport { createCartsCollection } from './collections/carts/createCartsCollection.js'\nimport { createOrdersCollection } from './collections/orders/createOrdersCollection.js'\nimport { createProductsCollection } from './collections/products/createProductsCollection.js'\nimport { createTransactionsCollection } from './collections/transactions/createTransactionsCollection.js'\nimport { createVariantOptionsCollection } from './collections/variants/createVariantOptionsCollection.js'\nimport { createVariantsCollection } from './collections/variants/createVariantsCollection/index.js'\nimport { createVariantTypesCollection } from './collections/variants/createVariantTypesCollection.js'\nimport { confirmOrderHandler } from './endpoints/confirmOrder.js'\nimport { initiatePaymentHandler } from './endpoints/initiatePayment.js'\nimport { translations } from './translations/index.js'\nimport { getCollectionSlugMap } from './utilities/getCollectionSlugMap.js'\nimport { pushTypeScriptProperties } from './utilities/pushTypeScriptProperties.js'\nimport { sanitizePluginConfig } from './utilities/sanitizePluginConfig.js'\n\nexport const ecommercePlugin =\n (pluginConfig?: EcommercePluginConfig) =>\n async (incomingConfig: Config): Promise<Config> => {\n if (!pluginConfig) {\n return incomingConfig\n }\n\n const sanitizedPluginConfig = sanitizePluginConfig({ pluginConfig })\n\n const accessConfig = sanitizedPluginConfig.access\n\n // Ensure collections exists\n if (!incomingConfig.collections) {\n incomingConfig.collections = []\n }\n\n // Determine if variants are enabled based on products config\n const productsConfig =\n typeof sanitizedPluginConfig.products === 'boolean'\n ? sanitizedPluginConfig.products\n ? { variants: true }\n : undefined\n : sanitizedPluginConfig.products\n\n const enableVariants = Boolean(productsConfig?.variants)\n\n /**\n * Used to keep track of the slugs of collections in case they are overridden by the user.\n * Variant-related slugs are only included when variants are enabled.\n */\n const collectionSlugMap = getCollectionSlugMap({ enableVariants, sanitizedPluginConfig })\n\n const currenciesConfig: Required<SanitizedEcommercePluginConfig['currencies']> =\n sanitizedPluginConfig.currencies\n\n let addressFields\n\n if (sanitizedPluginConfig.addresses) {\n addressFields = sanitizedPluginConfig.addresses.addressFields\n\n const supportedCountries = sanitizedPluginConfig.addresses.supportedCountries\n\n const defaultAddressesCollection = createAddressesCollection({\n access: accessConfig,\n addressFields,\n customersSlug: collectionSlugMap.customers,\n supportedCountries,\n })\n\n const addressesCollection =\n sanitizedPluginConfig.addresses &&\n typeof sanitizedPluginConfig.addresses === 'object' &&\n 'addressesCollectionOverride' in sanitizedPluginConfig.addresses &&\n sanitizedPluginConfig.addresses.addressesCollectionOverride\n ? await sanitizedPluginConfig.addresses.addressesCollectionOverride({\n defaultCollection: defaultAddressesCollection,\n })\n : defaultAddressesCollection\n\n incomingConfig.collections.push(addressesCollection)\n }\n\n if (productsConfig) {\n if (productsConfig.variants) {\n const variantsConfig =\n typeof productsConfig.variants === 'boolean' ? undefined : productsConfig.variants\n\n const defaultVariantsCollection = createVariantsCollection({\n access: accessConfig,\n currenciesConfig,\n inventory: sanitizedPluginConfig.inventory,\n productsSlug: collectionSlugMap.products,\n variantOptionsSlug: collectionSlugMap.variantOptions ?? 'variantOptions',\n variantTypesSlug: collectionSlugMap.variantTypes ?? 'variantTypes',\n })\n\n const variants =\n variantsConfig &&\n typeof variantsConfig === 'object' &&\n 'variantsCollectionOverride' in variantsConfig &&\n variantsConfig.variantsCollectionOverride\n ? await variantsConfig.variantsCollectionOverride({\n defaultCollection: defaultVariantsCollection,\n })\n : defaultVariantsCollection\n\n const defaultVariantTypesCollection = createVariantTypesCollection({\n access: accessConfig,\n variantOptionsSlug: collectionSlugMap.variantOptions ?? 'variantOptions',\n })\n\n const variantTypes =\n variantsConfig &&\n typeof variantsConfig === 'object' &&\n 'variantTypesCollectionOverride' in variantsConfig &&\n variantsConfig.variantTypesCollectionOverride\n ? await variantsConfig.variantTypesCollectionOverride({\n defaultCollection: defaultVariantTypesCollection,\n })\n : defaultVariantTypesCollection\n\n const defaultVariantOptionsCollection = createVariantOptionsCollection({\n access: accessConfig,\n variantTypesSlug: collectionSlugMap.variantTypes ?? 'variantTypes',\n })\n\n const variantOptions =\n variantsConfig &&\n typeof variantsConfig === 'object' &&\n 'variantOptionsCollectionOverride' in variantsConfig &&\n variantsConfig.variantOptionsCollectionOverride\n ? await variantsConfig.variantOptionsCollectionOverride({\n defaultCollection: defaultVariantOptionsCollection,\n })\n : defaultVariantOptionsCollection\n\n incomingConfig.collections.push(variants, variantTypes, variantOptions)\n }\n\n const defaultProductsCollection = createProductsCollection({\n access: accessConfig,\n currenciesConfig,\n enableVariants,\n inventory: sanitizedPluginConfig.inventory,\n variantsSlug: collectionSlugMap.variants ?? 'variants',\n variantTypesSlug: collectionSlugMap.variantTypes ?? 'variantTypes',\n })\n\n const productsCollection =\n productsConfig &&\n 'productsCollectionOverride' in productsConfig &&\n productsConfig.productsCollectionOverride\n ? await productsConfig.productsCollectionOverride({\n defaultCollection: defaultProductsCollection,\n })\n : defaultProductsCollection\n\n incomingConfig.collections.push(productsCollection)\n\n if (sanitizedPluginConfig.carts) {\n const cartsConfig =\n typeof sanitizedPluginConfig.carts === 'object' ? sanitizedPluginConfig.carts : {}\n\n const defaultCartsCollection = createCartsCollection({\n access: accessConfig,\n allowGuestCarts: cartsConfig.allowGuestCarts,\n cartItemMatcher: cartsConfig.cartItemMatcher,\n currenciesConfig,\n customersSlug: collectionSlugMap.customers,\n enableVariants: Boolean(productsConfig.variants),\n productsSlug: collectionSlugMap.products,\n variantsSlug: collectionSlugMap.variants ?? 'variants',\n })\n\n const cartsCollection =\n sanitizedPluginConfig.carts &&\n typeof sanitizedPluginConfig.carts === 'object' &&\n 'cartsCollectionOverride' in sanitizedPluginConfig.carts &&\n sanitizedPluginConfig.carts.cartsCollectionOverride\n ? await sanitizedPluginConfig.carts.cartsCollectionOverride({\n defaultCollection: defaultCartsCollection,\n })\n : defaultCartsCollection\n\n incomingConfig.collections.push(cartsCollection)\n }\n }\n\n if (sanitizedPluginConfig.orders) {\n const defaultOrdersCollection = createOrdersCollection({\n access: accessConfig,\n addressFields,\n currenciesConfig,\n customersSlug: collectionSlugMap.customers,\n enableVariants,\n productsSlug: collectionSlugMap.products,\n variantsSlug: collectionSlugMap.variants ?? 'variants',\n })\n\n const ordersCollection =\n sanitizedPluginConfig.orders &&\n typeof sanitizedPluginConfig.orders === 'object' &&\n 'ordersCollectionOverride' in sanitizedPluginConfig.orders &&\n sanitizedPluginConfig.orders.ordersCollectionOverride\n ? await sanitizedPluginConfig.orders.ordersCollectionOverride({\n defaultCollection: defaultOrdersCollection,\n })\n : defaultOrdersCollection\n\n incomingConfig.collections.push(ordersCollection)\n }\n\n const paymentMethods = sanitizedPluginConfig.payments.paymentMethods\n\n if (sanitizedPluginConfig.payments) {\n if (paymentMethods.length) {\n if (!Array.isArray(incomingConfig.endpoints)) {\n incomingConfig.endpoints = []\n }\n\n const productsValidation =\n (typeof sanitizedPluginConfig.products === 'object' &&\n sanitizedPluginConfig.products.validation) ||\n undefined\n\n paymentMethods.forEach((paymentMethod) => {\n const methodPath = `/payments/${paymentMethod.name}`\n const endpoints: Endpoint[] = []\n\n const initiatePayment: Endpoint = {\n handler: initiatePaymentHandler({\n currenciesConfig,\n inventory: sanitizedPluginConfig.inventory,\n paymentMethod,\n productsSlug: collectionSlugMap.products,\n productsValidation,\n transactionsSlug: collectionSlugMap.transactions,\n variantsSlug: collectionSlugMap.variants ?? 'variants',\n }),\n method: 'post',\n path: `${methodPath}/initiate`,\n }\n\n const confirmOrder: Endpoint = {\n handler: confirmOrderHandler({\n cartsSlug: collectionSlugMap.carts,\n currenciesConfig,\n ordersSlug: collectionSlugMap.orders,\n paymentMethod,\n productsSlug: collectionSlugMap.products,\n productsValidation,\n transactionsSlug: collectionSlugMap.transactions,\n variantsSlug: collectionSlugMap.variants ?? 'variants',\n }),\n method: 'post',\n path: `${methodPath}/confirm-order`,\n }\n\n endpoints.push(initiatePayment, confirmOrder)\n\n // Attach any additional endpoints defined in the payment method\n if (paymentMethod.endpoints && paymentMethod.endpoints.length > 0) {\n const methodEndpoints = paymentMethod.endpoints.map((endpoint) => {\n const path = endpoint.path.startsWith('/') ? endpoint.path : `/${endpoint.path}`\n\n return {\n ...endpoint,\n path: `${methodPath}${path}`,\n }\n })\n\n endpoints.push(...methodEndpoints)\n }\n\n incomingConfig.endpoints!.push(...endpoints)\n })\n }\n }\n\n if (sanitizedPluginConfig.transactions) {\n const defaultTransactionsCollection = createTransactionsCollection({\n access: accessConfig,\n addressFields,\n cartsSlug: collectionSlugMap.carts,\n currenciesConfig,\n customersSlug: collectionSlugMap.customers,\n enableVariants,\n ordersSlug: collectionSlugMap.orders,\n paymentMethods,\n productsSlug: collectionSlugMap.products,\n variantsSlug: collectionSlugMap.variants ?? 'variants',\n })\n\n const transactionsCollection =\n sanitizedPluginConfig.transactions &&\n typeof sanitizedPluginConfig.transactions === 'object' &&\n 'transactionsCollectionOverride' in sanitizedPluginConfig.transactions &&\n sanitizedPluginConfig.transactions.transactionsCollectionOverride\n ? await sanitizedPluginConfig.transactions.transactionsCollectionOverride({\n defaultCollection: defaultTransactionsCollection,\n })\n : defaultTransactionsCollection\n\n incomingConfig.collections.push(transactionsCollection)\n }\n\n if (!incomingConfig.i18n) {\n incomingConfig.i18n = {}\n }\n\n if (!incomingConfig.i18n?.translations) {\n incomingConfig.i18n.translations = {}\n }\n\n incomingConfig.i18n.translations = deepMergeSimple(\n translations,\n incomingConfig.i18n?.translations,\n )\n\n /**\n * Merge plugin translations\n */\n if (!incomingConfig.i18n) {\n incomingConfig.i18n = {}\n }\n Object.entries(translations).forEach(([locale, pluginI18nObject]) => {\n const typedLocale = locale as AcceptedLanguages\n if (!incomingConfig.i18n!.translations) {\n incomingConfig.i18n!.translations = {}\n }\n if (!(typedLocale in incomingConfig.i18n!.translations)) {\n incomingConfig.i18n!.translations[typedLocale] = {}\n }\n if (!('plugin-ecommerce' in incomingConfig.i18n!.translations[typedLocale]!)) {\n ; (incomingConfig.i18n!.translations[typedLocale] as PluginDefaultTranslationsObject)[\n 'plugin-ecommerce'\n ] = {} as PluginDefaultTranslationsObject['plugin-ecommerce']\n }\n\n ; (incomingConfig.i18n!.translations[typedLocale] as PluginDefaultTranslationsObject)[\n 'plugin-ecommerce'\n ] = {\n ...pluginI18nObject.translations['plugin-ecommerce'],\n }\n })\n\n if (!incomingConfig.typescript) {\n incomingConfig.typescript = {}\n }\n\n if (!incomingConfig.typescript.schema) {\n incomingConfig.typescript.schema = []\n }\n\n incomingConfig.typescript.schema.push((args) =>\n pushTypeScriptProperties({\n ...args,\n collectionSlugMap,\n sanitizedPluginConfig,\n }),\n )\n\n return incomingConfig\n }\n\nexport {\n createAddressesCollection,\n createCartsCollection,\n createOrdersCollection,\n createProductsCollection,\n createTransactionsCollection,\n createVariantOptionsCollection,\n createVariantsCollection,\n createVariantTypesCollection,\n}\n\nexport { addItem } from './collections/carts/operations/addItem.js'\nexport { clearCart } from './collections/carts/operations/clearCart.js'\nexport { defaultCartItemMatcher } from './collections/carts/operations/defaultCartItemMatcher.js'\nexport { removeItem } from './collections/carts/operations/removeItem.js'\nexport { isNumericOperator } from './collections/carts/operations/types.js'\nexport type {\n AddItemArgs,\n CartItemData,\n CartItemMatcher,\n CartItemMatcherArgs,\n CartOperationResult,\n ClearCartArgs,\n FieldWithOperator,\n NewCartItem,\n NumericOperator,\n RemoveItemArgs,\n UpdateItemArgs,\n} from './collections/carts/operations/types.js'\nexport { updateItem } from './collections/carts/operations/updateItem.js'\nexport { EUR, GBP, USD } from './currencies/index.js'\nexport { amountField } from './fields/amountField.js'\nexport { currencyField } from './fields/currencyField.js'\nexport { pricesField } from './fields/pricesField.js'\nexport { statusField } from './fields/statusField.js'\nexport { variantsFields } from './fields/variantsFields.js'\n"],"names":["deepMergeSimple","createAddressesCollection","createCartsCollection","createOrdersCollection","createProductsCollection","createTransactionsCollection","createVariantOptionsCollection","createVariantsCollection","createVariantTypesCollection","confirmOrderHandler","initiatePaymentHandler","translations","getCollectionSlugMap","pushTypeScriptProperties","sanitizePluginConfig","ecommercePlugin","pluginConfig","incomingConfig","sanitizedPluginConfig","accessConfig","access","collections","productsConfig","products","variants","undefined","enableVariants","Boolean","collectionSlugMap","currenciesConfig","currencies","addressFields","addresses","supportedCountries","defaultAddressesCollection","customersSlug","customers","addressesCollection","addressesCollectionOverride","defaultCollection","push","variantsConfig","defaultVariantsCollection","inventory","productsSlug","variantOptionsSlug","variantOptions","variantTypesSlug","variantTypes","variantsCollectionOverride","defaultVariantTypesCollection","variantTypesCollectionOverride","defaultVariantOptionsCollection","variantOptionsCollectionOverride","defaultProductsCollection","variantsSlug","productsCollection","productsCollectionOverride","carts","cartsConfig","defaultCartsCollection","allowGuestCarts","cartItemMatcher","cartsCollection","cartsCollectionOverride","orders","defaultOrdersCollection","ordersCollection","ordersCollectionOverride","paymentMethods","payments","length","Array","isArray","endpoints","productsValidation","validation","forEach","paymentMethod","methodPath","name","initiatePayment","handler","transactionsSlug","transactions","method","path","confirmOrder","cartsSlug","ordersSlug","methodEndpoints","map","endpoint","startsWith","defaultTransactionsCollection","transactionsCollection","transactionsCollectionOverride","i18n","Object","entries","locale","pluginI18nObject","typedLocale","typescript","schema","args","addItem","clearCart","defaultCartItemMatcher","removeItem","isNumericOperator","updateItem","EUR","GBP","USD","amountField","currencyField","pricesField","statusField","variantsFields"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { PaymentAdapter } from '../../../types/index.js';
2
+ type Props = {};
3
+ export declare const confirmOrder: (props: Props) => NonNullable<PaymentAdapter>['confirmOrder'];
4
+ export {};
5
+ //# sourceMappingURL=confirmOrder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmOrder.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/cod/confirmOrder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,KAAK,KAAK,GAAG,EAAE,CAAA;AAEf,eAAO,MAAM,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WAAW,CAAC,cAAc,CAAC,CAAC,cAAc,CA6FlF,CAAA"}
@@ -0,0 +1,83 @@
1
+ export const confirmOrder = (props)=>async ({ cartsSlug = 'carts', data, ordersSlug = 'orders', req, transactionsSlug = 'transactions' })=>{
2
+ const payload = req.payload;
3
+ const {} = props || {};
4
+ const customerEmail = data.customerEmail;
5
+ const paymentIntentID = data.paymentIntentID;
6
+ if (!paymentIntentID) {
7
+ throw new Error('PaymentIntent ID is required');
8
+ }
9
+ try {
10
+ // Find our existing transaction by the payment intent ID
11
+ const transactionsResults = await payload.find({
12
+ collection: transactionsSlug,
13
+ req,
14
+ where: {
15
+ 'id': {
16
+ equals: paymentIntentID
17
+ }
18
+ }
19
+ });
20
+ console.log(paymentIntentID);
21
+ console.log(transactionsResults);
22
+ const transaction = transactionsResults.docs[0];
23
+ console.log(transaction?.cart);
24
+ if (!transactionsResults.totalDocs || !transaction) {
25
+ throw new Error('No transaction found for the provided PaymentIntent ID');
26
+ }
27
+ const cartID = transaction?.cart?.id;
28
+ const shippingAddress = transaction.billingAddress ?? undefined;
29
+ const order = await payload.create({
30
+ collection: ordersSlug,
31
+ data: {
32
+ amount: transaction.amount,
33
+ currency: transaction.currency.toUpperCase(),
34
+ ...req.user ? {
35
+ customer: req.user.id
36
+ } : {
37
+ customerEmail
38
+ },
39
+ items: transaction.items,
40
+ shippingAddress,
41
+ status: 'processing',
42
+ transactions: [
43
+ transaction.id
44
+ ]
45
+ },
46
+ req
47
+ });
48
+ const timestamp = new Date().toISOString();
49
+ await payload.update({
50
+ id: cartID,
51
+ collection: cartsSlug,
52
+ data: {
53
+ purchasedAt: timestamp
54
+ },
55
+ req
56
+ });
57
+ await payload.update({
58
+ id: transaction.id,
59
+ collection: transactionsSlug,
60
+ data: {
61
+ order: order.id,
62
+ status: 'succeeded'
63
+ },
64
+ req
65
+ });
66
+ return {
67
+ message: 'Payment initiated successfully',
68
+ orderID: order.id,
69
+ transactionID: transaction.id,
70
+ ...order.accessToken ? {
71
+ accessToken: order.accessToken
72
+ } : {}
73
+ };
74
+ } catch (error) {
75
+ payload.logger.error({
76
+ err: error,
77
+ msg: 'Error confirming order with Cod'
78
+ });
79
+ throw new Error(error instanceof Error ? error.message : 'Unknown error initiating payment');
80
+ }
81
+ };
82
+
83
+ //# sourceMappingURL=confirmOrder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/payments/adapters/cod/confirmOrder.ts"],"sourcesContent":["import type { PaymentAdapter } from '../../../types/index.js'\ntype Props = {}\n\nexport const confirmOrder: (props: Props) => NonNullable<PaymentAdapter>['confirmOrder'] =\n (props) =>\n async ({\n cartsSlug = 'carts',\n data,\n ordersSlug = 'orders',\n req,\n transactionsSlug = 'transactions',\n }) => {\n const payload = req.payload\n const { } = props || {}\n\n const customerEmail = data.customerEmail\n\n const paymentIntentID = data.paymentIntentID as string\n\n if (!paymentIntentID) {\n throw new Error('PaymentIntent ID is required')\n }\n\n try {\n // Find our existing transaction by the payment intent ID\n const transactionsResults = await payload.find({\n collection: transactionsSlug,\n req,\n where: {\n 'id': {\n equals: paymentIntentID,\n },\n },\n })\n\n console.log(paymentIntentID)\n console.log(transactionsResults)\n\n const transaction = transactionsResults.docs[0]\n console.log(transaction?.cart)\n\n if (!transactionsResults.totalDocs || !transaction) {\n throw new Error('No transaction found for the provided PaymentIntent ID')\n }\n\n const cartID = transaction?.cart?.id\n\n const shippingAddress = transaction.billingAddress ?? undefined\n\n\n const order = await payload.create({\n collection: ordersSlug,\n data: {\n amount: transaction.amount,\n currency: transaction.currency.toUpperCase(),\n ...(req.user ? { customer: req.user.id } : { customerEmail }),\n items: transaction.items,\n shippingAddress,\n status: 'processing',\n transactions: [transaction.id],\n },\n req,\n })\n\n const timestamp = new Date().toISOString()\n\n await payload.update({\n id: cartID,\n collection: cartsSlug,\n data: {\n purchasedAt: timestamp,\n },\n req,\n })\n\n await payload.update({\n id: transaction.id,\n collection: transactionsSlug,\n data: {\n order: order.id,\n status: 'succeeded',\n },\n req,\n })\n\n return {\n message: 'Payment initiated successfully',\n orderID: order.id,\n transactionID: transaction.id,\n ...(order.accessToken ? { accessToken: order.accessToken } : {}),\n }\n } catch (error) {\n payload.logger.error({ err: error, msg: 'Error confirming order with Cod' })\n\n throw new Error(error instanceof Error ? error.message : 'Unknown error initiating payment')\n }\n }\n"],"names":["confirmOrder","props","cartsSlug","data","ordersSlug","req","transactionsSlug","payload","customerEmail","paymentIntentID","Error","transactionsResults","find","collection","where","equals","console","log","transaction","docs","cart","totalDocs","cartID","id","shippingAddress","billingAddress","undefined","order","create","amount","currency","toUpperCase","user","customer","items","status","transactions","timestamp","Date","toISOString","update","purchasedAt","message","orderID","transactionID","accessToken","error","logger","err","msg"],"mappings":"AAGA,OAAO,MAAMA,eACX,CAACC,QACC,OAAO,EACLC,YAAY,OAAO,EACnBC,IAAI,EACJC,aAAa,QAAQ,EACrBC,GAAG,EACHC,mBAAmB,cAAc,EAClC;QACC,MAAMC,UAAUF,IAAIE,OAAO;QAC3B,MAAM,EAAG,GAAGN,SAAS,CAAC;QAEtB,MAAMO,gBAAgBL,KAAKK,aAAa;QAExC,MAAMC,kBAAkBN,KAAKM,eAAe;QAE5C,IAAI,CAACA,iBAAiB;YACpB,MAAM,IAAIC,MAAM;QAClB;QAEA,IAAI;YACF,yDAAyD;YACzD,MAAMC,sBAAsB,MAAMJ,QAAQK,IAAI,CAAC;gBAC7CC,YAAYP;gBACZD;gBACAS,OAAO;oBACL,MAAM;wBACJC,QAAQN;oBACV;gBACF;YACF;YAEAO,QAAQC,GAAG,CAACR;YACZO,QAAQC,GAAG,CAACN;YAEZ,MAAMO,cAAcP,oBAAoBQ,IAAI,CAAC,EAAE;YAC/CH,QAAQC,GAAG,CAACC,aAAaE;YAEzB,IAAI,CAACT,oBAAoBU,SAAS,IAAI,CAACH,aAAa;gBAClD,MAAM,IAAIR,MAAM;YAClB;YAEA,MAAMY,SAASJ,aAAaE,MAAMG;YAElC,MAAMC,kBAAkBN,YAAYO,cAAc,IAAIC;YAGtD,MAAMC,QAAQ,MAAMpB,QAAQqB,MAAM,CAAC;gBACjCf,YAAYT;gBACZD,MAAM;oBACJ0B,QAAQX,YAAYW,MAAM;oBAC1BC,UAAUZ,YAAYY,QAAQ,CAACC,WAAW;oBAC1C,GAAI1B,IAAI2B,IAAI,GAAG;wBAAEC,UAAU5B,IAAI2B,IAAI,CAACT,EAAE;oBAAC,IAAI;wBAAEf;oBAAc,CAAC;oBAC5D0B,OAAOhB,YAAYgB,KAAK;oBACxBV;oBACAW,QAAQ;oBACRC,cAAc;wBAAClB,YAAYK,EAAE;qBAAC;gBAChC;gBACAlB;YACF;YAEA,MAAMgC,YAAY,IAAIC,OAAOC,WAAW;YAExC,MAAMhC,QAAQiC,MAAM,CAAC;gBACnBjB,IAAID;gBACJT,YAAYX;gBACZC,MAAM;oBACJsC,aAAaJ;gBACf;gBACAhC;YACF;YAEA,MAAME,QAAQiC,MAAM,CAAC;gBACnBjB,IAAIL,YAAYK,EAAE;gBAClBV,YAAYP;gBACZH,MAAM;oBACJwB,OAAOA,MAAMJ,EAAE;oBACfY,QAAQ;gBACV;gBACA9B;YACF;YAEA,OAAO;gBACLqC,SAAS;gBACTC,SAAShB,MAAMJ,EAAE;gBACjBqB,eAAe1B,YAAYK,EAAE;gBAC7B,GAAII,MAAMkB,WAAW,GAAG;oBAAEA,aAAalB,MAAMkB,WAAW;gBAAC,IAAI,CAAC,CAAC;YACjE;QACF,EAAE,OAAOC,OAAO;YACdvC,QAAQwC,MAAM,CAACD,KAAK,CAAC;gBAAEE,KAAKF;gBAAOG,KAAK;YAAkC;YAE1E,MAAM,IAAIvC,MAAMoC,iBAAiBpC,QAAQoC,MAAMJ,OAAO,GAAG;QAC3D;IACF,EAAC"}
@@ -0,0 +1,166 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ const mockCustomersList = vi.fn();
3
+ const mockCustomersCreate = vi.fn();
4
+ const mockPaymentIntentsRetrieve = vi.fn();
5
+ vi.mock('cod', ()=>{
6
+ const MockCod = function() {
7
+ return {
8
+ customers: {
9
+ list: mockCustomersList,
10
+ create: mockCustomersCreate
11
+ },
12
+ paymentIntents: {
13
+ retrieve: mockPaymentIntentsRetrieve
14
+ }
15
+ };
16
+ };
17
+ return {
18
+ default: MockCod
19
+ };
20
+ });
21
+ import { confirmOrder } from './confirmOrder';
22
+ const defaultCartItemsSnapshot = JSON.stringify([
23
+ {
24
+ id: 'item-1',
25
+ quantity: 1
26
+ }
27
+ ]);
28
+ const createMockPaymentIntent = (status)=>({
29
+ amount: 1000,
30
+ currency: 'usd',
31
+ metadata: {
32
+ cartID: 'cart-123',
33
+ cartItemsSnapshot: defaultCartItemsSnapshot,
34
+ shippingAddress: JSON.stringify({
35
+ city: 'Test City'
36
+ })
37
+ },
38
+ status
39
+ });
40
+ const createMockPayload = ()=>({
41
+ create: vi.fn().mockResolvedValue({
42
+ id: 'order-123'
43
+ }),
44
+ find: vi.fn().mockResolvedValue({
45
+ docs: [
46
+ {
47
+ id: 'txn-123'
48
+ }
49
+ ],
50
+ totalDocs: 1
51
+ }),
52
+ logger: {
53
+ error: vi.fn()
54
+ },
55
+ update: vi.fn().mockResolvedValue({})
56
+ });
57
+ const createMockReq = (payload)=>({
58
+ payload,
59
+ user: {
60
+ id: 'user-123'
61
+ }
62
+ });
63
+ describe('confirmOrder - payment status check', ()=>{
64
+ const secretKey = 'sk_test_123';
65
+ beforeEach(()=>{
66
+ vi.clearAllMocks();
67
+ mockCustomersList.mockResolvedValue({
68
+ data: [
69
+ {
70
+ id: 'cus-123'
71
+ }
72
+ ]
73
+ });
74
+ mockCustomersCreate.mockResolvedValue({
75
+ id: 'cus-new'
76
+ });
77
+ });
78
+ it('should throw when paymentIntent status is requires_payment_method', async ()=>{
79
+ mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('requires_payment_method'));
80
+ const mockPayload = createMockPayload();
81
+ const handler = confirmOrder({
82
+ secretKey
83
+ });
84
+ await expect(handler({
85
+ data: {
86
+ customerEmail: 'test@test.com',
87
+ paymentIntentID: 'pi_123'
88
+ },
89
+ req: createMockReq(mockPayload)
90
+ })).rejects.toThrow('Payment not completed.');
91
+ expect(mockPayload.create).not.toHaveBeenCalled();
92
+ });
93
+ it('should throw when paymentIntent status is canceled', async ()=>{
94
+ mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('canceled'));
95
+ const mockPayload = createMockPayload();
96
+ const handler = confirmOrder({
97
+ secretKey
98
+ });
99
+ await expect(handler({
100
+ data: {
101
+ customerEmail: 'test@test.com',
102
+ paymentIntentID: 'pi_123'
103
+ },
104
+ req: createMockReq(mockPayload)
105
+ })).rejects.toThrow('Payment not completed.');
106
+ expect(mockPayload.create).not.toHaveBeenCalled();
107
+ });
108
+ it('should throw when paymentIntent status is processing', async ()=>{
109
+ mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('processing'));
110
+ const mockPayload = createMockPayload();
111
+ const handler = confirmOrder({
112
+ secretKey
113
+ });
114
+ await expect(handler({
115
+ data: {
116
+ customerEmail: 'test@test.com',
117
+ paymentIntentID: 'pi_123'
118
+ },
119
+ req: createMockReq(mockPayload)
120
+ })).rejects.toThrow('Payment not completed.');
121
+ expect(mockPayload.create).not.toHaveBeenCalled();
122
+ });
123
+ it('should not update cart or transaction when payment has not succeeded', async ()=>{
124
+ mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('requires_payment_method'));
125
+ const mockPayload = createMockPayload();
126
+ const handler = confirmOrder({
127
+ secretKey
128
+ });
129
+ await expect(handler({
130
+ data: {
131
+ customerEmail: 'test@test.com',
132
+ paymentIntentID: 'pi_123'
133
+ },
134
+ req: createMockReq(mockPayload)
135
+ })).rejects.toThrow();
136
+ expect(mockPayload.update).not.toHaveBeenCalled();
137
+ });
138
+ it('should create order when paymentIntent status is succeeded', async ()=>{
139
+ mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('succeeded'));
140
+ const mockPayload = createMockPayload();
141
+ const handler = confirmOrder({
142
+ secretKey
143
+ });
144
+ const result = await handler({
145
+ data: {
146
+ customerEmail: 'test@test.com',
147
+ paymentIntentID: 'pi_123'
148
+ },
149
+ req: createMockReq(mockPayload)
150
+ });
151
+ expect(mockPayload.create).toHaveBeenCalledWith(expect.objectContaining({
152
+ collection: 'orders',
153
+ data: expect.objectContaining({
154
+ amount: 1000,
155
+ currency: 'USD',
156
+ status: 'processing'
157
+ })
158
+ }));
159
+ expect(result).toEqual(expect.objectContaining({
160
+ orderID: 'order-123',
161
+ transactionID: 'txn-123'
162
+ }));
163
+ });
164
+ });
165
+
166
+ //# sourceMappingURL=confirmOrder.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/payments/adapters/cod/confirmOrder.spec.ts"],"sourcesContent":["import { beforeEach, describe, expect, it, vi } from 'vitest'\n\nconst mockCustomersList = vi.fn()\nconst mockCustomersCreate = vi.fn()\nconst mockPaymentIntentsRetrieve = vi.fn()\n\nvi.mock('cod', () => {\n const MockCod = function () {\n return {\n customers: {\n list: mockCustomersList,\n create: mockCustomersCreate,\n },\n paymentIntents: {\n retrieve: mockPaymentIntentsRetrieve,\n },\n }\n }\n\n return { default: MockCod }\n})\n\nimport { confirmOrder } from './confirmOrder'\n\nconst defaultCartItemsSnapshot = JSON.stringify([{ id: 'item-1', quantity: 1 }])\n\nconst createMockPaymentIntent = (status: string) => ({\n amount: 1000,\n currency: 'usd',\n metadata: {\n cartID: 'cart-123',\n cartItemsSnapshot: defaultCartItemsSnapshot,\n shippingAddress: JSON.stringify({ city: 'Test City' }),\n },\n status,\n})\n\nconst createMockPayload = () => ({\n create: vi.fn().mockResolvedValue({ id: 'order-123' }),\n find: vi.fn().mockResolvedValue({\n docs: [{ id: 'txn-123' }],\n totalDocs: 1,\n }),\n logger: { error: vi.fn() },\n update: vi.fn().mockResolvedValue({}),\n})\n\nconst createMockReq = (payload: ReturnType<typeof createMockPayload>) =>\n ({\n payload,\n user: { id: 'user-123' },\n }) as any\n\ndescribe('confirmOrder - payment status check', () => {\n const secretKey = 'sk_test_123'\n\n beforeEach(() => {\n vi.clearAllMocks()\n\n mockCustomersList.mockResolvedValue({ data: [{ id: 'cus-123' }] })\n mockCustomersCreate.mockResolvedValue({ id: 'cus-new' })\n })\n\n it('should throw when paymentIntent status is requires_payment_method', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('requires_payment_method'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n await expect(\n handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n }),\n ).rejects.toThrow('Payment not completed.')\n\n expect(mockPayload.create).not.toHaveBeenCalled()\n })\n\n it('should throw when paymentIntent status is canceled', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('canceled'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n await expect(\n handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n }),\n ).rejects.toThrow('Payment not completed.')\n\n expect(mockPayload.create).not.toHaveBeenCalled()\n })\n\n it('should throw when paymentIntent status is processing', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('processing'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n await expect(\n handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n }),\n ).rejects.toThrow('Payment not completed.')\n\n expect(mockPayload.create).not.toHaveBeenCalled()\n })\n\n it('should not update cart or transaction when payment has not succeeded', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('requires_payment_method'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n await expect(\n handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n }),\n ).rejects.toThrow()\n\n expect(mockPayload.update).not.toHaveBeenCalled()\n })\n\n it('should create order when paymentIntent status is succeeded', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('succeeded'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n const result = await handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n })\n\n expect(mockPayload.create).toHaveBeenCalledWith(\n expect.objectContaining({\n collection: 'orders',\n data: expect.objectContaining({\n amount: 1000,\n currency: 'USD',\n status: 'processing',\n }),\n }),\n )\n\n expect(result).toEqual(\n expect.objectContaining({\n orderID: 'order-123',\n transactionID: 'txn-123',\n }),\n )\n })\n})\n"],"names":["beforeEach","describe","expect","it","vi","mockCustomersList","fn","mockCustomersCreate","mockPaymentIntentsRetrieve","mock","MockCod","customers","list","create","paymentIntents","retrieve","default","confirmOrder","defaultCartItemsSnapshot","JSON","stringify","id","quantity","createMockPaymentIntent","status","amount","currency","metadata","cartID","cartItemsSnapshot","shippingAddress","city","createMockPayload","mockResolvedValue","find","docs","totalDocs","logger","error","update","createMockReq","payload","user","secretKey","clearAllMocks","data","mockPayload","handler","customerEmail","paymentIntentID","req","rejects","toThrow","not","toHaveBeenCalled","result","toHaveBeenCalledWith","objectContaining","collection","toEqual","orderID","transactionID"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Endpoint } from 'payload';
2
+ type Props = {};
3
+ export declare const webhooksEndpoint: (props: Props) => Endpoint;
4
+ export {};
5
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../../../../src/payments/adapters/cod/endpoints/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,KAAK,KAAK,GAAG,EAAE,CAAA;AAEf,eAAO,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,QAahD,CAAA"}
@@ -0,0 +1,18 @@
1
+ export const webhooksEndpoint = (props)=>{
2
+ const {} = props || {};
3
+ const handler = async (req)=>{
4
+ let returnStatus = 200;
5
+ return Response.json({
6
+ received: true
7
+ }, {
8
+ status: returnStatus
9
+ });
10
+ };
11
+ return {
12
+ handler,
13
+ method: 'post',
14
+ path: '/webhooks'
15
+ };
16
+ };
17
+
18
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/payments/adapters/cod/endpoints/webhooks.ts"],"sourcesContent":["import type { Endpoint } from 'payload'\n\ntype Props = {}\n\nexport const webhooksEndpoint: (props: Props) => Endpoint = (props) => {\n const { } = props || {}\n\n const handler: Endpoint['handler'] = async (req) => {\n let returnStatus = 200\n return Response.json({ received: true }, { status: returnStatus })\n }\n\n return {\n handler,\n method: 'post',\n path: '/webhooks',\n }\n}\n"],"names":["webhooksEndpoint","props","handler","req","returnStatus","Response","json","received","status","method","path"],"mappings":"AAIA,OAAO,MAAMA,mBAA+C,CAACC;IAC3D,MAAM,EAAG,GAAGA,SAAS,CAAC;IAEtB,MAAMC,UAA+B,OAAOC;QAC1C,IAAIC,eAAe;QACnB,OAAOC,SAASC,IAAI,CAAC;YAAEC,UAAU;QAAK,GAAG;YAAEC,QAAQJ;QAAa;IAClE;IAEA,OAAO;QACLF;QACAO,QAAQ;QACRC,MAAM;IACR;AACF,EAAC"}
@@ -0,0 +1,12 @@
1
+ import type { PaymentAdapter, PaymentAdapterArgs, PaymentAdapterClient, PaymentAdapterClientArgs } from '../../../types/index.js';
2
+ export type CodAdapterArgs = {} & PaymentAdapterArgs;
3
+ export declare const codAdapter: (props: CodAdapterArgs) => PaymentAdapter;
4
+ export type CodAdapterClientArgs = {} & PaymentAdapterClientArgs;
5
+ export declare const codAdapterClient: (props: CodAdapterClientArgs) => PaymentAdapterClient;
6
+ export type InitiatePaymentReturnType = {
7
+ clientSecret: string;
8
+ message: string;
9
+ paymentIntentID: string;
10
+ method: string;
11
+ };
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/cod/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,yBAAyB,CAAA;AAQhC,MAAM,MAAM,cAAc,GAAG,EAAE,GAAG,kBAAkB,CAAA;AAEpD,eAAO,MAAM,UAAU,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,cAqDnD,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,EAAE,GAAG,wBAAwB,CAAA;AAEhE,eAAO,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,oBAS/D,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA"}
@@ -0,0 +1,64 @@
1
+ import { confirmOrder } from './confirmOrder.js';
2
+ import { webhooksEndpoint } from './endpoints/webhooks.js';
3
+ import { initiatePayment } from './initiatePayment.js';
4
+ export const codAdapter = (props)=>{
5
+ const { groupOverrides } = props;
6
+ const label = props?.label || 'Cod';
7
+ const baseFields = [
8
+ {
9
+ name: 'customerID',
10
+ type: 'text',
11
+ label: 'COD Customer ID'
12
+ },
13
+ {
14
+ name: 'paymentIntentID',
15
+ type: 'text',
16
+ label: 'COD PaymentIntent ID'
17
+ },
18
+ {
19
+ name: 'codStatus',
20
+ type: 'select',
21
+ defaultValue: "Pending",
22
+ options: [
23
+ "Pending",
24
+ "Paid"
25
+ ],
26
+ label: "COD Status"
27
+ }
28
+ ];
29
+ const groupField = {
30
+ name: 'cod',
31
+ type: 'group',
32
+ ...groupOverrides,
33
+ admin: {
34
+ condition: (data)=>{
35
+ const path = 'paymentMethod';
36
+ return data?.[path] === 'cod';
37
+ },
38
+ ...groupOverrides?.admin
39
+ },
40
+ fields: groupOverrides?.fields && typeof groupOverrides?.fields === 'function' ? groupOverrides.fields({
41
+ defaultFields: baseFields
42
+ }) : baseFields
43
+ };
44
+ return {
45
+ name: 'cod',
46
+ confirmOrder: confirmOrder({}),
47
+ endpoints: [
48
+ webhooksEndpoint({})
49
+ ],
50
+ group: groupField,
51
+ initiatePayment: initiatePayment({}),
52
+ label
53
+ };
54
+ };
55
+ export const codAdapterClient = (props)=>{
56
+ return {
57
+ name: 'cod',
58
+ confirmOrder: true,
59
+ initiatePayment: true,
60
+ label: 'Cash on Delivery'
61
+ };
62
+ };
63
+
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/payments/adapters/cod/index.ts"],"sourcesContent":["import type { Field, GroupField, PayloadRequest } from 'payload'\n\nimport type {\n PaymentAdapter,\n PaymentAdapterArgs,\n PaymentAdapterClient,\n PaymentAdapterClientArgs,\n} from '../../../types/index.js'\n\nimport { confirmOrder } from './confirmOrder.js'\nimport { webhooksEndpoint } from './endpoints/webhooks.js'\nimport { initiatePayment } from './initiatePayment.js'\n\n\n\nexport type CodAdapterArgs = {} & PaymentAdapterArgs\n\nexport const codAdapter: (props: CodAdapterArgs) => PaymentAdapter = (props) => {\n const { groupOverrides } = props\n const label = props?.label || 'Cod'\n\n const baseFields: Field[] = [\n {\n name: 'customerID',\n type: 'text',\n label: 'COD Customer ID',\n },\n {\n name: 'paymentIntentID',\n type: 'text',\n label: 'COD PaymentIntent ID',\n },\n {\n name: 'codStatus',\n type: 'select',\n defaultValue: \"Pending\",\n options: [\n \"Pending\",\n \"Paid\"\n ],\n label: \"COD Status\"\n }\n ]\n\n const groupField: GroupField = {\n name: 'cod',\n type: 'group',\n ...groupOverrides,\n admin: {\n condition: (data) => {\n const path = 'paymentMethod'\n\n return data?.[path] === 'cod'\n },\n ...groupOverrides?.admin,\n },\n fields:\n groupOverrides?.fields && typeof groupOverrides?.fields === 'function'\n ? groupOverrides.fields({ defaultFields: baseFields })\n : baseFields,\n }\n\n return {\n name: 'cod',\n confirmOrder: confirmOrder({}),\n endpoints: [webhooksEndpoint({})],\n group: groupField,\n initiatePayment: initiatePayment({}),\n label,\n }\n}\n\nexport type CodAdapterClientArgs = {} & PaymentAdapterClientArgs\n\nexport const codAdapterClient: (props: CodAdapterClientArgs) => PaymentAdapterClient = (\n props,\n) => {\n return {\n name: 'cod',\n confirmOrder: true,\n initiatePayment: true,\n label: 'Cash on Delivery',\n }\n}\n\nexport type InitiatePaymentReturnType = {\n clientSecret: string\n message: string\n paymentIntentID: string\n method: string\n}\n"],"names":["confirmOrder","webhooksEndpoint","initiatePayment","codAdapter","props","groupOverrides","label","baseFields","name","type","defaultValue","options","groupField","admin","condition","data","path","fields","defaultFields","endpoints","group","codAdapterClient"],"mappings":"AASA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,gBAAgB,QAAQ,0BAAyB;AAC1D,SAASC,eAAe,QAAQ,uBAAsB;AAMtD,OAAO,MAAMC,aAAwD,CAACC;IACpE,MAAM,EAAEC,cAAc,EAAE,GAAGD;IAC3B,MAAME,QAAQF,OAAOE,SAAS;IAE9B,MAAMC,aAAsB;QAC1B;YACEC,MAAM;YACNC,MAAM;YACNH,OAAO;QACT;QACA;YACEE,MAAM;YACNC,MAAM;YACNH,OAAO;QACT;QACA;YACEE,MAAM;YACNC,MAAM;YACNC,cAAc;YACdC,SAAS;gBACP;gBACA;aACD;YACDL,OAAO;QACT;KACD;IAED,MAAMM,aAAyB;QAC7BJ,MAAM;QACNC,MAAM;QACN,GAAGJ,cAAc;QACjBQ,OAAO;YACLC,WAAW,CAACC;gBACV,MAAMC,OAAO;gBAEb,OAAOD,MAAM,CAACC,KAAK,KAAK;YAC1B;YACA,GAAGX,gBAAgBQ,KAAK;QAC1B;QACAI,QACEZ,gBAAgBY,UAAU,OAAOZ,gBAAgBY,WAAW,aACxDZ,eAAeY,MAAM,CAAC;YAAEC,eAAeX;QAAW,KAClDA;IACR;IAEA,OAAO;QACLC,MAAM;QACNR,cAAcA,aAAa,CAAC;QAC5BmB,WAAW;YAAClB,iBAAiB,CAAC;SAAG;QACjCmB,OAAOR;QACPV,iBAAiBA,gBAAgB,CAAC;QAClCI;IACF;AACF,EAAC;AAID,OAAO,MAAMe,mBAA0E,CACrFjB;IAEA,OAAO;QACLI,MAAM;QACNR,cAAc;QACdE,iBAAiB;QACjBI,OAAO;IACT;AACF,EAAC"}
@@ -0,0 +1,5 @@
1
+ import type { PaymentAdapter } from '../../../types/index.js';
2
+ type Props = {};
3
+ export declare const initiatePayment: (props: Props) => NonNullable<PaymentAdapter>['initiatePayment'];
4
+ export {};
5
+ //# sourceMappingURL=initiatePayment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initiatePayment.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/cod/initiatePayment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAG7D,KAAK,KAAK,GAAG,EAAE,CAAA;AAEf,eAAO,MAAM,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WAAW,CAAC,cAAc,CAAC,CAAC,iBAAiB,CAsGxF,CAAA"}
@@ -0,0 +1,91 @@
1
+ export const initiatePayment = (props)=>async ({ data, req, transactionsSlug })=>{
2
+ const payload = req.payload;
3
+ const {} = props || {};
4
+ const customerEmail = data.customerEmail;
5
+ const currency = data.currency;
6
+ const cart = data.cart;
7
+ const amount = cart.subtotal;
8
+ const billingAddressFromData = data.billingAddress;
9
+ const shippingAddressFromData = data.shippingAddress;
10
+ if (!currency) {
11
+ throw new Error('Currency is required.');
12
+ }
13
+ if (!cart || !cart.items || cart.items.length === 0) {
14
+ throw new Error('Cart is empty or not provided.');
15
+ }
16
+ if (!customerEmail || typeof customerEmail !== 'string') {
17
+ throw new Error('A valid customer email is required to make a purchase.');
18
+ }
19
+ if (!amount || typeof amount !== 'number' || amount <= 0) {
20
+ throw new Error('A valid amount is required to initiate a payment.');
21
+ }
22
+ try {
23
+ const flattenedCart = cart.items.map((item)=>{
24
+ const productID = typeof item.product === 'object' ? item.product.id : item.product;
25
+ const variantID = item.variant ? typeof item.variant === 'object' ? item.variant.id : item.variant : undefined;
26
+ // Preserve any additional custom properties (e.g., deliveryOption, customizations)
27
+ // that may have been added via cartItemMatcher
28
+ const { product: _product, variant: _variant, ...customProperties } = item;
29
+ return {
30
+ ...customProperties,
31
+ product: productID,
32
+ quantity: item.quantity,
33
+ ...variantID ? {
34
+ variant: variantID
35
+ } : {}
36
+ };
37
+ });
38
+ const shippingAddressAsString = JSON.stringify(shippingAddressFromData);
39
+ //NOTE: Dummy customer
40
+ const customer = {
41
+ id: "1"
42
+ };
43
+ //NOTE: Dummy payment intent
44
+ const paymentIntent = {
45
+ id: "19",
46
+ status: 'succeeded',
47
+ amount,
48
+ currency: "USD",
49
+ client_secret: "secret",
50
+ metadata: {
51
+ cartID: "10",
52
+ cartItemsSnapshot: JSON.stringify(flattenedCart),
53
+ shippingAddress: ""
54
+ }
55
+ };
56
+ // Create a transaction for the payment intent in the database
57
+ const transaction = await payload.create({
58
+ collection: transactionsSlug,
59
+ data: {
60
+ ...req.user ? {
61
+ customer: req.user.id
62
+ } : {
63
+ customerEmail
64
+ },
65
+ amount: paymentIntent.amount,
66
+ billingAddress: billingAddressFromData,
67
+ cart: cart.id,
68
+ currency: paymentIntent.currency.toUpperCase(),
69
+ items: flattenedCart,
70
+ paymentMethod: 'cod',
71
+ status: 'pending'
72
+ },
73
+ req
74
+ });
75
+ const returnData = {
76
+ clientSecret: paymentIntent.client_secret || '',
77
+ message: 'Payment initiated successfully',
78
+ paymentIntentID: String(transaction.id),
79
+ method: 'cod'
80
+ };
81
+ return returnData;
82
+ } catch (error) {
83
+ payload.logger.error({
84
+ err: error,
85
+ msg: 'Error initiating payment with Cod'
86
+ });
87
+ throw new Error(error instanceof Error ? error.message : 'Unknown error initiating payment');
88
+ }
89
+ };
90
+
91
+ //# sourceMappingURL=initiatePayment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/payments/adapters/cod/initiatePayment.ts"],"sourcesContent":["import type { PaymentAdapter } from '../../../types/index.js'\nimport type { InitiatePaymentReturnType, CodAdapterArgs } from './index.js'\n\ntype Props = {}\n\nexport const initiatePayment: (props: Props) => NonNullable<PaymentAdapter>['initiatePayment'] =\n (props) =>\n async ({ data, req, transactionsSlug }) => {\n const payload = req.payload\n const { } = props || {}\n\n const customerEmail = data.customerEmail\n const currency = data.currency\n const cart = data.cart\n const amount = cart.subtotal\n const billingAddressFromData = data.billingAddress\n const shippingAddressFromData = data.shippingAddress\n\n if (!currency) {\n throw new Error('Currency is required.')\n }\n\n if (!cart || !cart.items || cart.items.length === 0) {\n throw new Error('Cart is empty or not provided.')\n }\n\n if (!customerEmail || typeof customerEmail !== 'string') {\n throw new Error('A valid customer email is required to make a purchase.')\n }\n\n if (!amount || typeof amount !== 'number' || amount <= 0) {\n throw new Error('A valid amount is required to initiate a payment.')\n }\n\n\n try {\n\n const flattenedCart = cart.items.map((item) => {\n const productID = typeof item.product === 'object' ? item.product.id : item.product\n const variantID = item.variant\n ? typeof item.variant === 'object'\n ? item.variant.id\n : item.variant\n : undefined\n\n // Preserve any additional custom properties (e.g., deliveryOption, customizations)\n // that may have been added via cartItemMatcher\n const { product: _product, variant: _variant, ...customProperties } = item\n\n return {\n ...customProperties,\n product: productID,\n quantity: item.quantity,\n ...(variantID ? { variant: variantID } : {}),\n }\n })\n\n const shippingAddressAsString = JSON.stringify(shippingAddressFromData)\n\n //NOTE: Dummy customer\n const customer = {\n id: \"1\",\n\n }\n\n //NOTE: Dummy payment intent\n const paymentIntent = {\n id: \"19\",\n status: 'succeeded',\n amount,\n currency: \"USD\",\n client_secret: \"secret\",\n metadata: {\n cartID: \"10\",\n cartItemsSnapshot: JSON.stringify(flattenedCart),\n shippingAddress: \"\"\n }\n }\n\n // Create a transaction for the payment intent in the database\n const transaction = await payload.create({\n collection: transactionsSlug,\n data: {\n ...(req.user ? { customer: req.user.id } : { customerEmail }),\n amount: paymentIntent.amount,\n billingAddress: billingAddressFromData,\n cart: cart.id,\n currency: paymentIntent.currency.toUpperCase(),\n items: flattenedCart,\n paymentMethod: 'cod',\n status: 'pending',\n },\n req,\n })\n\n const returnData: InitiatePaymentReturnType = {\n clientSecret: paymentIntent.client_secret || '',\n message: 'Payment initiated successfully',\n paymentIntentID: String(transaction.id),\n method: 'cod'\n }\n return returnData\n } catch (error) {\n payload.logger.error({ err: error, msg: 'Error initiating payment with Cod' })\n\n throw new Error(error instanceof Error ? error.message : 'Unknown error initiating payment')\n }\n }\n"],"names":["initiatePayment","props","data","req","transactionsSlug","payload","customerEmail","currency","cart","amount","subtotal","billingAddressFromData","billingAddress","shippingAddressFromData","shippingAddress","Error","items","length","flattenedCart","map","item","productID","product","id","variantID","variant","undefined","_product","_variant","customProperties","quantity","shippingAddressAsString","JSON","stringify","customer","paymentIntent","status","client_secret","metadata","cartID","cartItemsSnapshot","transaction","create","collection","user","toUpperCase","paymentMethod","returnData","clientSecret","message","paymentIntentID","String","method","error","logger","err","msg"],"mappings":"AAKA,OAAO,MAAMA,kBACX,CAACC,QACC,OAAO,EAAEC,IAAI,EAAEC,GAAG,EAAEC,gBAAgB,EAAE;QACpC,MAAMC,UAAUF,IAAIE,OAAO;QAC3B,MAAM,EAAG,GAAGJ,SAAS,CAAC;QAEtB,MAAMK,gBAAgBJ,KAAKI,aAAa;QACxC,MAAMC,WAAWL,KAAKK,QAAQ;QAC9B,MAAMC,OAAON,KAAKM,IAAI;QACtB,MAAMC,SAASD,KAAKE,QAAQ;QAC5B,MAAMC,yBAAyBT,KAAKU,cAAc;QAClD,MAAMC,0BAA0BX,KAAKY,eAAe;QAEpD,IAAI,CAACP,UAAU;YACb,MAAM,IAAIQ,MAAM;QAClB;QAEA,IAAI,CAACP,QAAQ,CAACA,KAAKQ,KAAK,IAAIR,KAAKQ,KAAK,CAACC,MAAM,KAAK,GAAG;YACnD,MAAM,IAAIF,MAAM;QAClB;QAEA,IAAI,CAACT,iBAAiB,OAAOA,kBAAkB,UAAU;YACvD,MAAM,IAAIS,MAAM;QAClB;QAEA,IAAI,CAACN,UAAU,OAAOA,WAAW,YAAYA,UAAU,GAAG;YACxD,MAAM,IAAIM,MAAM;QAClB;QAGA,IAAI;YAEF,MAAMG,gBAAgBV,KAAKQ,KAAK,CAACG,GAAG,CAAC,CAACC;gBACpC,MAAMC,YAAY,OAAOD,KAAKE,OAAO,KAAK,WAAWF,KAAKE,OAAO,CAACC,EAAE,GAAGH,KAAKE,OAAO;gBACnF,MAAME,YAAYJ,KAAKK,OAAO,GAC1B,OAAOL,KAAKK,OAAO,KAAK,WACtBL,KAAKK,OAAO,CAACF,EAAE,GACfH,KAAKK,OAAO,GACdC;gBAEJ,mFAAmF;gBACnF,+CAA+C;gBAC/C,MAAM,EAAEJ,SAASK,QAAQ,EAAEF,SAASG,QAAQ,EAAE,GAAGC,kBAAkB,GAAGT;gBAEtE,OAAO;oBACL,GAAGS,gBAAgB;oBACnBP,SAASD;oBACTS,UAAUV,KAAKU,QAAQ;oBACvB,GAAIN,YAAY;wBAAEC,SAASD;oBAAU,IAAI,CAAC,CAAC;gBAC7C;YACF;YAEA,MAAMO,0BAA0BC,KAAKC,SAAS,CAACpB;YAE/C,sBAAsB;YACtB,MAAMqB,WAAW;gBACfX,IAAI;YAEN;YAEA,4BAA4B;YAC5B,MAAMY,gBAAgB;gBACpBZ,IAAI;gBACJa,QAAQ;gBACR3B;gBACAF,UAAU;gBACV8B,eAAe;gBACfC,UAAU;oBACRC,QAAQ;oBACRC,mBAAmBR,KAAKC,SAAS,CAACf;oBAClCJ,iBAAiB;gBACnB;YACF;YAEA,8DAA8D;YAC9D,MAAM2B,cAAc,MAAMpC,QAAQqC,MAAM,CAAC;gBACvCC,YAAYvC;gBACZF,MAAM;oBACJ,GAAIC,IAAIyC,IAAI,GAAG;wBAAEV,UAAU/B,IAAIyC,IAAI,CAACrB,EAAE;oBAAC,IAAI;wBAAEjB;oBAAc,CAAC;oBAC5DG,QAAQ0B,cAAc1B,MAAM;oBAC5BG,gBAAgBD;oBAChBH,MAAMA,KAAKe,EAAE;oBACbhB,UAAU4B,cAAc5B,QAAQ,CAACsC,WAAW;oBAC5C7B,OAAOE;oBACP4B,eAAe;oBACfV,QAAQ;gBACV;gBACAjC;YACF;YAEA,MAAM4C,aAAwC;gBAC5CC,cAAcb,cAAcE,aAAa,IAAI;gBAC7CY,SAAS;gBACTC,iBAAiBC,OAAOV,YAAYlB,EAAE;gBACtC6B,QAAQ;YACV;YACA,OAAOL;QACT,EAAE,OAAOM,OAAO;YACdhD,QAAQiD,MAAM,CAACD,KAAK,CAAC;gBAAEE,KAAKF;gBAAOG,KAAK;YAAoC;YAE5E,MAAM,IAAIzC,MAAMsC,iBAAiBtC,QAAQsC,MAAMJ,OAAO,GAAG;QAC3D;IACF,EAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmOrder.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/stripe/confirmOrder.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,KAAK,KAAK,GAAG;IACX,UAAU,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;IACxC,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;CAC1C,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WAAW,CAAC,cAAc,CAAC,CAAC,cAAc,CAsIlF,CAAA"}