@payloadcms/plugin-ecommerce 4.0.0-internal.688c4d0 → 4.0.0-internal.77191e5

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 (114) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +6 -0
  3. package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -1
  4. package/dist/collections/addresses/hooks/beforeChange.js +3 -2
  5. package/dist/collections/addresses/hooks/beforeChange.js.map +1 -1
  6. package/dist/collections/carts/endpoints/addItem.d.ts.map +1 -1
  7. package/dist/collections/carts/endpoints/clearCart.d.ts.map +1 -1
  8. package/dist/collections/carts/endpoints/mergeCart.d.ts.map +1 -1
  9. package/dist/collections/carts/endpoints/removeItem.d.ts.map +1 -1
  10. package/dist/collections/carts/endpoints/updateItem.d.ts.map +1 -1
  11. package/dist/collections/carts/hasCartSecretAccess.d.ts.map +1 -1
  12. package/dist/collections/carts/operations/addItem.d.ts.map +1 -1
  13. package/dist/collections/carts/operations/clearCart.d.ts.map +1 -1
  14. package/dist/collections/carts/operations/createRequestWithSecret.d.ts.map +1 -1
  15. package/dist/collections/carts/operations/mergeCart.d.ts.map +1 -1
  16. package/dist/collections/carts/operations/removeItem.d.ts.map +1 -1
  17. package/dist/collections/carts/operations/updateItem.d.ts.map +1 -1
  18. package/dist/endpoints/confirmOrder.d.ts.map +1 -1
  19. package/dist/endpoints/confirmOrder.js +299 -44
  20. package/dist/endpoints/confirmOrder.js.map +1 -1
  21. package/dist/endpoints/initiatePayment.d.ts.map +1 -1
  22. package/dist/endpoints/initiatePayment.js.map +1 -1
  23. package/dist/exports/types.d.ts +1 -1
  24. package/dist/exports/types.d.ts.map +1 -1
  25. package/dist/exports/types.js.map +1 -1
  26. package/dist/fields/pricesField.d.ts.map +1 -1
  27. package/dist/fields/pricesField.js +39 -39
  28. package/dist/fields/pricesField.js.map +1 -1
  29. package/dist/fields/statusField.d.ts.map +1 -1
  30. package/dist/fields/statusField.js +5 -0
  31. package/dist/fields/statusField.js.map +1 -1
  32. package/dist/index.d.ts +1 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +7 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -1
  37. package/dist/payments/adapters/stripe/confirmOrder.js +107 -75
  38. package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -1
  39. package/dist/payments/adapters/stripe/validateSettlement.d.ts +37 -0
  40. package/dist/payments/adapters/stripe/validateSettlement.d.ts.map +1 -0
  41. package/dist/payments/adapters/stripe/validateSettlement.js +157 -0
  42. package/dist/payments/adapters/stripe/validateSettlement.js.map +1 -0
  43. package/dist/react/provider/index.d.ts.map +1 -1
  44. package/dist/react/provider/index.js +75 -34
  45. package/dist/react/provider/index.js.map +1 -1
  46. package/dist/react/provider/utilities.d.ts.map +1 -1
  47. package/dist/translations/languages/ar.d.ts.map +1 -1
  48. package/dist/translations/languages/az.d.ts.map +1 -1
  49. package/dist/translations/languages/bg.d.ts.map +1 -1
  50. package/dist/translations/languages/ca.d.ts.map +1 -1
  51. package/dist/translations/languages/cs.d.ts.map +1 -1
  52. package/dist/translations/languages/da.d.ts.map +1 -1
  53. package/dist/translations/languages/de.d.ts.map +1 -1
  54. package/dist/translations/languages/en.d.ts.map +1 -1
  55. package/dist/translations/languages/es.d.ts.map +1 -1
  56. package/dist/translations/languages/et.d.ts.map +1 -1
  57. package/dist/translations/languages/fa.d.ts.map +1 -1
  58. package/dist/translations/languages/fr.d.ts.map +1 -1
  59. package/dist/translations/languages/he.d.ts.map +1 -1
  60. package/dist/translations/languages/hr.d.ts.map +1 -1
  61. package/dist/translations/languages/hu.d.ts.map +1 -1
  62. package/dist/translations/languages/hy.d.ts.map +1 -1
  63. package/dist/translations/languages/is.d.ts.map +1 -1
  64. package/dist/translations/languages/it.d.ts.map +1 -1
  65. package/dist/translations/languages/ja.d.ts.map +1 -1
  66. package/dist/translations/languages/ko.d.ts.map +1 -1
  67. package/dist/translations/languages/lt.d.ts.map +1 -1
  68. package/dist/translations/languages/my.d.ts.map +1 -1
  69. package/dist/translations/languages/nb.d.ts.map +1 -1
  70. package/dist/translations/languages/nl.d.ts.map +1 -1
  71. package/dist/translations/languages/pl.d.ts.map +1 -1
  72. package/dist/translations/languages/pt.d.ts.map +1 -1
  73. package/dist/translations/languages/ro.d.ts.map +1 -1
  74. package/dist/translations/languages/rs.d.ts.map +1 -1
  75. package/dist/translations/languages/rsLatin.d.ts.map +1 -1
  76. package/dist/translations/languages/ru.d.ts.map +1 -1
  77. package/dist/translations/languages/sk.d.ts.map +1 -1
  78. package/dist/translations/languages/sl.d.ts.map +1 -1
  79. package/dist/translations/languages/sv.d.ts.map +1 -1
  80. package/dist/translations/languages/ta.d.ts.map +1 -1
  81. package/dist/translations/languages/th.d.ts.map +1 -1
  82. package/dist/translations/languages/tr.d.ts.map +1 -1
  83. package/dist/translations/languages/uk.d.ts.map +1 -1
  84. package/dist/translations/languages/vi.d.ts.map +1 -1
  85. package/dist/translations/languages/zh.d.ts.map +1 -1
  86. package/dist/translations/languages/zhTw.d.ts.map +1 -1
  87. package/dist/types/index.d.ts +33 -7
  88. package/dist/types/index.d.ts.map +1 -1
  89. package/dist/types/index.js.map +1 -1
  90. package/dist/ui/PriceInput/FormattedInput.js +2 -2
  91. package/dist/ui/PriceInput/FormattedInput.js.map +1 -1
  92. package/dist/ui/PriceInput/index.css +19 -31
  93. package/dist/ui/PriceRowLabel/index.css +2 -2
  94. package/dist/ui/VariantOptionsSelector/index.css +8 -10
  95. package/dist/ui/utilities.d.ts.map +1 -1
  96. package/dist/utilities/accessComposition.d.ts.map +1 -1
  97. package/dist/utilities/getCollectionSlugMap.d.ts.map +1 -1
  98. package/dist/utilities/pushTypeScriptProperties.d.ts.map +1 -1
  99. package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -1
  100. package/package.json +8 -8
  101. package/dist/@types/assets.d.js +0 -2
  102. package/dist/@types/assets.d.js.map +0 -1
  103. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js +0 -358
  104. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js.map +0 -1
  105. package/dist/payments/adapters/stripe/confirmOrder.spec.js +0 -166
  106. package/dist/payments/adapters/stripe/confirmOrder.spec.js.map +0 -1
  107. package/dist/utilities/accessComposition.spec.js +0 -765
  108. package/dist/utilities/accessComposition.spec.js.map +0 -1
  109. package/dist/utilities/defaultProductsValidation.spec.js +0 -384
  110. package/dist/utilities/defaultProductsValidation.spec.js.map +0 -1
  111. package/dist/utilities/getCollectionSlugMap.spec.js +0 -254
  112. package/dist/utilities/getCollectionSlugMap.spec.js.map +0 -1
  113. package/dist/utilities/sanitizePluginConfig.spec.js +0 -516
  114. package/dist/utilities/sanitizePluginConfig.spec.js.map +0 -1
@@ -1,166 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- const mockCustomersList = vi.fn();
3
- const mockCustomersCreate = vi.fn();
4
- const mockPaymentIntentsRetrieve = vi.fn();
5
- vi.mock('stripe', ()=>{
6
- const MockStripe = function() {
7
- return {
8
- customers: {
9
- list: mockCustomersList,
10
- create: mockCustomersCreate
11
- },
12
- paymentIntents: {
13
- retrieve: mockPaymentIntentsRetrieve
14
- }
15
- };
16
- };
17
- return {
18
- default: MockStripe
19
- };
20
- });
21
- import { confirmOrder } from './confirmOrder';
22
- const defaultCartItemsSnapshot = JSON.stringify([
23
- {
24
- id: 'item-1',
25
- quantity: 1
26
- }
27
- ]);
28
- const createMockPaymentIntent = (status)=>({
29
- amount: 1000,
30
- currency: 'usd',
31
- metadata: {
32
- cartID: 'cart-123',
33
- cartItemsSnapshot: defaultCartItemsSnapshot,
34
- shippingAddress: JSON.stringify({
35
- city: 'Test City'
36
- })
37
- },
38
- status
39
- });
40
- const createMockPayload = ()=>({
41
- create: vi.fn().mockResolvedValue({
42
- id: 'order-123'
43
- }),
44
- find: vi.fn().mockResolvedValue({
45
- docs: [
46
- {
47
- id: 'txn-123'
48
- }
49
- ],
50
- totalDocs: 1
51
- }),
52
- logger: {
53
- error: vi.fn()
54
- },
55
- update: vi.fn().mockResolvedValue({})
56
- });
57
- const createMockReq = (payload)=>({
58
- payload,
59
- user: {
60
- id: 'user-123'
61
- }
62
- });
63
- describe('confirmOrder - payment status check', ()=>{
64
- const secretKey = 'sk_test_123';
65
- beforeEach(()=>{
66
- vi.clearAllMocks();
67
- mockCustomersList.mockResolvedValue({
68
- data: [
69
- {
70
- id: 'cus-123'
71
- }
72
- ]
73
- });
74
- mockCustomersCreate.mockResolvedValue({
75
- id: 'cus-new'
76
- });
77
- });
78
- it('should throw when paymentIntent status is requires_payment_method', async ()=>{
79
- mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('requires_payment_method'));
80
- const mockPayload = createMockPayload();
81
- const handler = confirmOrder({
82
- secretKey
83
- });
84
- await expect(handler({
85
- data: {
86
- customerEmail: 'test@test.com',
87
- paymentIntentID: 'pi_123'
88
- },
89
- req: createMockReq(mockPayload)
90
- })).rejects.toThrow('Payment not completed.');
91
- expect(mockPayload.create).not.toHaveBeenCalled();
92
- });
93
- it('should throw when paymentIntent status is canceled', async ()=>{
94
- mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('canceled'));
95
- const mockPayload = createMockPayload();
96
- const handler = confirmOrder({
97
- secretKey
98
- });
99
- await expect(handler({
100
- data: {
101
- customerEmail: 'test@test.com',
102
- paymentIntentID: 'pi_123'
103
- },
104
- req: createMockReq(mockPayload)
105
- })).rejects.toThrow('Payment not completed.');
106
- expect(mockPayload.create).not.toHaveBeenCalled();
107
- });
108
- it('should throw when paymentIntent status is processing', async ()=>{
109
- mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('processing'));
110
- const mockPayload = createMockPayload();
111
- const handler = confirmOrder({
112
- secretKey
113
- });
114
- await expect(handler({
115
- data: {
116
- customerEmail: 'test@test.com',
117
- paymentIntentID: 'pi_123'
118
- },
119
- req: createMockReq(mockPayload)
120
- })).rejects.toThrow('Payment not completed.');
121
- expect(mockPayload.create).not.toHaveBeenCalled();
122
- });
123
- it('should not update cart or transaction when payment has not succeeded', async ()=>{
124
- mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('requires_payment_method'));
125
- const mockPayload = createMockPayload();
126
- const handler = confirmOrder({
127
- secretKey
128
- });
129
- await expect(handler({
130
- data: {
131
- customerEmail: 'test@test.com',
132
- paymentIntentID: 'pi_123'
133
- },
134
- req: createMockReq(mockPayload)
135
- })).rejects.toThrow();
136
- expect(mockPayload.update).not.toHaveBeenCalled();
137
- });
138
- it('should create order when paymentIntent status is succeeded', async ()=>{
139
- mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('succeeded'));
140
- const mockPayload = createMockPayload();
141
- const handler = confirmOrder({
142
- secretKey
143
- });
144
- const result = await handler({
145
- data: {
146
- customerEmail: 'test@test.com',
147
- paymentIntentID: 'pi_123'
148
- },
149
- req: createMockReq(mockPayload)
150
- });
151
- expect(mockPayload.create).toHaveBeenCalledWith(expect.objectContaining({
152
- collection: 'orders',
153
- data: expect.objectContaining({
154
- amount: 1000,
155
- currency: 'USD',
156
- status: 'processing'
157
- })
158
- }));
159
- expect(result).toEqual(expect.objectContaining({
160
- orderID: 'order-123',
161
- transactionID: 'txn-123'
162
- }));
163
- });
164
- });
165
-
166
- //# sourceMappingURL=confirmOrder.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/payments/adapters/stripe/confirmOrder.spec.ts"],"sourcesContent":["import { beforeEach, describe, expect, it, vi } from 'vitest'\n\nconst mockCustomersList = vi.fn()\nconst mockCustomersCreate = vi.fn()\nconst mockPaymentIntentsRetrieve = vi.fn()\n\nvi.mock('stripe', () => {\n const MockStripe = function () {\n return {\n customers: {\n list: mockCustomersList,\n create: mockCustomersCreate,\n },\n paymentIntents: {\n retrieve: mockPaymentIntentsRetrieve,\n },\n }\n }\n\n return { default: MockStripe }\n})\n\nimport { confirmOrder } from './confirmOrder'\n\nconst defaultCartItemsSnapshot = JSON.stringify([{ id: 'item-1', quantity: 1 }])\n\nconst createMockPaymentIntent = (status: string) => ({\n amount: 1000,\n currency: 'usd',\n metadata: {\n cartID: 'cart-123',\n cartItemsSnapshot: defaultCartItemsSnapshot,\n shippingAddress: JSON.stringify({ city: 'Test City' }),\n },\n status,\n})\n\nconst createMockPayload = () => ({\n create: vi.fn().mockResolvedValue({ id: 'order-123' }),\n find: vi.fn().mockResolvedValue({\n docs: [{ id: 'txn-123' }],\n totalDocs: 1,\n }),\n logger: { error: vi.fn() },\n update: vi.fn().mockResolvedValue({}),\n})\n\nconst createMockReq = (payload: ReturnType<typeof createMockPayload>) =>\n ({\n payload,\n user: { id: 'user-123' },\n }) as any\n\ndescribe('confirmOrder - payment status check', () => {\n const secretKey = 'sk_test_123'\n\n beforeEach(() => {\n vi.clearAllMocks()\n\n mockCustomersList.mockResolvedValue({ data: [{ id: 'cus-123' }] })\n mockCustomersCreate.mockResolvedValue({ id: 'cus-new' })\n })\n\n it('should throw when paymentIntent status is requires_payment_method', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('requires_payment_method'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n await expect(\n handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n }),\n ).rejects.toThrow('Payment not completed.')\n\n expect(mockPayload.create).not.toHaveBeenCalled()\n })\n\n it('should throw when paymentIntent status is canceled', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('canceled'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n await expect(\n handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n }),\n ).rejects.toThrow('Payment not completed.')\n\n expect(mockPayload.create).not.toHaveBeenCalled()\n })\n\n it('should throw when paymentIntent status is processing', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('processing'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n await expect(\n handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n }),\n ).rejects.toThrow('Payment not completed.')\n\n expect(mockPayload.create).not.toHaveBeenCalled()\n })\n\n it('should not update cart or transaction when payment has not succeeded', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('requires_payment_method'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n await expect(\n handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n }),\n ).rejects.toThrow()\n\n expect(mockPayload.update).not.toHaveBeenCalled()\n })\n\n it('should create order when paymentIntent status is succeeded', async () => {\n mockPaymentIntentsRetrieve.mockResolvedValue(createMockPaymentIntent('succeeded'))\n\n const mockPayload = createMockPayload()\n const handler = confirmOrder({ secretKey })\n\n const result = await handler({\n data: { customerEmail: 'test@test.com', paymentIntentID: 'pi_123' },\n req: createMockReq(mockPayload),\n })\n\n expect(mockPayload.create).toHaveBeenCalledWith(\n expect.objectContaining({\n collection: 'orders',\n data: expect.objectContaining({\n amount: 1000,\n currency: 'USD',\n status: 'processing',\n }),\n }),\n )\n\n expect(result).toEqual(\n expect.objectContaining({\n orderID: 'order-123',\n transactionID: 'txn-123',\n }),\n )\n })\n})\n"],"names":["beforeEach","describe","expect","it","vi","mockCustomersList","fn","mockCustomersCreate","mockPaymentIntentsRetrieve","mock","MockStripe","customers","list","create","paymentIntents","retrieve","default","confirmOrder","defaultCartItemsSnapshot","JSON","stringify","id","quantity","createMockPaymentIntent","status","amount","currency","metadata","cartID","cartItemsSnapshot","shippingAddress","city","createMockPayload","mockResolvedValue","find","docs","totalDocs","logger","error","update","createMockReq","payload","user","secretKey","clearAllMocks","data","mockPayload","handler","customerEmail","paymentIntentID","req","rejects","toThrow","not","toHaveBeenCalled","result","toHaveBeenCalledWith","objectContaining","collection","toEqual","orderID","transactionID"],"mappings":"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"}