first commit

This commit is contained in:
2025-11-01 09:24:26 +08:00
commit 6516d8dc78
87 changed files with 7558 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
import type { Request, Response } from 'express';
import { env } from '../../config/env.js';
import { TransactionModel } from '../../models/transaction.model.js';
import { getDefaultUserId } from '../../services/user-context.js';
const maskSecret = (secret?: string | null) => {
if (!secret) return null;
if (secret.length <= 6) return '*'.repeat(secret.length);
return `${secret.slice(0, 3)}***${secret.slice(-3)}`;
};
export const getNotificationStatus = async (req: Request, res: Response) => {
const userId = await getDefaultUserId();
const filter = { userId, source: 'notification' as const };
const count = await TransactionModel.countDocuments(filter);
const latest = (await TransactionModel.findOne(filter).sort({ createdAt: -1 }).lean()) as
| { createdAt?: Date }
| null;
const ingestEndpoint = `${req.protocol}://${req.get('host') ?? 'localhost'}/api/transactions/notification`;
const secret = env.NOTIFICATION_WEBHOOK_SECRET;
const response = {
secretConfigured: Boolean(secret),
secretHint: maskSecret(secret),
webhookSecret: env.isProduction ? null : secret ?? null,
packageWhitelist: env.notificationPackageWhitelist,
ingestedCount: count,
lastNotificationAt: latest?.createdAt ? new Date(latest.createdAt).toISOString() : null,
ingestEndpoint
};
return res.json(response);
};

View File

@@ -0,0 +1,8 @@
import { Router } from 'express';
import { getNotificationStatus } from './notifications.controller.js';
const router = Router();
router.get('/status', getNotificationStatus);
export default router;