@obhco/pay 0.0.0-stage → 0.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 (54) hide show
  1. package/README.md +203 -2
  2. package/dist/errors.d.ts +9 -0
  3. package/dist/errors.d.ts.map +1 -0
  4. package/dist/errors.js +15 -0
  5. package/dist/errors.js.map +1 -0
  6. package/dist/gateways/digipay.d.ts +36 -0
  7. package/dist/gateways/digipay.d.ts.map +1 -0
  8. package/dist/gateways/digipay.js +489 -0
  9. package/dist/gateways/digipay.js.map +1 -0
  10. package/dist/gateways/index.d.ts +5 -0
  11. package/dist/gateways/index.d.ts.map +1 -0
  12. package/dist/gateways/index.js +5 -0
  13. package/dist/gateways/index.js.map +1 -0
  14. package/dist/gateways/mellat-constants.d.ts +3 -0
  15. package/dist/gateways/mellat-constants.d.ts.map +1 -0
  16. package/dist/gateways/mellat-constants.js +3 -0
  17. package/dist/gateways/mellat-constants.js.map +1 -0
  18. package/dist/gateways/mellat.d.ts +30 -0
  19. package/dist/gateways/mellat.d.ts.map +1 -0
  20. package/dist/gateways/mellat.js +397 -0
  21. package/dist/gateways/mellat.js.map +1 -0
  22. package/dist/gateways/sadad.d.ts +43 -0
  23. package/dist/gateways/sadad.d.ts.map +1 -0
  24. package/dist/gateways/sadad.js +541 -0
  25. package/dist/gateways/sadad.js.map +1 -0
  26. package/dist/gateways/zarinpal.d.ts +21 -0
  27. package/dist/gateways/zarinpal.d.ts.map +1 -0
  28. package/dist/gateways/zarinpal.js +312 -0
  29. package/dist/gateways/zarinpal.js.map +1 -0
  30. package/dist/http.d.ts +31 -0
  31. package/dist/http.d.ts.map +1 -0
  32. package/dist/http.js +101 -0
  33. package/dist/http.js.map +1 -0
  34. package/dist/index.d.ts +14 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +8 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/pay.d.ts +114 -0
  39. package/dist/pay.d.ts.map +1 -0
  40. package/dist/pay.js +427 -0
  41. package/dist/pay.js.map +1 -0
  42. package/dist/report.d.ts +71 -0
  43. package/dist/report.d.ts.map +1 -0
  44. package/dist/report.js +106 -0
  45. package/dist/report.js.map +1 -0
  46. package/dist/store.d.ts +420 -0
  47. package/dist/store.d.ts.map +1 -0
  48. package/dist/store.js +68 -0
  49. package/dist/store.js.map +1 -0
  50. package/dist/types.d.ts +110 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +16 -0
  53. package/dist/types.js.map +1 -0
  54. package/package.json +34 -4
@@ -0,0 +1,541 @@
1
+ import { createCipheriv, createDecipheriv } from "node:crypto";
2
+ import { PaymentProviderError, } from "../types.js";
3
+ export const SADAD_PROVIDER_CODE = "sadad";
4
+ export const SADAD_PROVIDER_NAME = "Sadad (Bank Melli Iran)";
5
+ const DEFAULT_SADAD_BASE_URL = "https://sadad.shaparak.ir";
6
+ const SADAD_TIMEOUT_MS = 15_000;
7
+ // Shaparak drops connections from non-Iranian IPs, so the server-to-server
8
+ // calls (PaymentRequest, Verify) can go through a relay on an Iranian host
9
+ // (deploy/sadad-relay). The customer's browser still opens Sadad's own
10
+ // Purchase page.
11
+ function getSadadApi(baseUrl) {
12
+ const relayUrl = process.env.SADAD_RELAY_URL?.trim().replace(/\/+$/, "");
13
+ const relaySecret = process.env.SADAD_RELAY_SECRET?.trim();
14
+ if (relayUrl && relaySecret) {
15
+ return {
16
+ apiBaseUrl: relayUrl,
17
+ apiHeaders: { "X-Relay-Secret": relaySecret },
18
+ };
19
+ }
20
+ return { apiBaseUrl: baseUrl, apiHeaders: {} };
21
+ }
22
+ /**
23
+ * Known Sadad IPG `PaymentRequest` and `Verify` response codes from
24
+ * Sadad Electronic Payment Company "Purchase Process Implementation Guide" v1.10.
25
+ */
26
+ export const SADAD_RESPONSE_CODES = {
27
+ 0: { message: "Operation succeeded.", retryable: false },
28
+ [-1]: {
29
+ message: "Parameters are incorrect or transaction does not exist.",
30
+ retryable: false,
31
+ },
32
+ 3: { message: "Invalid or inactive merchant.", retryable: false },
33
+ 23: { message: "Inactive or invalid merchant.", retryable: false },
34
+ 58: {
35
+ message: "Transaction not permitted for the terminal.",
36
+ retryable: false,
37
+ },
38
+ 61: {
39
+ message: "Transaction amount exceeds the allowed limit.",
40
+ retryable: false,
41
+ },
42
+ 100: {
43
+ message: "Duplicate verification request; previously verified.",
44
+ retryable: false,
45
+ },
46
+ 101: {
47
+ message: "Transaction verification validity period has expired.",
48
+ retryable: false,
49
+ },
50
+ 1000: {
51
+ message: "Incorrect sequence of submitted parameters.",
52
+ retryable: false,
53
+ },
54
+ 1001: { message: "Incorrect payment parameters.", retryable: false },
55
+ 1002: { message: "Gateway system error.", retryable: true },
56
+ 1003: { message: "Merchant IP address is incorrect.", retryable: false },
57
+ 1004: { message: "Merchant identifier is incorrect.", retryable: false },
58
+ 1005: { message: "Gateway access error; retry later.", retryable: true },
59
+ 1006: { message: "Gateway system error.", retryable: true },
60
+ 1011: {
61
+ message: "Duplicate request or duplicate OrderId.",
62
+ retryable: false,
63
+ },
64
+ 1012: {
65
+ message: "Merchant credentials, timestamp, or terminal key is incorrect.",
66
+ retryable: false,
67
+ },
68
+ 1015: {
69
+ message: "Unknown error from the processing center.",
70
+ retryable: true,
71
+ },
72
+ 1017: {
73
+ message: "Amount exceeds configured merchant limit.",
74
+ retryable: false,
75
+ },
76
+ 1018: { message: "Server date/time discrepancy.", retryable: false },
77
+ 1019: {
78
+ message: "SHETAB card network payment is not enabled for this merchant.",
79
+ retryable: false,
80
+ },
81
+ 1020: { message: "Merchant is deactivated.", retryable: false },
82
+ 1023: { message: "Invalid merchant ReturnUrl.", retryable: false },
83
+ 1024: { message: "Invalid merchant timestamp.", retryable: false },
84
+ 1025: {
85
+ message: "Invalid transaction signature (SignData).",
86
+ retryable: false,
87
+ },
88
+ 1026: { message: "Invalid transaction OrderId.", retryable: false },
89
+ 1027: { message: "Invalid MerchantId.", retryable: false },
90
+ 1028: { message: "Invalid TerminalId.", retryable: false },
91
+ 1029: {
92
+ message: "Request IP is not in the registered IP range.",
93
+ retryable: false,
94
+ },
95
+ 1030: {
96
+ message: "Payment domain is not among registered domains.",
97
+ retryable: false,
98
+ },
99
+ 1031: { message: "Payment time limit expired.", retryable: false },
100
+ 1032: {
101
+ message: "Card is not permitted for this merchant.",
102
+ retryable: false,
103
+ },
104
+ 1033: {
105
+ message: "Payment disabled due to merchant site issue.",
106
+ retryable: false,
107
+ },
108
+ 1036: { message: "Missing or invalid additional data.", retryable: false },
109
+ 1037: {
110
+ message: "Merchant or terminal details are incorrect.",
111
+ retryable: false,
112
+ },
113
+ 1040: { message: "Supplied identifier is invalid.", retryable: false },
114
+ 1053: {
115
+ message: "Invalid request from merchant; verify merchant information.",
116
+ retryable: false,
117
+ },
118
+ 1055: { message: "Invalid input value.", retryable: false },
119
+ 1056: {
120
+ message: "Gateway temporarily unavailable; retry later.",
121
+ retryable: true,
122
+ },
123
+ 1058: {
124
+ message: "Internet payment service unavailable; retry later.",
125
+ retryable: true,
126
+ },
127
+ 1061: {
128
+ message: "Error generating unique code (possible browser Back navigation).",
129
+ retryable: false,
130
+ },
131
+ 1064: { message: "Please retry the request.", retryable: true },
132
+ 1065: {
133
+ message: "Communication failure; retry after a short delay.",
134
+ retryable: true,
135
+ },
136
+ 1066: {
137
+ message: "Payment service temporarily disabled.",
138
+ retryable: true,
139
+ },
140
+ 1068: {
141
+ message: "Temporary outage during maintenance.",
142
+ retryable: true,
143
+ },
144
+ 1072: {
145
+ message: "Error processing optional merchant parameters.",
146
+ retryable: false,
147
+ },
148
+ 1101: { message: "Invalid transaction amount.", retryable: false },
149
+ 1103: { message: "Invalid payment token.", retryable: false },
150
+ 1104: { message: "Invalid payment-splitting data.", retryable: false },
151
+ 1105: {
152
+ message: "Transaction was returned because the time limit expired.",
153
+ retryable: false,
154
+ },
155
+ };
156
+ export function describeSadadCode(code, fallback) {
157
+ if (fallback && fallback.trim()) {
158
+ return fallback.trim();
159
+ }
160
+ if (code !== null && code !== undefined && SADAD_RESPONSE_CODES[code]) {
161
+ return SADAD_RESPONSE_CODES[code].message;
162
+ }
163
+ return code !== null && code !== undefined
164
+ ? `Sadad response code ${code}`
165
+ : "Unspecified gateway response";
166
+ }
167
+ function normalizeTripleDesKey(base64TerminalKey) {
168
+ const raw = Buffer.from(base64TerminalKey.trim(), "base64");
169
+ if (raw.length === 24) {
170
+ return raw;
171
+ }
172
+ if (raw.length === 16) {
173
+ // 2-key 3DES (K1 || K2 || K1)
174
+ return Buffer.concat([raw, raw.subarray(0, 8)]);
175
+ }
176
+ if (raw.length > 24) {
177
+ return raw.subarray(0, 24);
178
+ }
179
+ throw new PaymentProviderError("SADAD_INVALID_KEY", "SADAD_TERMINAL_KEY must decode from Base64 to at least 16 or 24 bytes.");
180
+ }
181
+ /**
182
+ * Encrypts plaintext using TripleDES (3DES) in ECB mode with PKCS7 padding
183
+ * and returns Base64, as required by Sadad IPG for `SignData`.
184
+ */
185
+ export function createSadadSignData(plaintext, base64TerminalKey) {
186
+ const key = normalizeTripleDesKey(base64TerminalKey);
187
+ const cipher = createCipheriv("des-ede3", key, null);
188
+ cipher.setAutoPadding(true);
189
+ const encrypted = Buffer.concat([
190
+ cipher.update(plaintext, "utf8"),
191
+ cipher.final(),
192
+ ]);
193
+ return encrypted.toString("base64");
194
+ }
195
+ export function decryptSadadSignData(signDataBase64, base64TerminalKey) {
196
+ const key = normalizeTripleDesKey(base64TerminalKey);
197
+ const decipher = createDecipheriv("des-ede3", key, null);
198
+ decipher.setAutoPadding(true);
199
+ const decrypted = Buffer.concat([
200
+ decipher.update(Buffer.from(signDataBase64, "base64")),
201
+ decipher.final(),
202
+ ]);
203
+ return decrypted.toString("utf8");
204
+ }
205
+ export function createSadadPaymentRequestSignData(input) {
206
+ const plaintext = `${input.terminalId};${String(input.orderId)};${String(input.amount)}`;
207
+ return createSadadSignData(plaintext, input.terminalKey);
208
+ }
209
+ export function createSadadVerifySignData(token, terminalKey) {
210
+ return createSadadSignData(token, terminalKey);
211
+ }
212
+ function maskIdentifier(value) {
213
+ const trimmed = value?.trim();
214
+ if (!trimmed) {
215
+ return null;
216
+ }
217
+ if (trimmed.length <= 4) {
218
+ return "****";
219
+ }
220
+ return `${trimmed.slice(0, 2)}${"*".repeat(Math.min(6, trimmed.length - 4))}${trimmed.slice(-2)}`;
221
+ }
222
+ export function getSadadConfigStatus() {
223
+ const baseUrl = (process.env.SADAD_BASE_URL?.trim() || DEFAULT_SADAD_BASE_URL).replace(/\/+$/, "");
224
+ const merchantId = process.env.SADAD_MERCHANT_ID?.trim();
225
+ const terminalId = process.env.SADAD_TERMINAL_ID?.trim();
226
+ const terminalKey = process.env.SADAD_TERMINAL_KEY?.trim();
227
+ let keyValid = false;
228
+ if (terminalKey) {
229
+ try {
230
+ normalizeTripleDesKey(terminalKey);
231
+ keyValid = true;
232
+ }
233
+ catch {
234
+ keyValid = false;
235
+ }
236
+ }
237
+ return {
238
+ providerCode: SADAD_PROVIDER_CODE,
239
+ providerName: SADAD_PROVIDER_NAME,
240
+ baseUrl,
241
+ requestEndpoint: `${getSadadApi(baseUrl).apiBaseUrl}/api/v0/Request/PaymentRequest`,
242
+ purchaseEndpoint: `${baseUrl}/Purchase`,
243
+ verifyEndpoint: `${getSadadApi(baseUrl).apiBaseUrl}/api/v0/Advice/Verify`,
244
+ liveConfigured: Boolean(merchantId && terminalId && keyValid),
245
+ merchantId: merchantId || null,
246
+ terminalId: terminalId || null,
247
+ merchantIdMasked: maskIdentifier(merchantId),
248
+ terminalIdMasked: maskIdentifier(terminalId),
249
+ terminalKeyPrefix: terminalKey ? `${terminalKey.slice(0, 6)}...` : null,
250
+ terminalKeyConfigured: keyValid,
251
+ };
252
+ }
253
+ function getLiveCredentials() {
254
+ const merchantId = process.env.SADAD_MERCHANT_ID?.trim();
255
+ const terminalId = process.env.SADAD_TERMINAL_ID?.trim();
256
+ const terminalKey = process.env.SADAD_TERMINAL_KEY?.trim();
257
+ const baseUrl = (process.env.SADAD_BASE_URL?.trim() || DEFAULT_SADAD_BASE_URL).replace(/\/+$/, "");
258
+ if (!merchantId || !terminalId || !terminalKey) {
259
+ throw new PaymentProviderError("SADAD_CREDENTIALS_MISSING", "Sadad credentials (SADAD_MERCHANT_ID, SADAD_TERMINAL_ID, SADAD_TERMINAL_KEY) are not configured in server environment variables.");
260
+ }
261
+ normalizeTripleDesKey(terminalKey);
262
+ return { merchantId, terminalId, terminalKey, baseUrl };
263
+ }
264
+ export const sadadPaymentAdapter = {
265
+ code: SADAD_PROVIDER_CODE,
266
+ descriptor: {
267
+ code: SADAD_PROVIDER_CODE,
268
+ name: SADAD_PROVIDER_NAME,
269
+ displayName: "پرداخت با کارت بانکی (سداد)",
270
+ description: "Pay in full with any Shetab bank card through Sadad (Bank Melli Iran).",
271
+ kind: "card",
272
+ requiresCustomerMobile: false,
273
+ minAmount: null,
274
+ },
275
+ isConfigured() {
276
+ return getSadadConfigStatus().liveConfigured;
277
+ },
278
+ async createCheckoutSession(input) {
279
+ if (input.currency !== "IRR") {
280
+ throw new PaymentProviderError("CURRENCY_NOT_SUPPORTED", "Sadad IPG only supports IRR.");
281
+ }
282
+ if (!/^[1-9]\d{0,17}$/.test(input.amount)) {
283
+ throw new PaymentProviderError("INVALID_AMOUNT", "Sadad IPG requires a positive whole Rial integer amount.");
284
+ }
285
+ if (!/^\d+$/.test(input.gatewayOrderId)) {
286
+ throw new PaymentProviderError("INVALID_ORDER_ID", "Sadad IPG requires a numeric OrderId.");
287
+ }
288
+ const { merchantId, terminalId, terminalKey, baseUrl } = getLiveCredentials();
289
+ const signData = createSadadPaymentRequestSignData({
290
+ terminalId,
291
+ orderId: input.gatewayOrderId,
292
+ amount: input.amount,
293
+ terminalKey,
294
+ });
295
+ const requestBody = {
296
+ MerchantId: merchantId,
297
+ TerminalId: terminalId,
298
+ Amount: Number(input.amount),
299
+ OrderId: Number(input.gatewayOrderId),
300
+ LocalDateTime: new Date().toISOString(),
301
+ ReturnUrl: input.callbackUrl,
302
+ SignData: signData,
303
+ AdditionalData: input.paymentReference,
304
+ ApplicationName: "OBH",
305
+ };
306
+ const controller = new AbortController();
307
+ const timeout = setTimeout(() => controller.abort(), SADAD_TIMEOUT_MS);
308
+ let response;
309
+ try {
310
+ const { apiBaseUrl, apiHeaders } = getSadadApi(baseUrl);
311
+ response = await fetch(`${apiBaseUrl}/api/v0/Request/PaymentRequest`, {
312
+ method: "POST",
313
+ signal: controller.signal,
314
+ headers: {
315
+ Accept: "application/json",
316
+ "Content-Type": "application/json",
317
+ ...apiHeaders,
318
+ },
319
+ body: JSON.stringify(requestBody),
320
+ });
321
+ }
322
+ catch {
323
+ throw new PaymentProviderError("SADAD_NETWORK_ERROR", "Could not reach Sadad PaymentRequest endpoint.");
324
+ }
325
+ finally {
326
+ clearTimeout(timeout);
327
+ }
328
+ let data;
329
+ try {
330
+ data = (await response.json());
331
+ }
332
+ catch {
333
+ throw new PaymentProviderError("SADAD_INVALID_RESPONSE", `Sadad PaymentRequest returned non-JSON status ${response.status}.`);
334
+ }
335
+ const resCode = Number(data.ResCode ?? -1);
336
+ const description = describeSadadCode(resCode, data.Description);
337
+ if (resCode !== 0 || !data.Token) {
338
+ throw new PaymentProviderError(`SADAD_RES_${resCode}`, description, resCode);
339
+ }
340
+ const purchaseUrl = new URL(`${baseUrl}/Purchase`);
341
+ purchaseUrl.searchParams.set("token", data.Token);
342
+ return {
343
+ providerSessionId: data.Token,
344
+ providerReference: null,
345
+ checkoutUrl: purchaseUrl.toString(),
346
+ expiresAt: new Date(Date.now() + 15 * 60 * 1000),
347
+ resultCode: 0,
348
+ resultMessage: description,
349
+ };
350
+ },
351
+ async verifyPayment(input) {
352
+ const token = input.providerSessionId;
353
+ if (!token) {
354
+ throw new PaymentProviderError("INVALID_VERIFICATION_INPUT", "A Sadad transaction token (providerSessionId) is required for Verify.");
355
+ }
356
+ const { terminalKey, baseUrl } = getLiveCredentials();
357
+ const signData = createSadadVerifySignData(token, terminalKey);
358
+ const controller = new AbortController();
359
+ const timeout = setTimeout(() => controller.abort(), SADAD_TIMEOUT_MS);
360
+ let response;
361
+ try {
362
+ const { apiBaseUrl, apiHeaders } = getSadadApi(baseUrl);
363
+ response = await fetch(`${apiBaseUrl}/api/v0/Advice/Verify`, {
364
+ method: "POST",
365
+ signal: controller.signal,
366
+ headers: {
367
+ Accept: "application/json",
368
+ "Content-Type": "application/json",
369
+ ...apiHeaders,
370
+ },
371
+ body: JSON.stringify({
372
+ Token: token,
373
+ SignData: signData,
374
+ }),
375
+ });
376
+ }
377
+ catch {
378
+ // Per Sadad guide §8.4: network/timeout on Verify is NOT proof of failure;
379
+ // leave payment PENDING so Verify can be retried within the 15-minute window.
380
+ return {
381
+ status: "PENDING",
382
+ providerReference: input.providerReference ?? token,
383
+ traceNumber: null,
384
+ maskedCardNumber: typeof input.payload?.PrimaryAccNo === "string"
385
+ ? input.payload.PrimaryAccNo
386
+ : null,
387
+ resultCode: 1065,
388
+ resultMessage: "Temporary communication failure during Sadad Verify; retry pending.",
389
+ verifiedAmount: null,
390
+ verifiedOrderId: null,
391
+ verifiedAt: null,
392
+ failureReason: null,
393
+ metadata: {
394
+ adapter: SADAD_PROVIDER_CODE,
395
+ retryableVerifyError: true,
396
+ },
397
+ };
398
+ }
399
+ finally {
400
+ clearTimeout(timeout);
401
+ }
402
+ let data;
403
+ try {
404
+ data = (await response.json());
405
+ }
406
+ catch {
407
+ return {
408
+ status: "PENDING",
409
+ providerReference: input.providerReference ?? token,
410
+ traceNumber: null,
411
+ maskedCardNumber: null,
412
+ resultCode: 1002,
413
+ resultMessage: `Sadad Verify returned non-JSON status ${response.status}.`,
414
+ verifiedAmount: null,
415
+ verifiedOrderId: null,
416
+ verifiedAt: null,
417
+ failureReason: null,
418
+ metadata: {
419
+ adapter: SADAD_PROVIDER_CODE,
420
+ httpStatus: response.status,
421
+ },
422
+ };
423
+ }
424
+ const resCode = Number(data.ResCode ?? -1);
425
+ const description = describeSadadCode(resCode, data.Description);
426
+ const verifiedAmount = data.Amount !== undefined && data.Amount !== null
427
+ ? String(data.Amount)
428
+ : null;
429
+ const verifiedOrderId = data.OrderId !== undefined && data.OrderId !== null
430
+ ? String(data.OrderId)
431
+ : null;
432
+ const retrievalRefNo = data.RetrivalRefNo
433
+ ? String(data.RetrivalRefNo)
434
+ : (input.providerReference ?? token);
435
+ const systemTraceNo = data.SystemTraceNo ? String(data.SystemTraceNo) : null;
436
+ const maskedCardNumber = typeof input.payload?.PrimaryAccNo === "string"
437
+ ? input.payload.PrimaryAccNo
438
+ : null;
439
+ // ResCode 0 = verified; ResCode 100 = duplicate Verify (previously verified)
440
+ if (resCode === 0 || resCode === 100) {
441
+ if (input.gatewayOrderId &&
442
+ verifiedOrderId &&
443
+ verifiedOrderId !== input.gatewayOrderId) {
444
+ return {
445
+ status: "FAILED",
446
+ providerReference: retrievalRefNo,
447
+ traceNumber: systemTraceNo,
448
+ maskedCardNumber,
449
+ resultCode: resCode,
450
+ resultMessage: "Verified OrderId from Sadad did not match expected gatewayOrderId.",
451
+ verifiedAmount,
452
+ verifiedOrderId,
453
+ verifiedAt: new Date(),
454
+ failureReason: "OrderId mismatch on Sadad Verify.",
455
+ metadata: {
456
+ adapter: SADAD_PROVIDER_CODE,
457
+ expectedOrderId: input.gatewayOrderId,
458
+ verifiedOrderId,
459
+ },
460
+ };
461
+ }
462
+ if (input.expectedAmount &&
463
+ verifiedAmount &&
464
+ verifiedAmount !== input.expectedAmount) {
465
+ return {
466
+ status: "FAILED",
467
+ providerReference: retrievalRefNo,
468
+ traceNumber: systemTraceNo,
469
+ maskedCardNumber,
470
+ resultCode: resCode,
471
+ resultMessage: "Verified Amount from Sadad did not match expected payment amount.",
472
+ verifiedAmount,
473
+ verifiedOrderId,
474
+ verifiedAt: new Date(),
475
+ failureReason: "Amount mismatch on Sadad Verify.",
476
+ metadata: {
477
+ adapter: SADAD_PROVIDER_CODE,
478
+ expectedAmount: input.expectedAmount,
479
+ verifiedAmount,
480
+ },
481
+ };
482
+ }
483
+ return {
484
+ status: "COMPLETED",
485
+ providerReference: retrievalRefNo,
486
+ traceNumber: systemTraceNo,
487
+ maskedCardNumber,
488
+ resultCode: resCode,
489
+ resultMessage: description,
490
+ verifiedAmount,
491
+ verifiedOrderId,
492
+ verifiedAt: new Date(),
493
+ failureReason: null,
494
+ metadata: {
495
+ adapter: SADAD_PROVIDER_CODE,
496
+ ResCode: resCode,
497
+ RetrivalRefNo: retrievalRefNo,
498
+ SystemTraceNo: systemTraceNo,
499
+ TransactionDate: data.TransactionDate ?? null,
500
+ },
501
+ };
502
+ }
503
+ return {
504
+ status: "FAILED",
505
+ providerReference: retrievalRefNo,
506
+ traceNumber: systemTraceNo,
507
+ maskedCardNumber,
508
+ resultCode: resCode,
509
+ resultMessage: description,
510
+ verifiedAmount,
511
+ verifiedOrderId,
512
+ verifiedAt: new Date(),
513
+ failureReason: description,
514
+ metadata: {
515
+ adapter: SADAD_PROVIDER_CODE,
516
+ ResCode: resCode,
517
+ },
518
+ };
519
+ },
520
+ parseCallback(payload) {
521
+ const raw = payload.ResCode?.trim();
522
+ const parsed = raw ? Number(raw) : -1;
523
+ const resultCode = Number.isFinite(parsed) ? parsed : -1;
524
+ const orderId = payload.OrderId?.trim() || null;
525
+ return {
526
+ sessionId: payload.Token?.trim() || null,
527
+ gatewayOrderId: orderId && /^\d+$/.test(orderId) ? orderId : null,
528
+ outcome: resultCode === 0 ? "verify" : "failed",
529
+ resultCode,
530
+ resultText: describeSadadCode(resultCode),
531
+ providerReference: null,
532
+ maskedCardNumber: payload.PrimaryAccNo?.trim() || null,
533
+ payload: {
534
+ ResCode: resultCode,
535
+ PrimaryAccNo: payload.PrimaryAccNo?.trim() || undefined,
536
+ SwitchResCode: payload.SwitchResCode ?? null,
537
+ },
538
+ };
539
+ },
540
+ };
541
+ //# sourceMappingURL=sadad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sadad.js","sourceRoot":"","sources":["../../src/gateways/sadad.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type PaymentGatewayAdapter } from "../types.js";
2
+ export declare const ZARINPAL_PROVIDER_CODE = "zarinpal";
3
+ export declare const ZARINPAL_PROVIDER_NAME = "Zarinpal";
4
+ /** Result codes from the Zarinpal v4 payment gateway guide. */
5
+ export declare const ZARINPAL_RESULT_CODES: Record<number, {
6
+ message: string;
7
+ retryable: boolean;
8
+ }>;
9
+ export declare function describeZarinpalCode(code: number | null | undefined, fallback?: string | null): string;
10
+ export type ZarinpalConfigStatus = {
11
+ providerCode: typeof ZARINPAL_PROVIDER_CODE;
12
+ providerName: typeof ZARINPAL_PROVIDER_NAME;
13
+ host: string;
14
+ sandbox: boolean;
15
+ liveConfigured: boolean;
16
+ merchantIdMasked: string | null;
17
+ };
18
+ export declare function getZarinpalConfigStatus(): ZarinpalConfigStatus;
19
+ export declare function getZarinpalStartPayUrl(authority: string): string;
20
+ export declare const zarinpalPaymentAdapter: PaymentGatewayAdapter;
21
+ //# sourceMappingURL=zarinpal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zarinpal.d.ts","sourceRoot":"","sources":["../../src/gateways/zarinpal.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,qBAAqB,EAG3B,MAAM,aAAa,CAAA;AAEpB,eAAO,MAAM,sBAAsB,aAAa,CAAA;AAChD,eAAO,MAAM,sBAAsB,aAAa,CAAA;AAMhD,+DAA+D;AAC/D,eAAO,MAAM,qBAAqB,EAAE,MAAM,CACxC,MAAM,EACN;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAmCxC,CAAA;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,UAazB;AAuBD,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,OAAO,sBAAsB,CAAA;IAC3C,YAAY,EAAE,OAAO,sBAAsB,CAAA;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,OAAO,CAAA;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC,CAAA;AAYD,wBAAgB,uBAAuB,IAAI,oBAAoB,CAW9D;AAoED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,UAEvD;AAQD,eAAO,MAAM,sBAAsB,EAAE,qBAoOpC,CAAA"}