58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import { Router } from 'express'
|
|
|
|
import { createRateLimitMiddleware } from '../middleware/rate-limit.js'
|
|
import { handleKuaishouFeifeiNotify } from '../services/platforms/kuaishou-feifei/notify-service.js'
|
|
import { createRequestId, logIntegration } from '../utils/logger.js'
|
|
import { sendRouteError } from '../utils/http.js'
|
|
|
|
const router = Router()
|
|
|
|
const notifyRateLimit = createRateLimitMiddleware({
|
|
scope: 'kuaishouFeifeiNotify',
|
|
windowMs: 60_000,
|
|
max: 300,
|
|
})
|
|
|
|
router.post('/notify', notifyRateLimit, async (req, res) => {
|
|
const requestId = createRequestId('ffn')
|
|
const startedAt = Date.now()
|
|
|
|
logIntegration('[kuaishou-feifei/notify]', '收到 kuaishou-feifei 订单通知', {
|
|
requestId,
|
|
method: req.method,
|
|
originalUrl: req.originalUrl,
|
|
ip: req.ip,
|
|
headers: {
|
|
'content-type': req.headers['content-type'],
|
|
'x-app-key': req.headers['x-app-key'],
|
|
'x-timestamp': req.headers['x-timestamp'],
|
|
'x-sign': req.headers['x-sign'],
|
|
},
|
|
body: req.body,
|
|
rawBody: req.rawBody,
|
|
})
|
|
|
|
try {
|
|
const result = await handleKuaishouFeifeiNotify({
|
|
body: req.body,
|
|
headers: req.headers,
|
|
rawBody: req.rawBody,
|
|
})
|
|
logIntegration('[kuaishou-feifei/notify]', '订单通知处理完成', {
|
|
requestId,
|
|
durationMs: Date.now() - startedAt,
|
|
result,
|
|
})
|
|
res.status(200).json({ code: 0 })
|
|
} catch (error) {
|
|
logIntegration('[kuaishou-feifei/notify]', '订单通知处理失败', {
|
|
requestId,
|
|
durationMs: Date.now() - startedAt,
|
|
error,
|
|
}, { level: 'error' })
|
|
sendRouteError(res, error, 'kuaishou-feifei 通知处理失败', '[kuaishou-feifei/notify]')
|
|
}
|
|
})
|
|
|
|
export default router
|