@payloadcms/plugin-ecommerce 3.57.0-internal.d758c66 → 3.57.0-internal.f26caed
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/dist/collections/addresses/createAddressesCollection.d.ts +1 -1
- package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -1
- package/dist/collections/addresses/createAddressesCollection.js.map +1 -1
- package/dist/collections/addresses/defaultCountries.d.ts +1 -1
- package/dist/collections/addresses/defaultCountries.d.ts.map +1 -1
- package/dist/collections/addresses/defaultCountries.js.map +1 -1
- package/dist/collections/addresses/hooks/beforeChange.d.ts +1 -1
- package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -1
- package/dist/collections/addresses/hooks/beforeChange.js.map +1 -1
- package/dist/collections/carts/createCartsCollection.d.ts +1 -1
- package/dist/collections/carts/createCartsCollection.d.ts.map +1 -1
- package/dist/collections/carts/createCartsCollection.js.map +1 -1
- package/dist/collections/orders/createOrdersCollection.d.ts +1 -1
- package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -1
- package/dist/collections/orders/createOrdersCollection.js.map +1 -1
- package/dist/collections/products/createProductsCollection.d.ts +1 -1
- package/dist/collections/products/createProductsCollection.d.ts.map +1 -1
- package/dist/collections/products/createProductsCollection.js.map +1 -1
- package/dist/collections/transactions/createTransactionsCollection.d.ts +1 -1
- package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -1
- package/dist/collections/transactions/createTransactionsCollection.js.map +1 -1
- package/dist/collections/variants/createVariantOptionsCollection.d.ts +1 -1
- package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -1
- package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -1
- package/dist/collections/variants/createVariantTypesCollection.d.ts +1 -1
- package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -1
- package/dist/collections/variants/createVariantTypesCollection.js.map +1 -1
- package/dist/collections/variants/createVariantsCollection/index.d.ts +1 -1
- package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -1
- package/dist/collections/variants/createVariantsCollection/index.js.map +1 -1
- package/dist/currencies/index.d.ts +1 -1
- package/dist/currencies/index.d.ts.map +1 -1
- package/dist/currencies/index.js.map +1 -1
- package/dist/endpoints/confirmOrder.d.ts +1 -1
- package/dist/endpoints/confirmOrder.d.ts.map +1 -1
- package/dist/endpoints/confirmOrder.js.map +1 -1
- package/dist/endpoints/initiatePayment.d.ts +1 -1
- package/dist/endpoints/initiatePayment.d.ts.map +1 -1
- package/dist/endpoints/initiatePayment.js.map +1 -1
- package/dist/exports/types.d.ts +1 -1
- package/dist/exports/types.d.ts.map +1 -1
- package/dist/exports/types.js.map +1 -1
- package/dist/fields/amountField.d.ts +1 -1
- package/dist/fields/amountField.d.ts.map +1 -1
- package/dist/fields/amountField.js.map +1 -1
- package/dist/fields/cartItemsField.d.ts +1 -1
- package/dist/fields/cartItemsField.d.ts.map +1 -1
- package/dist/fields/cartItemsField.js.map +1 -1
- package/dist/fields/currencyField.d.ts +1 -1
- package/dist/fields/currencyField.d.ts.map +1 -1
- package/dist/fields/currencyField.js.map +1 -1
- package/dist/fields/pricesField.d.ts +1 -1
- package/dist/fields/pricesField.d.ts.map +1 -1
- package/dist/fields/pricesField.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -13
- package/dist/index.js.map +1 -1
- package/dist/payments/adapters/stripe/confirmOrder.d.ts +1 -1
- package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -1
- package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -1
- package/dist/payments/adapters/stripe/index.d.ts +1 -1
- package/dist/payments/adapters/stripe/index.d.ts.map +1 -1
- package/dist/payments/adapters/stripe/index.js.map +1 -1
- package/dist/payments/adapters/stripe/initiatePayment.d.ts +1 -1
- package/dist/payments/adapters/stripe/initiatePayment.d.ts.map +1 -1
- package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -1
- package/dist/react/provider/index.d.ts +10 -15
- package/dist/react/provider/index.d.ts.map +1 -1
- package/dist/react/provider/index.js +22 -21
- package/dist/react/provider/index.js.map +1 -1
- package/dist/react/provider/types.d.ts +172 -0
- package/dist/react/provider/types.d.ts.map +1 -0
- package/dist/react/provider/types.js +3 -0
- package/dist/react/provider/types.js.map +1 -0
- package/dist/react/provider/utilities.d.ts +1 -1
- package/dist/react/provider/utilities.d.ts.map +1 -1
- package/dist/react/provider/utilities.js.map +1 -1
- package/dist/{types/index.d.ts → types.d.ts} +2 -177
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/PriceCell/index.d.ts +1 -1
- package/dist/ui/PriceCell/index.d.ts.map +1 -1
- package/dist/ui/PriceCell/index.js.map +1 -1
- package/dist/ui/PriceInput/FormattedInput.d.ts +1 -1
- package/dist/ui/PriceInput/FormattedInput.d.ts.map +1 -1
- package/dist/ui/PriceInput/FormattedInput.js.map +1 -1
- package/dist/ui/PriceInput/index.d.ts +1 -1
- package/dist/ui/PriceInput/index.d.ts.map +1 -1
- package/dist/ui/PriceInput/index.js.map +1 -1
- package/dist/ui/PriceRowLabel/index.d.ts +1 -1
- package/dist/ui/PriceRowLabel/index.d.ts.map +1 -1
- package/dist/ui/PriceRowLabel/index.js.map +1 -1
- package/dist/ui/utilities.d.ts +1 -1
- package/dist/ui/utilities.d.ts.map +1 -1
- package/dist/ui/utilities.js.map +1 -1
- package/dist/utilities/defaultProductsValidation.d.ts +1 -1
- package/dist/utilities/defaultProductsValidation.d.ts.map +1 -1
- package/dist/utilities/defaultProductsValidation.js.map +1 -1
- package/dist/utilities/getCollectionSlugMap.d.ts +1 -1
- package/dist/utilities/getCollectionSlugMap.d.ts.map +1 -1
- package/dist/utilities/getCollectionSlugMap.js +4 -5
- package/dist/utilities/getCollectionSlugMap.js.map +1 -1
- package/dist/utilities/sanitizePluginConfig.d.ts +1 -1
- package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -1
- package/dist/utilities/sanitizePluginConfig.js.map +1 -1
- package/package.json +9 -10
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -3
- package/dist/types/index.js.map +0 -1
- package/dist/types/utilities.d.ts +0 -36
- package/dist/types/utilities.d.ts.map +0 -1
- package/dist/types/utilities.js +0 -3
- package/dist/types/utilities.js.map +0 -1
- package/dist/utilities/pushTypeScriptProperties.d.ts +0 -10
- package/dist/utilities/pushTypeScriptProperties.d.ts.map +0 -1
- package/dist/utilities/pushTypeScriptProperties.js +0 -40
- package/dist/utilities/pushTypeScriptProperties.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initiatePayment.d.ts","sourceRoot":"","sources":["../../src/endpoints/initiatePayment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE5F,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,8BAA8B,EAC/B,MAAM,
|
|
1
|
+
{"version":3,"file":"initiatePayment.d.ts","sourceRoot":"","sources":["../../src/endpoints/initiatePayment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE5F,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,8BAA8B,EAC/B,MAAM,aAAa,CAAA;AAIpB,KAAK,IAAI,GAAG;IACV;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,8BAA8B,CAAC,WAAW,CAAC,CAAA;IACvD,aAAa,EAAE,cAAc,CAAA;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,eA0RlC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/endpoints/initiatePayment.ts"],"sourcesContent":["import { addDataAndFileToRequest, type DefaultDocumentIDType, type Endpoint } from 'payload'\n\nimport type {\n CurrenciesConfig,\n PaymentAdapter,\n ProductsValidation,\n SanitizedEcommercePluginConfig,\n} from '../types/index.js'\n\nimport { defaultProductsValidation } from '../utilities/defaultProductsValidation.js'\n\ntype Args = {\n /**\n * The slug of the carts collection, defaults to 'carts'.\n */\n cartsSlug?: string\n currenciesConfig: CurrenciesConfig\n /**\n * The slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n /**\n * Track inventory stock for the products and variants.\n * Accepts an object to override the default field name.\n */\n inventory?: SanitizedEcommercePluginConfig['inventory']\n paymentMethod: PaymentAdapter\n /**\n * The slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Customise the validation used for checking products or variants before a transaction is created.\n */\n productsValidation?: ProductsValidation\n /**\n * The slug of the transactions collection, defaults to 'transactions'.\n */\n transactionsSlug?: string\n /**\n * The slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n}\n\ntype InitiatePayment = (args: Args) => Endpoint['handler']\n\n/**\n * Handles the endpoint for initiating payments. We will handle checking the amount and product and variant prices here before it is sent to the payment provider.\n * This is the first step in the payment process.\n */\nexport const initiatePaymentHandler: InitiatePayment =\n ({\n cartsSlug = 'carts',\n currenciesConfig,\n customersSlug = 'users',\n paymentMethod,\n productsSlug = 'products',\n productsValidation,\n transactionsSlug = 'transactions',\n variantsSlug = 'variants',\n }) =>\n async (req) => {\n await addDataAndFileToRequest(req)\n const data = req.data\n const payload = req.payload\n const user = req.user\n\n let currency: string = currenciesConfig.defaultCurrency\n let cartID: DefaultDocumentIDType = data?.cartID\n let cart = undefined\n const billingAddress = data?.billingAddress\n const shippingAddress = data?.shippingAddress\n\n let customerEmail: string = user?.email ?? ''\n\n if (user) {\n if (user.cart?.docs && Array.isArray(user.cart.docs) && user.cart.docs.length > 0) {\n if (!cartID && user.cart.docs[0]) {\n // Use the user's cart instead\n if (typeof user.cart.docs[0] === 'object') {\n cartID = user.cart.docs[0].id\n cart = user.cart.docs[0]\n } else {\n cartID = user.cart.docs[0]\n }\n }\n }\n } else {\n // Get the email from the data if user is not available\n if (data?.customerEmail && typeof data.customerEmail === 'string') {\n customerEmail = data.customerEmail\n } else {\n return Response.json(\n {\n message: 'A customer email is required to make a purchase.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (!cart) {\n if (cartID) {\n cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 2,\n overrideAccess: false,\n select: {\n id: true,\n currency: true,\n customerEmail: true,\n items: true,\n subtotal: true,\n },\n user,\n })\n\n if (!cart) {\n return Response.json(\n {\n message: `Cart with ID ${cartID} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n } else {\n return Response.json(\n {\n message: 'Cart ID is required.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (cart.currency && typeof cart.currency === 'string') {\n currency = cart.currency\n }\n\n // Ensure the currency is provided or inferred in some way\n if (!currency) {\n return Response.json(\n {\n message: 'Currency is required.',\n },\n {\n status: 400,\n },\n )\n }\n\n // Ensure the selected currency is supported\n if (\n !currenciesConfig.supportedCurrencies.find(\n (c) => c.code.toLocaleLowerCase() === currency.toLocaleLowerCase(),\n )\n ) {\n return Response.json(\n {\n message: `Currency ${currency} is not supported.`,\n },\n {\n status: 400,\n },\n )\n }\n\n // Verify the cart is available and items are present in an array\n if (!cart || !cart.items || !Array.isArray(cart.items) || cart.items.length === 0) {\n return Response.json(\n {\n message: 'Cart is required and must contain at least one item.',\n },\n {\n status: 400,\n },\n )\n }\n\n for (const item of cart.items) {\n // Target field to check the price based on the currency so we can validate the total\n const priceField = `priceIn${currency.toUpperCase()}`\n const quantity = item.quantity || 1\n\n // If the item has a product but no variant, we assume the product has a price in the specified currency\n if (item.product && !item.variant) {\n const id = typeof item.product === 'object' ? item.product.id : item.product\n\n const product = await payload.findByID({\n id,\n collection: productsSlug,\n depth: 0,\n select: {\n inventory: true,\n [priceField]: true,\n },\n })\n\n if (!product) {\n return Response.json(\n {\n message: `Product with ID ${item.product} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n\n try {\n if (productsValidation) {\n await productsValidation({ currenciesConfig, currency, product, quantity })\n } else {\n await defaultProductsValidation({\n currenciesConfig,\n currency,\n product,\n quantity,\n })\n }\n } catch (error) {\n payload.logger.error(\n error,\n 'Error validating product or variant during payment initiation.',\n )\n\n return Response.json(\n {\n message: error,\n ...(error instanceof Error ? { cause: error.cause } : {}),\n },\n {\n status: 400,\n },\n )\n }\n\n if (item.variant) {\n const id = typeof item.variant === 'object' ? item.variant.id : item.variant\n\n const variant = await payload.findByID({\n id,\n collection: variantsSlug,\n depth: 0,\n select: {\n inventory: true,\n [priceField]: true,\n },\n })\n\n if (!variant) {\n return Response.json(\n {\n message: `Variant with ID ${item.variant} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n\n try {\n if (productsValidation) {\n await productsValidation({\n currenciesConfig,\n currency,\n product: item.product,\n quantity,\n variant,\n })\n } else {\n await defaultProductsValidation({\n currenciesConfig,\n currency,\n product: item.product,\n quantity,\n variant,\n })\n }\n } catch (error) {\n payload.logger.error(\n error,\n 'Error validating product or variant during payment initiation.',\n )\n\n return Response.json(\n {\n message: error,\n },\n {\n status: 400,\n },\n )\n }\n }\n }\n }\n\n try {\n const paymentResponse = await paymentMethod.initiatePayment({\n customersSlug,\n data: {\n billingAddress,\n cart,\n currency,\n customerEmail,\n shippingAddress,\n },\n req,\n transactionsSlug,\n })\n\n return Response.json(paymentResponse)\n } catch (error) {\n payload.logger.error(error, 'Error initiating payment.')\n\n return Response.json(\n {\n message: 'Error initiating payment.',\n },\n {\n status: 500,\n },\n )\n }\n }\n"],"names":["addDataAndFileToRequest","defaultProductsValidation","initiatePaymentHandler","cartsSlug","currenciesConfig","customersSlug","paymentMethod","productsSlug","productsValidation","transactionsSlug","variantsSlug","req","data","payload","user","currency","defaultCurrency","cartID","cart","undefined","billingAddress","shippingAddress","customerEmail","email","docs","Array","isArray","length","id","Response","json","message","status","findByID","collection","depth","overrideAccess","select","items","subtotal","supportedCurrencies","find","c","code","toLocaleLowerCase","item","priceField","toUpperCase","quantity","product","variant","inventory","error","logger","Error","cause","paymentResponse","initiatePayment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/endpoints/initiatePayment.ts"],"sourcesContent":["import { addDataAndFileToRequest, type DefaultDocumentIDType, type Endpoint } from 'payload'\n\nimport type {\n CurrenciesConfig,\n PaymentAdapter,\n ProductsValidation,\n SanitizedEcommercePluginConfig,\n} from '../types.js'\n\nimport { defaultProductsValidation } from '../utilities/defaultProductsValidation.js'\n\ntype Args = {\n /**\n * The slug of the carts collection, defaults to 'carts'.\n */\n cartsSlug?: string\n currenciesConfig: CurrenciesConfig\n /**\n * The slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n /**\n * Track inventory stock for the products and variants.\n * Accepts an object to override the default field name.\n */\n inventory?: SanitizedEcommercePluginConfig['inventory']\n paymentMethod: PaymentAdapter\n /**\n * The slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Customise the validation used for checking products or variants before a transaction is created.\n */\n productsValidation?: ProductsValidation\n /**\n * The slug of the transactions collection, defaults to 'transactions'.\n */\n transactionsSlug?: string\n /**\n * The slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n}\n\ntype InitiatePayment = (args: Args) => Endpoint['handler']\n\n/**\n * Handles the endpoint for initiating payments. We will handle checking the amount and product and variant prices here before it is sent to the payment provider.\n * This is the first step in the payment process.\n */\nexport const initiatePaymentHandler: InitiatePayment =\n ({\n cartsSlug = 'carts',\n currenciesConfig,\n customersSlug = 'users',\n paymentMethod,\n productsSlug = 'products',\n productsValidation,\n transactionsSlug = 'transactions',\n variantsSlug = 'variants',\n }) =>\n async (req) => {\n await addDataAndFileToRequest(req)\n const data = req.data\n const payload = req.payload\n const user = req.user\n\n let currency: string = currenciesConfig.defaultCurrency\n let cartID: DefaultDocumentIDType = data?.cartID\n let cart = undefined\n const billingAddress = data?.billingAddress\n const shippingAddress = data?.shippingAddress\n\n let customerEmail: string = user?.email ?? ''\n\n if (user) {\n if (user.cart?.docs && Array.isArray(user.cart.docs) && user.cart.docs.length > 0) {\n if (!cartID && user.cart.docs[0]) {\n // Use the user's cart instead\n if (typeof user.cart.docs[0] === 'object') {\n cartID = user.cart.docs[0].id\n cart = user.cart.docs[0]\n } else {\n cartID = user.cart.docs[0]\n }\n }\n }\n } else {\n // Get the email from the data if user is not available\n if (data?.customerEmail && typeof data.customerEmail === 'string') {\n customerEmail = data.customerEmail\n } else {\n return Response.json(\n {\n message: 'A customer email is required to make a purchase.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (!cart) {\n if (cartID) {\n cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 2,\n overrideAccess: false,\n select: {\n id: true,\n currency: true,\n customerEmail: true,\n items: true,\n subtotal: true,\n },\n user,\n })\n\n if (!cart) {\n return Response.json(\n {\n message: `Cart with ID ${cartID} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n } else {\n return Response.json(\n {\n message: 'Cart ID is required.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (cart.currency && typeof cart.currency === 'string') {\n currency = cart.currency\n }\n\n // Ensure the currency is provided or inferred in some way\n if (!currency) {\n return Response.json(\n {\n message: 'Currency is required.',\n },\n {\n status: 400,\n },\n )\n }\n\n // Ensure the selected currency is supported\n if (\n !currenciesConfig.supportedCurrencies.find(\n (c) => c.code.toLocaleLowerCase() === currency.toLocaleLowerCase(),\n )\n ) {\n return Response.json(\n {\n message: `Currency ${currency} is not supported.`,\n },\n {\n status: 400,\n },\n )\n }\n\n // Verify the cart is available and items are present in an array\n if (!cart || !cart.items || !Array.isArray(cart.items) || cart.items.length === 0) {\n return Response.json(\n {\n message: 'Cart is required and must contain at least one item.',\n },\n {\n status: 400,\n },\n )\n }\n\n for (const item of cart.items) {\n // Target field to check the price based on the currency so we can validate the total\n const priceField = `priceIn${currency.toUpperCase()}`\n const quantity = item.quantity || 1\n\n // If the item has a product but no variant, we assume the product has a price in the specified currency\n if (item.product && !item.variant) {\n const id = typeof item.product === 'object' ? item.product.id : item.product\n\n const product = await payload.findByID({\n id,\n collection: productsSlug,\n depth: 0,\n select: {\n inventory: true,\n [priceField]: true,\n },\n })\n\n if (!product) {\n return Response.json(\n {\n message: `Product with ID ${item.product} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n\n try {\n if (productsValidation) {\n await productsValidation({ currenciesConfig, currency, product, quantity })\n } else {\n await defaultProductsValidation({\n currenciesConfig,\n currency,\n product,\n quantity,\n })\n }\n } catch (error) {\n payload.logger.error(\n error,\n 'Error validating product or variant during payment initiation.',\n )\n\n return Response.json(\n {\n message: error,\n ...(error instanceof Error ? { cause: error.cause } : {}),\n },\n {\n status: 400,\n },\n )\n }\n\n if (item.variant) {\n const id = typeof item.variant === 'object' ? item.variant.id : item.variant\n\n const variant = await payload.findByID({\n id,\n collection: variantsSlug,\n depth: 0,\n select: {\n inventory: true,\n [priceField]: true,\n },\n })\n\n if (!variant) {\n return Response.json(\n {\n message: `Variant with ID ${item.variant} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n\n try {\n if (productsValidation) {\n await productsValidation({\n currenciesConfig,\n currency,\n product: item.product,\n quantity,\n variant,\n })\n } else {\n await defaultProductsValidation({\n currenciesConfig,\n currency,\n product: item.product,\n quantity,\n variant,\n })\n }\n } catch (error) {\n payload.logger.error(\n error,\n 'Error validating product or variant during payment initiation.',\n )\n\n return Response.json(\n {\n message: error,\n },\n {\n status: 400,\n },\n )\n }\n }\n }\n }\n\n try {\n const paymentResponse = await paymentMethod.initiatePayment({\n customersSlug,\n data: {\n billingAddress,\n cart,\n currency,\n customerEmail,\n shippingAddress,\n },\n req,\n transactionsSlug,\n })\n\n return Response.json(paymentResponse)\n } catch (error) {\n payload.logger.error(error, 'Error initiating payment.')\n\n return Response.json(\n {\n message: 'Error initiating payment.',\n },\n {\n status: 500,\n },\n )\n }\n }\n"],"names":["addDataAndFileToRequest","defaultProductsValidation","initiatePaymentHandler","cartsSlug","currenciesConfig","customersSlug","paymentMethod","productsSlug","productsValidation","transactionsSlug","variantsSlug","req","data","payload","user","currency","defaultCurrency","cartID","cart","undefined","billingAddress","shippingAddress","customerEmail","email","docs","Array","isArray","length","id","Response","json","message","status","findByID","collection","depth","overrideAccess","select","items","subtotal","supportedCurrencies","find","c","code","toLocaleLowerCase","item","priceField","toUpperCase","quantity","product","variant","inventory","error","logger","Error","cause","paymentResponse","initiatePayment"],"mappings":"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"}
|
package/dist/exports/types.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type { Cart, CollectionOverride, CurrenciesConfig, EcommercePluginConfig
|
|
1
|
+
export type { Cart, CollectionOverride, CurrenciesConfig, EcommercePluginConfig } from '../types.js';
|
|
2
2
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exports/types.ts"],"names":[],"mappings":"AAAA,YAAY,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exports/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/exports/types.ts"],"sourcesContent":["export type {
|
|
1
|
+
{"version":3,"sources":["../../src/exports/types.ts"],"sourcesContent":["export type { Cart, CollectionOverride, CurrenciesConfig, EcommercePluginConfig } from '../types.js'\n"],"names":[],"mappings":"AAAA,WAAoG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amountField.d.ts","sourceRoot":"","sources":["../../src/fields/amountField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"amountField.d.ts","sourceRoot":"","sources":["../../src/fields/amountField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE7D,KAAK,KAAK,GAAG;IACX,gBAAgB,EAAE,gBAAgB,CAAA;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;CACjC,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WAoC3C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/amountField.ts"],"sourcesContent":["import type { NumberField } from 'payload'\n\nimport type { CurrenciesConfig, Currency } from '../types
|
|
1
|
+
{"version":3,"sources":["../../src/fields/amountField.ts"],"sourcesContent":["import type { NumberField } from 'payload'\n\nimport type { CurrenciesConfig, Currency } from '../types.js'\n\ntype Props = {\n currenciesConfig: CurrenciesConfig\n /**\n * Use this specific currency for the field.\n */\n currency?: Currency\n overrides?: Partial<NumberField>\n}\n\nexport const amountField: (props: Props) => NumberField = ({\n currenciesConfig,\n currency,\n overrides,\n}) => {\n // @ts-expect-error - issue with payload types\n const field: NumberField = {\n name: 'amount',\n type: 'number',\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:amount'),\n ...overrides,\n admin: {\n components: {\n Cell: {\n clientProps: {\n currenciesConfig,\n currency,\n },\n path: '@payloadcms/plugin-ecommerce/client#PriceCell',\n },\n Field: {\n clientProps: {\n currenciesConfig,\n currency,\n },\n path: '@payloadcms/plugin-ecommerce/rsc#PriceInput',\n },\n ...overrides?.admin?.components,\n },\n ...overrides?.admin,\n },\n }\n\n return field\n}\n"],"names":["amountField","currenciesConfig","currency","overrides","field","name","type","label","t","admin","components","Cell","clientProps","path","Field"],"mappings":"AAaA,OAAO,MAAMA,cAA6C,CAAC,EACzDC,gBAAgB,EAChBC,QAAQ,EACRC,SAAS,EACV;IACC,8CAA8C;IAC9C,MAAMC,QAAqB;QACzBC,MAAM;QACNC,MAAM;QACNC,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;YAC/DA,EAAE;QACJ,GAAGL,SAAS;QACZM,OAAO;YACLC,YAAY;gBACVC,MAAM;oBACJC,aAAa;wBACXX;wBACAC;oBACF;oBACAW,MAAM;gBACR;gBACAC,OAAO;oBACLF,aAAa;wBACXX;wBACAC;oBACF;oBACAW,MAAM;gBACR;gBACA,GAAGV,WAAWM,OAAOC,UAAU;YACjC;YACA,GAAGP,WAAWM,KAAK;QACrB;IACF;IAEA,OAAOL;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cartItemsField.d.ts","sourceRoot":"","sources":["../../src/fields/cartItemsField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,SAAS,CAAA;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cartItemsField.d.ts","sourceRoot":"","sources":["../../src/fields/cartItemsField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,SAAS,CAAA;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAKnD,KAAK,KAAK,GAAG;IACX;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,UAyD/C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/cartItemsField.ts"],"sourcesContent":["import type { ArrayField, Field } from 'payload'\n\nimport type { CurrenciesConfig } from '../types
|
|
1
|
+
{"version":3,"sources":["../../src/fields/cartItemsField.ts"],"sourcesContent":["import type { ArrayField, Field } from 'payload'\n\nimport type { CurrenciesConfig } from '../types.js'\n\nimport { amountField } from './amountField.js'\nimport { currencyField } from './currencyField.js'\n\ntype Props = {\n /**\n * Include this in order to enable support for currencies per item in the cart.\n */\n currenciesConfig?: CurrenciesConfig\n enableVariants?: boolean\n /**\n * Enables individual prices for each item in the cart.\n * Defaults to false.\n */\n individualPrices?: boolean\n overrides?: Partial<ArrayField>\n /**\n * Slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n}\n\nexport const cartItemsField: (props?: Props) => ArrayField = (props) => {\n const {\n currenciesConfig,\n enableVariants = false,\n individualPrices,\n overrides,\n productsSlug = 'products',\n variantsSlug = 'variants',\n } = props || {}\n\n const field: ArrayField = {\n name: 'items',\n type: 'array',\n admin: {\n initCollapsed: true,\n },\n fields: [\n {\n name: 'product',\n type: 'relationship',\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:product'),\n relationTo: productsSlug,\n },\n ...(enableVariants\n ? [\n {\n name: 'variant',\n type: 'relationship',\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variant'),\n relationTo: variantsSlug,\n } as Field,\n ]\n : []),\n {\n name: 'quantity',\n type: 'number',\n defaultValue: 1,\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:quantity'),\n min: 1,\n required: true,\n },\n ...(currenciesConfig && individualPrices ? [amountField({ currenciesConfig })] : []),\n ...(currenciesConfig ? [currencyField({ currenciesConfig })] : []),\n ],\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:cart'),\n ...overrides,\n }\n\n return field\n}\n"],"names":["amountField","currencyField","cartItemsField","props","currenciesConfig","enableVariants","individualPrices","overrides","productsSlug","variantsSlug","field","name","type","admin","initCollapsed","fields","label","t","relationTo","defaultValue","min","required"],"mappings":"AAIA,SAASA,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,aAAa,QAAQ,qBAAoB;AAwBlD,OAAO,MAAMC,iBAAgD,CAACC;IAC5D,MAAM,EACJC,gBAAgB,EAChBC,iBAAiB,KAAK,EACtBC,gBAAgB,EAChBC,SAAS,EACTC,eAAe,UAAU,EACzBC,eAAe,UAAU,EAC1B,GAAGN,SAAS,CAAC;IAEd,MAAMO,QAAoB;QACxBC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,eAAe;QACjB;QACAC,QAAQ;YACN;gBACEJ,MAAM;gBACNC,MAAM;gBACNI,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;oBAC/DA,EAAE;gBACJC,YAAYV;YACd;eACIH,iBACA;gBACE;oBACEM,MAAM;oBACNC,MAAM;oBACNI,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;wBAC/DA,EAAE;oBACJC,YAAYT;gBACd;aACD,GACD,EAAE;YACN;gBACEE,MAAM;gBACNC,MAAM;gBACNO,cAAc;gBACdH,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;oBAC/DA,EAAE;gBACJG,KAAK;gBACLC,UAAU;YACZ;eACIjB,oBAAoBE,mBAAmB;gBAACN,YAAY;oBAAEI;gBAAiB;aAAG,GAAG,EAAE;eAC/EA,mBAAmB;gBAACH,cAAc;oBAAEG;gBAAiB;aAAG,GAAG,EAAE;SAClE;QACDY,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;YAC/DA,EAAE;QACJ,GAAGV,SAAS;IACd;IAEA,OAAOG;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currencyField.d.ts","sourceRoot":"","sources":["../../src/fields/currencyField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"currencyField.d.ts","sourceRoot":"","sources":["../../src/fields/currencyField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD,KAAK,KAAK,GAAG;IACX,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;CACjC,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WA6B7C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/currencyField.ts"],"sourcesContent":["import type { SelectField } from 'payload'\n\nimport type { CurrenciesConfig } from '../types
|
|
1
|
+
{"version":3,"sources":["../../src/fields/currencyField.ts"],"sourcesContent":["import type { SelectField } from 'payload'\n\nimport type { CurrenciesConfig } from '../types.js'\n\ntype Props = {\n currenciesConfig: CurrenciesConfig\n overrides?: Partial<SelectField>\n}\n\nexport const currencyField: (props: Props) => SelectField = ({ currenciesConfig, overrides }) => {\n const options = currenciesConfig.supportedCurrencies.map((currency) => {\n const label = currency.label ? `${currency.label} (${currency.code})` : currency.code\n\n return {\n label,\n value: currency.code,\n }\n })\n\n const defaultValue =\n (currenciesConfig.defaultCurrency ?? currenciesConfig.supportedCurrencies.length === 1)\n ? currenciesConfig.supportedCurrencies[0]?.code\n : undefined\n\n // @ts-expect-error - issue with payload types\n const field: SelectField = {\n name: 'currency',\n type: 'select',\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:currency'),\n ...(defaultValue && { defaultValue }),\n options,\n ...overrides,\n admin: { readOnly: currenciesConfig.supportedCurrencies.length === 1, ...overrides?.admin },\n }\n\n return field\n}\n"],"names":["currencyField","currenciesConfig","overrides","options","supportedCurrencies","map","currency","label","code","value","defaultValue","defaultCurrency","length","undefined","field","name","type","t","admin","readOnly"],"mappings":"AASA,OAAO,MAAMA,gBAA+C,CAAC,EAAEC,gBAAgB,EAAEC,SAAS,EAAE;IAC1F,MAAMC,UAAUF,iBAAiBG,mBAAmB,CAACC,GAAG,CAAC,CAACC;QACxD,MAAMC,QAAQD,SAASC,KAAK,GAAG,GAAGD,SAASC,KAAK,CAAC,EAAE,EAAED,SAASE,IAAI,CAAC,CAAC,CAAC,GAAGF,SAASE,IAAI;QAErF,OAAO;YACLD;YACAE,OAAOH,SAASE,IAAI;QACtB;IACF;IAEA,MAAME,eACJ,AAACT,iBAAiBU,eAAe,IAAIV,iBAAiBG,mBAAmB,CAACQ,MAAM,KAAK,IACjFX,iBAAiBG,mBAAmB,CAAC,EAAE,EAAEI,OACzCK;IAEN,8CAA8C;IAC9C,MAAMC,QAAqB;QACzBC,MAAM;QACNC,MAAM;QACNT,OAAO,CAAC,EAAEU,CAAC,EAAE,GACX,+DAA+D;YAC/DA,EAAE;QACJ,GAAIP,gBAAgB;YAAEA;QAAa,CAAC;QACpCP;QACA,GAAGD,SAAS;QACZgB,OAAO;YAAEC,UAAUlB,iBAAiBG,mBAAmB,CAACQ,MAAM,KAAK;YAAG,GAAGV,WAAWgB,KAAK;QAAC;IAC5F;IAEA,OAAOJ;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricesField.d.ts","sourceRoot":"","sources":["../../src/fields/pricesField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pricesField.d.ts","sourceRoot":"","sources":["../../src/fields/pricesField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAInD,KAAK,KAAK,GAAG;IACX;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,gBAAgB,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,UAAU,EAuDrD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/pricesField.ts"],"sourcesContent":["import type { GroupField } from 'payload'\n\nimport type { CurrenciesConfig } from '../types
|
|
1
|
+
{"version":3,"sources":["../../src/fields/pricesField.ts"],"sourcesContent":["import type { GroupField } from 'payload'\n\nimport type { CurrenciesConfig } from '../types.js'\n\nimport { amountField } from './amountField.js'\n\ntype Props = {\n /**\n * Use this to specify a path for the condition.\n */\n conditionalPath?: string\n currenciesConfig: CurrenciesConfig\n}\n\nexport const pricesField: (props: Props) => GroupField[] = ({\n conditionalPath,\n currenciesConfig,\n}) => {\n const currencies = currenciesConfig.supportedCurrencies\n\n const fields: GroupField[] = currencies.map((currency) => {\n const name = `priceIn${currency.code}`\n\n const path = conditionalPath ? `${conditionalPath}.${name}Enabled` : `${name}Enabled`\n\n return {\n type: 'group',\n admin: {\n description: 'Prices for this product in different currencies.',\n },\n fields: [\n {\n type: 'row',\n fields: [\n {\n name: `${name}Enabled`,\n type: 'checkbox',\n admin: {\n style: {\n alignSelf: 'baseline',\n flex: '0 0 auto',\n },\n },\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:enableCurrencyPrice', { currency: currency.code }),\n },\n amountField({\n currenciesConfig,\n currency,\n overrides: {\n name,\n admin: {\n condition: (_, siblingData) => Boolean(siblingData?.[path]),\n description: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:productPriceDescription'),\n },\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:priceIn', { currency: currency.code }),\n },\n }),\n ],\n },\n ],\n }\n })\n\n return fields\n}\n"],"names":["amountField","pricesField","conditionalPath","currenciesConfig","currencies","supportedCurrencies","fields","map","currency","name","code","path","type","admin","description","style","alignSelf","flex","label","t","overrides","condition","_","siblingData","Boolean"],"mappings":"AAIA,SAASA,WAAW,QAAQ,mBAAkB;AAU9C,OAAO,MAAMC,cAA8C,CAAC,EAC1DC,eAAe,EACfC,gBAAgB,EACjB;IACC,MAAMC,aAAaD,iBAAiBE,mBAAmB;IAEvD,MAAMC,SAAuBF,WAAWG,GAAG,CAAC,CAACC;QAC3C,MAAMC,OAAO,CAAC,OAAO,EAAED,SAASE,IAAI,EAAE;QAEtC,MAAMC,OAAOT,kBAAkB,GAAGA,gBAAgB,CAAC,EAAEO,KAAK,OAAO,CAAC,GAAG,GAAGA,KAAK,OAAO,CAAC;QAErF,OAAO;YACLG,MAAM;YACNC,OAAO;gBACLC,aAAa;YACf;YACAR,QAAQ;gBACN;oBACEM,MAAM;oBACNN,QAAQ;wBACN;4BACEG,MAAM,GAAGA,KAAK,OAAO,CAAC;4BACtBG,MAAM;4BACNC,OAAO;gCACLE,OAAO;oCACLC,WAAW;oCACXC,MAAM;gCACR;4BACF;4BACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;gCAC/DA,EAAE,wCAAwC;oCAAEX,UAAUA,SAASE,IAAI;gCAAC;wBACxE;wBACAV,YAAY;4BACVG;4BACAK;4BACAY,WAAW;gCACTX;gCACAI,OAAO;oCACLQ,WAAW,CAACC,GAAGC,cAAgBC,QAAQD,aAAa,CAACZ,KAAK;oCAC1DG,aAAa,CAAC,EAAEK,CAAC,EAAE,GACjB,+DAA+D;wCAC/DA,EAAE;gCACN;gCACA,+DAA+D;gCAC/DD,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE,4BAA4B;wCAAEX,UAAUA,SAASE,IAAI;oCAAC;4BAC5E;wBACF;qBACD;gBACH;aACD;QACH;IACF;IAEA,OAAOJ;AACT,EAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Config } from 'payload';
|
|
2
|
-
import type { EcommercePluginConfig } from './types
|
|
2
|
+
import type { EcommercePluginConfig } from './types.js';
|
|
3
3
|
import { createAddressesCollection } from './collections/addresses/createAddressesCollection.js';
|
|
4
4
|
import { createCartsCollection } from './collections/carts/createCartsCollection.js';
|
|
5
5
|
import { createOrdersCollection } from './collections/orders/createOrdersCollection.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,SAAS,CAAA;AAI/C,OAAO,KAAK,EAAE,qBAAqB,EAAkC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,SAAS,CAAA;AAI/C,OAAO,KAAK,EAAE,qBAAqB,EAAkC,MAAM,YAAY,CAAA;AAEvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAA;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAA;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAA;AAC7F,OAAO,EAAE,4BAA4B,EAAE,MAAM,4DAA4D,CAAA;AACzG,OAAO,EAAE,8BAA8B,EAAE,MAAM,0DAA0D,CAAA;AACzG,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAA;AACnG,OAAO,EAAE,4BAA4B,EAAE,MAAM,wDAAwD,CAAA;AAOrG,eAAO,MAAM,eAAe,kBACV,qBAAqB,sBACd,MAAM,KAAG,OAAO,CAAC,MAAM,CA6T7C,CAAA;AAEH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,EACxB,4BAA4B,GAC7B,CAAA;AAED,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,6 @@ import { confirmOrderHandler } from './endpoints/confirmOrder.js';
|
|
|
11
11
|
import { initiatePaymentHandler } from './endpoints/initiatePayment.js';
|
|
12
12
|
import { translations } from './translations/index.js';
|
|
13
13
|
import { getCollectionSlugMap } from './utilities/getCollectionSlugMap.js';
|
|
14
|
-
import { pushTypeScriptProperties } from './utilities/pushTypeScriptProperties.js';
|
|
15
14
|
import { sanitizePluginConfig } from './utilities/sanitizePluginConfig.js';
|
|
16
15
|
export const ecommercePlugin = (pluginConfig)=>async (incomingConfig)=>{
|
|
17
16
|
if (!pluginConfig) {
|
|
@@ -224,18 +223,9 @@ export const ecommercePlugin = (pluginConfig)=>async (incomingConfig)=>{
|
|
|
224
223
|
incomingConfig.i18n.translations = {};
|
|
225
224
|
}
|
|
226
225
|
incomingConfig.i18n.translations = deepMergeSimple(translations, incomingConfig.i18n?.translations);
|
|
227
|
-
|
|
228
|
-
incomingConfig
|
|
229
|
-
}
|
|
230
|
-
if (!incomingConfig.typescript.schema) {
|
|
231
|
-
incomingConfig.typescript.schema = [];
|
|
232
|
-
}
|
|
233
|
-
incomingConfig.typescript.schema.push((args)=>pushTypeScriptProperties({
|
|
234
|
-
...args,
|
|
235
|
-
collectionSlugMap,
|
|
236
|
-
sanitizedPluginConfig
|
|
237
|
-
}));
|
|
238
|
-
return incomingConfig;
|
|
226
|
+
return {
|
|
227
|
+
...incomingConfig
|
|
228
|
+
};
|
|
239
229
|
};
|
|
240
230
|
export { createAddressesCollection, createCartsCollection, createOrdersCollection, createProductsCollection, createTransactionsCollection, createVariantOptionsCollection, createVariantsCollection, createVariantTypesCollection, };
|
|
241
231
|
export { EUR, GBP, USD } from './currencies/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Config, Endpoint } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\n\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 * Used to keep track of the slugs of collections in case they are overridden by the user.\n */\n const collectionSlugMap = getCollectionSlugMap({ sanitizedPluginConfig })\n\n const accessConfig = sanitizedPluginConfig.access\n\n // Ensure collections exists\n if (!incomingConfig.collections) {\n incomingConfig.collections = []\n }\n\n // Controls whether variants are enabled in the plugin. This is toggled to true under products config\n let enableVariants = false\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: {\n adminOrCustomerOwner: accessConfig.adminOrCustomerOwner,\n authenticatedOnly: accessConfig.authenticatedOnly,\n customerOnlyFieldAccess: accessConfig.customerOnlyFieldAccess,\n },\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 (sanitizedPluginConfig.products) {\n const productsConfig =\n typeof sanitizedPluginConfig.products === 'boolean'\n ? {\n variants: true,\n }\n : sanitizedPluginConfig.products\n\n enableVariants = Boolean(productsConfig.variants)\n\n if (productsConfig.variants) {\n const variantsConfig =\n typeof productsConfig.variants === 'boolean' ? undefined : productsConfig.variants\n\n const defaultVariantsCollection = createVariantsCollection({\n access: {\n adminOnly: accessConfig.adminOnly,\n adminOrPublishedStatus: accessConfig.adminOrPublishedStatus,\n },\n currenciesConfig,\n inventory: sanitizedPluginConfig.inventory,\n productsSlug: collectionSlugMap.products,\n variantOptionsSlug: collectionSlugMap.variantOptions,\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: {\n adminOnly: accessConfig.adminOnly,\n publicAccess: accessConfig.publicAccess,\n },\n variantOptionsSlug: collectionSlugMap.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: {\n adminOnly: accessConfig.adminOnly,\n publicAccess: accessConfig.publicAccess,\n },\n variantTypesSlug: collectionSlugMap.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: {\n adminOnly: accessConfig.adminOnly,\n adminOrPublishedStatus: accessConfig.adminOrPublishedStatus,\n },\n currenciesConfig,\n enableVariants,\n inventory: sanitizedPluginConfig.inventory,\n variantsSlug: collectionSlugMap.variants,\n variantTypesSlug: collectionSlugMap.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 defaultCartsCollection = createCartsCollection({\n access: {\n adminOrCustomerOwner: accessConfig.adminOrCustomerOwner,\n publicAccess: accessConfig.publicAccess,\n },\n currenciesConfig,\n customersSlug: collectionSlugMap.customers,\n enableVariants: Boolean(productsConfig.variants),\n productsSlug: collectionSlugMap.products,\n variantsSlug: collectionSlugMap.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: {\n adminOnly: accessConfig.adminOnly,\n adminOnlyFieldAccess: accessConfig.adminOnlyFieldAccess,\n adminOrCustomerOwner: accessConfig.adminOrCustomerOwner,\n },\n addressFields,\n currenciesConfig,\n customersSlug: collectionSlugMap.customers,\n enableVariants,\n productsSlug: collectionSlugMap.products,\n variantsSlug: collectionSlugMap.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,\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 productsValidation,\n transactionsSlug: collectionSlugMap.transactions,\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: {\n adminOnly: accessConfig.adminOnly,\n },\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,\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 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 { 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","collectionSlugMap","accessConfig","access","collections","enableVariants","currenciesConfig","currencies","addressFields","addresses","supportedCountries","defaultAddressesCollection","adminOrCustomerOwner","authenticatedOnly","customerOnlyFieldAccess","customersSlug","customers","addressesCollection","addressesCollectionOverride","defaultCollection","push","products","productsConfig","variants","Boolean","variantsConfig","undefined","defaultVariantsCollection","adminOnly","adminOrPublishedStatus","inventory","productsSlug","variantOptionsSlug","variantOptions","variantsCollectionOverride","defaultVariantTypesCollection","publicAccess","variantTypes","variantTypesCollectionOverride","defaultVariantOptionsCollection","variantTypesSlug","variantOptionsCollectionOverride","defaultProductsCollection","variantsSlug","productsCollection","productsCollectionOverride","carts","defaultCartsCollection","cartsCollection","cartsCollectionOverride","orders","defaultOrdersCollection","adminOnlyFieldAccess","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","typescript","schema","args","EUR","GBP","USD","amountField","currencyField","pricesField","statusField","variantsFields"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Config, Endpoint } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\n\nimport type { EcommercePluginConfig, SanitizedEcommercePluginConfig } from './types.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 { 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 * Used to keep track of the slugs of collections in case they are overridden by the user.\n */\n const collectionSlugMap = getCollectionSlugMap({ sanitizedPluginConfig })\n\n const accessConfig = sanitizedPluginConfig.access\n\n // Ensure collections exists\n if (!incomingConfig.collections) {\n incomingConfig.collections = []\n }\n\n // Controls whether variants are enabled in the plugin. This is toggled to true under products config\n let enableVariants = false\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: {\n adminOrCustomerOwner: accessConfig.adminOrCustomerOwner,\n authenticatedOnly: accessConfig.authenticatedOnly,\n customerOnlyFieldAccess: accessConfig.customerOnlyFieldAccess,\n },\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 (sanitizedPluginConfig.products) {\n const productsConfig =\n typeof sanitizedPluginConfig.products === 'boolean'\n ? {\n variants: true,\n }\n : sanitizedPluginConfig.products\n\n enableVariants = Boolean(productsConfig.variants)\n\n if (productsConfig.variants) {\n const variantsConfig =\n typeof productsConfig.variants === 'boolean' ? undefined : productsConfig.variants\n\n const defaultVariantsCollection = createVariantsCollection({\n access: {\n adminOnly: accessConfig.adminOnly,\n adminOrPublishedStatus: accessConfig.adminOrPublishedStatus,\n },\n currenciesConfig,\n inventory: sanitizedPluginConfig.inventory,\n productsSlug: collectionSlugMap.products,\n variantOptionsSlug: collectionSlugMap.variantOptions,\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: {\n adminOnly: accessConfig.adminOnly,\n publicAccess: accessConfig.publicAccess,\n },\n variantOptionsSlug: collectionSlugMap.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: {\n adminOnly: accessConfig.adminOnly,\n publicAccess: accessConfig.publicAccess,\n },\n variantTypesSlug: collectionSlugMap.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: {\n adminOnly: accessConfig.adminOnly,\n adminOrPublishedStatus: accessConfig.adminOrPublishedStatus,\n },\n currenciesConfig,\n enableVariants,\n inventory: sanitizedPluginConfig.inventory,\n variantsSlug: collectionSlugMap.variants,\n variantTypesSlug: collectionSlugMap.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 defaultCartsCollection = createCartsCollection({\n access: {\n adminOrCustomerOwner: accessConfig.adminOrCustomerOwner,\n publicAccess: accessConfig.publicAccess,\n },\n currenciesConfig,\n customersSlug: collectionSlugMap.customers,\n enableVariants: Boolean(productsConfig.variants),\n productsSlug: collectionSlugMap.products,\n variantsSlug: collectionSlugMap.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: {\n adminOnly: accessConfig.adminOnly,\n adminOnlyFieldAccess: accessConfig.adminOnlyFieldAccess,\n adminOrCustomerOwner: accessConfig.adminOrCustomerOwner,\n },\n addressFields,\n currenciesConfig,\n customersSlug: collectionSlugMap.customers,\n enableVariants,\n productsSlug: collectionSlugMap.products,\n variantsSlug: collectionSlugMap.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,\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 productsValidation,\n transactionsSlug: collectionSlugMap.transactions,\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: {\n adminOnly: accessConfig.adminOnly,\n },\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,\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 return {\n ...incomingConfig,\n }\n }\n\nexport {\n createAddressesCollection,\n createCartsCollection,\n createOrdersCollection,\n createProductsCollection,\n createTransactionsCollection,\n createVariantOptionsCollection,\n createVariantsCollection,\n createVariantTypesCollection,\n}\n\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","sanitizePluginConfig","ecommercePlugin","pluginConfig","incomingConfig","sanitizedPluginConfig","collectionSlugMap","accessConfig","access","collections","enableVariants","currenciesConfig","currencies","addressFields","addresses","supportedCountries","defaultAddressesCollection","adminOrCustomerOwner","authenticatedOnly","customerOnlyFieldAccess","customersSlug","customers","addressesCollection","addressesCollectionOverride","defaultCollection","push","products","productsConfig","variants","Boolean","variantsConfig","undefined","defaultVariantsCollection","adminOnly","adminOrPublishedStatus","inventory","productsSlug","variantOptionsSlug","variantOptions","variantsCollectionOverride","defaultVariantTypesCollection","publicAccess","variantTypes","variantTypesCollectionOverride","defaultVariantOptionsCollection","variantTypesSlug","variantOptionsCollectionOverride","defaultProductsCollection","variantsSlug","productsCollection","productsCollectionOverride","carts","defaultCartsCollection","cartsCollection","cartsCollectionOverride","orders","defaultOrdersCollection","adminOnlyFieldAccess","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","EUR","GBP","USD","amountField","currencyField","pricesField","statusField","variantsFields"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Stripe from 'stripe';
|
|
2
|
-
import type { PaymentAdapter } from '../../../types
|
|
2
|
+
import type { PaymentAdapter } from '../../../types.js';
|
|
3
3
|
import type { StripeAdapterArgs } from './index.js';
|
|
4
4
|
type Props = {
|
|
5
5
|
apiVersion?: Stripe.StripeConfig['apiVersion'];
|
|
@@ -1 +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,
|
|
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,mBAAmB,CAAA;AACvD,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,CAwHpF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/payments/adapters/stripe/confirmOrder.ts"],"sourcesContent":["import Stripe from 'stripe'\n\nimport type { PaymentAdapter } from '../../../types
|
|
1
|
+
{"version":3,"sources":["../../../../src/payments/adapters/stripe/confirmOrder.ts"],"sourcesContent":["import Stripe from 'stripe'\n\nimport type { PaymentAdapter } from '../../../types.js'\nimport type { StripeAdapterArgs } from './index.js'\n\ntype Props = {\n apiVersion?: Stripe.StripeConfig['apiVersion']\n appInfo?: Stripe.StripeConfig['appInfo']\n secretKey: StripeAdapterArgs['secretKey']\n}\n\nexport const confirmOrder: (props: Props) => NonNullable<PaymentAdapter>['confirmOrder'] =\n (props) =>\n async ({ data, ordersSlug = 'orders', req, transactionsSlug = 'transactions' }) => {\n const payload = req.payload\n const { apiVersion, appInfo, secretKey } = props || {}\n\n const customerEmail = data.customerEmail\n\n const paymentIntentID = data.paymentIntentID as string\n\n if (!secretKey) {\n throw new Error('Stripe secret key is required')\n }\n\n if (!paymentIntentID) {\n throw new Error('PaymentIntent ID is required')\n }\n\n const stripe = new Stripe(secretKey, {\n // API version can only be the latest, stripe recommends ts ignoring it\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - ignoring since possible versions are not type safe, only the latest version is recognised\n apiVersion: apiVersion || '2025-03-31.basil',\n appInfo: appInfo || {\n name: 'Stripe Payload Plugin',\n url: 'https://payloadcms.com',\n },\n })\n\n try {\n let customer = (\n await stripe.customers.list({\n email: customerEmail,\n })\n ).data[0]\n\n if (!customer?.id) {\n customer = await stripe.customers.create({\n email: customerEmail,\n })\n }\n\n // Find our existing transaction by the payment intent ID\n const transactionsResults = await payload.find({\n collection: transactionsSlug,\n where: {\n 'stripe.paymentIntentID': {\n equals: paymentIntentID,\n },\n },\n })\n\n const transaction = transactionsResults.docs[0]\n\n if (!transactionsResults.totalDocs || !transaction) {\n throw new Error('No transaction found for the provided PaymentIntent ID')\n }\n\n // Verify the payment intent exists and retrieve it\n const paymentIntent = await stripe.paymentIntents.retrieve(paymentIntentID)\n\n const cartID = paymentIntent.metadata.cartID\n const cartItemsSnapshot = paymentIntent.metadata.cartItemsSnapshot\n ? JSON.parse(paymentIntent.metadata.cartItemsSnapshot)\n : undefined\n\n const shippingAddress = paymentIntent.metadata.shippingAddress\n ? JSON.parse(paymentIntent.metadata.shippingAddress)\n : undefined\n\n if (!cartID) {\n throw new Error('Cart ID not found in the PaymentIntent metadata')\n }\n\n if (!cartItemsSnapshot || !Array.isArray(cartItemsSnapshot)) {\n throw new Error('Cart items snapshot not found or invalid in the PaymentIntent metadata')\n }\n\n const order = await payload.create({\n collection: ordersSlug,\n data: {\n amount: paymentIntent.amount,\n currency: paymentIntent.currency.toUpperCase(),\n ...(req.user ? { customer: req.user.id } : { customerEmail }),\n items: cartItemsSnapshot,\n shippingAddress,\n status: 'processing',\n transactions: [transaction.id],\n },\n })\n\n const timestamp = new Date().toISOString()\n\n await payload.update({\n id: cartID,\n collection: 'carts',\n data: {\n purchasedAt: timestamp,\n },\n })\n\n await payload.update({\n id: transaction.id,\n collection: transactionsSlug,\n data: {\n order: order.id,\n status: 'succeeded',\n },\n })\n\n return {\n message: 'Payment initiated successfully',\n orderID: order.id,\n transactionID: transaction.id,\n }\n } catch (error) {\n payload.logger.error(error, 'Error initiating payment with Stripe')\n\n throw new Error(error instanceof Error ? error.message : 'Unknown error initiating payment')\n }\n }\n"],"names":["Stripe","confirmOrder","props","data","ordersSlug","req","transactionsSlug","payload","apiVersion","appInfo","secretKey","customerEmail","paymentIntentID","Error","stripe","name","url","customer","customers","list","email","id","create","transactionsResults","find","collection","where","equals","transaction","docs","totalDocs","paymentIntent","paymentIntents","retrieve","cartID","metadata","cartItemsSnapshot","JSON","parse","undefined","shippingAddress","Array","isArray","order","amount","currency","toUpperCase","user","items","status","transactions","timestamp","Date","toISOString","update","purchasedAt","message","orderID","transactionID","error","logger"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAW3B,OAAO,MAAMC,eACX,CAACC,QACD,OAAO,EAAEC,IAAI,EAAEC,aAAa,QAAQ,EAAEC,GAAG,EAAEC,mBAAmB,cAAc,EAAE;QAC5E,MAAMC,UAAUF,IAAIE,OAAO;QAC3B,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGR,SAAS,CAAC;QAErD,MAAMS,gBAAgBR,KAAKQ,aAAa;QAExC,MAAMC,kBAAkBT,KAAKS,eAAe;QAE5C,IAAI,CAACF,WAAW;YACd,MAAM,IAAIG,MAAM;QAClB;QAEA,IAAI,CAACD,iBAAiB;YACpB,MAAM,IAAIC,MAAM;QAClB;QAEA,MAAMC,SAAS,IAAId,OAAOU,WAAW;YACnC,uEAAuE;YACvE,6DAA6D;YAC7D,yGAAyG;YACzGF,YAAYA,cAAc;YAC1BC,SAASA,WAAW;gBAClBM,MAAM;gBACNC,KAAK;YACP;QACF;QAEA,IAAI;YACF,IAAIC,WAAW,AACb,CAAA,MAAMH,OAAOI,SAAS,CAACC,IAAI,CAAC;gBAC1BC,OAAOT;YACT,EAAC,EACDR,IAAI,CAAC,EAAE;YAET,IAAI,CAACc,UAAUI,IAAI;gBACjBJ,WAAW,MAAMH,OAAOI,SAAS,CAACI,MAAM,CAAC;oBACvCF,OAAOT;gBACT;YACF;YAEA,yDAAyD;YACzD,MAAMY,sBAAsB,MAAMhB,QAAQiB,IAAI,CAAC;gBAC7CC,YAAYnB;gBACZoB,OAAO;oBACL,0BAA0B;wBACxBC,QAAQf;oBACV;gBACF;YACF;YAEA,MAAMgB,cAAcL,oBAAoBM,IAAI,CAAC,EAAE;YAE/C,IAAI,CAACN,oBAAoBO,SAAS,IAAI,CAACF,aAAa;gBAClD,MAAM,IAAIf,MAAM;YAClB;YAEA,mDAAmD;YACnD,MAAMkB,gBAAgB,MAAMjB,OAAOkB,cAAc,CAACC,QAAQ,CAACrB;YAE3D,MAAMsB,SAASH,cAAcI,QAAQ,CAACD,MAAM;YAC5C,MAAME,oBAAoBL,cAAcI,QAAQ,CAACC,iBAAiB,GAC9DC,KAAKC,KAAK,CAACP,cAAcI,QAAQ,CAACC,iBAAiB,IACnDG;YAEJ,MAAMC,kBAAkBT,cAAcI,QAAQ,CAACK,eAAe,GAC1DH,KAAKC,KAAK,CAACP,cAAcI,QAAQ,CAACK,eAAe,IACjDD;YAEJ,IAAI,CAACL,QAAQ;gBACX,MAAM,IAAIrB,MAAM;YAClB;YAEA,IAAI,CAACuB,qBAAqB,CAACK,MAAMC,OAAO,CAACN,oBAAoB;gBAC3D,MAAM,IAAIvB,MAAM;YAClB;YAEA,MAAM8B,QAAQ,MAAMpC,QAAQe,MAAM,CAAC;gBACjCG,YAAYrB;gBACZD,MAAM;oBACJyC,QAAQb,cAAca,MAAM;oBAC5BC,UAAUd,cAAcc,QAAQ,CAACC,WAAW;oBAC5C,GAAIzC,IAAI0C,IAAI,GAAG;wBAAE9B,UAAUZ,IAAI0C,IAAI,CAAC1B,EAAE;oBAAC,IAAI;wBAAEV;oBAAc,CAAC;oBAC5DqC,OAAOZ;oBACPI;oBACAS,QAAQ;oBACRC,cAAc;wBAACtB,YAAYP,EAAE;qBAAC;gBAChC;YACF;YAEA,MAAM8B,YAAY,IAAIC,OAAOC,WAAW;YAExC,MAAM9C,QAAQ+C,MAAM,CAAC;gBACnBjC,IAAIa;gBACJT,YAAY;gBACZtB,MAAM;oBACJoD,aAAaJ;gBACf;YACF;YAEA,MAAM5C,QAAQ+C,MAAM,CAAC;gBACnBjC,IAAIO,YAAYP,EAAE;gBAClBI,YAAYnB;gBACZH,MAAM;oBACJwC,OAAOA,MAAMtB,EAAE;oBACf4B,QAAQ;gBACV;YACF;YAEA,OAAO;gBACLO,SAAS;gBACTC,SAASd,MAAMtB,EAAE;gBACjBqC,eAAe9B,YAAYP,EAAE;YAC/B;QACF,EAAE,OAAOsC,OAAO;YACdpD,QAAQqD,MAAM,CAACD,KAAK,CAACA,OAAO;YAE5B,MAAM,IAAI9C,MAAM8C,iBAAiB9C,QAAQ8C,MAAMH,OAAO,GAAG;QAC3D;IACF,EAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PayloadRequest } from 'payload';
|
|
2
2
|
import type { Stripe } from 'stripe';
|
|
3
|
-
import type { PaymentAdapter, PaymentAdapterArgs, PaymentAdapterClient, PaymentAdapterClientArgs } from '../../../types
|
|
3
|
+
import type { PaymentAdapter, PaymentAdapterArgs, PaymentAdapterClient, PaymentAdapterClientArgs } from '../../../types.js';
|
|
4
4
|
type StripeWebhookHandler = (args: {
|
|
5
5
|
event: Stripe.Event;
|
|
6
6
|
req: PayloadRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/stripe/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/stripe/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,mBAAmB,CAAA;AAM1B,KAAK,oBAAoB,GAAG,CAAC,IAAI,EAAE;IACjC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAE1B,KAAK,qBAAqB,GAAG;IAC3B;;OAEG;IACH,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;IACxC,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IAChC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GAAG,kBAAkB,CAAA;AAEtB,eAAO,MAAM,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,cAmDzD,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;IACxC,cAAc,EAAE,MAAM,CAAA;CACvB,GAAG,wBAAwB,CAAA;AAE5B,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,oBASrE,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/payments/adapters/stripe/index.ts"],"sourcesContent":["import type { Field, GroupField, PayloadRequest } from 'payload'\nimport type { Stripe } from 'stripe'\n\nimport type {\n PaymentAdapter,\n PaymentAdapterArgs,\n PaymentAdapterClient,\n PaymentAdapterClientArgs,\n} from '../../../types
|
|
1
|
+
{"version":3,"sources":["../../../../src/payments/adapters/stripe/index.ts"],"sourcesContent":["import type { Field, GroupField, PayloadRequest } from 'payload'\nimport type { Stripe } from 'stripe'\n\nimport type {\n PaymentAdapter,\n PaymentAdapterArgs,\n PaymentAdapterClient,\n PaymentAdapterClientArgs,\n} from '../../../types.js'\n\nimport { confirmOrder } from './confirmOrder.js'\nimport { webhooksEndpoint } from './endpoints/webhooks.js'\nimport { initiatePayment } from './initiatePayment.js'\n\ntype StripeWebhookHandler = (args: {\n event: Stripe.Event\n req: PayloadRequest\n stripe: Stripe\n}) => Promise<void> | void\n\ntype StripeWebhookHandlers = {\n /**\n * Description of the event (e.g., invoice.created or charge.refunded).\n */\n [webhookName: string]: StripeWebhookHandler\n}\n\nexport type StripeAdapterArgs = {\n /**\n * This library's types only reflect the latest API version.\n *\n * We recommend upgrading your account's API Version to the latest version\n * if you wish to use TypeScript with this library.\n *\n * If you wish to remain on your account's default API version,\n * you may pass `null` or another version instead of the latest version,\n * and add a `@ts-ignore` comment here and anywhere the types differ between API versions.\n *\n * @docs https://stripe.com/docs/api/versioning\n */\n apiVersion?: Stripe.StripeConfig['apiVersion']\n appInfo?: Stripe.StripeConfig['appInfo']\n publishableKey: string\n secretKey: string\n webhooks?: StripeWebhookHandlers\n webhookSecret?: string\n} & PaymentAdapterArgs\n\nexport const stripeAdapter: (props: StripeAdapterArgs) => PaymentAdapter = (props) => {\n const { apiVersion, appInfo, groupOverrides, secretKey, webhooks, webhookSecret } = props\n const label = props?.label || 'Stripe'\n\n const baseFields: Field[] = [\n {\n name: 'customerID',\n type: 'text',\n label: 'Stripe Customer ID',\n },\n {\n name: 'paymentIntentID',\n type: 'text',\n label: 'Stripe PaymentIntent ID',\n },\n ]\n\n const groupField: GroupField = {\n name: 'stripe',\n type: 'group',\n ...groupOverrides,\n admin: {\n condition: (data) => {\n const path = 'paymentMethod'\n\n return data?.[path] === 'stripe'\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: 'stripe',\n confirmOrder: confirmOrder({\n apiVersion,\n appInfo,\n secretKey,\n }),\n endpoints: [webhooksEndpoint({ apiVersion, appInfo, secretKey, webhooks, webhookSecret })],\n group: groupField,\n initiatePayment: initiatePayment({\n apiVersion,\n appInfo,\n secretKey,\n }),\n label,\n }\n}\n\nexport type StripeAdapterClientArgs = {\n /**\n * This library's types only reflect the latest API version.\n *\n * We recommend upgrading your account's API Version to the latest version\n * if you wish to use TypeScript with this library.\n *\n * If you wish to remain on your account's default API version,\n * you may pass `null` or another version instead of the latest version,\n * and add a `@ts-ignore` comment here and anywhere the types differ between API versions.\n *\n * @docs https://stripe.com/docs/api/versioning\n */\n apiVersion?: Stripe.StripeConfig['apiVersion']\n appInfo?: Stripe.StripeConfig['appInfo']\n publishableKey: string\n} & PaymentAdapterClientArgs\n\nexport const stripeAdapterClient: (props: StripeAdapterClientArgs) => PaymentAdapterClient = (\n props,\n) => {\n return {\n name: 'stripe',\n confirmOrder: true,\n initiatePayment: true,\n label: 'Card',\n }\n}\n\nexport type InitiatePaymentReturnType = {\n clientSecret: string\n message: string\n paymentIntentID: string\n}\n"],"names":["confirmOrder","webhooksEndpoint","initiatePayment","stripeAdapter","props","apiVersion","appInfo","groupOverrides","secretKey","webhooks","webhookSecret","label","baseFields","name","type","groupField","admin","condition","data","path","fields","defaultFields","endpoints","group","stripeAdapterClient"],"mappings":"AAUA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,gBAAgB,QAAQ,0BAAyB;AAC1D,SAASC,eAAe,QAAQ,uBAAsB;AAoCtD,OAAO,MAAMC,gBAA8D,CAACC;IAC1E,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEC,cAAc,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,aAAa,EAAE,GAAGN;IACpF,MAAMO,QAAQP,OAAOO,SAAS;IAE9B,MAAMC,aAAsB;QAC1B;YACEC,MAAM;YACNC,MAAM;YACNH,OAAO;QACT;QACA;YACEE,MAAM;YACNC,MAAM;YACNH,OAAO;QACT;KACD;IAED,MAAMI,aAAyB;QAC7BF,MAAM;QACNC,MAAM;QACN,GAAGP,cAAc;QACjBS,OAAO;YACLC,WAAW,CAACC;gBACV,MAAMC,OAAO;gBAEb,OAAOD,MAAM,CAACC,KAAK,KAAK;YAC1B;YACA,GAAGZ,gBAAgBS,KAAK;QAC1B;QACAI,QACEb,gBAAgBa,UAAU,OAAOb,gBAAgBa,WAAW,aACxDb,eAAea,MAAM,CAAC;YAAEC,eAAeT;QAAW,KAClDA;IACR;IAEA,OAAO;QACLC,MAAM;QACNb,cAAcA,aAAa;YACzBK;YACAC;YACAE;QACF;QACAc,WAAW;YAACrB,iBAAiB;gBAAEI;gBAAYC;gBAASE;gBAAWC;gBAAUC;YAAc;SAAG;QAC1Fa,OAAOR;QACPb,iBAAiBA,gBAAgB;YAC/BG;YACAC;YACAE;QACF;QACAG;IACF;AACF,EAAC;AAoBD,OAAO,MAAMa,sBAAgF,CAC3FpB;IAEA,OAAO;QACLS,MAAM;QACNb,cAAc;QACdE,iBAAiB;QACjBS,OAAO;IACT;AACF,EAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Stripe from 'stripe';
|
|
2
|
-
import type { PaymentAdapter } from '../../../types
|
|
2
|
+
import type { PaymentAdapter } from '../../../types.js';
|
|
3
3
|
import type { StripeAdapterArgs } from './index.js';
|
|
4
4
|
type Props = {
|
|
5
5
|
apiVersion?: Stripe.StripeConfig['apiVersion'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initiatePayment.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/stripe/initiatePayment.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"initiatePayment.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/stripe/initiatePayment.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAA6B,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9E,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,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WAAW,CAAC,cAAc,CAAC,CAAC,iBAAiB,CAuH1F,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/payments/adapters/stripe/initiatePayment.ts"],"sourcesContent":["import Stripe from 'stripe'\n\nimport type { PaymentAdapter } from '../../../types
|
|
1
|
+
{"version":3,"sources":["../../../../src/payments/adapters/stripe/initiatePayment.ts"],"sourcesContent":["import Stripe from 'stripe'\n\nimport type { PaymentAdapter } from '../../../types.js'\nimport type { InitiatePaymentReturnType, StripeAdapterArgs } from './index.js'\n\ntype Props = {\n apiVersion?: Stripe.StripeConfig['apiVersion']\n appInfo?: Stripe.StripeConfig['appInfo']\n secretKey: StripeAdapterArgs['secretKey']\n}\n\nexport const initiatePayment: (props: Props) => NonNullable<PaymentAdapter>['initiatePayment'] =\n (props) =>\n async ({ data, req, transactionsSlug }) => {\n const payload = req.payload\n const { apiVersion, appInfo, secretKey } = 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 (!secretKey) {\n throw new Error('Stripe secret key is required.')\n }\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 const stripe = new Stripe(secretKey, {\n // API version can only be the latest, stripe recommends ts ignoring it\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - ignoring since possible versions are not type safe, only the latest version is recognised\n apiVersion: apiVersion || '2025-06-30.preview',\n appInfo: appInfo || {\n name: 'Stripe Payload Plugin',\n url: 'https://payloadcms.com',\n },\n })\n\n try {\n let customer = (\n await stripe.customers.list({\n email: customerEmail,\n })\n ).data[0]\n\n if (!customer?.id) {\n customer = await stripe.customers.create({\n email: customerEmail,\n })\n }\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 return {\n product: productID,\n quantity: item.quantity,\n variant: variantID,\n }\n })\n\n const shippingAddressAsString = JSON.stringify(shippingAddressFromData)\n\n const paymentIntent = await stripe.paymentIntents.create({\n amount,\n automatic_payment_methods: {\n enabled: true,\n },\n currency,\n customer: customer.id,\n metadata: {\n cartID: cart.id,\n cartItemsSnapshot: JSON.stringify(flattenedCart),\n shippingAddress: shippingAddressAsString,\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: 'stripe',\n status: 'pending',\n stripe: {\n customerID: customer.id,\n paymentIntentID: paymentIntent.id,\n },\n },\n })\n\n const returnData: InitiatePaymentReturnType = {\n clientSecret: paymentIntent.client_secret || '',\n message: 'Payment initiated successfully',\n paymentIntentID: paymentIntent.id,\n }\n\n return returnData\n } catch (error) {\n payload.logger.error(error, 'Error initiating payment with Stripe')\n\n throw new Error(error instanceof Error ? error.message : 'Unknown error initiating payment')\n }\n }\n"],"names":["Stripe","initiatePayment","props","data","req","transactionsSlug","payload","apiVersion","appInfo","secretKey","customerEmail","currency","cart","amount","subtotal","billingAddressFromData","billingAddress","shippingAddressFromData","shippingAddress","Error","items","length","stripe","name","url","customer","customers","list","email","id","create","flattenedCart","map","item","productID","product","variantID","variant","undefined","quantity","shippingAddressAsString","JSON","stringify","paymentIntent","paymentIntents","automatic_payment_methods","enabled","metadata","cartID","cartItemsSnapshot","transaction","collection","user","toUpperCase","paymentMethod","status","customerID","paymentIntentID","returnData","clientSecret","client_secret","message","error","logger"],"mappings":"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"}
|