// Local settings model + persistence (figma.clientStorage). // // No server auth yet — everything lives on the Figma file locally. Backup/restore // is just a JSON export/import of this same document. (Server auth comes later.) export type ProviderType = 'apinex' export interface ProviderConfig { id: string name: string type: ProviderType baseUrl: string apiKey: string defaultModel: string models: string[] } export interface Settings { version: 1 auth: { mode: 'local' } // later: { mode: 'server', ... } providers: ProviderConfig[] activeProviderId: string | null } export const APINEX_BASE_URL = 'https://api.apinex.bond/v1' const SETTINGS_KEY = 'settings' export function defaultSettings (): Settings { const p = createApinexProvider() return { version: 1, auth: { mode: 'local' }, providers: [p], activeProviderId: p.id } } function genId (): string { return 'p_' + Math.random().toString(36).slice(2, 10) } export function createApinexProvider (): ProviderConfig { return { id: genId(), name: 'APInex', type: 'apinex', baseUrl: APINEX_BASE_URL, apiKey: '', defaultModel: '', models: [] } } export async function loadSettings (): Promise { const defaults = defaultSettings() try { const stored = await figma.clientStorage.getAsync(SETTINGS_KEY) if (stored == null || stored.version !== 1) return defaults const merged: Settings = { ...defaults, ...(stored as Settings) } if (!Array.isArray(merged.providers) || merged.providers.length === 0) { merged.providers = defaults.providers merged.activeProviderId = defaults.providers[0].id } return merged } catch (e) { return defaults } } export async function saveSettings (settings: Settings): Promise { try { await figma.clientStorage.setAsync(SETTINGS_KEY, settings) } catch (e) { /* storage unavailable — ignore */ } } export function settingsToJSON (settings: Settings): string { return JSON.stringify(settings, null, 2) } export function settingsFromJSON (text: string): Settings { const parsed = JSON.parse(text) if (parsed == null || parsed.version !== 1) throw new Error('Unsupported settings version') if (!Array.isArray(parsed.providers)) throw new Error('Invalid settings: providers must be an array') return parsed as Settings }