@misterhomer1992/miit-bot-payment 1.1.7 → 2.0.4
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/config/ConfigurationManager.d.ts +64 -0
- package/dist/config/ConfigurationManager.d.ts.map +1 -0
- package/dist/config/ConfigurationManager.js +144 -0
- package/dist/config/ConfigurationManager.js.map +1 -0
- package/dist/config/defaults.d.ts +18 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +26 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/environment.d.ts +38 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +91 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +18 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +53 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/cache/InMemoryCache.d.ts +17 -0
- package/dist/modules/cache/InMemoryCache.d.ts.map +1 -0
- package/dist/modules/cache/InMemoryCache.js +77 -0
- package/dist/modules/cache/InMemoryCache.js.map +1 -0
- package/dist/modules/cache/index.d.ts +3 -0
- package/dist/modules/cache/index.d.ts.map +1 -0
- package/dist/modules/cache/index.js +19 -0
- package/dist/modules/cache/index.js.map +1 -0
- package/dist/modules/cache/types.d.ts +52 -0
- package/dist/modules/cache/types.d.ts.map +1 -0
- package/dist/modules/cache/types.js +3 -0
- package/dist/modules/cache/types.js.map +1 -0
- package/dist/modules/errors/index.d.ts +2 -0
- package/dist/modules/errors/index.d.ts.map +1 -0
- package/dist/modules/errors/index.js +19 -0
- package/dist/modules/errors/index.js.map +1 -0
- package/dist/modules/errors/types.d.ts +112 -0
- package/dist/modules/errors/types.d.ts.map +1 -0
- package/dist/modules/errors/types.js +174 -0
- package/dist/modules/errors/types.js.map +1 -0
- package/dist/modules/payments/api.d.ts +63 -1
- package/dist/modules/payments/api.d.ts.map +1 -1
- package/dist/modules/payments/api.js +103 -1
- package/dist/modules/payments/api.js.map +1 -1
- package/dist/modules/payments/const.d.ts.map +1 -1
- package/dist/modules/payments/const.js +1 -0
- package/dist/modules/payments/const.js.map +1 -1
- package/dist/modules/payments/index.d.ts +8 -0
- package/dist/modules/payments/index.d.ts.map +1 -1
- package/dist/modules/payments/index.js +8 -0
- package/dist/modules/payments/index.js.map +1 -1
- package/dist/modules/payments/service.d.ts +42 -2
- package/dist/modules/payments/service.d.ts.map +1 -1
- package/dist/modules/payments/service.js +132 -3
- package/dist/modules/payments/service.js.map +1 -1
- package/dist/modules/payments/subscription-check-webhook.handler.d.ts +85 -0
- package/dist/modules/payments/subscription-check-webhook.handler.d.ts.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.handler.js +155 -0
- package/dist/modules/payments/subscription-check-webhook.handler.js.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.service.d.ts +59 -0
- package/dist/modules/payments/subscription-check-webhook.service.d.ts.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.service.js +330 -0
- package/dist/modules/payments/subscription-check-webhook.service.js.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.types.d.ts +25 -0
- package/dist/modules/payments/subscription-check-webhook.types.d.ts.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.types.js +3 -0
- package/dist/modules/payments/subscription-check-webhook.types.js.map +1 -0
- package/dist/modules/payments/types.d.ts +69 -2
- package/dist/modules/payments/types.d.ts.map +1 -1
- package/dist/modules/payments/utils.d.ts +151 -5
- package/dist/modules/payments/utils.d.ts.map +1 -1
- package/dist/modules/payments/utils.js +253 -9
- package/dist/modules/payments/utils.js.map +1 -1
- package/dist/modules/payments/wayforpay.service.d.ts +39 -0
- package/dist/modules/payments/wayforpay.service.d.ts.map +1 -0
- package/dist/modules/payments/wayforpay.service.js +217 -0
- package/dist/modules/payments/wayforpay.service.js.map +1 -0
- package/dist/modules/payments/wayforpay.types.d.ts +115 -0
- package/dist/modules/payments/wayforpay.types.d.ts.map +1 -0
- package/dist/modules/payments/wayforpay.types.js +3 -0
- package/dist/modules/payments/wayforpay.types.js.map +1 -0
- package/dist/modules/payments/webhook.handler.d.ts +98 -0
- package/dist/modules/payments/webhook.handler.d.ts.map +1 -0
- package/dist/modules/payments/webhook.handler.js +153 -0
- package/dist/modules/payments/webhook.handler.js.map +1 -0
- package/dist/modules/payments/webhook.service.d.ts +99 -0
- package/dist/modules/payments/webhook.service.d.ts.map +1 -0
- package/dist/modules/payments/webhook.service.js +672 -0
- package/dist/modules/payments/webhook.service.js.map +1 -0
- package/dist/modules/payments/webhook.types.d.ts +35 -0
- package/dist/modules/payments/webhook.types.d.ts.map +1 -0
- package/dist/modules/payments/webhook.types.js +3 -0
- package/dist/modules/payments/webhook.types.js.map +1 -0
- package/dist/modules/subscription/change.service.d.ts +80 -0
- package/dist/modules/subscription/change.service.d.ts.map +1 -0
- package/dist/modules/subscription/change.service.js +226 -0
- package/dist/modules/subscription/change.service.js.map +1 -0
- package/dist/modules/subscription/index.d.ts +2 -0
- package/dist/modules/subscription/index.d.ts.map +1 -1
- package/dist/modules/subscription/index.js +2 -0
- package/dist/modules/subscription/index.js.map +1 -1
- package/dist/modules/subscription/service.d.ts +8 -1
- package/dist/modules/subscription/service.d.ts.map +1 -1
- package/dist/modules/subscription/service.js +58 -1
- package/dist/modules/subscription/service.js.map +1 -1
- package/dist/modules/subscription/status-check.handler.d.ts +117 -0
- package/dist/modules/subscription/status-check.handler.d.ts.map +1 -0
- package/dist/modules/subscription/status-check.handler.js +164 -0
- package/dist/modules/subscription/status-check.handler.js.map +1 -0
- package/dist/modules/subscription/types.d.ts +37 -1
- package/dist/modules/subscription/types.d.ts.map +1 -1
- package/dist/modules/subscriptionPlan/const.d.ts +5 -0
- package/dist/modules/subscriptionPlan/const.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/const.js +106 -0
- package/dist/modules/subscriptionPlan/const.js.map +1 -0
- package/dist/modules/subscriptionPlan/index.d.ts +5 -0
- package/dist/modules/subscriptionPlan/index.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/index.js +21 -0
- package/dist/modules/subscriptionPlan/index.js.map +1 -0
- package/dist/modules/subscriptionPlan/repository.d.ts +22 -0
- package/dist/modules/subscriptionPlan/repository.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/repository.js +95 -0
- package/dist/modules/subscriptionPlan/repository.js.map +1 -0
- package/dist/modules/subscriptionPlan/service.d.ts +21 -0
- package/dist/modules/subscriptionPlan/service.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/service.js +128 -0
- package/dist/modules/subscriptionPlan/service.js.map +1 -0
- package/dist/modules/subscriptionPlan/types.d.ts +40 -0
- package/dist/modules/subscriptionPlan/types.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/types.js +3 -0
- package/dist/modules/subscriptionPlan/types.js.map +1 -0
- package/dist/modules/token/const.d.ts +7 -0
- package/dist/modules/token/const.d.ts.map +1 -0
- package/dist/modules/token/const.js +66 -0
- package/dist/modules/token/const.js.map +1 -0
- package/dist/modules/token/index.d.ts +4 -0
- package/dist/modules/token/index.d.ts.map +1 -0
- package/dist/modules/token/index.js +20 -0
- package/dist/modules/token/index.js.map +1 -0
- package/dist/modules/token/service.d.ts +46 -0
- package/dist/modules/token/service.d.ts.map +1 -0
- package/dist/modules/token/service.js +249 -0
- package/dist/modules/token/service.js.map +1 -0
- package/dist/modules/token/types.d.ts +109 -0
- package/dist/modules/token/types.d.ts.map +1 -0
- package/dist/modules/token/types.js +3 -0
- package/dist/modules/token/types.js.map +1 -0
- package/dist/modules/tokenPack/const.d.ts +4 -0
- package/dist/modules/tokenPack/const.d.ts.map +1 -0
- package/dist/modules/tokenPack/const.js +10 -0
- package/dist/modules/tokenPack/const.js.map +1 -0
- package/dist/modules/tokenPack/index.d.ts +5 -0
- package/dist/modules/tokenPack/index.d.ts.map +1 -0
- package/dist/modules/tokenPack/index.js +21 -0
- package/dist/modules/tokenPack/index.js.map +1 -0
- package/dist/modules/tokenPack/repository.d.ts +32 -0
- package/dist/modules/tokenPack/repository.d.ts.map +1 -0
- package/dist/modules/tokenPack/repository.js +103 -0
- package/dist/modules/tokenPack/repository.js.map +1 -0
- package/dist/modules/tokenPack/service.d.ts +28 -0
- package/dist/modules/tokenPack/service.d.ts.map +1 -0
- package/dist/modules/tokenPack/service.js +106 -0
- package/dist/modules/tokenPack/service.js.map +1 -0
- package/dist/modules/tokenPack/types.d.ts +124 -0
- package/dist/modules/tokenPack/types.d.ts.map +1 -0
- package/dist/modules/tokenPack/types.js +3 -0
- package/dist/modules/tokenPack/types.js.map +1 -0
- package/package.json +9 -5
- package/src/config/ConfigurationManager.ts +159 -0
- package/src/config/defaults.ts +27 -0
- package/src/config/environment.ts +94 -0
- package/src/config/index.ts +22 -0
- package/src/config/types.ts +56 -0
- package/src/index.ts +29 -0
- package/src/modules/cache/InMemoryCache.ts +98 -0
- package/src/modules/cache/index.ts +2 -0
- package/src/modules/cache/types.ts +60 -0
- package/src/modules/cancellableAPI/utils.ts +60 -0
- package/src/modules/errors/index.ts +16 -0
- package/src/modules/errors/types.ts +201 -0
- package/src/modules/invoice/const.ts +7 -0
- package/src/modules/invoice/index.ts +4 -0
- package/src/modules/invoice/repository.ts +52 -0
- package/src/modules/invoice/service.ts +44 -0
- package/src/modules/invoice/types.ts +47 -0
- package/src/modules/logger/types.ts +8 -0
- package/src/modules/network/utils.ts +24 -0
- package/src/modules/payments/api.ts +289 -0
- package/src/modules/payments/const.ts +11 -0
- package/src/modules/payments/index.ts +14 -0
- package/src/modules/payments/repository.ts +125 -0
- package/src/modules/payments/service.test.ts +400 -0
- package/src/modules/payments/service.ts +365 -0
- package/src/modules/payments/subscription-check-webhook.handler.integration.test.ts +935 -0
- package/src/modules/payments/subscription-check-webhook.handler.ts +211 -0
- package/src/modules/payments/subscription-check-webhook.service.ts +398 -0
- package/src/modules/payments/subscription-check-webhook.types.ts +29 -0
- package/src/modules/payments/types.ts +193 -0
- package/src/modules/payments/utils.ts +428 -0
- package/src/modules/payments/wayforpay.service.test.ts +375 -0
- package/src/modules/payments/wayforpay.service.ts +284 -0
- package/src/modules/payments/wayforpay.types.ts +138 -0
- package/src/modules/payments/webhook.handler.integration.test.ts +975 -0
- package/src/modules/payments/webhook.handler.ts +219 -0
- package/src/modules/payments/webhook.service.ts +812 -0
- package/src/modules/payments/webhook.types.ts +38 -0
- package/src/modules/subscription/change.service.ts +317 -0
- package/src/modules/subscription/const.ts +9 -0
- package/src/modules/subscription/index.ts +5 -0
- package/src/modules/subscription/repository.ts +277 -0
- package/src/modules/subscription/service.test.ts +665 -0
- package/src/modules/subscription/service.ts +328 -0
- package/src/modules/subscription/status-check.handler.ts +254 -0
- package/src/modules/subscription/types.ts +267 -0
- package/src/modules/subscription/utils.ts +5 -0
- package/src/modules/subscriptionPlan/const.ts +106 -0
- package/src/modules/subscriptionPlan/index.ts +4 -0
- package/src/modules/subscriptionPlan/repository.ts +129 -0
- package/src/modules/subscriptionPlan/service.test.ts +401 -0
- package/src/modules/subscriptionPlan/service.ts +148 -0
- package/src/modules/subscriptionPlan/types.ts +67 -0
- package/src/modules/token/const.ts +64 -0
- package/src/modules/token/index.ts +3 -0
- package/src/modules/token/service.test.ts +499 -0
- package/src/modules/token/service.ts +297 -0
- package/src/modules/token/types.ts +124 -0
- package/src/modules/tokenPack/const.ts +9 -0
- package/src/modules/tokenPack/index.ts +4 -0
- package/src/modules/tokenPack/repository.ts +144 -0
- package/src/modules/tokenPack/service.ts +119 -0
- package/src/modules/tokenPack/types.ts +131 -0
- package/src/modules/user/index.ts +3 -0
- package/src/modules/user/types.ts +143 -0
- package/src/modules/user/userRepository.ts +64 -0
- package/src/modules/user/userService.ts +68 -0
- package/src/types/extend-express.d.ts +16 -0
- package/src/types/function.ts +5 -0
- package/src/types/utilities.ts +22 -0
- package/src/utils.ts +53 -0
- package/tsconfig.json +29 -0
- package/dist/modules/subscription/subscriptionPlan.d.ts +0 -4
- package/dist/modules/subscription/subscriptionPlan.d.ts.map +0 -1
- package/dist/modules/subscription/subscriptionPlan.js +0 -67
- package/dist/modules/subscription/subscriptionPlan.js.map +0 -1
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { Logger } from '../logger/types';
|
|
2
|
+
import { WebhookHandlerService } from './webhook.service';
|
|
3
|
+
import type { WayForPayCallbackData } from './wayforpay.types';
|
|
4
|
+
import type { IWebhookHandlerService, WebhookProcessingResult } from './webhook.types';
|
|
5
|
+
import type { TokenPackPlan } from '../token/types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Request object interface for webhook handling.
|
|
9
|
+
* Compatible with Express.js and similar frameworks.
|
|
10
|
+
*/
|
|
11
|
+
interface WebhookRequest {
|
|
12
|
+
body: unknown;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Response object interface for webhook handling.
|
|
17
|
+
* Compatible with Express.js and similar frameworks.
|
|
18
|
+
*/
|
|
19
|
+
interface WebhookResponse {
|
|
20
|
+
status(code: number): WebhookResponse;
|
|
21
|
+
json(data: unknown): void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Configuration options for the webhook handler.
|
|
26
|
+
*/
|
|
27
|
+
interface WebhookHandlerConfig {
|
|
28
|
+
logger: Logger;
|
|
29
|
+
webhookService?: IWebhookHandlerService;
|
|
30
|
+
tokenPackPlans?: TokenPackPlan[];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Result of parsing the webhook request body.
|
|
35
|
+
*/
|
|
36
|
+
interface ParseResult {
|
|
37
|
+
success: boolean;
|
|
38
|
+
data?: WayForPayCallbackData;
|
|
39
|
+
error?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* WebhookHandler provides HTTP request handling for WayForPay payment callbacks.
|
|
44
|
+
* It validates incoming requests and delegates processing to the WebhookHandlerService.
|
|
45
|
+
*
|
|
46
|
+
* Usage with Express:
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const handler = new WebhookHandler({ logger });
|
|
49
|
+
* app.post('/webhook/wayforpay', (req, res) => handler.handleRequest(req, res));
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* Usage with Cloud Functions:
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const handler = new WebhookHandler({ logger });
|
|
55
|
+
* export const webhookFunction = (req, res) => handler.handleRequest(req, res);
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export class WebhookHandler {
|
|
59
|
+
private readonly logger: Logger;
|
|
60
|
+
private readonly webhookService: IWebhookHandlerService;
|
|
61
|
+
|
|
62
|
+
constructor(config: WebhookHandlerConfig) {
|
|
63
|
+
this.logger = config.logger;
|
|
64
|
+
this.webhookService =
|
|
65
|
+
config.webhookService ||
|
|
66
|
+
new WebhookHandlerService({
|
|
67
|
+
logger: config.logger,
|
|
68
|
+
tokenPackPlans: config.tokenPackPlans,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Handles an incoming HTTP request from WayForPay.
|
|
74
|
+
* Validates the request body, processes the payment callback,
|
|
75
|
+
* and returns the appropriate response.
|
|
76
|
+
*
|
|
77
|
+
* @param req - The HTTP request object
|
|
78
|
+
* @param res - The HTTP response object
|
|
79
|
+
*/
|
|
80
|
+
public async handleRequest(req: WebhookRequest, res: WebhookResponse): Promise<void> {
|
|
81
|
+
this.logger.info({
|
|
82
|
+
message: 'Received WayForPay webhook request',
|
|
83
|
+
payload: {},
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// Parse and validate the request body
|
|
87
|
+
const parseResult = this.parseRequestBody(req.body);
|
|
88
|
+
|
|
89
|
+
if (!parseResult.success || !parseResult.data) {
|
|
90
|
+
this.logger.warning({
|
|
91
|
+
message: 'Invalid webhook request body',
|
|
92
|
+
payload: { error: parseResult.error },
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
res.status(400).json({
|
|
96
|
+
error: parseResult.error || 'Invalid request body',
|
|
97
|
+
});
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const callbackData = parseResult.data;
|
|
102
|
+
|
|
103
|
+
// Process the webhook
|
|
104
|
+
const result = await this.webhookService.processPaymentWebhook(callbackData);
|
|
105
|
+
|
|
106
|
+
// Return the response to WayForPay
|
|
107
|
+
this.sendResponse(res, result);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Processes callback data directly without HTTP request parsing.
|
|
112
|
+
* Useful for testing or when data is already parsed.
|
|
113
|
+
*
|
|
114
|
+
* @param callbackData - The parsed callback data from WayForPay
|
|
115
|
+
* @returns Processing result with response to send back to WayForPay
|
|
116
|
+
*/
|
|
117
|
+
public async processCallback(callbackData: WayForPayCallbackData): Promise<WebhookProcessingResult> {
|
|
118
|
+
return this.webhookService.processPaymentWebhook(callbackData);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Parses and validates the webhook request body.
|
|
123
|
+
*/
|
|
124
|
+
private parseRequestBody(body: unknown): ParseResult {
|
|
125
|
+
if (!body || typeof body !== 'object') {
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
error: 'Request body must be a JSON object',
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const data = body as Record<string, unknown>;
|
|
133
|
+
|
|
134
|
+
// Validate required fields
|
|
135
|
+
const requiredFields = [
|
|
136
|
+
'merchantAccount',
|
|
137
|
+
'orderReference',
|
|
138
|
+
'merchantSignature',
|
|
139
|
+
'amount',
|
|
140
|
+
'currency',
|
|
141
|
+
'transactionStatus',
|
|
142
|
+
];
|
|
143
|
+
|
|
144
|
+
const missingFields = requiredFields.filter(
|
|
145
|
+
(field) => data[field] === undefined || data[field] === null,
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
if (missingFields.length > 0) {
|
|
149
|
+
return {
|
|
150
|
+
success: false,
|
|
151
|
+
error: `Missing required fields: ${missingFields.join(', ')}`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Validate transaction status
|
|
156
|
+
const validStatuses = ['Approved', 'Declined', 'Expired', 'Pending', 'InProcessing', 'Refunded'];
|
|
157
|
+
if (!validStatuses.includes(data.transactionStatus as string)) {
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
error: `Invalid transaction status: ${data.transactionStatus}`,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return {
|
|
165
|
+
success: true,
|
|
166
|
+
data: data as unknown as WayForPayCallbackData,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Sends the response back to WayForPay.
|
|
172
|
+
* WayForPay expects a 200 status with a signed response body.
|
|
173
|
+
*/
|
|
174
|
+
private sendResponse(res: WebhookResponse, result: WebhookProcessingResult): void {
|
|
175
|
+
// WayForPay expects a 200 status code even for declined transactions
|
|
176
|
+
// The accept/decline status is communicated in the response body
|
|
177
|
+
res.status(200).json(result.response);
|
|
178
|
+
|
|
179
|
+
this.logger.info({
|
|
180
|
+
message: 'Webhook response sent',
|
|
181
|
+
payload: {
|
|
182
|
+
success: result.success,
|
|
183
|
+
status: result.response.status,
|
|
184
|
+
orderReference: result.response.orderReference,
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Creates a webhook handler function for use with serverless platforms.
|
|
192
|
+
* Returns a function that can be directly used as a Cloud Function or Lambda handler.
|
|
193
|
+
*
|
|
194
|
+
* @param config - Configuration options for the webhook handler
|
|
195
|
+
* @returns An async function that handles webhook requests
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```typescript
|
|
199
|
+
* // Firebase Cloud Functions
|
|
200
|
+
* import * as functions from 'firebase-functions';
|
|
201
|
+
* import { createWebhookHandler } from 'miit-bot-payment';
|
|
202
|
+
*
|
|
203
|
+
* const logger = { info: console.log, warning: console.warn, error: console.error };
|
|
204
|
+
* export const paymentWebhook = functions.https.onRequest(createWebhookHandler({ logger }));
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
export function createWebhookHandler(
|
|
208
|
+
config: WebhookHandlerConfig,
|
|
209
|
+
): (req: WebhookRequest, res: WebhookResponse) => Promise<void> {
|
|
210
|
+
const handler = new WebhookHandler(config);
|
|
211
|
+
return (req: WebhookRequest, res: WebhookResponse) => handler.handleRequest(req, res);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Type export for the webhook handler function signature.
|
|
216
|
+
*/
|
|
217
|
+
export type WebhookHandlerFunction = (req: WebhookRequest, res: WebhookResponse) => Promise<void>;
|
|
218
|
+
|
|
219
|
+
export type { WebhookRequest, WebhookResponse, WebhookHandlerConfig };
|