@singularity-payments/nextjs 0.1.0-alpha.8 → 1.0.0-alpha.1

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
@@ -1,6 +1,6 @@
1
1
  import { NextRequest, NextResponse } from 'next/server';
2
2
  import { MpesaClient, MpesaConfig, MpesaClientOptions } from '@singularity-payments/core';
3
- export { C2BCallback, C2BRegisterRequest, C2BRegisterResponse, C2BSimulateRequest, C2BSimulateResponse, MpesaClient, MpesaClientOptions, MpesaConfig, ParsedC2BCallback, ParsedCallbackData, STKCallback, STKPushRequest, STKPushResponse, TransactionStatusRequest, TransactionStatusResponse } from '@singularity-payments/core';
3
+ export { AccountBalanceCallback, AccountBalanceRequest, AccountBalanceResponse, B2BCallback, B2BRequest, B2BResponse, B2CCallback, B2CRequest, B2CResponse, C2BCallback, C2BRegisterRequest, C2BRegisterResponse, GeneralTransactionStatusRequest, GeneralTransactionStatusResponse, MpesaClient, MpesaClientOptions, MpesaConfig, ParsedC2BCallback, ParsedCallbackData, ReversalCallback, ReversalRequest, ReversalResponse, STKCallback, STKPushRequest, STKPushResponse, TransactionStatusCallback, TransactionStatusRequest, TransactionStatusResponse } from '@singularity-payments/core';
4
4
 
5
5
  interface RouteHandler {
6
6
  POST: (request: NextRequest) => Promise<NextResponse>;
@@ -12,6 +12,14 @@ interface MpesaRouteHandlers {
12
12
  b2cResult: RouteHandler;
13
13
  b2cTimeout: RouteHandler;
14
14
  catchAll: RouteHandler;
15
+ b2bResult: RouteHandler;
16
+ b2bTimeout: RouteHandler;
17
+ balanceResult: RouteHandler;
18
+ balanceTimeout: RouteHandler;
19
+ transactionStatusResult: RouteHandler;
20
+ transactionStatusTimeout: RouteHandler;
21
+ reversalResult: RouteHandler;
22
+ reversalTimeout: RouteHandler;
15
23
  }
16
24
 
17
25
  /**
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { NextRequest, NextResponse } from 'next/server';
2
2
  import { MpesaClient, MpesaConfig, MpesaClientOptions } from '@singularity-payments/core';
3
- export { C2BCallback, C2BRegisterRequest, C2BRegisterResponse, C2BSimulateRequest, C2BSimulateResponse, MpesaClient, MpesaClientOptions, MpesaConfig, ParsedC2BCallback, ParsedCallbackData, STKCallback, STKPushRequest, STKPushResponse, TransactionStatusRequest, TransactionStatusResponse } from '@singularity-payments/core';
3
+ export { AccountBalanceCallback, AccountBalanceRequest, AccountBalanceResponse, B2BCallback, B2BRequest, B2BResponse, B2CCallback, B2CRequest, B2CResponse, C2BCallback, C2BRegisterRequest, C2BRegisterResponse, GeneralTransactionStatusRequest, GeneralTransactionStatusResponse, MpesaClient, MpesaClientOptions, MpesaConfig, ParsedC2BCallback, ParsedCallbackData, ReversalCallback, ReversalRequest, ReversalResponse, STKCallback, STKPushRequest, STKPushResponse, TransactionStatusCallback, TransactionStatusRequest, TransactionStatusResponse } from '@singularity-payments/core';
4
4
 
5
5
  interface RouteHandler {
6
6
  POST: (request: NextRequest) => Promise<NextResponse>;
@@ -12,6 +12,14 @@ interface MpesaRouteHandlers {
12
12
  b2cResult: RouteHandler;
13
13
  b2cTimeout: RouteHandler;
14
14
  catchAll: RouteHandler;
15
+ b2bResult: RouteHandler;
16
+ b2bTimeout: RouteHandler;
17
+ balanceResult: RouteHandler;
18
+ balanceTimeout: RouteHandler;
19
+ transactionStatusResult: RouteHandler;
20
+ transactionStatusTimeout: RouteHandler;
21
+ reversalResult: RouteHandler;
22
+ reversalTimeout: RouteHandler;
15
23
  }
16
24
 
17
25
  /**
package/dist/index.js CHANGED
@@ -127,6 +127,206 @@ function createMpesaHandlers(client) {
127
127
  }
128
128
  }
129
129
  },
130
+ /**
131
+ * B2B result handler
132
+ * Handles callbacks from M-Pesa after B2B requests
133
+ */
134
+ b2bResult: {
135
+ POST: async (request) => {
136
+ try {
137
+ const body = await request.json();
138
+ const response = await client.handleB2BCallback(body);
139
+ return import_server.NextResponse.json(response, { status: 200 });
140
+ } catch (error) {
141
+ console.error("B2B Result error:", error);
142
+ return import_server.NextResponse.json(
143
+ {
144
+ ResultCode: 1,
145
+ ResultDesc: "Processing failed"
146
+ },
147
+ { status: 200 }
148
+ );
149
+ }
150
+ }
151
+ },
152
+ /**
153
+ * B2B timeout handler
154
+ * Handles timeout notifications from M-Pesa for B2B requests
155
+ */
156
+ b2bTimeout: {
157
+ POST: async (request) => {
158
+ try {
159
+ const body = await request.json();
160
+ console.log("B2B Timeout:", body);
161
+ return import_server.NextResponse.json(
162
+ {
163
+ ResultCode: 0,
164
+ ResultDesc: "Timeout received"
165
+ },
166
+ { status: 200 }
167
+ );
168
+ } catch (error) {
169
+ console.error("B2B Timeout error:", error);
170
+ return import_server.NextResponse.json(
171
+ {
172
+ ResultCode: 1,
173
+ ResultDesc: "Processing failed"
174
+ },
175
+ { status: 200 }
176
+ );
177
+ }
178
+ }
179
+ },
180
+ /**
181
+ * Account Balance result handler
182
+ * Handles callbacks from M-Pesa after balance query requests
183
+ */
184
+ balanceResult: {
185
+ POST: async (request) => {
186
+ try {
187
+ const body = await request.json();
188
+ const response = await client.handleAccountBalanceCallback(body);
189
+ return import_server.NextResponse.json(response, { status: 200 });
190
+ } catch (error) {
191
+ console.error("Balance Result error:", error);
192
+ return import_server.NextResponse.json(
193
+ {
194
+ ResultCode: 1,
195
+ ResultDesc: "Processing failed"
196
+ },
197
+ { status: 200 }
198
+ );
199
+ }
200
+ }
201
+ },
202
+ /**
203
+ * Account Balance timeout handler
204
+ * Handles timeout notifications from M-Pesa for balance queries
205
+ */
206
+ balanceTimeout: {
207
+ POST: async (request) => {
208
+ try {
209
+ const body = await request.json();
210
+ console.log("Balance Timeout:", body);
211
+ return import_server.NextResponse.json(
212
+ {
213
+ ResultCode: 0,
214
+ ResultDesc: "Timeout received"
215
+ },
216
+ { status: 200 }
217
+ );
218
+ } catch (error) {
219
+ console.error("Balance Timeout error:", error);
220
+ return import_server.NextResponse.json(
221
+ {
222
+ ResultCode: 1,
223
+ ResultDesc: "Processing failed"
224
+ },
225
+ { status: 200 }
226
+ );
227
+ }
228
+ }
229
+ },
230
+ /**
231
+ * Transaction Status result handler
232
+ * Handles callbacks from M-Pesa after transaction status queries
233
+ */
234
+ transactionStatusResult: {
235
+ POST: async (request) => {
236
+ try {
237
+ const body = await request.json();
238
+ const response = await client.handleTransactionStatusCallback(body);
239
+ return import_server.NextResponse.json(response, { status: 200 });
240
+ } catch (error) {
241
+ console.error("Transaction Status Result error:", error);
242
+ return import_server.NextResponse.json(
243
+ {
244
+ ResultCode: 1,
245
+ ResultDesc: "Processing failed"
246
+ },
247
+ { status: 200 }
248
+ );
249
+ }
250
+ }
251
+ },
252
+ /**
253
+ * Transaction Status timeout handler
254
+ * Handles timeout notifications from M-Pesa for status queries
255
+ */
256
+ transactionStatusTimeout: {
257
+ POST: async (request) => {
258
+ try {
259
+ const body = await request.json();
260
+ console.log("Transaction Status Timeout:", body);
261
+ return import_server.NextResponse.json(
262
+ {
263
+ ResultCode: 0,
264
+ ResultDesc: "Timeout received"
265
+ },
266
+ { status: 200 }
267
+ );
268
+ } catch (error) {
269
+ console.error("Transaction Status Timeout error:", error);
270
+ return import_server.NextResponse.json(
271
+ {
272
+ ResultCode: 1,
273
+ ResultDesc: "Processing failed"
274
+ },
275
+ { status: 200 }
276
+ );
277
+ }
278
+ }
279
+ },
280
+ /**
281
+ * Reversal result handler
282
+ * Handles callbacks from M-Pesa after reversal requests
283
+ */
284
+ reversalResult: {
285
+ POST: async (request) => {
286
+ try {
287
+ const body = await request.json();
288
+ const response = await client.handleReversalCallback(body);
289
+ return import_server.NextResponse.json(response, { status: 200 });
290
+ } catch (error) {
291
+ console.error("Reversal Result error:", error);
292
+ return import_server.NextResponse.json(
293
+ {
294
+ ResultCode: 1,
295
+ ResultDesc: "Processing failed"
296
+ },
297
+ { status: 200 }
298
+ );
299
+ }
300
+ }
301
+ },
302
+ /**
303
+ * Reversal timeout handler
304
+ * Handles timeout notifications from M-Pesa for reversal requests
305
+ */
306
+ reversalTimeout: {
307
+ POST: async (request) => {
308
+ try {
309
+ const body = await request.json();
310
+ console.log("Reversal Timeout:", body);
311
+ return import_server.NextResponse.json(
312
+ {
313
+ ResultCode: 0,
314
+ ResultDesc: "Timeout received"
315
+ },
316
+ { status: 200 }
317
+ );
318
+ } catch (error) {
319
+ console.error("Reversal Timeout error:", error);
320
+ return import_server.NextResponse.json(
321
+ {
322
+ ResultCode: 1,
323
+ ResultDesc: "Processing failed"
324
+ },
325
+ { status: 200 }
326
+ );
327
+ }
328
+ }
329
+ },
130
330
  /**
131
331
  * B2C timeout handler
132
332
  * Handles timeout notifications from M-Pesa for B2C requests
@@ -212,60 +412,28 @@ function createMpesaHandlers(client) {
212
412
  return handlers.b2cTimeout.POST(request);
213
413
  }
214
414
  if (lastSegment === "b2b-result") {
215
- const body = await request.json();
216
- const parsed = client.getCallbackHandler().parseB2BCallback(body);
217
- console.log("B2B Result:", parsed);
218
- return import_server.NextResponse.json({ ResultCode: 0, ResultDesc: "Accepted" });
415
+ return handlers.b2bResult.POST(request);
219
416
  }
220
417
  if (lastSegment === "b2b-timeout") {
221
- const body = await request.json();
222
- console.log("B2B Timeout:", body);
223
- return import_server.NextResponse.json({
224
- ResultCode: 0,
225
- ResultDesc: "Timeout received"
226
- });
418
+ return handlers.b2bTimeout.POST(request);
227
419
  }
228
420
  if (lastSegment === "balance-result") {
229
- const body = await request.json();
230
- const parsed = client.getCallbackHandler().parseAccountBalanceCallback(body);
231
- console.log("Balance Result:", parsed);
232
- return import_server.NextResponse.json({ ResultCode: 0, ResultDesc: "Accepted" });
421
+ return handlers.balanceResult.POST(request);
233
422
  }
234
423
  if (lastSegment === "balance-timeout") {
235
- const body = await request.json();
236
- console.log("Balance Timeout:", body);
237
- return import_server.NextResponse.json({
238
- ResultCode: 0,
239
- ResultDesc: "Timeout received"
240
- });
424
+ return handlers.balanceTimeout.POST(request);
241
425
  }
242
426
  if (lastSegment === "status-result") {
243
- const body = await request.json();
244
- const parsed = client.getCallbackHandler().parseTransactionStatusCallback(body);
245
- console.log("Status Result:", parsed);
246
- return import_server.NextResponse.json({ ResultCode: 0, ResultDesc: "Accepted" });
427
+ return handlers.transactionStatusResult.POST(request);
247
428
  }
248
429
  if (lastSegment === "status-timeout") {
249
- const body = await request.json();
250
- console.log("Status Timeout:", body);
251
- return import_server.NextResponse.json({
252
- ResultCode: 0,
253
- ResultDesc: "Timeout received"
254
- });
430
+ return handlers.transactionStatusTimeout.POST(request);
255
431
  }
256
432
  if (lastSegment === "reversal-result") {
257
- const body = await request.json();
258
- const parsed = client.getCallbackHandler().parseReversalCallback(body);
259
- console.log("Reversal Result:", parsed);
260
- return import_server.NextResponse.json({ ResultCode: 0, ResultDesc: "Accepted" });
433
+ return handlers.reversalResult.POST(request);
261
434
  }
262
435
  if (lastSegment === "reversal-timeout") {
263
- const body = await request.json();
264
- console.log("Reversal Timeout:", body);
265
- return import_server.NextResponse.json({
266
- ResultCode: 0,
267
- ResultDesc: "Timeout received"
268
- });
436
+ return handlers.reversalTimeout.POST(request);
269
437
  }
270
438
  if (lastSegment === "stk-push") {
271
439
  const body = await request.json();
package/dist/index.mjs CHANGED
@@ -101,6 +101,206 @@ function createMpesaHandlers(client) {
101
101
  }
102
102
  }
103
103
  },
104
+ /**
105
+ * B2B result handler
106
+ * Handles callbacks from M-Pesa after B2B requests
107
+ */
108
+ b2bResult: {
109
+ POST: async (request) => {
110
+ try {
111
+ const body = await request.json();
112
+ const response = await client.handleB2BCallback(body);
113
+ return NextResponse.json(response, { status: 200 });
114
+ } catch (error) {
115
+ console.error("B2B Result error:", error);
116
+ return NextResponse.json(
117
+ {
118
+ ResultCode: 1,
119
+ ResultDesc: "Processing failed"
120
+ },
121
+ { status: 200 }
122
+ );
123
+ }
124
+ }
125
+ },
126
+ /**
127
+ * B2B timeout handler
128
+ * Handles timeout notifications from M-Pesa for B2B requests
129
+ */
130
+ b2bTimeout: {
131
+ POST: async (request) => {
132
+ try {
133
+ const body = await request.json();
134
+ console.log("B2B Timeout:", body);
135
+ return NextResponse.json(
136
+ {
137
+ ResultCode: 0,
138
+ ResultDesc: "Timeout received"
139
+ },
140
+ { status: 200 }
141
+ );
142
+ } catch (error) {
143
+ console.error("B2B Timeout error:", error);
144
+ return NextResponse.json(
145
+ {
146
+ ResultCode: 1,
147
+ ResultDesc: "Processing failed"
148
+ },
149
+ { status: 200 }
150
+ );
151
+ }
152
+ }
153
+ },
154
+ /**
155
+ * Account Balance result handler
156
+ * Handles callbacks from M-Pesa after balance query requests
157
+ */
158
+ balanceResult: {
159
+ POST: async (request) => {
160
+ try {
161
+ const body = await request.json();
162
+ const response = await client.handleAccountBalanceCallback(body);
163
+ return NextResponse.json(response, { status: 200 });
164
+ } catch (error) {
165
+ console.error("Balance Result error:", error);
166
+ return NextResponse.json(
167
+ {
168
+ ResultCode: 1,
169
+ ResultDesc: "Processing failed"
170
+ },
171
+ { status: 200 }
172
+ );
173
+ }
174
+ }
175
+ },
176
+ /**
177
+ * Account Balance timeout handler
178
+ * Handles timeout notifications from M-Pesa for balance queries
179
+ */
180
+ balanceTimeout: {
181
+ POST: async (request) => {
182
+ try {
183
+ const body = await request.json();
184
+ console.log("Balance Timeout:", body);
185
+ return NextResponse.json(
186
+ {
187
+ ResultCode: 0,
188
+ ResultDesc: "Timeout received"
189
+ },
190
+ { status: 200 }
191
+ );
192
+ } catch (error) {
193
+ console.error("Balance Timeout error:", error);
194
+ return NextResponse.json(
195
+ {
196
+ ResultCode: 1,
197
+ ResultDesc: "Processing failed"
198
+ },
199
+ { status: 200 }
200
+ );
201
+ }
202
+ }
203
+ },
204
+ /**
205
+ * Transaction Status result handler
206
+ * Handles callbacks from M-Pesa after transaction status queries
207
+ */
208
+ transactionStatusResult: {
209
+ POST: async (request) => {
210
+ try {
211
+ const body = await request.json();
212
+ const response = await client.handleTransactionStatusCallback(body);
213
+ return NextResponse.json(response, { status: 200 });
214
+ } catch (error) {
215
+ console.error("Transaction Status Result error:", error);
216
+ return NextResponse.json(
217
+ {
218
+ ResultCode: 1,
219
+ ResultDesc: "Processing failed"
220
+ },
221
+ { status: 200 }
222
+ );
223
+ }
224
+ }
225
+ },
226
+ /**
227
+ * Transaction Status timeout handler
228
+ * Handles timeout notifications from M-Pesa for status queries
229
+ */
230
+ transactionStatusTimeout: {
231
+ POST: async (request) => {
232
+ try {
233
+ const body = await request.json();
234
+ console.log("Transaction Status Timeout:", body);
235
+ return NextResponse.json(
236
+ {
237
+ ResultCode: 0,
238
+ ResultDesc: "Timeout received"
239
+ },
240
+ { status: 200 }
241
+ );
242
+ } catch (error) {
243
+ console.error("Transaction Status Timeout error:", error);
244
+ return NextResponse.json(
245
+ {
246
+ ResultCode: 1,
247
+ ResultDesc: "Processing failed"
248
+ },
249
+ { status: 200 }
250
+ );
251
+ }
252
+ }
253
+ },
254
+ /**
255
+ * Reversal result handler
256
+ * Handles callbacks from M-Pesa after reversal requests
257
+ */
258
+ reversalResult: {
259
+ POST: async (request) => {
260
+ try {
261
+ const body = await request.json();
262
+ const response = await client.handleReversalCallback(body);
263
+ return NextResponse.json(response, { status: 200 });
264
+ } catch (error) {
265
+ console.error("Reversal Result error:", error);
266
+ return NextResponse.json(
267
+ {
268
+ ResultCode: 1,
269
+ ResultDesc: "Processing failed"
270
+ },
271
+ { status: 200 }
272
+ );
273
+ }
274
+ }
275
+ },
276
+ /**
277
+ * Reversal timeout handler
278
+ * Handles timeout notifications from M-Pesa for reversal requests
279
+ */
280
+ reversalTimeout: {
281
+ POST: async (request) => {
282
+ try {
283
+ const body = await request.json();
284
+ console.log("Reversal Timeout:", body);
285
+ return NextResponse.json(
286
+ {
287
+ ResultCode: 0,
288
+ ResultDesc: "Timeout received"
289
+ },
290
+ { status: 200 }
291
+ );
292
+ } catch (error) {
293
+ console.error("Reversal Timeout error:", error);
294
+ return NextResponse.json(
295
+ {
296
+ ResultCode: 1,
297
+ ResultDesc: "Processing failed"
298
+ },
299
+ { status: 200 }
300
+ );
301
+ }
302
+ }
303
+ },
104
304
  /**
105
305
  * B2C timeout handler
106
306
  * Handles timeout notifications from M-Pesa for B2C requests
@@ -186,60 +386,28 @@ function createMpesaHandlers(client) {
186
386
  return handlers.b2cTimeout.POST(request);
187
387
  }
188
388
  if (lastSegment === "b2b-result") {
189
- const body = await request.json();
190
- const parsed = client.getCallbackHandler().parseB2BCallback(body);
191
- console.log("B2B Result:", parsed);
192
- return NextResponse.json({ ResultCode: 0, ResultDesc: "Accepted" });
389
+ return handlers.b2bResult.POST(request);
193
390
  }
194
391
  if (lastSegment === "b2b-timeout") {
195
- const body = await request.json();
196
- console.log("B2B Timeout:", body);
197
- return NextResponse.json({
198
- ResultCode: 0,
199
- ResultDesc: "Timeout received"
200
- });
392
+ return handlers.b2bTimeout.POST(request);
201
393
  }
202
394
  if (lastSegment === "balance-result") {
203
- const body = await request.json();
204
- const parsed = client.getCallbackHandler().parseAccountBalanceCallback(body);
205
- console.log("Balance Result:", parsed);
206
- return NextResponse.json({ ResultCode: 0, ResultDesc: "Accepted" });
395
+ return handlers.balanceResult.POST(request);
207
396
  }
208
397
  if (lastSegment === "balance-timeout") {
209
- const body = await request.json();
210
- console.log("Balance Timeout:", body);
211
- return NextResponse.json({
212
- ResultCode: 0,
213
- ResultDesc: "Timeout received"
214
- });
398
+ return handlers.balanceTimeout.POST(request);
215
399
  }
216
400
  if (lastSegment === "status-result") {
217
- const body = await request.json();
218
- const parsed = client.getCallbackHandler().parseTransactionStatusCallback(body);
219
- console.log("Status Result:", parsed);
220
- return NextResponse.json({ ResultCode: 0, ResultDesc: "Accepted" });
401
+ return handlers.transactionStatusResult.POST(request);
221
402
  }
222
403
  if (lastSegment === "status-timeout") {
223
- const body = await request.json();
224
- console.log("Status Timeout:", body);
225
- return NextResponse.json({
226
- ResultCode: 0,
227
- ResultDesc: "Timeout received"
228
- });
404
+ return handlers.transactionStatusTimeout.POST(request);
229
405
  }
230
406
  if (lastSegment === "reversal-result") {
231
- const body = await request.json();
232
- const parsed = client.getCallbackHandler().parseReversalCallback(body);
233
- console.log("Reversal Result:", parsed);
234
- return NextResponse.json({ ResultCode: 0, ResultDesc: "Accepted" });
407
+ return handlers.reversalResult.POST(request);
235
408
  }
236
409
  if (lastSegment === "reversal-timeout") {
237
- const body = await request.json();
238
- console.log("Reversal Timeout:", body);
239
- return NextResponse.json({
240
- ResultCode: 0,
241
- ResultDesc: "Timeout received"
242
- });
410
+ return handlers.reversalTimeout.POST(request);
243
411
  }
244
412
  if (lastSegment === "stk-push") {
245
413
  const body = await request.json();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@singularity-payments/nextjs",
3
- "version": "0.1.0-alpha.8",
3
+ "version": "1.0.0-alpha.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -31,7 +31,7 @@
31
31
  "next": ">=13.0.0"
32
32
  },
33
33
  "dependencies": {
34
- "@singularity-payments/core": "0.1.0-alpha.7"
34
+ "@singularity-payments/core": "1.0.0-alpha.1"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "^25.0.3",