@singularity-payments/core 0.1.0 → 1.0.0-alpha.2
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/dist/index.d.mts +50 -41
- package/dist/index.d.ts +50 -41
- package/dist/index.js +49 -125
- package/dist/index.mjs +49 -125
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -294,11 +294,40 @@ interface CallbackHandlerOptions {
|
|
|
294
294
|
onCallback?: (data: ParsedCallbackData) => void | Promise<void>;
|
|
295
295
|
onC2BConfirmation?: (data: ParsedC2BCallback) => void | Promise<void>;
|
|
296
296
|
onC2BValidation?: (data: ParsedC2BCallback) => Promise<boolean>;
|
|
297
|
-
onB2CResult?: (data:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
297
|
+
onB2CResult?: (data: {
|
|
298
|
+
isSuccess: boolean;
|
|
299
|
+
transactionId?: string;
|
|
300
|
+
amount?: number;
|
|
301
|
+
recipientPhone?: string;
|
|
302
|
+
charges?: number;
|
|
303
|
+
errorMessage?: string;
|
|
304
|
+
}) => void | Promise<void>;
|
|
305
|
+
onB2BResult?: (data: {
|
|
306
|
+
isSuccess: boolean;
|
|
307
|
+
transactionId?: string;
|
|
308
|
+
amount?: number;
|
|
309
|
+
errorMessage?: string;
|
|
310
|
+
}) => void | Promise<void>;
|
|
311
|
+
onAccountBalanceResult?: (data: {
|
|
312
|
+
isSuccess: boolean;
|
|
313
|
+
workingBalance?: number;
|
|
314
|
+
availableBalance?: number;
|
|
315
|
+
bookedBalance?: number;
|
|
316
|
+
errorMessage?: string;
|
|
317
|
+
}) => void | Promise<void>;
|
|
318
|
+
onTransactionStatusResult?: (data: {
|
|
319
|
+
isSuccess: boolean;
|
|
320
|
+
receiptNo?: string;
|
|
321
|
+
amount?: number;
|
|
322
|
+
completedTime?: string;
|
|
323
|
+
originatorConversationId?: string;
|
|
324
|
+
errorMessage?: string;
|
|
325
|
+
}) => void | Promise<void>;
|
|
326
|
+
onReversalResult?: (data: {
|
|
327
|
+
isSuccess: boolean;
|
|
328
|
+
transactionId?: string;
|
|
329
|
+
errorMessage?: string;
|
|
330
|
+
}) => void | Promise<void>;
|
|
302
331
|
validateIp?: boolean;
|
|
303
332
|
allowedIps?: string[];
|
|
304
333
|
isDuplicate?: (CheckoutRequestID: string) => boolean | Promise<boolean>;
|
|
@@ -344,26 +373,6 @@ declare class MpesaCallbackHandler {
|
|
|
344
373
|
* Get a readable error message based on the code
|
|
345
374
|
*/
|
|
346
375
|
getErrorMessage(resultCode: number): string;
|
|
347
|
-
/**
|
|
348
|
-
* Handle B2C result callback
|
|
349
|
-
*/
|
|
350
|
-
handleB2CResult(callback: B2BCallback, ipAddress?: string): Promise<void>;
|
|
351
|
-
/**
|
|
352
|
-
* Handle B2B result callback
|
|
353
|
-
*/
|
|
354
|
-
handleB2BResult(callback: B2BCallback, ipAddress?: string): Promise<void>;
|
|
355
|
-
/**
|
|
356
|
-
* Handle Account Balance result callback
|
|
357
|
-
*/
|
|
358
|
-
handleAccountBalanceResult(callback: AccountBalanceCallback, ipAddress?: string): Promise<void>;
|
|
359
|
-
/**
|
|
360
|
-
* Handle Transaction Status result callback
|
|
361
|
-
*/
|
|
362
|
-
handleTransactionStatusResult(callback: TransactionStatusCallback, ipAddress?: string): Promise<void>;
|
|
363
|
-
/**
|
|
364
|
-
* Handle Reversal result callback
|
|
365
|
-
*/
|
|
366
|
-
handleReversalResult(callback: ReversalCallback, ipAddress?: string): Promise<void>;
|
|
367
376
|
/**
|
|
368
377
|
* Handle STK Push callback and invoke appropriate handlers
|
|
369
378
|
*/
|
|
@@ -603,33 +612,33 @@ declare class MpesaClient {
|
|
|
603
612
|
*/
|
|
604
613
|
getConfig(): MpesaConfig;
|
|
605
614
|
/**
|
|
606
|
-
*
|
|
615
|
+
* Get rate limiter usage for a key
|
|
607
616
|
*/
|
|
608
|
-
|
|
617
|
+
getRateLimitUsage(key: string): {
|
|
618
|
+
count: number;
|
|
619
|
+
remaining: number;
|
|
620
|
+
resetAt: number;
|
|
621
|
+
} | null;
|
|
609
622
|
/**
|
|
610
|
-
* Handle
|
|
623
|
+
* Handle B2C callback
|
|
611
624
|
*/
|
|
612
|
-
|
|
625
|
+
handleB2CCallback(callback: B2CCallback): Promise<object>;
|
|
613
626
|
/**
|
|
614
|
-
* Handle
|
|
627
|
+
* Handle B2B callback
|
|
615
628
|
*/
|
|
616
|
-
|
|
629
|
+
handleB2BCallback(callback: B2BCallback): Promise<object>;
|
|
617
630
|
/**
|
|
618
|
-
* Handle
|
|
631
|
+
* Handle Account Balance callback
|
|
619
632
|
*/
|
|
620
|
-
|
|
633
|
+
handleAccountBalanceCallback(callback: AccountBalanceCallback): Promise<object>;
|
|
621
634
|
/**
|
|
622
|
-
* Handle
|
|
635
|
+
* Handle Transaction Status callback
|
|
623
636
|
*/
|
|
624
|
-
|
|
637
|
+
handleTransactionStatusCallback(callback: TransactionStatusCallback): Promise<object>;
|
|
625
638
|
/**
|
|
626
|
-
*
|
|
639
|
+
* Handle Reversal callback
|
|
627
640
|
*/
|
|
628
|
-
|
|
629
|
-
count: number;
|
|
630
|
-
remaining: number;
|
|
631
|
-
resetAt: number;
|
|
632
|
-
} | null;
|
|
641
|
+
handleReversalCallback(callback: ReversalCallback): Promise<object>;
|
|
633
642
|
/**
|
|
634
643
|
* Cleanup resources
|
|
635
644
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -294,11 +294,40 @@ interface CallbackHandlerOptions {
|
|
|
294
294
|
onCallback?: (data: ParsedCallbackData) => void | Promise<void>;
|
|
295
295
|
onC2BConfirmation?: (data: ParsedC2BCallback) => void | Promise<void>;
|
|
296
296
|
onC2BValidation?: (data: ParsedC2BCallback) => Promise<boolean>;
|
|
297
|
-
onB2CResult?: (data:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
297
|
+
onB2CResult?: (data: {
|
|
298
|
+
isSuccess: boolean;
|
|
299
|
+
transactionId?: string;
|
|
300
|
+
amount?: number;
|
|
301
|
+
recipientPhone?: string;
|
|
302
|
+
charges?: number;
|
|
303
|
+
errorMessage?: string;
|
|
304
|
+
}) => void | Promise<void>;
|
|
305
|
+
onB2BResult?: (data: {
|
|
306
|
+
isSuccess: boolean;
|
|
307
|
+
transactionId?: string;
|
|
308
|
+
amount?: number;
|
|
309
|
+
errorMessage?: string;
|
|
310
|
+
}) => void | Promise<void>;
|
|
311
|
+
onAccountBalanceResult?: (data: {
|
|
312
|
+
isSuccess: boolean;
|
|
313
|
+
workingBalance?: number;
|
|
314
|
+
availableBalance?: number;
|
|
315
|
+
bookedBalance?: number;
|
|
316
|
+
errorMessage?: string;
|
|
317
|
+
}) => void | Promise<void>;
|
|
318
|
+
onTransactionStatusResult?: (data: {
|
|
319
|
+
isSuccess: boolean;
|
|
320
|
+
receiptNo?: string;
|
|
321
|
+
amount?: number;
|
|
322
|
+
completedTime?: string;
|
|
323
|
+
originatorConversationId?: string;
|
|
324
|
+
errorMessage?: string;
|
|
325
|
+
}) => void | Promise<void>;
|
|
326
|
+
onReversalResult?: (data: {
|
|
327
|
+
isSuccess: boolean;
|
|
328
|
+
transactionId?: string;
|
|
329
|
+
errorMessage?: string;
|
|
330
|
+
}) => void | Promise<void>;
|
|
302
331
|
validateIp?: boolean;
|
|
303
332
|
allowedIps?: string[];
|
|
304
333
|
isDuplicate?: (CheckoutRequestID: string) => boolean | Promise<boolean>;
|
|
@@ -344,26 +373,6 @@ declare class MpesaCallbackHandler {
|
|
|
344
373
|
* Get a readable error message based on the code
|
|
345
374
|
*/
|
|
346
375
|
getErrorMessage(resultCode: number): string;
|
|
347
|
-
/**
|
|
348
|
-
* Handle B2C result callback
|
|
349
|
-
*/
|
|
350
|
-
handleB2CResult(callback: B2BCallback, ipAddress?: string): Promise<void>;
|
|
351
|
-
/**
|
|
352
|
-
* Handle B2B result callback
|
|
353
|
-
*/
|
|
354
|
-
handleB2BResult(callback: B2BCallback, ipAddress?: string): Promise<void>;
|
|
355
|
-
/**
|
|
356
|
-
* Handle Account Balance result callback
|
|
357
|
-
*/
|
|
358
|
-
handleAccountBalanceResult(callback: AccountBalanceCallback, ipAddress?: string): Promise<void>;
|
|
359
|
-
/**
|
|
360
|
-
* Handle Transaction Status result callback
|
|
361
|
-
*/
|
|
362
|
-
handleTransactionStatusResult(callback: TransactionStatusCallback, ipAddress?: string): Promise<void>;
|
|
363
|
-
/**
|
|
364
|
-
* Handle Reversal result callback
|
|
365
|
-
*/
|
|
366
|
-
handleReversalResult(callback: ReversalCallback, ipAddress?: string): Promise<void>;
|
|
367
376
|
/**
|
|
368
377
|
* Handle STK Push callback and invoke appropriate handlers
|
|
369
378
|
*/
|
|
@@ -603,33 +612,33 @@ declare class MpesaClient {
|
|
|
603
612
|
*/
|
|
604
613
|
getConfig(): MpesaConfig;
|
|
605
614
|
/**
|
|
606
|
-
*
|
|
615
|
+
* Get rate limiter usage for a key
|
|
607
616
|
*/
|
|
608
|
-
|
|
617
|
+
getRateLimitUsage(key: string): {
|
|
618
|
+
count: number;
|
|
619
|
+
remaining: number;
|
|
620
|
+
resetAt: number;
|
|
621
|
+
} | null;
|
|
609
622
|
/**
|
|
610
|
-
* Handle
|
|
623
|
+
* Handle B2C callback
|
|
611
624
|
*/
|
|
612
|
-
|
|
625
|
+
handleB2CCallback(callback: B2CCallback): Promise<object>;
|
|
613
626
|
/**
|
|
614
|
-
* Handle
|
|
627
|
+
* Handle B2B callback
|
|
615
628
|
*/
|
|
616
|
-
|
|
629
|
+
handleB2BCallback(callback: B2BCallback): Promise<object>;
|
|
617
630
|
/**
|
|
618
|
-
* Handle
|
|
631
|
+
* Handle Account Balance callback
|
|
619
632
|
*/
|
|
620
|
-
|
|
633
|
+
handleAccountBalanceCallback(callback: AccountBalanceCallback): Promise<object>;
|
|
621
634
|
/**
|
|
622
|
-
* Handle
|
|
635
|
+
* Handle Transaction Status callback
|
|
623
636
|
*/
|
|
624
|
-
|
|
637
|
+
handleTransactionStatusCallback(callback: TransactionStatusCallback): Promise<object>;
|
|
625
638
|
/**
|
|
626
|
-
*
|
|
639
|
+
* Handle Reversal callback
|
|
627
640
|
*/
|
|
628
|
-
|
|
629
|
-
count: number;
|
|
630
|
-
remaining: number;
|
|
631
|
-
resetAt: number;
|
|
632
|
-
} | null;
|
|
641
|
+
handleReversalCallback(callback: ReversalCallback): Promise<object>;
|
|
633
642
|
/**
|
|
634
643
|
* Cleanup resources
|
|
635
644
|
*/
|
package/dist/index.js
CHANGED
|
@@ -419,91 +419,6 @@ var MpesaCallbackHandler = class {
|
|
|
419
419
|
};
|
|
420
420
|
return errorMessages[resultCode] || `Transaction failed with code: ${resultCode}`;
|
|
421
421
|
}
|
|
422
|
-
/**
|
|
423
|
-
* Handle B2C result callback
|
|
424
|
-
*/
|
|
425
|
-
async handleB2CResult(callback, ipAddress) {
|
|
426
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
427
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
428
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
429
|
-
}
|
|
430
|
-
const parsed = this.parseB2CCallback(callback);
|
|
431
|
-
this.log("info", "Processing B2C result", {
|
|
432
|
-
transactionId: parsed.transactionId,
|
|
433
|
-
isSuccess: parsed.isSuccess
|
|
434
|
-
});
|
|
435
|
-
if (this.options.onB2CResult) {
|
|
436
|
-
await this.options.onB2CResult(parsed);
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
/**
|
|
440
|
-
* Handle B2B result callback
|
|
441
|
-
*/
|
|
442
|
-
async handleB2BResult(callback, ipAddress) {
|
|
443
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
444
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
445
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
446
|
-
}
|
|
447
|
-
const parsed = this.parseB2BCallback(callback);
|
|
448
|
-
this.log("info", "Processing B2B result", {
|
|
449
|
-
transactionId: parsed.transactionId,
|
|
450
|
-
isSuccess: parsed.isSuccess
|
|
451
|
-
});
|
|
452
|
-
if (this.options.onB2BResult) {
|
|
453
|
-
await this.options.onB2BResult(parsed);
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
/**
|
|
457
|
-
* Handle Account Balance result callback
|
|
458
|
-
*/
|
|
459
|
-
async handleAccountBalanceResult(callback, ipAddress) {
|
|
460
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
461
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
462
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
463
|
-
}
|
|
464
|
-
const parsed = this.parseAccountBalanceCallback(callback);
|
|
465
|
-
this.log("info", "Processing Account Balance result", {
|
|
466
|
-
isSuccess: parsed.isSuccess,
|
|
467
|
-
availableBalance: parsed.availableBalance
|
|
468
|
-
});
|
|
469
|
-
if (this.options.onAccountBalanceResult) {
|
|
470
|
-
await this.options.onAccountBalanceResult(parsed);
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
/**
|
|
474
|
-
* Handle Transaction Status result callback
|
|
475
|
-
*/
|
|
476
|
-
async handleTransactionStatusResult(callback, ipAddress) {
|
|
477
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
478
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
479
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
480
|
-
}
|
|
481
|
-
const parsed = this.parseTransactionStatusCallback(callback);
|
|
482
|
-
this.log("info", "Processing Transaction Status result", {
|
|
483
|
-
isSuccess: parsed.isSuccess,
|
|
484
|
-
receiptNo: parsed.receiptNo
|
|
485
|
-
});
|
|
486
|
-
if (this.options.onTransactionStatusResult) {
|
|
487
|
-
await this.options.onTransactionStatusResult(parsed);
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Handle Reversal result callback
|
|
492
|
-
*/
|
|
493
|
-
async handleReversalResult(callback, ipAddress) {
|
|
494
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
495
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
496
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
497
|
-
}
|
|
498
|
-
const parsed = this.parseReversalCallback(callback);
|
|
499
|
-
this.log("info", "Processing Reversal result", {
|
|
500
|
-
isSuccess: parsed.isSuccess,
|
|
501
|
-
transactionId: parsed.transactionId
|
|
502
|
-
});
|
|
503
|
-
if (this.options.onReversalResult) {
|
|
504
|
-
await this.options.onReversalResult(parsed);
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
422
|
/**
|
|
508
423
|
* Handle STK Push callback and invoke appropriate handlers
|
|
509
424
|
*/
|
|
@@ -1248,14 +1163,26 @@ var MpesaClient = class {
|
|
|
1248
1163
|
return this.config;
|
|
1249
1164
|
}
|
|
1250
1165
|
/**
|
|
1251
|
-
*
|
|
1166
|
+
* Get rate limiter usage for a key
|
|
1252
1167
|
*/
|
|
1253
|
-
|
|
1168
|
+
getRateLimitUsage(key) {
|
|
1169
|
+
if (this.rateLimiter instanceof RateLimiter) {
|
|
1170
|
+
return this.rateLimiter.getUsage(key);
|
|
1171
|
+
}
|
|
1172
|
+
return null;
|
|
1173
|
+
}
|
|
1174
|
+
/**
|
|
1175
|
+
* Handle B2C callback
|
|
1176
|
+
*/
|
|
1177
|
+
async handleB2CCallback(callback) {
|
|
1254
1178
|
try {
|
|
1255
|
-
|
|
1256
|
-
|
|
1179
|
+
const parsed = this.callbackHandler.parseB2CCallback(callback);
|
|
1180
|
+
if (this.callbackHandler["options"].onB2CResult) {
|
|
1181
|
+
await this.callbackHandler["options"].onB2CResult(parsed);
|
|
1182
|
+
}
|
|
1183
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1257
1184
|
} catch (error) {
|
|
1258
|
-
console.error("B2C
|
|
1185
|
+
console.error("B2C Callback error:", error);
|
|
1259
1186
|
return this.callbackHandler.createCallbackResponse(
|
|
1260
1187
|
false,
|
|
1261
1188
|
"Processing failed"
|
|
@@ -1263,14 +1190,17 @@ var MpesaClient = class {
|
|
|
1263
1190
|
}
|
|
1264
1191
|
}
|
|
1265
1192
|
/**
|
|
1266
|
-
* Handle B2B
|
|
1193
|
+
* Handle B2B callback
|
|
1267
1194
|
*/
|
|
1268
|
-
async
|
|
1195
|
+
async handleB2BCallback(callback) {
|
|
1269
1196
|
try {
|
|
1270
|
-
|
|
1271
|
-
|
|
1197
|
+
const parsed = this.callbackHandler.parseB2BCallback(callback);
|
|
1198
|
+
if (this.callbackHandler["options"].onB2BResult) {
|
|
1199
|
+
await this.callbackHandler["options"].onB2BResult(parsed);
|
|
1200
|
+
}
|
|
1201
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1272
1202
|
} catch (error) {
|
|
1273
|
-
console.error("B2B
|
|
1203
|
+
console.error("B2B Callback error:", error);
|
|
1274
1204
|
return this.callbackHandler.createCallbackResponse(
|
|
1275
1205
|
false,
|
|
1276
1206
|
"Processing failed"
|
|
@@ -1278,17 +1208,17 @@ var MpesaClient = class {
|
|
|
1278
1208
|
}
|
|
1279
1209
|
}
|
|
1280
1210
|
/**
|
|
1281
|
-
* Handle Account Balance
|
|
1211
|
+
* Handle Account Balance callback
|
|
1282
1212
|
*/
|
|
1283
|
-
async
|
|
1213
|
+
async handleAccountBalanceCallback(callback) {
|
|
1284
1214
|
try {
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
return this.callbackHandler.createCallbackResponse(
|
|
1215
|
+
const parsed = this.callbackHandler.parseAccountBalanceCallback(callback);
|
|
1216
|
+
if (this.callbackHandler["options"].onAccountBalanceResult) {
|
|
1217
|
+
await this.callbackHandler["options"].onAccountBalanceResult(parsed);
|
|
1218
|
+
}
|
|
1219
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1290
1220
|
} catch (error) {
|
|
1291
|
-
console.error("Account Balance
|
|
1221
|
+
console.error("Account Balance Callback error:", error);
|
|
1292
1222
|
return this.callbackHandler.createCallbackResponse(
|
|
1293
1223
|
false,
|
|
1294
1224
|
"Processing failed"
|
|
@@ -1296,17 +1226,17 @@ var MpesaClient = class {
|
|
|
1296
1226
|
}
|
|
1297
1227
|
}
|
|
1298
1228
|
/**
|
|
1299
|
-
* Handle Transaction Status
|
|
1229
|
+
* Handle Transaction Status callback
|
|
1300
1230
|
*/
|
|
1301
|
-
async
|
|
1231
|
+
async handleTransactionStatusCallback(callback) {
|
|
1302
1232
|
try {
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
return this.callbackHandler.createCallbackResponse(
|
|
1233
|
+
const parsed = this.callbackHandler.parseTransactionStatusCallback(callback);
|
|
1234
|
+
if (this.callbackHandler["options"].onTransactionStatusResult) {
|
|
1235
|
+
await this.callbackHandler["options"].onTransactionStatusResult(parsed);
|
|
1236
|
+
}
|
|
1237
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1308
1238
|
} catch (error) {
|
|
1309
|
-
console.error("Transaction Status
|
|
1239
|
+
console.error("Transaction Status Callback error:", error);
|
|
1310
1240
|
return this.callbackHandler.createCallbackResponse(
|
|
1311
1241
|
false,
|
|
1312
1242
|
"Processing failed"
|
|
@@ -1314,29 +1244,23 @@ var MpesaClient = class {
|
|
|
1314
1244
|
}
|
|
1315
1245
|
}
|
|
1316
1246
|
/**
|
|
1317
|
-
* Handle Reversal
|
|
1247
|
+
* Handle Reversal callback
|
|
1318
1248
|
*/
|
|
1319
|
-
async
|
|
1249
|
+
async handleReversalCallback(callback) {
|
|
1320
1250
|
try {
|
|
1321
|
-
|
|
1322
|
-
|
|
1251
|
+
const parsed = this.callbackHandler.parseReversalCallback(callback);
|
|
1252
|
+
if (this.callbackHandler["options"].onReversalResult) {
|
|
1253
|
+
await this.callbackHandler["options"].onReversalResult(parsed);
|
|
1254
|
+
}
|
|
1255
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1323
1256
|
} catch (error) {
|
|
1324
|
-
console.error("Reversal
|
|
1257
|
+
console.error("Reversal Callback error:", error);
|
|
1325
1258
|
return this.callbackHandler.createCallbackResponse(
|
|
1326
1259
|
false,
|
|
1327
1260
|
"Processing failed"
|
|
1328
1261
|
);
|
|
1329
1262
|
}
|
|
1330
1263
|
}
|
|
1331
|
-
/**
|
|
1332
|
-
* Get rate limiter usage for a key
|
|
1333
|
-
*/
|
|
1334
|
-
getRateLimitUsage(key) {
|
|
1335
|
-
if (this.rateLimiter instanceof RateLimiter) {
|
|
1336
|
-
return this.rateLimiter.getUsage(key);
|
|
1337
|
-
}
|
|
1338
|
-
return null;
|
|
1339
|
-
}
|
|
1340
1264
|
/**
|
|
1341
1265
|
* Cleanup resources
|
|
1342
1266
|
*/
|
package/dist/index.mjs
CHANGED
|
@@ -370,91 +370,6 @@ var MpesaCallbackHandler = class {
|
|
|
370
370
|
};
|
|
371
371
|
return errorMessages[resultCode] || `Transaction failed with code: ${resultCode}`;
|
|
372
372
|
}
|
|
373
|
-
/**
|
|
374
|
-
* Handle B2C result callback
|
|
375
|
-
*/
|
|
376
|
-
async handleB2CResult(callback, ipAddress) {
|
|
377
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
378
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
379
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
380
|
-
}
|
|
381
|
-
const parsed = this.parseB2CCallback(callback);
|
|
382
|
-
this.log("info", "Processing B2C result", {
|
|
383
|
-
transactionId: parsed.transactionId,
|
|
384
|
-
isSuccess: parsed.isSuccess
|
|
385
|
-
});
|
|
386
|
-
if (this.options.onB2CResult) {
|
|
387
|
-
await this.options.onB2CResult(parsed);
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* Handle B2B result callback
|
|
392
|
-
*/
|
|
393
|
-
async handleB2BResult(callback, ipAddress) {
|
|
394
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
395
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
396
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
397
|
-
}
|
|
398
|
-
const parsed = this.parseB2BCallback(callback);
|
|
399
|
-
this.log("info", "Processing B2B result", {
|
|
400
|
-
transactionId: parsed.transactionId,
|
|
401
|
-
isSuccess: parsed.isSuccess
|
|
402
|
-
});
|
|
403
|
-
if (this.options.onB2BResult) {
|
|
404
|
-
await this.options.onB2BResult(parsed);
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* Handle Account Balance result callback
|
|
409
|
-
*/
|
|
410
|
-
async handleAccountBalanceResult(callback, ipAddress) {
|
|
411
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
412
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
413
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
414
|
-
}
|
|
415
|
-
const parsed = this.parseAccountBalanceCallback(callback);
|
|
416
|
-
this.log("info", "Processing Account Balance result", {
|
|
417
|
-
isSuccess: parsed.isSuccess,
|
|
418
|
-
availableBalance: parsed.availableBalance
|
|
419
|
-
});
|
|
420
|
-
if (this.options.onAccountBalanceResult) {
|
|
421
|
-
await this.options.onAccountBalanceResult(parsed);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
/**
|
|
425
|
-
* Handle Transaction Status result callback
|
|
426
|
-
*/
|
|
427
|
-
async handleTransactionStatusResult(callback, ipAddress) {
|
|
428
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
429
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
430
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
431
|
-
}
|
|
432
|
-
const parsed = this.parseTransactionStatusCallback(callback);
|
|
433
|
-
this.log("info", "Processing Transaction Status result", {
|
|
434
|
-
isSuccess: parsed.isSuccess,
|
|
435
|
-
receiptNo: parsed.receiptNo
|
|
436
|
-
});
|
|
437
|
-
if (this.options.onTransactionStatusResult) {
|
|
438
|
-
await this.options.onTransactionStatusResult(parsed);
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Handle Reversal result callback
|
|
443
|
-
*/
|
|
444
|
-
async handleReversalResult(callback, ipAddress) {
|
|
445
|
-
if (ipAddress && !this.validateCallbackIp(ipAddress)) {
|
|
446
|
-
this.log("warn", `Invalid callback IP: ${ipAddress}`);
|
|
447
|
-
throw new Error(`Invalid callback IP: ${ipAddress}`);
|
|
448
|
-
}
|
|
449
|
-
const parsed = this.parseReversalCallback(callback);
|
|
450
|
-
this.log("info", "Processing Reversal result", {
|
|
451
|
-
isSuccess: parsed.isSuccess,
|
|
452
|
-
transactionId: parsed.transactionId
|
|
453
|
-
});
|
|
454
|
-
if (this.options.onReversalResult) {
|
|
455
|
-
await this.options.onReversalResult(parsed);
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
373
|
/**
|
|
459
374
|
* Handle STK Push callback and invoke appropriate handlers
|
|
460
375
|
*/
|
|
@@ -1199,14 +1114,26 @@ var MpesaClient = class {
|
|
|
1199
1114
|
return this.config;
|
|
1200
1115
|
}
|
|
1201
1116
|
/**
|
|
1202
|
-
*
|
|
1117
|
+
* Get rate limiter usage for a key
|
|
1203
1118
|
*/
|
|
1204
|
-
|
|
1119
|
+
getRateLimitUsage(key) {
|
|
1120
|
+
if (this.rateLimiter instanceof RateLimiter) {
|
|
1121
|
+
return this.rateLimiter.getUsage(key);
|
|
1122
|
+
}
|
|
1123
|
+
return null;
|
|
1124
|
+
}
|
|
1125
|
+
/**
|
|
1126
|
+
* Handle B2C callback
|
|
1127
|
+
*/
|
|
1128
|
+
async handleB2CCallback(callback) {
|
|
1205
1129
|
try {
|
|
1206
|
-
|
|
1207
|
-
|
|
1130
|
+
const parsed = this.callbackHandler.parseB2CCallback(callback);
|
|
1131
|
+
if (this.callbackHandler["options"].onB2CResult) {
|
|
1132
|
+
await this.callbackHandler["options"].onB2CResult(parsed);
|
|
1133
|
+
}
|
|
1134
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1208
1135
|
} catch (error) {
|
|
1209
|
-
console.error("B2C
|
|
1136
|
+
console.error("B2C Callback error:", error);
|
|
1210
1137
|
return this.callbackHandler.createCallbackResponse(
|
|
1211
1138
|
false,
|
|
1212
1139
|
"Processing failed"
|
|
@@ -1214,14 +1141,17 @@ var MpesaClient = class {
|
|
|
1214
1141
|
}
|
|
1215
1142
|
}
|
|
1216
1143
|
/**
|
|
1217
|
-
* Handle B2B
|
|
1144
|
+
* Handle B2B callback
|
|
1218
1145
|
*/
|
|
1219
|
-
async
|
|
1146
|
+
async handleB2BCallback(callback) {
|
|
1220
1147
|
try {
|
|
1221
|
-
|
|
1222
|
-
|
|
1148
|
+
const parsed = this.callbackHandler.parseB2BCallback(callback);
|
|
1149
|
+
if (this.callbackHandler["options"].onB2BResult) {
|
|
1150
|
+
await this.callbackHandler["options"].onB2BResult(parsed);
|
|
1151
|
+
}
|
|
1152
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1223
1153
|
} catch (error) {
|
|
1224
|
-
console.error("B2B
|
|
1154
|
+
console.error("B2B Callback error:", error);
|
|
1225
1155
|
return this.callbackHandler.createCallbackResponse(
|
|
1226
1156
|
false,
|
|
1227
1157
|
"Processing failed"
|
|
@@ -1229,17 +1159,17 @@ var MpesaClient = class {
|
|
|
1229
1159
|
}
|
|
1230
1160
|
}
|
|
1231
1161
|
/**
|
|
1232
|
-
* Handle Account Balance
|
|
1162
|
+
* Handle Account Balance callback
|
|
1233
1163
|
*/
|
|
1234
|
-
async
|
|
1164
|
+
async handleAccountBalanceCallback(callback) {
|
|
1235
1165
|
try {
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
return this.callbackHandler.createCallbackResponse(
|
|
1166
|
+
const parsed = this.callbackHandler.parseAccountBalanceCallback(callback);
|
|
1167
|
+
if (this.callbackHandler["options"].onAccountBalanceResult) {
|
|
1168
|
+
await this.callbackHandler["options"].onAccountBalanceResult(parsed);
|
|
1169
|
+
}
|
|
1170
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1241
1171
|
} catch (error) {
|
|
1242
|
-
console.error("Account Balance
|
|
1172
|
+
console.error("Account Balance Callback error:", error);
|
|
1243
1173
|
return this.callbackHandler.createCallbackResponse(
|
|
1244
1174
|
false,
|
|
1245
1175
|
"Processing failed"
|
|
@@ -1247,17 +1177,17 @@ var MpesaClient = class {
|
|
|
1247
1177
|
}
|
|
1248
1178
|
}
|
|
1249
1179
|
/**
|
|
1250
|
-
* Handle Transaction Status
|
|
1180
|
+
* Handle Transaction Status callback
|
|
1251
1181
|
*/
|
|
1252
|
-
async
|
|
1182
|
+
async handleTransactionStatusCallback(callback) {
|
|
1253
1183
|
try {
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
return this.callbackHandler.createCallbackResponse(
|
|
1184
|
+
const parsed = this.callbackHandler.parseTransactionStatusCallback(callback);
|
|
1185
|
+
if (this.callbackHandler["options"].onTransactionStatusResult) {
|
|
1186
|
+
await this.callbackHandler["options"].onTransactionStatusResult(parsed);
|
|
1187
|
+
}
|
|
1188
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1259
1189
|
} catch (error) {
|
|
1260
|
-
console.error("Transaction Status
|
|
1190
|
+
console.error("Transaction Status Callback error:", error);
|
|
1261
1191
|
return this.callbackHandler.createCallbackResponse(
|
|
1262
1192
|
false,
|
|
1263
1193
|
"Processing failed"
|
|
@@ -1265,29 +1195,23 @@ var MpesaClient = class {
|
|
|
1265
1195
|
}
|
|
1266
1196
|
}
|
|
1267
1197
|
/**
|
|
1268
|
-
* Handle Reversal
|
|
1198
|
+
* Handle Reversal callback
|
|
1269
1199
|
*/
|
|
1270
|
-
async
|
|
1200
|
+
async handleReversalCallback(callback) {
|
|
1271
1201
|
try {
|
|
1272
|
-
|
|
1273
|
-
|
|
1202
|
+
const parsed = this.callbackHandler.parseReversalCallback(callback);
|
|
1203
|
+
if (this.callbackHandler["options"].onReversalResult) {
|
|
1204
|
+
await this.callbackHandler["options"].onReversalResult(parsed);
|
|
1205
|
+
}
|
|
1206
|
+
return this.callbackHandler.createCallbackResponse(parsed.isSuccess);
|
|
1274
1207
|
} catch (error) {
|
|
1275
|
-
console.error("Reversal
|
|
1208
|
+
console.error("Reversal Callback error:", error);
|
|
1276
1209
|
return this.callbackHandler.createCallbackResponse(
|
|
1277
1210
|
false,
|
|
1278
1211
|
"Processing failed"
|
|
1279
1212
|
);
|
|
1280
1213
|
}
|
|
1281
1214
|
}
|
|
1282
|
-
/**
|
|
1283
|
-
* Get rate limiter usage for a key
|
|
1284
|
-
*/
|
|
1285
|
-
getRateLimitUsage(key) {
|
|
1286
|
-
if (this.rateLimiter instanceof RateLimiter) {
|
|
1287
|
-
return this.rateLimiter.getUsage(key);
|
|
1288
|
-
}
|
|
1289
|
-
return null;
|
|
1290
|
-
}
|
|
1291
1215
|
/**
|
|
1292
1216
|
* Cleanup resources
|
|
1293
1217
|
*/
|