@abdssamie/adyen-payments 0.1.0

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 (69) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +258 -0
  3. package/dist/client/_generated/_ignore.d.ts +1 -0
  4. package/dist/client/_generated/_ignore.d.ts.map +1 -0
  5. package/dist/client/_generated/_ignore.js +3 -0
  6. package/dist/client/_generated/_ignore.js.map +1 -0
  7. package/dist/client/index.d.ts +206 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +566 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/component/_generated/api.d.ts +36 -0
  12. package/dist/component/_generated/api.d.ts.map +1 -0
  13. package/dist/component/_generated/api.js +31 -0
  14. package/dist/component/_generated/api.js.map +1 -0
  15. package/dist/component/_generated/component.d.ts +215 -0
  16. package/dist/component/_generated/component.d.ts.map +1 -0
  17. package/dist/component/_generated/component.js +11 -0
  18. package/dist/component/_generated/component.js.map +1 -0
  19. package/dist/component/_generated/dataModel.d.ts +46 -0
  20. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  21. package/dist/component/_generated/dataModel.js +11 -0
  22. package/dist/component/_generated/dataModel.js.map +1 -0
  23. package/dist/component/_generated/server.d.ts +121 -0
  24. package/dist/component/_generated/server.d.ts.map +1 -0
  25. package/dist/component/_generated/server.js +78 -0
  26. package/dist/component/_generated/server.js.map +1 -0
  27. package/dist/component/convex.config.d.ts +3 -0
  28. package/dist/component/convex.config.d.ts.map +1 -0
  29. package/dist/component/convex.config.js +3 -0
  30. package/dist/component/convex.config.js.map +1 -0
  31. package/dist/component/private.d.ts +71 -0
  32. package/dist/component/private.d.ts.map +1 -0
  33. package/dist/component/private.js +250 -0
  34. package/dist/component/private.js.map +1 -0
  35. package/dist/component/public.d.ts +170 -0
  36. package/dist/component/public.d.ts.map +1 -0
  37. package/dist/component/public.js +210 -0
  38. package/dist/component/public.js.map +1 -0
  39. package/dist/component/schema.d.ts +101 -0
  40. package/dist/component/schema.d.ts.map +1 -0
  41. package/dist/component/schema.js +63 -0
  42. package/dist/component/schema.js.map +1 -0
  43. package/dist/react/hooks.d.ts +182 -0
  44. package/dist/react/hooks.d.ts.map +1 -0
  45. package/dist/react/hooks.js +215 -0
  46. package/dist/react/hooks.js.map +1 -0
  47. package/dist/react/index.d.ts +3 -0
  48. package/dist/react/index.d.ts.map +1 -0
  49. package/dist/react/index.js +3 -0
  50. package/dist/react/index.js.map +1 -0
  51. package/package.json +104 -0
  52. package/src/client/_generated/_ignore.ts +1 -0
  53. package/src/client/index.test.ts +196 -0
  54. package/src/client/index.ts +823 -0
  55. package/src/client/setup.test.ts +26 -0
  56. package/src/client/webhooks.test.ts +182 -0
  57. package/src/component/_generated/api.ts +52 -0
  58. package/src/component/_generated/component.ts +293 -0
  59. package/src/component/_generated/dataModel.ts +60 -0
  60. package/src/component/_generated/server.ts +156 -0
  61. package/src/component/convex.config.ts +3 -0
  62. package/src/component/private.ts +277 -0
  63. package/src/component/public.test.ts +92 -0
  64. package/src/component/public.ts +229 -0
  65. package/src/component/schema.ts +67 -0
  66. package/src/component/setup.test.ts +11 -0
  67. package/src/react/hooks.ts +488 -0
  68. package/src/react/index.ts +18 -0
  69. package/src/test.ts +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,566 @@
1
+ "use node";
2
+ import { Client, CheckoutAPI, hmacValidator } from "@adyen/api-library";
3
+ import { httpActionGeneric } from "convex/server";
4
+ import { NotificationRequestItem } from "@adyen/api-library/lib/src/typings/notification/models.js";
5
+ export const EventCodeEnum = NotificationRequestItem.EventCodeEnum;
6
+ /**
7
+ * Adyen Payments Client
8
+ *
9
+ * Provides methods for managing shoppers, stored card payment methods,
10
+ * and performing checkout sessions or payments via the Adyen API.
11
+ */
12
+ export class AdyenPayments {
13
+ component;
14
+ _apiKey;
15
+ _merchantAccount;
16
+ _environment;
17
+ captureDelayHours;
18
+ constructor(component, options) {
19
+ this.component = component;
20
+ this._apiKey = options?.ADYEN_API_KEY ?? process.env.ADYEN_API_KEY;
21
+ this._merchantAccount =
22
+ options?.ADYEN_MERCHANT_ACCOUNT ?? process.env.ADYEN_MERCHANT_ACCOUNT;
23
+ const env = options?.ADYEN_ENVIRONMENT ?? process.env.ADYEN_ENVIRONMENT;
24
+ this._environment = env === "LIVE" ? "LIVE" : "TEST";
25
+ if (options?.autoCapture === false) {
26
+ this.captureDelayHours = -1;
27
+ }
28
+ else if (options?.autoCapture === true && options?.captureDelayHours === -1) {
29
+ this.captureDelayHours = 0;
30
+ }
31
+ else {
32
+ this.captureDelayHours = options?.captureDelayHours ?? 0;
33
+ }
34
+ }
35
+ get apiKey() {
36
+ if (!this._apiKey) {
37
+ throw new Error("ADYEN_API_KEY environment variable is not set");
38
+ }
39
+ return this._apiKey;
40
+ }
41
+ get merchantAccount() {
42
+ if (!this._merchantAccount) {
43
+ throw new Error("ADYEN_MERCHANT_ACCOUNT environment variable is not set");
44
+ }
45
+ return this._merchantAccount;
46
+ }
47
+ get environment() {
48
+ return this._environment;
49
+ }
50
+ /**
51
+ * Helper to initialize the official Adyen SDK Client
52
+ */
53
+ getAdyenClient() {
54
+ const client = new Client({
55
+ apiKey: this.apiKey,
56
+ environment: this.environment,
57
+ });
58
+ return new CheckoutAPI(client);
59
+ }
60
+ // ============================================================================
61
+ // SHOPPER MANAGEMENT
62
+ // ============================================================================
63
+ /**
64
+ * Manually create or update a shopper mapping in the database.
65
+ */
66
+ async createShopper(ctx, args) {
67
+ return await ctx.runMutation(this.component.public.createOrUpdateShopper, {
68
+ shopperReference: args.shopperReference,
69
+ email: args.email,
70
+ name: args.name,
71
+ userId: args.userId,
72
+ metadata: args.metadata,
73
+ });
74
+ }
75
+ /**
76
+ * Get or create a shopper for a user ID.
77
+ * Checks database indexes first to avoid creating duplicates.
78
+ */
79
+ async getOrCreateShopper(ctx, args) {
80
+ // Check by user ID first
81
+ const existingByUserId = await ctx.runQuery(this.component.public.getShopperByUserId, { userId: args.userId });
82
+ if (existingByUserId) {
83
+ return { shopperReference: existingByUserId.shopperReference, isNew: false };
84
+ }
85
+ // Check by email second
86
+ if (args.email) {
87
+ const existingByEmail = await ctx.runQuery(this.component.public.getShopperByEmail, { email: args.email });
88
+ if (existingByEmail) {
89
+ return { shopperReference: existingByEmail.shopperReference, isNew: false };
90
+ }
91
+ }
92
+ // Otherwise, create a new shopper mapping using the userId as shopperReference
93
+ await ctx.runMutation(this.component.public.createOrUpdateShopper, {
94
+ shopperReference: args.userId,
95
+ userId: args.userId,
96
+ email: args.email,
97
+ name: args.name,
98
+ });
99
+ return { shopperReference: args.userId, isNew: true };
100
+ }
101
+ // ============================================================================
102
+ // CHECKOUT SESSIONS
103
+ // ============================================================================
104
+ /**
105
+ * Create an Adyen Checkout Session to initialize Drop-in/Components SDK.
106
+ */
107
+ async createCheckoutSession(ctx, args) {
108
+ const checkout = this.getAdyenClient();
109
+ const merchantReference = `sess_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;
110
+ let captureDelayHours = args.captureDelayHours;
111
+ if (args.autoCapture === false) {
112
+ captureDelayHours = -1;
113
+ }
114
+ else if (args.autoCapture === true) {
115
+ if (captureDelayHours === undefined || captureDelayHours === -1) {
116
+ captureDelayHours = 0;
117
+ }
118
+ }
119
+ else if (captureDelayHours === undefined) {
120
+ captureDelayHours = this.captureDelayHours;
121
+ }
122
+ const response = await checkout.PaymentsApi.sessions({
123
+ amount: { value: args.amount, currency: args.currency },
124
+ reference: merchantReference,
125
+ merchantAccount: this.merchantAccount,
126
+ returnUrl: args.successUrl,
127
+ shopperReference: args.shopperReference,
128
+ captureDelayHours: captureDelayHours,
129
+ // If shopper is logged in, enable saved payment methods and ask for consent
130
+ ...(args.shopperReference && {
131
+ storePaymentMethodMode: "askForConsent",
132
+ recurringProcessingModel: "Subscription",
133
+ }),
134
+ });
135
+ // Persist session locally
136
+ await ctx.runMutation(this.component.private.insertCheckoutSession, {
137
+ sessionId: response.id,
138
+ sessionData: response.sessionData || "",
139
+ shopperReference: args.shopperReference,
140
+ merchantReference,
141
+ amount: args.amount,
142
+ currency: args.currency,
143
+ url: response.url || undefined,
144
+ autoCapture: captureDelayHours === 0,
145
+ });
146
+ return {
147
+ sessionId: response.id,
148
+ sessionData: response.sessionData || "",
149
+ url: response.url || null,
150
+ merchantReference,
151
+ };
152
+ }
153
+ // ============================================================================
154
+ // STORED PAYMENT DETAILS
155
+ // ============================================================================
156
+ /**
157
+ * Retrieve and sync tokenized payment methods stored for a shopper.
158
+ */
159
+ async listStoredPaymentMethods(ctx, args) {
160
+ const checkout = this.getAdyenClient();
161
+ const response = await checkout.PaymentsApi.paymentMethods({
162
+ merchantAccount: this.merchantAccount,
163
+ shopperReference: args.shopperReference,
164
+ });
165
+ const storedMethods = response.storedPaymentMethods || [];
166
+ const mappedMethods = storedMethods.map((m) => ({
167
+ recurringDetailReference: m.id || "",
168
+ variant: m.brand || m.type || "unknown",
169
+ cardLast4: m.lastFour || undefined,
170
+ cardExpiryMonth: m.expiryMonth || undefined,
171
+ cardExpiryYear: m.expiryYear || undefined,
172
+ }));
173
+ // Update database state
174
+ await ctx.runMutation(this.component.private.syncPaymentMethods, {
175
+ shopperReference: args.shopperReference,
176
+ paymentMethods: mappedMethods,
177
+ });
178
+ return mappedMethods;
179
+ }
180
+ /**
181
+ * Disable/delete a stored payment method token in Adyen and local database.
182
+ */
183
+ async deleteStoredPaymentMethod(ctx, args) {
184
+ const checkout = this.getAdyenClient();
185
+ await checkout.RecurringApi.deleteTokenForStoredPaymentDetails(args.recurringDetailReference, args.shopperReference, this.merchantAccount);
186
+ // Retrieve current methods, filter out the disabled one, and sync db
187
+ const currentMethods = await ctx.runQuery(this.component.public.listPaymentMethods, { shopperReference: args.shopperReference });
188
+ const updatedMethods = currentMethods
189
+ .filter((m) => m.recurringDetailReference !== args.recurringDetailReference)
190
+ .map(({ shopperReference: _shopperReference, ...rest }) => rest);
191
+ await ctx.runMutation(this.component.private.syncPaymentMethods, {
192
+ shopperReference: args.shopperReference,
193
+ paymentMethods: updatedMethods,
194
+ });
195
+ return null;
196
+ }
197
+ // ============================================================================
198
+ // RECURRING CHARGES & PAYMENTS
199
+ // ============================================================================
200
+ /**
201
+ * Charge a stored payment method token (Merchant Initiated Transaction / Subscription).
202
+ */
203
+ async chargeStoredCard(ctx, args) {
204
+ const checkout = this.getAdyenClient();
205
+ const merchantReference = args.reference ?? `rec_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;
206
+ const returnUrl = args.returnUrl ?? process.env.APP_URL;
207
+ if (!returnUrl) {
208
+ throw new Error("returnUrl must be provided in chargeStoredCard arguments or configured via the APP_URL environment variable");
209
+ }
210
+ let captureDelayHours = args.captureDelayHours;
211
+ if (args.autoCapture === false) {
212
+ captureDelayHours = -1;
213
+ }
214
+ else if (args.autoCapture === true) {
215
+ if (captureDelayHours === undefined || captureDelayHours === -1) {
216
+ captureDelayHours = 0;
217
+ }
218
+ }
219
+ else if (captureDelayHours === undefined) {
220
+ captureDelayHours = this.captureDelayHours;
221
+ }
222
+ const response = await checkout.PaymentsApi.payments({
223
+ amount: { value: args.amount, currency: args.currency },
224
+ reference: merchantReference,
225
+ merchantAccount: this.merchantAccount,
226
+ shopperReference: args.shopperReference,
227
+ returnUrl,
228
+ paymentMethod: {
229
+ type: "scheme",
230
+ storedPaymentMethodId: args.recurringDetailReference,
231
+ },
232
+ shopperInteraction: "ContAuth",
233
+ recurringProcessingModel: "Subscription",
234
+ captureDelayHours: captureDelayHours,
235
+ });
236
+ const isAutoCapture = captureDelayHours === 0;
237
+ const status = response.resultCode === "Authorised"
238
+ ? (isAutoCapture ? "captured" : "authorised")
239
+ : response.resultCode?.toLowerCase() || "refused";
240
+ // Record transaction
241
+ await ctx.runMutation(this.component.private.recordPayment, {
242
+ pspReference: response.pspReference || "unknown",
243
+ shopperReference: args.shopperReference,
244
+ merchantReference,
245
+ amount: args.amount,
246
+ currency: args.currency,
247
+ status,
248
+ paymentMethod: response.paymentMethod?.type || "scheme",
249
+ metadata: args.metadata,
250
+ });
251
+ return {
252
+ pspReference: response.pspReference || null,
253
+ status,
254
+ resultCode: response.resultCode || "Refused",
255
+ merchantReference,
256
+ };
257
+ }
258
+ // ============================================================================
259
+ // PAYMENT MODIFICATIONS
260
+ // ============================================================================
261
+ /**
262
+ * Capture an authorised payment.
263
+ */
264
+ async capturePayment(ctx, args) {
265
+ const checkout = this.getAdyenClient();
266
+ const response = await checkout.ModificationsApi.captureAuthorisedPayment(args.pspReference, {
267
+ merchantAccount: this.merchantAccount,
268
+ amount: { value: args.amount, currency: args.currency },
269
+ });
270
+ await ctx.runMutation(this.component.private.updatePaymentStatus, {
271
+ pspReference: args.pspReference,
272
+ status: "captured",
273
+ });
274
+ return {
275
+ pspReference: response.pspReference,
276
+ status: response.status,
277
+ };
278
+ }
279
+ /**
280
+ * Refund a captured payment.
281
+ */
282
+ async refundPayment(ctx, args) {
283
+ const checkout = this.getAdyenClient();
284
+ const response = await checkout.ModificationsApi.refundCapturedPayment(args.pspReference, {
285
+ merchantAccount: this.merchantAccount,
286
+ amount: { value: args.amount, currency: args.currency },
287
+ });
288
+ await ctx.runMutation(this.component.private.updatePaymentStatus, {
289
+ pspReference: args.pspReference,
290
+ status: "refunded",
291
+ });
292
+ return {
293
+ pspReference: response.pspReference,
294
+ status: response.status,
295
+ };
296
+ }
297
+ /**
298
+ * Cancel an uncaptured authorized payment.
299
+ */
300
+ async cancelPayment(ctx, args) {
301
+ const checkout = this.getAdyenClient();
302
+ const response = await checkout.ModificationsApi.cancelAuthorisedPaymentByPspReference(args.pspReference, { merchantAccount: this.merchantAccount });
303
+ await ctx.runMutation(this.component.private.updatePaymentStatus, {
304
+ pspReference: args.pspReference,
305
+ status: "cancelled",
306
+ });
307
+ return {
308
+ pspReference: response.pspReference,
309
+ status: response.status,
310
+ };
311
+ }
312
+ }
313
+ /**
314
+ * Creates a raw webhook handler function for use with `httpAction` in a
315
+ * `"use node"` file.
316
+ *
317
+ * Because `http.ts` cannot have the `"use node"` directive, the recommended
318
+ * pattern is:
319
+ *
320
+ * ```ts
321
+ * // adyenWebhooks.ts — "use node"
322
+ * import { httpAction } from "./_generated/server";
323
+ * import { components } from "./_generated/api";
324
+ * import { createWebhookHandler } from "@abdssamie/adyen-payments";
325
+ *
326
+ * export const webhookHandler = httpAction(
327
+ * createWebhookHandler(components.adyenPayments, { ... })
328
+ * );
329
+ *
330
+ * // http.ts — no directive
331
+ * import { httpRouter } from "convex/server";
332
+ * import { webhookHandler } from "./adyenWebhooks";
333
+ *
334
+ * const http = httpRouter();
335
+ * http.route({ path: "/adyen/webhooks", method: "POST", handler: webhookHandler });
336
+ * export default http;
337
+ * ```
338
+ */
339
+ export function createWebhookHandler(component, config) {
340
+ const eventHandlers = config?.events ?? {};
341
+ return async (ctx, req) => {
342
+ const hmacKey = config?.ADYEN_HMAC_KEY || process.env.ADYEN_HMAC_KEY;
343
+ if (!hmacKey) {
344
+ console.error("❌ ADYEN_HMAC_KEY is not set");
345
+ return new Response("HMAC key not configured", { status: 500 });
346
+ }
347
+ let bodyText;
348
+ try {
349
+ bodyText = await req.text();
350
+ }
351
+ catch (err) {
352
+ console.error("❌ Failed to read request body:", err);
353
+ return new Response("Failed to read body", { status: 400 });
354
+ }
355
+ let payload;
356
+ try {
357
+ payload = JSON.parse(bodyText);
358
+ }
359
+ catch (err) {
360
+ console.error("❌ Failed to parse JSON:", err);
361
+ return new Response("Invalid JSON", { status: 400 });
362
+ }
363
+ const notificationItems = payload.notificationItems;
364
+ if (!Array.isArray(notificationItems)) {
365
+ console.error("❌ Invalid Adyen notification format");
366
+ return new Response("Invalid notification format", { status: 400 });
367
+ }
368
+ const validator = new hmacValidator();
369
+ for (const wrapper of notificationItems) {
370
+ const item = wrapper.NotificationRequestItem;
371
+ if (!item)
372
+ continue;
373
+ // Verify HMAC signature
374
+ let isValid = false;
375
+ try {
376
+ isValid = validator.validateHMAC(item, hmacKey);
377
+ }
378
+ catch (err) {
379
+ console.error("❌ HMAC validation threw an error:", err);
380
+ }
381
+ if (!isValid) {
382
+ console.error("❌ Adyen Webhook signature verification failed for PSP:", item.pspReference);
383
+ return new Response("Invalid signature", { status: 401 });
384
+ }
385
+ // Process notification with default DB sync handler
386
+ try {
387
+ await processNotification(ctx, component, item);
388
+ // Call generic handler if provided
389
+ if (config?.onNotification) {
390
+ await config.onNotification(ctx, item);
391
+ }
392
+ // Call custom event-specific handler if provided
393
+ const eventCode = item.eventCode;
394
+ const customHandler = eventHandlers[eventCode];
395
+ if (customHandler) {
396
+ await customHandler(ctx, item);
397
+ }
398
+ }
399
+ catch (err) {
400
+ console.error("❌ Error processing webhook notification:", err);
401
+ return new Response("Error processing notification", { status: 500 });
402
+ }
403
+ }
404
+ // Adyen requires returning "[accepted]" to acknowledge receipt
405
+ return new Response("[accepted]", {
406
+ status: 200,
407
+ headers: { "Content-Type": "text/plain" },
408
+ });
409
+ };
410
+ }
411
+ /**
412
+ * Convenience helper that registers the Adyen webhook route directly on an
413
+ * `HttpRouter`.
414
+ *
415
+ * @deprecated Prefer `createWebhookHandler` + `httpAction` in a `"use node"`
416
+ * file — see the `createWebhookHandler` JSDoc for the recommended pattern.
417
+ * This function must be called from a `"use node"` file when used.
418
+ */
419
+ export function registerRoutes(http, component, config) {
420
+ const webhookPath = config?.webhookPath ?? "/adyen/webhooks";
421
+ const { webhookPath: _drop, ...handlerConfig } = config ?? {};
422
+ http.route({
423
+ path: webhookPath,
424
+ method: "POST",
425
+ handler: httpActionGeneric(createWebhookHandler(component, handlerConfig)),
426
+ });
427
+ }
428
+ async function processNotification(ctx, component, item) {
429
+ const eventCode = item.eventCode;
430
+ const success = item.success === "true";
431
+ const pspReference = item.pspReference;
432
+ const originalReference = item.originalReference;
433
+ const merchantReference = item.merchantReference;
434
+ const amountValue = item.amount?.value;
435
+ const amountCurrency = item.amount?.currency;
436
+ let shopperReference = item.shopperReference;
437
+ let isAutoCapture = false;
438
+ if (merchantReference) {
439
+ const session = await ctx.runQuery(component.public.getCheckoutSessionByMerchantReference, { merchantReference });
440
+ if (session) {
441
+ if (session.shopperReference) {
442
+ shopperReference = session.shopperReference;
443
+ }
444
+ isAutoCapture = session.autoCapture ?? false;
445
+ }
446
+ }
447
+ switch (eventCode) {
448
+ case EventCodeEnum.Authorisation: {
449
+ console.log("📥 AUTHORISATION webhook incoming payload:", JSON.stringify(item, null, 2));
450
+ const status = success
451
+ ? (isAutoCapture ? "captured" : "authorised")
452
+ : "refused";
453
+ await ctx.runMutation(component.private.recordPayment, {
454
+ pspReference,
455
+ originalReference,
456
+ merchantReference,
457
+ amount: amountValue ?? 0,
458
+ currency: amountCurrency ?? "unknown",
459
+ status,
460
+ paymentMethod: item.paymentMethod,
461
+ shopperReference,
462
+ });
463
+ if (merchantReference) {
464
+ const sessionStatus = success ? "completed" : "refused";
465
+ await ctx.runMutation(component.private.updateCheckoutSessionStatus, {
466
+ merchantReference,
467
+ status: sessionStatus,
468
+ });
469
+ }
470
+ if (success && item.additionalData) {
471
+ const recurringDetailReference = item.additionalData["recurring.recurringDetailReference"];
472
+ const variant = item.additionalData["paymentMethod"] || item.paymentMethod || "scheme";
473
+ const cardLast4 = item.additionalData["cardSummary"];
474
+ const expiryDate = item.additionalData["expiryDate"];
475
+ let cardExpiryMonth;
476
+ let cardExpiryYear;
477
+ if (expiryDate && expiryDate.includes("/")) {
478
+ const parts = expiryDate.split("/");
479
+ cardExpiryMonth = parts[0];
480
+ cardExpiryYear = parts[1];
481
+ }
482
+ if (recurringDetailReference && shopperReference) {
483
+ await ctx.runMutation(component.private.insertPaymentMethod, {
484
+ shopperReference,
485
+ recurringDetailReference,
486
+ variant,
487
+ cardLast4,
488
+ cardExpiryMonth,
489
+ cardExpiryYear,
490
+ });
491
+ }
492
+ }
493
+ break;
494
+ }
495
+ case EventCodeEnum.RecurringContract: {
496
+ if (success && item.additionalData && shopperReference) {
497
+ const recurringDetailReference = item.additionalData["recurring.recurringDetailReference"];
498
+ const variant = item.additionalData["paymentMethod"] || item.paymentMethod || "scheme";
499
+ const cardLast4 = item.additionalData["cardSummary"];
500
+ const expiryDate = item.additionalData["expiryDate"];
501
+ let cardExpiryMonth;
502
+ let cardExpiryYear;
503
+ if (expiryDate && expiryDate.includes("/")) {
504
+ const parts = expiryDate.split("/");
505
+ cardExpiryMonth = parts[0];
506
+ cardExpiryYear = parts[1];
507
+ }
508
+ if (recurringDetailReference) {
509
+ await ctx.runMutation(component.private.insertPaymentMethod, {
510
+ shopperReference,
511
+ recurringDetailReference,
512
+ variant,
513
+ cardLast4,
514
+ cardExpiryMonth,
515
+ cardExpiryYear,
516
+ });
517
+ }
518
+ }
519
+ break;
520
+ }
521
+ case EventCodeEnum.Capture: {
522
+ const status = success ? "captured" : "capture_failed";
523
+ const targetReference = originalReference || pspReference;
524
+ await ctx.runMutation(component.private.updatePaymentStatus, {
525
+ pspReference: targetReference,
526
+ status,
527
+ originalReference: pspReference,
528
+ });
529
+ break;
530
+ }
531
+ case EventCodeEnum.Refund: {
532
+ const status = success ? "refunded" : "refund_failed";
533
+ const targetReference = originalReference || pspReference;
534
+ await ctx.runMutation(component.private.updatePaymentStatus, {
535
+ pspReference: targetReference,
536
+ status,
537
+ originalReference: pspReference,
538
+ });
539
+ break;
540
+ }
541
+ case EventCodeEnum.Cancellation: {
542
+ const status = success ? "cancelled" : "cancel_failed";
543
+ const targetReference = originalReference || pspReference;
544
+ await ctx.runMutation(component.private.updatePaymentStatus, {
545
+ pspReference: targetReference,
546
+ status,
547
+ originalReference: pspReference,
548
+ });
549
+ break;
550
+ }
551
+ case EventCodeEnum.CancelOrRefund: {
552
+ if (success) {
553
+ const action = item.additionalData?.["modification.action"];
554
+ const status = action === "cancel" ? "cancelled" : "refunded";
555
+ const targetReference = originalReference || pspReference;
556
+ await ctx.runMutation(component.private.updatePaymentStatus, {
557
+ pspReference: targetReference,
558
+ status,
559
+ originalReference: pspReference,
560
+ });
561
+ }
562
+ break;
563
+ }
564
+ }
565
+ }
566
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Generated `api` utility.
3
+ *
4
+ * THIS CODE IS AUTOMATICALLY GENERATED.
5
+ *
6
+ * To regenerate, run `npx convex dev`.
7
+ * @module
8
+ */
9
+ import type * as private_ from "../private.js";
10
+ import type * as public_ from "../public.js";
11
+ import type { ApiFromModules, FilterApi, FunctionReference } from "convex/server";
12
+ declare const fullApi: ApiFromModules<{
13
+ private: typeof private_;
14
+ public: typeof public_;
15
+ }>;
16
+ /**
17
+ * A utility for referencing Convex functions in your app's public API.
18
+ *
19
+ * Usage:
20
+ * ```js
21
+ * const myFunctionReference = api.myModule.myFunction;
22
+ * ```
23
+ */
24
+ export declare const api: FilterApi<typeof fullApi, FunctionReference<any, "public">>;
25
+ /**
26
+ * A utility for referencing Convex functions in your app's internal API.
27
+ *
28
+ * Usage:
29
+ * ```js
30
+ * const myFunctionReference = internal.myModule.myFunction;
31
+ * ```
32
+ */
33
+ export declare const internal: FilterApi<typeof fullApi, FunctionReference<any, "internal">>;
34
+ export declare const components: {};
35
+ export {};
36
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAC;AAE7C,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAGvB,QAAA,MAAM,OAAO,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,OAAO,QAAQ,CAAC;IACzB,MAAM,EAAE,OAAO,OAAO,CAAC;CACxB,CAAiB,CAAC;AAEnB;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,EAAE,SAAS,CACzB,OAAO,OAAO,EACd,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CACjB,CAAC;AAElB;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,CAC9B,OAAO,OAAO,EACd,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CACnB,CAAC;AAElB,eAAO,MAAM,UAAU,EAAqC,EAAE,CAAC"}