/** * NIP-95 API management methods for ConfigStorage */ import type { Nip95Config, ConfigData } from './configStorageTypes' import { DEFAULT_NIP95_APIS } from './configStorageTypes' export function getEnabledNip95Apis(config: ConfigData): string[] { return config.nip95Apis .filter((api) => api.enabled) .sort((a, b) => a.priority - b.priority) .map((api) => api.url) } export function getPrimaryNip95ApiFromConfig(config: ConfigData): string { const apis = getEnabledNip95Apis(config) if (apis.length === 0) { const defaultApi = DEFAULT_NIP95_APIS[0] if (!defaultApi) { throw new Error('No default NIP-95 API configured') } return defaultApi.url } const primaryApi = apis[0] if (!primaryApi) { const defaultApi = DEFAULT_NIP95_APIS[0] if (!defaultApi) { throw new Error('No default NIP-95 API configured') } return defaultApi.url } return primaryApi } export function createNip95Config(url: string, enabled: boolean, priority: number): Nip95Config { return { id: `nip95_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, url, enabled, priority, createdAt: Date.now(), } } export function addNip95ApiToConfig(config: ConfigData, url: string, enabled: boolean, priority?: number): ConfigData { const maxPriority = Math.max(...config.nip95Apis.map((a) => a.priority), 0) const newApi = createNip95Config(url, enabled, priority ?? maxPriority + 1) return { ...config, nip95Apis: [...config.nip95Apis, newApi], } } export function updateNip95ApiInConfig( config: ConfigData, id: string, updates: Partial> ): ConfigData { const apiIndex = config.nip95Apis.findIndex((a) => a.id === id) if (apiIndex === -1) { throw new Error(`NIP-95 API with id ${id} not found`) } const existingApi = config.nip95Apis[apiIndex] const updatedApis = [...config.nip95Apis] updatedApis[apiIndex] = { ...existingApi, ...updates, } as Nip95Config return { ...config, nip95Apis: updatedApis, } } export function removeNip95ApiFromConfig(config: ConfigData, id: string): ConfigData { return { ...config, nip95Apis: config.nip95Apis.filter((a) => a.id !== id), } }