UNPKG

@switchbot/homebridge-switchbot

Version:

The SwitchBot plugin allows you to access your SwitchBot device(s) from HomeKit.

106 lines (94 loc) 3.67 kB
import { uiLog } from './logger.js' import { hideBusyUi, showBusyUi } from './modal.js' import { toastError, toastSuccess, toastWarning } from './toast.js' export async function loadCredentialStatus(): Promise<void> { try { if (typeof homebridge.getPluginConfig !== 'function') { uiLog.error('Homebridge UI API not available') return } const configArr = await homebridge.getPluginConfig() const config = Array.isArray(configArr) && configArr.length > 0 ? configArr[0] : {} const token = config.openApiToken || '' const secret = config.openApiSecret || '' const tokenStatus = document.getElementById('tokenStatus') const secretStatus = document.getElementById('secretStatus') if (!tokenStatus || !secretStatus) { return } if (token) { tokenStatus.textContent = `✓ Configured (${token.length} characters)` tokenStatus.classList.add('ok') } else { tokenStatus.textContent = 'Not configured' tokenStatus.classList.remove('ok') } if (secret) { secretStatus.textContent = `✓ Configured (${secret.length} characters)` secretStatus.classList.add('ok') } else { secretStatus.textContent = 'Not configured' secretStatus.classList.remove('ok') } } catch (e) { uiLog.error('Error loading credentials:', e) } } export async function saveCredentials(): Promise<void> { const token = (document.getElementById('token') as HTMLInputElement)?.value const secret = (document.getElementById('secret') as HTMLInputElement)?.value const saveStatus = document.getElementById('saveStatus') const saveBtn = document.getElementById('saveBtn') as HTMLButtonElement if (!saveStatus || !saveBtn) { return } if (!token || !secret) { saveStatus.textContent = 'Please enter both token and secret' saveStatus.classList.add('error') toastWarning('Please enter both token and secret') return } try { showBusyUi() saveBtn.disabled = true saveBtn.textContent = 'Saving...' uiLog.info('Saving credentials...') if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') { throw new TypeError('Homebridge UI API not available') } const configArr = await homebridge.getPluginConfig() if (!Array.isArray(configArr) || configArr.length === 0) { throw new Error('No plugin config found') } const config = configArr[0] config.openApiToken = token config.openApiSecret = secret await homebridge.updatePluginConfig([config]) if (typeof homebridge.savePluginConfig === 'function') { await homebridge.savePluginConfig() } saveStatus.textContent = `✓ Credentials saved successfully` saveStatus.classList.remove('error') saveStatus.classList.add('success-msg') toastSuccess('Credentials saved successfully') // Clear inputs after successful save ;(document.getElementById('token') as HTMLInputElement).value = '' ;(document.getElementById('secret') as HTMLInputElement).value = '' // Reload status to verify save setTimeout(loadCredentialStatus, 500) // Clear status message setTimeout(() => { saveStatus.textContent = '' saveStatus.classList.remove('success-msg') }, 3000) } catch (e) { uiLog.error('Save error:', e) saveStatus.textContent = `Error: ${e instanceof Error ? e.message : 'Failed to save'}` saveStatus.classList.add('error') toastError(e instanceof Error ? e.message : 'Failed to save credentials') } finally { hideBusyUi() saveBtn.disabled = false saveBtn.textContent = 'Save Credentials' } }