@muhammedaksam/sipay-node 1.0.6 → 1.1.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.
Files changed (87) hide show
  1. package/README.md +100 -0
  2. package/dist/esm/index.js +15 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/resources/branded-solution.js +0 -7
  5. package/dist/esm/resources/branded-solution.js.map +1 -1
  6. package/dist/esm/resources/cards.js +74 -0
  7. package/dist/esm/resources/cards.js.map +1 -0
  8. package/dist/esm/resources/cashout.js +17 -0
  9. package/dist/esm/resources/cashout.js.map +1 -0
  10. package/dist/esm/resources/marketplace.js +58 -0
  11. package/dist/esm/resources/marketplace.js.map +1 -0
  12. package/dist/esm/resources/payment-completion.js +41 -0
  13. package/dist/esm/resources/payment-completion.js.map +1 -0
  14. package/dist/esm/resources/payments.js +28 -2
  15. package/dist/esm/resources/payments.js.map +1 -1
  16. package/dist/esm/resources/recurring.js +4 -12
  17. package/dist/esm/resources/recurring.js.map +1 -1
  18. package/dist/esm/resources/sub-merchant.js +84 -0
  19. package/dist/esm/resources/sub-merchant.js.map +1 -0
  20. package/dist/esm/types/index.js +2 -1
  21. package/dist/esm/types/index.js.map +1 -1
  22. package/dist/esm/types/status-codes.js +292 -0
  23. package/dist/esm/types/status-codes.js.map +1 -0
  24. package/dist/esm/utils/http-client.js +14 -3
  25. package/dist/esm/utils/http-client.js.map +1 -1
  26. package/dist/esm/utils/index.js +40 -35
  27. package/dist/esm/utils/index.js.map +1 -1
  28. package/dist/esm/utils/status-code-helpers.js +158 -0
  29. package/dist/esm/utils/status-code-helpers.js.map +1 -0
  30. package/dist/index.d.ts +15 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +21 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/resources/branded-solution.d.ts +1 -5
  35. package/dist/resources/branded-solution.d.ts.map +1 -1
  36. package/dist/resources/branded-solution.js +0 -7
  37. package/dist/resources/branded-solution.js.map +1 -1
  38. package/dist/resources/cards.d.ts +76 -0
  39. package/dist/resources/cards.d.ts.map +1 -0
  40. package/dist/resources/cards.js +78 -0
  41. package/dist/resources/cards.js.map +1 -0
  42. package/dist/resources/cashout.d.ts +28 -0
  43. package/dist/resources/cashout.d.ts.map +1 -0
  44. package/dist/resources/cashout.js +21 -0
  45. package/dist/resources/cashout.js.map +1 -0
  46. package/dist/resources/commissions.d.ts +2 -2
  47. package/dist/resources/commissions.d.ts.map +1 -1
  48. package/dist/resources/marketplace.d.ts +87 -0
  49. package/dist/resources/marketplace.d.ts.map +1 -0
  50. package/dist/resources/marketplace.js +62 -0
  51. package/dist/resources/marketplace.js.map +1 -0
  52. package/dist/resources/payment-completion.d.ts +21 -0
  53. package/dist/resources/payment-completion.d.ts.map +1 -0
  54. package/dist/resources/payment-completion.js +78 -0
  55. package/dist/resources/payment-completion.js.map +1 -0
  56. package/dist/resources/payments.d.ts +20 -6
  57. package/dist/resources/payments.d.ts.map +1 -1
  58. package/dist/resources/payments.js +27 -1
  59. package/dist/resources/payments.js.map +1 -1
  60. package/dist/resources/recurring.d.ts +0 -9
  61. package/dist/resources/recurring.d.ts.map +1 -1
  62. package/dist/resources/recurring.js +4 -12
  63. package/dist/resources/recurring.js.map +1 -1
  64. package/dist/resources/sub-merchant.d.ts +136 -0
  65. package/dist/resources/sub-merchant.d.ts.map +1 -0
  66. package/dist/resources/sub-merchant.js +88 -0
  67. package/dist/resources/sub-merchant.js.map +1 -0
  68. package/dist/types/index.d.ts +373 -0
  69. package/dist/types/index.d.ts.map +1 -1
  70. package/dist/types/index.js +16 -0
  71. package/dist/types/index.js.map +1 -1
  72. package/dist/types/status-codes.d.ts +125 -0
  73. package/dist/types/status-codes.d.ts.map +1 -0
  74. package/dist/types/status-codes.js +300 -0
  75. package/dist/types/status-codes.js.map +1 -0
  76. package/dist/utils/http-client.d.ts.map +1 -1
  77. package/dist/utils/http-client.js +14 -3
  78. package/dist/utils/http-client.js.map +1 -1
  79. package/dist/utils/index.d.ts +12 -3
  80. package/dist/utils/index.d.ts.map +1 -1
  81. package/dist/utils/index.js +80 -38
  82. package/dist/utils/index.js.map +1 -1
  83. package/dist/utils/status-code-helpers.d.ts +42 -0
  84. package/dist/utils/status-code-helpers.d.ts.map +1 -0
  85. package/dist/utils/status-code-helpers.js +164 -0
  86. package/dist/utils/status-code-helpers.js.map +1 -0
  87. package/package.json +1 -1
package/README.md CHANGED
@@ -16,6 +16,7 @@ An unofficial Node.js TypeScript SDK for the Sipay payment gateway.
16
16
  - 🔄 Recurring payments
17
17
  - 🏷️ Branded payment solutions
18
18
  - 📊 Commission information
19
+ - 🏷️ Status code management with detailed error handling
19
20
  - 🛡️ Type-safe with TypeScript
20
21
  - ✅ Input validation
21
22
  - 🔒 Secure payment processing
@@ -302,6 +303,105 @@ interface SipayApiResponse<T = any> {
302
303
  }
303
304
  ```
304
305
 
306
+ ## Status Code Management
307
+
308
+ The SDK provides comprehensive status code utilities to help you handle different payment scenarios effectively.
309
+
310
+ ### Available Status Codes
311
+
312
+ ```typescript
313
+ import { SipayStatusCode, getStatusCodeInfo, getSuggestedAction } from '@muhammedaksam/sipay-node';
314
+
315
+ // Status code enums
316
+ SipayStatusCode.SUCCESSFUL; // 100 - Payment successful
317
+ SipayStatusCode.BASIC_VALIDATION; // 1 - Basic validation error
318
+ SipayStatusCode.INVALID_CREDENTIALS; // 30 - Authentication failed
319
+ SipayStatusCode.ORDER_FAILED; // 41 - Payment failed
320
+ SipayStatusCode.CREDIT_CARD_BLOCKED; // 44 - Card blocked
321
+ SipayStatusCode.REFUND_FAILED; // 49 - Refund error
322
+ SipayStatusCode.FOREIGN_CARDS_NOT_ALLOWED; // 76 - Foreign cards not allowed
323
+ // ... and 50+ more status codes
324
+ ```
325
+
326
+ ### Status Code Utilities
327
+
328
+ ```typescript
329
+ import {
330
+ getStatusCodeInfo,
331
+ getSuggestedAction,
332
+ StatusCodeGroups,
333
+ isStatusInGroup,
334
+ } from '@muhammedaksam/sipay-node';
335
+
336
+ // Get detailed information about a status code
337
+ const info = getStatusCodeInfo(response.status_code);
338
+ console.log(info.description); // Human-readable description
339
+ console.log(info.category); // 'success', 'validation_error', 'payment_error', etc.
340
+ console.log(info.isRetryable); // Whether the error can be retried
341
+ console.log(info.httpEquivalent); // HTTP status equivalent (if applicable)
342
+
343
+ // Get actionable suggestions
344
+ const suggestion = getSuggestedAction(response.status_code);
345
+ console.log(suggestion); // "Check payment details and try with different parameters"
346
+
347
+ // Use predefined groups for easy error handling
348
+ if (isStatusInGroup(response.status_code, StatusCodeGroups.VALIDATION_ERRORS)) {
349
+ console.log('Please fix the validation errors in your request');
350
+ } else if (isStatusInGroup(response.status_code, StatusCodeGroups.CARD_ERRORS)) {
351
+ console.log('Please try with a different card');
352
+ }
353
+ ```
354
+
355
+ ### Enhanced Error Handling
356
+
357
+ ```typescript
358
+ import { SipayStatusCode, getStatusCodeInfo } from '@muhammedaksam/sipay-node';
359
+
360
+ try {
361
+ const response = await sipay.payments.pay2D(paymentData);
362
+
363
+ if (response.status_code === SipayStatusCode.SUCCESSFUL) {
364
+ console.log('✅ Payment successful!');
365
+ console.log('Order ID:', response.data?.order_id);
366
+ } else {
367
+ // Handle non-success responses with detailed status information
368
+ const statusInfo = getStatusCodeInfo(response.status_code);
369
+
370
+ console.log('❌ Payment failed:');
371
+ console.log('Status Code:', statusInfo.code);
372
+ console.log('Description:', statusInfo.description);
373
+ console.log('Category:', statusInfo.category);
374
+
375
+ // Handle retryable errors
376
+ if (statusInfo.isRetryable) {
377
+ console.log('🔄 This error is retryable - you can try again after a delay');
378
+ // Implement retry logic here
379
+ }
380
+ }
381
+ } catch (error) {
382
+ // SDK errors now include enhanced status information
383
+ if (error.status_code) {
384
+ const statusInfo = getStatusCodeInfo(error.status_code);
385
+ console.log('Error category:', statusInfo.category);
386
+ console.log('Suggested action:', getSuggestedAction(error.status_code));
387
+ }
388
+ }
389
+ ```
390
+
391
+ ### Status Categories
392
+
393
+ The SDK categorizes status codes for easier error handling:
394
+
395
+ - **Success**: `100`, `101`, `112` - Transaction completed successfully
396
+ - **Validation Errors**: `1`, `12`, `13`, `32`, `33`, `85`, `108`, `404` - Request validation issues
397
+ - **Authentication Errors**: `30`, `34`, `79`, `87` - Credential or permission issues
398
+ - **Payment Errors**: `41`, `43`, `49`, `31`, `69`, `105` - Payment processing failures
399
+ - **Merchant Errors**: `14`, `37`, `38`, `44`, `45-48`, `80`, `106` - Merchant configuration issues
400
+ - **Card Errors**: `44`, `60`, `70`, `76`, `77`, `86`, `88-89` - Card-related problems
401
+ - **Hash Errors**: `68`, `90-97` - Hash key validation failures
402
+ - **Recurring Errors**: `55`, `71`, `73` - Recurring payment issues
403
+ - **Retryable Errors**: `3`, `49`, `69`, `117` - Temporary errors that can be retried
404
+
305
405
  ## Development
306
406
 
307
407
  ```bash
package/dist/esm/index.js CHANGED
@@ -3,6 +3,11 @@ import { Payments } from './resources/payments';
3
3
  import { Recurring } from './resources/recurring';
4
4
  import { BrandedSolution } from './resources/branded-solution';
5
5
  import { Commissions } from './resources/commissions';
6
+ import { Cards } from './resources/cards';
7
+ import { PaymentCompletion } from './resources/payment-completion';
8
+ import { Marketplace } from './resources/marketplace';
9
+ import { Cashout } from './resources/cashout';
10
+ import { SubMerchant } from './resources/sub-merchant';
6
11
  export class Sipay {
7
12
  constructor(config) {
8
13
  this.client = new SipayHttpClient(config);
@@ -11,6 +16,11 @@ export class Sipay {
11
16
  this.recurring = new Recurring(this.client);
12
17
  this.brandedSolution = new BrandedSolution(this.client);
13
18
  this.commissions = new Commissions(this.client);
19
+ this.cards = new Cards(this.client);
20
+ this.paymentCompletion = new PaymentCompletion(this.client);
21
+ this.marketplace = new Marketplace(this.client);
22
+ this.cashout = new Cashout(this.client);
23
+ this.subMerchant = new SubMerchant(this.client);
14
24
  }
15
25
  /**
16
26
  * Manually authenticate with Sipay API
@@ -42,5 +52,10 @@ export { Payments } from './resources/payments';
42
52
  export { Recurring } from './resources/recurring';
43
53
  export { BrandedSolution } from './resources/branded-solution';
44
54
  export { Commissions } from './resources/commissions';
55
+ export { Cards } from './resources/cards';
56
+ export { PaymentCompletion } from './resources/payment-completion';
57
+ export { Marketplace } from './resources/marketplace';
58
+ export { Cashout } from './resources/cashout';
59
+ export { SubMerchant } from './resources/sub-merchant';
45
60
  export * from './utils';
46
61
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,OAAO,KAAK;IAQhB,YAAY,MAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAE1C,uBAAuB;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,iBAAiB;AACjB,eAAe,KAAK,CAAC;AAErB,gBAAgB;AAChB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,OAAO,KAAK;IAahB,YAAY,MAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAE1C,uBAAuB;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,iBAAiB;AACjB,eAAe,KAAK,CAAC;AAErB,gBAAgB;AAChB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,cAAc,SAAS,CAAC"}
@@ -7,12 +7,5 @@ export class BrandedSolution extends SipayResource {
7
7
  const data = this.addMerchantKey(linkData);
8
8
  return this.post('/purchase/link', data, options);
9
9
  }
10
- /**
11
- * Check the status of a branded payment
12
- */
13
- async checkStatus(statusData, options) {
14
- const data = this.addMerchantKey(statusData);
15
- return this.post('/purchase/status', data, options);
16
- }
17
10
  }
18
11
  //# sourceMappingURL=branded-solution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"branded-solution.js","sourceRoot":"","sources":["../../../src/resources/branded-solution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAQvC,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,QAAsD,EACtD,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,UAAsD,EACtD,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF"}
1
+ {"version":3,"file":"branded-solution.js","sourceRoot":"","sources":["../../../src/resources/branded-solution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGvC,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,QAAsD,EACtD,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CAIF"}
@@ -0,0 +1,74 @@
1
+ import { SipayResource } from './base';
2
+ import { generateHashKey, generatePaymentHashKey } from '../utils';
3
+ export class Cards extends SipayResource {
4
+ /**
5
+ * Save a credit card for future use
6
+ */
7
+ async saveCard(cardData, options) {
8
+ const data = this.addMerchantKey(cardData);
9
+ // Generate hash key for save card
10
+ // Hash format: merchant_key|customer_number|card_holder_name|card_number|expiry_month|expiry_year
11
+ const hashParts = [
12
+ data.merchant_key,
13
+ data.customer_number,
14
+ data.cc_holder_name,
15
+ data.cc_no,
16
+ data.expiry_month,
17
+ data.expiry_year,
18
+ ];
19
+ data.hash_key = generateHashKey(hashParts, this.client['config'].appSecret);
20
+ return this.post('/api/saveCard', data, options);
21
+ }
22
+ /**
23
+ * Get saved card tokens for a customer
24
+ */
25
+ async getCardTokens(customerData, options) {
26
+ const data = this.addMerchantKey(customerData);
27
+ return this.get('/api/getCardTokens', data, options);
28
+ }
29
+ /**
30
+ * Edit a saved card
31
+ */
32
+ async editCard(cardData, options) {
33
+ const data = this.addMerchantKey(cardData);
34
+ // Generate hash key for edit card
35
+ // Hash format: merchant_key|customer_number|card_token
36
+ const hashParts = [data.merchant_key, data.customer_number, data.card_token];
37
+ data.hash_key = generateHashKey(hashParts, this.client['config'].appSecret);
38
+ return this.post('/api/editCard', data, options);
39
+ }
40
+ /**
41
+ * Delete a saved card
42
+ */
43
+ async deleteCard(cardData, options) {
44
+ const data = this.addMerchantKey(cardData);
45
+ // Generate hash key for delete card
46
+ // Hash format: merchant_key|customer_number|card_token
47
+ const hashParts = [data.merchant_key, data.customer_number, data.card_token];
48
+ data.hash_key = generateHashKey(hashParts, this.client['config'].appSecret);
49
+ return this.post('/api/deleteCard', data, options);
50
+ }
51
+ /**
52
+ * Pay using a saved card token (3D Secure)
53
+ */
54
+ async payByCardToken(paymentData, options) {
55
+ const data = this.addMerchantKey(paymentData);
56
+ // Generate hash key for card token payment
57
+ // Hash format: total|installments_number|currency_code|merchant_key|invoice_id
58
+ const hashKey = generatePaymentHashKey(data.total, data.installments_number || 1, data.currency_code, data.merchant_key, data.invoice_id, this.client['config'].appSecret);
59
+ data.hash_key = hashKey;
60
+ return this.post('/api/payByCardToken', data, options);
61
+ }
62
+ /**
63
+ * Pay using a saved card token (Non-Secure/2D)
64
+ */
65
+ async payByCardTokenNonSecure(paymentData, options) {
66
+ const data = this.addMerchantKey(paymentData);
67
+ // Generate hash key for non-secure card token payment
68
+ // Hash format: total|installments_number|currency_code|merchant_key|invoice_id
69
+ const hashKey = generatePaymentHashKey(data.total, data.installments_number || 1, data.currency_code, data.merchant_key, data.invoice_id, this.client['config'].appSecret);
70
+ data.hash_key = hashKey;
71
+ return this.post('/api/payByCardTokenNonSecure', data, options);
72
+ }
73
+ }
74
+ //# sourceMappingURL=cards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards.js","sourceRoot":"","sources":["../../../src/resources/cards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { SipayResource } from './base';
2
+ export class Cashout extends SipayResource {
3
+ /**
4
+ * Initiate a cashout to bank account
5
+ * Note: This endpoint requires Bearer token authentication and uses a different request structure
6
+ * Hash generation format is not documented in the API spec - requires investigation
7
+ */
8
+ async toBank(cashoutData, options) {
9
+ const data = this.addMerchantKey(cashoutData);
10
+ // TODO: Implement hash generation for cashout endpoint
11
+ // The API spec shows hash_key is required but doesn't provide hash generation examples
12
+ // Hash format needs to be determined - possibly based on merchant_key + invoice_id + amount
13
+ data.hash_key = 'TODO_IMPLEMENT_CASHOUT_HASH_GENERATION';
14
+ return this.post('/api/cashout/tobank', data, options);
15
+ }
16
+ }
17
+ //# sourceMappingURL=cashout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cashout.js","sourceRoot":"","sources":["../../../src/resources/cashout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAqBvC,MAAM,OAAO,OAAQ,SAAQ,aAAa;IACxC;;;;OAIG;IACH,KAAK,CAAC,MAAM,CACV,WAAoE,EACpE,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAyB,CAAC;QAEtE,uDAAuD;QACvD,uFAAuF;QACvF,4FAA4F;QAC5F,IAAI,CAAC,QAAQ,GAAG,wCAAwC,CAAC;QAEzD,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF"}
@@ -0,0 +1,58 @@
1
+ import { SipayResource } from './base';
2
+ import { generatePaymentHashKey } from '../utils';
3
+ export class Marketplace extends SipayResource {
4
+ /**
5
+ * Make a marketplace payment (non-secure/2D)
6
+ */
7
+ async pay2D(paymentData, options) {
8
+ const data = this.addMerchantKey(paymentData);
9
+ // Generate hash key for marketplace payment
10
+ // Hash format: total|installments_number|currency_code|merchant_key|invoice_id
11
+ const hashKey = generatePaymentHashKey(data.total, data.installments_number || 1, data.currency_code, data.merchant_key, data.invoice_id, this.client['config'].appSecret);
12
+ data.hash_key = hashKey;
13
+ return this.post('/api/marketplace/sale/pay/smart/non-secure', data, options);
14
+ }
15
+ /**
16
+ * Make a marketplace payment with 3D Secure
17
+ */
18
+ async pay3D(paymentData, options) {
19
+ const data = this.addMerchantKey(paymentData);
20
+ return this.post('/api/marketplace/sale/pay/smart/secure', data, options);
21
+ }
22
+ /**
23
+ * Refund a marketplace payment
24
+ */
25
+ async refund(refundData, options) {
26
+ const data = this.addMerchantKey(refundData);
27
+ return this.post('/ccpayment/api/marketplace/sale/refund', data, options);
28
+ }
29
+ /**
30
+ * Check status of a marketplace payment
31
+ */
32
+ async checkStatus(statusData, options) {
33
+ const data = this.addMerchantKey(statusData);
34
+ return this.post('/ccpayment/api/marketplace/sale/check/status', data, options);
35
+ }
36
+ /**
37
+ * Get settlements information
38
+ */
39
+ async getSettlements(settlementsData, options) {
40
+ const data = this.addMerchantKey(settlementsData);
41
+ return this.post('/ccpayment/api/settlements', data, options);
42
+ }
43
+ /**
44
+ * Approve a marketplace transaction
45
+ */
46
+ async approveTransaction(approveData, options) {
47
+ const data = this.addMerchantKey(approveData);
48
+ return this.post('/ccpayment/api/marketplace/sale/transaction/approve', data, options);
49
+ }
50
+ /**
51
+ * Process payout to sub merchants
52
+ */
53
+ async payout(payoutData, options) {
54
+ const data = this.addMerchantKey(payoutData);
55
+ return this.post('/ccpayment/api/marketplace/sub-merchant/payout', data, options);
56
+ }
57
+ }
58
+ //# sourceMappingURL=marketplace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../../src/resources/marketplace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAWvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AA8DlD,MAAM,OAAO,WAAY,SAAQ,aAAa;IAC5C;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,WAAsE,EACtE,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAA2B,CAAC;QAExE,4CAA4C;QAC5C,+EAA+E;QAC/E,MAAM,OAAO,GAAG,sBAAsB,CACpC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,mBAAmB,IAAI,CAAC,EAC7B,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAChC,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,OAAO,IAAI,CAAC,IAAI,CAAC,4CAA4C,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,WAAyD,EACzD,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,wCAAwC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,UAA0D,EAC1D,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,wCAAwC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,UAA0D,EAC1D,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,8CAA8C,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,eAAyD,EACzD,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,WAA4D,EAC5D,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,qDAAqD,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,UAA0D,EAC1D,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,gDAAgD,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import { SipayResource } from './base';
2
+ import * as crypto from 'crypto';
3
+ const { createHash, createCipheriv } = crypto;
4
+ export class PaymentCompletion extends SipayResource {
5
+ /**
6
+ * Complete or cancel a 3D payment transaction
7
+ * This is used for merchant 3D model where payment completion is done by merchant
8
+ */
9
+ async completePayment(completionData, options) {
10
+ const data = this.addMerchantKey(completionData);
11
+ // Generate hash key using the payment completion format
12
+ // Hash format: merchant_key|invoice_id|order_id|status
13
+ const hashKey = this.generatePaymentCompletionHashKey(this.client['config'].merchantKey, data.invoice_id, data.order_id, data.status, this.client['config'].appSecret);
14
+ data.hash_key = hashKey;
15
+ return this.post('/payment/complete', data, options);
16
+ }
17
+ /**
18
+ * Generate hash key for payment completion (using official method)
19
+ */
20
+ generatePaymentCompletionHashKey(merchantKey, invoiceId, orderId, status, appSecret) {
21
+ try {
22
+ const data = merchantKey + '|' + invoiceId + '|' + orderId + '|' + status;
23
+ const iv = createHash('sha1').update(String(Math.random())).digest('hex').slice(0, 16);
24
+ const password = createHash('sha1').update(appSecret).digest('hex');
25
+ const salt = createHash('sha1').update(String(Math.random())).digest('hex').slice(0, 4);
26
+ const saltWithPassword = createHash('sha256')
27
+ .update(password + salt)
28
+ .digest('hex')
29
+ .slice(0, 32);
30
+ const cipher = createCipheriv('aes-256-cbc', saltWithPassword, iv);
31
+ let encrypted = cipher.update(data, 'binary', 'base64');
32
+ encrypted += cipher.final('base64');
33
+ const msgBundle = iv + ':' + salt + ':' + encrypted;
34
+ return msgBundle.replace(/\//g, '__');
35
+ }
36
+ catch (error) {
37
+ throw new Error(`Payment completion hash key generation failed: ${error}`);
38
+ }
39
+ }
40
+ }
41
+ //# sourceMappingURL=payment-completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-completion.js","sourceRoot":"","sources":["../../../src/resources/payment-completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;AAU9C,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAClD;;;OAGG;IACH,KAAK,CAAC,eAAe,CACnB,cAAyE,EACzE,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAA2B,CAAC;QAE3E,wDAAwD;QACxD,uDAAuD;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,gCAAgC,CACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EACjC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAChC,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACK,gCAAgC,CACtC,WAAmB,EACnB,SAAiB,EACjB,OAAe,EACf,MAAc,EACd,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC;YAE1E,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAEvF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEpE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAExF,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC;iBAC1C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;iBACvB,MAAM,CAAC,KAAK,CAAC;iBACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAEhB,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;YAEnE,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACxD,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAEpC,MAAM,SAAS,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC;YAEpD,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kDAAkD,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;CACF"}
@@ -1,12 +1,12 @@
1
1
  import { SipayResource } from './base';
2
- import { generatePaymentHashKey, generateStatusHashKey } from '../utils';
2
+ import { generatePaymentHashKey, generateStatusHashKey, generateConfirmPaymentHashKey, } from '../utils';
3
3
  export class Payments extends SipayResource {
4
4
  /**
5
5
  * Make a 2D payment (without 3D Secure authentication)
6
6
  */
7
7
  async pay2D(paymentData, options) {
8
8
  const data = this.addMerchantKey(paymentData);
9
- // Generate hash key for payment
9
+ // Generate hash key for payment verification
10
10
  const hashKey = generatePaymentHashKey(data.total, data.installments_number || 1, data.currency_code, this.client['config'].merchantKey, data.invoice_id, this.client['config'].appSecret);
11
11
  data.hash_key = hashKey;
12
12
  return this.post('/api/paySmart2D', data, options);
@@ -39,6 +39,17 @@ export class Payments extends SipayResource {
39
39
  data.hash_key = hashKey;
40
40
  return this.post('/api/checkstatus', data, options);
41
41
  }
42
+ /**
43
+ * Confirm a pre-authorization payment
44
+ */
45
+ async confirmPayment(confirmData, options) {
46
+ const data = this.addMerchantKey(confirmData);
47
+ // Generate hash key for payment confirmation
48
+ // Hash format: merchant_key|invoice_id|status
49
+ const hashKey = generateConfirmPaymentHashKey(data.merchant_key, data.invoice_id, data.status, this.client['config'].appSecret);
50
+ data.hash_key = hashKey;
51
+ return this.post('/api/confirmPayment', data, options);
52
+ }
42
53
  /**
43
54
  * Refund a payment
44
55
  */
@@ -46,6 +57,21 @@ export class Payments extends SipayResource {
46
57
  const data = this.addMerchantKey(refundData);
47
58
  return this.post('/api/refund', data, options);
48
59
  }
60
+ /**
61
+ * Get merchant active installments
62
+ * Note: This endpoint uses Bearer token authentication
63
+ */
64
+ async getInstallments(options) {
65
+ // This endpoint doesn't require request body, only headers with Bearer token
66
+ return this.post('/api/installments', {}, options);
67
+ }
68
+ /**
69
+ * Get authentication token
70
+ * Used for Bearer token authentication in certain endpoints
71
+ */
72
+ async getToken(tokenData, options) {
73
+ return this.post('/api/token', tokenData, options);
74
+ }
49
75
  /**
50
76
  * Legacy 2D payment method (maintains compatibility)
51
77
  */
@@ -1 +1 @@
1
- {"version":3,"file":"payments.js","sourceRoot":"","sources":["../../../src/resources/payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAWvC,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEzE,MAAM,OAAO,QAAS,SAAQ,aAAa;IACzC;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,WAAgE,EAChE,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAE9C,gCAAgC;QAChC,MAAM,OAAO,GAAG,sBAAsB,CACpC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,mBAAmB,IAAI,CAAC,EAC7B,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EACjC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAChC,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CACT,WAAmD,EACnD,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,OAA4C,EAC5C,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;YAC/B,GAAG,OAAO;YACV,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,UAAiE,EACjE,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAE7C,qCAAqC;QACrC,MAAM,OAAO,GAAG,qBAAqB,CACnC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAChC,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,UAA+C,EAC/C,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,WAAmD,EACnD,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF"}
1
+ {"version":3,"file":"payments.js","sourceRoot":"","sources":["../../../src/resources/payments.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,8 @@
1
1
  import { SipayResource } from './base';
2
+ // Note: Recurring payment functionality is handled through the regular payment endpoints
3
+ // by including recurring parameters (recurring_payment_number, recurring_payment_cycle,
4
+ // recurring_payment_interval, recurring_web_hook_key) in the payment request.
5
+ // See the Payment2DRequest and Payment3DRequest interfaces for these parameters.
2
6
  export class Recurring extends SipayResource {
3
- /**
4
- * Query recurring payment information
5
- */
6
- async query(queryData, options) {
7
- return this.post('/api/QueryRecurring', queryData, options);
8
- }
9
- /**
10
- * Process a recurring payment plan
11
- */
12
- async processPlan(planData, options) {
13
- return this.post('/api/recurring/plan/process', planData, options);
14
- }
15
7
  }
16
8
  //# sourceMappingURL=recurring.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recurring.js","sourceRoot":"","sources":["../../../src/resources/recurring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAQvC,MAAM,OAAO,SAAU,SAAQ,aAAa;IAC1C;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,SAAgC,EAChC,OAAwB;QAExB,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,QAAqC,EACrC,OAAwB;QAExB,OAAO,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;CACF"}
1
+ {"version":3,"file":"recurring.js","sourceRoot":"","sources":["../../../src/resources/recurring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,yFAAyF;AACzF,wFAAwF;AACxF,8EAA8E;AAC9E,iFAAiF;AAEjF,MAAM,OAAO,SAAU,SAAQ,aAAa;CAK3C"}
@@ -0,0 +1,84 @@
1
+ import { SipayResource } from './base';
2
+ import { generateHashKey } from '../utils';
3
+ export class SubMerchant extends SipayResource {
4
+ /**
5
+ * Add a new standard sub merchant
6
+ */
7
+ async add(subMerchantData, options) {
8
+ const data = this.addMerchantKey(subMerchantData);
9
+ return this.post('/api/sub-merchant/add', data, options);
10
+ }
11
+ /**
12
+ * Edit a standard sub merchant
13
+ */
14
+ async edit(editData, options) {
15
+ const data = this.addMerchantKey(editData);
16
+ return this.post('/api/sub-merchant/edit', data, options);
17
+ }
18
+ /**
19
+ * Delete a standard sub merchant
20
+ */
21
+ async delete(deleteData, options) {
22
+ const data = this.addMerchantKey(deleteData);
23
+ return this.post('/api/sub-merchant/delete', data, options);
24
+ }
25
+ /**
26
+ * List all standard sub merchants
27
+ */
28
+ async list(listData, options) {
29
+ const data = this.addMerchantKey(listData || {});
30
+ return this.post('/api/sub-merchant/list', data, options);
31
+ }
32
+ /**
33
+ * Add a new sub merchant PF (Physical Person)
34
+ */
35
+ async addPF(subMerchantData, options) {
36
+ const data = this.addMerchantKey(subMerchantData);
37
+ return this.post('/api/addSubMerchantPF', data, options);
38
+ }
39
+ /**
40
+ * Delete a sub merchant PF
41
+ */
42
+ async deletePF(deleteData, options) {
43
+ const data = this.addMerchantKey(deleteData);
44
+ return this.post('/api/deleteSubMerchantPF', data, options);
45
+ }
46
+ /**
47
+ * View details of a sub merchant PF
48
+ */
49
+ async viewPF(viewData, options) {
50
+ const data = this.addMerchantKey(viewData);
51
+ return this.post('/api/subMerchantPF/view', data, options);
52
+ }
53
+ /**
54
+ * List all sub merchants PF
55
+ */
56
+ async listPF(listData, options) {
57
+ const data = this.addMerchantKey(listData || {});
58
+ return this.post('/api/listSubMerchantPF', data, options);
59
+ }
60
+ /**
61
+ * Make payout to sub merchants
62
+ * Hash format: sub_merchant_id|currency_code|amount for each payout item
63
+ */
64
+ async payout(payoutData, options) {
65
+ const data = this.addMerchantKey(payoutData);
66
+ // Generate hash key for payout
67
+ // According to the spec: $data = $submerchant.'|'.$currency_code.'|'.$amount;
68
+ // We need to generate hash for the first payout item (or combined if multiple)
69
+ if (data.payout_data && data.payout_data.length > 0) {
70
+ const firstPayout = data.payout_data[0];
71
+ const hashParts = [
72
+ firstPayout.sub_merchant_id,
73
+ firstPayout.currency_code,
74
+ firstPayout.amount,
75
+ ];
76
+ data.hash_key = generateHashKey(hashParts, this.client['config'].appSecret);
77
+ }
78
+ else {
79
+ throw new Error('Payout data is required');
80
+ }
81
+ return this.post('/ccpayment/api/marketplace/sub-merchant/payout', data, options);
82
+ }
83
+ }
84
+ //# sourceMappingURL=sub-merchant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-merchant.js","sourceRoot":"","sources":["../../../src/resources/sub-merchant.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export {};
1
+ // Export status codes
2
+ export * from './status-codes';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AA+iBA,sBAAsB;AACtB,cAAc,gBAAgB,CAAC"}