[object Object]

← back to New Import Viewer

Serve /nav-agent/* static assets — raw http routed index/drill.js but not the nav-agent drop-in, so /nav-agent/* 404'd; add traversal-guarded route

d0de55395ca14e3ab568a4bd7b7453b3a3ea9d8b · 2026-08-13 14:08:38 -0700 · Steve Abrams

Files touched

Diff

commit d0de55395ca14e3ab568a4bd7b7453b3a3ea9d8b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Aug 13 14:08:38 2026 -0700

    Serve /nav-agent/* static assets — raw http routed index/drill.js but not the nav-agent drop-in, so /nav-agent/* 404'd; add traversal-guarded route
---
 server.js | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/server.js b/server.js
index 39ae758..3dc76a4 100644
--- a/server.js
+++ b/server.js
@@ -494,6 +494,15 @@ const server = http.createServer((req, res) => {
       try { return send(res, 200, fs.readFileSync(path.join(__dirname, 'public', 'drill.js')), 'text/javascript; charset=utf-8'); }
       catch { return send(res, 404, '// not found', 'text/javascript'); }
     }
+    if (u.pathname.startsWith('/nav-agent/')) {
+      // universal grid-controls drop-in (nav-agent.js/.css) — traversal-guarded static
+      const PUB = path.join(__dirname, 'public');
+      const fp = path.normalize(path.join(PUB, decodeURIComponent(u.pathname)));
+      if (fp.startsWith(PUB + path.sep) && fs.existsSync(fp) && fs.statSync(fp).isFile()) {
+        return send(res, 200, fs.readFileSync(fp), fp.endsWith('.css') ? 'text/css; charset=utf-8' : 'text/javascript; charset=utf-8');
+      }
+      return send(res, 404, '// not found', 'text/javascript');
+    }
     if (u.pathname === '/img') { serveImg(u.searchParams.get('u') || '', res); return; }
     if (u.pathname === '/api/similar') {
       const sku = u.searchParams.get('sku');

← a665308 nav-agent: universal grid-controls drop-in on internal viewe  ·  back to New Import Viewer  ·  chore: v1.1.1 (nav-agent static-serving fix, session close) f03b673 →