testing updates

This commit is contained in:
Raven Scott
2026-02-21 03:23:32 -05:00
parent 8df0f81a57
commit 0b6a34d47e
4 changed files with 166 additions and 6 deletions
+25
View File
@@ -338,6 +338,31 @@ browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
.catch((err) => sendResponse({ ok: false, error: err.message }));
return true;
}
// Handle checkUpdate request from dashboard
if (message.action === 'checkUpdate') {
// For now, return current version - could be expanded to check remote
sendResponse({ ok: true, version: '1.0.0', updateAvailable: false });
return false;
}
// Handle restartHost request from dashboard
if (message.action === 'restartHost') {
if (port) {
port.disconnect();
}
// Clear state
activeConnections.clear();
updateExtensionState();
// Reconnect
if (reconnectTimer) {
clearTimeout(reconnectTimer);
reconnectTimer = null;
}
connect();
sendResponse({ ok: true });
return false;
}
});
// Open dashboard when extension icon is clicked
+80 -3
View File
@@ -468,6 +468,7 @@
<rect x="3" y="3" width="18" height="18" rx="2"/><line x1="9" y1="3" x2="9" y2="21"/>
</svg>
Tabs
<span class="badge" id="tabCount">0</span>
</div>
<div class="nav-item" data-page="logs">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -476,7 +477,6 @@
<line x1="16" y1="17" x2="8" y2="17"/><polyline points="10,9 9,9 8,9"/>
</svg>
Logs
<span class="badge" id="logCount">0</span>
</div>
<div class="nav-item" data-page="settings">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -624,10 +624,17 @@
</div>
<div class="toggle" id="toggleDebug" data-setting="debug"></div>
</div>
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">Connection Notifications</div>
<div class="setting-desc">Show notification when peers connect/disconnect</div>
</div>
<div class="toggle" id="toggleConnectionNotify" data-setting="connectionNotifications"></div>
</div>
</div>
<div class="settings-group">
<h3>Defaults</h3>
<h3>Swarm Defaults</h3>
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">Default App Name</div>
@@ -638,10 +645,35 @@
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">Default Max Peers</div>
<div class="setting-desc">Maximum peer connections per swarm</div>
<div class="setting-desc">Maximum peer connections per swarm (0 = unlimited)</div>
</div>
<input type="number" id="defaultMaxPeers" style="width: 100px; padding: 0.5rem; background: #27272a; border: 1px solid #3f3f46; border-radius: 6px; color: #e4e4e7;">
</div>
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">Default Request Timeout (ms)</div>
<div class="setting-desc">Timeout for requests (0 = no timeout)</div>
</div>
<input type="number" id="defaultRequestTimeoutMs" style="width: 100px; padding: 0.5rem; background: #27272a; border: 1px solid #3f3f46; border-radius: 6px; color: #e4e4e7;">
</div>
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">Ready Timeout (ms)</div>
<div class="setting-desc">Timeout for BridgeSwarm.ready() (0 = wait forever)</div>
</div>
<input type="number" id="readyTimeoutMs" style="width: 100px; padding: 0.5rem; background: #27272a; border: 1px solid #3f3f46; border-radius: 6px; color: #e4e4e7;">
</div>
</div>
<div class="settings-group">
<h3>Injection</h3>
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">Disable on file:// URLs</div>
<div class="setting-desc">Do not inject BridgeSwarm on local files</div>
</div>
<div class="toggle" id="toggleDisableFileUrls" data-setting="disableOnFileUrls"></div>
</div>
</div>
<div style="margin-top: 1.5rem;">
@@ -649,6 +681,51 @@
</div>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="settings-group">
<h3>Software Update</h3>
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">Current Version</div>
<div class="setting-desc" id="currentVersion">v1.0.0</div>
</div>
</div>
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">Native Host Path</div>
<div class="setting-desc" id="nativeHostPath" style="font-family: monospace; font-size: 0.75rem;">/path/to/bridge-swarm-host</div>
</div>
</div>
<div style="margin-top: 1rem;">
<button class="btn btn-primary" id="btnCheckUpdate">Check for Updates</button>
<button class="btn btn-secondary" id="btnRestartHost" style="margin-left: 0.5rem;">Restart Native Host</button>
</div>
<div id="updateStatus" style="margin-top: 1rem; font-size: 0.85rem;"></div>
</div>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="settings-group">
<h3>About</h3>
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">BridgeSwarm</div>
<div class="setting-desc">P2P Hyperswarm in the browser via native messaging</div>
</div>
</div>
<div class="setting-row">
<div class="setting-info">
<div class="setting-label">Repository</div>
<div class="setting-desc"><a href="#" id="repoLink" style="color: #22d3ee;">git.ssh.surf/snxraven/BridgeSwarm</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Logs Page -->
+59 -1
View File
@@ -70,16 +70,24 @@ function loadSettings() {
function updateSettingsUI() {
$('toggleNotify').classList.toggle('active', settings.notifyOnDisconnect === true);
$('toggleDebug').classList.toggle('active', settings.debug === true);
$('toggleConnectionNotify').classList.toggle('active', settings.connectionNotifications === true);
$('toggleDisableFileUrls').classList.toggle('active', settings.disableOnFileUrls === true);
$('defaultAppName').value = settings.defaultAppName || 'bridge-swarm';
$('defaultMaxPeers').value = settings.defaultMaxPeers || '';
$('defaultMaxPeers').value = settings.defaultMaxPeers ?? '';
$('defaultRequestTimeoutMs').value = settings.defaultRequestTimeoutMs ?? '';
$('readyTimeoutMs').value = settings.readyTimeoutMs ?? '';
}
// Save settings
function saveSettings() {
settings.notifyOnDisconnect = $('toggleNotify').classList.contains('active');
settings.debug = $('toggleDebug').classList.contains('active');
settings.connectionNotifications = $('toggleConnectionNotify').classList.contains('active');
settings.disableOnFileUrls = $('toggleDisableFileUrls').classList.contains('active');
settings.defaultAppName = $('defaultAppName').value || 'bridge-swarm';
settings.defaultMaxPeers = parseInt($('defaultMaxPeers').value) || 0;
settings.defaultRequestTimeoutMs = parseInt($('defaultRequestTimeoutMs').value) || 0;
settings.readyTimeoutMs = parseInt($('readyTimeoutMs').value) || 0;
chrome.storage.local.set({ [SETTINGS_KEY]: settings }, () => {
log('Settings saved');
@@ -110,6 +118,7 @@ function updateDashboard(state) {
// Badges
$('swarmCount').textContent = state.stats.totalSwarms;
$('connCount').textContent = state.stats.totalConnections;
$('tabCount').textContent = state.tabs.length;
// Recent connections
const connections = [];
@@ -336,6 +345,55 @@ function setupEvents() {
() => {}
);
});
// Software update handlers
$('btnCheckUpdate')?.addEventListener('click', async () => {
const statusEl = $('updateStatus');
statusEl.innerHTML = '<span style="color: #fbbf24;">Checking for updates...</span>';
try {
const response = await new Promise((resolve) => {
chrome.runtime.sendMessage(
{ target: 'bridge-swarm-native', action: 'checkUpdate' },
resolve
);
});
if (response?.ok) {
if (response.updateAvailable) {
statusEl.innerHTML = `<span style="color: #22d3ee;">Update available: ${response.version}</span>`;
} else {
statusEl.innerHTML = '<span style="color: #9ece6a;">You are running the latest version.</span>';
}
} else {
statusEl.innerHTML = `<span style="color: #f43f5e;">Error: ${response?.error || 'Unknown error'}</span>`;
}
} catch (e) {
statusEl.innerHTML = `<span style="color: #f43f5e;">Error: ${e.message}</span>`;
}
});
$('btnRestartHost')?.addEventListener('click', async () => {
const statusEl = $('updateStatus');
statusEl.innerHTML = '<span style="color: #fbbf24;">Restarting native host...</span>';
try {
const response = await new Promise((resolve) => {
chrome.runtime.sendMessage(
{ target: 'bridge-swarm-native', action: 'restartHost' },
resolve
);
});
if (response?.ok) {
statusEl.innerHTML = '<span style="color: #9ece6a;">Native host restarted.</span>';
} else {
statusEl.innerHTML = `<span style="color: #f43f5e;">Error: ${response?.error || 'Unknown error'}</span>`;
}
} catch (e) {
statusEl.innerHTML = `<span style="color: #f43f5e;">Error: ${e.message}</span>`;
}
});
}
// Initialize