first commit
This commit is contained in:
@@ -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);
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
import { Router } from 'express';
|
||||
import { getNotificationStatus } from './notifications.controller.js';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/status', getNotificationStatus);
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user