@ycniuqton/devlens 0.1.11 → 0.1.12
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/dist/routes/integrations.js +23 -1
- package/dist/routes/integrations.js.map +1 -1
- package/dist/server.js +19 -0
- package/dist/server.js.map +1 -1
- package/dist/services/settings.d.ts +1 -0
- package/dist/services/settings.js +5 -2
- package/dist/services/settings.js.map +1 -1
- package/package.json +2 -2
- package/public/css/style.css +35 -0
- package/public/index.html +12 -0
- package/public/js/integrations.js +35 -0
|
@@ -48,10 +48,32 @@ exports.integrationsRouter.post('/tunnel/start', async (req, res) => {
|
|
|
48
48
|
res.status(500).json({ error: err.message });
|
|
49
49
|
}
|
|
50
50
|
});
|
|
51
|
-
exports.integrationsRouter.post('/tunnel/stop', (
|
|
51
|
+
exports.integrationsRouter.post('/tunnel/stop', (req, res) => {
|
|
52
52
|
(0, tunnel_1.stopTunnel)();
|
|
53
|
+
// Always re-enable direct IP on disconnect so user is never locked out
|
|
54
|
+
const settingsService = req.app.locals.settingsService;
|
|
55
|
+
if (settingsService)
|
|
56
|
+
settingsService.updateSettings({ directIpAccess: true });
|
|
53
57
|
res.json({ ok: true });
|
|
54
58
|
});
|
|
59
|
+
exports.integrationsRouter.get('/direct-ip', (req, res) => {
|
|
60
|
+
const settingsService = req.app.locals.settingsService;
|
|
61
|
+
const enabled = settingsService?.getSettings().directIpAccess !== false;
|
|
62
|
+
res.json({ enabled });
|
|
63
|
+
});
|
|
64
|
+
exports.integrationsRouter.post('/direct-ip', (req, res) => {
|
|
65
|
+
try {
|
|
66
|
+
const { enabled } = req.body;
|
|
67
|
+
const settingsService = req.app.locals.settingsService;
|
|
68
|
+
if (!settingsService)
|
|
69
|
+
return res.status(500).json({ error: 'Settings service not available' });
|
|
70
|
+
settingsService.updateSettings({ directIpAccess: !!enabled });
|
|
71
|
+
res.json({ ok: true, enabled: !!enabled });
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
res.status(500).json({ error: err.message });
|
|
75
|
+
}
|
|
76
|
+
});
|
|
55
77
|
exports.integrationsRouter.get('/tunnel/ngrok-token', (req, res) => {
|
|
56
78
|
const settingsService = req.app.locals.settingsService;
|
|
57
79
|
const token = settingsService?.getNgrokAuthToken();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/routes/integrations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/routes/integrations.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -39,12 +39,31 @@ function createServer(options) {
|
|
|
39
39
|
app.locals.settingsService = settingsService;
|
|
40
40
|
app.locals.projectDir = options.projectDir;
|
|
41
41
|
app.locals.port = options.port;
|
|
42
|
+
// Block non-localhost requests when directIpAccess is disabled
|
|
43
|
+
app.use((req, res, next) => {
|
|
44
|
+
const ip = req.socket.remoteAddress || '';
|
|
45
|
+
const isLocal = ip === '127.0.0.1' || ip === '::1' || ip === '::ffff:127.0.0.1';
|
|
46
|
+
if (!isLocal && !settingsService.getSettings().directIpAccess) {
|
|
47
|
+
return res.status(403).send('Direct IP access is disabled. Use the tunnel URL.');
|
|
48
|
+
}
|
|
49
|
+
next();
|
|
50
|
+
});
|
|
42
51
|
// API routes
|
|
43
52
|
app.get('/api/info', (_req, res) => {
|
|
53
|
+
const os = require('os');
|
|
54
|
+
const networkIps = [];
|
|
55
|
+
for (const ifaces of Object.values(os.networkInterfaces())) {
|
|
56
|
+
for (const iface of ifaces) {
|
|
57
|
+
if (iface.family === 'IPv4' && !iface.internal)
|
|
58
|
+
networkIps.push(iface.address);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
44
61
|
res.json({
|
|
45
62
|
projectDir: options.projectDir,
|
|
46
63
|
projectName: path_1.default.basename(options.projectDir),
|
|
47
64
|
port: options.port,
|
|
65
|
+
localUrl: `http://localhost:${options.port}`,
|
|
66
|
+
networkUrls: networkIps.map(ip => `http://${ip}:${options.port}`),
|
|
48
67
|
});
|
|
49
68
|
});
|
|
50
69
|
app.use('/api', diff_1.diffRouter);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;AAkBA,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ function createSettingsService(projectDir) {
|
|
|
37
37
|
fs_1.default.mkdirSync(devlensDir, { recursive: true });
|
|
38
38
|
}
|
|
39
39
|
if (!fs_1.default.existsSync(settingsFile)) {
|
|
40
|
-
const initial = { ignorePatterns: DEFAULT_IGNORE_PATTERNS };
|
|
40
|
+
const initial = { ignorePatterns: DEFAULT_IGNORE_PATTERNS, directIpAccess: true };
|
|
41
41
|
fs_1.default.writeFileSync(settingsFile, JSON.stringify(initial, null, 2));
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -47,10 +47,12 @@ function createSettingsService(projectDir) {
|
|
|
47
47
|
const data = JSON.parse(fs_1.default.readFileSync(settingsFile, 'utf-8'));
|
|
48
48
|
return {
|
|
49
49
|
ignorePatterns: Array.isArray(data.ignorePatterns) ? data.ignorePatterns : DEFAULT_IGNORE_PATTERNS,
|
|
50
|
+
ngrokAuthToken: data.ngrokAuthToken,
|
|
51
|
+
directIpAccess: data.directIpAccess !== false, // default true
|
|
50
52
|
};
|
|
51
53
|
}
|
|
52
54
|
catch {
|
|
53
|
-
return { ignorePatterns: DEFAULT_IGNORE_PATTERNS };
|
|
55
|
+
return { ignorePatterns: DEFAULT_IGNORE_PATTERNS, directIpAccess: true };
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
function save(settings) {
|
|
@@ -66,6 +68,7 @@ function createSettingsService(projectDir) {
|
|
|
66
68
|
const merged = {
|
|
67
69
|
ignorePatterns: input.ignorePatterns ?? current.ignorePatterns,
|
|
68
70
|
ngrokAuthToken: input.ngrokAuthToken !== undefined ? input.ngrokAuthToken : current.ngrokAuthToken,
|
|
71
|
+
directIpAccess: input.directIpAccess !== undefined ? input.directIpAccess : current.directIpAccess,
|
|
69
72
|
};
|
|
70
73
|
// Dedupe + trim + drop empties
|
|
71
74
|
merged.ignorePatterns = Array.from(new Set(merged.ignorePatterns.map(p => (p || '').trim()).filter(Boolean)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/services/settings.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/services/settings.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ycniuqton/devlens",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"homepage": "https://github.com/ycniuqton/Devlens#readme",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ycniuqton/devlens": "^0.1.
|
|
32
|
+
"@ycniuqton/devlens": "^0.1.11",
|
|
33
33
|
"better-sqlite3": "^12.8.0",
|
|
34
34
|
"chokidar": "^3.6.0",
|
|
35
35
|
"cloudflared": "^0.7.1",
|
package/public/css/style.css
CHANGED
|
@@ -1334,6 +1334,41 @@ body {
|
|
|
1334
1334
|
border-radius: var(--radius-md);
|
|
1335
1335
|
}
|
|
1336
1336
|
|
|
1337
|
+
.direct-ip-row {
|
|
1338
|
+
display: flex;
|
|
1339
|
+
align-items: center;
|
|
1340
|
+
justify-content: space-between;
|
|
1341
|
+
gap: var(--sp-4);
|
|
1342
|
+
margin-top: var(--sp-4);
|
|
1343
|
+
padding: var(--sp-3) var(--sp-4);
|
|
1344
|
+
background: var(--color-surface-2);
|
|
1345
|
+
border: 1px solid var(--color-border);
|
|
1346
|
+
border-radius: var(--radius-md);
|
|
1347
|
+
}
|
|
1348
|
+
.direct-ip-label { font-size: var(--text-sm); font-weight: 500; color: var(--color-text); display: block; }
|
|
1349
|
+
.direct-ip-desc { font-size: var(--text-xs); color: var(--color-text-muted); margin-top: 2px; display: block; }
|
|
1350
|
+
|
|
1351
|
+
.toggle-switch { position: relative; display: inline-block; width: 40px; height: 22px; flex-shrink: 0; }
|
|
1352
|
+
.toggle-switch input { opacity: 0; width: 0; height: 0; }
|
|
1353
|
+
.toggle-slider {
|
|
1354
|
+
position: absolute; inset: 0;
|
|
1355
|
+
background: var(--color-border);
|
|
1356
|
+
border-radius: 22px;
|
|
1357
|
+
cursor: pointer;
|
|
1358
|
+
transition: background 0.2s;
|
|
1359
|
+
}
|
|
1360
|
+
.toggle-slider:before {
|
|
1361
|
+
content: '';
|
|
1362
|
+
position: absolute;
|
|
1363
|
+
width: 16px; height: 16px;
|
|
1364
|
+
left: 3px; top: 3px;
|
|
1365
|
+
background: white;
|
|
1366
|
+
border-radius: 50%;
|
|
1367
|
+
transition: transform 0.2s;
|
|
1368
|
+
}
|
|
1369
|
+
.toggle-switch input:checked + .toggle-slider { background: var(--color-primary, #6366f1); }
|
|
1370
|
+
.toggle-switch input:checked + .toggle-slider:before { transform: translateX(18px); }
|
|
1371
|
+
|
|
1337
1372
|
.tunnel-active-card {
|
|
1338
1373
|
display: flex;
|
|
1339
1374
|
align-items: center;
|
package/public/index.html
CHANGED
|
@@ -371,6 +371,18 @@
|
|
|
371
371
|
<p class="section-hint">Cloudflare Tunnel works out of the box. ngrok requires a free auth token.</p>
|
|
372
372
|
</div>
|
|
373
373
|
|
|
374
|
+
<!-- Direct IP access toggle -->
|
|
375
|
+
<div class="direct-ip-row">
|
|
376
|
+
<div>
|
|
377
|
+
<span class="direct-ip-label">Direct IP Access</span>
|
|
378
|
+
<span class="direct-ip-desc">Allow access via <code>http://IP:PORT</code>. Disable to restrict access to tunnel only.</span>
|
|
379
|
+
</div>
|
|
380
|
+
<label class="toggle-switch">
|
|
381
|
+
<input type="checkbox" id="direct-ip-toggle" onchange="setDirectIpAccess(this.checked)" checked>
|
|
382
|
+
<span class="toggle-slider"></span>
|
|
383
|
+
</label>
|
|
384
|
+
</div>
|
|
385
|
+
|
|
374
386
|
<!-- ngrok token setup (shown when token missing) -->
|
|
375
387
|
<div id="ngrok-token-setup" style="display:none" class="ngrok-token-card">
|
|
376
388
|
<p style="margin:0 0 var(--sp-3);color:var(--color-text-secondary);font-size:var(--text-sm)">
|
|
@@ -60,6 +60,18 @@ async function startTunnelAction(provider) {
|
|
|
60
60
|
|
|
61
61
|
async function stopTunnelAction() {
|
|
62
62
|
try {
|
|
63
|
+
// If currently accessing via tunnel URL, redirect to local URL first
|
|
64
|
+
const tunnelStatus = await fetch('/api/integrations/tunnel/status').then(r => r.json());
|
|
65
|
+
const onTunnel = tunnelStatus.url && window.location.href.startsWith(tunnelStatus.url);
|
|
66
|
+
|
|
67
|
+
if (onTunnel) {
|
|
68
|
+
const info = await fetch('/api/info').then(r => r.json());
|
|
69
|
+
const fallback = info.networkUrls?.[0] || info.localUrl || `http://localhost:${info.port}`;
|
|
70
|
+
await fetch('/api/integrations/tunnel/stop', { method: 'POST' });
|
|
71
|
+
window.location.href = fallback + '/integrations';
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
63
75
|
await fetch('/api/integrations/tunnel/stop', { method: 'POST' });
|
|
64
76
|
updateTunnelUI({ status: 'disconnected' });
|
|
65
77
|
showToast('Tunnel disconnected', 'info');
|
|
@@ -217,9 +229,32 @@ function escapeHtml(str) {
|
|
|
217
229
|
return div.innerHTML;
|
|
218
230
|
}
|
|
219
231
|
|
|
232
|
+
async function loadDirectIpStatus() {
|
|
233
|
+
try {
|
|
234
|
+
const res = await fetch('/api/integrations/direct-ip');
|
|
235
|
+
const data = await res.json();
|
|
236
|
+
const toggle = document.getElementById('direct-ip-toggle');
|
|
237
|
+
if (toggle) toggle.checked = data.enabled;
|
|
238
|
+
} catch {}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
async function setDirectIpAccess(enabled) {
|
|
242
|
+
try {
|
|
243
|
+
await fetch('/api/integrations/direct-ip', {
|
|
244
|
+
method: 'POST',
|
|
245
|
+
headers: { 'Content-Type': 'application/json' },
|
|
246
|
+
body: JSON.stringify({ enabled }),
|
|
247
|
+
});
|
|
248
|
+
showToast(enabled ? 'Direct IP access enabled' : 'Direct IP access disabled', 'info');
|
|
249
|
+
} catch {
|
|
250
|
+
showToast('Failed to update direct IP setting', 'error');
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
220
254
|
window.addEventListener('tab-activated', (e) => {
|
|
221
255
|
if (e.detail.tab === 'integrations') {
|
|
222
256
|
loadTunnelStatus();
|
|
257
|
+
loadDirectIpStatus();
|
|
223
258
|
loadIntegrations();
|
|
224
259
|
}
|
|
225
260
|
});
|