@muhammedaksam/sipay-node 1.0.5 → 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 (86) hide show
  1. package/dist/esm/index.js +16 -0
  2. package/dist/esm/index.js.map +1 -1
  3. package/dist/esm/resources/branded-solution.js +0 -7
  4. package/dist/esm/resources/branded-solution.js.map +1 -1
  5. package/dist/esm/resources/cards.js +74 -0
  6. package/dist/esm/resources/cards.js.map +1 -0
  7. package/dist/esm/resources/cashout.js +17 -0
  8. package/dist/esm/resources/cashout.js.map +1 -0
  9. package/dist/esm/resources/marketplace.js +58 -0
  10. package/dist/esm/resources/marketplace.js.map +1 -0
  11. package/dist/esm/resources/payment-completion.js +41 -0
  12. package/dist/esm/resources/payment-completion.js.map +1 -0
  13. package/dist/esm/resources/payments.js +34 -1
  14. package/dist/esm/resources/payments.js.map +1 -1
  15. package/dist/esm/resources/recurring.js +4 -12
  16. package/dist/esm/resources/recurring.js.map +1 -1
  17. package/dist/esm/resources/sub-merchant.js +84 -0
  18. package/dist/esm/resources/sub-merchant.js.map +1 -0
  19. package/dist/esm/types/index.js +2 -1
  20. package/dist/esm/types/index.js.map +1 -1
  21. package/dist/esm/types/status-codes.js +292 -0
  22. package/dist/esm/types/status-codes.js.map +1 -0
  23. package/dist/esm/utils/http-client.js +14 -3
  24. package/dist/esm/utils/http-client.js.map +1 -1
  25. package/dist/esm/utils/index.js +158 -15
  26. package/dist/esm/utils/index.js.map +1 -1
  27. package/dist/esm/utils/status-code-helpers.js +158 -0
  28. package/dist/esm/utils/status-code-helpers.js.map +1 -0
  29. package/dist/index.d.ts +16 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +22 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/resources/branded-solution.d.ts +1 -5
  34. package/dist/resources/branded-solution.d.ts.map +1 -1
  35. package/dist/resources/branded-solution.js +0 -7
  36. package/dist/resources/branded-solution.js.map +1 -1
  37. package/dist/resources/cards.d.ts +76 -0
  38. package/dist/resources/cards.d.ts.map +1 -0
  39. package/dist/resources/cards.js +78 -0
  40. package/dist/resources/cards.js.map +1 -0
  41. package/dist/resources/cashout.d.ts +28 -0
  42. package/dist/resources/cashout.d.ts.map +1 -0
  43. package/dist/resources/cashout.js +21 -0
  44. package/dist/resources/cashout.js.map +1 -0
  45. package/dist/resources/commissions.d.ts +2 -2
  46. package/dist/resources/commissions.d.ts.map +1 -1
  47. package/dist/resources/marketplace.d.ts +87 -0
  48. package/dist/resources/marketplace.d.ts.map +1 -0
  49. package/dist/resources/marketplace.js +62 -0
  50. package/dist/resources/marketplace.js.map +1 -0
  51. package/dist/resources/payment-completion.d.ts +21 -0
  52. package/dist/resources/payment-completion.d.ts.map +1 -0
  53. package/dist/resources/payment-completion.js +78 -0
  54. package/dist/resources/payment-completion.js.map +1 -0
  55. package/dist/resources/payments.d.ts +21 -7
  56. package/dist/resources/payments.d.ts.map +1 -1
  57. package/dist/resources/payments.js +34 -1
  58. package/dist/resources/payments.js.map +1 -1
  59. package/dist/resources/recurring.d.ts +0 -9
  60. package/dist/resources/recurring.d.ts.map +1 -1
  61. package/dist/resources/recurring.js +4 -12
  62. package/dist/resources/recurring.js.map +1 -1
  63. package/dist/resources/sub-merchant.d.ts +136 -0
  64. package/dist/resources/sub-merchant.d.ts.map +1 -0
  65. package/dist/resources/sub-merchant.js +88 -0
  66. package/dist/resources/sub-merchant.js.map +1 -0
  67. package/dist/types/index.d.ts +373 -0
  68. package/dist/types/index.d.ts.map +1 -1
  69. package/dist/types/index.js +16 -0
  70. package/dist/types/index.js.map +1 -1
  71. package/dist/types/status-codes.d.ts +125 -0
  72. package/dist/types/status-codes.d.ts.map +1 -0
  73. package/dist/types/status-codes.js +300 -0
  74. package/dist/types/status-codes.js.map +1 -0
  75. package/dist/utils/http-client.d.ts.map +1 -1
  76. package/dist/utils/http-client.js +14 -3
  77. package/dist/utils/http-client.js.map +1 -1
  78. package/dist/utils/index.d.ts +50 -5
  79. package/dist/utils/index.d.ts.map +1 -1
  80. package/dist/utils/index.js +170 -16
  81. package/dist/utils/index.js.map +1 -1
  82. package/dist/utils/status-code-helpers.d.ts +42 -0
  83. package/dist/utils/status-code-helpers.d.ts.map +1 -0
  84. package/dist/utils/status-code-helpers.js +164 -0
  85. package/dist/utils/status-code-helpers.js.map +1 -0
  86. package/package.json +11 -9
@@ -32,39 +32,43 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
36
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.generateHashKey = generateHashKey;
39
+ exports.luhnCheck = luhnCheck;
37
40
  exports.validateCreditCard = validateCreditCard;
41
+ exports.maskCardNumber = maskCardNumber;
38
42
  exports.formatAmount = formatAmount;
43
+ exports.formatAmountForHash = formatAmountForHash;
44
+ exports.generatePaymentHashKey = generatePaymentHashKey;
45
+ exports.generateStatusHashKey = generateStatusHashKey;
46
+ exports.generateConfirmPaymentHashKey = generateConfirmPaymentHashKey;
47
+ exports.generateHashKey = generateHashKey;
39
48
  exports.generateInvoiceId = generateInvoiceId;
40
49
  exports.validatePaymentData = validatePaymentData;
41
50
  exports.maskCreditCard = maskCreditCard;
42
51
  exports.parseSipayError = parseSipayError;
52
+ exports.validateHashKey = validateHashKey;
53
+ exports.generateServerFormatHashKey = generateServerFormatHashKey;
43
54
  const crypto = __importStar(require("crypto"));
55
+ const { createHash, createCipheriv, createDecipheriv } = crypto;
44
56
  /**
45
57
  * Utility functions for Sipay SDK
46
58
  */
47
- /**
48
- * Generate hash key for payment requests
49
- * Based on Sipay documentation requirements
50
- */
51
- function generateHashKey(merchantKey, invoiceId, amount, secretKey) {
52
- const hashString = `${merchantKey}${invoiceId}${amount}${secretKey}`;
53
- return crypto.createHash('sha256').update(hashString).digest('hex');
54
- }
55
59
  /**
56
60
  * Validate credit card number using Luhn algorithm
57
61
  */
58
- function validateCreditCard(cardNumber) {
59
- const num = cardNumber.replace(/\D/g, '');
60
- // Check if empty or less than 13 digits
61
- if (num.length < 13 || num.length > 19) {
62
+ function luhnCheck(cardNumber) {
63
+ const digits = cardNumber.replace(/\D/g, '').split('').map(Number);
64
+ // Check minimum length
65
+ if (digits.length < 13 || digits.length > 19) {
62
66
  return false;
63
67
  }
64
68
  let sum = 0;
65
69
  let isEven = false;
66
- for (let i = num.length - 1; i >= 0; i--) {
67
- let digit = parseInt(num.charAt(i), 10);
70
+ for (let i = digits.length - 1; i >= 0; i--) {
71
+ let digit = digits[i];
68
72
  if (isEven) {
69
73
  digit *= 2;
70
74
  if (digit > 9) {
@@ -77,11 +81,100 @@ function validateCreditCard(cardNumber) {
77
81
  return sum % 10 === 0;
78
82
  }
79
83
  /**
80
- * Format currency amount for Sipay API
84
+ * Validate credit card number (alias for luhnCheck)
85
+ */
86
+ function validateCreditCard(cardNumber) {
87
+ return luhnCheck(cardNumber);
88
+ }
89
+ /**
90
+ * Mask credit card number for display
91
+ */
92
+ function maskCardNumber(cardNumber) {
93
+ const cleaned = cardNumber.replace(/\D/g, '');
94
+ if (cleaned.length < 8)
95
+ return cleaned;
96
+ const first4 = cleaned.slice(0, 4);
97
+ const last4 = cleaned.slice(-4);
98
+ const middle = '*'.repeat(cleaned.length - 8);
99
+ return `${first4}${middle}${last4}`;
100
+ }
101
+ /**
102
+ * Format amount for Sipay API - amounts should be sent as numbers, not cents
81
103
  */
82
104
  function formatAmount(amount) {
105
+ // Amount should be formatted as a float with proper decimal places
106
+ // For amounts like 100.00, it should be "100.00", not "1.00"
83
107
  return amount.toFixed(2);
84
108
  }
109
+ /**
110
+ * Format amount specifically for hash key generation
111
+ * This should match PHP's number_format($amount, 2, ".", "") exactly
112
+ * PHP always formats with 2 decimal places: 10.00, 125.50, etc.
113
+ */
114
+ function formatAmountForHash(amount) {
115
+ // Match PHP number_format($amount, 2, ".", "") - always 2 decimal places
116
+ return amount.toFixed(2);
117
+ }
118
+ /**
119
+ * Generate hash key for payment requests
120
+ * Order matches PHP SDK CreateNonSecurePaymentRequest::generateHashKeyParts():
121
+ * 1. total, 2. installments_number, 3. currency_code, 4. merchant_key, 5. invoice_id
122
+ */
123
+ function generatePaymentHashKey(total, installment, currencyCode, merchantKey, invoiceId, apiSecret) {
124
+ const parts = [
125
+ formatAmountForHash(total),
126
+ installment.toString(),
127
+ currencyCode,
128
+ merchantKey,
129
+ invoiceId,
130
+ ];
131
+ return generateHashKey(parts, apiSecret);
132
+ }
133
+ /**
134
+ * Generate hash key for status check requests
135
+ * Order matches PHP SDK CheckTransactionStatusRequest::generateHashKeyParts():
136
+ * 1. invoice_id, 2. merchant_key
137
+ */
138
+ function generateStatusHashKey(invoiceId, merchantKey, apiSecret) {
139
+ const parts = [invoiceId, merchantKey];
140
+ return generateHashKey(parts, apiSecret);
141
+ }
142
+ /**
143
+ * Generate hash key for payment confirmation requests
144
+ * Order matches PHP SDK: merchant_key|invoice_id|status
145
+ */
146
+ function generateConfirmPaymentHashKey(merchantKey, invoiceId, status, apiSecret) {
147
+ const parts = [merchantKey, invoiceId, status.toString()];
148
+ return generateHashKey(parts, apiSecret);
149
+ }
150
+ /**
151
+ * Generate hash key for payment requests
152
+ * Exact 1:1 Node.js implementation of PHP's generateHashKey function
153
+ * Matches: $total . '|' . $installment . '|' . $currency_code . '|' . $merchant_key . '|' . $invoice_id
154
+ * with openssl_encrypt('aes-256-cbc') encryption
155
+ */
156
+ function generateHashKey(parts, appSecret) {
157
+ const data = parts.join('|');
158
+ // Generate IV using SHA1 hash of random value
159
+ const iv = createHash('sha1').update(String(Math.random())).digest('hex').slice(0, 16);
160
+ // Generate password using SHA1 hash of app secret
161
+ const password = createHash('sha1').update(appSecret).digest('hex');
162
+ // Generate salt using SHA1 hash of random value
163
+ const salt = createHash('sha1').update(String(Math.random())).digest('hex').slice(0, 4);
164
+ // Create encryption key using SHA256 hash of password and salt
165
+ const saltWithPassword = createHash('sha256')
166
+ .update(password + salt)
167
+ .digest('hex')
168
+ .slice(0, 32);
169
+ // Encrypt data using AES-256-CBC
170
+ const cipher = createCipheriv('aes-256-cbc', saltWithPassword, iv);
171
+ let encrypted = cipher.update(data, 'binary', 'base64');
172
+ encrypted += cipher.final('base64');
173
+ // Bundle components and replace forward slashes with double underscores
174
+ let msgEncryptedBundle = `${iv}:${salt}:${encrypted}`;
175
+ msgEncryptedBundle = msgEncryptedBundle.replace(/\//g, '__');
176
+ return msgEncryptedBundle;
177
+ }
85
178
  /**
86
179
  * Generate a unique invoice ID
87
180
  */
@@ -175,4 +268,65 @@ function parseSipayError(error) {
175
268
  message: error.message || 'Network error',
176
269
  };
177
270
  }
271
+ /**
272
+ * Validate hash key using server-side validation logic
273
+ * This matches exactly what the PHP SDK does for server-side validation
274
+ * Expected decrypted format: status|total|invoiceId|orderId|currencyCode
275
+ */
276
+ function validateHashKey(hashKey, secretKey) {
277
+ let status = '';
278
+ let currencyCode = '';
279
+ let total = 0;
280
+ let invoiceId = '';
281
+ let orderId = 0;
282
+ if (!hashKey) {
283
+ return [status, total, invoiceId, orderId, currencyCode];
284
+ }
285
+ try {
286
+ // Replace underscores with forward slashes (PHP compatibility)
287
+ const normalizedHashKey = hashKey.replace(/_/g, '/');
288
+ const password = createHash('sha1').update(secretKey).digest('hex');
289
+ const components = normalizedHashKey.split(':');
290
+ if (components.length > 2) {
291
+ const iv = components[0] || '';
292
+ const saltHex = components[1] || '';
293
+ const encryptedMsg = components[2] || '';
294
+ // Generate salt exactly like PHP: hash('sha256', $password . $salt)
295
+ const saltWithPassword = createHash('sha256')
296
+ .update(password + saltHex)
297
+ .digest('hex');
298
+ // Create decipher with proper parameters
299
+ // PHP's openssl_decrypt expects:
300
+ // - IV as raw ASCII bytes (16-char hex string treated as ASCII)
301
+ // - Key as binary from hex string (32 bytes for AES-256)
302
+ const decipher = createDecipheriv('aes-256-cbc', Buffer.from(saltWithPassword, 'hex').slice(0, 32), // 32-byte key from hex
303
+ Buffer.from(iv, 'ascii') // IV: 16-char hex string as ASCII bytes
304
+ );
305
+ let decrypted = decipher.update(encryptedMsg, 'base64', 'utf8');
306
+ decrypted += decipher.final('utf8');
307
+ if (decrypted.includes('|')) {
308
+ const array = decrypted.split('|');
309
+ status = array[0] || '0';
310
+ total = parseFloat(array[1] || '0');
311
+ invoiceId = array[2] || '0';
312
+ orderId = parseInt(array[3] || '0');
313
+ currencyCode = array[4] || '';
314
+ }
315
+ }
316
+ }
317
+ catch {
318
+ // Silently handle decryption errors
319
+ }
320
+ return [status, total, invoiceId, orderId, currencyCode];
321
+ }
322
+ /**
323
+ * Generate hash key in server validation format
324
+ * Server expects: status|total|invoiceId|orderId|currencyCode
325
+ */
326
+ function generateServerFormatHashKey(status, total, invoiceId, orderId, currencyCode, appSecret) {
327
+ const parts = [status, formatAmountForHash(total), invoiceId, orderId.toString(), currencyCode];
328
+ return generateHashKey(parts, appSecret);
329
+ }
330
+ // Export status code helpers
331
+ __exportStar(require("./status-code-helpers"), exports);
178
332
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Sipay Status Code Utilities
3
+ * Helper functions for working with Sipay API status codes
4
+ */
5
+ import { SipayStatusCode, SipayStatusCategory } from '../types/status-codes';
6
+ /**
7
+ * Enhanced error information for status codes
8
+ */
9
+ export interface StatusCodeInfo {
10
+ code: number;
11
+ description: string;
12
+ category: SipayStatusCategory;
13
+ isSuccess: boolean;
14
+ isError: boolean;
15
+ isRetryable: boolean;
16
+ httpEquivalent?: number;
17
+ }
18
+ /**
19
+ * Get comprehensive information about a status code
20
+ */
21
+ export declare function getStatusCodeInfo(statusCode: number): StatusCodeInfo;
22
+ /**
23
+ * Common status code groups for easy checking
24
+ */
25
+ export declare const StatusCodeGroups: {
26
+ readonly SUCCESS: readonly [SipayStatusCode.SUCCESSFUL, SipayStatusCode.REFUND_REQUEST_CREATED, SipayStatusCode.PARTIALLY_SUCCESSFUL];
27
+ readonly VALIDATION_ERRORS: readonly [SipayStatusCode.BASIC_VALIDATION, SipayStatusCode.ITEMS_VALIDATION_ERROR, SipayStatusCode.PRICE_TOTAL_MISMATCH, SipayStatusCode.QUANTITY_MUST_BE_INTEGER, SipayStatusCode.INVALID_INVOICE_ID, SipayStatusCode.INVALID_CHARACTER, SipayStatusCode.INVALID_CARD_NUMBER, SipayStatusCode.CANCELLATION_URL_SHOULD_NOT_BE_BLANK];
28
+ readonly PAYMENT_ERRORS: readonly [SipayStatusCode.ORDER_FAILED, SipayStatusCode.PAYMENT_TERM_NOT_SET, SipayStatusCode.REFUND_FAILED, SipayStatusCode.TRANSACTION_NOT_FOUND, SipayStatusCode.ORDER_NOT_YET_PROCESSED, SipayStatusCode.TRANSACTION_NOT_APPROVED];
29
+ readonly MERCHANT_LIMIT_ERRORS: readonly [SipayStatusCode.CREDIT_CARD_BLOCKED, SipayStatusCode.MERCHANT_DAILY_AMOUNT_LIMIT_EXCEEDED, SipayStatusCode.MERCHANT_MONTHLY_TRANSACTION_LIMIT_EXCEEDED, SipayStatusCode.MERCHANT_MONTHLY_AMOUNT_LIMIT_EXCEEDED, SipayStatusCode.MINIMUM_TRANSACTION_LIMIT_VIOLATED];
30
+ readonly CARD_ERRORS: readonly [SipayStatusCode.CREDIT_CARD_BLOCKED, SipayStatusCode.MERCHANT_CARD_TRANSACTION_NOT_ALLOWED, SipayStatusCode.CARD_PROGRAM_MISMATCH, SipayStatusCode.FOREIGN_CARDS_NOT_ALLOWED, SipayStatusCode.NO_FOREIGN_CARD_COMMISSION];
31
+ readonly HASH_KEY_ERRORS: readonly [SipayStatusCode.HASH_KEY_VALIDATION_ERROR, SipayStatusCode.INVALID_HASH_KEY, SipayStatusCode.HASH_KEY_MERCHANT_KEY_MISMATCH, SipayStatusCode.HASH_KEY_CUSTOMER_NUMBER_MISMATCH, SipayStatusCode.HASH_KEY_CARD_HOLDER_NAME_MISMATCH, SipayStatusCode.HASH_KEY_CARD_NUMBER_MISMATCH, SipayStatusCode.HASH_KEY_EXPIRY_MONTH_MISMATCH, SipayStatusCode.HASH_KEY_EXPIRY_YEAR_MISMATCH, SipayStatusCode.HASH_KEY_CARD_TOKEN_MISMATCH];
32
+ readonly RETRYABLE_ERRORS: readonly [SipayStatusCode.ORDER_NOT_YET_PROCESSED, SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED, SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED_ALT, SipayStatusCode.REFUND_FAILED];
33
+ };
34
+ /**
35
+ * Check if status code is in a specific group
36
+ */
37
+ export declare function isStatusInGroup(statusCode: number, group: readonly number[]): boolean;
38
+ /**
39
+ * Get suggested actions based on status code
40
+ */
41
+ export declare function getSuggestedAction(statusCode: number): string;
42
+ //# sourceMappingURL=status-code-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-code-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/status-code-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,EAMpB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAUpE;AAsDD;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;CA6DnB,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAErF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAkC7D"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ /**
3
+ * Sipay Status Code Utilities
4
+ * Helper functions for working with Sipay API status codes
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.StatusCodeGroups = void 0;
8
+ exports.getStatusCodeInfo = getStatusCodeInfo;
9
+ exports.isStatusInGroup = isStatusInGroup;
10
+ exports.getSuggestedAction = getSuggestedAction;
11
+ const status_codes_1 = require("../types/status-codes");
12
+ /**
13
+ * Get comprehensive information about a status code
14
+ */
15
+ function getStatusCodeInfo(statusCode) {
16
+ return {
17
+ code: statusCode,
18
+ description: (0, status_codes_1.getStatusDescription)(statusCode),
19
+ category: (0, status_codes_1.getStatusCategory)(statusCode),
20
+ isSuccess: (0, status_codes_1.isSuccessStatus)(statusCode),
21
+ isError: (0, status_codes_1.isErrorStatus)(statusCode),
22
+ isRetryable: (0, status_codes_1.isRetryableStatus)(statusCode),
23
+ httpEquivalent: getHttpEquivalent(statusCode),
24
+ };
25
+ }
26
+ /**
27
+ * Map Sipay status codes to HTTP status codes where applicable
28
+ */
29
+ function getHttpEquivalent(statusCode) {
30
+ switch (statusCode) {
31
+ case status_codes_1.SipayStatusCode.SUCCESSFUL:
32
+ case status_codes_1.SipayStatusCode.REFUND_REQUEST_CREATED:
33
+ case status_codes_1.SipayStatusCode.PARTIALLY_SUCCESSFUL:
34
+ return 200; // OK
35
+ case status_codes_1.SipayStatusCode.BASIC_VALIDATION:
36
+ case status_codes_1.SipayStatusCode.ITEMS_VALIDATION_ERROR:
37
+ case status_codes_1.SipayStatusCode.PRICE_TOTAL_MISMATCH:
38
+ case status_codes_1.SipayStatusCode.QUANTITY_MUST_BE_INTEGER:
39
+ case status_codes_1.SipayStatusCode.INVALID_INVOICE_ID:
40
+ case status_codes_1.SipayStatusCode.INVALID_CHARACTER:
41
+ case status_codes_1.SipayStatusCode.INVALID_CARD_NUMBER:
42
+ case status_codes_1.SipayStatusCode.CANCELLATION_URL_SHOULD_NOT_BE_BLANK:
43
+ return 400; // Bad Request
44
+ case status_codes_1.SipayStatusCode.INVALID_CREDENTIALS:
45
+ case status_codes_1.SipayStatusCode.INVALID_TOKEN_OR_CLIENT_NUMBER:
46
+ return 401; // Unauthorized
47
+ case status_codes_1.SipayStatusCode.PAYMENT_INTEGRATION_NOT_ALLOWED:
48
+ case status_codes_1.SipayStatusCode.MERCHANT_NOT_ALLOWED_TOKEN_PAYMENT:
49
+ case status_codes_1.SipayStatusCode.MERCHANT_CARD_TRANSACTION_NOT_ALLOWED:
50
+ case status_codes_1.SipayStatusCode.FOREIGN_CARDS_NOT_ALLOWED:
51
+ return 403; // Forbidden
52
+ case status_codes_1.SipayStatusCode.MERCHANT_NOT_FOUND:
53
+ case status_codes_1.SipayStatusCode.TRANSACTION_NOT_FOUND:
54
+ case status_codes_1.SipayStatusCode.POS_NOT_FOUND:
55
+ case status_codes_1.SipayStatusCode.COMMISSION_NOT_FOUND:
56
+ case status_codes_1.SipayStatusCode.INSTALLMENT_NOT_FOUND:
57
+ case status_codes_1.SipayStatusCode.SUB_MERCHANT_NOT_FOUND:
58
+ return 404; // Not Found
59
+ case status_codes_1.SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED:
60
+ case status_codes_1.SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED_ALT:
61
+ return 409; // Conflict
62
+ case status_codes_1.SipayStatusCode.UNKNOWN_ERROR:
63
+ case status_codes_1.SipayStatusCode.CURRENCY_CONVERSION_FAILED:
64
+ case status_codes_1.SipayStatusCode.FILE_PROCESSING_ERROR:
65
+ return 500; // Internal Server Error
66
+ default:
67
+ return undefined;
68
+ }
69
+ }
70
+ /**
71
+ * Common status code groups for easy checking
72
+ */
73
+ exports.StatusCodeGroups = {
74
+ SUCCESS: [
75
+ status_codes_1.SipayStatusCode.SUCCESSFUL,
76
+ status_codes_1.SipayStatusCode.REFUND_REQUEST_CREATED,
77
+ status_codes_1.SipayStatusCode.PARTIALLY_SUCCESSFUL,
78
+ ],
79
+ VALIDATION_ERRORS: [
80
+ status_codes_1.SipayStatusCode.BASIC_VALIDATION,
81
+ status_codes_1.SipayStatusCode.ITEMS_VALIDATION_ERROR,
82
+ status_codes_1.SipayStatusCode.PRICE_TOTAL_MISMATCH,
83
+ status_codes_1.SipayStatusCode.QUANTITY_MUST_BE_INTEGER,
84
+ status_codes_1.SipayStatusCode.INVALID_INVOICE_ID,
85
+ status_codes_1.SipayStatusCode.INVALID_CHARACTER,
86
+ status_codes_1.SipayStatusCode.INVALID_CARD_NUMBER,
87
+ status_codes_1.SipayStatusCode.CANCELLATION_URL_SHOULD_NOT_BE_BLANK,
88
+ ],
89
+ PAYMENT_ERRORS: [
90
+ status_codes_1.SipayStatusCode.ORDER_FAILED,
91
+ status_codes_1.SipayStatusCode.PAYMENT_TERM_NOT_SET,
92
+ status_codes_1.SipayStatusCode.REFUND_FAILED,
93
+ status_codes_1.SipayStatusCode.TRANSACTION_NOT_FOUND,
94
+ status_codes_1.SipayStatusCode.ORDER_NOT_YET_PROCESSED,
95
+ status_codes_1.SipayStatusCode.TRANSACTION_NOT_APPROVED,
96
+ ],
97
+ MERCHANT_LIMIT_ERRORS: [
98
+ status_codes_1.SipayStatusCode.MERCHANT_DAILY_TRANSACTION_LIMIT_EXCEEDED,
99
+ status_codes_1.SipayStatusCode.MERCHANT_DAILY_AMOUNT_LIMIT_EXCEEDED,
100
+ status_codes_1.SipayStatusCode.MERCHANT_MONTHLY_TRANSACTION_LIMIT_EXCEEDED,
101
+ status_codes_1.SipayStatusCode.MERCHANT_MONTHLY_AMOUNT_LIMIT_EXCEEDED,
102
+ status_codes_1.SipayStatusCode.MINIMUM_TRANSACTION_LIMIT_VIOLATED,
103
+ ],
104
+ CARD_ERRORS: [
105
+ status_codes_1.SipayStatusCode.CREDIT_CARD_BLOCKED,
106
+ status_codes_1.SipayStatusCode.MERCHANT_CARD_TRANSACTION_NOT_ALLOWED,
107
+ status_codes_1.SipayStatusCode.CARD_PROGRAM_MISMATCH,
108
+ status_codes_1.SipayStatusCode.FOREIGN_CARDS_NOT_ALLOWED,
109
+ status_codes_1.SipayStatusCode.NO_FOREIGN_CARD_COMMISSION,
110
+ ],
111
+ HASH_KEY_ERRORS: [
112
+ status_codes_1.SipayStatusCode.HASH_KEY_VALIDATION_ERROR,
113
+ status_codes_1.SipayStatusCode.INVALID_HASH_KEY,
114
+ status_codes_1.SipayStatusCode.HASH_KEY_MERCHANT_KEY_MISMATCH,
115
+ status_codes_1.SipayStatusCode.HASH_KEY_CUSTOMER_NUMBER_MISMATCH,
116
+ status_codes_1.SipayStatusCode.HASH_KEY_CARD_HOLDER_NAME_MISMATCH,
117
+ status_codes_1.SipayStatusCode.HASH_KEY_CARD_NUMBER_MISMATCH,
118
+ status_codes_1.SipayStatusCode.HASH_KEY_EXPIRY_MONTH_MISMATCH,
119
+ status_codes_1.SipayStatusCode.HASH_KEY_EXPIRY_YEAR_MISMATCH,
120
+ status_codes_1.SipayStatusCode.HASH_KEY_CARD_TOKEN_MISMATCH,
121
+ ],
122
+ RETRYABLE_ERRORS: [
123
+ status_codes_1.SipayStatusCode.ORDER_NOT_YET_PROCESSED,
124
+ status_codes_1.SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED,
125
+ status_codes_1.SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED_ALT,
126
+ status_codes_1.SipayStatusCode.MAXIMUM_TRANSACTION_LIMIT_VIOLATED,
127
+ ],
128
+ };
129
+ /**
130
+ * Check if status code is in a specific group
131
+ */
132
+ function isStatusInGroup(statusCode, group) {
133
+ return group.includes(statusCode);
134
+ }
135
+ /**
136
+ * Get suggested actions based on status code
137
+ */
138
+ function getSuggestedAction(statusCode) {
139
+ const info = getStatusCodeInfo(statusCode);
140
+ switch (info.category) {
141
+ case status_codes_1.SipayStatusCategory.SUCCESS:
142
+ return 'Transaction completed successfully';
143
+ case status_codes_1.SipayStatusCategory.VALIDATION_ERROR:
144
+ return 'Check request parameters and fix validation errors';
145
+ case status_codes_1.SipayStatusCategory.AUTHENTICATION_ERROR:
146
+ return 'Verify API credentials and merchant configuration';
147
+ case status_codes_1.SipayStatusCategory.PAYMENT_ERROR:
148
+ if (info.isRetryable) {
149
+ return 'Transaction may be retried after a short delay';
150
+ }
151
+ return 'Check payment details and try with different parameters';
152
+ case status_codes_1.SipayStatusCategory.MERCHANT_ERROR:
153
+ return 'Contact your payment provider to resolve merchant configuration issues';
154
+ case status_codes_1.SipayStatusCategory.CARD_ERROR:
155
+ return 'Try with a different card or contact the card issuer';
156
+ case status_codes_1.SipayStatusCategory.HASH_ERROR:
157
+ return 'Verify hash key generation parameters and algorithm';
158
+ case status_codes_1.SipayStatusCategory.RECURRING_ERROR:
159
+ return 'Check recurring payment configuration and parameters';
160
+ default:
161
+ return 'Contact technical support for assistance';
162
+ }
163
+ }
164
+ //# sourceMappingURL=status-code-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-code-helpers.js","sourceRoot":"","sources":["../../src/utils/status-code-helpers.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA4BH,8CAUC;AA2HD,0CAEC;AAKD,gDAkCC;AAxMD,wDAQ+B;AAe/B;;GAEG;AACH,SAAgB,iBAAiB,CAAC,UAAkB;IAClD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,IAAA,mCAAoB,EAAC,UAAU,CAAC;QAC7C,QAAQ,EAAE,IAAA,gCAAiB,EAAC,UAAU,CAAC;QACvC,SAAS,EAAE,IAAA,8BAAe,EAAC,UAAU,CAAC;QACtC,OAAO,EAAE,IAAA,4BAAa,EAAC,UAAU,CAAC;QAClC,WAAW,EAAE,IAAA,gCAAiB,EAAC,UAAU,CAAC;QAC1C,cAAc,EAAE,iBAAiB,CAAC,UAAU,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,8BAAe,CAAC,UAAU,CAAC;QAChC,KAAK,8BAAe,CAAC,sBAAsB,CAAC;QAC5C,KAAK,8BAAe,CAAC,oBAAoB;YACvC,OAAO,GAAG,CAAC,CAAC,KAAK;QAEnB,KAAK,8BAAe,CAAC,gBAAgB,CAAC;QACtC,KAAK,8BAAe,CAAC,sBAAsB,CAAC;QAC5C,KAAK,8BAAe,CAAC,oBAAoB,CAAC;QAC1C,KAAK,8BAAe,CAAC,wBAAwB,CAAC;QAC9C,KAAK,8BAAe,CAAC,kBAAkB,CAAC;QACxC,KAAK,8BAAe,CAAC,iBAAiB,CAAC;QACvC,KAAK,8BAAe,CAAC,mBAAmB,CAAC;QACzC,KAAK,8BAAe,CAAC,oCAAoC;YACvD,OAAO,GAAG,CAAC,CAAC,cAAc;QAE5B,KAAK,8BAAe,CAAC,mBAAmB,CAAC;QACzC,KAAK,8BAAe,CAAC,8BAA8B;YACjD,OAAO,GAAG,CAAC,CAAC,eAAe;QAE7B,KAAK,8BAAe,CAAC,+BAA+B,CAAC;QACrD,KAAK,8BAAe,CAAC,kCAAkC,CAAC;QACxD,KAAK,8BAAe,CAAC,qCAAqC,CAAC;QAC3D,KAAK,8BAAe,CAAC,yBAAyB;YAC5C,OAAO,GAAG,CAAC,CAAC,YAAY;QAE1B,KAAK,8BAAe,CAAC,kBAAkB,CAAC;QACxC,KAAK,8BAAe,CAAC,qBAAqB,CAAC;QAC3C,KAAK,8BAAe,CAAC,aAAa,CAAC;QACnC,KAAK,8BAAe,CAAC,oBAAoB,CAAC;QAC1C,KAAK,8BAAe,CAAC,qBAAqB,CAAC;QAC3C,KAAK,8BAAe,CAAC,sBAAsB;YACzC,OAAO,GAAG,CAAC,CAAC,YAAY;QAE1B,KAAK,8BAAe,CAAC,4BAA4B,CAAC;QAClD,KAAK,8BAAe,CAAC,gCAAgC;YACnD,OAAO,GAAG,CAAC,CAAC,WAAW;QAEzB,KAAK,8BAAe,CAAC,aAAa,CAAC;QACnC,KAAK,8BAAe,CAAC,0BAA0B,CAAC;QAChD,KAAK,8BAAe,CAAC,qBAAqB;YACxC,OAAO,GAAG,CAAC,CAAC,wBAAwB;QAEtC;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACU,QAAA,gBAAgB,GAAG;IAC9B,OAAO,EAAE;QACP,8BAAe,CAAC,UAAU;QAC1B,8BAAe,CAAC,sBAAsB;QACtC,8BAAe,CAAC,oBAAoB;KACrC;IAED,iBAAiB,EAAE;QACjB,8BAAe,CAAC,gBAAgB;QAChC,8BAAe,CAAC,sBAAsB;QACtC,8BAAe,CAAC,oBAAoB;QACpC,8BAAe,CAAC,wBAAwB;QACxC,8BAAe,CAAC,kBAAkB;QAClC,8BAAe,CAAC,iBAAiB;QACjC,8BAAe,CAAC,mBAAmB;QACnC,8BAAe,CAAC,oCAAoC;KACrD;IAED,cAAc,EAAE;QACd,8BAAe,CAAC,YAAY;QAC5B,8BAAe,CAAC,oBAAoB;QACpC,8BAAe,CAAC,aAAa;QAC7B,8BAAe,CAAC,qBAAqB;QACrC,8BAAe,CAAC,uBAAuB;QACvC,8BAAe,CAAC,wBAAwB;KACzC;IAED,qBAAqB,EAAE;QACrB,8BAAe,CAAC,yCAAyC;QACzD,8BAAe,CAAC,oCAAoC;QACpD,8BAAe,CAAC,2CAA2C;QAC3D,8BAAe,CAAC,sCAAsC;QACtD,8BAAe,CAAC,kCAAkC;KACnD;IAED,WAAW,EAAE;QACX,8BAAe,CAAC,mBAAmB;QACnC,8BAAe,CAAC,qCAAqC;QACrD,8BAAe,CAAC,qBAAqB;QACrC,8BAAe,CAAC,yBAAyB;QACzC,8BAAe,CAAC,0BAA0B;KAC3C;IAED,eAAe,EAAE;QACf,8BAAe,CAAC,yBAAyB;QACzC,8BAAe,CAAC,gBAAgB;QAChC,8BAAe,CAAC,8BAA8B;QAC9C,8BAAe,CAAC,iCAAiC;QACjD,8BAAe,CAAC,kCAAkC;QAClD,8BAAe,CAAC,6BAA6B;QAC7C,8BAAe,CAAC,8BAA8B;QAC9C,8BAAe,CAAC,6BAA6B;QAC7C,8BAAe,CAAC,4BAA4B;KAC7C;IAED,gBAAgB,EAAE;QAChB,8BAAe,CAAC,uBAAuB;QACvC,8BAAe,CAAC,4BAA4B;QAC5C,8BAAe,CAAC,gCAAgC;QAChD,8BAAe,CAAC,kCAAkC;KACnD;CACO,CAAC;AAEX;;GAEG;AACH,SAAgB,eAAe,CAAC,UAAkB,EAAE,KAAwB;IAC1E,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,UAAkB;IACnD,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAE3C,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,kCAAmB,CAAC,OAAO;YAC9B,OAAO,oCAAoC,CAAC;QAE9C,KAAK,kCAAmB,CAAC,gBAAgB;YACvC,OAAO,oDAAoD,CAAC;QAE9D,KAAK,kCAAmB,CAAC,oBAAoB;YAC3C,OAAO,mDAAmD,CAAC;QAE7D,KAAK,kCAAmB,CAAC,aAAa;YACpC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO,gDAAgD,CAAC;YAC1D,CAAC;YACD,OAAO,yDAAyD,CAAC;QAEnE,KAAK,kCAAmB,CAAC,cAAc;YACrC,OAAO,wEAAwE,CAAC;QAElF,KAAK,kCAAmB,CAAC,UAAU;YACjC,OAAO,sDAAsD,CAAC;QAEhE,KAAK,kCAAmB,CAAC,UAAU;YACjC,OAAO,qDAAqD,CAAC;QAE/D,KAAK,kCAAmB,CAAC,eAAe;YACtC,OAAO,sDAAsD,CAAC;QAEhE;YACE,OAAO,0CAA0C,CAAC;IACtD,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muhammedaksam/sipay-node",
3
- "version": "1.0.5",
3
+ "version": "1.1.0",
4
4
  "description": "Node.js TypeScript SDK for Sipay payment gateway",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -35,22 +35,22 @@
35
35
  },
36
36
  "homepage": "https://github.com/muhammedaksam/sipay-node#readme",
37
37
  "devDependencies": {
38
- "@eslint/js": "^9.34.0",
38
+ "@eslint/js": "^9.36.0",
39
39
  "@types/jest": "^30.0.0",
40
- "@types/node": "^24.3.0",
41
- "@typescript-eslint/eslint-plugin": "^8.41.0",
42
- "@typescript-eslint/parser": "^8.41.0",
43
- "eslint": "^9.34.0",
44
- "jest": "^30.0.5",
40
+ "@types/node": "^24.5.2",
41
+ "@typescript-eslint/eslint-plugin": "^8.44.0",
42
+ "@typescript-eslint/parser": "^8.44.0",
43
+ "eslint": "^9.36.0",
44
+ "jest": "^30.1.3",
45
45
  "prettier": "^3.6.2",
46
46
  "rimraf": "^6.0.1",
47
- "ts-jest": "^29.4.1",
47
+ "ts-jest": "^29.4.4",
48
48
  "ts-node": "^10.9.2",
49
49
  "tsx": "^4.20.5",
50
50
  "typescript": "^5.9.2"
51
51
  },
52
52
  "dependencies": {
53
- "axios": "^1.11.0"
53
+ "axios": "^1.12.2"
54
54
  },
55
55
  "engines": {
56
56
  "node": ">=18"
@@ -64,6 +64,8 @@
64
64
  "test": "jest",
65
65
  "test:watch": "jest --watch",
66
66
  "test:coverage": "jest --coverage",
67
+ "test:integration": "npx tsx test/integration/test-runner.ts",
68
+ "test:final": "npx tsx examples/final-payment-test.ts",
67
69
  "lint": "eslint src test examples --ext .ts",
68
70
  "lint:fix": "eslint src test examples --ext .ts --fix",
69
71
  "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\" \"examples/**/*.ts\"",