telebirr-nodejs 1.1.5 → 1.1.7

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.
package/README.md CHANGED
@@ -130,9 +130,9 @@ Refunds a completed transaction.
130
130
  app.post("/payment/refund", async (req, res) => {
131
131
  const refundData = await c2bClient.refundOrder({
132
132
  merchOrderId: "order123",
133
- refundRequestNo: "original-transaction-id",
134
- refundReason: "customer request",
135
- amount: "12",
133
+ refundRequestNo: "CJD7GBPXIP", // unique Identifier of the request generated by the merchant app used for idempotency
134
+ refundReason: "The product is not as I expected",
135
+ amount: "1200",
136
136
  });
137
137
 
138
138
  res.json(refundData);
package/dist/index.cjs CHANGED
@@ -259,13 +259,11 @@ function requestCreateOrder(fabricToken, input, config) {
259
259
  if (status < 200 || status >= 300) {
260
260
  return reject({
261
261
  message: "Telebirr preorder request failed",
262
- status,
263
262
  data: parsed
264
263
  });
265
264
  }
266
265
  resolve({
267
266
  message: "Telebirr preorder request successful",
268
- status,
269
267
  data: parsed
270
268
  });
271
269
  });
@@ -274,8 +272,7 @@ function requestCreateOrder(fabricToken, input, config) {
274
272
  req.on("error", (err) => {
275
273
  reject({
276
274
  message: "Telebirr preorder network error",
277
- cause: err,
278
- code: err.code
275
+ data: err
279
276
  });
280
277
  });
281
278
  req.write(payload);
@@ -329,22 +326,16 @@ function requestRefund(fabricToken, input, config) {
329
326
  res.on("end", () => {
330
327
  const status = res.statusCode || 0;
331
328
  let parsed = raw;
332
- try {
333
- parsed = JSON.parse(raw);
334
- } catch (e) {
335
- }
329
+ parsed = JSON.parse(raw);
336
330
  if (status < 200 || status >= 300) {
337
331
  return reject({
338
332
  message: "Telebirr refund request failed",
339
- status,
340
- data: parsed,
341
- headers: res.headers
333
+ data: parsed
342
334
  });
343
335
  }
344
336
  resolve({
345
337
  data: parsed,
346
- status,
347
- headers: res.headers
338
+ message: "Telebirr refund request successful"
348
339
  });
349
340
  });
350
341
  }
@@ -352,8 +343,7 @@ function requestRefund(fabricToken, input, config) {
352
343
  req.on("error", (err) => {
353
344
  reject({
354
345
  message: "Telebirr refund network error",
355
- cause: err,
356
- code: err.code
346
+ data: err
357
347
  });
358
348
  });
359
349
  req.write(payload);
@@ -403,22 +393,16 @@ function requestQueryOrder(fabricToken, merchOrderId, config) {
403
393
  res.on("end", () => {
404
394
  const status = res.statusCode || 0;
405
395
  let parsed = raw;
406
- try {
407
- parsed = JSON.parse(raw);
408
- } catch (e2) {
409
- }
396
+ parsed = JSON.parse(raw);
410
397
  if (status < 200 || status >= 300) {
411
398
  return reject({
412
399
  message: "Telebirr queryOrder request failed",
413
- status,
414
- data: parsed,
415
- headers: res.headers
400
+ data: parsed
416
401
  });
417
402
  }
418
403
  resolve({
419
404
  data: parsed,
420
- status,
421
- headers: res.headers
405
+ message: "Telebirr queryOrder request successful"
422
406
  });
423
407
  });
424
408
  }
@@ -426,8 +410,7 @@ function requestQueryOrder(fabricToken, merchOrderId, config) {
426
410
  req.on("error", (err) => {
427
411
  reject({
428
412
  message: "Telebirr queryOrder network error",
429
- cause: err,
430
- code: err.code
413
+ data: err
431
414
  });
432
415
  });
433
416
  req.write(payload);
@@ -1 +1 @@
1
- {"version":3,"sources":["c:\\Users\\Dell\\Desktop\\Projects\\telebirr-nodejs\\dist\\index.cjs"],"names":[],"mappings":"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,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA","file":"C:\\Users\\Dell\\Desktop\\Projects\\telebirr-nodejs\\dist\\index.cjs","sourcesContent":[null]}
1
+ {"version":3,"sources":["c:\\Users\\Dell\\Desktop\\Projects\\telebirr-nodejs\\dist\\index.cjs"],"names":[],"mappings":"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,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA","file":"C:\\Users\\Dell\\Desktop\\Projects\\telebirr-nodejs\\dist\\index.cjs","sourcesContent":[null]}
package/dist/index.js CHANGED
@@ -259,13 +259,11 @@ function requestCreateOrder(fabricToken, input, config) {
259
259
  if (status < 200 || status >= 300) {
260
260
  return reject({
261
261
  message: "Telebirr preorder request failed",
262
- status,
263
262
  data: parsed
264
263
  });
265
264
  }
266
265
  resolve({
267
266
  message: "Telebirr preorder request successful",
268
- status,
269
267
  data: parsed
270
268
  });
271
269
  });
@@ -274,8 +272,7 @@ function requestCreateOrder(fabricToken, input, config) {
274
272
  req.on("error", (err) => {
275
273
  reject({
276
274
  message: "Telebirr preorder network error",
277
- cause: err,
278
- code: err.code
275
+ data: err
279
276
  });
280
277
  });
281
278
  req.write(payload);
@@ -329,22 +326,16 @@ function requestRefund(fabricToken, input, config) {
329
326
  res.on("end", () => {
330
327
  const status = res.statusCode || 0;
331
328
  let parsed = raw;
332
- try {
333
- parsed = JSON.parse(raw);
334
- } catch {
335
- }
329
+ parsed = JSON.parse(raw);
336
330
  if (status < 200 || status >= 300) {
337
331
  return reject({
338
332
  message: "Telebirr refund request failed",
339
- status,
340
- data: parsed,
341
- headers: res.headers
333
+ data: parsed
342
334
  });
343
335
  }
344
336
  resolve({
345
337
  data: parsed,
346
- status,
347
- headers: res.headers
338
+ message: "Telebirr refund request successful"
348
339
  });
349
340
  });
350
341
  }
@@ -352,8 +343,7 @@ function requestRefund(fabricToken, input, config) {
352
343
  req.on("error", (err) => {
353
344
  reject({
354
345
  message: "Telebirr refund network error",
355
- cause: err,
356
- code: err.code
346
+ data: err
357
347
  });
358
348
  });
359
349
  req.write(payload);
@@ -403,22 +393,16 @@ function requestQueryOrder(fabricToken, merchOrderId, config) {
403
393
  res.on("end", () => {
404
394
  const status = res.statusCode || 0;
405
395
  let parsed = raw;
406
- try {
407
- parsed = JSON.parse(raw);
408
- } catch {
409
- }
396
+ parsed = JSON.parse(raw);
410
397
  if (status < 200 || status >= 300) {
411
398
  return reject({
412
399
  message: "Telebirr queryOrder request failed",
413
- status,
414
- data: parsed,
415
- headers: res.headers
400
+ data: parsed
416
401
  });
417
402
  }
418
403
  resolve({
419
404
  data: parsed,
420
- status,
421
- headers: res.headers
405
+ message: "Telebirr queryOrder request successful"
422
406
  });
423
407
  });
424
408
  }
@@ -426,8 +410,7 @@ function requestQueryOrder(fabricToken, merchOrderId, config) {
426
410
  req.on("error", (err) => {
427
411
  reject({
428
412
  message: "Telebirr queryOrder network error",
429
- cause: err,
430
- code: err.code
413
+ data: err
431
414
  });
432
415
  });
433
416
  req.write(payload);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/credentials.ts","../src/utils/keys.ts","../src/services/requestToken.ts","../src/constants/urls.ts","../src/services/requestCreateOrder.ts","../src/utils/nonce.ts","../src/utils/timestamp.ts","../src/utils/signature.ts","../src/services/requestRefundOrder.ts","../src/services/requestQueryOrder.ts","../src/client/c2b.ts"],"sourcesContent":["import fs from \"fs\";\r\nimport path from \"path\";\r\nimport { randomUUID, randomBytes } from \"crypto\";\r\nimport { customAlphabet } from \"nanoid\";\r\nimport { generatePrivateKey } from \"./keys\";\r\nimport { GeneratedCredentials } from \"../types/credentials\";\r\n\r\nconst numeric16 = customAlphabet(\"0123456789\", 16);\r\nconst numeric6 = customAlphabet(\"0123456789\", 6);\r\n\r\nconst ENV_FILE_NAME = \".env\";\r\n\r\nexport function generateCredentials(): GeneratedCredentials {\r\n const envPath = path.join(process.cwd(), ENV_FILE_NAME);\r\n\r\n const existingEnv = fs.existsSync(envPath)\r\n ? fs.readFileSync(envPath, \"utf8\")\r\n : \"\";\r\n\r\n const existingMap = new Map<string, string>();\r\n\r\n existingEnv.split(\"\\n\").forEach((line) => {\r\n const [key, ...rest] = line.split(\"=\");\r\n if (!key || rest.length === 0) return;\r\n existingMap.set(key.trim(), rest.join(\"=\").trim());\r\n });\r\n\r\n const getOrGenerate = (key: string, generator: () => string): string => {\r\n if (process.env[key]) return process.env[key]!;\r\n if (existingMap.has(key)) return existingMap.get(key)!;\r\n return generator();\r\n };\r\n\r\n const generated: GeneratedCredentials = {\r\n FABRIC_APP_ID: getOrGenerate(\"FABRIC_APP_ID\", () => randomUUID()),\r\n FABRIC_APP_SECRET: getOrGenerate(\"FABRIC_APP_SECRET\", () =>\r\n randomBytes(16).toString(\"hex\")\r\n ),\r\n MERCHANT_APP_ID: getOrGenerate(\"MERCHANT_APP_ID\", () => numeric16()),\r\n MERCHANT_CODE: getOrGenerate(\"MERCHANT_CODE\", () => numeric6()),\r\n PRIVATE_KEY: \"\",\r\n };\r\n\r\n // Handle private key\r\n if (process.env.PRIVATE_KEY || existingMap.has(\"PRIVATE_KEY\")) {\r\n const stored = process.env.PRIVATE_KEY ?? existingMap.get(\"PRIVATE_KEY\")!;\r\n\r\n generated.PRIVATE_KEY = stored\r\n .replace(/\\\\n/g, \"\\n\")\r\n .replace(/^\"(.*)\"$/, \"$1\");\r\n } else {\r\n const rawPrivateKey = generatePrivateKey();\r\n generated.PRIVATE_KEY = rawPrivateKey;\r\n }\r\n\r\n // Write missing entries only\r\n const entries: string[] = [];\r\n Object.entries(generated).forEach(([key, value]) => {\r\n if (key === \"PRIVATE_KEY\") return;\r\n if (!existingMap.has(key)) {\r\n entries.push(`${key}=\"${value}\"`);\r\n }\r\n });\r\n\r\n if (!existingMap.has(\"PRIVATE_KEY\")) {\r\n const escaped = generated.PRIVATE_KEY.replace(/\\n/g, \"\\\\n\");\r\n entries.push(`PRIVATE_KEY=\"${escaped}\"`);\r\n }\r\n\r\n if (entries.length > 0) {\r\n const header =\r\n existingEnv.trim().length === 0\r\n ? \"# Telebirr Simulator Credentials\\n\"\r\n : \"\\n\\n# Telebirr Simulator Credentials\\n\";\r\n\r\n fs.writeFileSync(\r\n envPath,\r\n existingEnv + header + entries.join(\"\\n\") + \"\\n\",\r\n \"utf8\"\r\n );\r\n }\r\n\r\n return generated;\r\n}\r\n","import { generateKeyPairSync } from \"crypto\";\r\nimport fs from \"fs\";\r\nimport path from \"path\";\r\n\r\nexport function generatePrivateKey(): string {\r\n const { privateKey } = generateKeyPairSync(\"rsa\", {\r\n modulusLength: 2048,\r\n privateKeyEncoding: {\r\n type: \"pkcs1\",\r\n format: \"pem\",\r\n },\r\n publicKeyEncoding: {\r\n type: \"pkcs1\",\r\n format: \"pem\",\r\n },\r\n });\r\n\r\n return privateKey;\r\n}\r\n\r\nexport interface KeyPairOptions {\r\n dir?: string; // default: process.cwd()\r\n privateKeyName?: string;\r\n publicKeyName?: string;\r\n overwrite?: boolean; // default: false\r\n}\r\n\r\nexport function generateKeys(options: KeyPairOptions = {}): {\r\n privateKeyPath: string;\r\n publicKeyPath: string;\r\n} {\r\n const {\r\n dir = process.cwd(),\r\n privateKeyName = \"telebirr_private.pem\",\r\n publicKeyName = \"telebirr_public.pem\",\r\n overwrite = false,\r\n } = options;\r\n\r\n const privateKeyPath = path.join(dir, privateKeyName);\r\n const publicKeyPath = path.join(dir, publicKeyName);\r\n\r\n const exists = fs.existsSync(privateKeyPath) && fs.existsSync(publicKeyPath);\r\n\r\n if (exists && !overwrite) {\r\n return { privateKeyPath, publicKeyPath };\r\n }\r\n\r\n const { privateKey, publicKey } = generateKeyPairSync(\"rsa\", {\r\n modulusLength: 2048,\r\n publicKeyEncoding: {\r\n type: \"pkcs1\",\r\n format: \"pem\",\r\n },\r\n privateKeyEncoding: {\r\n type: \"pkcs1\",\r\n format: \"pem\",\r\n },\r\n });\r\n\r\n fs.writeFileSync(privateKeyPath, privateKey, { mode: 0o600 });\r\n fs.writeFileSync(publicKeyPath, publicKey);\r\n\r\n return { privateKeyPath, publicKeyPath };\r\n}\r\n","import http from \"http\";\r\nimport https from \"https\";\r\nimport { TELEBIRR_URLS } from \"../constants/urls\";\r\nimport { TelebirrConfig } from \"../types/telebirrConfig\";\r\n\r\nexport function requestToken(config: TelebirrConfig) {\r\n const isHttps = TELEBIRR_URLS[config.mode].apiBase.startsWith(\"https://\");\r\n const client = isHttps ? https : http;\r\n return new Promise((resolve, reject) => {\r\n const req = client.request(\r\n ` ${TELEBIRR_URLS[config.mode].apiBase}/payment/v1/token`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-APP-Key\": config.appId,\r\n },\r\n ...(isHttps && { rejectUnauthorized: false }),\r\n },\r\n (res) => {\r\n let body = \"\";\r\n\r\n res.on(\"data\", (chunk) => (body += chunk));\r\n res.on(\"end\", () => resolve(body));\r\n }\r\n );\r\n\r\n req.on(\"error\", reject);\r\n req.write(JSON.stringify({ appSecret: config.appSecret }));\r\n req.end();\r\n });\r\n}\r\n","export const TELEBIRR_URLS = {\r\n sandbox: {\r\n apiBase:\r\n \"https://developerportal.ethiotelebirr.et:38443/apiaccess/payment/gateway\",\r\n webBase:\r\n \"https://developerportal.ethiotelebirr.et:38443/payment/web/paygate?\",\r\n },\r\n production: {\r\n apiBase:\r\n \"https://telebirrappcube.ethiomobilemoney.et:38443/apiaccess/payment/gateway\",\r\n webBase:\r\n \"https://telebirrappcube.ethiomobilemoney.et:38443/payment/web/paygate?\",\r\n },\r\n simulate: {\r\n apiBase: \"https://telebirr-node-simulator.onrender.com\",\r\n webBase: \"https://telebirr-node-simulator.onrender.com/web/?\",\r\n },\r\n};\r\n\r\nexport const CHECKOUT_OTHER_PARAMS = \"&version=1.0&trade_type=Checkout\";\r\n","import http from \"http\";\r\nimport https from \"https\";\r\nimport {\r\n GenerateCheckoutUrlInput,\r\n CreateOrderResponse,\r\n TelebirrPreorderRequest,\r\n} from \"../types/createOrder\";\r\nimport { createNonceStr } from \"../utils/nonce\";\r\nimport { createTimestamp } from \"../utils/timestamp\";\r\nimport { signRequest } from \"../utils/signature\";\r\nimport { TelebirrMode } from \"../types/telebirrConfig\";\r\nimport { TELEBIRR_URLS } from \"../constants/urls\";\r\n\r\nexport function requestCreateOrder(\r\n fabricToken: string,\r\n input: GenerateCheckoutUrlInput,\r\n config: {\r\n mode: TelebirrMode;\r\n appId: string;\r\n appSecret: string;\r\n merchantAppId: string;\r\n merchantCode: string;\r\n notifyUrl: string;\r\n redirectUrl: string;\r\n privateKey: string;\r\n http: boolean;\r\n }\r\n): Promise<{\r\n message: string;\r\n data: CreateOrderResponse;\r\n status: number;\r\n headers?: http.IncomingHttpHeaders;\r\n}> {\r\n const reqBody: TelebirrPreorderRequest = {\r\n timestamp: createTimestamp(),\r\n nonce_str: createNonceStr(),\r\n method: \"payment.preorder\",\r\n version: \"1.0\",\r\n biz_content: {\r\n appid: config.merchantAppId,\r\n merch_code: config.merchantCode,\r\n merch_order_id: input.merchOrderId,\r\n notify_url: config.notifyUrl,\r\n redirect_url: config.redirectUrl,\r\n trade_type: \"Checkout\",\r\n title: input.title,\r\n total_amount: input.amount,\r\n trans_currency: \"ETB\",\r\n timeout_express: \"120m\",\r\n business_type: \"BuyGoods\",\r\n payee_type: \"3000\",\r\n payee_identifier: config.merchantCode,\r\n payee_identifier_type: \"04\",\r\n callback_info: \"From web\",\r\n },\r\n };\r\n\r\n reqBody.sign = signRequest(reqBody, config.privateKey);\r\n reqBody.sign_type = \"SHA256WithRSA\";\r\n\r\n const payload = JSON.stringify(reqBody);\r\n\r\n const baseUrl = TELEBIRR_URLS[config.mode].apiBase;\r\n const isHttps = baseUrl.startsWith(\"https://\");\r\n const client = isHttps ? https : http;\r\n\r\n return new Promise((resolve, reject) => {\r\n const req = client.request(\r\n `${baseUrl}/payment/v1/merchant/preOrder`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Content-Length\": Buffer.byteLength(payload),\r\n \"X-APP-Key\": config.appId,\r\n Authorization: fabricToken,\r\n },\r\n ...(isHttps && { rejectUnauthorized: false }),\r\n },\r\n (res) => {\r\n let raw = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n raw += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const status = res.statusCode || 0;\r\n let parsed: any = raw;\r\n\r\n parsed = JSON.parse(raw);\r\n\r\n if (status < 200 || status >= 300) {\r\n return reject({\r\n message: \"Telebirr preorder request failed\",\r\n status,\r\n data: parsed,\r\n });\r\n }\r\n\r\n resolve({\r\n message: \"Telebirr preorder request successful\",\r\n status,\r\n data: parsed,\r\n });\r\n });\r\n }\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject({\r\n message: \"Telebirr preorder network error\",\r\n cause: err,\r\n code: (err as any).code,\r\n });\r\n });\r\n\r\n req.write(payload);\r\n req.end();\r\n });\r\n}\r\n","import { randomBytes } from \"crypto\";\r\n\r\nexport function createNonceStr(): string {\r\n const bytes = Math.ceil(16);\r\n return randomBytes(bytes).toString(\"hex\").slice(0, 32);\r\n}\r\n","export function createTimestamp(): string {\r\n return Math.floor(Date.now() / 1000).toString();\r\n}\r\n","import crypto from \"crypto\";\r\n\r\nfunction flattenParams(params: Record<string, any>): Record<string, string> {\r\n const flat: Record<string, string> = {};\r\n\r\n for (const key in params) {\r\n const value = params[key];\r\n\r\n if (\r\n value === undefined ||\r\n value === null ||\r\n value === \"\" ||\r\n key === \"sign\" ||\r\n key === \"signType\" ||\r\n key === \"sign_type\"\r\n ) {\r\n continue;\r\n }\r\n\r\n if (key === \"biz_content\" && typeof value === \"object\") {\r\n for (const bizKey in value) {\r\n const bizValue = value[bizKey];\r\n if (bizValue !== undefined && bizValue !== null && bizValue !== \"\") {\r\n flat[bizKey] = String(bizValue);\r\n }\r\n }\r\n } else {\r\n flat[key] = String(value);\r\n }\r\n }\r\n\r\n return flat;\r\n}\r\n\r\nexport function buildSignString(params: Record<string, any>): string {\r\n const flat = flattenParams(params);\r\n\r\n return Object.keys(flat)\r\n .sort()\r\n .map((key) => `${key}=${flat[key]}`)\r\n .join(\"&\");\r\n}\r\n\r\nexport function signRequest(\r\n data: Record<string, any>,\r\n privateKey: string\r\n): string {\r\n const signString = buildSignString(data);\r\n\r\n return crypto\r\n .createSign(\"RSA-SHA256\")\r\n .update(signString, \"utf8\")\r\n .sign(privateKey, \"base64\");\r\n}\r\n","import http from \"http\";\r\nimport https from \"https\";\r\nimport { createNonceStr } from \"../utils/nonce\";\r\nimport { createTimestamp } from \"../utils/timestamp\";\r\nimport { signRequest } from \"../utils/signature\";\r\nimport { TelebirrMode } from \"../types/telebirrConfig\";\r\nimport {\r\n RefundInput,\r\n RefundResponse,\r\n TelebirrRefundRequest,\r\n} from \"../types/refund\";\r\nimport { TELEBIRR_URLS } from \"../constants/urls\";\r\n\r\nexport function requestRefund(\r\n fabricToken: string,\r\n input: RefundInput,\r\n config: {\r\n mode: TelebirrMode;\r\n appId: string;\r\n merchantAppId: string;\r\n merchantCode: string;\r\n privateKey: string;\r\n http: boolean;\r\n }\r\n): Promise<{\r\n data: RefundResponse;\r\n status: number;\r\n headers: http.IncomingHttpHeaders;\r\n}> {\r\n const reqBody: TelebirrRefundRequest = {\r\n timestamp: createTimestamp(),\r\n nonce_str: createNonceStr(),\r\n method: \"payment.refund\",\r\n version: \"1.0\",\r\n biz_content: {\r\n appid: config.merchantAppId,\r\n merch_code: config.merchantCode,\r\n merch_order_id: input.merchOrderId,\r\n trans_currency: \"ETB\",\r\n actual_amount: input.amount,\r\n refund_request_no: input.refundRequestNo,\r\n refund_reason: input.refundReason,\r\n },\r\n };\r\n\r\n reqBody.sign = signRequest(reqBody, config.privateKey);\r\n reqBody.sign_type = \"SHA256WithRSA\";\r\n\r\n const payload = JSON.stringify(reqBody);\r\n\r\n const baseUrl = TELEBIRR_URLS[config.mode].apiBase;\r\n const isHttps = baseUrl.startsWith(\"https://\");\r\n const client = isHttps ? https : http;\r\n\r\n return new Promise((resolve, reject) => {\r\n const req = client.request(\r\n `${baseUrl}/payment/v1/merchant/refund`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Content-Length\": Buffer.byteLength(payload),\r\n \"X-APP-Key\": config.appId,\r\n Authorization: fabricToken,\r\n },\r\n ...(isHttps && { rejectUnauthorized: false }),\r\n },\r\n (res) => {\r\n let raw = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n raw += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const status = res.statusCode || 0;\r\n let parsed: any = raw;\r\n\r\n try {\r\n parsed = JSON.parse(raw);\r\n } catch {\r\n // keep raw string if JSON parsing fails\r\n }\r\n\r\n if (status < 200 || status >= 300) {\r\n return reject({\r\n message: \"Telebirr refund request failed\",\r\n status,\r\n data: parsed,\r\n headers: res.headers,\r\n });\r\n }\r\n\r\n resolve({\r\n data: parsed,\r\n status,\r\n headers: res.headers,\r\n });\r\n });\r\n }\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject({\r\n message: \"Telebirr refund network error\",\r\n cause: err,\r\n code: (err as any).code,\r\n });\r\n });\r\n\r\n req.write(payload);\r\n req.end();\r\n });\r\n}\r\n","import http from \"http\";\r\nimport https from \"https\";\r\nimport {\r\n TelebirrQueryorderRequest,\r\n QueryOrderResponse,\r\n} from \"../types/queryOrder\";\r\nimport { createNonceStr } from \"../utils/nonce\";\r\nimport { createTimestamp } from \"../utils/timestamp\";\r\nimport { signRequest } from \"../utils/signature\";\r\nimport { TelebirrMode } from \"../types/telebirrConfig\";\r\nimport { TELEBIRR_URLS } from \"../constants/urls\";\r\n\r\nexport function requestQueryOrder(\r\n fabricToken: string,\r\n merchOrderId: string,\r\n config: {\r\n appId: string;\r\n appSecret: string;\r\n merchantAppId: string;\r\n merchantCode: string;\r\n privateKey: string;\r\n notifyUrl: string;\r\n redirectUrl: string;\r\n mode: TelebirrMode;\r\n http: boolean;\r\n }\r\n): Promise<{\r\n data: QueryOrderResponse;\r\n status: number;\r\n headers: http.IncomingHttpHeaders;\r\n}> {\r\n const reqBody: TelebirrQueryorderRequest = {\r\n timestamp: createTimestamp(),\r\n nonce_str: createNonceStr(),\r\n method: \"payment.queryorder\",\r\n version: \"1.0\",\r\n biz_content: {\r\n appid: config.merchantAppId,\r\n merch_code: config.merchantCode,\r\n merch_order_id: merchOrderId,\r\n },\r\n };\r\n\r\n reqBody.sign = signRequest(reqBody, config.privateKey);\r\n reqBody.sign_type = \"SHA256WithRSA\";\r\n\r\n const payload = JSON.stringify(reqBody);\r\n\r\n const baseUrl = TELEBIRR_URLS[config.mode].apiBase;\r\n const isHttps = baseUrl.startsWith(\"https://\");\r\n const client = isHttps ? https : http;\r\n\r\n return new Promise((resolve, reject) => {\r\n const req = client.request(\r\n `${baseUrl}/payment/v1/merchant/queryOrder`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Content-Length\": Buffer.byteLength(payload),\r\n \"X-APP-Key\": config.appId,\r\n Authorization: fabricToken,\r\n },\r\n ...(isHttps && { rejectUnauthorized: false }),\r\n },\r\n (res) => {\r\n let raw = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n raw += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const status = res.statusCode || 0;\r\n let parsed: any = raw;\r\n\r\n try {\r\n parsed = JSON.parse(raw);\r\n } catch {\r\n // keep raw if parsing fails\r\n }\r\n\r\n if (status < 200 || status >= 300) {\r\n return reject({\r\n message: \"Telebirr queryOrder request failed\",\r\n status,\r\n data: parsed,\r\n headers: res.headers,\r\n });\r\n }\r\n\r\n resolve({\r\n data: parsed,\r\n status,\r\n headers: res.headers,\r\n });\r\n });\r\n }\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject({\r\n message: \"Telebirr queryOrder network error\",\r\n cause: err,\r\n code: (err as any).code,\r\n });\r\n });\r\n\r\n req.write(payload);\r\n req.end();\r\n });\r\n}\r\n","import { TelebirrConfig } from \"../types/telebirrConfig\";\r\nimport { FabricTokenResponse } from \"../types/fabricToken\";\r\nimport { GenerateCheckoutUrlInput } from \"../types/createOrder\";\r\nimport { generateCredentials } from \"../utils/credentials\";\r\nimport { QueryOrderResponse } from \"../types/queryOrder\";\r\nimport { RefundInput, RefundResponse } from \"../types/refund\";\r\nimport { requestToken } from \"../services/requestToken\";\r\nimport { requestCreateOrder } from \"../services/requestCreateOrder\";\r\nimport { requestRefund } from \"../services/requestRefundOrder\";\r\nimport { requestQueryOrder } from \"../services/requestQueryOrder\";\r\nimport { TELEBIRR_URLS, CHECKOUT_OTHER_PARAMS } from \"../constants/urls\";\r\nimport { signRequest } from \"../utils/signature\";\r\nimport { createTimestamp } from \"../utils/timestamp\";\r\nimport { createNonceStr } from \"../utils/nonce\";\r\nimport { GeneratedCredentials } from \"../types/credentials\";\r\n\r\nexport class C2B {\r\n private token?: typeof FabricTokenResponse;\r\n private config: TelebirrConfig;\r\n\r\n constructor(config: TelebirrConfig) {\r\n if (config.mode === \"simulate\") {\r\n const credentials: GeneratedCredentials = generateCredentials();\r\n\r\n this.config = {\r\n ...config,\r\n appId: credentials.FABRIC_APP_ID,\r\n appSecret: credentials.FABRIC_APP_SECRET,\r\n merchantAppId: credentials.MERCHANT_APP_ID,\r\n merchantCode: credentials.MERCHANT_CODE,\r\n privateKey: credentials.PRIVATE_KEY,\r\n };\r\n } else {\r\n this.config = config;\r\n }\r\n }\r\n\r\n async getFabricToken(): Promise<any> {\r\n if (this.token && !this.isTokenExpired(this.token)) {\r\n return this.token;\r\n }\r\n\r\n let token: any = await requestToken(this.config);\r\n token = JSON.parse(token);\r\n if (!token) return;\r\n this.token = token;\r\n return token;\r\n }\r\n\r\n private createCheckoutUrl(prepayId: string): string {\r\n const map = {\r\n appid: this.config.merchantAppId,\r\n merch_code: this.config.merchantCode,\r\n nonce_str: createNonceStr(),\r\n prepay_id: prepayId,\r\n timestamp: createTimestamp(),\r\n };\r\n\r\n const sign = signRequest(map, this.config.privateKey);\r\n\r\n const rawRequest = [\r\n `appid=${map.appid}`,\r\n `merch_code=${map.merch_code}`,\r\n `nonce_str=${map.nonce_str}`,\r\n `prepay_id=${map.prepay_id}`,\r\n `timestamp=${map.timestamp}`,\r\n `sign=${sign}`,\r\n `sign_type=SHA256WithRSA`,\r\n ].join(\"&\");\r\n\r\n const webBase = TELEBIRR_URLS[this.config.mode].webBase;\r\n\r\n return webBase + rawRequest + CHECKOUT_OTHER_PARAMS;\r\n }\r\n async checkout(input: GenerateCheckoutUrlInput): Promise<string | void> {\r\n const token = await this.getFabricToken();\r\n\r\n if (!token) return;\r\n\r\n let response: any = await requestCreateOrder(\r\n token.token,\r\n input,\r\n this.config\r\n );\r\n if (!response) return;\r\n\r\n return this.createCheckoutUrl(response.data.biz_content.prepay_id);\r\n }\r\n\r\n async queryOrder(input: string): Promise<QueryOrderResponse | void> {\r\n let token = await this.getFabricToken();\r\n\r\n if (!token) return;\r\n\r\n const response: any = await requestQueryOrder(\r\n token.token,\r\n input,\r\n this.config\r\n );\r\n\r\n return response.data;\r\n }\r\n async refundOrder(input: RefundInput): Promise<RefundResponse | void> {\r\n const token = await this.getFabricToken();\r\n if (!token) return;\r\n const response: any = await requestRefund(token.token, input, this.config);\r\n\r\n return response.data;\r\n }\r\n\r\n private static readonly TOKEN_EXPIRY_SAFETY_WINDOW_MS = 5 * 60 * 1000;\r\n\r\n private isTokenExpired(token?: typeof FabricTokenResponse): boolean {\r\n if (!token) {\r\n return true;\r\n }\r\n\r\n const now = Date.now();\r\n const expiry = this.parseTelebirrDate(token.expirationDate).getTime();\r\n\r\n return now >= expiry - C2B.TOKEN_EXPIRY_SAFETY_WINDOW_MS;\r\n }\r\n\r\n private parseTelebirrDate(value: string): Date {\r\n const year = Number(value.slice(0, 4));\r\n const month = Number(value.slice(4, 6)) - 1;\r\n const day = Number(value.slice(6, 8));\r\n const hour = Number(value.slice(8, 10));\r\n const minute = Number(value.slice(10, 12));\r\n const second = Number(value.slice(12, 14));\r\n\r\n return new Date(Date.UTC(year, month, day, hour, minute, second));\r\n }\r\n}\r\n"],"mappings":"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","names":["fs","path","path","fs","http","https","randomBytes","https","http","http","https","https","http","http","https","https","http"]}
1
+ {"version":3,"sources":["../src/utils/credentials.ts","../src/utils/keys.ts","../src/services/requestToken.ts","../src/constants/urls.ts","../src/services/requestCreateOrder.ts","../src/utils/nonce.ts","../src/utils/timestamp.ts","../src/utils/signature.ts","../src/services/requestRefundOrder.ts","../src/services/requestQueryOrder.ts","../src/client/c2b.ts"],"sourcesContent":["import fs from \"fs\";\r\nimport path from \"path\";\r\nimport { randomUUID, randomBytes } from \"crypto\";\r\nimport { customAlphabet } from \"nanoid\";\r\nimport { generatePrivateKey } from \"./keys\";\r\nimport { GeneratedCredentials } from \"../types/credentials\";\r\n\r\nconst numeric16 = customAlphabet(\"0123456789\", 16);\r\nconst numeric6 = customAlphabet(\"0123456789\", 6);\r\n\r\nconst ENV_FILE_NAME = \".env\";\r\n\r\nexport function generateCredentials(): GeneratedCredentials {\r\n const envPath = path.join(process.cwd(), ENV_FILE_NAME);\r\n\r\n const existingEnv = fs.existsSync(envPath)\r\n ? fs.readFileSync(envPath, \"utf8\")\r\n : \"\";\r\n\r\n const existingMap = new Map<string, string>();\r\n\r\n existingEnv.split(\"\\n\").forEach((line) => {\r\n const [key, ...rest] = line.split(\"=\");\r\n if (!key || rest.length === 0) return;\r\n existingMap.set(key.trim(), rest.join(\"=\").trim());\r\n });\r\n\r\n const getOrGenerate = (key: string, generator: () => string): string => {\r\n if (process.env[key]) return process.env[key]!;\r\n if (existingMap.has(key)) return existingMap.get(key)!;\r\n return generator();\r\n };\r\n\r\n const generated: GeneratedCredentials = {\r\n FABRIC_APP_ID: getOrGenerate(\"FABRIC_APP_ID\", () => randomUUID()),\r\n FABRIC_APP_SECRET: getOrGenerate(\"FABRIC_APP_SECRET\", () =>\r\n randomBytes(16).toString(\"hex\")\r\n ),\r\n MERCHANT_APP_ID: getOrGenerate(\"MERCHANT_APP_ID\", () => numeric16()),\r\n MERCHANT_CODE: getOrGenerate(\"MERCHANT_CODE\", () => numeric6()),\r\n PRIVATE_KEY: \"\",\r\n };\r\n\r\n // Handle private key\r\n if (process.env.PRIVATE_KEY || existingMap.has(\"PRIVATE_KEY\")) {\r\n const stored = process.env.PRIVATE_KEY ?? existingMap.get(\"PRIVATE_KEY\")!;\r\n\r\n generated.PRIVATE_KEY = stored\r\n .replace(/\\\\n/g, \"\\n\")\r\n .replace(/^\"(.*)\"$/, \"$1\");\r\n } else {\r\n const rawPrivateKey = generatePrivateKey();\r\n generated.PRIVATE_KEY = rawPrivateKey;\r\n }\r\n\r\n // Write missing entries only\r\n const entries: string[] = [];\r\n Object.entries(generated).forEach(([key, value]) => {\r\n if (key === \"PRIVATE_KEY\") return;\r\n if (!existingMap.has(key)) {\r\n entries.push(`${key}=\"${value}\"`);\r\n }\r\n });\r\n\r\n if (!existingMap.has(\"PRIVATE_KEY\")) {\r\n const escaped = generated.PRIVATE_KEY.replace(/\\n/g, \"\\\\n\");\r\n entries.push(`PRIVATE_KEY=\"${escaped}\"`);\r\n }\r\n\r\n if (entries.length > 0) {\r\n const header =\r\n existingEnv.trim().length === 0\r\n ? \"# Telebirr Simulator Credentials\\n\"\r\n : \"\\n\\n# Telebirr Simulator Credentials\\n\";\r\n\r\n fs.writeFileSync(\r\n envPath,\r\n existingEnv + header + entries.join(\"\\n\") + \"\\n\",\r\n \"utf8\"\r\n );\r\n }\r\n\r\n return generated;\r\n}\r\n","import { generateKeyPairSync } from \"crypto\";\r\nimport fs from \"fs\";\r\nimport path from \"path\";\r\n\r\nexport function generatePrivateKey(): string {\r\n const { privateKey } = generateKeyPairSync(\"rsa\", {\r\n modulusLength: 2048,\r\n privateKeyEncoding: {\r\n type: \"pkcs1\",\r\n format: \"pem\",\r\n },\r\n publicKeyEncoding: {\r\n type: \"pkcs1\",\r\n format: \"pem\",\r\n },\r\n });\r\n\r\n return privateKey;\r\n}\r\n\r\nexport interface KeyPairOptions {\r\n dir?: string; // default: process.cwd()\r\n privateKeyName?: string;\r\n publicKeyName?: string;\r\n overwrite?: boolean; // default: false\r\n}\r\n\r\nexport function generateKeys(options: KeyPairOptions = {}): {\r\n privateKeyPath: string;\r\n publicKeyPath: string;\r\n} {\r\n const {\r\n dir = process.cwd(),\r\n privateKeyName = \"telebirr_private.pem\",\r\n publicKeyName = \"telebirr_public.pem\",\r\n overwrite = false,\r\n } = options;\r\n\r\n const privateKeyPath = path.join(dir, privateKeyName);\r\n const publicKeyPath = path.join(dir, publicKeyName);\r\n\r\n const exists = fs.existsSync(privateKeyPath) && fs.existsSync(publicKeyPath);\r\n\r\n if (exists && !overwrite) {\r\n return { privateKeyPath, publicKeyPath };\r\n }\r\n\r\n const { privateKey, publicKey } = generateKeyPairSync(\"rsa\", {\r\n modulusLength: 2048,\r\n publicKeyEncoding: {\r\n type: \"pkcs1\",\r\n format: \"pem\",\r\n },\r\n privateKeyEncoding: {\r\n type: \"pkcs1\",\r\n format: \"pem\",\r\n },\r\n });\r\n\r\n fs.writeFileSync(privateKeyPath, privateKey, { mode: 0o600 });\r\n fs.writeFileSync(publicKeyPath, publicKey);\r\n\r\n return { privateKeyPath, publicKeyPath };\r\n}\r\n","import http from \"http\";\r\nimport https from \"https\";\r\nimport { TELEBIRR_URLS } from \"../constants/urls\";\r\nimport { TelebirrConfig } from \"../types/telebirrConfig\";\r\n\r\nexport function requestToken(config: TelebirrConfig) {\r\n const isHttps = TELEBIRR_URLS[config.mode].apiBase.startsWith(\"https://\");\r\n const client = isHttps ? https : http;\r\n return new Promise((resolve, reject) => {\r\n const req = client.request(\r\n ` ${TELEBIRR_URLS[config.mode].apiBase}/payment/v1/token`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-APP-Key\": config.appId,\r\n },\r\n ...(isHttps && { rejectUnauthorized: false }),\r\n },\r\n (res) => {\r\n let body = \"\";\r\n\r\n res.on(\"data\", (chunk) => (body += chunk));\r\n res.on(\"end\", () => resolve(body));\r\n }\r\n );\r\n\r\n req.on(\"error\", reject);\r\n req.write(JSON.stringify({ appSecret: config.appSecret }));\r\n req.end();\r\n });\r\n}\r\n","export const TELEBIRR_URLS = {\r\n sandbox: {\r\n apiBase:\r\n \"https://developerportal.ethiotelebirr.et:38443/apiaccess/payment/gateway\",\r\n webBase:\r\n \"https://developerportal.ethiotelebirr.et:38443/payment/web/paygate?\",\r\n },\r\n production: {\r\n apiBase:\r\n \"https://telebirrappcube.ethiomobilemoney.et:38443/apiaccess/payment/gateway\",\r\n webBase:\r\n \"https://telebirrappcube.ethiomobilemoney.et:38443/payment/web/paygate?\",\r\n },\r\n simulate: {\r\n apiBase: \"https://telebirr-node-simulator.onrender.com\",\r\n webBase: \"https://telebirr-node-simulator.onrender.com/web/?\",\r\n },\r\n};\r\n\r\nexport const CHECKOUT_OTHER_PARAMS = \"&version=1.0&trade_type=Checkout\";\r\n","import http from \"http\";\r\nimport https from \"https\";\r\nimport {\r\n GenerateCheckoutUrlInput,\r\n CreateOrderResponse,\r\n TelebirrPreorderRequest,\r\n} from \"../types/createOrder\";\r\nimport { createNonceStr } from \"../utils/nonce\";\r\nimport { createTimestamp } from \"../utils/timestamp\";\r\nimport { signRequest } from \"../utils/signature\";\r\nimport { TelebirrMode } from \"../types/telebirrConfig\";\r\nimport { TELEBIRR_URLS } from \"../constants/urls\";\r\n\r\nexport function requestCreateOrder(\r\n fabricToken: string,\r\n input: GenerateCheckoutUrlInput,\r\n config: {\r\n mode: TelebirrMode;\r\n appId: string;\r\n appSecret: string;\r\n merchantAppId: string;\r\n merchantCode: string;\r\n notifyUrl: string;\r\n redirectUrl: string;\r\n privateKey: string;\r\n http: boolean;\r\n }\r\n): Promise<{\r\n message: string;\r\n data: CreateOrderResponse;\r\n}> {\r\n const reqBody: TelebirrPreorderRequest = {\r\n timestamp: createTimestamp(),\r\n nonce_str: createNonceStr(),\r\n method: \"payment.preorder\",\r\n version: \"1.0\",\r\n biz_content: {\r\n appid: config.merchantAppId,\r\n merch_code: config.merchantCode,\r\n merch_order_id: input.merchOrderId,\r\n notify_url: config.notifyUrl,\r\n redirect_url: config.redirectUrl,\r\n trade_type: \"Checkout\",\r\n title: input.title,\r\n total_amount: input.amount,\r\n trans_currency: \"ETB\",\r\n timeout_express: \"120m\",\r\n business_type: \"BuyGoods\",\r\n payee_type: \"3000\",\r\n payee_identifier: config.merchantCode,\r\n payee_identifier_type: \"04\",\r\n callback_info: \"From web\",\r\n },\r\n };\r\n\r\n reqBody.sign = signRequest(reqBody, config.privateKey);\r\n reqBody.sign_type = \"SHA256WithRSA\";\r\n\r\n const payload = JSON.stringify(reqBody);\r\n\r\n const baseUrl = TELEBIRR_URLS[config.mode].apiBase;\r\n const isHttps = baseUrl.startsWith(\"https://\");\r\n const client = isHttps ? https : http;\r\n\r\n return new Promise((resolve, reject) => {\r\n const req = client.request(\r\n `${baseUrl}/payment/v1/merchant/preOrder`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Content-Length\": Buffer.byteLength(payload),\r\n \"X-APP-Key\": config.appId,\r\n Authorization: fabricToken,\r\n },\r\n ...(isHttps && { rejectUnauthorized: false }),\r\n },\r\n (res) => {\r\n let raw = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n raw += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const status = res.statusCode || 0;\r\n let parsed: any = raw;\r\n\r\n parsed = JSON.parse(raw);\r\n\r\n if (status < 200 || status >= 300) {\r\n return reject({\r\n message: \"Telebirr preorder request failed\",\r\n data: parsed,\r\n });\r\n }\r\n\r\n resolve({\r\n message: \"Telebirr preorder request successful\",\r\n data: parsed,\r\n });\r\n });\r\n }\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject({\r\n message: \"Telebirr preorder network error\",\r\n data: err,\r\n });\r\n });\r\n\r\n req.write(payload);\r\n req.end();\r\n });\r\n}\r\n","import { randomBytes } from \"crypto\";\r\n\r\nexport function createNonceStr(): string {\r\n const bytes = Math.ceil(16);\r\n return randomBytes(bytes).toString(\"hex\").slice(0, 32);\r\n}\r\n","export function createTimestamp(): string {\r\n return Math.floor(Date.now() / 1000).toString();\r\n}\r\n","import crypto from \"crypto\";\r\n\r\nfunction flattenParams(params: Record<string, any>): Record<string, string> {\r\n const flat: Record<string, string> = {};\r\n\r\n for (const key in params) {\r\n const value = params[key];\r\n\r\n if (\r\n value === undefined ||\r\n value === null ||\r\n value === \"\" ||\r\n key === \"sign\" ||\r\n key === \"signType\" ||\r\n key === \"sign_type\"\r\n ) {\r\n continue;\r\n }\r\n\r\n if (key === \"biz_content\" && typeof value === \"object\") {\r\n for (const bizKey in value) {\r\n const bizValue = value[bizKey];\r\n if (bizValue !== undefined && bizValue !== null && bizValue !== \"\") {\r\n flat[bizKey] = String(bizValue);\r\n }\r\n }\r\n } else {\r\n flat[key] = String(value);\r\n }\r\n }\r\n\r\n return flat;\r\n}\r\n\r\nexport function buildSignString(params: Record<string, any>): string {\r\n const flat = flattenParams(params);\r\n\r\n return Object.keys(flat)\r\n .sort()\r\n .map((key) => `${key}=${flat[key]}`)\r\n .join(\"&\");\r\n}\r\n\r\nexport function signRequest(\r\n data: Record<string, any>,\r\n privateKey: string\r\n): string {\r\n const signString = buildSignString(data);\r\n\r\n return crypto\r\n .createSign(\"RSA-SHA256\")\r\n .update(signString, \"utf8\")\r\n .sign(privateKey, \"base64\");\r\n}\r\n","import http from \"http\";\r\nimport https from \"https\";\r\nimport { createNonceStr } from \"../utils/nonce\";\r\nimport { createTimestamp } from \"../utils/timestamp\";\r\nimport { signRequest } from \"../utils/signature\";\r\nimport { TelebirrMode } from \"../types/telebirrConfig\";\r\nimport {\r\n RefundInput,\r\n RefundResponse,\r\n TelebirrRefundRequest,\r\n} from \"../types/refund\";\r\nimport { TELEBIRR_URLS } from \"../constants/urls\";\r\n\r\nexport function requestRefund(\r\n fabricToken: string,\r\n input: RefundInput,\r\n config: {\r\n mode: TelebirrMode;\r\n appId: string;\r\n merchantAppId: string;\r\n merchantCode: string;\r\n privateKey: string;\r\n http: boolean;\r\n }\r\n): Promise<{\r\n data: RefundResponse;\r\n message: string;\r\n}> {\r\n const reqBody: TelebirrRefundRequest = {\r\n timestamp: createTimestamp(),\r\n nonce_str: createNonceStr(),\r\n method: \"payment.refund\",\r\n version: \"1.0\",\r\n biz_content: {\r\n appid: config.merchantAppId,\r\n merch_code: config.merchantCode,\r\n merch_order_id: input.merchOrderId,\r\n trans_currency: \"ETB\",\r\n actual_amount: input.amount,\r\n refund_request_no: input.refundRequestNo,\r\n refund_reason: input.refundReason,\r\n },\r\n };\r\n\r\n reqBody.sign = signRequest(reqBody, config.privateKey);\r\n reqBody.sign_type = \"SHA256WithRSA\";\r\n\r\n const payload = JSON.stringify(reqBody);\r\n\r\n const baseUrl = TELEBIRR_URLS[config.mode].apiBase;\r\n const isHttps = baseUrl.startsWith(\"https://\");\r\n const client = isHttps ? https : http;\r\n\r\n return new Promise((resolve, reject) => {\r\n const req = client.request(\r\n `${baseUrl}/payment/v1/merchant/refund`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Content-Length\": Buffer.byteLength(payload),\r\n \"X-APP-Key\": config.appId,\r\n Authorization: fabricToken,\r\n },\r\n ...(isHttps && { rejectUnauthorized: false }),\r\n },\r\n (res) => {\r\n let raw = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n raw += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const status = res.statusCode || 0;\r\n let parsed: any = raw;\r\n\r\n parsed = JSON.parse(raw);\r\n\r\n if (status < 200 || status >= 300) {\r\n return reject({\r\n message: \"Telebirr refund request failed\",\r\n\r\n data: parsed,\r\n });\r\n }\r\n\r\n resolve({\r\n data: parsed,\r\n\r\n message: \"Telebirr refund request successful\",\r\n });\r\n });\r\n }\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject({\r\n message: \"Telebirr refund network error\",\r\n data: err,\r\n });\r\n });\r\n\r\n req.write(payload);\r\n req.end();\r\n });\r\n}\r\n","import http from \"http\";\r\nimport https from \"https\";\r\nimport {\r\n TelebirrQueryorderRequest,\r\n QueryOrderResponse,\r\n} from \"../types/queryOrder\";\r\nimport { createNonceStr } from \"../utils/nonce\";\r\nimport { createTimestamp } from \"../utils/timestamp\";\r\nimport { signRequest } from \"../utils/signature\";\r\nimport { TelebirrMode } from \"../types/telebirrConfig\";\r\nimport { TELEBIRR_URLS } from \"../constants/urls\";\r\n\r\nexport function requestQueryOrder(\r\n fabricToken: string,\r\n merchOrderId: string,\r\n config: {\r\n appId: string;\r\n appSecret: string;\r\n merchantAppId: string;\r\n merchantCode: string;\r\n privateKey: string;\r\n notifyUrl: string;\r\n redirectUrl: string;\r\n mode: TelebirrMode;\r\n http: boolean;\r\n }\r\n): Promise<{\r\n data: QueryOrderResponse;\r\n message: string;\r\n}> {\r\n const reqBody: TelebirrQueryorderRequest = {\r\n timestamp: createTimestamp(),\r\n nonce_str: createNonceStr(),\r\n method: \"payment.queryorder\",\r\n version: \"1.0\",\r\n biz_content: {\r\n appid: config.merchantAppId,\r\n merch_code: config.merchantCode,\r\n merch_order_id: merchOrderId,\r\n },\r\n };\r\n\r\n reqBody.sign = signRequest(reqBody, config.privateKey);\r\n reqBody.sign_type = \"SHA256WithRSA\";\r\n\r\n const payload = JSON.stringify(reqBody);\r\n\r\n const baseUrl = TELEBIRR_URLS[config.mode].apiBase;\r\n const isHttps = baseUrl.startsWith(\"https://\");\r\n const client = isHttps ? https : http;\r\n\r\n return new Promise((resolve, reject) => {\r\n const req = client.request(\r\n `${baseUrl}/payment/v1/merchant/queryOrder`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Content-Length\": Buffer.byteLength(payload),\r\n \"X-APP-Key\": config.appId,\r\n Authorization: fabricToken,\r\n },\r\n ...(isHttps && { rejectUnauthorized: false }),\r\n },\r\n (res) => {\r\n let raw = \"\";\r\n\r\n res.on(\"data\", (chunk) => {\r\n raw += chunk;\r\n });\r\n\r\n res.on(\"end\", () => {\r\n const status = res.statusCode || 0;\r\n let parsed: any = raw;\r\n\r\n parsed = JSON.parse(raw);\r\n\r\n if (status < 200 || status >= 300) {\r\n return reject({\r\n message: \"Telebirr queryOrder request failed\",\r\n data: parsed,\r\n });\r\n }\r\n\r\n resolve({\r\n data: parsed,\r\n message: \"Telebirr queryOrder request successful\",\r\n });\r\n });\r\n }\r\n );\r\n\r\n req.on(\"error\", (err) => {\r\n reject({\r\n message: \"Telebirr queryOrder network error\",\r\n data: err,\r\n });\r\n });\r\n\r\n req.write(payload);\r\n req.end();\r\n });\r\n}\r\n","import { TelebirrConfig } from \"../types/telebirrConfig\";\r\nimport { FabricTokenResponse } from \"../types/fabricToken\";\r\nimport { GenerateCheckoutUrlInput } from \"../types/createOrder\";\r\nimport { generateCredentials } from \"../utils/credentials\";\r\nimport { QueryOrderResponse } from \"../types/queryOrder\";\r\nimport { RefundInput, RefundResponse } from \"../types/refund\";\r\nimport { requestToken } from \"../services/requestToken\";\r\nimport { requestCreateOrder } from \"../services/requestCreateOrder\";\r\nimport { requestRefund } from \"../services/requestRefundOrder\";\r\nimport { requestQueryOrder } from \"../services/requestQueryOrder\";\r\nimport { TELEBIRR_URLS, CHECKOUT_OTHER_PARAMS } from \"../constants/urls\";\r\nimport { signRequest } from \"../utils/signature\";\r\nimport { createTimestamp } from \"../utils/timestamp\";\r\nimport { createNonceStr } from \"../utils/nonce\";\r\nimport { GeneratedCredentials } from \"../types/credentials\";\r\n\r\nexport class C2B {\r\n private token?: typeof FabricTokenResponse;\r\n private config: TelebirrConfig;\r\n\r\n constructor(config: TelebirrConfig) {\r\n if (config.mode === \"simulate\") {\r\n const credentials: GeneratedCredentials = generateCredentials();\r\n\r\n this.config = {\r\n ...config,\r\n appId: credentials.FABRIC_APP_ID,\r\n appSecret: credentials.FABRIC_APP_SECRET,\r\n merchantAppId: credentials.MERCHANT_APP_ID,\r\n merchantCode: credentials.MERCHANT_CODE,\r\n privateKey: credentials.PRIVATE_KEY,\r\n };\r\n } else {\r\n this.config = config;\r\n }\r\n }\r\n\r\n async getFabricToken(): Promise<any> {\r\n if (this.token && !this.isTokenExpired(this.token)) {\r\n return this.token;\r\n }\r\n\r\n let token: any = await requestToken(this.config);\r\n token = JSON.parse(token);\r\n if (!token) return;\r\n this.token = token;\r\n return token;\r\n }\r\n\r\n private createCheckoutUrl(prepayId: string): string {\r\n const map = {\r\n appid: this.config.merchantAppId,\r\n merch_code: this.config.merchantCode,\r\n nonce_str: createNonceStr(),\r\n prepay_id: prepayId,\r\n timestamp: createTimestamp(),\r\n };\r\n\r\n const sign = signRequest(map, this.config.privateKey);\r\n\r\n const rawRequest = [\r\n `appid=${map.appid}`,\r\n `merch_code=${map.merch_code}`,\r\n `nonce_str=${map.nonce_str}`,\r\n `prepay_id=${map.prepay_id}`,\r\n `timestamp=${map.timestamp}`,\r\n `sign=${sign}`,\r\n `sign_type=SHA256WithRSA`,\r\n ].join(\"&\");\r\n\r\n const webBase = TELEBIRR_URLS[this.config.mode].webBase;\r\n\r\n return webBase + rawRequest + CHECKOUT_OTHER_PARAMS;\r\n }\r\n async checkout(input: GenerateCheckoutUrlInput): Promise<string | void> {\r\n const token = await this.getFabricToken();\r\n\r\n if (!token) return;\r\n\r\n let response: any = await requestCreateOrder(\r\n token.token,\r\n input,\r\n this.config\r\n );\r\n if (!response) return;\r\n\r\n return this.createCheckoutUrl(response.data.biz_content.prepay_id);\r\n }\r\n\r\n async queryOrder(input: string): Promise<QueryOrderResponse | void> {\r\n let token = await this.getFabricToken();\r\n\r\n if (!token) return;\r\n\r\n const response: any = await requestQueryOrder(\r\n token.token,\r\n input,\r\n this.config\r\n );\r\n\r\n return response.data;\r\n }\r\n async refundOrder(input: RefundInput): Promise<RefundResponse | void> {\r\n const token = await this.getFabricToken();\r\n if (!token) return;\r\n const response: any = await requestRefund(token.token, input, this.config);\r\n\r\n return response.data;\r\n }\r\n\r\n private static readonly TOKEN_EXPIRY_SAFETY_WINDOW_MS = 5 * 60 * 1000;\r\n\r\n private isTokenExpired(token?: typeof FabricTokenResponse): boolean {\r\n if (!token) {\r\n return true;\r\n }\r\n\r\n const now = Date.now();\r\n const expiry = this.parseTelebirrDate(token.expirationDate).getTime();\r\n\r\n return now >= expiry - C2B.TOKEN_EXPIRY_SAFETY_WINDOW_MS;\r\n }\r\n\r\n private parseTelebirrDate(value: string): Date {\r\n const year = Number(value.slice(0, 4));\r\n const month = Number(value.slice(4, 6)) - 1;\r\n const day = Number(value.slice(6, 8));\r\n const hour = Number(value.slice(8, 10));\r\n const minute = Number(value.slice(10, 12));\r\n const second = Number(value.slice(12, 14));\r\n\r\n return new Date(Date.UTC(year, month, day, hour, minute, second));\r\n }\r\n}\r\n"],"mappings":"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","names":["fs","path","path","fs","http","https","randomBytes","https","http","http","https","https","http","http","https","https","http"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "telebirr-nodejs",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "Unofficial Node.js SDK for Telebirr C2B payments with automatic request signing, Fabric token handling, checkout URL generation, simulator support, and simplified refunds & payment status APIs.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",