@paykit-sdk/medusajs 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.js +130 -31
- package/dist/index.mjs +131 -32
- package/dist/providers/paykit-provider.js +130 -31
- package/dist/providers/paykit-provider.mjs +131 -32
- package/package.json +5 -6
- package/dist/index.d.mts +0 -10
- package/dist/index.d.ts +0 -10
- package/dist/providers/paykit-provider.d.mts +0 -61
- package/dist/providers/paykit-provider.d.ts +0 -61
- package/dist/utils/mapper.d.mts +0 -6
- package/dist/utils/mapper.d.ts +0 -6
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ Universal payment provider adapter for Medusa v2+ using PayKit. Compatible with
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install @paykit-sdk/medusajs
|
|
8
|
+
npm install @paykit-sdk/medusajs
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## Install your provider
|
|
@@ -25,7 +25,7 @@ import { createStripe } from '@paykit-sdk/stripe';
|
|
|
25
25
|
export default defineConfig({
|
|
26
26
|
modules: [
|
|
27
27
|
{
|
|
28
|
-
resolve: '@paykit-sdk/
|
|
28
|
+
resolve: '@paykit-sdk/medusajs',
|
|
29
29
|
options: {
|
|
30
30
|
provider: createStripe({ apiKey: process.env.STRIPE_API_KEY }),
|
|
31
31
|
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET,
|
package/dist/index.js
CHANGED
|
@@ -83,14 +83,20 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
83
83
|
data
|
|
84
84
|
}) => {
|
|
85
85
|
if (this.options.debug) {
|
|
86
|
-
console.info("[PayKit] Initiating payment", {
|
|
86
|
+
console.info("[PayKit] Initiating payment", {
|
|
87
|
+
context,
|
|
88
|
+
amount,
|
|
89
|
+
currency_code,
|
|
90
|
+
data
|
|
91
|
+
});
|
|
87
92
|
}
|
|
88
93
|
const intent = {
|
|
89
|
-
status: "pending",
|
|
90
94
|
amount: Number(amount),
|
|
91
95
|
currency: currency_code,
|
|
92
|
-
metadata: { ...data?.metadata ?? {}, session_id: data?.session_id ??
|
|
93
|
-
provider_metadata: data?.provider_metadata
|
|
96
|
+
metadata: { ...data?.metadata ?? {}, session_id: data?.session_id ?? null },
|
|
97
|
+
provider_metadata: data?.provider_metadata,
|
|
98
|
+
capture_method: "manual",
|
|
99
|
+
item_id: data?.item_id
|
|
94
100
|
};
|
|
95
101
|
let customer;
|
|
96
102
|
if (context?.account_holder?.data?.id) {
|
|
@@ -99,7 +105,10 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
99
105
|
customer = { email: data.email };
|
|
100
106
|
}
|
|
101
107
|
if (!customer) {
|
|
102
|
-
throw new utils.MedusaError(
|
|
108
|
+
throw new utils.MedusaError(
|
|
109
|
+
utils.MedusaError.Types.INVALID_DATA,
|
|
110
|
+
"Required: customer ID (account_holder) or email (data)"
|
|
111
|
+
);
|
|
103
112
|
}
|
|
104
113
|
if (typeof customer === "object" && "email" in customer) {
|
|
105
114
|
await core.tryCatchAsync(
|
|
@@ -107,7 +116,9 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
107
116
|
email: customer.email,
|
|
108
117
|
phone: data?.phone ?? "",
|
|
109
118
|
name: data?.name ? data.name : customer.email.split("@")[0],
|
|
110
|
-
metadata: {
|
|
119
|
+
metadata: {
|
|
120
|
+
PAYKIT_METADATA_KEY: JSON.stringify({ source: "medusa-paykit-adapter" })
|
|
121
|
+
}
|
|
111
122
|
})
|
|
112
123
|
);
|
|
113
124
|
} else {
|
|
@@ -117,9 +128,25 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
117
128
|
const [paymentIntentResult, paymentIntentError] = await core.tryCatchAsync(
|
|
118
129
|
this.paykit.payments.create(intent)
|
|
119
130
|
);
|
|
120
|
-
if (paymentIntentError)
|
|
121
|
-
throw new utils.MedusaError(
|
|
122
|
-
|
|
131
|
+
if (paymentIntentError) {
|
|
132
|
+
throw new utils.MedusaError(
|
|
133
|
+
utils.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
134
|
+
paymentIntentError.message
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
if (paymentIntentResult.requires_action && paymentIntentResult.payment_url) {
|
|
138
|
+
return {
|
|
139
|
+
id: paymentIntentResult.id,
|
|
140
|
+
status: utils.PaymentSessionStatus.REQUIRES_MORE,
|
|
141
|
+
data: {
|
|
142
|
+
payment_url: paymentIntentResult.payment_url
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
id: paymentIntentResult.id,
|
|
148
|
+
status: medusaStatus$InboundSchema(paymentIntentResult.status)
|
|
149
|
+
};
|
|
123
150
|
};
|
|
124
151
|
capturePayment = async (input) => {
|
|
125
152
|
if (this.options.debug) {
|
|
@@ -130,13 +157,24 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
130
157
|
input?.data ?? {},
|
|
131
158
|
"Missing required payment ID"
|
|
132
159
|
);
|
|
133
|
-
if (!id)
|
|
134
|
-
|
|
160
|
+
if (!id)
|
|
161
|
+
throw new utils.MedusaError(
|
|
162
|
+
utils.MedusaError.Types.INVALID_DATA,
|
|
163
|
+
"Missing required payment ID"
|
|
164
|
+
);
|
|
165
|
+
if (!amount)
|
|
166
|
+
throw new utils.MedusaError(
|
|
167
|
+
utils.MedusaError.Types.INVALID_DATA,
|
|
168
|
+
"Missing required payment amount"
|
|
169
|
+
);
|
|
135
170
|
const [paymentIntentResult, paymentIntentError] = await core.tryCatchAsync(
|
|
136
171
|
this.paykit.payments.capture(id, { amount: Number(amount) })
|
|
137
172
|
);
|
|
138
173
|
if (paymentIntentError)
|
|
139
|
-
throw new utils.MedusaError(
|
|
174
|
+
throw new utils.MedusaError(
|
|
175
|
+
utils.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
176
|
+
paymentIntentError.message
|
|
177
|
+
);
|
|
140
178
|
return { data: paymentIntentResult };
|
|
141
179
|
};
|
|
142
180
|
authorizePayment = async (input) => {
|
|
@@ -154,10 +192,19 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
154
192
|
input?.data ?? {},
|
|
155
193
|
"Missing required payment ID"
|
|
156
194
|
);
|
|
157
|
-
if (!id)
|
|
158
|
-
|
|
195
|
+
if (!id)
|
|
196
|
+
throw new utils.MedusaError(
|
|
197
|
+
utils.MedusaError.Types.INVALID_DATA,
|
|
198
|
+
"Missing required payment ID"
|
|
199
|
+
);
|
|
200
|
+
const [paymentIntentResult, paymentIntentError] = await core.tryCatchAsync(
|
|
201
|
+
this.paykit.payments.cancel(id)
|
|
202
|
+
);
|
|
159
203
|
if (paymentIntentError)
|
|
160
|
-
throw new utils.MedusaError(
|
|
204
|
+
throw new utils.MedusaError(
|
|
205
|
+
utils.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
206
|
+
paymentIntentError.message
|
|
207
|
+
);
|
|
161
208
|
return { data: paymentIntentResult };
|
|
162
209
|
};
|
|
163
210
|
deletePayment = async (input) => {
|
|
@@ -169,11 +216,24 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
169
216
|
input?.data ?? {},
|
|
170
217
|
"Missing required payment ID"
|
|
171
218
|
);
|
|
172
|
-
if (!id)
|
|
173
|
-
|
|
219
|
+
if (!id)
|
|
220
|
+
throw new utils.MedusaError(
|
|
221
|
+
utils.MedusaError.Types.INVALID_DATA,
|
|
222
|
+
"Missing required payment ID"
|
|
223
|
+
);
|
|
224
|
+
const [paymentIntentResult, paymentIntentError] = await core.tryCatchAsync(
|
|
225
|
+
this.paykit.payments.retrieve(id)
|
|
226
|
+
);
|
|
174
227
|
if (paymentIntentError)
|
|
175
|
-
throw new utils.MedusaError(
|
|
176
|
-
|
|
228
|
+
throw new utils.MedusaError(
|
|
229
|
+
utils.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
230
|
+
paymentIntentError.message
|
|
231
|
+
);
|
|
232
|
+
if (!paymentIntentResult)
|
|
233
|
+
throw new utils.MedusaError(
|
|
234
|
+
utils.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
235
|
+
"Payment not found"
|
|
236
|
+
);
|
|
177
237
|
return {
|
|
178
238
|
status: medusaStatus$InboundSchema(paymentIntentResult.status),
|
|
179
239
|
data: paymentIntentResult
|
|
@@ -188,7 +248,11 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
188
248
|
input?.data ?? {},
|
|
189
249
|
"Missing required payment ID"
|
|
190
250
|
);
|
|
191
|
-
if (!paymentId)
|
|
251
|
+
if (!paymentId)
|
|
252
|
+
throw new utils.MedusaError(
|
|
253
|
+
utils.MedusaError.Types.INVALID_DATA,
|
|
254
|
+
"Missing required payment ID"
|
|
255
|
+
);
|
|
192
256
|
const [refundResult, refundError] = await core.tryCatchAsync(
|
|
193
257
|
this.paykit.refunds.create({
|
|
194
258
|
payment_id: paymentId,
|
|
@@ -198,7 +262,11 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
198
262
|
provider_metadata: input.data?.provider_metadata ? input.data.provider_metadata : void 0
|
|
199
263
|
})
|
|
200
264
|
);
|
|
201
|
-
if (refundError)
|
|
265
|
+
if (refundError)
|
|
266
|
+
throw new utils.MedusaError(
|
|
267
|
+
utils.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
268
|
+
refundError.message
|
|
269
|
+
);
|
|
202
270
|
return { data: refundResult };
|
|
203
271
|
};
|
|
204
272
|
retrievePayment = async (input) => {
|
|
@@ -210,10 +278,19 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
210
278
|
input?.data ?? {},
|
|
211
279
|
"Missing required payment ID"
|
|
212
280
|
);
|
|
213
|
-
if (!id)
|
|
214
|
-
|
|
281
|
+
if (!id)
|
|
282
|
+
throw new utils.MedusaError(
|
|
283
|
+
utils.MedusaError.Types.INVALID_DATA,
|
|
284
|
+
"Missing required payment ID"
|
|
285
|
+
);
|
|
286
|
+
const [paymentIntentResult, paymentIntentError] = await core.tryCatchAsync(
|
|
287
|
+
this.paykit.payments.retrieve(id)
|
|
288
|
+
);
|
|
215
289
|
if (paymentIntentError)
|
|
216
|
-
throw new utils.MedusaError(
|
|
290
|
+
throw new utils.MedusaError(
|
|
291
|
+
utils.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
292
|
+
paymentIntentError.message
|
|
293
|
+
);
|
|
217
294
|
return { data: paymentIntentResult };
|
|
218
295
|
};
|
|
219
296
|
updatePayment = async (input) => {
|
|
@@ -226,13 +303,20 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
226
303
|
"Missing required payment ID"
|
|
227
304
|
);
|
|
228
305
|
if (!amount || !currency_code)
|
|
229
|
-
throw new utils.MedusaError(
|
|
306
|
+
throw new utils.MedusaError(
|
|
307
|
+
utils.MedusaError.Types.INVALID_DATA,
|
|
308
|
+
"Missing required amount or currency code"
|
|
309
|
+
);
|
|
230
310
|
const { id: paymentId } = core.validateRequiredKeys(
|
|
231
311
|
["id"],
|
|
232
312
|
input.data,
|
|
233
313
|
"Missing required payment ID"
|
|
234
314
|
);
|
|
235
|
-
if (!paymentId)
|
|
315
|
+
if (!paymentId)
|
|
316
|
+
throw new utils.MedusaError(
|
|
317
|
+
utils.MedusaError.Types.INVALID_DATA,
|
|
318
|
+
"Missing required payment ID"
|
|
319
|
+
);
|
|
236
320
|
const [paymentIntentResult, paymentIntentError] = await core.tryCatchAsync(
|
|
237
321
|
this.paykit.payments.update(paymentId, {
|
|
238
322
|
amount: Number(amount),
|
|
@@ -242,7 +326,10 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
242
326
|
})
|
|
243
327
|
);
|
|
244
328
|
if (paymentIntentError)
|
|
245
|
-
throw new utils.MedusaError(
|
|
329
|
+
throw new utils.MedusaError(
|
|
330
|
+
utils.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
331
|
+
paymentIntentError.message
|
|
332
|
+
);
|
|
246
333
|
return { data: paymentIntentResult };
|
|
247
334
|
};
|
|
248
335
|
getWebhookActionAndData = async (payload) => {
|
|
@@ -271,7 +358,10 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
271
358
|
const webhook = this.paykit.webhooks.setup({ webhookSecret: this.options.webhookSecret }).on("payment.created", async (event) => {
|
|
272
359
|
return {
|
|
273
360
|
action: utils.PaymentActions.PENDING,
|
|
274
|
-
data: {
|
|
361
|
+
data: {
|
|
362
|
+
session_id: event.data?.metadata?.session_id,
|
|
363
|
+
amount: event.data?.amount
|
|
364
|
+
}
|
|
275
365
|
};
|
|
276
366
|
}).on("payment.updated", async (event) => {
|
|
277
367
|
const statusActionMap = {
|
|
@@ -285,17 +375,26 @@ var PaykitMedusaJSAdapter = class extends utils.AbstractPaymentProvider {
|
|
|
285
375
|
};
|
|
286
376
|
return {
|
|
287
377
|
action: event.data?.status ? statusActionMap[event.data.status] : utils.PaymentActions.PENDING,
|
|
288
|
-
data: {
|
|
378
|
+
data: {
|
|
379
|
+
session_id: event.data?.metadata?.session_id,
|
|
380
|
+
amount: event.data?.amount
|
|
381
|
+
}
|
|
289
382
|
};
|
|
290
383
|
}).on("payment.canceled", async (event) => {
|
|
291
384
|
return {
|
|
292
385
|
action: utils.PaymentActions.CANCELED,
|
|
293
|
-
data: {
|
|
386
|
+
data: {
|
|
387
|
+
session_id: event.data?.metadata?.session_id,
|
|
388
|
+
amount: event.data?.amount
|
|
389
|
+
}
|
|
294
390
|
};
|
|
295
391
|
});
|
|
392
|
+
const stringifiedHeaders = Object.fromEntries(
|
|
393
|
+
Object.entries(headers).map(([key, value]) => [key, String(value)])
|
|
394
|
+
);
|
|
296
395
|
const webhookEvents = await webhook.handle({
|
|
297
396
|
body: rawData,
|
|
298
|
-
headers,
|
|
397
|
+
headers: new Headers(stringifiedHeaders),
|
|
299
398
|
fullUrl
|
|
300
399
|
});
|
|
301
400
|
return webhookEvents;
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ModuleProvider, Modules, AbstractPaymentProvider, MedusaError,
|
|
1
|
+
import { ModuleProvider, Modules, AbstractPaymentProvider, MedusaError, PaymentSessionStatus, PaymentActions } from '@medusajs/framework/utils';
|
|
2
2
|
import { providerSchema, PayKit, tryCatchAsync, validateRequiredKeys } from '@paykit-sdk/core';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
|
|
@@ -79,14 +79,20 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
79
79
|
data
|
|
80
80
|
}) => {
|
|
81
81
|
if (this.options.debug) {
|
|
82
|
-
console.info("[PayKit] Initiating payment", {
|
|
82
|
+
console.info("[PayKit] Initiating payment", {
|
|
83
|
+
context,
|
|
84
|
+
amount,
|
|
85
|
+
currency_code,
|
|
86
|
+
data
|
|
87
|
+
});
|
|
83
88
|
}
|
|
84
89
|
const intent = {
|
|
85
|
-
status: "pending",
|
|
86
90
|
amount: Number(amount),
|
|
87
91
|
currency: currency_code,
|
|
88
|
-
metadata: { ...data?.metadata ?? {}, session_id: data?.session_id ??
|
|
89
|
-
provider_metadata: data?.provider_metadata
|
|
92
|
+
metadata: { ...data?.metadata ?? {}, session_id: data?.session_id ?? null },
|
|
93
|
+
provider_metadata: data?.provider_metadata,
|
|
94
|
+
capture_method: "manual",
|
|
95
|
+
item_id: data?.item_id
|
|
90
96
|
};
|
|
91
97
|
let customer;
|
|
92
98
|
if (context?.account_holder?.data?.id) {
|
|
@@ -95,7 +101,10 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
95
101
|
customer = { email: data.email };
|
|
96
102
|
}
|
|
97
103
|
if (!customer) {
|
|
98
|
-
throw new MedusaError(
|
|
104
|
+
throw new MedusaError(
|
|
105
|
+
MedusaError.Types.INVALID_DATA,
|
|
106
|
+
"Required: customer ID (account_holder) or email (data)"
|
|
107
|
+
);
|
|
99
108
|
}
|
|
100
109
|
if (typeof customer === "object" && "email" in customer) {
|
|
101
110
|
await tryCatchAsync(
|
|
@@ -103,7 +112,9 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
103
112
|
email: customer.email,
|
|
104
113
|
phone: data?.phone ?? "",
|
|
105
114
|
name: data?.name ? data.name : customer.email.split("@")[0],
|
|
106
|
-
metadata: {
|
|
115
|
+
metadata: {
|
|
116
|
+
PAYKIT_METADATA_KEY: JSON.stringify({ source: "medusa-paykit-adapter" })
|
|
117
|
+
}
|
|
107
118
|
})
|
|
108
119
|
);
|
|
109
120
|
} else {
|
|
@@ -113,9 +124,25 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
113
124
|
const [paymentIntentResult, paymentIntentError] = await tryCatchAsync(
|
|
114
125
|
this.paykit.payments.create(intent)
|
|
115
126
|
);
|
|
116
|
-
if (paymentIntentError)
|
|
117
|
-
throw new MedusaError(
|
|
118
|
-
|
|
127
|
+
if (paymentIntentError) {
|
|
128
|
+
throw new MedusaError(
|
|
129
|
+
MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
130
|
+
paymentIntentError.message
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
if (paymentIntentResult.requires_action && paymentIntentResult.payment_url) {
|
|
134
|
+
return {
|
|
135
|
+
id: paymentIntentResult.id,
|
|
136
|
+
status: PaymentSessionStatus.REQUIRES_MORE,
|
|
137
|
+
data: {
|
|
138
|
+
payment_url: paymentIntentResult.payment_url
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
id: paymentIntentResult.id,
|
|
144
|
+
status: medusaStatus$InboundSchema(paymentIntentResult.status)
|
|
145
|
+
};
|
|
119
146
|
};
|
|
120
147
|
capturePayment = async (input) => {
|
|
121
148
|
if (this.options.debug) {
|
|
@@ -126,13 +153,24 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
126
153
|
input?.data ?? {},
|
|
127
154
|
"Missing required payment ID"
|
|
128
155
|
);
|
|
129
|
-
if (!id)
|
|
130
|
-
|
|
156
|
+
if (!id)
|
|
157
|
+
throw new MedusaError(
|
|
158
|
+
MedusaError.Types.INVALID_DATA,
|
|
159
|
+
"Missing required payment ID"
|
|
160
|
+
);
|
|
161
|
+
if (!amount)
|
|
162
|
+
throw new MedusaError(
|
|
163
|
+
MedusaError.Types.INVALID_DATA,
|
|
164
|
+
"Missing required payment amount"
|
|
165
|
+
);
|
|
131
166
|
const [paymentIntentResult, paymentIntentError] = await tryCatchAsync(
|
|
132
167
|
this.paykit.payments.capture(id, { amount: Number(amount) })
|
|
133
168
|
);
|
|
134
169
|
if (paymentIntentError)
|
|
135
|
-
throw new MedusaError(
|
|
170
|
+
throw new MedusaError(
|
|
171
|
+
MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
172
|
+
paymentIntentError.message
|
|
173
|
+
);
|
|
136
174
|
return { data: paymentIntentResult };
|
|
137
175
|
};
|
|
138
176
|
authorizePayment = async (input) => {
|
|
@@ -150,10 +188,19 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
150
188
|
input?.data ?? {},
|
|
151
189
|
"Missing required payment ID"
|
|
152
190
|
);
|
|
153
|
-
if (!id)
|
|
154
|
-
|
|
191
|
+
if (!id)
|
|
192
|
+
throw new MedusaError(
|
|
193
|
+
MedusaError.Types.INVALID_DATA,
|
|
194
|
+
"Missing required payment ID"
|
|
195
|
+
);
|
|
196
|
+
const [paymentIntentResult, paymentIntentError] = await tryCatchAsync(
|
|
197
|
+
this.paykit.payments.cancel(id)
|
|
198
|
+
);
|
|
155
199
|
if (paymentIntentError)
|
|
156
|
-
throw new MedusaError(
|
|
200
|
+
throw new MedusaError(
|
|
201
|
+
MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
202
|
+
paymentIntentError.message
|
|
203
|
+
);
|
|
157
204
|
return { data: paymentIntentResult };
|
|
158
205
|
};
|
|
159
206
|
deletePayment = async (input) => {
|
|
@@ -165,11 +212,24 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
165
212
|
input?.data ?? {},
|
|
166
213
|
"Missing required payment ID"
|
|
167
214
|
);
|
|
168
|
-
if (!id)
|
|
169
|
-
|
|
215
|
+
if (!id)
|
|
216
|
+
throw new MedusaError(
|
|
217
|
+
MedusaError.Types.INVALID_DATA,
|
|
218
|
+
"Missing required payment ID"
|
|
219
|
+
);
|
|
220
|
+
const [paymentIntentResult, paymentIntentError] = await tryCatchAsync(
|
|
221
|
+
this.paykit.payments.retrieve(id)
|
|
222
|
+
);
|
|
170
223
|
if (paymentIntentError)
|
|
171
|
-
throw new MedusaError(
|
|
172
|
-
|
|
224
|
+
throw new MedusaError(
|
|
225
|
+
MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
226
|
+
paymentIntentError.message
|
|
227
|
+
);
|
|
228
|
+
if (!paymentIntentResult)
|
|
229
|
+
throw new MedusaError(
|
|
230
|
+
MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
231
|
+
"Payment not found"
|
|
232
|
+
);
|
|
173
233
|
return {
|
|
174
234
|
status: medusaStatus$InboundSchema(paymentIntentResult.status),
|
|
175
235
|
data: paymentIntentResult
|
|
@@ -184,7 +244,11 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
184
244
|
input?.data ?? {},
|
|
185
245
|
"Missing required payment ID"
|
|
186
246
|
);
|
|
187
|
-
if (!paymentId)
|
|
247
|
+
if (!paymentId)
|
|
248
|
+
throw new MedusaError(
|
|
249
|
+
MedusaError.Types.INVALID_DATA,
|
|
250
|
+
"Missing required payment ID"
|
|
251
|
+
);
|
|
188
252
|
const [refundResult, refundError] = await tryCatchAsync(
|
|
189
253
|
this.paykit.refunds.create({
|
|
190
254
|
payment_id: paymentId,
|
|
@@ -194,7 +258,11 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
194
258
|
provider_metadata: input.data?.provider_metadata ? input.data.provider_metadata : void 0
|
|
195
259
|
})
|
|
196
260
|
);
|
|
197
|
-
if (refundError)
|
|
261
|
+
if (refundError)
|
|
262
|
+
throw new MedusaError(
|
|
263
|
+
MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
264
|
+
refundError.message
|
|
265
|
+
);
|
|
198
266
|
return { data: refundResult };
|
|
199
267
|
};
|
|
200
268
|
retrievePayment = async (input) => {
|
|
@@ -206,10 +274,19 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
206
274
|
input?.data ?? {},
|
|
207
275
|
"Missing required payment ID"
|
|
208
276
|
);
|
|
209
|
-
if (!id)
|
|
210
|
-
|
|
277
|
+
if (!id)
|
|
278
|
+
throw new MedusaError(
|
|
279
|
+
MedusaError.Types.INVALID_DATA,
|
|
280
|
+
"Missing required payment ID"
|
|
281
|
+
);
|
|
282
|
+
const [paymentIntentResult, paymentIntentError] = await tryCatchAsync(
|
|
283
|
+
this.paykit.payments.retrieve(id)
|
|
284
|
+
);
|
|
211
285
|
if (paymentIntentError)
|
|
212
|
-
throw new MedusaError(
|
|
286
|
+
throw new MedusaError(
|
|
287
|
+
MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
288
|
+
paymentIntentError.message
|
|
289
|
+
);
|
|
213
290
|
return { data: paymentIntentResult };
|
|
214
291
|
};
|
|
215
292
|
updatePayment = async (input) => {
|
|
@@ -222,13 +299,20 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
222
299
|
"Missing required payment ID"
|
|
223
300
|
);
|
|
224
301
|
if (!amount || !currency_code)
|
|
225
|
-
throw new MedusaError(
|
|
302
|
+
throw new MedusaError(
|
|
303
|
+
MedusaError.Types.INVALID_DATA,
|
|
304
|
+
"Missing required amount or currency code"
|
|
305
|
+
);
|
|
226
306
|
const { id: paymentId } = validateRequiredKeys(
|
|
227
307
|
["id"],
|
|
228
308
|
input.data,
|
|
229
309
|
"Missing required payment ID"
|
|
230
310
|
);
|
|
231
|
-
if (!paymentId)
|
|
311
|
+
if (!paymentId)
|
|
312
|
+
throw new MedusaError(
|
|
313
|
+
MedusaError.Types.INVALID_DATA,
|
|
314
|
+
"Missing required payment ID"
|
|
315
|
+
);
|
|
232
316
|
const [paymentIntentResult, paymentIntentError] = await tryCatchAsync(
|
|
233
317
|
this.paykit.payments.update(paymentId, {
|
|
234
318
|
amount: Number(amount),
|
|
@@ -238,7 +322,10 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
238
322
|
})
|
|
239
323
|
);
|
|
240
324
|
if (paymentIntentError)
|
|
241
|
-
throw new MedusaError(
|
|
325
|
+
throw new MedusaError(
|
|
326
|
+
MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR,
|
|
327
|
+
paymentIntentError.message
|
|
328
|
+
);
|
|
242
329
|
return { data: paymentIntentResult };
|
|
243
330
|
};
|
|
244
331
|
getWebhookActionAndData = async (payload) => {
|
|
@@ -267,7 +354,10 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
267
354
|
const webhook = this.paykit.webhooks.setup({ webhookSecret: this.options.webhookSecret }).on("payment.created", async (event) => {
|
|
268
355
|
return {
|
|
269
356
|
action: PaymentActions.PENDING,
|
|
270
|
-
data: {
|
|
357
|
+
data: {
|
|
358
|
+
session_id: event.data?.metadata?.session_id,
|
|
359
|
+
amount: event.data?.amount
|
|
360
|
+
}
|
|
271
361
|
};
|
|
272
362
|
}).on("payment.updated", async (event) => {
|
|
273
363
|
const statusActionMap = {
|
|
@@ -281,17 +371,26 @@ var PaykitMedusaJSAdapter = class extends AbstractPaymentProvider {
|
|
|
281
371
|
};
|
|
282
372
|
return {
|
|
283
373
|
action: event.data?.status ? statusActionMap[event.data.status] : PaymentActions.PENDING,
|
|
284
|
-
data: {
|
|
374
|
+
data: {
|
|
375
|
+
session_id: event.data?.metadata?.session_id,
|
|
376
|
+
amount: event.data?.amount
|
|
377
|
+
}
|
|
285
378
|
};
|
|
286
379
|
}).on("payment.canceled", async (event) => {
|
|
287
380
|
return {
|
|
288
381
|
action: PaymentActions.CANCELED,
|
|
289
|
-
data: {
|
|
382
|
+
data: {
|
|
383
|
+
session_id: event.data?.metadata?.session_id,
|
|
384
|
+
amount: event.data?.amount
|
|
385
|
+
}
|
|
290
386
|
};
|
|
291
387
|
});
|
|
388
|
+
const stringifiedHeaders = Object.fromEntries(
|
|
389
|
+
Object.entries(headers).map(([key, value]) => [key, String(value)])
|
|
390
|
+
);
|
|
292
391
|
const webhookEvents = await webhook.handle({
|
|
293
392
|
body: rawData,
|
|
294
|
-
headers,
|
|
393
|
+
headers: new Headers(stringifiedHeaders),
|
|
295
394
|
fullUrl
|
|
296
395
|
});
|
|
297
396
|
return webhookEvents;
|