@muhammedaksam/sipay-node
Version:
Node.js TypeScript SDK for Sipay payment gateway
164 lines • 7.98 kB
JavaScript
;
/**
* Sipay Status Code Utilities
* Helper functions for working with Sipay API status codes
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.StatusCodeGroups = void 0;
exports.getStatusCodeInfo = getStatusCodeInfo;
exports.isStatusInGroup = isStatusInGroup;
exports.getSuggestedAction = getSuggestedAction;
const status_codes_1 = require("../types/status-codes");
/**
* Get comprehensive information about a status code
*/
function getStatusCodeInfo(statusCode) {
return {
code: statusCode,
description: (0, status_codes_1.getStatusDescription)(statusCode),
category: (0, status_codes_1.getStatusCategory)(statusCode),
isSuccess: (0, status_codes_1.isSuccessStatus)(statusCode),
isError: (0, status_codes_1.isErrorStatus)(statusCode),
isRetryable: (0, status_codes_1.isRetryableStatus)(statusCode),
httpEquivalent: getHttpEquivalent(statusCode),
};
}
/**
* Map Sipay status codes to HTTP status codes where applicable
*/
function getHttpEquivalent(statusCode) {
switch (statusCode) {
case status_codes_1.SipayStatusCode.SUCCESSFUL:
case status_codes_1.SipayStatusCode.REFUND_REQUEST_CREATED:
case status_codes_1.SipayStatusCode.PARTIALLY_SUCCESSFUL:
return 200; // OK
case status_codes_1.SipayStatusCode.BASIC_VALIDATION:
case status_codes_1.SipayStatusCode.ITEMS_VALIDATION_ERROR:
case status_codes_1.SipayStatusCode.PRICE_TOTAL_MISMATCH:
case status_codes_1.SipayStatusCode.QUANTITY_MUST_BE_INTEGER:
case status_codes_1.SipayStatusCode.INVALID_INVOICE_ID:
case status_codes_1.SipayStatusCode.INVALID_CHARACTER:
case status_codes_1.SipayStatusCode.INVALID_CARD_NUMBER:
case status_codes_1.SipayStatusCode.CANCELLATION_URL_SHOULD_NOT_BE_BLANK:
return 400; // Bad Request
case status_codes_1.SipayStatusCode.INVALID_CREDENTIALS:
case status_codes_1.SipayStatusCode.INVALID_TOKEN_OR_CLIENT_NUMBER:
return 401; // Unauthorized
case status_codes_1.SipayStatusCode.PAYMENT_INTEGRATION_NOT_ALLOWED:
case status_codes_1.SipayStatusCode.MERCHANT_NOT_ALLOWED_TOKEN_PAYMENT:
case status_codes_1.SipayStatusCode.MERCHANT_CARD_TRANSACTION_NOT_ALLOWED:
case status_codes_1.SipayStatusCode.FOREIGN_CARDS_NOT_ALLOWED:
return 403; // Forbidden
case status_codes_1.SipayStatusCode.MERCHANT_NOT_FOUND:
case status_codes_1.SipayStatusCode.TRANSACTION_NOT_FOUND:
case status_codes_1.SipayStatusCode.POS_NOT_FOUND:
case status_codes_1.SipayStatusCode.COMMISSION_NOT_FOUND:
case status_codes_1.SipayStatusCode.INSTALLMENT_NOT_FOUND:
case status_codes_1.SipayStatusCode.SUB_MERCHANT_NOT_FOUND:
return 404; // Not Found
case status_codes_1.SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED:
case status_codes_1.SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED_ALT:
return 409; // Conflict
case status_codes_1.SipayStatusCode.UNKNOWN_ERROR:
case status_codes_1.SipayStatusCode.CURRENCY_CONVERSION_FAILED:
case status_codes_1.SipayStatusCode.FILE_PROCESSING_ERROR:
return 500; // Internal Server Error
default:
return undefined;
}
}
/**
* Common status code groups for easy checking
*/
exports.StatusCodeGroups = {
SUCCESS: [
status_codes_1.SipayStatusCode.SUCCESSFUL,
status_codes_1.SipayStatusCode.REFUND_REQUEST_CREATED,
status_codes_1.SipayStatusCode.PARTIALLY_SUCCESSFUL,
],
VALIDATION_ERRORS: [
status_codes_1.SipayStatusCode.BASIC_VALIDATION,
status_codes_1.SipayStatusCode.ITEMS_VALIDATION_ERROR,
status_codes_1.SipayStatusCode.PRICE_TOTAL_MISMATCH,
status_codes_1.SipayStatusCode.QUANTITY_MUST_BE_INTEGER,
status_codes_1.SipayStatusCode.INVALID_INVOICE_ID,
status_codes_1.SipayStatusCode.INVALID_CHARACTER,
status_codes_1.SipayStatusCode.INVALID_CARD_NUMBER,
status_codes_1.SipayStatusCode.CANCELLATION_URL_SHOULD_NOT_BE_BLANK,
],
PAYMENT_ERRORS: [
status_codes_1.SipayStatusCode.ORDER_FAILED,
status_codes_1.SipayStatusCode.PAYMENT_TERM_NOT_SET,
status_codes_1.SipayStatusCode.REFUND_FAILED,
status_codes_1.SipayStatusCode.TRANSACTION_NOT_FOUND,
status_codes_1.SipayStatusCode.ORDER_NOT_YET_PROCESSED,
status_codes_1.SipayStatusCode.TRANSACTION_NOT_APPROVED,
],
MERCHANT_LIMIT_ERRORS: [
status_codes_1.SipayStatusCode.MERCHANT_DAILY_TRANSACTION_LIMIT_EXCEEDED,
status_codes_1.SipayStatusCode.MERCHANT_DAILY_AMOUNT_LIMIT_EXCEEDED,
status_codes_1.SipayStatusCode.MERCHANT_MONTHLY_TRANSACTION_LIMIT_EXCEEDED,
status_codes_1.SipayStatusCode.MERCHANT_MONTHLY_AMOUNT_LIMIT_EXCEEDED,
status_codes_1.SipayStatusCode.MINIMUM_TRANSACTION_LIMIT_VIOLATED,
],
CARD_ERRORS: [
status_codes_1.SipayStatusCode.CREDIT_CARD_BLOCKED,
status_codes_1.SipayStatusCode.MERCHANT_CARD_TRANSACTION_NOT_ALLOWED,
status_codes_1.SipayStatusCode.CARD_PROGRAM_MISMATCH,
status_codes_1.SipayStatusCode.FOREIGN_CARDS_NOT_ALLOWED,
status_codes_1.SipayStatusCode.NO_FOREIGN_CARD_COMMISSION,
],
HASH_KEY_ERRORS: [
status_codes_1.SipayStatusCode.HASH_KEY_VALIDATION_ERROR,
status_codes_1.SipayStatusCode.INVALID_HASH_KEY,
status_codes_1.SipayStatusCode.HASH_KEY_MERCHANT_KEY_MISMATCH,
status_codes_1.SipayStatusCode.HASH_KEY_CUSTOMER_NUMBER_MISMATCH,
status_codes_1.SipayStatusCode.HASH_KEY_CARD_HOLDER_NAME_MISMATCH,
status_codes_1.SipayStatusCode.HASH_KEY_CARD_NUMBER_MISMATCH,
status_codes_1.SipayStatusCode.HASH_KEY_EXPIRY_MONTH_MISMATCH,
status_codes_1.SipayStatusCode.HASH_KEY_EXPIRY_YEAR_MISMATCH,
status_codes_1.SipayStatusCode.HASH_KEY_CARD_TOKEN_MISMATCH,
],
RETRYABLE_ERRORS: [
status_codes_1.SipayStatusCode.ORDER_NOT_YET_PROCESSED,
status_codes_1.SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED,
status_codes_1.SipayStatusCode.INVOICE_ID_ALREADY_PROCESSED_ALT,
status_codes_1.SipayStatusCode.MAXIMUM_TRANSACTION_LIMIT_VIOLATED,
],
};
/**
* Check if status code is in a specific group
*/
function isStatusInGroup(statusCode, group) {
return group.includes(statusCode);
}
/**
* Get suggested actions based on status code
*/
function getSuggestedAction(statusCode) {
const info = getStatusCodeInfo(statusCode);
switch (info.category) {
case status_codes_1.SipayStatusCategory.SUCCESS:
return 'Transaction completed successfully';
case status_codes_1.SipayStatusCategory.VALIDATION_ERROR:
return 'Check request parameters and fix validation errors';
case status_codes_1.SipayStatusCategory.AUTHENTICATION_ERROR:
return 'Verify API credentials and merchant configuration';
case status_codes_1.SipayStatusCategory.PAYMENT_ERROR:
if (info.isRetryable) {
return 'Transaction may be retried after a short delay';
}
return 'Check payment details and try with different parameters';
case status_codes_1.SipayStatusCategory.MERCHANT_ERROR:
return 'Contact your payment provider to resolve merchant configuration issues';
case status_codes_1.SipayStatusCategory.CARD_ERROR:
return 'Try with a different card or contact the card issuer';
case status_codes_1.SipayStatusCategory.HASH_ERROR:
return 'Verify hash key generation parameters and algorithm';
case status_codes_1.SipayStatusCategory.RECURRING_ERROR:
return 'Check recurring payment configuration and parameters';
default:
return 'Contact technical support for assistance';
}
}
//# sourceMappingURL=status-code-helpers.js.map