pediatric-ai-scribe-v3/src/routes/refine.js
ifedan-ed ac8e7bb890 v3.0.0: Auth, admin panel, security fixes, per-tab model selector
- Add authMiddleware to all AI/transcribe routes (were unauthenticated)
- Add full admin panel: user management, registration toggle, stats
- Fix XSS in email verification (escape user.name in HTML)
- Fix missing APP_URL fallback in password reset email
- Add per-tab model selector (respects OpenRouter/Bedrock/Azure lists)
- Fix transcribeAudio to send Authorization header
- Fix labs input: textarea instead of single-line input
- Add structured logging: audit_log, api_log, access_log tables
- Add admin CLI (admin-cli.js) for Docker exec management
- Fix duplicate var duration declaration in ai.js catch block
- Fix RETURNING check case-sensitivity in database.js
2026-03-21 19:25:51 -04:00

71 lines
2.5 KiB
JavaScript

// ============================================================
// REFINE ROUTES — Modify, shorten, clarify any document
// ============================================================
var express = require('express');
var router = express.Router();
var { callAI } = require('../utils/ai');
var PROMPTS = require('../utils/prompts');
var { authMiddleware } = require('../middleware/auth');
// Refine/modify document with instructions
router.post('/refine', authMiddleware, async function(req, res) {
try {
var currentDocument = req.body.currentDocument;
var instructions = req.body.instructions;
var model = req.body.model;
if (!currentDocument) return res.status(400).json({ error: 'No document to refine' });
if (!instructions) return res.status(400).json({ error: 'No instructions provided' });
var result = await callAI([
{ role: 'system', content: PROMPTS.refine },
{ role: 'user', content: 'CURRENT DOCUMENT:\n' + currentDocument + '\n\nUSER INSTRUCTIONS:\n' + instructions }
], { model: model, maxTokens: 6000 });
res.json({ success: true, refined: result.content, model: result.model });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// Shorten document
router.post('/shorten', authMiddleware, async function(req, res) {
try {
var document = req.body.document;
var model = req.body.model;
if (!document) return res.status(400).json({ error: 'No document' });
var result = await callAI([
{ role: 'system', content: PROMPTS.shortenDocument },
{ role: 'user', content: document }
], { model: model });
res.json({ success: true, shortened: result.content, model: result.model });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// Ask AI for clarification questions
router.post('/clarify', authMiddleware, async function(req, res) {
try {
var document = req.body.document;
var context = req.body.context;
var model = req.body.model;
if (!document) return res.status(400).json({ error: 'No document' });
var result = await callAI([
{ role: 'system', content: PROMPTS.askClarification },
{ role: 'user', content: 'Document type: ' + (context || 'medical document') + '\n\nDOCUMENT:\n' + document }
], { model: model, maxTokens: 1000 });
res.json({ success: true, questions: result.content, model: result.model });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
module.exports = router;