medusa-hdfc-payment 0.0.7 → 0.0.9

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.
@@ -2,6 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleError = void 0;
4
4
  const utils_1 = require("@medusajs/utils");
5
+ function getHdfcErrorInfo(data) {
6
+ if (data == null || typeof data !== "object") {
7
+ return undefined;
8
+ }
9
+ const info = data.error_info;
10
+ if (info == null || typeof info !== "object" || Array.isArray(info)) {
11
+ return undefined;
12
+ }
13
+ return info;
14
+ }
5
15
  const handleError = (error, logger) => {
6
16
  const log = (msg) => {
7
17
  if (logger?.error)
@@ -53,7 +63,21 @@ const handleError = (error, logger) => {
53
63
  logger.debug(`[HDFC Error Handler] Response: ${JSON.stringify(fullErrorData)}`);
54
64
  }
55
65
  if (code === 401) {
56
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, "Authentication failed with HDFC payment gateway");
66
+ const responseData = fullErrorData ?? axiosError.response?.data;
67
+ const bodySnippet = JSON.stringify(responseData ?? {});
68
+ log(`[HDFC Error Handler] 401 access_denied — full response (no secrets): ${bodySnippet.slice(0, 2000)}`);
69
+ const errInfo = getHdfcErrorInfo(responseData);
70
+ const devMsg = (errInfo?.developer_message ?? "").trim();
71
+ const devLower = devMsg.toLowerCase();
72
+ // HDFC often returns HTTP 401 + access_denied for product/account rules, not only bad API keys.
73
+ if (devLower.includes("disabled for refund") ||
74
+ devLower.includes("merchant disabled")) {
75
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `HDFC: refunds are not enabled for this merchant (${devMsg || "Merchant disabled for refund"}). Ask HDFC / your bank to enable refund API access on the SmartGateway merchant profile.`);
76
+ }
77
+ if (devMsg) {
78
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, `HDFC rejected the request: ${devMsg}`);
79
+ }
80
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, "Authentication failed with HDFC payment gateway (check API key, merchant id, sandbox vs production, and that x-customerid is sent — see HDFC client logs).");
57
81
  }
58
82
  if (code === 403) {
59
83
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Access forbidden. Please check your HDFC API credentials.");
@@ -94,4 +118,4 @@ const handleError = (error, logger) => {
94
118
  : utils_1.MedusaError.Types.UNEXPECTED_STATE, `HDFC payment error: ${message}`);
95
119
  };
96
120
  exports.handleError = handleError;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9oZGZjL2NsaWVudC9oYW5kbGUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQTZDO0FBSXRDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYyxFQUFFLE1BQWUsRUFBUyxFQUFFO0lBQ3BFLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBVyxFQUFRLEVBQUU7UUFDaEMsSUFBSSxNQUFNLEVBQUUsS0FBSztZQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7O1lBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDekIsQ0FBQyxDQUFBO0lBQ0QsMEVBQTBFO0lBQzFFLElBQUksS0FBSyxZQUFZLG1CQUFXLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEtBQUssQ0FBQTtJQUNiLENBQUM7SUFFRCxpREFBaUQ7SUFDakQsd0RBQXdEO0lBQ3hELE1BQU0sWUFBWSxHQUNoQixLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFBO0lBQ3ZFLE1BQU0sY0FBYyxHQUNsQixDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFFLEtBQStCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFL0UsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQixNQUFNLFlBQVksR0FDaEIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxDQUFBO1FBRW5GLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDL0UsTUFBTSxJ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
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9oZGZjL2NsaWVudC9oYW5kbGUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQTZDO0FBVzdDLFNBQVMsZ0JBQWdCLENBQUMsSUFBYTtJQUNyQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0MsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFJLElBQWdDLENBQUMsVUFBVSxDQUFBO0lBQ3pELElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BFLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxPQUFPLElBQXFCLENBQUE7QUFDOUIsQ0FBQztBQUVNLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYyxFQUFFLE1BQWUsRUFBUyxFQUFFO0lBQ3BFLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBVyxFQUFRLEVBQUU7UUFDaEMsSUFBSSxNQUFNLEVBQUUsS0FBSztZQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7O1lBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDekIsQ0FBQyxDQUFBO0lBQ0QsMEVBQTBFO0lBQzFFLElBQUksS0FBSyxZQUFZLG1CQUFXLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEtBQUssQ0FBQTtJQUNiLENBQUM7SUFFRCxpREFBaUQ7SUFDakQsd0RBQXdEO0lBQ3hELE1BQU0sWUFBWSxHQUNoQixLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFBO0lBQ3ZFLE1BQU0sY0FBYyxHQUNsQixDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFFLEtBQStCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFL0UsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQixNQUFNLFlBQVksR0FDaEIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxDQUFBO1FBRW5GLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDL0UsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxzRkFBc0YsWUFBWSxrREFBa0QsQ0FDckosQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2hGLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMseUdBQXlHLFlBQVksRUFBRSxDQUN4SCxDQUFBO1FBQ0gsQ0FBQztRQUVELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsMkJBQTJCLFlBQVksRUFBRSxDQUMxQyxDQUFBO0lBQ0gsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxNQUFNLFVBQVUsR0FBRyxLQUE4QixDQUFBO0lBQ2pELE1BQU0sT0FBTyxHQUNYLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWE7UUFDMUIsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTztRQUNsQyxVQUFVLENBQUMsT0FBTztRQUNsQixnQkFBZ0IsQ0FBQTtJQUNoQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxHQUFHLENBQUE7SUFDL0MsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFBO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFFOUIsQ0FBQTtJQUNiLE1BQU0sZUFBZSxHQUNuQixJQUFJLEtBQUssR0FBRztRQUNaLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztZQUNsQyxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksS0FBSyxvQkFBb0I7WUFDeEQsYUFBYSxFQUFFLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQTtJQUUxQyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksTUFBTSxFQUFFLEtBQUs7WUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLDJGQUEyRixPQUFPLEVBQUUsQ0FBQyxDQUFBO2FBQ2hJLElBQUksTUFBTSxFQUFFLElBQUk7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3hGLENBQUM7U0FBTSxDQUFDO1FBQ04sR0FBRyxDQUFDLDZCQUE2QixJQUFJLElBQUksU0FBUyxJQUFJLEtBQUssTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFDRCxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDakYsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sWUFBWSxHQUFHLGFBQWEsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQTtRQUMvRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUN0RCxHQUFHLENBQ0Qsd0VBQXdFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQ3JHLENBQUE7UUFFRCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUE7UUFFckMsZ0dBQWdHO1FBQ2hHLElBQ0UsUUFBUSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztZQUN4QyxRQUFRLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQ3RDLENBQUM7WUFDRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUM3QixvREFBb0QsTUFBTSxJQUFJLDhCQUE4QiwyRkFBMkYsQ0FDeEwsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsOEJBQThCLE1BQU0sRUFBRSxDQUN2QyxDQUFBO1FBQ0gsQ0FBQztRQUVELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDRKQUE0SixDQUM3SixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQzdCLDJEQUEyRCxDQUM1RCxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDhDQUE4QyxDQUMvQyxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGtEQUFrRDtRQUNsRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7aUJBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsMkJBQTJCLGdCQUFnQixvQkFBb0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUMvRixDQUFBO1FBQ0gsQ0FBQztRQUVELDZDQUE2QztRQUM3QyxNQUFNLFlBQVksR0FBRyxTQUFTO1lBQzVCLENBQUMsQ0FBQyxlQUFlLFNBQVMsS0FBSyxPQUFPLEVBQUU7WUFDeEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHlCQUF5QixZQUFZLG9CQUFvQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQ3pGLENBQUE7SUFDSCxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3hFLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHVCQUF1QixPQUFPLEVBQUUsQ0FDakMsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ25FLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG9CQUFvQixPQUFPLEVBQUUsQ0FDOUIsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ25FLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFCQUFxQixPQUFPLEVBQUUsQ0FDL0IsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLElBQUksS0FBSyxHQUFHO1FBQ1YsQ0FBQyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDN0IsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHO1lBQ2QsQ0FBQyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDaEMsQ0FBQyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUN0Qyx1QkFBdUIsT0FBTyxFQUFFLENBQ2pDLENBQUE7QUFDSCxDQUFDLENBQUE7QUExS1ksUUFBQSxXQUFXLGVBMEt2QiJ9
@@ -17,6 +17,7 @@ class HDFCClient {
17
17
  this.paymentPageClientId = options.payment_page_client_id;
18
18
  this.environment = options.environment || "sandbox";
19
19
  this.logger = options.logger;
20
+ this.defaultApiCustomerId = options.default_api_customer_id;
20
21
  // Correct base URLs from official integration kit
21
22
  const baseURL = this.environment === "production"
22
23
  ? "https://smartgateway.hdfc.bank.in"
@@ -137,15 +138,30 @@ class HDFCClient {
137
138
  }
138
139
  /**
139
140
  * Refund a captured payment
141
+ *
142
+ * HDFC Smart Gateway: POST /orders/{order_id}/refunds with `x-resellerid` and `x-customerid` headers.
143
+ * @see https://smartgateway.hdfcbank.com/docs/smartgateway-api-ref-basicauth/docs/apis/refund-order-api
140
144
  */
141
145
  async refund(data) {
142
146
  try {
147
+ const uniqueRequestId = data.unique_request_id || `refund_${Date.now()}`;
143
148
  const requestPayload = {
144
- order_id: data.order_id,
149
+ unique_request_id: uniqueRequestId,
145
150
  amount: data.amount,
146
- unique_request_id: data.unique_request_id || `refund_${Date.now()}`,
147
151
  };
148
- const response = await this.axios.post(`/refunds`, requestPayload);
152
+ const customerId = data.customer_id ?? this.defaultApiCustomerId;
153
+ const hdfcHeaders = {
154
+ "x-resellerid": "hdfc_reseller",
155
+ };
156
+ if (customerId) {
157
+ hdfcHeaders["x-customerid"] = customerId;
158
+ }
159
+ else {
160
+ this.logger?.warn?.("[HDFC Client] Refund — missing x-customerid (set customer_id on payment data or default_api_customer_id in provider options). HDFC may return 401.");
161
+ }
162
+ const path = `/orders/${encodeURIComponent(data.order_id)}/refunds`;
163
+ this.logger?.debug?.(`[HDFC Client] Refund - POST ${path}`);
164
+ const response = await this.axios.post(path, requestPayload, { headers: hdfcHeaders });
149
165
  return response.data;
150
166
  }
151
167
  catch (error) {
@@ -155,10 +171,19 @@ class HDFCClient {
155
171
  }
156
172
  /**
157
173
  * Get payment status
174
+ *
175
+ * HDFC expects GET /orders/{order_id} with `x-resellerid` and `x-customerid` on server-to-server calls.
158
176
  */
159
- async getStatus(orderId) {
177
+ async getStatus(orderId, customerId) {
160
178
  try {
161
- const response = await this.axios.get(`/orders/${orderId}`);
179
+ const cid = customerId ?? this.defaultApiCustomerId;
180
+ const hdfcHeaders = {
181
+ "x-resellerid": "hdfc_reseller",
182
+ };
183
+ if (cid) {
184
+ hdfcHeaders["x-customerid"] = cid;
185
+ }
186
+ const response = await this.axios.get(`/orders/${encodeURIComponent(orderId)}`, { headers: hdfcHeaders });
162
187
  return response.data;
163
188
  }
164
189
  catch (error) {
@@ -224,4 +249,4 @@ class HDFCClient {
224
249
  }
225
250
  }
226
251
  exports.default = HDFCClient;
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2hkZmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQXdEO0FBQ3hELDJDQUE2QztBQUM3QyxpREFBNEM7QUFlNUMsTUFBcUIsVUFBVTtJQVM3QixZQUFZLE9BQTBCO1FBSDlCLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFJeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEYsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsa0ZBQWtGLENBQ25GLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFBO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUE7UUFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBRTVCLGtEQUFrRDtRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxLQUFLLFlBQVk7WUFDL0MsQ0FBQyxDQUFDLG1DQUFtQztZQUNyQyxDQUFDLENBQUMsc0NBQXNDLENBQUE7UUFFMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3hCLE9BQU87WUFDUCxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsUUFBUSxFQUFFLGtCQUFrQjthQUM3QjtZ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
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2hkZmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQXdEO0FBQ3hELDJDQUE2QztBQUM3QyxpREFBNEM7QUFlNUMsTUFBcUIsVUFBVTtJQVU3QixZQUFZLE9BQTBCO1FBSjlCLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFLeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEYsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsa0ZBQWtGLENBQ25GLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFBO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUE7UUFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUE7UUFFM0Qsa0RBQWtEO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEtBQUssWUFBWTtZQUMvQyxDQUFDLENBQUMsbUNBQW1DO1lBQ3JDLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQTtRQUUxQyxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEIsT0FBTztZQUNQLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxRQUFRLEVBQUUsa0JBQWtCO2FBQzdCO1lBQ0QsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUE7UUFFRixpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzdDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLGlDQUFpQyxDQUNsQyxDQUFBO1lBQ0gsQ0FBQztZQUVELG9GQUFvRjtZQUNwRixxRkFBcUY7WUFDckYsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzNFLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsU0FBUyxpQkFBaUIsRUFBRSxDQUFBO1lBQzlELE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQTtZQUNoRCxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQTtZQUN4QyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLDBCQUEwQixDQUFBO1lBRXpELE9BQU8sTUFBTSxDQUFBO1FBQ2YsQ0FBQyxDQUFDLENBQUE7UUFFRiw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDbEMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFDdEIsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2QsSUFBQSwwQkFBVyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDL0IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzlCLENBQUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQXlCO1FBQ3RDLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxVQUFVLENBQUE7WUFFM0QsNkRBQTZEO1lBQzdELE1BQU0sY0FBYyxHQUE0QjtnQkFDOUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtnQkFDaEQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG1CQUFtQjtnQkFDMUYsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzVCLENBQUE7WUFFRCxtREFBbUQ7WUFDbkQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLGNBQWMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtZQUMvQyxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hCLGNBQWMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQTtZQUNyRCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hCLGNBQWMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQTtZQUNyRCxDQUFDO1lBQ0QsNERBQTREO1lBRTVELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsaUNBQWlDLFVBQVUsRUFBRSxDQUFDLENBQUE7WUFDbkUsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxrREFBa0QsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBRWhILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3BDLFVBQVUsRUFDVixjQUFjLENBQ2YsQ0FBQTtZQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsNkNBQTZDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBRXBGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQTtRQUN0QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sVUFBVSxHQUFHLEtBQThCLENBQUE7WUFDakQsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQ2xCLGtDQUFrQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUNuTixDQUFBO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsa0NBQWtDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDbEgsQ0FBQztZQUNELElBQUEsMEJBQVcsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9CLE1BQU0sS0FBSyxDQUFBLENBQUMsZ0NBQWdDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQTBCO1FBQ3hDLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3BDLHFCQUFxQixFQUNyQjtnQkFDRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDbkMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNuQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ3JDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDeEIsQ0FDRixDQUFBO1lBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFBO1FBQ3RCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBQSwwQkFBVyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDL0IsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUF3QjtRQUNwQyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNwQyxhQUFhLElBQUksQ0FBQyxjQUFjLFVBQVUsRUFDMUM7Z0JBQ0UsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07YUFDcEIsQ0FDRixDQUFBO1lBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFBO1FBQ3RCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBQSwwQkFBVyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDL0IsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUF1QjtRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLElBQUksVUFBVSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQTtZQUN4RSxNQUFNLGNBQWMsR0FBb0M7Z0JBQ3RELGlCQUFpQixFQUFFLGVBQWU7Z0JBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTthQUNwQixDQUFBO1lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUE7WUFDaEUsTUFBTSxXQUFXLEdBQTJCO2dCQUMxQyxjQUFjLEVBQUUsZUFBZTthQUNoQyxDQUFBO1lBQ0QsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsVUFBVSxDQUFBO1lBQzFDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUNqQixvSkFBb0osQ0FDckosQ0FBQTtZQUNILENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxXQUFXLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFBO1lBRW5FLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsK0JBQStCLElBQUksRUFBRSxDQUFDLENBQUE7WUFFM0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEMsSUFBSSxFQUNKLGNBQWMsRUFDZCxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FDekIsQ0FBQTtZQUVELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQTtRQUN0QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUEsMEJBQVcsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9CLE1BQU0sS0FBSyxDQUFBO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFlLEVBQUUsVUFBbUI7UUFDbEQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQTtZQUNuRCxNQUFNLFdBQVcsR0FBMkI7Z0JBQzFDLGNBQWMsRUFBRSxlQUFlO2FBQ2hDLENBQUE7WUFDRCxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUE7WUFDbkMsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQ25DLFdBQVcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFDeEMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQ3pCLENBQUE7WUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUE7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFBLDBCQUFXLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMvQixNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBc0IsRUFBRSxlQUF3QjtRQUMzRCxNQUFNLFFBQVEsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ2pDLElBQUksZUFBZSxJQUFJLGVBQWUsS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUMxRCxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsS0FBSyxNQUFNLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFO29CQUM1QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVU7aUJBQzdCLENBQUMsQ0FBQTtnQkFDRixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLHNEQUFzRCxFQUFFLFNBQVMsQ0FBQyxDQUFBO2dCQUN0RixPQUFNO1lBQ1IsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUM1RCxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLGtDQUFrQyxFQUFFLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxDQUFBO1lBQ3JGLENBQUM7UUFDSCxDQUFDO1FBRUQsOERBQThEO1FBQzlELEtBQUssTUFBTSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRTtvQkFDOUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVO2lCQUM3QixDQUFDLENBQUE7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxTQUFTLENBQUMsQ0FBQTtnQkFDeEYsT0FBTTtZQUNSLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE1BQU0sR0FBRyxHQUFHLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDNUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxtQkFBbUIsR0FBRyxHQUFHLENBQUMsQ0FBQTtZQUN2RixDQUFDO1FBQ0gsQ0FBQztRQUVELDZGQUE2RjtRQUM3RixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdGLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDekUsQ0FBQztDQUNGO0FBN1NELDZCQTZTQyJ9
@@ -6,6 +6,63 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const utils_1 = require("@medusajs/framework/utils");
7
7
  const crypto_1 = require("crypto");
8
8
  const client_1 = __importDefault(require("./client"));
9
+ function normalizeRefundAmount(amount) {
10
+ if (amount == null) {
11
+ return 0;
12
+ }
13
+ if (typeof amount === "number" && !Number.isNaN(amount)) {
14
+ return Math.round(amount);
15
+ }
16
+ if (typeof amount === "string" && amount.trim() !== "") {
17
+ return Math.round(Number(amount));
18
+ }
19
+ if (typeof amount === "object" && amount !== null) {
20
+ const rec = amount;
21
+ if (typeof rec.numeric === "number" && !Number.isNaN(rec.numeric)) {
22
+ return Math.round(rec.numeric);
23
+ }
24
+ if (typeof rec.value === "number" && !Number.isNaN(rec.value)) {
25
+ return Math.round(rec.value);
26
+ }
27
+ if (typeof rec.value === "string" && rec.value.trim() !== "") {
28
+ return Math.round(Number(rec.value));
29
+ }
30
+ }
31
+ const n = Number(amount);
32
+ return Number.isFinite(n) ? Math.round(n) : 0;
33
+ }
34
+ /**
35
+ * HDFC `unique_request_id`: max 21 chars, avoid special characters (per gateway docs).
36
+ * Map Medusa's refund idempotency key into a stable idempotent id for HDFC.
37
+ */
38
+ function hdfcRefundUniqueRequestId(medusaIdempotencyKey) {
39
+ const max = 21;
40
+ if (medusaIdempotencyKey &&
41
+ medusaIdempotencyKey.length > 0 &&
42
+ medusaIdempotencyKey.length <= max &&
43
+ /^[a-zA-Z0-9_]+$/.test(medusaIdempotencyKey)) {
44
+ return medusaIdempotencyKey;
45
+ }
46
+ if (medusaIdempotencyKey) {
47
+ const h = (0, crypto_1.createHash)("sha256").update(medusaIdempotencyKey, "utf8").digest("hex");
48
+ const suffix = h.slice(0, max - 1);
49
+ return `r${suffix}`;
50
+ }
51
+ return `r${Date.now().toString(36)}`.slice(0, max);
52
+ }
53
+ function isRefundPaymentInputLike(value, secondArg) {
54
+ if (secondArg !== undefined) {
55
+ return false;
56
+ }
57
+ if (value == null || typeof value !== "object") {
58
+ return false;
59
+ }
60
+ const data = value.data;
61
+ return (data != null &&
62
+ typeof data === "object" &&
63
+ !Array.isArray(data) &&
64
+ "amount" in value);
65
+ }
9
66
  class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
10
67
  static validateOptions(options) {
11
68
  if (!(0, utils_1.isDefined)(options.merchant_id)) {
@@ -28,9 +85,21 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
28
85
  payment_page_client_id: options.payment_page_client_id,
29
86
  response_key: options.response_key,
30
87
  environment: options.environment || "sandbox",
88
+ default_api_customer_id: options.default_api_customer_id,
31
89
  logger: logger,
32
90
  });
33
91
  }
92
+ /**
93
+ * HDFC server APIs require `x-customerid`; prefer value on payment/session data.
94
+ */
95
+ resolveHdfcApiCustomerId(data) {
96
+ const fromData = (typeof data.customer_id === "string" && data.customer_id) ||
97
+ (typeof data.customerId === "string" && data.customerId);
98
+ if (fromData) {
99
+ return fromData;
100
+ }
101
+ return this.options_.default_api_customer_id;
102
+ }
34
103
  buildError(message, error) {
35
104
  const errorMessage = error instanceof Error ? error.message : String(error);
36
105
  return new Error(`${message}: ${errorMessage}`.trim());
@@ -132,7 +201,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
132
201
  if (isDuplicate) {
133
202
  this.logger_.warn(`[HDFC Payment] Initiate - HDFC returned duplicate order_id error for ${order_id}. Attempting to reuse existing HDFC session.`);
134
203
  try {
135
- const existingStatus = await this.client.getStatus(order_id);
204
+ const existingStatus = await this.client.getStatus(order_id, customerId ?? this.options_.default_api_customer_id);
136
205
  // Build a synthetic initiate response from the existing order
137
206
  const existingPaymentUrl = existingStatus.payment_links
138
207
  ? existingStatus.payment_links.web
@@ -185,6 +254,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
185
254
  medusa_session_id: medusaSessionIdInResponse || sessionId, // The Medusa session ID we sent to HDFC
186
255
  // Store both for clarity and to handle redirect scenarios
187
256
  has_hdfc_order_id: !!hdfcOrderId, // Flag to indicate if we have the real HDFC order ID
257
+ ...(customerId && { customer_id: customerId }),
188
258
  };
189
259
  this.logger_.info(`[HDFC Payment] Initiate - HDFC API Response Analysis:`);
190
260
  this.logger_.info(`[HDFC Payment] Initiate - response.id (HDFC order ID): ${hdfcOrderId || 'NOT PROVIDED'}`);
@@ -248,6 +318,10 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
248
318
  const storedMedusaSessionId = sessionData.medusa_session_id || safePaymentSessionData.medusa_session_id;
249
319
  const storedSessionId = sessionData.session_id || safePaymentSessionData.session_id;
250
320
  const hasHdfcOrderId = sessionData.has_hdfc_order_id || safePaymentSessionData.has_hdfc_order_id;
321
+ const hdfcApiCustomerId = this.resolveHdfcApiCustomerId({
322
+ ...sessionData,
323
+ ...safePaymentSessionData,
324
+ });
251
325
  this.logger_.info(`[HDFC Payment] Authorize - Stored Payment Session Data Analysis:`);
252
326
  this.logger_.info(`[HDFC Payment] Authorize - order_id: ${storedOrderId || 'NOT SET'}`);
253
327
  this.logger_.info(`[HDFC Payment] Authorize - hdfc_order_id: ${storedHdfcOrderId || 'NOT SET'}`);
@@ -344,6 +418,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
344
418
  currency: redirectCurrency || sessionData.currency || safePaymentSessionData.currency,
345
419
  status: redirectStatus,
346
420
  source: "redirect", // Indicate this came from redirect response
421
+ ...(hdfcApiCustomerId && { customer_id: hdfcApiCustomerId }),
347
422
  },
348
423
  };
349
424
  }
@@ -372,7 +447,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
372
447
  let apiError = null;
373
448
  const tryGetStatus = async (id) => {
374
449
  try {
375
- const apiResponse = await this.client.getStatus(id);
450
+ const apiResponse = await this.client.getStatus(id, hdfcApiCustomerId);
376
451
  return {
377
452
  status: apiResponse.status,
378
453
  order_id: apiResponse.order_id,
@@ -420,6 +495,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
420
495
  status: "CHARGED",
421
496
  source: "fallback",
422
497
  api_error: "Order Not Found - pass redirect params from HDFC return URL for reliable verification",
498
+ ...(hdfcApiCustomerId && { customer_id: hdfcApiCustomerId }),
423
499
  },
424
500
  };
425
501
  }
@@ -461,6 +537,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
461
537
  currency: response.currency || sessionData.currency || safePaymentSessionData.currency || "INR",
462
538
  status: response.status,
463
539
  source: "api", // Indicate this came from API call
540
+ ...(hdfcApiCustomerId && { customer_id: hdfcApiCustomerId }),
464
541
  },
465
542
  };
466
543
  }
@@ -482,9 +559,10 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
482
559
  if (!orderId) {
483
560
  throw this.buildError("Missing order_id in payment session data", new Error("Missing order_id"));
484
561
  }
562
+ const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(data);
485
563
  // HDFC captures automatically when payment is successful
486
564
  // Just check the order status
487
- const response = await this.client.getStatus(orderId);
565
+ const response = await this.client.getStatus(orderId, hdfcApiCustomerId);
488
566
  // If status is CHARGED, payment is captured
489
567
  const isCaptured = response.status === "CHARGED";
490
568
  return {
@@ -504,17 +582,44 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
504
582
  }
505
583
  /**
506
584
  * Refund a payment
585
+ *
586
+ * Compatible with:
587
+ * - Medusa v2.4 style: `refundPayment(payment.data, amount)`
588
+ * - Medusa ≥2.13 style: `refundPayment({ data, amount, context })` where `context.idempotency_key` is the refund id
507
589
  */
508
- async refundPayment(paymentSessionData, refundAmount) {
590
+ async refundPayment(paymentSessionDataOrInput, refundAmountArg) {
509
591
  try {
510
- const data = this.getSessionOrPaymentData(paymentSessionData);
592
+ let data;
593
+ let refundAmount;
594
+ let idempotencyKey;
595
+ let contextCustomerId;
596
+ if (isRefundPaymentInputLike(paymentSessionDataOrInput, refundAmountArg)) {
597
+ const input = paymentSessionDataOrInput;
598
+ data = input.data;
599
+ refundAmount = normalizeRefundAmount(input.amount);
600
+ idempotencyKey = input.context?.idempotency_key;
601
+ const cust = input.context?.customer;
602
+ contextCustomerId = typeof cust?.id === "string" ? cust.id : undefined;
603
+ }
604
+ else {
605
+ data = this.getSessionOrPaymentData(paymentSessionDataOrInput);
606
+ refundAmount = normalizeRefundAmount(refundAmountArg);
607
+ }
511
608
  const orderId = data.order_id || data.transaction_id;
512
609
  if (!orderId) {
513
610
  throw this.buildError("Missing order_id in payment session data", new Error("Missing order_id"));
514
611
  }
612
+ const customerResolutionSource = {
613
+ ...data,
614
+ ...(contextCustomerId ? { customer_id: contextCustomerId } : {}),
615
+ };
616
+ const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(customerResolutionSource);
617
+ const uniqueRequestId = hdfcRefundUniqueRequestId(idempotencyKey);
515
618
  const response = await this.client.refund({
516
619
  order_id: orderId,
517
- amount: Math.round(refundAmount),
620
+ amount: refundAmount,
621
+ unique_request_id: uniqueRequestId,
622
+ ...(hdfcApiCustomerId && { customer_id: hdfcApiCustomerId }),
518
623
  });
519
624
  return {
520
625
  status: "captured",
@@ -601,7 +706,8 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
601
706
  if (!orderId) {
602
707
  return "error";
603
708
  }
604
- const response = await this.client.getStatus(orderId);
709
+ const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(data);
710
+ const response = await this.client.getStatus(orderId, hdfcApiCustomerId);
605
711
  // Map HDFC statuses to Medusa statuses
606
712
  // HDFC statuses: CHARGED, PENDING, PENDING_VBV, AUTHORIZATION_FAILED, AUTHENTICATION_FAILED
607
713
  const status = response.status.toUpperCase();
@@ -631,7 +737,8 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
631
737
  if (!orderId) {
632
738
  throw this.buildError("Missing order_id in payment session data", new Error("Missing order_id"));
633
739
  }
634
- const response = await this.client.getStatus(orderId);
740
+ const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(data);
741
+ const response = await this.client.getStatus(orderId, hdfcApiCustomerId);
635
742
  // Map HDFC status to Medusa status. CHARGED = already captured at gateway.
636
743
  // HDFC statuses: CHARGED, PENDING, PENDING_VBV, AUTHORIZATION_FAILED, AUTHENTICATION_FAILED
637
744
  let medusaStatus = "requires_more";
@@ -692,20 +799,24 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
692
799
  nestedData.session_id ||
693
800
  contextData.medusa_session_id ||
694
801
  contextData.session_id;
802
+ const updatePaymentCustomerId = this.resolveHdfcApiCustomerId({
803
+ ...nestedData,
804
+ ...contextData,
805
+ });
695
806
  if (existingOrderId) {
696
807
  this.logger_.info(`[HDFC Payment] UpdatePayment - Existing HDFC order found: ${existingOrderId}. Checking status before deciding to re-initiate.`);
697
808
  // Check whether the order is still in a non-terminal state.
698
809
  // Try the HDFC internal ID first, then fall back to the merchant order_id.
699
810
  let currentStatus;
700
811
  try {
701
- const statusResponse = await this.client.getStatus(existingOrderId);
812
+ const statusResponse = await this.client.getStatus(existingOrderId, updatePaymentCustomerId);
702
813
  currentStatus = statusResponse.status?.toUpperCase();
703
814
  }
704
815
  catch {
705
816
  // Retry with merchant order_id if HDFC internal ID lookup fails
706
817
  if (merchantOrderId && merchantOrderId !== existingOrderId) {
707
818
  try {
708
- const fallbackResponse = await this.client.getStatus(merchantOrderId);
819
+ const fallbackResponse = await this.client.getStatus(merchantOrderId, updatePaymentCustomerId);
709
820
  currentStatus = fallbackResponse.status?.toUpperCase();
710
821
  }
711
822
  catch {
@@ -819,7 +930,8 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
819
930
  if (!orderId) {
820
931
  return data;
821
932
  }
822
- const response = await this.client.getStatus(orderId);
933
+ const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(data);
934
+ const response = await this.client.getStatus(orderId, hdfcApiCustomerId);
823
935
  return {
824
936
  ...data,
825
937
  order_id: response.order_id,
@@ -829,6 +941,9 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
829
941
  payment_method: response.payment_method,
830
942
  card_last4: response.card_last4,
831
943
  card_brand: response.card_brand,
944
+ ...(typeof response.customer_id === "string" && response.customer_id
945
+ ? { customer_id: response.customer_id }
946
+ : {}),
832
947
  };
833
948
  }
834
949
  catch (error) {
@@ -1011,4 +1126,4 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
1011
1126
  }
1012
1127
  HDFCPaymentProviderService.identifier = "hdfc";
1013
1128
  exports.default = HDFCPaymentProviderService;
1014
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvaGRmYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0EscURBR2tDO0FBRWxDLG1DQUFtQztBQUVuQyxzREFBaUM7QUFPakMsTUFBTSwwQkFBMkIsU0FBUSwrQkFBdUI7SUFPOUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUE0QjtRQUNqRCxJQUFJLENBQUMsSUFBQSxpQkFBUyxFQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQTtRQUM1RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUEsaUJBQVMsRUFBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUE7UUFDeEUsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFBLGlCQUFTLEVBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUE7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFFRCxZQUNFLEVBQUUsTUFBTSxFQUF3QixFQUNoQyxPQUE0QjtRQUU1QixLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxnQkFBVSxDQUFDO1lBQzNCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLHNCQUFzQjtZQUN0RCxZQUFZLEVBQUUs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
1129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvaGRmYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0EscURBR2tDO0FBRWxDLG1DQUErQztBQUUvQyxzREFBaUM7QUFpQmpDLFNBQVMscUJBQXFCLENBQUMsTUFBZTtJQUM1QyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQixPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxNQUFNLEdBQUcsR0FBRyxNQUFpQyxDQUFBO1FBQzdDLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxD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
package/README.md CHANGED
@@ -1,60 +1,34 @@
1
- # Medusa HDFC Payment Provider Plugin
1
+ # medusa-hdfc-payment
2
+ > Medusa v2 payment provider plugin integrating HDFC SmartGateway for checkout initiation, authorization, status checks, cancellation, refunds, and webhook action mapping.
2
3
 
3
- <p align="center">
4
- <strong>HDFC Payment Gateway Integration for Medusa v2 Stores</strong>
5
- </p>
4
+ ## Plugin Overview
6
5
 
7
- <p align="center">
8
- <a href="https://www.npmjs.com/package/medusa-hdfc-payment">
9
- <img src="https://img.shields.io/npm/v/medusa-hdfc-payment?color=blue&style=flat-square" alt="NPM Version">
10
- </a>
11
- <a href="https://www.npmjs.com/package/medusa-hdfc-payment">
12
- <img src="https://img.shields.io/npm/dw/medusa-hdfc-payment?style=flat-square" alt="NPM Downloads">
13
- </a>
14
- <a href="https://github.com/your-org/medusa-hdfc-payment/blob/main/LICENSE">
15
- <img src="https://img.shields.io/github/license/your-org/medusa-hdfc-payment?style=flat-square" alt="License">
16
- </a>
17
- </p>
6
+ `medusa-hdfc-payment` is a Medusa Payment Module provider (`identifier: "hdfc"`) implemented as `HDFCPaymentProviderService` and `HDFCClient`.
18
7
 
19
- <hr />
8
+ ### What it does
20
9
 
21
- ## 🚀 Overview
10
+ - Registers a payment provider under `Modules.PAYMENT`.
11
+ - Creates HDFC payment sessions through `/session`.
12
+ - Stores HDFC/Medusa correlation IDs in payment session data.
13
+ - Authorizes payments from redirect data first, with API status fallback (`GET /orders/{id}`).
14
+ - Treats HDFC `CHARGED` as `captured` in Medusa (auto-capture model).
15
+ - Supports refunds via `POST /orders/{order_id}/refunds`.
16
+ - Supports cancellation attempts across multiple HDFC endpoint/id combinations.
17
+ - Maps webhook payloads to Medusa payment actions (`authorized`, `failed`, `captured`, `not_supported`).
22
18
 
23
- The **Medusa HDFC Payment Provider Plugin** integrates [HDFC Bank's payment gateway](https://www.hdfcbank.com/) directly into your [Medusa](https://medusajs.com/) store.
19
+ ### Problem it solves
24
20
 
25
- Process payments securely through HDFC's payment gateway with support for authorization, capture, refunds, and payment status tracking—all seamlessly integrated with Medusa's checkout flow.
21
+ Provides an HDFC-specific implementation of Medusa’s payment provider contract so stores can process HDFC gateway payments through normal Medusa checkout/payment flows.
26
22
 
27
- **Compatible with Medusa v2.0+**
23
+ ### Medusa version
28
24
 
29
- ## Key Features
25
+ Built for **Medusa v2** (package/dev dependencies target `@medusajs/framework`/`@medusajs/medusa` `2.4.0`).
30
26
 
31
- | Feature | Description |
32
- | :--- | :--- |
33
- | **💳 Payment Authorization** | Authorize payments securely through HDFC's payment gateway |
34
- | **✅ Payment Capture** | Capture authorized payments to complete transactions |
35
- | **↩️ Refund Support** | Process full or partial refunds for captured payments |
36
- | **🚫 Payment Cancellation** | Cancel pending payments before completion |
37
- | **📊 Status Tracking** | Real-time payment status tracking and updates |
38
- | **🔐 Secure Integration** | Secure API authentication with merchant credentials |
39
- | **🌍 Sandbox & Production** | Support for both sandbox and production environments |
40
- | **📱 Webhook Support** | Handle payment webhooks for real-time status updates |
41
- | **👤 Account holder stubs** | Implements `createAccountHolder` / `deleteAccountHolder` so Medusa does not warn; saved payment methods are not supported |
42
-
43
- ## 📋 Prerequisites
44
-
45
- Before you begin, ensure you have:
46
-
47
- 1. A **[Medusa v2](https://docs.medusajs.com/)** server set up
48
- 2. An **HDFC Bank merchant account** with payment gateway access
49
- 3. **HDFC API credentials**:
50
- - Merchant ID
51
- - API Key
52
- - Payment Page Client ID
53
- - Response Key (optional; for redirect and webhook signature verification)
27
+ ---
54
28
 
55
- ## 🛠️ Installation
29
+ ## Installation & Setup
56
30
 
57
- Install the plugin using your preferred package manager:
31
+ ### Install
58
32
 
59
33
  ```bash
60
34
  npm install medusa-hdfc-payment
@@ -62,34 +36,12 @@ npm install medusa-hdfc-payment
62
36
  yarn add medusa-hdfc-payment
63
37
  ```
64
38
 
65
- ## ⚙️ Configuration
66
-
67
- ### 1. Environment Variables
68
-
69
- Add your HDFC credentials to your `.env` file.
70
-
71
- > [!WARNING]
72
- > **Security Note**: Never commit your actual API credentials to version control (git).
73
-
74
- ```bash
75
- HDFC_MERCHANT_ID="your_merchant_id"
76
- HDFC_API_KEY="your_api_key"
77
- HDFC_PAYMENT_PAGE_CLIENT_ID="your_payment_page_client_id"
78
- HDFC_RESPONSE_KEY="your_response_key" # optional; for redirect/webhook signature verification
79
- HDFC_ENVIRONMENT="sandbox" # or "production"
80
- HDFC_RETURN_URL="https://yourstore.com/payment/return"
81
- HDFC_CANCEL_URL="https://yourstore.com/payment/cancel"
82
- ```
83
-
84
- > **Note:** `HDFC_RESPONSE_KEY` is optional. When set, the plugin verifies redirect and webhook payloads using HMAC-SHA256. Omit it if your HDFC setup does not use response signing.
39
+ ### Register provider in `medusa-config.ts`
85
40
 
86
- ### 2. Medusa Config
87
-
88
- Register the plugin in your `medusa-config.js` (or `medusa-config.ts`) file. Add it to the `modules` section for the payment provider.
41
+ ```ts
42
+ import { defineConfig } from "@medusajs/framework"
89
43
 
90
- ```javascript
91
- module.exports = defineConfig({
92
- // ... other config
44
+ export default defineConfig({
93
45
  modules: [
94
46
  {
95
47
  resolve: "@medusajs/medusa/payment",
@@ -99,250 +51,263 @@ module.exports = defineConfig({
99
51
  resolve: "medusa-hdfc-payment",
100
52
  id: "hdfc",
101
53
  options: {
102
- merchant_id: process.env.HDFC_MERCHANT_ID,
103
- api_key: process.env.HDFC_API_KEY,
104
- payment_page_client_id: process.env.HDFC_PAYMENT_PAGE_CLIENT_ID,
105
- response_key: process.env.HDFC_RESPONSE_KEY,
106
- environment: process.env.HDFC_ENVIRONMENT || "sandbox",
107
- return_url: process.env.HDFC_RETURN_URL,
108
- cancel_url: process.env.HDFC_CANCEL_URL,
54
+ merchant_id: "your_merchant_id",
55
+ api_key: "your_api_key",
56
+ payment_page_client_id: "your_payment_page_client_id",
57
+ response_key: "optional_response_key",
58
+ environment: "sandbox",
59
+ return_url: "https://your-store.com/payment/return",
60
+ cancel_url: "https://your-store.com/payment/cancel",
61
+ default_api_customer_id: "optional_customer_id_for_hdfc_server_apis",
109
62
  },
110
63
  },
111
64
  ],
112
65
  },
113
66
  },
114
67
  ],
115
- });
68
+ })
116
69
  ```
117
70
 
118
- ### 3. TypeScript Configuration
71
+ ### Migrations
119
72
 
120
- If you're using TypeScript, ensure your `medusa-config.ts` is properly typed:
73
+ No custom models/migrations are present in this plugin source.
121
74
 
122
- ```typescript
123
- import { defineConfig } from "@medusajs/framework"
75
+ ---
124
76
 
125
- export default defineConfig({
126
- // ... other config
127
- modules: [
128
- {
129
- resolve: "@medusajs/medusa/payment",
130
- options: {
131
- providers: [
132
- {
133
- resolve: "medusa-hdfc-payment",
134
- id: "hdfc",
135
- options: {
136
- merchant_id: process.env.HDFC_MERCHANT_ID!,
137
- api_key: process.env.HDFC_API_KEY!,
138
- payment_page_client_id: process.env.HDFC_PAYMENT_PAGE_CLIENT_ID!,
139
- response_key: process.env.HDFC_RESPONSE_KEY,
140
- environment: (process.env.HDFC_ENVIRONMENT as "sandbox" | "production") || "sandbox",
141
- return_url: process.env.HDFC_RETURN_URL,
142
- cancel_url: process.env.HDFC_CANCEL_URL,
143
- },
144
- },
145
- ],
146
- },
147
- },
148
- ],
149
- })
77
+ ## Configuration (`config.ts` / plugin options)
78
+
79
+ Provider options are defined in `src/providers/hdfc/types/index.ts` as `HDFCProviderOptions`.
80
+
81
+ | Option | Type | Required | Default | Description |
82
+ |---|---|---|---|---|
83
+ | `merchant_id` | `string` | Yes | - | HDFC merchant identifier (`x-merchantid` header). |
84
+ | `api_key` | `string` | Yes | - | HDFC API key used for Basic Auth (`api_key:` base64). |
85
+ | `payment_page_client_id` | `string` | Yes | - | Client ID sent when creating payment sessions. |
86
+ | `response_key` | `string` | Optional | `undefined` | Used for HMAC signature verification on redirect/webhook-like payload data. |
87
+ | `environment` | `"sandbox" \| "production"` | Optional | `"sandbox"` | Controls HDFC base URL (`hdfcuat` vs production). |
88
+ | `return_url` | `string` | Optional | `undefined` | Default redirect return URL. |
89
+ | `cancel_url` | `string` | Optional | `undefined` | Default cancel URL. |
90
+ | `default_api_customer_id` | `string` | Optional | `undefined` | Fallback customer id used for HDFC server APIs requiring `x-customerid`. |
91
+
92
+ ### Example config block
93
+
94
+ ```ts
95
+ {
96
+ resolve: "medusa-hdfc-payment",
97
+ id: "hdfc",
98
+ options: {
99
+ merchant_id: "mid_xxx",
100
+ api_key: "key_xxx",
101
+ payment_page_client_id: "ppc_xxx",
102
+ response_key: "optional_hmac_key",
103
+ environment: "sandbox",
104
+ return_url: "https://store.example.com/payment/return",
105
+ cancel_url: "https://store.example.com/payment/cancel",
106
+ default_api_customer_id: "cust_api_fallback",
107
+ },
108
+ }
150
109
  ```
151
110
 
152
- ## 💻 Usage Guide
111
+ ---
112
+
113
+ ## Environment Variables
114
+
115
+ No `process.env.*` references are used in this plugin source code under `src`.
116
+
117
+ You typically pass env values into provider `options` from your host app `medusa-config.ts`.
118
+
119
+ ---
120
+
121
+ ## REST APIs / Routes
122
+
123
+ This plugin does **not** define Medusa file-based `/store/...` or `/admin/...` routes inside its own `src`.
153
124
 
154
- ### Enabling the Provider
125
+ Instead, it performs outbound HDFC API calls from the payment provider lifecycle.
155
126
 
156
- 1. Log in to your **Medusa Admin**
157
- 2. Go to **Settings** → **Regions**
158
- 3. Select the region where you want to enable HDFC payments
159
- 4. In the **Payment Providers** section, ensure `hdfc` is enabled
160
- 5. Save changes
127
+ ### External HDFC API endpoints used by the client
161
128
 
162
- ### Payment Flow
129
+ | Method | Endpoint | Purpose |
130
+ |---|---|---|
131
+ | `POST` | `/session` | Initiate payment session and receive payment link. |
132
+ | `GET` | `/orders/{order_id}` | Retrieve order/payment status. |
133
+ | `POST` | `/orders/{order_id}/refunds` | Create refund request. |
134
+ | `POST` | `/orders/{id}/cancel` | Cancel order/session (attempt path 1). |
135
+ | `POST` | `/payments/{id}/cancel` | Cancel fallback (legacy path). |
136
+ | `POST` | `/payments/{transaction_id}/capture` | Capture call (client capability; plugin mostly relies on CHARGED/auto-capture). |
137
+ | `POST` | `/payments/authorize` | Authorize call method is implemented in client (not primary path used by service authorize flow). |
163
138
 
164
- The HDFC payment provider supports the standard Medusa payment flow:
139
+ > ⚠️ Note: Since this provider is consumed by Medusa payment workflows, the user-facing endpoints are Medusa core payment/cart endpoints, not plugin-owned API routes.
165
140
 
166
- 1. **Initiate Payment**: Customer selects HDFC as payment method during checkout
167
- 2. **Redirect**: Customer is sent to HDFC’s payment page (`payment_url` from initiate)
168
- 3. **Return**: After payment, HDFC redirects to your `return_url` with query params (e.g. `status`, `order_id`, `signature`)
169
- 4. **Authorize**: Your frontend must call the Medusa authorize endpoint **and pass those redirect params** in the request body so the plugin can verify the payment without calling the Order Status API
170
- 5. **Capture / Refund**: Capture after order confirmation; refunds via admin or API
141
+ ### cURL examples for important external calls
171
142
 
172
- **Important:** If authorize is called with an empty context (no redirect params), the plugin falls back to the HDFC Order Status API. If that returns “Order Not Found”, the plugin may still mark the session as authorized using stored data, but for reliable verification you should pass the redirect params from the HDFC return URL into the authorize request.
143
+ ```bash
144
+ # HDFC session creation (conceptual; plugin does this internally)
145
+ curl -X POST "https://smartgateway.hdfcuat.bank.in/session" \
146
+ -H "Authorization: Basic <base64(api_key:)>" \
147
+ -H "x-merchantid: <merchant_id>" \
148
+ -H "version: 2024-06-24" \
149
+ -H "Content-Type: application/json" \
150
+ -d '{
151
+ "payment_page_client_id": "ppc_xxx",
152
+ "order_id": "payses_xxx",
153
+ "amount": 1200,
154
+ "currency": "INR",
155
+ "return_url": "https://store.example.com/payment/return"
156
+ }'
157
+ ```
158
+
159
+ ```bash
160
+ # HDFC order status (conceptual; plugin uses this for authorize/status/retrieve)
161
+ curl -X GET "https://smartgateway.hdfcuat.bank.in/orders/<order_id>" \
162
+ -H "Authorization: Basic <base64(api_key:)>" \
163
+ -H "x-merchantid: <merchant_id>" \
164
+ -H "x-resellerid: hdfc_reseller" \
165
+ -H "x-customerid: <customer_id>" \
166
+ -H "version: 2024-06-24"
167
+ ```
168
+
169
+ ---
173
170
 
174
- ### Processing Payments
171
+ ## Services
175
172
 
176
- #### Authorization
173
+ ### `HDFCPaymentProviderService` (`src/providers/hdfc/service.ts`)
177
174
 
178
- When a customer selects HDFC as their payment method, the plugin will:
179
- - Create a payment session with HDFC
180
- - Redirect customer to HDFC payment page (if required)
181
- - Authorize the payment amount
175
+ Extends `AbstractPaymentProvider` and implements Medusa payment provider contract.
182
176
 
183
- #### Capture (auto-capture, no manual step)
177
+ Key methods:
184
178
 
185
- For HDFC online payments the plugin uses **auto-capture**: when the customer completes payment on HDFC’s page, the gateway reports **CHARGED**. The plugin reports this to Medusa as **captured** in `authorizePayment`, so:
179
+ - `initiatePayment(context)`
180
+ Creates HDFC session; persists `order_id`, `hdfc_order_id`, `medusa_session_id`, `payment_url`.
186
181
 
187
- - The payment is **not** left in “authorized” state.
188
- - **No** manual “Capture payment” in Admin and **no** call to `POST /admin/payments/:id/capture` is required.
189
- - Order is marked paid as soon as authorization succeeds (CHARGED).
182
+ - `authorizePayment(paymentSessionData, context)`
183
+ Uses redirect payload first (`status`, `order_id`, `signature`), verifies signature when `response_key` is set, then falls back to API status lookup.
190
184
 
191
- This matches **Option 1** (authorize + capture in one step at gateway; return `captured` from the provider). Webhooks can still be used for reliability; the plugin does not depend on the admin capture API.
185
+ - `capturePayment(paymentSessionData)`
186
+ Checks HDFC status and maps `CHARGED` to `captured`.
192
187
 
193
- #### Refunds
188
+ - `refundPayment(paymentSessionDataOrInput, refundAmountArg?)`
189
+ Supports both old/new Medusa signatures; derives idempotent HDFC `unique_request_id`.
194
190
 
195
- To process a refund:
196
- 1. Navigate to the order in Medusa Admin
197
- 2. Go to the payment section
198
- 3. Click "Refund" and specify the amount
199
- 4. The refund will be processed through HDFC
191
+ - `cancelPayment(paymentSessionData)`
192
+ Attempts cancel via HDFC order/payment cancel endpoints and returns canceled status for Medusa cleanup.
200
193
 
201
- ### Webhook Configuration
194
+ - `getPaymentStatus(paymentSessionData)`
195
+ Maps HDFC states to Medusa status enum (`authorized`, `pending`, `error`, etc.).
202
196
 
203
- To receive real-time payment status updates, configure webhooks in your HDFC merchant dashboard:
197
+ - `retrievePayment(paymentSessionData)`
198
+ Returns normalized payment/session details from HDFC status.
204
199
 
205
- 1. Log in to your HDFC merchant portal
206
- 2. Navigate to Webhook Settings
207
- 3. Add your webhook URL. Medusa exposes payment provider webhooks at:
208
- - **`https://your-backend.com/hooks/payment/hdfc_hdfc`**
209
- (Use your API base URL; the path is `/hooks/payment/[identifier]_[provider]` — both are `hdfc` when the provider is registered with `id: "hdfc"`.)
210
- 4. Select events to receive (e.g. payment completed, refunded, failed).
200
+ - `updatePayment(context)`
201
+ Reuses existing non-terminal HDFC order instead of creating duplicates; re-initiates only when terminal.
211
202
 
212
- **No code or env changes are required** in your backend to receive webhooks: the plugin already implements `getWebhookActionAndData`. Optional: set `HDFC_RESPONSE_KEY` in env (and in plugin options) if HDFC signs webhook payloads so the plugin can verify them.
203
+ - `deletePayment(paymentSessionData)`
204
+ Calls cancel and handles incomplete sessions gracefully.
213
205
 
214
- ## Production
206
+ - `createAccountHolder(...)` / `deleteAccountHolder(...)`
207
+ Stub/no-op style support to satisfy provider expectations.
215
208
 
216
- The plugin is suitable for production use. When going live:
209
+ - `getPaymentData(paymentSessionData)`
210
+ Hydrates stored data with latest status details where possible.
217
211
 
218
- 1. **Environment** – Set `HDFC_ENVIRONMENT=production` and use production credentials from HDFC. The plugin will call `https://smartgateway.hdfc.bank.in` instead of the sandbox URL.
219
- 2. **Response key** Configure `HDFC_RESPONSE_KEY` so redirect and webhook payloads are verified with HMAC-SHA256. Recommended for production.
220
- 3. **Logging** – The plugin uses Medusa’s logger when available. In production, set your log level to `info` or `warn` so that sensitive request/response payloads are not written to logs (verbose payload logging is at `debug` only).
221
- 4. **Secrets** – Keep `HDFC_MERCHANT_ID`, `HDFC_API_KEY`, `HDFC_PAYMENT_PAGE_CLIENT_ID`, and `HDFC_RESPONSE_KEY` in environment variables or a secrets manager; never commit them.
212
+ - `getWebhookActionAndData(payload)`
213
+ Parses HDFC webhook payload variants and maps to Medusa actions.
222
214
 
223
- ## 🐛 Troubleshooting
215
+ ### `HDFCClient` (`src/providers/hdfc/client/index.ts`)
224
216
 
225
- ### Payment Authorization Issues
217
+ Low-level HTTP wrapper around HDFC API with axios interceptors and error mapping.
226
218
 
227
- #### "Authentication failed with HDFC payment gateway"
228
- - Verify your `HDFC_MERCHANT_ID`, `HDFC_API_KEY`, and `HDFC_PAYMENT_PAGE_CLIENT_ID` are correct
229
- - Ensure credentials match your environment (sandbox vs production)
230
- - Check that your HDFC merchant account is active
219
+ Key methods:
220
+ - `initiate(data)`
221
+ - `authorize(data)`
222
+ - `capture(data)`
223
+ - `refund(data)`
224
+ - `getStatus(orderId, customerId?)`
225
+ - `cancel(hdfcInternalId, merchantOrderId?)`
231
226
 
232
- #### "Missing required fields: order_id, amount, currency"
233
- - Ensure the payment context includes all required fields
234
- - Verify the order data is properly formatted
235
- - Check Medusa logs for detailed error messages
227
+ ### `handleError` helper (`src/providers/hdfc/client/handle-error.ts`)
236
228
 
237
- ### Payment Capture Issues
229
+ Converts network/HTTP/HDFC-specific errors into `MedusaError` types with improved diagnostics.
238
230
 
239
- #### "Order Not Found" when authorizing (API fallback)
240
- - **Cause:** Authorize was called without the redirect params that HDFC sends to your return URL (e.g. `status`, `order_id`, `signature`). The plugin then calls the HDFC Order Status API, which may return 400 "Order Not Found" depending on environment or ID format.
241
- - **Fix:** On the page HDFC redirects to (your `return_url`), read the query params and pass them into the Medusa authorize payment-session request (e.g. in the request body as `context` or equivalent so the plugin receives `status`, `order_id`, etc.). Then the plugin can authorize from the redirect data and does not need to call the status API.
242
- - The plugin will still authorize using stored session data if the API returns Order Not Found (fallback), but passing redirect params is the recommended approach.
231
+ ---
243
232
 
244
- #### "Missing transaction_id in payment session data"
245
- - Ensure payment was successfully authorized before attempting capture
246
- - Verify payment session data is properly stored (the plugin reads from both flat and nested `data` shapes)
247
- - Check that the transaction ID or order ID is returned from authorization
233
+ ## Workflows & Steps (Medusa v2)
248
234
 
249
- #### "Failed to capture payment with HDFC"
250
- - Verify the payment is in an authorized state
251
- - Check if the authorization has expired
252
- - Ensure sufficient funds are available
253
- - Review HDFC API logs for specific error codes
235
+ No custom plugin workflows/steps are defined.
236
+ This provider integrates into Medusa’s payment workflows through provider lifecycle methods.
254
237
 
255
- ### Refund Issues
238
+ ---
256
239
 
257
- #### "Payment declined: [error message]"
258
- - Verify the payment was successfully captured before refunding
259
- - Check refund amount doesn't exceed captured amount
260
- - Ensure refund is within the allowed time window
261
- - Review HDFC refund policies
240
+ ## Subscribers / Event Hooks
262
241
 
263
- ### Environment Issues
242
+ No subscribers are defined in this plugin source.
264
243
 
265
- #### Sandbox vs Production
266
- - **Sandbox**: Use for testing with test credentials
267
- - **Production**: Use for live transactions with production credentials
268
- - Ensure you're using the correct credentials for your selected environment
269
- - API endpoints differ between environments
244
+ Webhook behavior is implemented via provider method `getWebhookActionAndData(...)`.
270
245
 
271
- ### API Connection Issues
246
+ ---
272
247
 
273
- #### Cancel returns 404 when switching payment method
274
- - When the customer switches from HDFC to another method (or creates a new session), Medusa cancels the previous HDFC session. The plugin calls HDFC’s cancel endpoint; HDFC UAT/production may return **404** (order not found or cancel not supported). This is treated as success so the flow continues; only non-404 errors are logged as warnings.
248
+ ## Admin UI / Widgets
275
249
 
276
- #### "Rate limit exceeded"
277
- - HDFC API has rate limits per merchant
278
- - Implement retry logic with exponential backoff
279
- - Contact HDFC support to increase rate limits if needed
250
+ No admin widgets/routes/ui extensions are defined in this plugin source.
280
251
 
281
- #### "Network timeout"
282
- - Check your server's internet connectivity
283
- - Verify HDFC API endpoints are accessible
284
- - Increase timeout values if needed (default: 30 seconds)
252
+ ---
285
253
 
286
- ## 📚 API Reference
254
+ ## Models & Entities
287
255
 
288
- ### Payment Provider Methods
256
+ No custom models/entities are defined in this plugin source.
289
257
 
290
- The plugin implements all required Medusa payment provider methods:
258
+ ---
291
259
 
292
- - `initiatePayment()` - Initialize payment session
293
- - `authorizePayment()` - Authorize payment
294
- - `capturePayment()` - Capture authorized payment
295
- - `refundPayment()` - Process refund
296
- - `cancelPayment()` - Cancel payment
297
- - `getPaymentStatus()` - Get payment status
298
- - `retrievePayment()` - Retrieve payment details
299
- - `updatePayment()` - Update payment session
300
- - `deletePayment()` - Delete payment session
301
- - `getWebhookActionAndData()` - Process webhook events
260
+ ## Use Cases & Examples
302
261
 
303
- ### Payment Status Values
262
+ 1. **HDFC checkout redirect payments**
263
+ - Scenario: customer pays via HDFC-hosted payment page.
264
+ - Feature: `initiatePayment` returns `payment_url` and tracks HDFC order IDs.
304
265
 
305
- The plugin returns standard Medusa payment statuses:
266
+ 2. **Auto-capture payment flow**
267
+ - Scenario: online payment should be treated as paid immediately after success.
268
+ - Feature: `authorizePayment` maps `CHARGED` to `captured`.
306
269
 
307
- - `authorized` - Payment is authorized
308
- - `pending` - Payment is pending
309
- - `requires_more` - Additional action required
310
- - `error` - Payment failed
311
- - `canceled` - Payment cancelled
270
+ 3. **Refund with idempotency safety**
271
+ - Scenario: robust refunds across retries.
272
+ - Feature: `refundPayment` normalizes amount and generates bounded `unique_request_id`.
312
273
 
313
- ## 🔒 Security Best Practices
274
+ 4. **Cart/session update resilience**
275
+ - Scenario: cart changes should not create duplicate HDFC pending orders.
276
+ - Feature: `updatePayment` reuses non-terminal HDFC orders.
314
277
 
315
- 1. **Never commit credentials**: Always use environment variables
316
- 2. **Use HTTPS**: Ensure all API calls are over HTTPS
317
- 3. **Validate webhooks**: Verify webhook signatures from HDFC
318
- 4. **Monitor transactions**: Regularly review payment logs
319
- 5. **Keep credentials secure**: Rotate API keys periodically
278
+ 5. **Gateway webhook reconciliation**
279
+ - Scenario: external payment updates need Medusa action mapping.
280
+ - Feature: `getWebhookActionAndData` handles status/event variants and maps actions.
320
281
 
321
- ## 🤝 Contributing
282
+ ---
322
283
 
323
- Contributions are welcome! If you find a bug or want to add a feature:
284
+ ## Troubleshooting
324
285
 
325
- 1. Fork the repository
326
- 2. Create a feature branch (`git checkout -b feature/amazing-feature`)
327
- 3. Commit your changes (`git commit -m 'Add some amazing feature'`)
328
- 4. Push to the branch (`git push origin feature/amazing-feature`)
329
- 5. Open a Pull Request
286
+ ### `Required option ... is missing in HDFC plugin`
287
+ - **Cause:** missing `merchant_id`, `api_key`, or `payment_page_client_id`.
288
+ - **Fix:** provide required provider `options` in `medusa-config.ts`.
330
289
 
331
- ## 📄 License
290
+ ### 401 / authentication issues from HDFC
291
+ - **Cause:** invalid credentials, environment mismatch, or missing customer header requirements for server APIs.
292
+ - **Fix:** verify API key/merchant id pair, use correct `environment`, provide `customer_id` or `default_api_customer_id` for calls requiring `x-customerid`.
332
293
 
333
- This project is licensed under the [MIT License](LICENSE).
294
+ ### Authorization fails or falls back unexpectedly
295
+ - **Cause:** redirect data (`status`, `order_id`, `signature`) not passed in authorize context.
296
+ - **Fix:** forward HDFC return params into authorize call context for first-path verification.
334
297
 
335
- ## 📞 Support
298
+ ### Signature verification failures
299
+ - **Cause:** mismatched `response_key` or tampered/incomplete signed fields.
300
+ - **Fix:** ensure configured `response_key` matches HDFC and all expected params are passed.
336
301
 
337
- For issues and questions:
302
+ ### Duplicate/abandoned HDFC orders
303
+ - **Cause:** repeated initiation for same checkout/session.
304
+ - **Fix:** provider already attempts duplicate recovery and reuses pending orders in `updatePayment`; confirm session data is preserved and status checks succeed.
338
305
 
339
- - **Plugin Issues**: Open an issue on GitHub
340
- - **HDFC API Support**: Contact HDFC merchant support
341
- - **Medusa Support**: Visit [Medusa Discord](https://discord.gg/medusajs)
306
+ ### Cancel returns warnings
307
+ - **Cause:** HDFC may reject cancel for some states/ids.
308
+ - **Fix:** provider treats some cancel failures as non-fatal for Medusa cleanup; inspect logs if strict cancellation is required operationally.
342
309
 
343
310
  ---
344
311
 
345
- <p align="center">
346
- Built with ❤️ for the Medusa community
347
- </p>
312
+
348
313
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusa-hdfc-payment",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "description": "HDFC Payment Gateway Provider Plugin for MedusaJS 2",
5
5
  "author": "",
6
6
  "homepage": "",