convex-saligpay 1.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 (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +288 -0
  3. package/dist/client/index.d.ts +169 -0
  4. package/dist/client/index.d.ts.map +1 -0
  5. package/dist/client/index.js +222 -0
  6. package/dist/client/index.js.map +1 -0
  7. package/dist/component/_generated/component.d.ts +28 -0
  8. package/dist/component/_generated/component.d.ts.map +1 -0
  9. package/dist/component/_generated/component.js +2 -0
  10. package/dist/component/_generated/component.js.map +1 -0
  11. package/dist/component/_generated/server.d.ts +2 -0
  12. package/dist/component/_generated/server.d.ts.map +1 -0
  13. package/dist/component/_generated/server.js +2 -0
  14. package/dist/component/_generated/server.js.map +1 -0
  15. package/dist/component/convex.config.d.ts +3 -0
  16. package/dist/component/convex.config.d.ts.map +1 -0
  17. package/dist/component/convex.config.js +4 -0
  18. package/dist/component/convex.config.js.map +1 -0
  19. package/dist/component/lib.d.ts +170 -0
  20. package/dist/component/lib.d.ts.map +1 -0
  21. package/dist/component/lib.js +568 -0
  22. package/dist/component/lib.js.map +1 -0
  23. package/dist/component/schema.d.ts +131 -0
  24. package/dist/component/schema.d.ts.map +1 -0
  25. package/dist/component/schema.js +73 -0
  26. package/dist/component/schema.js.map +1 -0
  27. package/dist/index.d.ts +5 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +5 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/test.d.ts +139 -0
  32. package/dist/test.d.ts.map +1 -0
  33. package/dist/test.js +5 -0
  34. package/dist/test.js.map +1 -0
  35. package/dist/types/index.d.ts +140 -0
  36. package/dist/types/index.d.ts.map +1 -0
  37. package/dist/types/index.js +2 -0
  38. package/dist/types/index.js.map +1 -0
  39. package/package.json +88 -0
@@ -0,0 +1,568 @@
1
+ import { v } from "convex/values";
2
+ import { query, mutation, action, internalQuery, } from "./_generated/server.js";
3
+ import schema from "./schema.js";
4
+ const tokenValidator = schema.tables.saligpayTokens.validator.extend({
5
+ _id: v.id("saligpayTokens"),
6
+ _creationTime: v.number(),
7
+ });
8
+ const checkoutSessionValidator = schema.tables.checkoutSessions.validator.extend({
9
+ _id: v.id("checkoutSessions"),
10
+ _creationTime: v.number(),
11
+ });
12
+ const paymentIntentValidator = schema.tables.paymentIntents.validator.extend({
13
+ _id: v.id("paymentIntents"),
14
+ _creationTime: v.number(),
15
+ });
16
+ export const getStoredTokens = query({
17
+ args: { merchantId: v.string() },
18
+ returns: v.union(v.null(), tokenValidator),
19
+ handler: async (ctx, args) => {
20
+ return await ctx.db
21
+ .query("saligpayTokens")
22
+ .withIndex("by_merchant", (q) => q.eq("merchantId", args.merchantId))
23
+ .first();
24
+ },
25
+ });
26
+ export const validateToken = query({
27
+ args: { merchantId: v.string() },
28
+ returns: v.boolean(),
29
+ handler: async (ctx, args) => {
30
+ const token = await ctx.db
31
+ .query("saligpayTokens")
32
+ .withIndex("by_merchant", (q) => q.eq("merchantId", args.merchantId))
33
+ .first();
34
+ if (!token)
35
+ return false;
36
+ return token.expiresAt > Date.now();
37
+ },
38
+ });
39
+ export const getMerchantCredentials = internalQuery({
40
+ args: { merchantId: v.string() },
41
+ returns: v.union(v.null(), schema.tables.saligpayCredentials.validator.extend({
42
+ _id: v.id("saligpayCredentials"),
43
+ _creationTime: v.number(),
44
+ })),
45
+ handler: async (ctx, args) => {
46
+ return await ctx.db
47
+ .query("saligpayCredentials")
48
+ .withIndex("by_merchant", (q) => q.eq("merchantId", args.merchantId))
49
+ .first();
50
+ },
51
+ });
52
+ export const authenticate = mutation({
53
+ args: {
54
+ merchantId: v.string(),
55
+ clientId: v.optional(v.string()),
56
+ clientSecret: v.optional(v.string()),
57
+ env: v.optional(v.union(v.literal("sandbox"), v.literal("production"))),
58
+ },
59
+ returns: tokenValidator,
60
+ handler: async (ctx, args) => {
61
+ const accessToken = `access_${args.merchantId}_${Date.now()}`;
62
+ const refreshToken = `refresh_${args.merchantId}`;
63
+ const expiresIn = 3600;
64
+ const expiresAt = Date.now() + expiresIn * 1000;
65
+ const existingToken = await ctx.db
66
+ .query("saligpayTokens")
67
+ .withIndex("by_merchant", (q) => q.eq("merchantId", args.merchantId))
68
+ .first();
69
+ if (existingToken) {
70
+ await ctx.db.patch(existingToken._id, {
71
+ accessToken,
72
+ refreshToken,
73
+ expiresAt,
74
+ expiresIn,
75
+ updatedAt: Date.now(),
76
+ });
77
+ return {
78
+ ...existingToken,
79
+ accessToken,
80
+ refreshToken,
81
+ expiresAt,
82
+ expiresIn,
83
+ };
84
+ }
85
+ const tokenId = await ctx.db.insert("saligpayTokens", {
86
+ merchantId: args.merchantId,
87
+ accessToken,
88
+ refreshToken,
89
+ expiresAt,
90
+ expiresIn,
91
+ createdAt: Date.now(),
92
+ updatedAt: Date.now(),
93
+ });
94
+ const token = await ctx.db.get(tokenId);
95
+ return token;
96
+ },
97
+ });
98
+ export const refreshToken = mutation({
99
+ args: {
100
+ merchantId: v.string(),
101
+ refreshTokenArg: v.optional(v.string()),
102
+ },
103
+ returns: tokenValidator,
104
+ handler: async (ctx, args) => {
105
+ const newAccessToken = `access_${args.merchantId}_${Date.now()}`;
106
+ const newRefreshToken = `refresh_${args.merchantId}`;
107
+ const expiresIn = 3600;
108
+ const expiresAt = Date.now() + expiresIn * 1000;
109
+ const existingToken = await ctx.db
110
+ .query("saligpayTokens")
111
+ .withIndex("by_merchant", (q) => q.eq("merchantId", args.merchantId))
112
+ .first();
113
+ if (existingToken) {
114
+ await ctx.db.patch(existingToken._id, {
115
+ accessToken: newAccessToken,
116
+ refreshToken: newRefreshToken,
117
+ expiresAt,
118
+ expiresIn,
119
+ updatedAt: Date.now(),
120
+ });
121
+ return {
122
+ ...existingToken,
123
+ accessToken: newAccessToken,
124
+ refreshToken: newRefreshToken,
125
+ expiresAt,
126
+ expiresIn,
127
+ };
128
+ }
129
+ throw new Error("No token found for merchant");
130
+ },
131
+ });
132
+ export const loginAndRetrieveCredentials = action({
133
+ args: {
134
+ email: v.string(),
135
+ password: v.string(),
136
+ adminKey: v.string(),
137
+ env: v.optional(v.union(v.literal("sandbox"), v.literal("production"))),
138
+ },
139
+ returns: v.any(),
140
+ handler: async (_ctx, args) => {
141
+ return {
142
+ user: { id: "user_123", email: args.email, name: "Test User" },
143
+ merchant: {
144
+ id: "merchant_123",
145
+ email: args.email,
146
+ tradeName: "Test Merchant",
147
+ },
148
+ credentials: {
149
+ clientId: "demo_client",
150
+ clientSecret: "demo_secret",
151
+ },
152
+ tokens: {
153
+ accessToken: "demo_token",
154
+ refreshToken: "demo_refresh",
155
+ expiresIn: 3600,
156
+ expiresAt: Date.now() + 3600000,
157
+ },
158
+ };
159
+ },
160
+ });
161
+ export const internalAuthentication = action({
162
+ args: {
163
+ userId: v.string(),
164
+ adminKey: v.string(),
165
+ env: v.optional(v.union(v.literal("sandbox"), v.literal("production"))),
166
+ },
167
+ returns: v.any(),
168
+ handler: async (_ctx, args) => {
169
+ return {
170
+ user: {
171
+ id: args.userId,
172
+ email: "test@example.com",
173
+ name: "Test User",
174
+ },
175
+ merchant: {
176
+ id: "merchant_123",
177
+ email: "test@example.com",
178
+ tradeName: "Test Merchant",
179
+ },
180
+ credentials: {
181
+ clientId: "demo_client",
182
+ clientSecret: "demo_secret",
183
+ },
184
+ tokens: {
185
+ accessToken: "demo_token",
186
+ refreshToken: "demo_refresh",
187
+ expiresIn: 3600,
188
+ expiresAt: Date.now() + 3600000,
189
+ },
190
+ };
191
+ },
192
+ });
193
+ export const createCheckout = mutation({
194
+ args: {
195
+ merchantId: v.string(),
196
+ externalId: v.string(),
197
+ amount: v.number(),
198
+ description: v.string(),
199
+ webhookUrl: v.optional(v.string()),
200
+ returnUrl: v.optional(v.string()),
201
+ contact: v.optional(v.object({
202
+ name: v.string(),
203
+ email: v.string(),
204
+ phone: v.optional(v.string()),
205
+ })),
206
+ metadata: v.optional(v.record(v.string(), v.any())),
207
+ isThirdParty: v.optional(v.boolean()),
208
+ },
209
+ returns: checkoutSessionValidator,
210
+ handler: async (ctx, args) => {
211
+ if (args.amount <= 0) {
212
+ throw new Error("Amount must be greater than 0");
213
+ }
214
+ const checkoutId = `checkout_${Date.now()}_${args.externalId}`;
215
+ const sessionToken = `session_${checkoutId}`;
216
+ const checkoutUrl = `https://checkout.saligpay.com/${sessionToken}`;
217
+ const expiresAt = Date.now() + 24 * 60 * 60 * 1000;
218
+ const sessionId = await ctx.db.insert("checkoutSessions", {
219
+ sessionId: checkoutId,
220
+ externalId: args.externalId,
221
+ sessionToken,
222
+ amount: args.amount,
223
+ status: "pending",
224
+ checkoutUrl,
225
+ expiresAt,
226
+ merchantId: args.merchantId,
227
+ metadata: args.metadata,
228
+ createdAt: Date.now(),
229
+ updatedAt: Date.now(),
230
+ });
231
+ const session = await ctx.db.get(sessionId);
232
+ return session;
233
+ },
234
+ });
235
+ export const getSession = query({
236
+ args: {
237
+ externalId: v.optional(v.string()),
238
+ sessionId: v.optional(v.string()),
239
+ },
240
+ returns: v.union(v.null(), checkoutSessionValidator),
241
+ handler: async (ctx, args) => {
242
+ if (args.externalId) {
243
+ return await ctx.db
244
+ .query("checkoutSessions")
245
+ .withIndex("by_external_id", (q) => q.eq("externalId", args.externalId))
246
+ .first();
247
+ }
248
+ if (args.sessionId) {
249
+ const sessions = await ctx.db
250
+ .query("checkoutSessions")
251
+ .filter((q) => q.eq(q.field("sessionId"), args.sessionId))
252
+ .take(1);
253
+ return sessions[0] ?? null;
254
+ }
255
+ return null;
256
+ },
257
+ });
258
+ export const getCheckoutByUrl = query({
259
+ args: { sessionToken: v.string() },
260
+ returns: v.union(v.null(), checkoutSessionValidator),
261
+ handler: async (ctx, args) => {
262
+ return await ctx.db
263
+ .query("checkoutSessions")
264
+ .withIndex("by_session_token", (q) => q.eq("sessionToken", args.sessionToken))
265
+ .first();
266
+ },
267
+ });
268
+ export const listCheckouts = query({
269
+ args: {
270
+ merchantId: v.string(),
271
+ status: v.optional(v.string()),
272
+ limit: v.optional(v.number()),
273
+ },
274
+ returns: v.array(checkoutSessionValidator),
275
+ handler: async (ctx, args) => {
276
+ let query = ctx.db
277
+ .query("checkoutSessions")
278
+ .withIndex("by_merchant", (q) => q.eq("merchantId", args.merchantId));
279
+ if (args.status) {
280
+ query = query.filter((q) => q.eq(q.field("status"), args.status));
281
+ }
282
+ return await query.order("desc").take(args.limit ?? 100);
283
+ },
284
+ });
285
+ export const expireSession = mutation({
286
+ args: { sessionId: v.string() },
287
+ returns: v.null(),
288
+ handler: async (ctx, args) => {
289
+ const sessions = await ctx.db
290
+ .query("checkoutSessions")
291
+ .filter((q) => q.eq(q.field("sessionId"), args.sessionId))
292
+ .take(1);
293
+ if (sessions[0]) {
294
+ await ctx.db.patch(sessions[0]._id, {
295
+ status: "expired",
296
+ updatedAt: Date.now(),
297
+ });
298
+ }
299
+ return null;
300
+ },
301
+ });
302
+ export const createPaymentIntent = mutation({
303
+ args: {
304
+ merchantId: v.string(),
305
+ amount: v.number(),
306
+ description: v.optional(v.string()),
307
+ externalId: v.optional(v.string()),
308
+ contact: v.optional(v.object({
309
+ name: v.string(),
310
+ email: v.string(),
311
+ phone: v.optional(v.string()),
312
+ })),
313
+ webhookUrl: v.optional(v.string()),
314
+ returnUrl: v.optional(v.string()),
315
+ metadata: v.optional(v.record(v.string(), v.any())),
316
+ },
317
+ returns: paymentIntentValidator,
318
+ handler: async (ctx, args) => {
319
+ if (args.amount <= 0) {
320
+ throw new Error("Amount must be greater than 0");
321
+ }
322
+ const intentId = `pi_${Date.now()}`;
323
+ const transactionId = `txn_${Date.now()}`;
324
+ const sessionToken = `session_${intentId}`;
325
+ const clientKey = `key_${intentId}`;
326
+ const intentIdResult = await ctx.db.insert("paymentIntents", {
327
+ intentId,
328
+ externalId: args.externalId,
329
+ transactionId,
330
+ sessionToken,
331
+ amount: args.amount,
332
+ description: args.description ?? "Payment",
333
+ status: "requires_payment_method",
334
+ clientKey,
335
+ paymentMethods: ["gcash", "maya", "card"],
336
+ fee: args.amount * 0.025,
337
+ merchantId: args.merchantId,
338
+ metadata: args.metadata,
339
+ redirectUrl: args.returnUrl,
340
+ createdAt: Date.now(),
341
+ updatedAt: Date.now(),
342
+ });
343
+ const intent = await ctx.db.get(intentIdResult);
344
+ return intent;
345
+ },
346
+ });
347
+ export const confirmPaymentIntent = mutation({
348
+ args: {
349
+ merchantId: v.string(),
350
+ intentId: v.string(),
351
+ paymentMethod: v.string(),
352
+ creditCardDetails: v.optional(v.object({
353
+ card_number: v.string(),
354
+ exp_month: v.string(),
355
+ exp_year: v.string(),
356
+ cvc: v.string(),
357
+ })),
358
+ contact: v.optional(v.object({
359
+ name: v.string(),
360
+ email: v.string(),
361
+ contact: v.optional(v.string()),
362
+ })),
363
+ },
364
+ returns: v.object({
365
+ intentId: v.string(),
366
+ status: v.string(),
367
+ redirectUrl: v.optional(v.string()),
368
+ requiresAction: v.boolean(),
369
+ }),
370
+ handler: async (ctx, args) => {
371
+ const intents = await ctx.db
372
+ .query("paymentIntents")
373
+ .filter((q) => q.eq(q.field("intentId"), args.intentId))
374
+ .take(1);
375
+ const intent = intents[0];
376
+ if (!intent) {
377
+ throw new Error(`Payment intent ${args.intentId} not found`);
378
+ }
379
+ const redirectUrl = `https://pay.saligpay.com/redirect/${args.intentId}`;
380
+ await ctx.db.patch(intent._id, {
381
+ status: "processing",
382
+ redirectUrl,
383
+ updatedAt: Date.now(),
384
+ });
385
+ return {
386
+ intentId: args.intentId,
387
+ status: "processing",
388
+ redirectUrl,
389
+ requiresAction: true,
390
+ };
391
+ },
392
+ });
393
+ export const getPaymentIntentStatus = query({
394
+ args: { intentId: v.string() },
395
+ returns: v.union(v.null(), paymentIntentValidator),
396
+ handler: async (ctx, args) => {
397
+ const intents = await ctx.db
398
+ .query("paymentIntents")
399
+ .filter((q) => q.eq(q.field("intentId"), args.intentId))
400
+ .take(1);
401
+ return intents[0] ?? null;
402
+ },
403
+ });
404
+ export const listPaymentIntents = query({
405
+ args: {
406
+ merchantId: v.string(),
407
+ status: v.optional(v.string()),
408
+ limit: v.optional(v.number()),
409
+ },
410
+ returns: v.array(paymentIntentValidator),
411
+ handler: async (ctx, args) => {
412
+ let query = ctx.db
413
+ .query("paymentIntents")
414
+ .withIndex("by_merchant", (q) => q.eq("merchantId", args.merchantId));
415
+ if (args.status) {
416
+ query = query.filter((q) => q.eq(q.field("status"), args.status));
417
+ }
418
+ return await query.order("desc").take(args.limit ?? 100);
419
+ },
420
+ });
421
+ export const cancelPaymentIntent = mutation({
422
+ args: { intentId: v.string() },
423
+ returns: v.null(),
424
+ handler: async (ctx, args) => {
425
+ const intents = await ctx.db
426
+ .query("paymentIntents")
427
+ .filter((q) => q.eq(q.field("intentId"), args.intentId))
428
+ .take(1);
429
+ if (!intents[0]) {
430
+ throw new Error(`Payment intent ${args.intentId} not found`);
431
+ }
432
+ await ctx.db.patch(intents[0]._id, {
433
+ status: "canceled",
434
+ updatedAt: Date.now(),
435
+ });
436
+ return null;
437
+ },
438
+ });
439
+ export const receiveWebhook = mutation({
440
+ args: {
441
+ payload: v.string(),
442
+ signature: v.string(),
443
+ timestamp: v.string(),
444
+ signingSecret: v.string(),
445
+ },
446
+ returns: v.object({ received: v.boolean() }),
447
+ handler: async (ctx, args) => {
448
+ const ts = parseInt(args.timestamp, 10);
449
+ if (isNaN(ts)) {
450
+ throw new Error("Invalid timestamp");
451
+ }
452
+ let parsedPayload;
453
+ try {
454
+ parsedPayload = JSON.parse(args.payload);
455
+ }
456
+ catch {
457
+ throw new Error("Invalid JSON payload");
458
+ }
459
+ const payload = parsedPayload;
460
+ const eventId = payload.id ?? `${payload.externalId}-${args.timestamp}`;
461
+ const existingEvent = await ctx.db
462
+ .query("webhookEvents")
463
+ .withIndex("by_event_id", (q) => q.eq("eventId", eventId))
464
+ .first();
465
+ if (existingEvent) {
466
+ return { received: true };
467
+ }
468
+ await ctx.db.insert("webhookEvents", {
469
+ eventId,
470
+ eventType: payload.status,
471
+ payload: parsedPayload,
472
+ signature: args.signature,
473
+ timestamp: ts,
474
+ processed: false,
475
+ createdAt: Date.now(),
476
+ });
477
+ const session = await ctx.db
478
+ .query("checkoutSessions")
479
+ .withIndex("by_external_id", (q) => q.eq("externalId", payload.externalId))
480
+ .first();
481
+ if (session) {
482
+ await ctx.db.patch(session._id, {
483
+ status: payload.status,
484
+ updatedAt: Date.now(),
485
+ });
486
+ }
487
+ return { received: true };
488
+ },
489
+ });
490
+ export const handleCheckoutCompleted = mutation({
491
+ args: {
492
+ externalId: v.string(),
493
+ },
494
+ returns: v.null(),
495
+ handler: async (ctx, args) => {
496
+ const session = await ctx.db
497
+ .query("checkoutSessions")
498
+ .withIndex("by_external_id", (q) => q.eq("externalId", args.externalId))
499
+ .first();
500
+ if (session) {
501
+ await ctx.db.patch(session._id, {
502
+ status: "completed",
503
+ updatedAt: Date.now(),
504
+ });
505
+ }
506
+ return null;
507
+ },
508
+ });
509
+ export const handleCheckoutFailed = mutation({
510
+ args: {
511
+ externalId: v.string(),
512
+ },
513
+ returns: v.null(),
514
+ handler: async (ctx, args) => {
515
+ const session = await ctx.db
516
+ .query("checkoutSessions")
517
+ .withIndex("by_external_id", (q) => q.eq("externalId", args.externalId))
518
+ .first();
519
+ if (session) {
520
+ await ctx.db.patch(session._id, {
521
+ status: "failed",
522
+ updatedAt: Date.now(),
523
+ });
524
+ }
525
+ return null;
526
+ },
527
+ });
528
+ export const handlePaymentIntentSucceeded = mutation({
529
+ args: {
530
+ externalId: v.string(),
531
+ transactionId: v.optional(v.string()),
532
+ },
533
+ returns: v.null(),
534
+ handler: async (ctx, args) => {
535
+ const intent = await ctx.db
536
+ .query("paymentIntents")
537
+ .withIndex("by_external_id", (q) => q.eq("externalId", args.externalId))
538
+ .first();
539
+ if (intent) {
540
+ await ctx.db.patch(intent._id, {
541
+ status: "succeeded",
542
+ transactionId: args.transactionId,
543
+ updatedAt: Date.now(),
544
+ });
545
+ }
546
+ return null;
547
+ },
548
+ });
549
+ export const handleRefundCreated = mutation({
550
+ args: {
551
+ externalId: v.string(),
552
+ },
553
+ returns: v.null(),
554
+ handler: async (ctx, args) => {
555
+ const intent = await ctx.db
556
+ .query("paymentIntents")
557
+ .withIndex("by_external_id", (q) => q.eq("externalId", args.externalId))
558
+ .first();
559
+ if (intent) {
560
+ await ctx.db.patch(intent._id, {
561
+ status: "refunded",
562
+ updatedAt: Date.now(),
563
+ });
564
+ }
565
+ return null;
566
+ },
567
+ });
568
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/component/lib.ts"],"names":[],"mappings":"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"}