Improve WeChat MP replies and ship MindSpace/H5 production updates.
Add WeChat service account routing with sync acks, connectivity tests, and context isolation; document deploy runbooks; and bundle related MindSpace, voice, Plaza, and server gateway changes for production rollout. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+57
-1
@@ -31,8 +31,18 @@ function plazaRouteError(res, req, error) {
|
||||
* @param {object|null} deps.llmProviderService
|
||||
* @param {object|null} deps.plazaPosts
|
||||
* @param {object|null} deps.plazaOps
|
||||
* @param {object|null} deps.wechatAdmin
|
||||
*/
|
||||
export function createAdminApi({ jsonBody, getToken, ready, userAuth, llmProviderService, plazaPosts, plazaOps }) {
|
||||
export function createAdminApi({
|
||||
jsonBody,
|
||||
getToken,
|
||||
ready,
|
||||
userAuth,
|
||||
llmProviderService,
|
||||
plazaPosts,
|
||||
plazaOps,
|
||||
wechatAdmin,
|
||||
}) {
|
||||
function requireAdmin(req, res, next) {
|
||||
if (!req.currentUser || req.currentUser.role !== 'admin') {
|
||||
res.status(403).json({ message: '需要管理员权限' });
|
||||
@@ -237,6 +247,52 @@ export function createAdminApi({ jsonBody, getToken, ready, userAuth, llmProvide
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
adminApi.get('/wechat/summary', requireAdmin, async (_req, res) => {
|
||||
if (!wechatAdmin) return res.status(503).json({ message: '服务号管理未启用' });
|
||||
res.json(await wechatAdmin.getSummary());
|
||||
});
|
||||
|
||||
adminApi.get('/wechat/bindings', requireAdmin, async (req, res) => {
|
||||
if (!wechatAdmin) return res.status(503).json({ message: '服务号管理未启用' });
|
||||
res.json(await wechatAdmin.listBindings(req.query));
|
||||
});
|
||||
|
||||
adminApi.get('/wechat/messages', requireAdmin, async (req, res) => {
|
||||
if (!wechatAdmin) return res.status(503).json({ message: '服务号管理未启用' });
|
||||
res.json(await wechatAdmin.listMessages(req.query));
|
||||
});
|
||||
|
||||
adminApi.get('/wechat/digests', requireAdmin, async (req, res) => {
|
||||
if (!wechatAdmin) return res.status(503).json({ message: '服务号管理未启用' });
|
||||
res.json(await wechatAdmin.listDigests(req.query));
|
||||
});
|
||||
|
||||
adminApi.get('/wechat/deliveries', requireAdmin, async (req, res) => {
|
||||
if (!wechatAdmin) return res.status(503).json({ message: '服务号管理未启用' });
|
||||
res.json(await wechatAdmin.listDeliveries(req.query));
|
||||
});
|
||||
|
||||
adminApi.post('/wechat/users/:userId/route/clear', requireAdmin, async (req, res) => {
|
||||
if (!wechatAdmin) return res.status(503).json({ message: '服务号管理未启用' });
|
||||
const result = await wechatAdmin.clearRouteForUser(req.params.userId);
|
||||
if (!result.ok) return res.status(404).json({ message: result.message ?? '清除失败' });
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
adminApi.post('/wechat/digests/:id/cancel', requireAdmin, async (req, res) => {
|
||||
if (!wechatAdmin) return res.status(503).json({ message: '服务号管理未启用' });
|
||||
const result = await wechatAdmin.cancelDigest(req.params.id);
|
||||
if (!result.ok) return res.status(404).json({ message: '订阅不存在或已暂停' });
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
adminApi.post('/wechat/digests/:id/resume', requireAdmin, async (req, res) => {
|
||||
if (!wechatAdmin) return res.status(503).json({ message: '服务号管理未启用' });
|
||||
const result = await wechatAdmin.resumeDigest(req.params.id);
|
||||
if (!result.ok) return res.status(404).json({ message: result.message ?? '恢复失败' });
|
||||
res.json(result);
|
||||
});
|
||||
|
||||
adminApi.get('/llm-providers/catalog', requireAdmin, (_req, res) => {
|
||||
if (!llmProviderService) return res.status(503).json({ message: '未启用 LLM 配置' });
|
||||
res.json({ catalog: llmProviderService.catalog });
|
||||
|
||||
Reference in New Issue
Block a user