@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.
- package/LICENSE.md +22 -0
- package/README.md +3 -0
- package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -0
- package/dist/collections/addresses/createAddressesCollection.js +73 -0
- package/dist/collections/addresses/createAddressesCollection.js.map +1 -0
- package/dist/collections/addresses/defaultAddressFields.d.ts.map +1 -0
- package/dist/collections/addresses/defaultAddressFields.js +72 -0
- package/dist/collections/addresses/defaultAddressFields.js.map +1 -0
- package/dist/collections/addresses/defaultCountries.d.ts.map +1 -0
- package/dist/collections/addresses/defaultCountries.js +169 -0
- package/dist/collections/addresses/defaultCountries.js.map +1 -0
- package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -0
- package/dist/collections/addresses/hooks/beforeChange.js +16 -0
- package/dist/collections/addresses/hooks/beforeChange.js.map +1 -0
- package/dist/collections/carts/beforeChange.d.ts.map +1 -0
- package/dist/collections/carts/beforeChange.js +49 -0
- package/dist/collections/carts/beforeChange.js.map +1 -0
- package/dist/collections/carts/createCartsCollection.d.ts.map +1 -0
- package/dist/collections/carts/createCartsCollection.js +194 -0
- package/dist/collections/carts/createCartsCollection.js.map +1 -0
- package/dist/collections/carts/endpoints/addItem.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/addItem.js +54 -0
- package/dist/collections/carts/endpoints/addItem.js.map +1 -0
- package/dist/collections/carts/endpoints/clearCart.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/clearCart.js +41 -0
- package/dist/collections/carts/endpoints/clearCart.js.map +1 -0
- package/dist/collections/carts/endpoints/mergeCart.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/mergeCart.js +72 -0
- package/dist/collections/carts/endpoints/mergeCart.js.map +1 -0
- package/dist/collections/carts/endpoints/removeItem.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/removeItem.js +51 -0
- package/dist/collections/carts/endpoints/removeItem.js.map +1 -0
- package/dist/collections/carts/endpoints/updateItem.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/updateItem.js +95 -0
- package/dist/collections/carts/endpoints/updateItem.js.map +1 -0
- package/dist/collections/carts/hasCartSecretAccess.d.ts.map +1 -0
- package/dist/collections/carts/hasCartSecretAccess.js +24 -0
- package/dist/collections/carts/hasCartSecretAccess.js.map +1 -0
- package/dist/collections/carts/operations/addItem.d.ts.map +1 -0
- package/dist/collections/carts/operations/addItem.js +95 -0
- package/dist/collections/carts/operations/addItem.js.map +1 -0
- package/dist/collections/carts/operations/clearCart.d.ts.map +1 -0
- package/dist/collections/carts/operations/clearCart.js +53 -0
- package/dist/collections/carts/operations/clearCart.js.map +1 -0
- package/dist/collections/carts/operations/createRequestWithSecret.d.ts.map +1 -0
- package/dist/collections/carts/operations/createRequestWithSecret.js +21 -0
- package/dist/collections/carts/operations/createRequestWithSecret.js.map +1 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.d.ts.map +1 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.js +25 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.js.map +1 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js +358 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js.map +1 -0
- package/dist/collections/carts/operations/mergeCart.d.ts.map +1 -0
- package/dist/collections/carts/operations/mergeCart.js +144 -0
- package/dist/collections/carts/operations/mergeCart.js.map +1 -0
- package/dist/collections/carts/operations/removeItem.d.ts.map +1 -0
- package/dist/collections/carts/operations/removeItem.js +69 -0
- package/dist/collections/carts/operations/removeItem.js.map +1 -0
- package/dist/collections/carts/operations/types.d.ts.map +1 -0
- package/dist/collections/carts/operations/types.js +7 -0
- package/dist/collections/carts/operations/types.js.map +1 -0
- package/dist/collections/carts/operations/updateItem.d.ts.map +1 -0
- package/dist/collections/carts/operations/updateItem.js +110 -0
- package/dist/collections/carts/operations/updateItem.js.map +1 -0
- package/dist/collections/carts/statusBeforeRead.d.ts.map +1 -0
- package/dist/collections/carts/statusBeforeRead.js +18 -0
- package/dist/collections/carts/statusBeforeRead.js.map +1 -0
- package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -0
- package/dist/collections/orders/createOrdersCollection.js +163 -0
- package/dist/collections/orders/createOrdersCollection.js.map +1 -0
- package/dist/collections/products/createProductsCollection.d.ts.map +1 -0
- package/dist/collections/products/createProductsCollection.js +62 -0
- package/dist/collections/products/createProductsCollection.js.map +1 -0
- package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -0
- package/dist/collections/transactions/createTransactionsCollection.js +157 -0
- package/dist/collections/transactions/createTransactionsCollection.js.map +1 -0
- package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -0
- package/dist/collections/variants/createVariantOptionsCollection.js +53 -0
- package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -0
- package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -0
- package/dist/collections/variants/createVariantTypesCollection.js +49 -0
- package/dist/collections/variants/createVariantTypesCollection.js.map +1 -0
- package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.d.ts.map +1 -0
- package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js +38 -0
- package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js.map +1 -0
- package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.d.ts.map +1 -0
- package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js +58 -0
- package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js.map +1 -0
- package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -0
- package/dist/collections/variants/createVariantsCollection/index.js +107 -0
- package/dist/collections/variants/createVariantsCollection/index.js.map +1 -0
- package/dist/currencies/index.d.ts.map +1 -0
- package/dist/currencies/index.js +20 -0
- package/dist/currencies/index.js.map +1 -0
- package/dist/endpoints/confirmOrder.d.ts.map +1 -0
- package/dist/endpoints/confirmOrder.js +150 -0
- package/dist/endpoints/confirmOrder.js.map +1 -0
- package/dist/endpoints/initiatePayment.d.ts.map +1 -0
- package/dist/endpoints/initiatePayment.js +226 -0
- package/dist/endpoints/initiatePayment.js.map +1 -0
- package/dist/exports/client/index.d.ts.map +1 -0
- package/dist/exports/client/index.js +4 -0
- package/dist/exports/client/index.js.map +1 -0
- package/dist/exports/client/react.d.ts.map +1 -0
- package/dist/exports/client/react.js +5 -0
- package/dist/exports/client/react.js.map +1 -0
- package/dist/exports/payments/cod.d.ts +2 -0
- package/dist/exports/payments/cod.d.ts.map +1 -0
- package/dist/exports/payments/cod.js +3 -0
- package/dist/exports/payments/cod.js.map +1 -0
- package/dist/exports/payments/stripe.d.ts.map +1 -0
- package/dist/exports/payments/stripe.js +3 -0
- package/dist/exports/payments/stripe.js.map +1 -0
- package/dist/exports/rsc.d.ts.map +1 -0
- package/dist/exports/rsc.js +4 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/exports/types.d.ts.map +1 -0
- package/dist/exports/types.js +3 -0
- package/dist/exports/types.js.map +1 -0
- package/dist/fields/amountField.d.ts.map +1 -0
- package/dist/fields/amountField.js +33 -0
- package/dist/fields/amountField.js.map +1 -0
- package/dist/fields/cartItemsField.d.ts.map +1 -0
- package/dist/fields/cartItemsField.js +55 -0
- package/dist/fields/cartItemsField.js.map +1 -0
- package/dist/fields/currencyField.d.ts.map +1 -0
- package/dist/fields/currencyField.js +29 -0
- package/dist/fields/currencyField.js.map +1 -0
- package/dist/fields/inventoryField.d.ts.map +1 -0
- package/dist/fields/inventoryField.js +16 -0
- package/dist/fields/inventoryField.js.map +1 -0
- package/dist/fields/pricesField.d.ts.map +1 -0
- package/dist/fields/pricesField.js +54 -0
- package/dist/fields/pricesField.js.map +1 -0
- package/dist/fields/statusField.d.ts.map +1 -0
- package/dist/fields/statusField.js +49 -0
- package/dist/fields/statusField.js.map +1 -0
- package/dist/fields/variantsFields.d.ts.map +1 -0
- package/dist/fields/variantsFields.js +48 -0
- package/dist/fields/variantsFields.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +258 -0
- package/dist/index.js.map +1 -0
- package/dist/payments/adapters/cod/confirmOrder.d.ts +5 -0
- package/dist/payments/adapters/cod/confirmOrder.d.ts.map +1 -0
- package/dist/payments/adapters/cod/confirmOrder.js +83 -0
- package/dist/payments/adapters/cod/confirmOrder.js.map +1 -0
- package/dist/payments/adapters/cod/confirmOrder.spec.js +166 -0
- package/dist/payments/adapters/cod/confirmOrder.spec.js.map +1 -0
- package/dist/payments/adapters/cod/endpoints/webhooks.d.ts +5 -0
- package/dist/payments/adapters/cod/endpoints/webhooks.d.ts.map +1 -0
- package/dist/payments/adapters/cod/endpoints/webhooks.js +18 -0
- package/dist/payments/adapters/cod/endpoints/webhooks.js.map +1 -0
- package/dist/payments/adapters/cod/index.d.ts +12 -0
- package/dist/payments/adapters/cod/index.d.ts.map +1 -0
- package/dist/payments/adapters/cod/index.js +64 -0
- package/dist/payments/adapters/cod/index.js.map +1 -0
- package/dist/payments/adapters/cod/initiatePayment.d.ts +5 -0
- package/dist/payments/adapters/cod/initiatePayment.d.ts.map +1 -0
- package/dist/payments/adapters/cod/initiatePayment.js +91 -0
- package/dist/payments/adapters/cod/initiatePayment.js.map +1 -0
- package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -0
- package/dist/payments/adapters/stripe/confirmOrder.js +113 -0
- package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -0
- package/dist/payments/adapters/stripe/confirmOrder.spec.js +166 -0
- package/dist/payments/adapters/stripe/confirmOrder.spec.js.map +1 -0
- package/dist/payments/adapters/stripe/endpoints/webhooks.d.ts.map +1 -0
- package/dist/payments/adapters/stripe/endpoints/webhooks.js +53 -0
- package/dist/payments/adapters/stripe/endpoints/webhooks.js.map +1 -0
- package/dist/payments/adapters/stripe/index.d.ts +61 -0
- package/dist/payments/adapters/stripe/index.d.ts.map +1 -0
- package/dist/payments/adapters/stripe/index.js +68 -0
- package/dist/payments/adapters/stripe/index.js.map +1 -0
- package/dist/payments/adapters/stripe/initiatePayment.d.ts.map +1 -0
- package/dist/payments/adapters/stripe/initiatePayment.js +113 -0
- package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -0
- package/dist/react/provider/index.d.ts.map +1 -0
- package/dist/react/provider/index.js +1094 -0
- package/dist/react/provider/index.js.map +1 -0
- package/dist/react/provider/utilities.d.ts.map +1 -0
- package/dist/react/provider/utilities.js +13 -0
- package/dist/react/provider/utilities.js.map +1 -0
- package/dist/translations/index.d.ts.map +1 -0
- package/dist/translations/index.js +84 -0
- package/dist/translations/index.js.map +1 -0
- package/dist/translations/languages/ar.d.ts.map +1 -0
- package/dist/translations/languages/ar.js +92 -0
- package/dist/translations/languages/ar.js.map +1 -0
- package/dist/translations/languages/az.d.ts.map +1 -0
- package/dist/translations/languages/az.js +92 -0
- package/dist/translations/languages/az.js.map +1 -0
- package/dist/translations/languages/bg.d.ts.map +1 -0
- package/dist/translations/languages/bg.js +92 -0
- package/dist/translations/languages/bg.js.map +1 -0
- package/dist/translations/languages/ca.d.ts.map +1 -0
- package/dist/translations/languages/ca.js +92 -0
- package/dist/translations/languages/ca.js.map +1 -0
- package/dist/translations/languages/cs.d.ts.map +1 -0
- package/dist/translations/languages/cs.js +92 -0
- package/dist/translations/languages/cs.js.map +1 -0
- package/dist/translations/languages/da.d.ts.map +1 -0
- package/dist/translations/languages/da.js +92 -0
- package/dist/translations/languages/da.js.map +1 -0
- package/dist/translations/languages/de.d.ts.map +1 -0
- package/dist/translations/languages/de.js +92 -0
- package/dist/translations/languages/de.js.map +1 -0
- package/dist/translations/languages/en.d.ts.map +1 -0
- package/dist/translations/languages/en.js +92 -0
- package/dist/translations/languages/en.js.map +1 -0
- package/dist/translations/languages/es.d.ts.map +1 -0
- package/dist/translations/languages/es.js +92 -0
- package/dist/translations/languages/es.js.map +1 -0
- package/dist/translations/languages/et.d.ts.map +1 -0
- package/dist/translations/languages/et.js +92 -0
- package/dist/translations/languages/et.js.map +1 -0
- package/dist/translations/languages/fa.d.ts.map +1 -0
- package/dist/translations/languages/fa.js +92 -0
- package/dist/translations/languages/fa.js.map +1 -0
- package/dist/translations/languages/fr.d.ts.map +1 -0
- package/dist/translations/languages/fr.js +92 -0
- package/dist/translations/languages/fr.js.map +1 -0
- package/dist/translations/languages/he.d.ts.map +1 -0
- package/dist/translations/languages/he.js +92 -0
- package/dist/translations/languages/he.js.map +1 -0
- package/dist/translations/languages/hr.d.ts.map +1 -0
- package/dist/translations/languages/hr.js +92 -0
- package/dist/translations/languages/hr.js.map +1 -0
- package/dist/translations/languages/hu.d.ts.map +1 -0
- package/dist/translations/languages/hu.js +92 -0
- package/dist/translations/languages/hu.js.map +1 -0
- package/dist/translations/languages/hy.d.ts.map +1 -0
- package/dist/translations/languages/hy.js +92 -0
- package/dist/translations/languages/hy.js.map +1 -0
- package/dist/translations/languages/is.d.ts.map +1 -0
- package/dist/translations/languages/is.js +92 -0
- package/dist/translations/languages/is.js.map +1 -0
- package/dist/translations/languages/it.d.ts.map +1 -0
- package/dist/translations/languages/it.js +92 -0
- package/dist/translations/languages/it.js.map +1 -0
- package/dist/translations/languages/ja.d.ts.map +1 -0
- package/dist/translations/languages/ja.js +92 -0
- package/dist/translations/languages/ja.js.map +1 -0
- package/dist/translations/languages/ko.d.ts.map +1 -0
- package/dist/translations/languages/ko.js +92 -0
- package/dist/translations/languages/ko.js.map +1 -0
- package/dist/translations/languages/lt.d.ts.map +1 -0
- package/dist/translations/languages/lt.js +92 -0
- package/dist/translations/languages/lt.js.map +1 -0
- package/dist/translations/languages/my.d.ts.map +1 -0
- package/dist/translations/languages/my.js +92 -0
- package/dist/translations/languages/my.js.map +1 -0
- package/dist/translations/languages/nb.d.ts.map +1 -0
- package/dist/translations/languages/nb.js +92 -0
- package/dist/translations/languages/nb.js.map +1 -0
- package/dist/translations/languages/nl.d.ts.map +1 -0
- package/dist/translations/languages/nl.js +92 -0
- package/dist/translations/languages/nl.js.map +1 -0
- package/dist/translations/languages/pl.d.ts.map +1 -0
- package/dist/translations/languages/pl.js +92 -0
- package/dist/translations/languages/pl.js.map +1 -0
- package/dist/translations/languages/pt.d.ts.map +1 -0
- package/dist/translations/languages/pt.js +92 -0
- package/dist/translations/languages/pt.js.map +1 -0
- package/dist/translations/languages/ro.d.ts.map +1 -0
- package/dist/translations/languages/ro.js +92 -0
- package/dist/translations/languages/ro.js.map +1 -0
- package/dist/translations/languages/rs.d.ts.map +1 -0
- package/dist/translations/languages/rs.js +92 -0
- package/dist/translations/languages/rs.js.map +1 -0
- package/dist/translations/languages/rsLatin.d.ts.map +1 -0
- package/dist/translations/languages/rsLatin.js +92 -0
- package/dist/translations/languages/rsLatin.js.map +1 -0
- package/dist/translations/languages/ru.d.ts.map +1 -0
- package/dist/translations/languages/ru.js +92 -0
- package/dist/translations/languages/ru.js.map +1 -0
- package/dist/translations/languages/sk.d.ts.map +1 -0
- package/dist/translations/languages/sk.js +92 -0
- package/dist/translations/languages/sk.js.map +1 -0
- package/dist/translations/languages/sl.d.ts.map +1 -0
- package/dist/translations/languages/sl.js +92 -0
- package/dist/translations/languages/sl.js.map +1 -0
- package/dist/translations/languages/sv.d.ts.map +1 -0
- package/dist/translations/languages/sv.js +92 -0
- package/dist/translations/languages/sv.js.map +1 -0
- package/dist/translations/languages/ta.d.ts.map +1 -0
- package/dist/translations/languages/ta.js +92 -0
- package/dist/translations/languages/ta.js.map +1 -0
- package/dist/translations/languages/th.d.ts.map +1 -0
- package/dist/translations/languages/th.js +92 -0
- package/dist/translations/languages/th.js.map +1 -0
- package/dist/translations/languages/tr.d.ts.map +1 -0
- package/dist/translations/languages/tr.js +92 -0
- package/dist/translations/languages/tr.js.map +1 -0
- package/dist/translations/languages/uk.d.ts.map +1 -0
- package/dist/translations/languages/uk.js +92 -0
- package/dist/translations/languages/uk.js.map +1 -0
- package/dist/translations/languages/vi.d.ts.map +1 -0
- package/dist/translations/languages/vi.js +92 -0
- package/dist/translations/languages/vi.js.map +1 -0
- package/dist/translations/languages/zh.d.ts.map +1 -0
- package/dist/translations/languages/zh.js +92 -0
- package/dist/translations/languages/zh.js.map +1 -0
- package/dist/translations/languages/zhTw.d.ts.map +1 -0
- package/dist/translations/languages/zhTw.js +92 -0
- package/dist/translations/languages/zhTw.js.map +1 -0
- package/dist/translations/translation-schema.json +343 -0
- package/dist/translations/types.d.ts.map +1 -0
- package/dist/translations/types.js +3 -0
- package/dist/translations/types.js.map +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utilities.d.ts.map +1 -0
- package/dist/types/utilities.js +3 -0
- package/dist/types/utilities.js.map +1 -0
- package/dist/ui/PriceCell/index.d.ts.map +1 -0
- package/dist/ui/PriceCell/index.js +36 -0
- package/dist/ui/PriceCell/index.js.map +1 -0
- package/dist/ui/PriceInput/FormattedInput.d.ts.map +1 -0
- package/dist/ui/PriceInput/FormattedInput.js +147 -0
- package/dist/ui/PriceInput/FormattedInput.js.map +1 -0
- package/dist/ui/PriceInput/index.css +35 -0
- package/dist/ui/PriceInput/index.d.ts.map +1 -0
- package/dist/ui/PriceInput/index.js +21 -0
- package/dist/ui/PriceInput/index.js.map +1 -0
- package/dist/ui/PriceRowLabel/index.css +13 -0
- package/dist/ui/PriceRowLabel/index.d.ts.map +1 -0
- package/dist/ui/PriceRowLabel/index.js +66 -0
- package/dist/ui/PriceRowLabel/index.js.map +1 -0
- package/dist/ui/VariantOptionsSelector/ErrorBox.d.ts.map +1 -0
- package/dist/ui/VariantOptionsSelector/ErrorBox.js +28 -0
- package/dist/ui/VariantOptionsSelector/ErrorBox.js.map +1 -0
- package/dist/ui/VariantOptionsSelector/OptionsSelect.d.ts.map +1 -0
- package/dist/ui/VariantOptionsSelector/OptionsSelect.js +71 -0
- package/dist/ui/VariantOptionsSelector/OptionsSelect.js.map +1 -0
- package/dist/ui/VariantOptionsSelector/index.css +37 -0
- package/dist/ui/VariantOptionsSelector/index.d.ts.map +1 -0
- package/dist/ui/VariantOptionsSelector/index.js +81 -0
- package/dist/ui/VariantOptionsSelector/index.js.map +1 -0
- package/dist/ui/utilities.d.ts.map +1 -0
- package/dist/ui/utilities.js +40 -0
- package/dist/ui/utilities.js.map +1 -0
- package/dist/utilities/accessComposition.d.ts.map +1 -0
- package/dist/utilities/accessComposition.js +103 -0
- package/dist/utilities/accessComposition.js.map +1 -0
- package/dist/utilities/accessComposition.spec.js +765 -0
- package/dist/utilities/accessComposition.spec.js.map +1 -0
- package/dist/utilities/defaultProductsValidation.d.ts.map +1 -0
- package/dist/utilities/defaultProductsValidation.js +40 -0
- package/dist/utilities/defaultProductsValidation.js.map +1 -0
- package/dist/utilities/defaultProductsValidation.spec.js +384 -0
- package/dist/utilities/defaultProductsValidation.spec.js.map +1 -0
- package/dist/utilities/errorCodes.d.ts.map +1 -0
- package/dist/utilities/errorCodes.js +4 -0
- package/dist/utilities/errorCodes.js.map +1 -0
- package/dist/utilities/getCollectionSlugMap.d.ts.map +1 -0
- package/dist/utilities/getCollectionSlugMap.js +36 -0
- package/dist/utilities/getCollectionSlugMap.js.map +1 -0
- package/dist/utilities/getCollectionSlugMap.spec.js +254 -0
- package/dist/utilities/getCollectionSlugMap.spec.js.map +1 -0
- package/dist/utilities/pushTypeScriptProperties.d.ts.map +1 -0
- package/dist/utilities/pushTypeScriptProperties.js +37 -0
- package/dist/utilities/pushTypeScriptProperties.js.map +1 -0
- package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -0
- package/dist/utilities/sanitizePluginConfig.js +75 -0
- package/dist/utilities/sanitizePluginConfig.js.map +1 -0
- package/dist/utilities/sanitizePluginConfig.spec.js +516 -0
- package/dist/utilities/sanitizePluginConfig.spec.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|