@payloadcms/plugin-ecommerce 4.0.0-internal.4804abd → 4.0.0-internal.4c2ee12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +6 -0
  3. package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -1
  4. package/dist/collections/addresses/createAddressesCollection.js +1 -0
  5. package/dist/collections/addresses/createAddressesCollection.js.map +1 -1
  6. package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -1
  7. package/dist/collections/addresses/hooks/beforeChange.js +3 -2
  8. package/dist/collections/addresses/hooks/beforeChange.js.map +1 -1
  9. package/dist/collections/carts/beforeChange.d.ts.map +1 -1
  10. package/dist/collections/carts/beforeChange.js +2 -0
  11. package/dist/collections/carts/beforeChange.js.map +1 -1
  12. package/dist/collections/carts/createCartsCollection.d.ts.map +1 -1
  13. package/dist/collections/carts/createCartsCollection.js +1 -0
  14. package/dist/collections/carts/createCartsCollection.js.map +1 -1
  15. package/dist/collections/carts/endpoints/addItem.d.ts.map +1 -1
  16. package/dist/collections/carts/endpoints/clearCart.d.ts.map +1 -1
  17. package/dist/collections/carts/endpoints/mergeCart.d.ts.map +1 -1
  18. package/dist/collections/carts/endpoints/removeItem.d.ts.map +1 -1
  19. package/dist/collections/carts/endpoints/updateItem.d.ts.map +1 -1
  20. package/dist/collections/carts/hasCartSecretAccess.d.ts.map +1 -1
  21. package/dist/collections/carts/operations/addItem.d.ts.map +1 -1
  22. package/dist/collections/carts/operations/clearCart.d.ts.map +1 -1
  23. package/dist/collections/carts/operations/createRequestWithSecret.d.ts.map +1 -1
  24. package/dist/collections/carts/operations/mergeCart.d.ts.map +1 -1
  25. package/dist/collections/carts/operations/removeItem.d.ts.map +1 -1
  26. package/dist/collections/carts/operations/updateItem.d.ts.map +1 -1
  27. package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -1
  28. package/dist/collections/orders/createOrdersCollection.js +1 -0
  29. package/dist/collections/orders/createOrdersCollection.js.map +1 -1
  30. package/dist/collections/products/createProductsCollection.d.ts.map +1 -1
  31. package/dist/collections/products/createProductsCollection.js +1 -0
  32. package/dist/collections/products/createProductsCollection.js.map +1 -1
  33. package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -1
  34. package/dist/collections/transactions/createTransactionsCollection.js +1 -0
  35. package/dist/collections/transactions/createTransactionsCollection.js.map +1 -1
  36. package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -1
  37. package/dist/collections/variants/createVariantOptionsCollection.js +1 -0
  38. package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -1
  39. package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -1
  40. package/dist/collections/variants/createVariantTypesCollection.js +1 -0
  41. package/dist/collections/variants/createVariantTypesCollection.js.map +1 -1
  42. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.d.ts.map +1 -1
  43. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js +2 -0
  44. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js.map +1 -1
  45. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.d.ts.map +1 -1
  46. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js +1 -0
  47. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js.map +1 -1
  48. package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -1
  49. package/dist/collections/variants/createVariantsCollection/index.js +1 -0
  50. package/dist/collections/variants/createVariantsCollection/index.js.map +1 -1
  51. package/dist/endpoints/confirmOrder.d.ts.map +1 -1
  52. package/dist/endpoints/confirmOrder.js +306 -44
  53. package/dist/endpoints/confirmOrder.js.map +1 -1
  54. package/dist/endpoints/initiatePayment.d.ts.map +1 -1
  55. package/dist/endpoints/initiatePayment.js +2 -0
  56. package/dist/endpoints/initiatePayment.js.map +1 -1
  57. package/dist/exports/types.d.ts +1 -1
  58. package/dist/exports/types.d.ts.map +1 -1
  59. package/dist/exports/types.js.map +1 -1
  60. package/dist/fields/pricesField.d.ts.map +1 -1
  61. package/dist/fields/pricesField.js +39 -39
  62. package/dist/fields/pricesField.js.map +1 -1
  63. package/dist/fields/statusField.d.ts.map +1 -1
  64. package/dist/fields/statusField.js +5 -0
  65. package/dist/fields/statusField.js.map +1 -1
  66. package/dist/index.d.ts +1 -2
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +7 -2
  69. package/dist/index.js.map +1 -1
  70. package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -1
  71. package/dist/payments/adapters/stripe/confirmOrder.js +108 -75
  72. package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -1
  73. package/dist/payments/adapters/stripe/initiatePayment.d.ts.map +1 -1
  74. package/dist/payments/adapters/stripe/initiatePayment.js +1 -0
  75. package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -1
  76. package/dist/payments/adapters/stripe/validateSettlement.d.ts +37 -0
  77. package/dist/payments/adapters/stripe/validateSettlement.d.ts.map +1 -0
  78. package/dist/payments/adapters/stripe/validateSettlement.js +157 -0
  79. package/dist/payments/adapters/stripe/validateSettlement.js.map +1 -0
  80. package/dist/react/provider/index.d.ts.map +1 -1
  81. package/dist/react/provider/index.js +75 -34
  82. package/dist/react/provider/index.js.map +1 -1
  83. package/dist/react/provider/utilities.d.ts.map +1 -1
  84. package/dist/translations/languages/ar.d.ts.map +1 -1
  85. package/dist/translations/languages/az.d.ts.map +1 -1
  86. package/dist/translations/languages/bg.d.ts.map +1 -1
  87. package/dist/translations/languages/ca.d.ts.map +1 -1
  88. package/dist/translations/languages/cs.d.ts.map +1 -1
  89. package/dist/translations/languages/da.d.ts.map +1 -1
  90. package/dist/translations/languages/de.d.ts.map +1 -1
  91. package/dist/translations/languages/en.d.ts.map +1 -1
  92. package/dist/translations/languages/es.d.ts.map +1 -1
  93. package/dist/translations/languages/et.d.ts.map +1 -1
  94. package/dist/translations/languages/fa.d.ts.map +1 -1
  95. package/dist/translations/languages/fr.d.ts.map +1 -1
  96. package/dist/translations/languages/he.d.ts.map +1 -1
  97. package/dist/translations/languages/hr.d.ts.map +1 -1
  98. package/dist/translations/languages/hu.d.ts.map +1 -1
  99. package/dist/translations/languages/hy.d.ts.map +1 -1
  100. package/dist/translations/languages/is.d.ts.map +1 -1
  101. package/dist/translations/languages/it.d.ts.map +1 -1
  102. package/dist/translations/languages/ja.d.ts.map +1 -1
  103. package/dist/translations/languages/ko.d.ts.map +1 -1
  104. package/dist/translations/languages/lt.d.ts.map +1 -1
  105. package/dist/translations/languages/my.d.ts.map +1 -1
  106. package/dist/translations/languages/nb.d.ts.map +1 -1
  107. package/dist/translations/languages/nl.d.ts.map +1 -1
  108. package/dist/translations/languages/pl.d.ts.map +1 -1
  109. package/dist/translations/languages/pt.d.ts.map +1 -1
  110. package/dist/translations/languages/ro.d.ts.map +1 -1
  111. package/dist/translations/languages/rs.d.ts.map +1 -1
  112. package/dist/translations/languages/rsLatin.d.ts.map +1 -1
  113. package/dist/translations/languages/ru.d.ts.map +1 -1
  114. package/dist/translations/languages/sk.d.ts.map +1 -1
  115. package/dist/translations/languages/sl.d.ts.map +1 -1
  116. package/dist/translations/languages/sv.d.ts.map +1 -1
  117. package/dist/translations/languages/ta.d.ts.map +1 -1
  118. package/dist/translations/languages/th.d.ts.map +1 -1
  119. package/dist/translations/languages/tr.d.ts.map +1 -1
  120. package/dist/translations/languages/uk.d.ts.map +1 -1
  121. package/dist/translations/languages/vi.d.ts.map +1 -1
  122. package/dist/translations/languages/zh.d.ts.map +1 -1
  123. package/dist/translations/languages/zhTw.d.ts.map +1 -1
  124. package/dist/types/index.d.ts +33 -7
  125. package/dist/types/index.d.ts.map +1 -1
  126. package/dist/types/index.js.map +1 -1
  127. package/dist/ui/PriceInput/FormattedInput.js +2 -2
  128. package/dist/ui/PriceInput/FormattedInput.js.map +1 -1
  129. package/dist/ui/PriceInput/index.css +19 -31
  130. package/dist/ui/PriceRowLabel/index.css +2 -2
  131. package/dist/ui/VariantOptionsSelector/index.css +8 -10
  132. package/dist/ui/VariantOptionsSelector/index.d.ts.map +1 -1
  133. package/dist/ui/VariantOptionsSelector/index.js +3 -1
  134. package/dist/ui/VariantOptionsSelector/index.js.map +1 -1
  135. package/dist/ui/utilities.d.ts.map +1 -1
  136. package/dist/utilities/accessComposition.d.ts.map +1 -1
  137. package/dist/utilities/getCollectionSlugMap.d.ts.map +1 -1
  138. package/dist/utilities/pushTypeScriptProperties.d.ts.map +1 -1
  139. package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -1
  140. package/package.json +10 -10
  141. package/dist/@types/assets.d.js +0 -2
  142. package/dist/@types/assets.d.js.map +0 -1
  143. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js +0 -358
  144. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js.map +0 -1
  145. package/dist/payments/adapters/stripe/confirmOrder.spec.js +0 -166
  146. package/dist/payments/adapters/stripe/confirmOrder.spec.js.map +0 -1
  147. package/dist/utilities/accessComposition.spec.js +0 -765
  148. package/dist/utilities/accessComposition.spec.js.map +0 -1
  149. package/dist/utilities/defaultProductsValidation.spec.js +0 -384
  150. package/dist/utilities/defaultProductsValidation.spec.js.map +0 -1
  151. package/dist/utilities/getCollectionSlugMap.spec.js +0 -254
  152. package/dist/utilities/getCollectionSlugMap.spec.js.map +0 -1
  153. package/dist/utilities/sanitizePluginConfig.spec.js +0 -516
  154. package/dist/utilities/sanitizePluginConfig.spec.js.map +0 -1
@@ -1,15 +1,18 @@
1
1
  import Stripe from 'stripe';
2
- export const confirmOrder = (props)=>async ({ cartsSlug = 'carts', data, ordersSlug = 'orders', req, transactionsSlug = 'transactions' })=>{
2
+ import { normalizeEmail, validateSettlement } from './validateSettlement.js';
3
+ export const confirmOrder = (props)=>async ({ data, finalizeOrder, req, transactionsSlug = 'transactions' })=>{
3
4
  const payload = req.payload;
4
5
  const { apiVersion, appInfo, secretKey } = props || {};
5
- const customerEmail = data.customerEmail;
6
6
  const paymentIntentID = data.paymentIntentID;
7
7
  if (!secretKey) {
8
8
  throw new Error('Stripe secret key is required');
9
9
  }
10
- if (!paymentIntentID) {
10
+ if (typeof paymentIntentID !== 'string' || !paymentIntentID) {
11
11
  throw new Error('PaymentIntent ID is required');
12
12
  }
13
+ if (typeof finalizeOrder !== 'function') {
14
+ throw new Error('Core order finalizer is required');
15
+ }
13
16
  const stripe = new Stripe(secretKey, {
14
17
  // API version can only be the latest, stripe recommends ts ignoring it
15
18
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -21,86 +24,56 @@ export const confirmOrder = (props)=>async ({ cartsSlug = 'carts', data, ordersS
21
24
  }
22
25
  });
23
26
  try {
24
- let customer = (await stripe.customers.list({
25
- email: customerEmail
26
- })).data[0];
27
- if (!customer?.id) {
28
- customer = await stripe.customers.create({
29
- email: customerEmail
30
- });
31
- }
32
- // Find our existing transaction by the payment intent ID
33
- const transactionsResults = await payload.find({
34
- collection: transactionsSlug,
27
+ const transaction = await findTransaction({
28
+ paymentIntentID,
35
29
  req,
36
- where: {
37
- 'stripe.paymentIntentID': {
38
- equals: paymentIntentID
39
- }
40
- }
30
+ transactionsSlug
31
+ });
32
+ const transactionID = requireDocumentID({
33
+ fieldName: 'transaction ID',
34
+ value: transaction.id
41
35
  });
42
- const transaction = transactionsResults.docs[0];
43
- if (!transactionsResults.totalDocs || !transaction) {
44
- throw new Error('No transaction found for the provided PaymentIntent ID');
45
- }
46
36
  const paymentIntent = await stripe.paymentIntents.retrieve(paymentIntentID);
47
- if (paymentIntent.status !== 'succeeded') {
48
- throw new Error(`Payment not completed.`);
49
- }
50
- const cartID = paymentIntent.metadata.cartID;
51
- const cartItemsSnapshot = paymentIntent.metadata.cartItemsSnapshot ? JSON.parse(paymentIntent.metadata.cartItemsSnapshot) : undefined;
52
- const shippingAddress = paymentIntent.metadata.shippingAddress ? JSON.parse(paymentIntent.metadata.shippingAddress) : undefined;
53
- if (!cartID) {
54
- throw new Error('Cart ID not found in the PaymentIntent metadata');
55
- }
56
- if (!cartItemsSnapshot || !Array.isArray(cartItemsSnapshot)) {
57
- throw new Error('Cart items snapshot not found or invalid in the PaymentIntent metadata');
58
- }
59
- const order = await payload.create({
60
- collection: ordersSlug,
61
- data: {
62
- amount: paymentIntent.amount,
63
- currency: paymentIntent.currency.toUpperCase(),
64
- ...req.user ? {
65
- customer: req.user.id
66
- } : {
67
- customerEmail
68
- },
37
+ const cartItemsSnapshot = parseRequiredMetadata({
38
+ fieldName: 'cartItemsSnapshot',
39
+ value: paymentIntent.metadata.cartItemsSnapshot
40
+ });
41
+ const shippingAddress = parseOptionalMetadata({
42
+ fieldName: 'shippingAddress',
43
+ value: paymentIntent.metadata.shippingAddress
44
+ });
45
+ const purchaser = req.user === null || req.user === undefined ? {
46
+ customerEmail: normalizeEmail(data.customerEmail)
47
+ } : {
48
+ customer: requireDocumentID({
49
+ fieldName: 'authenticated customer ID',
50
+ value: req.user.id
51
+ })
52
+ };
53
+ validateSettlement({
54
+ canonicalCartID: data.cartID,
55
+ cartItemsSnapshot,
56
+ customerEmail: data.customerEmail,
57
+ paymentIntent,
58
+ paymentIntentID,
59
+ transaction,
60
+ user: req.user
61
+ });
62
+ const order = await finalizeOrder({
63
+ orderData: {
64
+ amount: transaction.amount,
65
+ currency: transaction.currency,
66
+ ...purchaser,
69
67
  items: cartItemsSnapshot,
70
68
  shippingAddress,
71
- status: 'processing',
72
- transactions: [
73
- transaction.id
74
- ]
75
- },
76
- req
77
- });
78
- const timestamp = new Date().toISOString();
79
- await payload.update({
80
- id: cartID,
81
- collection: cartsSlug,
82
- data: {
83
- purchasedAt: timestamp
69
+ status: 'processing'
84
70
  },
85
- req
71
+ transactionID
86
72
  });
87
- await payload.update({
88
- id: transaction.id,
89
- collection: transactionsSlug,
90
- data: {
91
- order: order.id,
92
- status: 'succeeded'
93
- },
94
- req
73
+ return createConfirmationResult({
74
+ order,
75
+ transactionID
95
76
  });
96
- return {
97
- message: 'Payment initiated successfully',
98
- orderID: order.id,
99
- transactionID: transaction.id,
100
- ...order.accessToken ? {
101
- accessToken: order.accessToken
102
- } : {}
103
- };
104
77
  } catch (error) {
105
78
  payload.logger.error({
106
79
  err: error,
@@ -109,5 +82,65 @@ export const confirmOrder = (props)=>async ({ cartsSlug = 'carts', data, ordersS
109
82
  throw new Error(error instanceof Error ? error.message : 'Unknown error initiating payment');
110
83
  }
111
84
  };
85
+ const createConfirmationResult = ({ order, transactionID })=>({
86
+ message: 'Payment initiated successfully',
87
+ orderID: requireDocumentID({
88
+ fieldName: 'order ID',
89
+ value: order.id
90
+ }),
91
+ transactionID,
92
+ ...typeof order.accessToken === 'string' ? {
93
+ accessToken: order.accessToken
94
+ } : {}
95
+ });
96
+ const findTransaction = async ({ paymentIntentID, req, transactionsSlug })=>{
97
+ const result = await req.payload.find({
98
+ collection: transactionsSlug,
99
+ depth: 0,
100
+ limit: 2,
101
+ overrideAccess: true,
102
+ pagination: false,
103
+ req,
104
+ where: {
105
+ 'stripe.paymentIntentID': {
106
+ equals: paymentIntentID
107
+ }
108
+ }
109
+ });
110
+ if (result.totalDocs !== 1 || result.docs.length !== 1 || !result.docs[0]) {
111
+ throw new Error('Expected exactly one transaction for the provided PaymentIntent ID');
112
+ }
113
+ return result.docs[0];
114
+ };
115
+ const parseOptionalMetadata = ({ fieldName, value })=>{
116
+ if (value === undefined) {
117
+ return undefined;
118
+ }
119
+ const parsedValue = parseRequiredMetadata({
120
+ fieldName,
121
+ value
122
+ });
123
+ if (!isRecord(parsedValue)) {
124
+ throw new Error(`${fieldName} metadata is invalid`);
125
+ }
126
+ return parsedValue;
127
+ };
128
+ const parseRequiredMetadata = ({ fieldName, value })=>{
129
+ if (typeof value !== 'string' || !value) {
130
+ throw new Error(`${fieldName} metadata is missing or invalid`);
131
+ }
132
+ try {
133
+ return JSON.parse(value);
134
+ } catch {
135
+ throw new Error(`${fieldName} metadata is missing or invalid`);
136
+ }
137
+ };
138
+ const requireDocumentID = ({ fieldName, value })=>{
139
+ if ((typeof value !== 'number' || !Number.isFinite(value)) && (typeof value !== 'string' || !value.trim())) {
140
+ throw new Error(`${fieldName} is missing or invalid`);
141
+ }
142
+ return value;
143
+ };
144
+ const isRecord = (value)=>typeof value === 'object' && value !== null && !Array.isArray(value);
112
145
 
113
146
  //# sourceMappingURL=confirmOrder.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/payments/adapters/stripe/confirmOrder.ts"],"sourcesContent":["import Stripe from 'stripe'\n\nimport type { PaymentAdapter } from '../../../types/index.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 ({\n cartsSlug = 'carts',\n data,\n ordersSlug = 'orders',\n req,\n transactionsSlug = 'transactions',\n }) => {\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 req,\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 const paymentIntent = await stripe.paymentIntents.retrieve(paymentIntentID)\n\n if (paymentIntent.status !== 'succeeded') {\n throw new Error(`Payment not completed.`)\n }\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 req,\n })\n\n const timestamp = new Date().toISOString()\n\n await payload.update({\n id: cartID,\n collection: cartsSlug,\n data: {\n purchasedAt: timestamp,\n },\n req,\n })\n\n await payload.update({\n id: transaction.id,\n collection: transactionsSlug,\n data: {\n order: order.id,\n status: 'succeeded',\n },\n req,\n })\n\n return {\n message: 'Payment initiated successfully',\n orderID: order.id,\n transactionID: transaction.id,\n ...(order.accessToken ? { accessToken: order.accessToken } : {}),\n }\n } catch (error) {\n payload.logger.error({ err: error, msg: 'Error confirming order with Stripe' })\n\n throw new Error(error instanceof Error ? error.message : 'Unknown error initiating payment')\n }\n }\n"],"names":["Stripe","confirmOrder","props","cartsSlug","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","status","cartID","metadata","cartItemsSnapshot","JSON","parse","undefined","shippingAddress","Array","isArray","order","amount","currency","toUpperCase","user","items","transactions","timestamp","Date","toISOString","update","purchasedAt","message","orderID","transactionID","accessToken","error","logger","err","msg"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/payments/adapters/stripe/confirmOrder.ts"],"sourcesContent":["import type { DefaultDocumentIDType } from 'payload'\n\nimport Stripe from 'stripe'\n\nimport type { PaymentAdapter } from '../../../types/index.js'\nimport type { StripeAdapterArgs } from './index.js'\n\nimport { normalizeEmail, validateSettlement } from './validateSettlement.js'\n\ntype Props = {\n apiVersion?: Stripe.StripeConfig['apiVersion']\n appInfo?: Stripe.StripeConfig['appInfo']\n secretKey: StripeAdapterArgs['secretKey']\n}\n\ntype RecordValue = Record<string, unknown>\n\nexport const confirmOrder: (props: Props) => NonNullable<PaymentAdapter>['confirmOrder'] =\n (props) =>\n async ({ data, finalizeOrder, req, transactionsSlug = 'transactions' }) => {\n const payload = req.payload\n const { apiVersion, appInfo, secretKey } = props || {}\n const paymentIntentID = data.paymentIntentID\n\n if (!secretKey) {\n throw new Error('Stripe secret key is required')\n }\n\n if (typeof paymentIntentID !== 'string' || !paymentIntentID) {\n throw new Error('PaymentIntent ID is required')\n }\n\n if (typeof finalizeOrder !== 'function') {\n throw new Error('Core order finalizer 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 const transaction = await findTransaction({ paymentIntentID, req, transactionsSlug })\n const transactionID = requireDocumentID({\n fieldName: 'transaction ID',\n value: transaction.id,\n })\n const paymentIntent = await stripe.paymentIntents.retrieve(paymentIntentID)\n const cartItemsSnapshot = parseRequiredMetadata({\n fieldName: 'cartItemsSnapshot',\n value: paymentIntent.metadata.cartItemsSnapshot,\n })\n const shippingAddress = parseOptionalMetadata({\n fieldName: 'shippingAddress',\n value: paymentIntent.metadata.shippingAddress,\n })\n const purchaser =\n req.user === null || req.user === undefined\n ? { customerEmail: normalizeEmail(data.customerEmail) }\n : {\n customer: requireDocumentID({\n fieldName: 'authenticated customer ID',\n value: req.user.id,\n }),\n }\n\n validateSettlement({\n canonicalCartID: data.cartID,\n cartItemsSnapshot,\n customerEmail: data.customerEmail,\n paymentIntent,\n paymentIntentID,\n transaction,\n user: req.user,\n })\n\n const order = await finalizeOrder({\n orderData: {\n amount: transaction.amount,\n currency: transaction.currency,\n ...purchaser,\n items: cartItemsSnapshot,\n shippingAddress,\n status: 'processing',\n },\n transactionID,\n })\n\n return createConfirmationResult({ order, transactionID })\n } catch (error) {\n payload.logger.error({ err: error, msg: 'Error confirming order with Stripe' })\n\n throw new Error(error instanceof Error ? error.message : 'Unknown error initiating payment')\n }\n }\n\nconst createConfirmationResult = ({\n order,\n transactionID,\n}: {\n order: RecordValue\n transactionID: DefaultDocumentIDType\n}) => ({\n message: 'Payment initiated successfully',\n orderID: requireDocumentID({ fieldName: 'order ID', value: order.id }),\n transactionID,\n ...(typeof order.accessToken === 'string' ? { accessToken: order.accessToken } : {}),\n})\n\nconst findTransaction = async ({\n paymentIntentID,\n req,\n transactionsSlug,\n}: {\n paymentIntentID: string\n req: Parameters<NonNullable<PaymentAdapter>['confirmOrder']>[0]['req']\n transactionsSlug: string\n}): Promise<RecordValue> => {\n const result = await req.payload.find({\n collection: transactionsSlug,\n depth: 0,\n limit: 2,\n overrideAccess: true,\n pagination: false,\n req,\n where: {\n 'stripe.paymentIntentID': {\n equals: paymentIntentID,\n },\n },\n })\n\n if (result.totalDocs !== 1 || result.docs.length !== 1 || !result.docs[0]) {\n throw new Error('Expected exactly one transaction for the provided PaymentIntent ID')\n }\n\n return result.docs[0] as RecordValue\n}\n\nconst parseOptionalMetadata = ({\n fieldName,\n value,\n}: {\n fieldName: string\n value?: string\n}): RecordValue | undefined => {\n if (value === undefined) {\n return undefined\n }\n\n const parsedValue = parseRequiredMetadata({ fieldName, value })\n\n if (!isRecord(parsedValue)) {\n throw new Error(`${fieldName} metadata is invalid`)\n }\n\n return parsedValue\n}\n\nconst parseRequiredMetadata = ({\n fieldName,\n value,\n}: {\n fieldName: string\n value?: string\n}): unknown => {\n if (typeof value !== 'string' || !value) {\n throw new Error(`${fieldName} metadata is missing or invalid`)\n }\n\n try {\n return JSON.parse(value)\n } catch {\n throw new Error(`${fieldName} metadata is missing or invalid`)\n }\n}\n\nconst requireDocumentID = ({\n fieldName,\n value,\n}: {\n fieldName: string\n value: unknown\n}): DefaultDocumentIDType => {\n if (\n (typeof value !== 'number' || !Number.isFinite(value)) &&\n (typeof value !== 'string' || !value.trim())\n ) {\n throw new Error(`${fieldName} is missing or invalid`)\n }\n\n return value\n}\n\nconst isRecord = (value: unknown): value is RecordValue =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n"],"names":["Stripe","normalizeEmail","validateSettlement","confirmOrder","props","data","finalizeOrder","req","transactionsSlug","payload","apiVersion","appInfo","secretKey","paymentIntentID","Error","stripe","name","url","transaction","findTransaction","transactionID","requireDocumentID","fieldName","value","id","paymentIntent","paymentIntents","retrieve","cartItemsSnapshot","parseRequiredMetadata","metadata","shippingAddress","parseOptionalMetadata","purchaser","user","undefined","customerEmail","customer","canonicalCartID","cartID","order","orderData","amount","currency","items","status","createConfirmationResult","error","logger","err","msg","message","orderID","accessToken","result","find","collection","depth","limit","overrideAccess","pagination","where","equals","totalDocs","docs","length","parsedValue","isRecord","JSON","parse","Number","isFinite","trim","Array","isArray"],"mappings":"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"}
@@ -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,CA6H1F,CAAA"}
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,CA8H1F,CAAA"}
@@ -92,6 +92,7 @@ export const initiatePayment = (props)=>async ({ data, req, transactionsSlug })=
92
92
  paymentIntentID: paymentIntent.id
93
93
  }
94
94
  },
95
+ overrideAccess: true,
95
96
  req
96
97
  });
97
98
  const returnData = {
@@ -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 = 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 // 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 },\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 }\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","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","_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","error","logger","err","msg"],"mappings":"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"}
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 = 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 // 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 },\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 overrideAccess: true,\n req,\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({ 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","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","_product","_variant","customProperties","quantity","shippingAddressAsString","JSON","stringify","paymentIntent","paymentIntents","automatic_payment_methods","enabled","metadata","cartID","cartItemsSnapshot","transaction","collection","user","toUpperCase","paymentMethod","status","customerID","paymentIntentID","overrideAccess","returnData","clientSecret","client_secret","message","error","logger","err","msg"],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ type SettlementPaymentIntent = {
2
+ amount?: unknown;
3
+ currency?: unknown;
4
+ customer?: unknown;
5
+ id?: unknown;
6
+ metadata?: unknown;
7
+ status?: unknown;
8
+ };
9
+ type SettlementTransaction = {
10
+ amount?: unknown;
11
+ cart?: unknown;
12
+ currency?: unknown;
13
+ customer?: unknown;
14
+ customerEmail?: unknown;
15
+ id?: unknown;
16
+ items?: unknown;
17
+ order?: unknown;
18
+ status?: unknown;
19
+ stripe?: unknown;
20
+ };
21
+ type SettlementValidationArgs = {
22
+ canonicalCartID: unknown;
23
+ cartItemsSnapshot: unknown;
24
+ customerEmail: unknown;
25
+ paymentIntent: SettlementPaymentIntent;
26
+ paymentIntentID: string;
27
+ transaction: SettlementTransaction;
28
+ user?: {
29
+ id?: unknown;
30
+ } | null;
31
+ };
32
+ export declare const getRelationshipID: (value: unknown) => string | undefined;
33
+ export declare const normalizeEmail: (value: unknown) => string | undefined;
34
+ export declare const normalizeCartItems: (items: unknown) => unknown[];
35
+ export declare const validateSettlement: ({ canonicalCartID, cartItemsSnapshot, customerEmail, paymentIntent, paymentIntentID, transaction, user, }: SettlementValidationArgs) => void;
36
+ export {};
37
+ //# sourceMappingURL=validateSettlement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateSettlement.d.ts","sourceRoot":"","sources":["../../../../src/payments/adapters/stripe/validateSettlement.ts"],"names":[],"mappings":"AAEA,KAAK,uBAAuB,GAAG;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC9B,eAAe,EAAE,OAAO,CAAA;IACxB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,uBAAuB,CAAA;IACtC,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,qBAAqB,CAAA;IAClC,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,eAAO,MAAM,iBAAiB,UAAW,OAAO,KAAG,MAAM,GAAG,SAY3D,CAAA;AAED,eAAO,MAAM,cAAc,UAAW,OAAO,KAAG,MAAM,GAAG,SAQxD,CAAA;AAED,eAAO,MAAM,kBAAkB,UAAW,OAAO,KAAG,OAAO,EA0C1D,CAAA;AAED,eAAO,MAAM,kBAAkB,8GAQ5B,wBAAwB,KAAG,IA2E7B,CAAA"}
@@ -0,0 +1,157 @@
1
+ export const getRelationshipID = (value)=>{
2
+ const relationshipID = isRecord(value) ? value.id : value;
3
+ if (typeof relationshipID === 'number' && Number.isFinite(relationshipID)) {
4
+ return String(relationshipID);
5
+ }
6
+ if (typeof relationshipID === 'string' && relationshipID.trim()) {
7
+ return relationshipID;
8
+ }
9
+ return undefined;
10
+ };
11
+ export const normalizeEmail = (value)=>{
12
+ if (typeof value !== 'string') {
13
+ return undefined;
14
+ }
15
+ const normalizedEmail = value.trim().toLowerCase();
16
+ return normalizedEmail || undefined;
17
+ };
18
+ export const normalizeCartItems = (items)=>{
19
+ if (!Array.isArray(items) || items.length === 0) {
20
+ throw new Error('Cart items are missing or invalid');
21
+ }
22
+ return items.map((item)=>{
23
+ if (!isRecord(item)) {
24
+ throw new Error('Cart items are missing or invalid');
25
+ }
26
+ const productID = getRelationshipID(item.product);
27
+ if (!productID || typeof item.quantity !== 'number' || !Number.isFinite(item.quantity)) {
28
+ throw new Error('Cart items are missing or invalid');
29
+ }
30
+ return Object.fromEntries(Object.entries(item).flatMap(([key, value])=>{
31
+ if (key === 'product') {
32
+ return [
33
+ [
34
+ key,
35
+ productID
36
+ ]
37
+ ];
38
+ }
39
+ if (key === 'variant') {
40
+ if (value === null || value === undefined) {
41
+ return [];
42
+ }
43
+ const variantID = getRelationshipID(value);
44
+ if (!variantID) {
45
+ throw new Error('Cart item variant relationship is invalid');
46
+ }
47
+ return [
48
+ [
49
+ key,
50
+ variantID
51
+ ]
52
+ ];
53
+ }
54
+ const normalizedValue = normalizeValue(value);
55
+ return normalizedValue === undefined ? [] : [
56
+ [
57
+ key,
58
+ normalizedValue
59
+ ]
60
+ ];
61
+ }));
62
+ });
63
+ };
64
+ export const validateSettlement = ({ canonicalCartID, cartItemsSnapshot, customerEmail, paymentIntent, paymentIntentID, transaction, user })=>{
65
+ if (paymentIntentID !== getNestedString(transaction, 'stripe', 'paymentIntentID') || paymentIntentID !== paymentIntent.id) {
66
+ throw new Error('PaymentIntent does not match the transaction');
67
+ }
68
+ const normalizedCartID = getRelationshipID(canonicalCartID);
69
+ if (!normalizedCartID || normalizedCartID !== getRelationshipID(transaction.cart)) {
70
+ throw new Error('Canonical cart does not match the transaction cart');
71
+ }
72
+ const metadata = isRecord(paymentIntent.metadata) ? paymentIntent.metadata : undefined;
73
+ if (normalizedCartID !== getRelationshipID(metadata?.cartID)) {
74
+ throw new Error('Canonical cart does not match the PaymentIntent cart');
75
+ }
76
+ const transactionCustomerID = getRelationshipID(transaction.customer);
77
+ if (user !== null && user !== undefined) {
78
+ const authenticatedUserID = getRelationshipID(user.id);
79
+ if (!authenticatedUserID) {
80
+ throw new Error('Authenticated customer ID is missing or invalid');
81
+ }
82
+ if (transactionCustomerID !== authenticatedUserID) {
83
+ throw new Error('Authenticated customer does not match the transaction customer');
84
+ }
85
+ } else {
86
+ if (transactionCustomerID) {
87
+ throw new Error('Guest transaction belongs to an authenticated customer');
88
+ }
89
+ const normalizedCustomerEmail = normalizeEmail(customerEmail);
90
+ if (!normalizedCustomerEmail || normalizedCustomerEmail !== normalizeEmail(transaction.customerEmail)) {
91
+ throw new Error('Guest email does not match the transaction email');
92
+ }
93
+ }
94
+ const stripeCustomerID = getNestedString(transaction, 'stripe', 'customerID');
95
+ if (!stripeCustomerID || stripeCustomerID !== getRelationshipID(paymentIntent.customer)) {
96
+ throw new Error('Stripe customer does not match the transaction');
97
+ }
98
+ if (paymentIntent.amount !== transaction.amount) {
99
+ throw new Error('Stripe amount does not match the transaction amount');
100
+ }
101
+ if (typeof paymentIntent.currency !== 'string' || typeof transaction.currency !== 'string' || paymentIntent.currency.toUpperCase() !== transaction.currency) {
102
+ throw new Error('Stripe currency does not match the transaction currency');
103
+ }
104
+ const normalizedSnapshot = normalizeCartItems(cartItemsSnapshot);
105
+ const normalizedTransactionItems = normalizeCartItems(transaction.items);
106
+ if (stableSerialize(normalizedSnapshot) !== stableSerialize(normalizedTransactionItems)) {
107
+ throw new Error('Stripe cart items do not match the transaction items');
108
+ }
109
+ if (paymentIntent.status !== 'succeeded') {
110
+ throw new Error('Payment not completed.');
111
+ }
112
+ };
113
+ const getNestedString = (value, groupName, fieldName)=>{
114
+ if (!isRecord(value)) {
115
+ return undefined;
116
+ }
117
+ const group = value[groupName];
118
+ if (!isRecord(group) || typeof group[fieldName] !== 'string') {
119
+ return undefined;
120
+ }
121
+ return group[fieldName];
122
+ };
123
+ const isRecord = (value)=>typeof value === 'object' && value !== null && !Array.isArray(value);
124
+ const normalizeValue = (value)=>{
125
+ if (Array.isArray(value)) {
126
+ return value.map((entry)=>normalizeValue(entry));
127
+ }
128
+ if (isRecord(value)) {
129
+ return Object.fromEntries(Object.entries(value).flatMap(([entryKey, entryValue])=>{
130
+ const normalizedValue = normalizeValue(entryValue);
131
+ return normalizedValue === undefined ? [] : [
132
+ [
133
+ entryKey,
134
+ normalizedValue
135
+ ]
136
+ ];
137
+ }));
138
+ }
139
+ if (value === null || typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {
140
+ return value;
141
+ }
142
+ if (value === undefined) {
143
+ return undefined;
144
+ }
145
+ throw new Error('Cart items contain unsupported data');
146
+ };
147
+ const stableSerialize = (value)=>{
148
+ if (Array.isArray(value)) {
149
+ return `[${value.map((entry)=>stableSerialize(entry)).join(',')}]`;
150
+ }
151
+ if (isRecord(value)) {
152
+ return `{${Object.keys(value).sort().map((key)=>`${JSON.stringify(key)}:${stableSerialize(value[key])}`).join(',')}}`;
153
+ }
154
+ return JSON.stringify(value);
155
+ };
156
+
157
+ //# sourceMappingURL=validateSettlement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/payments/adapters/stripe/validateSettlement.ts"],"sourcesContent":["type RecordValue = Record<string, unknown>\n\ntype SettlementPaymentIntent = {\n amount?: unknown\n currency?: unknown\n customer?: unknown\n id?: unknown\n metadata?: unknown\n status?: unknown\n}\n\ntype SettlementTransaction = {\n amount?: unknown\n cart?: unknown\n currency?: unknown\n customer?: unknown\n customerEmail?: unknown\n id?: unknown\n items?: unknown\n order?: unknown\n status?: unknown\n stripe?: unknown\n}\n\ntype SettlementValidationArgs = {\n canonicalCartID: unknown\n cartItemsSnapshot: unknown\n customerEmail: unknown\n paymentIntent: SettlementPaymentIntent\n paymentIntentID: string\n transaction: SettlementTransaction\n user?: { id?: unknown } | null\n}\n\nexport const getRelationshipID = (value: unknown): string | undefined => {\n const relationshipID = isRecord(value) ? value.id : value\n\n if (typeof relationshipID === 'number' && Number.isFinite(relationshipID)) {\n return String(relationshipID)\n }\n\n if (typeof relationshipID === 'string' && relationshipID.trim()) {\n return relationshipID\n }\n\n return undefined\n}\n\nexport const normalizeEmail = (value: unknown): string | undefined => {\n if (typeof value !== 'string') {\n return undefined\n }\n\n const normalizedEmail = value.trim().toLowerCase()\n\n return normalizedEmail || undefined\n}\n\nexport const normalizeCartItems = (items: unknown): unknown[] => {\n if (!Array.isArray(items) || items.length === 0) {\n throw new Error('Cart items are missing or invalid')\n }\n\n return items.map((item) => {\n if (!isRecord(item)) {\n throw new Error('Cart items are missing or invalid')\n }\n\n const productID = getRelationshipID(item.product)\n\n if (!productID || typeof item.quantity !== 'number' || !Number.isFinite(item.quantity)) {\n throw new Error('Cart items are missing or invalid')\n }\n\n return Object.fromEntries(\n Object.entries(item).flatMap(([key, value]) => {\n if (key === 'product') {\n return [[key, productID]]\n }\n\n if (key === 'variant') {\n if (value === null || value === undefined) {\n return []\n }\n\n const variantID = getRelationshipID(value)\n\n if (!variantID) {\n throw new Error('Cart item variant relationship is invalid')\n }\n\n return [[key, variantID]]\n }\n\n const normalizedValue = normalizeValue(value)\n\n return normalizedValue === undefined ? [] : [[key, normalizedValue]]\n }),\n )\n })\n}\n\nexport const validateSettlement = ({\n canonicalCartID,\n cartItemsSnapshot,\n customerEmail,\n paymentIntent,\n paymentIntentID,\n transaction,\n user,\n}: SettlementValidationArgs): void => {\n if (\n paymentIntentID !== getNestedString(transaction, 'stripe', 'paymentIntentID') ||\n paymentIntentID !== paymentIntent.id\n ) {\n throw new Error('PaymentIntent does not match the transaction')\n }\n\n const normalizedCartID = getRelationshipID(canonicalCartID)\n\n if (!normalizedCartID || normalizedCartID !== getRelationshipID(transaction.cart)) {\n throw new Error('Canonical cart does not match the transaction cart')\n }\n\n const metadata = isRecord(paymentIntent.metadata) ? paymentIntent.metadata : undefined\n\n if (normalizedCartID !== getRelationshipID(metadata?.cartID)) {\n throw new Error('Canonical cart does not match the PaymentIntent cart')\n }\n\n const transactionCustomerID = getRelationshipID(transaction.customer)\n\n if (user !== null && user !== undefined) {\n const authenticatedUserID = getRelationshipID(user.id)\n\n if (!authenticatedUserID) {\n throw new Error('Authenticated customer ID is missing or invalid')\n }\n\n if (transactionCustomerID !== authenticatedUserID) {\n throw new Error('Authenticated customer does not match the transaction customer')\n }\n } else {\n if (transactionCustomerID) {\n throw new Error('Guest transaction belongs to an authenticated customer')\n }\n\n const normalizedCustomerEmail = normalizeEmail(customerEmail)\n\n if (\n !normalizedCustomerEmail ||\n normalizedCustomerEmail !== normalizeEmail(transaction.customerEmail)\n ) {\n throw new Error('Guest email does not match the transaction email')\n }\n }\n\n const stripeCustomerID = getNestedString(transaction, 'stripe', 'customerID')\n\n if (!stripeCustomerID || stripeCustomerID !== getRelationshipID(paymentIntent.customer)) {\n throw new Error('Stripe customer does not match the transaction')\n }\n\n if (paymentIntent.amount !== transaction.amount) {\n throw new Error('Stripe amount does not match the transaction amount')\n }\n\n if (\n typeof paymentIntent.currency !== 'string' ||\n typeof transaction.currency !== 'string' ||\n paymentIntent.currency.toUpperCase() !== transaction.currency\n ) {\n throw new Error('Stripe currency does not match the transaction currency')\n }\n\n const normalizedSnapshot = normalizeCartItems(cartItemsSnapshot)\n const normalizedTransactionItems = normalizeCartItems(transaction.items)\n\n if (stableSerialize(normalizedSnapshot) !== stableSerialize(normalizedTransactionItems)) {\n throw new Error('Stripe cart items do not match the transaction items')\n }\n\n if (paymentIntent.status !== 'succeeded') {\n throw new Error('Payment not completed.')\n }\n}\n\nconst getNestedString = (\n value: unknown,\n groupName: string,\n fieldName: string,\n): string | undefined => {\n if (!isRecord(value)) {\n return undefined\n }\n\n const group = value[groupName]\n\n if (!isRecord(group) || typeof group[fieldName] !== 'string') {\n return undefined\n }\n\n return group[fieldName]\n}\n\nconst isRecord = (value: unknown): value is RecordValue =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst normalizeValue = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeValue(entry))\n }\n\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).flatMap(([entryKey, entryValue]) => {\n const normalizedValue = normalizeValue(entryValue)\n\n return normalizedValue === undefined ? [] : [[entryKey, normalizedValue]]\n }),\n )\n }\n\n if (\n value === null ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string'\n ) {\n return value\n }\n\n if (value === undefined) {\n return undefined\n }\n\n throw new Error('Cart items contain unsupported data')\n}\n\nconst stableSerialize = (value: unknown): string => {\n if (Array.isArray(value)) {\n return `[${value.map((entry) => stableSerialize(entry)).join(',')}]`\n }\n\n if (isRecord(value)) {\n return `{${Object.keys(value)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableSerialize(value[key])}`)\n .join(',')}}`\n }\n\n return JSON.stringify(value)\n}\n"],"names":["getRelationshipID","value","relationshipID","isRecord","id","Number","isFinite","String","trim","undefined","normalizeEmail","normalizedEmail","toLowerCase","normalizeCartItems","items","Array","isArray","length","Error","map","item","productID","product","quantity","Object","fromEntries","entries","flatMap","key","variantID","normalizedValue","normalizeValue","validateSettlement","canonicalCartID","cartItemsSnapshot","customerEmail","paymentIntent","paymentIntentID","transaction","user","getNestedString","normalizedCartID","cart","metadata","cartID","transactionCustomerID","customer","authenticatedUserID","normalizedCustomerEmail","stripeCustomerID","amount","currency","toUpperCase","normalizedSnapshot","normalizedTransactionItems","stableSerialize","status","groupName","fieldName","group","entry","entryKey","entryValue","join","keys","sort","JSON","stringify"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/provider/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAa,MAAM,SAAS,CAAA;AAI/D,OAAO,KAAgF,MAAM,OAAO,CAAA;AAEpG,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAsD7B,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAogCpD,CAAA;AAED,eAAO,MAAM,YAAY,4BAQxB,CAAA;AAED,eAAO,MAAM,kBAAkB,uBAI9B,CAAA;AAED,eAAO,MAAM,WAAW;;6BAIX,IAAI,GAAG,MAAM,YAAY;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAG,MAAM;;;CAmCtF,CAAA;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,eAAe;;;;;UAkB/B,CAAC;;;;;;;EAQlB;AAED,eAAO,MAAM,WAAW;;;;;;;;;;CASvB,CAAA;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,mBAAmB;eAOvB,CAAC,EAAE;;;;;;;;;;EACrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/provider/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAIpD,OAAO,KAAgF,MAAM,OAAO,CAAA;AAEpG,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,oBAAoB,EAErB,MAAM,sBAAsB,CAAA;AAsD7B,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAyiCpD,CAAA;AAED,eAAO,MAAM,YAAY,4BAQxB,CAAA;AAED,eAAO,MAAM,kBAAkB,uBAI9B,CAAA;AAED,eAAO,MAAM,WAAW;;6BAIX,IAAI,GAAG,MAAM,YAAY;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAG,MAAM;;;CAmCtF,CAAA;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,eAAe;;;;;UAkB/B,CAAC;;;;;;;EAQlB;AAED,eAAO,MAAM,WAAW;;;;;;;;;;CASvB,CAAA;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,mBAAmB;eAOvB,CAAC,EAAE;;;;;;;;;;EACrC"}