mrmd-server 0.1.15 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/api/file.js +6 -3
- package/src/server.js +23 -8
package/package.json
CHANGED
package/src/api/file.js
CHANGED
|
@@ -22,10 +22,13 @@ export function createFileRoutes(ctx) {
|
|
|
22
22
|
*/
|
|
23
23
|
router.get('/scan', async (req, res) => {
|
|
24
24
|
try {
|
|
25
|
-
|
|
25
|
+
// Default to home directory (like Electron's file picker)
|
|
26
|
+
const os = await import('os');
|
|
27
|
+
const root = req.query.root || ctx.projectDir || os.default.homedir();
|
|
26
28
|
const options = {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
// Default to both .md and .ipynb (like Electron)
|
|
30
|
+
extensions: req.query.extensions?.split(',') || ['.md', '.ipynb'],
|
|
31
|
+
maxDepth: parseInt(req.query.maxDepth) || 10,
|
|
29
32
|
includeHidden: req.query.includeHidden === 'true',
|
|
30
33
|
};
|
|
31
34
|
|
package/src/server.js
CHANGED
|
@@ -191,20 +191,31 @@ export async function createServer(config) {
|
|
|
191
191
|
app.use('/api/settings', createSettingsRoutes(context));
|
|
192
192
|
app.use('/api/r', createRRoutes(context));
|
|
193
193
|
|
|
194
|
-
// Proxy for localhost services (bash, pty, etc.)
|
|
194
|
+
// Proxy for localhost services (bash, pty, ai, etc.)
|
|
195
195
|
// Routes /proxy/:port/* to http://127.0.0.1:port/*
|
|
196
|
+
// IMPORTANT: Forwards X-Api-Key-* headers for AI providers
|
|
196
197
|
app.use('/proxy/:port', async (req, res) => {
|
|
197
198
|
const { port } = req.params;
|
|
198
199
|
const targetPath = req.url; // Includes query string
|
|
199
200
|
const targetUrl = `http://127.0.0.1:${port}${targetPath}`;
|
|
200
201
|
|
|
202
|
+
// Build headers - forward all relevant headers including API keys
|
|
203
|
+
const forwardHeaders = {
|
|
204
|
+
'Content-Type': req.headers['content-type'] || 'application/json',
|
|
205
|
+
'Accept': req.headers['accept'] || '*/*',
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// Forward X-* headers (API keys, juice level, model override, etc.)
|
|
209
|
+
for (const [key, value] of Object.entries(req.headers)) {
|
|
210
|
+
if (key.toLowerCase().startsWith('x-')) {
|
|
211
|
+
forwardHeaders[key] = value;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
201
215
|
try {
|
|
202
216
|
const response = await fetch(targetUrl, {
|
|
203
217
|
method: req.method,
|
|
204
|
-
headers:
|
|
205
|
-
'Content-Type': req.headers['content-type'] || 'application/json',
|
|
206
|
-
'Accept': req.headers['accept'] || '*/*',
|
|
207
|
-
},
|
|
218
|
+
headers: forwardHeaders,
|
|
208
219
|
body: ['GET', 'HEAD'].includes(req.method) ? undefined : JSON.stringify(req.body),
|
|
209
220
|
});
|
|
210
221
|
|
|
@@ -324,9 +335,13 @@ export async function createServer(config) {
|
|
|
324
335
|
|
|
325
336
|
upstream.on('open', () => {
|
|
326
337
|
syncWss.handleUpgrade(request, socket, head, (clientWs) => {
|
|
327
|
-
// Bidirectional proxy
|
|
328
|
-
clientWs.on('message', (data) =>
|
|
329
|
-
|
|
338
|
+
// Bidirectional proxy - preserve message type (binary/text)
|
|
339
|
+
clientWs.on('message', (data, isBinary) => {
|
|
340
|
+
upstream.send(data, { binary: isBinary });
|
|
341
|
+
});
|
|
342
|
+
upstream.on('message', (data, isBinary) => {
|
|
343
|
+
clientWs.send(data, { binary: isBinary });
|
|
344
|
+
});
|
|
330
345
|
clientWs.on('close', () => upstream.close());
|
|
331
346
|
upstream.on('close', () => clientWs.close());
|
|
332
347
|
clientWs.on('error', () => upstream.close());
|