@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 +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +208 -40
- package/dist/index.mjs +208 -40
- package/package.json +2 -2
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,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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": "
|
|
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": "
|
|
34
|
+
"@singularity-payments/core": "1.0.0-alpha.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "^25.0.3",
|