diff --git a/web/src/device-management.ts b/web/src/device-management.ts index 0599c1c..36bb61d 100644 --- a/web/src/device-management.ts +++ b/web/src/device-management.ts @@ -2,96 +2,101 @@ // Procedural style with proper types (no OOP) interface RegenerateTokenResponse { - message: string; - auth_token: string; - device: { - id: string; - device_name: string; - device_type: string; - auth_token: string; - sync_enabled: boolean; - auto_sync: boolean; - sync_frequency_minutes: number; - }; - sync_urls?: { - sync_url?: string; - markup?: string; - bookmark?: string; - init?: string; - progress?: string; - metadata?: string; - bookmarks?: string; - }; + message: string; + auth_token: string; + device: { + id: string; + device_name: string; + device_type: string; + auth_token: string; + sync_enabled: boolean; + auto_sync: boolean; + sync_frequency_minutes: number; + }; + sync_urls?: { + sync_url?: string; + markup?: string; + bookmark?: string; + init?: string; + progress?: string; + metadata?: string; + bookmarks?: string; + }; } // Copy sync URL or auth token to clipboard function copyToClipboard(text: string, label: string): void { - navigator.clipboard.writeText(text) - .then(() => { - const toast = (window as any).showToast; - if (toast) { - toast.success(`${label} copied to clipboard`); - } - }) - .catch((err: unknown) => { - console.error('Failed to copy:', err); - const toast = (window as any).showToast; - if (toast) { - toast.error('Failed to copy to clipboard'); - } - }); + navigator.clipboard + .writeText(text) + .then(() => { + const toast = (window as any).showToast; + if (toast) { + toast.success(`${label} copied to clipboard`); + } + }) + .catch((err: unknown) => { + console.error("Failed to copy:", err); + const toast = (window as any).showToast; + if (toast) { + toast.error("Failed to copy to clipboard"); + } + }); } // Regenerate device token with confirmation function regenerateDeviceToken(deviceId: string, event: Event): void { - const confirmation = '⚠️ This will revoke current token and generate a new one.\n\n' + - 'The old token will immediately stop working.\n\n' + - 'You will need to update your device configuration with new token.\n\n' + - 'Continue?'; + const confirmation = + "⚠️ This will revoke current token and generate a new one.\n\n" + + "The old token will immediately stop working.\n\n" + + "You will need to update your device configuration with new token.\n\n" + + "Continue?"; - if (!confirm(confirmation)) { - return; - } + if (!confirm(confirmation)) { + return; + } - const btn = event.target as HTMLButtonElement; - const originalText = btn.innerHTML; - btn.disabled = true; - btn.innerHTML = '🔄 Regenerating...'; + const btn = event.target as HTMLButtonElement; + const originalText = btn.innerHTML; + btn.disabled = true; + btn.innerHTML = "🔄 Regenerating..."; - fetch(`/api/devices/${deviceId}/regenerate-token`, { - method: 'PUT', - headers: { - 'Content-Type': 'application/json', - } - }) - .then((response: Response) => { - if (!response.ok) { - throw new Error('Failed to regenerate token'); - } - return response.json() as Promise; - }) - .then((_data: RegenerateTokenResponse) => { - const toast = (window as any).showToast; - if (toast) { - toast.success('Token regenerated successfully - update your device config'); - } - // Reload page to show new token - setTimeout(() => location.reload(), 1500); - }) - .catch((error: unknown) => { - console.error('Error:', error); - const toast = (window as any).showToast; - if (toast) { - toast.error('Failed to regenerate token'); - } - if (btn) { - btn.disabled = false; - btn.innerHTML = originalText; - } - }); + const token = localStorage.getItem("token"); + fetch(`/api/devices/${deviceId}/regenerate-token`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${token}`, + }, + }) + .then((response: Response) => { + if (!response.ok) { + throw new Error("Failed to regenerate token"); + } + return response.json() as Promise; + }) + .then((_data: RegenerateTokenResponse) => { + const toast = (window as any).showToast; + if (toast) { + toast.success( + "Token regenerated successfully - update your device config", + ); + } + // Reload page to show new token + setTimeout(() => location.reload(), 1500); + }) + .catch((error: unknown) => { + console.error("Error:", error); + const toast = (window as any).showToast; + if (toast) { + toast.error("Failed to regenerate token"); + } + if (btn) { + btn.disabled = false; + btn.innerHTML = originalText; + } + }); } // Export functions for global access (called from template onclick attributes) window.copyToClipboard = copyToClipboard; window.regenerateDeviceToken = regenerateDeviceToken; -