81 lines
2.2 KiB
TypeScript
81 lines
2.2 KiB
TypeScript
/**
|
|
* 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<Omit<Nip95Config, 'id' | 'createdAt'>>
|
|
): 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),
|
|
}
|
|
}
|