@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 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: any) => void | Promise<void>;
298
- onB2BResult?: (data: any) => void | Promise<void>;
299
- onAccountBalanceResult?: (data: any) => void | Promise<void>;
300
- onTransactionStatusResult?: (data: any) => void | Promise<void>;
301
- onReversalResult?: (data: any) => void | Promise<void>;
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
- * Handle B2C result callback
615
+ * Get rate limiter usage for a key
607
616
  */
608
- handleB2CResult(callback: B2BCallback, ipAddress?: string): Promise<object>;
617
+ getRateLimitUsage(key: string): {
618
+ count: number;
619
+ remaining: number;
620
+ resetAt: number;
621
+ } | null;
609
622
  /**
610
- * Handle B2B result callback
623
+ * Handle B2C callback
611
624
  */
612
- handleB2BResult(callback: B2BCallback, ipAddress?: string): Promise<object>;
625
+ handleB2CCallback(callback: B2CCallback): Promise<object>;
613
626
  /**
614
- * Handle Account Balance result callback
627
+ * Handle B2B callback
615
628
  */
616
- handleAccountBalanceResult(callback: AccountBalanceCallback, ipAddress?: string): Promise<object>;
629
+ handleB2BCallback(callback: B2BCallback): Promise<object>;
617
630
  /**
618
- * Handle Transaction Status result callback
631
+ * Handle Account Balance callback
619
632
  */
620
- handleTransactionStatusResult(callback: TransactionStatusCallback, ipAddress?: string): Promise<object>;
633
+ handleAccountBalanceCallback(callback: AccountBalanceCallback): Promise<object>;
621
634
  /**
622
- * Handle Reversal result callback
635
+ * Handle Transaction Status callback
623
636
  */
624
- handleReversalResult(callback: ReversalCallback, ipAddress?: string): Promise<object>;
637
+ handleTransactionStatusCallback(callback: TransactionStatusCallback): Promise<object>;
625
638
  /**
626
- * Get rate limiter usage for a key
639
+ * Handle Reversal callback
627
640
  */
628
- getRateLimitUsage(key: string): {
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: any) => void | Promise<void>;
298
- onB2BResult?: (data: any) => void | Promise<void>;
299
- onAccountBalanceResult?: (data: any) => void | Promise<void>;
300
- onTransactionStatusResult?: (data: any) => void | Promise<void>;
301
- onReversalResult?: (data: any) => void | Promise<void>;
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
- * Handle B2C result callback
615
+ * Get rate limiter usage for a key
607
616
  */
608
- handleB2CResult(callback: B2BCallback, ipAddress?: string): Promise<object>;
617
+ getRateLimitUsage(key: string): {
618
+ count: number;
619
+ remaining: number;
620
+ resetAt: number;
621
+ } | null;
609
622
  /**
610
- * Handle B2B result callback
623
+ * Handle B2C callback
611
624
  */
612
- handleB2BResult(callback: B2BCallback, ipAddress?: string): Promise<object>;
625
+ handleB2CCallback(callback: B2CCallback): Promise<object>;
613
626
  /**
614
- * Handle Account Balance result callback
627
+ * Handle B2B callback
615
628
  */
616
- handleAccountBalanceResult(callback: AccountBalanceCallback, ipAddress?: string): Promise<object>;
629
+ handleB2BCallback(callback: B2BCallback): Promise<object>;
617
630
  /**
618
- * Handle Transaction Status result callback
631
+ * Handle Account Balance callback
619
632
  */
620
- handleTransactionStatusResult(callback: TransactionStatusCallback, ipAddress?: string): Promise<object>;
633
+ handleAccountBalanceCallback(callback: AccountBalanceCallback): Promise<object>;
621
634
  /**
622
- * Handle Reversal result callback
635
+ * Handle Transaction Status callback
623
636
  */
624
- handleReversalResult(callback: ReversalCallback, ipAddress?: string): Promise<object>;
637
+ handleTransactionStatusCallback(callback: TransactionStatusCallback): Promise<object>;
625
638
  /**
626
- * Get rate limiter usage for a key
639
+ * Handle Reversal callback
627
640
  */
628
- getRateLimitUsage(key: string): {
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
- * Handle B2C result callback
1166
+ * Get rate limiter usage for a key
1252
1167
  */
1253
- async handleB2CResult(callback, ipAddress) {
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
- await this.callbackHandler.handleB2CResult(callback, ipAddress);
1256
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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 result callback
1193
+ * Handle B2B callback
1267
1194
  */
1268
- async handleB2BResult(callback, ipAddress) {
1195
+ async handleB2BCallback(callback) {
1269
1196
  try {
1270
- await this.callbackHandler.handleB2BResult(callback, ipAddress);
1271
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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 result callback
1211
+ * Handle Account Balance callback
1282
1212
  */
1283
- async handleAccountBalanceResult(callback, ipAddress) {
1213
+ async handleAccountBalanceCallback(callback) {
1284
1214
  try {
1285
- await this.callbackHandler.handleAccountBalanceResult(
1286
- callback,
1287
- ipAddress
1288
- );
1289
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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 result callback
1229
+ * Handle Transaction Status callback
1300
1230
  */
1301
- async handleTransactionStatusResult(callback, ipAddress) {
1231
+ async handleTransactionStatusCallback(callback) {
1302
1232
  try {
1303
- await this.callbackHandler.handleTransactionStatusResult(
1304
- callback,
1305
- ipAddress
1306
- );
1307
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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 result callback
1247
+ * Handle Reversal callback
1318
1248
  */
1319
- async handleReversalResult(callback, ipAddress) {
1249
+ async handleReversalCallback(callback) {
1320
1250
  try {
1321
- await this.callbackHandler.handleReversalResult(callback, ipAddress);
1322
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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
- * Handle B2C result callback
1117
+ * Get rate limiter usage for a key
1203
1118
  */
1204
- async handleB2CResult(callback, ipAddress) {
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
- await this.callbackHandler.handleB2CResult(callback, ipAddress);
1207
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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 result callback
1144
+ * Handle B2B callback
1218
1145
  */
1219
- async handleB2BResult(callback, ipAddress) {
1146
+ async handleB2BCallback(callback) {
1220
1147
  try {
1221
- await this.callbackHandler.handleB2BResult(callback, ipAddress);
1222
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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 result callback
1162
+ * Handle Account Balance callback
1233
1163
  */
1234
- async handleAccountBalanceResult(callback, ipAddress) {
1164
+ async handleAccountBalanceCallback(callback) {
1235
1165
  try {
1236
- await this.callbackHandler.handleAccountBalanceResult(
1237
- callback,
1238
- ipAddress
1239
- );
1240
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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 result callback
1180
+ * Handle Transaction Status callback
1251
1181
  */
1252
- async handleTransactionStatusResult(callback, ipAddress) {
1182
+ async handleTransactionStatusCallback(callback) {
1253
1183
  try {
1254
- await this.callbackHandler.handleTransactionStatusResult(
1255
- callback,
1256
- ipAddress
1257
- );
1258
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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 result callback
1198
+ * Handle Reversal callback
1269
1199
  */
1270
- async handleReversalResult(callback, ipAddress) {
1200
+ async handleReversalCallback(callback) {
1271
1201
  try {
1272
- await this.callbackHandler.handleReversalResult(callback, ipAddress);
1273
- return this.callbackHandler.createCallbackResponse(true);
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 result handling error:", error);
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
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@singularity-payments/core",
3
- "version": "0.1.0",
3
+ "version": "1.0.0-alpha.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },