@payloadcms/plugin-ecommerce 3.84.0-canary.1 → 3.84.0-internal.d5d6e43
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/orders/createOrdersCollection.d.ts +6 -0
- package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -1
- package/dist/collections/orders/createOrdersCollection.js +7 -1
- package/dist/collections/orders/createOrdersCollection.js.map +1 -1
- package/dist/collections/transactions/createTransactionsCollection.d.ts +6 -0
- package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -1
- package/dist/collections/transactions/createTransactionsCollection.js +7 -1
- package/dist/collections/transactions/createTransactionsCollection.js.map +1 -1
- package/dist/endpoints/confirmOrder.d.ts +11 -1
- package/dist/endpoints/confirmOrder.d.ts.map +1 -1
- package/dist/endpoints/confirmOrder.js +74 -2
- package/dist/endpoints/confirmOrder.js.map +1 -1
- package/dist/endpoints/initiatePayment.d.ts +11 -1
- package/dist/endpoints/initiatePayment.d.ts.map +1 -1
- package/dist/endpoints/initiatePayment.js +74 -3
- 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/summaryField.d.ts +14 -0
- package/dist/fields/summaryField.d.ts.map +1 -0
- package/dist/fields/summaryField.js +83 -0
- package/dist/fields/summaryField.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/payments/adapters/stripe/index.d.ts +2 -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.map +1 -1
- package/dist/payments/adapters/stripe/initiatePayment.js +6 -3
- package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -1
- package/dist/types/index.d.ts +200 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/runPaymentHooks.d.ts +28 -0
- package/dist/utilities/runPaymentHooks.d.ts.map +1 -0
- package/dist/utilities/runPaymentHooks.js +68 -0
- package/dist/utilities/runPaymentHooks.js.map +1 -0
- package/dist/utilities/runPaymentHooks.spec.js +324 -0
- package/dist/utilities/runPaymentHooks.spec.js.map +1 -0
- package/dist/utilities/sanitizePluginConfig.spec.js +35 -0
- package/dist/utilities/sanitizePluginConfig.spec.js.map +1 -1
- package/package.json +7 -7
|
@@ -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 const cartSecret = data?.secret\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 // Add cart secret to query for guest cart access control\n if (cartSecret && typeof cartSecret === 'string') {\n req.query = req.query || {}\n req.query.secret = cartSecret\n }\n\n cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 2,\n overrideAccess: false,\n req,\n select: {\n id: true,\n currency: true,\n customerEmail: true,\n items: true,\n subtotal: true,\n },\n })\n\n if (!cart) {\n return Response.json(\n {\n message: `Cart with ID ${cartID} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n } else {\n return Response.json(\n {\n message: 'Cart ID is required.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (cart.currency && typeof cart.currency === 'string') {\n currency = cart.currency\n }\n\n // Ensure the currency is provided or inferred in some way\n if (!currency) {\n return Response.json(\n {\n message: 'Currency is required.',\n },\n {\n status: 400,\n },\n )\n }\n\n // 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","cartSecret","secret","customerEmail","email","docs","Array","isArray","length","id","Response","json","message","status","query","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 PaymentHooks,\n ProductsValidation,\n SanitizedEcommercePluginConfig,\n Summary,\n} from '../types/index.js'\n\nimport { defaultProductsValidation } from '../utilities/defaultProductsValidation.js'\nimport { runBeforeInitiatePaymentHooks } from '../utilities/runPaymentHooks.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 * Whether the transactions collection has the `summary` field. When true,\n * the handler will persist the computed summary onto the transaction record\n * after the adapter returns.\n */\n hasHooks?: boolean\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 /**\n * Plugin-level payment hooks that run for all payment methods.\n */\n paymentHooks?: PaymentHooks\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 hasHooks = false,\n paymentHooks,\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 const cartSecret = data?.secret\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 // Add cart secret to query for guest cart access control\n if (cartSecret && typeof cartSecret === 'string') {\n req.query = req.query || {}\n req.query.secret = cartSecret\n }\n\n cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 2,\n overrideAccess: false,\n req,\n select: {\n id: true,\n currency: true,\n customerEmail: true,\n items: true,\n subtotal: true,\n },\n })\n\n if (!cart) {\n return Response.json(\n {\n message: `Cart with ID ${cartID} not found.`,\n },\n {\n status: 404,\n },\n )\n }\n } else {\n return Response.json(\n {\n message: 'Cart ID is required.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (cart.currency && typeof cart.currency === 'string') {\n currency = cart.currency\n }\n\n // Ensure the currency is provided or inferred in some way\n if (!currency) {\n return Response.json(\n {\n message: 'Currency is required.',\n },\n {\n status: 400,\n },\n )\n }\n\n // 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 // Build the initial payment summary from the cart subtotal, then run hooks\n // (plugin-level then adapter-level) to append tax, shipping, discounts, etc.\n const cartSubtotal = cart.subtotal ?? 0\n let summary: Summary = {\n currency,\n lines: [{ type: 'subtotal', amount: cartSubtotal, label: 'Subtotal' }],\n total: cartSubtotal,\n }\n\n const pluginHooks = paymentHooks?.beforeInitiatePayment ?? []\n const adapterHooks = paymentMethod.hooks?.beforeInitiatePayment ?? []\n const allBeforeInitiateHooks = [...pluginHooks, ...adapterHooks]\n\n if (allBeforeInitiateHooks.length > 0) {\n try {\n summary = await runBeforeInitiatePaymentHooks(allBeforeInitiateHooks, {\n billingAddress,\n cart,\n currenciesConfig,\n currency,\n customerEmail,\n req,\n shippingAddress,\n summary,\n })\n } catch (error) {\n payload.logger.error(error, 'Error in beforeInitiatePayment hook.')\n\n return Response.json(\n {\n message:\n error instanceof Error ? error.message : 'Error in beforeInitiatePayment hook.',\n },\n {\n status: 400,\n },\n )\n }\n }\n\n if (summary.total <= 0) {\n return Response.json(\n {\n message: 'Total after adjustments must be greater than zero.',\n },\n {\n status: 400,\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 summary,\n },\n req,\n transactionsSlug,\n })\n\n // Persist the summary onto the transaction so the breakdown is queryable\n // later (receipts, refunds, reporting). The adapter returns the transactionID\n // when it has created a record; if not, persistence is skipped gracefully.\n if (hasHooks && paymentResponse.transactionID) {\n try {\n await payload.update({\n id: paymentResponse.transactionID,\n collection: transactionsSlug,\n data: { summary },\n overrideAccess: true,\n req,\n })\n } catch (error) {\n payload.logger.error(error, 'Failed to persist summary onto transaction.')\n }\n }\n\n return Response.json({ ...paymentResponse, summary })\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","runBeforeInitiatePaymentHooks","initiatePaymentHandler","cartsSlug","currenciesConfig","customersSlug","hasHooks","paymentHooks","paymentMethod","productsSlug","productsValidation","transactionsSlug","variantsSlug","req","data","payload","user","currency","defaultCurrency","cartID","cart","undefined","billingAddress","shippingAddress","cartSecret","secret","customerEmail","email","docs","Array","isArray","length","id","Response","json","message","status","query","findByID","collection","depth","overrideAccess","select","items","subtotal","supportedCurrencies","find","c","code","toLocaleLowerCase","item","priceField","toUpperCase","quantity","product","variant","inventory","error","logger","Error","cause","cartSubtotal","summary","lines","type","amount","label","total","pluginHooks","beforeInitiatePayment","adapterHooks","hooks","allBeforeInitiateHooks","paymentResponse","initiatePayment","transactionID","update"],"mappings":"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"}
|
package/dist/exports/types.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { CollectionOverride, CollectionSlugMap, ContextProps, CountryType, CurrenciesConfig, Currency, EcommerceCollections, EcommerceConfig, EcommerceContextType, EcommercePluginConfig, PaymentAdapter, PaymentAdapterArgs, PaymentAdapterClient, PaymentAdapterClientArgs, ProductsValidation, SanitizedEcommercePluginConfig, } from '../types/index.js';
|
|
1
|
+
export type { AfterConfirmOrderHook, BeforeConfirmOrderHook, BeforeInitiatePaymentHook, CollectionOverride, CollectionSlugMap, ContextProps, CountryType, CurrenciesConfig, Currency, EcommerceCollections, EcommerceConfig, EcommerceContextType, EcommercePluginConfig, Line, LineType, PaymentAdapter, PaymentAdapterArgs, PaymentAdapterClient, PaymentAdapterClientArgs, PaymentHooks, ProductsValidation, SanitizedEcommercePluginConfig, Summary, } from '../types/index.js';
|
|
2
2
|
export type { TypedEcommerce } from '../types/utilities.js';
|
|
3
3
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exports/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,8BAA8B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exports/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,EAClB,8BAA8B,EAC9B,OAAO,GACR,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/exports/types.ts"],"sourcesContent":["export type {\n CollectionOverride,\n CollectionSlugMap,\n ContextProps,\n CountryType,\n CurrenciesConfig,\n Currency,\n EcommerceCollections,\n EcommerceConfig,\n EcommerceContextType,\n EcommercePluginConfig,\n PaymentAdapter,\n PaymentAdapterArgs,\n PaymentAdapterClient,\n PaymentAdapterClientArgs,\n ProductsValidation,\n SanitizedEcommercePluginConfig,\n} from '../types/index.js'\n\nexport type { TypedEcommerce } from '../types/utilities.js'\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/exports/types.ts"],"sourcesContent":["export type {\n AfterConfirmOrderHook,\n BeforeConfirmOrderHook,\n BeforeInitiatePaymentHook,\n CollectionOverride,\n CollectionSlugMap,\n ContextProps,\n CountryType,\n CurrenciesConfig,\n Currency,\n EcommerceCollections,\n EcommerceConfig,\n EcommerceContextType,\n EcommercePluginConfig,\n Line,\n LineType,\n PaymentAdapter,\n PaymentAdapterArgs,\n PaymentAdapterClient,\n PaymentAdapterClientArgs,\n PaymentHooks,\n ProductsValidation,\n SanitizedEcommercePluginConfig,\n Summary,\n} from '../types/index.js'\n\nexport type { TypedEcommerce } from '../types/utilities.js'\n"],"names":[],"mappings":"AA0BA,WAA2D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GroupField } from 'payload';
|
|
2
|
+
import type { CurrenciesConfig } from '../types/index.js';
|
|
3
|
+
type Props = {
|
|
4
|
+
currenciesConfig: CurrenciesConfig;
|
|
5
|
+
overrides?: Partial<GroupField>;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* A read-only group field that records the computed payment summary for a
|
|
9
|
+
* transaction or order — total, currency, and the ordered list of lines
|
|
10
|
+
* (subtotal, tax, shipping, discount, etc.) produced by the payment hook pipeline.
|
|
11
|
+
*/
|
|
12
|
+
export declare const summaryField: (props: Props) => GroupField;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=summaryField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summaryField.d.ts","sourceRoot":"","sources":["../../src/fields/summaryField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,SAAS,CAAA;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAKzD,KAAK,KAAK,GAAG;IACX,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;CAChC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,UAoD5C,CAAA"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { amountField } from './amountField.js';
|
|
2
|
+
import { currencyField } from './currencyField.js';
|
|
3
|
+
/**
|
|
4
|
+
* A read-only group field that records the computed payment summary for a
|
|
5
|
+
* transaction or order — total, currency, and the ordered list of lines
|
|
6
|
+
* (subtotal, tax, shipping, discount, etc.) produced by the payment hook pipeline.
|
|
7
|
+
*/ export const summaryField = ({ currenciesConfig, overrides })=>{
|
|
8
|
+
const lineFields = [
|
|
9
|
+
{
|
|
10
|
+
name: 'type',
|
|
11
|
+
type: 'select',
|
|
12
|
+
options: [
|
|
13
|
+
{
|
|
14
|
+
label: 'Subtotal',
|
|
15
|
+
value: 'subtotal'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
label: 'Tax',
|
|
19
|
+
value: 'tax'
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
label: 'Shipping',
|
|
23
|
+
value: 'shipping'
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
label: 'Discount',
|
|
27
|
+
value: 'discount'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
label: 'Gift Card',
|
|
31
|
+
value: 'gift_card'
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
label: 'Custom',
|
|
35
|
+
value: 'custom'
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
required: true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'label',
|
|
42
|
+
type: 'text',
|
|
43
|
+
required: true
|
|
44
|
+
},
|
|
45
|
+
amountField({
|
|
46
|
+
currenciesConfig,
|
|
47
|
+
overrides: {
|
|
48
|
+
required: true
|
|
49
|
+
}
|
|
50
|
+
}),
|
|
51
|
+
{
|
|
52
|
+
name: 'metadata',
|
|
53
|
+
type: 'json'
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
const field = {
|
|
57
|
+
name: 'summary',
|
|
58
|
+
type: 'group',
|
|
59
|
+
admin: {
|
|
60
|
+
readOnly: true
|
|
61
|
+
},
|
|
62
|
+
fields: [
|
|
63
|
+
amountField({
|
|
64
|
+
currenciesConfig,
|
|
65
|
+
overrides: {
|
|
66
|
+
name: 'total'
|
|
67
|
+
}
|
|
68
|
+
}),
|
|
69
|
+
currencyField({
|
|
70
|
+
currenciesConfig
|
|
71
|
+
}),
|
|
72
|
+
{
|
|
73
|
+
name: 'lines',
|
|
74
|
+
type: 'array',
|
|
75
|
+
fields: lineFields
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
...overrides
|
|
79
|
+
};
|
|
80
|
+
return field;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=summaryField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/fields/summaryField.ts"],"sourcesContent":["import type { Field, GroupField } from 'payload'\n\nimport type { CurrenciesConfig } from '../types/index.js'\n\nimport { amountField } from './amountField.js'\nimport { currencyField } from './currencyField.js'\n\ntype Props = {\n currenciesConfig: CurrenciesConfig\n overrides?: Partial<GroupField>\n}\n\n/**\n * A read-only group field that records the computed payment summary for a\n * transaction or order — total, currency, and the ordered list of lines\n * (subtotal, tax, shipping, discount, etc.) produced by the payment hook pipeline.\n */\nexport const summaryField: (props: Props) => GroupField = ({ currenciesConfig, overrides }) => {\n const lineFields: Field[] = [\n {\n name: 'type',\n type: 'select',\n options: [\n { label: 'Subtotal', value: 'subtotal' },\n { label: 'Tax', value: 'tax' },\n { label: 'Shipping', value: 'shipping' },\n { label: 'Discount', value: 'discount' },\n { label: 'Gift Card', value: 'gift_card' },\n { label: 'Custom', value: 'custom' },\n ],\n required: true,\n },\n {\n name: 'label',\n type: 'text',\n required: true,\n },\n amountField({\n currenciesConfig,\n overrides: { required: true },\n }),\n {\n name: 'metadata',\n type: 'json',\n },\n ]\n\n const field: GroupField = {\n name: 'summary',\n type: 'group',\n admin: {\n readOnly: true,\n },\n fields: [\n amountField({\n currenciesConfig,\n overrides: { name: 'total' },\n }),\n currencyField({ currenciesConfig }),\n {\n name: 'lines',\n type: 'array',\n fields: lineFields,\n },\n ],\n ...overrides,\n }\n\n return field\n}\n"],"names":["amountField","currencyField","summaryField","currenciesConfig","overrides","lineFields","name","type","options","label","value","required","field","admin","readOnly","fields"],"mappings":"AAIA,SAASA,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,aAAa,QAAQ,qBAAoB;AAOlD;;;;CAIC,GACD,OAAO,MAAMC,eAA6C,CAAC,EAAEC,gBAAgB,EAAEC,SAAS,EAAE;IACxF,MAAMC,aAAsB;QAC1B;YACEC,MAAM;YACNC,MAAM;YACNC,SAAS;gBACP;oBAAEC,OAAO;oBAAYC,OAAO;gBAAW;gBACvC;oBAAED,OAAO;oBAAOC,OAAO;gBAAM;gBAC7B;oBAAED,OAAO;oBAAYC,OAAO;gBAAW;gBACvC;oBAAED,OAAO;oBAAYC,OAAO;gBAAW;gBACvC;oBAAED,OAAO;oBAAaC,OAAO;gBAAY;gBACzC;oBAAED,OAAO;oBAAUC,OAAO;gBAAS;aACpC;YACDC,UAAU;QACZ;QACA;YACEL,MAAM;YACNC,MAAM;YACNI,UAAU;QACZ;QACAX,YAAY;YACVG;YACAC,WAAW;gBAAEO,UAAU;YAAK;QAC9B;QACA;YACEL,MAAM;YACNC,MAAM;QACR;KACD;IAED,MAAMK,QAAoB;QACxBN,MAAM;QACNC,MAAM;QACNM,OAAO;YACLC,UAAU;QACZ;QACAC,QAAQ;YACNf,YAAY;gBACVG;gBACAC,WAAW;oBAAEE,MAAM;gBAAQ;YAC7B;YACAL,cAAc;gBAAEE;YAAiB;YACjC;gBACEG,MAAM;gBACNC,MAAM;gBACNQ,QAAQV;YACV;SACD;QACD,GAAGD,SAAS;IACd;IAEA,OAAOQ;AACT,EAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,SAAS,CAAA;AAK/C,OAAO,KAAK,EAAE,qBAAqB,EAAkC,MAAM,kBAAkB,CAAA;AAE7F,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;AAQrG,eAAO,MAAM,eAAe,kBACV,qBAAqB,sBACd,MAAM,KAAG,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,SAAS,CAAA;AAK/C,OAAO,KAAK,EAAE,qBAAqB,EAAkC,MAAM,kBAAkB,CAAA;AAE7F,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;AAQrG,eAAO,MAAM,eAAe,kBACV,qBAAqB,sBACd,MAAM,KAAG,OAAO,CAAC,MAAM,CAoW7C,CAAA;AAEH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,EACxB,4BAA4B,GAC7B,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0DAA0D,CAAA;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAC3E,YAAY,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AACzE,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
|
@@ -21,6 +21,10 @@ export const ecommercePlugin = (pluginConfig)=>async (incomingConfig)=>{
|
|
|
21
21
|
pluginConfig
|
|
22
22
|
});
|
|
23
23
|
const accessConfig = sanitizedPluginConfig.access;
|
|
24
|
+
// Payment hooks are opt-in. When any hook is configured (either plugin-level
|
|
25
|
+
// or on an adapter), the default transactions and orders collections gain a
|
|
26
|
+
// `summary` field that records the breakdown produced by the hook pipeline.
|
|
27
|
+
const hasHooks = Boolean(sanitizedPluginConfig.payments.hooks) || (sanitizedPluginConfig.payments.paymentMethods ?? []).some((pm)=>Boolean(pm.hooks));
|
|
24
28
|
// Ensure collections exists
|
|
25
29
|
if (!incomingConfig.collections) {
|
|
26
30
|
incomingConfig.collections = [];
|
|
@@ -120,6 +124,7 @@ export const ecommercePlugin = (pluginConfig)=>async (incomingConfig)=>{
|
|
|
120
124
|
currenciesConfig,
|
|
121
125
|
customersSlug: collectionSlugMap.customers,
|
|
122
126
|
enableVariants,
|
|
127
|
+
hasHooks,
|
|
123
128
|
productsSlug: collectionSlugMap.products,
|
|
124
129
|
variantsSlug: collectionSlugMap.variants ?? 'variants'
|
|
125
130
|
});
|
|
@@ -135,13 +140,16 @@ export const ecommercePlugin = (pluginConfig)=>async (incomingConfig)=>{
|
|
|
135
140
|
incomingConfig.endpoints = [];
|
|
136
141
|
}
|
|
137
142
|
const productsValidation = typeof sanitizedPluginConfig.products === 'object' && sanitizedPluginConfig.products.validation || undefined;
|
|
143
|
+
const paymentHooks = sanitizedPluginConfig.payments.hooks;
|
|
138
144
|
paymentMethods.forEach((paymentMethod)=>{
|
|
139
145
|
const methodPath = `/payments/${paymentMethod.name}`;
|
|
140
146
|
const endpoints = [];
|
|
141
147
|
const initiatePayment = {
|
|
142
148
|
handler: initiatePaymentHandler({
|
|
143
149
|
currenciesConfig,
|
|
150
|
+
hasHooks,
|
|
144
151
|
inventory: sanitizedPluginConfig.inventory,
|
|
152
|
+
paymentHooks,
|
|
145
153
|
paymentMethod,
|
|
146
154
|
productsSlug: collectionSlugMap.products,
|
|
147
155
|
productsValidation,
|
|
@@ -155,7 +163,9 @@ export const ecommercePlugin = (pluginConfig)=>async (incomingConfig)=>{
|
|
|
155
163
|
handler: confirmOrderHandler({
|
|
156
164
|
cartsSlug: collectionSlugMap.carts,
|
|
157
165
|
currenciesConfig,
|
|
166
|
+
hasHooks,
|
|
158
167
|
ordersSlug: collectionSlugMap.orders,
|
|
168
|
+
paymentHooks,
|
|
159
169
|
paymentMethod,
|
|
160
170
|
productsSlug: collectionSlugMap.products,
|
|
161
171
|
productsValidation,
|
|
@@ -189,6 +199,7 @@ export const ecommercePlugin = (pluginConfig)=>async (incomingConfig)=>{
|
|
|
189
199
|
currenciesConfig,
|
|
190
200
|
customersSlug: collectionSlugMap.customers,
|
|
191
201
|
enableVariants,
|
|
202
|
+
hasHooks,
|
|
192
203
|
ordersSlug: collectionSlugMap.orders,
|
|
193
204
|
paymentMethods,
|
|
194
205
|
productsSlug: collectionSlugMap.products,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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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"}
|
|
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 // Payment hooks are opt-in. When any hook is configured (either plugin-level\n // or on an adapter), the default transactions and orders collections gain a\n // `summary` field that records the breakdown produced by the hook pipeline.\n const hasHooks =\n Boolean(sanitizedPluginConfig.payments.hooks) ||\n (sanitizedPluginConfig.payments.paymentMethods ?? []).some((pm) => Boolean(pm.hooks))\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 hasHooks,\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 const paymentHooks = sanitizedPluginConfig.payments.hooks\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 hasHooks,\n inventory: sanitizedPluginConfig.inventory,\n paymentHooks,\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 hasHooks,\n ordersSlug: collectionSlugMap.orders,\n paymentHooks,\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 hasHooks,\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","hasHooks","Boolean","payments","hooks","paymentMethods","some","pm","collections","productsConfig","products","variants","undefined","enableVariants","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","length","Array","isArray","endpoints","productsValidation","validation","paymentHooks","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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PayloadRequest } from 'payload';
|
|
1
|
+
import type { DefaultDocumentIDType, PayloadRequest } from 'payload';
|
|
2
2
|
import type { Stripe } from 'stripe';
|
|
3
3
|
import type { PaymentAdapter, PaymentAdapterArgs, PaymentAdapterClient, PaymentAdapterClientArgs } from '../../../types/index.js';
|
|
4
4
|
type StripeWebhookHandler = (args: {
|
|
@@ -55,6 +55,7 @@ export type InitiatePaymentReturnType = {
|
|
|
55
55
|
clientSecret: string;
|
|
56
56
|
message: string;
|
|
57
57
|
paymentIntentID: string;
|
|
58
|
+
transactionID: DefaultDocumentIDType;
|
|
58
59
|
};
|
|
59
60
|
export {};
|
|
60
61
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/stripe/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAqB,cAAc,EAAE,MAAM,SAAS,CAAA;AACvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,yBAAyB,CAAA;AAMhC,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;IACvB,aAAa,EAAE,qBAAqB,CAAA;CACrC,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/index.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
|
+
{"version":3,"sources":["../../../../src/payments/adapters/stripe/index.ts"],"sourcesContent":["import type { DefaultDocumentIDType, Field, GroupField, PayloadRequest } from 'payload'\nimport type { Stripe } from 'stripe'\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\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 transactionID: DefaultDocumentIDType\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 +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,yBAAyB,CAAA;AAC7D,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,
|
|
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,yBAAyB,CAAA;AAC7D,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,CAgI1F,CAAA"}
|
|
@@ -5,7 +5,8 @@ export const initiatePayment = (props)=>async ({ data, req, transactionsSlug })=
|
|
|
5
5
|
const customerEmail = data.customerEmail;
|
|
6
6
|
const currency = data.currency;
|
|
7
7
|
const cart = data.cart;
|
|
8
|
-
const
|
|
8
|
+
const summary = data.summary;
|
|
9
|
+
const amount = summary.total;
|
|
9
10
|
const billingAddressFromData = data.billingAddress;
|
|
10
11
|
const shippingAddressFromData = data.shippingAddress;
|
|
11
12
|
if (!secretKey) {
|
|
@@ -68,7 +69,8 @@ export const initiatePayment = (props)=>async ({ data, req, transactionsSlug })=
|
|
|
68
69
|
metadata: {
|
|
69
70
|
cartID: cart.id,
|
|
70
71
|
cartItemsSnapshot: JSON.stringify(flattenedCart),
|
|
71
|
-
shippingAddress: shippingAddressAsString
|
|
72
|
+
shippingAddress: shippingAddressAsString,
|
|
73
|
+
summary: JSON.stringify(summary)
|
|
72
74
|
}
|
|
73
75
|
});
|
|
74
76
|
// Create a transaction for the payment intent in the database
|
|
@@ -97,7 +99,8 @@ export const initiatePayment = (props)=>async ({ data, req, transactionsSlug })=
|
|
|
97
99
|
const returnData = {
|
|
98
100
|
clientSecret: paymentIntent.client_secret || '',
|
|
99
101
|
message: 'Payment initiated successfully',
|
|
100
|
-
paymentIntentID: paymentIntent.id
|
|
102
|
+
paymentIntentID: paymentIntent.id,
|
|
103
|
+
transactionID: transaction.id
|
|
101
104
|
};
|
|
102
105
|
return returnData;
|
|
103
106
|
} catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/payments/adapters/stripe/initiatePayment.ts"],"sourcesContent":["import Stripe from 'stripe'\n\nimport type { PaymentAdapter } from '../../../types/index.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 =
|
|
1
|
+
{"version":3,"sources":["../../../../src/payments/adapters/stripe/initiatePayment.ts"],"sourcesContent":["import Stripe from 'stripe'\n\nimport type { PaymentAdapter } from '../../../types/index.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 summary = data.summary\n const amount = summary.total\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 // 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 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 summary: JSON.stringify(summary),\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 req,\n })\n\n const returnData: InitiatePaymentReturnType = {\n clientSecret: paymentIntent.client_secret || '',\n message: 'Payment initiated successfully',\n paymentIntentID: paymentIntent.id,\n transactionID: transaction.id,\n }\n\n return returnData\n } catch (error) {\n payload.logger.error({ err: error, msg: '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","summary","amount","total","billingAddressFromData","billingAddress","shippingAddressFromData","shippingAddress","Error","items","length","stripe","name","url","customer","customers","list","email","id","create","flattenedCart","map","item","productID","product","variantID","variant","undefined","_product","_variant","customProperties","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","transactionID","error","logger","err","msg"],"mappings":"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"}
|